diff --git a/src/api/qc/qc.js b/src/api/qc/qc.js index 346270d..f95b4e1 100644 --- a/src/api/qc/qc.js +++ b/src/api/qc/qc.js @@ -27,6 +27,7 @@ export const templateSearch = data => createAPI(`/qms/qc/templateSearch`,'post', export const templateSave = data => createAPI(`/qms/qc/templateSave`,'post',data) export const templateUpdate = data => createAPI(`/qms/qc/templateUpdate`,'post',data) export const templateDelete = data => createAPI(`/qms/qc/templateDelete`,'post',data) +export const templateCopy = data => createAPI(`/qms/qc/templateCopy`,'post',data) export const inspectionTypeSearch = data => createAPI(`/qms/qc/inspectionTypeSearch`,'post',data) export const objectSearch = data => createAPI(`/qms/qc/objectSearch`,'post',data) export const templateDetailsSearch = data => createAPI(`/qms/qc/templateDetailsSearch`,'post',data) diff --git a/src/views/modules/qc/qcTemplate.vue b/src/views/modules/qc/qcTemplate.vue index 8a34136..d370a07 100644 --- a/src/views/modules/qc/qcTemplate.vue +++ b/src/views/modules/qc/qcTemplate.vue @@ -83,12 +83,13 @@ fixed="right" header-align="center" align="center" - width="160" + width="220" label="操作"> @@ -192,7 +193,7 @@ - + @@ -286,8 +287,13 @@ + { + const copyData = { + site: row.site, + buNo: row.buNo, + templateId: row.templateId, + createBy: this.$store.state.user.name, + updateBy: this.$store.state.user.name + } + templateCopy(copyData).then(({data}) => { + if (data && data.code === 0) { + this.getDataList() + const newTemplateId = data.templateId ? `,新模板编码:${data.templateId}` : '' + this.$message({ + message: `操作成功${newTemplateId}`, + type: 'success', + duration: 1500, + onClose: () => {} + }) + } else { + this.$alert(data.msg, '错误', { + confirmButtonText: '确定' + }) + } + }) + }).catch(() => { + }) + }, + // 删除 deleteModel (row) { this.$confirm(`是否删除这个检验模板?`, '提示', { @@ -1519,10 +1576,38 @@ templateDetailsSearch(this.detailData).then(({data}) => { this.detailList = data.rows //this.objectSearch() + // 明细数据回填后立刻重排表格,避免弹窗内列宽计算滞后导致操作列留白/错位。 + this.refreshDetailTableLayout() }) this.detailModelFlag = true }, + /** + * @description 检验项目弹窗打开后,强制执行一次表格布局重算 + * 业务意图: + * 1) 解决 el-dialog 场景下 el-table 首次可见时列宽未正确计算的问题; + * 2) 保证“操作列”与前置列边界对齐,避免出现右侧空白区或错位。 + * 失败处理: + * - 若 ref 尚未挂载,则静默跳过,不影响弹窗基础功能。 + */ + handleDetailDialogOpen () { + this.refreshDetailTableLayout() + }, + + /** + * @description 统一封装明细表格重排逻辑 + * 处理规则: + * 1) 使用 $nextTick 等待 DOM 与数据同步完成后再调用 doLayout; + * 2) 仅在 detailTable 实例存在时执行,避免空引用异常。 + */ + refreshDetailTableLayout () { + this.$nextTick(() => { + if (this.$refs.detailTable && this.$refs.detailTable.doLayout) { + this.$refs.detailTable.doLayout() + } + }) + }, + // 保存模板项目 saveDetail () { // for (let i = 0; i < this.detailList.length; i++) { @@ -1665,6 +1750,8 @@ refreshDetailList () { templateDetailsSearch(this.detailData).then(({data}) => { this.detailList = data.rows + // 快速新增弹窗关闭后,明细表数据会变化,需同步重排列宽避免显示失真。 + this.refreshDetailTableLayout() }) },