diff --git a/src/api/app.js b/src/api/app.js index 16c17d7..ea20bfd 100644 --- a/src/api/app.js +++ b/src/api/app.js @@ -412,6 +412,11 @@ export const editShopTakeway = (params) => { export const editShop = (params) => { return putRequest('/app/shop/edit', params) } + +export const findShopWorkerByMobile = (params) => { + return getRequest('/app/shop/findWorkerByMobile', params) +} + //删除评论 export const deleteComment = (params) => { return postRequest('/app/comment/deleteByOrderId', params) diff --git a/src/views/app/shop/addEdit.vue b/src/views/app/shop/addEdit.vue index 37164da..8768a51 100644 --- a/src/views/app/shop/addEdit.vue +++ b/src/views/app/shop/addEdit.vue @@ -69,6 +69,78 @@ + 商家自配送 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 中转配送 + + + + + + + + + + + + + + + + + + + + + + + @@ -108,6 +180,7 @@ import { addShop, editShop, + findShopWorkerByMobile, initShopArea, loadShopArea, } from "@/api/app"; @@ -142,9 +215,14 @@ title: "", passColor: "", submitLoading: false, + workerLoading: false, + workerMobile: "", maxHeight: 510, form: { address: [], + supportShopDelivery: 0, + orderBkge: 0, + supportTransferDelivery: 0, }, formValidate: { // 表单验证规则 @@ -192,9 +270,75 @@ message: "邮箱格式不正确" }, ], + workerId: [{ + validator: (rule, value, callback) => { + if (this.form.supportShopDelivery == 1 && !this.form.workerId) { + callback(new Error("请查询并绑定配送员")); + } else { + callback(); + } + }, + trigger: "change" + }], + shopDeliveryLocation: [{ + validator: (rule, value, callback) => { + if (this.form.supportShopDelivery == 1 && !value) { + callback(new Error("请选择送达位置")); + } else { + callback(); + } + }, + trigger: "change" + }], + shopDeliveryDuration: [{ + validator: (rule, value, callback) => { + if (this.form.supportShopDelivery == 1 && (!value || value <= 0)) { + callback(new Error("请输入配送时长")); + } else { + callback(); + } + }, + trigger: "change" + }], + transferDeliveryDuration: [{ + validator: (rule, value, callback) => { + if (this.form.supportTransferDelivery == 1 && (!value || value <= 0)) { + callback(new Error("请输入中转配送时长")); + } else { + callback(); + } + }, + trigger: "change" + }], + transferAddressId: [{ + validator: (rule, value, callback) => { + if (this.form.supportTransferDelivery == 1 && !value) { + callback(new Error("请输入中转地点ID")); + } else { + callback(); + } + }, + trigger: "change" + }], + transferAddressName: [{ + validator: (rule, value, callback) => { + if (this.form.supportTransferDelivery == 1 && !value) { + callback(new Error("请输入中转地点名称")); + } else { + callback(); + } + }, + trigger: "change" + }], }, }; }, + computed: { + boundWorkerText() { + if (!this.form.workerId) return ""; + return `${this.form.workerName || ""} ${this.form.workerPhone || ""}`; + }, + }, methods: { init(v) { this.getRoleList(v); @@ -235,12 +379,95 @@ }); }, handleSelectShopAreaTree(v) { - this.form.shopArea = v; + this.form.shopArea = Array.isArray(v) ? (v[0] || "") : v; + }, + handleSelectTransferAddress(v) { + const value = Array.isArray(v) ? v[0] : v; + this.form.transferAddressId = value || ""; + if (!value) { + this.form.transferAddressName = ""; + return; + } + this.$nextTick(() => { + if (this.$refs.transferAddressTree) { + this.form.transferAddressName = this.$refs.transferAddressTree.shopAreaTitle || this.form.transferAddressName || ""; + } + }); + }, + handleClearTransferAddress() { + this.form.transferAddressId = ""; + this.form.transferAddressName = ""; + }, + handleOrderBkgeChange(value) { + const numberValue = Number(value || 0); + this.$set(this.form, "orderBkge", Number(numberValue.toFixed(1))); + }, + findWorker() { + if (!this.workerMobile) { + this.$Message.warning("请输入配送员手机号"); + return; + } + this.workerLoading = true; + findShopWorkerByMobile({ + mobile: this.workerMobile + }).then((res) => { + this.workerLoading = false; + if (res.success) { + this.$set(this.form, "workerId", res.result.workerId); + this.$set(this.form, "workerName", res.result.workerName); + this.$set(this.form, "workerPhone", res.result.workerPhone || res.result.mobile); + this.$Message.success("配送员绑定成功"); + } else { + this.$Message.error(res.message || "未查询到配送员"); + } + }).catch(() => { + this.workerLoading = false; + }); + }, + normalizeSelfDeliveryForm() { + if (this.form.supportShopDelivery == null) { + this.$set(this.form, "supportShopDelivery", 0); + } + this.form.supportShopDelivery = Number(this.form.supportShopDelivery); + this.form.orderBkge = Number(Number(this.form.orderBkge || 0).toFixed(1)); + if (this.form.supportShopDelivery != 1) { + this.form.orderBkge = 0; + this.form.shopDeliveryLocation = ""; + this.form.shopDeliveryDuration = ""; + this.form.workerId = ""; + this.form.workerName = ""; + this.form.workerPhone = ""; + } + }, + normalizeTransferDeliveryForm() { + if (this.form.supportTransferDelivery == null) { + this.$set(this.form, "supportTransferDelivery", 0); + } + this.form.supportTransferDelivery = Number(this.form.supportTransferDelivery); + if (this.form.supportTransferDelivery != 1) { + this.form.transferDeliveryDuration = ""; + this.form.transferAddressId = ""; + this.form.transferAddressName = ""; + } else { + this.form.transferDeliveryDuration = Number(this.form.transferDeliveryDuration || 0); + } + }, + cleanDisplayFields() { + delete this.form.users + delete this.form.products + delete this.form.shopTakeaway + delete this.form.clerks + delete this.form.keyWord + delete this.form.isAdmin + delete this.form.saleCounts + delete this.form.groupDeliveryTime }, changePass(v, grade, strength) { this.form.passStrength = strength; }, submit() { + this.normalizeSelfDeliveryForm(); + this.normalizeTransferDeliveryForm(); this.$refs.form.validate((valid) => { if (valid) { if (typeof this.form.chargeTime == "object") { @@ -252,30 +479,23 @@ if (typeof this.form.endTime == "object") { this.form.endTime = this.format(this.form.endTime, "yyyy-MM-dd"); } - debugger; - if (this.form.users == '' || this.form.users == null) { - delete this.form.users; - } // 处理商品分类的名称 if (this.form.shopType != '' && this.form.shopType != null) { this.shopType.forEach(item => { - debugger; if (this.form.shopType == item.value) { this.form.shopTypeTitle = item.title; } }); } this.form.shopMangerId = this.form.shopOwnerId + this.cleanDisplayFields() if (this.type == "1") { // 编辑 this.submitLoading = true; - delete this.form.products delete this.form.saleCount - delete this.form.shopTakeaway delete this.form.storeFlag delete this.form.printingMethod delete this.form.printingMethod - editShop(this.form).then((res) => { this.submitLoading = false; if (res.success) { @@ -326,18 +546,42 @@ } else { data.address = []; } - // 商圈 - this.$refs.shopAreaTree.setData(data.shopArea, data.shopAreaTitle); // 回显 - this.form = data; + this.form = Object.assign({}, data, { + supportShopDelivery: data.supportShopDelivery == null ? 0 : Number(data.supportShopDelivery), + orderBkge: data.orderBkge == null ? 0 : Number(data.orderBkge), + shopDeliveryLocation: data.shopDeliveryLocation == null ? null : Number(data.shopDeliveryLocation), + shopDeliveryDuration: data.shopDeliveryDuration == null ? null : Number(data.shopDeliveryDuration), + supportTransferDelivery: data.supportTransferDelivery == null ? 0 : Number(data.supportTransferDelivery), + transferDeliveryDuration: data.transferDeliveryDuration == null ? null : Number(data.transferDeliveryDuration), + transferAddressId: data.transferAddressId || "", + transferAddressName: data.transferAddressName || "", + }); + this.workerMobile = this.form.workerPhone || ""; + this.$nextTick(() => { + // 商圈 + this.$refs.shopAreaTree.setData(this.form.shopArea, this.form.shopAreaTitle); + if (this.$refs.transferAddressTree) { + this.$refs.transferAddressTree.setData(this.form.transferAddressId, this.form.transferAddressName); + } + }); } else { // 添加 - //this.$refs.shopAreaTree.setData("", ""); this.form = { /*type: 0, sex: "", address: [],*/ + supportShopDelivery: 0, + orderBkge: 0, + supportTransferDelivery: 0, }; + this.workerMobile = ""; + this.$nextTick(() => { + this.$refs.shopAreaTree.setData("", ""); + if (this.$refs.transferAddressTree) { + this.$refs.transferAddressTree.setData("", ""); + } + }); } this.visible = value; }, diff --git a/src/views/my-components/hiver/shopArea-tree-choose.vue b/src/views/my-components/hiver/shopArea-tree-choose.vue index 6355920..1f67e21 100644 --- a/src/views/my-components/hiver/shopArea-tree-choose.vue +++ b/src/views/my-components/hiver/shopArea-tree-choose.vue @@ -3,13 +3,13 @@
- +
-
+
@@ -62,6 +62,18 @@ type: String, default: "点击选择区域", }, + placement: { + type: String, + default: "right", + }, + width: { + type: [Number, String], + default: 250, + }, + treeMaxHeight: { + type: String, + default: "500px", + }, }, data() { return {