Files
1818web-hoduan/fix_wechat_menu_data.sql
2025-11-14 17:41:15 +08:00

143 lines
4.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ================================================
-- 微信菜单数据修复脚本
-- ================================================
-- 此脚本用于检查和修复数据库中的无效微信菜单数据
-- ------------------------------------------------
-- 1. 检查所有可能有问题的菜单数据
-- ------------------------------------------------
-- 检查 view 类型但 URL 为空的菜单
SELECT
id,
menu_name AS '菜单名称',
menu_type AS '类型',
menu_url AS 'URL',
menu_key AS 'Key',
parent_id AS '父菜单ID',
'问题view类型缺少URL' AS '问题描述'
FROM wechat_menu
WHERE menu_type = 'view'
AND (menu_url IS NULL OR menu_url = '')
AND is_enabled = 1;
-- 检查 click 类型但 Key 为空的菜单
SELECT
id,
menu_name AS '菜单名称',
menu_type AS '类型',
menu_key AS 'Key',
parent_id AS '父菜单ID',
'问题click类型缺少Key' AS '问题描述'
FROM wechat_menu
WHERE menu_type = 'click'
AND (menu_key IS NULL OR menu_key = '')
AND is_enabled = 1;
-- 检查 miniprogram 类型但缺少必要字段的菜单
SELECT
id,
menu_name AS '菜单名称',
menu_type AS '类型',
menu_url AS 'URL',
appid AS 'AppID',
pagepath AS 'PagePath',
parent_id AS '父菜单ID',
'问题miniprogram类型缺少必要字段' AS '问题描述'
FROM wechat_menu
WHERE menu_type = 'miniprogram'
AND (menu_url IS NULL OR menu_url = ''
OR appid IS NULL OR appid = ''
OR pagepath IS NULL OR pagepath = '')
AND is_enabled = 1;
-- ------------------------------------------------
-- 2. 修复方案(请根据实际情况选择执行)
-- ------------------------------------------------
-- 方案A禁用所有无效的菜单推荐不会删除数据
-- 禁用 view 类型但 URL 为空的菜单
UPDATE wechat_menu
SET is_enabled = 0,
description = CONCAT(IFNULL(description, ''), ' [自动禁用缺少URL]')
WHERE menu_type = 'view'
AND (menu_url IS NULL OR menu_url = '')
AND is_enabled = 1;
-- 禁用 click 类型但 Key 为空的菜单
UPDATE wechat_menu
SET is_enabled = 0,
description = CONCAT(IFNULL(description, ''), ' [自动禁用缺少Key]')
WHERE menu_type = 'click'
AND (menu_key IS NULL OR menu_key = '')
AND is_enabled = 1;
-- 禁用 miniprogram 类型但缺少必要字段的菜单
UPDATE wechat_menu
SET is_enabled = 0,
description = CONCAT(IFNULL(description, ''), ' [自动禁用:缺少必要字段]')
WHERE menu_type = 'miniprogram'
AND (menu_url IS NULL OR menu_url = ''
OR appid IS NULL OR appid = ''
OR pagepath IS NULL OR pagepath = '')
AND is_enabled = 1;
-- ------------------------------------------------
-- 方案B手动修复特定菜单示例
-- ------------------------------------------------
-- 如果您想保留 "首页" 菜单可以为其添加URL
-- UPDATE wechat_menu
-- SET menu_url = 'https://your-website.com'
-- WHERE menu_name = '首页' AND menu_type = 'view';
-- 如果您想保留 "帮助中心" 菜单可以为其添加URL
-- UPDATE wechat_menu
-- SET menu_url = 'https://your-website.com/help'
-- WHERE menu_name = '帮助中心' AND menu_type = 'view';
-- 或者,如果您想将这些菜单改为 click 类型:
-- UPDATE wechat_menu
-- SET menu_type = 'click', menu_key = 'MENU_HOME', menu_url = NULL
-- WHERE menu_name = '首页';
-- ------------------------------------------------
-- 方案C删除无效菜单慎用
-- ------------------------------------------------
-- 如果您确定要删除这些无效菜单,取消下面的注释
-- DELETE FROM wechat_menu
-- WHERE menu_type = 'view'
-- AND (menu_url IS NULL OR menu_url = '')
-- AND is_enabled = 1;
-- ------------------------------------------------
-- 3. 修复后验证
-- ------------------------------------------------
-- 查看所有启用的菜单
SELECT
id,
parent_id,
menu_name,
menu_type,
menu_key,
menu_url,
is_enabled,
sort_order
FROM wechat_menu
WHERE is_enabled = 1
ORDER BY parent_id ASC, sort_order ASC;
-- 统计菜单数量
SELECT
is_enabled,
COUNT(*) as count,
CASE
WHEN is_enabled = 1 THEN '启用'
ELSE '禁用'
END as status
FROM wechat_menu
GROUP BY is_enabled;