feat(shopExpressTemplateDetail): 支持「不发货黑名单」配送模式

- 新增配送模式三态选择(0全国/1指定配送/2指定不发货)
- 编辑表单中增加“配送模式”单选,mode=2时复用多选地区组件选择不发货地区
- 保存时根据模式调整 regionMode 和 regionIds 字段,确保模式与地区同步
- 列表页配送地区列新增不发货黑名单显示,聚合城市码为省份名并支持省名去重
- 加载地区时建立城市ID到省份ID映射,实现城市码聚合显示省名功能
- 适配旧数据兼容性,支持单值旧数据和全国模式显示
- 表单校验强化,指定配送/不发货模式下必须选择有效地区
- 完成端到端链路功能闭环,前端支持黑名单配置,后端按租户生效配送限制
This commit is contained in:
2026-08-12 10:27:47 +08:00
parent 9b5875e6fb
commit 6a5b7ff711
2 changed files with 33 additions and 0 deletions
+1
View File
@@ -13,3 +13,4 @@
-`src/views/shop/shopExpressTemplateDetail/index.vue`:「配送地区」列按 region_mode 显示「不发货:xxx / 配送:xxx / 默认全国」,城市码聚合为省名显示。
- 类型检查(vue-tsc)确认本次改动无新错误(唯一相关报错是预存的 `$router` 用法,原文件即有,未引入)。
- 结论:黑名单现可经后台 UI 配置;SQL 直插仍作为备选(二者后台存城市码、SQL 存省份码,后端比对为编码集合 contains,都生效、互不冲突)。
- 已生成插偏远八省黑名单完整 SQL`offline-remote-areas-blacklist-10606.sql`template_id=11, region_mode=2, region_ids=新疆650000/西藏540000/青海630000/宁夏640000/内蒙古150000/海南460000/黑龙江230000/甘肃620000, status=0, tenant_id=10606),含前置查重 + 后置验证语句。
+32
View File
@@ -0,0 +1,32 @@
-- ============================================================
-- 偏远地区不发货黑名单(租户 10606,全店生效)
-- ============================================================
-- 作用:下单时 guilixu-java 的 DeliveryRegionChecker 按 tenant_id=10606
-- 取 region_mode=2 且 status=0 的明细,将收货地址行政区划码与
-- region_ids 比对,命中即拦截并提示「XX暂不配送,请更换收货地址」。
-- 注意:黑名单是租户级、全店生效,不区分商品绑定的运费模板。
-- 自提/无需发货(deliveryType=1) 不参与此校验。
-- 省份码(与 regions-data.json 完全一致):
-- 新疆650000 西藏540000 青海630000 宁夏640000 内蒙古150000
-- 海南460000 黑龙江230000 甘肃620000
-- ============================================================
-- 1) 先确认是否已有黑名单(避免重复插入)
SELECT id, template_id, region_mode, region_ids, status, tenant_id
FROM shop_express_template_detail
WHERE tenant_id = 10606 AND region_mode = 2 AND status = 0;
-- 2) 若上一步无记录,再执行插入(template_id=11 即「偏远地区不发」模板)
INSERT INTO shop_express_template_detail
(template_id, type, province_id, city_id, region_mode, region_ids,
first_num, first_amount, extra_amount, extra_num, status, deleted,
tenant_id, create_time, update_time, sort_number)
VALUES
(11, 0, NULL, NULL, 2,
'650000,540000,630000,640000,150000,460000,230000,620000',
0, 0, 0, 0, 0, 0, 10606, NOW(), NOW(), 0);
-- 3) 验证(应能看到刚插入的这条,且 region_ids 非空)
SELECT id, template_id, region_mode, region_ids, status, tenant_id
FROM shop_express_template_detail
WHERE tenant_id = 10606 AND region_mode = 2 AND status = 0;