diff --git a/src/components/autocomplete/index.vue b/src/components/autocomplete/index.vue new file mode 100644 index 0000000..2fa6af3 --- /dev/null +++ b/src/components/autocomplete/index.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/utils/directive.js b/src/utils/directive.js index f8a45b9..8b12bc1 100644 --- a/src/utils/directive.js +++ b/src/utils/directive.js @@ -1,18 +1,28 @@ import Vue from "vue"; +const handle = (e, vNode) => { + let val = e.target.value; + let qualifiedNum = val + .replace(/[^\d.]/g, "") + .replace(/^\./g, "") + .replace(/\.{2,}/g, ".") + .replace(/^0{2,}/g, "0") + .replace(".", "$#$") + .replace(/\./g, "") + .replace("$#$", "."); + vNode.componentInstance.$emit("input", qualifiedNum); +}; + Vue.directive("checkNum", { - update(el, binding, vNode) { - if (el.children.length) { - let val = el.children[0].value; - let qualifiedNum = val - .replace(/[^\d.]/g, "") - .replace(/^\./g, "") - .replace(/\.{2,}/g, ".") - .replace(/^0{2,}/g, "0") - .replace(".", "$#$") - .replace(/\./g, "") - .replace("$#$", "."); - vNode.componentInstance.$emit("input", qualifiedNum); + bind(el, binding, vNode) { + if (!el.children.length) { + return; } + el.children[0].addEventListener("keyup", (e) => { + handle(e, vNode); + }); + }, + unbind(el) { + el.children[0].removeEventListener("keyup"); }, }); diff --git a/src/views/product/components/add.vue b/src/views/product/components/add.vue index ed382c9..2e08e6f 100644 --- a/src/views/product/components/add.vue +++ b/src/views/product/components/add.vue @@ -27,14 +27,16 @@ - - - + + + import serve from "api/product.js"; -import refineryServe from "api/refineryInfo.js"; +import refineryInfoServe from "api/refineryInfo.js"; + +import autocomplete from "components/autocomplete/index.vue"; export default { + components: { + autocomplete, + }, props: { controlWindows: Object, }, data() { + let validatorRefineryId = (rule, value, callback) => { + if (this.form.refineryId) callback(); + else callback("请选择炼厂"); + }; return { form: {}, refineryList: [], + configAutocomplete: { + serveTarget: refineryInfoServe.findByEntity, + autocomplateKey: "refineryName", + valueKey: "refineryName", + placeholder: "炼厂名称", + querykey: "refineryId", + }, productTypeList: [ { label: "0#柴", @@ -120,35 +138,32 @@ export default { { required: true, message: "请输入产品名称", trigger: "blur" }, ], productType: [ - { required: true, message: "请选择产品类型", trigger: "blur" }, + { required: true, message: "请选择产品类型", trigger: "change" }, ], refineryId: [ - { required: true, message: "请选择炼厂", trigger: "blur" }, + { required: true, validator: validatorRefineryId, trigger: "change" }, ], belongLibrary: [ { required: true, message: "请输入所属炼厂库名", trigger: "blur" }, ], floorPrice: [ - { required: true, message: "请输入所属炼厂库名", trigger: "blur" }, + { required: true, message: "请输入成本价", trigger: "blur" }, ], salePrice2company: [ - { required: true, message: "请输入所属炼厂库名", trigger: "blur" }, + { required: true, message: "请输入企业销售价", trigger: "blur" }, ], salePrice2personal: [ - { required: true, message: "请输入所属炼厂库名", trigger: "blur" }, + { required: true, message: "请输入个人销售价", trigger: "blur" }, ], measurement: [ { required: true, message: "请输入计量单位", trigger: "blur" }, ], enableMark: [ - { required: true, message: "请选择启用状态", trigger: "blur" }, + { required: true, message: "请选择启用状态", trigger: "change" }, ], }, }; }, - created() { - this.findByEntity(); - }, methods: { openDrawer() { let { id } = this.controlWindows.addInfo; @@ -159,6 +174,7 @@ export default { } }, submit() { + console.log("this.form", this.form); this.$refs["form"].validate((valid) => { if (valid) { this.judgeInterface(this.form).then((res) => { @@ -176,17 +192,34 @@ export default { else return serve.save(form); }, //炼厂list - findByEntity() { - refineryServe.findByEntity().then((res) => { - this.refineryList = res.data; - }); - }, + // findByEntity() { + // refineryServe.findByEntity().then((res) => { + // this.refineryList = res.data; + // }); + // }, + // 远程搜索 + // querySearchAsync(queryString, cb) { + // if (queryString) { + // refineryServe + // .findByEntity({ refineryName: queryString }) + // .then((res) => { + // let timeInstance = setTimeout(() => { + // clearTimeout(timeInstance); + // if (res.data.length) { + // cb(res.data); + // } else cb([]); + // }, 1000 * Math.random()); + // }); + // } else cb([]); + // }, closeWindow() { this.$emit("closeWindow"); - this.$refs.form.clearValidate(); this.form = {}; this.controlWindows.addInfo = {}; - this.controlWindows.add = false; + this.$nextTick(() => { + this.$refs.form.clearValidate(); + this.controlWindows.add = false; + }); }, }, }; @@ -197,7 +230,8 @@ export default { padding: 20px; .el-input, .el-select, - .el-textarea { + .el-textarea, + .el-autocomplete { width: 300px; } } diff --git a/src/views/product/components/adjust.vue b/src/views/product/components/adjust.vue index 15821e3..125fb9a 100644 --- a/src/views/product/components/adjust.vue +++ b/src/views/product/components/adjust.vue @@ -69,8 +69,10 @@ export default { closeWindow() { this.form = {}; this.$emit("closeWindow"); - this.$refs.form.clearValidate(); - this.controlWindows.adjust = false; + this.$nextTick(() => { + this.$refs.form.clearValidate(); + this.controlWindows.adjust = false; + }); }, }, }; diff --git a/src/views/product/components/batch.vue b/src/views/product/components/batch.vue index 90c11be..39a9104 100644 --- a/src/views/product/components/batch.vue +++ b/src/views/product/components/batch.vue @@ -42,7 +42,7 @@ export default { form: {}, rules: { enableMark: [ - { required: true, message: "请选择修改状态", trigger: "blur" }, + { required: true, message: "请选择修改状态", trigger: "change" }, ], }, }; @@ -68,8 +68,10 @@ export default { this.list = []; this.form = {}; this.$emit("closeWindow"); - this.$refs.form.clearValidate(); - this.controlWindows.batch = false; + this.$nextTick(() => { + this.$refs.form.clearValidate(); + this.controlWindows.batch = false; + }); }, }, }; diff --git a/src/views/product/components/create.vue b/src/views/product/components/create.vue index f7679a2..56e6e9f 100644 --- a/src/views/product/components/create.vue +++ b/src/views/product/components/create.vue @@ -25,14 +25,16 @@ > --> - - - + + + @@ -85,17 +87,33 @@