报价打印

This commit is contained in:
xielue 2023-07-31 11:25:45 +08:00
parent 0c11909b8a
commit 2728d51fce
4 changed files with 314 additions and 82 deletions

View File

@ -1344,6 +1344,20 @@ export default {
}, },
print() { // print() { //
if (this.tabKey != "main") {
let index = parseInt(this.tabKey); // tab
let drawers = this.$refs['drawer']; //
if (drawers && drawers[index] && drawers[index].print) { //
drawers[index].print();
}
return;
}
let hiprint = this.$hiPrint; // let hiprint = this.$hiPrint; //
let tdata = JSON.parse(JSON.stringify(this.formOptions.data)); // let tdata = JSON.parse(JSON.stringify(this.formOptions.data)); //

View File

@ -46,10 +46,10 @@
<vxe-column field="paint_material" title="材料(油漆)" width="160" :params="editorMaterial" formatter="formatRef" <vxe-column field="paint_material" title="材料(油漆)" width="160" :params="editorMaterial" formatter="formatRef"
:edit-render="{ name: 'MkGridDataSelector' }"></vxe-column> :edit-render="{ name: 'MkGridDataSelector' }"></vxe-column>
<vxe-column field="long_formula" title="长" width="160" :edit-render="{ name: 'EditExpressions' }" <vxe-column field="long_formula" title="长" width="160" :edit-render="{ name: 'EditExpressions' }"
:params="{ moreExpressionsList: getMoreExpressionsList }"> :params="{ moreExpressionsList: getMoreExpressionsList }">
<template #default="{ row }"> <template #default="{ row }">
<a-tooltip> <a-tooltip>
<template slot="title"> <template slot="title">
{{ row.long_formula || '' }} {{ row.long_formula || '' }}
</template> </template>
@ -60,9 +60,9 @@
</a-tooltip> </a-tooltip>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="width_formula" title="宽" width="160" :edit-render="{ name: 'EditExpressions' }" <vxe-column field="width_formula" title="宽" width="160" :edit-render="{ name: 'EditExpressions' }"
:params="{ moreExpressionsList: getMoreExpressionsList }"> :params="{ moreExpressionsList: getMoreExpressionsList }">
<template #default="{ row }"> <template #default="{ row }">
<a-tooltip> <a-tooltip>
<template slot="title"> <template slot="title">
{{ row.width_formula || '' }} {{ row.width_formula || '' }}
@ -74,9 +74,9 @@
</a-tooltip> </a-tooltip>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="height_formula" title="厚" width="160" :edit-render="{ name: 'EditExpressions' }" <vxe-column field="height_formula" title="厚" width="160" :edit-render="{ name: 'EditExpressions' }"
:params="{ moreExpressionsList: getMoreExpressionsList }"> :params="{ moreExpressionsList: getMoreExpressionsList }">
<template #default="{ row }"> <template #default="{ row }">
<a-tooltip> <a-tooltip>
<template slot="title"> <template slot="title">
{{ row.height_formula || '' }} {{ row.height_formula || '' }}
@ -112,25 +112,23 @@
<vxe-column field="rate_materials" title="主材利用率" width="80" <vxe-column field="rate_materials" title="主材利用率" width="80"
:edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column> :edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
<vxe-column field="paint_number" title="油漆面" width="80" <vxe-column field="paint_number" title="油漆面" width="80"
:edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column> :edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
<vxe-column field="board_length_formula" title="板材用量(块)" width="220" <vxe-column field="board_length_formula" title="板材用量(块)" width="220" :edit-render="{ name: 'EditExpressions' }">
:edit-render="{ name: 'EditExpressions' }"> <template #default="{ row }">
<template #default="{ row }"> <a-tooltip>
<a-tooltip> <template slot="title">
<template slot="title"> {{ row.board_length_formula || '' }}
{{ row.board_length_formula || '' }}
</template>
<span v-if="showExp">
{{ row.board_length_formula || '' }}
</span>
<span v-else v-html="formatShowNumber(row.board_length, 3)"></span>
</a-tooltip>
</template> </template>
<span v-if="showExp">
{{ row.board_length_formula || '' }}
</span>
<span v-else v-html="formatShowNumber(row.board_length, 3)"></span>
</a-tooltip>
</template>
</vxe-column> </vxe-column>
<vxe-column field="paint_area_formula" title="油漆面积(㎡)" width="220" <vxe-column field="paint_area_formula" title="油漆面积(㎡)" width="220" :edit-render="{ name: 'EditExpressions' }">
:edit-render="{ name: 'EditExpressions' }"> <template #default="{ row }">
<template #default="{ row }">
<a-tooltip> <a-tooltip>
<template slot="title"> <template slot="title">
{{ row.paint_area_formula || '' }} {{ row.paint_area_formula || '' }}
@ -288,19 +286,19 @@
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="price_formula" title="单价" width="200" :edit-render="{ name: 'EditExpressions' }"> <vxe-column field="price_formula" title="单价" width="200" :edit-render="{ name: 'EditExpressions' }">
<template #default="{ row }"> <template #default="{ row }">
<a-tooltip> <a-tooltip>
<template slot="title"> <template slot="title">
{{ row.price_formula || '' }} {{ row.price_formula || '' }}
</template>
<span v-if="showExp">
{{ row.price_formula || '' }}
</span>
<span v-else v-html="formatShowNumber(row.price, 2)"></span>
</a-tooltip>
</template> </template>
</vxe-column> <span v-if="showExp">
{{ row.price_formula || '' }}
</span>
<span v-else v-html="formatShowNumber(row.price, 2)"></span>
</a-tooltip>
</template>
</vxe-column>
<vxe-column field="amount_formula" title="金额" width="200" :edit-render="{ name: 'EditExpressions' }"> <vxe-column field="amount_formula" title="金额" width="200" :edit-render="{ name: 'EditExpressions' }">
<template #default="{ row }"> <template #default="{ row }">
@ -338,7 +336,7 @@
isEnter: false, isTab: true, isEdit: true, isChecked: true isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="material_onPulldownSelected" }" :mouse-config="{ selected: true }" @pulldownSelected="material_onPulldownSelected"
@popupSelected="material_onPopupSelected" :export-config="{}" @edit-closed="material_afterEditEvent" @popupSelected="material_onPopupSelected" :export-config="{}" @edit-closed="material_afterEditEvent"
:footer-cell-class-name="material_footerCellClassName" :footer-cell-class-name="material_footerCellClassName"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: material_beforeEditMethod }"> :edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: material_beforeEditMethod }">
<vxe-column width="60" v-if="!isReadonly"> <vxe-column width="60" v-if="!isReadonly">
<template #default="{ row }"> <template #default="{ row }">
@ -401,8 +399,7 @@
isEnter: false, isTab: true, isEdit: true, isChecked: true isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="labor_onPulldownSelected" }" :mouse-config="{ selected: true }" @pulldownSelected="labor_onPulldownSelected"
@popupSelected="labor_onPopupSelected" :export-config="{}" @edit-closed="labor_afterEditEvent" @popupSelected="labor_onPopupSelected" :export-config="{}" @edit-closed="labor_afterEditEvent"
@edit-actived="labor_beforeEditEvent" @edit-actived="labor_beforeEditEvent" :footer-cell-class-name="labor_footerCellClassName"
:footer-cell-class-name="labor_footerCellClassName"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: labor_beforeEditMethod }"> :edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: labor_beforeEditMethod }">
<vxe-column width="60" v-if="!isReadonly"> <vxe-column width="60" v-if="!isReadonly">
<template #default="{ row }"> <template #default="{ row }">
@ -450,8 +447,7 @@
isEnter: false, isTab: true, isEdit: true, isChecked: true isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="expense_onPulldownSelected" }" :mouse-config="{ selected: true }" @pulldownSelected="expense_onPulldownSelected"
@popupSelected="expense_onPopupSelected" :export-config="{}" @edit-closed="expense_afterEditEvent" @popupSelected="expense_onPopupSelected" :export-config="{}" @edit-closed="expense_afterEditEvent"
@edit-actived="expense_beforeEditEvent" @edit-actived="expense_beforeEditEvent" :footer-cell-class-name="expense_footerCellClassName"
:footer-cell-class-name="expense_footerCellClassName"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: expense_beforeEditMethod }"> :edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: expense_beforeEditMethod }">
<vxe-column width="60" v-if="!isReadonly"> <vxe-column width="60" v-if="!isReadonly">
<template #default="{ row }"> <template #default="{ row }">
@ -504,7 +500,6 @@
isEnter: false, isTab: true, isEdit: true, isChecked: true isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="paintMaterial_onPulldownSelected" }" :mouse-config="{ selected: true }" @pulldownSelected="paintMaterial_onPulldownSelected"
@popupSelected="paintMaterial_onPopupSelected" :export-config="{}" @edit-closed="paintMaterial_afterEditEvent" @popupSelected="paintMaterial_onPopupSelected" :export-config="{}" @edit-closed="paintMaterial_afterEditEvent"
:footer-cell-class-name="paintMaterial_footerCellClassName" :footer-cell-class-name="paintMaterial_footerCellClassName"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintMaterial_beforeEditMethod }"> :edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintMaterial_beforeEditMethod }">
<vxe-column width="60" v-if="!isReadonly"> <vxe-column width="60" v-if="!isReadonly">
@ -568,9 +563,7 @@
isEnter: false, isTab: true, isEdit: true, isChecked: true isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="paintLabor_onPulldownSelected" }" :mouse-config="{ selected: true }" @pulldownSelected="paintLabor_onPulldownSelected"
@popupSelected="paintLabor_onPopupSelected" :export-config="{}" @edit-closed="paintLabor_afterEditEvent" @popupSelected="paintLabor_onPopupSelected" :export-config="{}" @edit-closed="paintLabor_afterEditEvent"
@edit-actived="paintLabor_beforeEditEvent" @edit-actived="paintLabor_beforeEditEvent" :footer-cell-class-name="paintLabor_footerCellClassName"
:footer-cell-class-name="paintLabor_footerCellClassName"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintLabor_beforeEditMethod }"> :edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintLabor_beforeEditMethod }">
<vxe-column width="60" v-if="!isReadonly"> <vxe-column width="60" v-if="!isReadonly">
<template #default="{ row }"> <template #default="{ row }">
@ -618,8 +611,7 @@
isEnter: false, isTab: true, isEdit: true, isChecked: true isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="paintExpense_onPulldownSelected" }" :mouse-config="{ selected: true }" @pulldownSelected="paintExpense_onPulldownSelected"
@popupSelected="paintExpense_onPopupSelected" :export-config="{}" @edit-closed="paintExpense_afterEditEvent" @popupSelected="paintExpense_onPopupSelected" :export-config="{}" @edit-closed="paintExpense_afterEditEvent"
@edit-actived="paintExpense_beforeEditEvent" @edit-actived="paintExpense_beforeEditEvent" :footer-cell-class-name="paintExpense_footerCellClassName"
:footer-cell-class-name="paintExpense_footerCellClassName"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintExpense_beforeEditMethod }"> :edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintExpense_beforeEditMethod }">
<vxe-column width="60" v-if="!isReadonly"> <vxe-column width="60" v-if="!isReadonly">
<template #default="{ row }"> <template #default="{ row }">
@ -728,7 +720,7 @@ export default {
fittings_detailsData: [], fittings_detailsData: [],
parts_detailsData: [], parts_detailsData: [],
editorFittings: { editorFittings: {
dataUrl: `${BASE_URL.BASE_URL}/BathroomFittings/v1/bathroom/fittings/list`, dataUrl: `${BASE_URL.BASE_URL}/BathroomFittings/v1/bathroom/fittings/list`,
@ -825,10 +817,10 @@ export default {
moreExpressionsList_material_height: [],// moreExpressionsList_material_height: [],//
moreExpressionsList_fittings: [], moreExpressionsList_fittings: [],
expense_detailsData: [ expense_detailsData: [
], ],
paintExpense_detailsData: [ paintExpense_detailsData: [
], ],
uploadDefaultImg: null, uploadDefaultImg: null,
@ -919,11 +911,11 @@ export default {
this.material_detailsData = data.materialList || []; this.material_detailsData = data.materialList || [];
this.paintLabor_detailsData = data.paint_laborList || []; this.paintLabor_detailsData = data.paint_laborList || [];
this.paintMaterial_detailsData = data.paint_materialList || []; this.paintMaterial_detailsData = data.paint_materialList || [];
this.expense_detailsData = data.expense_list|| []; this.expense_detailsData = data.expense_list || [];
this.paintExpense_detailsData = data.paint_expenseList|| []; this.paintExpense_detailsData = data.paint_expenseList || [];
this.materialHeightInit() this.materialHeightInit()
this.fittingsListInit(); this.fittingsListInit();
this.detailDataInit(); this.detailDataInit();
this.resetMaterial(); this.resetMaterial();
this.resetPaintMaterial(); this.resetPaintMaterial();
@ -945,10 +937,10 @@ export default {
this.fittings_list.forEach(o => { this.fittings_list.forEach(o => {
if(o.IsShowExpression){ if (o.IsShowExpression) {
this.moreExpressionsList_fittings.push(this.formatName(o.name) + "的长"); this.moreExpressionsList_fittings.push(this.formatName(o.name) + "的长");
this.moreExpressionsList_fittings.push(this.formatName(o.name) + "的宽"); this.moreExpressionsList_fittings.push(this.formatName(o.name) + "的宽");
this.moreExpressionsList_fittings.push(this.formatName(o.name) + "的厚"); this.moreExpressionsList_fittings.push(this.formatName(o.name) + "的厚");
} }
}); });
@ -1052,29 +1044,29 @@ export default {
paintLaborList = paintLaborList.filter(a => a.labor && a.labor[0]); // paintLaborList = paintLaborList.filter(a => a.labor && a.labor[0]); //
let paintMaterialList = JSON.parse(row.paintMaterialList || "[]"); // let paintMaterialList = JSON.parse(row.paintMaterialList || "[]"); //
paintMaterialList = paintMaterialList.filter(a => a.material && a.material[0]); // paintMaterialList = paintMaterialList.filter(a => a.material && a.material[0]); //
let updateToList = ({ sourceList, targetList }) => { let updateToList = ({ sourceList, targetList }) => {
sourceList.forEach(item => { sourceList.forEach(item => {
targetList.forEach(targetItem=>{ targetList.forEach(targetItem => {
if(targetItem.id == item.id){ if (targetItem.id == item.id) {
Object.assign(targetItem, item); Object.assign(targetItem, item);
} }
}) })
}); });
}; };
updateToList({ sourceList: fittingsList, targetList: this.fittings_detailsData }) updateToList({ sourceList: fittingsList, targetList: this.fittings_detailsData })
updateToList({ sourceList: partsList, targetList: this.parts_detailsData }) updateToList({ sourceList: partsList, targetList: this.parts_detailsData })
updateToList({ sourceList: packagingList, targetList: this.packaging_detailsData }) updateToList({ sourceList: packagingList, targetList: this.packaging_detailsData })
updateToList({ sourceList: laborList, targetList: this.labor_detailsData}) updateToList({ sourceList: laborList, targetList: this.labor_detailsData })
updateToList({ sourceList: materialList, targetList: this.material_detailsData }) updateToList({ sourceList: materialList, targetList: this.material_detailsData })
updateToList({ sourceList: paintLaborList, targetList: this.paintLabor_detailsData }) updateToList({ sourceList: paintLaborList, targetList: this.paintLabor_detailsData })
updateToList({ sourceList: paintMaterialList, targetList: this.paintMaterial_detailsData }) updateToList({ sourceList: paintMaterialList, targetList: this.paintMaterial_detailsData })
this.calculateAll();
this.calculateAll();
}); });
}, },
@ -1100,6 +1092,55 @@ export default {
} }
}, },
print() { //
let hiprint = this.$hiPrint; //
let tdata = JSON.parse(JSON.stringify(this.formOptions.data)); //
tdata.project_name = tdata.name;
tdata.main_cabinet_length = tdata.long;
tdata.main_cabinet_width = tdata.width;
tdata.main_cabinet_height = tdata.height;
tdata.fittings = this.printFormatListData(this.fittings_detailsData); //
tdata.parts = this.printFormatListData(this.parts_detailsData); //
tdata.packaging = this.printFormatListData(this.packaging_detailsData); //
tdata.labor = this.printFormatListData(this.labor_detailsData); //
tdata.material = this.printFormatListData(this.material_detailsData); //
tdata.paintLabor = this.printFormatListData(this.paintLabor_detailsData); //
tdata.paintMaterial = this.printFormatListData(this.paintMaterial_detailsData); //
tdata.expense = this.printFormatListData(this.expense_detailsData); //
tdata.paintExpense = this.printFormatListData(this.paintExpense_detailsData); //
hiprint.init(); //
var hiprintTemplate = new hiprint.PrintTemplate({ //
template: settings.printTemplate //
});
hiprintTemplate.print(tdata, { printer: '', title: '报价单' }); //
},
printFormatListData(detailsData) { //
let data = JSON.parse(JSON.stringify(detailsData)); //
data.forEach(item => { //
for (let name in item) { //
let o = item[name]; //
if (Array.isArray(o) && o[1]) { //
item[name] = o[1]; //
}
if (typeof (o) == "number") { //
item[name] = parseFloat(o || 0).toFixed(2) //
}
}
});
return data; //
},
setShowType(value) { setShowType(value) {
this.showType = value this.showType = value
@ -1382,7 +1423,7 @@ export default {
// //
packaging_onPulldownSelected({ row, name, column,params, selectedData }) { packaging_onPulldownSelected({ row, name, column, params, selectedData }) {
console.log(row, name, params); console.log(row, name, params);
if (column.field == "packaging") { if (column.field == "packaging") {
@ -2034,9 +2075,9 @@ export default {
return this.getExpressionItemValue({ row, name, defaultValue }) return this.getExpressionItemValue({ row, name, defaultValue })
}); });
value = value.replace("//g",","); value = value.replace("//g", ",");
value = value.replace("//g","?"); value = value.replace("//g", "?");
value = value.replace("//g",":"); value = value.replace("//g", ":");
eval("value = " + value) eval("value = " + value)
return value; return value;
} catch { } catch {
@ -2056,7 +2097,7 @@ export default {
}, },
_calculateAll() { _calculateAll() {
this.calculateRows({ detailsData: this.fittings_detailsData, names: ["long", "width", "height", "seal", "board_length", "paint_area"], totalPrev: "fittings" }); this.calculateRows({ detailsData: this.fittings_detailsData, names: ["long", "width", "height", "seal", "board_length", "paint_area"], totalPrev: "fittings" });
@ -2076,7 +2117,7 @@ export default {
this.calculateRows({ detailsData: this.expense_detailsData, names: ["amount"], totalPrev: "expense" }); this.calculateRows({ detailsData: this.expense_detailsData, names: ["amount"], totalPrev: "expense" });
this.calculateRows({ detailsData: this.paintExpense_detailsData, names: ["amount"], totalPrev: "paintExpense" }); this.calculateRows({ detailsData: this.paintExpense_detailsData, names: ["amount"], totalPrev: "paintExpense" });
this.formOptions.data.expense = parseFloat(this.formOptions.data.expense_total_amount || 0) + this.formOptions.data.expense = parseFloat(this.formOptions.data.expense_total_amount || 0) +
parseFloat(this.formOptions.data.material_total_amount || 0) + parseFloat(this.formOptions.data.material_total_amount || 0) +
@ -2090,7 +2131,7 @@ export default {
this.formOptions.data.show_expense = parseFloat(this.formOptions.data.expense || 0).toFixed(2); this.formOptions.data.show_expense = parseFloat(this.formOptions.data.expense || 0).toFixed(2);
this.formOptions.data.show_paint_expense = parseFloat(this.formOptions.data.paint_expense || 0).toFixed(2); this.formOptions.data.show_paint_expense = parseFloat(this.formOptions.data.paint_expense || 0).toFixed(2);
this.formOptions.data = JSON.parse(JSON.stringify(this.formOptions.data)) this.formOptions.data = JSON.parse(JSON.stringify(this.formOptions.data))
@ -2118,13 +2159,13 @@ export default {
postdata.expense_list = postdata.expense_list.filter(item => item.item_name ? true : false); postdata.expense_list = postdata.expense_list.filter(item => item.item_name ? true : false);
postdata.paint_expenseList = postdata.paint_expenseList.filter(item => item.item_name ? true : false); postdata.paint_expenseList = postdata.paint_expenseList.filter(item => item.item_name ? true : false);
postdata.expense = parseFloat(this.formOptions.data.expense_total_amount || 0) + postdata.expense = parseFloat(this.formOptions.data.expense_total_amount || 0) +
parseFloat(this.formOptions.data.material_total_amount || 0) + parseFloat(this.formOptions.data.material_total_amount || 0) +
parseFloat(this.formOptions.data.labor_total_amount || 0); parseFloat(this.formOptions.data.labor_total_amount || 0);
postdata.paint_expense = parseFloat(this.formOptions.data.paintExpense_total_amount || 0) + postdata.paint_expense = parseFloat(this.formOptions.data.paintExpense_total_amount || 0) +
parseFloat(this.formOptions.data.paintMaterial_total_amount || 0) + parseFloat(this.formOptions.data.paintMaterial_total_amount || 0) +
parseFloat(this.formOptions.data.paintLabor_total_amount || 0); parseFloat(this.formOptions.data.paintLabor_total_amount || 0);
@ -2142,7 +2183,7 @@ export default {
this.formatDetailsData(postdata.expense_list); this.formatDetailsData(postdata.expense_list);
this.formatDetailsData(postdata.paint_expenseList); this.formatDetailsData(postdata.paint_expenseList);
this.$emit("update"); this.$emit("update");
}, },
@ -2253,4 +2294,5 @@ p.tip {
h3 { h3 {
font-weight: bold; font-weight: bold;
} }
}</style> }
</style>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long