20260820_add_wechat_mini_program.sql 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. -- ============================================================
  2. -- 小程序系统设置 → 微信小程序绑定
  3. -- 日期: 2026-08-20
  4. -- 说明: 建表、替换占位组件并补齐接口权限
  5. -- ============================================================
  6. CREATE TABLE IF NOT EXISTS `sa_wechat_mini_program` (
  7. `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',
  8. `partner_id` INT(11) UNSIGNED NOT NULL COMMENT '合伙人用户 ID',
  9. `partner_nickname` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '合伙人昵称快照',
  10. `partner_account` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '合伙人账号快照',
  11. `partner_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '合伙人名称快照',
  12. `mini_program_name` VARCHAR(64) NOT NULL COMMENT '小程序名称',
  13. `appid` VARCHAR(64) NOT NULL COMMENT '小程序 APPID',
  14. `appsecret` VARCHAR(128) NOT NULL COMMENT '小程序 AppSecret',
  15. `original_id` VARCHAR(64) NOT NULL COMMENT '小程序原始 ID',
  16. `mchid` VARCHAR(32) NOT NULL COMMENT '微信支付商户号',
  17. `api_key` VARCHAR(128) NOT NULL COMMENT '微信支付 API 密钥',
  18. `apiv3_key` VARCHAR(128) NOT NULL COMMENT '微信支付 APIV3 密钥',
  19. `apiclient_cert` MEDIUMTEXT NOT NULL COMMENT '支付证书',
  20. `apiclient_key` MEDIUMTEXT NOT NULL COMMENT '支付证书私钥',
  21. `certificate_serial_no` VARCHAR(128) NOT NULL COMMENT '支付 API 证书序列号',
  22. `service_id` VARCHAR(64) NOT NULL COMMENT '微信支付分账 ID',
  23. `created_by` INT(11) NULL COMMENT '创建者',
  24. `updated_by` INT(11) NULL COMMENT '更新者',
  25. `create_time` DATETIME(0) NULL COMMENT '创建时间',
  26. `update_time` DATETIME(0) NULL COMMENT '更新时间',
  27. `delete_time` DATETIME(0) NULL COMMENT '删除时间',
  28. PRIMARY KEY (`id`),
  29. KEY `idx_partner_id` (`partner_id`, `delete_time`),
  30. KEY `idx_appid` (`appid`, `delete_time`)
  31. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='微信小程序绑定配置';
  32. -- 将原「微信小程序」占位菜单切换到真实列表/编辑组件。
  33. UPDATE `sa_system_menu`
  34. SET `component` = '/mini-program/wechat',
  35. `remark` = '微信小程序绑定与支付配置',
  36. `update_time` = NOW()
  37. WHERE `code` = 'WechatMiniProgram' AND `delete_time` IS NULL;
  38. SET @wechat_menu_id = (
  39. SELECT `id` FROM `sa_system_menu`
  40. WHERE `code` = 'WechatMiniProgram' AND `delete_time` IS NULL
  41. ORDER BY `id` DESC LIMIT 1
  42. );
  43. -- 列表权限
  44. INSERT INTO `sa_system_menu` (
  45. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  46. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  47. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  48. )
  49. SELECT @wechat_menu_id, '微信小程序列表', 'WechatMiniProgramIndex', 'core:miniProgram:wechat:index', 3, NULL, NULL, 'GET', NULL, 100,
  50. NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  51. WHERE @wechat_menu_id IS NOT NULL
  52. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:wechat:index' AND `delete_time` IS NULL);
  53. -- 详情权限
  54. INSERT INTO `sa_system_menu` (
  55. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  56. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  57. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  58. )
  59. SELECT @wechat_menu_id, '微信小程序详情', 'WechatMiniProgramRead', 'core:miniProgram:wechat:read', 3, NULL, NULL, 'GET', NULL, 90,
  60. NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  61. WHERE @wechat_menu_id IS NOT NULL
  62. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:wechat:read' AND `delete_time` IS NULL);
  63. -- 绑定权限
  64. INSERT INTO `sa_system_menu` (
  65. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  66. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  67. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  68. )
  69. SELECT @wechat_menu_id, '绑定微信小程序', 'WechatMiniProgramSave', 'core:miniProgram:wechat:save', 3, NULL, NULL, 'POST', NULL, 80,
  70. NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  71. WHERE @wechat_menu_id IS NOT NULL
  72. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:wechat:save' AND `delete_time` IS NULL);
  73. -- 编辑权限
  74. INSERT INTO `sa_system_menu` (
  75. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  76. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  77. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  78. )
  79. SELECT @wechat_menu_id, '编辑微信小程序', 'WechatMiniProgramUpdate', 'core:miniProgram:wechat:update', 3, NULL, NULL, 'PUT', NULL, 70,
  80. NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  81. WHERE @wechat_menu_id IS NOT NULL
  82. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:wechat:update' AND `delete_time` IS NULL);
  83. -- 删除权限
  84. INSERT INTO `sa_system_menu` (
  85. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  86. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  87. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  88. )
  89. SELECT @wechat_menu_id, '删除微信小程序', 'WechatMiniProgramDestroy', 'core:miniProgram:wechat:destroy', 3, NULL, NULL, 'DELETE', NULL, 60,
  90. NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  91. WHERE @wechat_menu_id IS NOT NULL
  92. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:wechat:destroy' AND `delete_time` IS NULL);