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.
 
 
 
 
 

815 lines
26 KiB

<script>
import {queryQuoteDetailBomTree} from "@/api/quote/quoteDetailBomTree";
import {
queryQuoteDetailRouting,
queryQuoteDetailRoutingAlternative, changeQuoteDetailRoutingChange,
queryQuoteDetailRoutingVersion
} from "@/api/quote/quoteDetailRouting";
export default {
name: "quoteDetailRouting",
props:{
quoteDetail:{
type:Object,
required:true
},
},
model:{
prop: "quoteDetail",
event: "update"
},
data(){
return{
isAllRouting:false,
dataList:[],
queryLoading:false,
treeData:[],
columns: [
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5OperationNo',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'operationNo',
headerAlign: "center",
align: "center",
columnLabel: '工序号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 60,
},{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5OperationName',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'operationName',
headerAlign: "center",
align: "left",
columnLabel: '工序名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120,
},{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5PartNo',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'partNo',
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: 5011,
serialNumber: '5011Table5PartDesc',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'partDesc',
headerAlign: "center",
align: "left",
columnLabel: '物料描述',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 200,
},{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5Version',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'routingRevision',
headerAlign: "center",
align: "center",
columnLabel: '版本',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80,
},{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5AlternativeNo',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'alternativeNo',
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: 5011,
serialNumber: '5011Table5WorkCenterNo',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'workCenterNo',
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: 5011,
serialNumber: '5011Table5WorkCenterDesc',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'workCenterDesc',
headerAlign: "center",
align: "left",
columnLabel: '加工中心名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 200,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5MachSetupTime',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'machSetupTime',
headerAlign: "center",
align: "right",
columnLabel: '机器调机时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5SetupCrewSize',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'setupCrewSize',
headerAlign: "center",
align: "right",
columnLabel: '调机过程人数',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5SetupLaborClassNo',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'setupLaborClassNo',
headerAlign: "center",
align: "left",
columnLabel: '调机时人员等级',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5MachCycleTime',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'machCycleTime',
headerAlign: "center",
align: "right",
columnLabel: '机器处理时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5MachRunFactor',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'machRunFactor',
headerAlign: "center",
align: "right",
columnLabel: '机器单位产出',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5CrewSize',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'crewSize',
headerAlign: "center",
align: "right",
columnLabel: '生产过程人数',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5LaborClassNo',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'laborClassNo',
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: 5011,
serialNumber: '5011Table5LaborSetupTime',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'laborSetupTime',
headerAlign: "center",
align: "right",
columnLabel: '人工调机时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5LaborCycleTime',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'laborCycleTime',
headerAlign: "center",
align: "right",
columnLabel: '人工处理时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5LaborRunFactor',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'laborRunFactor',
headerAlign: "center",
align: "right",
columnLabel: '人工单位产出',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5RunTimeDesc',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'runTimeDesc',
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: 5011,
serialNumber: '5011Table5EfficiencyFactor',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'efficiencyFactor',
headerAlign: "center",
align: "right",
columnLabel: '效率%',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5ResourceNum',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'resourceNum',
headerAlign: "center",
align: "right",
columnLabel: '机台数量',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 100,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5LaborClassCost',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'laborClassCost',
headerAlign: "center",
align: "right",
columnLabel: '单位人工成本-生产',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5SetupLaborClassCost',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'setupLaborClassCost',
headerAlign: "center",
align: "right",
columnLabel: '单位人工成本-调机',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5WorkCenterCost',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'workCenterCost',
headerAlign: "center",
align: "right",
columnLabel: '单位机器成本',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5ManuCost',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'manuCost',
headerAlign: "center",
align: "right",
columnLabel: '单位制造费用成本',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120,
},
{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5TotalMachCost',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'totalMachCost',
headerAlign: "center",
align: "right",
columnLabel: '机器成本',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5TotalManCost',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'totalManCost',
headerAlign: "center",
align: "right",
columnLabel: '制造成本',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5TotalLaborCost',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'totalLaborCost',
headerAlign: "center",
align: "right",
columnLabel: '人工成本',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140,
},{
userId: this.$store.state.user.name,
functionId: 5011,
serialNumber: '5011Table5TotalCost',
tableId: "5011Table5",
tableName: "报价工艺信息",
columnProp: 'totalCost',
headerAlign: "center",
align: "right",
columnLabel: '成本小计',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: 'right',
columnWidth: 120,
},
],
props:{
children: 'list',
label: (data,node)=>{
return `${data.partNo}-${data.engChgLevel}-${data.alternativeNo}-${data.bomType}`;
},
},
queryTreeLoading:false,
versionVisible:false,
versionList:[],
alternativeList:[],
routing:{
}
}
},
methods:{
handleQueryQuoteDetailBomTree(){
let params = {
id: this.quoteDetail.id,
}
this.queryTreeLoading = true;
queryQuoteDetailBomTree(params).then(({data})=>{
if (data && data.code === 0){
this.treeData = data.rows;
if (this.treeData.length > 0){
this.$nextTick(()=>{
this.$refs.tree.setCurrentKey(this.treeData[0].id);
this.handleQueryDetailRouting();
})
}
this.queryTreeLoading = false;
}else {
this.$message.warning(data.msg);
this.queryTreeLoading = false;
}
}).catch((error)=>{
this.$message.error(error);
})
},
nodeClick(data){
this.handleQueryDetailRouting();
},
handleQueryDetailRouting(){
let node = this.$refs.tree.getCurrentNode();
let params = {
treeId:node.id,
quoteDetailId: this.quoteDetail.id,
isAllRouting: this.isAllRouting,
}
this.queryLoading = true;
queryQuoteDetailRouting(params).then(({data})=>{
if (data && data.code === 0){
this.dataList = data.rows;
}else {
this.$message.warning(data.msg);
}
this.queryLoading = false;
}).catch((error)=>{
this.$message.error(error);
this.queryLoading = false;
})
},
handleChangeVersion(){
let node = this.$refs.tree.getCurrentNode();
let row = {
routingRevision:null,
alternativeNo: '',
routingType: null,
}
if (this.treeData.length === 0){
this.$message.warning("未维护BOM结构")
return;
}
if (this.dataList.length > 0){
row = this.dataList[0];
}
if (node){
this.routing = {
partNo: node.partNo,
buNo: node.buNo,
site: node.site,
routingType: row.routingType,
routingRevision: row.routingRevision,
alternativeNo: row.alternativeNo,
}
}
this.handleQueryVersionList();
this.versionVisible = true;
},
versionRowStyle({row}){
if (row.routingRevision === this.routing.routingRevision && row.routingType === this.routing.routingType){
return { 'background-color': '#E8F7F6' };
}
},
handleQueryVersionList(){
let node = this.$refs.tree.getCurrentNode();
let params = {
treeId: node.id,
routingType: this.routing.routingType,
}
queryQuoteDetailRoutingVersion(params).then(({data})=>{
if (data && data.code === 0){
this.versionList = data.rows;
if (this.versionList.length > 0){
this.handleQueryAlternativeList();
}
}else {
this.$message.warning(data.msg);
}
}).catch((error)=>{
this.$message.error(error);
})
},
handleQueryAlternativeList(){
let params = {
...this.routing,
}
queryQuoteDetailRoutingAlternative(params).then(({data})=>{
if (data && data.code === 0){
this.alternativeList = data.rows;
}else {
this.$message.warning(data.msg);
}
}).catch((error)=>{
this.$message.error(error);
})
},
versionRowClick(row){
this.routing.routingType = row.routingType;
this.routing.routingRevision = row.routingRevision;
this.handleQueryAlternativeList();
},
alternativeRowStyle({row}){
if (this.dataList.length > 0){
if (this.dataList[0].alternativeNo === row.alternativeNo && this.dataList[0].routingRevision === row.routingRevision && this.dataList[0].routingType === row.routingType){
return { 'background-color': '#E8F7F6' };
}
}
},
changeRouting(row){
let params = {
quoteId: this.quoteDetail.quoteId,
quoteDetailId: this.quoteDetail.id,
quoteDetailItemNo:this.quoteDetail.itemNo,
versionNo: this.quoteDetail.versionNo,
site: row.site,
partNo: row.partNo,
buNo: row.buNo,
quoteNo: this.quoteDetail.quoteNo,
routingType: row.routingType,
routingRevision: row.routingRevision,
alternativeNo: row.alternativeNo,
treeId: this.$refs.tree.getCurrentNode().id,
createBy: this.$store.state.user.name,
}
changeQuoteDetailRoutingChange(params).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.versionVisible = false;
this.handleQueryDetailRouting();
}else {
this.$message.warning(data.msg);
}
}).catch((error)=>{
this.$message.error(error)
})
},
handleJumpToRouting(row){
if (this.$router.resolve('part-routingManagement').resolved.name === '404') {
this.$alert('权限不足,访问失败', '警告', {confirmButtonText: '确定',});
} else {
this.$emit('close')
let params = {
name: "part-routingManagement",
params: {
type:'quote',
partNo:row.partNo,
routingType:row.routingType,
routingRevision:row.routingRevision,
alternativeNo:row.alternativeNo,
}
}
this.$router.push(params)
}
}
},
created() {
if (this.quoteDetail && this.quoteDetail.id){
this.handleQueryQuoteDetailBomTree();
}
},
watch:{
'quoteDetail.id'(newVal,oldVal){
this.handleQueryQuoteDetailBomTree();
},
isAllRouting(newVal,oldVal){
this.handleQueryDetailRouting();
},
}
}
</script>
<template>
<div>
<div style="margin-bottom: 10px">
<el-link style="margin-right: 20px;cursor:pointer;" @click="handleChangeVersion" v-if="quoteDetail.status === '草稿'">切换版本</el-link>
<el-checkbox v-model="isAllRouting">全级Routing结构</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">
<template v-if="item.columnProp === 'partNo'">
<el-link @click="handleJumpToRouting(scope.row)">{{ scope.row[item.columnProp] }}</el-link>
</template>
<template v-else>
<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>
</template>
</el-table-column>
</el-table>
</el-main>
</el-container>
<el-dialog title="切换版本" :visible.sync="versionVisible" width="1000px" v-drag :close-on-click-modal="false" append-to-body>
<el-table :data="versionList" :row-style="versionRowStyle" ref="routingVersionTable" style="margin-top: 8px" border :height="240" @row-click="versionRowClick">
<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="routingRevision" header-align="center" align="center" show-overflow-tooltip min-width="60"/>
<el-table-column label="类型" prop="routingType" header-align="center" align="center" show-overflow-tooltip min-width="100"/>
</el-table>
<el-table :data="alternativeList" :row-style="alternativeRowStyle" ref="routingAlternativeTable" border :height="240" style="margin-top: 8px">
<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="routingRevision" 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="routingType" header-align="center" align="center" show-overflow-tooltip min-width="100"/>
<el-table-column label="操作" min-width="80" header-align="center" align="center">
<template slot-scope="{row,$index}">
<a @click="changeRouting(row)">选择</a>
</template>
</el-table-column>
</el-table>
</el-dialog>
</div>
</template>
<style scoped>
</style>