From c67b37d706daedbc7c4efc74ddadc8f591524b46 Mon Sep 17 00:00:00 2001 From: 董国庆 <364620639@qq.com> Date: 星期一, 16 六月 2025 20:04:18 +0800 Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory --- culture/src/components/SelectMember/index.vue | 41 ++++++++++++++++++++++++++++++----------- 1 files changed, 30 insertions(+), 11 deletions(-) diff --git a/culture/src/components/SelectMember/index.vue b/culture/src/components/SelectMember/index.vue index 0b0434e..d738bb1 100644 --- a/culture/src/components/SelectMember/index.vue +++ b/culture/src/components/SelectMember/index.vue @@ -1,5 +1,5 @@ <template> - <el-dialog @open="openDialog" class="select-member" :visible.sync="visible" width="53.33%" + <el-dialog @open="openDialog" class="select-member" :z-index="1000" :visible.sync="visible" width="53.33%" :close-on-click-modal="false" :show-close="false"> <template #title> <div>选择参与人员</div> @@ -17,12 +17,12 @@ src="@/assets/public/close-circle-fill@2x.png" /> </div> </div> - <el-button type="primary">搜索</el-button> + <el-button type="primary" @click="filterRoleList">搜索</el-button> </div> <div class="select-member-content-left-list"> <div class="select-member-content-left-list-title">角色列表</div> <div class="select-member-content-left-list-itemBox"> - <div @click="searchUserList(item.roleId)" v-for="item in roleList" :key="item.roleId" + <div @click="searchUserList(item.roleId)" v-for="item in filteredRoleList" :key="item.roleId" class="select-member-content-left-list-itemBox-item" :class="roleId == item.roleId && 'active'"> {{ item.roleName }} @@ -36,8 +36,8 @@ <div class="select-member-content-right-header"> <div class="select-member-content-right-header-text">人员列表</div> <div class="select-member-content-right-header-search"> - <el-input clearable v-model="nickNameOrPhone" placeholder="请输入姓名/手机号" /> - <el-button type="primary">搜索</el-button> + <el-input clearable v-model="nickNameOrPhone" placeholder="请输入姓名/手机号" @keyup.enter.native="searchUserList(roleId)" /> + <el-button type="primary" @click="searchUserList(roleId)">搜索</el-button> </div> </div> <Table ref="memberTable" :row-key="row => row.userId" :data="tableData" :total="0" @@ -79,7 +79,8 @@ nickNameOrPhone: '', tableData: [], selectData: [], - roleList: [], + roleList: [], // 原始角色列表 + filteredRoleList: [], // 过滤后的角色列表 roleId: null, } }, @@ -98,18 +99,26 @@ openDialog() { // 获取角色列表并根据项目组ID进行过滤 getRoleList().then(res => { + let roles = []; if (this.projectId) { // 过滤出实验员和化验师角色 - this.roleList = res.filter(item => item.roleId == 4 || item.roleId == 5); + roles = res.filter(item => item.roleId == 4 || item.roleId == 5); } else { - this.roleList = res; + roles = res.filter(item => item.roleId !== 1); // 排除 roleId 为 1 的角色 } + this.roleList = roles; + this.filterRoleList(); // 获取后先进行一次过滤 }); this.searchUserList(null); }, handleSelectionChange(val) { if (!this.singleSelect) { - this.selectData = val; + // 获取当前表格中未被选中的用户ID + const unselectedInCurrentTable = this.tableData.filter(row => !val.some(selected => selected.userId === row.userId)).map(row => row.userId); + // 从总的selectData中移除这些未选中的用户,保留其他角色已选中的用户 + const otherSelected = this.selectData.filter(item => !unselectedInCurrentTable.includes(item.userId)); + // 合并当前表格的选中项和其他角色已选中的项 + this.selectData = [...otherSelected.filter(item => !val.some(v => v.userId === item.userId)), ...val]; } }, async searchUserList(roleId) { @@ -117,7 +126,7 @@ // 根据是否有项目组ID来决定调用不同的接口 const params = { roleIds: roleId ? [roleId] : [], - nickNameOrPhone: this.searchName, + nickNameOrPhone: this.nickNameOrPhone, // 使用 nickNameOrPhone 进行搜索 pageSize: 9999, pageNum: 1 }; @@ -139,7 +148,15 @@ }) }, searchRole() { - this.search = '' + this.search = ''; + this.filterRoleList(); // 清空搜索词后重新过滤 + }, + filterRoleList() { + if (this.search) { + this.filteredRoleList = this.roleList.filter(item => item.roleName.includes(this.search)); + } else { + this.filteredRoleList = [...this.roleList]; + } }, open() { this.visible = true @@ -173,6 +190,8 @@ </script> <style scoped lang="less"> + +// to fix el-message弹框被el-dialog覆盖的问题。 .select-member-content { .select-member-content-left { box-shadow: 0px 4px 12px 4px rgba(0, 0, 0, 0.08); -- Gitblit v1.7.1