From d8d68a0aee93073b5ec3195368ca0ed1076f66a2 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期三, 25 六月 2025 17:58:08 +0800
Subject: [PATCH] 对接评定接口和中台待办事项

---
 laboratory/src/components/SelectMemberSimple/index.vue |  310 +++++++++++++++++++++++++++++----------------------
 1 files changed, 178 insertions(+), 132 deletions(-)

diff --git a/laboratory/src/components/SelectMemberSimple/index.vue b/laboratory/src/components/SelectMemberSimple/index.vue
index 64a55e6..01d208e 100644
--- a/laboratory/src/components/SelectMemberSimple/index.vue
+++ b/laboratory/src/components/SelectMemberSimple/index.vue
@@ -1,154 +1,200 @@
 <template>
-    <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>
-        <div class="select-member-content">
-            <div class="select-member-content-right">
-                <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="searchKeyword" placeholder="请输入姓名" />
-                    </div>
-                </div>
-                <Table ref="memberTable" :height="null" :row-key="row => row.userId" :data="filteredTableData"
-                    :total="0" @selection-change="handleSelectionChange" :row-class-name="tableRowClassName">
-                    <el-table-column type="selection" width="55" />
-                    <el-table-column label="角色" prop="roleType" >
-                        <template #default="{ row }">
-                            {{ row.roleType === 3 ? '工艺工程师' : row.roleType === 4 ? '化验师' : '实验员' }}
-                        </template>
-                    </el-table-column>
-                    <el-table-column label="姓名" prop="nickName" />
-                    <el-table-column label="头像" prop="avatar" width="80">
-                        <template #default="{ row }">
-                            <el-avatar :size="32" :src="row.avatar || require('../../assets/login/img1111.png')" />
-                        </template>
-                    </el-table-column>
-                    <el-table-column label="创建时间" prop="signTime" />
-                </Table>
-            </div>
+  <el-dialog
+    @open="openDialog"
+    class="select-member"
+    :visible.sync="visible"
+    width="53.33%"
+    :close-on-click-modal="false"
+    :show-close="false"
+  >
+    <template #title>
+      <div>{{ roleType==4 ? "选择化验师" : "选择实验人员" }}</div>
+    </template>
+    <div class="select-member-content">
+      <div class="select-member-content-right">
+        <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="searchKeyword"
+              placeholder="请输入姓名"
+            />
+          </div>
         </div>
-        <div class="select-member-footer">
-            <el-button @click="close" type="default">关闭</el-button>
-            <el-button type="primary" @click="submit">确认选择</el-button>
-        </div>
-    </el-dialog>
+        <Table
+          ref="memberTable"
+          :height="null"
+          :row-key="(row) => row.userId"
+          :data="filteredTableData"
+          :total="0"
+          @selection-change="handleSelectionChange"
+          :row-class-name="tableRowClassName"
+        >
+          <el-table-column type="selection" width="55" />
+          <el-table-column label="角色" prop="roleType">
+            <template #default="{ row }">
+              {{
+                row.roleType === 3
+                  ? "工艺工程师"
+                  : row.roleType === 4
+                  ? "化验师"
+                  : "实验员"
+              }}
+            </template>
+          </el-table-column>
+          <el-table-column label="姓名" prop="nickName" />
+          <el-table-column label="头像" prop="avatar" width="80">
+            <template #default="{ row }">
+              <el-avatar
+                :size="32"
+                :src="row.avatar || require('../../assets/login/img1111.png')"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column label="创建时间" prop="createTime" />
+        </Table>
+      </div>
+    </div>
+    <div class="select-member-footer">
+      <el-button @click="close" type="default">关闭</el-button>
+      <el-button type="primary" @click="submit">确认选择</el-button>
+    </div>
+  </el-dialog>
 </template>
 
 <script>
 export default {
-    props: {
-        memberList: {
-            type: Array,
-            default: () => []
-        }
+  props: {
+    memberList: {
+      type: Array,
+      default: () => [],
     },
-    data() {
-        return {
-            visible: false,
-            searchKeyword: '',
-            selectData: [],
-            defaultSelected: [] // 默认选中的行
-        }
+    roleType: {
+      type: String,
+      default: () => "",
     },
-    computed: {
-        filteredTableData() {
-            if (!this.searchKeyword) {
-                return this.memberList;
-            }
-            const keyword = this.searchKeyword.toLowerCase();
-            return this.memberList.filter(item => 
-                (item.nickName && item.nickName.toLowerCase().includes(keyword)) ||
-                (item.phone && item.phone.includes(keyword))
-            );
-        }
+  },
+  data() {
+    return {
+      visible: false,
+      searchKeyword: "",
+      selectData: [],
+      defaultSelected: [], // 默认选中的行
+    };
+  },
+  computed: {
+    filteredTableData() {
+      if (!this.searchKeyword) {
+        return this.memberList;
+      }
+      const keyword = this.searchKeyword.toLowerCase();
+      return this.memberList.filter(
+        (item) =>
+          (item.nickName && item.nickName.toLowerCase().includes(keyword)) ||
+          (item.phone && item.phone.includes(keyword))
+      );
     },
-    methods: {
-        setSelection(selected) {
-            this.selectData = selected
-            this.$nextTick(() => {
-                // 设置新选中
-                this.memberList.forEach(row => {
-                    if (selected.some(i => i.userId === row.userId)) {
-                        this.$refs.memberTable.toggleRowSelection(row, true)
-                    }
-                })
-            })
-        },
-        openDialog() {
-            this.setSelection(this.selectData);
-        },
-        handleSelectionChange(val) {
-            this.selectData = val
-        },
-        open(data = [], defaultSelected = []) {
-            this.memberList = data
-            this.visible = true
-            this.defaultSelected = defaultSelected
-            // 在下一个tick中设置选中状态,确保表格已经渲染完成
-            this.$nextTick(() => {
-                this.setDefaultSelection();
-            });
-        },
-        close() {
-            this.visible = false
-        },
-        submit() {
-            this.$emit('submit', this.selectData)
-        },
-        tableRowClassName({ row, rowIndex }) {
-            if (this.selectData.findIndex(item => item.userId === row.userId) != -1) {
-                return 'select-row';
-            }
-            return '';
-        },
-        setDefaultSelection() {
-            if (this.defaultSelected && this.defaultSelected.length > 0) {
-                this.defaultSelected.forEach(row => {
-                    const targetRow = this.memberList.find(item => item.userId === row.userId);
-                    if (targetRow) {
-                        this.$refs.memberTable.toggleRowSelection(targetRow, true);
-                    }
-                });
-            }
+  },
+  methods: {
+    setSelection(selected) {
+      this.selectData = selected;
+      this.$nextTick(() => {
+        // 设置新选中
+        this.memberList.forEach((row) => {
+          if (selected.some((i) => i.userId === row.userId)) {
+            this.$refs.memberTable.toggleRowSelection(row, true);
+          }
+        });
+      });
+    },
+    openDialog() {
+      this.setSelection(this.selectData);
+    },
+    handleSelectionChange(val) {
+      this.selectData = val;
+    },
+    open(data = [], defaultSelected = []) {
+      this.memberList = data;
+      this.visible = true;
+      this.defaultSelected = defaultSelected;
+      // 在下一个tick中设置选中状态,确保表格已经渲染完成
+      this.$nextTick(() => {
+        this.setDefaultSelection();
+      });
+    },
+    close() {
+      this.visible = false;
+    },
+    submit() {
+      if (this.roleType) {
+        if (this.selectData.length == 1) {
+          this.$emit("submit", this.selectData);
+        } else {
+          this.$message.error(
+            `请选择一个${this.roleType == 4 ? "化验师" : "实验员"}!`
+          );
         }
-    }
-}
+      }else{
+        this.$emit("submit", this.selectData);
+      }
+      
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if (
+        this.selectData.findIndex((item) => item.userId === row.userId) != -1
+      ) {
+        return "select-row";
+      }
+      return "";
+    },
+    setDefaultSelection() {
+      if (this.defaultSelected && this.defaultSelected.length > 0) {
+        this.defaultSelected.forEach((row) => {
+          const targetRow = this.memberList.find(
+            (item) => item.userId === row.userId
+          );
+          if (targetRow) {
+            this.$refs.memberTable.toggleRowSelection(targetRow, true);
+          }
+        });
+      }
+    },
+  },
+};
 </script>
 
 <style scoped lang="less">
 .select-member-content {
-    .select-member-content-right {
-        margin-bottom: 31px;
+  .select-member-content-right {
+    margin-bottom: 31px;
 
-        &-header {
-            display: flex;
-            align-items: center;
-            margin-top: 5px;
-            justify-content: space-between;
-            margin-bottom: 21px;
+    &-header {
+      display: flex;
+      align-items: center;
+      margin-top: 5px;
+      justify-content: space-between;
+      margin-bottom: 21px;
 
-            &-text {
-                flex-shrink: 0;
-                font-weight: 500;
-                font-size: 16px;
-                line-height: 16px;
-                color: #222222;
-                font-family: 'SourceHanSansCN-Medium';
-                margin-right: 20px;
-            }
+      &-text {
+        flex-shrink: 0;
+        font-weight: 500;
+        font-size: 16px;
+        line-height: 16px;
+        color: #222222;
+        font-family: "SourceHanSansCN-Medium";
+        margin-right: 20px;
+      }
 
-            &-search {
-                display: flex;
-                align-items: center;
+      &-search {
+        display: flex;
+        align-items: center;
 
-                ::v-deep .el-input {
-                    margin-right: 12px;
-                }
-            }
+        ::v-deep .el-input {
+          margin-right: 12px;
         }
+      }
     }
+  }
 }
 </style> 
\ No newline at end of file

--
Gitblit v1.7.1