董国庆
2 天以前 b4ac09eb2e493aab92557628e0436189337e2939
laboratory/src/views/dataManagement/sampleRecordList/list.vue
@@ -1,58 +1,53 @@
<template>
  <div class="list">
    <TableCustom :queryForm="form" :tableData="tableData" :total="total">
    <TableCustom :queryForm="form" :height="null" :tableData="tableData" :total="total" @handlePageChange="handlePageChange" @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-form-item>
          <el-form-item label="实验名称:">
            <el-input v-model="form.planCode" placeholder="请输入"></el-input>
            <el-input v-model="form.projectName" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="实验编号:">
            <el-input v-model="form.planCode" placeholder="请输入"></el-input>
            <el-input v-model="form.experimentCode" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="创建时间:">
            <el-date-picker
              v-model="form.createTime"
              type="daterange"
              range-separator="至"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              value-format="yyyy-MM-dd"
            ></el-date-picker>
          </el-form-item>
          <el-form-item label="状态:">
            <el-input v-model="form.approver" placeholder="请输入"></el-input>
            <el-select v-model="form.status" placeholder="请选择">
              <el-option label="全部" :value="''"></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>
      <template #setting>
        <div class="tableTitle">
          <div class="flex a-center">
            <div
            class="title"
              :class="{active:currentType === 'list'}"
              @click="handleTypeChange('list')"
            >{{ type === 'draft' ? '草稿箱' : '取样操作记录列表' }}</div>
            <div class="title active">取样操作记录列表</div>
          </div>
        </div>
      </template>
      <template #table>
        <el-table-column
          prop="planName"
          label="所属项目课题方案"
          v-for="(column, index) in columns"
          :key="index"
          :prop="column.prop"
          :label="column.label"
        ></el-table-column>
        <el-table-column
          prop="experimentNo"
          label="实验编号"
        ></el-table-column>
        <el-table-column
          prop="experimentName"
          label="实验名称"
        ></el-table-column>
        <el-table-column
          prop="sampleNo"
          label="取样单编号"
        ></el-table-column>
        <el-table-column prop="creator" label="创建人"></el-table-column>
        <el-table-column prop="createTime" label="创建时间"></el-table-column>
        <el-table-column prop="status" label="当前状态">
        <el-table-column prop="status" label="状态">
          <template slot-scope="scope">
            <el-tag :type="getStatusType(scope.row.status)">
              {{ getStatusText(scope.row.status) }}
@@ -61,88 +56,41 @@
        </el-table-column>
        <el-table-column label="操作" width="150">
          <template slot-scope="scope">
            <el-button
              type="text"
              @click="handleEdit(scope.row)"
              >编辑</el-button>
            <el-button
              type="text"
              @click="handleDetail(scope.row)"
              >详情</el-button>
            <el-button type="text" @click="handleDetail(scope.row.id)">详情</el-button>
            <el-button type="text" @click="handleEdit(scope.row.id)" v-if="scope.row.status == 1">编辑</el-button>
          </template>
        </el-table-column>
      </template>
    </TableCustom>
    <!-- 审批弹窗 -->
    <!-- <approval-dialog
      :visible.sync="approvalDialogVisible"
      :type="approvalDialogType"
      :data="currentApprovalData"
      @approve="handleApproveSubmit"
      @reject="handleRejectSubmit"
    /> -->
  </div>
</template>
<script>
// import ApprovalDialog from './components/approvalDialog.vue'
import { getList } from './service'
export default {
  name: "ProjectList",
  components: {
    // ApprovalDialog
  },
  data() {
    return {
      type: 'list',
      currentType: 'list',
      form: {
        planName: "",
        planCode: "",
        creator: "",
        experimentCode: "",
        experimentName: "",
        projectName: "",
        createTime: [],
        approver: "",
        status: "",
        status: '',
        pageNum: 1,
        pageSize: 10
      },
      tableData: [],
      total: 0,
      // 模拟数据
      mockListData: [
        {
          planName: '2024年度实验室设备升级方案',
          experimentNo: '31423764',
          experimentName: '设备性能测试',
          sampleNo: '2024-05-28',
          creator: '刘大大',
          createTime: '2025-1-2 16:27:17',
          status: 'pending'
        }
      ],
      mockDraftData: [
        {
          planCode: 'DRAFT-2024-001',
          planName: '实验室设备采购计划(草稿)',
          stage: '规划阶段',
          creator: '张三',
          createTime: '2024-03-16',
          status: 'draft',
          approver: '',
          approveTime: ''
        },
        {
          planCode: 'DRAFT-2024-002',
          planName: '实验室改造方案(草稿)',
          stage: '准备阶段',
          creator: '李四',
          createTime: '2024-03-15',
          status: 'draft',
          approver: '',
          approveTime: ''
        }
      ],
      approvalDialogVisible: false,
      approvalDialogType: 'approve',
      currentApprovalData: null,
      columns: [
        { prop: 'projectName', label: '所属项目课题方案' },
        { prop: 'experimentCode', label: '实验编号' },
        { prop: 'experimentName', label: '实验名称' },
        { prop: 'samplingCode', label: '取样单编号' },
        { prop: 'createBy', label: '创建人' },
        { prop: 'createTime', label: '创建时间' }
      ]
    };
  },
  created() {
@@ -151,103 +99,82 @@
  methods: {
    resetForm() {
      this.form = {
        planName: "",
        planCode: "",
        creator: "",
        experimentCode: "",
        experimentName: "",
        projectName: "",
        createTime: [],
        approver: "",
        status: "",
        status: '',
        pageNum: 1,
        pageSize: 10
      };
      this.handleSearch();
    },
    handleSearch() {
      // 实现查询逻辑
      console.log("查询条件:", this.form);
    async handleSearch() {
      const params = {
        experimentCode: this.form.experimentCode,
        experimentName: this.form.experimentName,
        projectName: this.form.projectName,
        startTime: this.form.createTime[0] || null,
        endTime: this.form.createTime[1] || null,
        status: this.form.status,
        pageNum: this.form.pageNum,
        pageSize: this.form.pageSize
      };
      try {
        const res = await getList(params)
        this.tableData = res.data.records || [];
        this.total = res.data.total || 0;
      } catch (error) {
        console.error("查询失败:", error);
      }
    },
    getStatusType(status) {
      const statusMap = {
        pending: "warning",
        rejected: "danger",
        approved: "success",
        archived: "info",
        draft: "info"
        '-1': 'info',
        '1': 'warning',
        '2': 'success',
        '3': 'info'
      };
      return statusMap[status] || "info";
      return statusMap[status] || 'info';
    },
    getStatusText(status) {
      const statusMap = {
        pending: "待审批",
        rejected: "已驳回",
        approved: "已通过",
        archived: "已封存",
        draft: "草稿"
        '-1': '草稿箱',
        '1': '待提交',
        '2': '已提交',
        '3': '已封存'
      };
      return statusMap[status] || "未知";
      return statusMap[status] || '未知';
    },
    handleAddSample() {
      this.$router.push({
        path: "/sampleManage/changeRecord",
      });
    },
    handleApprove(row) {
      this.currentApprovalData = row;
      this.approvalDialogType = 'approve';
      this.approvalDialogVisible = true;
    },
    handleApproveSubmit(data) {
      // 处理审批通过
      console.log('审批通过:', data);
      this.approvalDialogVisible = false;
      this.$message.success('审批通过成功');
      this.getTableData();
    },
    handleRejectSubmit(data) {
      // 处理审批驳回
      console.log('审批驳回:', data);
      this.approvalDialogVisible = false;
      this.$message.success('审批驳回成功');
      this.getTableData();
    },
    handleRevokeApprove(row) {
      // 实现撤销审批逻辑
      console.log("撤销审批数据:", row);
    },
    handleEdit(row) {
    handleDetail(id) {
      this.$router.push({
        path: "/sampleManage/changeRecord",
        query: {
          type: 'edit',
          id: row.id
          id: id,
          type: 'detail'
        }
      });
    },
    handleDelete(row) {
      // 实现删除逻辑
      console.log("删除数据:", row);
    },
    handleDetail(row) {
    handleEdit(id) {
      this.$router.push({
        path: "/sampleManage/changeRecord",
        query: {
          type: 'view',
          id: row.id
          id: id,
          type: 'edit'
        }
      });
    },
    handleTypeChange(type) {
      this.currentType = type;
      this.type = type;
      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;
      }
      this.handleSearch();
    },
    handlePageChange(pageNum) {
      this.form.pageNum = pageNum;
      this.getTableData();
    },
    handleSizeChange(pageSize) {
      this.form.pageSize = pageSize;
      this.getTableData();
    }
  },
};
</script>
@@ -270,28 +197,18 @@
    border-radius: 8px 8px 0px 0px;
    border: 1px solid #dcdfe6;
    padding: 16px 29px;
    font-weight: bold;
    font-weight: 400;
    font-size: 18px;
    color: #606266;
    width: unset;
    cursor: pointer;
  }
  .drafts {
    padding: 16px 65px;
    background: #fafafc;
    border-radius: 8px 8px 0px 0px;
    border: 1px solid #dcdfe6;
    font-weight: 400;
    font-size: 18px;
    color: #606266;
    margin-left: 16px;
    cursor: pointer;
  }
  .active{
    color: #049c9a;
    background: #ffffff;
    border-radius: 8px 8px 0px 0px;
    border: 1px solid #049c9a;
    &.active {
      color: #049c9a;
      background: #ffffff;
      border-radius: 8px 8px 0px 0px;
      border: 1px solid #049c9a;
      font-weight: bold;
    }
  }
}
</style>