<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.keyword" @blur="initData()" type="text" placeholder="搜索"  
 | 
                placeholder-style="color: #999999;" />  
 | 
        </view>  
 | 
        <view class="member_list">  
 | 
            <view v-for="(item, index) in memberList" :key="item.id" class="line">  
 | 
                <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>  
 | 
                        <text class="tag" v-if="item.status == '1'">有会议</text>  
 | 
                    </view>  
 | 
                    <view class="depart">{{ item.departmentName }}</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 v-if="memberList.length == 0" class="empty"> 
 | 
                <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: [],  
 | 
                selList: [],  
 | 
                param: {  
 | 
                    limitNum: ''  
 | 
                },  
 | 
                pagination: {  
 | 
                    page: 1,  
 | 
                    capacity: 20  
 | 
                },  
 | 
  
 | 
                isShowSelMem: false  
 | 
            }  
 | 
        },  
 | 
        onLoad(option) {  
 | 
            this.param = {  
 | 
                limitNum: option.limitNum,  
 | 
                keyword: '',  
 | 
                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()  
 | 
                    })  
 | 
                }, 1000)  
 | 
            })  
 | 
        },  
 | 
        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()  
 | 
            },  
 | 
            initData() {  
 | 
                const {  
 | 
                    param,  
 | 
                    pagination  
 | 
                } = this  
 | 
                userPagePost({  
 | 
                    model: {  
 | 
                        ...param  
 | 
                    },  
 | 
                    ...pagination,  
 | 
  
 | 
                }).then(res => {  
 | 
                    this.memberList = res.data.records || []  
 | 
                    this.memberList.forEach(i => {  
 | 
                        const index = this.selList.findIndex(ite => ite.id === i.id)  
 | 
                        i.checked = index > -1  
 | 
                    })  
 | 
                })  
 | 
            },  
 | 
            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 64rpx;  
 | 
  
 | 
        .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 {  
 | 
        .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> 
 |