ll
liukangdong
2025-02-25 5857dfa10b70a061b8e4711dd8f18b585ac6fc23
h5/pages/staff/vehicle/applePeo.vue
@@ -1,5 +1,5 @@
<template>
   <view class="main_app" :class="{ popupShow: isShowSelMem }">
   <view class="main_app" :style="{ height: windowHeight + 'px' }" :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" @confirm="initData()" type="text" placeholder="搜索"
@@ -21,11 +21,11 @@
            <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>
         <view class="" style="height: 220rpx;"></view>
         <view v-if="memberList.length == 0" class="empty_wrap">
            <image src="@/static/empty.png" mode=""></image>
            <text>暂无数据</text>
         <view v-if="memberList.length == 0" class="empty_wrap">
            <image src="@/static/empty.png" mode=""></image>
            <text>暂无数据</text>
         </view>
      </view>
      <!--  -->
@@ -37,13 +37,13 @@
            </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 class="btn" @click="onSubmit">确认({{ selList.length }})</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="status">已选择:{{selList.filter(i => i.checkedTemp).length}}人</text>
               <text class="btn" @click="subSelMem">确认</text>
            </view>
            <view class="modal_mem_list">
@@ -67,256 +67,173 @@
</template>
<script>
   import {
      userPagePost
   } from '@/api'
   import dayjs from 'dayjs'
   export default {
      data() {
         return {
            memberList: [],
            selList: [],
            param: {
               limitNum: ''
            },
            pagination: {
               page: 1,
               capacity: 40
            },
import {
   userPagePost
} from '@/api'
import dayjs from 'dayjs'
export default {
   data() {
      return {
         memberList: [],
         selList: [],
         param: {
            limitNum: ''
         },
         windowHeight: '',
         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('applePeoDetail', (res) => {
            setTimeout(() => {
               res.forEach(item => {
                  this.memberList.forEach(mem => {
                     if (item.id == mem.id) {
                        mem.checked = true
                     }
                  })
         isShowSelMem: false
      }
   },
   onLoad(option) {
      const result = uni.getWindowInfo()
      this.windowHeight = result.windowHeight
      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('applePeoDetail', (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)
            })
            this.selList = this.memberList.filter(i => i.checked)
            this.$nextTick(() => {
               this.$forceUpdate()
            })
         }, 500)
      })
   },
   methods: {
      onSubmit() {
         this.$eventBus.$emit('applePeo', 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({
            ...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
            })
         })
      },
      methods: {
         onSubmit() {
            this.$eventBus.$emit('applePeo', 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({
               ...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
               })
            })
         },
         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()
         },
      }
   };
      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;
.main_app {
   position: relative;
}
      .modal_header {
         display: flex;
         justify-content: space-between;
         align-items: center;
         padding-bottom: 20rpx;
.modal {
   padding: 40rpx 30rpx;
   max-height: 1000rpx;
         .status {
            font-weight: 600;
         }
   .modal_header {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding-bottom: 20rpx;
         .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;
         }
      .status {
         font-weight: 600;
      }
      .btn {
         width: 690rpx;
         height: 88rpx;
         line-height: 88rpx;
         background: $uni-color-primary;
         border-radius: 44rpx;
         color: #fff;
         text-align: center;
         margin-top: 22rpx;
         color: $uni-color-primary;
      }
   }
   .member_list {
      height: calc( 100vh - 130rpx );
      overflow: auto;
      margin-top: 10rpx;
   .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 {
@@ -334,45 +251,136 @@
               .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;
         .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;
            }
         }
      }
      .empty {
         width: 100%;
         height: 280rpx;
      .checked {
         width: 48rpx;
      }
   }
   .search_inp {
      height: 72rpx;
      background: #f7f7f7;
      border-radius: 4rpx;
      padding-left: 16rpx;
      .search {
         width: 28rpx;
      }
      input {
         flex: 1;
         font-size: 28rpx;
         color: #333333;
      }
   .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>