后台菜单重构:菜单类型分组排序(软件在前/后台在后)、新增同类型末尾排序;任务中心分组移除,视频任务记录归入记录与版本、店铺数据记录归入店铺管理;界面名词优化(菜单权限配置/去重数据汇总/无效ASIN数据/视频任务记录/店铺数据记录/生成记录)
Build Backend JAR / build (push) Has been cancelled
Build Backend JAR / build (push) Has been cancelled
This commit is contained in:
+5
-5
@@ -49,15 +49,15 @@ public class PermissionMenuSchemaInitializer {
|
|||||||
|
|
||||||
private static final List<DefaultAdminMenu> DEFAULT_ADMIN_MENUS = List.of(
|
private static final List<DefaultAdminMenu> DEFAULT_ADMIN_MENUS = List.of(
|
||||||
new DefaultAdminMenu("用户管理", "admin_users", "users", 10),
|
new DefaultAdminMenu("用户管理", "admin_users", "users", 10),
|
||||||
new DefaultAdminMenu("栏目权限配置", "admin_columns", "columns", 20),
|
new DefaultAdminMenu("菜单权限配置", "admin_columns", "columns", 20),
|
||||||
new DefaultAdminMenu("数据去重总数据", "admin_dedupe_total_data", "dedupe-total-data", 30),
|
new DefaultAdminMenu("去重数据汇总", "admin_dedupe_total_data", "dedupe-total-data", 30),
|
||||||
new DefaultAdminMenu("不符合ASIN数据", "admin_invalid_asin_data", "invalid-asin-data", 35),
|
new DefaultAdminMenu("无效ASIN数据", "admin_invalid_asin_data", "invalid-asin-data", 35),
|
||||||
new DefaultAdminMenu("店铺密钥管理", "admin_shop_keys", "shop-keys", 40),
|
new DefaultAdminMenu("店铺密钥管理", "admin_shop_keys", "shop-keys", 40),
|
||||||
new DefaultAdminMenu("店铺管理", "admin_shop_manage", "shop-manage", 50),
|
new DefaultAdminMenu("店铺管理", "admin_shop_manage", "shop-manage", 50),
|
||||||
new DefaultAdminMenu("跳过跟价ASIN", "admin_skip_price_asin", "skip-price-asin", 60),
|
new DefaultAdminMenu("跳过跟价ASIN", "admin_skip_price_asin", "skip-price-asin", 60),
|
||||||
new DefaultAdminMenu("查询ASIN", "admin_query_asin", "query-asin", 65),
|
new DefaultAdminMenu("查询ASIN", "admin_query_asin", "query-asin", 65),
|
||||||
new DefaultAdminMenu("商品类目", "admin_product_categories", "product-categories", 66),
|
new DefaultAdminMenu("商品类目", "admin_product_categories", "product-categories", 66),
|
||||||
new DefaultAdminMenu("查看生成记录", "admin_history", "history", 70),
|
new DefaultAdminMenu("生成记录", "admin_history", "history", 70),
|
||||||
new DefaultAdminMenu("软件版本管理", "admin_version", "version", 80),
|
new DefaultAdminMenu("软件版本管理", "admin_version", "version", 80),
|
||||||
new DefaultAdminMenu("数字人版本管理", "digital_human_version", "digital-human-version", 81)
|
new DefaultAdminMenu("数字人版本管理", "digital_human_version", "digital-human-version", 81)
|
||||||
);
|
);
|
||||||
@@ -179,7 +179,7 @@ public class PermissionMenuSchemaInitializer {
|
|||||||
private boolean ensureShopDataCrawlAdminDefaults() {
|
private boolean ensureShopDataCrawlAdminDefaults() {
|
||||||
executeQuietly("""
|
executeQuietly("""
|
||||||
INSERT INTO columns (name, column_key, menu_type, route_path, sort_order)
|
INSERT INTO columns (name, column_key, menu_type, route_path, sort_order)
|
||||||
SELECT '店铺数据任务管理', 'admin_shop_data_crawl_tasks', 'admin', 'shop-data-crawl-tasks', 82
|
SELECT '店铺数据记录', 'admin_shop_data_crawl_tasks', 'admin', 'shop-data-crawl-tasks', 82
|
||||||
WHERE NOT EXISTS (
|
WHERE NOT EXISTS (
|
||||||
SELECT 1 FROM columns WHERE column_key = 'admin_shop_data_crawl_tasks'
|
SELECT 1 FROM columns WHERE column_key = 'admin_shop_data_crawl_tasks'
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-3
@@ -73,7 +73,7 @@ public class PermissionMenuService {
|
|||||||
String name = normalizeRequired(request.getName(), "菜单名称不能为空");
|
String name = normalizeRequired(request.getName(), "菜单名称不能为空");
|
||||||
String columnKey = normalizeRequired(request.getColumnKey(), "菜单标识不能为空");
|
String columnKey = normalizeRequired(request.getColumnKey(), "菜单标识不能为空");
|
||||||
String menuType = normalizeMenuTypeRequired(request.getMenuType());
|
String menuType = normalizeMenuTypeRequired(request.getMenuType());
|
||||||
String routePath = normalizeRequired(request.getRoutePath(), "菜单路由不能为空");
|
String routePath = normalizeRequired(request.getRoutePath(), "页面路径不能为空");
|
||||||
Long parentId = normalizeParentId(request.getParentId());
|
Long parentId = normalizeParentId(request.getParentId());
|
||||||
ensureParentValid(parentId, null, menuType);
|
ensureParentValid(parentId, null, menuType);
|
||||||
ensureUniqueColumnKey(columnKey, null);
|
ensureUniqueColumnKey(columnKey, null);
|
||||||
@@ -106,7 +106,7 @@ public class PermissionMenuService {
|
|||||||
String name = normalizeRequired(request.getName(), "菜单名称不能为空");
|
String name = normalizeRequired(request.getName(), "菜单名称不能为空");
|
||||||
String columnKey = normalizeRequired(request.getColumnKey(), "菜单标识不能为空");
|
String columnKey = normalizeRequired(request.getColumnKey(), "菜单标识不能为空");
|
||||||
String menuType = normalizeMenuTypeRequired(request.getMenuType());
|
String menuType = normalizeMenuTypeRequired(request.getMenuType());
|
||||||
String routePath = normalizeRequired(request.getRoutePath(), "菜单路由不能为空");
|
String routePath = normalizeRequired(request.getRoutePath(), "页面路径不能为空");
|
||||||
Long parentId = normalizeParentId(request.getParentId());
|
Long parentId = normalizeParentId(request.getParentId());
|
||||||
ensureParentValid(parentId, id, menuType);
|
ensureParentValid(parentId, id, menuType);
|
||||||
ensureMenuTypeChangeAllowed(entity, menuType);
|
ensureMenuTypeChangeAllowed(entity, menuType);
|
||||||
@@ -706,7 +706,7 @@ public class PermissionMenuService {
|
|||||||
.eq(PermissionMenuEntity::getRoutePath, routePath)
|
.eq(PermissionMenuEntity::getRoutePath, routePath)
|
||||||
.last("LIMIT 1"));
|
.last("LIMIT 1"));
|
||||||
if (exists != null && (excludeId == null || !excludeId.equals(exists.getId()))) {
|
if (exists != null && (excludeId == null || !excludeId.equals(exists.getId()))) {
|
||||||
throw new BusinessException("同一菜单类型下的菜单路由已存在");
|
throw new BusinessException("同一菜单类型下的页面路径已存在");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
-- V97: 后台管理菜单显示名改为用户易理解的命名
|
||||||
|
-- 只更新 admin 类型菜单的 name 显示名,column_key / route_path 保持不变,
|
||||||
|
-- 所有权限校验、前端分组路由、面板加载逻辑均按 route_path 匹配,不受影响。
|
||||||
|
-- 对应前端静态文案见 backend/static/admin.js 与 backend/web_source/admin.html。
|
||||||
|
|
||||||
|
-- 栏目权限配置 -> 菜单权限配置
|
||||||
|
UPDATE `columns` SET `name` = '菜单权限配置'
|
||||||
|
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_columns';
|
||||||
|
|
||||||
|
-- 数据去重总数据 -> 去重数据汇总
|
||||||
|
UPDATE `columns` SET `name` = '去重数据汇总'
|
||||||
|
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_dedupe_total_data';
|
||||||
|
|
||||||
|
-- 不符合ASIN数据 -> 无效ASIN数据
|
||||||
|
UPDATE `columns` SET `name` = '无效ASIN数据'
|
||||||
|
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_invalid_asin_data';
|
||||||
|
|
||||||
|
-- 视频任务管理 -> 视频任务记录
|
||||||
|
UPDATE `columns` SET `name` = '视频任务记录'
|
||||||
|
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_image_video_tasks';
|
||||||
|
|
||||||
|
-- 店铺数据任务管理 -> 店铺数据记录
|
||||||
|
UPDATE `columns` SET `name` = '店铺数据记录'
|
||||||
|
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_shop_data_crawl_tasks';
|
||||||
|
|
||||||
|
-- 查看生成记录 -> 生成记录
|
||||||
|
UPDATE `columns` SET `name` = '生成记录'
|
||||||
|
WHERE `menu_type` = 'admin' AND `column_key` = 'admin_history';
|
||||||
+49
@@ -584,6 +584,55 @@ class PermissionMenuServiceTest {
|
|||||||
assertThat(inserted.getValue().getColumnId()).isEqualTo(76L);
|
assertThat(inserted.getValue().getColumnId()).isEqualTo(76L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void fullCatalogOrdersAppMenusBeforeAdminMenus() {
|
||||||
|
PermissionMenuMapper menuMapper = mock(PermissionMenuMapper.class);
|
||||||
|
UserColumnPermissionMapper permissionMapper = mock(UserColumnPermissionMapper.class);
|
||||||
|
AdminUserMapper userMapper = mock(AdminUserMapper.class);
|
||||||
|
PermissionMenuService service = new PermissionMenuService(menuMapper, permissionMapper, userMapper);
|
||||||
|
|
||||||
|
// 全量目录:app/admin 交错出现,且各自 sort_order 交叉。期望先按类型分组
|
||||||
|
// (app 在 admin 之前),组内再按 sort_order 升序。
|
||||||
|
when(menuMapper.selectList(any())).thenReturn(List.of(
|
||||||
|
menu(11L, null, "admin", 20),
|
||||||
|
menu(21L, null, "app", 120),
|
||||||
|
menu(12L, null, "admin", 10),
|
||||||
|
menu(22L, null, "app", 110)));
|
||||||
|
|
||||||
|
List<PermissionMenuItemVo> result = service.list(null);
|
||||||
|
|
||||||
|
assertThat(result).extracting(PermissionMenuItemVo::getId)
|
||||||
|
.containsExactly(22L, 21L, 12L, 11L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void createWithoutSortOrderAppendsWithinSameMenuType() {
|
||||||
|
PermissionMenuMapper menuMapper = mock(PermissionMenuMapper.class);
|
||||||
|
UserColumnPermissionMapper permissionMapper = mock(UserColumnPermissionMapper.class);
|
||||||
|
AdminUserMapper userMapper = mock(AdminUserMapper.class);
|
||||||
|
PermissionMenuService service = new PermissionMenuService(menuMapper, permissionMapper, userMapper);
|
||||||
|
|
||||||
|
// create 内部依次用 selectOne 做唯一性校验(column_key、route_path),
|
||||||
|
// 最后 resolveSortOrder 取同类型尾项(admin 最后一个 sort_order = 134)。
|
||||||
|
PermissionMenuEntity adminTail = menu(9L, null, "admin", 134);
|
||||||
|
adminTail.setName("admin tail");
|
||||||
|
when(menuMapper.selectOne(any())).thenReturn(null, null, adminTail);
|
||||||
|
// create 成功后 getMenuById(insert 未回填的 id) 会走 selectById
|
||||||
|
when(menuMapper.selectById(any())).thenReturn(adminTail);
|
||||||
|
|
||||||
|
PermissionMenuCreateRequest request = createRequest(null, "admin");
|
||||||
|
request.setName("新菜单");
|
||||||
|
request.setColumnKey("new_admin_menu");
|
||||||
|
request.setRoutePath("new-admin-menu");
|
||||||
|
|
||||||
|
service.create(request);
|
||||||
|
|
||||||
|
ArgumentCaptor<PermissionMenuEntity> inserted = ArgumentCaptor.forClass(PermissionMenuEntity.class);
|
||||||
|
verify(menuMapper).insert(inserted.capture());
|
||||||
|
assertThat(inserted.getValue().getSortOrder()).isEqualTo(135);
|
||||||
|
assertThat(inserted.getValue().getMenuType()).isEqualTo("admin");
|
||||||
|
}
|
||||||
|
|
||||||
private PermissionMenuCreateRequest createRequest(Long parentId, String menuType) {
|
private PermissionMenuCreateRequest createRequest(Long parentId, String menuType) {
|
||||||
PermissionMenuCreateRequest request = new PermissionMenuCreateRequest();
|
PermissionMenuCreateRequest request = new PermissionMenuCreateRequest();
|
||||||
request.setName("child");
|
request.setName("child");
|
||||||
|
|||||||
@@ -87,17 +87,17 @@ ADMIN_MENU_ACCESS_CONFIG = {
|
|||||||
'invalid-asin-data': {
|
'invalid-asin-data': {
|
||||||
'column_key': 'admin_invalid_asin_data',
|
'column_key': 'admin_invalid_asin_data',
|
||||||
'route_path': 'invalid-asin-data',
|
'route_path': 'invalid-asin-data',
|
||||||
'error': '无权访问不符合ASIN数据模块',
|
'error': '无权访问无效ASIN数据模块',
|
||||||
},
|
},
|
||||||
'image-video-tasks': {
|
'image-video-tasks': {
|
||||||
'column_key': 'admin_image_video_tasks',
|
'column_key': 'admin_image_video_tasks',
|
||||||
'route_path': 'image-video-tasks',
|
'route_path': 'image-video-tasks',
|
||||||
'error': '无权访问视频任务管理模块',
|
'error': '无权访问视频任务记录模块',
|
||||||
},
|
},
|
||||||
'shop-data-crawl-tasks': {
|
'shop-data-crawl-tasks': {
|
||||||
'column_key': 'admin_shop_data_crawl_tasks',
|
'column_key': 'admin_shop_data_crawl_tasks',
|
||||||
'route_path': 'shop-data-crawl-tasks',
|
'route_path': 'shop-data-crawl-tasks',
|
||||||
'error': '无权访问店铺数据任务管理模块',
|
'error': '无权访问店铺数据记录模块',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ ADMIN_MENU_ACCESS_CONFIG.update({
|
|||||||
'columns': {
|
'columns': {
|
||||||
'column_key': 'admin_columns',
|
'column_key': 'admin_columns',
|
||||||
'route_path': 'columns',
|
'route_path': 'columns',
|
||||||
'error': '无权访问栏目权限配置模块',
|
'error': '无权访问菜单权限配置模块',
|
||||||
},
|
},
|
||||||
'shop-keys': {
|
'shop-keys': {
|
||||||
'column_key': 'admin_shop_keys',
|
'column_key': 'admin_shop_keys',
|
||||||
@@ -120,7 +120,7 @@ ADMIN_MENU_ACCESS_CONFIG.update({
|
|||||||
'history': {
|
'history': {
|
||||||
'column_key': 'admin_history',
|
'column_key': 'admin_history',
|
||||||
'route_path': 'history',
|
'route_path': 'history',
|
||||||
'error': '无权访问查看生成记录模块',
|
'error': '无权访问生成记录模块',
|
||||||
},
|
},
|
||||||
'version': {
|
'version': {
|
||||||
'column_key': 'admin_version',
|
'column_key': 'admin_version',
|
||||||
@@ -1506,7 +1506,7 @@ def manage_shop_data_crawl_task_permissions():
|
|||||||
return jsonify({
|
return jsonify({
|
||||||
'success': True,
|
'success': True,
|
||||||
'granted_count': result.get('data'),
|
'granted_count': result.get('data'),
|
||||||
'msg': result.get('message') or '店铺数据任务权限已更新',
|
'msg': result.get('message') or '店铺数据记录权限已更新',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -1858,7 +1858,7 @@ def manage_image_video_task_permissions():
|
|||||||
return jsonify({
|
return jsonify({
|
||||||
'success': True,
|
'success': True,
|
||||||
'granted_count': result.get('data'),
|
'granted_count': result.get('data'),
|
||||||
'msg': result.get('message') or '视频任务权限已更新',
|
'msg': result.get('message') or '视频任务记录权限已更新',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -2110,9 +2110,9 @@ def create_column():
|
|||||||
if not name:
|
if not name:
|
||||||
return jsonify({'success': False, 'error': '栏目名不能为空'})
|
return jsonify({'success': False, 'error': '栏目名不能为空'})
|
||||||
if not column_key:
|
if not column_key:
|
||||||
return jsonify({'success': False, 'error': '栏目标识不能为空'})
|
return jsonify({'success': False, 'error': '菜单标识不能为空'})
|
||||||
if not route_path:
|
if not route_path:
|
||||||
return jsonify({'success': False, 'error': '菜单路由不能为空'})
|
return jsonify({'success': False, 'error': '页面路径不能为空'})
|
||||||
result, error_response, status = _proxy_permission_java(
|
result, error_response, status = _proxy_permission_java(
|
||||||
'POST',
|
'POST',
|
||||||
'/api/admin/permission-menus',
|
'/api/admin/permission-menus',
|
||||||
@@ -2156,9 +2156,9 @@ def update_column(cid):
|
|||||||
if not name:
|
if not name:
|
||||||
return jsonify({'success': False, 'error': '栏目名不能为空'})
|
return jsonify({'success': False, 'error': '栏目名不能为空'})
|
||||||
if not column_key:
|
if not column_key:
|
||||||
return jsonify({'success': False, 'error': '栏目标识不能为空'})
|
return jsonify({'success': False, 'error': '菜单标识不能为空'})
|
||||||
if not route_path:
|
if not route_path:
|
||||||
return jsonify({'success': False, 'error': '菜单路由不能为空'})
|
return jsonify({'success': False, 'error': '页面路径不能为空'})
|
||||||
result, error_response, status = _proxy_permission_java(
|
result, error_response, status = _proxy_permission_java(
|
||||||
'PUT',
|
'PUT',
|
||||||
f'/api/admin/permission-menus/{cid}',
|
f'/api/admin/permission-menus/{cid}',
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
var guides = {
|
var guides = {
|
||||||
users: { text: '先用筛选定位账号,再编辑角色和菜单权限;删除账号会要求二次确认。', steps: ['筛选账号', '编辑权限', '确认保存'] },
|
users: { text: '先用筛选定位账号,再编辑角色和菜单权限;删除账号会要求二次确认。', steps: ['筛选账号', '编辑权限', '确认保存'] },
|
||||||
columns: { text: '菜单会影响后台和软件端的可见范围。建议先填写名称、标识和路由,再设置父菜单。', steps: ['新增或调整菜单', '设置层级', '检查权限'] },
|
columns: { text: '菜单会影响后台和软件端的可见范围。建议先填写名称、标识和页面路径,再设置上级菜单。', steps: ['新增或调整菜单', '设置层级', '检查权限'] },
|
||||||
'dedupe-total-data': { text: '支持按关键词、用户、分组和国家筛选;导入前先确认所选分组,导出会按日期范围生成文件。', steps: ['选择分组', '筛选或导入', '核对并导出'] },
|
'dedupe-total-data': { text: '支持按关键词、用户、分组和国家筛选;导入前先确认所选分组,导出会按日期范围生成文件。', steps: ['选择分组', '筛选或导入', '核对并导出'] },
|
||||||
'invalid-asin-data': { text: '维护不符合规则的 ASIN 或品牌。添加后可使用上方筛选快速回查。', steps: ['填写 ASIN/品牌', '选择分组', '保存并回查'] },
|
'invalid-asin-data': { text: '维护不符合规则的 ASIN 或品牌。添加后可使用上方筛选快速回查。', steps: ['填写 ASIN/品牌', '选择分组', '保存并回查'] },
|
||||||
'shop-keys': { text: '紫鸟令牌属于敏感配置。白名单状态可悬停查看检测详情,编辑前请先核对账号名称。', steps: ['新增或筛选密钥', '查看白名单状态', '编辑或删除'] },
|
'shop-keys': { text: '紫鸟令牌属于敏感配置。白名单状态可悬停查看检测详情,编辑前请先核对账号名称。', steps: ['新增或筛选密钥', '查看白名单状态', '编辑或删除'] },
|
||||||
|
|||||||
@@ -97,9 +97,8 @@
|
|||||||
var ADMIN_MENU_GROUPS = [
|
var ADMIN_MENU_GROUPS = [
|
||||||
{ key: 'account', title: '账号与权限', items: ['users', 'columns'] },
|
{ key: 'account', title: '账号与权限', items: ['users', 'columns'] },
|
||||||
{ key: 'data', title: '数据管理', items: ['dedupe-total-data', 'invalid-asin-data', 'query-asin', 'product-categories'] },
|
{ key: 'data', title: '数据管理', items: ['dedupe-total-data', 'invalid-asin-data', 'query-asin', 'product-categories'] },
|
||||||
{ key: 'shop', title: '店铺管理', items: ['shop-keys', 'shop-manage', 'skip-price-asin'] },
|
{ key: 'shop', title: '店铺管理', items: ['shop-keys', 'shop-manage', 'skip-price-asin', 'shop-data-crawl-tasks'] },
|
||||||
{ key: 'tasks', title: '任务中心', items: ['image-video-tasks', 'shop-data-crawl-tasks'] },
|
{ key: 'record', title: '记录与版本', items: ['history', 'version', 'digital-human-version', 'image-video-tasks'] }
|
||||||
{ key: 'record', title: '记录与版本', items: ['history', 'version', 'digital-human-version'] }
|
|
||||||
];
|
];
|
||||||
var ADMIN_MENU_ICONS = {
|
var ADMIN_MENU_ICONS = {
|
||||||
'users': '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>',
|
'users': '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>',
|
||||||
@@ -831,7 +830,7 @@
|
|||||||
var menuType = typeSelect ? (typeSelect.value || 'app') : 'app';
|
var menuType = typeSelect ? (typeSelect.value || 'app') : 'app';
|
||||||
var editingId = selectId === 'editColumnParentId' ? Number(document.getElementById('editColumnId').value || 0) : 0;
|
var editingId = selectId === 'editColumnParentId' ? Number(document.getElementById('editColumnId').value || 0) : 0;
|
||||||
var blockedIds = editingId > 0 ? [editingId].concat(columnDescendantIds(editingId)) : [];
|
var blockedIds = editingId > 0 ? [editingId].concat(columnDescendantIds(editingId)) : [];
|
||||||
select.innerHTML = '<option value="">无(根菜单)</option>';
|
select.innerHTML = '<option value="">无(一级菜单)</option>';
|
||||||
allColumnsList.filter(function (item) {
|
allColumnsList.filter(function (item) {
|
||||||
return !item._structureOnly && String(item.menu_type || 'app') === String(menuType) && blockedIds.indexOf(columnId(item)) < 0;
|
return !item._structureOnly && String(item.menu_type || 'app') === String(menuType) && blockedIds.indexOf(columnId(item)) < 0;
|
||||||
}).forEach(function (item) {
|
}).forEach(function (item) {
|
||||||
@@ -5866,10 +5865,10 @@
|
|||||||
msgEl.className = 'msg';
|
msgEl.className = 'msg';
|
||||||
if (!name) { msgEl.textContent = '请填写菜单名称'; msgEl.classList.add('err'); return; }
|
if (!name) { msgEl.textContent = '请填写菜单名称'; msgEl.classList.add('err'); return; }
|
||||||
if (!key) {
|
if (!key) {
|
||||||
msgEl.textContent = '请填写栏目标识'; msgEl.classList.add('err'); return;
|
msgEl.textContent = '请填写菜单标识'; msgEl.classList.add('err'); return;
|
||||||
}
|
}
|
||||||
if (!routePath) {
|
if (!routePath) {
|
||||||
msgEl.textContent = '请填写菜单路由'; msgEl.classList.add('err'); return;
|
msgEl.textContent = '请填写页面路径'; msgEl.classList.add('err'); return;
|
||||||
}
|
}
|
||||||
if (sortOrderValue !== '' && isNaN(sortOrder)) {
|
if (sortOrderValue !== '' && isNaN(sortOrder)) {
|
||||||
msgEl.textContent = '排序必须是数字'; msgEl.classList.add('err'); return;
|
msgEl.textContent = '排序必须是数字'; msgEl.classList.add('err'); return;
|
||||||
@@ -5914,10 +5913,10 @@
|
|||||||
msgEl.className = 'msg';
|
msgEl.className = 'msg';
|
||||||
if (!name) { msgEl.textContent = '请填写菜单名称'; msgEl.classList.add('err'); return; }
|
if (!name) { msgEl.textContent = '请填写菜单名称'; msgEl.classList.add('err'); return; }
|
||||||
if (!key) {
|
if (!key) {
|
||||||
msgEl.textContent = '请填写栏目标识'; msgEl.classList.add('err'); return;
|
msgEl.textContent = '请填写菜单标识'; msgEl.classList.add('err'); return;
|
||||||
}
|
}
|
||||||
if (!routePath) {
|
if (!routePath) {
|
||||||
msgEl.textContent = '请填写菜单路由'; msgEl.classList.add('err'); return;
|
msgEl.textContent = '请填写页面路径'; msgEl.classList.add('err'); return;
|
||||||
}
|
}
|
||||||
if (sortOrderValue !== '' && isNaN(sortOrder)) {
|
if (sortOrderValue !== '' && isNaN(sortOrder)) {
|
||||||
msgEl.textContent = '排序必须是数字'; msgEl.classList.add('err'); return;
|
msgEl.textContent = '排序必须是数字'; msgEl.classList.add('err'); return;
|
||||||
|
|||||||
@@ -3877,7 +3877,7 @@
|
|||||||
</button>
|
</button>
|
||||||
<div class="menu-group-body">
|
<div class="menu-group-body">
|
||||||
<button class="tab active" type="button" data-tab="users" aria-current="page"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg></span><span class="adm-label">用户管理</span></button>
|
<button class="tab active" type="button" data-tab="users" aria-current="page"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg></span><span class="adm-label">用户管理</span></button>
|
||||||
<button class="tab" type="button" data-tab="columns" aria-controls="panel-columns"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="7" height="7" x="3" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="14" rx="1"></rect><rect width="7" height="7" x="3" y="14" rx="1"></rect></svg></span><span class="adm-label">栏目权限配置</span></button>
|
<button class="tab" type="button" data-tab="columns" aria-controls="panel-columns"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="7" height="7" x="3" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="14" rx="1"></rect><rect width="7" height="7" x="3" y="14" rx="1"></rect></svg></span><span class="adm-label">菜单权限配置</span></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="menu-group" data-menu-group="data">
|
<div class="menu-group" data-menu-group="data">
|
||||||
@@ -3886,8 +3886,8 @@
|
|||||||
<span class="menu-group-chevron" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></span>
|
<span class="menu-group-chevron" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="menu-group-body">
|
<div class="menu-group-body">
|
||||||
<button class="tab" type="button" data-tab="dedupe-total-data" aria-controls="panel-dedupe-total-data"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"></path><path d="m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"></path><path d="m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"></path></svg></span><span class="adm-label">数据去重总数据</span></button>
|
<button class="tab" type="button" data-tab="dedupe-total-data" aria-controls="panel-dedupe-total-data"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"></path><path d="m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"></path><path d="m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"></path></svg></span><span class="adm-label">去重数据汇总</span></button>
|
||||||
<button class="tab" type="button" data-tab="invalid-asin-data" aria-controls="panel-invalid-asin-data"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path><path d="M12 9v4"></path><path d="M12 17h.01"></path></svg></span><span class="adm-label">不符合ASIN数据</span></button>
|
<button class="tab" type="button" data-tab="invalid-asin-data" aria-controls="panel-invalid-asin-data"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path><path d="M12 9v4"></path><path d="M12 17h.01"></path></svg></span><span class="adm-label">无效ASIN数据</span></button>
|
||||||
<button class="tab" type="button" data-tab="query-asin" aria-controls="panel-query-asin"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg></span><span class="adm-label">查询 ASIN</span></button>
|
<button class="tab" type="button" data-tab="query-asin" aria-controls="panel-query-asin"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg></span><span class="adm-label">查询 ASIN</span></button>
|
||||||
<button class="tab" type="button" data-tab="product-categories" aria-controls="panel-product-categories"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg></span><span class="adm-label">商品类目</span></button>
|
<button class="tab" type="button" data-tab="product-categories" aria-controls="panel-product-categories"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg></span><span class="adm-label">商品类目</span></button>
|
||||||
</div>
|
</div>
|
||||||
@@ -3901,16 +3901,7 @@
|
|||||||
<button class="tab" type="button" data-tab="shop-keys" aria-controls="panel-shop-keys"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4"></path><path d="m21 2-9.6 9.6"></path><circle cx="7.5" cy="15.5" r="5.5"></circle></svg></span><span class="adm-label">店铺密钥管理</span></button>
|
<button class="tab" type="button" data-tab="shop-keys" aria-controls="panel-shop-keys"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4"></path><path d="m21 2-9.6 9.6"></path><circle cx="7.5" cy="15.5" r="5.5"></circle></svg></span><span class="adm-label">店铺密钥管理</span></button>
|
||||||
<button class="tab" type="button" data-tab="shop-manage" aria-controls="panel-shop-manage"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7"></path><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"></path><path d="M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4"></path><path d="M2 7h20"></path><path d="M22 7v3a2 2 0 0 1-2 2 2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12a2 2 0 0 1-2-2V7"></path></svg></span><span class="adm-label">店铺管理</span></button>
|
<button class="tab" type="button" data-tab="shop-manage" aria-controls="panel-shop-manage"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7"></path><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"></path><path d="M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4"></path><path d="M2 7h20"></path><path d="M22 7v3a2 2 0 0 1-2 2 2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12a2 2 0 0 1-2-2V7"></path></svg></span><span class="adm-label">店铺管理</span></button>
|
||||||
<button class="tab" type="button" data-tab="skip-price-asin" aria-controls="panel-skip-price-asin"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m4.9 4.9 14.2 14.2"></path></svg></span><span class="adm-label">跳过跟价 ASIN</span></button>
|
<button class="tab" type="button" data-tab="skip-price-asin" aria-controls="panel-skip-price-asin"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m4.9 4.9 14.2 14.2"></path></svg></span><span class="adm-label">跳过跟价 ASIN</span></button>
|
||||||
</div>
|
<button class="tab" type="button" data-tab="shop-data-crawl-tasks" aria-controls="panel-shop-data-crawl-tasks"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5v14a9 3 0 0 0 18 0V5"></path><path d="M3 12a9 3 0 0 0 18 0"></path></svg></span><span class="adm-label">店铺数据记录</span></button>
|
||||||
</div>
|
|
||||||
<div class="menu-group" data-menu-group="tasks">
|
|
||||||
<button class="menu-group-title" type="button" aria-expanded="true">
|
|
||||||
任务中心
|
|
||||||
<span class="menu-group-chevron" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></span>
|
|
||||||
</button>
|
|
||||||
<div class="menu-group-body">
|
|
||||||
<button class="tab" type="button" data-tab="image-video-tasks" aria-controls="panel-image-video-tasks"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m22 8-6 4 6 4V8Z"></path><rect width="14" height="12" x="2" y="6" rx="2" ry="2"></rect></svg></span><span class="adm-label">视频任务</span></button>
|
|
||||||
<button class="tab" type="button" data-tab="shop-data-crawl-tasks" aria-controls="panel-shop-data-crawl-tasks"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5v14a9 3 0 0 0 18 0V5"></path><path d="M3 12a9 3 0 0 0 18 0"></path></svg></span><span class="adm-label">店铺数据任务</span></button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="menu-group" data-menu-group="record">
|
<div class="menu-group" data-menu-group="record">
|
||||||
@@ -3919,9 +3910,10 @@
|
|||||||
<span class="menu-group-chevron" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></span>
|
<span class="menu-group-chevron" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="menu-group-body">
|
<div class="menu-group-body">
|
||||||
<button class="tab" type="button" data-tab="history" aria-controls="panel-history"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path><path d="M12 7v5l4 2"></path></svg></span><span class="adm-label">查看生成记录</span></button>
|
<button class="tab" type="button" data-tab="history" aria-controls="panel-history"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path><path d="M12 7v5l4 2"></path></svg></span><span class="adm-label">生成记录</span></button>
|
||||||
<button class="tab" type="button" data-tab="version" aria-controls="panel-version"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m7.5 4.27 9 5.15"></path><path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"></path><path d="M3.3 7 12 12l8.7-5"></path><path d="M12 22V12"></path></svg></span><span class="adm-label">软件版本管理</span></button>
|
<button class="tab" type="button" data-tab="version" aria-controls="panel-version"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m7.5 4.27 9 5.15"></path><path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"></path><path d="M3.3 7 12 12l8.7-5"></path><path d="M12 22V12"></path></svg></span><span class="adm-label">软件版本管理</span></button>
|
||||||
<button class="tab" type="button" data-tab="digital-human-version" aria-controls="panel-digital-human-version"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg></span><span class="adm-label">数字人版本管理</span></button>
|
<button class="tab" type="button" data-tab="digital-human-version" aria-controls="panel-digital-human-version"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg></span><span class="adm-label">数字人版本管理</span></button>
|
||||||
|
<button class="tab" type="button" data-tab="image-video-tasks" aria-controls="panel-image-video-tasks"><span class="adm-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m22 8-6 4 6 4V8Z"></path><rect width="14" height="12" x="2" y="6" rx="2" ry="2"></rect></svg></span><span class="adm-label">视频任务记录</span></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -3989,7 +3981,7 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group" id="formGroupCreateColumns">
|
<div class="form-group" id="formGroupCreateColumns">
|
||||||
<label id="createColumnPermissionLabel">菜单权限(勾选父菜单会继承全部子菜单)</label>
|
<label id="createColumnPermissionLabel">菜单权限(勾选上级菜单会继承全部子菜单)</label>
|
||||||
<div id="createColumnCards" class="column-permission-cards"></div>
|
<div id="createColumnCards" class="column-permission-cards"></div>
|
||||||
<div id="createColumnPermissionWrap" class="column-permission-tree" role="group" aria-labelledby="createColumnPermissionLabel"></div>
|
<div id="createColumnPermissionWrap" class="column-permission-tree" role="group" aria-labelledby="createColumnPermissionLabel"></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -4042,11 +4034,11 @@
|
|||||||
<input type="text" id="columnName" placeholder="例如:店铺管理">
|
<input type="text" id="columnName" placeholder="例如:店铺管理">
|
||||||
</div>
|
</div>
|
||||||
<div class=" form-group" style="min-width:200px;">
|
<div class=" form-group" style="min-width:200px;">
|
||||||
<label>栏目标识</label>
|
<label>菜单标识</label>
|
||||||
<input type="text" id="columnKey" placeholder="例如:shop_manage">
|
<input type="text" id="columnKey" placeholder="例如:shop_manage">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group" style="min-width:220px;">
|
<div class="form-group" style="min-width:220px;">
|
||||||
<label>菜单路由</label>
|
<label>页面路径</label>
|
||||||
<input type="text" id="columnRoutePath" placeholder="例如:dedupe-total-data">
|
<input type="text" id="columnRoutePath" placeholder="例如:dedupe-total-data">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group" style="min-width:140px;">
|
<div class="form-group" style="min-width:140px;">
|
||||||
@@ -4061,26 +4053,26 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group" style="min-width:220px;">
|
<div class="form-group" style="min-width:220px;">
|
||||||
<label>父菜单(可选)</label>
|
<label>上级菜单(可选)</label>
|
||||||
<select id="columnParentId"><option value="">无(根菜单)</option></select>
|
<select id="columnParentId"><option value="">无(一级菜单)</option></select>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn" id="btnAddColumn">新增菜单</button>
|
<button class="btn" id="btnAddColumn">新增菜单</button>
|
||||||
</div>
|
</div>
|
||||||
<p class="msg" id="msgColumn"></p>
|
<p class="msg" id="msgColumn"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-box">
|
<div class="panel-box">
|
||||||
<h3 style="margin-bottom:16px;">栏目列表</h3>
|
<h3 style="margin-bottom:16px;">菜单列表</h3>
|
||||||
<div class="table-scroll columns-table-scroll">
|
<div class="table-scroll columns-table-scroll">
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>ID</th>
|
<th>ID</th>
|
||||||
<th>菜单名称</th>
|
<th>菜单名称</th>
|
||||||
<th>栏目标识</th>
|
<th>菜单标识</th>
|
||||||
<th>菜单类型</th>
|
<th>菜单类型</th>
|
||||||
<th>父菜单</th>
|
<th>上级菜单</th>
|
||||||
<th>排序</th>
|
<th>排序</th>
|
||||||
<th>菜单路由</th>
|
<th>页面路径</th>
|
||||||
<th>创建时间</th>
|
<th>创建时间</th>
|
||||||
<th>操作</th>
|
<th>操作</th>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -4310,7 +4302,7 @@
|
|||||||
<!-- 不符合ASIN数据 -->
|
<!-- 不符合ASIN数据 -->
|
||||||
<div id="panel-invalid-asin-data" class="tab-panel">
|
<div id="panel-invalid-asin-data" class="tab-panel">
|
||||||
<div class="form-box">
|
<div class="form-box">
|
||||||
<h3 style="margin-bottom:16px;">新增不符合ASIN数据</h3>
|
<h3 style="margin-bottom:16px;">新增无效ASIN数据</h3>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<div class="form-group" style="min-width:220px;">
|
<div class="form-group" style="min-width:220px;">
|
||||||
<label>ASIN</label>
|
<label>ASIN</label>
|
||||||
@@ -4334,7 +4326,7 @@
|
|||||||
<p class="msg" id="msgInvalidAsinData"></p>
|
<p class="msg" id="msgInvalidAsinData"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-box">
|
<div class="panel-box">
|
||||||
<h3 style="margin-bottom:16px;">不符合ASIN数据列表</h3>
|
<h3 style="margin-bottom:16px;">无效ASIN数据列表</h3>
|
||||||
<div class="form-row" style="margin-bottom:16px;">
|
<div class="form-row" style="margin-bottom:16px;">
|
||||||
<div class="form-group" style="min-width:220px;">
|
<div class="form-group" style="min-width:220px;">
|
||||||
<label>ASIN / 品牌(模糊搜索)</label>
|
<label>ASIN / 品牌(模糊搜索)</label>
|
||||||
@@ -4788,7 +4780,7 @@
|
|||||||
|
|
||||||
<div id="panel-image-video-tasks" class="tab-panel">
|
<div id="panel-image-video-tasks" class="tab-panel">
|
||||||
<div class="form-box">
|
<div class="form-box">
|
||||||
<h3 style="margin-bottom:16px;">视频任务筛选</h3>
|
<h3 style="margin-bottom:16px;">视频任务记录筛选</h3>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<div class="form-group" style="min-width:150px;"><label>用户名</label><input type="text"
|
<div class="form-group" style="min-width:150px;"><label>用户名</label><input type="text"
|
||||||
id="imageVideoFilterUsername" placeholder="模糊搜索"></div>
|
id="imageVideoFilterUsername" placeholder="模糊搜索"></div>
|
||||||
@@ -4830,7 +4822,7 @@
|
|||||||
|
|
||||||
<div id="panel-shop-data-crawl-tasks" class="tab-panel">
|
<div id="panel-shop-data-crawl-tasks" class="tab-panel">
|
||||||
<div class="form-box">
|
<div class="form-box">
|
||||||
<h3 style="margin-bottom:16px;">店铺数据任务筛选</h3>
|
<h3 style="margin-bottom:16px;">店铺数据记录筛选</h3>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<div class="form-group" style="min-width:150px;"><label>店铺</label><input type="text"
|
<div class="form-group" style="min-width:150px;"><label>店铺</label><input type="text"
|
||||||
id="shopDataTaskFilterShop" placeholder="模糊搜索店铺名"></div>
|
id="shopDataTaskFilterShop" placeholder="模糊搜索店铺名"></div>
|
||||||
@@ -4939,7 +4931,7 @@
|
|||||||
<input type="text" id="editCreatorName" readonly style="background:#f4f6fa;">
|
<input type="text" id="editCreatorName" readonly style="background:#f4f6fa;">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label id="editColumnPermissionLabel">菜单权限(勾选父菜单会继承全部子菜单)</label>
|
<label id="editColumnPermissionLabel">菜单权限(勾选上级菜单会继承全部子菜单)</label>
|
||||||
<div id="editColumnCards" class="column-permission-cards"></div>
|
<div id="editColumnCards" class="column-permission-cards"></div>
|
||||||
<div id="editColumnPermissionWrap" class="column-permission-tree" role="group" aria-labelledby="editColumnPermissionLabel"></div>
|
<div id="editColumnPermissionWrap" class="column-permission-tree" role="group" aria-labelledby="editColumnPermissionLabel"></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -4978,7 +4970,7 @@
|
|||||||
<!-- 编辑不符合ASIN数据弹窗 -->
|
<!-- 编辑不符合ASIN数据弹窗 -->
|
||||||
<div class="modal-mask" id="editInvalidAsinDataModal">
|
<div class="modal-mask" id="editInvalidAsinDataModal">
|
||||||
<div class="modal">
|
<div class="modal">
|
||||||
<h3>编辑不符合ASIN数据</h3>
|
<h3>编辑无效ASIN数据</h3>
|
||||||
<input type="hidden" id="editInvalidAsinDataId">
|
<input type="hidden" id="editInvalidAsinDataId">
|
||||||
<input type="hidden" id="editInvalidAsinDataRecordSource">
|
<input type="hidden" id="editInvalidAsinDataRecordSource">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -5020,12 +5012,12 @@
|
|||||||
<input type="text" id="editColumnName" placeholder="菜单名称">
|
<input type="text" id="editColumnName" placeholder="菜单名称">
|
||||||
</div>
|
</div>
|
||||||
<div class=" form-group">
|
<div class=" form-group">
|
||||||
<label>栏目标识</label>
|
<label>菜单标识</label>
|
||||||
<input type="text" id="editColumnKey" placeholder="栏目标识">
|
<input type="text" id="editColumnKey" placeholder="菜单标识">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>菜单路由</label>
|
<label>页面路径</label>
|
||||||
<input type="text" id="editColumnRoutePath" placeholder="菜单路由">
|
<input type="text" id="editColumnRoutePath" placeholder="页面路径">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>排序</label>
|
<label>排序</label>
|
||||||
@@ -5039,8 +5031,8 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>父菜单(可选)</label>
|
<label>上级菜单(可选)</label>
|
||||||
<select id="editColumnParentId"><option value="">无(根菜单)</option></select>
|
<select id="editColumnParentId"><option value="">无(一级菜单)</option></select>
|
||||||
</div>
|
</div>
|
||||||
<p class="msg" id="msgEditColumn"></p>
|
<p class="msg" id="msgEditColumn"></p>
|
||||||
<div style="margin-top:16px;display:flex;gap:8px;">
|
<div style="margin-top:16px;display:flex;gap:8px;">
|
||||||
@@ -5314,7 +5306,7 @@
|
|||||||
<div class="modal image-video-permission-modal" role="dialog" aria-modal="true"
|
<div class="modal image-video-permission-modal" role="dialog" aria-modal="true"
|
||||||
aria-labelledby="imageVideoPermissionTitle">
|
aria-labelledby="imageVideoPermissionTitle">
|
||||||
<div class="image-video-permission-head">
|
<div class="image-video-permission-head">
|
||||||
<h3 id="imageVideoPermissionTitle">视频任务权限配置</h3>
|
<h3 id="imageVideoPermissionTitle">视频任务记录权限配置</h3>
|
||||||
<button class="btn btn-secondary btn-sm" id="btnCloseImageVideoPermissions" type="button">关闭</button>
|
<button class="btn btn-secondary btn-sm" id="btnCloseImageVideoPermissions" type="button">关闭</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="image-video-permission-tabs" role="tablist" aria-label="视频权限用户范围">
|
<div class="image-video-permission-tabs" role="tablist" aria-label="视频权限用户范围">
|
||||||
@@ -5346,11 +5338,11 @@
|
|||||||
<div class="modal image-video-permission-modal" role="dialog" aria-modal="true"
|
<div class="modal image-video-permission-modal" role="dialog" aria-modal="true"
|
||||||
aria-labelledby="shopDataTaskPermissionTitle">
|
aria-labelledby="shopDataTaskPermissionTitle">
|
||||||
<div class="image-video-permission-head">
|
<div class="image-video-permission-head">
|
||||||
<h3 id="shopDataTaskPermissionTitle">店铺数据任务权限配置</h3>
|
<h3 id="shopDataTaskPermissionTitle">店铺数据记录权限配置</h3>
|
||||||
<button class="btn btn-secondary btn-sm" id="btnCloseShopDataTaskPermissions"
|
<button class="btn btn-secondary btn-sm" id="btnCloseShopDataTaskPermissions"
|
||||||
type="button">关闭</button>
|
type="button">关闭</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="image-video-permission-tabs" role="tablist" aria-label="店铺数据任务权限用户范围">
|
<div class="image-video-permission-tabs" role="tablist" aria-label="店铺数据记录权限用户范围">
|
||||||
<button class="image-video-permission-tab active" type="button" role="tab"
|
<button class="image-video-permission-tab active" type="button" role="tab"
|
||||||
aria-selected="true" data-shop-data-permission-view="granted">已分配用户 <span
|
aria-selected="true" data-shop-data-permission-view="granted">已分配用户 <span
|
||||||
id="shopDataTaskPermissionGrantedCount">(0)</span></button>
|
id="shopDataTaskPermissionGrantedCount">(0)</span></button>
|
||||||
|
|||||||
Reference in New Issue
Block a user