diff --git a/public/index.html b/public/index.html index c959646..fadabb2 100644 --- a/public/index.html +++ b/public/index.html @@ -38,7 +38,8 @@ <% if (process.env.VUE_APP_NODE_ENV === 'dev') { %> <% } %> diff --git a/src/mixins/basic-add.js b/src/mixins/basic-add.js index 61aa86a..bd4808c 100644 --- a/src/mixins/basic-add.js +++ b/src/mixins/basic-add.js @@ -76,6 +76,7 @@ export default { } this.$http[!this.dataForm.id ? "post" : "put"](this.urlOptions.submitURL, this.dataForm) .then(({ data: res }) => { + // console.log('[confirm] here...') if (res.code !== 0) { return this.$message.error(res.msg); } @@ -85,7 +86,7 @@ export default { duration: 500, onClose: () => { this.visible = false; - this.$emit("refreshDataList"); + this.$emit("successSubmit"); }, }); }) diff --git a/src/mixins/basic-page.js b/src/mixins/basic-page.js index f07b92b..215dff8 100644 --- a/src/mixins/basic-page.js +++ b/src/mixins/basic-page.js @@ -35,7 +35,7 @@ export default { // 获取数据列表 getDataList() { this.dataListLoading = true; - this.$http + return this.$http .get(this.urlOptions.getDataListURL, { params: this.listQuery, }) @@ -103,7 +103,7 @@ export default { this.$refs.addOrUpdate.init(val.data.id); }); } else if (val.type === "delete") { - this.deleteHandle(val.data.id,val.data.name) + this.deleteHandle(val.data.id, val.data.name) } }, // 删除 @@ -121,7 +121,10 @@ export default { type: "success", duration: 1500, onClose: () => { - this.getDataList(); + this.getDataList().then(() => { + // 刷新本地缓存 + this.refreshLocalstorage() + }) }, }); } else { @@ -147,7 +150,7 @@ export default { break; default: console.log(val) - } + } }, handleCancel() { this.$refs.addOrUpdate.formClear() @@ -157,9 +160,23 @@ export default { handleConfirm() { this.$refs.addOrUpdate.dataFormSubmit() }, + refreshLocalstorage() { + // 刷新数据字典数据 + this.$http("/sys/dict/type/all", { limit: 999, page: 1 }).then(({ data: res }) => { + // console.log("[dictData] loading...", res); + if (res.code === 0 && res.data) { + localStorage.setItem("dictList", JSON.stringify(res.data)); + } + }); + // end + }, successSubmit() { this.handleCancel() this.getDataList() + if (this.isDictTypePage || this.isDictValuePage) { + // 刷新本地缓存 + this.refreshLocalstorage() + } }, // 导出 exportHandle(name) { diff --git a/src/utils/filters.js b/src/utils/filters.js index e7f1c28..0c1f725 100644 --- a/src/utils/filters.js +++ b/src/utils/filters.js @@ -21,4 +21,8 @@ export const pick = (obj, paths) => { } }) return result +} + +export const dictFind = (which) => { + return () => 1 } \ No newline at end of file diff --git a/src/views/atomViews/ListViewWithHead.vue b/src/views/atomViews/ListViewWithHead.vue index 2e80e40..3ae5acc 100644 --- a/src/views/atomViews/ListViewWithHead.vue +++ b/src/views/atomViews/ListViewWithHead.vue @@ -113,7 +113,7 @@ export default { limit: this.size, }; - if (!queryParams && this.listQueryExtra.length) { + if (!queryParams && this.listQueryExtra && this.listQueryExtra.length) { this.listQueryExtra.map((name) => { params[name] = ""; }); diff --git a/src/views/modules/pms/equipmentType/config.js b/src/views/modules/pms/equipmentType/config.js new file mode 100644 index 0000000..6d3fb79 --- /dev/null +++ b/src/views/modules/pms/equipmentType/config.js @@ -0,0 +1,107 @@ +import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent"; +import StatusComponent from "@/components/noTemplateComponents/statusComponent"; +import request from "@/utils/request"; +import { dictFind, timeFilter } from '@/utils/filters' + +export default function () { + const tableProps = [ + { prop: "createTime", label: "添加时间", filter: timeFilter }, + { prop: "name", label: "类型名称" }, + { prop: "code", label: "类型编码" }, + { prop: "description", label: "描述" }, + { prop: "remark", label: "备注" }, + { + prop: "operations", + name: "操作", + fixed: "right", + width: 120, + subcomponent: TableOperaionComponent, + options: ["edit", { name: "delete", permission: "pms:equipmentType:delete" }], + }, + ]; + + const headFormFields = [ + { + prop: 'key', + label: "类型名称", + input: true, + default: { value: "" }, + bind: { + // placeholder: '请输入产线名称或编码' + placeholder: '请输入类型名称' + } + }, + { + button: { + type: "primary", + name: "查询", + }, + }, + { + button: { + type: "primary", + name: "新增", + permission: "pms:equipmentType:save" + }, + bind: { + plain: true, + } + }, + ]; + + /** + * dialog config 有两个版本,一个适用于 DialogWithMenu 组件,另一个适用于 DialogJustForm 组件 + * 适用于 DialogWithMenu 组件的配置示例详见 blenderStep/config.js + * 此为后者的配置: + */ + const dialogJustFormConfigs = { + form: { + rows: [ + [ + { + input: true, + label: "类型名称", + prop: "name", + rules: { required: true, message: "not empty", trigger: "blur" }, + elparams: { placeholder: "请输入类型名称" }, + }, + { + input: true, + label: "类型编码", + prop: "code", + rules: { required: true, message: "not empty", trigger: "blur" }, + elparams: { placeholder: "请输入类型编码" }, + }, + ], + [{ textarea: true, label: "描述信息", prop: "description", elparams: { placeholder: "描述信息" } }], + [{ input: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }], + ], + operations: [ + { name: "add", label: "保存", type: "primary", permission: "pms:equipmentType:save", showOnEdit: false }, + { name: "update", label: "更新", type: "primary", permission: "pms:equipmentType:update", showOnEdit: true }, + { name: "reset", label: "重置", type: "warning", showAlways: true }, + // { name: 'cancel', label: '取消', showAlways: true }, + ], + }, + }; + // 备注:弹窗弹出的时间和网速有关...... + + return { + dialogConfigs: dialogJustFormConfigs, + tableConfig: { + table: null, // 此处可省略,el-table 上的配置项 + column: tableProps, // el-column-item 上的配置项 + }, + headFormConfigs: { + rules: null, // 名称是由 BaseSearchForm.vue 组件固定的 + fields: headFormFields, // 名称是由 BaseSearchForm.vue 组件固定的 + }, + urls: { + base: "/pms/equipmentType", + page: "/pms/equipmentType/page", + // subase: '/pms/blenderStepParam', + // subpage: '/pms/blenderStepParam/page', + // more... + }, + }; +} diff --git a/src/views/modules/pms/equipmentType/index.vue b/src/views/modules/pms/equipmentType/index.vue new file mode 100644 index 0000000..7ccdd8e --- /dev/null +++ b/src/views/modules/pms/equipmentType/index.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/views/modules/pms/materialStorage/config.js b/src/views/modules/pms/materialStorage/config.js new file mode 100644 index 0000000..4d5f469 --- /dev/null +++ b/src/views/modules/pms/materialStorage/config.js @@ -0,0 +1,118 @@ +import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent"; +import StatusComponent from "@/components/noTemplateComponents/statusComponent"; +import request from "@/utils/request"; +import { dictFind } from '@/utils/filters' + +export default function () { + const tableProps = [ + { prop: "name", label: "料仓名称" }, + { prop: "code", label: "料仓编码" }, + { prop: "typeDictValue", label: "料仓类型", filter: dictFind('料仓') }, + { prop: "status", label: "产线状态", subcomponent: StatusComponent }, // subcomponent + { prop: "description", label: "描述" }, + { prop: "remark", label: "备注" }, + { + prop: "operations", + name: "操作", + fixed: "right", + width: 120, + subcomponent: TableOperaionComponent, + options: ["edit", { name: "delete", permission: "pms:materialStorage:delete" }], + }, + ]; + + const headFormFields = [ + { + prop: 'name', + label: "料仓名称", + input: true, + default: { value: "" }, + bind: { + // placeholder: '请输入产线名称或编码' + placeholder: '请输入料仓名称' + } + }, + { + button: { + type: "primary", + name: "查询", + }, + }, + { + button: { + type: "primary", + name: "新增", + permission: "pms:materialStorage:save" + }, + bind: { + plain: true, + } + }, + ]; + + /** + * dialog config 有两个版本,一个适用于 DialogWithMenu 组件,另一个适用于 DialogJustForm 组件 + * 适用于 DialogWithMenu 组件的配置示例详见 blenderStep/config.js + * 此为后者的配置: + */ + const dialogJustFormConfigs = { + form: { + rows: [ + [ + { + input: true, + label: "料仓名称", + prop: "name", + rules: { required: true, message: "not empty", trigger: "blur" }, + elparams: { placeholder: "请输入料仓名称" }, + }, + { + input: true, + label: "料仓编码", + prop: "code", + rules: { required: true, message: "not empty", trigger: "blur" }, + elparams: { placeholder: "请输入料仓编码" }, + }, { + select: true, + label: "料仓类型", + prop: "typeDictValue", + // fetchData: () => this.$http.get("/pms/factory/page", { params: { limit: 999, page: 1 } }), + options: [ + { label: '中间仓', value: 0 }, + { label: '日料仓', value: 1 }, + ], + rules: { required: true, message: "not empty", trigger: "change" }, + }, + ], + [{ textarea: true, label: "描述信息", prop: "description", elparams: { placeholder: "描述信息" } }], + [{ input: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }], + ], + operations: [ + { name: "add", label: "保存", type: "primary", permission: "pms:materialStorage:save", showOnEdit: false }, + { name: "update", label: "更新", type: "primary", permission: "pms:materialStorage:update", showOnEdit: true }, + { name: "reset", label: "重置", type: "warning", showAlways: true }, + // { name: 'cancel', label: '取消', showAlways: true }, + ], + }, + }; + // 备注:弹窗弹出的时间和网速有关...... + + return { + dialogConfigs: dialogJustFormConfigs, + tableConfig: { + table: null, // 此处可省略,el-table 上的配置项 + column: tableProps, // el-column-item 上的配置项 + }, + headFormConfigs: { + rules: null, // 名称是由 BaseSearchForm.vue 组件固定的 + fields: headFormFields, // 名称是由 BaseSearchForm.vue 组件固定的 + }, + urls: { + base: "/pms/materialStorage", + page: "/pms/materialStorage/page", + // subase: '/pms/blenderStepParam', + // subpage: '/pms/blenderStepParam/page', + // more... + }, + }; +} diff --git a/src/views/modules/pms/materialStorage/index.vue b/src/views/modules/pms/materialStorage/index.vue new file mode 100644 index 0000000..e0e4632 --- /dev/null +++ b/src/views/modules/pms/materialStorage/index.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/views/modules/sys/dept-add-or-update.vue b/src/views/modules/sys/dept-add-or-update.vue index c29af40..0c62677 100644 --- a/src/views/modules/sys/dept-add-or-update.vue +++ b/src/views/modules/sys/dept-add-or-update.vue @@ -133,7 +133,7 @@ export default { duration: 500, onClose: () => { this.visible = false - this.$emit('refreshDataList') + this.$emit('successSubmit') } }) }).catch(() => {}) diff --git a/src/views/modules/sys/dict-data.vue b/src/views/modules/sys/dict-data.vue index d453b1b..aed92bb 100644 --- a/src/views/modules/sys/dict-data.vue +++ b/src/views/modules/sys/dict-data.vue @@ -77,6 +77,7 @@ export default { mixins: [basicPage], data() { return { + isDictValuePage: true, urlOptions: { getDataListURL: "/sys/dict/data/page", deleteURL: "/sys/dict/data", diff --git a/src/views/modules/sys/dict-type-add-or-update.vue b/src/views/modules/sys/dict-type-add-or-update.vue index 969d11b..3adb684 100644 --- a/src/views/modules/sys/dict-type-add-or-update.vue +++ b/src/views/modules/sys/dict-type-add-or-update.vue @@ -90,7 +90,7 @@ export default { duration: 500, onClose: () => { this.visible = false - this.$emit('refreshDataList') + this.$emit('successSubmit') } }) }).catch(() => {}) diff --git a/src/views/modules/sys/dict-type.vue b/src/views/modules/sys/dict-type.vue index fb10e5d..45106f8 100644 --- a/src/views/modules/sys/dict-type.vue +++ b/src/views/modules/sys/dict-type.vue @@ -2,33 +2,16 @@
- - + + - + @@ -39,8 +22,8 @@ diff --git a/src/views/pages/login.vue b/src/views/pages/login.vue index b8e3c04..42b8743 100644 --- a/src/views/pages/login.vue +++ b/src/views/pages/login.vue @@ -1,146 +1,114 @@ @@ -251,41 +227,41 @@ $light_gray: #fff; $cursor: #161616; @supports (-webkit-mask: none) and (not (cater-color: $cursor)) { - .login-container .el-input input { - color: $cursor; - height: 6vh !important; - } + .login-container .el-input input { + color: $cursor; + height: 6vh !important; + } } /* reset element-ui css */ .login-container { - .el-input { - display: inline-block; - height: 47px; - width: 85%; + .el-input { + display: inline-block; + height: 47px; + width: 85%; - input { - background: transparent; - border: 0px; - -webkit-appearance: none; - border-radius: 0px; - padding: 12px 5px 12px 15px; - } - } + input { + background: transparent; + border: 0px; + -webkit-appearance: none; + border-radius: 0px; + padding: 12px 5px 12px 15px; + } + } - .el-form-item { - border: 1px solid #d7d8d9; - border-radius: 5px; - color: #454545; - height: 6vh; - .el-form-item__content { - height: calc(6vh - 2px); - line-height: 6vh; - .el-input { - height: calc(6vh - 2px); - } - } - } + .el-form-item { + border: 1px solid #d7d8d9; + border-radius: 5px; + color: #454545; + height: 6vh; + .el-form-item__content { + height: calc(6vh - 2px); + line-height: 6vh; + .el-input { + height: calc(6vh - 2px); + } + } + } } @@ -296,146 +272,146 @@ $light_gray: #eee; $cursor: #161616; .login-container { - min-height: 100%; - width: 100%; - background-size: cover; - // background-color: $bg; - overflow: hidden; - .login-background { - position: absolute; - width: 60%; - top: 0; - left: 0; - bottom: 0; - display: flex; - justify-content: center; - align-items: center; - .login-background-container { - width: 95%; - .back-title { - color: #26b9de; - font-size: 88px; - margin-left: 17%; - span { - color: #fff; - } - p { - font-size: 22px; - letter-spacing: 1px; - .back-title-point { - display: inline-block; - width: 16px; - height: 16px; - border-radius: 8px; - background-color: #26b9de; - margin-right: 14px; - } - } - } - } - } + min-height: 100%; + width: 100%; + background-size: cover; + // background-color: $bg; + overflow: hidden; + .login-background { + position: absolute; + width: 60%; + top: 0; + left: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; + .login-background-container { + width: 95%; + .back-title { + color: #26b9de; + font-size: 88px; + margin-left: 17%; + span { + color: #fff; + } + p { + font-size: 22px; + letter-spacing: 1px; + .back-title-point { + display: inline-block; + width: 16px; + height: 16px; + border-radius: 8px; + background-color: #26b9de; + margin-right: 14px; + } + } + } + } + } - .login-form { - position: absolute; - width: 40%; - max-width: 100%; - top: 0; - right: 0; - bottom: 0; - padding: 0 6.67%; - margin: 0 auto; - overflow: hidden; - background: rgba($color: #fff, $alpha: 1); - backdrop-filter: blur(10px); - box-shadow: 5px 5px 5px rgba($color: #000000, $alpha: 0.1); - .login-footer { - position: absolute; - bottom: 0; - right: 0; - left: 0; - margin-bottom: 5vh; - } - .login-language { - font-size: 15px; - text-align: center; - color: $cursor; - margin-bottom: 12px; - .login-language-box { - cursor: pointer; - } - .isActive { - color: #0b58ff; - cursor: auto; - } - } - .login-copyright { - text-align: center; - color: #c7c7c7; - font-size: 15px; - line-height: 28px; - padding: 0 16%; - } - } + .login-form { + position: absolute; + width: 40%; + max-width: 100%; + top: 0; + right: 0; + bottom: 0; + padding: 0 6.67%; + margin: 0 auto; + overflow: hidden; + background: rgba($color: #fff, $alpha: 1); + backdrop-filter: blur(10px); + box-shadow: 5px 5px 5px rgba($color: #000000, $alpha: 0.1); + .login-footer { + position: absolute; + bottom: 0; + right: 0; + left: 0; + margin-bottom: 5vh; + } + .login-language { + font-size: 15px; + text-align: center; + color: $cursor; + margin-bottom: 12px; + .login-language-box { + cursor: pointer; + } + .isActive { + color: #0b58ff; + cursor: auto; + } + } + .login-copyright { + text-align: center; + color: #c7c7c7; + font-size: 15px; + line-height: 28px; + padding: 0 16%; + } + } - .tips { - font-size: 14px; - color: #fff; - margin-bottom: 10px; + .tips { + font-size: 14px; + color: #fff; + margin-bottom: 10px; - span { - &:first-of-type { - margin-right: 16px; - } - } - } + span { + &:first-of-type { + margin-right: 16px; + } + } + } - .svg-container { - padding: 6px 5px 6px 15px; - color: #000; - vertical-align: middle; - width: 30px; - display: inline-block; - } + .svg-container { + padding: 6px 5px 6px 15px; + color: #000; + vertical-align: middle; + width: 30px; + display: inline-block; + } - .title-container { - position: relative; - margin-top: 18vh; + .title-container { + position: relative; + margin-top: 18vh; - .title { - font-size: 34px; - line-height: 6vh; - margin: 0px auto 40px auto; - text-align: center; - overflow: hidden; - text-overflow: ellipsis; - word-break: break-all; - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; - letter-spacing: 2px; - } - } + .title { + font-size: 34px; + line-height: 6vh; + margin: 0px auto 40px auto; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + letter-spacing: 2px; + } + } - .show-pwd { - position: absolute; - right: 10px; - top: 0; - font-size: 16px; - color: $dark_gray; - cursor: pointer; - user-select: none; - } + .show-pwd { + position: absolute; + right: 10px; + top: 0; + font-size: 16px; + color: $dark_gray; + cursor: pointer; + user-select: none; + } - .thirdparty-button { - position: absolute; - right: 0; - bottom: 6px; - } + .thirdparty-button { + position: absolute; + right: 0; + bottom: 6px; + } - @media only screen and (max-width: 470px) { - .thirdparty-button { - display: none; - } - } + @media only screen and (max-width: 470px) { + .thirdparty-button { + display: none; + } + } }