报价打印
This commit is contained in:
parent
0c11909b8a
commit
2728d51fce
|
|
@ -1344,6 +1344,20 @@ export default {
|
|||
},
|
||||
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 tdata = JSON.parse(JSON.stringify(this.formOptions.data)); // 复制表单数据
|
||||
|
||||
|
|
|
|||
|
|
@ -46,10 +46,10 @@
|
|||
<vxe-column field="paint_material" title="材料(油漆)" width="160" :params="editorMaterial" formatter="formatRef"
|
||||
:edit-render="{ name: 'MkGridDataSelector' }"></vxe-column>
|
||||
|
||||
<vxe-column field="long_formula" title="长" width="160" :edit-render="{ name: 'EditExpressions' }"
|
||||
:params="{ moreExpressionsList: getMoreExpressionsList }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<vxe-column field="long_formula" title="长" width="160" :edit-render="{ name: 'EditExpressions' }"
|
||||
:params="{ moreExpressionsList: getMoreExpressionsList }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ row.long_formula || '' }}
|
||||
</template>
|
||||
|
|
@ -60,9 +60,9 @@
|
|||
</a-tooltip>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="width_formula" title="宽" width="160" :edit-render="{ name: 'EditExpressions' }"
|
||||
:params="{ moreExpressionsList: getMoreExpressionsList }">
|
||||
<template #default="{ row }">
|
||||
<vxe-column field="width_formula" title="宽" width="160" :edit-render="{ name: 'EditExpressions' }"
|
||||
:params="{ moreExpressionsList: getMoreExpressionsList }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ row.width_formula || '' }}
|
||||
|
|
@ -74,9 +74,9 @@
|
|||
</a-tooltip>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="height_formula" title="厚" width="160" :edit-render="{ name: 'EditExpressions' }"
|
||||
:params="{ moreExpressionsList: getMoreExpressionsList }">
|
||||
<template #default="{ row }">
|
||||
<vxe-column field="height_formula" title="厚" width="160" :edit-render="{ name: 'EditExpressions' }"
|
||||
:params="{ moreExpressionsList: getMoreExpressionsList }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ row.height_formula || '' }}
|
||||
|
|
@ -112,25 +112,23 @@
|
|||
<vxe-column field="rate_materials" title="主材利用率" width="80"
|
||||
:edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
|
||||
<vxe-column field="paint_number" title="油漆面" width="80"
|
||||
:edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
|
||||
<vxe-column field="board_length_formula" title="板材用量(块)" width="220"
|
||||
:edit-render="{ name: 'EditExpressions' }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ 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>
|
||||
:edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
|
||||
<vxe-column field="board_length_formula" title="板材用量(块)" width="220" :edit-render="{ name: 'EditExpressions' }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ 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>
|
||||
|
||||
</vxe-column>
|
||||
<vxe-column field="paint_area_formula" title="油漆面积(㎡)" width="220"
|
||||
:edit-render="{ name: 'EditExpressions' }">
|
||||
<template #default="{ row }">
|
||||
</vxe-column>
|
||||
<vxe-column field="paint_area_formula" title="油漆面积(㎡)" width="220" :edit-render="{ name: 'EditExpressions' }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ row.paint_area_formula || '' }}
|
||||
|
|
@ -288,19 +286,19 @@
|
|||
</template>
|
||||
</vxe-column>
|
||||
|
||||
<vxe-column field="price_formula" title="单价" width="200" :edit-render="{ name: 'EditExpressions' }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ row.price_formula || '' }}
|
||||
</template>
|
||||
<span v-if="showExp">
|
||||
{{ row.price_formula || '' }}
|
||||
</span>
|
||||
<span v-else v-html="formatShowNumber(row.price, 2)"></span>
|
||||
</a-tooltip>
|
||||
<vxe-column field="price_formula" title="单价" width="200" :edit-render="{ name: 'EditExpressions' }">
|
||||
<template #default="{ row }">
|
||||
<a-tooltip>
|
||||
<template slot="title">
|
||||
{{ row.price_formula || '' }}
|
||||
</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' }">
|
||||
<template #default="{ row }">
|
||||
|
|
@ -338,7 +336,7 @@
|
|||
isEnter: false, isTab: true, isEdit: true, isChecked: true
|
||||
}" :mouse-config="{ selected: true }" @pulldownSelected="material_onPulldownSelected"
|
||||
@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 }">
|
||||
<vxe-column width="60" v-if="!isReadonly">
|
||||
<template #default="{ row }">
|
||||
|
|
@ -401,8 +399,7 @@
|
|||
isEnter: false, isTab: true, isEdit: true, isChecked: true
|
||||
}" :mouse-config="{ selected: true }" @pulldownSelected="labor_onPulldownSelected"
|
||||
@popupSelected="labor_onPopupSelected" :export-config="{}" @edit-closed="labor_afterEditEvent"
|
||||
@edit-actived="labor_beforeEditEvent"
|
||||
:footer-cell-class-name="labor_footerCellClassName"
|
||||
@edit-actived="labor_beforeEditEvent" :footer-cell-class-name="labor_footerCellClassName"
|
||||
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: labor_beforeEditMethod }">
|
||||
<vxe-column width="60" v-if="!isReadonly">
|
||||
<template #default="{ row }">
|
||||
|
|
@ -450,8 +447,7 @@
|
|||
isEnter: false, isTab: true, isEdit: true, isChecked: true
|
||||
}" :mouse-config="{ selected: true }" @pulldownSelected="expense_onPulldownSelected"
|
||||
@popupSelected="expense_onPopupSelected" :export-config="{}" @edit-closed="expense_afterEditEvent"
|
||||
@edit-actived="expense_beforeEditEvent"
|
||||
:footer-cell-class-name="expense_footerCellClassName"
|
||||
@edit-actived="expense_beforeEditEvent" :footer-cell-class-name="expense_footerCellClassName"
|
||||
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: expense_beforeEditMethod }">
|
||||
<vxe-column width="60" v-if="!isReadonly">
|
||||
<template #default="{ row }">
|
||||
|
|
@ -504,7 +500,6 @@
|
|||
isEnter: false, isTab: true, isEdit: true, isChecked: true
|
||||
}" :mouse-config="{ selected: true }" @pulldownSelected="paintMaterial_onPulldownSelected"
|
||||
@popupSelected="paintMaterial_onPopupSelected" :export-config="{}" @edit-closed="paintMaterial_afterEditEvent"
|
||||
|
||||
:footer-cell-class-name="paintMaterial_footerCellClassName"
|
||||
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintMaterial_beforeEditMethod }">
|
||||
<vxe-column width="60" v-if="!isReadonly">
|
||||
|
|
@ -568,9 +563,7 @@
|
|||
isEnter: false, isTab: true, isEdit: true, isChecked: true
|
||||
}" :mouse-config="{ selected: true }" @pulldownSelected="paintLabor_onPulldownSelected"
|
||||
@popupSelected="paintLabor_onPopupSelected" :export-config="{}" @edit-closed="paintLabor_afterEditEvent"
|
||||
@edit-actived="paintLabor_beforeEditEvent"
|
||||
|
||||
:footer-cell-class-name="paintLabor_footerCellClassName"
|
||||
@edit-actived="paintLabor_beforeEditEvent" :footer-cell-class-name="paintLabor_footerCellClassName"
|
||||
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintLabor_beforeEditMethod }">
|
||||
<vxe-column width="60" v-if="!isReadonly">
|
||||
<template #default="{ row }">
|
||||
|
|
@ -618,8 +611,7 @@
|
|||
isEnter: false, isTab: true, isEdit: true, isChecked: true
|
||||
}" :mouse-config="{ selected: true }" @pulldownSelected="paintExpense_onPulldownSelected"
|
||||
@popupSelected="paintExpense_onPopupSelected" :export-config="{}" @edit-closed="paintExpense_afterEditEvent"
|
||||
@edit-actived="paintExpense_beforeEditEvent"
|
||||
:footer-cell-class-name="paintExpense_footerCellClassName"
|
||||
@edit-actived="paintExpense_beforeEditEvent" :footer-cell-class-name="paintExpense_footerCellClassName"
|
||||
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintExpense_beforeEditMethod }">
|
||||
<vxe-column width="60" v-if="!isReadonly">
|
||||
<template #default="{ row }">
|
||||
|
|
@ -728,7 +720,7 @@ export default {
|
|||
fittings_detailsData: [],
|
||||
parts_detailsData: [],
|
||||
|
||||
|
||||
|
||||
|
||||
editorFittings: {
|
||||
dataUrl: `${BASE_URL.BASE_URL}/BathroomFittings/v1/bathroom/fittings/list`,
|
||||
|
|
@ -825,10 +817,10 @@ export default {
|
|||
moreExpressionsList_material_height: [],//材料的厚度 变量列表
|
||||
moreExpressionsList_fittings: [],
|
||||
expense_detailsData: [
|
||||
|
||||
|
||||
],
|
||||
paintExpense_detailsData: [
|
||||
|
||||
|
||||
],
|
||||
|
||||
uploadDefaultImg: null,
|
||||
|
|
@ -919,11 +911,11 @@ export default {
|
|||
this.material_detailsData = data.materialList || [];
|
||||
this.paintLabor_detailsData = data.paint_laborList || [];
|
||||
this.paintMaterial_detailsData = data.paint_materialList || [];
|
||||
this.expense_detailsData = data.expense_list|| [];
|
||||
this.paintExpense_detailsData = data.paint_expenseList|| [];
|
||||
this.expense_detailsData = data.expense_list || [];
|
||||
this.paintExpense_detailsData = data.paint_expenseList || [];
|
||||
|
||||
this.materialHeightInit()
|
||||
this.fittingsListInit();
|
||||
this.fittingsListInit();
|
||||
this.detailDataInit();
|
||||
this.resetMaterial();
|
||||
this.resetPaintMaterial();
|
||||
|
|
@ -945,10 +937,10 @@ export default {
|
|||
|
||||
|
||||
this.fittings_list.forEach(o => {
|
||||
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) + "的厚");
|
||||
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) + "的厚");
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -1052,29 +1044,29 @@ export default {
|
|||
paintLaborList = paintLaborList.filter(a => a.labor && a.labor[0]); // 过滤油漆人工列表
|
||||
let paintMaterialList = JSON.parse(row.paintMaterialList || "[]"); // 获取油漆材料列表
|
||||
paintMaterialList = paintMaterialList.filter(a => a.material && a.material[0]); // 过滤油漆材料列表
|
||||
|
||||
|
||||
|
||||
let updateToList = ({ sourceList, targetList }) => {
|
||||
sourceList.forEach(item => {
|
||||
targetList.forEach(targetItem=>{
|
||||
if(targetItem.id == item.id){
|
||||
Object.assign(targetItem, item);
|
||||
}
|
||||
})
|
||||
targetList.forEach(targetItem => {
|
||||
if (targetItem.id == item.id) {
|
||||
Object.assign(targetItem, item);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
};
|
||||
updateToList({ sourceList: fittingsList, targetList: this.fittings_detailsData })
|
||||
updateToList({ sourceList: partsList, targetList: this.parts_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: paintLaborList, targetList: this.paintLabor_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) {
|
||||
|
||||
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);
|
||||
|
||||
if (column.field == "packaging") {
|
||||
|
|
@ -2034,9 +2075,9 @@ export default {
|
|||
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)
|
||||
return value;
|
||||
} catch {
|
||||
|
|
@ -2056,7 +2097,7 @@ export default {
|
|||
},
|
||||
|
||||
_calculateAll() {
|
||||
|
||||
|
||||
|
||||
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.paintExpense_detailsData, names: ["amount"], totalPrev: "paintExpense" });
|
||||
|
||||
|
||||
|
||||
|
||||
this.formOptions.data.expense = parseFloat(this.formOptions.data.expense_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_paint_expense = parseFloat(this.formOptions.data.paint_expense || 0).toFixed(2);
|
||||
|
||||
|
||||
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.paint_expenseList = postdata.paint_expenseList.filter(item => item.item_name ? true : false);
|
||||
|
||||
|
||||
postdata.expense = parseFloat(this.formOptions.data.expense_total_amount || 0) +
|
||||
parseFloat(this.formOptions.data.material_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.paintLabor_total_amount || 0);
|
||||
|
||||
|
|
@ -2142,7 +2183,7 @@ export default {
|
|||
this.formatDetailsData(postdata.expense_list);
|
||||
this.formatDetailsData(postdata.paint_expenseList);
|
||||
|
||||
|
||||
|
||||
this.$emit("update");
|
||||
|
||||
},
|
||||
|
|
@ -2253,4 +2294,5 @@ p.tip {
|
|||
h3 {
|
||||
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
Loading…
Reference in New Issue