From 69a1b3bf45738f048361ee4ccb6bdc64fce35720 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 12 三月 2025 11:31:46 +0800
Subject: [PATCH] 更新
---
h5/pages/staff/meetingSel.vue | 388 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 388 insertions(+), 0 deletions(-)
diff --git a/h5/pages/staff/meetingSel.vue b/h5/pages/staff/meetingSel.vue
new file mode 100644
index 0000000..71b2481
--- /dev/null
+++ b/h5/pages/staff/meetingSel.vue
@@ -0,0 +1,388 @@
+<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>
\ No newline at end of file
--
Gitblit v1.9.3