feat: 离线图标功能

This commit is contained in:
dap 2024-11-06 20:56:19 +08:00
parent cce6117157
commit 2cc82a0c05
15 changed files with 238 additions and 74 deletions

View File

@ -24,7 +24,7 @@ const profileRoute: RouteRecordStringComponent[] = [
{
component: '/_core/profile/index',
meta: {
icon: 'mingcute:profile-line',
icon: 'mingcute:profile-line|offline',
keepAlive: true,
title: $t('ui.widgets.profile'),
},
@ -48,7 +48,7 @@ const profileRoute: RouteRecordStringComponent[] = [
component: '/system/oss-config/index',
meta: {
activePath: '/system/oss',
icon: 'mingcute:profile-line',
icon: 'ant-design:setting-outlined|offline',
keepAlive: true,
title: 'oss配置',
},
@ -57,7 +57,6 @@ const profileRoute: RouteRecordStringComponent[] = [
},
],
},
// TODO: 图标要改
{
component: 'BasicLayout',
meta: {
@ -73,7 +72,7 @@ const profileRoute: RouteRecordStringComponent[] = [
component: '/tool/gen/edit-gen',
meta: {
activePath: '/tool/gen',
icon: 'mingcute:profile-line',
icon: 'tabler:code|offline',
keepAlive: true,
title: '生成配置',
},
@ -97,7 +96,7 @@ const profileRoute: RouteRecordStringComponent[] = [
component: '/system/role-assign/index',
meta: {
activePath: '/system/role',
icon: 'mingcute:profile-line',
icon: 'eos-icons:role-binding-outlined|offline',
keepAlive: true,
title: '分配角色',
},
@ -144,7 +143,7 @@ export const localMenuList: RouteRecordStringComponent[] = [
path: '/vben-admin/document',
component: 'IFrameView',
meta: {
icon: 'lucide:book-open-text',
icon: 'lucide:book-open-text|offline',
iframeSrc: 'https://dapdap.top',
keepAlive: true,
title: $t('demos.vben.document'),
@ -156,7 +155,7 @@ export const localMenuList: RouteRecordStringComponent[] = [
component: 'BasicLayout',
meta: {
hideChildrenInMenu: true,
icon: 'lucide:copyright',
icon: 'lucide:copyright|offline',
order: 9999,
title: $t('demos.vben.about'),
},

View File

@ -28,7 +28,7 @@ const routes: RouteRecordRaw[] = [
path: '/vben-admin/about',
component: () => import('#/views/_core/about/index.vue'),
meta: {
icon: 'lucide:copyright',
icon: 'lucide:copyright|offline',
title: $t('demos.vben.about'),
},
},
@ -37,7 +37,7 @@ const routes: RouteRecordRaw[] = [
path: '/vben-admin/document',
component: IFrameView,
meta: {
icon: 'lucide:book-open-text',
icon: 'lucide:book-open-text|offline',
link: VBEN_DOC_URL,
title: $t('demos.vben.document'),
},

View File

@ -6,6 +6,7 @@ import { computed, onMounted, ref, useTemplateRef } from 'vue';
import { AuthenticationLogin, z } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { Modal } from 'ant-design-vue';
import { omit } from 'lodash-es';
import { tenantList, type TenantResp } from '#/api';
@ -144,6 +145,14 @@ async function handleAccountLogin(values: LoginAndRegisterParams) {
}
}
}
onMounted(() => {
Modal.info({
title: '提示',
content:
'离线图标分支需要导入[离线图标.sql] 目录:scripts/菜单图标替换sql/update_icon_离线图标.sql',
});
});
</script>
<template>

View File

@ -1,12 +1,15 @@
import type { VxeGridProps } from '#/adapter/vxe-table';
import { h } from 'vue';
import { DictEnum } from '@vben/constants';
import { FolderIcon, MenuIcon, OkButtonIcon, VbenIcon } from '@vben/icons';
import { $t } from '@vben/locales';
import { getPopupContainer } from '@vben/utils';
import { type FormSchemaGetter, z } from '#/adapter/form';
import { getDictOptions } from '#/utils/dict';
import { renderDict, renderIcon } from '#/utils/render';
import { renderDict } from '#/utils/render';
export const querySchema: FormSchemaGetter = () => [
{
@ -48,11 +51,10 @@ export const yesNoOptions = [
// M目录 C菜单 F按钮
const menuTypes = {
M: { value: '目录', icon: 'fxemoji:folder' },
C: { value: '菜单', icon: 'fluent-emoji-flat:open-book' },
F: { value: '按钮', icon: 'fluent-emoji:ok-button' },
C: { icon: MenuIcon, value: '菜单' },
F: { icon: OkButtonIcon, value: '按钮' },
M: { icon: FolderIcon, value: '目录' },
};
export const columns: VxeGridProps['columns'] = [
{
title: '菜单名称',
@ -74,7 +76,9 @@ export const columns: VxeGridProps['columns'] = [
return '';
}
return (
<span class={'flex justify-center'}>{renderIcon(row.icon)}</span>
<span class={'flex justify-center'}>
<VbenIcon icon={row.icon} />
</span>
);
},
},
@ -95,9 +99,9 @@ export const columns: VxeGridProps['columns'] = [
return '未知';
}
return (
<span class={['flex', 'items-center', 'justify-center']}>
{renderIcon(current.icon)}
<span style={{ marginLeft: '2px' }}>{current.value}</span>
<span class="flex items-center justify-center gap-1">
{h(current.icon, { class: 'size-[18px]' })}
<span>{current.value}</span>
</span>
);
},

View File

@ -99,7 +99,7 @@ onBeforeUnmount(() => {
>
<template #trigger>
<div :class="[nsMenu.be('tooltip', 'trigger')]">
<VbenIcon :class="nsMenu.e('icon')" :icon="menuIcon" offline />
<VbenIcon :class="nsMenu.e('icon')" :icon="menuIcon" />
<slot></slot>
<span v-if="collapseShowTitle" :class="nsMenu.e('name')">
<slot name="title"></slot>
@ -114,7 +114,7 @@ onBeforeUnmount(() => {
class="right-2"
v-bind="props"
/>
<VbenIcon :class="nsMenu.e('icon')" :icon="menuIcon" offline />
<VbenIcon :class="nsMenu.e('icon')" :icon="menuIcon" />
<slot></slot>
<slot name="title"></slot>
</div>

View File

@ -87,7 +87,6 @@ const iconArrowStyle = computed(() => {
:class="nsMenu.e('icon')"
:icon="icon"
fallback
offline
/>
<div v-if="!hiddenTitle" :class="[e('title')]">

View File

@ -13,7 +13,6 @@ const props = defineProps<{
//
fallback?: boolean;
icon?: Component | Function | string;
offline?: boolean;
}>();
const isRemoteIcon = computed(() => {
@ -24,20 +23,37 @@ const isComponent = computed(() => {
const { icon } = props;
return !isString(icon) && (isObject(icon) || isFunction(icon));
});
/**
* 判断图标是否为离线图标
* 主要是判断后缀是否为 |offline
*/
const offlineIcon = computed(() => {
if (
isString(props.icon) &&
!isHttpUrl(props.icon) &&
props.icon.endsWith('|offline')
) {
return {
confirm: true,
icon: props.icon.replace('|offline', ''),
};
}
return {
confirm: false,
icon: '',
};
});
</script>
<template>
<component :is="icon as Component" v-if="isComponent" v-bind="$attrs" />
<img v-else-if="isRemoteIcon" :src="icon as string" v-bind="$attrs" />
<IconifyOfflineIcon
v-else-if="icon && offline"
v-else-if="offlineIcon.confirm"
v-bind="$attrs"
:icon="icon as string"
/>
<IconifyIcon
v-else-if="icon && !offline"
v-bind="$attrs"
:icon="icon as string"
:icon="offlineIcon.icon"
/>
<IconifyIcon v-else-if="icon" v-bind="$attrs" :icon="icon as string" />
<IconDefault v-else-if="fallback" v-bind="$attrs" />
</template>

View File

@ -144,7 +144,6 @@ const tabsView = computed(() => {
:icon="tab.icon"
class="mr-1 flex size-4 items-center overflow-hidden"
/>
<span class="flex-1 overflow-hidden whitespace-nowrap text-sm">
{{ tab.title }}
</span>

View File

@ -17,14 +17,18 @@
}
},
"dependencies": {
"@vben-core/icons": "workspace:*"
"@vben-core/icons": "workspace:*",
"@vben-core/shadcn-ui": "workspace:^"
},
"devDependencies": {
"@iconify/icons-akar-icons": "^1.2.19",
"@iconify/icons-ant-design": "^1.2.7",
"@iconify/icons-arcticons": "^1.2.77",
"@iconify/icons-bi": "^1.2.19",
"@iconify/icons-bx": "^1.2.6",
"@iconify/icons-carbon": "^1.2.20",
"@iconify/icons-devicon": "^1.2.17",
"@iconify/icons-emojione": "^1.2.6",
"@iconify/icons-eos-icons": "^1.2.6",
"@iconify/icons-fa-brands": "^1.2.4",
"@iconify/icons-fe": "^1.2.5",
@ -36,6 +40,7 @@
"@iconify/icons-icon-park-twotone": "^1.2.8",
"@iconify/icons-la": "^1.2.3",
"@iconify/icons-logos": "^1.2.36",
"@iconify/icons-lucide": "^1.2.135",
"@iconify/icons-majesticons": "^1.2.6",
"@iconify/icons-material-symbols": "^1.2.58",
"@iconify/icons-mdi": "^1.2.48",
@ -45,6 +50,7 @@
"@iconify/icons-simple-icons": "^1.2.74",
"@iconify/icons-solar": "^1.2.3",
"@iconify/icons-streamline": "^1.2.3",
"@iconify/icons-tabler": "^1.2.95",
"@iconify/icons-uiw": "^1.2.6",
"@iconify/icons-vscode-icons": "^1.2.29",
"@iconify/icons-wpf": "^1.2.3"

View File

@ -9,6 +9,7 @@ import windowsIcon from '@iconify/icons-devicon/windows8';
import alipayIcon from '@iconify/icons-fa-brands/alipay';
import androidIcon from '@iconify/icons-flat-color-icons/android-os';
import comandLine from '@iconify/icons-flat-color-icons/command-line';
import folderIcon from '@iconify/icons-flat-color-icons/folder';
import defaultOsIcon from '@iconify/icons-ic/outline-computer';
import memoryIcon from '@iconify/icons-la/memory';
import chromeIcon from '@iconify/icons-logos/chrome';
@ -19,6 +20,8 @@ import quarkIcon from '@iconify/icons-logos/quarkus-icon';
import redisIcon from '@iconify/icons-logos/redis';
import safariIcon from '@iconify/icons-logos/safari';
import iphoneIcon from '@iconify/icons-majesticons/iphone-x-apps-line';
import menuIcon from '@iconify/icons-material-symbols/menu';
import okButtonIcon from '@iconify/icons-mdi/button-pointer';
import micromessengerIcon from '@iconify/icons-mdi/wechat';
import defaultBrowserIcon from '@iconify/icons-ph/browser-duotone';
import baiduIcon from '@iconify/icons-ri/baidu-fill';
@ -31,7 +34,7 @@ import githubOAuthIcon from '@iconify/icons-uiw/github';
import excelIcon from '@iconify/icons-vscode-icons/file-type-excel';
import osxIcon from '@iconify/icons-wpf/macos';
import './other';
import './menu-icons';
// 用户 下拉菜单
export const GitHubOutlined = createIconifyOfflineIcon(
@ -142,3 +145,17 @@ export const DefaultBrowserIcon = createIconifyOfflineIcon(
'ph:browser-duotone',
defaultBrowserIcon,
);
// 菜单类型 目录/按钮/菜单
export const FolderIcon = createIconifyOfflineIcon(
'flat-color-icons:folder',
folderIcon,
);
export const OkButtonIcon = createIconifyOfflineIcon(
'mdi:button-pointer',
okButtonIcon,
);
export const MenuIcon = createIconifyOfflineIcon(
'material-symbols:menu',
menuIcon,
);

View File

@ -0,0 +1,108 @@
import { addOfflineIcon } from '@vben-core/icons';
import schedule from '@iconify/icons-akar-icons/schedule';
import settingOutline from '@iconify/icons-ant-design/setting-outlined';
import Operation from '@iconify/icons-arcticons/one-hand-operation';
import BaseLineHousesFill from '@iconify/icons-bi/houses-fill';
import BxPackage from '@iconify/icons-bx/package';
import modelAlt from '@iconify/icons-carbon/model-alt';
import taskApproved from '@iconify/icons-carbon/task-approved';
import redisWordmark from '@iconify/icons-devicon/redis-wordmark';
import springWordmark from '@iconify/icons-devicon/spring-wordmark';
import vscode from '@iconify/icons-devicon/vscode';
import evergreenTree from '@iconify/icons-emojione/evergreen-tree';
import RoleBindingOutlined from '@iconify/icons-eos-icons/role-binding-outlined';
import SystemGroup from '@iconify/icons-eos-icons/system-group';
import NoticePush from '@iconify/icons-fe/notice-push';
import plus from '@iconify/icons-flat-color-icons/plus';
import from24 from '@iconify/icons-fluent/form-24-regular';
import builDefinition from '@iconify/icons-fluent-mdl2/build-definition';
import Dictionary from '@iconify/icons-fluent-mdl2/dictionary';
import leaveUser from '@iconify/icons-fluent-mdl2/leave-user';
import BaseLineHouse from '@iconify/icons-ic/baseline-house';
import monitor from '@iconify/icons-ic/baseline-monitor';
import roundLaunch from '@iconify/icons-ic/round-launch';
import MenuSharp from '@iconify/icons-ic/sharp-menu';
import Appointment from '@iconify/icons-icon-park-outline/appointment';
import SettingTwo from '@iconify/icons-icon-park-twotone/setting-two';
import boolOpenText from '@iconify/icons-lucide/book-open-text';
import copyright from '@iconify/icons-lucide/copyright';
import table from '@iconify/icons-lucide/table';
import cloudDoneOutlineRounded from '@iconify/icons-material-symbols/cloud-done-outline-rounded';
import generatingTokensOutline from '@iconify/icons-material-symbols/generating-tokens-outline';
import LogoDevOutline from '@iconify/icons-material-symbols/logo-dev-outline';
import ccOutline from '@iconify/icons-mdi/cc-outline';
import tools from '@iconify/icons-mdi/tools';
import workflowOutline from '@iconify/icons-mdi/workflow-outline';
import DepartmentLine from '@iconify/icons-mingcute/department-line';
import profileLine from '@iconify/icons-mingcute/profile-line';
import UserDuotone from '@iconify/icons-ph/user-duotone';
import insatnceLine from '@iconify/icons-ri/instance-line';
import todoLine from '@iconify/icons-ri/todo-line';
import Authy from '@iconify/icons-simple-icons/authy';
import FolderWithFilesOutline from '@iconify/icons-solar/folder-with-files-outline';
import monitorBoldDuotone from '@iconify/icons-solar/monitor-bold-duotone';
import InterfaceLoginDialPadFingerPasswordDialPadDotFinger from '@iconify/icons-streamline/interface-login-dial-pad-finger-password-dial-pad-dot-finger';
import categoryPlus from '@iconify/icons-tabler/category-plus';
import code from '@iconify/icons-tabler/code';
/**
*
*/
addOfflineIcon('eos-icons:system-group', SystemGroup);
addOfflineIcon('ph:user-duotone', UserDuotone);
addOfflineIcon('eos-icons:role-binding-outlined', RoleBindingOutlined);
addOfflineIcon('ic:sharp-menu', MenuSharp);
addOfflineIcon('mingcute:department-line', DepartmentLine);
addOfflineIcon('icon-park-outline:appointment', Appointment);
addOfflineIcon('fluent-mdl2:dictionary', Dictionary);
addOfflineIcon('icon-park-twotone:setting-two', SettingTwo);
addOfflineIcon('fe:notice-push', NoticePush);
addOfflineIcon('material-symbols:logo-dev-outline', LogoDevOutline);
addOfflineIcon('arcticons:one-hand-operation', Operation);
addOfflineIcon(
'streamline:interface-login-dial-pad-finger-password-dial-pad-dot-finger',
InterfaceLoginDialPadFingerPasswordDialPadDotFinger,
);
addOfflineIcon('solar:folder-with-files-outline', FolderWithFilesOutline);
addOfflineIcon('simple-icons:authy', Authy);
addOfflineIcon('ic:baseline-house', BaseLineHouse);
addOfflineIcon('bi:houses-fill', BaseLineHousesFill);
addOfflineIcon('bx:package', BxPackage);
addOfflineIcon('solar:monitor-bold-duotone', monitorBoldDuotone);
addOfflineIcon(
'material-symbols:generating-tokens-outline',
generatingTokensOutline,
);
addOfflineIcon('devicon:redis-wordmark', redisWordmark);
addOfflineIcon('devicon:spring-wordmark', springWordmark);
addOfflineIcon('akar-icons:schedule', schedule);
addOfflineIcon('mdi:tools', tools);
addOfflineIcon('tabler:code', code);
addOfflineIcon('flat-color-icons:plus', plus);
addOfflineIcon('devicon:vscode', vscode);
addOfflineIcon('lucide:table', table);
addOfflineIcon('emojione:evergreen-tree', evergreenTree);
addOfflineIcon('fluent-mdl2:leave-user', leaveUser);
addOfflineIcon('mdi:workflow-outline', workflowOutline);
addOfflineIcon('tabler:category-plus', categoryPlus);
addOfflineIcon('carbon:model-alt', modelAlt);
addOfflineIcon('fluent-mdl2:build-definition', builDefinition);
addOfflineIcon('fluent-mdl2:build-definition', builDefinition);
addOfflineIcon('icon-park-outline:monitor', monitor);
addOfflineIcon('ri:instance-line', insatnceLine);
addOfflineIcon('ri:todo-line', todoLine);
addOfflineIcon('fluent:form-24-regular', from24);
addOfflineIcon('carbon:task-approved', taskApproved);
addOfflineIcon('ic:round-launch', roundLaunch);
addOfflineIcon(
'material-symbols:cloud-done-outline-rounded',
cloudDoneOutlineRounded,
);
addOfflineIcon('mdi:cc-outline', ccOutline);
addOfflineIcon('lucide:book-open-text', boolOpenText);
addOfflineIcon('lucide:copyright', copyright);
// 个人中心
addOfflineIcon('mingcute:profile-line', profileLine);
// oss配置
addOfflineIcon('ant-design:setting-outlined', settingOutline);

View File

@ -1,40 +0,0 @@
import { addOfflineIcon } from '@vben-core/icons';
import Operation from '@iconify/icons-arcticons/one-hand-operation';
import BaseLineHousesFill from '@iconify/icons-bi/houses-fill';
import BxPackage from '@iconify/icons-bx/package';
import RoleBindingOutlined from '@iconify/icons-eos-icons/role-binding-outlined';
import SystemGroup from '@iconify/icons-eos-icons/system-group';
import NoticePush from '@iconify/icons-fe/notice-push';
import Dictionary from '@iconify/icons-fluent-mdl2/dictionary';
import BaseLineHouse from '@iconify/icons-ic/baseline-house';
import MenuSharp from '@iconify/icons-ic/sharp-menu';
import Appointment from '@iconify/icons-icon-park-outline/appointment';
import SettingTwo from '@iconify/icons-icon-park-twotone/setting-two';
import LogoDevOutline from '@iconify/icons-material-symbols/logo-dev-outline';
import DepartmentLine from '@iconify/icons-mingcute/department-line';
import UserDuotone from '@iconify/icons-ph/user-duotone';
import Authy from '@iconify/icons-simple-icons/authy';
import FolderWithFilesOutline from '@iconify/icons-solar/folder-with-files-outline';
import InterfaceLoginDialPadFingerPasswordDialPadDotFinger from '@iconify/icons-streamline/interface-login-dial-pad-finger-password-dial-pad-dot-finger';
addOfflineIcon('eos-icons:system-group', SystemGroup);
addOfflineIcon('ph:user-duotone', UserDuotone);
addOfflineIcon('eos-icons:role-binding-outlined', RoleBindingOutlined);
addOfflineIcon('ic:sharp-menu', MenuSharp);
addOfflineIcon('mingcute:department-line', DepartmentLine);
addOfflineIcon('icon-park-outline:appointment', Appointment);
addOfflineIcon('fluent-mdl2:dictionary', Dictionary);
addOfflineIcon('icon-park-twotone:setting-two', SettingTwo);
addOfflineIcon('fe:notice-push', NoticePush);
addOfflineIcon('material-symbols:logo-dev-outline', LogoDevOutline);
addOfflineIcon('arcticons:one-hand-operation', Operation);
addOfflineIcon(
'streamline:interface-login-dial-pad-finger-password-dial-pad-dot-finger',
InterfaceLoginDialPadFingerPasswordDialPadDotFinger,
);
addOfflineIcon('solar:folder-with-files-outline', FolderWithFilesOutline);
addOfflineIcon('simple-icons:authy', Authy);
addOfflineIcon('ic:baseline-house', BaseLineHouse);
addOfflineIcon('bi:houses-fill', BaseLineHousesFill);
addOfflineIcon('bx:package', BxPackage);

View File

@ -1,3 +1,4 @@
export * from './iconify/index.js';
export * from './iconify-offline/index.js';
export * from './svg/index.js';
export { VbenIcon } from '@vben-core/shadcn-ui';

View File

@ -33,13 +33,13 @@ UPDATE sys_menu SET icon = 'emojione:evergreen-tree' WHERE menu_id = 1506;
UPDATE sys_menu SET icon = 'mdi:workflow-outline' WHERE menu_id = 11616;
UPDATE sys_menu SET icon = 'carbon:model-alt' WHERE menu_id = 11617;
UPDATE sys_menu SET icon = 'carbon:task-approved' WHERE menu_id = 11618;
UPDATE sys_menu SET icon = 'streamline:waiting-appointments-calendar' WHERE menu_id = 11619;
UPDATE sys_menu SET icon = 'ri:todo-line' WHERE menu_id = 11619;
UPDATE sys_menu SET icon = 'fluent-mdl2:build-definition' WHERE menu_id = 11620;
UPDATE sys_menu SET icon = 'ri:instance-line' WHERE menu_id = 11621;
UPDATE sys_menu SET icon = 'tabler:category-plus' WHERE menu_id = 11622;
UPDATE sys_menu SET icon = 'ic:round-launch' WHERE menu_id = 11629;
UPDATE sys_menu SET icon = 'icon-park-outline:monitor' WHERE menu_id = 11630;
UPDATE sys_menu SET icon = 'streamline:waiting-appointments-calendar' WHERE menu_id = 11631;
UPDATE sys_menu SET icon = 'ri:todo-line' WHERE menu_id = 11631;
UPDATE sys_menu SET icon = 'material-symbols:cloud-done-outline-rounded' WHERE menu_id = 11632;
UPDATE sys_menu SET icon = 'mdi:cc-outline' WHERE menu_id = 11633;
UPDATE sys_menu SET icon = 'fluent-mdl2:leave-user' WHERE menu_id = 11638;

View File

@ -0,0 +1,46 @@
UPDATE sys_menu SET icon = 'eos-icons:system-group|offline' WHERE menu_id = 1;
UPDATE sys_menu SET icon = 'solar:monitor-bold-duotone|offline' WHERE menu_id = 2;
UPDATE sys_menu SET icon = 'mdi:tools|offline' WHERE menu_id = 3;
UPDATE sys_menu SET icon = 'flat-color-icons:plus|offline' WHERE menu_id = 4;
UPDATE sys_menu SET icon = 'devicon:vscode|offline' WHERE menu_id = 5;
UPDATE sys_menu SET icon = 'ic:baseline-house|offline' WHERE menu_id = 6;
UPDATE sys_menu SET icon = 'ph:user-duotone|offline' WHERE menu_id = 100;
UPDATE sys_menu SET icon = 'eos-icons:role-binding-outlined|offline' WHERE menu_id = 101;
UPDATE sys_menu SET icon = 'ic:sharp-menu|offline' WHERE menu_id = 102;
UPDATE sys_menu SET icon = 'mingcute:department-line|offline' WHERE menu_id = 103;
UPDATE sys_menu SET icon = 'icon-park-outline:appointment|offline' WHERE menu_id = 104;
UPDATE sys_menu SET icon = 'fluent-mdl2:dictionary|offline' WHERE menu_id = 105;
UPDATE sys_menu SET icon = 'icon-park-twotone:setting-two|offline' WHERE menu_id = 106;
UPDATE sys_menu SET icon = 'fe:notice-push|offline' WHERE menu_id = 107;
UPDATE sys_menu SET icon = 'material-symbols:logo-dev-outline|offline' WHERE menu_id = 108;
UPDATE sys_menu SET icon = 'material-symbols:generating-tokens-outline|offline' WHERE menu_id = 109;
UPDATE sys_menu SET icon = 'devicon:redis-wordmark|offline' WHERE menu_id = 113;
UPDATE sys_menu SET icon = 'fluent:form-new-24-regular|offline' WHERE menu_id = 114;
UPDATE sys_menu SET icon = 'tabler:code|offline' WHERE menu_id = 115;
UPDATE sys_menu SET icon = 'devicon:spring-wordmark|offline' WHERE menu_id = 117;
UPDATE sys_menu SET icon = 'solar:folder-with-files-outline|offline' WHERE menu_id = 118;
UPDATE sys_menu SET icon = 'akar-icons:schedule|offline' WHERE menu_id = 120;
UPDATE sys_menu SET icon = 'bi:houses-fill|offline' WHERE menu_id = 121;
UPDATE sys_menu SET icon = 'bx:package|offline' WHERE menu_id = 122;
UPDATE sys_menu SET icon = 'simple-icons:authy|offline' WHERE menu_id = 123;
UPDATE sys_menu SET icon = 'arcticons:one-hand-operation|offline' WHERE menu_id = 500;
UPDATE sys_menu SET icon = 'streamline:interface-login-dial-pad-finger-password-dial-pad-dot-finger|offline' WHERE menu_id = 501;
UPDATE sys_menu SET icon = 'lucide:table|offline' WHERE menu_id = 1500;
UPDATE sys_menu SET icon = 'emojione:evergreen-tree|offline' WHERE menu_id = 1506;
/*UPDATE sys_menu SET icon = 'icon-park-twotone:web-page|offline' WHERE menu_id = 4; PLUS官网 */
UPDATE sys_menu SET icon = 'mdi:workflow-outline|offline' WHERE menu_id = 11616;
UPDATE sys_menu SET icon = 'carbon:model-alt|offline' WHERE menu_id = 11617;
UPDATE sys_menu SET icon = 'carbon:task-approved|offline' WHERE menu_id = 11618;
UPDATE sys_menu SET icon = 'ri:todo-line|offline' WHERE menu_id = 11619;
UPDATE sys_menu SET icon = 'fluent-mdl2:build-definition|offline' WHERE menu_id = 11620;
UPDATE sys_menu SET icon = 'ri:instance-line|offline' WHERE menu_id = 11621;
UPDATE sys_menu SET icon = 'tabler:category-plus|offline' WHERE menu_id = 11622;
UPDATE sys_menu SET icon = 'ic:round-launch|offline' WHERE menu_id = 11629;
UPDATE sys_menu SET icon = 'icon-park-outline:monitor|offline' WHERE menu_id = 11630;
UPDATE sys_menu SET icon = 'ri:todo-line|offline' WHERE menu_id = 11631;
UPDATE sys_menu SET icon = 'material-symbols:cloud-done-outline-rounded|offline' WHERE menu_id = 11632;
UPDATE sys_menu SET icon = 'mdi:cc-outline|offline' WHERE menu_id = 11633;
UPDATE sys_menu SET icon = 'fluent-mdl2:leave-user|offline' WHERE menu_id = 11638;
UPDATE sys_menu SET icon = 'fluent:form-24-regular|offline' WHERE menu_id = 11628;