From e950c38ba82e5e6bc8b0c50c35e5dbb6a180165a Mon Sep 17 00:00:00 2001 From: 13404089107 <puwei@sinata.cn> Date: 星期二, 20 五月 2025 16:43:06 +0800 Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory --- culture/src/views/projectList/addProject.vue | 91 +++++++++++++++++++++++++++++++++++---------- 1 files changed, 71 insertions(+), 20 deletions(-) diff --git a/culture/src/views/projectList/addProject.vue b/culture/src/views/projectList/addProject.vue index 5bfdd34..9c2e21d 100644 --- a/culture/src/views/projectList/addProject.vue +++ b/culture/src/views/projectList/addProject.vue @@ -2,11 +2,11 @@ <Card> <template> <el-form ref="form" :model="form" :rules="rules" inline label-position="top"> - <el-form-item prop="name" label="项目组名称"> - <el-input v-model="form.name" placeholder="请输入" /> + <el-form-item prop="teamName" label="项目组名称"> + <el-input v-model="form.teamName" placeholder="请输入" /> </el-form-item> - <el-form-item prop="description" label="项目负责人"> - <el-input v-model="form.description" placeholder="请输入" /> + <el-form-item prop="personCharge" label="项目负责人"> + <el-input v-model="form.personCharge" placeholder="请输入" /> </el-form-item> </el-form> <div class="header-title"> @@ -17,41 +17,73 @@ <el-button class="el-icon-plus" type="primary" @click="addMember"> 添加项目组成员</el-button> </div> <div class="member-list"> - <div v-for="(item,index) in ['审批人', '菌种工程师', '菌种实验员']" :key="item" class="member-list-card"> + <div v-for="item in 3" :key="item" class="member-list-card"> <div class="member-item"> - <div class="member-title">{{ item }}</div> - <div :class="index == 0 || index == 1 ? 'member-name-box' : 'member-name-box-2'"> - <div v-for="i in memberList(index+1)" :key="i" class="member-name">张三</div> + <div class="member-title">{{ ['菌种审批人', '菌种工程师', '菌种实验员'][item - 1] }}</div> + <div :class="item == 1 || item == 2 ? 'member-name-box' : 'member-name-box-2'"> + <el-tooltip v-for="i in memberList(item)" :key="i.userId" class="member-name" effect="dark" + :content="i.nickName" placement="top"> + <span>{{ i.nickName }}</span> + </el-tooltip> </div> - <div class="member-edit">修改</div> + <div class="member-edit" v-if="memberList(item).length != 0" @click="editUserList">修改</div> </div> </div> </div> <div class="add-project-footer"> - <el-button type="primary">保存</el-button> + <el-button @click="submitForm" type="primary">保存</el-button> </div> </template> - <SelectMember ref="selectMember" /> + <SelectMember ref="selectMember" @submit="selectUser" /> </Card> </template> <script> +import { addProject } from './service' export default { name: 'AddProject', data() { return { form: {}, rules: { - name: [{ required: true, message: '请输入项目组名称', trigger: 'blur' }], - description: [{ required: true, message: '请输入项目组描述', trigger: 'blur' }] - } + teamName: [{ required: true, message: '请输入项目组名称', trigger: 'blur' }], + personCharge: [{ required: true, message: '请输入项目组描述', trigger: 'blur' }] + }, + selectMemberData: [], + // 角色配置常量 + ROLE_CONFIG: { + 1: { key: 'approver', limit: 1, label: '菌种审批人' }, + 2: { key: 'engineer', limit: 1, label: '菌种工程师' }, + }, } }, methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { - console.log('submit!') + if (this.selectMemberData.length == 0) { + this.$message.error('请选择项目组成员') + return + } + const ROLE_NAME_TO_TYPE = { + '菌种审批人': 1, + '菌种工程师': 2, + '菌种实验员': 3, + }; + const data = { + teamName: this.form.teamName, + personCharge: this.form.personCharge, + staffs: this.selectMemberData.map(member => ({ + userId: member.userId, + roleType: ROLE_NAME_TO_TYPE[member.roleName] + })) + } + addProject(data).then(res => { + if (res.code == 200) { + this.$message.success('添加成功') + this.$router.push({ name: 'ProjectList' }) + } + }) } }) }, @@ -61,16 +93,31 @@ memberList(i) { switch (i) { case 1: - return [1] + return this.selectMemberData.filter(item => item.roleName == '菌种审批人') case 2: - return [1] + return this.selectMemberData.filter(item => item.roleName == '菌种工程师') case 3: - return [1, 2, 3, 4, 5, 6, 7, 8] - case 4: - return [1, 2, 3, 4, 5, 6, 7, 8] + return this.selectMemberData.filter(item => item.roleName == '菌种实验员') default: break; } + }, + selectUser(data) { + for (const [roleId, config] of Object.entries(this.ROLE_CONFIG)) { + const members = data.filter(item => item.roleName === config.label); + if (members.length > config.limit) { + this.$message.error(`${config.label}最多只能选择${config.limit}个`); + return + } + } + this.selectMemberData = data; + this.$refs.selectMember.close(); + }, + editUserList() { + this.$refs.selectMember.open(); + this.$nextTick(() => { + this.$refs.selectMember.setSelection(this.selectMemberData); + }); } } } @@ -188,6 +235,10 @@ font-weight: 500; font-size: 16px; color: #FFFFFF; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + box-sizing: border-box; } .member-edit { -- Gitblit v1.7.1