puzhibing
6 天以前 0db8c9b94a9ac655549d5eba5c2a6c92ac386c06
culture/src/views/strain-library/validation/primitive-cell/index.vue
@@ -1,17 +1,36 @@
<template>
  <div class="list">
    <!-- Table -->
    <TableCustom :queryForm="queryForm" :tableData="tableData" :total="total" @currentChange="handleCurrentChange"
      @sizeChange="handleSizeChange">
    <TableCustom :queryForm="queryForm" :height="null" :tableData="tableData" :total="total"
      @handleCurrentChange="handleCurrentChange" @handleSizeChange="handleSizeChange">
      <template #search>
        <el-form :model="form" label-width="auto" inline>
          <el-form-item label="选择项目组:">
            <el-select
                v-model="form.projectIds"
                placeholder="请选择项目组"
                filterable
                clearable
                :key="teamList.length"
                :loading="teamLoading"
                @focus="fetchTeamList"
                multiple
            >
              <el-option
                  v-for="item in teamList"
                  :key="item.id"
                  :label="item.teamName"
                  :value="item.id"
              />
            </el-select>
          </el-form-item>
          <el-form-item label="鉴别菌株编号:">
            <el-input v-model="form.identifyingStrainCode" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="鉴别菌株名称:">
            <el-input v-model="form.identifyingStrainName" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="验证实验编号:">
          <el-form-item label="验证实验编号:" v-if="roleType != 4">
            <el-input v-model="form.validationExperimentCode" placeholder="请输入"></el-input>
          </el-form-item>
@@ -26,23 +45,37 @@
        <div class="tableTitle">
          <div class="flex a-center">
            <div class="title" :class="{ active: currentType === 'list' }" @click="handleTypeChange('list')">
              原始细胞库验证资料
              祖代菌种库验证资料
            </div>
            <div class="drafts" :class="{ active: currentType === 'draft' }" @click="handleTypeChange('draft')">
            <div class="drafts" v-if="roleType == 4 || roleType == 3" :class="{ active: currentType === 'draft' }"
              @click="handleTypeChange('draft')">
              草稿箱
            </div>
          </div>
          <div class="flex a-center">
          <div class="flex a-center" v-if="roleType == 4">
            <el-button @click="handleNewStrain" class="el-icon-plus" type="primary"
              style="margin-right: 12px">新增原始细胞库资料</el-button>
              style="margin-right: 12px">新增祖代菌种库验证资料</el-button>
          </div>
        </div>
      </template>
      <template #table>
        <el-table-column prop="strainSource" label="菌种来源" />
        <el-table-column prop="projectName" label="项目组名称"/>
        <el-table-column prop="strainSource" label="菌种来源">
          <template #default="{ row }">
            <el-tooltip :content="row.strainSource" placement="top" effect="dark">
              <div class="ellipsis-text">{{ row.strainSource }}</div>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column prop="identifyingStrainCode" label="鉴别菌株编号" />
        <el-table-column prop="identifyingStrainName" label="鉴别菌株名称" />
        <el-table-column prop="identifyingStrainName" label="鉴别菌株名称" >
          <template #default="{ row }">
            <el-tooltip :content="row.identifyingStrainName" placement="top" effect="dark">
              <div class="ellipsis-text">{{ row.identifyingStrainName }}</div>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column prop="validationExperimentCode" label="验证实验编号" />
        <el-table-column prop="createBy" label="创建人" />
        <el-table-column prop="createTime" label="创建时间" />
@@ -54,18 +87,21 @@
        </el-table-column>
        <el-table-column label="操作" width="200">
          <template #default="{ row }">
            <el-button type="text" @click="$router.push('/strain/validation/confirm-detail')">确认</el-button>
            <el-button type="text" @click="handleDetail(row)">详情</el-button>
            <el-button type="text" @click="handleDetail2(row)">详情</el-button>
            <el-button type="text" @click="handleEdit(row)">编辑</el-button>
            <el-button type="text" @click="handleRecord(row)">删除</el-button>
            <el-button  style="margin-right: 10px" type="text" v-if="row.status == 1 && roleType == 3"
              @click="$router.push('/strain/validation/confirm-detail?id=' + row.id)">确认</el-button>
            <el-button  style="margin-right: 10px" type="text" v-if="roleType == 4" @click="handleDetail(row)">详情</el-button>
            <el-button  style="margin-right: 10px" type="text" v-if="roleType != 4" @click="handleDetail2(row)">详情</el-button>
            <el-button  style="margin-right: 10px" type="text" v-if="(roleType == 1) || (roleType == 4 && currentType == 'draft')" @click="handleEdit(row)">编辑</el-button>
            <el-button type="text" v-if="(roleType == 1) || (roleType == 4 && currentType == 'draft')"
              @click="handleDelete(row)">删除</el-button>
          </template>
        </el-table-column>
      </template>
    </TableCustom>
    <PrimitiveCellDetailDialog :visible.sync="detailVisible" :detail="currentDetail" />
    <DetailConditionDialog :visible.sync="detailDialogVisible" :value="detailDialogValue" />
    <DetailConditionDialog @viewDetail="viewDetail" :visible.sync="detailDialogVisible" :value="detailDialogValue" />
    <EditConditionDialog :visible.sync="editDialogVisible" :value="editDialogValue" />
    <ShowDelConfirm :show="showDelConfirm" @close="showDelConfirm = false" @confirm="handleDelConfirm" />
  </div>
</template>
@@ -74,7 +110,9 @@
import DetailConditionDialog from "./DetailConditionDialog.vue";
import EditConditionDialog from "./EditConditionDialog.vue";
import { getList } from "./service";
import { getList, delTwo } from "./service";
import moment from "moment";
import {myTeamPageList} from "@/components/chooseProject/servce";
export default {
  name: "PrimitiveCell",
  components: {
@@ -84,16 +122,23 @@
  },
  data() {
    return {
      teamList: [], // 项目组列表
      teamLoading: false, // 加载状态
      detailDialogVisible: false,
      detailDialogValue: {},
      dialogVisible: false,
      currentType: "list",
      detailVisible: false,
      editDialogVisible: false,
      showDelConfirm: false,
      editDialogValue: {},
      currentDetail: {},
      roleType: Number(JSON.parse(sessionStorage.getItem("userInfo")).roleType),
      form: {
        identifyingStrainCode: "",
        identifyingStrainName: "",
        validationExperimentCode: "",
        projectIds: [],
        startTime: "",
        endTime: "",
        isDraft: 0,
@@ -109,6 +154,7 @@
  },
  methods: {
    handleDetail(row) {
      row.experimentTime = moment(row.experimentTime).format('YYYY-MM-DD')
      this.currentDetail = row;
      this.detailVisible = true;
    },
@@ -118,6 +164,11 @@
    },
    handleViewMore() {
      this.dialogVisible = true;
    },
    viewDetail(row) {
      row.isDetail = true;
      this.editDialogValue = row;
      this.editDialogVisible = true;
    },
    resetForm() {
      this.form = {
@@ -154,15 +205,31 @@
      // Implement batch add logic
    },
    handleEdit(row) {
      // Implement edit logic
    },
    handleRecord(row) {
      if (Number(this.roleType) === 1) {
        this.$router.push({ path: "/strain/validation/confirm-detail", query: { id: row.id, mode: 'edit' } });
        return;
      }
      this.$router.push({
        path: "/strain-library/strain-library-manage/record",
        path: "/strain/validation/edit-primitive-cell",
        query: {
          id: row.strainNo,
          id: row.id,
        },
      });
      // Implement edit logic
    },
    handleDelete(row) {
      this.currentDetail = row;
      this.showDelConfirm = true;
    },
    handleDelConfirm() {
      delTwo({ id: this.currentDetail.id }).then(res => {
        this.$message.success('删除成功')
        this.showDelConfirm = false
        if (this.tableData.length == 1 && this.queryForm.pageNum > 1) {
          this.queryForm.pageNum -= 1;
        }
        this.searchData()
      })
    },
    handleCurrentChange(page) {
      this.queryForm.pageNum = page;
@@ -178,9 +245,26 @@
      this.form.strainType = 1; // 1: 原始细胞库
      this.searchData();
    },
    // 获取项目组列表
    async fetchTeamList() {
      if (this.teamList.length > 0) return // 已有数据不再重复请求
      this.teamLoading = true
      try {
        const res = await myTeamPageList()
        console.log('res', res)
        // 根据实际接口返回的数据结构调整
        this.teamList = res.data || res || []
      } catch (error) {
        console.error('获取项目组列表失败:', error)
        this.$message.error('获取项目组列表失败')
      } finally {
        this.teamLoading = false
      }
    },
  },
  mounted() {
    this.searchData();
  async activated() {
    await this.fetchTeamList();
    await this.searchData();
  },
};
</script>
@@ -365,4 +449,12 @@
    }
  }
}
.ellipsis-text {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: break-all;
}
</style>