20260821_add_mini_program_content_settings.sql 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. -- ============================================================
  2. -- 小程序系统设置 → 模板消息 / 分享设置 / 默认设置
  3. -- 日期: 2026-08-21
  4. -- 说明: 新增三个真实页面所需的数据表、默认数据、菜单组件和接口权限
  5. -- ============================================================
  6. CREATE TABLE IF NOT EXISTS `sa_mini_program_template_message` (
  7. `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',
  8. `code` VARCHAR(64) NOT NULL COMMENT '业务消息编码',
  9. `title` VARCHAR(100) NOT NULL COMMENT '标题',
  10. `usage_detail` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '使用详情',
  11. `keywords` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '关键词',
  12. `template_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '微信模板 ID',
  13. `appid` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '微信小程序 APPID',
  14. `type` VARCHAR(32) NOT NULL DEFAULT '一次性订阅' COMMENT '订阅类型',
  15. `created_by` INT(11) NULL COMMENT '创建者',
  16. `updated_by` INT(11) NULL COMMENT '更新者',
  17. `create_time` DATETIME(0) NULL COMMENT '创建时间',
  18. `update_time` DATETIME(0) NULL COMMENT '更新时间',
  19. `delete_time` DATETIME(0) NULL COMMENT '删除时间',
  20. PRIMARY KEY (`id`),
  21. UNIQUE KEY `uk_template_message_code` (`code`)
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='小程序模板消息设置';
  23. CREATE TABLE IF NOT EXISTS `sa_mini_program_share_settings` (
  24. `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',
  25. `share_name` VARCHAR(100) NOT NULL COMMENT '分享名称',
  26. `share_title` VARCHAR(255) NOT NULL COMMENT '分享标题',
  27. `share_image` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '分享图片',
  28. `created_by` INT(11) NULL COMMENT '创建者',
  29. `updated_by` INT(11) NULL COMMENT '更新者',
  30. `create_time` DATETIME(0) NULL COMMENT '创建时间',
  31. `update_time` DATETIME(0) NULL COMMENT '更新时间',
  32. `delete_time` DATETIME(0) NULL COMMENT '删除时间',
  33. PRIMARY KEY (`id`)
  34. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='小程序分享设置';
  35. CREATE TABLE IF NOT EXISTS `sa_mini_program_default_settings` (
  36. `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',
  37. `device_type` VARCHAR(64) NOT NULL COMMENT '设备类型',
  38. `device_name` VARCHAR(100) NOT NULL COMMENT '设备计费名称',
  39. `free_minutes` INT(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '免费时长(分钟)',
  40. `overdue_deposit` DECIMAL(12,2) NOT NULL DEFAULT 15.00 COMMENT '超时订单押金',
  41. `min_deposit` DECIMAL(12,2) NOT NULL DEFAULT 3.00 COMMENT '最低押金',
  42. `max_deposit` DECIMAL(12,2) NOT NULL DEFAULT 30.00 COMMENT '最高押金',
  43. `sort` INT(11) NOT NULL DEFAULT 0 COMMENT '排序',
  44. `created_by` INT(11) NULL COMMENT '创建者',
  45. `updated_by` INT(11) NULL COMMENT '更新者',
  46. `create_time` DATETIME(0) NULL COMMENT '创建时间',
  47. `update_time` DATETIME(0) NULL COMMENT '更新时间',
  48. `delete_time` DATETIME(0) NULL COMMENT '删除时间',
  49. PRIMARY KEY (`id`),
  50. UNIQUE KEY `uk_default_setting_device_type` (`device_type`)
  51. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='小程序默认计费设置';
  52. -- 优先使用已经绑定的微信小程序 APPID;本地尚未绑定时使用参考页面中的 APPID。
  53. SET @template_default_appid = (
  54. SELECT `appid` FROM `sa_wechat_mini_program`
  55. WHERE `delete_time` IS NULL AND `appid` <> ''
  56. ORDER BY `id` ASC LIMIT 1
  57. );
  58. SET @template_default_appid = COALESCE(NULLIF(@template_default_appid, ''), 'wx6b15e8b6653a0f79');
  59. INSERT INTO `sa_mini_program_template_message`
  60. (`code`, `title`, `usage_detail`, `keywords`, `template_id`, `appid`, `type`, `created_by`, `updated_by`, `create_time`, `update_time`)
  61. SELECT 'withdraw_apply', '提现申请通知', '提现到账通知', '提现金额,提现状态,到账类型,', '', @template_default_appid, '一次性订阅', 1, 1, NOW(), NOW()
  62. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_template_message` WHERE `code` = 'withdraw_apply');
  63. INSERT INTO `sa_mini_program_template_message`
  64. (`code`, `title`, `usage_detail`, `keywords`, `template_id`, `appid`, `type`, `created_by`, `updated_by`, `create_time`, `update_time`)
  65. SELECT 'deposit_refund', '退款成功通知', '押金退还通知', '应退金额,备注,', '', @template_default_appid, '一次性订阅', 1, 1, NOW(), NOW()
  66. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_template_message` WHERE `code` = 'deposit_refund');
  67. INSERT INTO `sa_mini_program_template_message`
  68. (`code`, `title`, `usage_detail`, `keywords`, `template_id`, `appid`, `type`, `created_by`, `updated_by`, `create_time`, `update_time`)
  69. SELECT 'rental_return', '租借归还通知', '租借归还通知', '归还地点,订单号,产生费用,收费标准,归还时间,', '', @template_default_appid, '一次性订阅', 1, 1, NOW(), NOW()
  70. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_template_message` WHERE `code` = 'rental_return');
  71. INSERT INTO `sa_mini_program_default_settings`
  72. (`device_type`, `device_name`, `free_minutes`, `overdue_deposit`, `min_deposit`, `max_deposit`, `sort`, `created_by`, `updated_by`, `create_time`, `update_time`)
  73. SELECT 'vehicle_charger', '车载充电器计费', 0, 15.00, 3.00, 30.00, 10, 1, 1, NOW(), NOW()
  74. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_default_settings` WHERE `device_type` = 'vehicle_charger');
  75. INSERT INTO `sa_mini_program_default_settings`
  76. (`device_type`, `device_name`, `free_minutes`, `overdue_deposit`, `min_deposit`, `max_deposit`, `sort`, `created_by`, `updated_by`, `create_time`, `update_time`)
  77. SELECT 'karaoke_device', 'K歌宝计费', 0, 15.00, 3.00, 30.00, 20, 1, 1, NOW(), NOW()
  78. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_default_settings` WHERE `device_type` = 'karaoke_device');
  79. INSERT INTO `sa_mini_program_default_settings`
  80. (`device_type`, `device_name`, `free_minutes`, `overdue_deposit`, `min_deposit`, `max_deposit`, `sort`, `created_by`, `updated_by`, `create_time`, `update_time`)
  81. SELECT 'bluetooth_cable', '蓝牙线充计费', 0, 15.00, 3.00, 30.00, 30, 1, 1, NOW(), NOW()
  82. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_default_settings` WHERE `device_type` = 'bluetooth_cable');
  83. INSERT INTO `sa_mini_program_default_settings`
  84. (`device_type`, `device_name`, `free_minutes`, `overdue_deposit`, `min_deposit`, `max_deposit`, `sort`, `created_by`, `updated_by`, `create_time`, `update_time`)
  85. SELECT 'power_bank', '充电宝计费', 0, 15.00, 3.00, 30.00, 40, 1, 1, NOW(), NOW()
  86. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_default_settings` WHERE `device_type` = 'power_bank');
  87. INSERT INTO `sa_mini_program_default_settings`
  88. (`device_type`, `device_name`, `free_minutes`, `overdue_deposit`, `min_deposit`, `max_deposit`, `sort`, `created_by`, `updated_by`, `create_time`, `update_time`)
  89. SELECT 'password_cable', '密码线充计费', 0, 15.00, 3.00, 30.00, 50, 1, 1, NOW(), NOW()
  90. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_default_settings` WHERE `device_type` = 'password_cable');
  91. INSERT INTO `sa_mini_program_default_settings`
  92. (`device_type`, `device_name`, `free_minutes`, `overdue_deposit`, `min_deposit`, `max_deposit`, `sort`, `created_by`, `updated_by`, `create_time`, `update_time`)
  93. SELECT 'password_bluetooth_cable', '密码蓝牙线充计费', 0, 15.00, 3.00, 30.00, 60, 1, 1, NOW(), NOW()
  94. WHERE NOT EXISTS (SELECT 1 FROM `sa_mini_program_default_settings` WHERE `device_type` = 'password_bluetooth_cable');
  95. -- 将三个占位菜单切换到真实组件。
  96. UPDATE `sa_system_menu`
  97. SET `component` = CASE `code`
  98. WHEN 'MiniProgramTemplateMessage' THEN '/mini-program/template-message'
  99. WHEN 'MiniProgramShareSettings' THEN '/mini-program/share-settings'
  100. WHEN 'MiniProgramDefaultSettings' THEN '/mini-program/default-settings'
  101. END,
  102. `remark` = CASE `code`
  103. WHEN 'MiniProgramTemplateMessage' THEN '小程序模板消息设置'
  104. WHEN 'MiniProgramShareSettings' THEN '小程序分享设置'
  105. WHEN 'MiniProgramDefaultSettings' THEN '小程序默认计费设置'
  106. END,
  107. `update_time` = NOW()
  108. WHERE `code` IN ('MiniProgramTemplateMessage', 'MiniProgramShareSettings', 'MiniProgramDefaultSettings')
  109. AND `delete_time` IS NULL;
  110. -- 页面接口权限。
  111. INSERT INTO `sa_system_menu` (
  112. `parent_id`, `name`, `code`, `slug`, `type`, `path`, `component`, `method`, `icon`, `sort`,
  113. `link_url`, `is_iframe`, `is_keep_alive`, `is_hidden`, `is_fixed_tab`, `is_full_page`,
  114. `generate_id`, `generate_key`, `status`, `remark`, `created_by`, `updated_by`, `create_time`, `update_time`, `delete_time`
  115. )
  116. SELECT parent_menu.`id`, permission_data.`name`, permission_data.`code`, permission_data.`slug`, 3,
  117. NULL, NULL, permission_data.`method`, NULL, permission_data.`sort`, NULL, 2, 2, 2, 2, 2,
  118. 0, NULL, 1, NULL, 1, 1, NOW(), NOW(), NULL
  119. FROM `sa_system_menu` parent_menu
  120. INNER JOIN (
  121. SELECT 'MiniProgramTemplateMessage' AS `parent_code`, '读取模板消息' AS `name`, 'MiniProgramTemplateMessageIndex' AS `code`, 'core:miniProgram:templateMessage:index' AS `slug`, 'GET' AS `method`, 100 AS `sort`
  122. UNION ALL
  123. SELECT 'MiniProgramTemplateMessage', '设置模板消息', 'MiniProgramTemplateMessageUpdate', 'core:miniProgram:templateMessage:update', 'PUT', 90
  124. UNION ALL
  125. SELECT 'MiniProgramShareSettings', '读取分享设置', 'MiniProgramShareSettingsIndex', 'core:miniProgram:shareSettings:index', 'GET', 100
  126. UNION ALL
  127. SELECT 'MiniProgramShareSettings', '设置分享内容', 'MiniProgramShareSettingsUpdate', 'core:miniProgram:shareSettings:update', 'PUT', 90
  128. UNION ALL
  129. SELECT 'MiniProgramDefaultSettings', '读取默认设置', 'MiniProgramDefaultSettingsIndex', 'core:miniProgram:defaultSettings:index', 'GET', 100
  130. UNION ALL
  131. SELECT 'MiniProgramDefaultSettings', '保存默认设置', 'MiniProgramDefaultSettingsUpdate', 'core:miniProgram:defaultSettings:update', 'PUT', 90
  132. ) permission_data ON permission_data.`parent_code` = parent_menu.`code`
  133. LEFT JOIN `sa_system_menu` existing_menu
  134. ON existing_menu.`slug` = permission_data.`slug` AND existing_menu.`delete_time` IS NULL
  135. WHERE parent_menu.`delete_time` IS NULL
  136. AND existing_menu.`id` IS NULL;
  137. -- 已拥有父菜单的角色自动获得新增接口权限。
  138. INSERT INTO `sa_system_role_menu` (`role_id`, `menu_id`)
  139. SELECT DISTINCT parent_role.`role_id`, permission_menu.`id`
  140. FROM `sa_system_role_menu` parent_role
  141. INNER JOIN `sa_system_menu` parent_menu
  142. ON parent_menu.`id` = parent_role.`menu_id`
  143. AND parent_menu.`code` IN ('MiniProgramTemplateMessage', 'MiniProgramShareSettings', 'MiniProgramDefaultSettings')
  144. AND parent_menu.`delete_time` IS NULL
  145. INNER JOIN `sa_system_menu` permission_menu
  146. ON permission_menu.`parent_id` = parent_menu.`id`
  147. AND permission_menu.`type` = 3
  148. AND permission_menu.`delete_time` IS NULL
  149. LEFT JOIN `sa_system_role_menu` existing_role
  150. ON existing_role.`role_id` = parent_role.`role_id`
  151. AND existing_role.`menu_id` = permission_menu.`id`
  152. WHERE existing_role.`id` IS NULL;