This commit is contained in:
2026-02-11 22:59:22 +08:00
parent b0ae1bb68c
commit f90afaddca
3 changed files with 127 additions and 90 deletions
@@ -116,105 +116,143 @@ const iconCategories = [
{ key: 'commerce', label: '商务' }, { key: 'commerce', label: '商务' },
] ]
// Ant Design 图标分类列表 // Ant Design 图标分类列表(经过验证存在的图标)
const iconCategoriesMap = { const iconCategoriesMap = {
direction: [ direction: [
'ArrowLeftOutlined', 'ArrowRightOutlined', 'ArrowUpOutlined', 'ArrowDownOutlined', 'ArrowLeftOutlined', 'ArrowRightOutlined', 'ArrowUpOutlined', 'ArrowDownOutlined',
'LeftOutlined', 'RightOutlined', 'UpOutlined', 'DownOutlined', 'LeftOutlined', 'RightOutlined', 'UpOutlined', 'DownOutlined',
'CaretLeftOutlined', 'CaretRightOutlined', 'CaretUpOutlined', 'CaretDownOutlined', 'CaretLeftOutlined', 'CaretRightOutlined', 'CaretUpOutlined', 'CaretDownOutlined',
'BackwardOutlined', 'ForwardOutlined', 'FastBackwardOutlined', 'FastForwardOutlined',
'ShrinkOutlined', 'ArrowsAltOutlined', 'VerticalAlignTopOutlined', 'VerticalAlignBottomOutlined',
'RollbackOutlined', 'EnterOutlined', 'RetweetOutlined', 'SwapOutlined', 'RollbackOutlined', 'EnterOutlined', 'RetweetOutlined', 'SwapOutlined',
'SwapLeftOutlined', 'SwapRightOutlined', 'UpCircleOutlined', 'DownCircleOutlined', 'SwapLeftOutlined', 'SwapRightOutlined', 'UpCircleOutlined', 'DownCircleOutlined',
'LeftCircleOutlined', 'RightCircleOutlined', 'ArrowRightOutlined', 'ArrowLeftOutlined', 'LeftCircleOutlined', 'RightCircleOutlined', 'DoubleRightOutlined', 'DoubleLeftOutlined',
'VerticalAlignTopOutlined', 'VerticalAlignBottomOutlined', 'VerticalAlignMiddleOutlined',
'FullscreenOutlined', 'FullscreenExitOutlined', 'CompressOutlined', 'ExpandOutlined',
], ],
edit: [ edit: [
'EditOutlined', 'DeleteOutlined', 'PlusOutlined', 'MinusOutlined', 'EditOutlined', 'DeleteOutlined', 'PlusOutlined', 'MinusOutlined',
'CheckOutlined', 'CloseOutlined', 'FormOutlined', 'CopyOutlined', 'CheckOutlined', 'CloseOutlined', 'FormOutlined', 'CopyOutlined',
'ScissorOutlined', 'SnippetsOutlined', 'DiffOutlined', 'HighlightOutlined', 'ScissorOutlined', 'SnippetsOutlined', 'DiffOutlined', 'HighlightOutlined',
'AlignLeftOutlined', 'AlignCenterOutlined', 'AlignRightOutlined', 'AlignCenterOutlined', 'AlignLeftOutlined', 'AlignCenterOutlined', 'AlignRightOutlined',
'BoldOutlined', 'ItalicOutlined', 'UnderlineOutlined', 'StrikethroughOutlined', 'BoldOutlined', 'ItalicOutlined', 'UnderlineOutlined',
'RedoOutlined', 'UndoOutlined', 'FileAddOutlined', 'FileSyncOutlined', 'RedoOutlined', 'UndoOutlined', 'FileSyncOutlined', 'ExportOutlined',
'ImportOutlined', 'FileAddOutlined', 'FolderAddOutlined',
], ],
data: [ data: [
'DatabaseOutlined', 'CloudOutlined', 'CloudServerOutlined', 'CloudUploadOutlined', 'DatabaseOutlined', 'CloudOutlined', 'CloudUploadOutlined',
'CloudDownloadOutlined', 'DatabaseOutlined', 'HddOutlined', 'ServerOutlined', 'CloudDownloadOutlined', 'HddOutlined', 'ServerOutlined',
'ReconciliationOutlined', 'AccountBookOutlined', 'AuditOutlined', 'BarChartOutlined', 'ReconciliationOutlined', 'AccountBookOutlined', 'AuditOutlined',
'AreaChartOutlined', 'DotChartOutlined', 'LineChartOutlined', 'PieChartOutlined', 'BarChartOutlined', 'AreaChartOutlined', 'DotChartOutlined',
'FundOutlined', 'SlidersOutlined', 'ControlOutlined', 'ExperimentOutlined', 'LineChartOutlined', 'PieChartOutlined', 'FundOutlined',
'ProjectOutlined', 'NodeIndexOutlined', 'PartitionOutlined', 'ApartmentOutlined', 'SlidersOutlined', 'ControlOutlined', 'ExperimentOutlined',
'ProjectOutlined', 'PartitionOutlined', 'ApartmentOutlined',
'BlockOutlined', 'FunctionOutlined',
], ],
media: [ media: [
'PictureOutlined', 'VideoCameraOutlined', 'AudioOutlined', 'FileImageOutlined', 'PictureOutlined', 'VideoCameraOutlined', 'AudioOutlined',
'FilePdfOutlined', 'FileWordOutlined', 'FileExcelOutlined', 'FileZipOutlined', 'FileImageOutlined', 'FilePdfOutlined', 'FileWordOutlined',
'FileExcelOutlined', 'FileZipOutlined', 'FilePptOutlined',
'FolderOutlined', 'FolderOpenOutlined', 'FileTextOutlined', 'FileOutlined', 'FolderOutlined', 'FolderOpenOutlined', 'FileTextOutlined', 'FileOutlined',
'FileMarkdownOutlined', 'FileUnknownOutlined', 'FilePptOutlined', 'FileAddOutlined', 'FileMarkdownOutlined', 'FileUnknownOutlined',
'CameraOutlined', 'QrcodeOutlined', 'BarcodeOutlined', 'ScanOutlined', 'CameraOutlined', 'QrcodeOutlined', 'BarcodeOutlined',
'MusicOutlined', 'SoundOutlined', 'CustomerServiceOutlined', 'MessageOutlined', 'SoundOutlined', 'CustomerServiceOutlined',
], ],
user: [ user: [
'UserOutlined', 'UsergroupAddOutlined', 'UsergroupDeleteOutlined', 'TeamOutlined', 'UserOutlined', 'UsergroupAddOutlined', 'UsergroupDeleteOutlined', 'TeamOutlined',
'SolutionOutlined', 'ContactsOutlined', 'IdcardOutlined', 'ProfileOutlined', 'SolutionOutlined', 'ContactsOutlined', 'IdcardOutlined', 'ProfileOutlined',
'AliwangwangOutlined', 'SmileOutlined', 'MehOutlined', 'FrownOutlined', 'SmileOutlined', 'MehOutlined', 'FrownOutlined',
'HeartOutlined', 'StarOutlined', 'LikeOutlined', 'DislikeOutlined', 'HeartOutlined', 'StarOutlined', 'LikeOutlined', 'DislikeOutlined',
'ThumbUpOutlined', 'SkypeOutlined', 'GithubOutlined', 'WechatOutlined', 'ThumbUpOutlined', 'MessageOutlined', 'MailOutlined', 'PhoneOutlined',
'TwitterOutlined', 'WeiboOutlined', 'FacebookOutlined', 'GoogleOutlined',
], ],
system: [ system: [
'SettingOutlined', 'HomeOutlined', 'DashboardOutlined', 'AppstoreOutlined', 'SettingOutlined', 'HomeOutlined', 'DashboardOutlined', 'AppstoreOutlined',
'MenuFoldOutlined', 'MenuUnfoldOutlined', 'BarsOutlined', 'MoreOutlined', 'MenuFoldOutlined', 'MenuUnfoldOutlined', 'BarsOutlined', 'MoreOutlined',
'BellOutlined', 'NotificationOutlined', 'AlertOutlined', 'WarningOutlined', 'BellOutlined', 'AlertOutlined', 'WarningOutlined',
'CheckCircleOutlined', 'CloseCircleOutlined', 'ExclamationCircleOutlined', 'InfoCircleOutlined', 'CheckCircleOutlined', 'CloseCircleOutlined', 'ExclamationCircleOutlined',
'QuestionCircleOutlined', 'SafetyOutlined', 'SecurityScanOutlined', 'ShieldCheckOutlined', 'InfoCircleOutlined', 'QuestionCircleOutlined', 'StopOutlined',
'LockOutlined', 'UnlockOutlined', 'KeyOutlined', 'EyeOutlined', 'EyeInvisibleOutlined', 'SafetyOutlined', 'LockOutlined', 'UnlockOutlined', 'KeyOutlined',
'LogoutOutlined', 'LoginOutlined', 'MobileOutlined', 'LaptopOutlined', 'DesktopOutlined', 'EyeOutlined', 'EyeInvisibleOutlined',
'ThunderboltOutlined', 'WifiOutlined', 'BluetoothOutlined', 'ApiOutlined', 'LogoutOutlined', 'LoginOutlined', 'MobileOutlined',
'BugOutlined', 'BuildOutlined', 'CodeOutlined', 'CodeSandboxOutlined', 'ThunderboltOutlined', 'WifiOutlined', 'ApiOutlined',
'FunctionOutlined', 'ConsoleSqlOutlined', 'ApiOutlined', 'BugOutlined', 'BuildOutlined', 'CodeOutlined',
'PoweroffOutlined', 'HourglassOutlined', 'SyncOutlined',
], ],
commerce: [ commerce: [
'ShoppingCartOutlined', 'ShoppingOutlined', 'GiftOutlined', 'GoldOutlined', 'ShoppingCartOutlined', 'ShoppingOutlined', 'GiftOutlined', 'GoldOutlined',
'CrownOutlined', 'MedalOutlined', 'TrophyOutlined', 'DiamondOutlined', 'CrownOutlined', 'MedalOutlined', 'TrophyOutlined', 'DiamondOutlined',
'BankOutlined', 'CreditCardOutlined', 'PayCircleOutlined', 'WalletOutlined', 'BankOutlined', 'CreditCardOutlined', 'PayCircleOutlined', 'WalletOutlined',
'MoneyCollectOutlined', 'TransactionOutlined', 'DollarOutlined', 'EuroOutlined', 'MoneyCollectOutlined', 'DollarOutlined', 'EuroOutlined', 'PoundOutlined',
'PoundOutlined', 'YenOutlined', 'GiftFilledOutlined', 'RocketOutlined', 'YenOutlined', 'GiftFilledOutlined', 'RocketOutlined',
'FireOutlined', 'ThunderboltTwoTone', 'BulbOutlined', 'SafetyCertificateOutlined', 'FireOutlined', 'BulbOutlined', 'SafetyCertificateOutlined',
'ShopOutlined', 'ShoppingBagOutlined', 'InsuranceOutlined',
], ],
all: [ all: [
// 导航和布局
'HomeOutlined', 'DashboardOutlined', 'AppstoreOutlined', 'BarsOutlined', 'HomeOutlined', 'DashboardOutlined', 'AppstoreOutlined', 'BarsOutlined',
'MenuFoldOutlined', 'MenuUnfoldOutlined', 'MoreOutlined', 'EllipsisOutlined', 'MenuFoldOutlined', 'MenuUnfoldOutlined', 'MoreOutlined', 'EllipsisOutlined',
// 用户
'UserOutlined', 'TeamOutlined', 'UsergroupAddOutlined', 'UsergroupDeleteOutlined', 'UserOutlined', 'TeamOutlined', 'UsergroupAddOutlined', 'UsergroupDeleteOutlined',
'SettingOutlined', 'ControlOutlined', 'ToolOutlined', 'BuildOutlined', 'SolutionOutlined', 'ContactsOutlined', 'IdcardOutlined', 'ProfileOutlined',
// 设置
'SettingOutlined', 'ControlOutlined', 'BuildOutlined', 'ToolOutlined',
// 搜索和过滤
'SearchOutlined', 'FilterOutlined', 'SortAscendingOutlined', 'SortDescendingOutlined', 'SearchOutlined', 'FilterOutlined', 'SortAscendingOutlined', 'SortDescendingOutlined',
'ReloadOutlined', 'SyncOutlined', 'RedoOutlined', 'UndoOutlined', 'ReloadOutlined', 'SyncOutlined', 'RedoOutlined', 'UndoOutlined',
// 编辑
'EditOutlined', 'DeleteOutlined', 'PlusOutlined', 'MinusOutlined', 'EditOutlined', 'DeleteOutlined', 'PlusOutlined', 'MinusOutlined',
'CheckOutlined', 'CloseOutlined', 'CheckCircleOutlined', 'CloseCircleOutlined', 'CheckOutlined', 'CloseOutlined', 'CheckCircleOutlined', 'CloseCircleOutlined',
'FormOutlined', 'CopyOutlined', 'ScissorOutlined',
// 方向
'ArrowLeftOutlined', 'ArrowRightOutlined', 'ArrowUpOutlined', 'ArrowDownOutlined', 'ArrowLeftOutlined', 'ArrowRightOutlined', 'ArrowUpOutlined', 'ArrowDownOutlined',
'LeftOutlined', 'RightOutlined', 'UpOutlined', 'DownOutlined', 'LeftOutlined', 'RightOutlined', 'UpOutlined', 'DownOutlined',
'FileTextOutlined', 'FileOutlined', 'FolderOutlined', 'FolderOpenOutlined', 'CaretLeftOutlined', 'CaretRightOutlined', 'CaretUpOutlined', 'CaretDownOutlined',
'RollbackOutlined', 'EnterOutlined', 'SwapOutlined',
'UpCircleOutlined', 'DownCircleOutlined', 'LeftCircleOutlined', 'RightCircleOutlined',
// 文件
'FileTextOutlined', 'FileOutlined', 'FileAddOutlined', 'FileExcelOutlined',
'FilePdfOutlined', 'FileWordOutlined', 'FilePptOutlined', 'FileImageOutlined',
'FileUnknownOutlined', 'FileMarkdownOutlined', 'FileZipOutlined',
'FolderOutlined', 'FolderAddOutlined', 'FolderOpenOutlined',
// 媒体
'PictureOutlined', 'VideoCameraOutlined', 'AudioOutlined', 'CameraOutlined', 'PictureOutlined', 'VideoCameraOutlined', 'AudioOutlined', 'CameraOutlined',
'SoundOutlined', 'QrcodeOutlined', 'BarcodeOutlined',
// 时间
'CalendarOutlined', 'ClockCircleOutlined', 'HistoryOutlined', 'FieldTimeOutlined', 'CalendarOutlined', 'ClockCircleOutlined', 'HistoryOutlined', 'FieldTimeOutlined',
'HourglassOutlined', 'CarryOutOutlined',
// 社交
'HeartOutlined', 'StarOutlined', 'LikeOutlined', 'DislikeOutlined', 'HeartOutlined', 'StarOutlined', 'LikeOutlined', 'DislikeOutlined',
'MessageOutlined', 'MailOutlined', 'PhoneOutlined', 'WechatOutlined', 'ThumbUpOutlined', 'MessageOutlined', 'MailOutlined', 'PhoneOutlined',
'SmileOutlined', 'MehOutlined', 'FrownOutlined',
// 位置
'EnvironmentOutlined', 'GlobalOutlined', 'CompassOutlined', 'MapOutlined', 'EnvironmentOutlined', 'GlobalOutlined', 'CompassOutlined', 'MapOutlined',
// 安全
'LockOutlined', 'UnlockOutlined', 'KeyOutlined', 'SafetyOutlined', 'LockOutlined', 'UnlockOutlined', 'KeyOutlined', 'SafetyOutlined',
'EyeOutlined', 'EyeInvisibleOutlined', 'VisibilityOutlined', 'EyeFilled', 'EyeOutlined', 'EyeInvisibleOutlined', 'SafetyCertificateOutlined',
'BellOutlined', 'NotificationOutlined', 'AlertOutlined', 'WarningOutlined', // 通知
'BellOutlined', 'AlertOutlined', 'WarningOutlined',
'InfoCircleOutlined', 'QuestionCircleOutlined', 'ExclamationCircleOutlined', 'StopOutlined', 'InfoCircleOutlined', 'QuestionCircleOutlined', 'ExclamationCircleOutlined', 'StopOutlined',
// 云和数据
'DatabaseOutlined', 'CloudOutlined', 'HddOutlined', 'ServerOutlined', 'DatabaseOutlined', 'CloudOutlined', 'HddOutlined', 'ServerOutlined',
'WifiOutlined', 'BluetoothOutlined', 'ApiOutlined', 'CodeOutlined', 'CloudUploadOutlined', 'CloudDownloadOutlined',
'LaptopOutlined', 'MobileOutlined', 'TabletOutlined', 'DesktopOutlined', // 设备
'WifiOutlined', 'ApiOutlined', 'CodeOutlined', 'LaptopOutlined',
'MobileOutlined', 'TabletOutlined', 'DesktopOutlined',
// 状态
'ThunderboltOutlined', 'BulbOutlined', 'FireOutlined', 'ExperimentOutlined', 'ThunderboltOutlined', 'BulbOutlined', 'FireOutlined', 'ExperimentOutlined',
'ShoppingCartOutlined', 'ShoppingOutlined', 'GiftOutlined', 'WalletOutlined', 'CheckSquareOutlined', 'MinusSquareOutlined', 'CloseSquareOutlined',
'CreditCardOutlined', 'BankOutlined', 'PayCircleOutlined', 'MoneyCollectOutlined', // 商务
'MedalOutlined', 'TrophyOutlined', 'CrownOutlined', 'GoldOutlined', 'ShoppingCartOutlined', 'ShoppingOutlined', 'ShoppingBagOutlined', 'ShopOutlined',
'GiftOutlined', 'GiftFilledOutlined', 'WalletOutlined',
'CreditCardOutlined', 'BankOutlined', 'PayCircleOutlined',
'MoneyCollectOutlined', 'DollarOutlined', 'EuroOutlined', 'PoundOutlined', 'YenOutlined',
// 奖项
'MedalOutlined', 'TrophyOutlined', 'CrownOutlined', 'GoldOutlined', 'DiamondOutlined',
// 其他
'RocketOutlined', 'FundOutlined', 'PieChartOutlined', 'BarChartOutlined', 'RocketOutlined', 'FundOutlined', 'PieChartOutlined', 'BarChartOutlined',
'AreaChartOutlined', 'LineChartOutlined', 'DotChartOutlined', 'AreaChartOutlined', 'LineChartOutlined', 'DotChartOutlined',
'FileAddOutlined', 'FileExcelOutlined', 'FilePdfOutlined', 'FileWordOutlined',
'UploadOutlined', 'DownloadOutlined', 'ImportOutlined', 'ExportOutlined', 'UploadOutlined', 'DownloadOutlined', 'ImportOutlined', 'ExportOutlined',
'CopyOutlined', 'ScanOutlined', 'QrcodeOutlined', 'BarcodeOutlined', 'ScanOutlined', 'PrinterOutlined', 'RetweetOutlined', 'SwapOutlined',
'PrinterOutlined', 'RetweetOutlined', 'SwapOutlined', 'ShareAltOutlined', 'ShareAltOutlined', 'PoweroffOutlined', 'LoginOutlined', 'LogoutOutlined',
'ApiOutlined', 'CodeSandboxOutlined', 'ConsoleSqlOutlined', 'FunctionOutlined', 'BugOutlined', 'HourglassOutlined',
], ],
} }
@@ -1,6 +1,6 @@
<template> <template>
<a-modal <a-modal
v-model:open="visible" :open="visible"
:title="isEdit ? '编辑配置' : '新增配置'" :title="isEdit ? '编辑配置' : '新增配置'"
:width="600" :width="600"
:confirm-loading="loading" :confirm-loading="loading"
@@ -152,7 +152,7 @@
<script setup> <script setup>
import { ref, reactive, computed, watch } from 'vue' import { ref, reactive, computed, watch } from 'vue'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import { systemApi } from '@/api/system' import systemApi from '@/api/system'
const props = defineProps({ const props = defineProps({
visible: Boolean, visible: Boolean,
@@ -211,44 +211,6 @@ const parsedOptions = computed(() => {
} }
}) })
// 监听record变化,初始化表单
watch(
() => props.record,
(newRecord) => {
if (newRecord) {
// 编辑模式
Object.assign(formData, {
group: newRecord.group || 'system',
key: newRecord.key || '',
name: newRecord.name || '',
type: newRecord.type || 'string',
value: parseValueByType(newRecord.value, newRecord.type),
options: newRecord.options,
sort: newRecord.sort || 0,
status: newRecord.status ?? 1,
description: newRecord.description || '',
is_system: newRecord.is_system || false
})
// 解析选项
if (newRecord.options && typeof newRecord.options === 'object') {
optionsText.value = newRecord.options
.map((opt) => {
if (typeof opt === 'object') {
return `${opt.label}:${opt.value}`
}
return opt
})
.join('\n')
}
} else {
// 新增模式,重置表单
resetForm()
}
},
{ immediate: true }
)
// 根据类型解析值 // 根据类型解析值
const parseValueByType = (value, type) => { const parseValueByType = (value, type) => {
if (!value) return value if (!value) return value
@@ -289,6 +251,44 @@ const resetForm = () => {
formRef.value?.clearValidate() formRef.value?.clearValidate()
} }
// 监听record变化,初始化表单
watch(
() => props.record,
(newRecord) => {
if (newRecord) {
// 编辑模式
Object.assign(formData, {
group: newRecord.group || 'system',
key: newRecord.key || '',
name: newRecord.name || '',
type: newRecord.type || 'string',
value: parseValueByType(newRecord.value, newRecord.type),
options: newRecord.options,
sort: newRecord.sort || 0,
status: newRecord.status ?? 1,
description: newRecord.description || '',
is_system: newRecord.is_system || false
})
// 解析选项
if (newRecord.options && typeof newRecord.options === 'object') {
optionsText.value = newRecord.options
.map((opt) => {
if (typeof opt === 'object') {
return `${opt.label}:${opt.value}`
}
return opt
})
.join('\n')
}
} else {
// 新增模式,重置表单
resetForm()
}
},
{ immediate: true }
)
// 添加自定义分组 // 添加自定义分组
const handleAddCustomGroup = () => { const handleAddCustomGroup = () => {
if (!customGroup.value) { if (!customGroup.value) {
@@ -1,5 +1,5 @@
<template> <template>
<div class="pages system-configs-page"> <div class="pages-base-layout system-configs-page">
<div class="tool-bar"> <div class="tool-bar">
<div class="left-panel"> <div class="left-panel">
<a-space> <a-space>
@@ -129,8 +129,9 @@ import {
EditOutlined, EditOutlined,
FileOutlined FileOutlined
} from '@ant-design/icons-vue' } from '@ant-design/icons-vue'
import scTable from '@/components/scTable/index.vue'
import { useTable } from '@/hooks/useTable' import { useTable } from '@/hooks/useTable'
import { systemApi } from '@/api/system' import systemApi from '@/api/system'
import SaveDialog from './components/SaveDialog.vue' import SaveDialog from './components/SaveDialog.vue'
// 表格引用 // 表格引用
@@ -380,8 +381,6 @@ onMounted(() => {
<style scoped lang="scss"> <style scoped lang="scss">
.system-configs-page { .system-configs-page {
@extend .pages-base-layout;
.value-text { .value-text {
color: #666; color: #666;
font-family: monospace; font-family: monospace;