From 1194038279d8a378f2ce7cbea59a32d753becbf8 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期一, 30 三月 2026 08:16:47 +0800
Subject: [PATCH] feat: update rsf-design and redis integration

---
 rsf-design/src/views/system/menu/index.vue |   29 ++++++++++++++++++++++++++---
 1 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/rsf-design/src/views/system/menu/index.vue b/rsf-design/src/views/system/menu/index.vue
index d28afa8..3a79c27 100644
--- a/rsf-design/src/views/system/menu/index.vue
+++ b/rsf-design/src/views/system/menu/index.vue
@@ -53,6 +53,7 @@
   import MenuDialog from './modules/menu-dialog.vue'
 
   import { formatMenuTitle } from '@/utils/router'
+  import ArtSvgIcon from '@/components/core/base/art-svg-icon/index.vue'
   import ArtButtonTable from '@/components/core/forms/art-button-table/index.vue'
   import { useTableColumns } from '@/hooks/core/useTableColumns'
   import { fetchGetMenuList } from '@/api/system-manage'
@@ -115,12 +116,34 @@
     if (row.meta?.link) return '澶栭摼'
     return '鏈煡'
   }
+  const getMenuDisplayTitle = (row) => {
+    const titleKey = row.meta?.title || row.name || ''
+    const normalizedTitleKey =
+      titleKey && !String(titleKey).includes('.') ? `menu.${titleKey}` : titleKey
+    return formatMenuTitle(normalizedTitleKey)
+  }
+  const getMenuDisplayIcon = (row) => row.meta?.icon || row.icon || ''
   const { columnChecks, columns } = useTableColumns(() => [
+    {
+      prop: 'meta.icon',
+      label: '鍥炬爣棰勮',
+      width: 96,
+      align: 'center',
+      formatter: (row) => {
+        const icon = getMenuDisplayIcon(row)
+
+        if (!icon) return h('span', { class: 'text-g-400' }, '-')
+
+        return h('div', { class: 'flex items-center justify-center' }, [
+          h(ArtSvgIcon, { icon, class: 'text-base text-g-700' })
+        ])
+      }
+    },
     {
       prop: 'meta.title',
       label: '鑿滃崟鍚嶇О',
       minWidth: 120,
-      formatter: (row) => formatMenuTitle(row.meta?.title)
+      formatter: (row) => getMenuDisplayTitle(row)
     },
     {
       prop: 'type',
@@ -245,11 +268,11 @@
     })
   }
   const searchMenu = (items) => {
-    const results = []
+      const results = []
     for (const item of items) {
       const searchName = appliedFilters.name?.toLowerCase().trim() || ''
       const searchRoute = appliedFilters.route?.toLowerCase().trim() || ''
-      const menuTitle = formatMenuTitle(item.meta?.title || '').toLowerCase()
+      const menuTitle = getMenuDisplayTitle(item).toLowerCase()
       const menuPath = (item.path || '').toLowerCase()
       const nameMatch = !searchName || menuTitle.includes(searchName)
       const routeMatch = !searchRoute || menuPath.includes(searchRoute)

--
Gitblit v1.9.1