From 7d0c66ad738b49ab64e084f9af2532b27d734459 Mon Sep 17 00:00:00 2001 From: lb Date: Mon, 20 Feb 2023 11:25:32 +0800 Subject: [PATCH] add bom --- public/index.html | 3 +- src/components/DialogWithMenu.vue | 3 +- src/components/SmallDialog.vue | 13 ++ src/views/atomViews/ListViewWithHead.vue | 19 +- src/views/modules/pms/bom/config.js | 221 +++++++++++++++++++++++ src/views/modules/pms/bom/index.vue | 32 ++++ 6 files changed, 287 insertions(+), 4 deletions(-) create mode 100644 src/views/modules/pms/bom/config.js create mode 100644 src/views/modules/pms/bom/index.vue diff --git a/public/index.html b/public/index.html index 2a3aa34..c743726 100644 --- a/public/index.html +++ b/public/index.html @@ -38,8 +38,9 @@ <% if (process.env.VUE_APP_NODE_ENV === 'dev') { %> <% } %> diff --git a/src/components/DialogWithMenu.vue b/src/components/DialogWithMenu.vue index d3ad580..24111bf 100644 --- a/src/components/DialogWithMenu.vue +++ b/src/components/DialogWithMenu.vue @@ -14,8 +14,9 @@
+ { dataForm[col.prop] = col.default ?? ""; console.log("[small dialog]==========>", col.prop, dataForm[col.prop]); + + if (typeof col.fetchData === "function") + col.fetchData().then(({ data: res }) => { + if (res.code === 0) { + this.$set( + col, + "options", + res.data.list.map((item) => ({ label: item.name, value: item.id })) + ); + } else { + this.$set(col, "options", []); + } + }); }); }); diff --git a/src/views/atomViews/ListViewWithHead.vue b/src/views/atomViews/ListViewWithHead.vue index 7d5a70b..5c078f0 100644 --- a/src/views/atomViews/ListViewWithHead.vue +++ b/src/views/atomViews/ListViewWithHead.vue @@ -101,7 +101,7 @@ export default { size: 20, // 默认20 dataList: [], tableLoading: false, - refreshLayoutKey: null + refreshLayoutKey: null, }; }, inject: ["urls"], @@ -213,6 +213,12 @@ export default { this.$http.put(this.urls.base, queryCondition).then(({ data: res }) => { if (res.code === 0) { // do nothing + } else { + this.$message({ + message: `${res.code}: ${res.msg}`, + type: 'error', + duration: 1500 + }) } }); break; @@ -230,7 +236,16 @@ export default { this.openDialog(); break; case "查询": { - this.getList(payload); + const params = {}; + this.listQueryExtra?.map(cond => { + if (!!payload[cond]) { + params[cond] = payload[cond] + } else { + params[cond] = '' + } + }); + console.log("查询", params); + this.getList(params); break; } } diff --git a/src/views/modules/pms/bom/config.js b/src/views/modules/pms/bom/config.js new file mode 100644 index 0000000..d935e30 --- /dev/null +++ b/src/views/modules/pms/bom/config.js @@ -0,0 +1,221 @@ +import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent"; +import TableTextComponent from "@/components/noTemplateComponents/detailComponent"; +import { timeFilter, dictFilter } from "@/utils/filters"; +import switchBtn from "@/components/noTemplateComponents/switchBtn"; + +export default function () { + const tableProps = [ + { type: "index", label: "序号" }, + { prop: "createTime", label: "添加时间", filter: timeFilter }, + { prop: "name", label: "牌号" }, + { prop: "code", label: "配方编码" }, + { prop: "externalCode", label: "版本号" }, + // { prop: "specifications", label: "程序号" }, + // { prop: "unitDictValue", label: "砖型", filter: dictFilter("unit") }, + // { prop: "unitDictValue", label: "物料号", filter: dictFilter("unit") }, + { prop: "enabled", label: "状态", subcomponent: switchBtn }, // subcomponent + { prop: "sumqty", label: "配方总重量" }, + { prop: "sync", label: "同步状态" }, + { prop: "remark", label: "备注" }, + { prop: "description", label: "详情", subcomponent: TableTextComponent, buttonContent: "查看配方详情", actionName: 'view-recipe' }, + { + prop: "operations", + name: "操作", + fixed: "right", + width: 120, + subcomponent: TableOperaionComponent, + options: ["edit", { name: "delete", emitFull: true, permission: "pms:bom:delete" }], + }, + ]; + + const headFormFields = [ + { + label: "关键字", + prop: "key", + input: true, + default: { value: "" }, + bind: { placeholder: "请输入关键字" }, + }, + { + button: { + type: "primary", + name: "查询", + }, + }, + { + button: { + type: "plain", + name: "新增", + permission: "pms:bom:save", + }, + }, + ]; + + const dictList = JSON.parse(localStorage.getItem("dictList") || {}); + const dialogConfigs = { + menu: [ + { name: "配方", key: "info" }, + { name: "配方详情", key: "attr", onlyEditMode: true }, + // { + // name: "附件", + // key: "attachment", + // onlyEditMode: true, + // actionUrl: window.SITE_CONFIG["apiURL"] + "/pms/attachment/uploadFileFormData?typeCode=ProductAttachment", + // }, + ], + form: { + rows: [ + [ + { + input: true, + label: "牌号", + prop: "name", + rules: { required: true, message: "必填项不能为空", trigger: "blur" }, + elparams: { placeholder: "请输入牌号" }, + }, + { + input: true, + label: "物料编码", + prop: "code", + rules: { required: true, message: "必填项不能为空", trigger: "blur" }, + elparams: { placeholder: "请输入物料编码" }, + }, + // { input: true, label: '版本号', prop: 'version', elparams: { placeholder: '请输入版本号' } }, + // { + // select: true, + // label: "产品类型", + // prop: "typeDictValue", + // options: "product_type" in dictList ? dictList["product_type"].map((item) => ({ value: item.dictValue, label: item.dictLabel })) : [], + // elparams: { placeholder: "选择一个产品类型" }, + // }, + ], + [ + // { input: true, label: '单位平方数', prop: 'code', rules: { required: true, message: '必填项不能为空', trigger: 'blur' }, elparams: { placeholder: '请输入设备名称编码' } }, + // { + // select: true, + // label: "单位", + // prop: "unitDictValue", + // options: "unit" in dictList ? dictList["unit"].map((item) => ({ value: item.dictValue, label: item.dictLabel })) : [], + // elparams: { placeholder: "选择单位" }, + // }, + { + input: true, + label: "版本号", + prop: "externalCode", + // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, + elparams: { placeholder: "请输入版本号" }, + }, + { + input: true, + label: "同步状态", + prop: "sync", + // rules: { required: true, message: "必填项不能为空", trigger: "blur" }, + elparams: { placeholder: "请输入同步状态" }, + }, + ], + [{ textarea: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }], + ], + operations: [ + { name: "add", label: "保存", type: "primary", permission: "pms:bom:save", showOnEdit: false }, + { name: "update", label: "更新", type: "primary", permission: "pms:bom:update", showOnEdit: true }, + { name: "reset", label: "重置", type: "warning", showAlways: true }, + // { name: 'cancel', label: '取消', showAlways: true }, + ], + }, + table: { + // extraParams: ['stepId'], + extraParams: "bomId", + props: [ + { type: "index", label: "序号" }, + { prop: "createTime", label: "添加时间", filter: timeFilter }, + { prop: "material", label: "物料", isEditField: true }, + { prop: "qty", label: "配方物料重量", isEditField: true }, + { prop: "sumqty", label: "配方总重量", isEditField: true }, + { prop: "percent", label: "配比", isEditField: true }, + { prop: "remark", label: "备注", isEditField: true }, + { + prop: "operations", + name: "操作", + fixed: "right", + width: 120, + subcomponent: TableOperaionComponent, + options: [ + { name: "edit", permission: "pms:bomMaterial:update" }, + { name: "delete", emitFull: true, permission: "pms:bomMaterial:delete" }, + ], + }, + ], + data: [ + // TOOD 暂时用不到,但获取可以考虑把拉取接口数据的函数迁移到此文件(没有太大必要) + ], + }, + + subDialog: { + extraParam: "bomId", + forceAttachCode: true, // 产品属性新增必填 code 字段...... + rows: [ + [ + { + select: true, + label: "物料", + prop: "materialId", + rules: { required: true, message: "必填项不能为空", trigger: "blur" }, + elparams: { placeholder: "请选择物料", filterable: true }, + options: [], + // fetchData: () => this.$http.get('/pms/material/page', { params: { limit: 999, page: 1 } }) + fetchData: () => new Promise((resolve) => { + setTimeout(() => { + resolve({ + data: { + code: 0, + data: { + total: 0, + list: + [ + { id: 10001, name: 'mock物料1' }, + { id: 10002, name: 'mock物料2' }, + { id: 10003, name: 'mock物料3' }, + { id: 10004, name: 'mock物料4' }, + { id: 10005, name: 'mock物料5' }, + ] + } + } + }) + }, 800) + }) + }, + { + input: true, + label: "物料重量", + prop: "qty", + rules: { required: true, message: "必填项不能为空", trigger: "blur" }, + elparams: { placeholder: "请输入物料重量" }, + }, + ], + [{ textarea: true, label: "备注", prop: "remark", elparams: { placeholder: "添加备注" } }], + ], + operations: [ + { name: "add", label: "保存", type: "primary", permission: "pms:bomMaterial:save", showOnEdit: false }, + { name: "update", label: "更新", type: "primary", permission: "pms:bomMaterial:update", showOnEdit: true }, + ], + }, + }; + + return { + dialogConfigs, + tableConfig: { + table: null, // 此处可省略,el-table 上的配置项 + column: tableProps, // el-column-item 上的配置项 + }, + headFormConfigs: { + rules: null, // 名称是由 BaseSearchForm.vue 组件固定的 + fields: headFormFields, // 名称是由 BaseSearchForm.vue 组件固定的 + }, + urls: { + base: "/pms/bom", + page: "/pms/bom/page", + subase: "/pms/bomMaterial", + subpage: "/pms/bomMaterial/page", + }, + }; +} diff --git a/src/views/modules/pms/bom/index.vue b/src/views/modules/pms/bom/index.vue new file mode 100644 index 0000000..c466d2c --- /dev/null +++ b/src/views/modules/pms/bom/index.vue @@ -0,0 +1,32 @@ + + + + +