feat(app): add app category management and package repository with apk parsing
新增应用分类管理(MongoDB CRUD + 图标上传)和应用安装包资源库(上传/分页/详情/删除),集成apk-parser自动解析APK元数据(包名、版本、权限、CPU架构、图标),并添加对应的SQL菜单初始化脚本与授权配置。
This commit is contained in:
29
docs/sql/app_category_menu.sql
Normal file
29
docs/sql/app_category_menu.sql
Normal file
@@ -0,0 +1,29 @@
|
||||
-- ============================================================
|
||||
-- 应用分类管理 菜单初始化(幂等,可重复执行)
|
||||
-- ------------------------------------------------------------
|
||||
-- 说明:
|
||||
-- 挂在「应用管理」目录(/app-manager)下,新增「分类管理」菜单。
|
||||
-- 页面路径:app-manager/category/index
|
||||
-- ============================================================
|
||||
|
||||
SET @parent_id = (SELECT id FROM sys_menu WHERE route_path = '/app-manager' AND type = 'C' LIMIT 1);
|
||||
|
||||
INSERT INTO sys_menu
|
||||
(parent_id, tree_path, name, type, route_name, route_path, component,
|
||||
perm, always_show, keep_alive, visible, sort, icon, redirect,
|
||||
create_time, update_time, params)
|
||||
SELECT @parent_id,
|
||||
CONCAT('0,', @parent_id),
|
||||
'分类管理', 'M', 'AppCategory', 'category', 'app-manager/category/index',
|
||||
NULL, NULL, 1, 1, 2, 'menu', NULL,
|
||||
now(), now(), NULL
|
||||
FROM DUAL
|
||||
WHERE @parent_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE component = 'app-manager/category/index');
|
||||
|
||||
-- 授权给 ADMIN 角色(role_id=2,如实际不同请修改)
|
||||
SET @menu_id = (SELECT id FROM sys_menu WHERE component = 'app-manager/category/index' LIMIT 1);
|
||||
INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT 2, @menu_id
|
||||
FROM DUAL
|
||||
WHERE @menu_id IS NOT NULL;
|
||||
56
docs/sql/app_manager_menu.sql
Normal file
56
docs/sql/app_manager_menu.sql
Normal file
@@ -0,0 +1,56 @@
|
||||
-- ============================================================
|
||||
-- 应用管理 / 应用上传 菜单修复与初始化(幂等,可重复执行)
|
||||
-- ------------------------------------------------------------
|
||||
-- 说明:
|
||||
-- 本项目使用 vue3-element-admin,后端动态菜单约定:
|
||||
-- - 目录(type='C')的 component 必须是 'Layout'(顶层目录必须有 Layout 壳),
|
||||
-- 否则 transformRoutes 不会包裹 Layout,点击进入页面会白屏/一直 loading。
|
||||
-- - 菜单(type='M')的 component 才是页面路径,如 'app-manager/upload-package/index'。
|
||||
--
|
||||
-- 本脚本:
|
||||
-- 1. 修正「应用管理」目录 (route_path=/app-manager) 的 component = 'Layout'(关键修复白屏)。
|
||||
-- 2. 确保「应用上传」菜单存在且 component 指向正确页面。
|
||||
-- 3. 授权给 ADMIN 角色 (role_id=2,如不同请改)。
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 修正「应用管理」目录(无论是否已存在,都强制 component='Layout')
|
||||
INSERT INTO sys_menu
|
||||
(parent_id, tree_path, name, type, route_name, route_path, component,
|
||||
perm, always_show, keep_alive, visible, sort, icon, redirect,
|
||||
create_time, update_time, params)
|
||||
SELECT 0, '0', '应用管理', 'C', '', '/app-manager', 'Layout',
|
||||
NULL, 1, NULL, 1, 3, 'box', '/app-manager/upload-package',
|
||||
now(), now(), NULL
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE route_path = '/app-manager' AND type = 'C');
|
||||
|
||||
-- 把已存在但 component 不是 Layout 的「应用管理」目录修正为 Layout(关键)
|
||||
UPDATE sys_menu
|
||||
SET component = 'Layout',
|
||||
always_show = 1,
|
||||
redirect = '/app-manager/upload-package',
|
||||
update_time = now()
|
||||
WHERE route_path = '/app-manager' AND type = 'C' AND component <> 'Layout';
|
||||
|
||||
-- 2. 确保「应用上传」菜单存在(挂在应用管理目录下)
|
||||
SET @parent_id = (SELECT id FROM sys_menu WHERE route_path = '/app-manager' AND type = 'C' LIMIT 1);
|
||||
|
||||
INSERT INTO sys_menu
|
||||
(parent_id, tree_path, name, type, route_name, route_path, component,
|
||||
perm, always_show, keep_alive, visible, sort, icon, redirect,
|
||||
create_time, update_time, params)
|
||||
SELECT @parent_id,
|
||||
CONCAT('0,', @parent_id),
|
||||
'应用上传', 'M', 'UploadPackage', 'upload-package', 'app-manager/upload-package/index',
|
||||
NULL, NULL, 1, 1, 1, 'upload', NULL,
|
||||
now(), now(), NULL
|
||||
FROM DUAL
|
||||
WHERE @parent_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE component = 'app-manager/upload-package/index');
|
||||
|
||||
-- 3. 授权给 ADMIN 角色(role_id=2,如实际不同请修改)
|
||||
SET @menu_id = (SELECT id FROM sys_menu WHERE component = 'app-manager/upload-package/index' LIMIT 1);
|
||||
INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT 2, @menu_id
|
||||
FROM DUAL
|
||||
WHERE @menu_id IS NOT NULL;
|
||||
55
docs/sql/app_package_menu.sql
Normal file
55
docs/sql/app_package_menu.sql
Normal file
@@ -0,0 +1,55 @@
|
||||
-- ============================================================
|
||||
-- 应用安装包资源库 - 后台菜单与权限初始化脚本(可选)
|
||||
-- ------------------------------------------------------------
|
||||
-- 说明:
|
||||
-- 1. 前端路由已在 constantRoutes 中注册,应用列表页面可直接通过
|
||||
-- /#/app/package 访问,无需执行本脚本也能使用上传/列表功能。
|
||||
-- 2. 本脚本仅用于在【后台管理 -> 系统管理 -> 菜单管理】侧边栏中
|
||||
-- 展示“应用列表”入口,并将权限授予所有角色。
|
||||
-- 3. 请在执行前确认第 1 步查询出的父目录(通常为“设备”目录)的 ID,
|
||||
-- 若父目录 route_path 不为 'devices',请修改下面的 @parent_id 取值条件。
|
||||
-- 4. 本脚本仅 INSERT,可重复执行(已包含存在性判断)。
|
||||
-- ============================================================
|
||||
|
||||
-- 0. 变量:自动定位“设备”目录作为父级(如实际父目录不同请修改条件)
|
||||
SET @parent_id = (SELECT id FROM sys_menu WHERE type = 'C' AND route_path = 'devices' LIMIT 1);
|
||||
-- 若未找到设备目录,则挂到根目录(id=0)
|
||||
SET @parent_id = IFNULL(@parent_id, 0);
|
||||
|
||||
-- 1. 插入“应用列表”菜单(作为设备目录下的子菜单)
|
||||
INSERT INTO sys_menu
|
||||
(parent_id, name, type, route_name, route_path, component, perm, visible, sort, icon, redirect, tree_path, keep_alive, always_show, create_time, update_time)
|
||||
SELECT
|
||||
@parent_id,
|
||||
'应用列表',
|
||||
'M',
|
||||
'AppPackage',
|
||||
'app/package',
|
||||
'app/package/index',
|
||||
'app:package:list',
|
||||
1,
|
||||
100,
|
||||
'box',
|
||||
NULL,
|
||||
CONCAT(IF(@parent_id = 0, '', CONCAT(@parent_id, ',')), 'APP_PACKAGE_PLACEHOLDER'),
|
||||
1,
|
||||
0,
|
||||
NOW(),
|
||||
NOW()
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM sys_menu WHERE route_name = 'AppPackage' AND route_path = 'app/package'
|
||||
);
|
||||
|
||||
-- 更新 tree_path(去掉占位并写入真实自增 id)
|
||||
SET @menu_id = (SELECT id FROM sys_menu WHERE route_name = 'AppPackage' AND route_path = 'app/package' LIMIT 1);
|
||||
UPDATE sys_menu
|
||||
SET tree_path = IF(@parent_id = 0, CONCAT(@menu_id, ','), CONCAT(@parent_id, ',', @menu_id, ','))
|
||||
WHERE id = @menu_id;
|
||||
|
||||
-- 2. 将“应用列表”菜单权限授予所有角色
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT r.id, @menu_id
|
||||
FROM sys_role r
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.id AND rm.menu_id = @menu_id
|
||||
);
|
||||
Reference in New Issue
Block a user