| | |
| | | <el-button @click="showScheduling = true" class="el-icon-plus" type="primary"> |
| | | 选择实验调度</el-button> |
| | | </div> |
| | | <Table :tableData="tableData" :total="total" :height="null"> |
| | | <Table :data="tableData" :total="total" :height="null"> |
| | | <template> |
| | | <el-table-column prop="planCode" label="所属项目课题方案"></el-table-column> |
| | | <el-table-column prop="planName" label="实验编号"></el-table-column> |
| | | <el-table-column prop="planName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="stage" label=" 通知时间"></el-table-column> |
| | | <el-table-column prop="stage" label=" 实验开始时间"></el-table-column> |
| | | <el-table-column prop="stage" label=" 实验结束时间"></el-table-column> |
| | | <el-table-column prop="stage" label=" 参加人员"></el-table-column> |
| | | <el-table-column prop="creator" label="状态"></el-table-column> |
| | | <el-table-column prop="testName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="notifyTime" label="通知时间"></el-table-column> |
| | | <el-table-column prop="startTime" label="实验开始时间"></el-table-column> |
| | | <el-table-column prop="endTime" label="实验结束时间"></el-table-column> |
| | | <el-table-column prop="participants" label="参加人员"></el-table-column> |
| | | <el-table-column prop="status" label="状态"></el-table-column> |
| | | </template> |
| | | </Table> |
| | | <div class="header-title-left" style="margin-top: 60px;"> |
| | |
| | | 新增检测项</el-button> |
| | | <span>【注意:这里有多少个检测项 系统就会自动创建对应数量的《检测项的检验方法及数据记录》】</span> |
| | | </div> |
| | | <Table :tableData="tableData" :total="total" :height="null"> |
| | | <Table :data="testItems" :total="testItems.length" :height="null"> |
| | | <template> |
| | | <el-table-column prop="planCode" label="序号"></el-table-column> |
| | | <el-table-column prop="planName" label="检测项名称"></el-table-column> |
| | | <el-table-column prop="planName" label="检测项编号"></el-table-column> |
| | | <el-table-column prop="stage" label=" 定性/定量"></el-table-column> |
| | | <el-table-column prop="stage" label=" 检测方法编号"></el-table-column> |
| | | <el-table-column prop="stage" label=" 检测方法"></el-table-column> |
| | | <el-table-column prop="stage" label=" 收样要求"></el-table-column> |
| | | <el-table-column prop="creator" label="操作"></el-table-column> |
| | | <el-table-column type="index" label="序号" width="80"></el-table-column> |
| | | <el-table-column prop="termName" label="检测项名称"></el-table-column> |
| | | <el-table-column prop="termCode" label="检测项编号"></el-table-column> |
| | | <el-table-column prop="termType" label="定性/定量"> |
| | | <template slot-scope="scope"> |
| | | {{ scope.row.termType === 1 ? '定性' : '定量' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="termMethodCode" label="检测方法编号"></el-table-column> |
| | | <el-table-column prop="termMethod" label="检测方法"></el-table-column> |
| | | <el-table-column prop="sampleRequire" label="收样要求"></el-table-column> |
| | | <el-table-column label="操作" width="150"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleEditTestItem(scope.row)">编辑</el-button> |
| | | <el-button type="text" @click="handleDeleteTestItem(scope.$index)" class="delete-btn">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </Table> |
| | | <div class="btn_box flex "> |
| | | <el-button type="primary" @click="handleSubmit">提交确认单</el-button> |
| | | <el-button @click="$router.go(-1)">存草稿</el-button> |
| | | <el-button @click="handleSaveDraft">存草稿</el-button> |
| | | </div> |
| | | <experimentalScheduling :show="showScheduling"/> |
| | | <experimentalScheduling :show="showScheduling" @close="showScheduling = false" @submit="setSelectedScheduling"/> |
| | | <add-test-item |
| | | :dialogVisible="testItemDialogVisible" |
| | | :editData="currentTestItem" |
| | | @close="handleTestItemDialogClose" |
| | | @confirm="handleTestItemConfirm" |
| | | /> |
| | |
| | | import experimentalScheduling from './experimental-scheduling.vue'; |
| | | import AddTestItem from './add-test-item.vue' |
| | | import ConfirmDialog from './confirm-dialog.vue' |
| | | import { add, update, getDetail } from '../service' |
| | | |
| | | export default { |
| | | name: 'AddConfirmationSheet', |
| | |
| | | testName: '', // 实验名称 |
| | | sampleCode: '' // 取样单编号 |
| | | }, |
| | | selectedScheduling: null, // 添加选中的实验调度数据 |
| | | currentTestItem: null, // 当前编辑的检测项 |
| | | formData: { |
| | | id: '', // 确认单ID |
| | | dispatchId: '', // 实验调度ID |
| | | auditStatus: -1, // 审核状态,默认草稿 |
| | | testMethodConfirmSheetTerms: [], // 确认单检测项 |
| | | confirmSign: '', // 签字 |
| | | signTime: '', // 签字时间 |
| | | } |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | }, |
| | | watch: {}, |
| | | created() { |
| | | |
| | | // 判断是否是编辑模式 |
| | | const id = this.$route.query.id |
| | | if (id) { |
| | | this.getDetailData(id) |
| | | } |
| | | }, |
| | | mounted() { }, |
| | | methods: { |
| | | setSelectedScheduling(data) { |
| | | console.log('data',data) |
| | | if (!data || data.length === 0) return; |
| | | const selectedData = data[0]; // 获取选中的第一条数据 |
| | | this.selectedScheduling = selectedData; |
| | | |
| | | // 更新表格数据 |
| | | this.tableData = [{ |
| | | planCode: selectedData.projectName || '', // 所属项目课题方案 |
| | | planName: selectedData.experimentCode || '', // 实验编号 |
| | | testName: selectedData.experimentName || '', // 实验名称 |
| | | notifyTime: selectedData.experimentDate || '', // 通知时间 |
| | | startTime: selectedData.experimentStartTime || '', // 实验开始时间 |
| | | endTime: selectedData.experimentEndTime || '', // 实验结束时间 |
| | | participants: selectedData.participantsName || '', // 参加人员 |
| | | status: this.getStatusText(selectedData.status) // 状态 |
| | | }]; |
| | | this.total = this.tableData.length; |
| | | |
| | | // 更新确认表单数据 |
| | | this.confirmFormData = { |
| | | planName: selectedData.projectName || '', |
| | | testCode: selectedData.experimentCode || '', |
| | | testName: selectedData.experimentName || '', |
| | | sampleCode: selectedData.experimentCode || '' // 使用实验编号作为取样单编号 |
| | | }; |
| | | }, |
| | | |
| | | // 添加状态转换方法 |
| | | getStatusText(status) { |
| | | const statusMap = { |
| | | "-1": "草稿箱", |
| | | "1": "待确认", |
| | | "2": "已确认", |
| | | "3": "已封存" |
| | | }; |
| | | return statusMap[status] || "未知"; |
| | | }, |
| | | setSelectedIds(arr, selectKeyList) { |
| | | function traverse(item) { |
| | | item.selected = selectKeyList.includes(item.menuId); |
| | |
| | | }) |
| | | }, |
| | | showAddTestItem() { |
| | | this.currentTestItem = null // 清空当前编辑项 |
| | | this.testItemDialogVisible = true |
| | | }, |
| | | handleTestItemDialogClose() { |
| | | this.testItemDialogVisible = false |
| | | this.currentTestItem = null |
| | | }, |
| | | handleTestItemConfirm(formData) { |
| | | // 将新增的检测项添加到列表中 |
| | | this.testItems.push({ |
| | | ...formData, |
| | | index: this.testItems.length + 1 |
| | | }) |
| | | if (this.currentTestItem) { |
| | | // 编辑模式 |
| | | const index = this.testItems.findIndex(item => item.termCode === this.currentTestItem.termCode) |
| | | if (index !== -1) { |
| | | this.testItems.splice(index, 1, { |
| | | ...formData, |
| | | id: this.currentTestItem.id // 保留原有ID |
| | | }) |
| | | } |
| | | } else { |
| | | // 新增模式 |
| | | this.testItems.push({ |
| | | ...formData, |
| | | id: this.generateUniqueId() // 生成唯一ID |
| | | }) |
| | | } |
| | | this.testItemDialogVisible = false |
| | | this.$message.success('添加成功') |
| | | this.currentTestItem = null |
| | | this.$message.success(this.currentTestItem ? '编辑成功' : '添加成功') |
| | | }, |
| | | handleEditTestItem(row) { |
| | | this.currentTestItem = { ...row } // 深拷贝当前行数据 |
| | | this.testItemDialogVisible = true |
| | | }, |
| | | handleDeleteTestItem(index) { |
| | | this.$confirm('确认删除该检测项吗?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.testItems.splice(index, 1) |
| | | this.$message.success('删除成功') |
| | | }).catch(() => {}) |
| | | }, |
| | | generateUniqueId() { |
| | | return 'test_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9) |
| | | }, |
| | | handleSubmit() { |
| | | // 这里可以添加表单验证逻辑 |
| | | if (this.testItems.length === 0) { |
| | | this.$message.warning('请至少添加一个检测项') |
| | | return |
| | | } |
| | | if (!this.selectedScheduling) { |
| | | this.$message.warning('请选择实验调度') |
| | | return |
| | | } |
| | | // 设置确认弹窗的数据 |
| | | this.confirmFormData = { |
| | | planName: '项目名称示例', |
| | | testCode: '实验编号示例', |
| | | testName: '实验名称示例', |
| | | sampleCode: '取样单编号示例' |
| | | planName: this.selectedScheduling.projectName || '', // 所属项目课题方案 |
| | | testCode: this.selectedScheduling.experimentCode || '', // 实验编号 |
| | | testName: this.selectedScheduling.experimentName || '', // 实验名称 |
| | | sampleCode: this.selectedScheduling.experimentCode || '' // 取样单编号 |
| | | } |
| | | this.confirmDialogVisible = true |
| | | }, |
| | | handleConfirmSubmit(signatureImage) { |
| | | // 处理最终提交逻辑 |
| | | console.log('提交确认单,签名图片:', signatureImage) |
| | | // TODO: 调用提交API |
| | | this.$message.success('提交成功') |
| | | this.$router.push('/dataManagement/confirmation-sheet') |
| | | } |
| | | async handleConfirmSubmit(signatureImage) { |
| | | try { |
| | | // 构建提交数据 |
| | | const submitData = { |
| | | dispatchId: this.selectedScheduling.id, // 实验调度ID |
| | | auditStatus: 1, // 待确认状态 |
| | | confirmSign:'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'|| signatureImage, // 签字图片 |
| | | signTime: new Date().toISOString(), // 签字时间 |
| | | testMethodConfirmSheetTerms: this.testItems.map(item => ({ |
| | | id: item.id, // 保留原有ID(编辑时使用) |
| | | termCode: item.termCode, |
| | | termName: item.termName, |
| | | termType: item.termType, |
| | | termMethodCode: item.termMethodCode, |
| | | termMethod: item.termMethod, |
| | | sampleRequire: item.sampleRequire, |
| | | status: 2, // 已填写状态 |
| | | testId: item.testId |
| | | })) |
| | | } |
| | | |
| | | // 打印提交参数 |
| | | console.log('提交确认单参数:', JSON.stringify(submitData, null, 2)) |
| | | |
| | | // 根据是否有 id 决定调用新增还是更新接口 |
| | | if (this.formData.id) { |
| | | submitData.id = this.formData.id |
| | | console.log('调用更新接口,参数:', JSON.stringify(submitData, null, 2)) |
| | | await update(submitData) |
| | | this.$message.success('更新成功') |
| | | } else { |
| | | console.log('调用新增接口,参数:', JSON.stringify(submitData, null, 2)) |
| | | await add(submitData) |
| | | this.$message.success('提交成功') |
| | | } |
| | | |
| | | this.confirmDialogVisible = false // 关闭弹窗 |
| | | this.$router.go(-1) |
| | | } catch (error) { |
| | | this.$message.error((this.formData.id ? '更新' : '提交') + '失败:' + (error.message || '未知错误')) |
| | | } |
| | | }, |
| | | async handleSaveDraft() { |
| | | try { |
| | | if (!this.selectedScheduling) { |
| | | this.$message.warning('请选择实验调度') |
| | | return |
| | | } |
| | | |
| | | // 构建草稿数据 |
| | | const draftData = { |
| | | dispatchId: this.selectedScheduling.id, |
| | | auditStatus: -1, // 草稿箱状态 |
| | | testMethodConfirmSheetTerms: this.testItems.map(item => ({ |
| | | id: item.id, // 保留原有ID(编辑时使用) |
| | | termCode: item.termCode, |
| | | termName: item.termName, |
| | | termType: item.termType, |
| | | termMethodCode: item.termMethodCode, |
| | | termMethod: item.termMethod, |
| | | sampleRequire: item.sampleRequire, |
| | | status: -1, // 草稿箱状态 |
| | | testId: item.testId |
| | | })) |
| | | } |
| | | |
| | | // 打印草稿参数 |
| | | console.log('保存草稿参数:', JSON.stringify(draftData, null, 2)) |
| | | |
| | | // 根据是否有 id 决定调用新增还是更新接口 |
| | | if (this.formData.id) { |
| | | draftData.id = this.formData.id |
| | | console.log('调用更新草稿接口,参数:', JSON.stringify(draftData, null, 2)) |
| | | await update(draftData) |
| | | this.$message.success('更新草稿成功') |
| | | } else { |
| | | console.log('调用新增草稿接口,参数:', JSON.stringify(draftData, null, 2)) |
| | | await add(draftData) |
| | | this.$message.success('保存草稿成功') |
| | | } |
| | | |
| | | this.$router.push('/dataManagement/confirmation-sheet') |
| | | } catch (error) { |
| | | this.$message.error((this.formData.id ? '更新' : '保存') + '草稿失败:' + (error.message || '未知错误')) |
| | | } |
| | | }, |
| | | async getDetailData(id) { |
| | | try { |
| | | const res = await getDetail({ id }) |
| | | if (res.data) { |
| | | // 设置实验调度数据 |
| | | this.selectedScheduling = { |
| | | id: res.data.dispatchId, |
| | | // ... 其他调度相关字段 |
| | | } |
| | | |
| | | // 设置检测项数据 |
| | | this.testItems = res.data.testMethodConfirmSheetTerms.map(item => ({ |
| | | ...item, |
| | | id: item.id // 使用后端返回的ID |
| | | })) |
| | | |
| | | // 设置表单数据 |
| | | this.formData = { |
| | | id: res.data.id, |
| | | dispatchId: res.data.dispatchId, |
| | | auditStatus: res.data.auditStatus, |
| | | confirmSign: res.data.confirmSign, |
| | | signTime: res.data.signTime |
| | | } |
| | | } |
| | | } catch (error) { |
| | | this.$message.error('获取详情失败:' + (error.message || '未知错误')) |
| | | } |
| | | }, |
| | | |
| | | async handleEditSubmit(signatureImage) { |
| | | try { |
| | | const submitData = { |
| | | id: this.formData.id, |
| | | dispatchId: this.selectedScheduling.id, |
| | | auditStatus: 1, |
| | | confirmSign: signatureImage, |
| | | signTime: new Date().toISOString(), |
| | | testMethodConfirmSheetTerms: this.testItems.map(item => ({ |
| | | id: item.id, // 保留原有ID |
| | | termCode: item.termCode, |
| | | termName: item.termName, |
| | | termType: item.termType, |
| | | termMethodCode: item.termMethodCode, |
| | | termMethod: item.termMethod, |
| | | sampleRequire: item.sampleRequire, |
| | | status: item.status, |
| | | testId: item.testId |
| | | })) |
| | | } |
| | | |
| | | await update(submitData) |
| | | this.$message.success('更新成功') |
| | | this.$router.push('/dataManagement/confirmation-sheet') |
| | | } catch (error) { |
| | | this.$message.error('更新失败:' + (error.message || '未知错误')) |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |