Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
		
							
								
								
									
										603
									
								
								src/apps/AppActive/ActiveDetail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										603
									
								
								src/apps/AppActive/ActiveDetail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,603 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="page"> | ||||||
|  |     <div class="header-content"> | ||||||
|  |       <div class="header-top"> | ||||||
|  |         <img :src="detail.url" alt="" /> | ||||||
|  |       </div> | ||||||
|  |  | ||||||
|  |       <div class="header-middle"> | ||||||
|  |         <div class="img-title">{{ detail.title }}</div> | ||||||
|  |  | ||||||
|  |         <div class="header-middle-bottom"> | ||||||
|  |           <div class="left"> | ||||||
|  |             <div class="left-btn" :class="'status' + detail.status">{{ $dict.getLabel('newActivityStatus', detail.status) }}</div> | ||||||
|  |           </div> | ||||||
|  |           <div class="right"> | ||||||
|  |             <img :src="detail.avatar" alt="" /> | ||||||
|  |             <span>{{ detail.createUserName }}</span> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <div class="cards"> | ||||||
|  |           <div class="cards-left">活动时间</div> | ||||||
|  |           <div class="cards-right">{{ detail.beginTime }}-{{ detail.endTime }}</div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <div class="cards"> | ||||||
|  |           <div class="cards-left">活动人数</div> | ||||||
|  |           <div class="cards-right" @click="toSignUser()"> | ||||||
|  |             <span> | ||||||
|  |               <span :style="{ color: detail.realNum == detail.total ? '#FF4466 ' : '#1C6BDF' }">{{ detail.realNum || 0 }}</span> | ||||||
|  |               <span v-if="detail.total != 0">/{{ detail.total }}</span> | ||||||
|  |               <span v-else>/不限</span> | ||||||
|  |             </span> | ||||||
|  |             <u-icon name="arrow-right" color="#DDDDDD" size="28" style="margin-left: 8px"></u-icon> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <div class="cards"> | ||||||
|  |           <div class="cards-left">活动地点</div> | ||||||
|  |           <div class="cards-right" style="width: 75%; text-align: right">{{ detail.address }}</div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |  | ||||||
|  |       <div class="header-bottom"> | ||||||
|  |         <!-- v-if="detail.status == 1 || detail.status == 2 || detail.status == 3" --> | ||||||
|  |         <div class="tab-title"> | ||||||
|  |           <span :class="current == 0 ? 'active' : ''" @click="change(0)">活动详情</span> | ||||||
|  |           <span :class="current == 1 ? 'active' : ''" @click="change(1)">活动动态</span> | ||||||
|  |         </div> | ||||||
|  |         <!-- <div class="info-title" v-else>活动详情</div> --> | ||||||
|  |         <div class="content-details" v-if="current == 0"> | ||||||
|  |           <div v-html="detail.content"></div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <div class="content-trends" v-if="current == 1"> | ||||||
|  |           <div class="details" v-if="activeList.length > 0"> | ||||||
|  |             <div class="card" v-for="(item, index) in activeList" :key="index" @click="toDetail(item.id)"> | ||||||
|  |               <div class="card-nav"> | ||||||
|  |                 <div class="avatar"> | ||||||
|  |                   <img :src="item.avatar" alt="" style="width: 100%; height: 100%" v-if="item.avatar" /> | ||||||
|  |                   <span v-else> | ||||||
|  |                     <span v-if="item.name">{{ item.name.substring(item.name.length, item.name.length - 2) }}</span> | ||||||
|  |                   </span> | ||||||
|  |                 </div> | ||||||
|  |  | ||||||
|  |                 <div class="right"> | ||||||
|  |                   <span class="name">{{ item.name }}</span> | ||||||
|  |                   <span class="time">{{ item.createTime }}</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |  | ||||||
|  |               <div class="card-font"> | ||||||
|  |                 {{ item.content }} | ||||||
|  |               </div> | ||||||
|  |  | ||||||
|  |               <div class="card-img"> | ||||||
|  |                 <img :src="e.url" v-for="(e, i) in imgList[index]" :key="i" alt="" @click.stop="previewImage(info.images, item.url)" /> | ||||||
|  |               </div> | ||||||
|  |  | ||||||
|  |               <div class="card-icon"> | ||||||
|  |                 <div> | ||||||
|  |                   <i class="iconfont"></i> | ||||||
|  |                   <span>{{ item.viewNum ? item.viewNum : 0 }}</span> | ||||||
|  |                 </div> | ||||||
|  |  | ||||||
|  |                 <div> | ||||||
|  |                   <i class="iconfont"></i> | ||||||
|  |                   <span>{{ item.replyNum ? item.replyNum : 0 }}</span> | ||||||
|  |                 </div> | ||||||
|  |  | ||||||
|  |                 <div> | ||||||
|  |                   <i class="iconfont"></i> | ||||||
|  |                   <span>{{ item.supportNum ? item.supportNum : 0 }}</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |  | ||||||
|  |             <div class="card-bottom"></div> | ||||||
|  |           </div> | ||||||
|  |  | ||||||
|  |           <AiEmpty v-else /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="addicon" @click="toPublicPage()"> | ||||||
|  |       <u-icon name="plus" color="#1365DD" size="50"></u-icon> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.status == 0 && detail.createUserId == user.partyId"> | ||||||
|  |       <div class="edit" @click="editActive">编辑</div> | ||||||
|  |       <div class="public" style="background: #3671ee" @click="changeStatus(1, '是否发布?')">发布活动</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.realNum < detail.total && detail.status == 1 && detail.myReport == 0"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div> | ||||||
|  |       <div class="public" style="background: #3671ee" @click="changeStatus(2, '是否报名?')">立即报名</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.status == 1 && detail.myReport == 0 && detail.total == 0"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div> | ||||||
|  |       <div class="public" style="background: #3671ee" @click="changeStatus(2, '是否报名?')">立即报名</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.status == 1 && detail.myReport == 1"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div> | ||||||
|  |       <div class="public" style="background: #3671ee" @click="changeStatus(3, '是否取消报名?取消报名无法重新报名!')">取消报名</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.realNum == detail.total && detail.status == 1 && detail.status == 1 && detail.total != 0"> | ||||||
|  |       <div class="max">已满员</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.myReport == 1 && detail.status == 2"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">联系负责人</div> | ||||||
|  |       <div class="public" style="background: #ffd8df; color: #ff4466" v-if="detail.allow1 == 0">未签到</div> | ||||||
|  |       <div class="public" style="background: #3671ee; color: #ffffff" v-if="detail.allow1 == 1" @click="sign(0)">签到</div> | ||||||
|  |       <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow1 == 2">已签到</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.status == 5"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">联系负责人</div> | ||||||
|  |       <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow2 == 1" @click="sign(1)">离场签到</div> | ||||||
|  |       <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow2 == 2">已离场签到</div> | ||||||
|  |       <div class="public" style="background: #ffd8df; color: #ff4466" v-if="detail.allow2 == 0">未离场签到</div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { mapState } from 'vuex' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'ActiveDetail', | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       id: '', | ||||||
|  |       detail: {}, | ||||||
|  |       activeList: [], | ||||||
|  |       imgList: [], | ||||||
|  |       list: [ | ||||||
|  |         { | ||||||
|  |           name: '活动详情', | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: '活动动态', | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |       current: 0, | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     this.id = option.id | ||||||
|  |     this.$dict.load(['newActivityStatus']).then(() => { | ||||||
|  |       this.getDetail() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getDetail() { | ||||||
|  |       this.$instance.post(`/app/appactivityinfo/queryDetailById?id=${this.id}&partyId=${this.user.partyId}`).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           res.data.beginTime = res.data.beginTime.substring(0, 16) | ||||||
|  |           res.data.endTime = res.data.endTime.substring(0, 16) | ||||||
|  |           this.detail = res.data | ||||||
|  |           this.getActiveList() | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getActiveList() { | ||||||
|  |       this.$instance.post(`/app/apppostinfo/list?activityId=${this.id}`).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.activeList = res.data.records | ||||||
|  |  | ||||||
|  |           if (this.activeList) { | ||||||
|  |             let imagesList = [] | ||||||
|  |             this.activeList.map((item) => { | ||||||
|  |               if (item.images) { | ||||||
|  |                 item.images = JSON.parse(item.images || '[]') | ||||||
|  |                 imagesList.push(item.images) | ||||||
|  |               } | ||||||
|  |               return item | ||||||
|  |             }) | ||||||
|  |             this.imgList = imagesList | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     change(index) { | ||||||
|  |       this.current = index | ||||||
|  |     }, | ||||||
|  |     toPublicPage() { | ||||||
|  |       uni.navigateTo({ | ||||||
|  |         url: `./AddPosts?id=${this.id}`, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     editActive() { | ||||||
|  |       uni.navigateTo({ url: `./AddActive?id=${this.id}` }) | ||||||
|  |     }, | ||||||
|  |     changeStatus(status, text) { | ||||||
|  |       uni.showModal({ | ||||||
|  |         title: '提示', | ||||||
|  |         content: `${text}`, | ||||||
|  |         confirmText: '确定', | ||||||
|  |         success: (e) => { | ||||||
|  |           if (status == 1) { | ||||||
|  |             //发布 | ||||||
|  |             this.changeStatusConfirm(status) | ||||||
|  |           } | ||||||
|  |           if (status == 2) { | ||||||
|  |             //报名 | ||||||
|  |             this.report() | ||||||
|  |           } | ||||||
|  |           if (status == 3) { | ||||||
|  |             //取消报名 | ||||||
|  |             this.cancelReport() | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     cancelReport() { | ||||||
|  |       this.$instance | ||||||
|  |         .post(`/app/appactivityuser/removeReport`, { | ||||||
|  |           activityId: this.id, | ||||||
|  |           partyId: this.user.partyId, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$toast('提交成功') | ||||||
|  |             this.getDetail() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     changeStatusConfirm(status) { | ||||||
|  |       this.$instance | ||||||
|  |         .post(`/app/appactivityinfo/changeStatus`, { | ||||||
|  |           id: this.id, | ||||||
|  |           status: status, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$toast('提交成功') | ||||||
|  |             this.getDetail() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     callPhone(phone) { | ||||||
|  |       uni.makePhoneCall({ phoneNumber: phone }) | ||||||
|  |     }, | ||||||
|  |     report() { | ||||||
|  |       this.$instance | ||||||
|  |         .post(`/app/appactivityuser/report`, { | ||||||
|  |           activityId: this.id, | ||||||
|  |           partyId: this.user.partyId, | ||||||
|  |           name: this.user.realName, | ||||||
|  |           orgId: this.user.partyOrgId, | ||||||
|  |           orgName: this.user.partyOrgName, | ||||||
|  |           phone: this.user.phone, | ||||||
|  |           communityId: this.user.communityId, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$toast('报名成功') | ||||||
|  |             this.getDetail() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     toSignUser() { | ||||||
|  |       var isAdmin = this.detail.createUserId == this.user.partyId ? 1 : 0 | ||||||
|  |       uni.navigateTo({ url: `./SignUser?id=${this.id}&isAdmin=${isAdmin}&status=${this.detail.status}` }) | ||||||
|  |     }, | ||||||
|  |     sign(status) { | ||||||
|  |       //status 0开始签到 1离场签到 | ||||||
|  |       this.$instance | ||||||
|  |         .post(`/app/appactivityuser/sign`, { | ||||||
|  |           activityId: this.id, | ||||||
|  |           partyId: this.user.partyId, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$toast(status == 1 ? '离场签到成功' : '签到成功') | ||||||
|  |             this.getDetail() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     toDetail(id) { | ||||||
|  |       this.linkTo(`./detail?id=${id}`) | ||||||
|  |     }, | ||||||
|  |     previewImage(images, img) { | ||||||
|  |       uni.previewImage({ | ||||||
|  |         urls: images.map((v) => v.url), | ||||||
|  |         current: img, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .page { | ||||||
|  |   width: 100%; | ||||||
|  |   height: 100%; | ||||||
|  |   background-color: #fff; | ||||||
|  |  | ||||||
|  |   .info-title { | ||||||
|  |     padding-left: 32px; | ||||||
|  |     line-height: 108px; | ||||||
|  |     font-size: 32px; | ||||||
|  |     font-family: PingFangSC-Semibold, PingFang SC; | ||||||
|  |     font-weight: 600; | ||||||
|  |     color: #333; | ||||||
|  |   } | ||||||
|  |   .tab-title { | ||||||
|  |     line-height: 108px; | ||||||
|  |     font-size: 32px; | ||||||
|  |     font-family: PingFangSC-Semibold, PingFang SC; | ||||||
|  |     font-weight: 600; | ||||||
|  |     color: #333; | ||||||
|  |     span { | ||||||
|  |       display: inline-block; | ||||||
|  |       width: 192px; | ||||||
|  |       text-align: center; | ||||||
|  |     } | ||||||
|  |     .active { | ||||||
|  |       color: #3671ee; | ||||||
|  |       border-bottom: 4px solid #3671ee; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .status0 { | ||||||
|  |     background: #000; | ||||||
|  |   } | ||||||
|  |   .status1 { | ||||||
|  |     background: #ff883c; | ||||||
|  |   } | ||||||
|  |   .status3 { | ||||||
|  |     background: #1aaaff; | ||||||
|  |   } | ||||||
|  |   .status2 { | ||||||
|  |     background: #42d784; | ||||||
|  |   } | ||||||
|  |   .status4, | ||||||
|  |   .status5 { | ||||||
|  |     background: #e4e4e4; | ||||||
|  |   } | ||||||
|  |   .header-content { | ||||||
|  |     padding-bottom: 150px; | ||||||
|  |     .header-top { | ||||||
|  |       width: 100%; | ||||||
|  |       height: 440px; | ||||||
|  |       img { | ||||||
|  |         width: 100%; | ||||||
|  |         height: 100%; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .header-middle { | ||||||
|  |       padding: 32px 32px 0 32px; | ||||||
|  |  | ||||||
|  |       .img-title { | ||||||
|  |         font-size: 36px; | ||||||
|  |         font-weight: 600; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .header-middle-bottom { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         margin-top: 32px; | ||||||
|  |         .left { | ||||||
|  |           .left-btn { | ||||||
|  |             padding: 4px 8px; | ||||||
|  |             border-radius: 8px; | ||||||
|  |  | ||||||
|  |             font-size: 26px; | ||||||
|  |             color: #ffffff; | ||||||
|  |             text-align: center; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         .right { | ||||||
|  |           img { | ||||||
|  |             width: 40px; | ||||||
|  |             height: 40px; | ||||||
|  |             border-radius: 50%; | ||||||
|  |             vertical-align: text-top; | ||||||
|  |             margin-right: 8px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .cards { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         border-bottom: 2px solid #eee; | ||||||
|  |         padding: 36px 0; | ||||||
|  |         line-height: 40px; | ||||||
|  |         font-size: 28px; | ||||||
|  |  | ||||||
|  |         .cards-left { | ||||||
|  |           color: #999; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .cards-right { | ||||||
|  |           color: #333; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .header-bottom { | ||||||
|  |       background: #fff; | ||||||
|  |  | ||||||
|  |       .content-details { | ||||||
|  |         padding: 32px 32px 80px 32px; | ||||||
|  |         .font { | ||||||
|  |           margin-top: 32px; | ||||||
|  |           font-size: 30px; | ||||||
|  |           line-height: 1.5; | ||||||
|  |         } | ||||||
|  |         .font-img { | ||||||
|  |           margin-top: 26px; | ||||||
|  |           width: 100%; | ||||||
|  |           height: 480px; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .content-trends { | ||||||
|  |         // padding-bottom: 40px; | ||||||
|  |         .details { | ||||||
|  |           .card { | ||||||
|  |             padding: 26px 32px 28px 32px; | ||||||
|  |             .card-nav { | ||||||
|  |               display: flex; | ||||||
|  |               .avatar { | ||||||
|  |                 width: 64px; | ||||||
|  |                 height: 64px; | ||||||
|  |                 line-height: 60px; | ||||||
|  |                 background: #4e8eee; | ||||||
|  |                 border-radius: 50%; | ||||||
|  |                 text-align: center; | ||||||
|  |  | ||||||
|  |                 font-size: 24px; | ||||||
|  |                 font-weight: 500; | ||||||
|  |                 color: #ffffff; | ||||||
|  |                 margin-right: 16px; | ||||||
|  |               } | ||||||
|  |               .right { | ||||||
|  |                 // display: inline; | ||||||
|  |                 display: flex; | ||||||
|  |                 flex-direction: column; | ||||||
|  |  | ||||||
|  |                 .name { | ||||||
|  |                   font-size: 26px; | ||||||
|  |                   font-weight: 500; | ||||||
|  |                 } | ||||||
|  |                 .time { | ||||||
|  |                   font-size: 22px; | ||||||
|  |                   color: #999999; | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             .card-font { | ||||||
|  |               margin-top: 36px; | ||||||
|  |               line-height: 1.6; | ||||||
|  |               text-overflow: -o-ellipsis-lastline; | ||||||
|  |               overflow: hidden; | ||||||
|  |               text-overflow: ellipsis; | ||||||
|  |               display: -webkit-box; | ||||||
|  |               -webkit-line-clamp: 2; | ||||||
|  |               line-clamp: 2; | ||||||
|  |               -webkit-box-orient: vertical; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             .card-img { | ||||||
|  |               margin-top: 16px; | ||||||
|  |               img { | ||||||
|  |                 width: 224px; | ||||||
|  |                 height: 224px; | ||||||
|  |                 margin-right: 8px; | ||||||
|  |               } | ||||||
|  |               img:last-child { | ||||||
|  |                 margin-right: 0; | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             .card-icon { | ||||||
|  |               display: flex; | ||||||
|  |               justify-content: space-between; | ||||||
|  |               margin-top: 28px; | ||||||
|  |               div { | ||||||
|  |                 display: flex; | ||||||
|  |                 align-items: center; | ||||||
|  |                 span { | ||||||
|  |                   font-size: 24px; | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         ::v-deep .emptyWrap { | ||||||
|  |           // background-color: pink; | ||||||
|  |           padding-bottom: 50px; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .noDeatil { | ||||||
|  |           background-color: #f3f6f9; | ||||||
|  |           img { | ||||||
|  |             width: 400px; | ||||||
|  |             height: 240px; | ||||||
|  |             transform: translate(50%, 25%); | ||||||
|  |             padding-bottom: 156px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .card-bottom { | ||||||
|  |           height: 20px; | ||||||
|  |           background-color: #f3f6f9; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .addicon { | ||||||
|  |     position: fixed; | ||||||
|  |     bottom: 280px; | ||||||
|  |     right: 30px; | ||||||
|  |     background: #fefefe; | ||||||
|  |     box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); | ||||||
|  |     border-radius: 50%; | ||||||
|  |     padding: 26px 24px 22px 24px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .btn { | ||||||
|  |     position: fixed; | ||||||
|  |     bottom: 0; | ||||||
|  |     width: 100%; | ||||||
|  |     // height: 112px; | ||||||
|  |     background: #f3f6f9; | ||||||
|  |  | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     padding: 32px 0; | ||||||
|  |     text-align: center; | ||||||
|  |     .edit { | ||||||
|  |       width: 254px; | ||||||
|  |       height: 92px; | ||||||
|  |       line-height: 92px; | ||||||
|  |       background: #ffffff; | ||||||
|  |       border-radius: 8px; | ||||||
|  |       border: 2px solid #3671ee; | ||||||
|  |  | ||||||
|  |       font-size: 34px; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #3671ee; | ||||||
|  |       margin-left: 32px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .public { | ||||||
|  |       width: 400px; | ||||||
|  |  | ||||||
|  |       line-height: 92px; | ||||||
|  |       border-radius: 8px; | ||||||
|  |       font-size: 34px; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #ffffff; | ||||||
|  |       margin-right: 32px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .max { | ||||||
|  |       margin: 0 auto; | ||||||
|  |       width: 686px; | ||||||
|  |       height: 92px; | ||||||
|  |       line-height: 92px; | ||||||
|  |       background: #cbddf9; | ||||||
|  |       border-radius: 8px; | ||||||
|  |  | ||||||
|  |       font-size: 34px; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #ffffff; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										466
									
								
								src/apps/AppActive/AddActive.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										466
									
								
								src/apps/AppActive/AddActive.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,466 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="page"> | ||||||
|  |     <div class="textarea-div border"> | ||||||
|  |       <div class="title mar-b32"><span>*</span>活动标题</div> | ||||||
|  |       <div class="pad-l20"> | ||||||
|  |         <u-input type="textarea" v-model="params.title" :border="false" height="44" :auto-height="true" placeholder="请输入标题(60字以内)" :placeholder-style="placeholderStyle" maxlength="60" /> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="textarea-div mar-b16"> | ||||||
|  |       <div class="title mar-b32"><span>*</span>活动详情</div> | ||||||
|  |       <div class="pad-l20"> | ||||||
|  |         <u-input type="textarea" v-model="params.content" :border="false" :height="140" :auto-height="true" placeholder="请输入活动详情(500字以内)" :placeholder-style="placeholderStyle" maxlength="500" /> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="textarea-div mar-b16"> | ||||||
|  |       <div class="title mar-b32"><span>*</span>活动封面图</div> | ||||||
|  |       <div class="pad-l20"> | ||||||
|  |         <AiUploader v-model="files"></AiUploader> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>活动主题</div> | ||||||
|  |         <div class="value" @click="selectClick(topicList, 'target')"> | ||||||
|  |           <span :class="params.target ? '' : 'color-999'">{{ params.target || '请选择' }}</span> | ||||||
|  |           <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>活动类型</div> | ||||||
|  |         <div class="value" @click="selectClick(activeTypeList, 'type')"> | ||||||
|  |           <span :class="params.type ? '' : 'color-999'">{{ params.type || '请选择' }}</span> | ||||||
|  |           <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>报名范围</div> | ||||||
|  |         <div class="value" @click="selectClick($dict.getDict('activityScope'), 'scope')"> | ||||||
|  |           <span :class="params.scope === '' ? 'color-999' : ''">{{ $dict.getLabel('activityScope', params.scope) || '请选择' }}</span> | ||||||
|  |           <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div" v-if="params.scope == 1"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>发布单位</div> | ||||||
|  |         <div class="value"> | ||||||
|  |           <AIsEarchPopup title="请选择发布单位" placeholder="搜索单位名称" :ops="{ label: 'name', search: 'name' }" url="/admin/partyOrganization/queryPartyOrganizationListByName" @select="(v) => (selectedOrg = v)"> | ||||||
|  |             <div class="picker-input" slot="btn"> | ||||||
|  |               <view class="uni-input color-999" v-if="!selectedOrg.id">请选择</view> | ||||||
|  |               <view class="uni-input" v-else>{{ selectedOrg.name }}</view> | ||||||
|  |               <image src="https://cdn.cunwuyun.cn/img/right-icon-999.png" class="right-icon"></image> | ||||||
|  |             </div> | ||||||
|  |           </AIsEarchPopup> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="input-div" v-if="params.scope == 2"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>发布小区</div> | ||||||
|  |         <div class="value" @click="estateSelect = true"> | ||||||
|  |           <span :class="params.communityName ? '' : 'color-999'">{{ params.communityName || '请选择' }}</span> | ||||||
|  |           <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <u-select v-model="estateSelect" mode="mutil-column-auto" :list="estateTreeData" @confirm="handleBindEstate" value-name="id" label-name="name" /> | ||||||
|  |  | ||||||
|  |     <div class="input-div mar-b16"> | ||||||
|  |       <div class="border-content"> | ||||||
|  |         <div class="title"><span>*</span>活动名额</div> | ||||||
|  |         <div class="value"> | ||||||
|  |           <u-input type="input" v-model="params.total" :border="false" :height="44" :auto-height="true" placeholder="如不限制人数,填写0" input-align="right" :placeholder-style="placeholderStyle" maxlength="5" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>开始时间</div> | ||||||
|  |         <div class="value" @click="selectDate('beginTime')"> | ||||||
|  |           <span :class="params.beginTime ? '' : 'color-999'">{{ params.beginTime || '请选择' }}</span> | ||||||
|  |           <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>结束时间</div> | ||||||
|  |         <div class="value" @click="selectDate('endTime')"> | ||||||
|  |           <span :class="params.endTime ? '' : 'color-999'">{{ params.endTime || '请选择' }}</span> | ||||||
|  |           <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>报名截止时间</div> | ||||||
|  |         <div class="value" @click="selectDate('stopSignupTime')"> | ||||||
|  |           <span :class="params.stopSignupTime ? '' : 'color-999'">{{ params.stopSignupTime || '请选择' }}</span> | ||||||
|  |           <img src="https://cdn.cunwuyun.cn/img/right-icon-999.png" alt="" class="right-icon" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div mar-b16"> | ||||||
|  |       <div class="border-content"> | ||||||
|  |         <div class="title"><span>*</span>活动地点</div> | ||||||
|  |         <div class="value"> | ||||||
|  |           <input type="text" maxlength="20" v-model="params.address" :border="false" :height="44" :auto-height="true" placeholder="请输入" input-align="right" :placeholder-style="placeholderStyle" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div"> | ||||||
|  |       <div class="border-content border"> | ||||||
|  |         <div class="title"><span>*</span>联系人</div> | ||||||
|  |         <div class="value"> | ||||||
|  |           <u-input type="input" v-model="params.contactPerson" :border="false" :height="44" :auto-height="true" placeholder="请输入" input-align="right" :placeholder-style="placeholderStyle" maxlength="10" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="input-div mar-b16 pad-b220"> | ||||||
|  |       <div class="border-content"> | ||||||
|  |         <div class="title"><span>*</span>联系方式</div> | ||||||
|  |         <div class="value"> | ||||||
|  |           <u-input type="input" v-model="params.contactPhone" :border="false" :height="44" :auto-height="true" placeholder="请输入" input-align="right" :placeholder-style="placeholderStyle" maxlength="11" /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="footer-btn"> | ||||||
|  |       <div class="btn" @click="add">保存</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <u-select v-model="showSelect" :list="selectList" label-name="dictName" value-name="dictValue" @confirm="selectConfirm"></u-select> | ||||||
|  |     <u-picker mode="time" v-model="showDate" :start-year="startYear" @confirm="dateConfirm" :params="timeParams"></u-picker> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { mapState } from 'vuex' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'AddActive', | ||||||
|  |   components: {}, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user', 'global']), | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       files: [], | ||||||
|  |       showSelect: false, | ||||||
|  |       selectList: [], | ||||||
|  |       topicList: [], //活动主题分类 | ||||||
|  |       activeTypeList: [], | ||||||
|  |       selectData: '', | ||||||
|  |       showDate: false, | ||||||
|  |       startYear: '', | ||||||
|  |       beginTimestamp: '', | ||||||
|  |       params: { | ||||||
|  |         title: '', | ||||||
|  |         content: '', | ||||||
|  |         url: '', | ||||||
|  |         target: '', | ||||||
|  |         type: '', | ||||||
|  |         scope: '', | ||||||
|  |         total: '', | ||||||
|  |         address: '', | ||||||
|  |         beginTime: '', | ||||||
|  |         endTime: '', | ||||||
|  |         stopSignupTime: '', | ||||||
|  |         contactPerson: '', | ||||||
|  |         contactPhone: '', | ||||||
|  |         status: 0, | ||||||
|  |         createUserId: '', | ||||||
|  |         createUserName: '', | ||||||
|  |         orgName: '', | ||||||
|  |         avatar: '', | ||||||
|  |         id: '', | ||||||
|  |         orgId: '', | ||||||
|  |         orgName: '', | ||||||
|  |         communityId: '', | ||||||
|  |         communityName: '', | ||||||
|  |       }, | ||||||
|  |       timeParams: { | ||||||
|  |         year: true, | ||||||
|  |         month: true, | ||||||
|  |         day: true, | ||||||
|  |         hour: true, | ||||||
|  |         minute: true, | ||||||
|  |         second: true, | ||||||
|  |         timestamp: true, | ||||||
|  |       }, | ||||||
|  |       placeholderStyle: 'color:#999;font-size:16px;', | ||||||
|  |       selectedOrg: {}, | ||||||
|  |       estateTreeData: [], | ||||||
|  |       estateSelect: false, | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     this.$dict.load('activityScope').then(() => { | ||||||
|  |       this.getTopicList() | ||||||
|  |       console.log(option) | ||||||
|  |       if (option.id) { | ||||||
|  |         uni.setNavigationBarTitle({ title: '编辑活动' }) | ||||||
|  |         this.params.id = option.id | ||||||
|  |         this.getDetail() | ||||||
|  |       } else { | ||||||
|  |         this.params.contactPerson = this.user.realName | ||||||
|  |         this.params.contactPhone = this.user.phone | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|  |     var date = new Date() | ||||||
|  |     this.startYear = date.getFullYear() | ||||||
|  |     this.getEstates() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getEstates() { | ||||||
|  |       this.$http.post(`/app/appvanguardcommunityinfo/getTree?type=1&areaId=${this.global.areaId}`).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.estateTreeData = res.data?.children | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     handleBindEstate(e) { | ||||||
|  |       this.params.communityId = e[2].value | ||||||
|  |       this.params.communityName = e[2].label | ||||||
|  |     }, | ||||||
|  |     getDetail() { | ||||||
|  |       this.$http.post(`/app/appactivityinfo/queryDetailById?id=${this.params.id}`).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.files = [ | ||||||
|  |             { | ||||||
|  |               url: res.data.url, | ||||||
|  |             }, | ||||||
|  |           ] | ||||||
|  |           this.params = res.data | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getTopicList() { | ||||||
|  |       this.$http.post(`/app/appactivitytopic/list?status=1&size=1000`).then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           res.data.records.map((item) => { | ||||||
|  |             ;(item.dictName = item.name), (item.dictValue = item.content) | ||||||
|  |           }) | ||||||
|  |           this.topicList = res.data.records | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     selectClick(list, data) { | ||||||
|  |       if (data == 'type' && !list.length) { | ||||||
|  |         //活动类型 | ||||||
|  |         return this.$toast('请先选择活动主题') | ||||||
|  |       } | ||||||
|  |       this.selectData = data | ||||||
|  |       this.selectList = list | ||||||
|  |       this.showSelect = true | ||||||
|  |     }, | ||||||
|  |     selectConfirm(e) { | ||||||
|  |       console.log(e) | ||||||
|  |       if (this.selectData == 'target' || this.selectData == 'type') { | ||||||
|  |         this.params[this.selectData] = e[0].label | ||||||
|  |       } else { | ||||||
|  |         this.params[this.selectData] = e[0].value | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       if (this.selectData == 'target') { | ||||||
|  |         //选择主题分类 | ||||||
|  |         var content = e[0].value.split(',') | ||||||
|  |         this.activeTypeList = [] | ||||||
|  |         this.type = '' | ||||||
|  |         content.map((items) => { | ||||||
|  |           var info = { dictName: items } | ||||||
|  |           this.activeTypeList.push(info) | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     selectDate(data) { | ||||||
|  |       if (data == 'endTime' && !this.params.beginTime) { | ||||||
|  |         return this.$toast('请先选择活动开始时间') | ||||||
|  |       } | ||||||
|  |       if (data == 'stopSignupTime' && !this.params.beginTime) { | ||||||
|  |         return this.$toast('请先选择活动开始时间') | ||||||
|  |       } | ||||||
|  |       this.selectData = data | ||||||
|  |       this.showDate = true | ||||||
|  |     }, | ||||||
|  |     dateConfirm(e) { | ||||||
|  |       console.log(e) | ||||||
|  |       if (this.selectData == 'beginTime') { | ||||||
|  |         this.beginTimestamp = e.timestamp | ||||||
|  |         this.params.endTime = '' | ||||||
|  |         this.params.stopSignupTime = '' | ||||||
|  |       } | ||||||
|  |       if (this.selectData == 'endTime' && e.timestamp < this.beginTimestamp) { | ||||||
|  |         return this.$toast('活动结束时间不能晚于开始时间') | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       if (this.selectData == 'stopSignupTime' && e.timestamp > this.beginTimestamp) { | ||||||
|  |         return this.$toast('报名截止时间不能早于开始时间') | ||||||
|  |       } | ||||||
|  |       this.params[this.selectData] = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}` | ||||||
|  |     }, | ||||||
|  |     add() { | ||||||
|  |       if (!this.params.title) { | ||||||
|  |         return this.$toast('请输入活动标题') | ||||||
|  |       } | ||||||
|  |       if (!this.params.content) { | ||||||
|  |         return this.$toast('请输入活动标题') | ||||||
|  |       } | ||||||
|  |       if (!this.files.length) { | ||||||
|  |         return this.$toast('请上传活动封面') | ||||||
|  |       } | ||||||
|  |       if (!this.params.target) { | ||||||
|  |         return this.$toast('请选择活动主题') | ||||||
|  |       } | ||||||
|  |       if (!this.params.type) { | ||||||
|  |         return this.$toast('请选择活动类型') | ||||||
|  |       } | ||||||
|  |       if (this.params.scope === '') { | ||||||
|  |         return this.$toast('请选择报名范围') | ||||||
|  |       } | ||||||
|  |       if (this.params.scope == 1 && !this.selectedOrg.id) { | ||||||
|  |         return this.$toast('请选择发布单位') | ||||||
|  |       } | ||||||
|  |       if (this.params.scope == 2 && !this.params.communityId) { | ||||||
|  |         return this.$toast('请选择发布小区') | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       if (!this.params.total) { | ||||||
|  |         return this.$toast('请输入活动名额') | ||||||
|  |       } | ||||||
|  |       if (!this.params.address) { | ||||||
|  |         return this.$toast('请输入活动地点') | ||||||
|  |       } | ||||||
|  |       if (!this.params.beginTime) { | ||||||
|  |         return this.$toast('请选择开始时间') | ||||||
|  |       } | ||||||
|  |       if (!this.params.endTime) { | ||||||
|  |         return this.$toast('请选择结束时间') | ||||||
|  |       } | ||||||
|  |       if (!this.params.stopSignupTime) { | ||||||
|  |         return this.$toast('请选择报名截止时间') | ||||||
|  |       } | ||||||
|  |       if (!this.params.contactPerson) { | ||||||
|  |         return this.$toast('请输入联系人') | ||||||
|  |       } | ||||||
|  |       if (!this.params.contactPhone) { | ||||||
|  |         return this.$toast('请输入联系方式') | ||||||
|  |       } | ||||||
|  |       if (this.params.scope == 1) { | ||||||
|  |         this.params.orgId = this.selectedOrg.id | ||||||
|  |         this.params.orgName = this.selectedOrg.name | ||||||
|  |       } | ||||||
|  |       this.params.url = this.files[0].url | ||||||
|  |       this.params.createUserId = this.user.partyId | ||||||
|  |       this.params.createUserName = this.user.realName | ||||||
|  |       this.params.orgName = this.user.partyOrgName | ||||||
|  |       this.params.avatar = this.user.avatarUrl | ||||||
|  |       this.confirmAdd() | ||||||
|  |     }, | ||||||
|  |     confirmAdd() { | ||||||
|  |       this.$http.post(`/app/appactivityinfo/addOrUpdate`, this.params).then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.$toast(this.params.id ? '活动编辑成功' : '活动新增成功') | ||||||
|  |           setTimeout(() => { | ||||||
|  |             uni.$emit('refresh') | ||||||
|  |             uni.navigateBack() | ||||||
|  |           }, 2000) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .textarea-div { | ||||||
|  |   width: 100%; | ||||||
|  |   padding: 32px 32px 38px 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   background-color: #fff; | ||||||
|  | } | ||||||
|  | .input-div { | ||||||
|  |   width: 100%; | ||||||
|  |   padding-left: 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   background-color: #fff; | ||||||
|  |   .border-content { | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     line-height: 44px; | ||||||
|  |     color: #333; | ||||||
|  |     padding: 34px 32px 34px 0; | ||||||
|  |     .right-icon { | ||||||
|  |       width: 32px; | ||||||
|  |       height: 32px; | ||||||
|  |       margin-left: 8px; | ||||||
|  |       vertical-align: middle; | ||||||
|  |     } | ||||||
|  |     .color-999 { | ||||||
|  |       color: #999; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .title { | ||||||
|  |   font-size: 32px; | ||||||
|  |   font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |   color: #333; | ||||||
|  |   line-height: 44px; | ||||||
|  |   span { | ||||||
|  |     font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |     color: #ff4466; | ||||||
|  |     margin-right: 4px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .border { | ||||||
|  |   border-bottom: 2px solid #ddd; | ||||||
|  | } | ||||||
|  | .mar-b32 { | ||||||
|  |   margin-bottom: 32px; | ||||||
|  | } | ||||||
|  | .pad-l20 { | ||||||
|  |   padding-left: 20px; | ||||||
|  | } | ||||||
|  | .mar-b16 { | ||||||
|  |   margin-bottom: 16px; | ||||||
|  | } | ||||||
|  | .pad-b220 { | ||||||
|  |   padding-bottom: 220px; | ||||||
|  | } | ||||||
|  | .footer-btn { | ||||||
|  |   width: 100%; | ||||||
|  |   padding: 116px 32px 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   position: fixed; | ||||||
|  |   bottom: 0; | ||||||
|  |   left: 0; | ||||||
|  |   background-color: #f3f6f9; | ||||||
|  |   z-index: 99; | ||||||
|  |   .btn { | ||||||
|  |     width: 100%; | ||||||
|  |     height: 92px; | ||||||
|  |     line-height: 92px; | ||||||
|  |     text-align: center; | ||||||
|  |     background: #1365dd; | ||||||
|  |     border-radius: 8px; | ||||||
|  |     font-size: 34px; | ||||||
|  |     color: #fff; | ||||||
|  |     font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |     font-weight: 500; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .value { | ||||||
|  |   width: calc(100% - 240px); | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | ::v-deep ai-search-popup { | ||||||
|  |   width: 100%; | ||||||
|  |   .uni-input { | ||||||
|  |     display: inline-block; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										137
									
								
								src/apps/AppActive/AddPosts.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								src/apps/AppActive/AddPosts.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,137 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="page"> | ||||||
|  |     <div class="textarea-div mar-b16"> | ||||||
|  |       <div class="title mar-b32"><span></span>帖子内容</div> | ||||||
|  |       <div class="pad-l20"> | ||||||
|  |         <u-input v-model="form.content" type="textarea" :border="false" :height="140" :auto-height="true" placeholder="请输入内容(1000字以内)" placeholder-style="color:#999;font-size:16px;" maxLength="140" /> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="textarea-div pad-b208"> | ||||||
|  |       <div class="title mar-b32"><span></span>图片(最多9张)</div> | ||||||
|  |       <div class="pad-l20"> | ||||||
|  |         <AiUploader :limit="9" v-model="form.images"></AiUploader> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="footer-btn"> | ||||||
|  |       <div class="btn" @click="addPost">立即发布</div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { mapState } from 'vuex' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'AddPosts', | ||||||
|  |   components: {}, | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       files: [], | ||||||
|  |       id: '', | ||||||
|  |       flag: false, | ||||||
|  |       form: { | ||||||
|  |         content: '', | ||||||
|  |         images: [], | ||||||
|  |       }, | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   onLoad(o) { | ||||||
|  |     this.id = o.id || '' | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     addPost() { | ||||||
|  |       if (this.flag) return | ||||||
|  |  | ||||||
|  |       if (!this.form.content && !this.form.images.length) { | ||||||
|  |         return this.$u.toast('帖子内容不能为空') | ||||||
|  |       } | ||||||
|  |       this.flag = true | ||||||
|  |  | ||||||
|  |       let imagesList = [] | ||||||
|  |       if (this.form.images) { | ||||||
|  |         this.form.images.map((item) => { | ||||||
|  |           imagesList.push({ id: item.id, url: item.url }) | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       this.$http | ||||||
|  |         .post(`/app/apppostinfo/addOrUpdate`, { | ||||||
|  |           content: this.form.content, | ||||||
|  |           avatar: this.user.avatarUrl, | ||||||
|  |           name: this.user.realName, | ||||||
|  |           phone: this.user.phone ? this.user.phone : '', | ||||||
|  |           userId: this.user.partyId, | ||||||
|  |           activityId: this.id, | ||||||
|  |           images: JSON.stringify(imagesList), | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$u.toast('发布成功') | ||||||
|  |             this.flag = false | ||||||
|  |             uni.$emit('refresh') | ||||||
|  |             uni.navigateBack() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .textarea-div { | ||||||
|  |   width: 100%; | ||||||
|  |   padding: 32px 32px 38px 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   background-color: #fff; | ||||||
|  | } | ||||||
|  | .title { | ||||||
|  |   font-size: 32px; | ||||||
|  |   font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |   color: #333; | ||||||
|  |   line-height: 44px; | ||||||
|  |   span { | ||||||
|  |     font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |     color: #ff4466; | ||||||
|  |     margin-right: 4px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .border { | ||||||
|  |   border-bottom: 2px solid #ddd; | ||||||
|  | } | ||||||
|  | .mar-b32 { | ||||||
|  |   margin-bottom: 32px; | ||||||
|  | } | ||||||
|  | .pad-l20 { | ||||||
|  |   padding-left: 20px; | ||||||
|  | } | ||||||
|  | .mar-b16 { | ||||||
|  |   margin-bottom: 16px; | ||||||
|  | } | ||||||
|  | .pad-b208 { | ||||||
|  |   padding-bottom: 208px; | ||||||
|  | } | ||||||
|  | .footer-btn { | ||||||
|  |   width: 100%; | ||||||
|  |   padding: 116px 32px 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   position: fixed; | ||||||
|  |   bottom: 0; | ||||||
|  |   left: 0; | ||||||
|  |   background-color: #f3f6f9; | ||||||
|  |   z-index: 99; | ||||||
|  |   .btn { | ||||||
|  |     width: 100%; | ||||||
|  |     height: 92px; | ||||||
|  |     line-height: 92px; | ||||||
|  |     text-align: center; | ||||||
|  |     background: #1365dd; | ||||||
|  |     border-radius: 8px; | ||||||
|  |     font-size: 34px; | ||||||
|  |     color: #fff; | ||||||
|  |     font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |     font-weight: 500; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -1,178 +1,372 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="AppActive"> |   <div class="page"> | ||||||
|     <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" bg-color="#3975C6" inactive-color="#fff" active-color="#fff" @change="change"></u-tabs> |     <div class="po-f"> | ||||||
|  |       <view class="nav-box flex-row"> | ||||||
|     <div class="dataTop"> |         <view | ||||||
|       <div class="dataLeft">活动列表</div> |           class="nav-item" | ||||||
|  |           :class="tabIndex == index ? 'active' : ''" | ||||||
|       <div class="dataRight"> |           v-for="(item, index) in tabList" | ||||||
|         <span>共</span> |           :key="index" | ||||||
|         <span class="specialColor">12</span> |           @click="tabClick(index)" | ||||||
|         <span>个活动</span> |           >{{ item }}<span></span | ||||||
|  |         ></view> | ||||||
|  |       </view> | ||||||
|  |       <div v-if="tabIndex == 0" class="header-tab"> | ||||||
|  |         <div class="header-info" v-if="newsList.length"> | ||||||
|  |           <span class="tips">公告</span> | ||||||
|  |           <div class="text-content"> | ||||||
|  |             <u-notice-bar @click="noticeClick" | ||||||
|  |               mode="vertical" | ||||||
|  |               :list="newsList" | ||||||
|  |               :volume-icon="false" | ||||||
|  |               type="none" | ||||||
|  |               color="#333" | ||||||
|  |             ></u-notice-bar> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |         <div class="header-title"> | ||||||
|  |           <p class="text">帖子列表</p> | ||||||
|  |           <!-- <div class="right-select" @click="showSelect=true"> | ||||||
|  |             {{selectText}}<img src="../../static/img/right-icon-666.png" alt="" /> | ||||||
|  |           </div> --> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div v-if="tabIndex == 1" class="header-tab"> | ||||||
|  |         <div class="header-info">活动报名大于{{num}}人时组团成功,人数不足时活动失效。</div> | ||||||
|  |         <div class="header-title"> | ||||||
|  |           <p class="text">活动列表</p> | ||||||
|  |         <div class="right-select" @click="showSelect=true"> | ||||||
|  |             {{selectText}}<img src="./components/right-icon-666.png" alt="" /> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div v-if="tabIndex == 2" class="header-tab"> | ||||||
|  |         <!-- <AiHeaderSearchBar placeholder="请输入活动标题或者地点" barBgColor="#fff" inputBgColor="#F5F5F5" inputColor="#333" inputPlaceholderColor="#999" searchIconColor="#ccc" @change="search"></AiHeaderSearchBar> --> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|  |     <div class="list-content"> | ||||||
|     <template v-if="datas.length < 1"> |       <div v-if="tabIndex == 0" :class="isPadding ? 'pad-t308' : 'pad-t200'"> | ||||||
|       <AiCard v-for="(item, i) in 6" :key="i" @click.native="toDetail(item, 1)"> |         <div class="forum-list"> | ||||||
|         <template #custom> |           <div class="forum-item" v-for="(item, index) in list" :key="index" @click="toBBSDetail(item.id)"> | ||||||
|           <div class="left"> |             <div class="user-info"> | ||||||
|             <div class="titles">【敬老爱幼】带你在洞庭湖兜兜风 寻觅江豚的身影</div> |               <image :src="item.avatar" class="user-name-bg"></image> | ||||||
|  |               <div class="info"> | ||||||
|             <div class="nums"> |                 <div>{{ item.name }}</div> | ||||||
|               <span class="specialColor">6人</span> |                 <p>{{ item.createTime }}</p> | ||||||
|               <span>已报名</span> |               </div> | ||||||
|             </div> |             </div> | ||||||
|  |             <p class="conent-text">{{ item.content }}</p> | ||||||
|             <div class="times"> |             <div class="img-list" v-if="item.images.length"> | ||||||
|               <span class="timesCont">2021-12-16</span> |               <image v-for="(img, i) in item.images" :key="i" :src="img.url" @click.stop="previewImage(item.images, img.url)" v-if="i<3"> | ||||||
|  |             </div> | ||||||
|               <span>| 2天</span> |             <div class="bottom-icon"> | ||||||
|  |               <div> | ||||||
|  |                 <i class="iconfont"></i> | ||||||
|  |                 <span>{{ item.viewNum }}</span> | ||||||
|  |               </div> | ||||||
|  |               <div> | ||||||
|  |                 <i class="iconfont"></i> | ||||||
|  |                 <span>{{ item.replyNum }}</span> | ||||||
|  |               </div> | ||||||
|  |               <!-- <div @click.stop="support(item, index)"> | ||||||
|  |                 <AiIcon icon="iconpraiseactive2x" size="18" v-if="item.mySupport==1" style="vertical-align: middle;" /> | ||||||
|  |                 <i class="iconfont" v-else></i> | ||||||
|  |                 <span>{{ item.supportNum }}</span> | ||||||
|  |               </div> --> | ||||||
|             </div> |             </div> | ||||||
|  |  | ||||||
|             <div class="areaNmae">湖南省岳阳市岳阳县荣家湾镇六…湖南省岳阳市岳阳县荣家湾镇六…</div> |  | ||||||
|           </div> |           </div> | ||||||
|  |         </div> | ||||||
|           <img src="./yan.jpg" alt="" /> |       </div> | ||||||
|         </template> |       <div v-if="tabIndex == 1" class="pad-t308"> | ||||||
|       </AiCard> |         <div class="active-list mar-t32"> | ||||||
|     </template> |           <div class="active-item" v-for="(item, index) in list" :key="index" @click="toActiveDetail(item)"> | ||||||
|  |             <div class="img-div"> | ||||||
|  |               <div class="status" :class="'status'+item.status">{{ $dict.getLabel('newActivityStatus', item.status) }}</div> | ||||||
|  |               <img :src="item.url" alt=""> | ||||||
|  |             </div> | ||||||
|  |             <div class="right-info"> | ||||||
|  |               <p class="title">{{ item.title }}</p> | ||||||
|  |               <div class="time"><span>{{ item.realNum }}人</span>已报名</div> | ||||||
|  |               <div class="time">{{ item.beginTime }} </div> | ||||||
|  |               <div class="time address">{{ item.address }}</div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div v-if="tabIndex == 2" class="pad-t200"> | ||||||
|  |         <div class="active-list mar-t32"> | ||||||
|  |           <div class="active-item" v-for="(item, index) in list" :key="index" @click="toActiveDetail(item)"> | ||||||
|  |             <div class="img-div"> | ||||||
|  |               <div class="status" :class="'status'+item.status">{{ $dict.getLabel('newActivityStatus', item.status) }}</div> | ||||||
|  |               <img :src="item.url" alt=""> | ||||||
|  |             </div> | ||||||
|  |             <div class="right-info"> | ||||||
|  |               <p class="title">{{ item.title }}</p> | ||||||
|  |               <div class="time"><span>{{ item.realNum }}人</span>已报名</div> | ||||||
|  |               <div class="time">{{ item.beginTime }} </div> | ||||||
|  |               <div class="time address">{{ item.address }}</div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <AiEmpty v-if="!list.length"/> | ||||||
|  |     </div> | ||||||
|  |     <u-select v-model="showSelect" mode="mutil-column-auto" :list="selectList" @confirm="confirmSelect" /> | ||||||
|  |     <!-- <img src="../../static/img/add-icon.png" alt="" class="add-icon" @click="toAdd"> --> | ||||||
|  |  | ||||||
|     <AiFixedBtn> |     <AiFixedBtn> | ||||||
|       <div class="addBtn iconfont iconfont-iconfangda" @tap.stop="toAdd()" /> |       <div class="addBtn iconfont iconfont-iconfangda" @tap.stop="toAdd()" /> | ||||||
|     </AiFixedBtn> |     </AiFixedBtn> | ||||||
|  |  | ||||||
|  |     <u-back-top :scrollTop="scrollTop" :iconStyle="iconStyle" icon="arrow-up" :customStyle="customStyle" bottom="72" right="32"></u-back-top> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|  | import { mapState } from 'vuex' | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|   name: 'AppActive', |   name: 'AppActive', | ||||||
|   appName: '居民活动', |   appName: '居民议事', | ||||||
|   components: {}, |   components: {}, | ||||||
|   props: {}, |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|       datas: [], |       list: [], | ||||||
|       tabList: [ |       isMore: false, | ||||||
|         { |       current: 0, | ||||||
|           name: '全部活动', |       pageShow: false, | ||||||
|         }, |       tabIndex: 0, | ||||||
|         { |       tabList: ["论坛", "活动", "动态"], | ||||||
|           name: '我发布的', |       list: [], | ||||||
|         }, |       newsList: [], | ||||||
|       ], |       iconStyle: { | ||||||
|       currentTabs: 0, | 				fontSize: '56rpx', | ||||||
|       current: 1, | 				color: '#1365DD', | ||||||
|  |         fontWeight: '700' | ||||||
|  | 			}, | ||||||
|  |       customStyle: { | ||||||
|  |         width: '96rpx', | ||||||
|  |         height: '96rpx', | ||||||
|  |         backgroundColor: '#fff', | ||||||
|  |         boxShadow: '0px 8rpx 16rpx 0px rgba(0, 0, 0, 0.2)', | ||||||
|  |       }, | ||||||
|  |       scrollTop: 0, | ||||||
|  |       supportFlag: true, | ||||||
|  |       num: '', | ||||||
|  |       title: '', | ||||||
|  |       selectText: '最新活动', | ||||||
|  |       showSelect: false, | ||||||
|  |       selectList: [{label: '最新活动'}, {label: '我的活动'}], | ||||||
|  |       noticeList: [], | ||||||
|  |       isPadding: false | ||||||
|  |     }; | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     if(option.tabIndex) { | ||||||
|  |       this.tabIndex = option.tabIndex | ||||||
|     } |     } | ||||||
|   }, |     this.$dict.load(['newActivityStatus']).then(() => { | ||||||
|   computed: {}, |       this.getList() | ||||||
|   watch: {}, |       this.getActiveNum() | ||||||
|   onLoad() { |     }) | ||||||
|     this.getList() |  | ||||||
|   }, |  | ||||||
|   mounted() {}, |  | ||||||
|   methods: { |  | ||||||
|     getList() {}, |  | ||||||
|  |  | ||||||
|     change(index) { |     uni.$on('refresh', () => { | ||||||
|       this.currentTabs = index |       this.getListInit() | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |     this.getNewList() | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     search(v) { | ||||||
|  |       this.title = v | ||||||
|  |       this.getListInit() | ||||||
|  |     }, | ||||||
|  |     confirmSelect(e) { | ||||||
|  |       this.selectText = e[0].label | ||||||
|  |       this.getListInit() | ||||||
|  |     }, | ||||||
|  |     tabClick(index) { | ||||||
|  |       this.tabIndex = index | ||||||
|  |       this.getListInit() | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     toBBSDetail (id) { | ||||||
|  |       uni.navigateTo({ | ||||||
|  |         url: `./Detail?id=${id}` | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     toAdd () { | ||||||
|  |       if (this.tabIndex == 0) { | ||||||
|  |         uni.navigateTo({ | ||||||
|  |           url: `./AddPosts` | ||||||
|  |         }) | ||||||
|  |       } else { | ||||||
|  |         uni.navigateTo({ | ||||||
|  |           url: `./AddActive` | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     previewImage (images, img) { | ||||||
|  |       uni.previewImage({ | ||||||
|  |         urls: images.map(v => v.url), | ||||||
|  |         current: img | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getListInit() { | ||||||
|  |       this.current = 0 | ||||||
|  |       this.isMore = false | ||||||
|       this.getList() |       this.getList() | ||||||
|     }, |     }, | ||||||
|  |     getList () { | ||||||
|  |       if (this.isMore) return | ||||||
|  |  | ||||||
|     toAdd() { |       this.$loading() | ||||||
|       uni.navigateTo({ url: `./Add` }) |       let url = this.tabIndex == 0 ? `/app/apppostinfo/list` : `/app/appactivityinfo/list` | ||||||
|  |       let params = `&searchUserId=${this.user.partyId}` | ||||||
|  |  | ||||||
|  |       if(this.tabIndex == 1 && this.selectText == '我的活动') { //我的活动 | ||||||
|  |         params = `&createUserId=${this.user.partyId}` | ||||||
|  |       } | ||||||
|  |       if (this.tabIndex == 2) { | ||||||
|  |         params = `&status=5&title=${this.title}` | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |       this.$http.post(`${url}?size=10¤t=${this.current + 1}${params}`).then(res => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           if (!this.current) { | ||||||
|  |             this.list = [] | ||||||
|  |           } | ||||||
|  |  | ||||||
|  |           if (!res.data.records.length) { | ||||||
|  |             this.$hideLoading() | ||||||
|  |             this.isMore = true | ||||||
|  |  | ||||||
|  |             this.$nextTick(() => { | ||||||
|  |               this.pageShow = true | ||||||
|  |             }) | ||||||
|  |  | ||||||
|  |             return false | ||||||
|  |           } | ||||||
|  |  | ||||||
|  |           const data = res.data.records.map(item => { | ||||||
|  |             if (this.tabIndex == 0) { | ||||||
|  |               if (item.images) { | ||||||
|  |                 item.images = JSON.parse(item.images) | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return item | ||||||
|  |           }) | ||||||
|  |  | ||||||
|  |           this.list.push(...data) | ||||||
|  |           this.current = this.current + 1 | ||||||
|  |  | ||||||
|  |           this.$hideLoading() | ||||||
|  |           this.$nextTick(() => { | ||||||
|  |             this.pageShow = true | ||||||
|  |           }) | ||||||
|  |         } else { | ||||||
|  |           this.$hideLoading() | ||||||
|  |         } | ||||||
|  |       }).catch(() => { | ||||||
|  |         this.$hideLoading() | ||||||
|  |       }) | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|     toDetail(item) { |     support(e, index) { | ||||||
|       uni.navigateTo({ url: `./Detail` }) |       if (this.supportFlag) { | ||||||
|       // uni.navigateTo({ url: `./Detail?id=${item.id}` }) |         this.supportFlag = false; | ||||||
|  |         this.$http.post(`/app/apppostsupport/support`, { | ||||||
|  |           postId: e.id, | ||||||
|  |           createUserId: this.user.partyId | ||||||
|  |         }).then(res => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.supportFlag = true | ||||||
|  |             if(e.mySupport == 1) { | ||||||
|  |               this.list[index].mySupport = 0 | ||||||
|  |               this.list[index].supportNum = this.list[index].supportNum-1 | ||||||
|  |             }else { | ||||||
|  |               this.list[index].mySupport = 1 | ||||||
|  |               this.list[index].supportNum = this.list[index].supportNum+1 | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|     }, |     }, | ||||||
|  |     toActiveDetail(e) { | ||||||
|  |       uni.navigateTo({url: `./ActiveDetail?id=${e.id}`}) | ||||||
|  |     }, | ||||||
|  |     getActiveNum() { | ||||||
|  |       this.$http.post(`/app/appactivityconfig/queryDetail`).then(res => { | ||||||
|  |         if(res.code == 0) { | ||||||
|  |           this.num = res.data.num | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getNewList() { | ||||||
|  |       this.$http.post(`/app/apppolicypromotion/listWechat`, { | ||||||
|  |         type: 3, | ||||||
|  |         areaId: this.$areaId, | ||||||
|  |         current: 1, | ||||||
|  |         size: 5 | ||||||
|  |       }).then(res => { | ||||||
|  |         if(res.code == 0) { | ||||||
|  |           if(res.data && res.data.records.length) { | ||||||
|  |             this.isPadding = true | ||||||
|  |             this.noticeList = res.data.records | ||||||
|  |             res.data.records.map((item) => { | ||||||
|  |               this.newsList.push(item.title) | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     noticeClick(e) { | ||||||
|  |       console.log(e) | ||||||
|  |       this.linkTo(`./notice?id=${this.noticeList[0].id}`) | ||||||
|  |     } | ||||||
|   }, |   }, | ||||||
|   onReachBottom() { |  | ||||||
|     this.current = this.current + 1 |   onReachBottom (){ | ||||||
|     this.getList() |     this.getList() | ||||||
|   }, |   }, | ||||||
| } |  | ||||||
|  |   onPageScroll(e) { | ||||||
|  |     this.scrollTop = e.scrollTop; | ||||||
|  |   }, | ||||||
|  | }; | ||||||
| </script> | </script> | ||||||
|  | <style lang="scss" scoped> | ||||||
| <style scoped lang="scss"> | .po-f{ | ||||||
| uni-page-body { |   position: fixed; | ||||||
|  |   top: 0; | ||||||
|  |   left: 0; | ||||||
|  |   width: 100%; | ||||||
|  |   z-index: 99; | ||||||
|  | } | ||||||
|  | .pad-t200{ | ||||||
|  |   padding-top: 200rpx; | ||||||
|  | } | ||||||
|  | .pad-t308{ | ||||||
|  |   padding-top: 308rpx; | ||||||
|  | } | ||||||
|  | .header-tab{ | ||||||
|  |   width: 100%; | ||||||
|   height: 100%; |   height: 100%; | ||||||
| } | } | ||||||
| .AppActive { | .list-content{ | ||||||
|   height: 100%; |   // padding-top: 96px; | ||||||
|   background: #f3f6f9; | } | ||||||
|  |  | ||||||
|   .dataTop { |  .AiFixedBtn { | ||||||
|     display: flex; |  | ||||||
|     justify-content: space-between; |  | ||||||
|     align-items: center; |  | ||||||
|     margin-top: 48px; |  | ||||||
|     margin-bottom: 8px; |  | ||||||
|     padding: 0 32px; |  | ||||||
|     .dataLeft { |  | ||||||
|       font-size: 38px; |  | ||||||
|       font-weight: 600; |  | ||||||
|     } |  | ||||||
|     .dataRight { |  | ||||||
|       font-size: 28px; |  | ||||||
|       color: #666666; |  | ||||||
|       .specialColor { |  | ||||||
|         color: #4181ff; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   ::v-deep .AiCard { |  | ||||||
|     background: #f3f6f9; |  | ||||||
|     .start { |  | ||||||
|       background: #fff; |  | ||||||
|       padding: 32px; |  | ||||||
|       border-radius: 16px; |  | ||||||
|       .fill { |  | ||||||
|         display: flex; |  | ||||||
|         justify-content: space-between; |  | ||||||
|         // align-items: center; |  | ||||||
|         .left { |  | ||||||
|           width: calc(100% - 205px); |  | ||||||
|           // background: pink; |  | ||||||
|           .titles { |  | ||||||
|             margin-bottom: 8px; |  | ||||||
|             color: #333333; |  | ||||||
|             font-weight: 500; |  | ||||||
|             font-size: 30px; |  | ||||||
|             line-height: 1.3; |  | ||||||
|             word-break: break-all; |  | ||||||
|             text-overflow: ellipsis; |  | ||||||
|             display: -webkit-box; |  | ||||||
|             -webkit-box-orient: vertical; |  | ||||||
|             -webkit-line-clamp: 2; |  | ||||||
|             overflow: hidden; |  | ||||||
|           } |  | ||||||
|           .nums { |  | ||||||
|             .specialColor { |  | ||||||
|               color: #4181ff; |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|           .times { |  | ||||||
|             .timesCont { |  | ||||||
|               margin-right: 10px; |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|           .areaNmae { |  | ||||||
|             overflow: hidden; |  | ||||||
|             text-overflow: ellipsis; |  | ||||||
|             white-space: nowrap; |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|         img { |  | ||||||
|           width: 182px; |  | ||||||
|           height: 182px; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .AiFixedBtn { |  | ||||||
|     .movableArea { |     .movableArea { | ||||||
|       .addBtn { |       .addBtn { | ||||||
|         display: flex; |         display: flex; | ||||||
| @@ -190,5 +384,261 @@ uni-page-body { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | .nav-box { | ||||||
|  |   background-color: #3671ee; | ||||||
|  |   height: 96px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   display: flex; | ||||||
|  |   .active { | ||||||
|  |     display: block; | ||||||
|  |     position: relative; | ||||||
|  |     span { | ||||||
|  |       position: absolute; | ||||||
|  |       top: 78px; | ||||||
|  |       left: 50%; | ||||||
|  |       margin-left: -20px; | ||||||
|  |       width: 40px; | ||||||
|  |       height: 4px; | ||||||
|  |       background-color: #fff; | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
| </style> | .nav-item { | ||||||
|  |   flex: 1; | ||||||
|  |   color: #ffffff; | ||||||
|  |   font-size: 28px; | ||||||
|  |   line-height: 96px; | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | .header-info { | ||||||
|  |   width: 100%; | ||||||
|  |   height: 112px; | ||||||
|  |   padding: 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   background: #fefaea; | ||||||
|  |   color: #FFA13E; | ||||||
|  |   font-size: 28px; | ||||||
|  |   .tips { | ||||||
|  |     display: inline-block; | ||||||
|  |     width: 104px; | ||||||
|  |     height: 48px; | ||||||
|  |     line-height: 48px; | ||||||
|  |     text-align: center; | ||||||
|  |     background: #ffa13e; | ||||||
|  |     border-radius: 16px; | ||||||
|  |     font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |     font-weight: 500; | ||||||
|  |     color: #fff; | ||||||
|  |     vertical-align: top; | ||||||
|  |     margin-right: 16px; | ||||||
|  |   } | ||||||
|  |   .text-content { | ||||||
|  |     display: inline-block; | ||||||
|  |     width: calc(100% - 122px); | ||||||
|  |     margin-top: -10px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .header-title { | ||||||
|  |   width: 100%; | ||||||
|  |   height: 108px; | ||||||
|  |   padding: 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   background: #fff; | ||||||
|  |   display: flex; | ||||||
|  |   justify-content: space-between; | ||||||
|  |   border-bottom: 2px solid #f3f6f9; | ||||||
|  |   .text { | ||||||
|  |     font-size: 32px; | ||||||
|  |     font-family: PingFangSC-Semibold, PingFang SC; | ||||||
|  |     font-weight: 600; | ||||||
|  |     color: #333; | ||||||
|  |     line-height: 44px; | ||||||
|  |   } | ||||||
|  |   .right-select { | ||||||
|  |     font-size: 26px; | ||||||
|  |     font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |     font-weight: 400; | ||||||
|  |     color: #666; | ||||||
|  |     line-height: 36px; | ||||||
|  |     img { | ||||||
|  |       width: 32px; | ||||||
|  |       height: 32px; | ||||||
|  |       margin-left: 8px; | ||||||
|  |       vertical-align: middle; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .forum-item{ | ||||||
|  |   padding: 26px 30px 28px; | ||||||
|  |   background-color: #fff; | ||||||
|  |   .user-info{ | ||||||
|  |     display: flex; | ||||||
|  |     margin-bottom: 32px; | ||||||
|  |     .user-name-bg{ | ||||||
|  |       width: 64px; | ||||||
|  |       height: 64px; | ||||||
|  |       line-height: 64px; | ||||||
|  |       text-align: center; | ||||||
|  |       background: #4E8EEE; | ||||||
|  |       font-size: 24px; | ||||||
|  |       font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #FFF; | ||||||
|  |       margin-right: 16px; | ||||||
|  |       border-radius: 50%; | ||||||
|  |     } | ||||||
|  |     .info{ | ||||||
|  |       div{ | ||||||
|  |         font-size: 26px; | ||||||
|  |         font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |         font-weight: 500; | ||||||
|  |         color: #333; | ||||||
|  |         line-height: 26px; | ||||||
|  |         margin-bottom: 10px; | ||||||
|  |       } | ||||||
|  |       p{ | ||||||
|  |         font-size: 22px; | ||||||
|  |         font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |         font-weight: 400; | ||||||
|  |         color: #999; | ||||||
|  |         line-height: 22px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .conent-text{ | ||||||
|  |     font-size: 26px; | ||||||
|  |     font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |     font-weight: 400; | ||||||
|  |     color: #333; | ||||||
|  |     line-height: 42px; | ||||||
|  |     word-break: break-all; | ||||||
|  |     text-overflow: -o-ellipsis-lastline; | ||||||
|  |     overflow: hidden; | ||||||
|  |     text-overflow: ellipsis; | ||||||
|  |     display: -webkit-box; | ||||||
|  |     -webkit-line-clamp: 4; | ||||||
|  |     line-clamp: 4; | ||||||
|  |     -webkit-box-orient: vertical; | ||||||
|  |     margin-bottom: 16px; | ||||||
|  |   } | ||||||
|  |   .img-list{ | ||||||
|  |     image { | ||||||
|  |       width: 224px; | ||||||
|  |       height: 224px; | ||||||
|  |       margin-right: 8px; | ||||||
|  |     } | ||||||
|  |     img:nth-of-type(3n){ | ||||||
|  |       margin-right: 0; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .bottom-icon{ | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     .iconfont{ | ||||||
|  |       display: inline-block; | ||||||
|  |       width: 40px; | ||||||
|  |       vertical-align: middle; | ||||||
|  |     } | ||||||
|  |     span{ | ||||||
|  |       font-size: 24px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #333; | ||||||
|  |       line-height: 40px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .active-item{ | ||||||
|  |   padding: 24px; | ||||||
|  |   display: flex; | ||||||
|  |   background-color: #fff; | ||||||
|  |   width: 686px; | ||||||
|  |   background: #FFF; | ||||||
|  |   box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.02); | ||||||
|  |   border-radius: 4px; | ||||||
|  |   margin: 0 0 32px 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   .img-div{ | ||||||
|  |     width: 200px; | ||||||
|  |     height: 200px; | ||||||
|  |     margin-right: 24px; | ||||||
|  |     position: relative; | ||||||
|  |     img{ | ||||||
|  |       width: 200px; | ||||||
|  |       height: 200px; | ||||||
|  |       border-radius: 4px; | ||||||
|  |     } | ||||||
|  |     .status{ | ||||||
|  |       position: absolute; | ||||||
|  |       top: 0; | ||||||
|  |       left: 0; | ||||||
|  |       height: 44px; | ||||||
|  |       padding: 0 8px; | ||||||
|  |       font-size: 26px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #FFF; | ||||||
|  |     } | ||||||
|  |     .status0{ | ||||||
|  |       background: #000; | ||||||
|  |     } | ||||||
|  |     .status1{ | ||||||
|  |       background: #FF883C; | ||||||
|  |     } | ||||||
|  |     .status3{ | ||||||
|  |       background: #1AAAFF; | ||||||
|  |     } | ||||||
|  |     .status2{ | ||||||
|  |       background: #42D784; | ||||||
|  |     } | ||||||
|  |     .status4, .status5{ | ||||||
|  |       background: #E4E4E4; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .right-info{ | ||||||
|  |     width: calc(100% - 224px); | ||||||
|  |     .title{ | ||||||
|  |       font-size: 32px; | ||||||
|  |       font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #333; | ||||||
|  |       line-height: 44px; | ||||||
|  |       word-break: break-all; | ||||||
|  |       margin-bottom: 8px; | ||||||
|  |       text-overflow: -o-ellipsis-lastline; | ||||||
|  |       overflow: hidden; | ||||||
|  |       text-overflow: ellipsis; | ||||||
|  |       display: -webkit-box; | ||||||
|  |       -webkit-line-clamp: 2; | ||||||
|  |       line-clamp: 2; | ||||||
|  |       -webkit-box-orient: vertical; | ||||||
|  |     } | ||||||
|  |     .time{ | ||||||
|  |       font-size: 26px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #666; | ||||||
|  |       line-height: 36px; | ||||||
|  |       margin-bottom: 4px; | ||||||
|  |       word-break: break-all; | ||||||
|  |       span{ | ||||||
|  |         color: #3376FD; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .address{ | ||||||
|  |       white-space: nowrap; | ||||||
|  |       text-overflow: ellipsis; | ||||||
|  |       overflow: hidden; | ||||||
|  |       word-break: break-all; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .add-icon{ | ||||||
|  |   position: fixed; | ||||||
|  |   right: 16px; | ||||||
|  |   bottom: 160px; | ||||||
|  |   width: 128px; | ||||||
|  |   height: 128px; | ||||||
|  | } | ||||||
|  | .mar-t32{ | ||||||
|  |   margin-top: 32px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @@ -1,25 +1,387 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="Detail">Detail</div> |   <div class="page" v-if="pageShow"> | ||||||
|  |     <div class="header"> | ||||||
|  |       <div class="user-info"> | ||||||
|  |         <image class="user-name-bg" :src="info.avatar" /> | ||||||
|  |         <div class="info"> | ||||||
|  |           <div>{{ info.name }}</div> | ||||||
|  |           <p>{{ info.createTime }}<span v-if="info.userId == user.id" @click="del">删除帖子</span></p> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <p class="text-content">{{ info.content }}</p> | ||||||
|  |       <div class="img-list" v-if="info.images.length"> | ||||||
|  |         <img :src="item.url" :key="index" v-for="(item, index) in info.images" @click.stop="previewImage(info.images, item.url)" /> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="reply-list"> | ||||||
|  |       <div class="item" v-for="(item, index) in info.replyList" :key="index" @click="replyClick(item)"> | ||||||
|  |         <div class="user-img"> | ||||||
|  |           <img :src="item.headPortrait" alt="" /> | ||||||
|  |         </div> | ||||||
|  |         <div class="item-info"> | ||||||
|  |           <div class="user-info"> | ||||||
|  |             <span class="user-name">{{ item.createUserName }}</span> | ||||||
|  |             <span class="time">{{ item.createTime }}</span> | ||||||
|  |           </div> | ||||||
|  |           <p class="text"> | ||||||
|  |             <span v-if="item.lastReplyName" | ||||||
|  |               >回复<span class="color-365D92">{{ item.lastReplyName }}</span></span | ||||||
|  |             >{{ item.content }} | ||||||
|  |           </p> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="reply-bottom"> | ||||||
|  |       <div class="input" @click="showReply = true">我来说两句…</div> | ||||||
|  |       <div class="support" @click="support()"> | ||||||
|  |         <!-- <AiIcon icon="iconpraiseactive2x" size="18" v-if="info.mySupport == 1" style="vertical-align: middle" /> | ||||||
|  |         <i class="iconfont" v-else></i>赞 --> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <u-popup v-model="showReply" mode="bottom"> | ||||||
|  |       <div class="reply-content"> | ||||||
|  |         <u-input v-model.trim="content" type="textarea" :height="144" :auto-height="true" placeholder="写下你的想法…" placeholder-style="color:#999999;font-size:24rpx;" maxlength="1000" /> | ||||||
|  |         <div class="btn"> | ||||||
|  |           <span class="clear" @click="content = ''">清空内容</span> | ||||||
|  |           <span class="confirm" @click="confirmReply()">发表</span> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </u-popup> | ||||||
|  |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|  | import { mapState } from 'vuex' | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|   name: 'Detail', |   name: 'Detail', | ||||||
|   components: {}, |   computed: { | ||||||
|   props: {}, |     ...mapState(['user']), | ||||||
|   data() { |   }, | ||||||
|     return {} |   data() { | ||||||
|  |     return { | ||||||
|  |       info: {}, | ||||||
|  |       pageShow: false, | ||||||
|  |       id: '', | ||||||
|  |       supportFlag: true, | ||||||
|  |       showReply: false, | ||||||
|  |       content: '', | ||||||
|  |       lastReplyId: '', | ||||||
|  |       lastReplyName: '', | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   onLoad(query) { | ||||||
|  |     this.id = query.id | ||||||
|  |     this.getInfo() | ||||||
|  |     uni.$emit('refresh') | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     getInfo() { | ||||||
|  |       this.$loading() | ||||||
|  |       this.$http.post(`/app/apppostinfo/queryDetailById?id=${this.id}`).then((res) => { | ||||||
|  |         if (res.code === 0) { | ||||||
|  |           this.info = res.data | ||||||
|  |  | ||||||
|  |           if (res.data.images) { | ||||||
|  |             this.info.images = JSON.parse(res.data.images) | ||||||
|  |           } else { | ||||||
|  |             this.info.images = [] | ||||||
|  |           } | ||||||
|  |           if (res.data.replyList.length) { | ||||||
|  |             res.data.replyList.map((item) => { | ||||||
|  |               item.createTime = item.createTime.substring(0, 19) | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |           uni.setNavigationBarTitle({ title: this.info.userId == this.user.id ? '我的帖子' : 'Ta的帖子' }) | ||||||
|  |           this.$nextTick(() => { | ||||||
|  |             this.pageShow = true | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     support() { | ||||||
|  |       if (this.supportFlag) { | ||||||
|  |         this.supportFlag = false | ||||||
|  |         this.$http | ||||||
|  |           .post(`/app/apppostsupport/support`, { | ||||||
|  |             postId: this.id, | ||||||
|  |             createUserId: this.user.partyId, | ||||||
|  |           }) | ||||||
|  |           .then((res) => { | ||||||
|  |             if (res.code == 0) { | ||||||
|  |               uni.$emit('refresh') | ||||||
|  |               this.supportFlag = true | ||||||
|  |               if (this.info.mySupport == 1) { | ||||||
|  |                 this.info.mySupport = 0 | ||||||
|  |               } else { | ||||||
|  |                 this.info.mySupport = 1 | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     confirmReply() { | ||||||
|  |       if (!this.content) { | ||||||
|  |         return this.$toast('请输入回复内容') | ||||||
|  |       } | ||||||
|  |       var params = { | ||||||
|  |         postId: this.id, | ||||||
|  |         content: this.content, | ||||||
|  |         createUserId: this.user.partyId, | ||||||
|  |         createUserName: this.user.realName, | ||||||
|  |         headPortrait: this.user.avatarUrl, | ||||||
|  |         lastReplyId: this.lastReplyId ? this.lastReplyId : '', | ||||||
|  |         lastReplyName: this.lastReplyName ? this.lastReplyName : '', | ||||||
|  |       } | ||||||
|  |       this.$http.post(`/app/apppostreply/addOrUpdate`, params).then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           uni.$emit('refresh') | ||||||
|  |           this.$toast('提交成功') | ||||||
|  |           this.lastReplyId = '' | ||||||
|  |           this.lastReplyName = '' | ||||||
|  |           this.content = '' | ||||||
|  |           this.showReply = false | ||||||
|  |           this.getInfo() | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     replyClick(e) { | ||||||
|  |       uni.showModal({ | ||||||
|  |         title: '提示', | ||||||
|  |         content: `是否回复${e.createUserName}的评论?`, | ||||||
|  |         confirmText: '确定', | ||||||
|  |         success: (res) => { | ||||||
|  |           if (res.confirm) { | ||||||
|  |             uni.$emit('refresh') | ||||||
|  |             this.showReply = true | ||||||
|  |             this.lastReplyId = e.id | ||||||
|  |             this.lastReplyName = e.createUserName | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     del() { | ||||||
|  |       uni.showModal({ | ||||||
|  |         title: '提示', | ||||||
|  |         content: `是否删除该帖子?`, | ||||||
|  |         confirmText: '确定', | ||||||
|  |         success: (res) => { | ||||||
|  |           if (res.confirm) { | ||||||
|  |             this.confirmDel() | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     confirmDel() { | ||||||
|  |       this.$http.post(`/app/apppostinfo/delete?id=${this.id}`).then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.$toast('删除成功') | ||||||
|  |           setTimeout(() => { | ||||||
|  |             uni.$emit('refresh') | ||||||
|  |             uni.navigateBack({ delta: 1 }) | ||||||
|  |           }, 3000) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     previewImage(images, img) { | ||||||
|  |       uni.previewImage({ | ||||||
|  |         urls: images.map((v) => v.url), | ||||||
|  |         current: img, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|   }, |   }, | ||||||
|   computed: {}, |  | ||||||
|   watch: {}, |  | ||||||
|   created() {}, |  | ||||||
|   mounted() {}, |  | ||||||
|   methods: {}, |  | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
|  | <style lang="scss" scoped> | ||||||
| <style scoped lang="scss"> | .page { | ||||||
| .Detail { |   width: 100%; | ||||||
|   height: 100%; |   height: 100%; | ||||||
|  |   background-color: #f6f7f9; | ||||||
|  | } | ||||||
|  | .color-365D92 { | ||||||
|  |   color: #365d92; | ||||||
|  | } | ||||||
|  | .header { | ||||||
|  |   background-color: #fff; | ||||||
|  |   padding: 26px 30px 32px; | ||||||
|  |   .user-info { | ||||||
|  |     display: flex; | ||||||
|  |     margin-bottom: 32px; | ||||||
|  |     .user-name-bg { | ||||||
|  |       width: 64px; | ||||||
|  |       height: 64px; | ||||||
|  |       line-height: 64px; | ||||||
|  |       text-align: center; | ||||||
|  |       background: #4e8eee; | ||||||
|  |       font-size: 24px; | ||||||
|  |       font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #fff; | ||||||
|  |       margin-right: 16px; | ||||||
|  |       border-radius: 50%; | ||||||
|  |     } | ||||||
|  |     .info { | ||||||
|  |       div { | ||||||
|  |         font-size: 26px; | ||||||
|  |         font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |         font-weight: 500; | ||||||
|  |         color: #333; | ||||||
|  |         line-height: 26px; | ||||||
|  |         margin-bottom: 10px; | ||||||
|  |       } | ||||||
|  |       p { | ||||||
|  |         font-size: 22px; | ||||||
|  |         font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |         font-weight: 400; | ||||||
|  |         color: #999; | ||||||
|  |         line-height: 22px; | ||||||
|  |       } | ||||||
|  |       span { | ||||||
|  |         color: #3376fd; | ||||||
|  |         margin-left: 16px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .text-content { | ||||||
|  |     font-size: 26px; | ||||||
|  |     font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |     font-weight: 400; | ||||||
|  |     color: #333; | ||||||
|  |     line-height: 42px; | ||||||
|  |     word-break: break-all; | ||||||
|  |   } | ||||||
|  |   .img-list { | ||||||
|  |     margin-top: 16px; | ||||||
|  |     img { | ||||||
|  |       width: 224px; | ||||||
|  |       height: 224px; | ||||||
|  |       margin-right: 8px; | ||||||
|  |     } | ||||||
|  |     img:nth-of-type(3n) { | ||||||
|  |       margin-right: 0; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .reply-list { | ||||||
|  |   padding: 0 32px 112px; | ||||||
|  |   .item { | ||||||
|  |     display: flex; | ||||||
|  |     padding: 32px 0; | ||||||
|  |     border-bottom: 2px solid #eee; | ||||||
|  |     .user-img { | ||||||
|  |       width: 96px; | ||||||
|  |       height: 96px; | ||||||
|  |       margin-right: 24px; | ||||||
|  |       img { | ||||||
|  |         width: 96px; | ||||||
|  |         height: 96px; | ||||||
|  |         border-radius: 50%; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .item-info { | ||||||
|  |       width: calc(100% - 116px); | ||||||
|  |     } | ||||||
|  |     .user-info { | ||||||
|  |       display: flex; | ||||||
|  |       justify-content: space-between; | ||||||
|  |       margin-bottom: 10px; | ||||||
|  |       .user-name { | ||||||
|  |         font-size: 30px; | ||||||
|  |         font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |         font-weight: 500; | ||||||
|  |         color: #365d92; | ||||||
|  |         line-height: 42px; | ||||||
|  |       } | ||||||
|  |       .time { | ||||||
|  |         font-size: 22px; | ||||||
|  |         font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |         font-weight: 400; | ||||||
|  |         color: #999; | ||||||
|  |         line-height: 42px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .text { | ||||||
|  |       font-size: 28px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #333; | ||||||
|  |       line-height: 40px; | ||||||
|  |       word-break: break-all; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .reply-bottom { | ||||||
|  |   position: fixed; | ||||||
|  |   bottom: 0; | ||||||
|  |   left: 0; | ||||||
|  |   width: 100%; | ||||||
|  |   height: 104px; | ||||||
|  |   padding: 22px 30px 24px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   background-color: #fff; | ||||||
|  |   font-size: 30px; | ||||||
|  |   font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |   color: #333; | ||||||
|  |   line-height: 58px; | ||||||
|  |   .input { | ||||||
|  |     display: inline-block; | ||||||
|  |     width: 580px; | ||||||
|  |     height: 58px; | ||||||
|  |     line-height: 58px; | ||||||
|  |     text-align: center; | ||||||
|  |     background: #f0f0f0; | ||||||
|  |     border-radius: 30px; | ||||||
|  |     font-size: 26px; | ||||||
|  |     font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |     color: #666; | ||||||
|  |     margin-right: 42px; | ||||||
|  |   } | ||||||
|  |   .support { | ||||||
|  |     display: inline-block; | ||||||
|  |   } | ||||||
|  |   .iconfont { | ||||||
|  |     display: inline-block; | ||||||
|  |     width: 36px; | ||||||
|  |     height: 36px; | ||||||
|  |     font-size: 36px; | ||||||
|  |     color: #333; | ||||||
|  |     margin-right: 8px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .reply-content { | ||||||
|  |   width: 100%; | ||||||
|  |   padding: 32px; | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   background: #fff; | ||||||
|  |   ::v-deep .u-input { | ||||||
|  |     background-color: #f7f7f7 !important; | ||||||
|  |     border-radius: 8px !important; | ||||||
|  |     padding: 24px !important; | ||||||
|  |     font-size: 26px !important; | ||||||
|  |   } | ||||||
|  |   .btn { | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     padding: 24px 0; | ||||||
|  |     span { | ||||||
|  |       line-height: 64px; | ||||||
|  |     } | ||||||
|  |     .clear { | ||||||
|  |       font-size: 26px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #666; | ||||||
|  |     } | ||||||
|  |     .confirm { | ||||||
|  |       width: 144px; | ||||||
|  |       height: 64px; | ||||||
|  |       text-align: center; | ||||||
|  |       background: #135ab8; | ||||||
|  |       border-radius: 32px; | ||||||
|  |       font-size: 28px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #fff; | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
| </style> | </style> | ||||||
|   | |||||||
							
								
								
									
										164
									
								
								src/apps/AppActive/SignUser.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								src/apps/AppActive/SignUser.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="page"> | ||||||
|  |     <!-- <div class="title">已签到(2)</div> | ||||||
|  |     <div class="user-list"> | ||||||
|  |       <div class="item"> | ||||||
|  |         <div class="item-border"> | ||||||
|  |           <div class="left"> | ||||||
|  |             <span class="user-name-bg">李毅</span>李毅 | ||||||
|  |           </div> | ||||||
|  |           <div class="right"> | ||||||
|  |             <span>157****8456</span> | ||||||
|  |             <img src="../../static/img/phone-icon.png" alt=""> | ||||||
|  |             <img src="../../static/img/del-icon.png" alt=""> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="title">未签到(3)</div> --> | ||||||
|  |     <div class="user-list" v-for="(item, index) in list" :key="index"> | ||||||
|  |       <div class="item"> | ||||||
|  |         <div class="item-border"> | ||||||
|  |           <div class="left"> | ||||||
|  |             <span class="user-name-bg">{{$formatName(item.name)}}</span>{{item.name}} | ||||||
|  |           </div> | ||||||
|  |           <div class="right"> | ||||||
|  |             <span>{{formatPhone(item.phone)}}</span> | ||||||
|  |             <img src="./components/phone-icon.png" alt="" v-if="isAdmin" @click="callPhone(item.phone)"> | ||||||
|  |             <img src="./components/del-icon.png" alt="" v-if="isAdmin && status < 2" @click="del(item.id)"> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     <AiEmpty description="暂无活动报名人员" v-if="!list.length" /> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       isAdmin: 0, | ||||||
|  |       id: '', | ||||||
|  |       list: [], | ||||||
|  |       status: 0 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     this.id = option.id | ||||||
|  |     this.isAdmin = option.isAdmin | ||||||
|  |     this.status = Number(option.status) | ||||||
|  |     console.log(option) | ||||||
|  |     this.getUserList() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getUserList() { | ||||||
|  |       this.$http.post(`/app/appactivityuser/list?activityId=${this.id}&status=1`).then(res => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.list = res.data.records | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     formatPhone(value) { | ||||||
|  |       const start = value.slice(0, 3) | ||||||
|  |       const end = value.slice(-4) | ||||||
|  |       return `${start}****${end}` | ||||||
|  |     }, | ||||||
|  |     callPhone(phone) { | ||||||
|  |       uni.makePhoneCall({phoneNumber: phone}) | ||||||
|  |     }, | ||||||
|  |     del(id) { | ||||||
|  |       uni.showModal({ | ||||||
|  |         title: '提示', | ||||||
|  |         content: `是否删除该报名人?`, | ||||||
|  |         confirmText: "确定", | ||||||
|  |         success: (res) => { | ||||||
|  |           if (res.confirm) { | ||||||
|  |             this.confirmDel(id) | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     confirmDel(id) { | ||||||
|  |       this.$http.post(`/app/appactivityuser/removeReport`, { | ||||||
|  |         id: id | ||||||
|  |       }).then(res => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.$toast('删除成功') | ||||||
|  |           this.getUserList() | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .title{ | ||||||
|  |   width: 100%; | ||||||
|  |   height: 108px; | ||||||
|  |   line-height: 108px; | ||||||
|  |   background: #FFF; | ||||||
|  |   padding-left: 32px; | ||||||
|  |   font-size: 32px; | ||||||
|  |   font-family: PingFangSC-Semibold, PingFang SC; | ||||||
|  |   font-weight: 600; | ||||||
|  |   color: #333; | ||||||
|  |   margin-top: 20px; | ||||||
|  | } | ||||||
|  | .item{ | ||||||
|  |   padding: 0 32px; | ||||||
|  |   background-color: #fff; | ||||||
|  |   .item-border{ | ||||||
|  |     border-bottom: 2px solid #ddd; | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     padding: 20px 0; | ||||||
|  |     .left{ | ||||||
|  |       line-height: 80px; | ||||||
|  |       font-size: 32px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       font-weight: 400; | ||||||
|  |       color: #333; | ||||||
|  |       .user-name-bg{ | ||||||
|  |         display: inline-block; | ||||||
|  |         width: 80px; | ||||||
|  |         height: 80px; | ||||||
|  |         border-radius: 50%; | ||||||
|  |         line-height: 80px; | ||||||
|  |         text-align: center; | ||||||
|  |         background: #4E8EEE; | ||||||
|  |         font-size: 28px; | ||||||
|  |         font-family: PingFangSC-Medium, PingFang SC; | ||||||
|  |         font-weight: 500; | ||||||
|  |         color: #FFF; | ||||||
|  |         margin-right: 16px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .right{ | ||||||
|  |       span{ | ||||||
|  |         font-size: 28px; | ||||||
|  |         font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |         color: #999; | ||||||
|  |         line-height: 80px; | ||||||
|  |       } | ||||||
|  |       img{ | ||||||
|  |         width: 56px; | ||||||
|  |         height: 56px; | ||||||
|  |         border-radius: 50%; | ||||||
|  |         margin-left: 32px; | ||||||
|  |         vertical-align: middle; | ||||||
|  |       } | ||||||
|  |       .iconfont{ | ||||||
|  |         display: inline-block; | ||||||
|  |         font-size: 26px; | ||||||
|  |         color: #3671EE; | ||||||
|  |       } | ||||||
|  |       .bg-blue{ | ||||||
|  |         // width: 56px; | ||||||
|  |         // height: 56px; | ||||||
|  |         // background: #EAF0FD; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/apps/AppActive/components/del-icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/apps/AppActive/components/del-icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/apps/AppActive/components/phone-icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/apps/AppActive/components/phone-icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/apps/AppActive/components/right-icon-666.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/apps/AppActive/components/right-icon-666.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 267 B | 
| @@ -10,10 +10,10 @@ export default { | |||||||
|   data() { |   data() { | ||||||
|     return {} |     return {} | ||||||
|   }, |   }, | ||||||
|   computed: {}, |   onLoad: {}, | ||||||
|   watch: {}, |   watch: {}, | ||||||
|   created() {}, |   created() {}, | ||||||
|   mounted() {}, |   onShow() {}, | ||||||
|   methods: {}, |   methods: {}, | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
							
								
								
									
										224
									
								
								src/apps/AppGoodDeeds/AppGoodDeeds.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								src/apps/AppGoodDeeds/AppGoodDeeds.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,224 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="AppGoodDeeds"> | ||||||
|  |     <template v-if="datas.length > 0"> | ||||||
|  |       <AiCard v-for="(item, i) in datas" :key="i" @click.native="toAdd(item, 1)"> | ||||||
|  |         <template #custom> | ||||||
|  |           <div class="titles">{{ item.createUserName }}</div> | ||||||
|  |  | ||||||
|  |           <div class="contents">生活中有多少点点滴滴?人生的每一天会有几滴?生活中有那么多点点滴滴,你会记得多少?最难忘的事情是什么?我记得有一…生活中有多少点点滴滴?人生的每一天会有几滴?生活中有那么多点点滴滴,你会记得多少?最难忘的事情是什么?我记得有</div> | ||||||
|  |  | ||||||
|  |           <div class="imgs"> | ||||||
|  |             <img src="./yan.jpg" alt="" v-for="(items, i) in 4" :key="i" /> | ||||||
|  |             <!-- <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" @click.stop="previewImage(item.images, items.url)" /> --> | ||||||
|  |           </div> | ||||||
|  |  | ||||||
|  |           <div class="imgBottom"> | ||||||
|  |             <div>2021_12_17_13_23</div> | ||||||
|  |             <div class="right"> | ||||||
|  |               <div class="right-left"> | ||||||
|  |                 <u-icon name="eye"></u-icon> | ||||||
|  |                 <span class="hint">24</span> | ||||||
|  |               </div> | ||||||
|  |  | ||||||
|  |               <div class="right-right"> | ||||||
|  |                 <u-icon name="thumb-up" color="red"></u-icon> | ||||||
|  |                 <span class="hint">4</span> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </template> | ||||||
|  |  | ||||||
|  |         <template #menu> | ||||||
|  |           <div class="menu" @tap.stop="toAdd(item, 2)">编辑</div> | ||||||
|  |           <div class="menu" @tap.stop="toDetele(item)">删除</div> | ||||||
|  |         </template> | ||||||
|  |       </AiCard> | ||||||
|  |  | ||||||
|  |       <u-loadmore :status="loadmore" color="#999" font-size="24" margin-top="32" margin-bottom="80" /> | ||||||
|  |     </template> | ||||||
|  |  | ||||||
|  |     <AiEmpty description="暂无数据" v-else></AiEmpty> | ||||||
|  |  | ||||||
|  |     <AiFixedBtn :y="740"> | ||||||
|  |       <div class="addBtn iconfont iconfont-iconfangda" @tap.stop="toAdd()" /> | ||||||
|  |     </AiFixedBtn> | ||||||
|  |  | ||||||
|  |     <u-modal v-model="deletShow" content="您确认要删除该条信息吗?" :show-cancel-button="true" :mask-close-able="true" :show-title="false" @confirm="delet"></u-modal> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   name: 'AppGoodDeeds', | ||||||
|  |   appName: '好人好事', | ||||||
|  |   components: {}, | ||||||
|  |   props: {}, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       datas: [], | ||||||
|  |       currentTabs: 0, | ||||||
|  |       current: 1, | ||||||
|  |       current: 1, | ||||||
|  |       size: 10, | ||||||
|  |       pages: 0, | ||||||
|  |       deletShow: false, | ||||||
|  |       deletId: '', | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     loadmore() { | ||||||
|  |       return this.pages <= this.current ? 'loading ' : 'nomore' | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   watch: {}, | ||||||
|  |   onLoad() { | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  |   mounted() {}, | ||||||
|  |   methods: { | ||||||
|  |     getList() { | ||||||
|  |       this.$http | ||||||
|  |         .post('/app/appvisitvondolence/list', null, { | ||||||
|  |           params: { | ||||||
|  |             size: 6, | ||||||
|  |             current: this.current, | ||||||
|  |             areaId: this.areaId, | ||||||
|  |             title: this.keyword, | ||||||
|  |           }, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.datas = this.current > 1 ? [...this.datas, ...res.data.records] : res.data.records | ||||||
|  |             this.pages = res.data.pages | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     toAdd(item, type) { | ||||||
|  |       if (type == '1') { | ||||||
|  |         console.log('详情') | ||||||
|  |         uni.navigateTo({ url: `./Detail?id=${item.id}` }) | ||||||
|  |       } | ||||||
|  |       if (type == '2') { | ||||||
|  |         console.log('编辑') | ||||||
|  |         uni.navigateTo({ url: `./Add?id=${item.id}` }) | ||||||
|  |       } | ||||||
|  |       if (type == null) { | ||||||
|  |         console.log('添加') | ||||||
|  |         uni.navigateTo({ url: `./Add` }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     toDetele(item) { | ||||||
|  |       this.deletShow = true | ||||||
|  |       this.deletId = item.id | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     delet() { | ||||||
|  |       this.$http.post(`/app/appvisitvondolence/delete?ids=${this.deletId}`).then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.$u.toast('删除成功!') | ||||||
|  |           this.getList() | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   onReachBottom() { | ||||||
|  |     this.current = this.current + 1 | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | uni-page-body { | ||||||
|  |   height: 100%; | ||||||
|  | } | ||||||
|  | .AppGoodDeeds { | ||||||
|  |   height: 100%; | ||||||
|  |  | ||||||
|  |   ::v-deep .AiCard { | ||||||
|  |     background: #f3f6f9; | ||||||
|  |     .start { | ||||||
|  |       background: #fff; | ||||||
|  |       padding: 32px; | ||||||
|  |       border-radius: 16px; | ||||||
|  |       .titles { | ||||||
|  |         font-size: 32px; | ||||||
|  |         font-weight: 500; | ||||||
|  |         color: #333333; | ||||||
|  |         margin-bottom: 16px; | ||||||
|  |       } | ||||||
|  |       .contents { | ||||||
|  |         line-height: 1.4; | ||||||
|  |         overflow: hidden; | ||||||
|  |         text-overflow: ellipsis; | ||||||
|  |         display: -webkit-box; | ||||||
|  |         -webkit-line-clamp: 3; | ||||||
|  |         -webkit-box-orient: vertical; | ||||||
|  |       } | ||||||
|  |       .imgs { | ||||||
|  |         margin-top: 24px; | ||||||
|  |         img { | ||||||
|  |           width: 200px; | ||||||
|  |           height: 200px; | ||||||
|  |           margin-right: 8px; | ||||||
|  |         } | ||||||
|  |         img:nth-child(3n) { | ||||||
|  |           margin-right: 0; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       .imgBottom { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         margin-top: 24px; | ||||||
|  |         .right { | ||||||
|  |           display: flex; | ||||||
|  |           justify-content: space-between; | ||||||
|  |  | ||||||
|  |           .right-right, | ||||||
|  |           .right-left { | ||||||
|  |             margin-left: 48px; | ||||||
|  |             .hint { | ||||||
|  |               margin-left: 8px; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     .mask { | ||||||
|  |       .moreMenu { | ||||||
|  |         transform: translate(-175px, 30px); | ||||||
|  |         .menu { | ||||||
|  |           text-align: center; | ||||||
|  |           line-height: 80px; | ||||||
|  |           width: 192px; | ||||||
|  |           height: 80px; | ||||||
|  |           font-size: 28px; | ||||||
|  |           font-weight: 400; | ||||||
|  |           color: #333333; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .AiFixedBtn { | ||||||
|  |     .movableArea { | ||||||
|  |       .addBtn { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: center; | ||||||
|  |         align-items: center; | ||||||
|  |         width: 96px; | ||||||
|  |         height: 96px; | ||||||
|  |         flex-shrink: 0; | ||||||
|  |         background: $uni-color-primary; | ||||||
|  |         box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); | ||||||
|  |         font-size: 60px; | ||||||
|  |         color: #1365dd; | ||||||
|  |         background: #fff; | ||||||
|  |         border-radius: 50%; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										25
									
								
								src/apps/AppGoodDeeds/Detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/apps/AppGoodDeeds/Detail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="Detail">Detail</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   name: 'Detail', | ||||||
|  |   components: {}, | ||||||
|  |   props: {}, | ||||||
|  |   data() { | ||||||
|  |     return {} | ||||||
|  |   }, | ||||||
|  |   computed: {}, | ||||||
|  |   watch: {}, | ||||||
|  |   onLoad() {}, | ||||||
|  |   onShow() {}, | ||||||
|  |   methods: {}, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .Detail { | ||||||
|  |   height: 100%; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB | 
							
								
								
									
										323
									
								
								src/apps/AppResidentActivitie/Add.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										323
									
								
								src/apps/AppResidentActivitie/Add.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,323 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="add"> | ||||||
|  |     <div class="header-description"> | ||||||
|  |       <u-form :model="forms" ref="uForm" label-width="auto" :border-bottom="false"> | ||||||
|  |         <u-form-item label="标题" prop="title" required :border-bottom="false" class="titles" label-position="top"> | ||||||
|  |           <u-input v-model="forms.title" placeholder="请输入标题(30字以内)" type="textarea" auto-height height="60" maxlength="30" /> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <u-form-item label="活动详情" prop="content" required :border-bottom="false" label-position="top" class="contents"> | ||||||
|  |           <u-input v-model="forms.content" placeholder="请输入活动详情(500字以内)" type="textarea" auto-height height="100" maxlength="500" /> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <div class="line"></div> | ||||||
|  |  | ||||||
|  |         <u-form-item label="活动封面图" prop="fileIds" required :border-bottom="false" class="avatars" label-position="top"> | ||||||
|  |           <AiUploader :def.sync="forms.fileIds" multiple placeholder="上传图片" :limit="9"></AiUploader> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <div class="line"></div> | ||||||
|  |  | ||||||
|  |         <u-form-item label="活动类型" prop="status" required :border-bottom="false" right-icon="arrow-right"> | ||||||
|  |           <u-input v-model="forms.status" disabled placeholder="请选择活动类型" @click="showStstus = true" /> | ||||||
|  |  | ||||||
|  |           <u-select v-model="showStstus" :list="$dict.getDict('realityStatus')" value-name="dictValue" label-name="dictName" @confirm="selectStatus"></u-select> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <u-form-item label="报名范围" prop="fanwe" required :border-bottom="false" right-icon="arrow-right"> | ||||||
|  |           <u-input v-model="forms.fanwe" disabled placeholder="请选择报名范围" @click="showStstus = true" /> | ||||||
|  |  | ||||||
|  |           <u-select v-model="showStstus" :list="$dict.getDict('realityStatus')" value-name="dictValue" label-name="dictName" @confirm="selectStatus"></u-select> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <u-form-item label="活动名额" prop="nums" required :border-bottom="false"> | ||||||
|  |           <u-input v-model="forms.nums" type="number" placeholder="如不限制人数,填写0" /> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <div class="line"></div> | ||||||
|  |  | ||||||
|  |         <u-form-item label="开始时间" prop="startTime" required :border-bottom="false" right-icon="arrow-right"> | ||||||
|  |           <u-input v-model="forms.startTime" placeholder="请选择开始时间" @click="showStartTime = true" /> | ||||||
|  |  | ||||||
|  |           <u-picker mode="time" :params="params" v-model="showStartTime" @confirm="confirm"></u-picker> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <u-form-item label="结束时间" prop="endTime" required :border-bottom="false" right-icon="arrow-right"> | ||||||
|  |           <u-input v-model="forms.endTime" placeholder="请选择结束时间" @click="showEndTime = true" /> | ||||||
|  |  | ||||||
|  |           <u-picker mode="time" :params="params" v-model="showEndTime" @confirm="confirm"></u-picker> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <u-form-item label="报名截止时间" prop="deadTime" required :border-bottom="false" right-icon="arrow-right"> | ||||||
|  |           <u-input v-model="forms.deadTime" placeholder="请选择报名截止时间" @click="showDeadTime = true" /> | ||||||
|  |  | ||||||
|  |           <u-picker mode="time" :params="params" v-model="showDeadTime" @confirm="confirm"></u-picker> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <u-form-item label="活动地点" prop="areaNmae" required :border-bottom="false" label-position="top" class="areaNmaes"> | ||||||
|  |           <u-input v-model="forms.areaNmae" placeholder="请输入活动地点" type="textarea" auto-height height="70" /> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <div class="line"></div> | ||||||
|  |  | ||||||
|  |         <u-form-item label="联系人" prop="people" required :border-bottom="false"> | ||||||
|  |           <u-input v-model="forms.people" placeholder="请输入联系人" maxlength="30" /> | ||||||
|  |         </u-form-item> | ||||||
|  |  | ||||||
|  |         <u-form-item label="联系方式" prop="phone" required :border-bottom="false"> | ||||||
|  |           <u-input v-model="forms.phone" placeholder="请输入联系方式" maxlength="16" /> | ||||||
|  |         </u-form-item> | ||||||
|  |       </u-form> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" @click="submit">保存</div> | ||||||
|  |  | ||||||
|  |     <AiBack></AiBack> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { mapState } from 'vuex' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'Add', | ||||||
|  |   components: {}, | ||||||
|  |   props: {}, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       id: '', | ||||||
|  |       forms: { | ||||||
|  |         title: '', | ||||||
|  |         content: '', | ||||||
|  |         fileIds: [], | ||||||
|  |         status: '', | ||||||
|  |         statusValue: '', | ||||||
|  |  | ||||||
|  |         fanwe: '', | ||||||
|  |         nums: '', | ||||||
|  |         startTime: '', | ||||||
|  |         endTime: '', | ||||||
|  |  | ||||||
|  |         deadTime: '', | ||||||
|  |         areaNmae: '', | ||||||
|  |         people: '', | ||||||
|  |         phone: '', | ||||||
|  |       }, | ||||||
|  |       showStstus: false, | ||||||
|  |       showStartTime: false, | ||||||
|  |       showEndTime: false, | ||||||
|  |       showDeadTime: false, | ||||||
|  |       flag: false, | ||||||
|  |       params: { | ||||||
|  |         year: true, | ||||||
|  |         month: true, | ||||||
|  |         day: true, | ||||||
|  |         hour: true, | ||||||
|  |         minute: true, | ||||||
|  |         second: true, | ||||||
|  |         timestamp: true, | ||||||
|  |       }, | ||||||
|  |       id: '', | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { ...mapState(['user']) }, | ||||||
|  |   onLoad(o) { | ||||||
|  |     console.log(o) | ||||||
|  |     this.id = o.id | ||||||
|  |     this.$dict.load('realityStatus').then(() => { | ||||||
|  |       // this.getDetail() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   mounted() {}, | ||||||
|  |   methods: { | ||||||
|  |     // getDetail() { | ||||||
|  |     //   this.$http.post(`/app/appvisitvondolence/queryDetailById?id=${this.id}`).then((res) => { | ||||||
|  |     //     if (res?.data) { | ||||||
|  |     //       this.forms = res.data | ||||||
|  |     //       this.forms.statusValue = res.data.status | ||||||
|  |     //       this.forms.status = this.$dict.getLabel('realityStatus', res.data.status) | ||||||
|  |     //       if (res.data.images) { | ||||||
|  |     //         this.forms.images = JSON.parse(res.data.images || '[]') | ||||||
|  |     //       } | ||||||
|  |     //     } | ||||||
|  |     //   }) | ||||||
|  |     // }, | ||||||
|  |  | ||||||
|  |     submit() { | ||||||
|  |       if (this.flag) return | ||||||
|  |  | ||||||
|  |       this.$refs.uForm.validate((valid) => { | ||||||
|  |         if (valid) { | ||||||
|  |           if (!this.forms.title) { | ||||||
|  |             return this.$u.toast('请输入标题') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.content) { | ||||||
|  |             return this.$u.toast('请输入活动详情') | ||||||
|  |           } | ||||||
|  |           if (this.forms.fileIds.length == 0) { | ||||||
|  |             return this.$u.toast('请输入活动详情') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.status) { | ||||||
|  |             return this.$u.toast('请选择活动类型') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.fanwe) { | ||||||
|  |             return this.$u.toast('请选择报名范围') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.nums) { | ||||||
|  |             return this.$u.toast('请输入活动名额') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.startTime) { | ||||||
|  |             return this.$u.toast('请选择开始时间') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.endTime) { | ||||||
|  |             return this.$u.toast('请选择结束时间') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.deadTime) { | ||||||
|  |             return this.$u.toast('请选择报名截止时间') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.areaNmae) { | ||||||
|  |             return this.$u.toast('请输入活动地点') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.people) { | ||||||
|  |             return this.$u.toast('请输入联系人') | ||||||
|  |           } | ||||||
|  |           if (!this.forms.phone) { | ||||||
|  |             return this.$u.toast('请输入联系方式') | ||||||
|  |           } | ||||||
|  |  | ||||||
|  |           const imgs = [] | ||||||
|  |           if (this.forms.fileIds) { | ||||||
|  |             this.forms.fileIds.map((e) => { | ||||||
|  |               imgs.push({ url: e.url, id: e.id }) | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |  | ||||||
|  |           this.flag = true | ||||||
|  |           this.$http | ||||||
|  |             .post(`/app/appvisitvondolence/addOrUpdate`, { | ||||||
|  |               title: this.forms.title, | ||||||
|  |               content: this.forms.content, | ||||||
|  |               // images: JSON.stringify(imgs) || [], | ||||||
|  |               images: imgs || [], | ||||||
|  |  | ||||||
|  |               status: this.forms.statusValue ? this.forms.statusValue : this.forms.status, | ||||||
|  |               fanwe: this.forms.fanwe, | ||||||
|  |               nums: this.forms.fanumsnwe, | ||||||
|  |  | ||||||
|  |               startTime: this.forms.startTime, | ||||||
|  |               endTime: this.forms.endTime, | ||||||
|  |               deadTime: this.forms.deadTime, | ||||||
|  |               areaNmae: this.forms.areaNmae, | ||||||
|  |  | ||||||
|  |               people: this.forms.people, | ||||||
|  |               phone: this.forms.phone, | ||||||
|  |               id: this.id, | ||||||
|  |             }) | ||||||
|  |             .then((res) => { | ||||||
|  |               if (res.code == 0) { | ||||||
|  |                 this.$u.toast('发布成功') | ||||||
|  |                 this.flag = false | ||||||
|  |                 uni.navigateTo({ url: `./AppActive` }) | ||||||
|  |               } | ||||||
|  |             }) | ||||||
|  |         } else { | ||||||
|  |           this.$u.toast('失败') | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     confirm(e) { | ||||||
|  |       if (this.showStartTime == true) { | ||||||
|  |         console.log(1, e.year + '-' + e.month + '-' + e.day + ' ' + e.hour + ':' + e.minute + ':' + e.second) | ||||||
|  |         this.forms.startTime = e.year + '-' + e.month + '-' + e.day + ' ' + e.hour + ':' + e.minute + ':' + e.second | ||||||
|  |       } | ||||||
|  |       if (this.showEndTime == true) { | ||||||
|  |         console.log(2, e.year + '-' + e.month + '-' + e.day + ' ' + e.hour + ':' + e.minute + ':' + e.second) | ||||||
|  |         this.forms.endTime = e.year + '-' + e.month + '-' + e.day + ' ' + e.hour + ':' + e.minute + ':' + e.second | ||||||
|  |       } | ||||||
|  |       if (this.showDeadTime == true) { | ||||||
|  |         console.log(3, e.year + '-' + e.month + '-' + e.day + ' ' + e.hour + ':' + e.minute + ':' + e.second) | ||||||
|  |         this.forms.deadTime = e.year + '-' + e.month + '-' + e.day + ' ' + e.hour + ':' + e.minute + ':' + e.second | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     selectStatus(e) { | ||||||
|  |       this.forms.status = e[0].label | ||||||
|  |       this.forms.statusValue = e[0].value | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss" scoped> | ||||||
|  | .add { | ||||||
|  |   height: 100%; | ||||||
|  |   padding-bottom: 112px; | ||||||
|  |  | ||||||
|  |   .header-description { | ||||||
|  |     ::v-deep .u-form { | ||||||
|  |       .u-form-item { | ||||||
|  |         padding: 0 45px !important; | ||||||
|  |         .u-form-item__body { | ||||||
|  |           .u-form-item--right__content__slot { | ||||||
|  |             padding-bottom: 0; | ||||||
|  |             .u-input { | ||||||
|  |               text-align: right !important; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .u-form-item:last-child { | ||||||
|  |         margin-bottom: 40px; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .titles, | ||||||
|  |       .contents, | ||||||
|  |       .areaNmaes { | ||||||
|  |         .u-form-item__body { | ||||||
|  |           .u-form-item--right__content__slot { | ||||||
|  |             .u-input { | ||||||
|  |               text-align: left !important; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .avatars, | ||||||
|  |       .areaNmaes, | ||||||
|  |       .contents { | ||||||
|  |         padding-bottom: 20px !important; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .avatars { | ||||||
|  |         .u-form-item__body { | ||||||
|  |           .default { | ||||||
|  |             width: 160px; | ||||||
|  |             height: 160px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .line { | ||||||
|  |         height: 16px; | ||||||
|  |         background: #f3f6f9; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .btn { | ||||||
|  |     position: fixed; | ||||||
|  |     bottom: 0; | ||||||
|  |     width: 100%; | ||||||
|  |     height: 112px; | ||||||
|  |     line-height: 112px; | ||||||
|  |     background: #1365dd; | ||||||
|  |     text-align: center; | ||||||
|  |     font-size: 32px; | ||||||
|  |     font-weight: 500; | ||||||
|  |     color: #ffffff; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										194
									
								
								src/apps/AppResidentActivitie/AppResidentActivities.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								src/apps/AppResidentActivitie/AppResidentActivities.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,194 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="AppActive"> | ||||||
|  |     <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" bg-color="#3975C6" inactive-color="#fff" active-color="#fff" @change="change"></u-tabs> | ||||||
|  |  | ||||||
|  |     <div class="dataTop"> | ||||||
|  |       <div class="dataLeft">活动列表</div> | ||||||
|  |  | ||||||
|  |       <div class="dataRight"> | ||||||
|  |         <span>共</span> | ||||||
|  |         <span class="specialColor">12</span> | ||||||
|  |         <span>个活动</span> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <template v-if="datas.length < 1"> | ||||||
|  |       <AiCard v-for="(item, i) in 6" :key="i" @click.native="toDetail(item, 1)"> | ||||||
|  |         <template #custom> | ||||||
|  |           <div class="left"> | ||||||
|  |             <div class="titles">【敬老爱幼】带你在洞庭湖兜兜风 寻觅江豚的身影</div> | ||||||
|  |  | ||||||
|  |             <div class="nums"> | ||||||
|  |               <span class="specialColor">6人</span> | ||||||
|  |               <span>已报名</span> | ||||||
|  |             </div> | ||||||
|  |  | ||||||
|  |             <div class="times"> | ||||||
|  |               <span class="timesCont">2021-12-16</span> | ||||||
|  |  | ||||||
|  |               <span>| 2天</span> | ||||||
|  |             </div> | ||||||
|  |  | ||||||
|  |             <div class="areaNmae">湖南省岳阳市岳阳县荣家湾镇六…湖南省岳阳市岳阳县荣家湾镇六…</div> | ||||||
|  |           </div> | ||||||
|  |  | ||||||
|  |           <img src="./yan.jpg" alt="" /> | ||||||
|  |         </template> | ||||||
|  |       </AiCard> | ||||||
|  |     </template> | ||||||
|  |  | ||||||
|  |     <AiFixedBtn> | ||||||
|  |       <div class="addBtn iconfont iconfont-iconfangda" @tap.stop="toAdd()" /> | ||||||
|  |     </AiFixedBtn> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   name: 'AppResidentActivities', | ||||||
|  |   appName: '居民活动', | ||||||
|  |   components: {}, | ||||||
|  |   props: {}, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       datas: [], | ||||||
|  |       tabList: [ | ||||||
|  |         { | ||||||
|  |           name: '全部活动', | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: '我发布的', | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |       currentTabs: 0, | ||||||
|  |       current: 1, | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: {}, | ||||||
|  |   watch: {}, | ||||||
|  |   onLoad() { | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  |   mounted() {}, | ||||||
|  |   methods: { | ||||||
|  |     getList() {}, | ||||||
|  |  | ||||||
|  |     change(index) { | ||||||
|  |       this.currentTabs = index | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     toAdd() { | ||||||
|  |       uni.navigateTo({ url: `./Add` }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     toDetail(item) { | ||||||
|  |       uni.navigateTo({ url: `./Detail` }) | ||||||
|  |       // uni.navigateTo({ url: `./Detail?id=${item.id}` }) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   onReachBottom() { | ||||||
|  |     this.current = this.current + 1 | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | uni-page-body { | ||||||
|  |   height: 100%; | ||||||
|  | } | ||||||
|  | .AppActive { | ||||||
|  |   height: 100%; | ||||||
|  |   background: #f3f6f9; | ||||||
|  |  | ||||||
|  |   .dataTop { | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     align-items: center; | ||||||
|  |     margin-top: 48px; | ||||||
|  |     margin-bottom: 8px; | ||||||
|  |     padding: 0 32px; | ||||||
|  |     .dataLeft { | ||||||
|  |       font-size: 38px; | ||||||
|  |       font-weight: 600; | ||||||
|  |     } | ||||||
|  |     .dataRight { | ||||||
|  |       font-size: 28px; | ||||||
|  |       color: #666666; | ||||||
|  |       .specialColor { | ||||||
|  |         color: #4181ff; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   ::v-deep .AiCard { | ||||||
|  |     background: #f3f6f9; | ||||||
|  |     .start { | ||||||
|  |       background: #fff; | ||||||
|  |       padding: 32px; | ||||||
|  |       border-radius: 16px; | ||||||
|  |       .fill { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         // align-items: center; | ||||||
|  |         .left { | ||||||
|  |           width: calc(100% - 205px); | ||||||
|  |           // background: pink; | ||||||
|  |           .titles { | ||||||
|  |             margin-bottom: 8px; | ||||||
|  |             color: #333333; | ||||||
|  |             font-weight: 500; | ||||||
|  |             font-size: 30px; | ||||||
|  |             line-height: 1.3; | ||||||
|  |             word-break: break-all; | ||||||
|  |             text-overflow: ellipsis; | ||||||
|  |             display: -webkit-box; | ||||||
|  |             -webkit-box-orient: vertical; | ||||||
|  |             -webkit-line-clamp: 2; | ||||||
|  |             overflow: hidden; | ||||||
|  |           } | ||||||
|  |           .nums { | ||||||
|  |             .specialColor { | ||||||
|  |               color: #4181ff; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |           .times { | ||||||
|  |             .timesCont { | ||||||
|  |               margin-right: 10px; | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |           .areaNmae { | ||||||
|  |             overflow: hidden; | ||||||
|  |             text-overflow: ellipsis; | ||||||
|  |             white-space: nowrap; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         img { | ||||||
|  |           width: 182px; | ||||||
|  |           height: 182px; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .AiFixedBtn { | ||||||
|  |     .movableArea { | ||||||
|  |       .addBtn { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: center; | ||||||
|  |         align-items: center; | ||||||
|  |         width: 96px; | ||||||
|  |         height: 96px; | ||||||
|  |         flex-shrink: 0; | ||||||
|  |         background: $uni-color-primary; | ||||||
|  |         box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); | ||||||
|  |         font-size: 48px; | ||||||
|  |         background: #fff; | ||||||
|  |         color: #1365dd; | ||||||
|  |         border-radius: 50%; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										607
									
								
								src/apps/AppResidentActivitie/Detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										607
									
								
								src/apps/AppResidentActivitie/Detail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,607 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="page"> | ||||||
|  |     <div class="header-content"> | ||||||
|  |       <div class="header-top"> | ||||||
|  |         <img :src="detail.url" alt="" /> | ||||||
|  |       </div> | ||||||
|  |  | ||||||
|  |       <div class="header-middle"> | ||||||
|  |         <div class="img-title">{{ detail.title }}</div> | ||||||
|  |  | ||||||
|  |         <div class="header-middle-bottom"> | ||||||
|  |           <div class="left"> | ||||||
|  |             <div class="left-btn" :class="'status' + detail.status">{{ $dict.getLabel('newActivityStatus', detail.status) }}</div> | ||||||
|  |           </div> | ||||||
|  |           <div class="right"> | ||||||
|  |             <img :src="detail.avatar" alt="" /> | ||||||
|  |             <span>{{ detail.createUserName }}</span> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <div class="cards"> | ||||||
|  |           <div class="cards-left">活动时间</div> | ||||||
|  |           <div class="cards-right">{{ detail.beginTime }}-{{ detail.endTime }}</div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <div class="cards"> | ||||||
|  |           <div class="cards-left">活动人数</div> | ||||||
|  |           <div class="cards-right" @click="toSignUser()"> | ||||||
|  |             <span> | ||||||
|  |               <span :style="{ color: detail.realNum == detail.total ? '#FF4466 ' : '#1C6BDF' }">{{ detail.realNum || 0 }}</span> | ||||||
|  |               <span v-if="detail.total != 0">/{{ detail.total }}</span> | ||||||
|  |               <span v-else>/不限</span> | ||||||
|  |             </span> | ||||||
|  |             <u-icon name="arrow-right" color="#DDDDDD" size="28" style="margin-left: 8px"></u-icon> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <div class="cards"> | ||||||
|  |           <div class="cards-left">活动地点</div> | ||||||
|  |           <div class="cards-right" style="width: 75%; text-align: right">{{ detail.address }}</div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |  | ||||||
|  |       <div class="header-bottom"> | ||||||
|  |         <!-- v-if="detail.status == 1 || detail.status == 2 || detail.status == 3" --> | ||||||
|  |         <div class="tab-title"> | ||||||
|  |           <span :class="current == 0 ? 'active' : ''" @click="change(0)">活动详情</span> | ||||||
|  |           <span :class="current == 1 ? 'active' : ''" @click="change(1)">活动动态</span> | ||||||
|  |         </div> | ||||||
|  |         <!-- <div class="info-title" v-else>活动详情</div> --> | ||||||
|  |         <div class="content-details" v-if="current == 0"> | ||||||
|  |           <div v-html="detail.content"></div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <div class="content-trends" v-if="current == 1"> | ||||||
|  |           <div class="details" v-if="activeList.length > 0"> | ||||||
|  |             <div class="card" v-for="(item, index) in activeList" :key="index" @click="toDetail(item.id)"> | ||||||
|  |               <div class="card-nav"> | ||||||
|  |                 <div class="avatar"> | ||||||
|  |                   <img :src="item.avatar" alt="" style="width: 100%; height: 100%" v-if="item.avatar" /> | ||||||
|  |                   <span v-else> | ||||||
|  |                     <span v-if="item.name">{{ item.name.substring(item.name.length, item.name.length - 2) }}</span> | ||||||
|  |                   </span> | ||||||
|  |                 </div> | ||||||
|  |  | ||||||
|  |                 <div class="right"> | ||||||
|  |                   <span class="name">{{ item.name }}</span> | ||||||
|  |                   <span class="time">{{ item.createTime }}</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |  | ||||||
|  |               <div class="card-font"> | ||||||
|  |                 {{ item.content }} | ||||||
|  |               </div> | ||||||
|  |  | ||||||
|  |               <div class="card-img"> | ||||||
|  |                 <img :src="e.url" v-for="(e, i) in imgList[index]" :key="i" alt="" @click.stop="previewImage(info.images, item.url)" /> | ||||||
|  |               </div> | ||||||
|  |  | ||||||
|  |               <div class="card-icon"> | ||||||
|  |                 <div> | ||||||
|  |                   <i class="iconfont"></i> | ||||||
|  |                   <span>{{ item.viewNum ? item.viewNum : 0 }}</span> | ||||||
|  |                 </div> | ||||||
|  |  | ||||||
|  |                 <div> | ||||||
|  |                   <i class="iconfont"></i> | ||||||
|  |                   <span>{{ item.replyNum ? item.replyNum : 0 }}</span> | ||||||
|  |                 </div> | ||||||
|  |  | ||||||
|  |                 <div> | ||||||
|  |                   <i class="iconfont"></i> | ||||||
|  |                   <span>{{ item.supportNum ? item.supportNum : 0 }}</span> | ||||||
|  |                 </div> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |  | ||||||
|  |             <div class="card-bottom"></div> | ||||||
|  |           </div> | ||||||
|  |  | ||||||
|  |           <AiEmpty v-else /> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="addicon" @click="toPublicPage()"> | ||||||
|  |       <u-icon name="plus" color="#1365DD" size="50"></u-icon> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.status == 0 && detail.createUserId == user.partyId"> | ||||||
|  |       <div class="edit" @click="editActive">编辑</div> | ||||||
|  |       <div class="public" style="background: #3671ee" @click="changeStatus(1, '是否发布?')">发布活动</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.realNum < detail.total && detail.status == 1 && detail.myReport == 0"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div> | ||||||
|  |       <div class="public" style="background: #3671ee" @click="changeStatus(2, '是否报名?')">立即报名</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.status == 1 && detail.myReport == 0 && detail.total == 0"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div> | ||||||
|  |       <div class="public" style="background: #3671ee" @click="changeStatus(2, '是否报名?')">立即报名</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.status == 1 && detail.myReport == 1"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">电话咨询</div> | ||||||
|  |       <div class="public" style="background: #3671ee" @click="changeStatus(3, '是否取消报名?取消报名无法重新报名!')">取消报名</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.realNum == detail.total && detail.status == 1 && detail.status == 1 && detail.total != 0"> | ||||||
|  |       <div class="max">已满员</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.myReport == 1 && detail.status == 2"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">联系负责人</div> | ||||||
|  |       <div class="public" style="background: #ffd8df; color: #ff4466" v-if="detail.allow1 == 0">未签到</div> | ||||||
|  |       <div class="public" style="background: #3671ee; color: #ffffff" v-if="detail.allow1 == 1" @click="sign(0)">签到</div> | ||||||
|  |       <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow1 == 2">已签到</div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div class="btn" v-if="detail.status == 5"> | ||||||
|  |       <div class="edit" @click="callPhone(detail.contactPhone)">联系负责人</div> | ||||||
|  |       <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow2 == 1" @click="sign(1)">离场签到</div> | ||||||
|  |       <div class="public" style="background: #cbead9; color: #20bc65" v-if="detail.allow2 == 2">已离场签到</div> | ||||||
|  |       <div class="public" style="background: #ffd8df; color: #ff4466" v-if="detail.allow2 == 0">未离场签到</div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { mapState } from 'vuex' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'Detail', | ||||||
|  |   computed: { | ||||||
|  |     ...mapState(['user']), | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       id: '', | ||||||
|  |       detail: {}, | ||||||
|  |       activeList: [], | ||||||
|  |       imgList: [], | ||||||
|  |       list: [ | ||||||
|  |         { | ||||||
|  |           name: '活动详情', | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: '活动动态', | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |       current: 0, | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   onLoad(option) { | ||||||
|  |     this.id = option.id | ||||||
|  |     this.$dict.load(['newActivityStatus']).then(() => { | ||||||
|  |       this.getDetail() | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getDetail() { | ||||||
|  |       this.$instance.post(`/app/appactivityinfo/queryDetailById?id=${this.id}&partyId=${this.user.partyId}`).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           res.data.beginTime = res.data.beginTime.substring(0, 16) | ||||||
|  |           res.data.endTime = res.data.endTime.substring(0, 16) | ||||||
|  |           this.detail = res.data | ||||||
|  |           this.getActiveList() | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getActiveList() { | ||||||
|  |       this.$instance.post(`/app/apppostinfo/list?activityId=${this.id}`).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.activeList = res.data.records | ||||||
|  |  | ||||||
|  |           if (this.activeList) { | ||||||
|  |             let imagesList = [] | ||||||
|  |             this.activeList.map((item) => { | ||||||
|  |               if (item.images) { | ||||||
|  |                 item.images = JSON.parse(item.images || '[]') | ||||||
|  |                 imagesList.push(item.images) | ||||||
|  |               } | ||||||
|  |               return item | ||||||
|  |             }) | ||||||
|  |             this.imgList = imagesList | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     change(index) { | ||||||
|  |       this.current = index | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     toPublicPage() { | ||||||
|  |       uni.navigateTo({ | ||||||
|  |         url: `./AddPosts?id=${this.id}`, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     editActive() { | ||||||
|  |       uni.navigateTo({ url: `./Add?id=${this.id}` }) | ||||||
|  |     }, | ||||||
|  |     changeStatus(status, text) { | ||||||
|  |       uni.showModal({ | ||||||
|  |         title: '提示', | ||||||
|  |         content: `${text}`, | ||||||
|  |         confirmText: '确定', | ||||||
|  |         success: (e) => { | ||||||
|  |           if (status == 1) { | ||||||
|  |             //发布 | ||||||
|  |             this.changeStatusConfirm(status) | ||||||
|  |           } | ||||||
|  |           if (status == 2) { | ||||||
|  |             //报名 | ||||||
|  |             this.report() | ||||||
|  |           } | ||||||
|  |           if (status == 3) { | ||||||
|  |             //取消报名 | ||||||
|  |             this.cancelReport() | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     cancelReport() { | ||||||
|  |       this.$instance | ||||||
|  |         .post(`/app/appactivityuser/removeReport`, { | ||||||
|  |           activityId: this.id, | ||||||
|  |           partyId: this.user.partyId, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$toast('提交成功') | ||||||
|  |             this.getDetail() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     changeStatusConfirm(status) { | ||||||
|  |       this.$instance | ||||||
|  |         .post(`/app/appactivityinfo/changeStatus`, { | ||||||
|  |           id: this.id, | ||||||
|  |           status: status, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$toast('提交成功') | ||||||
|  |             this.getDetail() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     callPhone(phone) { | ||||||
|  |       uni.makePhoneCall({ phoneNumber: phone }) | ||||||
|  |     }, | ||||||
|  |     report() { | ||||||
|  |       this.$instance | ||||||
|  |         .post(`/app/appactivityuser/report`, { | ||||||
|  |           activityId: this.id, | ||||||
|  |           partyId: this.user.partyId, | ||||||
|  |           name: this.user.realName, | ||||||
|  |           orgId: this.user.partyOrgId, | ||||||
|  |           orgName: this.user.partyOrgName, | ||||||
|  |           phone: this.user.phone, | ||||||
|  |           communityId: this.user.communityId, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$toast('报名成功') | ||||||
|  |             this.getDetail() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     toSignUser() { | ||||||
|  |       var isAdmin = this.detail.createUserId == this.user.partyId ? 1 : 0 | ||||||
|  |       uni.navigateTo({ url: `./SignUser?id=${this.id}&isAdmin=${isAdmin}&status=${this.detail.status}` }) | ||||||
|  |     }, | ||||||
|  |     sign(status) { | ||||||
|  |       //status 0开始签到 1离场签到 | ||||||
|  |       this.$instance | ||||||
|  |         .post(`/app/appactivityuser/sign`, { | ||||||
|  |           activityId: this.id, | ||||||
|  |           partyId: this.user.partyId, | ||||||
|  |         }) | ||||||
|  |         .then((res) => { | ||||||
|  |           if (res.code == 0) { | ||||||
|  |             this.$toast(status == 1 ? '离场签到成功' : '签到成功') | ||||||
|  |             this.getDetail() | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     toDetail(id) { | ||||||
|  |       this.linkTo(`./detail?id=${id}`) | ||||||
|  |     }, | ||||||
|  |     previewImage(images, img) { | ||||||
|  |       uni.previewImage({ | ||||||
|  |         urls: images.map((v) => v.url), | ||||||
|  |         current: img, | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .page { | ||||||
|  |   width: 100%; | ||||||
|  |   height: 100%; | ||||||
|  |   background-color: #fff; | ||||||
|  |  | ||||||
|  |   .info-title { | ||||||
|  |     padding-left: 32px; | ||||||
|  |     line-height: 108px; | ||||||
|  |     font-size: 32px; | ||||||
|  |     font-family: PingFangSC-Semibold, PingFang SC; | ||||||
|  |     font-weight: 600; | ||||||
|  |     color: #333; | ||||||
|  |   } | ||||||
|  |   .tab-title { | ||||||
|  |     line-height: 108px; | ||||||
|  |     font-size: 32px; | ||||||
|  |     font-family: PingFangSC-Semibold, PingFang SC; | ||||||
|  |     font-weight: 600; | ||||||
|  |     color: #333; | ||||||
|  |     span { | ||||||
|  |       display: inline-block; | ||||||
|  |       width: 192px; | ||||||
|  |       text-align: center; | ||||||
|  |     } | ||||||
|  |     .active { | ||||||
|  |       color: #3671ee; | ||||||
|  |       border-bottom: 4px solid #3671ee; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .status0 { | ||||||
|  |     background: #000; | ||||||
|  |   } | ||||||
|  |   .status1 { | ||||||
|  |     background: #ff883c; | ||||||
|  |   } | ||||||
|  |   .status3 { | ||||||
|  |     background: #1aaaff; | ||||||
|  |   } | ||||||
|  |   .status2 { | ||||||
|  |     background: #42d784; | ||||||
|  |   } | ||||||
|  |   .status4, | ||||||
|  |   .status5 { | ||||||
|  |     background: #e4e4e4; | ||||||
|  |   } | ||||||
|  |   .header-content { | ||||||
|  |     padding-bottom: 150px; | ||||||
|  |     .header-top { | ||||||
|  |       width: 100%; | ||||||
|  |       height: 440px; | ||||||
|  |       img { | ||||||
|  |         width: 100%; | ||||||
|  |         height: 100%; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .header-middle { | ||||||
|  |       padding: 32px 32px 0 32px; | ||||||
|  |  | ||||||
|  |       .img-title { | ||||||
|  |         font-size: 36px; | ||||||
|  |         font-weight: 600; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .header-middle-bottom { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         margin-top: 32px; | ||||||
|  |         .left { | ||||||
|  |           .left-btn { | ||||||
|  |             padding: 4px 8px; | ||||||
|  |             border-radius: 8px; | ||||||
|  |  | ||||||
|  |             font-size: 26px; | ||||||
|  |             color: #ffffff; | ||||||
|  |             text-align: center; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         .right { | ||||||
|  |           img { | ||||||
|  |             width: 40px; | ||||||
|  |             height: 40px; | ||||||
|  |             border-radius: 50%; | ||||||
|  |             vertical-align: text-top; | ||||||
|  |             margin-right: 8px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .cards { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: space-between; | ||||||
|  |         border-bottom: 2px solid #eee; | ||||||
|  |         padding: 36px 0; | ||||||
|  |         line-height: 40px; | ||||||
|  |         font-size: 28px; | ||||||
|  |  | ||||||
|  |         .cards-left { | ||||||
|  |           color: #999; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .cards-right { | ||||||
|  |           color: #333; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .header-bottom { | ||||||
|  |       background: #fff; | ||||||
|  |  | ||||||
|  |       .content-details { | ||||||
|  |         padding: 32px 32px 80px 32px; | ||||||
|  |         .font { | ||||||
|  |           margin-top: 32px; | ||||||
|  |           font-size: 30px; | ||||||
|  |           line-height: 1.5; | ||||||
|  |         } | ||||||
|  |         .font-img { | ||||||
|  |           margin-top: 26px; | ||||||
|  |           width: 100%; | ||||||
|  |           height: 480px; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .content-trends { | ||||||
|  |         // padding-bottom: 40px; | ||||||
|  |         .details { | ||||||
|  |           .card { | ||||||
|  |             padding: 26px 32px 28px 32px; | ||||||
|  |             .card-nav { | ||||||
|  |               display: flex; | ||||||
|  |               .avatar { | ||||||
|  |                 width: 64px; | ||||||
|  |                 height: 64px; | ||||||
|  |                 line-height: 60px; | ||||||
|  |                 background: #4e8eee; | ||||||
|  |                 border-radius: 50%; | ||||||
|  |                 text-align: center; | ||||||
|  |  | ||||||
|  |                 font-size: 24px; | ||||||
|  |                 font-weight: 500; | ||||||
|  |                 color: #ffffff; | ||||||
|  |                 margin-right: 16px; | ||||||
|  |               } | ||||||
|  |               .right { | ||||||
|  |                 // display: inline; | ||||||
|  |                 display: flex; | ||||||
|  |                 flex-direction: column; | ||||||
|  |  | ||||||
|  |                 .name { | ||||||
|  |                   font-size: 26px; | ||||||
|  |                   font-weight: 500; | ||||||
|  |                 } | ||||||
|  |                 .time { | ||||||
|  |                   font-size: 22px; | ||||||
|  |                   color: #999999; | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             .card-font { | ||||||
|  |               margin-top: 36px; | ||||||
|  |               line-height: 1.6; | ||||||
|  |               text-overflow: -o-ellipsis-lastline; | ||||||
|  |               overflow: hidden; | ||||||
|  |               text-overflow: ellipsis; | ||||||
|  |               display: -webkit-box; | ||||||
|  |               -webkit-line-clamp: 2; | ||||||
|  |               line-clamp: 2; | ||||||
|  |               -webkit-box-orient: vertical; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             .card-img { | ||||||
|  |               margin-top: 16px; | ||||||
|  |               img { | ||||||
|  |                 width: 224px; | ||||||
|  |                 height: 224px; | ||||||
|  |                 margin-right: 8px; | ||||||
|  |               } | ||||||
|  |               img:last-child { | ||||||
|  |                 margin-right: 0; | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             .card-icon { | ||||||
|  |               display: flex; | ||||||
|  |               justify-content: space-between; | ||||||
|  |               margin-top: 28px; | ||||||
|  |               div { | ||||||
|  |                 display: flex; | ||||||
|  |                 align-items: center; | ||||||
|  |                 span { | ||||||
|  |                   font-size: 24px; | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         ::v-deep .emptyWrap { | ||||||
|  |           // background-color: pink; | ||||||
|  |           padding-bottom: 50px; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .noDeatil { | ||||||
|  |           background-color: #f3f6f9; | ||||||
|  |           img { | ||||||
|  |             width: 400px; | ||||||
|  |             height: 240px; | ||||||
|  |             transform: translate(50%, 25%); | ||||||
|  |             padding-bottom: 156px; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .card-bottom { | ||||||
|  |           height: 20px; | ||||||
|  |           background-color: #f3f6f9; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .addicon { | ||||||
|  |     position: fixed; | ||||||
|  |     bottom: 280px; | ||||||
|  |     right: 30px; | ||||||
|  |     background: #fefefe; | ||||||
|  |     box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); | ||||||
|  |     border-radius: 50%; | ||||||
|  |     padding: 26px 24px 22px 24px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .btn { | ||||||
|  |     position: fixed; | ||||||
|  |     bottom: 0; | ||||||
|  |     width: 100%; | ||||||
|  |     // height: 112px; | ||||||
|  |     background: #f3f6f9; | ||||||
|  |  | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: space-between; | ||||||
|  |     padding: 32px 0; | ||||||
|  |     text-align: center; | ||||||
|  |     .edit { | ||||||
|  |       width: 254px; | ||||||
|  |       height: 92px; | ||||||
|  |       line-height: 92px; | ||||||
|  |       background: #ffffff; | ||||||
|  |       border-radius: 8px; | ||||||
|  |       border: 2px solid #3671ee; | ||||||
|  |  | ||||||
|  |       font-size: 34px; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #3671ee; | ||||||
|  |       margin-left: 32px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .public { | ||||||
|  |       width: 400px; | ||||||
|  |  | ||||||
|  |       line-height: 92px; | ||||||
|  |       border-radius: 8px; | ||||||
|  |       font-size: 34px; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #ffffff; | ||||||
|  |       margin-right: 32px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .max { | ||||||
|  |       margin: 0 auto; | ||||||
|  |       width: 686px; | ||||||
|  |       height: 92px; | ||||||
|  |       line-height: 92px; | ||||||
|  |       background: #cbddf9; | ||||||
|  |       border-radius: 8px; | ||||||
|  |  | ||||||
|  |       font-size: 34px; | ||||||
|  |       font-weight: 500; | ||||||
|  |       color: #ffffff; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/apps/AppResidentActivitie/yan.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/apps/AppResidentActivitie/yan.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 88 KiB | 
| @@ -10,7 +10,7 @@ | |||||||
|     <template v-if="datas.length > 0"> |     <template v-if="datas.length > 0"> | ||||||
|       <AiCard v-for="(item, i) in datas" :key="i" @click.native="toAdd(item, 1)"> |       <AiCard v-for="(item, i) in datas" :key="i" @click.native="toAdd(item, 1)"> | ||||||
|         <template #custom> |         <template #custom> | ||||||
|           <div class="title">{{ item.createUserName }}</div> |           <div class="titles">{{ item.createUserName }}</div> | ||||||
|  |  | ||||||
|           <div class="flex"> |           <div class="flex"> | ||||||
|             <span class="left"> |             <span class="left"> | ||||||
| @@ -168,7 +168,7 @@ uni-page-body { | |||||||
|       background: #fff; |       background: #fff; | ||||||
|       padding: 32px; |       padding: 32px; | ||||||
|       border-radius: 16px; |       border-radius: 16px; | ||||||
|       .title { |       .titles { | ||||||
|         font-size: 32px; |         font-size: 32px; | ||||||
|         font-weight: 500; |         font-weight: 500; | ||||||
|         color: #333333; |         color: #333333; | ||||||
|   | |||||||
| @@ -3,102 +3,384 @@ | |||||||
|     <div class="pad-l32"> |     <div class="pad-l32"> | ||||||
|       <div class="item"> |       <div class="item"> | ||||||
|         <span class="label"><span class="tips">*</span>类型</span> |         <span class="label"><span class="tips">*</span>类型</span> | ||||||
|         <div class="value"> |         <div class="value" @click="showType=true"> | ||||||
|           <span class="color-999">请选择</span> |           <span :class="appId ? '' : 'color-999'">{{appName}}</span> | ||||||
|           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> |           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|       <div class="item"> |       <div class="info-content" v-for="(items, indexs) in formDataList" :key="indexs"> | ||||||
|         <span class="label"><span class="tips">*</span>姓名</span> |         <div v-for="(item, index) in items" :key="index"> | ||||||
|         <div class="value"> |           <!-- input输入框 --> | ||||||
|           <u-input type="text" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" /> |           <div class="item" v-if="item.type == 'input' || item.type == 'name' || item.type == 'phone'"> | ||||||
|         </div> |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|       </div> |             <div class="value"> | ||||||
|       <div class="item"> |               <u-input type="text" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" v-model="formData[item.fieldDbName]" :maxlength="item.maxLength" /> | ||||||
|         <span class="label"><span class="tips">*</span>身份证号</span> |             </div> | ||||||
|         <div class="value"> |           </div> | ||||||
|           <u-input type="text" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" /> |           <!-- number 输入框 --> | ||||||
|         </div> |           <div class="item" v-if="item.type == 'number'"> | ||||||
|       </div> |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|       <div class="item"> |             <div class="value"> | ||||||
|         <span class="label"><span class="tips">*</span>性别</span> |               <u-input type="number" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" v-model="formData[item.fieldDbName]" :maxlength="item.maxLength" /> | ||||||
|         <div class="value"> |             </div> | ||||||
|           <span class="color-999">请选择</span> |           </div> | ||||||
|           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> |           <!-- 身份证输入框 --> | ||||||
|         </div> |           <div class="item" v-if="item.type == 'idNumber'"> | ||||||
|       </div> |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|       <div class="item"> |             <div class="value"> | ||||||
|         <span class="label"><span class="tips">*</span>出生日期</span> |               <u-input type="idcard" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" v-model="formData[item.fieldDbName]" :maxlength="item.maxLength" /> | ||||||
|         <div class="value"> |             </div> | ||||||
|           <span class="color-999">请选择</span> |           </div> | ||||||
|           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> |           <!-- textarea输入框 富文本--> | ||||||
|         </div> |           <div class="textarea"  v-if="item.type == 'textarea' || item.type == 'text' || item.type == 'rtf'"> | ||||||
|       </div> |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|       <div class="item"> |             <div class="value"> | ||||||
|         <span class="label"><span class="tips">*</span>联系电话</span> |               <u-input type="textarea" placeholder="请输入请输入"  placeholder-style="color:#999;font-size:16px;" height="200" v-model="formData[item.fieldDbName]" :maxlength="item.maxLength" /> | ||||||
|         <div class="value"> |             </div> | ||||||
|           <u-input type="text" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" /> |           </div> | ||||||
|         </div> |           <!-- 字典下拉选择 --> | ||||||
|       </div> |           <div class="item" v-if="item.type == 'dict'"> | ||||||
|       <div class="item"> |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|         <span class="label"><span class="tips">*</span>所属区域</span> |             <div class="value" @click="selectClick(item.fieldDbName, item.dict)"> | ||||||
|         <div class="value"> |               <span :class="formData[item.fieldDbName] ? '' : 'color-999'">{{$dict.getLabel(item.dict, formData[item.fieldDbName]) || '请选择'}}</span> | ||||||
|           <span class="color-999">请选择</span> |               <u-icon name="arrow-right area-icon" color="#cccccc" size="14"></u-icon> | ||||||
|           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> |             </div> | ||||||
|         </div> |           </div> | ||||||
|       </div> |           <!-- 单选radio --> | ||||||
|       <div class="item"> |           <div class="item" v-if="item.type == 'radio'"> | ||||||
|         <span class="label"><span class="tips">*</span>村</span> |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|         <div class="value"> |             <div class="value"> | ||||||
|           <span class="color-999">请选择</span> |               <u-radio-group v-model="formData[item.fieldDbName]"> | ||||||
|           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> |                 <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict(item.dict)" :key="index"> | ||||||
|         </div> |                   {{ item.dictName }} | ||||||
|       </div> |                 </u-radio> | ||||||
|       <div class="item"> |               </u-radio-group> | ||||||
|         <span class="label"><span class="tips"></span>所属网格</span> |             </div> | ||||||
|         <div class="value"> |           </div> | ||||||
|           <span class="color-999">请选择</span> |           <!-- 开关onOff --> | ||||||
|           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> |           <div class="item"  v-if="item.type == 'onOff'"> | ||||||
|         </div> |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|       </div> |             <div class="value"> | ||||||
|       <div class="item"> |               <u-switch v-model="formData[item.fieldDbName]"></u-switch> | ||||||
|         <span class="label"><span class="tips"></span>小区</span> |             </div> | ||||||
|         <div class="value"> |           </div> | ||||||
|           <span class="color-999">请选择</span> |           <!-- 多选checkbox --> | ||||||
|           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> |           <div class="textarea" v-if="item.type == 'checkbox'"> | ||||||
|         </div> |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|       </div> |             <div class="value"> | ||||||
|       <div class="item"> |               <u-checkbox-group> | ||||||
|         <span class="label"><span class="tips"></span>详细地址</span> |                 <u-checkbox  | ||||||
|         <div class="value"> |                   v-model="e.checked"  | ||||||
|           <span class="color-999">请选择</span> |                   v-for="(e, i) in item.checkList" :key="i"  | ||||||
|           <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> |                   :name="item.dictValue" | ||||||
|  |                   @change="checkboxChange(indexs, index, i)" | ||||||
|  |                 >{{e.dictName}}</u-checkbox> | ||||||
|  |               </u-checkbox-group> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <!-- 附件 --> | ||||||
|  |           <div class="textarea" v-if="item.type == 'upload'"> | ||||||
|  |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|  |             <div class="value"> | ||||||
|  |               <AiUploader :multiple="true" type="image" :limit="9" placeholder="上传图片" :def.sync="formData[item.fieldDbName]" | ||||||
|  |                 action="/admin/file/add2"></AiUploader> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <!-- 地区选择 --> | ||||||
|  |           <div class="item area"  v-if="item.type == 'area'"> | ||||||
|  |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|  |             <div class="value"> | ||||||
|  |               <AiAreaPicker v-model="formData[item.fieldDbName]" :areaId="user.areaId"></AiAreaPicker> | ||||||
|  |               <u-icon name="arrow-right area-icon" color="#cccccc" size="14"></u-icon> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <!-- 人员选择 --> | ||||||
|  |           <div class="item" v-if="item.type == 'user'"> | ||||||
|  |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|  |             <div class="value" @click="handleSelectUser(item.fieldDbName)"> | ||||||
|  |               <template v-if="!formData[item.fieldDbName].length"> | ||||||
|  |                 <span>请选择</span> | ||||||
|  |               </template> | ||||||
|  |               <template v-else> | ||||||
|  |                 已选择<em>{{ formData[item.fieldDbName].map(e => e.name).slice(0, 2).join("、") }}</em>等<em>{{ | ||||||
|  |                   formData[item.fieldDbName].length | ||||||
|  |                 }}</em>人 | ||||||
|  |               </template> | ||||||
|  |               <u-icon name="arrow-right" color="#cccccc" size="14"></u-icon> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <!-- 日期选择 / 日期带时分秒选择 / 时间-时分秒选择 --> | ||||||
|  |           <div class="item"  v-if="item.type == 'date' || item.type == 'datetime' || item.type == 'time'"> | ||||||
|  |             <span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span> | ||||||
|  |             <div class="value" @click="dateClick(indexs, index)"> | ||||||
|  |               <span :class="formData[item.fieldDbName] ? '' : 'color-999'">{{formData[item.fieldDbName] || '请选择'}}</span> | ||||||
|  |               <u-icon name="arrow-right area-icon" color="#cccccc" size="14"></u-icon> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <u-picker mode="time" v-model="dateShow" :params="deteParams" start-year="2010" @confirm="dateConfirm" >请选择</u-picker> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <div class="footer"> |     <u-select v-model="selectShow" mode="single-column" :list="selectList" label-name="dictName" value-name="dictValue" @confirm="selectConfirm"></u-select> | ||||||
|  |     <u-select v-model="showType" :list="typeList" label-name="applicationName" value-name="id" @confirm="typeConfirm"></u-select> | ||||||
|  |     <div class="footer" @click="submit" v-if="appId"> | ||||||
|       <div class="btn">保存</div> |       <div class="btn">保存</div> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
| import { mapState } from 'vuex' | import { mapState, mapActions } from 'vuex' | ||||||
| export default { | export default { | ||||||
|  |  | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|        |       appId: '', | ||||||
|  |       appName: '请选择', | ||||||
|  |       showType: false, | ||||||
|  |       typeList: [], | ||||||
|  |       formDataList: [], | ||||||
|  |       formData: {}, | ||||||
|  |       pageShow: false, | ||||||
|  |       dateShow: false, | ||||||
|  |       deteParams: {}, | ||||||
|  |       datePropIndex: '', //时间选择 formDataList索引 | ||||||
|  |       dateIndex: '', //时间选择 formDataList 数组里面的索引 | ||||||
|  |       selectName: '', | ||||||
|  |       selectList: [], | ||||||
|  |       selectShow: false, | ||||||
|  |       id: '' | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   computed: { ...mapState(['user']) }, |   computed: { ...mapState(['user']) }, | ||||||
|   mounted() { |   created() { | ||||||
|  |     this.getType() | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   methods: { |   methods: { | ||||||
|  |     ...mapActions(['selectEnterpriseContact']), | ||||||
|  |     handleSelectUser(fieldDbName) { | ||||||
|  |       this.selectEnterpriseContact({ | ||||||
|  |         fromDepartmentId: 0, | ||||||
|  |         type: ["user"], | ||||||
|  |         selectedUserIds: this.form[fieldDbName]?.map(e => e.id) | ||||||
|  |       }).then(res => { | ||||||
|  |         this.form[fieldDbName] = res?.userList || [] | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getType() { | ||||||
|  |       this.$http.post(`/app/appapplicationinfo/queryApplicationListByType?type=0`).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           this.typeList = res.data | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     typeConfirm(e) { | ||||||
|  |       this.appId = e[0].value | ||||||
|  |       this.appName = e[0].label | ||||||
|  |       this.$http.post(`/app/appapplicationinfo/queryApplicationInfo?appId=${this.appId}`).then((res) => { | ||||||
|  |         if (res?.data) { | ||||||
|  |           var data = res.data | ||||||
|  |           let dictList = [] | ||||||
|  |           let formList = {} | ||||||
|  |           data.tableInfos.map((item) => { | ||||||
|  |             let colItem | ||||||
|  |             if (item.dictionaryCode) { | ||||||
|  |               dictList.push(item.dictionaryCode) | ||||||
|  |             } | ||||||
|  |             if (item.dictionaryCode && item.type != 'radio' && item.type != 'checkbox' && item.type != 'onOff') { | ||||||
|  |               colItem = { | ||||||
|  |                 ...item, | ||||||
|  |                 type: 'dict', | ||||||
|  |                 dict: item.dictionaryCode, | ||||||
|  |                 fieldValue: item.defaultValue || '' | ||||||
|  |               } | ||||||
|  |             } else if (item.type == 'radio') { | ||||||
|  |               colItem = { | ||||||
|  |                 ...item, | ||||||
|  |                 dict: item.dictionaryCode, | ||||||
|  |                 fieldValue: item.defaultValue || '' | ||||||
|  |               } | ||||||
|  |             } else if (item.type == 'checkbox') { | ||||||
|  |               colItem = { | ||||||
|  |                 ...item, | ||||||
|  |                 dict: item.dictionaryCode, | ||||||
|  |                 fieldValue: '' | ||||||
|  |               } | ||||||
|  |               if (item.defaultValue) { | ||||||
|  |                 var val = item.defaultValue?.split('`') | ||||||
|  |                 colItem.fieldValue = val | ||||||
|  |               } | ||||||
|  |  | ||||||
|      |             } else if (item.type == 'onOff') { | ||||||
|  |               colItem = { | ||||||
|  |                 ...item, | ||||||
|  |                 fieldValue: false | ||||||
|  |               } | ||||||
|  |             } else if (item.type == 'number') { | ||||||
|  |               colItem = { | ||||||
|  |                 ...item, | ||||||
|  |                 type: item.type, | ||||||
|  |                 min: item.minValue || '', | ||||||
|  |                 max: item.maxValue || '', | ||||||
|  |                 fieldValue: Number(item.defaultValue) || 0 | ||||||
|  |               } | ||||||
|  |             }else if(item.type == 'upload' ||  item.type == 'user') { | ||||||
|  |               colItem = { | ||||||
|  |                 ...item, | ||||||
|  |                 type: item.type, | ||||||
|  |                 fieldValue: [] | ||||||
|  |               } | ||||||
|  |             }else if(item.type == 'area') { | ||||||
|  |               colItem = { | ||||||
|  |                 ...item, | ||||||
|  |                 type: item.type, | ||||||
|  |                 fieldValue: this.user.areaId | ||||||
|  |               } | ||||||
|  |             }else { | ||||||
|  |               if (item.type == 'date') { | ||||||
|  |                 item.params = {	year: true,	month: true,	day: true,	hour: false,	minute: false,	second: false} | ||||||
|  |               } | ||||||
|  |               if (item.type == 'datetime') { | ||||||
|  |                 item.params = {	year: true,	month: true,	day: true,	hour: true,	minute: true,	second: true} | ||||||
|  |               } | ||||||
|  |               if (item.type == 'time') { | ||||||
|  |                 item.params = {	year: false,	month: false,	day: false,	hour: true,	minute: true,	second: true} | ||||||
|  |               } | ||||||
|  |  | ||||||
|  |               colItem = { | ||||||
|  |                 ...item, | ||||||
|  |                 type: item.type, | ||||||
|  |               } | ||||||
|  |               colItem.fieldValue = item.defaultValue || '' | ||||||
|  |             } | ||||||
|  |             formList[item.groupIndex]?.push(colItem) || (formList[item.groupIndex] = [colItem]) | ||||||
|  |             this.$set(this.formData, colItem.fieldDbName, colItem.fieldValue || "") | ||||||
|  |           }) | ||||||
|  |           this.formDataList = Object.values(formList) | ||||||
|  |  | ||||||
|  |           if (dictList.length) { | ||||||
|  |             this.getDictList(dictList) | ||||||
|  |           } else { | ||||||
|  |             this.formDataList.map((item)=> { | ||||||
|  |               item.map((e) => { | ||||||
|  |                 if (e.type == 'onOff') { //开关 | ||||||
|  |                   this.formData[e.fieldDbName] = false | ||||||
|  |                 } | ||||||
|  |               }) | ||||||
|  |             }) | ||||||
|  |             this.$forceUpdate() | ||||||
|  |             this.pageShow = true | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getDictList(listName) { | ||||||
|  |       this.$dict.load(listName.join(',')).then(() => { | ||||||
|  |         this.formDataList.map((item)=> { | ||||||
|  |           item.map((e) => { | ||||||
|  |             if(e.type == 'checkbox') {  //多选 | ||||||
|  |               var list = this.$dict.getDict(e.dict) | ||||||
|  |               console.log(list) | ||||||
|  |               list.map((items) => { | ||||||
|  |                 items.checked = false | ||||||
|  |               }) | ||||||
|  |               e.checkList = list | ||||||
|  |             } | ||||||
|  |             if (e.type == 'onOff') { //开关 | ||||||
|  |               this.formData[e.fieldDbName] = false | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         }) | ||||||
|  |         this.$forceUpdate() | ||||||
|  |  | ||||||
|  |         this.pageShow = true | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     selectClick(name, dictName) { | ||||||
|  |       this.selectName = name | ||||||
|  |       this.selectList = this.$dict.getDict(dictName) | ||||||
|  |       this.selectShow = true | ||||||
|  |     }, | ||||||
|  |     selectConfirm(e) { | ||||||
|  |       this.formData[this.selectName] = e[0].value | ||||||
|  |     }, | ||||||
|  |     checkboxChange(indexs, index, i) { | ||||||
|  |       this.formDataList[indexs][index].checkList[i].checked = !this.formDataList[indexs][index].checkList[i].checked | ||||||
|  |       this.$forceUpdate() | ||||||
|  |     }, | ||||||
|  |     dateClick(indexs, index) { | ||||||
|  |       this.dateShow = true | ||||||
|  |       this.deteParams =  this.formDataList[indexs][index].params | ||||||
|  |       this.datePropIndex = indexs | ||||||
|  |       this.dateIndex = index | ||||||
|  |     }, | ||||||
|  |     dateConfirm(e) { | ||||||
|  |       var fieldDbName = this.formDataList[this.datePropIndex][this.dateIndex].fieldDbName | ||||||
|  |       if(this.formDataList[this.datePropIndex][this.dateIndex].type == 'date') {  //年月日 | ||||||
|  |         this.formData[fieldDbName] = `${e.year}-${e.month}-${e.day}` | ||||||
|  |       } | ||||||
|  |       if(this.formDataList[this.datePropIndex][this.dateIndex].type == 'datetime') {  //年月日时分秒 | ||||||
|  |         this.formData[fieldDbName] = `${e.year}-${e.month}-${e.day} ${e.hour}-${e.minute}-${e.second}` | ||||||
|  |       } | ||||||
|  |       if(this.formDataList[this.datePropIndex][this.dateIndex].type == 'time') {  //时分秒 | ||||||
|  |         this.formData[fieldDbName] = `${e.hour}-${e.minute}-${e.second}` | ||||||
|  |       } | ||||||
|  |       console.log(e) | ||||||
|  |     }, | ||||||
|  |     submit() { | ||||||
|  |       var isValid = true | ||||||
|  |  | ||||||
|  |       this.formDataList.map((item) => { | ||||||
|  |         if (item.length) { | ||||||
|  |           item.map((items) => { | ||||||
|  |             if (items.type == 'checkbox') { //多选 | ||||||
|  |               this.formData[items.fieldDbName] = '' | ||||||
|  |               var list = [] | ||||||
|  |               items.checkList.map((e) => { | ||||||
|  |                 if(e.checked) { | ||||||
|  |                   list.push(e.dictValue) | ||||||
|  |                 } | ||||||
|  |               }) | ||||||
|  |               this.formData[items.fieldDbName] = list?.toString() | ||||||
|  |             } | ||||||
|  |             if (items.type == 'upload' && this.formData[items.fieldDbName].length) { //附件 只传id | ||||||
|  |               var files = [] | ||||||
|  |               this.formData[items.fieldDbName].map((item) => { | ||||||
|  |                 files.push(item.id) | ||||||
|  |               }) | ||||||
|  |               this.formData[items.fieldDbName] = files.join(',') | ||||||
|  |             } | ||||||
|  |             if (items.type == 'onOff') { //开关 | ||||||
|  |               this.formData[items.fieldDbName] = this.formData[items.fieldDbName] ? '1' : '0' | ||||||
|  |             } | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |  | ||||||
|  |       this.formDataList.map((item) => { | ||||||
|  |         item.map((items) => { | ||||||
|  |           if(items.mustFill == 1 && this.formData[items.fieldDbName] === '') { | ||||||
|  |             isValid = false | ||||||
|  |             return this.$u.toast(`${items.fieldName}为必填项`) | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       }) | ||||||
|  |  | ||||||
|  |       if (!isValid) return | ||||||
|  |  | ||||||
|  |       this.$http.post(`/app/appapplicationinfo/addOrUpdate?appId=${this.appId}`, { | ||||||
|  |         ...this.formData, | ||||||
|  |         id: this.id || '' | ||||||
|  |       }).then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |           this.$u.toast('提交成功') | ||||||
|  |           setTimeout(() => { | ||||||
|  |             this.onBack(true) | ||||||
|  |           }, 600) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|   } |   } | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| @@ -145,18 +427,7 @@ export default { | |||||||
|     color: #333; |     color: #333; | ||||||
|     line-height: 44px; |     line-height: 44px; | ||||||
|     box-sizing: border-box; |     box-sizing: border-box; | ||||||
|     .color-999{ |     position: relative; | ||||||
|       color: #999; |  | ||||||
|     } |  | ||||||
|     .tips{ |  | ||||||
|       display: inline-block; |  | ||||||
|       width: 16px; |  | ||||||
|       height: 44px; |  | ||||||
|       font-size: 32px; |  | ||||||
|       font-family: PingFangSC-Regular, PingFang SC; |  | ||||||
|       color: #F46; |  | ||||||
|       line-height: 44px; |  | ||||||
|     } |  | ||||||
|     .value{ |     .value{ | ||||||
|       .u-icon{ |       .u-icon{ | ||||||
|         margin-left: 16px; |         margin-left: 16px; | ||||||
| @@ -166,6 +437,63 @@ export default { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |   .color-999{ | ||||||
|  |     color: #999; | ||||||
|  |   } | ||||||
|  |   .tips{ | ||||||
|  |     display: inline-block; | ||||||
|  |     width: 16px; | ||||||
|  |     height: 44px; | ||||||
|  |     font-size: 32px; | ||||||
|  |     font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |     color: #F46; | ||||||
|  |     line-height: 44px; | ||||||
|  |   } | ||||||
|  |   .textarea{ | ||||||
|  |     width: 100%; | ||||||
|  |     padding: 34px 32px 34px 0; | ||||||
|  |     background: #FFFFFF; | ||||||
|  |     border-bottom: 1px solid #D8DDE6; | ||||||
|  |     .label{ | ||||||
|  |       display: inline-block; | ||||||
|  |       font-size: 32px; | ||||||
|  |       font-family: PingFangSC-Regular, PingFang SC; | ||||||
|  |       color: #333; | ||||||
|  |       line-height: 44px; | ||||||
|  |       margin-bottom: 8px; | ||||||
|  |     } | ||||||
|  |     .value{ | ||||||
|  |       padding: 0 16px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   ::v-deep .default{ | ||||||
|  |     width: 160px!important; | ||||||
|  |     height: 160px!important; | ||||||
|  |   } | ||||||
|  |   .area{ | ||||||
|  |     padding: 16px 54px 16px 0; | ||||||
|  |     .label{ | ||||||
|  |       display: inline-block; | ||||||
|  |       line-height: 78px!important; | ||||||
|  |     } | ||||||
|  |     .u-icon{ | ||||||
|  |       vertical-align: super; | ||||||
|  |       position: absolute; | ||||||
|  |       top: 38px; | ||||||
|  |       right: 16px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   ::v-deep .AiAreaPicker{ | ||||||
|  |     display: inline-block; | ||||||
|  |     line-height: 78px; | ||||||
|  |     margin-top: -8px; | ||||||
|  |   } | ||||||
|  |   .area-icon{ | ||||||
|  |     vertical-align: super; | ||||||
|  |     position: absolute; | ||||||
|  |     top: 10px; | ||||||
|  |     right: 0; | ||||||
|  |   } | ||||||
|   .footer{ |   .footer{ | ||||||
|     width: 100%; |     width: 100%; | ||||||
|     position: fixed; |     position: fixed; | ||||||
|   | |||||||
| @@ -1,20 +1,19 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="detail"> |   <div class="detail"> | ||||||
|     <div class="tab-select"> |     <div class="tab-select"> | ||||||
|       <div class="item active">统计信息<span></span></div> |       <div class="item" :class="tabIndex == index ? 'active' : ''" v-for="(item, index) in tabs" :key="index" @click="tabClick(index)">{{item}}<span></span></div> | ||||||
|       <div class="item">人员信息<span></span></div> |  | ||||||
|     </div> |     </div> | ||||||
|     <div class="area-select"> |     <div class="area-select"> | ||||||
|       <div class="select-content"> |       <div class="select-content"> | ||||||
|         <div class="area-content"> |         <div class="area-content"> | ||||||
|           <AiAreaPicker ref="areaIds" :areaId="areaId" mode="custom" all @select="areaSelect"> |           <AiAreaPicker :areaId="user.areaId" v-model="areaId" @select="areaSelect"> | ||||||
|             <img src="./img/local-icon.png" alt=""> |             <img src="./img/local-icon.png" alt=""> | ||||||
|             <span class="label" v-if="addressArea">{{ addressArea }}</span> |             <span class="label" v-if="areaName">{{ areaName }}</span> | ||||||
|             <span v-else>请选择</span> |             <span v-else>请选择</span> | ||||||
|             <u-icon name="arrow-down" color="#666" size="24" /> |             <u-icon name="arrow-down" color="#666" size="24" /> | ||||||
|           </AiAreaPicker> |           </AiAreaPicker> | ||||||
|         </div> |         </div> | ||||||
|         <div class="search-input"> |         <div class="search-input" v-if="tabIndex"> | ||||||
|           <img src="./img/search-icon.png" alt=""> |           <img src="./img/search-icon.png" alt=""> | ||||||
|           <u-input type="text" placeholder="请输入姓名" placeholder-style="color:#999;font-size:13px;" height="18" /> |           <u-input type="text" placeholder="请输入姓名" placeholder-style="color:#999;font-size:13px;" height="18" /> | ||||||
|         </div> |         </div> | ||||||
| @@ -72,7 +71,7 @@ | |||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <div> |     <div v-else> | ||||||
|       <div class="item-content"> |       <div class="item-content"> | ||||||
|         <div class="title"> |         <div class="title"> | ||||||
|           <h2>精神病患者</h2> |           <h2>精神病患者</h2> | ||||||
| @@ -93,7 +92,7 @@ | |||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|       <div class="footer"> |       <div class="footer" @click="toAdd"> | ||||||
|         <div class="btn">新增特殊人群信息</div> |         <div class="btn">新增特殊人群信息</div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
| @@ -107,20 +106,46 @@ export default { | |||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|       areaId: '', |       areaId: '', | ||||||
|       tabIndex: 1, |       tabs: ['统计信息', '人员信息'], | ||||||
|       addressArea: '' |       tabIndex: 0, | ||||||
|  |       addressArea: '', | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   computed: { ...mapState(['user']) }, |   computed: { ...mapState(['user']) }, | ||||||
|   mounted() { |   mounted() { | ||||||
|     this.areaId = this.user.areaId |     this.areaId = this.user.areaId | ||||||
|  |     this.areaName = this.user.areaName | ||||||
|  |     this.getStatistic() | ||||||
|  |     this.getUserList() | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   methods: { |   methods: { | ||||||
|     areaSelect() { |     areaSelect(e) { | ||||||
|  |       this.areaId = e.id | ||||||
|  |       this.areaName = e.name | ||||||
|  |     },   | ||||||
|  |     tabClick(index) { | ||||||
|  |       this.tabIndex = index | ||||||
|  |     }, | ||||||
|  |     getStatistic() { | ||||||
|  |       this.$http.post(`/app/appapplicationinfo/specialStatistic?areaId=${this.areaId}&type=0`).then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |            | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     getUserList() { | ||||||
|  |       this.$http.post(`/app/appapplicationinfo/queryPeople?areaId=${this.areaId}&type=0`).then((res) => { | ||||||
|  |         if (res.code == 0) { | ||||||
|  |            | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     toAdd() { | ||||||
|  |       this.$emit('change', { | ||||||
|  |         type: 'Add', | ||||||
|  |       }) | ||||||
|     } |     } | ||||||
|      |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -119,7 +119,6 @@ | |||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </u-popup> |       </u-popup> | ||||||
|       <AiBack custom @back="back"/> |  | ||||||
|     </div> |     </div> | ||||||
|     <div class="detail" v-if="isShowConfig"> |     <div class="detail" v-if="isShowConfig"> | ||||||
|       <component |       <component | ||||||
|   | |||||||
| @@ -61,7 +61,6 @@ | |||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <AiBack custom @back="$emit('back')"/> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -28,7 +28,6 @@ | |||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </template> |     </template> | ||||||
|     <AiBack/> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -83,7 +83,6 @@ | |||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <u-picker mode="time" v-model="show" :params="options" @confirm="confirm"></u-picker> |     <u-picker mode="time" v-model="show" :params="options" @confirm="confirm"></u-picker> | ||||||
|     <AiBack ref="aiBack" v-if="!userSelect"/> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -38,7 +38,6 @@ | |||||||
|         <AiEmpty/> |         <AiEmpty/> | ||||||
|       </template> |       </template> | ||||||
|     </div> |     </div> | ||||||
|     <AiBack/> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -94,7 +94,6 @@ | |||||||
|       </div> |       </div> | ||||||
|     </template> |     </template> | ||||||
|     <u-modal v-model="show" title="提示" show-cancel-button content='是否要取消该会议?' @confirm="onConfirm"></u-modal> |     <u-modal v-model="show" title="提示" show-cancel-button content='是否要取消该会议?' @confirm="onConfirm"></u-modal> | ||||||
|     <AiBack/> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,7 +35,6 @@ | |||||||
|     </div> |     </div> | ||||||
|     <u-loadmore :status="status" v-if="list.length"/> |     <u-loadmore :status="status" v-if="list.length"/> | ||||||
|     <AiEmpty v-if="!list.length"></AiEmpty> |     <AiEmpty v-if="!list.length"></AiEmpty> | ||||||
|     <AiBack/> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -61,7 +61,6 @@ | |||||||
|         <div @click="add(1)">立即发布</div> |         <div @click="add(1)">立即发布</div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <AiBack ref="aiBack" v-if="!userSelect"/> |  | ||||||
|     <u-picker v-model="show" mode="time" :params="options" @confirm="confirm"></u-picker> |     <u-picker v-model="show" mode="time" :params="options" @confirm="confirm"></u-picker> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|   | |||||||
| @@ -55,7 +55,6 @@ | |||||||
|       </div> |       </div> | ||||||
|     </template> |     </template> | ||||||
|     <AiEmpty description="该通知已撤回" v-else/> |     <AiEmpty description="该通知已撤回" v-else/> | ||||||
|     <AiBack/> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,7 +9,6 @@ | |||||||
|         <AiOpenData type="userName" :openid="item.id"></AiOpenData> |         <AiOpenData type="userName" :openid="item.id"></AiOpenData> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <AiBack/> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user