Bläddra i källkod

fix(统一支付前端/菜单): 已有交易锁定商户号与应用 ID,菜单 icon 改 el-icon-Wallet

- 编辑态商户号/应用 ID 输入框禁用,并提示换号需新建配置
- unified-menu.sql 目录行 icon 由 'money' 改为 'el-icon-Wallet'
- verify-unified-menu.mjs 契约同步,9/9 通过
alphaH 1 vecka sedan
förälder
incheckning
7efa4beebe

+ 3 - 3
frontend/scripts/verify-unified-menu.mjs

@@ -312,10 +312,10 @@ function checkDirectoryRow(ctx) {
     problems.push("directory row: no first INSERT INTO sys_menu segment");
     return problems;
   }
-  const rowShape = /NULL\s*,\s*'money'\s*,\s*'payment-unified'\s*,\s*'\/payment\/unified'\s*,/;
+  const rowShape = /NULL\s*,\s*'el-icon-Wallet'\s*,\s*'payment-unified'\s*,\s*'\/payment\/unified'\s*,/;
   if (!rowShape.test(segment)) {
     problems.push(
-      "directory row route_name='payment-unified' icon='money' route_path='/payment/unified' not found in expected column shape"
+      "directory row route_name='payment-unified' icon='el-icon-Wallet' route_path='/payment/unified' not found in expected column shape"
     );
   }
   if (!/gen_random_uuid\s*\(\s*\)\s*,\s*NULL\s*,\s*'0'/.test(segment)) {
@@ -414,7 +414,7 @@ const CHECKS = [
   ["页面行 permission 逐页等于契约值且前缀正确", checkPagePermissions],
   ["7 个权限串齐全且无 merchant:save/merchant:delete", checkPermissionStrings],
   ["授权段包含 role 1 与 role 2", checkRoles],
-  ["目录行 route_name='payment-unified' / icon='money' / parent_id NULL", checkDirectoryRow],
+  ["目录行 route_name='payment-unified' / icon='el-icon-Wallet' / parent_id NULL", checkDirectoryRow],
   ["每个 INSERT 都带 WHERE NOT EXISTS", checkIdempotentGuards],
   ["gen_random_uuid() 覆盖每段 sys_menu INSERT(≥3 段)", checkUuidDefaults],
   ["按钮 name → permission → 父页面 route_path 三元组正确", checkButtonParents],

+ 11 - 1
frontend/src/views/module_payment/unified/merchant/index.vue

@@ -171,10 +171,20 @@
             placeholder="上游分配的唯一商户号"
             maxlength="64"
             show-word-limit
+            :disabled="!!form.id"
           />
         </el-form-item>
         <el-form-item label="应用 ID" prop="app_id">
-          <el-input v-model="form.app_id" placeholder="上游分配的应用 ID" maxlength="64" />
+          <el-input
+            v-model="form.app_id"
+            placeholder="上游分配的应用 ID"
+            maxlength="64"
+            :disabled="!!form.id"
+          />
+          <!-- 后端对「已有交易」的配置会拒绝换号;前端直接锁死输入,避免用户白填一次 -->
+          <div v-if="form.id" class="form-hint">
+            已产生的交易会锁定商户号与应用 ID,如需更换请新建配置
+          </div>
         </el-form-item>
         <el-form-item label="应用密钥" prop="app_secret">
           <!-- ★ 永不回显:响应里没有 app_secret,编辑时这里**始终是空的**。

+ 1 - 1
java/src/main/resources/db/unified-menu.sql

@@ -70,7 +70,7 @@ INSERT INTO sys_menu (name, type, "order", permission, icon, route_name, route_p
                       uuid, parent_id, status, created_time, updated_time)
 SELECT '统一支付平台', 1,
        (SELECT COALESCE(MAX("order"), 0) + 1 FROM sys_menu WHERE parent_id IS NULL),
-       NULL, 'money',
+       NULL, 'el-icon-Wallet',
        'payment-unified', '/payment/unified', NULL,
        NULL, false, false, false, false, '统一支付平台', NULL,
        gen_random_uuid(), NULL, '0', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP