Browse Source

新品流程OK

master
常熟吴彦祖 2 weeks ago
parent
commit
35dde8575c
  1. 1
      src/api/qc/qc.js
  2. 97
      src/views/modules/qc/qcTemplate.vue

1
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 templateSave = data => createAPI(`/qms/qc/templateSave`,'post',data)
export const templateUpdate = data => createAPI(`/qms/qc/templateUpdate`,'post',data) export const templateUpdate = data => createAPI(`/qms/qc/templateUpdate`,'post',data)
export const templateDelete = data => createAPI(`/qms/qc/templateDelete`,'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 inspectionTypeSearch = data => createAPI(`/qms/qc/inspectionTypeSearch`,'post',data)
export const objectSearch = data => createAPI(`/qms/qc/objectSearch`,'post',data) export const objectSearch = data => createAPI(`/qms/qc/objectSearch`,'post',data)
export const templateDetailsSearch = data => createAPI(`/qms/qc/templateDetailsSearch`,'post',data) export const templateDetailsSearch = data => createAPI(`/qms/qc/templateDetailsSearch`,'post',data)

97
src/views/modules/qc/qcTemplate.vue

@ -83,12 +83,13 @@
fixed="right" fixed="right"
header-align="center" header-align="center"
align="center" align="center"
width="160"
width="220"
label="操作"> label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<a v-if="!authUpdate" type="text" size="small" @click="updateModal(scope.row)">编辑</a> <a v-if="!authUpdate" type="text" size="small" @click="updateModal(scope.row)">编辑</a>
<a v-if="!authDetail" type="text" size="small" @click="detailModal(scope.row)">检验项目</a>
<a v-if="!authDelete" type="text" size="small" @click="deleteModel(scope.row)">删除</a>
<a v-if="!authUpdate" type="text" size="small" style="margin-left: 8px;" @click="copyTemplate(scope.row)">复制</a>
<a v-if="!authDetail" type="text" size="small" style="margin-left: 8px;" @click="detailModal(scope.row)">检验项目</a>
<a v-if="!authDelete" type="text" size="small" style="margin-left: 8px;" @click="deleteModel(scope.row)">删除</a>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -192,7 +193,7 @@
</el-dialog> </el-dialog>
<!-- 检验项目 --> <!-- 检验项目 -->
<el-dialog title="检验项目清单" @close="closeDialog" :close-on-click-modal="false" v-drag :visible.sync="detailModelFlag" width="940px">
<el-dialog title="检验项目清单" @open="handleDetailDialogOpen" @close="closeDialog" :close-on-click-modal="false" v-drag :visible.sync="detailModelFlag" width="940px">
<el-form :inline="true" label-position="top" @keyup.enter.native="getDataList()"> <el-form :inline="true" label-position="top" @keyup.enter.native="getDataList()">
<el-form-item :label="'检验模板编码'"> <el-form-item :label="'检验模板编码'">
<el-input v-model="detailData.templateId" readonly style="width: 120px"></el-input> <el-input v-model="detailData.templateId" readonly style="width: 120px"></el-input>
@ -286,8 +287,13 @@
<!-- </el-autocomplete>--> <!-- </el-autocomplete>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<!--
操作列在弹窗内取消 fixed="right"
1) 弹窗宽度变化或首次渲染时Element fixed-right 容易出现右侧留白失真
2) 当前检验项目清单列数固定且宽度可容纳不需要固定列也能保证可用性
3) 取消固定后配合 doLayout 重排避免操作列显示异常
-->
<el-table-column <el-table-column
fixed="right"
header-align="center" header-align="center"
align="center" align="center"
width="130" width="130"
@ -508,6 +514,7 @@
templateSave, // templateSave, //
templateUpdate, // templateUpdate, //
templateDelete, // templateDelete, //
templateCopy, //
inspectionTypeSearch, // inspectionTypeSearch, //
objectSearch, // objectSearch, //
templateDetailsSearch, // templateDetailsSearch, //
@ -1424,6 +1431,56 @@
this.modalFlag = true this.modalFlag = true
}, },
/**
* @description 复制检验模板主表 + 检验项目 + 判定标准
* 业务意图
* 1) 为模板维护提供快速复制拓展能力减少重复录入
* 2) 复制后由后端生成新的模板编码并将模板名称自动追加_复制
* 3) 复制结果需保持与源模板一致检验项目与判定标准完整继承
*
* 关键输入
* - row.site / row.buNo / row.templateId定位被复制的源模板
* - 当前登录用户作为复制动作的创建人与更新人
*
* 失败处理
* - 若后端校验失败例如源模板不存在弹框展示后端返回信息
* - 若网络异常保持页面状态不变便于用户重试
*/
copyTemplate (row) {
const sourceTemplateName = row && row.templateName ? String(row.templateName).trim() : ''
const targetTemplateName = `${sourceTemplateName}_复制`
this.$confirm(`确认复制模板【${row.templateId}】并生成新模板【${targetTemplateName}】吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
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) { deleteModel (row) {
this.$confirm(`是否删除这个检验模板?`, '提示', { this.$confirm(`是否删除这个检验模板?`, '提示', {
@ -1519,10 +1576,38 @@
templateDetailsSearch(this.detailData).then(({data}) => { templateDetailsSearch(this.detailData).then(({data}) => {
this.detailList = data.rows this.detailList = data.rows
//this.objectSearch() //this.objectSearch()
// /
this.refreshDetailTableLayout()
}) })
this.detailModelFlag = true 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 () { saveDetail () {
// for (let i = 0; i < this.detailList.length; i++) { // for (let i = 0; i < this.detailList.length; i++) {
@ -1665,6 +1750,8 @@
refreshDetailList () { refreshDetailList () {
templateDetailsSearch(this.detailData).then(({data}) => { templateDetailsSearch(this.detailData).then(({data}) => {
this.detailList = data.rows this.detailList = data.rows
//
this.refreshDetailTableLayout()
}) })
}, },

Loading…
Cancel
Save