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.
314 lines
12 KiB
314 lines
12 KiB
<script>
|
|
import {searchCodeItemAllDefsSeq, searchCodeItemDefs, searchCodeItemDefsSeq} from "../../../api/code/codeItemDef";
|
|
import {searchCodeGenerationItemValueList} from "../../../api/code/codeItemValue";
|
|
import {codeNoGenerate, saveDrawing} from "../../../api/code/codeDrawing";
|
|
import dayjs from "dayjs";
|
|
import {searchCodeParameterById} from "../../../api/code/codeParameterDef";
|
|
import itemValue from "./item/itemValue.vue";
|
|
|
|
export default {
|
|
name: "CodeGeneration",
|
|
computed: {
|
|
itemValue() {
|
|
return itemValue
|
|
},
|
|
showConditionName() {
|
|
return (val) => {
|
|
if (val && val.length > 0){
|
|
return val[0].conditionName
|
|
}
|
|
return ''
|
|
};
|
|
}
|
|
},
|
|
data(){
|
|
return {
|
|
codeItemDefs: [],
|
|
searchModel:{
|
|
drawingNo: "",
|
|
drawingNoNew: "",
|
|
drawingDesc: "",
|
|
remark: "",
|
|
seqFlag: "N",
|
|
},
|
|
codeItemTypes: [],
|
|
codeItemValues: [],
|
|
width: 800,
|
|
loadingIndex:-1,
|
|
checkCodeFlag:'N',
|
|
getCodeNoLoading: false,
|
|
saveCodeLoading: false,
|
|
}
|
|
},
|
|
created() {
|
|
this.searchCodeItemDefs();
|
|
this.searchCodeParameterById();
|
|
},
|
|
beforeDestroy() {
|
|
|
|
},
|
|
methods:{
|
|
searchCodeItemDefs(){
|
|
let params = {
|
|
site:this.$store.state.user.site,
|
|
}
|
|
this.codeItemTypes = [];
|
|
this.codeItemValues = [];
|
|
searchCodeItemAllDefsSeq(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.codeItemDefs = data.rows;
|
|
for (let i = 0; i < this.codeItemDefs.length; i++) {
|
|
let arr = this.codeItemDefs[i].itemType.split('或');
|
|
this.codeItemTypes[i] = arr[0]
|
|
this.codeItemValues[i] = undefined
|
|
}
|
|
}else {
|
|
this.$message.warning(data.msg);
|
|
}
|
|
}).catch((error) => {
|
|
this.$message.error(error);
|
|
});
|
|
},
|
|
changeCodeItemType(index){
|
|
this.$set(this.codeItemValues, index, undefined)
|
|
this.changeRowCodeItemValue(index)
|
|
},
|
|
getCodeNoBtn(){
|
|
if (this.codeItemDefs.length === 0){
|
|
this.showAlert("尚未设置编码规则!请先到“编码组成元素定义”中定义!")
|
|
return;
|
|
}
|
|
// this.getCodeNoLoading = true;
|
|
let params = [];
|
|
// 验证是否都输入
|
|
for (let i = 0; i < this.codeItemDefs.length; i++) {
|
|
if (!this.codeItemValues[i] && !(this.codeItemDefs[i].itemType.includes('流水号') && this.codeItemTypes[i] === '流水号')){
|
|
this.showAlert(`元素${this.codeItemDefs[i].itemDesc}的值为空`);
|
|
this.getCodeNoLoading = false;
|
|
return;
|
|
}
|
|
if (this.codeItemDefs[i].itemType.includes('手工') && this.codeItemTypes[i] === '手工' && this.codeItemValues[i].length > this.codeItemDefs[i].bits ){
|
|
this.showAlert(`元素${this.codeItemDefs[i].itemDesc}的值长度不正确,编码位数应为${this.codeItemDefs[i].bits}`)
|
|
this.getCodeNoLoading = false;
|
|
return;
|
|
}
|
|
// let paramsData = {
|
|
// codeItemDef: {...this.codeItemDefs[i]},
|
|
// currentValueNo:"",
|
|
// currentSeqValueNo:"",
|
|
// currentCodeDesc:"",
|
|
// currentCodeRemark:"",
|
|
// codeNo:"",
|
|
// codeHasSeq:"N",
|
|
// hasSeqCount:0,
|
|
// };
|
|
// if (this.codeItemDefs[i].itemType.includes('手工') && this.codeItemTypes[i] === '手工'){
|
|
// paramsData.currentValueNo = this.codeItemValues[i];
|
|
// paramsData.currentSeqValueNo = `{${paramsData.currentValueNo}}`
|
|
// }else if (this.codeItemDefs[i].itemType.includes('选择') && this.codeItemTypes[i] === '选择'){
|
|
// // 寻找 简码
|
|
// paramsData.currentValueNo = this.getValueNo(this.codeItemDefs[i].itemValues,this.codeItemValues[i]).valueNo
|
|
// paramsData.currentSeqValueNo = `{${paramsData.currentValueNo}}`
|
|
// }else {
|
|
// paramsData.codeHasSeq = "Y";
|
|
// paramsData.hasSeqCount++;
|
|
// }
|
|
let paramsData = {
|
|
...this.codeItemDefs[i],
|
|
}
|
|
if (this.codeItemDefs[i].itemType.includes('手工') && this.codeItemTypes[i] === '手工'){
|
|
paramsData.value = this.codeItemValues[i];
|
|
paramsData.itemType = '手工'
|
|
}else if (this.codeItemDefs[i].itemType.includes('选择') && this.codeItemTypes[i] === '选择'){
|
|
// 寻找 简码
|
|
paramsData.name = this.codeItemDefs[i].itemValues[0].conditionName
|
|
paramsData.value = this.getValueNo(this.codeItemDefs[i].itemValues,this.codeItemValues[i]).valueNo
|
|
paramsData.label = this.getValueNo(this.codeItemDefs[i].itemValues,this.codeItemValues[i]).itemValue
|
|
paramsData.itemType = '选择'
|
|
}else if (this.codeItemDefs[i].itemType.includes('流水号') && this.codeItemTypes[i] === '流水号'){
|
|
paramsData.itemType = '流水号'
|
|
}
|
|
params.push(paramsData)
|
|
}
|
|
this.codeNoGenerate(params)
|
|
},
|
|
codeNoGenerate(params){
|
|
codeNoGenerate(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.searchModel = {...data.row}
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error) => {
|
|
this.$message.error(error);
|
|
})
|
|
},
|
|
getValueNo(arr,valueItemNo){
|
|
// 寻找 简码
|
|
return arr.find(item=>item.valueItemNo === valueItemNo)
|
|
},
|
|
showAlert(msg){
|
|
this.$alert(msg, '提示', {
|
|
confirmButtonText: '确定',
|
|
});
|
|
},
|
|
changeCodeItemValue(index,val){
|
|
let codeItemDef = this.codeItemDefs[index]
|
|
if (val === true && codeItemDef.itemByCondition === 'Y' && !this.codeItemValues[index]){
|
|
if (index === 0){
|
|
this.$message.warning("请先检查该元素的定义可选值设置中是否都已经维护了条件!")
|
|
}else {
|
|
// 请求后台,让后台校验参数/获得数据
|
|
let codeItemDefs = [];
|
|
for (let i = 0; i <= index; i++) {
|
|
let codeItemDef = {
|
|
...this.codeItemDefs[i],
|
|
value:this.codeItemValues[i]
|
|
}
|
|
codeItemDefs.push(codeItemDef)
|
|
}
|
|
this.searchCodeGenerationItemValueList(codeItemDefs,index)
|
|
}
|
|
}
|
|
},
|
|
searchCodeGenerationItemValueList(arr,index){
|
|
if (arr.length === 0){
|
|
return;
|
|
}
|
|
this.loadingIndex = index
|
|
this.codeItemDefs[index].itemValues = []
|
|
this.$set(this.codeItemDefs, index, {...this.codeItemDefs[index]})
|
|
searchCodeGenerationItemValueList(arr).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
let itemDefs = {...this.codeItemDefs[index], itemValues: data.rows}
|
|
this.$set(this.codeItemDefs, index, itemDefs)
|
|
}else {
|
|
this.$refs[`codeItemValue${index}`][0].blur();
|
|
this.$alert(data.msg, '提示', {
|
|
confirmButtonText: '确定',
|
|
});
|
|
}
|
|
this.loadingIndex = -1
|
|
}).catch((error)=>{
|
|
this.$message.error(error);
|
|
this.loadingIndex = -1
|
|
})
|
|
},
|
|
changeRowCodeItemValue(index){
|
|
// 值发生变化清空后续所有参数
|
|
if (this.checkCodeFlag === 'Y'){
|
|
for (let i = index+1; i < this.codeItemDefs.length; i++) {
|
|
if (this.codeItemDefs[i].itemByCondition === 'Y'){
|
|
this.$set(this.codeItemValues, i, undefined)
|
|
}
|
|
}
|
|
}
|
|
},
|
|
saveDrawing(){
|
|
let params = {
|
|
...this.searchModel,
|
|
site:this.$store.state.user.site,
|
|
creator:this.$store.state.user.name,
|
|
createDate:dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
|
}
|
|
this.saveCodeLoading = true;
|
|
saveDrawing(params).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.$alert(`成功获取并保存了编码${this.searchModel.drawingNo}`, '提示', {
|
|
confirmButtonText: '确定',
|
|
});
|
|
Object.keys(this.searchModel).forEach(key => {
|
|
this.$set(this.searchModel, key, '')
|
|
})
|
|
for (let i = 0; i < this.codeItemDefs.length; i++) {
|
|
this.$set(this.codeItemValues, i, undefined)
|
|
}
|
|
this.saveCodeLoading = false;
|
|
this.searchCodeItemDefs();
|
|
}else {
|
|
this.saveCodeLoading = false;
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error) => {
|
|
this.$message.error(error);
|
|
})
|
|
},
|
|
searchCodeParameterById(){
|
|
searchCodeParameterById(11).then(({data})=>{
|
|
if (data && data.code === 0){
|
|
this.checkCodeFlag = data.row.parameterValue
|
|
}else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}).catch((error)=>{
|
|
this.$message.error(error)
|
|
})
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<el-form :model="searchModel" label-position="top">
|
|
<el-row :gutter="20">
|
|
<el-col :span="6">
|
|
<el-form-item label="编码:">
|
|
<el-input readonly v-model="searchModel.drawingNo"></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item label=" ">
|
|
<el-button type="primary" :loading="getCodeNoLoading" @click="getCodeNoBtn">获取编码</el-button>
|
|
<el-button type="primary" :loading="saveCodeLoading" @click="saveDrawing">占有编码</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<el-form-item label="编码描述:">
|
|
<el-input readonly v-model="searchModel.drawingDesc"></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<el-form-item label="备注">
|
|
<el-input readonly v-model="searchModel.remark"></el-input>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<!-- {{codeItemDefs}}-->
|
|
<div style="margin-top: 10px;border-top: 1px solid #ccc;padding-top: 10px;height: 680px;overflow-y: auto" :style="{width: `${width}px`}">
|
|
<el-form label-position="left" label-width="100px">
|
|
<el-form-item :label="`${item.itemDesc}:`" v-for="(item, index) in codeItemDefs" :key="index" style="margin-bottom: 10px">
|
|
<div v-if="item.itemType.includes('或')" style="width: 240px;display: inline-block">
|
|
<el-radio-group v-model="codeItemTypes[index]" @change="changeCodeItemType(index)">
|
|
<el-radio v-if="item.itemType.includes('选择')" label="选择">选择</el-radio>
|
|
<el-radio v-if="item.itemType.includes('手工')" label="手工">手工</el-radio>
|
|
<el-radio v-if="item.itemType.includes('流水号')" label="流水号">流水号</el-radio>
|
|
</el-radio-group>
|
|
</div>
|
|
<div style="display: inline-block;" :style="{width: `${item.itemType.includes('或')?(width-240-205):(width-200)}px`}">
|
|
<el-select
|
|
:loading="loadingIndex === index"
|
|
:ref="`codeItemValue${index}`"
|
|
clearable v-if="codeItemTypes[index] === '选择'"
|
|
@change="changeRowCodeItemValue(index)"
|
|
@visible-change="(val)=>changeCodeItemValue(index,val)"
|
|
style="width: 100%;"
|
|
v-model="codeItemValues[index]">
|
|
<el-option :value="val.valueItemNo" :label="val.itemValue" v-for="(val , i) in item.itemValues" :key="i"></el-option>
|
|
</el-select>
|
|
<el-input v-if="codeItemTypes[index] === '手工'" placeholder="请输入" v-model="codeItemValues[index]"></el-input>
|
|
<el-input v-if="codeItemTypes[index] === '流水号'" disabled v-model="codeItemValues[index]"></el-input>
|
|
</div>
|
|
<div style="width: 90px;display: inline-block" v-if="showConditionName(item.itemValues) !== ''">
|
|
<span v-if="">(</span><span>{{showConditionName(item.itemValues)}}</span><span>)</span>
|
|
</div>
|
|
</el-form-item>
|
|
</el-form>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
</style>
|