| | |
| | | <template> |
| | | <div class="list"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :total="total"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :height="null" :total="total" @handleCurrentChange="handleCurrentChange" |
| | | @handleSizeChange="handleSizeChange"> |
| | | <template #search> |
| | | <el-form ref="searchForm" :model="form" :rules="rules" labelWidth="auto" inline> |
| | | <el-form-item label="需氧类型"> |
| | | <el-input v-model="form.aerobicType" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="创建人"> |
| | | <el-input v-model="form.createBy" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间"> |
| | | <el-date-picker v-model="form.createTime" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="培养基"> |
| | | <el-input v-model="form.cultureMedium" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="培养时间"> |
| | | <el-date-picker v-model="form.cultureTime" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="是否删除"> |
| | | <el-select v-model="form.disabled" placeholder="请选择"> |
| | | <el-option label="否" :value="0" /> |
| | | <el-option label="是" :value="1" /> |
| | | <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.formula" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="主键id"> |
| | | <el-input v-model="form.id" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="来源类型"> |
| | | <el-select v-model="form.preserveSource" placeholder="请选择"> |
| | |
| | | <el-option label="来源物资" :value="2" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="分离菌落编号"> |
| | | <el-input v-model="form.separateColonyNumber" placeholder="请输入"></el-input> |
| | | <el-form-item label="培养基"> |
| | | <el-input v-model="form.cultureMedium" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="来源物资存值批号"> |
| | | <el-input v-model="form.sourceMaterialTimeBatchNumber" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="状态"> |
| | | <el-select v-model="form.status" placeholder="请选择"> |
| | | <el-option label="提交" :value="1" /> |
| | | <el-option label="审核通过" :value="2" /> |
| | | <el-option label="驳回" :value="3" /> |
| | | <el-form-item label="需氧类型"> |
| | | <el-select v-model="form.aerobicType" placeholder="请选择"> |
| | | <el-option label="专性需氧" :value="1" /> |
| | | <el-option label="专性厌氧" :value="2" /> |
| | | <el-option label="兼性需氧" :value="3" /> |
| | | <el-option label="耐氧厌氧" :value="4" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="菌种编号"> |
| | | <el-input v-model="form.strainCode" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="菌种名称"> |
| | | <el-input v-model="form.strainName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="培养温度"> |
| | | <el-input v-model="form.temperature" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="修改人"> |
| | | <el-input v-model="form.updateBy" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="修改时间"> |
| | | <el-date-picker v-model="form.updateTime" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label=""> |
| | | <el-button type="default" @click="resetForm">重置</el-button> |
| | |
| | | <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" :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> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <template #table> |
| | | <el-table-column prop="preserveSource" label="来源类型"></el-table-column> |
| | | <el-table-column prop="projectName" label="项目组名称"/> |
| | | <el-table-column prop="preserveSource" label="来源类型"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.preserveSource === 1 ? '来源菌株' : '来源物资' }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="strainName" label="来源信息"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.preserveSource === 1 ? scope.row.strainName : scope.row.sourceMaterialTimeBatchNumber }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column prop="sourceMaterialTimeBatchNumber" label="来源物资、时间及批号"> |
| | | </el-table-column> --> |
| | | <el-table-column prop="cultureMedium" label="培养基"></el-table-column> |
| | | <el-table-column prop="formula" label="培养基配方"></el-table-column> |
| | | <el-table-column prop="temperature" label="培养温度"></el-table-column> |
| | | <el-table-column prop="aerobicType" label="需氧类型"></el-table-column> |
| | | <el-table-column prop="aerobicType" label="需氧类型"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.aerobicType == 1 ? '专性需氧' : scope.row.aerobicType == 2 ? '专性厌氧' : scope.row.aerobicType |
| | | == |
| | | 3 ? '兼性需氧' : '耐氧厌氧'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createBy" label="创建人"></el-table-column> |
| | | <el-table-column prop="createTime" label="创建时间"></el-table-column> |
| | | <el-table-column prop="cultureTime" label="培养时间"></el-table-column> |
| | | <el-table-column prop="strainCode" label="菌种编号"></el-table-column> |
| | | <el-table-column prop="strainName" label="菌种名称"></el-table-column> |
| | | <el-table-column prop="status" label="状态"> |
| | | <template slot-scope="scope"> |
| | | {{ scope.row.status === 1 ? '已提交' : scope.row.status === 2 ? '已同步/未提交' :'草稿' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" width="250"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button> |
| | | <el-button type="text" @click="handleDelete(scope.row)">删除</el-button> |
| | | <el-button style="margin-right: 10px" type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | <el-button style="margin-right: 10px" type="text" @click="handleEdit(scope.row)" |
| | | v-if="[1, 4].includes(roleType) && scope.row.status != 1">编辑</el-button> |
| | | <el-button type="text" @click="handleDelete(scope.row)" |
| | | v-if="[1].includes(roleType) || ([1, 4].includes(roleType) && currentType != 'list')">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </TableCustom> |
| | | <el-pagination |
| | | :current-page="form.pageNum" |
| | | :page-size="form.pageSize" |
| | | :total="total" |
| | | @current-change="handlePageChange" |
| | | @size-change="handleSizeChange" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :page-sizes="[10, 20, 50, 100]" |
| | | style="margin-top: 20px; text-align: right;" |
| | | /> |
| | | <ShowDelConfirm :show="showDelConfirm" @close="showDelConfirm = false" @confirm="handleDelConfirm" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getList } from './service' |
| | | import { getList, del } from './service' |
| | | import ShowDelConfirm from '@/components/showDelConfirm' |
| | | import {myTeamPageList} from "@/components/chooseProject/servce"; |
| | | |
| | | export default { |
| | | name: "BreedingRecord", |
| | | components: {}, |
| | | components: { |
| | | ShowDelConfirm |
| | | }, |
| | | data() { |
| | | return { |
| | | teamList: [], // 项目组列表 |
| | | teamLoading: false, // 加载状态 |
| | | currentType: "list", // 当前显示类型:list-列表,draft-草稿箱 |
| | | form: { |
| | | aerobicType: '', |
| | | createBy: '', |
| | | createTime: '', |
| | | cultureMedium: '', |
| | | cultureTime: '', |
| | | disabled: '', |
| | | formula: '', |
| | | id: '', |
| | | preserveSource: '', |
| | | separateColonyNumber: '', |
| | | sourceMaterialTimeBatchNumber: '', |
| | | status: '', |
| | | projectIds: [], |
| | | strainCode: '', |
| | | strainName: '', |
| | | temperature: '', |
| | | updateBy: '', |
| | | updateTime: '', |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | isDraft: 0, |
| | | }, |
| | | showDelConfirm: false, |
| | | rules: { |
| | | aerobicType: [ |
| | | { required: true, message: '需氧类型不能为空', trigger: 'blur' } |
| | |
| | | ], |
| | | }, |
| | | tableData: [], |
| | | delData: null, |
| | | total: 0, |
| | | // 模拟数据 |
| | | mockListData: [ |
| | | { |
| | | planCode: "PLAN-2024-001", |
| | | planName: "2024年度实验室设备升级方案", |
| | | stage: "规划阶段", |
| | | creator: "张三", |
| | | createTime: "2024-03-15", |
| | | status: "pending", |
| | | approver: "李四", |
| | | approveTime: "2024-03-16", |
| | | }, |
| | | { |
| | | planCode: "PLAN-2024-002", |
| | | planName: "实验室安全管理制度更新方案", |
| | | stage: "实施阶段", |
| | | creator: "王五", |
| | | createTime: "2024-03-14", |
| | | status: "approved", |
| | | approver: "赵六", |
| | | approveTime: "2024-03-15", |
| | | }, |
| | | { |
| | | planCode: "PLAN-2024-003", |
| | | planName: "实验室人员培训计划", |
| | | stage: "准备阶段", |
| | | creator: "孙七", |
| | | createTime: "2024-03-13", |
| | | status: "rejected", |
| | | approver: "周八", |
| | | approveTime: "2024-03-14", |
| | | }, |
| | | ], |
| | | 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, |
| | | roleType: Number(JSON.parse(sessionStorage.getItem('userInfo')).roleType), |
| | | }; |
| | | }, |
| | | created() { |
| | | activated() { |
| | | this.getTableData(); |
| | | this.fetchTeamList(); |
| | | }, |
| | | methods: { |
| | | // 获取项目组列表 |
| | | 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 |
| | | } |
| | | }, |
| | | handleCurrentChange(page) { |
| | | this.form.pageNum = page; |
| | | this.getTableData(); |
| | | }, |
| | | handleSizeChange(size) { |
| | | this.form.pageSize = size; |
| | | this.getTableData(); |
| | | }, |
| | | resetForm() { |
| | | this.form = { |
| | | aerobicType: '', |
| | | createBy: '', |
| | | createTime: '', |
| | | cultureMedium: '', |
| | | cultureTime: '', |
| | | disabled: '', |
| | | formula: '', |
| | | id: '', |
| | | preserveSource: '', |
| | | separateColonyNumber: '', |
| | | sourceMaterialTimeBatchNumber: '', |
| | | status: '', |
| | | projectIds: '', |
| | | strainCode: '', |
| | | strainName: '', |
| | | temperature: '', |
| | | updateBy: '', |
| | | updateTime: '', |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | isDraft: this.currentType === 'draft' ? 1 : 0, |
| | | }; |
| | | this.getTableData(); |
| | | }, |
| | | handleNewStrain() { |
| | | this.$router.push({ |
| | |
| | | path: "/dataManagement/addPlan", |
| | | }); |
| | | }, |
| | | 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) { |
| | | // 实现编辑逻辑 |
| | | console.log("编辑数据:", row); |
| | | }, |
| | | handleDelete(row) { |
| | | // 实现删除逻辑 |
| | | console.log("删除数据:", row); |
| | | this.showDelConfirm = true |
| | | this.delData = row |
| | | }, |
| | | handleDelConfirm() { |
| | | del({ id: this.delData.id }).then(res => { |
| | | this.$message.success('删除成功'); |
| | | this.showDelConfirm = false |
| | | this.getTableData(); |
| | | }) |
| | | }, |
| | | handleDetail(row) { |
| | | this.currentApprovalData = row; |
| | | this.approvalDialogType = "view"; |
| | | this.approvalDialogVisible = true; |
| | | this.$router.push({ |
| | | path: "/strain/detail-breeding-record", |
| | | query: { |
| | | id: row.id, |
| | | isDetail: true |
| | | } |
| | | }); |
| | | }, |
| | | handleEdit(row) { |
| | | this.$router.push({ |
| | | path: "/strain/edit-breeding-record", |
| | | query: { |
| | | id: row.id, |
| | | isEdit: true |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | handleTypeChange(type) { |
| | | this.currentType = type; |
| | | this.form.isDraft = type === 'draft' ? 1 : 0; |
| | |
| | | }, |
| | | getTableData() { |
| | | getList({ ...this.form }).then(res => { |
| | | this.tableData = res.data.list || []; |
| | | this.tableData = res.data.records || []; |
| | | this.total = res.data.total || 0; |
| | | }).catch(() => { |
| | | this.tableData = []; |