From a749b62894ec0dcda3bb055371bc75db75f17ce1 Mon Sep 17 00:00:00 2001
From: 13404089107 <puwei@sinata.cn>
Date: 星期一, 12 五月 2025 17:46:57 +0800
Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory

---
 laboratory/src/views/dataManagement/dispatching/list.vue |  302 +++++++++++++++++++++++--------------------------
 1 files changed, 141 insertions(+), 161 deletions(-)

diff --git a/laboratory/src/views/dataManagement/dispatching/list.vue b/laboratory/src/views/dataManagement/dispatching/list.vue
index 02878da..ea67eba 100644
--- a/laboratory/src/views/dataManagement/dispatching/list.vue
+++ b/laboratory/src/views/dataManagement/dispatching/list.vue
@@ -1,10 +1,10 @@
 <template>
   <div class="list">
-    <TableCustom :queryForm="form" :tableData="tableData" :total="total">
+    <TableCustom :queryForm="form" :tableData="tableData" :total="total" @handleCurrentChange="handleCurrentChange" @handleSizeChange="handleSizeChange">
       <template #search>
         <el-form :model="form" labelWidth="auto" inline>
           <el-form-item label="所属项目课题方案:">
-            <el-input v-model="form.planName" placeholder="请输入"></el-input>
+            <el-input v-model="form.projectName" placeholder="请输入"></el-input>
           </el-form-item>
           <el-form-item label="实验编号">
             <el-input
@@ -20,19 +20,21 @@
               start-placeholder="开始日期"
               end-placeholder="结束日期"
               value-format="yyyy-MM-dd"
+              @change="handleDateChange"
             ></el-date-picker>
           </el-form-item>
-          <el-form-item label="状态">
+          <el-form-item label="状态" >
             <el-select v-model="form.status" placeholder="请选择">
               <el-option label="全部" value=""></el-option>
-              <el-option label="待确认" value="pending"></el-option>
-              <el-option label="已确认" value="confirmed"></el-option>
-              <el-option label="已取消" value="cancelled"></el-option>
+              <el-option label="草稿箱" value="-1"></el-option>
+              <el-option label="待确认" value="1"></el-option>
+              <el-option label="已确认" value="2"></el-option>
+              <el-option label="已封存" value="3"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="">
             <el-button type="default" @click="resetForm">重置</el-button>
-            <el-button type="primary" @click="handleSearch">查询</el-button>
+            <el-button type="primary" @click="handleSearch" style="margin-left: 10px;">查询</el-button>
           </el-form-item>
         </el-form>
       </template>
@@ -44,7 +46,7 @@
               :class="{ active: currentType === 'list' }"
               @click="handleTypeChange('list')"
             >
-              实验调度列表
+              实验与调度列表
             </div>
             <div
               class="drafts"
@@ -61,25 +63,37 @@
       </template>
       <template #table>
         <el-table-column
-          prop="experimentCode"
+          prop="projectName"
           label="所属项目课题方案"
         ></el-table-column>
         <el-table-column
-          prop="experimentName"
+          prop="experimentCode"
           label="实验编号"
         ></el-table-column>
-        <el-table-column prop="startTime" label="实验名称"></el-table-column>
-        <el-table-column prop="endTime" label="通知时间"></el-table-column>
         <el-table-column
-          prop="participants"
+          prop="experimentName"
+          label="实验名称"
+        ></el-table-column>
+        <el-table-column
+          prop="experimentDate"
+          label="通知时间"
+        ></el-table-column>
+        <el-table-column
+          prop="experimentStartTime"
           label="实验开始时间"
         ></el-table-column>
         <el-table-column
-          prop="createTime"
+          prop="experimentEndTime"
           label="实验结束时间"
         ></el-table-column>
-        <el-table-column prop="people" label="参加人员"></el-table-column>
-        <el-table-column prop="status" label="状态">
+        <el-table-column
+          prop="participantsName"
+          label="参加人员"
+        ></el-table-column>
+        <el-table-column
+          prop="status"
+          label="状态"
+        >
           <template slot-scope="scope">
             <el-tag :type="getStatusType(scope.row.status)">
               {{ getStatusText(scope.row.status) }}
@@ -88,164 +102,130 @@
         </el-table-column>
         <el-table-column label="操作" width="200">
           <template slot-scope="scope">
-            <el-button
-              v-if="scope.row.status === 'pending'"
-              type="text"
-              @click="handleConfirm(scope.row)"
-              >确认</el-button
-            >
-            <el-button type="text" @click="handleDelete(scope.row)"
-              >删除</el-button
-            >
-            <el-button type="text" @click="handleDetail(scope.row)"
-              >详情</el-button
-            >
+            <!-- 工艺工程师(3) -->
+            <template v-if="userRole == '3'">
+              <el-button type="text" @click="handleDetail(scope.row)">详情</el-button>
+              <el-button 
+                v-if="scope.row.status === 1" 
+                type="text" 
+                @click="handleDelete(scope.row)"
+              >删除</el-button>
+            </template>
+            
+            <!-- 化验师(4)和实验员(5) -->
+            <template v-if="userRole == '4' || userRole == '5'">
+              <el-button type="text" @click="handleDetail(scope.row)">详情</el-button>
+              <el-button
+                v-if="scope.row.status === 1"
+                type="text"
+                @click="handleConfirm(scope.row)"
+              >确认</el-button>
+            </template>
+            
+            <!-- 超级管理员(1)和审批人(2) -->
+            <template v-if="userRole =='1' || userRole == '2'">
+              <el-button type="text" @click="handleDetail(scope.row)">详情</el-button>
+            </template>
           </template>
         </el-table-column>
       </template>
     </TableCustom>
-    <SignatureCanvas
-      :visible="signatureDialogVisible"
-      @confirm="handleSignatureConfirm"
-    />
+
     <edit-dispatch
       :visible.sync="approvalDialogVisible"
       :type="approvalDialogType"
       :data="currentApprovalData"
+      @close="approvalDialogVisible = false"
+    />
+    <ShowDelConfirm 
+      :title="changeStatusTitle" 
+      :tip="changeStatusTip" 
+      :show="changeStatus"
+      @close="changeStatus = false" 
+      @confirm="handleChangeStatusConfirm" 
     />
   </div>
 </template>
 
 <script>
-import SignatureCanvas from "@/components/SignatureCanvas.vue";
 import EditDispatch from "./editDispatch.vue";
-import { getList } from './service'
-
+import ShowDelConfirm from "@/components/showDelConfirm/index.vue";
+import { getDispatchList, deleteById } from "./service";
 export default {
   name: "dispatchingList",
   components: {
-    SignatureCanvas,
     EditDispatch,
+    ShowDelConfirm
   },
   data() {
     return {
       currentType: "list", // 当前显示类型:list-列表,draft-草稿箱
+      userRole: JSON.parse(sessionStorage.getItem('userInfo'))?.roleType || '', // 用户角色
       form: {
-        experimentName: "",
+        projectName: "",
         experimentCode: "",
-        createTime: [],
+        startTime: "",
+        endTime: "",
         status: "",
+        pageNum: 1,
+        pageSize: 10
       },
       tableData: [],
       total: 0,
-      // 模拟数据
-      mockListData: [
-        {
-          experimentCode: "EXP-2024-001",
-          experimentName: "材料力学性能测试实验",
-          startTime: "2024-03-20 09:00",
-          endTime: "2024-03-20 17:00",
-          participants: "张三、李四、王五",
-          createTime: "2024-03-15",
-          status: "pending",
-          planName: "新材料研发项目",
-          planCode: "PLAN-2024-001",
-          stage: "实验阶段",
-          testDate: "2024-03-20",
-          testName: "材料力学性能测试",
-          testCode: "TEST-2024-001",
-          testTime: "2024-03-20 09:00",
-          groupTableData: [
-            {
-              groupName: "对照组",
-              remark: "标准材料组"
-            },
-            {
-              groupName: "实验组",
-              remark: "新材料组"
-            }
-          ],
-          taskTableData: [
-            {
-              taskName: "材料准备",
-              leader: "张三",
-              startTime: "2024-03-20 09:00"
-            },
-            {
-              taskName: "性能测试",
-              leader: "李四",
-              startTime: "2024-03-20 10:00"
-            }
-          ]
-        },
-        {
-          experimentCode: "EXP-2024-002",
-          experimentName: "化学合成实验",
-          startTime: "2024-03-21 10:00",
-          endTime: "2024-03-21 16:00",
-          participants: "赵六、钱七、孙八",
-          createTime: "2024-03-16",
-          status: "confirmed",
-        },
-        {
-          experimentCode: "EXP-2024-003",
-          experimentName: "生物培养实验",
-          startTime: "2024-03-22 08:00",
-          endTime: "2024-03-22 18:00",
-          participants: "周九、吴十、郑十一",
-          createTime: "2024-03-17",
-          status: "cancelled",
-        },
-      ],
-      mockDraftData: [
-        {
-          experimentCode: "EXP-2024-004",
-          experimentName: "物理光学实验(草稿)",
-          startTime: "2024-03-23 09:00",
-          endTime: "2024-03-23 17:00",
-          participants: "王十二、李十三",
-          createTime: "2024-03-18",
-          status: "draft",
-        },
-      ],
-      signatureDialogVisible: false,
-      currentRow: null,
       approvalDialogVisible: false,
       approvalDialogType: "view",
       currentApprovalData: null,
+      // 确认弹窗相关数据
+      changeStatus: false,
+      changeStatusTitle: "",
+      changeStatusTip: "",
+      currentOperationRow: null, // 当前操作的行数据
     };
   },
   created() {
     this.getTableData();
   },
   methods: {
+    handleDateChange(val) {
+      if (val) {
+        this.form.startTime = val[0];
+        this.form.endTime = val[1];
+      } else {
+        this.form.startTime = "";
+        this.form.endTime = "";
+      }
+    },
     resetForm() {
       this.form = {
-        experimentName: "",
+        projectName: "",
         experimentCode: "",
-        createTime: [],
+        startTime: "",
+        endTime: "",
         status: "",
+        pageNum: 1,
+        pageSize: 10
       };
+      this.getTableData();
     },
     handleSearch() {
-      // 实现查询逻辑
-      console.log("查询条件:", this.form);
+      this.form.pageNum = 1;
+      this.getTableData();
     },
     getStatusType(status) {
       const statusMap = {
-        pending: "warning",
-        confirmed: "success",
-        cancelled: "danger",
-        draft: "info",
+        "-1": "info",
+        "1": "warning",
+        "2": "success",
+        "3": "info"
       };
       return statusMap[status] || "info";
     },
     getStatusText(status) {
       const statusMap = {
-        pending: "待确认",
-        confirmed: "已确认",
-        cancelled: "已取消",
-        draft: "草稿",
+        "-1": "草稿箱",
+        "1": "待确认",
+        "2": "已确认",
+        "3": "已封存"
       };
       return statusMap[status] || "未知";
     },
@@ -255,42 +235,15 @@
       });
     },
     handleConfirm(row) {
-      // this.currentRow = row;
-      // this.signatureDialogVisible = true;
-
       this.currentApprovalData = row;
       this.approvalDialogType = "approve";
       this.approvalDialogVisible = true;
     },
-    handleSignatureConfirm(imageData) {
-      console.log("imageData imageData", imageData);
-      this.signatureDialogVisible = false;
-
-      // 这里处理签名确认后的逻辑
-      // this.$confirm('确认该实验调度吗?', '提示', {
-      //   confirmButtonText: '确定',
-      //   cancelButtonText: '取消',
-      //   type: 'warning'
-      // }).then(() => {
-      //   // 这里可以将签名图片数据(imageData)连同其他数据一起提交到后端
-      //   this.$message.success('确认成功');
-      //   this.signatureDialogVisible = false;
-      //   this.getTableData();
-      // }).catch(() => {
-      //   this.signatureDialogVisible = false;
-      // });
-    },
     handleDelete(row) {
-      this.$confirm("确定要删除该实验调度吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          this.$message.success("删除成功");
-          this.getTableData();
-        })
-        .catch(() => {});
+      this.currentOperationRow = row;
+      this.changeStatusTitle = "确认要删除该实验调度吗?";
+      this.changeStatusTip = "删除后信息无法找回";
+      this.changeStatus = true;
     },
     handleDetail(row) {
       this.currentApprovalData = row;
@@ -299,17 +252,44 @@
     },
     handleTypeChange(type) {
       this.currentType = type;
+      this.form.status = type === 'draft' ? '-1' : '';
+      this.form.pageNum = 1;
       this.getTableData();
     },
     getTableData() {
-      // 根据currentType请求不同的数据
-      if (this.currentType === "list") {
-        this.tableData = this.mockListData;
-        this.total = this.mockListData.length;
-      } else {
-        this.tableData = this.mockDraftData;
-        this.total = this.mockDraftData.length;
-      }
+      const params = {
+        ...this.form,
+        status: this.currentType === 'draft' ? '-1' : this.form.status
+      };
+      getDispatchList(params).then(res => {
+        if (res) {
+          this.tableData = res.records || [];
+          this.total = res.total || 0;
+        }
+      });
+    },
+    // 处理页码改变
+    handleCurrentChange(val) {
+      this.form.pageNum = val;
+      this.getTableData();
+    },
+    // 处理每页条数改变
+    handleSizeChange(val) {
+      this.form.pageSize = val;
+      this.form.pageNum = 1;
+      this.getTableData();
+    },
+    handleChangeStatusConfirm() {
+      // 处理删除逻辑
+      deleteById({
+        id: this.currentOperationRow.id
+      }).then(() => {
+        this.$message.success("删除成功");
+        this.changeStatus = false;
+        this.getTableData();
+      }).catch(error => {
+        this.$message.error("删除失败");
+      });
     },
   },
 };

--
Gitblit v1.7.1