|
|
<script>import { againQuoteDetail, deleteQuoteDetail, queryQuoteDetail, saveQuoteDetail, updateQuoteDetail} from "../../../../api/quote/quoteDetail";import {getProjectPartList} from "../../../../api/project/project";import QuoteDetailCost from "./primary/quoteDetailCost.vue";import QuoteDetailTool from "./primary/quoteDetailTool.vue";import QuoteDetailBom from "./primary/quoteDetailBom.vue";import QuoteDetailRouting from "./primary/quoteDetailRouting.vue";import QuoteDetailOtherCost from "./primary/quoteDetailOtherCost.vue";import DictDataSelect from "../../sys/dict-data-select.vue";import QuoteDetailTest from "./primary/quoteDetailTest.vue";import QuoteDetailOther from "./primary/quoteDetailOther.vue";
export default { name: "quoteDetail", components: { QuoteDetailOther, QuoteDetailTest, DictDataSelect, QuoteDetailOtherCost, QuoteDetailRouting, QuoteDetailBom, QuoteDetailTool, QuoteDetailCost, }, props:{ quote:{ type:Object, required:true }, height:{ type:[Number,String], default:300 }, authFlag:{ type:Boolean, default:false }, quoteGroupDetail:{ type:Object, }, saveAuth:{ type:Boolean, default:true }, isExport:{ type:Boolean, default:false }, }, data(){ return{ quoteDetail:{ id:null, partNo:'', partDesc:'', projectNo:'', projectDesc:'', buNo: '*', qty:null, quoteCount:1, partCost:0, adjustPartCost:0, labourCost:0, adjustLabourCost:0, fabricateCost:0, adjustFabricateCost:0, toolCost:0, adjustToolCost:0, machineCost:0, adjustMachineCost:0, otherCost:0, manageCost:0, totalCost:0, profitRate:0, profitAmount:0, totalPrice:0, unitPrice:0, taxRate:13, taxTotalPrice:0, taxUnitPrice:0, quoteTotalCost:0, quoteProfitRate:0, quoteProfitAmount:0, quoteTotalPrice:0, quoteUnitPrice:0, quoteTaxRate:0, quoteTaxTotalPrice:0, quoteTaxUnitPrice:0, currency1:undefined, currency2:undefined, exchangeRate1:undefined, exchangeRate2:undefined, currencyTotalCost1:0, currencyTotalCost2:0, quoteCurrencyTotalCost1:0, quoteCurrencyTotalCost2:0, // moq:'Standard 250K',
moq:'', calculatedItems:'工具,测试,其他,包装,运输', testCost:0, adjustTestCost:0, elseCost:0, adjustElseCost:0, remark:'', }, saveQuoteDetail:{
}, dataList:[], saveLoading:false, queryLoading:false, saveVisible:false, saveQuoteDetailRules:{ partNo: [{required: true, message: '请输入物料编码', trigger: ['blur','change']}], partDesc: [{required: true, message: '请输入物料名称', trigger: ['blur','change']}], qty: [{required: true, message: '请输入数量', trigger: ['blur','change']}], currency1: [{required: true, message: '请选择币种', trigger: ['blur','change']}], }, columns: [ { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2PartNo', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'plmPartNo', headerAlign: 'center', align: 'left', columnLabel: 'PLM物料编码', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 120 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2PartNo', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'ifsPartNo', headerAlign: 'center', align: 'left', columnLabel: 'IFS物料编码', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 120 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2PartDesc', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'partDesc', headerAlign: 'center', align: 'left', columnLabel: '物料名称', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 240 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'qty', headerAlign: 'center', align: 'right', columnLabel: 'MOQ', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 100 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2AdjustPartCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'adjustPartCost', headerAlign: 'center', align: 'right', columnLabel: '材料成本', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 130 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2AdjustLabourCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'adjustLabourCost', 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: '5011Table2AdjustMachineCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'adjustMachineCost', 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: '5011Table2AdjustToolCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'adjustToolCost', 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: '5011Table2AdjustTestCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'adjustTestCost', 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: '5011Table2PackCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'packCost', 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: '5011Table2ShippingCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'shippingCost', 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: '5011Table2AdjustElseCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'adjustElseCost', 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: '5011Table2TotalCost', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'totalCost', headerAlign: 'center', align: 'right', columnLabel: '总成本', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 80 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2QuoteProfitRate', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'quoteProfitRate', headerAlign: 'center', align: 'right', columnLabel: 'VA%', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 80 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2QuoteProfitAmount', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'quoteProfitAmount', headerAlign: 'center', align: 'right', columnLabel: 'Contribution%', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 100 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2QuoteTaxRate', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'quoteTaxRate', headerAlign: 'center', align: 'right', columnLabel: 'Margin%', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 80 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2QuoteTaxTotalPrice', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'quoteTaxTotalPrice', headerAlign: 'center', align: 'right', columnLabel: 'Price ¥(ex VAT)', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 100 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'unitPrice', 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: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'taxRate', 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: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'exchangeRate1', 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: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'taxUnitPrice', headerAlign: 'center', align: 'right', columnLabel: '含税单价(CNY)', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 100 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'currencyDesc2', 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: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'exchangeRate2', 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: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'currencyTotalCost2', 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: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'unitPrice', headerAlign: 'center', align: 'right', columnLabel: '未税单价(CNY)', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 100 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table2Qty', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'unitPriceRate', 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: '5011Table2Remark', tableId: '5011Table2', tableName: '报价详情信息表', columnProp: 'remark', headerAlign: 'center', align: 'left', columnLabel: '备注', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 120 }, ], partVisible:false, activeName:'bom',
projectPart:{
}, projectPartList:[], pageNo:1, pageSize:20, pageTotal:0, partQueryLoading:false,
projectPartColumns:[ { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table3TestPartNo', tableId: '5011Table3', tableName: '项目物料表', columnProp: 'testPartNo', headerAlign: 'center', align: 'left', columnLabel: '物料编码', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 150 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table3PartDesc', tableId: '5011Table3', tableName: '项目物料表', columnProp: 'partDesc', headerAlign: 'center', align: 'left', columnLabel: '物料名称', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 160 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table3FinalPartNo', tableId: '5011Table3', tableName: '项目物料表', columnProp: 'finalPartNo', headerAlign: 'center', align: 'left', columnLabel: 'IFS物料编码', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 150 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table3CustomerPartNo', tableId: '5011Table3', tableName: '项目物料表', columnProp: 'customerPartNo', headerAlign: 'center', align: 'left', columnLabel: '客户物料编码', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 150 }, { userId: this.$store.state.user.name, functionId: 5011, serialNumber: '5011Table3Type', tableId: '5011Table3', tableName: '项目物料表', columnProp: 'type', 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: '5011Table3UmId', tableId: '5011Table3', tableName: '项目物料表', columnProp: 'umId', headerAlign: 'center', align: 'left', columnLabel: '单位', columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: '', columnWidth: 100 }, ],
exportData:[], exportName: '报价条目明细'+this.dayjs().format('YYYYMMDDHHmmss'), exportHeader: ["报价条目明细"], exportFooter: [],
againVisible:false, againRow:{}, } }, methods:{ handleSaveQuoteDetail(row){ this.$nextTick(()=>{ if (this.$refs.handleSaveQuoteDetailClick){ this.$refs.saveQuoteDetailForm.clearValidate(); } }) if (row){ this.saveQuoteDetail = { ...row } }else { this.saveQuoteDetail = { ...this.quoteDetail, createBy:this.$store.state.user.name, status:'草稿', active:'Y', qty:1, isDetail:false, } if (this.quoteGroupDetail){ this.saveQuoteDetail.partNo = this.quoteGroupDetail.partNo this.saveQuoteDetail.partDesc = this.quoteGroupDetail.partDesc } this.$nextTick(()=>{ this.saveQuoteDetail.projectNo = this.quote.projectNo }) } this.activeName = 'bom'; this.saveVisible = true; }, handleDetail(row){ this.saveQuoteDetail = { ...row } this.activeName = 'bom'; this.saveVisible = true; }, handleDeleteQuoteDetail(row){ this.$alert('确认删除该条报价明细吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { let params = { id: row.id, } deleteQuoteDetail(params).then(({data}) => { if (data && data.code === 0) { this.$message.success(data.msg); this.handleQueryQuoteDetail(); } else { this.$message.warning(data.msg); } }).catch((error) => { this.$message.error(error); }) }).catch(() => { }) }, handlePartNoBlur(){ let params = { site:this.$store.state.user.site, testPartNo:this.saveQuoteDetail.partNo, projectId: this.quote.projectNo, no:1, size:20, } getProjectPartList(params).then(({data})=>{ if (data && data.code === 0){ if (data.rows && data.rows.length === 1){ this.dblClickProjectPartTable(data.rows[0]) }else { this.saveQuoteDetail.partDesc = '' } } }) }, handleQueryQuoteDetail(){ let params = { quoteId: this.quote.id, } if (this.quoteGroupDetail){ params.quoteGroupDetailId=this.quoteGroupDetail.id; } this.queryLoading = true; queryQuoteDetail(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; }) }, handleSaveQuoteDetailClick(){ this.$refs.saveQuoteDetailForm.validate((valid,obj) => { if (valid){ if (this.saveQuoteDetail.id){ this.handleUpdate(); }else { this.handleSave(); } }else { let i = 1; for (let key in obj) { this.$message.error(obj[key][0].message); if (i === 1){ return } i++; } } }) }, handleSave(){ let params = { ...this.saveQuoteDetail, quoteId: this.quote.id, quoteNo:this.quote.quoteNo, site:this.quote.site, buNo:this.quote.buNo, versionNo:this.quote.versionNo, createBy:this.saveQuoteDetail.createBy, active:'Y', status:'草稿', internalInquiryNo:this.quote.insideInquiryNo, } if (this.quoteGroupDetail){ params.quoteGroupDetailId=this.quoteGroupDetail.id; } this.saveLoading = true; saveQuoteDetail(params).then(({data})=>{ if (data && data.code === 0){ this.$message.success(data.msg); this.handleQueryQuoteDetail(); if (this.saveQuoteDetail.isDetail){ this.saveQuoteDetail = { ...data.row, } }else { this.saveVisible = false; } }else { this.$message.warning(data.msg); } this.saveLoading = false }).catch((error)=>{ this.$message.error(error); this.saveLoading = false }) }, handleUpdate(){ let params = { ...this.saveQuoteDetail, updateBy:this.$store.state.user.name, } updateQuoteDetail(params).then(({data})=>{ if (data && data.code === 0){ this.$message.success(data.msg); this.handleQueryQuoteDetail(); this.saveVisible = false; }else { this.$message.warning(data.msg); } }).catch((error)=>{ this.$message.error(error); }) }, handleClickTab(tab){ if (this.activeName === 'routing'){ this.$refs.routing.handleQueryQuoteDetailBomTree() }else if (this.activeName === 'tool'){ this.$refs.tool.handleQueryQuoteDetailTool(); } }, handleAgainQuoteDetail(row){ this.againRow = row; this.againVisible = true; }, againQuoteDetail(){ this.$refs.againForm.validate((valid,obj) => { if (valid){ this.queryLoading = true; this.saveLoading = true; againQuoteDetail(this.againRow).then(({data})=>{ if (data && data.code === 0){ this.againVisible = false this.handleQueryQuoteDetail(); this.$message.success(data.msg); }else { this.$message.warning(data.msg); } this.queryLoading = false; this.saveLoading = false; }).catch((error)=>{ this.$message.error(error); this.queryLoading = false; this.saveLoading = false; }) }else { let i = 1; for (let key in obj) { this.$message.error(obj[key][0].message); if (i === 1){ return } i++; } } }) }, handleQueryPartList(){ this.projectPart = { testPartNo:this.saveQuoteDetail.partNo, partDesc:'', finalPartNo:'', customerPartNo:'', site:this.$store.state.user.site, } this.partVisible = true; this.getProjectPartList(); }, getProjectPartList(){ let params = { ...this.projectPart, no:this.pageNo, size:this.pageSize, } params.projectId = this.quote.projectNo this.partQueryLoading = true; getProjectPartList(params).then(({data})=>{ if (data && data.code === 0){ this.projectPartList = data.rows; this.pageTotal = data.total; } this.partQueryLoading = false; }).catch((error)=>{ this.partQueryLoading = false; }) }, handleSizeChange(val){ this.pageSize = val; this.getProjectPartList(); }, handleCurrentChange(val){ this.pageNo = val; this.getProjectPartList(); }, dblClickProjectPartTable(row){ this.saveQuoteDetail.partNo = row.testPartNo; this.saveQuoteDetail.partDesc = row.partDesc; this.partVisible = false; }, handleClose(){ this.$emit('close'); this.saveVisible = false; }, fields() { let json = "{" this.columns.forEach((item, index) => { if (index === this.columns.length - 1) { json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" } else { json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + "," } }) json += "}" return eval("(" + json + ")") }, createExportData() { return this.dataList; }, toPartMenu (partNo) { if (this.$router.resolve(`/part-partInformation`).resolved.name === '404') { this.$alert('权限不足,访问失败', '警告', {confirmButtonText: '确定',}) } else { this.$router.push({name:`part-partInformation`,params:{partNo:partNo},}) } }, formatDecimal(value) { const num = parseFloat(value); return !isNaN(num) ? num.toFixed(4) : value; }, handleSetDefaultQuoteRow(row) { if (!this.isAuth('5011:group:current')) { return; } const oldVal = this.quoteGroupDetail.currentQuoteDetailItemNo; this.quoteGroupDetail.currentQuoteDetailItemNo = row.itemNo; // 直接触发emit事件
this.$emit('currentQuoteDetailItemNo', oldVal); } }, watch:{ quote(newVal,oldVal){ if (newVal.id){ this.quoteDetail.profitRate = this.quote.markup this.quoteDetail.quoteProfitRate = this.quote.markup this.handleQueryQuoteDetail(); }else { this.dataList = []; } }, "saveQuoteDetail.partNo"(newVal,oldVal){ if (newVal){ this.saveQuoteDetail.partNo = newVal.toUpperCase(); } }, partVisible(newVal,oldVal){ if (newVal === false){ this.partQueryLoading = false this.pageNo = 1; this.projectPartList = []; } }, quoteGroupDetail(newVal,oldVal){ if (newVal){ this.quoteDetail.profitRate = this.quote.markup this.quoteDetail.quoteProfitRate = this.quote.markup this.handleQueryQuoteDetail(); } }, // 'quoteGroupDetail.currentQuoteDetailItemNo'(newVal,oldVal){
// // console.log(this.quoteGroupDetail)
// // emit事件触发修改
// if (this.quoteGroupDetail && this.quoteGroupDetail.currentQuoteDetailItemNo){
// this.$emit('currentQuoteDetailItemNo',oldVal);
// }
// }
}, created() { this.quoteDetail.profitRate = this.quote.markup this.quoteDetail.quoteProfitRate = this.quote.markup this.handleQueryQuoteDetail(); }}</script>
<template><div> <template v-if="saveAuth"> <el-button type="primary" v-if="!authFlag" :disabled="quote.status === '下达' || !quote.status" @click="handleSaveQuoteDetail(null)">新增</el-button> </template> <template v-if="isExport"> <download-excel :fields="fields()" :data="exportData" type="xls" :name="exportName" :header="exportHeader" :footer="exportFooter" :fetch="createExportData" worksheet="导出信息" class="el-button el-button--primary el-button--medium"> {{ '导出' }} </download-excel> </template> <el-table v-loading="queryLoading" border :data="dataList" style="width: 100%;margin-top: 5px" :height="height"> <el-table-column width="80" align="center" label="默认报价行" v-if="quoteGroupDetail && quoteGroupDetail.status === '草稿'"> <template slot-scope="{row}"> <div @click="handleSetDefaultQuoteRow(row)" style="cursor: pointer;"> <el-radio class="radio" :label="row.itemNo" :disabled="!isAuth('5011:group:current')" v-model="quoteGroupDetail.currentQuoteDetailItemNo" @click.native.stop.prevent ></el-radio> </div> </template> </el-table-column> <el-table-column type="index" width="55" align="center" label="序号"></el-table-column> <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 === 'unitPriceRate'"> {{ formatDecimal(scope.row.unitPriceRate) }} </template> <template v-else-if="!quoteGroupDetail && item.columnProp === 'plmPartNo'"> <el-link style="cursor:pointer;" v-if="!item.columnHidden" @click="toPartMenu(scope.row.plmPartNo)"> {{ scope.row[item.columnProp] }}</el-link> <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span> </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-column label="操作" v-if="!authFlag" fixed="right" align="center" width="160"> <template slot-scope="{row,$index}"> <template v-if="isAuth('5011:detail:update')"> <a type="text" v-if="row.status === '草稿'" @click="handleSaveQuoteDetail(row)">编辑</a> </template> <template v-if="isAuth('5011:detail:remove')"> <a type="text" v-if="row.status === '草稿'" @click="handleDeleteQuoteDetail(row)">删除</a> </template> <template v-if="isAuth('5011:detail:again')"><!-- <a type="text" v-if="row.status !== '下达'" @click="againQuoteDetail(row)">复制明细</a>--> <a type="text" v-if="row.status !== '下达'" @click="handleAgainQuoteDetail(row)">复制明细</a> </template> <template v-if="isAuth('5011:detail:detail')"> <a type="text" v-if="row.status === '下达'" @click="handleDetail(row)">详情</a> </template> </template> </el-table-column> </el-table>
<el-dialog :title="`报价明细`" top="10vh" v-drag :visible.sync="saveVisible" append-to-body :width="`${saveQuoteDetail.id?1200:600}px`" :close-on-click-modal="false"> <el-form :model="saveQuoteDetail" ref="saveQuoteDetailForm" :rules="saveQuoteDetailRules" label-position="top" v-if="!saveQuoteDetail.id"> <el-row :gutter="20"> <el-col :span="8"> <el-form-item label="物料编码" prop="partNo" :show-message="false"> <span slot="label" v-if="!quoteGroupDetail"> <a @click="handleQueryPartList">物料编码</a> </span> <el-input v-model="saveQuoteDetail.partNo" :disabled="quoteGroupDetail" @change="handlePartNoBlur"></el-input> </el-form-item> </el-col> <el-col :span="16"> <el-form-item label="物料名称" prop="partDesc" :show-message="false"> <el-input v-model="saveQuoteDetail.partDesc" disabled></el-input> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="MOQ" prop="qty" :show-message="false"> <el-input-number style="width: 100%;" v-model="saveQuoteDetail.qty" :min="1" :step="0" :precision="0" :controls="false"></el-input-number> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="币种" prop="currency1" :show-message="false"> <dict-data-select style="width: 100%" v-if="saveVisible" dict-type="plm_customer_information_customer_customer_currency" v-model="saveQuoteDetail.currency1"></dict-data-select> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="8"> <el-form-item label="" :show-message="false"> <el-checkbox v-model="saveQuoteDetail.isDetail">保存进入报价页面</el-checkbox> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="备注" class="auto" :show-message="false"> <el-input type="textarea" v-model="saveQuoteDetail.remark" :autosize="{minRows: 3, maxRows: 3}"></el-input> </el-form-item> </el-col> </el-row> </el-form> <el-form v-else :model="saveQuoteDetail" ref="saveQuoteDetailForm" :rules="saveQuoteDetailRules" label-position="top"> <el-row :gutter="20"> <el-col :span="4"> <el-form-item label="物料编码" prop="partNo" :show-message="false"> <el-input v-model="saveQuoteDetail.partNo" disabled></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="物料名称" prop="partDesc" :show-message="false"> <el-input v-model="saveQuoteDetail.partDesc" disabled></el-input> </el-form-item> </el-col> <el-col :span="3"> <el-form-item label="MOQ" prop="qty" :show-message="false"> <el-input-number v-model="saveQuoteDetail.qty" style="width: 100%;" :controls="false" :disabled="saveQuoteDetail.status === '下达'"></el-input-number> </el-form-item> </el-col> <el-col :span="3"> <el-form-item label="币种" prop="currency1" :show-message="false"> <dict-data-select :disabled="saveQuoteDetail.status === '下达'" style="width: 100%" dict-type="plm_customer_information_customer_customer_currency" v-model="saveQuoteDetail.currency1"></dict-data-select> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="16"> <el-form-item label="备注" class="auto" :show-message="false"> <el-input type="textarea" resize="none" :autosize="{minRows: 3, maxRows: 3}" v-model="saveQuoteDetail.remark" :disabled="saveQuoteDetail.status === '下达'"></el-input> </el-form-item> </el-col> </el-row> </el-form>
<el-tabs v-model="activeName" v-if="saveQuoteDetail.id" @tab-click="handleClickTab"> <el-tab-pane label="材料" name="bom"> <quote-detail-bom v-if="saveVisible" @close="handleClose" v-model:quoteDetail="saveQuoteDetail"></quote-detail-bom> </el-tab-pane> <el-tab-pane label="工艺" name="routing"> <quote-detail-routing ref="routing" v-if="saveVisible" @close="handleClose" v-model:quoteDetail="saveQuoteDetail"></quote-detail-routing> </el-tab-pane> <el-tab-pane label="工具" name="tool"> <quote-detail-tool ref="tool" v-if="saveVisible" v-model:quoteDetail="saveQuoteDetail"></quote-detail-tool> </el-tab-pane> <el-tab-pane label="测试" name="test"> <quote-detail-test v-if="saveVisible" v-model:quoteDetail="saveQuoteDetail"></quote-detail-test> </el-tab-pane> <el-tab-pane label="包装&运输" name="otherCost"> <quote-detail-other-cost v-if="saveVisible" v-model:quoteDetail="saveQuoteDetail"></quote-detail-other-cost> </el-tab-pane> <el-tab-pane label="其他" name="other"> <quote-detail-other v-if="saveVisible" v-model:quoteDetail="saveQuoteDetail"></quote-detail-other> </el-tab-pane> <el-tab-pane label="成本&价格" name="cost"> <quote-detail-cost v-if="saveVisible" ref="cost" v-model:quoteDetail="saveQuoteDetail"></quote-detail-cost> </el-tab-pane> </el-tabs> <div slot="footer" class="dialog-footer"> <el-button type="primary" v-if="saveQuoteDetail.status === '草稿'" :loading="saveLoading" @click="handleSaveQuoteDetailClick">确 定</el-button> <el-button @click="saveVisible = false">取 消</el-button> </div> </el-dialog>
<el-dialog v-drag title="物料信息" append-to-body :close-on-click-modal="false" :visible.sync="partVisible"> <!--搜索条件--> <el-form :model="projectPart" ref="projectPartDataForm" :inline="true" label-position="top"> <el-form-item label="物料编码" prop="testPartNo"> <el-input v-model="projectPart.testPartNo" clearable/> </el-form-item> <el-form-item label="物料名称" prop="partDesc"> <el-input v-model="projectPart.partDesc" clearable/> </el-form-item> <el-form-item label="IFS物料编码" prop="finalPartNo"> <el-input v-model="projectPart.finalPartNo" clearable/> </el-form-item> <el-form-item label="客户物料编码" prop="customerPartNo"> <el-input v-model="projectPart.customerPartNo" clearable/> </el-form-item> <el-form-item label=" "> <el-button @click="getProjectPartList" type="primary">查 询</el-button> </el-form-item> </el-form> <el-table height="300px" v-loading="partQueryLoading" stripe border @row-dblclick="dblClickProjectPartTable" :data="projectPartList" ref="projectPartDataTable" :style="{marginTop:'10px'}"> <el-table-column v-for="(item,index) in projectPartColumns" :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-pagination style="margin-top: 0" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNo" :page-sizes="[20, 50, 100, 200, 500]" :page-size="pageSize" :total="pageTotal" layout="total,sizes, prev, pager, next, jumper"> </el-pagination> </el-dialog>
<el-dialog title="复制明细" v-drag append-to-body :close-on-click-modal="false" :visible.sync="againVisible" width="400px"> <el-form :model="againRow" label-position="top" ref="againForm" :rules="saveQuoteDetailRules"> <el-row :gutter="10"> <el-col :span="8"> <el-form-item label="物料编码" prop="partNo" :show-message="false"> <el-input v-model="againRow.partNo" disabled @change="handlePartNoBlur"></el-input> </el-form-item> </el-col> <el-col :span="16"> <el-form-item label="物料名称" prop="partDesc" :show-message="false"> <el-input v-model="againRow.partDesc" disabled></el-input> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="MOQ" prop="qty" :show-message="false"> <el-input-number style="width: 100%;" v-model="againRow.qty" :min="1" :step="0" :precision="0" :controls="false"></el-input-number> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="币种" prop="currency1" :show-message="false"> <dict-data-select style="width: 100%" dict-type="plm_customer_information_customer_customer_currency" v-model="againRow.currency1"></dict-data-select> </el-form-item> </el-col> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" :loading="saveLoading" @click="againQuoteDetail">确 定</el-button> <el-button @click="againVisible = false">取 消</el-button> </div> </el-dialog>
<!-- <part-table v-if="saveVisible" v-model="partVisible" :is-page="true" :part-no="saveQuoteDetail.partNo" @dblclick="handleDblClick"></part-table>--><!-- <project-part-table v-if="saveVisible" v-model="partVisible" :project-no="saveQuoteDetail.projectNo" :part-no="saveQuoteDetail.partNo" @dblclick="handleDblClick"></project-part-table>--></div></template>
<style scoped>.el-table /deep/ .cell{ height: auto; line-height: 1.5;}
.auto /deep/ .el-form-item__content{ height: auto; line-height: 1.5;}
.radio /deep/ .el-radio__label{ display: none;}</style>
|