@@ -158,6 +165,30 @@
>
%
+
+
+ 校园区域
+ 社会区域
+
+ 社会区域首页展示待成团,并隐藏配送入口
+
+
+
+ 用于小程序定位自动绑定校区;请用高德地图选点(GCJ-02)。未设置则不参与自动匹配
+
+
+
+ 米
+
+
+
+ 校园区域
+ 社会区域
+
+ 社会区域首页展示待成团,并隐藏配送入口
+
+
+
+ 用于小程序定位自动绑定校区;请用高德地图选点(GCJ-02)。未设置则不参与自动匹配
+
+
+
+ 米
+
{
if (value === "" || value == null || value === "null") {
@@ -436,6 +495,11 @@ export default {
parentAgentId: "",
parentAgentName: "",
commissionRatio: 0,
+ areaKind: 1,
+ centerLng: null,
+ centerLat: null,
+ radiusMeters: "",
+ geoPosition: "",
},
formAdd: {},
agentModalVisible: false,
@@ -643,18 +707,87 @@ export default {
this.$set(target, "parentAgentId", "");
this.$set(target, "parentAgentName", "");
},
+ clearGeoValue(target) {
+ this.$set(target, "centerLng", null);
+ this.$set(target, "centerLat", null);
+ this.$set(target, "radiusMeters", "");
+ this.$set(target, "geoPosition", "");
+ },
+ buildGeoPosition(lng, lat) {
+ if (lng === "" || lng == null || lat === "" || lat == null) {
+ return "";
+ }
+ return `${lng}, ${lat}`;
+ },
+ applyGeoPosition(target) {
+ if (!this.isRootArea(target.parentId)) {
+ this.clearGeoValue(target);
+ return true;
+ }
+ const position = (target.geoPosition || "").trim();
+ if (!position) {
+ this.clearGeoValue(target);
+ return true;
+ }
+ const parts = position.split(",");
+ if (parts.length < 2) {
+ this.$Message.warning("区域中心坐标格式应为:经度, 纬度");
+ return false;
+ }
+ const lng = Number(parts[0].trim());
+ const lat = Number(parts[1].trim());
+ if (!Number.isFinite(lng) || !Number.isFinite(lat)) {
+ this.$Message.warning("区域中心坐标不合法");
+ return false;
+ }
+ if (lng < -180 || lng > 180 || lat < -90 || lat > 90) {
+ this.$Message.warning("区域中心坐标超出范围");
+ return false;
+ }
+ const radius = Number(target.radiusMeters);
+ if (!Number.isInteger(radius) || radius <= 0) {
+ this.$Message.warning("请设置有效的匹配半径(米)");
+ return false;
+ }
+ this.$set(target, "centerLng", lng);
+ this.$set(target, "centerLat", lat);
+ this.$set(target, "radiusMeters", radius);
+ return true;
+ },
normalizeParentAgent(target) {
if (!this.isRootArea(target.parentId)) {
this.clearParentAgentValue(target);
this.$delete(target, "commissionRatio");
- } else if (
- target.commissionRatio === "" ||
- target.commissionRatio == null ||
- target.commissionRatio === "null"
+ this.clearGeoValue(target);
+ this.$set(target, "areaKind", 1);
+ } else {
+ if (
+ target.commissionRatio === "" ||
+ target.commissionRatio == null ||
+ target.commissionRatio === "null"
+ ) {
+ this.$set(target, "commissionRatio", 0);
+ } else {
+ this.$set(target, "commissionRatio", Number(target.commissionRatio));
+ }
+ const areaKind = Number(target.areaKind);
+ this.$set(target, "areaKind", areaKind === 2 ? 2 : 1);
+ }
+ },
+ syncGeoFromEntity(target) {
+ this.$set(
+ target,
+ "geoPosition",
+ this.buildGeoPosition(target.centerLng, target.centerLat)
+ );
+ if (
+ target.radiusMeters === "" ||
+ target.radiusMeters === "null" ||
+ target.radiusMeters == null
) {
- this.$set(target, "commissionRatio", 0);
+ this.$set(target, "radiusMeters", "");
} else {
- this.$set(target, "commissionRatio", Number(target.commissionRatio));
+ this.$set(target, "radiusMeters", String(target.radiusMeters));
}
},
init() {
@@ -783,6 +916,9 @@ export default {
) {
this.$set(this.form, "commissionRatio", 0);
}
+ const areaKind = Number(this.form.areaKind);
+ this.$set(this.form, "areaKind", areaKind === 2 ? 2 : 1);
+ this.syncGeoFromEntity(this.form);
} else {
this.cancelEdit();
}
@@ -804,6 +940,11 @@ export default {
parentAgentId: "",
parentAgentName: "",
commissionRatio: 0,
+ areaKind: 1,
+ centerLng: null,
+ centerLat: null,
+ radiusMeters: "",
+ geoPosition: "",
};
this.editTitle = "";
},
@@ -843,11 +984,19 @@ export default {
this.$Message.warning("请先点击选择要修改的区域");
return;
}
+ if (!this.applyGeoPosition(this.form)) {
+ return;
+ }
this.submitLoading = true;
delete this.form.mainHeaders;
delete this.form.viceHeaders;
this.normalizeParentAgent(this.form);
- editShopArea(this.form).then((res) => {
+ const payload = { ...this.form };
+ delete payload.geoPosition;
+ if (payload.centerLng == null) payload.centerLng = "";
+ if (payload.centerLat == null) payload.centerLat = "";
+ if (payload.radiusMeters == null) payload.radiusMeters = "";
+ editShopArea(payload).then((res) => {
this.submitLoading = false;
if (res.success) {
this.editTitle = this.form.title;
@@ -863,9 +1012,17 @@ export default {
this.normalizeParentAgent(this.formAdd);
this.$refs.formAdd.validate((valid) => {
if (valid) {
+ if (!this.applyGeoPosition(this.formAdd)) {
+ return;
+ }
this.submitLoading = true;
this.normalizeParentAgent(this.formAdd);
- addShopArea(this.formAdd).then((res) => {
+ const payload = { ...this.formAdd };
+ delete payload.geoPosition;
+ if (payload.centerLng == null) payload.centerLng = "";
+ if (payload.centerLat == null) payload.centerLat = "";
+ if (payload.radiusMeters == null) payload.radiusMeters = "";
+ addShopArea(payload).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("添加成功");
@@ -927,6 +1084,11 @@ export default {
parentAgentId: "",
parentAgentName: "",
commissionRatio: 0,
+ areaKind: 1,
+ centerLng: null,
+ centerLat: null,
+ radiusMeters: "",
+ geoPosition: "",
};
this.modalVisible = true;
},
diff --git a/src/views/my-components/hiver/map.vue b/src/views/my-components/hiver/map.vue
index d668485..f2e3027 100644
--- a/src/views/my-components/hiver/map.vue
+++ b/src/views/my-components/hiver/map.vue
@@ -50,12 +50,61 @@
-