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,
getShopPrintConfig,
findShopWorkerByMobile,
initShopArea,
loadShopArea,
} from "@/api/app";
export default {
name: "addEdit",
@ -350,6 +348,7 @@
roleList: [],
roleList2: [],
shopAreaList: [],
shopType: [],
businessDistrictLevelList: [],
userDepartmentId: userInfo.departmentId || "",
visible: this.value,
@ -521,22 +520,9 @@
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) => {
if (res.success) {
this.shopType = res.result;
this.shopType = Array.isArray(res.result) ? res.result : [];
}
});
},
@ -681,7 +667,7 @@
},
applyShopImages(data) {
const form = Object.assign({}, data);
if (form.shopImages) {
if (typeof form.shopImages === "string" && form.shopImages) {
const images = form.shopImages.split("@@");
form.zhengzhao = form.zhengzhao || images[0] || "";
form.fanzhao = form.fanzhao || images[1] || "";
@ -691,6 +677,55 @@
form.qita = this.parseOtherImages(form.qita);
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() {
if (this.form.merchantType == null || this.form.merchantType === "") {
this.$set(this.form, "merchantType", 1);
@ -758,78 +793,99 @@
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
cleanDisplayFields(payload) {
const data = payload || {};
delete data.users;
delete data.products;
delete data.shopTakeaway;
delete data.clerks;
delete data.keyWord;
delete data.isAdmin;
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) {
this.form.passStrength = strength;
},
submit() {
this.normalizeRegisterFields();
this.normalizeSelfDeliveryForm();
this.normalizeTransferDeliveryForm();
this.$refs.form.validate((valid) => {
if (valid) {
if (typeof this.form.chargeTime == "object") {
this.form.chargeTime = this.format(this.form.chargeTime, "yyyy-MM-dd");
}
if (typeof this.form.startTime == "object") {
this.form.startTime = this.format(this.form.startTime, "yyyy-MM-dd");
}
if (typeof this.form.endTime == "object") {
this.form.endTime = this.format(this.form.endTime, "yyyy-MM-dd");
}
// 处理商品分类的名称
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;
}
});
if (this.submitLoading) return;
try {
this.normalizeRegisterFields();
this.normalizeSelfDeliveryForm();
this.normalizeTransferDeliveryForm();
if (!this.validateBeforeSubmit()) return;
const payload = this.buildSubmitPayload();
const finishSubmit = (res) => {
this.submitLoading = false;
if (res && 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) {
if (value === this.visible) {
return;
}
if (!value) {
this.visible = false;
return;
}
if (this.type == "1") {
this.title = "编辑店铺";
this.maxHeight =
@ -842,26 +898,23 @@
this.title = "店铺详情";
this.maxHeight = "100%";
}
// 清空数据
this.$refs.form.resetFields();
if (this.type == "0" || this.type == "1") {
// 回显数据
let data = this.data;
// 地址
if (data.address) {
const data = Object.assign({}, this.data || {});
if (Array.isArray(data.address)) {
data.address = data.address.slice();
} else if (typeof data.address === "string" && data.address) {
data.address = data.address.split(",");
} else {
data.address = [];
}
// 回显
const registerData = this.applyShopImages(data);
this.form = Object.assign({}, registerData, {
merchantType: registerData.merchantType == null ? 1 : Number(registerData.merchantType),
isStudent: registerData.isStudent == null ? 0 : Number(registerData.isStudent),
startingPrice: registerData.startingPrice == null ? 0 : Number(registerData.startingPrice),
merchantType: this.normalizeNumber(registerData.merchantType, 1),
isStudent: this.normalizeNumber(registerData.isStudent, 0),
startingPrice: this.normalizeNumber(registerData.startingPrice, 0),
openKitchenVideoUrl: registerData.openKitchenVideoUrl || "",
supportDineIn: registerData.supportDineIn == null ? 0 : Number(registerData.supportDineIn),
storeConsumeOnly: registerData.storeConsumeOnly == null ? 0 : Number(registerData.storeConsumeOnly),
supportDineIn: this.normalizeNumber(registerData.supportDineIn, 0),
storeConsumeOnly: this.normalizeNumber(registerData.storeConsumeOnly, 0),
contactPhone: registerData.contactPhone || registerData.mobile || "",
mobile: registerData.mobile || registerData.contactPhone || "",
zhengzhao: registerData.zhengzhao || "",
@ -870,12 +923,12 @@
shopLename: registerData.shopLename || "",
shopLecard: registerData.shopLecard || "",
qita: registerData.qita || [],
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),
supportShopDelivery: this.normalizeNumber(data.supportShopDelivery, 0),
orderBkge: this.normalizeNumber(data.orderBkge, 0),
shopDeliveryLocation: this.normalizeNumber(data.shopDeliveryLocation, ""),
shopDeliveryDuration: this.normalizeNumber(data.shopDeliveryDuration, null),
supportTransferDelivery: this.normalizeNumber(data.supportTransferDelivery, 0),
transferDeliveryDuration: this.normalizeNumber(data.transferDeliveryDuration, null),
transferAddressId: data.transferAddressId || "",
transferAddressName: data.transferAddressName || "",
});
@ -887,18 +940,16 @@
this.loadPrintConfig();
this.workerMobile = this.form.workerPhone || "";
this.$nextTick(() => {
// 商圈
this.$refs.shopAreaTree.setData(this.form.shopArea, this.form.shopAreaTitle);
this.clearFormValidate();
if (this.$refs.shopAreaTree) {
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.form = {
/*type: 0,
sex: "",
address: [],*/
merchantType: 1,
isStudent: 0,
startingPrice: 0,
@ -917,7 +968,10 @@
};
this.workerMobile = "";
this.$nextTick(() => {
this.$refs.shopAreaTree.setData("", "");
this.clearFormValidate();
if (this.$refs.shopAreaTree) {
this.$refs.shopAreaTree.setData("", "");
}
if (this.$refs.transferAddressTree) {
this.$refs.transferAddressTree.setData("", "");
}

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

@ -319,7 +319,8 @@
h(
"a", {
on: {
click: () => {
click: (event) => {
event.stopPropagation();
this.edit(params.row);
},
},
@ -440,15 +441,16 @@
getShopData(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
const rows = res.result && Array.isArray(res.result.content) ? res.result.content : [];
if (!this.getStore("roles").includes("ROLE_ADMIN")) {
res.result.content.forEach((e) => {
rows.forEach((e) => {
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) {
this.searchForm.pageNumber -= 1;
this.getDataList();
@ -538,17 +540,23 @@
});
},
edit(v) {
// 转换null为""
for (let attr in v) {
if (v[attr] == null) {
v[attr] = "";
}
let data = {};
try {
data = JSON.parse(JSON.stringify(v));
} catch (e) {
data = Object.assign({}, v);
}
let str = JSON.stringify(v);
let data = JSON.parse(str);
this.form = data;
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) {
// 转换null为""

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

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

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

@ -633,3 +633,7 @@

Loading…
Cancel
Save