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