plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1218 lines
45 KiB

<script>
import {
deleteQuotationDetail,
insertQuotationDetail,
searchQuotationDetailPageByHeaderId, updateQuotationDetail
} from "../../../../api/quotation/quotationHeader";
import {getProjectPart, getProjectPartList} from "../../../../api/project/project";
import ToolQuotation from "./quotationDetail/toolQuotation.vue";
import PropertyTemplates from "./quotationDetail/propertyTemplates.vue";
import CostPrice from "./quotationDetail/costPrice.vue";
import BillOfMateriel from "./quotationDetail/billOfMateriel.vue";
import {Decimal} from "decimal.js";
import {searchQuoteBomHeader, searchQuoteBomList} from "../../../../api/quotation/quoteOfBom";
import QuoteRouting from "./quotationDetail/quoteRouting.vue";
import {searchQuoteRoutingHeader} from "../../../../api/quotation/quoteOfRouting";
export default {
name:'quoteDetail',
components: {QuoteRouting, BillOfMateriel, CostPrice, PropertyTemplates, ToolQuotation},
props:{
header:{
type:Object,
request:true,
},
height:{
type:Number,
default:300,
},
},
watch:{
header:function (){
this.initData()
},
update(){
// 当bom触发修改版本时触发
this.searchQuoteRoutingHeader();
}
},
data(){
const validateProductNo = (rule, value, callback) =>{
if (this.quotationDetailFlag !== true && this.quotationLeadIntoDetailFlag !== true){
return;
}
if (value === '' || value === null || value === undefined){
callback(new Error(' '))
return
}
let params = {...this.projectPartData}
params.testPartNo = value
getProjectPart(params).then(({data})=>{
if (data && data.rows.length >= 1){
callback()
}else {
this.projectPartData.testPartNo = undefined;
this.$message.error("产品编码不存在!")
callback(new Error(" "))
}
}).catch((error)=>{
this.projectPartData.testPartNo = undefined
callback(new Error(' '))
})
};
return{
allSearchFlagBom:false,
allSearchFlagRouting:false,
BOMCost:0,
ToolCost:0,
machineCost:0,
laborCost:0,
manufacturingCost:0,
packInfoCost:0,
shippingInfoCost:0,
loadingStatus:false,
update:0,
index:'',
insertQuotationDetailLoading:false,
projectPartDialogFlag:false,
quotationLeadIntoDetailFlag:false,
initQuotationDetailLoading:false,
quotationDetailFlag:false,
editQuotationDetailLoading:false,
no: 1,//当前页
size: 50,//每页条数
total: 0,//总条数
tableData:[],
projectPartTable:[],
columnList: [
{
userId: this.$store.state.user.name,
functionId: 102003,
serialNumber: '102003Table2ProductNo',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2ProductDesc',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2QuotationDetailQuantity',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2ComputePartCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2ComputeMachineCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2ComputeLabourCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2ComputeFabricateCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2ComputeToolCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2AdjustPartCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2AdjustMachineCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2AdjustLabourCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2AdjustFabricateCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2AdjustToolCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2DetailOtherCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2DetailManageCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2DetailTotalCost',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2DetailProfitRate',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2DetailProfitAmount',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2FinalUntaxedPrice',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2TaxRate',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2FinalTaxedPrice',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2SystemComputePrice',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2QuotationDetailStatus',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2Remark',
tableId: '102003Table2',
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: 102003,
serialNumber: '102003Table2InternalInquiryNo',
tableId: '102003Table2',
tableName: '报价详情信息表',
columnProp: 'internalInquiryNo',
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: 102003,
// serialNumber: '102003Table2QuotationDetailCount',
// tableId: '102003Table2',
// tableName: '报价详情信息表',
// columnProp: 'quotationDetailCount',
// headerAlign: 'center',
// align: 'right',
// columnLabel: '报价次数',
// columnHidden: false,
// columnImage: false,
// columnSortable: false,
// sortLv: 0,
// status: true,
// fixed: '',
// columnWidth: 120
// },
],
projectPartDetailList: [
{
userId: this.$store.state.user.name,
functionId: 102003,
serialNumber: '102003Table3TestPartNo',
tableId: '102003Table3',
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: 102003,
serialNumber: '102003Table3PartDesc',
tableId: '102003Table3',
tableName: '项目物料表',
columnProp: 'partDesc',
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: 102003,
serialNumber: '102003Table3PartSpec',
tableId: '102003Table3',
tableName: '项目物料表',
columnProp: 'partSpec',
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: 102003,
serialNumber: '102003Table3PartTypeDesc',
tableId: '102003Table3',
tableName: '项目物料表',
columnProp: 'partTypeDesc',
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: 102001,
serialNumber: '102001Table3Type',
tableId: '102001Table3',
tableName: '项目物料表',
columnProp: 'type',
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: 102001,
serialNumber: '102001Table3UmId',
tableId: '102001Table3',
tableName: '项目物料表',
columnProp: 'umId',
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: 102003,
serialNumber: '102003Table3CodeNo',
tableId: '102003Table3',
tableName: '项目物料表',
columnProp: 'codeNo',
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: 102003,
serialNumber: '102003Table3CodeDesc',
tableId: '102003Table3',
tableName: '项目物料表',
columnProp: 'codeDesc',
headerAlign: 'center',
align: 'center',
columnLabel: '模板名称',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
}
],
//报价明细新增对象
quotationDetail: {
quotationDetailId: undefined,//主键
quotationHeaderId: undefined,//父编号
site: this.$store.state.user.site,// 工厂编号
productNo: undefined,//产品编码
productDesc: undefined,//产品名称
quotationDetailQuantity: 1,//报价数量
internalInquiryNo: undefined,//内部询价单号
itemNo:0,//序号
quotationDetailStatus: "草稿",//报价状态
taxRate: 13,//税率
remark: undefined,//备注
flag:false
},
projectPartData:{
site:this.$store.state.user.site,
testPartNo:undefined,// 项目编号
partDesc:undefined,// 项目名称
},
fullscreen:false,
// 报价明细 参数列表
quotationDetailColumns: [
{label: "productDesc", value: "产品名称"},
{label: "quotationDetailQuantity", value: "报价数量"},
{label: "internalInquiryNo", value: "内部询价单号"},
{label: "quotationDetailStatus", value: "报价状态"},
{label: "itemNo", value: "序号"},
{label: "adjustPartCost", value: "调整后的材料成本"},
{label: "adjustMachineCost", value: "调整后的机器成本"},
{label: "adjustFabricateCost", value: "调整后的制造费用"},
{label: "adjustLabourCost", value: "调整后人的工成本"},
{label: "adjustToolCost", value: "调整后的工具成本"},
{label: "detailManageCost", value: "管理成本"},
{label: "detailOtherCost", value: "其他成本"},
{label: "detailProfitRate", value: "利润率"},
{label: "finalUntaxedPrice", value: "未税单价"},
{label: "taxRate", value: "税率"},
],
// 报价详情表单校验
quotationDetailRules: {
productNo: [{required: true,validator:validateProductNo,trigger: 'change'}],
productDesc: [{required: true, message: ' ', trigger: ['change','blur']}],
quotationDetailStatus: [{required: true, message: ' ', trigger: 'change'}],
internalInquiryNo: [{required: true, message: ' ', trigger: ['change','blur']}],
itemNo:[{required: true, message: ' ', trigger: ['change','blur']}],
quotationDetailQuantity: [{required: true, message: ' ', trigger: ['change','blur']}],
},
activeName:'bom',
}
},
methods:{
// 报价详情size 改变
detailSizeChange(val) {
this.size = val;
this.initData();
},
// 报价详情 页码
detailCurrentChange(val) {
this.no = val;
this.initData();
},
// 查询报价明细
initData() {
let params = {
no: this.no,
size: this.size,
quotationHeaderId: this.header.quotationHeaderId
}
this.tableData = [];
this.initQuotationDetailLoading = true;
searchQuotationDetailPageByHeaderId(params).then(({data}) => {
this.initQuotationDetailLoading = false;
if (data && data.code === 200) {
this.tableData = data.data.records;
this.total = data.data.total;
}else {
this.tableData = [];
this.total = 0;
}
}).catch((error)=>{
this.initQuotationDetailLoading = false;
})
},
// 修改 报价详情
editQuotationDetail(row,index) {
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.quotationDetail = JSON.parse(JSON.stringify(row));
this.quotationDetailFlag = true;
},
// 删除 报价明细
deleteQuotationDetailData(row){
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteQuotationDetail(row).then(({data})=>{
if (data.code === 200){
this.initData();
this.$message.success(data.msg);
}else {
this.$message.error(data.msg);
}
})
})
},
openInsertQuotationDetail() {
this.quotationDetail.quotationHeaderId = this.header.quotationHeaderId;
this.quotationDetail.internalInquiryNo = this.header.internalInquiryNo;
},
closeInsertQuotationDetail() {
this.$refs['insertQuotationDetailForm'].resetFields();
this.resetQuotationDetail();
},
resetQuotationDetail(){
this.quotationDetail = {
quotationDetailId: undefined,//主键
quotationHeaderId: undefined,//父编号
site: this.$store.state.user.site,// 工厂编号
productNo: undefined,//产品编码
productDesc: undefined,//产品名称
quotationDetailQuantity: 1,//报价数量
internalInquiryNo: undefined,//内部询价单号
itemNo:0,//序号
quotationDetailStatus: "草稿",//报价状态
taxRate: 13,//税率
remark: undefined,//备注
flag:false
};
},
insertQuotationDetailBtn() {
this.$refs['insertQuotationDetailForm'].validate((validate, objects) => {
if (validate) {
this.insertQuotationDetailLoading = true;
insertQuotationDetail(this.quotationDetail).then(({data}) => {
this.insertQuotationDetailLoading = false;
if (data.code === 200) {
// 保存成功后
if (this.quotationDetail.flag) {
this.$nextTick(()=>{
this.quotationDetail = JSON.parse(JSON.stringify(data.data));
})
this.quotationDetailFlag = true;
}else {
this.quotationLeadIntoDetailFlag = false;
}
this.initData();
this.$message.success(data.msg);
} else {
this.$message.error(data.msg);
}
}).catch((error)=>{
this.insertQuotationDetailLoading = false;
})
} else {
this.rulesValidateLabel(objects, this.quotationDetailColumns);
}
})
},
// 校验处理
rulesValidateLabel(objects, labels) {
for (let filed in objects) {
for (let i = 0; i < labels.length; i++) {
let quotationToolColumn = labels[i];
if (quotationToolColumn.label === filed) {
this.$message.warning(quotationToolColumn.value+"为空或填写不正确");
return
}
}
}
},
closeProjectPartDialog(){
this.projectPartData = {
site:this.$store.state.user.site,
testPartNo:undefined,// 项目编号
partDesc:undefined,// 项目名称
}
this.projectPartTable = [];
},
openProjectPartDialog(){
this.getProjectPartList();
},
getProjectPartList(){
let params = {...this.projectPartData}
params.projectId = this.header.projectId
getProjectPartList(params).then(({data})=>{
if (data && data.code === 0){
this.projectPartTable = data.rows;
}
})
},
blurProjectHandle(){
let params = {
site:this.$store.state.user.site,
testPartNo:this.quotationDetail.productNo,
projectId: this.header.projectId
}
getProjectPartList(params).then(({data})=>{
if (data && data.code === 0){
if (data.rows && data.rows.length === 1){
this.dblClickProjectPartTable(data.rows[0])
}
}
})
},
// 项目物料双击事件
dblClickProjectPartTable(row){
this.quotationDetail.productNo = row.testPartNo;
this.quotationDetail.productDesc = row.partDesc;
this.projectPartDialogFlag = false;
},
closeDetailEditDialog(){
this.activeName = 'bom'
this.fullscreen = false;
this.resetQuotationDetail();
this.$refs.cost.restCostForm()
// 关闭新增弹框
this.quotationLeadIntoDetailFlag = false;
},
openQuotationDetail(){
this.$nextTick(()=>{
this.$refs.property.getPropertyTemplatesItem();// 属性
this.$refs.tool.initQuotationToolData();//刀具
this.searchQuoteBomList();//bom
})
},
searchQuoteRoutingHeader(){
let params = {
site:this.$store.state.user.site,
quoteDetailId:this.quotationDetail.quotationDetailId,
testPartNo:this.quotationDetail.productNo
}
searchQuoteRoutingHeader(params).then(({data})=>{
if (data && data.code === 0){
let row = data.row
let arr = [];
if (row){
arr[0] = row.version;
arr[1] = row.alternativeNo;
arr[2] = row.routingType;
arr[3] = row.partNo;
arr[4] = row.id;
arr[5] = row.parentId;
}
this.$refs.routing.setSelectRouting(arr);
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
searchQuoteBomList(){
this.allSearchFlagBom = false;
this.allSearchFlagRouting = false;
let params = {
site:this.$store.state.user.site,
quoteDetailId:this.quotationDetail.quotationDetailId,
testPartNo:this.quotationDetail.productNo
}
this.loadingStatus = true
searchQuoteBomHeader(params).then(({data})=>{
if (data && data.code === 0){
let row = data.row
let arr = [];
if (row !== null){
arr[0] = row.version;
arr[1] = row.alternativeNo;
arr[2] = row.bomType;
arr[3] = row.partNo;
arr[4] = row.id;
arr[5] = row.parentId;
}
this.$refs.bom.setSelectBom(arr);
this.searchQuoteRoutingHeader();// routing
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
saveQuotationDetail(){
if (!this.$refs.cost.ruleCostForm()) {
return
}
let params = this.$refs.cost.getQuotationDetail();
this.editQuotationDetailLoading = true;
updateQuotationDetail(params).then(({data}) => {
this.editQuotationDetailLoading = false;
if (data.code === 200) {
this.quotationDetailFlag = false;
this.initData();
this.$message.success(data.msg);
} else {
this.$message.warning(data.msg);
}
}).catch((error)=>{
this.$message.error(error);
this.editQuotationDetailLoading = false;
})
// this.$message.success(this.$refs.cost.getQuotationDetail())
// this.quotationDetailFlag = false;
},
tabClick(tab){
if (this.activeName === 'cost'){
this.searchQuoteBomList();
}
},
editQuotationDetailStatus(row,status){
let params = JSON.parse(JSON.stringify(row))
params.quotationDetailStatus = status;
updateQuotationDetail(params).then(({data}) => {
if (data.code === 200) {
this.initData();
this.$message.success(data.msg);
} else {
this.$message.warning(data.msg);
}
}).catch((error)=>{
this.$message.error(error);
})
},
clickProjectHandle(){
this.projectPartData.testPartNo = this.quotationDetail.productNo
this.projectPartDialogFlag = true
}
},
}
</script>
<template>
<div>
<div style="margin-bottom: 10px;padding-left: 10px">
<el-button type="primary" @click="quotationLeadIntoDetailFlag = true">新增</el-button>
</div>
<el-table v-loading="initQuotationDetailLoading" element-loading-text = "数据正在加载中"
element-loading-spinner = "el-icon-loading" :data="tableData" :height="height" border
:header-cell-style="{background:'rgba(23,179,163)',color:'#fff'}">
<el-table-column
label="操作"
fixed
width="120" align="center">
<template slot-scope="{row,$index}">
<el-link style="cursor: pointer" v-if="row.quotationDetailStatus !== '下达'" @click="editQuotationDetailStatus(row,'下达')">下达</el-link>
<el-link style="cursor: pointer" @click="editQuotationDetail(row,$index+1)">编辑</el-link>
<el-link style="cursor: pointer" @click="deleteQuotationDetailData(row)">删除</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-pagination style="margin-top: 0px"
@size-change="detailSizeChange"
@current-change="detailCurrentChange"
:current-page="no"
:page-sizes="[ 50, 100, 200, 500]"
:page-size="size"
:total="total"
layout="total,sizes, prev, pager, next, jumper">
</el-pagination>
<el-dialog title="新增报价明细" v-drag @open="openInsertQuotationDetail" @close="closeInsertQuotationDetail"
:visible.sync="quotationLeadIntoDetailFlag" width="40%" :close-on-click-modal="false">
<el-form :model="quotationDetail" ref="insertQuotationDetailForm" :rules="quotationDetailRules"
label-position="top">
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="产品编码" prop="productNo">
<span slot="label" style="" @click="clickProjectHandle"><a>产品编码</a></span>
<el-input v-model="quotationDetail.productNo" @blur="blurProjectHandle" clearable/>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="产品名称" prop="productDesc">
<el-input v-model="quotationDetail.productDesc" disabled clearable/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="报价数量" prop="quotationDetailQuantity">
<el-input-number style="width: 100%;margin-top: -5px;" :min="1" v-model="quotationDetail.quotationDetailQuantity" :controls="false"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="22">
<el-form-item label="">
<el-checkbox v-model="quotationDetail.flag">保存进入报价界面</el-checkbox>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="22">
<el-form-item label="备注" style="display: block;min-height: 80px" prop="remark">
<el-input type="textarea" resize="none" v-model="quotationDetail.remark" :autosize="{minRows: 3, maxRows: 3}"
style="min-height: 80px"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer" style="margin-top: 20px">
<el-button type="primary" :loading="insertQuotationDetailLoading" @click="insertQuotationDetailBtn">保 存</el-button>
<el-button @click="quotationLeadIntoDetailFlag = false">关 闭</el-button>
</div>
</el-dialog>
<el-dialog v-drag :fullscreen="fullscreen" :visible.sync="quotationDetailFlag" @open="openQuotationDetail" @close="closeDetailEditDialog"
width="60%" top="10vh" :close-on-click-modal="false">
<div slot="title" class="medium">
<div>
<span class="el-dialog__title">报价单号 {{this.header.quotationNo+"-"+this.header.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>
<el-form :rules="quotationDetailRules" style="margin-top: 5px" ref="quotationDetailForm"
:model="quotationDetail" label-width="80px" :inline="true" label-position="top">
<el-form-item label="产品编码" prop="productNo">
<el-input clearable disabled style="width: 200px" v-model="quotationDetail.productNo"/>
</el-form-item>
<el-form-item label="产品名称" prop="productDesc">
<el-input clearable disabled style="width: 240px" v-model="quotationDetail.productDesc"/>
</el-form-item>
<el-form-item label="报价数量" prop="quotationDetailQuantity">
<el-input-number disabled style="width: 100%;margin-top: -5px;" :min="1" v-model="quotationDetail.quotationDetailQuantity" :controls="false"></el-input-number>
</el-form-item>
<el-form-item label="备注" style="display: block;min-height: 90px;width: 63%">
<el-input type="textarea" resize="none" disabled v-model="quotationDetail.remark" :autosize="{minRows: 3, maxRows: 3}"
style="min-height: 80px" />
</el-form-item>
</el-form>
<el-tabs v-model="activeName" @tab-click="tabClick" :style="{height:`${fullscreen?740:500}px`}" border stripe>
<el-tab-pane name="bom" label="材料">
<bill-of-materiel ref="bom" :all-search-flag.sync="allSearchFlagBom" :total-cost.sync="BOMCost" :loading-status.sync="loadingStatus" :updateTree.sync="update" v-if="quotationDetailFlag" :height="fullscreen?655:415" :detail="quotationDetail"></bill-of-materiel>
</el-tab-pane>
<el-tab-pane name="routing" label="工艺">
<quote-routing ref="routing" :machine-cost.sync="machineCost" :labor-cost.sync="laborCost" :manufacturing-cost.sync="manufacturingCost" :all-search-flag.sync="allSearchFlagRouting" v-if="quotationDetailFlag" :loading-status.sync="loadingStatus" :height="fullscreen?655:415" :detail="quotationDetail"></quote-routing>
</el-tab-pane>
<el-tab-pane name="tool" label="工具">
<tool-quotation ref="tool" :total-cost.sync="ToolCost" v-if="quotationDetailFlag" :height="fullscreen?660:420" :detail="quotationDetail"></tool-quotation>
</el-tab-pane>
<el-tab-pane name="property" label="其他成本">
<property-templates ref="property" :pack-cost.sync="packInfoCost" :shipping-cost.sync="shippingInfoCost" v-if="quotationDetailFlag" :height="fullscreen?660:420" :detail="quotationDetail" ></property-templates>
</el-tab-pane>
<el-tab-pane name="cost" label="成本&价格">
<cost-price ref="cost" :tool-cost.sync="ToolCost"
:bom-cost.sync="BOMCost" :machine-cost.sync="machineCost"
:manufacturing-cost.sync="manufacturingCost"
:labor-cost.sync="laborCost"
:pack-cost.sync="packInfoCost" :shipping-cost.sync="shippingInfoCost"
:loading-status.sync="loadingStatus"
v-if="quotationDetailFlag"
:height="fullscreen?660:420"
:detail="quotationDetail"></cost-price>
</el-tab-pane>
</el-tabs>
<div slot="footer" style="padding-top: 10px">
<el-button type="primary" :loading="editQuotationDetailLoading" @click="saveQuotationDetail"> </el-button>
<el-button @click=" quotationDetailFlag= false"> </el-button>
</div>
</el-dialog>
<el-dialog v-drag title="产品列表" @close="closeProjectPartDialog" @open="openProjectPartDialog"
:visible.sync="projectPartDialogFlag">
<!--搜索条件-->
<el-form :model="projectPartData" ref="projectPartDataForm" :inline="true" label-position="top">
<el-form-item label="产品编号" prop="toolNo">
<el-input v-model="projectPartData.testPartNo" clearable/>
</el-form-item>
<el-form-item label="产品名称" prop="toolDescription">
<el-input v-model="projectPartData.partDesc" clearable/>
</el-form-item>
<el-form-item label=" ">
<el-button @click="getProjectPartList" type="primary"> 查 询 </el-button>
</el-form-item>
</el-form>
<el-table height="300px" stripe border width="30%" @row-dblclick="dblClickProjectPartTable"
:data="projectPartTable" ref="projectPartDataTable" :style="{marginTop:'10px'}">
<el-table-column
v-for="(item,index) in projectPartDetailList" :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>
</div>
</template>
<style scoped>
.el-input-number /deep/ .el-input__inner{
text-align: right;
padding-right: 5px !important;
}
</style>