9 changed files with 895 additions and 69 deletions
-
2src/api/chooselist/chooselist.js
-
12src/api/test/testSoBom.js
-
113src/views/modules/common/chooseListDemo.vue
-
16src/views/modules/common/numberInput.vue
-
2src/views/modules/proofing/requestForProofing.vue
-
16src/views/modules/quotation/sellForQuotation/quotationDetail.vue
-
6src/views/modules/sys/dict-data-select.vue
-
186src/views/modules/test/requestForTest.vue
-
611src/views/modules/test/testSoBom/testTable.vue
@ -0,0 +1,12 @@ |
|||||
|
import {createAPI} from "../../utils/httpRequest"; |
||||
|
|
||||
|
/** |
||||
|
* 查询测试产品结构 |
||||
|
* @param data |
||||
|
* @returns {*} |
||||
|
*/ |
||||
|
export const selectTestSoBom = (data) => createAPI(`/test/soBom/list`,'post',data) |
||||
|
export const saveTestSoBom = (data) => createAPI(`/test/soBom/save`,'post',data) |
||||
|
export const updateTestSoBom = (data) => createAPI(`/test/soBom/update`,'post',data) |
||||
|
export const removeTestSoBom = (data) => createAPI(`/test/soBom/remove`,'post',data) |
||||
|
export const removeBatchTestSoBom = (data) => createAPI(`/test/soBom/removeBatch`,'post',data) |
||||
@ -0,0 +1,113 @@ |
|||||
|
<script> |
||||
|
import {chooseList} from "../../../api/chooselist/chooselist"; |
||||
|
export default { |
||||
|
name: "chooseListDemo", |
||||
|
props:{ |
||||
|
searchList:{ |
||||
|
type: Array, |
||||
|
required:true |
||||
|
}, |
||||
|
columnList:{ |
||||
|
type: Array, |
||||
|
required: true, |
||||
|
}, |
||||
|
tagNo:{ |
||||
|
type: String, |
||||
|
required: true |
||||
|
}, |
||||
|
useSite:{ |
||||
|
type:Boolean, |
||||
|
default: true, |
||||
|
} |
||||
|
}, |
||||
|
data(){ |
||||
|
return{ |
||||
|
searchModel:{}, |
||||
|
chooseListData:[], |
||||
|
visible:false |
||||
|
} |
||||
|
}, |
||||
|
methods:{ |
||||
|
openChooseList(){ |
||||
|
this.searchList.forEach((item)=>{ |
||||
|
this.searchModel = {} |
||||
|
this.$nextTick(() => { |
||||
|
this.$set(this.searchModel, item.value, undefined); |
||||
|
}); |
||||
|
}) |
||||
|
this.searchBtn() |
||||
|
}, |
||||
|
closeChooseList(){ |
||||
|
this.chooseListData = []; |
||||
|
}, |
||||
|
searchBtn(){ |
||||
|
let params = JSON.parse(JSON.stringify(this.searchModel)) |
||||
|
params.tagNo = this.tagNo |
||||
|
params.columnList = this.columnList.map((item)=>item.columnProp) |
||||
|
params.site = this.useSite?this.$store.state.user.site:'' |
||||
|
chooseList(params).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.chooseListData = data.baseListData; |
||||
|
}else { |
||||
|
this.$message.error(data.msg) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
getRowData(row) { |
||||
|
this.visible = false |
||||
|
this.$emit('getBaseData',row) |
||||
|
}, |
||||
|
init(){ |
||||
|
this.visible = true |
||||
|
} |
||||
|
}, |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<div class="chooseListDemo"> |
||||
|
<el-dialog v-bind="$attrs" :visible.sync="visible" v-on="$listeners" @open="openChooseList" @close="closeChooseList"> |
||||
|
<el-form :model="searchModel" label-position="top"> |
||||
|
<el-row :gutter="20"> |
||||
|
<el-col :span="6" v-for="(item,index) in searchList" :key="index"> |
||||
|
<el-form-item :label="item.label"> |
||||
|
<el-input v-model="searchModel[item.value]" clearable></el-input> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="6"> |
||||
|
<el-form-item label=" "> |
||||
|
<el-button type="primary" @click="searchBtn">查询</el-button> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-form> |
||||
|
<el-table |
||||
|
height="30vh" |
||||
|
:data="chooseListData" |
||||
|
border @row-dblclick="getRowData" |
||||
|
style="width: 100%;"> |
||||
|
<el-table-column |
||||
|
v-for="(item,index) in columnList" :key="index" |
||||
|
:sortable="item.columnSortable" |
||||
|
:prop="item.columnProp" |
||||
|
:header-align="item.headerAlign" |
||||
|
:show-overflow-tooltip="item.showOverflowTooltip" |
||||
|
:align="item.align" |
||||
|
:fixed="item.fixed===''?false:item.fixed" |
||||
|
:min-width="item.columnWidth" |
||||
|
:label="item.columnLabel"> |
||||
|
<template slot-scope="scope"> |
||||
|
{{ scope.row[item.columnProp] }} |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<span slot="footer" class="dialog-footer"> |
||||
|
|
||||
|
</span> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<style scoped> |
||||
|
|
||||
|
</style> |
||||
@ -0,0 +1,16 @@ |
|||||
|
<script> |
||||
|
export default { |
||||
|
name:"number-input" |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<el-input-number style="width: 100%;margin-top: -5px;" v-on="$listeners" v-bind="$attrs" :controls="false"></el-input-number> |
||||
|
</template> |
||||
|
|
||||
|
<style scoped> |
||||
|
.el-input-number /deep/ .el-input__inner{ |
||||
|
text-align: right; |
||||
|
padding-right: 5px !important; |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,611 @@ |
|||||
|
<script> |
||||
|
import { |
||||
|
selectTestSoBom, |
||||
|
saveTestSoBom, |
||||
|
removeTestSoBom, |
||||
|
updateTestSoBom, |
||||
|
removeBatchTestSoBom |
||||
|
} from "../../../../api/test/testSoBom"; |
||||
|
import {searchPart, searchPartList} from '@/api/part/partInformation.js'; |
||||
|
import numberInput from "../../common/numberInput.vue"; |
||||
|
export default { |
||||
|
name: "testTable", |
||||
|
components:{ |
||||
|
numberInput, |
||||
|
}, |
||||
|
props:{ |
||||
|
dataList:{ |
||||
|
type: Array, |
||||
|
default:[], |
||||
|
}, |
||||
|
testNo:{ |
||||
|
type:String, |
||||
|
required:true |
||||
|
}, |
||||
|
columnList:{ |
||||
|
type: Array, |
||||
|
default: ()=>[], |
||||
|
}, |
||||
|
height:{ |
||||
|
type:Number, |
||||
|
default:300 |
||||
|
} |
||||
|
}, |
||||
|
model:{ |
||||
|
prop:"dataList", |
||||
|
event:"change" |
||||
|
}, |
||||
|
data(){ |
||||
|
return{ |
||||
|
partList:[], |
||||
|
partData:{ |
||||
|
partNo:undefined, |
||||
|
partDesc:undefined, |
||||
|
site:this.$store.state.user.site |
||||
|
}, |
||||
|
partDialogFlag:false, |
||||
|
testSoBomLabel:{ |
||||
|
componentPartNo: "物料编码", |
||||
|
partDesc:"物料描述", |
||||
|
requiredQty:"需求数量", |
||||
|
assemblyQty:"单位用量", |
||||
|
fixedScrapQty:"固定损耗", |
||||
|
scrapFactor:"报废率" |
||||
|
}, |
||||
|
testSoBomRule:{ |
||||
|
componentPartNo: [{required: true,message: ' ',trigger: ['change','blur']}], |
||||
|
partDesc: [{required: true,message: ' ',trigger: ['change','blur']}], |
||||
|
requiredQty: [{required: true,message: ' ',trigger: ['change','blur']}], |
||||
|
assemblyQty: [{required: true,message: ' ',trigger: ['change','blur']}], |
||||
|
fixedScrapQty: [{required: true,message: ' ',trigger: ['change','blur']}], |
||||
|
scrapFactor: [{required: true,message: ' ',trigger: ['change','blur']}], |
||||
|
}, |
||||
|
testSoBom:{ |
||||
|
site:this.$store.state.user.site, |
||||
|
testNo:undefined, |
||||
|
itemNo:undefined, |
||||
|
componentPartNo:undefined, |
||||
|
partDesc:undefined, |
||||
|
assemblyQty:0, |
||||
|
fixedScrapQty:0, |
||||
|
scrapFactor:0, |
||||
|
requiredQty:0, |
||||
|
issuedQty:undefined, |
||||
|
issuedDate:undefined, |
||||
|
reserveQty:0, |
||||
|
mateGroup:undefined, |
||||
|
notifiedQty:undefined, |
||||
|
rmTypeDb:0, |
||||
|
issuedType:undefined, |
||||
|
remark:undefined, |
||||
|
}, |
||||
|
selectionTestSoBomList:[], |
||||
|
testSoBomColumnList:[{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3ItemNo', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'itemNo', |
||||
|
headerAlign: 'center', |
||||
|
align: 'center', |
||||
|
columnLabel: '序号', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3ComponentPartNo', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'componentPartNo', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '物料编码', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3PartDesc', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'partDesc', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '物料名称', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3Spec', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'spec', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '规格型号', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3AssemblyQty', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'assemblyQty', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '单位用量', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3FixedScrapQty', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'fixedScrapQty', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '固定损耗', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3UmName', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'umName', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '计量单位', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3ScrapFactor', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'scrapFactor', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '报废率', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3RequiredQty', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'requiredQty', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '需求数量', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3ReserveQty', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'reserveQty', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '预留数量', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
}, |
||||
|
// { |
||||
|
// userId: this.$store.state.user.name, |
||||
|
// functionId: 102001, |
||||
|
// serialNumber: '102001Table3IssuedDate', |
||||
|
// tableId: '102001Table3', |
||||
|
// tableName: '测试产品结构', |
||||
|
// columnProp: 'issuedDate', |
||||
|
// headerAlign: 'center', |
||||
|
// align: 'left', |
||||
|
// columnLabel: '发料日期', |
||||
|
// columnHidden: false, |
||||
|
// columnImage: false, |
||||
|
// columnSortable: false, |
||||
|
// sortLv: 0, |
||||
|
// status: true, |
||||
|
// fixed: '', |
||||
|
// columnWidth: 100 |
||||
|
// }, |
||||
|
{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3Remark', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'remark', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '备注', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},{ |
||||
|
userId: this.$store.state.user.name, |
||||
|
functionId: 102001, |
||||
|
serialNumber: '102001Table3rmTypeDb', |
||||
|
tableId: '102001Table3', |
||||
|
tableName: '测试产品结构', |
||||
|
columnProp: 'rmTypeDb', |
||||
|
headerAlign: 'center', |
||||
|
align: 'left', |
||||
|
columnLabel: '是否主物料', |
||||
|
columnHidden: false, |
||||
|
columnImage: false, |
||||
|
columnSortable: false, |
||||
|
sortLv: 0, |
||||
|
status: true, |
||||
|
fixed: '', |
||||
|
columnWidth: 100 |
||||
|
},], |
||||
|
saveOrUpdateFlag:false, |
||||
|
} |
||||
|
}, |
||||
|
created() { |
||||
|
if (this.columnList.length !== 0){ |
||||
|
this.testSoBomColumnList = this.columnList |
||||
|
} |
||||
|
}, |
||||
|
methods:{ |
||||
|
closePartDialog(){ |
||||
|
this.partData = { |
||||
|
partNo: undefined, |
||||
|
partDesc: undefined, |
||||
|
site:this.$store.state.user.site |
||||
|
} |
||||
|
this.partList = []; |
||||
|
}, |
||||
|
initPartList(){ |
||||
|
searchPartList(this.partData).then(({data})=>{ |
||||
|
if (data && data.code === 200) { |
||||
|
this.partList = data.data; |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
dblClickPartTable(row){ |
||||
|
this.testSoBom.componentPartNo = row.partNo; |
||||
|
this.testSoBom.partDesc = row.partDesc; |
||||
|
this.partDialogFlag = false; |
||||
|
}, |
||||
|
testSoBomClickRow(row,column){ |
||||
|
if (column.label !== '操作'){ |
||||
|
this.$refs.testSoBomTable.toggleRowSelection(row,true) |
||||
|
} |
||||
|
}, |
||||
|
selectionTestSoBom(rows){ |
||||
|
this.selectionTestSoBomList = rows; |
||||
|
}, |
||||
|
saveTestSoBom(row){ |
||||
|
if (row){ |
||||
|
this.testSoBom = JSON.parse(JSON.stringify(row)) |
||||
|
} |
||||
|
this.saveOrUpdateFlag = true |
||||
|
}, |
||||
|
removeBatchTestSoBom(){ |
||||
|
if (this.dataList.length === 0){ |
||||
|
this.$message.warning("请勾选需要删除的信息") |
||||
|
return |
||||
|
} |
||||
|
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', { |
||||
|
confirmButtonText: '确定', |
||||
|
cancelButtonText: '取消', |
||||
|
type: 'warning' |
||||
|
}).then(() => { |
||||
|
removeBatchTestSoBom(this.selectionTestSoBomList).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.$message.success(data.msg) |
||||
|
this.selectTestSoBom(); |
||||
|
this.$refs.testSoBomTable.clearSelection() |
||||
|
}else { |
||||
|
this.$alert(data.msg, '错误', { |
||||
|
confirmButtonText: '确定' |
||||
|
}) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$alert(error, '错误', { |
||||
|
confirmButtonText: '确定' |
||||
|
}) |
||||
|
}) |
||||
|
}).catch(() => {}); |
||||
|
}, |
||||
|
closeTestSoBom(){ |
||||
|
this.$refs.saveForm.resetFields(); |
||||
|
this.testSoBom = { |
||||
|
site:this.$store.state.user.site, |
||||
|
testNo:undefined, |
||||
|
itemNo:undefined, |
||||
|
componentPartNo:undefined, |
||||
|
assemblyQty:0, |
||||
|
fixedScrapQty:0, |
||||
|
scrapFactor:0, |
||||
|
requiredQty:0, |
||||
|
issuedQty:undefined, |
||||
|
issuedDate:undefined, |
||||
|
reserveQty:0, |
||||
|
mateGroup:undefined, |
||||
|
notifiedQty:undefined, |
||||
|
rmTypeDb:0, |
||||
|
issuedType:undefined, |
||||
|
remark:undefined, |
||||
|
} |
||||
|
}, |
||||
|
clearTable(){ |
||||
|
this.$emit("change",[]) |
||||
|
this.$refs.testSoBomTable.clearSelection(); |
||||
|
}, |
||||
|
selectTestSoBom(){ |
||||
|
let params = { |
||||
|
testNo:this.testNo, |
||||
|
site:this.$store.state.user.site |
||||
|
} |
||||
|
this.$emit("change",[]) |
||||
|
this.$refs.testSoBomTable.clearSelection(); |
||||
|
selectTestSoBom(params).then(({data})=>{ |
||||
|
if (data && data.code === 0 ){ |
||||
|
this.$emit("change",data.rows) |
||||
|
}else { |
||||
|
this.$message.error(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}, |
||||
|
saveTestSoBomBtn(){ |
||||
|
this.$refs.saveForm.validate((validate,objects)=>{ |
||||
|
if (validate){ |
||||
|
console.log(this.testSoBom.itemNo) |
||||
|
if (this.testSoBom.itemNo !== undefined && this.testSoBom.itemNo !== null && this.testSoBom.itemNo !== ''){ |
||||
|
updateTestSoBom(this.testSoBom).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.$message.success(data.msg) |
||||
|
this.selectTestSoBom() |
||||
|
this.saveOrUpdateFlag = false |
||||
|
}else { |
||||
|
this.$message.error(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
}else { |
||||
|
this.testSoBom.testNo = this.testNo |
||||
|
saveTestSoBom(this.testSoBom).then(({data})=>{ |
||||
|
if (data && data.code === 0){ |
||||
|
this.$message.success(data.msg) |
||||
|
this.selectTestSoBom() |
||||
|
this.saveOrUpdateFlag = false |
||||
|
}else { |
||||
|
this.$message.error(data.msg) |
||||
|
} |
||||
|
}).catch((error)=>{ |
||||
|
this.$message.error(error) |
||||
|
}) |
||||
|
} |
||||
|
}else { |
||||
|
for (let key in objects) { |
||||
|
this.$message.error(this.testSoBomLabel[key]+"不能为空") |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<div class="testTable"> |
||||
|
<div style="margin-bottom: 5px"> |
||||
|
<el-button type="primary" @click="saveTestSoBom(null)">新增</el-button> |
||||
|
<el-button type="primary" @click="removeBatchTestSoBom">删除</el-button> |
||||
|
</div> |
||||
|
<el-table |
||||
|
:height="height" border |
||||
|
:data="dataList" |
||||
|
ref="testSoBomTable" |
||||
|
@row-click="testSoBomClickRow" |
||||
|
@selection-change="selectionTestSoBom"> |
||||
|
<el-table-column |
||||
|
type="selection" |
||||
|
header-align="center" |
||||
|
align="center" |
||||
|
width="50"> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
v-for="(item,index) in testSoBomColumnList" :key="index" |
||||
|
:sortable="item.columnSortable" |
||||
|
:prop="item.columnProp" |
||||
|
:header-align="item.headerAlign" |
||||
|
:show-overflow-tooltip="item.showOverflowTooltip" |
||||
|
:align="item.align" |
||||
|
:fixed="item.fixed===''?false:item.fixed" |
||||
|
:min-width="item.columnWidth" |
||||
|
:label="item.columnLabel"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span> |
||||
|
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="操作" align="center" fixed="right"> |
||||
|
<template slot-scope="{row,$index}"> |
||||
|
<a type="text" style="cursor:pointer;" @click="saveTestSoBom(row)">编辑</a> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
|
||||
|
<el-dialog :title="testSoBom.itemNo?'编辑':'新增'+'-产品结构'" v-drag width="35vw" append-to-body :visible.sync="saveOrUpdateFlag" @close="closeTestSoBom"> |
||||
|
<el-form ref="saveForm" label-position="top" :model="testSoBom" :rules="testSoBomRule"> |
||||
|
<el-row :gutter="15"> |
||||
|
<el-col :span="16"> |
||||
|
<el-row :gutter="15"> |
||||
|
<el-col :span="12"> |
||||
|
<el-form-item label="物料编码" prop="componentPartNo"> |
||||
|
<span slot="label" @click="partDialogFlag = true"><a>物料编码</a></span> |
||||
|
<el-input readonly v-model="testSoBom.componentPartNo"></el-input> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="12"> |
||||
|
<el-form-item label="物料名称" prop="partDesc"> |
||||
|
<el-input disabled v-model="testSoBom.partDesc"></el-input> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-col> |
||||
|
<el-col :span="8"> |
||||
|
<el-form-item label="需求数量" prop="requiredQty"> |
||||
|
<el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoBom.requiredQty" :controls="false"></el-input-number> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="8"> |
||||
|
<el-form-item label="单位用量" prop="assemblyQty"> |
||||
|
<el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoBom.assemblyQty" :controls="false"></el-input-number> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="8"> |
||||
|
<el-form-item label="固定损耗" prop="fixedScrapQty"> |
||||
|
<el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoBom.fixedScrapQty" :controls="false"></el-input-number> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="8"> |
||||
|
<el-form-item label="报废率%" prop="scrapFactor"> |
||||
|
<el-input-number style="width: 100%;margin-top: -5px;" :max="100" :min="0" v-model="testSoBom.scrapFactor" :controls="false"></el-input-number> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="8" v-if="false"> |
||||
|
<el-form-item label="发料数量" prop="issuedQty"> |
||||
|
<el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoBom.issuedQty" :controls="false"></el-input-number> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="8" v-if="false"> |
||||
|
<el-form-item label="发料日期" prop="issuedDate"> |
||||
|
<el-input v-model="testSoBom.issuedDate"></el-input> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="8"> |
||||
|
<el-form-item label="预留数量" prop="reserveQty"> |
||||
|
<el-input-number style="width: 100%;margin-top: -5px;" :min="0" v-model="testSoBom.reserveQty" :controls="false"></el-input-number> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="8"> |
||||
|
<el-form-item label=" " prop="rmTypeDb"> |
||||
|
<el-checkbox :true-label="1" :false-label="0" v-model="testSoBom.rmTypeDb">是否主物料</el-checkbox> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="24"> |
||||
|
<el-form-item label="备注" prop="remark" style="height: 90px"> |
||||
|
<el-input type="textarea" resize='none' :autosize="{ minRows: 3, maxRows: 3 }" v-model="testSoBom.remark"></el-input> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-form> |
||||
|
<span slot="footer" class="dialog-footer"> |
||||
|
<el-button type="primary" @click="saveTestSoBomBtn">确 定</el-button> |
||||
|
<el-button @click="saveOrUpdateFlag = false">取 消</el-button> |
||||
|
</span> |
||||
|
</el-dialog> |
||||
|
|
||||
|
<el-dialog title="物料列表" width="30%" |
||||
|
@close="closePartDialog" v-drag |
||||
|
:visible.sync="partDialogFlag"> |
||||
|
<!--搜索条件--> |
||||
|
<el-form :model="partData" ref="partDataForm" label-position="top"> |
||||
|
<el-row :gutter="10"> |
||||
|
<el-col :span="6"> |
||||
|
<el-form-item label="物料编号" prop="partNo"> |
||||
|
<el-input v-model="partData.partNo" clearable/> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="6" > |
||||
|
<el-form-item label="物料描述" prop="partDesc"> |
||||
|
<el-input v-model="partData.partDesc" clearable/> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="6" > |
||||
|
<el-form-item label=" "> |
||||
|
<el-button type="primary" @click="initPartList">查 询</el-button> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-form> |
||||
|
<!--筛选的数据--> |
||||
|
<el-table :data="partList" ref="partDataTable" :style="{marginTop:'5px'}" |
||||
|
height="200px" stripe border width="30%" |
||||
|
@row-dblclick="dblClickPartTable"> |
||||
|
<el-table-column label="物料编号" prop="partNo"/> |
||||
|
<el-table-column label="物料描述" prop="partDesc"/> |
||||
|
</el-table> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<style scoped> |
||||
|
.el-input-number /deep/ .el-input__inner{ |
||||
|
text-align: right; |
||||
|
padding-right: 5px !important; |
||||
|
} |
||||
|
</style> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue