在职党员社区报到,换届选举
This commit is contained in:
221
src/project/pingchang/AppGeneralElection/AppGeneralElection.vue
Normal file
221
src/project/pingchang/AppGeneralElection/AppGeneralElection.vue
Normal file
@@ -0,0 +1,221 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view v-if="isShow" style="height:100%;">
|
||||
<view class="session-list">
|
||||
<view class="session-item" v-for="(item, index) in list" :key="index">
|
||||
<view class="item-top">
|
||||
<view class="item-title mar-b9">{{item.title}}</view>
|
||||
<view class="item-info">
|
||||
<text class="info-label">选举状态:</text>
|
||||
<text class="info-value" :class="'item-status'+item.status">
|
||||
{{$dict.getLabel('electionStatus',item.status)||'-'}}
|
||||
</text>
|
||||
</view>
|
||||
<view class="item-info mar-b9">
|
||||
<text class="info-label">应选人数:</text>
|
||||
<text class="info-value" style="display:inline-block;width: 100rpx;">{{item.chooseNumber || '0'}}</text>
|
||||
<text class="info-label">候选人数:</text>
|
||||
<text class="info-value">{{item.candidatesNumber || '0'}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-bottom">
|
||||
<text class="item-btn" v-if="item.status == 1 && item.partyVoteStatus === null" @click="toDetail(item.id)">去投票</text>
|
||||
<text class="item-btn border-999" v-if="item.status == 2 && item.partyVoteStatus != null" @click="showTips(item.status)">已投票</text>
|
||||
<text class="item-btn border-999" v-if="item.status == 1 && item.partyVoteStatus != null" @click="showTips(item.status)">已投票</text>
|
||||
<text class="item-btn border-999" v-if="item.status == 0" @click="showTips(item.status)">未开始</text>
|
||||
<text class="item-btn border-999" v-if="item.status == 2 && item.partyVoteStatus === null" @click="showTips(item.status)">未投票</text>
|
||||
</view>
|
||||
<view class="item-status" :class="'item-status'+item.status">
|
||||
{{$dict.getLabel('electionStatus',item.status)||'-'}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<AiEmpty v-if="list.length == 0"/>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import {mapState} from 'vuex'
|
||||
export default {
|
||||
name: 'AppGeneralElection',
|
||||
appName: "换届选举",
|
||||
computed: {
|
||||
...mapState(['user', 'token']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isShow: true,
|
||||
list: [],
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pages: 2,
|
||||
partyId: ''
|
||||
};
|
||||
},
|
||||
onLoad() {
|
||||
this.$dict.load('electionStatus').then(() => {
|
||||
this.partyId =this.user.partyId
|
||||
this.getList()
|
||||
})
|
||||
},
|
||||
onShow() {
|
||||
this.$dict.load('electionStatus').then(() => {
|
||||
this.partyId = this.user.partyId
|
||||
this.getList()
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
if (this.pageNum > this.pages) return
|
||||
this.$instance.post(`/app/appgeneralelectioninfo/list-xcx?partyId=${this.partyId}¤t=${this.pageNum}&size=${this.pageSize}`, null, {}).then(res => {
|
||||
console.log(res)
|
||||
if (res.code == 0) {
|
||||
const list = this.pageNum > 1 ? [...this.list, ...res.data.records] : res.data.records
|
||||
this.pages = Math.ceil(res.data.total / 10)
|
||||
this.list = list
|
||||
console.log(this.list)
|
||||
}
|
||||
})
|
||||
},
|
||||
toSessionDetail(id) {
|
||||
// uni.navigateTo({
|
||||
// url: '../threeSessions/threeSessionsDetail?id=' + id
|
||||
// })
|
||||
},
|
||||
toDetail(id) {
|
||||
uni.navigateTo({
|
||||
url: `./generalElectionDetail?id=${id}`
|
||||
})
|
||||
},
|
||||
showTips(status) {
|
||||
var title = '投票未开始'
|
||||
if (status == 1) {
|
||||
title = '已投票'
|
||||
}
|
||||
if (status == 2) {
|
||||
title = '已结束'
|
||||
}
|
||||
uni.showToast({
|
||||
title: title,
|
||||
icon: "none"
|
||||
})
|
||||
}
|
||||
},
|
||||
onReachBottom() {
|
||||
this.pageNum = this.pageNum + 1
|
||||
this.getList()
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
|
||||
.page {
|
||||
background-color: #F3F6F9;
|
||||
|
||||
.session-list {
|
||||
.session-item {
|
||||
width: 686px;
|
||||
margin: 32px auto 0 auto;
|
||||
background-color: #fff;
|
||||
// min-height: 308px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
border-radius: 8px;
|
||||
|
||||
.item-top {
|
||||
padding: 32px 32px 0 32px;
|
||||
}
|
||||
|
||||
.item-title {
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
line-height: 44px;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.item-info {
|
||||
line-height: 42px;
|
||||
font-size: 28px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.info-label {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.item-bottom {
|
||||
border-top: 2px solid #EEE;
|
||||
text-align: right;
|
||||
padding-right: 34px;
|
||||
box-sizing: border-box;
|
||||
line-height: 96px;
|
||||
|
||||
.item-btn {
|
||||
display: inline-block;
|
||||
width: 152px;
|
||||
height: 52px;
|
||||
line-height: 52px;
|
||||
border-radius: 28px;
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
margin-left: 32px;
|
||||
border: 2px solid #E1E1E1;
|
||||
color: #1365DD;
|
||||
border: 2px solid #1365DD;
|
||||
}
|
||||
}
|
||||
|
||||
.info-value {
|
||||
color: #343D65;
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
.item-status {
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
right: -30rpx;
|
||||
width: 140px;
|
||||
text-align: center;
|
||||
line-height: 44px;
|
||||
font-size: 24px;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.item-status0 {
|
||||
color: #FF9B2B;
|
||||
background-color: #FFF3E8;
|
||||
}
|
||||
|
||||
.item-status1 {
|
||||
color: #5A98F2;
|
||||
background-color: #F1F6FF;
|
||||
}
|
||||
|
||||
.item-status2 {
|
||||
color: #f46;
|
||||
background-color: #FFECF0;
|
||||
}
|
||||
|
||||
.border-999 {
|
||||
color: #999 !important;
|
||||
border-color: #999 !important;
|
||||
}
|
||||
|
||||
.mar-b9 {
|
||||
margin-bottom: 18px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.no-affairs {
|
||||
width: 100%;
|
||||
height: calc(100% - 210rpx);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,330 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<div class="line-bg"></div>
|
||||
<div class="banner-top">
|
||||
<image src="https://cdn.cunwuyun.cn/img/election-banner.png" class="banner-img"></image>
|
||||
<span class="tips" @click="viewMask()"><image src="https://cdn.cunwuyun.cn/img/explain-icon.png" class="tips-icon"></image>投票说明</span>
|
||||
<image src="https://cdn.cunwuyun.cn/img/party-icon.png" class="party-icon"></image>
|
||||
<div class="banner-info">
|
||||
<div class="title">{{ title }}</div>
|
||||
<div class="num-info">应选人{{ chooseNumber || '0' }}人</div>
|
||||
<div class="user-list">
|
||||
<div class="user-item user-item-title">
|
||||
<span>候选人</span>
|
||||
<span>赞成</span>
|
||||
<span>反对</span>
|
||||
<span>弃权</span>
|
||||
</div>
|
||||
<div class="user-item" v-for="(item, index) in userList" :key="index">
|
||||
<span>{{ item.candidateUserName }}</span>
|
||||
<span>
|
||||
<image
|
||||
:src="item.voteStatus == '0' ? 'https://cdn.cunwuyun.cn/img/circle-check.png' : 'https://cdn.cunwuyun.cn/img/circle-icon.png'"
|
||||
class="check-icon" @click="checkClick(index, '0')"></image>
|
||||
</span>
|
||||
<span>
|
||||
<image
|
||||
:src="item.voteStatus == '1' ? 'https://cdn.cunwuyun.cn/img/circle-check.png' : 'https://cdn.cunwuyun.cn/img/circle-icon.png'"
|
||||
class="check-icon" @click="checkClick(index, '1')"></image>
|
||||
</span>
|
||||
<span>
|
||||
<image
|
||||
:src="item.voteStatus == '2' ? 'https://cdn.cunwuyun.cn/img/circle-check.png' : 'https://cdn.cunwuyun.cn/img/circle-icon.png'"
|
||||
class="check-icon" @click="checkClick(index, '2')"></image>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-bottom">
|
||||
<div class="btn" @click="submitVote()">提交投票</div>
|
||||
</div>
|
||||
<view class="mask" v-if="showMask">
|
||||
<view class="mask-content">
|
||||
<view class="mask-title">投票说明</view>
|
||||
<view class="mask-text">1、本次选举采用无记名投票方式,差额选举的办法,选举第十一届村民委员会主任1名。选举工作由选举委员会主持,未尽事宜由选举委员会研究决定;</view>
|
||||
<view class="mask-text">2、差额选举的办法,选举第十一届村民委员会主任1名。选举工作由选举委员会主持,未尽事宜由选举委员会研究决定。</view>
|
||||
<view class="mask-btn" @click="closeMask()">关闭</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import {mapState} from 'vuex'
|
||||
export default {
|
||||
computed: {
|
||||
...mapState(['user']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
detailId: '',
|
||||
userList: [],
|
||||
showMask: false,
|
||||
title: '',
|
||||
chooseNumber: '',
|
||||
partyId: ''
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
this.detailId = options.id
|
||||
this.partyId = this.user.partyId
|
||||
this.getDetailInfo()
|
||||
},
|
||||
methods: {
|
||||
submitVote() {
|
||||
var flags = true
|
||||
var checkNum = 0
|
||||
var checkList = []
|
||||
this.userList.map((item) => {
|
||||
if (item.voteStatus) {
|
||||
checkNum++
|
||||
checkList.push(item)
|
||||
}
|
||||
})
|
||||
|
||||
if (checkNum > this.chooseNumber) {
|
||||
uni.showToast({title: `投票人数大于应选人数,请重试`, icon: 'none'})
|
||||
flags = false
|
||||
}
|
||||
// if (checkNum < this.chooseNumber) {
|
||||
// uni.showToast({title: `请给候选人投票`, icon: 'none'})
|
||||
// flags = false
|
||||
// }
|
||||
if (checkNum < this.userList.length) {
|
||||
uni.showToast({title: `请给候选人投票`, icon: 'none'})
|
||||
flags = false
|
||||
}
|
||||
|
||||
if (!flags) return
|
||||
this.$instance.post('/app/appgeneralelectioninfo/vote', checkList).then(res => {
|
||||
if (res.code == 0) {
|
||||
uni.showToast({title: '投票成功!'})
|
||||
setTimeout(function () {
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
});
|
||||
}, 1000)
|
||||
}
|
||||
})
|
||||
},
|
||||
checkClick(index, status) {
|
||||
if (this.userList[index].voteStatus == status) {
|
||||
this.userList[index].voteStatus = ''
|
||||
} else {
|
||||
this.userList[index].voteStatus = status
|
||||
}
|
||||
},
|
||||
closeMask() {
|
||||
this.showMask = false
|
||||
},
|
||||
viewMask() {
|
||||
this.showMask = true
|
||||
},
|
||||
getDetailInfo() {
|
||||
this.$instance.post(`/app/appgeneralelectioninfo/queryDetailById?id=${this.detailId}`, null).then(res => {
|
||||
if (res.data) {
|
||||
this.chooseNumber = res.data.chooseNumber
|
||||
this.title = res.data.title
|
||||
res.data.candidateUsers.map((item) => {
|
||||
var info = {
|
||||
"candidateUserId": item.id,
|
||||
"candidateUserName": item.name,
|
||||
"electionId": this.detailId,
|
||||
"voteStatus": '',
|
||||
"voterUserId": this.partyId
|
||||
}
|
||||
this.userList.push(info)
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scope>
|
||||
|
||||
.page {
|
||||
.line-bg {
|
||||
width: 100%;
|
||||
height: 12px;
|
||||
background-color: #E60012;
|
||||
}
|
||||
|
||||
.banner-top {
|
||||
width: 100%;
|
||||
height: 340px;
|
||||
position: relative;
|
||||
|
||||
.banner-img {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 340px;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.tips {
|
||||
position: absolute;
|
||||
right: 42px;
|
||||
color: #fff;
|
||||
font-size: 30px;
|
||||
z-index: 88;
|
||||
top: 116px;
|
||||
|
||||
.tips-icon {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
vertical-align: text-top;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.party-icon {
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
width: 140px;
|
||||
height: 140px;
|
||||
left: 50%;
|
||||
margin-left: -70rpx;
|
||||
top: 180px;
|
||||
}
|
||||
|
||||
.banner-info {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 2;
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
padding-bottom: 136px;
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
font-size: 44px;
|
||||
font-family: PingFangSC-Semibold, PingFang SC;
|
||||
font-weight: 600;
|
||||
line-height: 60px;
|
||||
text-align: center;
|
||||
padding: 12px 0 40px 0;
|
||||
|
||||
}
|
||||
|
||||
.num-info {
|
||||
width: 100%;
|
||||
font-size: 36px;
|
||||
font-family: PingFangSC-Semibold, PingFang SC;
|
||||
line-height: 50px;
|
||||
text-align: center;
|
||||
margin-bottom: 80px;
|
||||
}
|
||||
|
||||
.user-list {
|
||||
width: 710px;
|
||||
background: #fff;
|
||||
border-radius: 24px 24px 0 0;
|
||||
margin: 0 auto;
|
||||
|
||||
.user-item {
|
||||
width: 688px;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
margin: 0 auto;
|
||||
border-bottom: 2px solid #eee;
|
||||
display: flex;
|
||||
font-size: 32px;
|
||||
color: #666;
|
||||
|
||||
span {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
|
||||
.check-icon {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.user-item:nth-last-of-type(1) {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.user-item-title {
|
||||
color: #333;
|
||||
font-size: 34px;
|
||||
padding-top: 88px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-bottom {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 9;
|
||||
width: 100%;
|
||||
|
||||
.btn {
|
||||
width: 100%;
|
||||
line-height: 112px;
|
||||
background: #E60012;
|
||||
color: #fff;
|
||||
font-size: 32px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, .3);
|
||||
z-index: 99;
|
||||
|
||||
.mask-content {
|
||||
width: 560px;
|
||||
height: 680px;
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
border: 2px solid rgba(151, 151, 151, 1);
|
||||
margin: 200px auto 0;
|
||||
padding: 48px 48px 0;
|
||||
box-sizing: border-box;
|
||||
|
||||
.mask-title {
|
||||
font-size: 32px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
line-height: 44px;
|
||||
margin-bottom: 36px;
|
||||
}
|
||||
|
||||
.mask-text {
|
||||
width: 100%;
|
||||
line-height: 44px;
|
||||
font-size: 28px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
color: #333;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.mask-btn {
|
||||
width: 128px;
|
||||
height: 40px;
|
||||
font-size: 28px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #1365DD;
|
||||
line-height: 40px;
|
||||
margin: 60px 0 0 332px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
432
src/project/pingchang/AppPartyReport/AppPartyReport.vue
Normal file
432
src/project/pingchang/AppPartyReport/AppPartyReport.vue
Normal file
@@ -0,0 +1,432 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<ul class="nav_bar">
|
||||
<li
|
||||
v-for="(e, index) in navList"
|
||||
:key="index"
|
||||
:class="{ active: navId == e.id }"
|
||||
@click="getList(e.id)"
|
||||
>
|
||||
{{ e.name }}
|
||||
</li>
|
||||
</ul>
|
||||
<view class="list_content" v-if="list.length > 0">
|
||||
<ul class="list_div">
|
||||
<li v-for="(e, index) in list" :key="index">
|
||||
<view class="up" @click="goToDetail(e)">
|
||||
<h3>{{ e.title }}</h3>
|
||||
<view class="info">
|
||||
<span>活动时间:</span>
|
||||
<p>
|
||||
{{ e.beginTime | timeVal }}至<br />{{ e.endTime | timeVal }}
|
||||
</p>
|
||||
</view>
|
||||
<view class="info">
|
||||
<span>活动地点:</span>
|
||||
<span class="address">{{ e.address }}</span>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btn">
|
||||
<view
|
||||
class="button"
|
||||
:class="{
|
||||
color4: e.nowUsersignupStatus == null,
|
||||
color5: e.nowUsersignupStatus == 1,
|
||||
}"
|
||||
v-if="
|
||||
e.nowUsersignupStatus == null &&
|
||||
e.actionStatus != 2 &&
|
||||
e.signupStatus == 0
|
||||
"
|
||||
>
|
||||
<span @click="signUp(e)">去报名</span>
|
||||
</view>
|
||||
<view
|
||||
class="button callBtn"
|
||||
:class="{
|
||||
color4: e.actionStatus == 0,
|
||||
color5:
|
||||
(e.actionStatus == 1 && e.signupStatus == 1) ||
|
||||
(e.actionStatus == 2 && e.signupStatus == 1),
|
||||
}"
|
||||
v-if="navId == 1"
|
||||
@click="handlerCall(e)"
|
||||
>
|
||||
<span>呼叫联系人</span>
|
||||
</view>
|
||||
<view
|
||||
class="button color4"
|
||||
v-if="
|
||||
navId == 1 &&
|
||||
e.nowUsersignupStatus &&
|
||||
e.signupContent == null &&
|
||||
e.signupStatus == 1 &&
|
||||
['1', '2'].includes(e.actionStatus)
|
||||
"
|
||||
>
|
||||
<span @click="goToLog(e)">填写日志</span>
|
||||
</view>
|
||||
<view
|
||||
class="button color4"
|
||||
v-if="
|
||||
navId == 1 &&
|
||||
e.nowUsersignupStatus &&
|
||||
e.signupContent &&
|
||||
e.signupStatus == 1 &&
|
||||
['1', '2'].includes(e.actionStatus)
|
||||
"
|
||||
>
|
||||
<span @click="goToLog(e)">编辑日志</span>
|
||||
</view>
|
||||
</view>
|
||||
<p
|
||||
class="tip"
|
||||
:class="{
|
||||
color1: e.actionStatus == 0,
|
||||
color2: e.actionStatus == 1,
|
||||
color3: e.actionStatus == 2,
|
||||
}"
|
||||
>
|
||||
<span v-if="e.actionStatus == 0">未开始</span>
|
||||
<span v-if="e.actionStatus == 1">进行中</span>
|
||||
<span v-if="e.actionStatus == 2">已结束</span>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</view>
|
||||
<AiEmpty v-if="list.length == 0" />
|
||||
<view class="footer">
|
||||
<p
|
||||
v-for="(e, index) in footerList"
|
||||
:key="index"
|
||||
:class="{ active: navId == e.id }"
|
||||
@click="goToList(e.id)"
|
||||
>
|
||||
<image
|
||||
src="https://cdn.cunwuyun.cn/img/party_detail.png"
|
||||
v-if="e.id == 2"
|
||||
></image>
|
||||
<image
|
||||
src="https://cdn.cunwuyun.cn/img/party_now_reg.png"
|
||||
v-if="e.id == 3"
|
||||
></image>
|
||||
<span>{{ e.name }}</span>
|
||||
</p>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import mixins from "./mixins/mixin";
|
||||
import { mapState } from "vuex";
|
||||
|
||||
export default {
|
||||
name: "AppPartyReport",
|
||||
appName: "报到服务",
|
||||
mixins: [mixins],
|
||||
computed: {
|
||||
...mapState(["user"]),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
navList: [
|
||||
{ name: "可报名的活动", id: 0 },
|
||||
{ name: "我的活动日程", id: 1 },
|
||||
],
|
||||
footerList: [
|
||||
{ name: "社区活动列表", id: 2 },
|
||||
{ name: "我的活动记录", id: 3 },
|
||||
],
|
||||
navId: 0,
|
||||
list: [],
|
||||
};
|
||||
},
|
||||
filters: {
|
||||
timeVal(val) {
|
||||
if (val) {
|
||||
return val.substring(0, 16);
|
||||
}
|
||||
},
|
||||
},
|
||||
onLoad() {
|
||||
uni.setNavigationBarColor({
|
||||
frontColor: "#ffffff",
|
||||
backgroundColor: "#e60012",
|
||||
})
|
||||
this.getList(0);
|
||||
},
|
||||
onShow() {
|
||||
this.getList(this.navId);
|
||||
},
|
||||
methods: {
|
||||
getList(id) {
|
||||
this.navId = id;
|
||||
this.list = [];
|
||||
this.$instance
|
||||
.post(
|
||||
`/app/apppartyreport/list-xcx?listType=${id}&partyId=${
|
||||
this.user.partyId
|
||||
}&partyOrgId=${this.user.partyOrgId}&size=${10000}`
|
||||
)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
if (res.data.records == null) {
|
||||
this.list = [];
|
||||
} else {
|
||||
this.list = res.data.records;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
goToList(id) {
|
||||
if (id == 2) {
|
||||
uni.navigateTo({
|
||||
url: `./communityList?id=${id}`,
|
||||
});
|
||||
} else if (id == 3) {
|
||||
uni.navigateTo({
|
||||
url: `./myList?id=${id}`,
|
||||
});
|
||||
}
|
||||
},
|
||||
goToDetail(e) {
|
||||
uni.navigateTo({
|
||||
url: `./partyDetail?id=${e.id}&listType=${this.navId}`,
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
.nav_bar {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background: #e60012;
|
||||
|
||||
li {
|
||||
width: 50%;
|
||||
float: left;
|
||||
height: 90px;
|
||||
line-height: 90px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 28px;
|
||||
opacity: 0.8;
|
||||
position: relative;
|
||||
|
||||
&:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
height: 4px;
|
||||
width: 40px;
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
li.active {
|
||||
opacity: 1;
|
||||
|
||||
&:after {
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list_content {
|
||||
width: calc(100% - 64px);
|
||||
height: calc(100% - 284px);
|
||||
padding: 32px;
|
||||
overflow: auto;
|
||||
|
||||
.list_div {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding-bottom: 400px;
|
||||
|
||||
li {
|
||||
width: 100%;
|
||||
height: 446px;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 32px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
.up {
|
||||
height: 330px;
|
||||
width: 100%;
|
||||
padding: 32px;
|
||||
word-break: break-all;
|
||||
box-sizing: border-box;
|
||||
border-bottom: 2px solid #eeeeee;
|
||||
|
||||
h3 {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
width: 90%;
|
||||
display: -webkit-box;
|
||||
word-break: break-all;
|
||||
-webkit-line-clamp: 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.info {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
font-size: 30px;
|
||||
margin-top: 32px;
|
||||
|
||||
span {
|
||||
width: 150px;
|
||||
color: rgba(153, 153, 153, 1);
|
||||
}
|
||||
|
||||
p {
|
||||
flex: 1;
|
||||
color: #343d65;
|
||||
word-break: break-all;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.address {
|
||||
width: 320px;
|
||||
}
|
||||
}
|
||||
|
||||
.endTime {
|
||||
box-sizing: border-box;
|
||||
padding-left: 150px;
|
||||
font-size: 30px;
|
||||
color: #343d65;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
height: 118px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
padding: 0 32px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.button {
|
||||
width: 152px;
|
||||
height: 56px;
|
||||
border-radius: 28px;
|
||||
color: #1365dd;
|
||||
text-align: center;
|
||||
line-height: 56px;
|
||||
margin-left: 16px;
|
||||
font-size: 28px;
|
||||
border: 2px solid rgba(19, 101, 221, 1);
|
||||
}
|
||||
|
||||
.callBtn {
|
||||
width: 196px !important;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
.color4 {
|
||||
color: #1365dd;
|
||||
border: 2px solid rgba(19, 101, 221, 1);
|
||||
}
|
||||
|
||||
.color5 {
|
||||
color: #606060;
|
||||
border: 2px solid #e1e1e1;
|
||||
}
|
||||
}
|
||||
|
||||
.tip {
|
||||
position: absolute;
|
||||
width: 200px;
|
||||
height: 56px;
|
||||
text-align: center;
|
||||
line-height: 56px;
|
||||
right: -50px;
|
||||
-webkit-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
|
||||
top: 20px;
|
||||
|
||||
&.color1 {
|
||||
color: #ff8822;
|
||||
background-color: #fff3e9;
|
||||
}
|
||||
|
||||
&.color2 {
|
||||
color: #5a98f2;
|
||||
background-color: #eef5ff;
|
||||
}
|
||||
|
||||
&.color3 {
|
||||
color: #999999;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
height: 104px;
|
||||
background: rgba(255, 228, 221, 1);
|
||||
color: #d73d3d;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 32px;
|
||||
|
||||
image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
p {
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
&.active {
|
||||
background-color: #d73d3d;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
p:nth-child(1) {
|
||||
border-right: 2px solid rgb(241, 178, 178);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
p:nth-child(2) {
|
||||
background-color: #fe5a49;
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
492
src/project/pingchang/AppPartyReport/communityList.vue
Normal file
492
src/project/pingchang/AppPartyReport/communityList.vue
Normal file
@@ -0,0 +1,492 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view v-if="isShow" style="height:100%;width:100%">
|
||||
<div class="party_header" v-if="list.length > 0">
|
||||
<view class="search-box">
|
||||
<view class="search-input flex-row" @click="changeSearchBox">
|
||||
<image src="https://cdn.cunwuyun.cn/img/search-red.svg"/>
|
||||
<text>{{ title || '请输入活动名称或活动地点' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</div>
|
||||
<div class="party_header" v-if="list.length == 0" style="height: auto;">
|
||||
<view class="search-box">
|
||||
<view class="search-input flex-row" @click="changeSearchBox">
|
||||
<image src="https://cdn.cunwuyun.cn/img/search-red.svg"/>
|
||||
<text>{{ title || '请输入活动名称或活动地点' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</div>
|
||||
<view class='slect flex-row'>
|
||||
<view class="uni-list type-slect">
|
||||
<view class="uni-list-cell">
|
||||
<view class="uni-list-cell-db">
|
||||
<picker @change="bindPickerChange" :range="activeTypeArr">
|
||||
<view class="uni-input">{{ actionName }}</view>
|
||||
<image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
|
||||
</picker>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="uni-list type-slect">
|
||||
<view class="uni-list-cell">
|
||||
<view class="uni-list-cell-db">
|
||||
<picker @change="bindStatusChange" :range="applyStatusArr">
|
||||
<view class="uni-input">{{ signupName }}</view>
|
||||
<image src="https://cdn.cunwuyun.cn/img/down.svg"></image>
|
||||
</picker>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list_content" v-if="list.length > 0">
|
||||
<ul class="list_div">
|
||||
<li v-for="(e,index) in list" :key="index">
|
||||
<view class="up" @click="goToDetail(e)">
|
||||
<h3>{{ e.title }}</h3>
|
||||
<view class="info">
|
||||
<span>活动时间:</span>
|
||||
<p>{{ e.beginTime|timeVal }}至<br/>{{ e.endTime|timeVal }}</p>
|
||||
</view>
|
||||
<view class="info">
|
||||
<span>活动地点:</span>
|
||||
<p>{{ e.address }}</p>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btn">
|
||||
<view class="button callBtn"
|
||||
:class="{color4:e.actionStatus==0,color5:e.actionStatus==1&&e.signupStatus==1 || e.actionStatus==2&&e.signupStatus==1}"
|
||||
@click="handlerCall(e)" v-if="e.nowUsersignupStatus">
|
||||
<span>呼叫联系人</span>
|
||||
</view>
|
||||
<view class="button" :class="{color4:e.nowUsersignupStatus==null,color5:e.nowUsersignupStatus==1}"
|
||||
v-if="e.nowUsersignupStatus==null&&e.actionStatus!=2&&e.signupStatus==0">
|
||||
<span @click="signUp(e)">去报名</span>
|
||||
</view>
|
||||
<view class="button color4"
|
||||
v-if="e.nowUsersignupStatus && e.signupContent==null && e.signupStatus==1 && ['1','2'].includes(e.actionStatus)">
|
||||
<span @click="goToLog(e)">填写日志</span>
|
||||
</view>
|
||||
<view class="button color4"
|
||||
v-if="e.nowUsersignupStatus && e.signupContent && e.signupStatus==1 && ['1','2'].includes(e.actionStatus)">
|
||||
<span @click="goToLog(e)">编辑日志</span>
|
||||
</view>
|
||||
</view>
|
||||
<p class="tip" :class="{color1:e.actionStatus==0,color2:e.actionStatus==1,color3:e.actionStatus==2}">
|
||||
<span v-if="e.actionStatus==0">未开始</span>
|
||||
<span v-if="e.actionStatus==1">进行中</span>
|
||||
<span v-if="e.actionStatus==2">已结束</span>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</view>
|
||||
<AiEmpty v-if="list.length==0" />
|
||||
|
||||
</view>
|
||||
<view v-if="!isShow" class="search-input">
|
||||
<view class="input-box flex-row">
|
||||
<input type="text" class="input" placeholder="请输入活动名称或活动地点" focus="false" v-model="title"/>
|
||||
<image class="sousuo" src="https://cdn.cunwuyun.cn/img/search-active.svg"/>
|
||||
<image v-if="title" @tap="clearInput" class="clear" src="https://cdn.cunwuyun.cn/img/empty-Input.svg"/>
|
||||
<view class="search-word" @click="getList()">搜索</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import mixins from "./mixins/mixin";
|
||||
import {mapState} from 'vuex'
|
||||
|
||||
export default {
|
||||
name: "partyReportList",
|
||||
mixins: [mixins],
|
||||
computed: {
|
||||
...mapState(['user']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
navId: 0,
|
||||
list: [],
|
||||
title: '',
|
||||
isShow: true,
|
||||
applyStatusArr: [],
|
||||
activeTypeArr: [],
|
||||
actionStatus: '',
|
||||
signupStatus: '',
|
||||
actionName: '活动状态',
|
||||
signupName: '报名状态'
|
||||
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
timeVal(val) {
|
||||
if (val) {
|
||||
return val.substring(0, 16)
|
||||
}
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
uni.setNavigationBarColor({
|
||||
frontColor: "#ffffff",
|
||||
backgroundColor: "#e60012",
|
||||
})
|
||||
this.navId = options.id;
|
||||
this.$dict.load('partyReportActionStatus', 'partyReportSignupStatus');
|
||||
this.$dict.getDict('partyReportActionStatus').map(i => {
|
||||
this.activeTypeArr.push(i.dictName)
|
||||
});
|
||||
this.$dict.getDict('partyReportSignupStatus').map(i => {
|
||||
this.applyStatusArr.push(i.dictName)
|
||||
})
|
||||
this.getList();
|
||||
},
|
||||
onShow() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.$instance.post(`/app/apppartyreport/list-xcx?listType=${this.navId}&partyId=${this.user.partyId}&partyOrgId=${this.user.partyOrgId}&title=${this.title}&actionStatus=${this.actionStatus}&signupStatus=${this.signupStatus}&size=${10000}`, null, {}).then(res => {
|
||||
if (res.code == 0) {
|
||||
if (res.data.records == null) {
|
||||
this.list = [];
|
||||
} else {
|
||||
this.list = res.data.records;
|
||||
}
|
||||
this.isShow = true;
|
||||
} else {
|
||||
|
||||
}
|
||||
}).catch(err => {
|
||||
|
||||
})
|
||||
},
|
||||
changeSearchBox() {
|
||||
this.isShow = false
|
||||
},
|
||||
clearInput() {
|
||||
this.title = ''
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.actionName = this.activeTypeArr[Number(e.detail.value)];
|
||||
this.actionStatus = e.detail.value;
|
||||
this.getList();
|
||||
},
|
||||
bindStatusChange(e) {
|
||||
this.signupName = this.applyStatusArr[Number(e.detail.value)];
|
||||
this.signupStatus = e.detail.value;
|
||||
this.getList();
|
||||
},
|
||||
goToDetail(e) {
|
||||
uni.navigateTo({
|
||||
url: `./partyDetail?id=${e.id}&listType=${this.navId}`
|
||||
})
|
||||
},
|
||||
signUp(e) {
|
||||
uni.navigateTo({
|
||||
url: `./signUp?reportId=${e.id}`
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
.slect {
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
background-color: #fff;
|
||||
color: #666;
|
||||
|
||||
.type-slect {
|
||||
width: 50%;
|
||||
border-right: 1px solid #F7F7F7;
|
||||
margin: 30px 0;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
font-size: 26px;
|
||||
|
||||
.uni-input {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.type-slect:nth-child(2) {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
.party_header {
|
||||
background: #E60012;
|
||||
|
||||
.search-box {
|
||||
width: 100%;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
background: #E60012;
|
||||
|
||||
.search-input {
|
||||
line-height: 64px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 32px;
|
||||
background: #CE0010;
|
||||
color: #fff;
|
||||
font-size: 26px;
|
||||
|
||||
text {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
color: #fff;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin: 8px 8px 8px 24px;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.search-input {
|
||||
.input-box {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #fff;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.sousuo {
|
||||
position: absolute;
|
||||
top: 35px;
|
||||
left: 60px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.input {
|
||||
background-color: #F3F3F3;
|
||||
width: 598px;
|
||||
height: 64px;
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
margin-left: 8px;
|
||||
border-radius: 32px;
|
||||
padding-left: 70px;
|
||||
padding-right: 60px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.clear {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
right: 130px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.search-word {
|
||||
font-size: 28px;
|
||||
color: #135AB8;
|
||||
line-height: 60px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list_content {
|
||||
width: calc(100% - 64rpx);
|
||||
height: calc(100% - 260rpx);
|
||||
padding: 32px 32px 0 32px;
|
||||
overflow: auto;
|
||||
|
||||
.list_div {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
li {
|
||||
width: 100%;
|
||||
height: 426px;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 32px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
.up {
|
||||
height: 330px;
|
||||
width: 100%;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
border-bottom: 2px solid #eeeeee;
|
||||
|
||||
h3 {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
width: 90%;
|
||||
word-break: break-all;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.info {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
font-size: 30px;
|
||||
margin-top: 32px;
|
||||
|
||||
span {
|
||||
width: 150px;
|
||||
color: rgba(153, 153, 153, 1);
|
||||
}
|
||||
|
||||
p {
|
||||
flex: 1;
|
||||
color: #343D65;
|
||||
word-break: break-all;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.btn {
|
||||
height: 96px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
padding: 0 32px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.button {
|
||||
width: 152px;
|
||||
height: 56px;
|
||||
border-radius: 28px;
|
||||
color: #1365DD;
|
||||
text-align: center;
|
||||
line-height: 56px;
|
||||
font-size: 28px;
|
||||
margin-left: 16px;
|
||||
border: 2px solid rgba(19, 101, 221, 1);
|
||||
}
|
||||
|
||||
.callBtn {
|
||||
width: 196px !important;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
.color4 {
|
||||
color: #1365DD;
|
||||
border: 2px solid rgba(19, 101, 221, 1);
|
||||
}
|
||||
|
||||
.color5 {
|
||||
color: #606060;
|
||||
border: 2px solid #E1E1E1;
|
||||
}
|
||||
}
|
||||
|
||||
.tip {
|
||||
position: absolute;
|
||||
width: 200px;
|
||||
height: 56px;
|
||||
text-align: center;
|
||||
line-height: 56px;
|
||||
right: -50rpx;
|
||||
-webkit-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
|
||||
top: 20px;
|
||||
|
||||
&.color1 {
|
||||
color: #ff8822;
|
||||
background-color: #FFF3E9;
|
||||
}
|
||||
|
||||
&.color2 {
|
||||
color: #5A98F2;
|
||||
background-color: #EEF5FF;
|
||||
}
|
||||
|
||||
&.color3 {
|
||||
color: #999999;
|
||||
background-color: #F2F2F2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.no-affairs {
|
||||
width: 100%;
|
||||
height: calc(100% - 210rpx);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
height: 104px;
|
||||
background: rgba(255, 228, 221, 1);
|
||||
color: #D73D3D;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 32px;
|
||||
|
||||
p {
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
&.active {
|
||||
background-color: #D73D3D;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
394
src/project/pingchang/AppPartyReport/fillLog.vue
Normal file
394
src/project/pingchang/AppPartyReport/fillLog.vue
Normal file
@@ -0,0 +1,394 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<header></header>
|
||||
<view class="form">
|
||||
<view class="main">
|
||||
<div class="textarea">
|
||||
<div class="color-333"><span class="color-red">*</span>活动总结</div>
|
||||
<textarea type="textarea" placeholder="填写本次活动参与心得体会(200字以内)" v-model="baseInfo.content" adjust-position="false" maxlength="200"></textarea>
|
||||
</div>
|
||||
<view class="uni-uploader">
|
||||
<view class="title-box title-box-margin">
|
||||
<text class="title">活动照片(最多9张)</text>
|
||||
</view>
|
||||
<view class="uni-uploader-body">
|
||||
<view class="uni-uploader__files">
|
||||
<block v-for="(image,index) in imageList" :key="index">
|
||||
<view class="uni-uploader__file">
|
||||
<image class="uni-uploader__img" :src="image.accessUrl" :data-index="index" @tap="previewImage"></image>
|
||||
<AiUniIcon type="clear" class="icon" color="#8f8f94" size="20" @click="deleteImage(index)"></AiUniIcon>
|
||||
</view>
|
||||
</block>
|
||||
<view class="pre-view" @tap="chooseImageType" v-if="imageList.length < 9">
|
||||
<text class="pre-label">+</text>
|
||||
<text class="add-image">添加照片</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="report" @click="report()">提交</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from "@/utils/axios.js"
|
||||
export default {
|
||||
name:"fillLog",
|
||||
data(){
|
||||
return{
|
||||
reportId:'',
|
||||
baseInfo:{
|
||||
content:'',
|
||||
fileIds:[],
|
||||
reportId:'',
|
||||
id:''
|
||||
},
|
||||
imageList:[],
|
||||
sourceTypeIndex: 2,
|
||||
sourceType:[ // 图片来源类型
|
||||
['camera'],
|
||||
['album'],
|
||||
],
|
||||
}
|
||||
},
|
||||
onLoad(options){
|
||||
uni.setNavigationBarColor({
|
||||
frontColor: "#ffffff",
|
||||
backgroundColor: "#e60012",
|
||||
})
|
||||
this.baseInfo.reportId= options.reportId;
|
||||
this.baseInfo.id= options.signupId;
|
||||
options.signupContent?this.logReport():null ;
|
||||
},
|
||||
methods:{
|
||||
// 选择照片类型
|
||||
chooseImageType(){
|
||||
let that = this
|
||||
uni.showActionSheet({
|
||||
itemList:['拍照','从相册选择'],
|
||||
success: function(res){
|
||||
that.sourceTypeIndex = res.tapIndex
|
||||
that.chooseImage()
|
||||
}
|
||||
})
|
||||
},
|
||||
showModel(title){
|
||||
uni.showModal({
|
||||
title: '温馨提示',
|
||||
content: title,
|
||||
showCancel:false,
|
||||
confirmColor:"#135AB8",
|
||||
})
|
||||
},
|
||||
chooseImage: async function() {
|
||||
let that = this
|
||||
if (that.imageList.length === 9) {
|
||||
let isContinue = await that.isFullImg();
|
||||
if (!isContinue) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
uni.chooseImage({
|
||||
// 从相册选择或相机拍摄
|
||||
sourceType: that.sourceType[that.sourceTypeIndex],
|
||||
// 最多可以选择的图片数量
|
||||
count: 9,
|
||||
success: (res) => {
|
||||
// 图片的本地文件路径列表
|
||||
that.tempFilePaths = res.tempFilePaths
|
||||
// console.log(res.tempFilePaths)
|
||||
for(let i=0 ;i<that.tempFilePaths.length;i++){
|
||||
let str = ''
|
||||
let token = uni.getStorageSync("token")
|
||||
// console.log('token',token)
|
||||
let params = {
|
||||
token:token,
|
||||
}
|
||||
// url String 是 开发者服务器 url
|
||||
// files Aarry 否 需要上传的文件列表。使用 files 时,filePath 和 name 不生效。 5+App
|
||||
// filePath String 是 要上传文件资源的路径。
|
||||
// name String 是 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
|
||||
// header Object 否 HTTP 请求 Header, header 中不能设置 Referer
|
||||
// formData Object 否 HTTP 请求中其他额外的 form data
|
||||
// success Function 否 接口调用成功的回调函数
|
||||
// fail Function 否 接口调用失败的回调函数
|
||||
// complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
|
||||
uni.uploadFile({
|
||||
url: axios.baseURL + '/admin/file/add',
|
||||
filePath:that.tempFilePaths[i],
|
||||
name: 'file',
|
||||
// formData:params,
|
||||
header: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
'access_token': token,
|
||||
"Authorization": token
|
||||
},
|
||||
success(res){
|
||||
str = JSON.stringify(JSON.parse(res.data).data[0]).replace(/\"/g, "")
|
||||
var temp = {
|
||||
fileId:str.split(";")[1],
|
||||
accessUrl:str.split(";")[0],
|
||||
}
|
||||
that.imageList = that.imageList.concat(temp)
|
||||
if (that.imageList.length > 9) {
|
||||
that.imageList = that.imageList.slice(0, 9)
|
||||
uni.showToast({
|
||||
title: '图片最多只能上传9张',
|
||||
icon: "none"
|
||||
})
|
||||
}
|
||||
that.imgUrl = JSON.stringify(that.imageList)
|
||||
},
|
||||
fail(res) {
|
||||
console.log('error',res)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
// 预览图片(大图预览)
|
||||
previewImage: function(e) {
|
||||
let that = this
|
||||
var current = e.target.dataset.index
|
||||
|
||||
var tempList = []
|
||||
for (var i in that.imageList) {
|
||||
tempList.push(that.imageList[i].accessUrl)
|
||||
}
|
||||
|
||||
uni.previewImage({
|
||||
// 当前图片的索引、链接
|
||||
current: tempList[current],
|
||||
urls: tempList,
|
||||
longPressActions:{
|
||||
itemList: ['发送给朋友', '保存图片', '收藏'],
|
||||
success: function(data) {
|
||||
// console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
|
||||
},
|
||||
fail: function(err) {
|
||||
// console.log(err.errMsg);
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
// 删除照片
|
||||
deleteImage(index){
|
||||
this.imageList.splice(index, 1);
|
||||
},
|
||||
report(){
|
||||
let arr = [] ;
|
||||
if(!this.baseInfo.content){
|
||||
this.showModel('请填写活动总结')
|
||||
return false
|
||||
};
|
||||
this.imageList.map((e)=>{
|
||||
arr.push(e.fileId) ;
|
||||
})
|
||||
this.baseInfo.fileIds = arr ;
|
||||
this.$instance.post(`/app/apppartyreport/log-add`,this.baseInfo,null).then(res => {
|
||||
if (res.code == 0 ) {
|
||||
uni.showToast({
|
||||
title: '提交',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
});
|
||||
}
|
||||
}).catch(err=>{
|
||||
uni.showToast({
|
||||
title: err,
|
||||
icon: "none",
|
||||
duration:1000
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
logReport(){
|
||||
const userInfo = uni.getStorageSync("userInfo") ;
|
||||
this.$instance.post(`/app/apppartyreport/log-report?partyId=${userInfo.partyId}&reportId=${this.baseInfo.reportId}`)
|
||||
.then((res)=>{
|
||||
if(res.code==0&&res.data){
|
||||
this.baseInfo.content = res.data.content ;
|
||||
this.baseInfo.fileIds = res.data.fileIds ;
|
||||
res.data.files.map((e)=>{
|
||||
this.imageList.push({accessUrl:e.accessUrl,fileId:e.id});
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
.page{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
header{
|
||||
width: 100%;
|
||||
height: 112rpx;
|
||||
background-color: #E60012;
|
||||
}
|
||||
.form{
|
||||
width: 100%;
|
||||
padding: 32rpx;
|
||||
box-sizing: border-box;
|
||||
margin-top: -100rpx;
|
||||
.main{
|
||||
background-color: #fff;
|
||||
border-radius:8rpx;
|
||||
padding: 16rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.basic-item{
|
||||
font-size: 32rpx;
|
||||
justify-content: space-between;
|
||||
width:100%;
|
||||
height:112rpx;
|
||||
padding:32rpx 32rpx 32rpx 12rpx;
|
||||
box-sizing: border-box;
|
||||
background-color:#fff;
|
||||
border-bottom:1rpx solid #eee;
|
||||
input{
|
||||
text-align: right;
|
||||
}
|
||||
.wid-110{
|
||||
width:214rpx;
|
||||
}
|
||||
.skill-text{
|
||||
max-width:432rpx;
|
||||
text-align:right;
|
||||
display:inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
font-size:30rpx;
|
||||
}
|
||||
.picker{
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
color: #999999;
|
||||
font-size: 32rpx;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
.picker > .AiArea{
|
||||
background-color: #fff !important;
|
||||
}
|
||||
.image{
|
||||
width: 32rpx;
|
||||
height: 32rpx;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.wei-text{
|
||||
width:40%;
|
||||
}
|
||||
.msg-value {
|
||||
width: 60%;
|
||||
}
|
||||
.msg-btn {
|
||||
width: 160px;
|
||||
text-align: right;
|
||||
background-color:#fff !important;
|
||||
}
|
||||
|
||||
button {
|
||||
font-size: 28rpx;
|
||||
background-color: #fff;
|
||||
line-height:48rpx;
|
||||
padding:0;
|
||||
|
||||
}
|
||||
|
||||
button::after {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.button-hover {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
button[disabled] {
|
||||
background-color: #fff !important;
|
||||
font-size: 28rpx;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
/* 上传照片 */
|
||||
.uni-uploader {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
}
|
||||
.uni-uploader-head {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.uni-uploader-info {
|
||||
color: #B2B2B2;
|
||||
}
|
||||
.uni-uploader-body {
|
||||
margin-top: 16rpx;
|
||||
}
|
||||
.uni-uploader__files {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.uni-uploader__file {
|
||||
margin-right: 10rpx;
|
||||
margin-bottom: 20rpx;
|
||||
width: 160rpx;
|
||||
height: 160rpx;
|
||||
position: relative;
|
||||
}
|
||||
.uni-uploader__img {
|
||||
display: block;
|
||||
width: 160rpx;
|
||||
height: 160rpx;
|
||||
}
|
||||
.pre-label{
|
||||
font-size: 80rpx;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
.add-image{
|
||||
color: #DDDDDD;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
.pre-view{
|
||||
width: 160rpx;
|
||||
height: 160rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
border-radius: 8rpx;
|
||||
border: 2rpx solid #DDDDDD;
|
||||
}
|
||||
.icon{
|
||||
position: absolute;
|
||||
top: -15rpx;
|
||||
right: -10rpx;
|
||||
}
|
||||
|
||||
}
|
||||
.report{
|
||||
position: fixed;
|
||||
left:0;
|
||||
bottom: 0;
|
||||
height:112rpx;
|
||||
line-height: 112rpx;
|
||||
font-size:32rpx;
|
||||
text-align: center;
|
||||
background:rgba(230,0,18,1);
|
||||
color:#fff;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
36
src/project/pingchang/AppPartyReport/mixins/mixin.js
Normal file
36
src/project/pingchang/AppPartyReport/mixins/mixin.js
Normal file
@@ -0,0 +1,36 @@
|
||||
export default {
|
||||
methods:{
|
||||
handlerCall({contactPerson,contactPhone}){
|
||||
uni.showModal({
|
||||
title:contactPerson,
|
||||
content:contactPhone,
|
||||
confirmText:"拨打",
|
||||
cancelText:"复制",
|
||||
confirmColor:"#135AB8",
|
||||
success(res){
|
||||
if (res.confirm) {
|
||||
uni.makePhoneCall({
|
||||
phoneNumber: contactPhone
|
||||
});
|
||||
} else if (res.cancel) {
|
||||
uni.setClipboardData({
|
||||
data:contactPhone,
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
goToLog(e){
|
||||
uni.navigateTo({
|
||||
url:`/subPages/partyReport/fillLog?reportId=${e.id}&signupId=${e.signupId}&signupContent=${e.signupContent}`
|
||||
})
|
||||
},
|
||||
|
||||
signUp(e){
|
||||
uni.navigateTo({
|
||||
url:`/subPages/partyReport/signUp?reportId=${e.id}`
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
497
src/project/pingchang/AppPartyReport/myList.vue
Normal file
497
src/project/pingchang/AppPartyReport/myList.vue
Normal file
@@ -0,0 +1,497 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view v-if="isShow" style="height:100%;width:100%">
|
||||
<ul class="nav_bar">
|
||||
<li v-for="(e,index) in navList" :key="index" :class="{active:navId==e.id}" @click="navClick(e.id)">
|
||||
<span>{{ e.name }}</span>
|
||||
<span v-if="e.id==4">({{ total }})</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="party_header" v-if="list.length > 0">
|
||||
<view class="search-box">
|
||||
<view class="search-input flex-row" @click="changeSearchBox">
|
||||
<image src="https://cdn.cunwuyun.cn/img/search-red.svg"/>
|
||||
<text>{{ title || '请输入活动名称或活动地点' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</div>
|
||||
<div class="party_header" v-if="list.length == 0" style="height: auto;">
|
||||
<view class="search-box">
|
||||
<view class="search-input flex-row" @click="changeSearchBox">
|
||||
<image src="https://cdn.cunwuyun.cn/img/search-red.svg"/>
|
||||
<text>{{ title || '请输入活动名称或活动地点' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</div>
|
||||
|
||||
<view class="list_content" v-if="list.length > 0">
|
||||
<ul class="list_div">
|
||||
<li v-for="(e,index) in list" :key="index">
|
||||
<view class="up" @click="goToDetail(e)">
|
||||
<h3>{{ e.title }}</h3>
|
||||
<view class="info">
|
||||
<span>活动时间:</span>
|
||||
<p>{{ e.beginTime }}至<br/>{{ e.endTime }}</p>
|
||||
</view>
|
||||
<view class="info">
|
||||
<span>活动地点:</span>
|
||||
<p>{{ e.address }}</p>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btn">
|
||||
<view class="button callBtn"
|
||||
:class="{color4:e.actionStatus==0,color5:e.actionStatus==1&&e.signupStatus==1 || e.actionStatus==2&&e.signupStatus==1}"
|
||||
@click="handlerCall(e)">
|
||||
<span>呼叫联系人</span>
|
||||
</view>
|
||||
<view class="button color4"
|
||||
v-if="e.logStatus==0 && e.nowUsersignupStatus==1 && ['1','2'].includes(e.actionStatus)">
|
||||
<span @click="goToLog(e)">填写日志</span>
|
||||
</view>
|
||||
<view class="button color4"
|
||||
v-if="['1','3'].includes(e.logStatus)&& e.nowUsersignupStatus==1 && ['1','2'].includes(e.actionStatus)">
|
||||
<span @click="goToLog(e)">编辑日志</span>
|
||||
</view>
|
||||
</view>
|
||||
<p class="tip" :class="{color1:e.actionStatus==0,color2:e.actionStatus==1,color3:e.actionStatus==2}">
|
||||
<span v-if="e.actionStatus==0">未开始</span>
|
||||
<span v-if="e.actionStatus==1">进行中</span>
|
||||
<span v-if="e.actionStatus==2">已结束</span>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</view>
|
||||
<AiEmpty v-if="list.length==0" />
|
||||
</view>
|
||||
<view v-if="!isShow" class="search-input">
|
||||
<view class="input-box flex-row">
|
||||
<input type="text" class="input" placeholder="请输入活动名称或活动地点" focus="false" v-model="title"/>
|
||||
<image class="sousuo" src="https://cdn.cunwuyun.cn/img/search-active.svg"/>
|
||||
<image v-if="title" @tap="clearInput" class="clear" src="https://cdn.cunwuyun.cn/img/empty-Input.svg"/>
|
||||
<view class="search-word" @click="getList()">搜索</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import mixins from "./mixins/mixin";
|
||||
import {mapState} from 'vuex'
|
||||
|
||||
export default {
|
||||
name: "partyReportList",
|
||||
mixins: [mixins],
|
||||
data() {
|
||||
return {
|
||||
navId: 0,
|
||||
list: [],
|
||||
title: '',
|
||||
isShow: true,
|
||||
applyStatusArr: [],
|
||||
activeTypeArr: [],
|
||||
actionStatus: '',
|
||||
signupStatus: '',
|
||||
navList: [
|
||||
{name: "全部活动", id: 3},
|
||||
{name: "日志未提交", id: 4}
|
||||
],
|
||||
total: 0
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['user'])
|
||||
},
|
||||
onLoad(options) {
|
||||
uni.setNavigationBarColor({
|
||||
frontColor: "#ffffff",
|
||||
backgroundColor: "#e60012",
|
||||
})
|
||||
this.navId = options.id;
|
||||
this.$dict.load('partyReportActionStatus', 'partyReportSignupStatus').then(() => {
|
||||
this.$dict.getDict('partyReportActionStatus').map(i => {
|
||||
this.activeTypeArr.push(i.dictName)
|
||||
});
|
||||
this.$dict.getDict('partyReportSignupStatus').map(i => {
|
||||
this.applyStatusArr.push(i.dictName)
|
||||
})
|
||||
});
|
||||
this.getList();
|
||||
this.getToatal();
|
||||
},
|
||||
filters: {
|
||||
timeVal(val) {
|
||||
if (val) {
|
||||
return val.substring(0, 16)
|
||||
}
|
||||
}
|
||||
},
|
||||
onShow() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.$instance.post(`/app/apppartyreport/list-xcx?listType=${this.navId}&partyId=${this.user.partyId}&partyOrgId=${this.user.partyOrgId}&title=${this.title}&size=${10000}`, null, {}).then(res => {
|
||||
if (res.code == 0) {
|
||||
if (res.data.records == null) {
|
||||
this.list = [];
|
||||
} else {
|
||||
this.list = res.data.records;
|
||||
if (this.navId == 4) {
|
||||
this.total = res.data.total;
|
||||
}
|
||||
}
|
||||
this.isShow = true;
|
||||
} else {
|
||||
|
||||
}
|
||||
}).catch(err => {
|
||||
|
||||
})
|
||||
},
|
||||
getToatal() {
|
||||
this.$instance.post(`/app/apppartyreport/list-xcx?listType=4&partyId=${this.user.partyId}&partyOrgId=${this.user.partyOrgId}&title=${this.title}&size=${10000}`, null, {}).then(res => {
|
||||
if (res.code == 0) {
|
||||
if (res.data.records == null) {
|
||||
this.total = 0
|
||||
} else {
|
||||
this.total = res.data.total;
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
}).catch(err => {
|
||||
|
||||
})
|
||||
},
|
||||
changeSearchBox() {
|
||||
this.isShow = false
|
||||
},
|
||||
clearInput() {
|
||||
this.title = ''
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.actionStatus = e.detail.value;
|
||||
this.getList();
|
||||
},
|
||||
bindStatusChange(e) {
|
||||
this.signupStatus = e.detail.value;
|
||||
this.getList();
|
||||
},
|
||||
navClick(id) {
|
||||
this.navId = id;
|
||||
this.getList();
|
||||
},
|
||||
goToDetail(e) {
|
||||
uni.navigateTo({
|
||||
url: `./partyDetail?id=${e.id}&listType=${this.navId}`
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
.party_header {
|
||||
background: #E60012;
|
||||
|
||||
.search-box {
|
||||
width: 100%;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
background: #E60012;
|
||||
|
||||
.search-input {
|
||||
line-height: 64px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 32px;
|
||||
background: #CE0010;
|
||||
color: #fff;
|
||||
font-size: 26px;
|
||||
|
||||
text {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
color: #fff;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin: 8px 8px 8px 24px;
|
||||
position: relative;
|
||||
top: 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav_bar {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background: #E60012;
|
||||
|
||||
li {
|
||||
width: 50%;
|
||||
float: left;
|
||||
height: 90px;
|
||||
line-height: 90px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 28px;
|
||||
opacity: 0.8;
|
||||
position: relative;
|
||||
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
height: 4px;
|
||||
width: 40px;
|
||||
background-color: transparent;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
li.active {
|
||||
opacity: 1;
|
||||
|
||||
&:after {
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.search-input {
|
||||
.input-box {
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
background-color: #fff;
|
||||
padding: 24px 32px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.sousuo {
|
||||
position: absolute;
|
||||
top: 35px;
|
||||
left: 60px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.input {
|
||||
background-color: #F3F3F3;
|
||||
width: 598px;
|
||||
height: 64px;
|
||||
color: #999999;
|
||||
font-size: 26px;
|
||||
margin-left: 8px;
|
||||
border-radius: 32px;
|
||||
padding-left: 70px;
|
||||
padding-right: 60px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.clear {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
right: 130px;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.search-word {
|
||||
font-size: 28px;
|
||||
color: #135AB8;
|
||||
line-height: 60px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list_content {
|
||||
width: calc(100% - 64rpx);
|
||||
height: calc(100% - 300rpx);
|
||||
padding: 32px 32px 0 32px;
|
||||
overflow: auto;
|
||||
|
||||
.list_div {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
li {
|
||||
width: 100%;
|
||||
height: 426px;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 32px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
.up {
|
||||
height: 330px;
|
||||
width: 100%;
|
||||
padding: 32px;
|
||||
box-sizing: border-box;
|
||||
border-bottom: 2px solid #eeeeee;
|
||||
|
||||
h3 {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
word-break: break-all;
|
||||
width: 90%;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.info {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
font-size: 30px;
|
||||
margin-top: 32px;
|
||||
|
||||
span {
|
||||
width: 150px;
|
||||
color: rgba(153, 153, 153, 1);
|
||||
}
|
||||
|
||||
p {
|
||||
flex: 1;
|
||||
color: #343D65;
|
||||
word-break: break-all;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.btn {
|
||||
height: 96px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
padding: 0 32px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.button {
|
||||
width: 152px;
|
||||
height: 56px;
|
||||
border-radius: 28px;
|
||||
color: #1365DD;
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
line-height: 56px;
|
||||
margin-left: 16px;
|
||||
border: 2px solid rgba(19, 101, 221, 1);
|
||||
}
|
||||
|
||||
.callBtn {
|
||||
width: 196px !important;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
.color4 {
|
||||
color: #1365DD;
|
||||
border: 2px solid rgba(19, 101, 221, 1);
|
||||
}
|
||||
|
||||
.color5 {
|
||||
color: #606060;
|
||||
border: 2px solid #E1E1E1;
|
||||
}
|
||||
}
|
||||
|
||||
.tip {
|
||||
position: absolute;
|
||||
width: 200px;
|
||||
height: 56px;
|
||||
text-align: center;
|
||||
line-height: 56px;
|
||||
right: -50rpx;
|
||||
-webkit-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
|
||||
top: 20px;
|
||||
|
||||
&.color1 {
|
||||
color: #ff8822;
|
||||
background-color: #FFF3E9;
|
||||
}
|
||||
|
||||
&.color2 {
|
||||
color: #5A98F2;
|
||||
background-color: #EEF5FF;
|
||||
}
|
||||
|
||||
&.color3 {
|
||||
color: #999999;
|
||||
background-color: #F2F2F2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.no-affairs {
|
||||
width: 100%;
|
||||
height: calc(100% - 210rpx);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
height: 104px;
|
||||
background: rgba(255, 228, 221, 1);
|
||||
color: #D73D3D;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 32px;
|
||||
|
||||
p {
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
&.active {
|
||||
background-color: #D73D3D;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
169
src/project/pingchang/AppPartyReport/myLog.vue
Normal file
169
src/project/pingchang/AppPartyReport/myLog.vue
Normal file
@@ -0,0 +1,169 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<header>
|
||||
<p class="title">{{ title }}</p>
|
||||
<view class="time">
|
||||
<span>提交时间:</span>
|
||||
<span>{{ baseInfo.submitTime }}</span>
|
||||
</view>
|
||||
</header>
|
||||
<view class="mylog_main">
|
||||
<view class="mylog_main_summary">
|
||||
<p class="word">活动总结</p>
|
||||
<p class="value">{{ baseInfo.content }}</p>
|
||||
</view>
|
||||
<view class="imageList">
|
||||
<p class="word">活动照片</p>
|
||||
<image v-for="(e, index) in baseInfo.files" :key="index" @click="previewImage(baseInfo.files,index)"
|
||||
mode="aspectFill" :src="e.accessUrl"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="editLog" @click="editLog">
|
||||
<div class="iconfont"></div>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "myLog",
|
||||
data() {
|
||||
return {
|
||||
signupId: '',
|
||||
baseInfo: {},
|
||||
title: ''
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
uni.setNavigationBarColor({
|
||||
frontColor: "#ffffff",
|
||||
backgroundColor: "#e60012",
|
||||
})
|
||||
this.signupId = options.signupId;
|
||||
this.title = options.title;
|
||||
},
|
||||
methods: {
|
||||
editLog() {
|
||||
uni.navigateTo({
|
||||
url: `./fillLog?reportId=${this.baseInfo.reportId}&signupId=${this.signupId}&signupContent=${this.baseInfo.signupContent}`
|
||||
})
|
||||
},
|
||||
searchDetail() {
|
||||
this.$instance.post(`/app/apppartyreport/log?id=${this.signupId}`).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.baseInfo = {...res.data};
|
||||
}
|
||||
})
|
||||
},
|
||||
previewImage(arr, index) {
|
||||
let list = [];
|
||||
let current = index;
|
||||
arr.map((e, index) => {
|
||||
list.push(e.accessUrl)
|
||||
|
||||
})
|
||||
uni.previewImage({
|
||||
urls: list,
|
||||
current: current,
|
||||
longPressActions: {
|
||||
itemList: ['发送给朋友', '保存图片'],
|
||||
success: function (data) {
|
||||
|
||||
},
|
||||
fail: function (err) {
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
onShow(){
|
||||
this.searchDetail();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.page{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
header{
|
||||
width: 100%;
|
||||
min-height: 256rpx;
|
||||
background:rgba(230,0,18,1);
|
||||
padding: 32rpx;
|
||||
box-sizing: border-box;
|
||||
.title{
|
||||
font-size:40rpx;
|
||||
color:#fff;
|
||||
}
|
||||
.time{
|
||||
height: 112rpx;
|
||||
line-height: 112rpx;
|
||||
font-size:28rpx;
|
||||
color:#fff;
|
||||
span:nth-child(2){
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
}
|
||||
.mylog_main{
|
||||
width: 100%;
|
||||
.word{
|
||||
height: 44rpx;
|
||||
width: 100%;
|
||||
border-left: 6rpx solid #E60012;
|
||||
box-sizing: border-box;
|
||||
color:#333333;
|
||||
font-size:38rpx;
|
||||
line-height: 44rpx;
|
||||
text-indent: 16rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
.mylog_main_summary{
|
||||
width: 100%;
|
||||
padding: 32rpx;
|
||||
background-color: #fff;
|
||||
box-sizing: border-box;
|
||||
.value{
|
||||
margin-top: 56rpx;
|
||||
color:#333333;
|
||||
font-size:32rpx;
|
||||
word-break: break-all;
|
||||
}
|
||||
}
|
||||
.imageList{
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
padding: 32rpx;
|
||||
box-sizing: border-box;
|
||||
margin-top: 16rpx;
|
||||
image{
|
||||
width: 100%;
|
||||
height: 384rpx;
|
||||
border-radius: 4rpx;
|
||||
margin-top:32rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.editLog{
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
border-radius: 48px;
|
||||
background: #FFFFFF;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: calc(100% - 400px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||
.iconfont {
|
||||
font-size: 66px;
|
||||
color: #F85461;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
349
src/project/pingchang/AppPartyReport/partyDetail.vue
Normal file
349
src/project/pingchang/AppPartyReport/partyDetail.vue
Normal file
@@ -0,0 +1,349 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view class="baseInfo">
|
||||
<view class="content" style="transition:height .5s ease;">
|
||||
<p class="title">{{ baseInfo.title }}</p>
|
||||
<ul>
|
||||
<li>
|
||||
<span class="label">活动发起方:</span>
|
||||
<view class="value">{{ baseInfo.areaName }}</view>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label">活动时间:</span>
|
||||
<view class="value"> {{ baseInfo.beginTime|timeVal }} 至 {{ baseInfo.endTime|timeVal }}</view>
|
||||
</li>
|
||||
<template v-if="stretchWord=='收起'">
|
||||
<li>
|
||||
<span class="label">活动地点:</span>
|
||||
<view class="value">{{ baseInfo.address || '-' }}</view>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label">参与名额:</span>
|
||||
<view class="value">{{ baseInfo.total ? baseInfo.total : "不限" }}</view>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label">报名截止时间:</span>
|
||||
<view class="value">
|
||||
{{ baseInfo.stopSignupTime || '-' }}
|
||||
<text v-if="baseInfo.signupStatus==0">({{ "剩余" + baseInfo.timeRemaining }})</text>
|
||||
</view>
|
||||
<!-- <view class="value" v-else>-</view> -->
|
||||
</li>
|
||||
<li>
|
||||
<span class="label">活动报名人数:</span>
|
||||
<view class="value">{{ baseInfo.signupCount || '-' }}</view>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label">活动状态:</span>
|
||||
<!--<view class="value">{{ $dict.getLabel('partyReportActionStatus', baseInfo.actionStatus) }}</view>-->
|
||||
<view class="value">{{ activeStatus }}</view>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label">联系人:</span>
|
||||
<view class="value">{{ baseInfo.contactPerson || '-' }}</view>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label">联系电话:</span>
|
||||
<view class="value">{{ baseInfo.contactPhone || '-' }}</view>
|
||||
</li>
|
||||
</template>
|
||||
</ul>
|
||||
</view>
|
||||
<view class="footer" @click="stretch()">
|
||||
<span>{{ stretchWord }}</span>
|
||||
<image :src="dowm" v-if="stretchWord=='展开'"></image>
|
||||
<image :src="up" v-if="stretchWord=='收起'"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="html">
|
||||
<header>活动介绍</header>
|
||||
<!-- <AiWxparse :content="baseInfo.content"/> -->
|
||||
<u-parse :html="baseInfo.content"></u-parse>
|
||||
<AiTransSpeech v-if="showTrans" :src="baseInfo.speech"/>
|
||||
</view>
|
||||
<view class="page_footer">
|
||||
<p @click="seeSignUpList(baseInfo)">
|
||||
<image src="https://cdn.cunwuyun.cn/img/party_detail.png"></image>
|
||||
<span>查看报名情况</span>
|
||||
</p>
|
||||
<p v-if="baseInfo.nowUsersignupStatus==null&&baseInfo.actionStatus!=2&&baseInfo.signupStatus==0"
|
||||
@click="signUp(baseInfo)">
|
||||
<image src="https://cdn.cunwuyun.cn/img/party_now_reg.png"></image>
|
||||
<span>立即报名</span>
|
||||
</p>
|
||||
<p v-if="baseInfo.nowUsersignupStatus==1&&baseInfo.actionStatus!=2&&baseInfo.signupStatus==0"
|
||||
@click="open()">
|
||||
<image src="https://cdn.cunwuyun.cn/img/party_cancel_reg.png"></image>
|
||||
<span>取消报名</span>
|
||||
</p>
|
||||
<p v-if="baseInfo.nowUsersignupStatus==1&&baseInfo.signupContent==null&&['1','2'].includes(baseInfo.actionStatus)&&baseInfo.signupStatus==1"
|
||||
@click="goLog(baseInfo)">
|
||||
<image src="https://cdn.cunwuyun.cn/img/party_add_log.png"></image>
|
||||
<span>填写活动日志</span>
|
||||
</p>
|
||||
<p v-if="baseInfo.nowUsersignupStatus==1&&baseInfo.signupContent!=null&&['1','2'].includes(baseInfo.actionStatus)&&baseInfo.signupStatus==1"
|
||||
@click="goMyLog(baseInfo)">
|
||||
<image src="https://cdn.cunwuyun.cn/img/party_log.png"></image>
|
||||
<span>我的活动日志</span>
|
||||
</p>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'partyDetail',
|
||||
computed: {
|
||||
user() {
|
||||
return uni.getStorageSync("userInfo")
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
baseInfo: {},
|
||||
height: 210,
|
||||
stretchWord: "展开",
|
||||
listType: '',
|
||||
footerList: [
|
||||
{name: "查看报名情况", id: 0},
|
||||
{name: "立即报名", id: 1}
|
||||
],
|
||||
id: '',
|
||||
dowm: 'https://cdn.cunwuyun.cn/img/party_down.png',
|
||||
up: 'https://cdn.cunwuyun.cn/img/party_up.png',
|
||||
showTrans: false,
|
||||
activeStatus:""
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
uni.setNavigationBarColor({
|
||||
frontColor: "#ffffff",
|
||||
backgroundColor: "#e60012",
|
||||
})
|
||||
this.id = options.id;
|
||||
this.searchDetail(options.id);
|
||||
this.listType = options.listType;
|
||||
this.$dict.load('partyReportActionStatus');
|
||||
},
|
||||
onShow() {
|
||||
this.showTrans = true;
|
||||
this.searchDetail(this.id);
|
||||
},
|
||||
onHide() {
|
||||
this.showTrans = false
|
||||
},
|
||||
filters: {
|
||||
timeVal(val) {
|
||||
if (val) {
|
||||
return val.substring(0, 16)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getActiveStatus(){
|
||||
uni.getStorage({
|
||||
key: "dicts",
|
||||
success: (res) => {
|
||||
const jsonDicts = JSON.parse(res.data)
|
||||
this.activeStatus = jsonDicts.find((e) => e.key == "partyReportActionStatus").values[this.baseInfo.actionStatus].dictName || "-"
|
||||
},
|
||||
fail() {
|
||||
this.activeStatus = "-"
|
||||
}
|
||||
})
|
||||
},
|
||||
searchDetail(id) {
|
||||
this.$instance.post(`/app/apppartyreport/queryDetailById?id=${id}&partyId=${this.user.partyId}`).then(res => {
|
||||
if (res && res.data) {
|
||||
this.baseInfo = {...res.data};
|
||||
this.baseInfo.stopSignupTime = this.baseInfo.stopSignupTime && this.baseInfo.stopSignupTime.substring(0, 16);
|
||||
this.getActiveStatus() ;
|
||||
}
|
||||
})
|
||||
},
|
||||
stretch() {
|
||||
this.stretchWord == '展开' ? this.stretchWord = '收起' : this.stretchWord = '展开';
|
||||
this.height == 210 ? this.height = 506 : this.height = 210;
|
||||
},
|
||||
signUp(e) {
|
||||
uni.navigateTo({
|
||||
url: `./signUp?reportId=${e.id}`
|
||||
})
|
||||
},
|
||||
seeSignUpList(e) {
|
||||
uni.navigateTo({
|
||||
url: `./signUpList?reportId=${e.id}`
|
||||
})
|
||||
},
|
||||
goLog(e) {
|
||||
uni.navigateTo({
|
||||
url: `./fillLog?reportId=${e.id}&signupId=${e.signupId}`
|
||||
})
|
||||
},
|
||||
goMyLog(e) {
|
||||
uni.navigateTo({
|
||||
url: `./myLog?signupId=${e.signupId}&title=${e.title}`
|
||||
})
|
||||
},
|
||||
open() {
|
||||
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '取消报名后,本次活动不允许再次报名,是否确定取消?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.cale();
|
||||
} else if (res.cancel) {
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
cale() {
|
||||
this.$instance.post(`/app/apppartyreport/signup-cancel?id=${this.baseInfo.signupId}`,).then(res => {
|
||||
if (res.code == 0) {
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
});
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err,
|
||||
icon: "none",
|
||||
duration: 1000
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
|
||||
.baseInfo {
|
||||
width: 100%;
|
||||
background: rgba(230, 0, 18, 1);
|
||||
overflow: hidden;
|
||||
|
||||
.content {
|
||||
width: 100%;
|
||||
background: rgba(230, 0, 18, 1);
|
||||
overflow: hidden;
|
||||
padding: 0 32px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.title {
|
||||
font-size: 40px;
|
||||
color: #fff;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
ul {
|
||||
width: 100%;
|
||||
|
||||
li {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
font-size: 30px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
.label {
|
||||
font-size: 28px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.value {
|
||||
flex: 1;
|
||||
font-size: 28px;
|
||||
color: rgba(255, 232, 232, 1);
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100%;
|
||||
height: 80px;
|
||||
color: #fff;
|
||||
font-size: 28px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
image {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.html {
|
||||
width: 100%;
|
||||
padding: 0 32px 180px 32px;
|
||||
box-sizing: border-box;
|
||||
background-color: #fff;
|
||||
|
||||
header {
|
||||
height: 96px;
|
||||
line-height: 96px;
|
||||
}
|
||||
}
|
||||
|
||||
.page_footer {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
height: 104px;
|
||||
background: rgba(255, 228, 221, 1);
|
||||
color: #D73D3D;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 32px;
|
||||
|
||||
image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
p {
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
&.active {
|
||||
background-color: #D73D3D;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
p:nth-child(1) {
|
||||
border-right: 2px solid rgb(241, 178, 178);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
p:nth-child(2) {
|
||||
background-color: #FE5A49;
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
p:only-child {
|
||||
width: 100%;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
357
src/project/pingchang/AppPartyReport/signUp.vue
Normal file
357
src/project/pingchang/AppPartyReport/signUp.vue
Normal file
@@ -0,0 +1,357 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view class="form">
|
||||
<div class=" basic-item flex-row">
|
||||
<div class="color-333"><span class="color-red">*</span>活动报名类型</div>
|
||||
<div class="select" @click="open()">
|
||||
<text class="content-text" :class="reportName == '请选择' ? 'colo-999' : 'color-333'">{{ reportName }}</text>
|
||||
<image src="https://cdn.cunwuyun.cn/img/jiantou.png" class="image"></image>
|
||||
</div>
|
||||
</div>
|
||||
<div class=" basic-item flex-row">
|
||||
<div class="color-333"><span class="color-red">*</span>联系手机</div>
|
||||
<input type="text" placeholder="请输入手机号码" maxlength="11" v-model="baseInfo.phone" adjust-position="false">
|
||||
</div>
|
||||
<div class="textarea">
|
||||
<div class="color-333">报名备注</div>
|
||||
<textarea type="textarea" v-if="showTextarea" placeholder="填写报名备注(100字以内)" v-model="baseInfo.remark"
|
||||
adjust-position="false" maxlength="100"></textarea>
|
||||
<p v-else style="color:#999;font-size:34rpx;width:100%;height:302rpx;">填写报名备注(100字以内)</p>
|
||||
</div>
|
||||
</view>
|
||||
<view class="notice">
|
||||
<p>报到类型说明:</p>
|
||||
<p>1、单位联系社区报到服务:党员所属单位联系的社区参与活动,到社区服务;</p>
|
||||
<p>2、居住地社区报到服务:党员所在本人居住的社区参与活动,到社区服务;</p>
|
||||
<p>3、其他村(社区)报到服务:党员所在除单位联系社区与居住社区以外的其他社区参与活动,到社区服务;</p>
|
||||
</view>
|
||||
<view class="report" @click="report()">提交</view>
|
||||
<u-popup v-model="showPopup" mode="right">
|
||||
<view class="drawer_main">
|
||||
<header>
|
||||
<p>活动报到类型</p>
|
||||
<span>(单选)</span>
|
||||
</header>
|
||||
<ul>
|
||||
<li v-for="(e,index) in list" :key="index" @click="selectType(e)" :class="{active:activeId==e.dictValue}">
|
||||
{{ e.dictName }}
|
||||
</li>
|
||||
</ul>
|
||||
<view class="footer" @click="saveType()">
|
||||
保存
|
||||
</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
<!-- <AiDrawer mode="right" ref="drawer" @status="drawerStatus">
|
||||
<view class="drawer_main">
|
||||
<header>
|
||||
<p>活动报到类型</p>
|
||||
<span>(单选)</span>
|
||||
</header>
|
||||
<ul>
|
||||
<li v-for="(e,index) in list" :key="index" @click="selectType(e)" :class="{active:activeId==e.dictValue}">
|
||||
{{ e.dictName }}
|
||||
</li>
|
||||
</ul>
|
||||
<view class="footer" @click="saveType()">
|
||||
保存
|
||||
</view>
|
||||
</view>
|
||||
</AiDrawer> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState} from 'vuex'
|
||||
|
||||
export default {
|
||||
name: "signUp",
|
||||
computed: {
|
||||
...mapState(['user'])
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
baseInfo: {
|
||||
reportId: '',
|
||||
remark: '',
|
||||
phone: '',
|
||||
reportType: '',
|
||||
partyId: ''
|
||||
},
|
||||
reportName: '请选择',
|
||||
show: false,
|
||||
list: [],
|
||||
activeId: '',
|
||||
activeObj: {},
|
||||
showTextarea: true,
|
||||
showPopup: false
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
uni.setNavigationBarColor({
|
||||
frontColor: "#ffffff",
|
||||
backgroundColor: "#e60012",
|
||||
})
|
||||
this.$dict.load('partyReportSignupReportType');
|
||||
this.baseInfo.reportId = options.reportId;
|
||||
this.baseInfo.partyId = this.user.partyId;
|
||||
this.baseInfo.phone = this.user.phone;
|
||||
},
|
||||
methods: {
|
||||
showModel(title) {
|
||||
uni.showModal({
|
||||
title: '温馨提示',
|
||||
content: title,
|
||||
showCancel: false,
|
||||
confirmColor: "#135AB8",
|
||||
success(res) {
|
||||
if (res.confirm) {
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
open() {
|
||||
this.list = this.$dict.getDict('partyReportSignupReportType');
|
||||
this.showPopup = true
|
||||
},
|
||||
selectType(e) {
|
||||
this.activeId = e.dictValue;
|
||||
this.activeObj = e;
|
||||
|
||||
},
|
||||
drawerStatus(val) {
|
||||
this.showTextarea = !val;
|
||||
},
|
||||
saveType() {
|
||||
this.reportName = this.activeObj.dictName;
|
||||
this.showPopup = false
|
||||
},
|
||||
report() {
|
||||
if (this.reportName == null || this.reportName == '' || this.reportName == '请选择') {
|
||||
this.showModel('请选择活动报名类型')
|
||||
return false
|
||||
}
|
||||
if (!this.baseInfo.phone) {
|
||||
this.showModel('请填写手机号码')
|
||||
return false
|
||||
}
|
||||
this.baseInfo.reportType = this.$dict.getValue('partyReportSignupReportType', this.reportName);
|
||||
this.$instance.post(`/app/apppartyreport/signup`, this.baseInfo, null).then(res => {
|
||||
if (res.code == 0) {
|
||||
uni.showToast({
|
||||
title: '提交成功',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
})
|
||||
setTimeout(() => {
|
||||
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
});
|
||||
}, 2000)
|
||||
}
|
||||
}).catch(err => {
|
||||
uni.showToast({
|
||||
title: err,
|
||||
icon: "none",
|
||||
duration: 1000
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
.form {
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
|
||||
.basic-item {
|
||||
font-size: 32px;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
padding: 32px 32px 32px 12px;
|
||||
box-sizing: border-box;
|
||||
background-color: #fff;
|
||||
border-bottom: 1px solid #eee;
|
||||
|
||||
input {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.wid-110 {
|
||||
width: 214px;
|
||||
}
|
||||
|
||||
.skill-text {
|
||||
max-width: 432px;
|
||||
text-align: right;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
.picker {
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
color: #999999;
|
||||
font-size: 32px;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
.picker > .AiArea {
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
.image {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.wei-text {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.msg-value {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.msg-btn {
|
||||
width: 160px;
|
||||
text-align: right;
|
||||
background-color: #fff !important;
|
||||
}
|
||||
|
||||
button {
|
||||
font-size: 28px;
|
||||
background-color: #fff;
|
||||
line-height: 48px;
|
||||
padding: 0;
|
||||
|
||||
}
|
||||
|
||||
button::after {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.button-hover {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
button[disabled] {
|
||||
background-color: #fff !important;
|
||||
font-size: 28px;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.textarea {
|
||||
padding: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .uni-drawer {
|
||||
z-index: 20000 !important;
|
||||
}
|
||||
|
||||
.drawer_main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 64px 32px 0 32px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
header {
|
||||
width: 100%;
|
||||
height: 96px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
p {
|
||||
color: #333333;
|
||||
font-size: 32px;
|
||||
width: 192px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
span {
|
||||
font-size: 24px;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
height: 500px;
|
||||
|
||||
li {
|
||||
width: 344px;
|
||||
height: 96px;
|
||||
background: rgba(249, 249, 249, 1);
|
||||
margin-bottom: 40px;
|
||||
font-size: 28px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
li.active {
|
||||
background: rgba(255, 228, 221, 1);
|
||||
color: #D73D3D;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
text-align: center;
|
||||
color: #ffffff;
|
||||
font-size: 36px;
|
||||
background: rgba(230, 0, 18, 1);
|
||||
}
|
||||
}
|
||||
|
||||
.notice {
|
||||
width: 100%;
|
||||
font-weight: 400;
|
||||
box-sizing: border-box;
|
||||
padding: 64px 32px 0 32px;
|
||||
color: rgba(153, 153, 153, 1);
|
||||
font-size: 24px;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.report {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
height: 112px;
|
||||
line-height: 112px;
|
||||
font-size: 32px;
|
||||
text-align: center;
|
||||
background: rgba(230, 0, 18, 1);
|
||||
color: #fff;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
107
src/project/pingchang/AppPartyReport/signUpList.vue
Normal file
107
src/project/pingchang/AppPartyReport/signUpList.vue
Normal file
@@ -0,0 +1,107 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<header>
|
||||
报名记录(已有 <span class="num">{{list.length}}</span>人报名)
|
||||
</header>
|
||||
<ul>
|
||||
<li v-for="(e,index) in list" :key="index">
|
||||
<p>
|
||||
<image :src="e.partyAvatar" v-if="e.partyAvatar"></image>
|
||||
<image src="https://cdn.cunwuyun.cn/img/no-content.png" v-else></image>
|
||||
<span>{{e.partyName.replace(/^./g,'*')}}</span>
|
||||
</p>
|
||||
<p>{{e.signupTime.substring(0,16)}}</p>
|
||||
</li>
|
||||
</ul>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name:"signUpList",
|
||||
data(){
|
||||
return{
|
||||
reportId:'',
|
||||
list:[]
|
||||
}
|
||||
},
|
||||
onLoad(options){
|
||||
uni.setNavigationBarColor({
|
||||
frontColor: "#ffffff",
|
||||
backgroundColor: "#e60012",
|
||||
})
|
||||
this.reportId= options.reportId;
|
||||
this.getList();
|
||||
|
||||
},
|
||||
methods:{
|
||||
getList(){
|
||||
this.$instance.post(`/app/apppartyreport/signup-info?id=${this.reportId}`,null,{}).then( res => {
|
||||
if(res.code == 0){
|
||||
this.list = res.data;
|
||||
|
||||
}else{
|
||||
|
||||
}
|
||||
}).catch( err => {
|
||||
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
.page{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
header{
|
||||
width: 100%;
|
||||
height: 112rpx;
|
||||
padding: 0 32rpx;
|
||||
font-size:32rpx;
|
||||
line-height: 112rpx;
|
||||
color:#333333;
|
||||
border-bottom: 1px solid #eee;
|
||||
box-sizing: border-box;
|
||||
.num{
|
||||
color:#D73D3D;
|
||||
}
|
||||
}
|
||||
ul{
|
||||
width: 100%;
|
||||
height: calc(100% - 112rpx) ;
|
||||
overflow: auto;
|
||||
li{
|
||||
width: 100%;
|
||||
height: 148rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 0 32rpx;
|
||||
box-sizing: border-box;
|
||||
p:nth-child(2){
|
||||
color:#999999;
|
||||
font-size:30rpx;
|
||||
}
|
||||
p:nth-child(1){
|
||||
display: flex;
|
||||
align-items: center;
|
||||
image{
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
border-radius: 50%;
|
||||
}
|
||||
span{
|
||||
font-size:30rpx;
|
||||
color:#2D2D2E;
|
||||
margin-left: 8rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user