From cec75849fc7db84a681b398f544e4d3e40d7d0f7 Mon Sep 17 00:00:00 2001 From: hejianhao <15708179461@qq.com> Date: 星期四, 15 五月 2025 17:59:18 +0800 Subject: [PATCH] 菌种评定、项目管理 --- culture/src/components/SelectMember/index.vue | 109 +++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 79 insertions(+), 30 deletions(-) diff --git a/culture/src/components/SelectMember/index.vue b/culture/src/components/SelectMember/index.vue index 62039ee..7182483 100644 --- a/culture/src/components/SelectMember/index.vue +++ b/culture/src/components/SelectMember/index.vue @@ -1,6 +1,6 @@ <template> - <el-dialog class="select-member" :visible.sync="visible" width="53.33%" :close-on-click-modal="false" - :show-close="false"> + <el-dialog @open="openDialog" class="select-member" :visible.sync="visible" width="53.33%" + :close-on-click-modal="false" :show-close="false"> <template #title> <div>选择参与人员</div> </template> @@ -22,9 +22,10 @@ <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 v-for="item in 10" :key="item.id" - class="select-member-content-left-list-itemBox-item"> - 实验员 + <div @click="searchUserList(item.roleId)" v-for="item in roleList" :key="item.roleId" + class="select-member-content-left-list-itemBox-item" + :class="roleId == item.roleId && 'active'"> + {{ item.roleName }} </div> </div> </div> @@ -35,15 +36,15 @@ <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="searchName" placeholder="请输入姓名" /> + <el-input clearable v-model="nickNameOrPhone" placeholder="请输入姓名/手机号" /> <el-button type="primary">搜索</el-button> </div> </div> - <Table :data="tableData" :total="0" @selection-change="handleSelectionChange" - :row-class-name="tableRowClassName"> + <Table ref="memberTable" :row-key="row => row.userId" :data="tableData" :total="0" + @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"> <el-table-column type="selection" width="55" /> - <el-table-column label="角色" prop="role" /> - <el-table-column label="姓名" prop="name" /> + <el-table-column label="角色" prop="roleName" /> + <el-table-column label="姓名" prop="nickName" /> <el-table-column label="创建时间" prop="createTime" /> </Table> </div> @@ -52,40 +53,79 @@ </div> <div class="select-member-footer"> <el-button @click="close" type="default">关闭</el-button> - <el-button type="primary">确认选择</el-button> + <el-button type="primary" @click="submit">确认选择</el-button> </div> </el-dialog> </template> <script> -import { mapState } from 'vuex' +import { getRoleList, getUserList } from './service' export default { + props: { + projectId: { + type: [String, Number], + default: null + } + }, data() { return { visible: false, search: '', - searchName: '', - tableData: [ - { - name: '张三', - role: '实验员', - createTime: '2025-1-2 15:13:58' - }, - { - name: '李四', - role: '实验员', - createTime: '2025-1-2 15:13:58' - }, - ], - selectData: [] + nickNameOrPhone: '', + tableData: [], + selectData: [], + roleList: [], + roleId: null, } }, - computed: { - ...mapState(['isFold']) - }, methods: { + setSelection(selected) { + this.selectData = selected + this.$nextTick(() => { + // 设置新选中 + this.tableData.forEach(row => { + if (selected.some(i => i.userId === row.userId)) { + this.$refs.memberTable.toggleRowSelection(row, true) + } + }) + }) + }, + openDialog() { + // 获取角色列表并根据项目组ID进行过滤 + getRoleList().then(res => { + if (this.projectId) { + // 过滤出实验员和化验师角色 + this.roleList = res.filter(item => item.roleId == 4 || item.roleId == 5); + } else { + this.roleList = res; + } + }); + this.searchUserList(null); + }, handleSelectionChange(val) { this.selectData = val + }, + async searchUserList(roleId) { + this.roleId = roleId + // 根据是否有项目组ID来决定调用不同的接口 + const params = { + roleIds: roleId ? [roleId] : [], + nickNameOrPhone: this.searchName, + pageSize: 9999, + pageNum: 1 + }; + + if (this.projectId) { + params.projectId = this.projectId; + // TODO: 这里需要替换为新的接口调用 + // const res = await getProjectUserList(params); + } else { + const res = await getUserList(params); + this.tableData = res.records; + } + + // 数据加载完成后重新应用选中状态 + this.setSelection(this.selectData) }, searchRole() { this.search = '' @@ -96,8 +136,11 @@ close() { this.visible = false }, + submit() { + this.$emit('submit', this.selectData) + }, tableRowClassName({ row, rowIndex }) { - if (this.selectData.findIndex(item => item.name === row.name) != -1) { + if (this.selectData.findIndex(item => item.userId === row.userId) != -1) { return 'select-row'; } return ''; @@ -191,6 +234,12 @@ &:last-child { margin-bottom: 0; } + + &:hover, + &.active { + background: rgba(4, 156, 154, 0.1); + color: #049C9A; + } } } } -- Gitblit v1.7.1