You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1308 lines
45 KiB
1308 lines
45 KiB
<template> |
|
<div class="box-card"> |
|
<div class="process-left"> |
|
<div class="process-select"> |
|
<!-- 工艺级别:--> |
|
<el-form :model="form" label-width="auto"> |
|
<el-form-item label="工艺级别:"> |
|
<el-select |
|
v-model="rank" |
|
placeholder="请选择" |
|
style="width: 220px" |
|
@change="leavelChange" |
|
clearable |
|
filterable |
|
> |
|
<el-option label="一级工艺" value="1" /> |
|
<el-option label="二级工艺" value="2" /> |
|
<el-option label="三级工艺" value="3" /> |
|
</el-select> |
|
</el-form-item> |
|
</el-form> |
|
</div> |
|
<!-- style="width: 240px" --> |
|
<el-tree |
|
:data="data" |
|
:props="defaultProps" |
|
@node-click="handleNodeClick" |
|
:default-expand-all="true" |
|
:expand-on-click-node="false" |
|
/> |
|
</div> |
|
<div class="process-right"> |
|
<el-form |
|
:model="treeNodes.rawData" |
|
label-width="auto" |
|
:rules="rules" |
|
v-if="Object.keys(treeNodes).length !== 0" |
|
> |
|
<el-row :gutter="24" v-show="activeName == '1'"> |
|
<el-col :span="8"> |
|
<el-form-item label="重要度:" prop="prority"> |
|
<el-select |
|
v-model="treeNodes.rawData.prority" |
|
:placeholder="'请选择'" |
|
clearable |
|
filterable |
|
> |
|
<el-option |
|
v-for="item in priorityList" |
|
:key="item.value" |
|
:label="item.label" |
|
:value="item.value" |
|
/> |
|
</el-select> |
|
</el-form-item> |
|
</el-col> |
|
<el-col :span="8"> |
|
<el-form-item label="生产标识:" prop="qualityGradeCode"> |
|
<el-select |
|
v-model="treeNodes.rawData.qualityGradeCode" |
|
:placeholder="'请选择'" |
|
clearable |
|
filterable |
|
> |
|
<el-option |
|
v-for="item in rankList" |
|
:key="item.code" |
|
:label="item.name" |
|
:value="item.code" |
|
/> |
|
</el-select> |
|
</el-form-item> |
|
</el-col> |
|
<el-col :span="8"> |
|
<el-form-item label="备注:" prop="remarks"> |
|
<el-input v-model="treeNodes.rawData.remarks" placeholder="请输入" /> |
|
</el-form-item> |
|
</el-col> |
|
</el-row> |
|
</el-form> |
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> |
|
<el-tab-pane label="工序" name="1" v-if="treeLeave == 2"></el-tab-pane> |
|
<el-tab-pane label="项目" name="2" v-if="treeLeave == 3"></el-tab-pane> |
|
<el-tab-pane label="尺寸、量具" name="3" v-if="treeLeave == 3"></el-tab-pane> |
|
<el-tab-pane label="工装、模具表" name="4" v-if="treeLeave == 3"></el-tab-pane> |
|
</el-tabs> |
|
<div class="table-btn"> |
|
<div class="table-btn-left"> |
|
<el-button type="primary" plain @click="addTable()">插入一行</el-button> |
|
<el-button type="danger" plain @click="delTable()">删除选择行</el-button> |
|
<el-button type="primary" @click="saveInfo()" :loading="craftLoading">保存</el-button> |
|
</div> |
|
<div class="table-btn-right" v-if="activeName == '1'"> |
|
<el-select |
|
v-model="modelLevel" |
|
placeholder="选择工艺模板" |
|
style="width: 220px; margin-right: 12px" |
|
clearable |
|
filterable |
|
> |
|
<el-option |
|
v-for="(item, index) in modelOption" |
|
:key="index" |
|
:label="item.name" |
|
:value="item.id" |
|
/> |
|
</el-select> |
|
<el-button type="primary" @click="modelLevelChange()">导入模板</el-button> |
|
</div> |
|
</div> |
|
<!-- 工序 --> |
|
<el-form |
|
ref="tableForm1" |
|
:model="form1" |
|
:rules="formRules1" |
|
label-width="0px" |
|
v-if="activeName == '1'" |
|
> |
|
<el-table |
|
:data="form1.tableData1" |
|
style="width: 100%" |
|
@selection-change="handleSelectionChange1" |
|
> |
|
<el-table-column type="selection" width="55"></el-table-column> |
|
<el-table-column prop="processNo" label="工序号"> |
|
<template #header> |
|
<span><i style="color: red">*</i>工序号</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item |
|
:prop="`tableData1[${scope.$index}].processNo`" |
|
:rules="formRules1.processNo" |
|
> |
|
<el-input |
|
v-model="scope.row.processNo" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="processCode" label="工序"> |
|
<template #header> |
|
<span><i style="color: red">*</i>工序</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item |
|
:prop="`tableData1[${scope.$index}].processCode`" |
|
:rules="formRules1.processCode" |
|
> |
|
<el-select |
|
v-model="scope.row.processCode" |
|
placeholder="请选择" |
|
clearable |
|
filterable |
|
@change="processChange(scope.row, scope.$index)" |
|
> |
|
<el-option |
|
v-for="(item, index) in processSetOption" |
|
:key="index" |
|
:label="item.name" |
|
:value="item.id" |
|
></el-option> |
|
</el-select> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="craftCode" label="工艺能力"> |
|
<template #header> |
|
<span><i style="color: red">*</i>工艺能力</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item |
|
:prop="`tableData1[${scope.$index}].craftCode`" |
|
:rules="formRules1.craftCode" |
|
> |
|
<el-select |
|
v-model="scope.row.craftCode" |
|
placeholder="请选择" |
|
clearable |
|
filterable |
|
@change="craftChange(scope.row, scope.$index)" |
|
> |
|
<el-option |
|
v-for="(item, index) in craftAbilityOption" |
|
:key="index" |
|
:label="item.name" |
|
:value="item.id" |
|
></el-option> |
|
</el-select> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="proDes" label="工序描述"> |
|
<template #header> |
|
<span><i style="color: red">*</i>工序描述</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item :prop="`tableData1[${scope.$index}].proDes`" :rules="formRules1.proDes"> |
|
<el-input |
|
v-model="scope.row.proDes" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="proHours" label="定额工时(分钟)"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.proHours" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="setoutHours" label="准备工时(分钟)"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.setoutHours" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="isMain" label="是否主工序"> |
|
<template #header> |
|
<span><i style="color: red">*</i>是否主工序</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item :prop="`tableData1[${scope.$index}].isMain`" :rules="formRules1.isMain"> |
|
<el-select v-model="scope.row.isMain" placeholder="请选择" clearable filterable> |
|
<el-option label="是" value="1"></el-option> |
|
<el-option label="否" value="0"></el-option> |
|
</el-select> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
</el-table> |
|
</el-form> |
|
<!-- 项目 --> |
|
<el-form |
|
ref="tableForm2" |
|
:model="form2" |
|
:rules="formRules2" |
|
label-width="0px" |
|
v-if="activeName == '2'" |
|
> |
|
<el-table |
|
:data="form2.tableData2" |
|
style="width: 100%" |
|
@selection-change="handleSelectionChange2" |
|
> |
|
<el-table-column type="selection" width="55"></el-table-column> |
|
<el-table-column prop="trialNo" label="工序号"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.trialNo" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="projecCode" label="检验项目"> |
|
<template #header> |
|
<span><i style="color: red">*</i>检验项目</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item |
|
:prop="`tableData2[${scope.$index}].projecCode`" |
|
:rules="formRules2.projecCode" |
|
> |
|
<el-select |
|
v-model="scope.row.projecCode" |
|
placeholder="请选择" |
|
clearable |
|
filterable |
|
@change="projectChange(scope.row, scope.$index)" |
|
> |
|
<el-option |
|
v-for="(item, index) in projectOptions" |
|
:label="item.name" |
|
:value="item.id" |
|
></el-option> |
|
</el-select> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="projectStandard" label="检验标准"> |
|
<template #header> |
|
<span><i style="color: red">*</i>检验标准</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item |
|
:prop="`tableData2[${scope.$index}].projectStandard`" |
|
:rules="formRules2.projectStandard" |
|
> |
|
<el-select |
|
v-model="scope.row.projectStandard" |
|
placeholder="请选择" |
|
clearable |
|
filterable |
|
@change="standardChange(scope.row, scope.$index)" |
|
> |
|
<el-option |
|
v-for="(item, index) in standardList" |
|
:label="item.name" |
|
:value="item.id" |
|
></el-option> |
|
</el-select> |
|
<!-- <el-input |
|
v-model="scope.row.projectStandard" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> --> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="proHours" label="定额工时(分钟)"> |
|
<template #header> |
|
<span><i style="color: red">*</i>定额工时(分钟)</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item |
|
:prop="`tableData2[${scope.$index}].proHours`" |
|
:rules="formRules2.proHours" |
|
> |
|
<el-input |
|
v-model="scope.row.proHours" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="prepareHours" label="准备工时(分钟)"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.prepareHours" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
</el-table> |
|
</el-form> |
|
<!-- 量具 --> |
|
<el-form |
|
ref="tableForm3" |
|
:model="form3" |
|
:rules="formRules3" |
|
label-width="0px" |
|
v-if="activeName == '3'" |
|
> |
|
<el-table |
|
:data="form3.tableData3" |
|
class="tableHeight" |
|
style="width: 100%" |
|
@selection-change="handleSelectionChange3" |
|
> |
|
<el-table-column type="selection" width="55"></el-table-column> |
|
<el-table-column prop="trialNo" label="工序号"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.trialNo" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="testType" label="镀前镀后"> |
|
<template #header> |
|
<span><i style="color: red">*</i>镀前镀后</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item |
|
:prop="`tableData3[${scope.$index}].testType`" |
|
:rules="formRules3.testType" |
|
> |
|
<el-select v-model="scope.row.testType" placeholder="请选择" clearable filterable> |
|
<el-option label="是" value="1"></el-option> |
|
<el-option label="否" value="2"></el-option> |
|
</el-select> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="tool" label="量具"> |
|
<template #header> |
|
<span><i style="color: red">*</i>量具</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item :prop="`tableData3[${scope.$index}].tool`" :rules="formRules3.tool"> |
|
<el-input |
|
v-model="scope.row.tool" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
<!-- <el-select v-model="scope.row.tool" placeholder="请选择" clearable filterable> |
|
<el-option label="是" value="1"></el-option> |
|
<el-option label="否" value="2"></el-option> |
|
</el-select> --> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="toolSize" label="量具尺寸"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.toolSize" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="toolInfo" label="图纸尺寸"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.toolInfo" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
</el-table> |
|
</el-form> |
|
<!-- 工装 --> |
|
<el-form |
|
ref="tableForm4" |
|
:model="form4" |
|
:rules="formRules4" |
|
label-width="0px" |
|
v-if="activeName == '4'" |
|
> |
|
<el-table |
|
:data="form4.tableData4" |
|
style="width: 100%" |
|
@selection-change="handleSelectionChange4" |
|
> |
|
<el-table-column type="selection" width="55"></el-table-column> |
|
<el-table-column prop="trialNo" label="工序号"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.trialNo" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="moldCode" label="对应工装"> |
|
<template #header> |
|
<span><i style="color: red">*</i>对应工装</span> |
|
</template> |
|
<template #default="scope"> |
|
<el-form-item |
|
:prop="`tableData4[${scope.$index}].moldCode`" |
|
:rules="formRules4.moldCode" |
|
> |
|
<el-input |
|
v-model="scope.row.moldCode" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</el-form-item> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="moldName" label="工装名称"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.moldName" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="isPrint" label="是否印字"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.isPrint" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="printNo" label="印字版编号"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.printNo" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="testFixtureNo" label="测试夹具号"> |
|
<template #default="scope"> |
|
<el-input |
|
v-model="scope.row.testFixtureNo" |
|
placeholder="请输入" |
|
style="width: 100%" |
|
></el-input> |
|
</template> |
|
</el-table-column> |
|
</el-table> |
|
</el-form> |
|
</div> |
|
</div> |
|
</template> |
|
<script> |
|
import { |
|
getProcessAuthorized, |
|
getModelList, |
|
getModelDetailList, |
|
authorizedAccomplish2, |
|
saveProcessProjectSave, |
|
saveProcessMeasuringTool, |
|
saveProcessMoldTool, |
|
getProcessSetList, |
|
getCraftAbilityList, |
|
getPartDetail, |
|
getProject, |
|
getStandardList, |
|
} from '@/api/processManagement/taskProcessing'; |
|
import { getPqList } from '@/api/qualityManagement/remindRedeem/remindRedeem'; |
|
export default { |
|
name: 'CraftIndex', |
|
components: {}, |
|
props: { |
|
height: { |
|
type: Number, |
|
default: 600, |
|
}, |
|
partId: { |
|
type: [Number, String], |
|
default: null, |
|
}, |
|
dialogType: { |
|
type: String, |
|
default: '', |
|
}, |
|
updateRow: { |
|
type: Object, |
|
default: {}, |
|
}, |
|
}, |
|
data() { |
|
return { |
|
craftLoading:false, |
|
rank: '2', |
|
processLevel: '2', |
|
data: [], |
|
defaultProps: { |
|
children: 'children', |
|
label: 'label', |
|
}, |
|
form: {}, |
|
rules: { |
|
prority: [{ required: true, message: '请选择', trigger: 'blur' }], |
|
qualityGradeCode: [{ required: true, message: '请选择', trigger: 'blur' }], |
|
}, |
|
priorityList: [ |
|
{ |
|
label: '本次使用', |
|
value: 1, |
|
}, |
|
{ |
|
label: '正式工艺', |
|
value: 2, |
|
}, |
|
{ |
|
label: '临时工艺', |
|
value: 3, |
|
}, |
|
], |
|
rankList: [], |
|
activeName: '1', |
|
treeLeave: 2, //组织树选中层级 |
|
processSetOption: [], //工序列表 |
|
craftAbilityOption: [], //工艺能力列表 |
|
modelOption: [], //模板列表 |
|
modelLevel: null, //模板选择 |
|
form1: { |
|
tableData1: [], //工序 |
|
deleteIds: [], |
|
selectIds: [], //选中ID |
|
}, |
|
form2: { |
|
tableData2: [], //项目 |
|
deleteIds: [], |
|
selectIds: [], //选中ID |
|
}, |
|
form3: { |
|
tableData3: [], //量具 |
|
deleteIds: [], |
|
selectIds: [], //选中ID |
|
}, |
|
form4: { |
|
tableData4: [], //工装 |
|
deleteIds: [], |
|
selectIds: [], //选中ID |
|
}, |
|
formRules1: { |
|
processCode: [{ required: true, message: '请选择', trigger: ['change', 'submit'] }], |
|
processName: [{ required: true, message: '请选择', trigger: ['change', 'submit'] }], |
|
craftCode: [{ required: true, message: '请选择', trigger: ['change', 'submit'] }], |
|
proDes: [{ required: true, message: '请选择', trigger: ['change', 'submit'] }], |
|
proHours: [{ required: true, message: '请输入', trigger: ['change', 'submit'] }], |
|
isMain: [{ required: true, message: '请选择', trigger: ['change', 'submit'] }], |
|
processNo: [{ required: true, message: '请输入', trigger: ['change', 'submit'] }], |
|
}, |
|
formRules2: { |
|
projecCode: [{ required: true, message: '请选择', trigger: ['change', 'submit'] }], |
|
projectStandard: [{ required: true, message: '请输入', trigger: ['change', 'submit'] }], |
|
proHours: [{ required: true, message: '请输入', trigger: ['change', 'submit'] }], |
|
}, |
|
formRules3: { |
|
testType: [{ required: true, message: '请选择', trigger: ['change', 'submit'] }], |
|
tool: [{ required: true, message: '请选择', trigger: ['change', 'submit'] }], |
|
}, |
|
formRules4: { |
|
moldCode: [{ required: true, message: '请输入', trigger: ['change', 'submit'] }], |
|
}, |
|
treeNodes: {}, //选中组织树节点信息 |
|
partInfoData: {}, //零件信息 |
|
tempId: 0, |
|
projectOptions: [], //检验项目列表 |
|
standardList: [], //检验标准列表 |
|
}; |
|
}, |
|
mounted() { |
|
this.getModelList(); |
|
this.getDetails(); |
|
|
|
this.getProcessSetList(); |
|
this.getCraftAbilityList(); |
|
this.getPqList(); |
|
this.getProject(); |
|
this.getStandardList(); |
|
}, |
|
methods: { |
|
// 获取检验项目名字 |
|
projectChange(row,index) { |
|
let selectName = this.projectOptions.find(item => item.id == row.projecCode); |
|
this.form2.tableData2[index].projectName = selectName.name; |
|
}, |
|
// 获取检验标准名字 |
|
standardChange(row,index) { |
|
let selectName = this.standardList.find(item => item.id == row.projectStandard); |
|
this.form2.tableData2[index].projectStandardName = selectName.name; |
|
}, |
|
getStandardList() { |
|
getStandardList().then(res => { |
|
this.standardList = res.data.data; |
|
}); |
|
}, |
|
getProject() { |
|
getProject({ size: 999999, current: 1 }).then(res => { |
|
this.projectOptions = res.data.data.records; |
|
}); |
|
}, |
|
// 获取工序名字 |
|
processChange(row, index) { |
|
let selectName = this.processSetOption.find(item => item.id == row.processCode); |
|
this.form1.tableData1[index].processName = selectName.name; |
|
}, |
|
// 获取工艺能力名字 |
|
craftChange(row, index) { |
|
let selectName = this.craftAbilityOption.find(item => item.id == row.craftCode); |
|
this.form1.tableData1[index].craftName = selectName.name; |
|
}, |
|
// 获取生产标识列表 |
|
getPqList() { |
|
getPqList().then(res => { |
|
this.rankList = res.data.data; |
|
}); |
|
}, |
|
// 工艺模板列表 |
|
async getModelList() { |
|
await getModelList().then(res => { |
|
this.modelOption = res.data.data; |
|
}); |
|
}, |
|
// 工序列表查询 |
|
getProcessSetList() { |
|
getProcessSetList().then(res => { |
|
this.processSetOption = res.data.data; |
|
}); |
|
}, |
|
// 工艺能力列表查询 |
|
getCraftAbilityList() { |
|
getCraftAbilityList().then(res => { |
|
this.craftAbilityOption = res.data.data; |
|
}); |
|
}, |
|
// 导入模板 |
|
modelLevelChange() { |
|
getModelDetailList({ modelId: this.modelLevel }).then(res => { |
|
// this.form1.tableData1=res.data.data; |
|
const templateData = res.data.data; |
|
const existing = [...this.form1.tableData1]; |
|
// 将模板中的工序数据映射为表格所需格式 |
|
const mappedData = templateData.map((item, index) => { |
|
// 如果模板中的字段和表格字段一致,可直接使用;否则需转换 |
|
return { |
|
id: null, // 新增时通常设为 null |
|
processNo: this.getProcessNo(this.form1.tableData1), // 自动生成工序号 |
|
processCode: item.processCode || item.id, // 假设模板中有 processCode 或 id |
|
processName: item.processName, |
|
craftCode: item.craftCode, |
|
craftName: item.craftName, |
|
proDes: item.proDes || item.description, |
|
proHours: item.proHours || '', |
|
setoutHours: item.setoutHours || '', |
|
isMain: item.isMain || '0', |
|
// 其他字段按需补充... |
|
}; |
|
}); |
|
// 赋值(方式1)或追加(方式2) |
|
this.form1.tableData1 = [...existing, ...mappedData]; // 追加模式 |
|
|
|
this.$message.success('模板导入成功'); |
|
}); |
|
}, |
|
// 获取零件信息详情数据 |
|
async getDetails() { |
|
await getProcessAuthorized({ |
|
partId: this.partId, |
|
taskId: this.updateRow.id, |
|
rank: this.rank, |
|
version:this.updateRow.version |
|
}).then(res => { |
|
this.data = this.transformCraftTree(res.data.data); |
|
this.partInfoData = res.data.data.partInfo; |
|
if (this.partInfoData.partName == '石墨模') { |
|
let graphite = this.modelOption.find(item => item.name == '石墨模'); |
|
this.modelLevel = graphite.id; |
|
this.modelLevelChange(); |
|
} |
|
}); |
|
}, |
|
// 组织树转换 |
|
transformCraftTree(responseData) { |
|
const { partInfo, craftList } = responseData; |
|
const partCode = partInfo.partCode; |
|
|
|
// 构建树形结构并保留原始数据引用 |
|
const tree = [ |
|
{ |
|
label: partCode, |
|
disabled: true, |
|
rawData: partInfo, // 保存零件原始数据 |
|
children: craftList.map(craft => { |
|
const { craftInfo, processList } = craft; |
|
// 拼接二级节点标签:roamNo-craftNo |
|
const craftLabel = `${craftInfo.roamNo}-${craftInfo.craftNo}`; |
|
|
|
return { |
|
...craftInfo, |
|
label: craftLabel, |
|
processList: processList.map(process => { |
|
return process.processInfo; |
|
}), |
|
rawData: craftInfo, // 保存工艺原始数据 |
|
children: processList.map(process => { |
|
const { processInfo, projectList, measuringToolList, moldToolList } = process; |
|
// 三级节点:工序名称 |
|
const processLabel = processInfo.processName; |
|
|
|
return { |
|
...processInfo, |
|
label: processLabel, |
|
rawData: { |
|
processInfo, |
|
projectList, |
|
measuringToolList, |
|
moldToolList, |
|
}, // 保存工序及关联数据 |
|
children: projectList.map(project => ({ |
|
label: project.projectName, // 四级节点:项目名称 |
|
rawData: project, // 保存项目原始数据 |
|
disabled: true, |
|
})), |
|
}; |
|
}), |
|
}; |
|
}), |
|
}, |
|
]; |
|
|
|
return tree; |
|
}, |
|
// 组织树点击 |
|
handleNodeClick(nodes, node, self) { |
|
if (nodes.disabled) { |
|
return false; |
|
} |
|
this.treeNodes = nodes; |
|
this.treeLeave = node.level; |
|
|
|
// 清空现有表格数据 |
|
this.form1.tableData1 = []; |
|
this.form2.tableData2 = []; |
|
this.form3.tableData3 = []; |
|
this.form4.tableData4 = []; |
|
this.form1.deleteIds = []; |
|
this.form2.deleteIds = []; |
|
this.form3.deleteIds = []; |
|
this.form4.deleteIds = []; |
|
|
|
// 根据节点层级切换标签页 |
|
if (this.treeLeave === 2) { |
|
this.activeName = '1'; |
|
this.form1.tableData1 = nodes.processList; |
|
} |
|
// 根据节点层级加载对应数据 |
|
if (this.treeLeave === 3) { |
|
this.activeName = '2'; |
|
// 三级节点:工序级,加载工序相关数据 |
|
const { processInfo, projectList, measuringToolList, moldToolList } = nodes.rawData; |
|
|
|
// 加载项目表格数据 |
|
this.form2.tableData2 = projectList; |
|
|
|
// 加载量具表格数据 |
|
this.form3.tableData3 = measuringToolList; |
|
|
|
// 加载工装表格数据 |
|
this.form4.tableData4 = moldToolList; |
|
} |
|
}, |
|
// 右侧tab切换 |
|
handleClick(value) { |
|
console.log(999999, value); |
|
this.form1.deleteIds = []; |
|
this.form2.deleteIds = []; |
|
this.form3.deleteIds = []; |
|
this.form4.deleteIds = []; |
|
}, |
|
// 切换等级 |
|
leavelChange() { |
|
// this.$message.success('保存成功'); |
|
this.getDetails(); |
|
this.form1.deleteIds = []; |
|
this.form2.deleteIds = []; |
|
this.form3.deleteIds = []; |
|
this.form4.deleteIds = []; |
|
}, |
|
// 获取工序号 |
|
getProcessNo(table) { |
|
const len = table; |
|
let processNo = (len.length + 1) * 5; |
|
|
|
if (processNo.toString().length === 1) { |
|
processNo = '000' + processNo; |
|
} else if (processNo.toString().length === 2) { |
|
processNo = '00' + processNo; |
|
} else if (processNo.toString().length === 3) { |
|
processNo = '0' + processNo; |
|
} else if (processNo.toString().length === 4) { |
|
processNo = '' + processNo; |
|
} |
|
return processNo; |
|
}, |
|
// 插入一行 |
|
addTable() { |
|
this.tempId++; |
|
if (this.activeName == '1') { |
|
this.form1.tableData1.push({ |
|
_tempId: this.tempId, // 临时唯一标识 |
|
id: null, |
|
processNo: this.getProcessNo(this.form1.tableData1), |
|
}); |
|
} |
|
if (this.activeName == '2') { |
|
this.form2.tableData2.push({ |
|
_tempId: this.tempId, // 临时唯一标识 |
|
id: null, |
|
trialNo: this.getProcessNo(this.form2.tableData2), |
|
}); |
|
} |
|
if (this.activeName == '3') { |
|
this.form3.tableData3.push({ |
|
_tempId: this.tempId, // 临时唯一标识 |
|
id: null, |
|
trialNo: this.getProcessNo(this.form3.tableData3), |
|
}); |
|
} |
|
if (this.activeName == '4') { |
|
this.form4.tableData4.push({ |
|
_tempId: this.tempId, // 临时唯一标识 |
|
id: null, |
|
trialNo: this.getProcessNo(this.form4.tableData4), |
|
}); |
|
} |
|
}, |
|
handleSelectionChange1(val) { |
|
this.form1.selectIds = val.map(row => row.id || row._tempId); |
|
}, |
|
handleSelectionChange2(val) { |
|
this.form2.selectIds = val.map(row => row.id || row._tempId); |
|
// this.form2.deleteIds = val.filter(row => row.id != null).map(row => row.id); |
|
}, |
|
handleSelectionChange3(val) { |
|
this.form3.selectIds = val.map(row => row.id || row._tempId); |
|
// this.form3.deleteIds = val.filter(row => row.id != null).map(row => row.id); |
|
}, |
|
handleSelectionChange4(val) { |
|
this.form4.selectIds = val.map(row => row.id || row._tempId); |
|
// this.form4.deleteIds = val.filter(row => row.id != null).map(row => row.id); |
|
}, |
|
// 删除选择行 |
|
delTable() { |
|
const active = this.activeName; |
|
let message = '请至少选择一条数据进行删除'; |
|
|
|
if (active === '1') { |
|
if (this.form1.selectIds.length === 0) { |
|
this.$message.warning(message); |
|
return; |
|
} |
|
this.form1.deleteIds = this.form1.tableData1 |
|
.filter(row => this.form1.selectIds.includes(row.id || row._tempId)) |
|
.filter(row => row.id != null && row.id !== '') // 只保留有真实 id 的行 |
|
.map(row => row.id); |
|
this.form1.tableData1 = this.form1.tableData1.filter(row => { |
|
const key = row.id || row._tempId; |
|
return !this.form1.selectIds.includes(key); |
|
}); |
|
|
|
this.form1.selectIds = []; // 清空选中 |
|
} else if (active === '2') { |
|
if (this.form2.selectIds.length === 0) { |
|
this.$message.warning(message); |
|
return; |
|
} |
|
this.form2.deleteIds = this.form2.tableData2 |
|
.filter(row => this.form2.selectIds.includes(row.id || row._tempId)) |
|
.filter(row => row.id != null && row.id !== '') |
|
.map(row => row.id); |
|
|
|
this.form2.tableData2 = this.form2.tableData2.filter(row => { |
|
const key = row.id || row._tempId; |
|
return !this.form2.selectIds.includes(key); |
|
}); |
|
this.form2.selectIds = []; |
|
} else if (active === '3') { |
|
if (this.form3.selectIds.length === 0) { |
|
this.$message.warning(message); |
|
return; |
|
} |
|
this.form3.deleteIds = this.form3.tableData3 |
|
.filter(row => this.form3.selectIds.includes(row.id || row._tempId)) |
|
.filter(row => row.id != null && row.id !== '') |
|
.map(row => row.id); |
|
this.form3.tableData3 = this.form3.tableData3.filter(row => { |
|
const key = row.id || row._tempId; |
|
return !this.form3.selectIds.includes(key); |
|
}); |
|
this.form3.selectIds = []; |
|
} else if (active === '4') { |
|
if (this.form4.selectIds.length === 0) { |
|
this.$message.warning(message); |
|
return; |
|
} |
|
this.form4.deleteIds = this.form4.tableData4 |
|
.filter(row => this.form4.selectIds.includes(row.id || row._tempId)) |
|
.filter(row => row.id != null && row.id !== '') |
|
.map(row => row.id); |
|
|
|
this.form4.tableData4 = this.form4.tableData4.filter(row => { |
|
const key = row.id || row._tempId; |
|
return !this.form4.selectIds.includes(key); |
|
}); |
|
this.form4.selectIds = []; |
|
} |
|
|
|
this.$message.success('删除成功'); |
|
}, |
|
checkingProNo(table) { |
|
// 验证工序号是否重复 |
|
const tableData = table; |
|
const proNoList = []; |
|
tableData.forEach(item => { |
|
proNoList.push(item.processNo); |
|
}); |
|
const list = Array.from(new Set(proNoList)); |
|
if (tableData.length !== list.length) { |
|
// return this.$message.warning('工序号重复,请修改!'); |
|
return true; |
|
} else { |
|
return false; |
|
} |
|
}, |
|
saveInfo() { |
|
|
|
if (this.activeName == '1') { |
|
// 调用单个 Form 的校验方法 |
|
this.$refs.tableForm1.validate(async (isValid, invalidFields) => { |
|
if (isValid) { |
|
if (Object.keys(this.treeNodes).length == 0) { |
|
return this.$message.warning('请先选择左侧组织树数据'); |
|
} |
|
if (this.checkingProNo(this.form1.tableData1)) { |
|
return this.$message.warning('工序号重复,请修改!'); |
|
} |
|
// 验证涂色标的工时是否大于0 |
|
let isReturn = 0; |
|
this.form1.tableData1.forEach(item => { |
|
if (item.processName === '涂色标' && item.hourQuota <= 0) { |
|
isReturn = 1; |
|
} |
|
}); |
|
// 验证主工序 是否设置 |
|
let noMainPro = false; |
|
const arr = []; |
|
const pidList = []; |
|
const tableData = this.form1.tableData1; |
|
tableData.forEach(item => { |
|
if (item.isMain) { |
|
noMainPro = true; |
|
} |
|
arr.push(item.processName); |
|
if (item.processName == '镀后检验') { |
|
pidList.push(item.pid); |
|
} |
|
}); |
|
|
|
if (!noMainPro) { |
|
return this.$message.error('此套工艺未含主工序,请设置主工序!!!'); |
|
} |
|
if (isReturn == 1) { |
|
return this.$message.warning('涂色标的工时定额必须大于0,请修改!'); |
|
} |
|
|
|
const res = await getPartDetail(this.partId); |
|
console.log(res); |
|
let dsCraftMold = res.data.data.dsPartEntity; |
|
|
|
if (dsCraftMold.markingsTest == '1') { |
|
if (!arr.includes('涂色标')) { |
|
return this.$message.warning('该工艺包含的工序必须包含涂色标'); |
|
} |
|
} |
|
|
|
// 验证热处理工序是否存在 |
|
if (dsCraftMold.hardness == '1') { |
|
if (!arr.includes('热处理检验')) { |
|
this.$message({ |
|
dangerouslyUseHTMLString: true, |
|
message: |
|
'<strong style="font-size:22px" >' + |
|
'该零件硬度为 ' + |
|
dsCraftMold.hardness + |
|
', 没有热处理检验工序。' + |
|
'</strong>', |
|
showClose: true, |
|
duration: 7000, |
|
type: 'warning', |
|
}); |
|
} else { |
|
this.$message({ |
|
dangerouslyUseHTMLString: true, |
|
message: |
|
'<strong style="font-size:22px" >' + |
|
'该零件硬度为 ' + |
|
dsCraftMold.hardness + |
|
', 存在热处理检验工序。' + |
|
'</strong>', |
|
showClose: true, |
|
duration: 7000, |
|
type: 'success', |
|
}); |
|
} |
|
} |
|
|
|
// 验证镀种存在 SB 判断工序是否存在喷砂 |
|
if (dsCraftMold.plate != null && dsCraftMold.plate.indexOf('SB') != -1) { |
|
if (!arr.includes('喷砂')) { |
|
this.$message({ |
|
dangerouslyUseHTMLString: true, |
|
message: |
|
'<strong style="font-size:22px" >' + |
|
'该镀种存在 SB ' + |
|
dsCraftMold.plate + |
|
', 没有喷砂工序。' + |
|
'</strong>', |
|
showClose: true, |
|
duration: 7000, |
|
type: 'warning', |
|
}); |
|
} |
|
} |
|
|
|
// 判断镀种中是否包含 不钝化 |
|
if (dsCraftMold.plate != null && dsCraftMold.plate.indexOf('不钝化') != -1) { |
|
// 如果存在镀后检验工序 |
|
if (pidList.length > 0) { |
|
// 拿出所有镀后检验工序对应的实验项目 |
|
let isExist = 0; |
|
const res1 = await this.$ajax.post('dsMatingInfo/loadMatingInfoByPidList', { |
|
pidList: pidList, |
|
miType: 1, |
|
}); |
|
res1.data.forEach(item => { |
|
if (item.trialItem.indexOf('可焊性') != -1) { |
|
// 如果其中存在可焊性实验项目 |
|
isExist = 1; |
|
} |
|
}); |
|
if (isExist != 1) { |
|
this.$message({ |
|
dangerouslyUseHTMLString: true, |
|
message: |
|
'<strong style="font-size:22px" >' + |
|
'该零件镀种包含不钝化 ' + |
|
dsCraftMold.plate + |
|
', 镀后检验中未设置可焊性检测试验项目。' + |
|
'</strong>', |
|
showClose: true, |
|
duration: 7000, |
|
type: 'warning', |
|
}); |
|
} |
|
} |
|
} |
|
// // yingGuangJian 荧光检验证 |
|
// if (dsCraftMold.fluorescenceCheck=='1') { |
|
// let flag = false; |
|
// arr.forEach((item) => { |
|
// if (item.indexOf('荧光检') !== -1) { |
|
// flag = true; |
|
// } |
|
// }); |
|
// if (!flag) { |
|
// return this.$message({ |
|
// dangerouslyUseHTMLString: true, |
|
// message: |
|
// '<strong style="font-size:22px" >' + |
|
// '该工艺包含的工序必须包含荧光检工序' + |
|
// '</strong>', |
|
// showClose: true, |
|
// duration: 7000, |
|
// type: 'warning' |
|
// }); |
|
// } |
|
// } |
|
// // heatTreatmentTest 热处理检验验证 |
|
// if (dsCraftMold.hotDispose=='1') { |
|
// if (!arr.includes('热处理检验')) { |
|
// return this.$message({ |
|
// dangerouslyUseHTMLString: true, |
|
// message: |
|
// '<strong style="font-size:22px" >' + |
|
// '该工艺包含的工序必须包含热处理检验工序' + |
|
// '</strong>', |
|
// showClose: true, |
|
// duration: 7000, |
|
// type: 'warning' |
|
// }); |
|
// } |
|
// } |
|
|
|
// // penmark 喷码验证 |
|
// if (dsCraftMold.inkjetPrinting=='1') { |
|
// let flag = false; |
|
// arr.forEach((item) => { |
|
// if (item.indexOf('喷码') !== -1) { |
|
// flag = true; |
|
// } |
|
// }); |
|
// if (!flag) { |
|
// return this.$message({ |
|
// dangerouslyUseHTMLString: true, |
|
// message: |
|
// '<strong style="font-size:22px" >' + |
|
// '该工艺包含的工序必须包含喷码工序' + |
|
// '</strong>', |
|
// showClose: true, |
|
// duration: 7000, |
|
// type: 'warning' |
|
// }); |
|
// } |
|
// } |
|
this.craftLoading = true |
|
|
|
// 处理传参 |
|
if (this.treeNodes.rawData.qualityGradeCode) { |
|
let qualityInfo = this.rankList.find( |
|
item => item.code == this.treeNodes.rawData.qualityGradeCode |
|
); |
|
// this.treeNodes.rawData.qualityGradeName = qualityInfo.name; |
|
} |
|
let query_ = { |
|
dsPart: this.partInfoData, //零件信息 |
|
craft: this.treeNodes.rawData, //工艺信息 |
|
processList: this.form1.tableData1, //工序集合 |
|
deleteIds: this.form1.deleteIds, //删除ids |
|
}; |
|
|
|
authorizedAccomplish2(query_).then(res => { |
|
this.$message.success('保存成功'); |
|
this.craftLoading = false |
|
this.getDetails(); |
|
}); |
|
} |
|
}); |
|
} |
|
if (this.activeName == '2') { |
|
this.$refs.tableForm2.validate((isValid, invalidFields) => { |
|
if (isValid) { |
|
this.craftLoading = true |
|
let query_ = { |
|
processEntity: this.treeNodes.rawData.processInfo, //工序 |
|
processProjectEntityList: this.form2.tableData2, //项目 |
|
deleteIds: this.form2.deleteIds, //删除ids |
|
}; |
|
|
|
saveProcessProjectSave(query_).then(res => { |
|
this.$message.success('保存成功'); |
|
this.craftLoading = false |
|
this.getDetails(); |
|
}); |
|
} |
|
}); |
|
} |
|
if (this.activeName == '3') { |
|
this.$refs.tableForm3.validate((isValid, invalidFields) => { |
|
if (isValid) { |
|
this.craftLoading = true |
|
let query_ = { |
|
processEntity: this.treeNodes.rawData.processInfo, //工序 |
|
processMeasuringToolEntities: this.form3.tableData3, //尺寸量具 |
|
deleteIds: this.form3.deleteIds, //删除ids |
|
}; |
|
saveProcessMeasuringTool(query_).then(res => { |
|
this.$message.success('保存成功'); |
|
this.craftLoading = false |
|
this.getDetails(); |
|
}); |
|
} |
|
}); |
|
} |
|
if (this.activeName == '4') { |
|
this.$refs.tableForm4.validate((isValid, invalidFields) => { |
|
if (isValid) { |
|
this.craftLoading = true |
|
let query_ = { |
|
processEntity: this.treeNodes.rawData.processInfo, //工序 |
|
processMoldToolEntities: this.form4.tableData4, //尺寸量具 |
|
deleteIds: this.form4.deleteIds, //删除ids |
|
}; |
|
saveProcessMoldTool(query_).then(res => { |
|
this.$message.success('保存成功'); |
|
this.craftLoading = false |
|
this.getDetails(); |
|
}); |
|
} |
|
}); |
|
} |
|
}, |
|
}, |
|
}; |
|
</script> |
|
<style lang="scss" scoped> |
|
.box-card { |
|
display: flex; |
|
flex-direction: row; |
|
height: calc(100vh - 200px); |
|
|
|
.process-left { |
|
// padding: 20px; |
|
border: 1px solid #ccc; |
|
|
|
.process-select { |
|
padding: 12px; |
|
background: #e4e7ed; |
|
} |
|
} |
|
:deep(.el-form-item) { |
|
margin-bottom: 0px !important; |
|
} |
|
.process-right { |
|
padding: 12px; |
|
flex: 1; |
|
border: 1px solid #ccc; |
|
border-left: 0; |
|
|
|
.table-btn { |
|
width: 100%; |
|
height: 50px; |
|
|
|
.table-btn-left { |
|
float: left; |
|
} |
|
|
|
.table-btn-right { |
|
float: right; |
|
} |
|
} |
|
} |
|
} |
|
|
|
:deep(.el-table .el-table__cell) { |
|
height: 50px !important; |
|
padding: 0 !important; |
|
line-height: 50px !important; |
|
} |
|
.tableHeight { |
|
height: calc(100vh - 50px - 80px - 40px - 94px - 50px - 50px); |
|
} |
|
</style>
|
|
|