Browse Source

2024-06-06

master
zelian_wu 2 years ago
parent
commit
b8bf052a92
  1. 5
      src/api/quotation/quote.js
  2. 9
      src/api/quotation/quoteDetail.js
  3. 11
      src/api/quotation/quoteProperties.js
  4. 347
      src/views/modules/cdc/collectScreen.vue
  5. 891
      src/views/modules/proofing/index.vue
  6. 578
      src/views/modules/quotation/index.vue
  7. 7
      src/views/modules/quotation/sellForQuotation.vue
  8. 13
      src/views/modules/quotation/sellForQuotation/quotationCustomerContact.vue
  9. 52
      src/views/modules/quotation/sellForQuotation/quotationDetail/quoteBomInfo.vue
  10. 23
      src/views/modules/quotation/sellForQuotation/quotationDetail/quoteCostPrice.vue
  11. 262
      src/views/modules/quotation/sellForQuotation/quotationDetail/quoteOtherCost.vue
  12. 10
      src/views/modules/quotation/sellForQuotation/quotationDetail/quoteRouting.vue
  13. 16
      src/views/modules/quotation/sellForQuotation/quoteDetail.vue
  14. 684
      src/views/modules/quotation/sellForQuotation/quoteDetailInfo.vue

5
src/api/quotation/quote.js

@ -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)

9
src/api/quotation/quoteDetail.js

@ -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)

11
src/api/quotation/quoteProperties.js

@ -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)

347
src/views/modules/cdc/collectScreen.vue

@ -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>

891
src/views/modules/proofing/index.vue

@ -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>

578
src/views/modules/quotation/index.vue

@ -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>

7
src/views/modules/quotation/sellForQuotation.vue

@ -148,7 +148,7 @@
</el-pagination>
<!-- 标签页 -->
<el-tabs v-model="activeTabName" @tab-click="handleClickTab"
style="box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);border: 2px;min-height: 440px;margin-top: 5px;">
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="quotation_detail" v-if="false">
<quotation-detail v-if="false" :quotation-header="quotationHeader"></quotation-detail>
</el-tab-pane>
@ -414,7 +414,7 @@ export default {
props:{
height:{
type:Number,
default:400
default:290
}
},
data() {
@ -1209,9 +1209,6 @@ export default {
},
},
mounted() {
this.$nextTick(() => {
this.height = window.innerHeight / 2 - 240;
})
},
activated() {
this.initData();//

13
src/views/modules/quotation/sellForQuotation/quotationCustomerContact.vue

@ -24,7 +24,7 @@
</el-row>
<el-table
:data="contactList"
height="360"
:height="height"
border
v-loading="dataListLoading"
style="width: 100%;margin-top: 10px ">
@ -53,7 +53,16 @@ import {
} from "@/api/project/project.js"
export default {
name: "quotationCustomerContact",
props: ['quotationHeader'],
props: {
quotationHeader:{
type: Object,
default:()=>{}
},
height: {
type: Number,
default: 300
}
},
data(){
return{
quotationData: {},

52
src/views/modules/quotation/sellForQuotation/quotationDetail/quoteBomInfo.vue

@ -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>

23
src/views/modules/quotation/sellForQuotation/quotationDetail/quoteCostPrice.vue

@ -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>

262
src/views/modules/quotation/sellForQuotation/quotationDetail/quoteOtherCost.vue

@ -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>

10
src/views/modules/quotation/sellForQuotation/quotationDetail/quoteRouting.vue

@ -658,7 +658,7 @@ export default {
unitTime = 0;
}
}
let laborNeedTime = new Decimal(unitTime).mul(new Decimal(row.efficiencyFactor).div(new Decimal(100))).toNumber();
let laborNeedTime = new Decimal(unitTime).div(new Decimal(row.efficiencyFactor).div(new Decimal(100))).toNumber();
//
return new Decimal(new Decimal(row.laborSetupTime)
.mul(new Decimal(row.setupLaborClassCost)
@ -685,8 +685,8 @@ export default {
unitTime = 0;
}
}
let manufacturingNeedTime = new Decimal(unitTime).mul(new Decimal(row.efficiencyFactor).div(new Decimal(100))).toNumber();
return new Decimal(row.workCenterCost).mul(new Decimal(row.machSetupTime)).add(new Decimal(row.workCenterCost).mul(manufacturingNeedTime)).toNumber();
let manufacturingNeedTime = new Decimal(unitTime).div(new Decimal(row.efficiencyFactor).div(new Decimal(100))).toNumber();
return new Decimal(row.workCenterCost).mul(new Decimal(row.machSetupTime).div(this.detail.quotationDetailQuantity)).add(new Decimal(row.workCenterCost).mul(manufacturingNeedTime)).toNumber();
},
getMachineCost(row){
// detail.machineCost machRunFactor
@ -709,9 +709,9 @@ export default {
}
}
//
let workNeedTime = new Decimal(unitTime).mul(new Decimal(row.efficiencyFactor).div(new Decimal(100))).toNumber();
let workNeedTime = new Decimal(unitTime).div(new Decimal(row.efficiencyFactor).div(new Decimal(100))).toNumber();
//
return new Decimal(row.workCenterCost).mul(new Decimal(row.machSetupTime)).add(new Decimal(row.workCenterCost).mul(workNeedTime)).toNumber();
return new Decimal(row.workCenterCost).mul(new Decimal(row.machSetupTime).div(this.detail.quotationDetailQuantity)).add(new Decimal(row.workCenterCost).mul(workNeedTime)).toNumber();
},
setRunTimeDesc(i){
switch (this.routingDetailList[i].runTimeCode){

16
src/views/modules/quotation/sellForQuotation/quoteDetail.vue
File diff suppressed because it is too large
View File

684
src/views/modules/quotation/sellForQuotation/quoteDetailInfo.vue

@ -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>
Loading…
Cancel
Save