20260820_add_mini_program_version.sql 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. -- ============================================================
  2. -- 小程序系统设置 → 版本管理 完整迁移
  3. -- 日期: 2026-08-20
  4. -- 幂等: 所有 DDL / DML 均可重复执行
  5. -- ============================================================
  6. -- 1) 建业务表 -----------------------------------------
  7. CREATE TABLE IF NOT EXISTS `sa_mini_program_version` (
  8. `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',
  9. `version_no` VARCHAR(32) NOT NULL COMMENT '版本号(如 1.0.0)',
  10. `version_name` VARCHAR(64) NOT NULL COMMENT '版本名称',
  11. `platform` VARCHAR(32) NOT NULL COMMENT '平台:wechat/alipay/wechat-h5/wechat-official',
  12. `channel` VARCHAR(16) NOT NULL DEFAULT 'prod' COMMENT '渠道:dev/test/prod',
  13. `download_url` VARCHAR(500) NOT NULL COMMENT '下载地址 / 二维码内容',
  14. `force_update` TINYINT(1) NOT NULL DEFAULT 2 COMMENT '是否强制更新:1是 2否',
  15. `release_notes` TEXT NULL COMMENT '发布说明',
  16. `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态:1启用 2禁用',
  17. `sort` INT(11) NOT NULL DEFAULT 0 COMMENT '排序',
  18. `created_by` INT(11) NULL COMMENT '创建者',
  19. `updated_by` INT(11) NULL COMMENT '更新者',
  20. `create_time` DATETIME(0) NULL COMMENT '创建时间',
  21. `update_time` DATETIME(0) NULL COMMENT '更新时间',
  22. `delete_time` DATETIME(0) NULL COMMENT '删除时间',
  23. PRIMARY KEY (`id`),
  24. UNIQUE KEY `uk_version_no` (`version_no`, `platform`, `channel`, `delete_time`),
  25. KEY `idx_platform_channel` (`platform`, `channel`, `status`),
  26. KEY `idx_create_time` (`create_time`)
  27. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='小程序版本管理';
  28. -- 2) 写菜单(type=2 子菜单) ----------------------------
  29. -- 父级「小程序系统设置」目录在历史迁移中已存在(path='/mini-program')
  30. INSERT INTO `sa_system_menu` (
  31. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  32. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  33. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  34. )
  35. SELECT
  36. (SELECT id FROM `sa_system_menu` WHERE `path` = '/mini-program' AND `delete_time` IS NULL LIMIT 1),
  37. CONVERT(0xE78988E69CACE7AEA1E79086 USING utf8mb4), -- 版本管理
  38. 'MiniProgramVersion',
  39. NULL,
  40. 2, -- type=2 菜单
  41. 'version', -- 子路径(无前导 \)
  42. '\\mini-program\\version', -- 组件路径(用 \)
  43. NULL,
  44. 'ri:apps-2-line',
  45. 60,
  46. NULL, 2, 2, 2, 2, 2,
  47. 0, NULL, 1, '小程序客户端版本管理', 1, 1, NOW(), NOW(), NULL
  48. WHERE NOT EXISTS (
  49. SELECT 1 FROM `sa_system_menu`
  50. WHERE `path` = 'version' AND `delete_time` IS NULL
  51. AND `parent_id` = (SELECT id FROM `sa_system_menu` WHERE `path` = '/mini-program' AND `delete_time` IS NULL LIMIT 1)
  52. );
  53. -- 3) 写 5 个权限点(type=3 按钮) ------------------------
  54. -- 父级 id 仍取「版本管理」菜单(用 component 定位,避免多 menu 干扰)
  55. SET @parent_id = (
  56. SELECT id FROM `sa_system_menu`
  57. WHERE `component` = '\\mini-program\\version' AND `delete_time` IS NULL
  58. ORDER BY id DESC LIMIT 1
  59. );
  60. -- 列表
  61. INSERT INTO `sa_system_menu` (
  62. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  63. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  64. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  65. )
  66. SELECT @parent_id, CONVERT(0xE78988E69CACE7AEA1E79086E587ADE8A1A8 USING utf8mb4), 'MiniProgramVersionIndex', 'core:miniProgram:version:index', 3, NULL, NULL, NULL, 'GET', NULL, 0, NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  67. WHERE @parent_id IS NOT NULL
  68. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:version:index' AND `delete_time` IS NULL);
  69. -- 详情
  70. INSERT INTO `sa_system_menu` (
  71. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  72. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  73. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  74. )
  75. SELECT @parent_id, CONVERT(0xE78988E69CACE7AEA1E79086E8AFA6E68385 USING utf8mb4), 'MiniProgramVersionRead', 'core:miniProgram:version:read', 3, NULL, NULL, NULL, 'GET', NULL, 0, NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  76. WHERE @parent_id IS NOT NULL
  77. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:version:read' AND `delete_time` IS NULL);
  78. -- 新增
  79. INSERT INTO `sa_system_menu` (
  80. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  81. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  82. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  83. )
  84. SELECT @parent_id, CONVERT(0xE78988E69CACE7AEA1E79086E696B0E5A29E USING utf8mb4), 'MiniProgramVersionSave', 'core:miniProgram:version:save', 3, NULL, NULL, NULL, 'POST', NULL, 0, NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  85. WHERE @parent_id IS NOT NULL
  86. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:version:save' AND `delete_time` IS NULL);
  87. -- 编辑
  88. INSERT INTO `sa_system_menu` (
  89. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  90. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  91. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  92. )
  93. SELECT @parent_id, CONVERT(0xE78988E69CACE7AEA1E79086E7BC96E8BE91 USING utf8mb4), 'MiniProgramVersionUpdate', 'core:miniProgram:version:update', 3, NULL, NULL, NULL, 'PUT', NULL, 0, NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  94. WHERE @parent_id IS NOT NULL
  95. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:version:update' AND `delete_time` IS NULL);
  96. -- 删除
  97. INSERT INTO `sa_system_menu` (
  98. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  99. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  100. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  101. )
  102. SELECT @parent_id, CONVERT(0xE78988E69CACE7AEA1E79086E588A0E999A4 USING utf8mb4), 'MiniProgramVersionDestroy', 'core:miniProgram:version:destroy', 3, NULL, NULL, NULL, 'DELETE', NULL, 0, NULL, 2, 2, 2, 2, 2, 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  103. WHERE @parent_id IS NOT NULL
  104. AND NOT EXISTS (SELECT 1 FROM `sa_system_menu` WHERE `slug` = 'core:miniProgram:version:destroy' AND `delete_time` IS NULL);