| | |
| | | <template> |
| | | <div class="list"> |
| | | <!-- Table --> |
| | | <TableCustom |
| | | :queryForm="queryForm" |
| | | :tableData="tableData" |
| | | :total="total" |
| | | @currentChange="handleCurrentChange" |
| | | @sizeChange="handleSizeChange" |
| | | > |
| | | <TableCustom :queryForm="queryForm" :tableData="tableData" :total="total" @currentChange="handleCurrentChange" |
| | | @sizeChange="handleSizeChange"> |
| | | <template #search> |
| | | <el-form :model="form" label-width="auto" inline> |
| | | <el-form-item label="鉴别菌株编号:"> |
| | | <el-input v-model="form.strainNo" placeholder="请输入"></el-input> |
| | | <el-input v-model="form.identifyingStrainCode" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="鉴别菌株名称:"> |
| | | <el-input v-model="form.strainName" placeholder="请输入"></el-input> |
| | | <el-input v-model="form.identifyingStrainName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="验证实验编号:"> |
| | | <el-input v-model="form.strainName" placeholder="请输入"></el-input> |
| | | <el-input v-model="form.validationExperimentCode" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item class="search-btn-box"> |
| | | <el-button type="default" @click="resetForm">重置</el-button> |
| | | <el-button type="primary" @click="searchData">查询</el-button> |
| | |
| | | <template #setting> |
| | | <div class="tableTitle"> |
| | | <div class="flex a-center"> |
| | | <div |
| | | class="title" |
| | | :class="{ active: currentType === 'list' }" |
| | | @click="handleTypeChange('list')" |
| | | > |
| | | <div class="title" :class="{ active: currentType === 'list' }" @click="handleTypeChange('list')"> |
| | | 原始细胞库验证资料 |
| | | </div> |
| | | <div |
| | | class="drafts" |
| | | :class="{ active: currentType === 'draft' }" |
| | | @click="handleTypeChange('draft')" |
| | | > |
| | | <div class="drafts" :class="{ active: currentType === 'draft' }" @click="handleTypeChange('draft')"> |
| | | 草稿箱 |
| | | </div> |
| | | </div> |
| | | <div class="flex a-center"> |
| | | <el-button |
| | | @click="handleNewStrain" |
| | | class="el-icon-plus" |
| | | type="primary" |
| | | style="margin-right: 12px" |
| | | >新增原始细胞库资料</el-button |
| | | > |
| | | <el-button @click="handleNewStrain" class="el-icon-plus" type="primary" |
| | | style="margin-right: 12px">新增原始细胞库资料</el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <template #table> |
| | | <el-table-column prop="source" label="菌种来源" /> |
| | | <el-table-column prop="method" label="鉴别菌株编号" /> |
| | | <el-table-column prop="certificate" label="鉴别菌株名称" /> |
| | | <el-table-column prop="storage" label="验证实验编号" /> |
| | | <el-table-column prop="amount" label="创建人" /> |
| | | <el-table-column prop="inventory" label="创建时间" /> |
| | | <el-table-column prop="status" label="状态"> |
| | | <el-table-column prop="strainSource" label="菌种来源" /> |
| | | <el-table-column prop="identifyingStrainCode" label="鉴别菌株编号" /> |
| | | <el-table-column prop="identifyingStrainName" label="鉴别菌株名称" /> |
| | | <el-table-column prop="validationExperimentCode" label="验证实验编号" /> |
| | | <el-table-column prop="createBy" label="创建人" /> |
| | | <el-table-column prop="createTime" label="创建时间" /> |
| | | <el-table-column prop="status" label="状态" v-if="currentType == 'list'"> |
| | | <template #default="{ row }"> |
| | | <el-tag :type="getStatusType(row.status)">{{ |
| | | getStatusText(row.status) |
| | | }}</el-tag> |
| | | <el-tag v-if="row.status == 1" type="info">待确认</el-tag> |
| | | <el-tag v-if="row.status == 2" type="success">已提交</el-tag> |
| | | </template> |
| | | </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)">详情1</el-button> |
| | | <el-button type="text" @click="handleDetail2(row)">详情2</el-button> |
| | | <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> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </TableCustom> |
| | | <PrimitiveCellDetailDialog |
| | | :visible.sync="detailVisible" |
| | | :detail="currentDetail" |
| | | /> |
| | | <DetailConditionDialog |
| | | :visible.sync="detailDialogVisible" |
| | | :value="detailDialogValue" |
| | | /> |
| | | <PrimitiveCellDetailDialog :visible.sync="detailVisible" :detail="currentDetail" /> |
| | | <DetailConditionDialog :visible.sync="detailDialogVisible" :value="detailDialogValue" /> |
| | | <EditConditionDialog :visible.sync="editDialogVisible" :value="editDialogValue" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import PrimitiveCellDetailDialog from "./primitive-cell-detail-dialog.vue"; |
| | | import DetailConditionDialog from "./DetailConditionDialog.vue"; |
| | | import EditConditionDialog from "./EditConditionDialog.vue"; |
| | | |
| | | import { getList } from "./service"; |
| | | export default { |
| | | name: "PrimitiveCell", |
| | | components: { |
| | | PrimitiveCellDetailDialog, |
| | | DetailConditionDialog, |
| | | EditConditionDialog, |
| | | }, |
| | | data() { |
| | | return { |
| | | detailDialogVisible: false, |
| | | detailDialogValue: {}, |
| | | detailDialogVisible: false, |
| | | detailDialogValue: {}, |
| | | dialogVisible: false, |
| | | currentType: "list", |
| | | detailVisible: false, |
| | | currentDetail: {}, |
| | | form: { |
| | | strainNo: "", |
| | | strainName: "", |
| | | status: "", |
| | | identifyingStrainCode: "", |
| | | identifyingStrainName: "", |
| | | validationExperimentCode: "", |
| | | startTime: "", |
| | | endTime: "", |
| | | isDraft: 0, |
| | | strainType: 1, |
| | | }, |
| | | queryForm: { |
| | | pageSize: 10, |
| | | pageNum: 1, |
| | | }, |
| | | total: 800, |
| | | tableData: [ |
| | | { |
| | | strainNo: "YX-2024001", |
| | | strainName: "大肠杆菌", |
| | | source: "实验室分离", |
| | | method: "形态学鉴定、生理生化试验", |
| | | certificate: "革兰氏阴性杆菌,可发酵葡萄糖产酸产气,IMViC试验++--", |
| | | storage: "斜面培养", |
| | | amount: "A区-01-001", |
| | | inventory: "50", |
| | | notes: "用于质粒转化", |
| | | status: "1", |
| | | }, |
| | | { |
| | | strainNo: "YX-2024002", |
| | | strainName: "枯草芽孢杆菌", |
| | | source: "菌种保藏中心", |
| | | method: "16S rDNA测序", |
| | | certificate: "革兰氏阳性芽孢杆菌,可水解淀粉,产生溶菌素", |
| | | storage: "冷冻保存", |
| | | amount: "B区-02-005", |
| | | inventory: "30", |
| | | notes: "工业发酵菌种", |
| | | status: "1", |
| | | }, |
| | | { |
| | | strainNo: "YX-2024003", |
| | | strainName: "酿酒酵母", |
| | | source: "发酵工厂", |
| | | method: "显微镜观察、生理特性", |
| | | certificate: "椭圆形单细胞真菌,可发酵葡萄糖产生乙醇", |
| | | storage: "甘油管保存", |
| | | amount: "A区-03-002", |
| | | inventory: "40", |
| | | notes: "发酵工艺优化", |
| | | status: "2", |
| | | }, |
| | | { |
| | | strainNo: "YX-2024004", |
| | | strainName: "乳酸菌", |
| | | source: "乳制品分离", |
| | | method: "生化鉴定、API条", |
| | | certificate: "革兰氏阳性球菌,产生乳酸,耐酸性强", |
| | | storage: "冷冻干燥", |
| | | amount: "C区-01-003", |
| | | inventory: "25", |
| | | notes: "益生菌研究", |
| | | status: "3", |
| | | }, |
| | | { |
| | | strainNo: "YX-2024005", |
| | | strainName: "青霉菌", |
| | | source: "环境样本", |
| | | method: "形态学特征、ITS测序", |
| | | certificate: "丝状真菌,产生蓝绿色分生孢子,可产青霉素", |
| | | storage: "斜面培养", |
| | | amount: "B区-04-001", |
| | | inventory: "35", |
| | | notes: "次级代谢产物研究", |
| | | status: "1", |
| | | }, |
| | | ], |
| | | total: 0, |
| | | tableData: [], |
| | | }; |
| | | }, |
| | | methods: { |
| | |
| | | this.detailVisible = true; |
| | | }, |
| | | handleDetail2(row) { |
| | | this.detailDialogValue = row; |
| | | this.detailDialogVisible = true; |
| | | this.detailDialogValue = row; |
| | | this.detailDialogVisible = true; |
| | | }, |
| | | handleViewMore() { |
| | | this.dialogVisible = true; |
| | | }, |
| | | resetForm() { |
| | | this.form = { |
| | | strainNo: "", |
| | | strainName: "", |
| | | status: "", |
| | | identifyingStrainCode: "", |
| | | identifyingStrainName: "", |
| | | startTime: "", |
| | | endTime: "", |
| | | validationExperimentCode: "", |
| | | isDraft: this.currentType === 'draft' ? 1 : 0, |
| | | strainType: 1, |
| | | }; |
| | | this.searchData(); |
| | | }, |
| | | searchData() { |
| | | // 模拟搜索逻辑 |
| | | const { strainNo, strainName, status } = this.form; |
| | | let filteredData = [...this.tableData]; |
| | | |
| | | if (strainNo) { |
| | | filteredData = filteredData.filter((item) => |
| | | item.strainNo.toLowerCase().includes(strainNo.toLowerCase()) |
| | | ); |
| | | async searchData() { |
| | | const params = { |
| | | ...this.form, |
| | | pageNum: this.queryForm.pageNum, |
| | | pageSize: this.queryForm.pageSize, |
| | | }; |
| | | try { |
| | | const res = await getList(params); |
| | | this.tableData = res.data?.records || []; |
| | | this.total = res.data?.total || 0; |
| | | } catch (e) { |
| | | this.tableData = []; |
| | | this.total = 0; |
| | | } |
| | | if (strainName) { |
| | | filteredData = filteredData.filter((item) => |
| | | item.strainName.toLowerCase().includes(strainName.toLowerCase()) |
| | | ); |
| | | } |
| | | if (status) { |
| | | filteredData = filteredData.filter((item) => item.status === status); |
| | | } |
| | | |
| | | this.total = filteredData.length; |
| | | // 实际项目中这里应该调用API |
| | | console.log("搜索条件:", this.form); |
| | | console.log("分页信息:", this.queryForm); |
| | | }, |
| | | handleNewStrain() { |
| | | this.$router.push("/strain/validation/add-primitive-cell"); |
| | |
| | | }, |
| | | handleCurrentChange(page) { |
| | | this.queryForm.pageNum = page; |
| | | // Implement page change logic |
| | | this.searchData(); |
| | | }, |
| | | handleSizeChange(size) { |
| | | this.queryForm.pageSize = size; |
| | | // Implement size change logic |
| | | this.searchData(); |
| | | }, |
| | | handleTypeChange(type) { |
| | | this.currentType = type; |
| | | // Implement type change logic |
| | | this.form.isDraft = type === "draft" ? 1 : 0; |
| | | this.form.strainType = 1; // 1: 原始细胞库 |
| | | this.searchData(); |
| | | }, |
| | | getStatusType(status) { |
| | | const types = { |
| | | 1: "success", |
| | | 2: "info", |
| | | 3: "warning", |
| | | }; |
| | | return types[status] || "info"; |
| | | }, |
| | | getStatusText(status) { |
| | | const texts = { |
| | | 1: "已入库", |
| | | 2: "已出库", |
| | | 3: "入库待确认", |
| | | }; |
| | | return texts[status] || "未知状态"; |
| | | }, |
| | | }, |
| | | mounted() { |
| | | this.searchData(); |
| | | }, |
| | | }; |
| | | </script> |