Browse Source

20240919

java8
qiezi 1 year ago
parent
commit
f6ea5ec546
  1. 337
      src/views/modules/quote/detail/primary/quoteDetailBom.vue

337
src/views/modules/quote/detail/primary/quoteDetailBom.vue

@ -1,25 +1,30 @@
<script>
import {queryQuoteDetailBomTree, queryQuoteDetailBomTreeLevel,queryQuoteDetailBomTreeAlternative} from "@/api/quote/quoteDetailBomTree";
import {
queryQuoteDetailBomTree,
queryQuoteDetailBomTreeLevel,
queryQuoteDetailBomTreeAlternative
} from "@/api/quote/quoteDetailBomTree";
import {queryQuoteDetailBom} from "@/api/quote/quoteDetailBom";
import {changeQuoteDetailBomTree} from "../../../../../api/quote/quoteDetailBomTree";
export default {
name: "quoteDetailBom",
props:{
quoteDetail:{
type:Object,
required:true
props: {
quoteDetail: {
type: Object,
required: true
},
},
model:{
model: {
prop: "quoteDetail",
event: "update"
},
data(){
return{
isAllBom:false,
dataList:[],
treeData:[],
columns:[
data() {
return {
isAllBom: false,
dataList: [],
treeData: [],
columns: [
{
userId: this.$store.state.user.name,
functionId: 5011,
@ -37,7 +42,7 @@ export default {
status: true,
fixed: '',
columnWidth: 50,
},{
}, {
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table4PartNo',
@ -54,7 +59,7 @@ export default {
status: true,
fixed: '',
columnWidth: 120,
},{
}, {
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table4ComponentPart',
@ -71,7 +76,7 @@ export default {
status: true,
fixed: '',
columnWidth: 120,
},{
}, {
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table4PartDesc',
@ -88,7 +93,7 @@ export default {
status: true,
fixed: '',
columnWidth: 140,
},{
}, {
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table4QtyPerAssembly',
@ -105,7 +110,7 @@ export default {
status: true,
fixed: '',
columnWidth: 90,
},{
}, {
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table4ComponentScrap',
@ -122,7 +127,7 @@ export default {
status: true,
fixed: '',
columnWidth: 90,
},{
}, {
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table4ShrinkageFactor',
@ -139,7 +144,7 @@ export default {
status: true,
fixed: '',
columnWidth: 90,
},{
}, {
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table4PrintUnitName',
@ -156,7 +161,7 @@ export default {
status: true,
fixed: '',
columnWidth: 90,
},{
}, {
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table4NoteText',
@ -247,18 +252,18 @@ export default {
columnWidth: 100,
},
],
props:{
props: {
children: 'list',
label: (data,node)=>{
label: (data, node) => {
return `${data.partNo}-${data.engChgLevel}-${data.alternativeNo}-${data.bomType}`;
},
},
queryLoading:false,
queryTreeLoading:false,
versionVisible:false,
versionList:[],
alternativeList:[],
bomEngChgLevel:{
queryLoading: false,
queryTreeLoading: false,
versionVisible: false,
versionList: [],
alternativeList: [],
bomEngChgLevel: {
partNo: '',
bomType: '',
buNo: '',
@ -267,56 +272,56 @@ export default {
}
}
},
methods:{
handleQueryQuoteDetailBomTree(){
methods: {
handleQueryQuoteDetailBomTree() {
let params = {
id: this.quoteDetail.id,
}
this.queryTreeLoading = true;
queryQuoteDetailBomTree(params).then(({data})=>{
if (data && data.code === 0){
queryQuoteDetailBomTree(params).then(({data}) => {
if (data && data.code === 0) {
this.treeData = data.rows;
if (this.treeData.length > 0){
this.$nextTick(()=>{
if (this.treeData.length > 0) {
this.$nextTick(() => {
this.$refs.tree.setCurrentKey(this.treeData[0].id);
this.handleQueryQuoteDetailBom();
})
}
this.queryTreeLoading = false;
}else {
} else {
this.$message.warning(data.msg);
this.queryTreeLoading = false;
}
}).catch((error)=>{
}).catch((error) => {
this.$message.error(error);
})
},
nodeClick(data){
nodeClick(data) {
this.handleQueryQuoteDetailBom();
},
handleQueryQuoteDetailBom(){
handleQueryQuoteDetailBom() {
let params = {
quoteDetailId:this.quoteDetail.id,
treeId:this.$refs.tree.getCurrentKey(),
allTree:this.isAllBom,
quoteDetailId: this.quoteDetail.id,
treeId: this.$refs.tree.getCurrentKey(),
allTree: this.isAllBom,
}
this.queryLoading = true;
queryQuoteDetailBom(params).then(({data})=>{
if (data && data.code === 0){
queryQuoteDetailBom(params).then(({data}) => {
if (data && data.code === 0) {
this.dataList = data.rows;
}else {
} else {
this.$message.warning(data.msg);
}
this.queryLoading = false;
}).catch((error)=>{
}).catch((error) => {
this.$message.error(error);
this.queryLoading = false;
})
},
handleCheckedVersion(){
handleCheckedVersion() {
this.handleQueryQuoteDetailBomTreeVersion();
let node = this.$refs.tree.getCurrentNode();
if (node){
if (node) {
this.bomEngChgLevel = {
partNo: node.partNo,
bomType: node.bomType,
@ -328,104 +333,125 @@ export default {
}
this.versionVisible = true
},
handleQueryQuoteDetailBomTreeVersion(){
handleQueryQuoteDetailBomTreeVersion() {
let node = this.$refs.tree.getCurrentNode();
let params = {
site:this.quoteDetail.site,
partNo:this.quoteDetail.partNo,
buNo:this.quoteDetail.buNo,
site: this.quoteDetail.site,
partNo: this.quoteDetail.partNo,
buNo: this.quoteDetail.buNo,
}
if (node){
if (node) {
params = {
site:node.site,
partNo:node.partNo,
bomType:node.bomType,
buNo:node.buNo,
site: node.site,
partNo: node.partNo,
bomType: node.bomType,
buNo: node.buNo,
}
}
queryQuoteDetailBomTreeLevel(params).then(({data})=>{
if (data && data.code === 0){
queryQuoteDetailBomTreeLevel(params).then(({data}) => {
if (data && data.code === 0) {
this.versionList = data.rows;
}else {
} else {
this.$message.warning(data.msg);
}
}).catch((error)=>{
}).catch((error) => {
this.$message.error(error);
})
},
levelRowStyle({row}){
if (row.engChgLevel === this.bomEngChgLevel.engChgLevel){
return { 'background-color': '#E8F7F6' };
levelRowStyle({row}) {
if (row.engChgLevel === this.bomEngChgLevel.engChgLevel) {
return {'background-color': '#E8F7F6'};
}
},
alternativeRowStyle({row}){
alternativeRowStyle({row}) {
let node = this.$refs.tree.getCurrentNode();
if (row.engChgLevel === node.engChgLevel && row.alternativeNo === node.alternativeNo){
return { 'background-color': '#E8F7F6' };
if (row.engChgLevel === this.bomEngChgLevel.engChgLevel && row.alternativeNo === this.bomEngChgLevel.alternativeNo) {
return {'background-color': '#E8F7F6'};
}
},
levelRowClick(row){
levelRowClick(row) {
this.bomEngChgLevel.partNo = row.partNo;
this.bomEngChgLevel.buNo = row.buNo;
this.bomEngChgLevel.site = row.site;
this.bomEngChgLevel.engChgLevel = row.engChgLevel;
this.bomEngChgLevel.bomType = row.bomType;
let params = {
...this.bomEngChgLevel
}
queryQuoteDetailBomTreeAlternative(params).then(({data})=>{
if (data && data.code === 0){
queryQuoteDetailBomTreeAlternative(params).then(({data}) => {
if (data && data.code === 0) {
this.alternativeList = data.rows;
}else {
} else {
this.$message.warning(data.msg);
}
}).catch((error)=>{
}).catch((error) => {
this.$message.error(error);
})
},
handleChangeVersion(row){
handleChangeVersion(row) {
let node = this.$refs.tree.getCurrentNode();
let params = {
id:node.id,
partNo:node.partNo,
bomType:node.bomType,
buNo:node.buNo,
site:node.site,
engChgLevel:row.engChgLevel,
alternativeNo:row.alternativeNo,
createBy:this.$store.state.user.name,
partNo: row.partNo,
bomType: row.bomType,
buNo: row.buNo,
site: row.site,
engChgLevel: row.engChgLevel,
alternativeNo: row.alternativeNo,
createBy: this.$store.state.user.name,
quoteId: this.quoteDetail.quoteId,
quoteDetailId: this.quoteDetail.id,
quoteNo: this.quoteDetail.quoteNo,
quoteDetailItemNo: this.quoteDetail.itemNo,
versionNo:this.quoteDetail.versionNo,
}
if (node) {
params.id = node.id
params.partNo = node.partNo
params.bomType = node.bomType
params.buNo = node.buNo
params.site = node.site
}
changeQuoteDetailBomTree(params).then(({data})=>{
if (data && data.code === 0){
changeQuoteDetailBomTree(params).then(({data}) => {
if (data && data.code === 0) {
this.$message.success(data.msg);
this.versionVisible = false;
this.handleQueryQuoteDetailBomTree();
}else {
} else {
this.$message.warning(data.msg);
}
}).catch((error)=>{
}).catch((error) => {
this.$message.error(error);
})
}
},
created() {
if (this.quoteDetail && this.quoteDetail.id){
if (this.quoteDetail && this.quoteDetail.id) {
this.handleQueryQuoteDetailBomTree();
}
},
watch:{
'quoteDetail.id'(newVal,oldVal){
watch: {
'quoteDetail.id'(newVal, oldVal) {
this.handleQueryQuoteDetailBomTree();
},
isAllBom(newVal,oldVal){
isAllBom(newVal, oldVal) {
this.handleQueryQuoteDetailBom();
},
'bomEngChgLevel.engChgLevel'(newVal,oldVal){
if (newVal){
'bomEngChgLevel.engChgLevel'(newVal, oldVal) {
if (newVal) {
let node = this.$refs.tree.getCurrentNode();
let row = {
partNo: node.partNo,
bomType: node.bomType,
buNo: node.buNo,
site: node.site,
partNo: this.quoteDetail.partNo,
buNo: this.quoteDetail.buNo,
site: this.quoteDetail.site,
engChgLevel: newVal,
}
if (node) {
row.partNo = node.partNo;
row.bomType = node.bomType;
row.buNo = node.buNo;
row.site = node.site;
}
this.levelRowClick(row)
}
}
@ -434,67 +460,78 @@ export default {
</script>
<template>
<div>
<div style="margin-bottom: 10px">
<el-link style="margin-right: 20px;cursor: pointer" @click="handleCheckedVersion">切换版本</el-link>
<el-checkbox v-model="isAllBom">全级BOM结构</el-checkbox>
</div>
<el-container>
<el-aside width="300px" v-loading="queryTreeLoading">
<el-tree
:data="treeData"
:props="props"
:default-expand-all="true"
:expand-on-click-node="false"
node-key="id"
highlight-current
@node-click="nodeClick" ref="tree">
<div>
<div style="margin-bottom: 10px">
<el-link style="margin-right: 20px;cursor: pointer" @click="handleCheckedVersion">切换版本</el-link>
<el-checkbox v-model="isAllBom">全级BOM结构</el-checkbox>
</div>
<el-container>
<el-aside width="300px" v-loading="queryTreeLoading">
<el-tree
:data="treeData"
:props="props"
:default-expand-all="true"
:expand-on-click-node="false"
node-key="id"
highlight-current
@node-click="nodeClick" ref="tree">
</el-tree>
</el-aside>
<el-main style="padding: 0">
<el-table :data="dataList" v-loading="queryLoading" border style="width: 100%" :height="420">
<el-table-column
v-for="(item,index) in columns" :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>
</el-main>
</el-container>
</el-tree>
</el-aside>
<el-main style="padding: 0">
<el-table :data="dataList" v-loading="queryLoading" border style="width: 100%" :height="420">
<el-table-column
v-for="(item,index) in columns" :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">
<el-dialog title="BOM版本切换" :visible.sync="versionVisible" append-to-body :close-on-click-modal="false" v-drag
width="900px">
<el-table :data="versionList" :row-style="levelRowStyle" @row-click="levelRowClick" ref="versionTable"
style="width: 100%" border :height="240">
<el-table-column label="物料编码" prop="partNo" header-align="center" align="center" show-overflow-tooltip
min-width="140"/>
<el-table-column label="物料描述" prop="partDesc" header-align="center" align="left" show-overflow-tooltip
min-width="200"/>
<el-table-column label="版本" prop="engChgLevel" header-align="center" align="center" show-overflow-tooltip
min-width="60"/>
<el-table-column label="类型" prop="bomType" header-align="center" align="center" show-overflow-tooltip
min-width="100"/>
</el-table>
<el-table :data="alternativeList" :row-style="alternativeRowStyle" ref="versionTable"
style="width: 100%;margin-top: 20px" border :height="240">
<el-table-column label="物料编码" prop="partNo" header-align="center" align="center" show-overflow-tooltip
min-width="140"/>
<el-table-column label="物料描述" prop="partDesc" header-align="center" align="left" show-overflow-tooltip
min-width="200"/>
<el-table-column label="版本" prop="engChgLevel" header-align="center" align="center" show-overflow-tooltip
min-width="60"/>
<el-table-column label="替代编码" prop="alternativeNo" header-align="center" align="left" show-overflow-tooltip
min-width="60"/>
<el-table-column label="类型" prop="bomType" header-align="center" align="center" show-overflow-tooltip
min-width="100"/>
<el-table-column label="操作" header-align="center" align="center" min-width="100">
<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>
<a @click="handleChangeVersion(scope.row)">选择</a>
</template>
</el-table-column>
</el-table>
</el-main>
</el-container>
<el-dialog title="BOM版本切换" :visible.sync="versionVisible" append-to-body :close-on-click-modal="false" v-drag width="900px">
<el-table :data="versionList" :row-style="levelRowStyle" @row-click="levelRowClick" ref="versionTable" style="width: 100%" border :height="240">
<el-table-column label="物料编码" prop="partNo" header-align="center" align="center" show-overflow-tooltip min-width="140"/>
<el-table-column label="物料描述" prop="partDesc" header-align="center" align="left" show-overflow-tooltip min-width="200"/>
<el-table-column label="版本" prop="engChgLevel" header-align="center" align="center" show-overflow-tooltip min-width="60"/>
<el-table-column label="类型" prop="bomType" header-align="center" align="center" show-overflow-tooltip min-width="100"/>
</el-table>
<el-table :data="alternativeList" :row-style="alternativeRowStyle" ref="versionTable" style="width: 100%;margin-top: 20px" border :height="240">
<el-table-column label="物料编码" prop="partNo" header-align="center" align="center" show-overflow-tooltip min-width="140"/>
<el-table-column label="物料描述" prop="partDesc" header-align="center" align="left" show-overflow-tooltip min-width="200"/>
<el-table-column label="版本" prop="engChgLevel" header-align="center" align="center" show-overflow-tooltip min-width="60"/>
<el-table-column label="替代编码" prop="alternativeNo" header-align="center" align="left" show-overflow-tooltip min-width="60"/>
<el-table-column label="类型" prop="bomType" header-align="center" align="center" show-overflow-tooltip min-width="100"/>
<el-table-column label="操作" header-align="center" align="center" min-width="100">
<template slot-scope="scope">
<a @click="handleChangeVersion(scope.row)">选择</a>
</template>
</el-table-column>
</el-table>
</el-dialog>
</div>
</el-dialog>
</div>
</template>
<style scoped>

Loading…
Cancel
Save