wangfukang 3 weeks ago
parent
commit
fb804a4ebc
  1. 260
      src/views/app/shop/addEdit.vue
  2. 32
      src/views/app/shop/shop.vue
  3. 2
      src/views/my-components/hiver/dict.vue
  4. 57
      src/views/my-components/hiver/shopArea-tree-choose.vue
  5. 4
      src/views/sys/order-manage/logisticsAddress.vue

260
src/views/app/shop/addEdit.vue

@ -320,8 +320,6 @@
bindShopPrinter, bindShopPrinter,
getShopPrintConfig, getShopPrintConfig,
findShopWorkerByMobile, findShopWorkerByMobile,
initShopArea,
loadShopArea,
} from "@/api/app"; } from "@/api/app";
export default { export default {
name: "addEdit", name: "addEdit",
@ -350,6 +348,7 @@
roleList: [], roleList: [],
roleList2: [], roleList2: [],
shopAreaList: [], shopAreaList: [],
shopType: [],
businessDistrictLevelList: [], businessDistrictLevelList: [],
userDepartmentId: userInfo.departmentId || "", userDepartmentId: userInfo.departmentId || "",
visible: this.value, visible: this.value,
@ -521,22 +520,9 @@
this.businessDistrictLevelList = res.result; this.businessDistrictLevelList = res.result;
} }
}); });
initShopArea().then((res) => {
if (res.success) {
res.result.forEach(function(e) {
if (e.isParent) {
e.loading = false;
e.children = [];
e._loading = false;
}
});
this.data = res.result;
}
});
getDictDataByType("shopType").then((res) => { getDictDataByType("shopType").then((res) => {
if (res.success) { if (res.success) {
this.shopType = res.result; this.shopType = Array.isArray(res.result) ? res.result : [];
} }
}); });
}, },
@ -681,7 +667,7 @@
}, },
applyShopImages(data) { applyShopImages(data) {
const form = Object.assign({}, data); const form = Object.assign({}, data);
if (form.shopImages) { if (typeof form.shopImages === "string" && form.shopImages) {
const images = form.shopImages.split("@@"); const images = form.shopImages.split("@@");
form.zhengzhao = form.zhengzhao || images[0] || ""; form.zhengzhao = form.zhengzhao || images[0] || "";
form.fanzhao = form.fanzhao || images[1] || ""; form.fanzhao = form.fanzhao || images[1] || "";
@ -691,6 +677,55 @@
form.qita = this.parseOtherImages(form.qita); form.qita = this.parseOtherImages(form.qita);
return form; return form;
}, },
normalizeNumber(value, fallback) {
if (value === null || value === undefined || value === "") return fallback;
const numberValue = Number(value);
return Number.isFinite(numberValue) ? numberValue : fallback;
},
clearFormValidate() {
const form = this.$refs.form;
if (!form || !Array.isArray(form.fields)) return;
form.fields.forEach((field) => {
if (!field || field._isDestroyed) return;
field.validateState = "";
field.validateMessage = "";
});
},
validateBeforeSubmit() {
if (!this.form.shopLename) {
this.$Message.warning("请输入联系人");
return false;
}
if (!this.form.shopArea) {
this.$Message.warning("请选择所属区域");
return false;
}
if (this.form.merchantType == 1 && this.form.supportShopDelivery == 1) {
if (!this.form.shopDeliveryLocation) {
this.$Message.warning("请选择送达位置");
return false;
}
if (!this.form.shopDeliveryDuration || Number(this.form.shopDeliveryDuration) <= 0) {
this.$Message.warning("请输入配送时长");
return false;
}
if (!this.form.workerId) {
this.$Message.warning("请查询并绑定配送员");
return false;
}
}
if (this.form.merchantType == 1 && this.form.supportTransferDelivery == 1) {
if (!this.form.transferDeliveryDuration || Number(this.form.transferDeliveryDuration) <= 0) {
this.$Message.warning("请输入中转配送时长");
return false;
}
if (!this.form.transferAddressId) {
this.$Message.warning("请选择中转地点");
return false;
}
}
return true;
},
normalizeRegisterFields() { normalizeRegisterFields() {
if (this.form.merchantType == null || this.form.merchantType === "") { if (this.form.merchantType == null || this.form.merchantType === "") {
this.$set(this.form, "merchantType", 1); this.$set(this.form, "merchantType", 1);
@ -758,78 +793,99 @@
this.form.transferDeliveryDuration = Number(this.form.transferDeliveryDuration || 0); this.form.transferDeliveryDuration = Number(this.form.transferDeliveryDuration || 0);
} }
}, },
cleanDisplayFields() { cleanDisplayFields(payload) {
delete this.form.users const data = payload || {};
delete this.form.products delete data.users;
delete this.form.shopTakeaway delete data.products;
delete this.form.clerks delete data.shopTakeaway;
delete this.form.keyWord delete data.clerks;
delete this.form.isAdmin delete data.keyWord;
delete this.form.saleCounts delete data.isAdmin;
delete this.form.groupDeliveryTime delete data.saleCounts;
delete data.groupDeliveryTime;
// 旧项目复制过来的金额字段,当前页面不编辑。null 经表单编码会变成字符串 "null",无法转成 BigDecimal
const unusedNumberFields = ["balance", "yearFee", "baseDeliveryFee", "shopScore"];
for (let i = 0; i < unusedNumberFields.length; i++) {
const key = unusedNumberFields[i];
const value = data[key];
if (value === null || value === undefined || value === "" || value === "null") {
delete data[key];
}
}
const keys = Object.keys(data);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (data[key] === null || data[key] === undefined) {
delete data[key];
}
}
return data;
},
formatSubmitDate(value) {
if (!(value instanceof Date) || isNaN(value.getTime())) return value;
return this.format(value, "yyyy-MM-dd");
},
buildSubmitPayload() {
const payload = Object.assign({}, this.form);
payload.chargeTime = this.formatSubmitDate(payload.chargeTime);
payload.startTime = this.formatSubmitDate(payload.startTime);
payload.endTime = this.formatSubmitDate(payload.endTime);
const shopTypes = Array.isArray(this.shopType) ? this.shopType : [];
if (payload.shopType !== "" && payload.shopType != null) {
for (let i = 0; i < shopTypes.length; i++) {
const item = shopTypes[i];
if (item && payload.shopType == item.value) {
payload.shopTypeTitle = item.title;
break;
}
}
}
payload.shopMangerId = payload.shopOwnerId;
this.cleanDisplayFields(payload);
if (this.type == "1") {
delete payload.saleCount;
delete payload.storeFlag;
delete payload.printingMethod;
}
return payload;
}, },
changePass(v, grade, strength) { changePass(v, grade, strength) {
this.form.passStrength = strength; this.form.passStrength = strength;
}, },
submit() { submit() {
this.normalizeRegisterFields(); if (this.submitLoading) return;
this.normalizeSelfDeliveryForm(); try {
this.normalizeTransferDeliveryForm(); this.normalizeRegisterFields();
this.$refs.form.validate((valid) => { this.normalizeSelfDeliveryForm();
if (valid) { this.normalizeTransferDeliveryForm();
if (typeof this.form.chargeTime == "object") { if (!this.validateBeforeSubmit()) return;
this.form.chargeTime = this.format(this.form.chargeTime, "yyyy-MM-dd"); const payload = this.buildSubmitPayload();
} const finishSubmit = (res) => {
if (typeof this.form.startTime == "object") { this.submitLoading = false;
this.form.startTime = this.format(this.form.startTime, "yyyy-MM-dd"); if (res && res.success) {
} this.$Message.success("操作成功");
if (typeof this.form.endTime == "object") { this.$emit("on-submit", true);
this.form.endTime = this.format(this.form.endTime, "yyyy-MM-dd"); this.visible = false;
}
// 处理商品分类的名称
if (this.form.shopType != '' && this.form.shopType != null) {
this.shopType.forEach(item => {
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.saleCount
delete this.form.storeFlag
delete this.form.printingMethod
delete this.form.printingMethod
editShop(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.$emit("on-submit", true);
this.visible = false;
}
});
} else {
// 添加
this.submitLoading = true;
addShop(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.$emit("on-submit", true);
this.visible = false;
}
});
} }
} };
}); this.submitLoading = true;
const request = this.type == "1" ? editShop(payload) : addShop(payload);
request.then(finishSubmit).catch(() => {
this.submitLoading = false;
});
} catch (e) {
this.submitLoading = false;
this.$Message.error((e && e.message) || "提交失败");
}
}, },
setCurrentValue(value) { setCurrentValue(value) {
if (value === this.visible) { if (value === this.visible) {
return; return;
} }
if (!value) {
this.visible = false;
return;
}
if (this.type == "1") { if (this.type == "1") {
this.title = "编辑店铺"; this.title = "编辑店铺";
this.maxHeight = this.maxHeight =
@ -842,26 +898,23 @@
this.title = "店铺详情"; this.title = "店铺详情";
this.maxHeight = "100%"; this.maxHeight = "100%";
} }
// 清空数据
this.$refs.form.resetFields();
if (this.type == "0" || this.type == "1") { if (this.type == "0" || this.type == "1") {
// 回显数据 const data = Object.assign({}, this.data || {});
let data = this.data; if (Array.isArray(data.address)) {
// 地址 data.address = data.address.slice();
if (data.address) { } else if (typeof data.address === "string" && data.address) {
data.address = data.address.split(","); data.address = data.address.split(",");
} else { } else {
data.address = []; data.address = [];
} }
// 回显
const registerData = this.applyShopImages(data); const registerData = this.applyShopImages(data);
this.form = Object.assign({}, registerData, { this.form = Object.assign({}, registerData, {
merchantType: registerData.merchantType == null ? 1 : Number(registerData.merchantType), merchantType: this.normalizeNumber(registerData.merchantType, 1),
isStudent: registerData.isStudent == null ? 0 : Number(registerData.isStudent), isStudent: this.normalizeNumber(registerData.isStudent, 0),
startingPrice: registerData.startingPrice == null ? 0 : Number(registerData.startingPrice), startingPrice: this.normalizeNumber(registerData.startingPrice, 0),
openKitchenVideoUrl: registerData.openKitchenVideoUrl || "", openKitchenVideoUrl: registerData.openKitchenVideoUrl || "",
supportDineIn: registerData.supportDineIn == null ? 0 : Number(registerData.supportDineIn), supportDineIn: this.normalizeNumber(registerData.supportDineIn, 0),
storeConsumeOnly: registerData.storeConsumeOnly == null ? 0 : Number(registerData.storeConsumeOnly), storeConsumeOnly: this.normalizeNumber(registerData.storeConsumeOnly, 0),
contactPhone: registerData.contactPhone || registerData.mobile || "", contactPhone: registerData.contactPhone || registerData.mobile || "",
mobile: registerData.mobile || registerData.contactPhone || "", mobile: registerData.mobile || registerData.contactPhone || "",
zhengzhao: registerData.zhengzhao || "", zhengzhao: registerData.zhengzhao || "",
@ -870,12 +923,12 @@
shopLename: registerData.shopLename || "", shopLename: registerData.shopLename || "",
shopLecard: registerData.shopLecard || "", shopLecard: registerData.shopLecard || "",
qita: registerData.qita || [], qita: registerData.qita || [],
supportShopDelivery: data.supportShopDelivery == null ? 0 : Number(data.supportShopDelivery), supportShopDelivery: this.normalizeNumber(data.supportShopDelivery, 0),
orderBkge: data.orderBkge == null ? 0 : Number(data.orderBkge), orderBkge: this.normalizeNumber(data.orderBkge, 0),
shopDeliveryLocation: data.shopDeliveryLocation == null ? null : Number(data.shopDeliveryLocation), shopDeliveryLocation: this.normalizeNumber(data.shopDeliveryLocation, ""),
shopDeliveryDuration: data.shopDeliveryDuration == null ? null : Number(data.shopDeliveryDuration), shopDeliveryDuration: this.normalizeNumber(data.shopDeliveryDuration, null),
supportTransferDelivery: data.supportTransferDelivery == null ? 0 : Number(data.supportTransferDelivery), supportTransferDelivery: this.normalizeNumber(data.supportTransferDelivery, 0),
transferDeliveryDuration: data.transferDeliveryDuration == null ? null : Number(data.transferDeliveryDuration), transferDeliveryDuration: this.normalizeNumber(data.transferDeliveryDuration, null),
transferAddressId: data.transferAddressId || "", transferAddressId: data.transferAddressId || "",
transferAddressName: data.transferAddressName || "", transferAddressName: data.transferAddressName || "",
}); });
@ -887,18 +940,16 @@
this.loadPrintConfig(); this.loadPrintConfig();
this.workerMobile = this.form.workerPhone || ""; this.workerMobile = this.form.workerPhone || "";
this.$nextTick(() => { this.$nextTick(() => {
// 商圈 this.clearFormValidate();
this.$refs.shopAreaTree.setData(this.form.shopArea, this.form.shopAreaTitle); if (this.$refs.shopAreaTree) {
this.$refs.shopAreaTree.setData(this.form.shopArea, this.form.shopAreaTitle);
}
if (this.$refs.transferAddressTree) { if (this.$refs.transferAddressTree) {
this.$refs.transferAddressTree.setData(this.form.transferAddressId, this.form.transferAddressName); this.$refs.transferAddressTree.setData(this.form.transferAddressId, this.form.transferAddressName);
} }
}); });
} else { } else {
// 添加
this.form = { this.form = {
/*type: 0,
sex: "",
address: [],*/
merchantType: 1, merchantType: 1,
isStudent: 0, isStudent: 0,
startingPrice: 0, startingPrice: 0,
@ -917,7 +968,10 @@
}; };
this.workerMobile = ""; this.workerMobile = "";
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.shopAreaTree.setData("", ""); this.clearFormValidate();
if (this.$refs.shopAreaTree) {
this.$refs.shopAreaTree.setData("", "");
}
if (this.$refs.transferAddressTree) { if (this.$refs.transferAddressTree) {
this.$refs.transferAddressTree.setData("", ""); this.$refs.transferAddressTree.setData("", "");
} }

32
src/views/app/shop/shop.vue

@ -319,7 +319,8 @@
h( h(
"a", { "a", {
on: { on: {
click: () => { click: (event) => {
event.stopPropagation();
this.edit(params.row); this.edit(params.row);
}, },
}, },
@ -440,15 +441,16 @@
getShopData(this.searchForm).then((res) => { getShopData(this.searchForm).then((res) => {
this.loading = false; this.loading = false;
if (res.success) { if (res.success) {
const rows = res.result && Array.isArray(res.result.content) ? res.result.content : [];
if (!this.getStore("roles").includes("ROLE_ADMIN")) { if (!this.getStore("roles").includes("ROLE_ADMIN")) {
res.result.content.forEach((e) => { rows.forEach((e) => {
e.mobile = "您无权查看该数据"; e.mobile = "您无权查看该数据";
}); });
} }
this.data = res.result.content; this.data = rows;
this.total = res.result.totalElements; this.total = res.result && res.result.totalElements ? res.result.totalElements : 0;
if (this.data.length == 0 && this.searchForm.pageNumber > 1) { if (this.data.length == 0 && this.searchForm.pageNumber > 1) {
this.searchForm.pageNumber -= 1; this.searchForm.pageNumber -= 1;
this.getDataList(); this.getDataList();
@ -538,17 +540,23 @@
}); });
}, },
edit(v) { edit(v) {
// 转换null为"" let data = {};
for (let attr in v) { try {
if (v[attr] == null) { data = JSON.parse(JSON.stringify(v));
v[attr] = ""; } catch (e) {
} data = Object.assign({}, v);
} }
let str = JSON.stringify(v);
let data = JSON.parse(str);
this.form = data; this.form = data;
this.showType = "1"; this.showType = "1";
this.showUser = true; // 上次打开如果中途报错,showUser 会停在 true,再次赋值不会触发抽屉
if (this.showUser) {
this.showUser = false;
this.$nextTick(() => {
this.showUser = true;
});
} else {
this.showUser = true;
}
}, },
mernage(v) { mernage(v) {
// 转换null为"" // 转换null为""

2
src/views/my-components/hiver/dict.vue

@ -70,7 +70,7 @@
getDictDataByType(v).then((res) => { getDictDataByType(v).then((res) => {
this.loading = false; this.loading = false;
if (res.success) { if (res.success) {
this.dictData = res.result; this.dictData = Array.isArray(res.result) ? res.result : [];
} }
}); });

57
src/views/my-components/hiver/shopArea-tree-choose.vue

@ -90,21 +90,27 @@
}; };
}, },
methods: { methods: {
normalizeAreaList(list) {
const areas = Array.isArray(list) ? list : [];
for (let i = 0; i < areas.length; i++) {
const item = areas[i];
if (!item) continue;
if (item.isParent) {
item.loading = false;
item.children = [];
}
if (item.status == -1) {
item.title = "[已禁用] " + item.title;
item.disabled = true;
}
}
return areas;
},
initShopAreaData() { initShopAreaData() {
const request = this.rootId ? loadShopArea(this.rootId) : initShopArea(); const request = this.rootId ? loadShopArea(this.rootId) : initShopArea();
request.then((res) => { request.then((res) => {
if (res.success) { if (res.success) {
res.result.forEach(function(e) { this.dataDep = this.normalizeAreaList(res.result);
if (e.isParent) {
e.loading = false;
e.children = [];
}
if (e.status == -1) {
e.title = "[已禁用] " + e.title;
e.disabled = true;
}
});
this.dataDep = res.result;
this.syncSelectedTitle(); this.syncSelectedTitle();
} }
}); });
@ -112,18 +118,12 @@
loadData(item, callback) { loadData(item, callback) {
loadShopArea(item.id).then((res) => { loadShopArea(item.id).then((res) => {
if (res.success) { if (res.success) {
res.result.forEach(function(e) { callback(this.normalizeAreaList(res.result));
if (e.isParent) { } else {
e.loading = false; callback([]);
e.children = [];
}
if (e.status == -1) {
e.title = "[已禁用] " + e.title;
e.disabled = true;
}
});
callback(res.result);
} }
}).catch(() => {
callback([]);
}); });
}, },
searchDep() { searchDep() {
@ -140,13 +140,7 @@
searchShopArea(params).then((res) => { searchShopArea(params).then((res) => {
this.depLoading = false; this.depLoading = false;
if (res.success) { if (res.success) {
res.result.forEach(function(e) { this.dataDep = this.normalizeAreaList(res.result);
if (e.status == -1) {
e.title = "[已禁用] " + e.title;
e.disabled = true;
}
});
this.dataDep = res.result;
} }
}); });
} else { } else {
@ -156,7 +150,8 @@
selectTree(v) { selectTree(v) {
let ids = [], let ids = [],
title = ""; title = "";
v.forEach((e) => { const selected = Array.isArray(v) ? v : [];
selected.forEach((e) => {
ids.push(e.id); ids.push(e.id);
if (title == "") { if (title == "") {
title = e.title; title = e.title;
@ -214,7 +209,7 @@
if (selectedIds.includes(String(item.id))) { if (selectedIds.includes(String(item.id))) {
titles.push(item.title); titles.push(item.title);
} }
if (item.children && item.children.length) { if (Array.isArray(item.children) && item.children.length) {
findTitles(item.children); findTitles(item.children);
} }
}); });

4
src/views/sys/order-manage/logisticsAddress.vue

@ -633,3 +633,7 @@

Loading…
Cancel
Save