diff --git a/src/views/system/SettingManage.vue b/src/views/system/SettingManage.vue index aea6250..3b69a68 100644 --- a/src/views/system/SettingManage.vue +++ b/src/views/system/SettingManage.vue @@ -55,17 +55,15 @@ - - - - - - - - {{ row.label }} - - {{ row.data.type }} - +
+ + + + + + + {{ row.label }} +
@@ -757,6 +755,73 @@ const formatDate = (dateString) => { // ==================== 树状图方法 ==================== +// 相近字排序函数 +const sortBySimilarity = (settings) => { + if (!settings || settings.length <= 1) return settings + + // 提取所有配置项的名称 + const names = settings.map(item => item.name || '') + + // 按名称排序,相近的名称会排在一起 + return settings.sort((a, b) => { + const nameA = (a.name || '').toLowerCase() + const nameB = (b.name || '').toLowerCase() + + // 先按前缀分组排序 + const prefixA = nameA.substring(0, 2) + const prefixB = nameB.substring(0, 2) + + if (prefixA !== prefixB) { + return prefixA.localeCompare(prefixB, 'zh-CN') + } + + // 前缀相同则按完整名称排序 + return nameA.localeCompare(nameB, 'zh-CN') + }) +} + +// 加载配置项子节点 +const loadChildren = async (row) => { + if (!row || row.type !== 'group') return + + row._loading = true + try { + const groupId = row.data.id + console.log('Loading children for group:', groupId) + const res = await getSettingList({ group_id: groupId, page: 1, count: 100 }) + console.log('getSettingList response:', res.data) + if (res.data.code === 200) { + let settings = res.data.data.data || [] + console.log('settings loaded:', settings) + + // 应用相近字排序 + settings = sortBySimilarity(settings) + console.log('settings after sorting:', settings) + + const settingNodes = settings.map(setting => ({ + id: `setting_${setting.id}`, + label: setting.name, + type: 'setting', + data: setting, + level: row.level + 1, + hasChildren: false, // 配置项没有子节点 + _expanded: false, + _children: [], + _loading: false + })) + console.log('settingNodes created:', settingNodes) + + row._children = settingNodes + console.log('updated row with children:', row) + } + } catch (error) { + console.error('加载配置列表失败:', error) + ElMessage.error('加载配置列表失败') + } finally { + row._loading = false + } +} + // 切换展开状态 const toggleExpand = async (row) => { if (row._loading) return @@ -767,37 +832,7 @@ const toggleExpand = async (row) => { } else { // 展开 - 如果还没加载子级,先加载 if (row.type === 'group' && (!row._children || row._children.length === 0)) { - row._loading = true - try { - const groupId = row.data.id - console.log('Loading children for group:', groupId) - const res = await getSettingList({ group_id: groupId, page: 1, count: 100 }) - console.log('getSettingList response:', res.data) - if (res.data.code === 200) { - const settings = res.data.data.data || [] - console.log('settings loaded:', settings) - const settingNodes = settings.map(setting => ({ - id: `setting_${setting.id}`, - label: setting.name, - type: 'setting', - data: setting, - level: row.level + 1, - hasChildren: false, // 配置项没有子节点 - _expanded: false, - _children: [], - _loading: false - })) - console.log('settingNodes created:', settingNodes) - - row._children = settingNodes - console.log('updated row with children:', row) - } - } catch (error) { - console.error('加载配置列表失败:', error) - ElMessage.error('加载配置列表失败') - } finally { - row._loading = false - } + await loadChildren(row) } row._expanded = true } @@ -2085,10 +2120,6 @@ onMounted(() => { flex: 1; } -.type-tag { - margin-left: 8px; -} - /* 文件预览样式 */ .file-preview { margin-top: 8px; @@ -2357,11 +2388,6 @@ onMounted(() => { font-size: 14px; } - .type-tag { - margin-left: 4px; - font-size: 11px; - } - :deep(.setting-tree-table .el-table th) { font-size: 12px; padding: 8px 4px; diff --git a/问题.MD b/问题.MD index 8287973..7b3e6c2 100644 --- a/问题.MD +++ b/问题.MD @@ -1,8 +1,9 @@ ✅已完成、⚠️部分完成、❌未完成这样显示 -----------------------------------------------------------------------------------------------需要解决 -1.将配置组管理和配置管理放到一起,弄成树状图这种,顶级是配置组管理,点击配置组管理的下级是配置管理列表数据,需要将两个合作一个,看如何能融合以下 +1.管理员后台在配置管理展示的类型,有两行都是相同的,只需要展示一行 ✅已完成 +2.,需要做相近字排序,比如前缀都是轮播图的展示在一起这样方便后续修改理解意思,还有是运用在同一处地方的可以展示在一起 ✅已完成 -----------------------------------------------------------------------------------------------需要解决