pyt
9 天以前 6e48606ee4721482f2f754b21f462704fff7ccbc
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,9 +46,10 @@
              :class="{ active: currentType === 'list' }"
              @click="handleTypeChange('list')"
            >
              实验调度列表
              实验与调度列表
            </div>
            <div
              v-if="userRole === '3'"
              class="drafts"
              :class="{ active: currentType === 'draft' }"
              @click="handleTypeChange('draft')"
@@ -54,32 +57,49 @@
              草稿箱
            </div>
          </div>
          <el-button @click="handleAddPlan" class="el-icon-plus" type="primary">
            新增实验调度</el-button
          <el-button
            v-if="userRole === '3'"
            @click="handleAddPlan"
            class="el-icon-plus"
            type="primary"
          >
            新增实验调度
          </el-button>
        </div>
      </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 +108,131 @@
        </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"
      @update:data="handleUpdateData"
    />
    <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 +242,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,18 +259,50 @@
    },
    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 => {
        console.log('111111111111',res)
        if (res.code==200) {
          this.tableData = res.data.records || [];
          this.total = res.data.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("删除失败");
      });
    },
    handleUpdateData() {
      this.currentApprovalData = null;
      this.getTableData();
    }
  },
};
</script>