14 changed files with 2888 additions and 20 deletions
-
5src/api/quotation/quote.js
-
9src/api/quotation/quoteDetail.js
-
11src/api/quotation/quoteProperties.js
-
347src/views/modules/cdc/collectScreen.vue
-
891src/views/modules/proofing/index.vue
-
578src/views/modules/quotation/index.vue
-
7src/views/modules/quotation/sellForQuotation.vue
-
13src/views/modules/quotation/sellForQuotation/quotationCustomerContact.vue
-
52src/views/modules/quotation/sellForQuotation/quotationDetail/quoteBomInfo.vue
-
23src/views/modules/quotation/sellForQuotation/quotationDetail/quoteCostPrice.vue
-
262src/views/modules/quotation/sellForQuotation/quotationDetail/quoteOtherCost.vue
-
10src/views/modules/quotation/sellForQuotation/quotationDetail/quoteRouting.vue
-
16src/views/modules/quotation/sellForQuotation/quoteDetail.vue
-
684src/views/modules/quotation/sellForQuotation/quoteDetailInfo.vue
@ -0,0 +1,5 @@ |
|||
import {createAPI} from "../../utils/httpRequest"; |
|||
|
|||
export const getQuoteList = (data)=>createAPI(`/quote/list`,'post',data) |
|||
|
|||
export const getQuotePage = (data,no,size)=>createAPI(`/quote/page/${no}/${size}`,'post',data) |
|||
@ -0,0 +1,9 @@ |
|||
import {createAPI} from "../../utils/httpRequest"; |
|||
|
|||
export const getQuoteDetailList = (data)=>createAPI(`/quote/detail/list`,'post',data) |
|||
|
|||
export const saveQuoteDetail = (data)=>createAPI(`/quote/detail/save`,'post',data) |
|||
|
|||
export const updateQuoteDetail = (data)=>createAPI(`/quote/detail/update`,'post',data) |
|||
|
|||
export const removeQuoteDetail = (data)=>createAPI(`/quote/detail/remove`,'post',data) |
|||
@ -0,0 +1,11 @@ |
|||
import {createAPI} from "../../utils/httpRequest"; |
|||
|
|||
export const getQuotePropertiesBaseList = (data) => createAPI(`/quote/detail/properties/base/list`,'post',data) |
|||
|
|||
export const getQuotePropertiesList = (data) => createAPI(`/quote/detail/properties/list`,'post',data) |
|||
|
|||
export const saveQuoteProperties = (data) => createAPI(`/quote/detail/properties/save`,'post',data) |
|||
|
|||
export const removeQuoteProperties = (data) => createAPI(`/quote/detail/properties/remove`,'post',data) |
|||
|
|||
export const updateQuoteProperties = (data) => createAPI(`/quote/detail/properties/update`,'post',data) |
|||
@ -0,0 +1,347 @@ |
|||
<template> |
|||
<div class="echarts"> |
|||
<div class="header " style="display: flex;justify-content: space-between;align-items: center;height: 6%;padding: 5px"> |
|||
<div style="width: 30%"><img style="max-width: 20%;max-height: 100%;vertical-align:middle;" src="~@/assets/img/ccl.png" ></div> |
|||
<div style="width: 40%;text-align: center;font-size: 24px;font-weight: 400">CCL Coating 监控大屏/Monitor Platform</div> |
|||
<div style="width: 30%;font-size: 13px"> |
|||
<el-row> |
|||
<el-col :span="6" :offset="18"> |
|||
<div>当前时间/Time:</div> |
|||
<div>{{dateFormat(this.newTime)}}</div> |
|||
</el-col> |
|||
</el-row> |
|||
</div> |
|||
</div> |
|||
<div class="content"> |
|||
涂布设备-大线/Coating Machine-Line 1# |
|||
</div> |
|||
<div class="pie"> |
|||
<div class="pie_left"> |
|||
<div class="pie_content" > |
|||
<span style="padding: 5px 10px;border-bottom: 1px solid #ccc;">静电/xxxx</span> |
|||
</div> |
|||
<div class="pie_chart" style="text-align: center;"> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
</div> |
|||
<div class="pie_content pie_footer"> |
|||
<div>上限/Upper - 1.28</div> |
|||
<div>下限/Lower - 1.20</div> |
|||
</div> |
|||
</div> |
|||
<div class="pie_right"> |
|||
<div class="pie_content"> |
|||
<span style="padding: 5px 10px;border-bottom: 1px solid #ccc;">浓度/xxxx</span> |
|||
</div> |
|||
<div class="pie_chart" style="text-align: center;"> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
</div> |
|||
<div class="pie_content pie_footer"> |
|||
<div>上限/Upper - 75</div> |
|||
<div>下限/Lower - 60</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="content"> |
|||
涂布设备-小线/Coating Machine-Line 2# |
|||
</div> |
|||
<div class="pie"> |
|||
<div class="pie_left"> |
|||
<div class="pie_content"> |
|||
<span style="padding: 5px 10px;border-bottom: 1px solid #ccc;">静电/xxxx</span> |
|||
</div> |
|||
<div class="pie_chart" style="text-align: center;"> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
</div> |
|||
<div class="pie_content pie_footer"> |
|||
<div>上限/Upper - 1.28</div> |
|||
<div>下限/Lower - 1.20</div> |
|||
</div> |
|||
</div> |
|||
<div class="pie_right"> |
|||
<div class="pie_content"> |
|||
<span style="padding: 5px 10px;border-bottom: 1px solid #ccc;">浓度/xxxx</span> |
|||
</div> |
|||
<div class="pie_chart" style="text-align: center;"> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
<div> |
|||
<div style="margin-bottom: 20px"> |
|||
<div>一放</div> |
|||
<div>xxxx</div> |
|||
</div> |
|||
<div style="border-radius: 50%;border: 1px solid #ccc;width: 80px;height: 80px;line-height: 80px">12222</div> |
|||
</div> |
|||
</div> |
|||
<div class="pie_content pie_footer"> |
|||
<div>上限/Upper - 75</div> |
|||
<div>下限/Lower - 60</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="content"> |
|||
配妆间/Adhensive Workshop |
|||
</div> |
|||
<div style="border: 1px solid #ccc;padding: 0 10px;height: 34%"> |
|||
<div style="width: 100%;height: 100%" id="main"> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import dayjs from "dayjs"; |
|||
|
|||
export default { |
|||
name: 'collectScreen', |
|||
data(){ |
|||
return{ |
|||
newTime:new Date(), |
|||
} |
|||
}, |
|||
methods:{ |
|||
dateFormat(){ |
|||
return dayjs().format("YYYY-MM-DD HH:mm:ss") |
|||
}, |
|||
initCharts(){ |
|||
let myChart = this.$echarts.init(document.getElementById('main')); |
|||
let option = { |
|||
title: { |
|||
text: '浓度/xxxx', |
|||
left: 'center' |
|||
}, |
|||
color: ['#2f82d7'], |
|||
xAxis: { |
|||
data: ['1#', '2#', '3#', '4#', '5#', '6#', '7#'] |
|||
}, |
|||
yAxis: { |
|||
type: 'value' |
|||
}, |
|||
series: [ |
|||
{ |
|||
type: 'bar', |
|||
data: [23, 24, 18, 25, 27, 28, 25], |
|||
barWidth: '20%', |
|||
markLine:{ |
|||
data : [ |
|||
{ |
|||
yAxis : 16, |
|||
name : '下限/Lower - 16' |
|||
}, { |
|||
yAxis : 20, |
|||
name : '上限/Upper - 20' |
|||
} |
|||
], |
|||
label : { |
|||
normal : { |
|||
formatter :function (param) { |
|||
return param.name; |
|||
} |
|||
}, |
|||
}, |
|||
} |
|||
} |
|||
], |
|||
}; |
|||
option && myChart.setOption(option); |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.timer = setInterval(()=>{ |
|||
this.newTime = new Date() |
|||
}) |
|||
this.initCharts(); |
|||
}, |
|||
beforeDestroy() { |
|||
if (this.timer){ |
|||
clearInterval(this.timer) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.echarts{ |
|||
height:100vh; |
|||
padding: 5px; |
|||
} |
|||
.pie{ |
|||
display: flex; |
|||
gap: 10px; |
|||
height: 28%; |
|||
} |
|||
|
|||
.pie_left{ |
|||
border: 1px solid #ccc; |
|||
padding: 10px; |
|||
margin-bottom: 10px; |
|||
width: 62% |
|||
} |
|||
|
|||
.pie_right{ |
|||
border: 1px solid #ccc; |
|||
padding: 10px; |
|||
margin-bottom: 10px; |
|||
width: 48% |
|||
} |
|||
.pie_content{ |
|||
height: 15%; |
|||
text-align: center; |
|||
padding: 10px; |
|||
line-height: 1.5 |
|||
} |
|||
.pie_footer{ |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-around; |
|||
} |
|||
.pie_chart{ |
|||
height: 70%; |
|||
display: flex; |
|||
justify-content: space-evenly; |
|||
align-items: center; |
|||
} |
|||
|
|||
</style> |
|||
@ -0,0 +1,891 @@ |
|||
<script> |
|||
import DictDataSelect from "../sys/dict-data-select.vue"; |
|||
import {proofingInformationDelete, proofingInformationSearch} from "../../../api/proofing/proofingInformation"; |
|||
import dayjs from "dayjs"; |
|||
import CustomerInfo from "../quotation/sellForQuotation/customerInfo.vue"; |
|||
import {getCustomerInformation, getProjectInformation} from "../../../api/quotation/quotationInformation"; |
|||
import ProjectInfo from "../quotation/sellForQuotation/projectInfo.vue"; |
|||
import button from "element-ui/packages/button"; |
|||
|
|||
export default { |
|||
name: "proofing", |
|||
components: {ProjectInfo, CustomerInfo, DictDataSelect}, |
|||
props: { |
|||
height: { |
|||
type: Number, |
|||
default: 400 |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
queryForm: { |
|||
proofingNo: '', |
|||
customerNo: '', |
|||
customerDesc: '', |
|||
trackerName: '', |
|||
testPartNo: '', |
|||
partName: '', |
|||
endDate: '', |
|||
projectId: '', |
|||
projectName: '', |
|||
engineerName: '', |
|||
priorityLevel: '', |
|||
proofingStatus: '', |
|||
}, |
|||
queryFormLabel: { |
|||
proofingNo: '打样单号', |
|||
customerNo: '客户单号', |
|||
customerDesc: '客户名称', |
|||
trackerName: 'CS', |
|||
testPartNo: '项目料号', |
|||
partName: '产品名称', |
|||
startDate: '要求交付日期', |
|||
endDate: ' ', |
|||
projectId: '项目编码', |
|||
projectName: '项目名称', |
|||
engineerName: 'NPI工程师', |
|||
priorityLevel: '优先等级', |
|||
proofingStatus: '状态', |
|||
proofingNumber: '打样数量', |
|||
requiredDeliveryDate: '要求交付日期', |
|||
approverName: 'Approver', |
|||
delegateAccessName: 'DelegateAccess', |
|||
}, |
|||
optionsButton: { |
|||
add: '新增', |
|||
edit: '编辑', |
|||
delete: '删除', |
|||
query: '查询', |
|||
export: '导出', |
|||
import: '导入', |
|||
reset: '重置', |
|||
cancel: '取消', |
|||
confirm: '确定', |
|||
}, |
|||
|
|||
exportData: [], |
|||
exportName:'打样信息'+dayjs().format('YYYYMMDDHHmmss'), |
|||
exportHeader:['打样信息'], |
|||
exportFooter: [], |
|||
|
|||
|
|||
open: false, |
|||
form: {}, |
|||
|
|||
|
|||
dataList: [], |
|||
loading: false, |
|||
selectionList: [], |
|||
row: {}, |
|||
no:1, |
|||
size:50, |
|||
total:0, |
|||
columnList: [ |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1ProofingNo', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'proofingNo', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '打样单号', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1CustomerNo', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'customerNo', |
|||
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: 103001, |
|||
serialNumber: '103001Table1CustomerDesc', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'customerDesc', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '客户名称', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1ProjectId', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'projectId', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '项目编码', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 110 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1ProjectName', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'projectName', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '项目名称', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1TrackerName', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'trackerName', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: 'CS', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 80 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1EngineerName', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'engineerName', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: 'NPI工程师', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 80 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1EngineerName', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'approverName', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: 'Approver', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 80 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1TestPartNo', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'testPartNo', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '项目料号', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 150 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1PartName', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'partName', |
|||
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: 103001, |
|||
serialNumber: '103001Table1PriorityLevel', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'priorityLevel', |
|||
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: 103001, |
|||
serialNumber: '103001Table1ProofingNumber', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'proofingNumber', |
|||
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: 103001, |
|||
serialNumber: '103001Table1RequiredDeliveryDate', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'requiredDeliveryDate', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '要求交付日期', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 160 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1ProofingStatus', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'proofingStatus', |
|||
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: 103001, |
|||
serialNumber: '103001Table1CreateDate', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'createDate', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '创建时间', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 160 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1CreateBy', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'createBy', |
|||
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: 103001, |
|||
serialNumber: '103001Table1UpdateDate', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'updateDate', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '更新时间', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 160 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 103001, |
|||
serialNumber: '103001Table1UpdateBy', |
|||
tableId: '103001Table1', |
|||
tableName: '打样信息表', |
|||
columnProp: 'updateBy', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '更新人', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 80 |
|||
} |
|||
], |
|||
|
|||
activeName:'detail', |
|||
customer:{}, |
|||
project:{}, |
|||
|
|||
rules:{ |
|||
|
|||
}, |
|||
partDataList:[], |
|||
} |
|||
}, |
|||
methods: { |
|||
handleAdd() { |
|||
this.open = true; |
|||
}, |
|||
handleEdit(row){ |
|||
console.log(row) |
|||
this.form = {...row} |
|||
this.open = true; |
|||
}, |
|||
handleDelete(){ |
|||
if (this.ids.length === 0){ |
|||
this.$message.warning("请先选择需要删除的打样信息"); |
|||
return |
|||
} |
|||
this.$confirm(`确定要删除,打样单号[${this.ids.join(',')}]的打样信息?`, '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning' |
|||
}).then(()=>{ |
|||
let params = { |
|||
informationList: this.selectionList |
|||
} |
|||
proofingInformationDelete(params).then(({data}) => { |
|||
if (data && data.code === 0) { |
|||
this.handleQuery(); |
|||
this.$message.success('操作成功') |
|||
} else { |
|||
this.$alert(data.msg, '错误', { |
|||
confirmButtonText: '确定' |
|||
}) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error) |
|||
}) |
|||
}) |
|||
}, |
|||
handleSave(){ |
|||
this.open = false; |
|||
}, |
|||
|
|||
|
|||
rowStyle({row}) { |
|||
if (this.row.proofingNo === row.proofingNo) { |
|||
return {'background-color': '#E8F7F6', cursor: 'pointer'}; |
|||
} |
|||
}, |
|||
rowClick(row) { |
|||
this.row = {...row} |
|||
}, |
|||
handleQuery(){ |
|||
this.no = 1 |
|||
this.getDataList() |
|||
}, |
|||
getDataList(){ |
|||
let params = { |
|||
...this.queryForm, |
|||
page: this.no, |
|||
limit: this.size, |
|||
site:this.$store.state.user.site |
|||
} |
|||
this.loading = true |
|||
proofingInformationSearch(params).then(({data}) => { |
|||
if (data && data.code === 0) { |
|||
this.dataList = data.page.list |
|||
if (this.dataList.length > 0){ |
|||
this.row = {...this.dataList[0]}; |
|||
} |
|||
this.total = data.page.totalCount |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
this.loading = false |
|||
}).catch((error)=>{ |
|||
this.$message.error(error) |
|||
}) |
|||
}, |
|||
sizeChangeHandle(val){ |
|||
this.size = val |
|||
this.getDataList() |
|||
}, |
|||
currentChangeHandle(val){ |
|||
this.no = val |
|||
this.getDataList() |
|||
}, |
|||
getCustomerInfo(){ |
|||
let params = { |
|||
site:this.row.site, |
|||
customerNo:this.row.customerNo, |
|||
} |
|||
getCustomerInformation(params).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
if (data.rows && data.rows.length > 0){ |
|||
this.customer = data.rows[0]; |
|||
}else { |
|||
this.customer = {}; |
|||
} |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error); |
|||
}) |
|||
}, |
|||
getQuoteProjectInfo(){ |
|||
let params = { |
|||
site:this.row.site, |
|||
projectId:this.row.projectId, |
|||
} |
|||
getProjectInformation(params).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
if (data.rows && data.rows.length > 0){ |
|||
this.project = data.rows[0]; |
|||
}else { |
|||
this.project = {}; |
|||
} |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error); |
|||
}) |
|||
}, |
|||
|
|||
|
|||
fields () { |
|||
let json = '{' |
|||
this.columnList.forEach((item, index) => { |
|||
if (index === this.columnList.length - 1) { |
|||
json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' |
|||
} else { |
|||
json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ',' |
|||
} |
|||
}) |
|||
json += '}' |
|||
let s = eval('(' + json + ')') |
|||
return s |
|||
}, |
|||
async createExportData () { |
|||
let params = { |
|||
...this.queryForm, |
|||
site:this.$store.state.user.site, |
|||
limit:-1, |
|||
page:1, |
|||
} |
|||
let {data} = await proofingInformationSearch(params) |
|||
if (data && data.code === 0){ |
|||
return data.page.list |
|||
} |
|||
return []; |
|||
}, |
|||
startDownload () { |
|||
}, |
|||
finishDownload () { |
|||
}, |
|||
|
|||
|
|||
|
|||
selectionTableList(val){ |
|||
this.selectionList = val |
|||
} |
|||
}, |
|||
computed: { |
|||
button() { |
|||
return button |
|||
}, |
|||
ids(){ |
|||
return this.selectionList.map(item => item.proofingNo) |
|||
} |
|||
}, |
|||
watch: { |
|||
row: { |
|||
handler() { |
|||
this.getCustomerInfo(); |
|||
this.getQuoteProjectInfo(); |
|||
}, |
|||
}, |
|||
'queryForm.proofingNo'(newVal,oldVal){ |
|||
if (newVal){ |
|||
this.queryForm.proofingNo = newVal.toUpperCase(); |
|||
} |
|||
}, |
|||
'queryForm.customerNo'(newVal,oldVal){ |
|||
if (newVal){ |
|||
this.queryForm.customerNo = newVal.toUpperCase(); |
|||
} |
|||
}, |
|||
'queryForm.testPartNo'(newVal,oldVal){ |
|||
if (newVal){ |
|||
this.queryForm.testPartNo = newVal.toUpperCase(); |
|||
} |
|||
}, |
|||
'queryForm.projectId'(newVal,oldVal){ |
|||
if (newVal){ |
|||
this.queryForm.projectId = newVal.toUpperCase(); |
|||
} |
|||
}, |
|||
}, |
|||
created() { |
|||
this.getDataList(); |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<div> |
|||
<div style="width: 1100px"> |
|||
<el-form ref="queryForm" :model="queryForm" label-position="top"> |
|||
<el-row :gutter="10"> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.proofingNo" prop="proofingNo"> |
|||
<el-input v-model="queryForm.proofingNo"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.customerNo" prop="customerNo"> |
|||
<el-input v-model="queryForm.customerNo"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.customerDesc" prop="customerDesc"> |
|||
<el-input v-model="queryForm.customerDesc"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.trackerName" prop="trackerName"> |
|||
<el-input v-model="queryForm.trackerName"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.testPartNo" prop="testPartNo"> |
|||
<el-input v-model="queryForm.testPartNo"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.partName" prop="partName"> |
|||
<el-input v-model="queryForm.partName"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="6"> |
|||
<el-row :gutter="10"> |
|||
<el-col :span="11"> |
|||
<el-form-item :label="queryFormLabel.startDate" prop="startDate"> |
|||
<el-date-picker |
|||
v-model="queryForm.startDate" |
|||
type="date" |
|||
style="width: 100%" |
|||
value-format="yyyy-MM-dd" |
|||
placeholder="选择日期"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="2"> |
|||
<el-form-item label=" "> |
|||
<div style="text-align: center;"><i class="el-icon-right"></i></div> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="11"> |
|||
<el-form-item :label="queryFormLabel.endDate" prop="endDate"> |
|||
<el-date-picker |
|||
v-model="queryForm.endDate" |
|||
type="date" |
|||
style="width: 100%" |
|||
value-format="yyyy-MM-dd" |
|||
placeholder="选择日期"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.projectId" prop="projectId"> |
|||
<el-input v-model="queryForm.projectId"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.projectName" prop="projectName"> |
|||
<el-input v-model="queryForm.projectName"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.engineerName" prop="engineerName"> |
|||
<el-input v-model="queryForm.engineerName"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.priorityLevel" prop="priorityLevel"> |
|||
<dict-data-select v-model="queryForm.priorityLevel" clearable :use-default-value="false" |
|||
dict-type="priority_Level"></dict-data-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item :label="queryFormLabel.proofingStatus" prop="proofingStatus"> |
|||
<el-select v-model="queryForm.proofingStatus"> |
|||
<el-option label="全部" value=""></el-option> |
|||
<el-option label="草稿" value="草稿"></el-option> |
|||
<el-option label="下达" value="下达"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="6"> |
|||
<el-form-item label=" "> |
|||
<el-button type="primary" @click="handleQuery">{{ optionsButton.query }}</el-button> |
|||
<el-button type="primary" @click="handleAdd">{{ optionsButton.add }}</el-button> |
|||
<el-button type="primary" @click="handleDelete">{{ optionsButton.delete }}</el-button> |
|||
<download-excel |
|||
:fields="fields()" |
|||
:data="exportData" |
|||
type="xls" |
|||
:name="exportName" |
|||
:header="exportHeader" |
|||
:footer="exportFooter" |
|||
:fetch="createExportData" |
|||
:before-generate="startDownload" |
|||
:before-finish="finishDownload" |
|||
worksheet="导出信息" |
|||
class="el-button el-button--primary el-button--medium"> |
|||
{{ optionsButton.export }} |
|||
</download-excel> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<div> |
|||
<el-table :data="dataList" |
|||
border |
|||
:height="height" ref="table" |
|||
:row-style="rowStyle" |
|||
v-loading="loading" |
|||
@selection-change="selectionTableList" |
|||
@row-click="rowClick"> |
|||
<el-table-column |
|||
type="selection" |
|||
header-align="center" |
|||
align="center" |
|||
width="50"> |
|||
</el-table-column> |
|||
<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"> |
|||
<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 |
|||
fixed="right" |
|||
header-align="center" |
|||
align="center" |
|||
width="100" |
|||
label="操作"> |
|||
<template slot-scope="scope"> |
|||
<el-link style="cursor: pointer" @click="handleEdit(scope.row)">编辑</el-link> |
|||
<el-link style="cursor: pointer" v-if="scope.row.proofingStatus === '草稿'">下达</el-link> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div style="float:left;font-size: 13px;margin-top: 8px;color: #777" v-html='`共 <span style="color:rgb(23, 179, 163) ">${total}</span> 条 记 录,已 选 <span style="color:rgb(23, 179, 163) ">${ids.length}</span> 条`'></div> |
|||
<el-pagination style="margin-top: 0px" |
|||
@size-change="sizeChangeHandle" |
|||
@current-change="currentChangeHandle" |
|||
:current-page="no" |
|||
:page-sizes="[20, 50, 100, 200, 500]" |
|||
:page-size="size" |
|||
:total="total" |
|||
layout="total, sizes, prev, pager, next, jumper"> |
|||
</el-pagination> |
|||
</div> |
|||
<div> |
|||
<el-tabs v-model="activeName" type="border-card"> |
|||
<el-tab-pane label="项目详情" name="detail"> |
|||
<project-info :project="project"></project-info> |
|||
</el-tab-pane> |
|||
<el-tab-pane label="客户信息" name="customer"> |
|||
<customer-info :customer="customer"></customer-info> |
|||
</el-tab-pane> |
|||
</el-tabs> |
|||
</div> |
|||
<el-dialog :title="`打样${form.proofingNo?('编辑-'+form.proofingNo):'新增'}`" v-drag :visible.sync="open" width="1100px"> |
|||
<el-form :model="form" :rules="rules" label-position="top" ref="form"> |
|||
<el-row :gutter="10"> |
|||
<el-col :span="8"> |
|||
<el-row :gutter="10"> |
|||
<el-col :span="10"> |
|||
<el-form-item :label="queryFormLabel.customerNo" prop="customerNo"> |
|||
<el-input v-model="form.customerNo"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="14"> |
|||
<el-form-item label=" " prop="customerDesc"> |
|||
<el-input v-model="form.customerDesc" disabled></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-col> |
|||
<el-col :span="4"> |
|||
<el-form-item :label="queryFormLabel.proofingNumber" prop="proofingNumber"> |
|||
<el-input-number :controls="false" :step="0" :min="0" v-model="form.proofingNumber"></el-input-number> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="4"> |
|||
<el-form-item :label="queryFormLabel.priorityLevel" prop="priorityLevel"> |
|||
<dict-data-select v-model="form.priorityLevel" clearable :use-default-value="false" |
|||
dict-type="priority_Level"></dict-data-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="4"> |
|||
<el-form-item :label="queryFormLabel.requiredDeliveryDate" prop="requiredDeliveryDate"> |
|||
<el-date-picker |
|||
v-model="queryForm.requiredDeliveryDate" |
|||
type="date" |
|||
style="width: 100%" |
|||
value-format="yyyy-MM-dd" |
|||
placeholder="选择日期"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="8" > |
|||
<el-row :gutter="10"> |
|||
<el-col :span="10"> |
|||
<el-form-item prop="projectId" :label="queryFormLabel.projectId"> |
|||
<el-input v-model="form.projectId"></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="14"> |
|||
<el-form-item prop="projectName" :label="queryFormLabel.projectName"> |
|||
<el-input v-model="form.projectName" disabled></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-col> |
|||
<el-col :span="4" > |
|||
<el-form-item prop="trackerName" :label="queryFormLabel.trackerName"> |
|||
<el-input v-model="form.trackerName" readonly></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="4" > |
|||
<el-form-item prop="engineerName" :label="queryFormLabel.engineerName"> |
|||
<el-input v-model="form.engineerName" readonly></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="4" > |
|||
<el-form-item prop="approverName" :label="queryFormLabel.approverName"> |
|||
<el-input v-model="form.approverName" readonly></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="4" > |
|||
<el-form-item prop="delegateAccessName" :label="queryFormLabel.delegateAccessName"> |
|||
<el-input v-model="form.delegateAccessName" readonly></el-input> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
<el-table :data="partDataList" border height="300"></el-table> |
|||
<div slot="footer"> |
|||
<el-button type="primary" @click="handleSave">{{optionsButton.confirm}}</el-button> |
|||
<el-button @click="open = false">{{optionsButton.cancel}}</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<style scoped> |
|||
|
|||
</style> |
|||
@ -0,0 +1,578 @@ |
|||
<script> |
|||
import {getQuotePage} from "../../../api/quotation/quote"; |
|||
import QuoteDetail from "./sellForQuotation/quoteDetail.vue"; |
|||
import quotationCustomerContact from "./sellForQuotation/quotationCustomerContact.vue"; |
|||
import quotationExamineAndApprove from "./sellForQuotation/quotationExamineAndApprove.vue"; |
|||
import {getCustomerInformation, getProjectInformation} from "../../../api/quotation/quotationInformation"; |
|||
import ProjectInfo from "./sellForQuotation/projectInfo.vue"; |
|||
import CustomerInfo from "./sellForQuotation/customerInfo.vue"; |
|||
import {getCustomerContactData} from "../../../api/project/project"; |
|||
import CustomerContact from "./sellForQuotation/customerContact.vue"; |
|||
import QuoteDetailInfo from "./sellForQuotation/quoteDetailInfo.vue"; |
|||
import {getQuoteDetailList} from "../../../api/quotation/quoteDetail"; |
|||
|
|||
const quote = { |
|||
customerNo: "", |
|||
customerName: "", |
|||
tracker: "", |
|||
trackerName: "", |
|||
quotationNo: "", |
|||
customerInquiryNo: "", |
|||
internalInquiryNo: "", |
|||
projectId: "", |
|||
projectName: "", |
|||
quoter:"", |
|||
quoterName:"", |
|||
quotationStatus:"", |
|||
} |
|||
export default { |
|||
name: "quotationManagement", |
|||
components: { |
|||
QuoteDetailInfo, |
|||
CustomerContact, |
|||
CustomerInfo, |
|||
ProjectInfo, |
|||
quotationExamineAndApprove, |
|||
quotationCustomerContact, |
|||
QuoteDetail, |
|||
}, |
|||
props:{ |
|||
height:{ |
|||
type:Number, |
|||
default:300, |
|||
}, |
|||
}, |
|||
data(){ |
|||
return { |
|||
quoteSearch:{ |
|||
...quote, |
|||
startDate:"", |
|||
endDate:"", |
|||
}, |
|||
no: 0, |
|||
size:50, |
|||
total:0, |
|||
quotePageLoading:false, |
|||
quoteList:[], |
|||
currentQuote:{ |
|||
...quote, |
|||
}, |
|||
quoteSave:{ |
|||
...quote, |
|||
}, |
|||
|
|||
|
|||
columnList: [ |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 102004, |
|||
serialNumber: '102004Table1QuotationNo', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'quotationNo', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '报价单号', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 102004, |
|||
serialNumber: '102004Table1QuotationDate', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'quotationDate', |
|||
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: 102004, |
|||
serialNumber: '102004Table1CustomerNo', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'customerNo', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '客户编码', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 102004, |
|||
serialNumber: '102004Table1CustomerName', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'customerName', |
|||
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: 102004, |
|||
serialNumber: '102004Table1ProjectId', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'projectId', |
|||
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: 102004, |
|||
serialNumber: '102004Table1ProjectName', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'projectName', |
|||
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: 102004, |
|||
serialNumber: '102004Table1QuoterName', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'quoterName', |
|||
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: 102004, |
|||
serialNumber: '102004Table1TrackerName', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'trackerName', |
|||
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: 102004, |
|||
serialNumber: '102004Table1Currency', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'currency', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '货币', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 102004, |
|||
serialNumber: '102004Table1QuotationStatus', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'quotationStatus', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '状态', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 102004, |
|||
serialNumber: '102004Table1CustomerInquiryNo', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'customerInquiryNo', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '客户报价单号', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 102004, |
|||
serialNumber: '102004Table1InternalInquiryNo', |
|||
tableId: '102004Table1', |
|||
tableName: '报价信息表', |
|||
columnProp: 'internalInquiryNo', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '内部询价单号', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
], |
|||
activeTabName:"quote_detail", |
|||
|
|||
quoteDetailList:[], |
|||
projectInfo:{}, |
|||
customerInfo:{}, |
|||
customerContactList:[], |
|||
} |
|||
}, |
|||
watch:{ |
|||
currentQuote(newVal,oldVal){ |
|||
// 查询明细 |
|||
if (this.currentQuote && this.currentQuote.quotationHeaderId){ |
|||
this.getQuoteDetailList();// 报价明细列表 |
|||
this.getQuoteProjectInfo();// 查询项目信息 |
|||
this.getCustomerInformation();// 查询客户信息 |
|||
this.getCustomerContactData();// 查询客户联系人信息 |
|||
} |
|||
} |
|||
}, |
|||
methods:{ |
|||
getQuotePage(){ |
|||
let params = { |
|||
...this.quoteSearch, |
|||
site:this.$store.state.user.site, |
|||
} |
|||
this.quotePageLoading = true; |
|||
getQuotePage(params,this.no,this.size).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
this.quoteList = data.rows; |
|||
this.total = data.total; |
|||
if (this.total > 0){ |
|||
this.currentQuote = this.quoteList[0]; |
|||
} |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
this.quotePageLoading = false; |
|||
}).catch((error)=>{ |
|||
this.$message.error(error); |
|||
this.quotePageLoading = false; |
|||
}) |
|||
}, |
|||
rowStyle({row}){ |
|||
if (row.quotationHeaderId === this.currentQuote.quotationHeaderId) { |
|||
return {'background-color': '#E8F7F6'} |
|||
} |
|||
}, |
|||
rowClick(row){ |
|||
this.currentQuote = {...row}; |
|||
}, |
|||
changeQuoteSize(val){ |
|||
this.size = val; |
|||
this.getQuotePage(); |
|||
}, |
|||
changeQuoteNo(val) { |
|||
this.no = val; |
|||
this.getQuotePage(); |
|||
}, |
|||
getQuoteProjectInfo(){ |
|||
let params = { |
|||
site:this.currentQuote.site, |
|||
projectId:this.currentQuote.projectId, |
|||
} |
|||
getProjectInformation(params).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
if (data.rows && data.rows.length > 0){ |
|||
this.projectInfo = data.rows[0]; |
|||
}else { |
|||
this.projectInfo = {}; |
|||
} |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error); |
|||
}) |
|||
}, |
|||
getCustomerInformation(){ |
|||
let params = { |
|||
site:this.currentQuote.site, |
|||
customerNo:this.currentQuote.customerNo, |
|||
} |
|||
getCustomerInformation(params).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
if (data.rows && data.rows.length > 0){ |
|||
this.customerInfo = data.rows[0]; |
|||
}else { |
|||
this.customerInfo = {}; |
|||
} |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error); |
|||
}) |
|||
}, |
|||
getCustomerContactData(){ |
|||
let params = { |
|||
site:this.currentQuote.site, |
|||
customerId:this.currentQuote.customerNo, |
|||
projectId:this.currentQuote.projectId, |
|||
} |
|||
getCustomerContactData(params).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
this.customerContactList = data.rows; |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error); |
|||
}) |
|||
}, |
|||
getQuoteDetailList(){ |
|||
let params = { |
|||
quotationHeaderId:this.currentQuote.quotationHeaderId, |
|||
} |
|||
getQuoteDetailList(params).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
this.quoteDetailList = data.rows; |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error); |
|||
}) |
|||
} |
|||
}, |
|||
created() { |
|||
this.getQuotePage(); |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<div> |
|||
<div style="width: 1200px"> |
|||
<el-form label-position="top" :model="quoteSearch"> |
|||
<el-row :gutter="10"> |
|||
<el-col :span="3"> |
|||
<el-form-item label="客户编码"> |
|||
<el-input v-model="quoteSearch.customerNo" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label="客户名称"> |
|||
<el-input v-model="quoteSearch.customerName" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label="采购专员"> |
|||
<el-input v-model="quoteSearch.trackerName" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label="报价单号"> |
|||
<el-input v-model="quoteSearch.quotationNo" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label="客户询价单号"> |
|||
<el-input v-model="quoteSearch.customerInquiryNo" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label="内部询价单号"> |
|||
<el-input v-model="quoteSearch.internalInquiryNo" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
<el-row :gutter="10"> |
|||
<el-col :span="3"> |
|||
<el-form-item label="项目编码"> |
|||
<el-input v-model="quoteSearch.projectId" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label="项目名称"> |
|||
<el-input v-model="quoteSearch.projectName" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label="报价专员"> |
|||
<el-input v-model="quoteSearch.quoterName" clearable/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label="状态"> |
|||
<el-select v-model="quoteSearch.quotationStatus"> |
|||
<el-option label="全部" value=""></el-option> |
|||
<el-option label="草稿" value="草稿"></el-option> |
|||
<el-option label="下达" value="下达"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="6"> |
|||
<el-row> |
|||
<el-col :span="11"> |
|||
<el-form-item label="报价日期"> |
|||
<el-date-picker |
|||
value-format="yyyy-MM-dd" |
|||
v-model="quoteSearch.startDate" |
|||
style="width: 100%" |
|||
type="date" |
|||
placeholder=" "> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="2"> |
|||
<el-form-item label=" "> |
|||
<div style="text-align: center;"><i class="el-icon-right"></i></div> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="11"> |
|||
<el-form-item label=" "> |
|||
<el-date-picker |
|||
value-format="yyyy-MM-dd" |
|||
style="width: 100%" |
|||
v-model="quoteSearch.endDate" |
|||
type="date" |
|||
placeholder=" "> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-col> |
|||
<el-col :span="3"> |
|||
<el-form-item label=" "> |
|||
<el-button plain type="primary" @click="getQuotePage">查 询</el-button> |
|||
<el-button type="primary" >新 增</el-button> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<el-table :data="quoteList" v-loading="quotePageLoading" @row-click="rowClick" border :height="height" :row-style="rowStyle"> |
|||
<el-table-column label="操作" align="center" fixed="right" width="160"> |
|||
<template slot-scope="scope"> |
|||
<el-link >下达</el-link> |
|||
<el-link >编辑</el-link> |
|||
<el-link >删除</el-link> |
|||
<el-link >重新报价</el-link> |
|||
</template> |
|||
</el-table-column> |
|||
<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"> |
|||
<span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}{{index === 0 ? ("-" + scope.row['versionCode']) : ''}}</span> |
|||
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" |
|||
style="width: 100px; height: 80px"/></span> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div> |
|||
<el-pagination style="margin-top: 5px" |
|||
@size-change="changeQuoteSize" |
|||
@current-change="changeQuoteNo" |
|||
:current-page="no" |
|||
:page-sizes="[50, 100, 200, 500]" |
|||
:page-size="size" |
|||
:total="total" |
|||
layout="total,sizes, prev, pager, next, jumper"> |
|||
</el-pagination> |
|||
</div> |
|||
<el-tabs v-model="activeTabName" |
|||
style="box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);border: 2px;min-height: 420px;margin-top: 5px;"> |
|||
<el-tab-pane label="报价明细" name="quote_detail"> |
|||
<quote-detail :header="currentQuote"></quote-detail> |
|||
</el-tab-pane> |
|||
<el-tab-pane label="报价明细" name="quote_detail_info"> |
|||
<quote-detail-info :height="330" :quote="currentQuote" :data-list="quoteDetailList"></quote-detail-info> |
|||
</el-tab-pane> |
|||
<el-tab-pane label="报价审批" name="quotation_examine_and_approve"> |
|||
<quotation-examine-and-approve></quotation-examine-and-approve> |
|||
</el-tab-pane> |
|||
<el-tab-pane label="项目信息" name="project_info"> |
|||
<project-info :project="projectInfo"></project-info> |
|||
</el-tab-pane> |
|||
<el-tab-pane label="客户信息" name="customer_info"> |
|||
<customer-info :customer="customerInfo"></customer-info> |
|||
</el-tab-pane> |
|||
<el-tab-pane label="客户联系人" name="customer_contact"> |
|||
<customer-contact :data-list="customerContactList" :height="300"></customer-contact> |
|||
</el-tab-pane> |
|||
</el-tabs> |
|||
</div> |
|||
</template> |
|||
|
|||
<style scoped> |
|||
|
|||
</style> |
|||
@ -0,0 +1,52 @@ |
|||
<script> |
|||
export default { |
|||
name: "quoteBomInfo", |
|||
props:{ |
|||
quoteDetail:{ |
|||
type:Object, |
|||
default:()=>{} |
|||
}, |
|||
dataList:{ |
|||
type:Array, |
|||
default:()=>[] |
|||
}, |
|||
height:{ |
|||
type:Number, |
|||
default:0 |
|||
} |
|||
}, |
|||
data(){ |
|||
return{ |
|||
bomList:[], |
|||
showAll:false |
|||
} |
|||
}, |
|||
methods:{}, |
|||
watch:{ |
|||
showAll(newVal,oldVal){ |
|||
if (newVal === true){ |
|||
|
|||
}else { |
|||
|
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<div> |
|||
<div> |
|||
<el-link style="cursor:pointer;margin-right: 10px">切换版本</el-link> |
|||
<el-checkbox v-model="showAll">全级BOM结构</el-checkbox> |
|||
</div> |
|||
<div style="display: flex"> |
|||
<div style="width: 25%">1</div> |
|||
<div style="width: 75%">2</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<style scoped> |
|||
|
|||
</style> |
|||
@ -0,0 +1,23 @@ |
|||
<script> |
|||
export default { |
|||
name: "quoteCostPrice", |
|||
props:{ |
|||
quoteDetail:{ |
|||
type:Object, |
|||
default:()=>{} |
|||
}, |
|||
height:{ |
|||
type:Number, |
|||
default:0 |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<div></div> |
|||
</template> |
|||
|
|||
<style scoped> |
|||
|
|||
</style> |
|||
@ -0,0 +1,262 @@ |
|||
<script> |
|||
import TransferTable from "../../../common/transferTable.vue"; |
|||
import { |
|||
removeQuoteProperties, |
|||
saveQuoteProperties, |
|||
updateQuoteProperties |
|||
} from "../../../../../api/quotation/quoteProperties"; |
|||
import item from "../../../code/item.vue"; |
|||
|
|||
export default { |
|||
name: "quoteOtherCost", |
|||
components: {TransferTable}, |
|||
props: { |
|||
height: { |
|||
type: Number, |
|||
default: 300 |
|||
}, |
|||
quoteDetail: { |
|||
type: Object, |
|||
default: () => { |
|||
} |
|||
}, |
|||
dataList: { |
|||
type: Array, |
|||
default: () => [] |
|||
}, |
|||
searchDataList: { |
|||
type: Array, |
|||
default: () => [] |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
saveVisible: false, |
|||
updateVisible: false, |
|||
copyAttributeList:[], |
|||
productColumnList: [ |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 100002001, |
|||
serialNumber: '100002001TableItemNo', |
|||
tableId: "100002001Table", |
|||
tableName: "属性表", |
|||
columnProp: 'itemNo', |
|||
headerAlign: "center", |
|||
align: "left", |
|||
columnLabel: '属性编码', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
},{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 100002001, |
|||
serialNumber: '100002001TableItemDesc', |
|||
tableId: "100002001Table", |
|||
tableName: "属性表", |
|||
columnProp: 'itemDesc', |
|||
headerAlign: "center", |
|||
align: "left", |
|||
columnLabel: '属性名称', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
}, |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 100002001, |
|||
serialNumber: '100002001TableValueType', |
|||
tableId: "100002001Table", |
|||
tableName: "属性表", |
|||
columnProp: 'valueType', |
|||
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: 100002001, |
|||
serialNumber: '100002001TableMaxValue', |
|||
tableId: "100002001Table", |
|||
tableName: "属性表", |
|||
columnProp: 'textValue', |
|||
headerAlign: "center", |
|||
align: "left", |
|||
columnLabel: '属性值', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth:120, |
|||
}, |
|||
], |
|||
} |
|||
}, |
|||
methods: { |
|||
handleUpdate() { |
|||
if (this.updateVisible) { |
|||
this.updateQuoteProperties() |
|||
} else { |
|||
this.copyAttributeList = JSON.parse(JSON.stringify(this.dataList)) |
|||
this.updateVisible = true; |
|||
} |
|||
}, |
|||
updateQuoteProperties(){ |
|||
updateQuoteProperties(this.copyAttributeList).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
this.$emit('refresh',{itemNo:'',itemDesc:''}) |
|||
this.$message.success(data.msg) |
|||
this.updateVisible = false |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error) |
|||
}) |
|||
}, |
|||
handleSearch(val) { |
|||
this.saveVisible = true; |
|||
this.$emit('refresh', val) |
|||
}, |
|||
handleAdd(val) { |
|||
let params = [...val.searchTableList]; |
|||
params = params.map(item => { |
|||
item.quotationDetailId = this.quoteDetail.quotationDetailId |
|||
return item |
|||
}) |
|||
saveQuoteProperties(params).then(({data}) => { |
|||
if (data && data.code === 0) { |
|||
this.$emit('refresh', val) |
|||
this.$message.success(data.msg) |
|||
} else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error) => { |
|||
this.$message.error(error) |
|||
}) |
|||
}, |
|||
handleDelete(val) { |
|||
let params = [...val.dataTableList] |
|||
removeQuoteProperties(params).then(({data}) => { |
|||
if (data && data.code === 0) { |
|||
this.$emit('refresh', val) |
|||
this.$message.success(data.msg) |
|||
} else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error) => { |
|||
this.$message.error(error) |
|||
}) |
|||
} |
|||
}, |
|||
watch: {}, |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<div> |
|||
<div> |
|||
<el-button type="primary" @click="handleSearch">新增</el-button> |
|||
<el-button type="primary" @click="handleUpdate">{{ updateVisible ? '保存' : '编辑' }}</el-button> |
|||
</div> |
|||
<div class="rq" v-if="!updateVisible"> |
|||
<el-table |
|||
:height="height" |
|||
:data="dataList" |
|||
border |
|||
style="width: 100%;margin-top: 5px"> |
|||
<el-table-column |
|||
v-for="(item,index) in productColumnList" :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"> |
|||
<div v-if="item.columnProp !== 'textValue' && item.columnProp !== 'numValue'"> |
|||
<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> |
|||
</div> |
|||
<div v-else> |
|||
{{ scope.row.textValue ? scope.row.textValue : scope.row.numValue }} |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
<div class="rq" v-else> |
|||
<el-table |
|||
:height="height" |
|||
:data="copyAttributeList" |
|||
border |
|||
style="width: 100%;margin-top: 5px"> |
|||
<el-table-column |
|||
v-for="(item,index) in productColumnList" :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"> |
|||
<div v-if="item.columnProp !== 'textValue' && item.columnProp !== 'numValue'"> |
|||
<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> |
|||
</div> |
|||
<div v-else> |
|||
<div v-if="scope.row.valueChooseFlag !== 'Y'"> |
|||
<el-input-number v-model="scope.row.numValue" style="padding: 0;width: 100%" |
|||
v-if="scope.row.valueType === '数字'" :controls="false"></el-input-number> |
|||
<el-input v-model="scope.row.textValue" v-else></el-input> |
|||
</div> |
|||
<div v-else> |
|||
<el-select style="width: 100%;" v-if="scope.row.valueType === '文本'" v-model="scope.row.textValue"> |
|||
<el-option :value="i.availableValue" :label="i.availableValue" v-for="(i,key) in scope.row.list" |
|||
:key="key"></el-option> |
|||
</el-select> |
|||
<el-select style="width: 100%;" v-else v-model="scope.row.numValue"> |
|||
<el-option :value="i.availableValue" :label="i.availableValue" v-for="(i,key) in scope.row.list" |
|||
:key="key"></el-option> |
|||
</el-select> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
|
|||
<el-dialog title="属性项目" v-drag :visible.sync="saveVisible" append-to-body> |
|||
<transfer-table v-if="saveVisible" |
|||
v-model="dataList" |
|||
:data-list="searchDataList" @add="handleAdd" @delete="handleDelete" |
|||
@search="handleSearch"></transfer-table> |
|||
<el-footer style="height:40px;margin-top: 20px;text-align:center"> |
|||
<el-button type="primary" @click="saveVisible = false">关闭</el-button> |
|||
</el-footer> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<style scoped> |
|||
|
|||
</style> |
|||
16
src/views/modules/quotation/sellForQuotation/quoteDetail.vue
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,684 @@ |
|||
<script> |
|||
|
|||
import PropertyTemplates from "./quotationDetail/propertyTemplates.vue"; |
|||
import CostPrice from "./quotationDetail/costPrice.vue"; |
|||
import BillOfMateriel from "./quotationDetail/billOfMateriel.vue"; |
|||
import ToolQuotation from "./quotationDetail/toolQuotation.vue"; |
|||
import QuoteRouting from "./quotationDetail/quoteRouting.vue"; |
|||
import QuoteOtherCost from "./quotationDetail/quoteOtherCost.vue"; |
|||
import {getQuotePropertiesBaseList, getQuotePropertiesList} from "../../../../api/quotation/quoteProperties"; |
|||
import QuoteBomInfo from "./quotationDetail/quoteBomInfo.vue"; |
|||
|
|||
const quoteDetail = { |
|||
quotationDetailId:undefined, |
|||
quotationHeaderId:undefined, |
|||
productNo:undefined, |
|||
productDesc:undefined, |
|||
internalInquiryNo:undefined, |
|||
quotationDetailQuantity:undefined, |
|||
quotationDetailCount:undefined, |
|||
quotationDetailStatus:undefined, |
|||
computePartCost:undefined, |
|||
computeLabourCost:undefined, |
|||
computeMachineCost:undefined, |
|||
computeFabricateCost:undefined, |
|||
computeToolCost:undefined, |
|||
adjustPartCost:undefined, |
|||
adjustLabourCost:undefined, |
|||
adjustFabricateCost:undefined, |
|||
adjustToolCost:undefined, |
|||
adjustMachineCost:undefined, |
|||
detailOtherCost:undefined, |
|||
detailManageCost:undefined, |
|||
detailTotalCost:undefined, |
|||
detailProfitRate:undefined, |
|||
detailProfitAmount:undefined, |
|||
systemComputeAmount:undefined, |
|||
systemComputePrice:undefined, |
|||
finalUntaxedPrice:undefined, |
|||
finalTaxedPrice:undefined, |
|||
taxRate:13, |
|||
remark:undefined, |
|||
active:undefined, |
|||
} |
|||
export default { |
|||
name: "quoteDetailInfo", |
|||
components: {QuoteBomInfo, QuoteOtherCost, QuoteRouting, ToolQuotation, BillOfMateriel, CostPrice, PropertyTemplates}, |
|||
props:{ |
|||
quote:{ |
|||
type:Object, |
|||
default:()=>{}, |
|||
}, |
|||
height:{ |
|||
type:Number, |
|||
default:300, |
|||
}, |
|||
dataList:{ |
|||
type:Array, |
|||
default:()=>[], |
|||
} |
|||
}, |
|||
data(){ |
|||
return{ |
|||
|
|||
|
|||
saveQuoteDetail:{ |
|||
...quoteDetail, |
|||
}, |
|||
index:'', |
|||
saveVisible:false, |
|||
columnList: [ |
|||
{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 102005, |
|||
serialNumber: '102005Table2ProductNo', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'productNo', |
|||
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: 102005, |
|||
serialNumber: '102005Table2ProductDesc', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'productDesc', |
|||
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: 102005, |
|||
serialNumber: '102005Table2QuotationDetailQuantity', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'quotationDetailQuantity', |
|||
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: 102005, |
|||
serialNumber: '102005Table2ComputePartCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'computePartCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2ComputeMachineCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'computeMachineCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2ComputeLabourCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'computeLabourCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2ComputeFabricateCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'computeFabricateCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2ComputeToolCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'computeToolCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2AdjustPartCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'adjustPartCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2AdjustMachineCost', |
|||
tableId: '102005Table2', |
|||
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: 102005, |
|||
serialNumber: '102005Table2AdjustLabourCost', |
|||
tableId: '102005Table2', |
|||
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: 102005, |
|||
serialNumber: '102005Table2AdjustFabricateCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'adjustFabricateCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2AdjustToolCost', |
|||
tableId: '102005Table2', |
|||
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: 102005, |
|||
serialNumber: '102005Table2DetailOtherCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'detailOtherCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2DetailManageCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'detailManageCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2DetailTotalCost', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'detailTotalCost', |
|||
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: 102005, |
|||
serialNumber: '102005Table2DetailProfitRate', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'detailProfitRate', |
|||
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: 102005, |
|||
serialNumber: '102005Table2DetailProfitAmount', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'detailProfitAmount', |
|||
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: 102005, |
|||
serialNumber: '102005Table2FinalUntaxedPrice', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'finalUntaxedPrice', |
|||
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: 102005, |
|||
serialNumber: '102005Table2TaxRate', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'taxRate', |
|||
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: 102005, |
|||
serialNumber: '102005Table2FinalTaxedPrice', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'finalTaxedPrice', |
|||
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: 102005, |
|||
serialNumber: '102005Table2SystemComputePrice', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'systemComputePrice', |
|||
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: 102005, |
|||
serialNumber: '102005Table2QuotationDetailStatus', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'quotationDetailStatus', |
|||
headerAlign: 'center', |
|||
align: 'center', |
|||
columnLabel: '状态', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
},{ |
|||
userId: this.$store.state.user.name, |
|||
functionId: 102005, |
|||
serialNumber: '102005Table2Remark', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'remark', |
|||
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: 102005, |
|||
serialNumber: '102005Table2InternalInquiryNo', |
|||
tableId: '102005Table2', |
|||
tableName: '报价详情信息表', |
|||
columnProp: 'internalInquiryNo', |
|||
headerAlign: 'center', |
|||
align: 'left', |
|||
columnLabel: '询价单号', |
|||
columnHidden: false, |
|||
columnImage: false, |
|||
columnSortable: false, |
|||
sortLv: 0, |
|||
status: true, |
|||
fixed: '', |
|||
columnWidth: 120 |
|||
}, |
|||
], |
|||
fullscreen: false, |
|||
activeName:"bom", |
|||
|
|||
bomTreeList:[], |
|||
|
|||
quoteOtherCostList:[], |
|||
quotePropertyList:[], |
|||
} |
|||
}, |
|||
methods:{ |
|||
handleUpdate(row,index){ |
|||
index = index+1 |
|||
this.saveQuoteDetail = {...row} |
|||
if (index < 10){ |
|||
this.index = "00"+index; |
|||
}else if (index%10 <= 10){ |
|||
this.index = "0"+index; |
|||
}else if (index%100 <= 10){ |
|||
this.index = index |
|||
} |
|||
this.saveVisible = true |
|||
}, |
|||
closeSaveDialog(){ |
|||
this.activeName = "bom"; |
|||
}, |
|||
handleQuoteOtherCostRefresh(val){ |
|||
let params = { |
|||
itemNo:val.itemNo, |
|||
itemDesc:val.itemDesc, |
|||
site:this.saveQuoteDetail.site, |
|||
quotationDetailId: this.saveQuoteDetail.quotationDetailId, |
|||
} |
|||
getQuotePropertiesBaseList(params).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
this.quoteOtherCostList = data.rows1; |
|||
this.quotePropertyList = data.rows2; |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error) |
|||
}) |
|||
}, |
|||
getQuotePropertiesList(){ |
|||
let params = { |
|||
site:this.saveQuoteDetail.site, |
|||
quotationDetailId: this.saveQuoteDetail.quotationDetailId, |
|||
} |
|||
getQuotePropertiesList(params).then(({data})=>{ |
|||
if (data && data.code === 0){ |
|||
this.quoteOtherCostList = data.rows; |
|||
}else { |
|||
this.$message.warning(data.msg) |
|||
} |
|||
}).catch((error)=>{ |
|||
this.$message.error(error) |
|||
}) |
|||
} |
|||
}, |
|||
watch:{ |
|||
saveVisible(newVal,oldVal){ |
|||
if (newVal === true){ |
|||
this.getQuotePropertiesList(); |
|||
}else { |
|||
this.quoteOtherCostList = []; |
|||
this.quotePropertyList = []; |
|||
this.bomTreeList = []; |
|||
} |
|||
} |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<template> |
|||
<div> |
|||
<div style="margin-bottom: 10px;padding-left: 10px"> |
|||
<el-button type="primary" >新增</el-button> |
|||
</div> |
|||
<el-table :data="dataList" |
|||
:height="height" border |
|||
:header-cell-style="{background:'rgba(23,179,163)',color:'#fff'}"> |
|||
<el-table-column |
|||
label="操作" |
|||
fixed="right" |
|||
width="120" align="center"> |
|||
<template slot-scope="{row,$index}"> |
|||
<el-link v-if="row.quotationDetailStatus !== '下达'">下达</el-link> |
|||
<el-link @click="handleUpdate(row,$index)">编辑</el-link> |
|||
<el-link >删除</el-link> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
header-align="center" |
|||
label="序号" |
|||
width="55" |
|||
align="center" |
|||
type="index"> |
|||
</el-table-column> |
|||
<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" > |
|||
<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-dialog v-drag :fullscreen="fullscreen" :visible.sync="saveVisible" |
|||
width="1200px" top="10vh" :close-on-click-modal="false" @close="closeSaveDialog"> |
|||
<div slot="title" class="medium"> |
|||
<div> |
|||
<span class="el-dialog__title">报价单号 {{this.quote.quotationNo+"-"+this.quote.versionCode+"-"+index}}</span> |
|||
<span style="float: right;margin-right: 30px;cursor:pointer;" @click="fullscreen = !fullscreen"> |
|||
<svg v-if="!fullscreen" t="1710144122404" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4774" width="16" height="16"><path d="M145.066667 85.333333h153.6c25.6 0 42.666667-17.066667 42.666666-42.666666S324.266667 0 298.666667 0H34.133333C25.6 0 17.066667 8.533333 8.533333 17.066667 0 25.6 0 34.133333 0 42.666667v256c0 25.6 17.066667 42.666667 42.666667 42.666666s42.666667-17.066667 42.666666-42.666666V145.066667l230.4 230.4c17.066667 17.066667 42.666667 17.066667 59.733334 0 17.066667-17.066667 17.066667-42.666667 0-59.733334L145.066667 85.333333z m170.666666 563.2L162.133333 802.133333l-76.8 76.8V725.333333C85.333333 699.733333 68.266667 682.666667 42.666667 682.666667s-42.666667 17.066667-42.666667 42.666666v256c0 25.6 17.066667 42.666667 42.666667 42.666667h256c25.6 0 42.666667-17.066667 42.666666-42.666667s-17.066667-42.666667-42.666666-42.666666H145.066667l76.8-76.8 153.6-153.6c17.066667-17.066667 17.066667-42.666667 0-59.733334-17.066667-17.066667-42.666667-17.066667-59.733334 0z m665.6 34.133334c-25.6 0-42.666667 17.066667-42.666666 42.666666v153.6l-76.8-76.8-153.6-153.6c-17.066667-17.066667-42.666667-17.066667-59.733334 0-17.066667 17.066667-17.066667 42.666667 0 59.733334l153.6 153.6 76.8 76.8H725.333333c-25.6 0-42.666667 17.066667-42.666666 42.666666s17.066667 42.666667 42.666666 42.666667h256c25.6 0 42.666667-17.066667 42.666667-42.666667v-256c0-25.6-17.066667-42.666667-42.666667-42.666666z m0-682.666667h-256c-25.6 0-42.666667 17.066667-42.666666 42.666667s17.066667 42.666667 42.666666 42.666666h153.6l-76.8 76.8-153.6 153.6c-17.066667 17.066667-17.066667 42.666667 0 59.733334 17.066667 17.066667 42.666667 17.066667 59.733334 0l153.6-153.6 76.8-76.8v153.6c0 25.6 17.066667 42.666667 42.666666 42.666666s42.666667-17.066667 42.666667-42.666666v-256c0-25.6-17.066667-42.666667-42.666667-42.666667z" fill="#8a8a8a" p-id="4775"></path></svg> |
|||
<svg v-else t="1710143735808" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4603" width="16" height="16"><path d="M354.133333 682.666667H256v-42.666667h170.666667v170.666667H384v-98.133334L243.2 853.333333l-29.866667-29.866666L354.133333 682.666667z m358.4 0l140.8 140.8-29.866666 29.866666-140.8-140.8V810.666667h-42.666667v-170.666667h170.666667v42.666667h-98.133334zM354.133333 384L213.333333 243.2l29.866667-29.866667L384 354.133333V256h42.666667v170.666667H256V384h98.133333z m358.4 0H810.666667v42.666667h-170.666667V256h42.666667v98.133333L823.466667 213.333333l29.866666 29.866667L712.533333 384z" fill="#444444" p-id="4604"></path></svg> |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<div style="width: 600px;margin-top: 5px"> |
|||
<el-form :model="saveQuoteDetail" label-position="top"> |
|||
<el-row :gutter="10"> |
|||
<el-col :span="6"> |
|||
<el-form-item label="产品编码" prop="productNo"> |
|||
<el-input clearable disabled v-model="saveQuoteDetail.productNo"/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="10"> |
|||
<el-form-item label="产品名称" prop="productDesc"> |
|||
<el-input clearable disabled v-model="saveQuoteDetail.productDesc"/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="4"> |
|||
<el-form-item label="报价数量" prop="quotationDetailQuantity"> |
|||
<el-input-number disabled :min="1" v-model="saveQuoteDetail.quotationDetailQuantity" :controls="false"></el-input-number> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="24"> |
|||
<el-form-item label="备注"> |
|||
<el-input type="textarea" resize="none" disabled v-model="saveQuoteDetail.remark" :autosize="{minRows: 3, maxRows: 3}"/> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<el-tabs v-model="activeName" :style="{height:`${fullscreen?740:500}px`}"> |
|||
<el-tab-pane name="bom" label="材料"> |
|||
<quote-bom-info :height="fullscreen?660:420" :quote-detail="saveQuoteDetail" :data-list="bomTreeList"></quote-bom-info> |
|||
</el-tab-pane> |
|||
<el-tab-pane name="routing" label="工艺"></el-tab-pane> |
|||
<el-tab-pane name="tool" label="工具"></el-tab-pane> |
|||
<el-tab-pane name="property" label="其他成本"> |
|||
<quote-other-cost @refresh="handleQuoteOtherCostRefresh" :height="fullscreen?660:420" v-if="saveVisible" :quote-detail="saveQuoteDetail" :search-data-list="quotePropertyList" :data-list="quoteOtherCostList"></quote-other-cost> |
|||
</el-tab-pane> |
|||
<el-tab-pane name="cost" label="成本&价格"></el-tab-pane> |
|||
</el-tabs> |
|||
<div slot="footer" style="padding-top: 10px"> |
|||
<el-button type="primary">确 定</el-button> |
|||
<el-button @click=" saveVisible= false">取 消</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<style scoped> |
|||
/deep/ .el-form-item--medium .el-form-item__content{ |
|||
height: auto; |
|||
line-height: 1.5; |
|||
} |
|||
</style> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue