| | |
| | | <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> |
| | | |
| | |
| | | <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="创建时间" /> |
| | |
| | | </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> |
| | | |
| | |
| | | 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: { |
| | |
| | | }, |
| | | 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, |
| | |
| | | }, |
| | | methods: { |
| | | handleDetail(row) { |
| | | row.experimentTime = moment(row.experimentTime).format('YYYY-MM-DD') |
| | | this.currentDetail = row; |
| | | this.detailVisible = true; |
| | | }, |
| | |
| | | }, |
| | | handleViewMore() { |
| | | this.dialogVisible = true; |
| | | }, |
| | | viewDetail(row) { |
| | | row.isDetail = true; |
| | | this.editDialogValue = row; |
| | | this.editDialogVisible = true; |
| | | }, |
| | | resetForm() { |
| | | this.form = { |
| | |
| | | // 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; |
| | |
| | | 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> |
| | |
| | | } |
| | | } |
| | | } |
| | | .ellipsis-text { |
| | | display: -webkit-box; |
| | | -webkit-line-clamp: 3; |
| | | -webkit-box-orient: vertical; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | word-break: break-all; |
| | | } |
| | | </style> |