主材利用率 油漆面 默认值

This commit is contained in:
xielue 2023-05-07 20:08:38 +08:00
parent 50081ba10c
commit 9729f7f107
9 changed files with 420 additions and 52 deletions

View File

@ -769,7 +769,7 @@ export default {
currentConfigName: "",
// ID
currentBeid: 0,
settignsValues : {},
tabKey: 'main',
showAll: false,
showExp: false,
@ -1109,7 +1109,7 @@ export default {
created() {
this.loadSettings();
// id
let dataId = this.getDataId();
@ -1185,6 +1185,33 @@ export default {
//
methods: {
loadSettings() {
this.$mk.post({
url: `${BASE_URL.BASE_URL}/BathroomScheme/v1/settings/list`,
data: {
}
}).then(a => {
let data = {};
let getName = (info) => {
for (let name in info) {
return name;
}
return null;
}
a.data.settings.forEach(o => {
let name = getName(o.setting);
if (!name) return;
data[name] = o.setting[name];
});
this.settignsValues = data;
}).catch((a) => {
this.$mk.error(a.data.msg);
});
},
formatShowNumber(value, points) {
if (!value) {
return '<span style="color:red;">' + (0.0).toFixed(points || 0) + '</span>';
@ -1495,6 +1522,13 @@ export default {
row.height_formula = selectedData.spec;
}
}
if (!row.rate_materials && this.settignsValues.Main_material_utilization_rate) {
row.rate_materials = this.settignsValues.Main_material_utilization_rate;
}
if (!row.paint_number && this.settignsValues.Default_rate_of_paint_surface) {
row.paint_number = this.settignsValues.Default_rate_of_paint_surface;
}
},
fittings_onPopupSelected({ rows, name, params }) {
console.log(rows, name, params);

View File

@ -349,8 +349,21 @@ export default {
if (e.name == "add") { //
this.$openPage("/BathroomQuotation/BathroomQuotationAdd"); //
}
if (e.name == "setting") {
this.openSettings();
}
},
openSettings() {
this.$mk.dialog.open({
page: () => import("@/pages/Middle/bathroom/basic/settings.vue"),
title: "参数配置",
pageOptions: {
},
width: 800,
height: 600,
dataId: 0
});
},
//
pageEdit(row) {
if (!row) { //

View File

@ -681,6 +681,7 @@ export default {
currentConfigName: "",
// ID
currentBeid: 0,
settignsValues : {},
showType: '1',
showExp: false,
@ -880,6 +881,7 @@ export default {
created() {
this.loadSettings();
let data = this.item;
this.formOptions.data = data;
this.fittings_detailsData = data.fittingsList || [];
@ -898,6 +900,34 @@ export default {
},
//
methods: {
loadSettings() {
this.$mk.post({
url: `${BASE_URL.BASE_URL}/BathroomScheme/v1/settings/list`,
data: {
}
}).then(a => {
let data = {};
let getName = (info) => {
for (let name in info) {
return name;
}
return null;
}
a.data.settings.forEach(o => {
let name = getName(o.setting);
if (!name) return;
data[name] = o.setting[name];
});
this.settignsValues = data;
}).catch((a) => {
this.$mk.error(a.data.msg);
});
},
formatShowNumber(value, points) {
if (!value) {
return '<span style="color:red;">'+(0.0).toFixed(points ||0)+'</span>';
@ -1049,6 +1079,12 @@ export default {
row.height_formula = selectedData.spec;
}
}
if (!row.rate_materials && this.settignsValues.Main_material_utilization_rate) {
row.rate_materials = this.settignsValues.Main_material_utilization_rate;
}
if (!row.paint_number && this.settignsValues.Default_rate_of_paint_surface) {
row.paint_number = this.settignsValues.Default_rate_of_paint_surface;
}
},
fittings_onPopupSelected({ rows, name, params }) {
console.log(rows, name, params);

View File

@ -96,15 +96,13 @@
</vxe-column>
<vxe-column field="parts" title="配件" width="260" :params="editorParts" formatter="formatRef"
:edit-render="{ name: 'MkGridDataSelector' }"></vxe-column>
<vxe-column field="spec" title="规格" width="120"
:edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="spec" title="规格" width="120" :edit-render="{ name: '$input' }"></vxe-column>
<vxe-column field="quantity" title="数量" width="120"
:edit-render="{ name: '$input', props: { type: 'integer' } }"></vxe-column>
<vxe-column field="price" title="单价" width="120"
:edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
:edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
<vxe-column field="amount_formula" title="金额(公式)" width="220"
:edit-render="{ name: 'EditExpressions' }">
<vxe-column field="amount_formula" title="金额(公式)" width="220" :edit-render="{ name: 'EditExpressions' }">
</vxe-column>
</vxe-table>
@ -142,11 +140,11 @@
:edit-render="{ name: 'EditExpressions' }"></vxe-column>
<vxe-column field="quantity_formula" title="数量(公式)" width="220"
:edit-render="{ name: 'EditExpressions' }"></vxe-column>
:edit-render="{ name: 'EditExpressions' }"></vxe-column>
<vxe-column field="price" title="单价" width="120"
:edit-render="{ name: '$input', props: { type: 'number' } }"></vxe-column>
<vxe-column field="amount_formula" title="金额(公式)" width="220"
:edit-render="{ name: 'EditExpressions' }"></vxe-column>
:edit-render="{ name: 'EditExpressions' }"></vxe-column>
</vxe-table>
@ -218,7 +216,8 @@
<vxe-column field="labor" title="项目" width="260" :params="editorLabor" formatter="formatRef"
:edit-render="{ name: 'MkGridDataSelector' }"></vxe-column>
<vxe-column field="amount_formula" title="金额(公式)" width="220" :edit-render="{ name: 'EditExpressions' }"></vxe-column>
<vxe-column field="amount_formula" title="金额(公式)" width="220"
:edit-render="{ name: 'EditExpressions' }"></vxe-column>
</vxe-table>
@ -228,17 +227,18 @@
</a-collapse>
</div>
<div class="groupbox">
<h3>核算表油漆</h3>
<a-collapse v-model="groupbox3_activeKey">
<a-collapse-panel key="1" header="材料">
<vxe-table border show-overflow keep-source ref="paintMaterial_xTable" :data="paintMaterial_detailsData" :keyboard-config="{
isArrow: true, isDel: true,
isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="paintMaterial_onPulldownSelected"
<vxe-table border show-overflow keep-source ref="paintMaterial_xTable" :data="paintMaterial_detailsData"
:keyboard-config="{
isArrow: true, isDel: true,
isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="paintMaterial_onPulldownSelected"
@popupSelected="paintMaterial_onPopupSelected" :export-config="{}" @edit-closed="paintMaterial_afterEditEvent"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintMaterial_beforeEditMethod }">
<vxe-column width="60" v-if="!isReadonly">
@ -269,10 +269,11 @@
</a-collapse-panel>
<a-collapse-panel key="2" header="人工" :disabled="false">
<vxe-table border show-overflow keep-source ref="paintLabor_xTable" :data="paintLabor_detailsData" :keyboard-config="{
isArrow: true, isDel: true,
isEnter: false, isTab: true, isEdit: true, isChecked: true
}" :mouse-config="{ selected: true }" @pulldownSelected="paintLabor_onPulldownSelected"
<vxe-table border show-overflow keep-source ref="paintLabor_xTable" :data="paintLabor_detailsData"
:keyboard-config="{
isArrow: true, isDel: true,
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"
:edit-config="{ trigger: 'click', mode: 'cell', icon: 'vxe-icon-edit', showStatus: false, beforeEditMethod: paintLabor_beforeEditMethod }">
@ -291,7 +292,8 @@
<vxe-column field="labor" title="项目" width="260" :params="editorLabor" formatter="formatRef"
:edit-render="{ name: 'MkGridDataSelector' }"></vxe-column>
<vxe-column field="amount_formula" title="金额(公式)" width="220" :edit-render="{ name: 'EditExpressions' }"></vxe-column>
<vxe-column field="amount_formula" title="金额(公式)" width="220"
:edit-render="{ name: 'EditExpressions' }"></vxe-column>
</vxe-table>
@ -352,8 +354,8 @@ export default {
currentConfigName: "",
// ID
currentBeid: 0,
groupbox1_activeKey: ["1","2"],
settignsValues : {},
groupbox1_activeKey: ["1", "2"],
groupbox2_activeKey: [],
groupbox3_activeKey: [],
isReadonly: false,
@ -460,7 +462,7 @@ export default {
detailDataFieldName: "bathroom_scheme",
actions: {
// =============================== Start ===============================
BathroomSchemeList: `${BASE_URL.BASE_URL}/BathroomScheme/v1/bathroom/scheme/list`, //
BathroomSchemeDetail: `${BASE_URL.BASE_URL}/BathroomScheme/v1/bathroom/scheme/detail`, //
@ -614,7 +616,7 @@ export default {
{ field: 'model', title: '型号', span: 24, itemRender: { name: '$input' } },
{ field: 'type', title: '类型', span: 24, itemRender: { name: '$radio', options: settings.options_schemeType } },
]
},
{
@ -661,8 +663,7 @@ export default {
},
created() {
this.loadSettings();
// id
let dataId = this.getDataId();
@ -691,7 +692,7 @@ export default {
let data = a.data[this.detailDataFieldName]
this.formOptions.data = data;
this.fittings_detailsData = JSON.parse(data.fittingsList || "[]");
@ -703,7 +704,7 @@ export default {
this.material_detailsData = JSON.parse(data.materialList || "[]");
this.paintLabor_detailsData = JSON.parse(data.paintLaborList || "[]");
this.paintMaterial_detailsData = JSON.parse(data.paintMaterialList || "[]");
@ -732,8 +733,33 @@ export default {
methods: {
loadSettings() {
this.$mk.post({
url: `${BASE_URL.BASE_URL}/BathroomScheme/v1/settings/list`,
data: {
}
}).then(a => {
let data = {};
let getName = (info) => {
for (let name in info) {
return name;
}
return null;
}
a.data.settings.forEach(o => {
let name = getName(o.setting);
if (!name) return;
data[name] = o.setting[name];
});
this.settignsValues = data;
}).catch((a) => {
this.$mk.error(a.data.msg);
});
},
detailDataInit() {
@ -805,16 +831,25 @@ export default {
}
}
if (column.field == "paint_material") {
this.resetPaintMaterial();
}
if (column.field == "material") {
this.resetMaterial();
if(selectedData.spec){
if (selectedData.spec) {
row.height_formula = selectedData.spec;
}
}
if (!row.rate_materials && this.settignsValues.Main_material_utilization_rate) {
row.rate_materials = this.settignsValues.Main_material_utilization_rate;
}
if (!row.paint_number && this.settignsValues.Default_rate_of_paint_surface) {
row.paint_number = this.settignsValues.Default_rate_of_paint_surface;
}
},
fittings_onPopupSelected({ rows, name, params }) {
@ -826,6 +861,8 @@ export default {
},
fittings_afterEditEvent({ column, row }) {
console.log(row, column);
},
fittings_beforeEditEvent({ column, row }) {
console.log(row, column);
@ -845,20 +882,20 @@ export default {
const $table = this.$refs.fittings_xTable;
this.fittings_detailsData.splice($table.getRowSeq(row) - 1, 1);
this.resetMaterial();
this.resetPaintMaterial();
this.resetPaintMaterial();
},
parts_onPulldownSelected({selectedData,row }) {
console.log(row, selectedData);
if(selectedData.spec){
parts_onPulldownSelected({ selectedData, row }) {
console.log(row, selectedData);
if (selectedData.spec) {
row.spec = selectedData.spec;
}
if(selectedData.price){
if (selectedData.price) {
row.price = selectedData.price;
}
},
parts_onPopupSelected({ rows, name, params }) {
@ -1082,8 +1119,8 @@ export default {
formatName(v){
return (v || "").replace("\r","").replace("\n","").replace("\t","").replace(" ","");
formatName(v) {
return (v || "").replace("\r", "").replace("\n", "").replace("\t", "").replace(" ", "");
},
@ -1103,7 +1140,7 @@ export default {
let material_list = [];
material_items.forEach(item => {
let name = this.formatName(item[1]);
let old = this.material_detailsData.filter(a => a.material && a.material[0] == item[0] ? true : false);
let info = {
@ -1113,7 +1150,7 @@ export default {
price: 0
};
if (old.length) {
info.quantity_formula = `{${name}的总用量}`;
info.quantity_formula = `{${name}的总用量}`;
info.price = old[0].price;
info.amount_formula = old[0].amount_formula;
}
@ -1177,7 +1214,7 @@ export default {
price: 0
};
if (old.length) {
info.quantity_formula = `{${name}的总用量}`;
info.quantity_formula = `{${name}的总用量}`;
info.price = old[0].price;
info.amount_formula = old[0].amount_formula;
}
@ -1220,11 +1257,11 @@ export default {
if (!data) return;
data.forEach(item => {
delete item._X_ROW_KEY;
if(!item.id){
if (!item.id) {
item.id = settings.getGuid();
}
});
},
},
//
ok() {
@ -1256,7 +1293,7 @@ export default {
postdata.laborList = postdata.laborList.filter(item => item.labor && item.labor[1] ? true : false);
postdata.materialList = postdata.materialList.filter(item => item.material && item.material[1] ? true : false);
postdata.paintLaborList = postdata.paintLaborList.filter(item => item.labor && item.labor[1] ? true : false);
postdata.paintMaterialList = postdata.paintMaterialList.filter(item => item.material && item.material[1] ? true : false);
@ -1353,7 +1390,7 @@ export default {
},
confirmSelectScheme() {
let row = this.$refs.scheme_grid.getCurrentRecord(); //
let fittingsList = JSON.parse(row.fittingsList || "[]");
fittingsList = fittingsList.filter(a => a.fittings && a.fittings[0]);
let partsList = JSON.parse(row.partsList || "[]");

View File

@ -303,8 +303,21 @@ export default {
if (e.name == "add") { //
this.$openPage("/BathroomScheme/BathroomSchemeAdd"); //
}
if (e.name == "setting") {
this.openSettings();
}
},
openSettings() {
this.$mk.dialog.open({
page: () => import("@/pages/Middle/bathroom/basic/settings.vue"),
title: "参数配置",
pageOptions: {
},
width: 800,
height: 600,
dataId: 0
});
},
//
pageEdit(row) {
if (!row) { //

View File

@ -0,0 +1,181 @@
<template>
<div class="page-body router-edit-page">
<vxe-form :data="formOptions.data" ref="xForm" :title-width="formOptions.titleWidth"
:title-align="formOptions.titleAlign" :rules="formOptions.rules" :items="formOptions.items" titleColon>
</vxe-form>
<div class="footerbar-bottom">
<a-button type="primary" @click="ok">确定</a-button>
</div>
</div>
</template>
<script>
import BASE_URL from '@/services/base/api.js';
export default {
props: {
pageMode: {
type: String,
default: "edit"
},
pageOptions: {
type: Object
},
dataId: {
}
},
data() {
//
var pageData = {
actions: {
save: `${BASE_URL.BASE_URL}/BathroomScheme/v1/settings/update`,
get: `${BASE_URL.BASE_URL}/BathroomScheme/v1/settings/list`
},
beid: 0,
parentName: '',
formOptions: {
data: {
},
titleWidth: 200,
titleAlign: 'right',
rules: {
},
items: [
]
},
};
pageData.formOptions = Object.assign({}, this.$mk.config.defaults.formOptions, pageData.formOptions);
return pageData;
},
created() {
this.$mk.post({
url: this.actions.get,
loading: "加载中...",
data: {
}
}).then(a => {
let items = [];
let data = {};
let getName = (info) => {
for (let name in info) {
return name;
}
return null;
}
a.data.settings.forEach(o => {
let name = getName(o.setting);
if (!name) return;
let item = { field: name, title: o.title, span: 24, itemRender: { name: '$input', props: { placeholder: o.desc } } };
if (o.type == "bool") {
item.itemRender.name = "$switch";
item.dataRule = { type: "string" };
data[name] = o.setting[name] === "true";
}
else if (o.type == "integer") {
item.itemRender.props.type = "integer";
item.dataRule = { type: "integer" };
data[name] = parseInt(o.setting[name]);
}
else {
data[name] = o.setting[name];
}
items.push(item);
});
this.formOptions.items = items;
this.formOptions.data = data;
}).catch((a) => {
this.$mk.error(a.data.msg);
});
},
//
methods: {
ok() {
let save = () => {
let action = this.actions.save;
let postdata = Object.assign({}, this.formOptions.data);
this.$mk.formatFormData({ data: postdata, rules: this.formOptions.items });
let saveData = {
"settings": [
postdata
]
};
this.$mk.post({
url: action,
loading: "保存中...",
data: saveData,
}).then(() => {
this.$mk.success("保存成功");
}).catch((a) => {
this.$mk.error(a.data.msg);
});
};
this.$refs.xForm.validate((a) => {
if (a) {
let count = 0;
for (let name in a) {
a[name];
count++;
}
this.$mk.error(`存在${count}项错误,请检查`);
} else {
save();
}
});
},
cancel() {
this.$emit("callback", {});
},
},
//
watch: {
}
};
</script>
<style scoped lang="less">
.router-edit-page .vxe-pulldown {
width: 100%;
}
</style>

View File

@ -0,0 +1,51 @@
// 视图组件
const view = {
tabs: () => import('@/layouts/tabs'),
blank: () => import('@/layouts/BlankView'),
page: () => import('@/layouts/PageView')
}
// 路由组件注册
const routerMap = {
};
routerMap['basic']= {
name: 'basic',
icon: 'idcard',
component: view.blank,
meta: {
},
authority: {
permission: [],
}
};
routerMap['basic_materials']= {
name: '基础档案',
icon: 'idcard',
path: `/MesMaterials/MesMaterialsList`,
meta:{
page:{ cacheAble:false}
},
component: () => import(`@/pages/Middle/Mes/MesMaterials/MesMaterials/List`),
authority: {
permission: [],
}
};
routerMap['basic_unit']= {
name: '基础档案',
icon: 'idcard',
path: `/MesUnit/MesUnitList`,
meta:{
page:{ cacheAble:false}
},
component: () => import(`@/pages/Middle/Mes/MesUnit/MesUnit/List`),
authority: {
permission: [],
}
};
export default {}

View File

@ -17,6 +17,8 @@ import MesWarehouse from '@/router/Middle/Mes/MesWarehouse/router.map.js'
import MesEnum from '@/router/Middle/Mes/MesEnum/router.map.js'
import MesUnitRouterMap from '@/router/Middle/Mes/MesUnit/router.map.js'
import basic from '@/router/Middle/Mes/basic/router.map.js'
const routerMap = Object.assign({},
MesUnitRouterMap,
MesCeramicsMaterialClassification,
@ -30,7 +32,9 @@ const routerMap = Object.assign({},
MesStaff,
MesStock,
MesWarehouse,
MesEnum
MesEnum,
basic
)

View File

@ -14,8 +14,7 @@ const routesConfig = [
router: 'exp403',
path: '/403',
name: '403'
},
},
]
const options = {
routes: parseRoutes(routesConfig, routerMap)