| <template>  | 
|     <view class="main_app" :class="{ popupShow: isShowSelMem }">  | 
|         <view class="search_inp df_ac">  | 
|             <image class="mr12 search" src="../../static/ic_search@2x.png" mode="widthFix"></image>  | 
|             <input v-model="param.queryParam" @input="changeInput" confirm-type="search" type="text" placeholder="搜索"  | 
|                 placeholder-style="color: #999999;" />  | 
|         </view>  | 
|         <view class="member_list">  | 
|             <view v-for="(item, index) in inputList" :key="item.id" class="line">  | 
|                 <image v-if="item.faceImg" :src="item.faceImg" class="avatar" mode=""></image>  | 
|                 <view v-else class="avatar">{{ item.realname.slice(0, 1) }}</view>  | 
|                 <view class="content">  | 
|                     <view class="info">  | 
|                         <text class="name">{{ item.realname }}</text>  | 
|                         <text class="tag" v-if="item.status == '1'">有会议</text>  | 
|                     </view>  | 
|                     <view class="depart">{{ item.departmentName || item.companyName }}</view>  | 
|                 </view>  | 
|                 <image @click="changeMem(item, index)" v-if="item.checked" src="@/static/checkbox_sel@2x.png" mode="widthFix"  | 
|                     class="checked"></image>  | 
|                 <image @click="changeMem(item, index)" v-if="!item.checked" src="@/static/meeting/icon/ic_choose@2x.png"  | 
|                     mode="widthFix" class="checked"></image>  | 
|                 <text></text>  | 
|             </view> | 
|             <view class="" style="height: 220rpx;"></view>  | 
|             <view v-if="inputList.length == 0" class="empty_wrap"> | 
|                 <image src="@/static/empty.png" mode=""></image> | 
|                 <text>暂无数据</text> | 
|             </view>  | 
|         </view>  | 
|         <!--  -->  | 
|         <view class="sub_wrap">  | 
|             <view class="sel_mem">  | 
|                 <text>已选择:</text>  | 
|                 <view class="members">  | 
|                     <text v-for="(item, i) in selList" :key="i">{{ item.realname }};</text>  | 
|                 </view>  | 
|                 <image @click="openSeleter" class="open_icon" src="../../static/staff/renyuan_ic_open.png" mode=""></image>  | 
|             </view>  | 
|             <view class="btn" @click="onSubmit">确认({{ selList.length }}/{{ param.limitNum }})</view>  | 
|         </view>  | 
|         <!--  -->  | 
|         <u-popup catchtouchmove :show="isShowSelMem" :round="12" mode="bottom" @close="closeModal">  | 
|             <view class="modal">  | 
|                 <view class="modal_header">  | 
|                     <text class="status">已选择:{{ selList.filter(i => i.checkedTemp).length }}人</text>  | 
|                     <text class="btn" @click="subSelMem">确认</text>  | 
|                 </view>  | 
|                 <view class="modal_mem_list">  | 
|                     <template v-for="(item, i) in selList">  | 
|                         <view class="line" v-if="item.checkedTemp">  | 
|                             <image v-if="item.avatar" :src="item.prefixUrl + item.avatar" class="avatar" mode=""></image>  | 
|                             <view v-else class="avatar">{{ item.realname.slice(0, 1) }}</view>  | 
|                             <view class="content">  | 
|                                 <view class="info">  | 
|                                     <text class="name">{{ item.realname }}</text>  | 
|                                 </view>  | 
|                                 <view class="depart">{{ item.departmentName }}</view>  | 
|                             </view>  | 
|                             <view class="btn" @click="handleRemove(i)">移除</view>  | 
|                         </view>  | 
|                     </template>  | 
|                 </view>  | 
|             </view>  | 
|         </u-popup>  | 
|     </view>  | 
| </template>  | 
|   | 
| <script>  | 
|     import {  | 
|         userPagePost  | 
|     } from '@/api'  | 
|     import dayjs from 'dayjs'  | 
|     export default {  | 
|         data() {  | 
|             return {  | 
|                 memberList: [], | 
|                 inputList: [],  | 
|                 selList: [],  | 
|                 param: {  | 
|                     limitNum: ''  | 
|                 },  | 
|                 pagination: {  | 
|                     page: 1,  | 
|                     capacity: 40  | 
|                 },  | 
|   | 
|                 isShowSelMem: false  | 
|             }  | 
|         },  | 
|         onLoad(option) {  | 
|             this.param = {  | 
|                 limitNum: option.limitNum,  | 
|                 queryParam: '',  | 
|                 startTime: dayjs(Number(option.startTime)).format('YYYY-MM-DD HH:mm:ss'),  | 
|                 endTime: dayjs(Number(option.endTime)).format('YYYY-MM-DD HH:mm:ss'),  | 
|             }  | 
|             this.initData()  | 
|         },  | 
|         mounted() {  | 
|             this.$eventBus.$on('meetingPeoDetail', (res) => {  | 
|                 setTimeout(() => {  | 
|                     res.forEach(item => {  | 
|                         this.memberList.forEach(mem => {  | 
|                             if (item.id == mem.id) {  | 
|                                 mem.checked = true  | 
|                             }  | 
|                         })  | 
|                     })  | 
|                     this.selList = this.memberList.filter(i => i.checked)  | 
|                     this.$nextTick(() => {  | 
|                         this.$forceUpdate()  | 
|                     })  | 
|                 }, 500)  | 
|             })  | 
|         },  | 
|         methods: {  | 
|             onSubmit() {  | 
|                 this.$eventBus.$emit('meetingPeo', this.selList)  | 
|                 uni.navigateBack()  | 
|             },  | 
|             changeMem(item, index) {  | 
|                 // const { selList, param } = this  | 
|                 // if (this.selList.length == param.limitNum && !item.checked) return uni.showToast({  | 
|                 //   title: `该会议可容纳${param.limitNum}人`,  | 
|                 //   icon: 'none'  | 
|                 // })  | 
|                 // item.checked = !item.checked  | 
|                 // this.selList = this.memberList.filter(i => i.checked)  | 
|                 // //   | 
|                 item.checked = !item.checked  | 
|                 const i = this.selList.findIndex(a => a.id === item.id)  | 
|                 if (item.checked && i === -1) {  | 
|                     this.selList.push(item)  | 
|                 } else {  | 
|                     this.selList.splice(i, 1)  | 
|                 }  | 
|                 this.$forceUpdate()  | 
|             },  | 
|             openSeleter() {  | 
|                 this.isShowSelMem = true  | 
|                 this.selList.forEach(item => {  | 
|                     item.checkedTemp = true  | 
|                 })  | 
|                 this.$forceUpdate()  | 
|             }, | 
|             changeInput(e) { | 
|                 const str = e.target.value | 
|                 this.inputList = this.memberList.filter(item => { | 
|                     if(item.realname.indexOf(str) > -1){ | 
|                         return item | 
|                     } | 
|                 }) | 
|             },  | 
|             initData() {  | 
|                 const {  | 
|                     param,  | 
|                     pagination  | 
|                 } = this  | 
|                 userPagePost({  | 
|                     ...param, | 
|                     querySpecial: 1, type: 2, companyType: 1,workStatus:0  | 
|   | 
|                 }).then(res => {  | 
|                     this.memberList = res.data || []  | 
|                     this.memberList.forEach(i => {  | 
|                         const index = this.selList.findIndex(ite => ite.id === i.id)  | 
|                         i.checked = index > -1  | 
|                     }) | 
|                     this.inputList = [...this.memberList]  | 
|                 })  | 
|             },  | 
|             closeModal() {  | 
|                 this.selList.forEach(item => {  | 
|                     item.checkedTemp = true  | 
|                 })  | 
|                 this.isShowSelMem = false  | 
|             },  | 
|             subSelMem() {  | 
|                 const {  | 
|                     memberList  | 
|                 } = this  | 
|                 this.selList = this.selList.filter(i => i.checkedTemp)  | 
|                 memberList.forEach(ite => {  | 
|                     const index = this.selList.findIndex(i => i.id === ite.id)  | 
|                     ite.checked = index > -1  | 
|                 })  | 
|                 this.isShowSelMem = false  | 
|                 this.$forceUpdate()  | 
|             },  | 
|             handleRemove(i) {  | 
|                 this.selList[i].checkedTemp = false  | 
|                 this.$forceUpdate()  | 
|             },  | 
|         }  | 
|     };  | 
| </script>  | 
|   | 
| <style lang="scss">  | 
|     .modal {  | 
|         padding: 40rpx 30rpx;  | 
|         max-height: 1000rpx;  | 
|   | 
|         .modal_header {  | 
|             display: flex;  | 
|             justify-content: space-between;  | 
|             align-items: center;  | 
|             padding-bottom: 20rpx;  | 
|   | 
|             .status {  | 
|                 font-weight: 600;  | 
|             }  | 
|   | 
|             .btn {  | 
|                 color: $uni-color-primary;  | 
|             }  | 
|         }  | 
|   | 
|         .modal_mem_list {  | 
|             max-height: 860rpx;  | 
|             overflow: auto;  | 
|   | 
|             .line {  | 
|                 display: flex;  | 
|                 align-items: center;  | 
|                 border-bottom: 1rpx solid #e5e5e5;  | 
|                 padding: 30rpx 0;  | 
|   | 
|                 .avatar {  | 
|                     width: 64rpx;  | 
|                     height: 64rpx;  | 
|                     border-radius: 50%;  | 
|                     overflow: hidden;  | 
|                     margin-right: 20rpx;  | 
|                     display: flex;  | 
|                     justify-content: center;  | 
|                     align-items: center;  | 
|                     background-color: $uni-color-primary;  | 
|                     color: #fff;  | 
|                 }  | 
|   | 
|                 .content {  | 
|                     flex: 1;  | 
|   | 
|                     .depart {  | 
|                         font-size: 24rpx;  | 
|                         color: #666666;  | 
|                     }  | 
|   | 
|                     .info {  | 
|                         display: flex;  | 
|                         margin-bottom: 16rpx;  | 
|   | 
|                         .name {  | 
|                             font-size: 30rpx;  | 
|                         }  | 
|                     }  | 
|                 }  | 
|   | 
|                 .btn {  | 
|                     width: 80rpx;  | 
|                     height: 48rpx;  | 
|                     line-height: 48rpx;  | 
|                     text-align: center;  | 
|                     font-size: 24rpx;  | 
|                     color: #333333;  | 
|                     border-radius: 4rpx;  | 
|                     border: 1rpx solid #999999;  | 
|                 }  | 
|             }  | 
|         }  | 
|     }  | 
|   | 
|     .sub_wrap {  | 
|         position: fixed;  | 
|         bottom: 0;  | 
|         background-color: #fff;  | 
|         left: 0;  | 
|         width: 100%;  | 
|         box-shadow: 0rpx 0rpx 6rpx 0rpx #b2b2b2;  | 
|         padding: 30rpx 30rpx 42rpx;  | 
|   | 
|         .sel_mem {  | 
|             display: flex;  | 
|             align-items: center;  | 
|   | 
|             .members {  | 
|                 width: 500rpx;  | 
|                 color: $uni-color-primary;  | 
|                 white-space: nowrap;  | 
|                 overflow: hidden; //文本超出隐藏  | 
|                 text-overflow: ellipsis;  | 
|                 margin-right: 20rpx;  | 
|             }  | 
|   | 
|             .open_icon {  | 
|                 width: 44rpx;  | 
|                 height: 44rpx;  | 
|             }  | 
|         }  | 
|   | 
|         .btn {  | 
|             width: 690rpx;  | 
|             height: 88rpx;  | 
|             line-height: 88rpx;  | 
|             background: $uni-color-primary;  | 
|             border-radius: 44rpx;  | 
|             color: #fff;  | 
|             text-align: center;  | 
|             margin-top: 22rpx;  | 
|         }  | 
|     }  | 
|   | 
|     .member_list { | 
|         height: calc( 100vh - 130rpx ); | 
|         overflow: auto; | 
|         margin-top: 10rpx;  | 
|         .line {  | 
|             display: flex;  | 
|             align-items: center;  | 
|             border-bottom: 1rpx solid #e5e5e5;  | 
|             padding: 30rpx 0;  | 
|               | 
|             .avatar {  | 
|                 width: 64rpx;  | 
|                 height: 64rpx;  | 
|                 border-radius: 50%;  | 
|                 overflow: hidden;  | 
|                 margin-right: 20rpx;  | 
|             }  | 
|   | 
|             .content {  | 
|                 flex: 1;  | 
|   | 
|                 .depart {  | 
|                     font-size: 24rpx;  | 
|                     color: #666666;  | 
|                 }  | 
|   | 
|                 .info {  | 
|                     display: flex;  | 
|                     margin-bottom: 16rpx;  | 
|   | 
|                     .name {  | 
|                         font-size: 30rpx;  | 
|                     }  | 
|   | 
|                     .tag {  | 
|                         font-size: 24rpx;  | 
|                         border-radius: 4rpx;  | 
|                         border: 1rpx solid #f62710;  | 
|                         color: #f62710;  | 
|                         padding: 0rpx 6rpx;  | 
|                         margin-left: 8rpx;  | 
|                         display: flex;  | 
|                         align-items: center;  | 
|                     }  | 
|                 }  | 
|             }  | 
|   | 
|             .checked {  | 
|                 width: 48rpx;  | 
|             }  | 
|         }  | 
|   | 
|         .empty {  | 
|             width: 100%;  | 
|             height: 280rpx;  | 
|         }  | 
|     }  | 
|   | 
|     .search_inp {  | 
|         height: 72rpx;  | 
|         background: #f7f7f7;  | 
|         border-radius: 4rpx;  | 
|         padding-left: 16rpx;  | 
|   | 
|         .search {  | 
|             width: 28rpx;  | 
|         }  | 
|   | 
|         input {  | 
|             flex: 1;  | 
|             font-size: 28rpx;  | 
|             color: #333333;  | 
|         }  | 
|     }  | 
| </style> |