refactor: 重命名 CRUD 组件为 Crud 并简化字典标签类型

- CURD 组件 PageModal、PageSearch、PageContent、usePage 重命名为 CrudModal、CrudSearch、CrudTable、useCrudPage
- 字典项标签类型改用 primary/success/warning/danger/info,保留历史单字母值兼容读取
- 字典项页面拆分为独立子组件,移除 GithubCorner 组件
- 新增 icon 工具与 screen 样式
- 新增路由缓存、路由跳转、大屏与表格 CRUD 示例页
This commit is contained in:
Ray.Hao
2026-09-25 21:10:54 +08:00
parent 3ccbdb7c06
commit 89d45da839
224 changed files with 7926 additions and 3052 deletions

View File

@@ -14,8 +14,20 @@ export default defineMock([
dictCode: "gender",
status: 1,
},
{
id: "2",
name: "通知类型",
dictCode: "notice_type",
status: 1,
},
{
id: "3",
name: "通知级别",
dictCode: "notice_level",
status: 1,
},
],
total: 1,
total: 3,
},
msg: "一切ok",
},
@@ -34,6 +46,14 @@ export default defineMock([
value: "gender",
label: "性别",
},
{
value: "notice_type",
label: "通知类型",
},
{
value: "notice_level",
label: "通知级别",
},
],
msg: "一切ok",
},
@@ -99,41 +119,16 @@ export default defineMock([
{
url: "dicts/:dictCode/items",
method: ["GET"],
body: {
code: "00000",
data: {
list: [
{
id: "1",
dictCode: "gender",
label: "男",
value: "1",
sort: 1,
status: 1,
tagType: "P",
},
{
id: "2",
dictCode: "gender",
label: "女",
value: "2",
sort: 2,
status: 1,
tagType: "D",
},
{
id: "3",
dictCode: "gender",
label: "保密",
value: "0",
sort: 3,
status: 1,
tagType: "I",
},
],
total: 3,
},
msg: "一切ok",
body: ({ params }) => {
const list = dictItemList[params.dictCode] ?? [];
return {
code: "00000",
data: {
list,
total: list.length,
},
msg: "一切ok",
};
},
},
// 字典项列表
@@ -281,32 +276,123 @@ const dictMap: Record<string, any> = {
dictCode: "gender",
status: 1,
},
};
// 字典项映射表数据
const dictItemMap: Record<string, any> = {
1: {
id: "1",
value: "1",
label: "男",
sort: 1,
status: 1,
tagType: "P",
},
2: {
id: "2",
value: "2",
label: "女",
sort: 2,
name: "通知类型",
dictCode: "notice_type",
status: 1,
tagType: "D",
},
3: {
id: "3",
value: "0",
label: "保密",
sort: 3,
name: "通知级别",
dictCode: "notice_level",
status: 1,
tagType: "I",
},
};
// 字典项数据:tagType 用全称,与 sql/youlai-admin.sql 种子数据保持一致
const dictItemList: Record<string, any[]> = {
gender: [
{
id: "1",
dictCode: "gender",
label: "男",
value: "1",
sort: 1,
status: 1,
tagType: "primary",
},
{ id: "2", dictCode: "gender", label: "女", value: "2", sort: 2, status: 1, tagType: "danger" },
{ id: "3", dictCode: "gender", label: "保密", value: "0", sort: 3, status: 1, tagType: "info" },
],
notice_type: [
{
id: "4",
dictCode: "notice_type",
label: "系统升级",
value: "1",
sort: 1,
status: 1,
tagType: "success",
},
{
id: "5",
dictCode: "notice_type",
label: "系统维护",
value: "2",
sort: 2,
status: 1,
tagType: "primary",
},
{
id: "6",
dictCode: "notice_type",
label: "安全警告",
value: "3",
sort: 3,
status: 1,
tagType: "danger",
},
{
id: "7",
dictCode: "notice_type",
label: "假期通知",
value: "4",
sort: 4,
status: 1,
tagType: "success",
},
{
id: "8",
dictCode: "notice_type",
label: "公司新闻",
value: "5",
sort: 5,
status: 1,
tagType: "primary",
},
{
id: "9",
dictCode: "notice_type",
label: "其他",
value: "99",
sort: 99,
status: 1,
tagType: "info",
},
],
notice_level: [
{
id: "10",
dictCode: "notice_level",
label: "低",
value: "L",
sort: 1,
status: 1,
tagType: "info",
},
{
id: "11",
dictCode: "notice_level",
label: "中",
value: "M",
sort: 2,
status: 1,
tagType: "warning",
},
{
id: "12",
dictCode: "notice_level",
label: "高",
value: "H",
sort: 3,
status: 1,
tagType: "danger",
},
],
};
// 字典项映射表数据(按 id 取单条,供编辑回显)
const dictItemMap: Record<string, any> = Object.values(dictItemList)
.flat()
.reduce((map, item) => ({ ...map, [item.id]: item }), {});

View File

@@ -16,7 +16,6 @@ export default defineMock([
title: "系统管理",
icon: "system",
hidden: false,
alwaysShow: false,
params: null,
},
children: [
@@ -29,7 +28,6 @@ export default defineMock([
icon: "el-icon-User",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -42,7 +40,6 @@ export default defineMock([
icon: "role",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -55,7 +52,6 @@ export default defineMock([
icon: "menu",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -68,7 +64,6 @@ export default defineMock([
icon: "tree",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -81,7 +76,6 @@ export default defineMock([
icon: "dict",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -94,20 +88,6 @@ export default defineMock([
icon: "document",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "dict-item",
component: "system/dict/dict-item",
name: "DictItem",
meta: {
title: "字典项",
icon: "",
hidden: true,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -120,7 +100,6 @@ export default defineMock([
icon: "setting",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -132,7 +111,6 @@ export default defineMock([
title: "通知公告",
icon: "",
hidden: false,
alwaysShow: false,
params: null,
},
},
@@ -146,7 +124,6 @@ export default defineMock([
title: "系统工具",
icon: "menu",
hidden: false,
alwaysShow: false,
params: null,
},
children: [
@@ -159,7 +136,6 @@ export default defineMock([
icon: "code",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -173,7 +149,6 @@ export default defineMock([
title: "接口文档",
icon: "api",
hidden: false,
alwaysShow: true,
params: null,
},
children: [
@@ -187,7 +162,6 @@ export default defineMock([
icon: "api",
hidden: false,
keepAlive: true,
alwaysShow: false,
externalUrl:
"https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5",
params: null,
@@ -204,7 +178,6 @@ export default defineMock([
title: "平台文档",
icon: "document",
hidden: false,
alwaysShow: false,
params: null,
},
children: [
@@ -218,7 +191,6 @@ export default defineMock([
icon: "document",
hidden: false,
keepAlive: true,
alwaysShow: false,
externalUrl: "https://juejin.cn/post/7228990409909108793",
params: null,
},
@@ -230,7 +202,6 @@ export default defineMock([
type: "E",
icon: "link",
hidden: false,
alwaysShow: false,
externalUrl: "https://juejin.cn/post/7228990409909108793",
params: null,
},
@@ -245,7 +216,6 @@ export default defineMock([
title: "多级菜单",
icon: "cascader",
hidden: false,
alwaysShow: true,
params: null,
},
children: [
@@ -257,7 +227,6 @@ export default defineMock([
title: "一级菜单",
icon: "",
hidden: false,
alwaysShow: true,
params: null,
},
children: [
@@ -269,33 +238,30 @@ export default defineMock([
title: "二级菜单",
icon: "",
hidden: false,
alwaysShow: false,
params: null,
},
children: [
{
path: "level-three-a",
component: "demo/multi-level/level-one/level-two/level-three-a/index",
component: "demo/route/multi-level/level-one/level-two/level-three-a/index",
name: "MultiLevelLevelThreeA",
meta: {
title: "三级菜单 A",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "level-three-b",
component: "demo/multi-level/level-one/level-two/level-three-b/index",
component: "demo/route/multi-level/level-one/level-two/level-three-b/index",
name: "MultiLevelLevelThreeB",
meta: {
title: "三级菜单 B",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -313,111 +279,102 @@ export default defineMock([
title: "组件封装",
icon: "menu",
hidden: false,
alwaysShow: false,
params: null,
},
children: [
{
path: "curd",
component: "demo/curd/index",
name: "Curd",
path: "crud",
component: "demo/table/crud/index",
name: "Crud",
meta: {
title: "增删改查",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "table-select",
component: "demo/table-select/index",
component: "demo/component/table-select/index",
name: "TableSelect",
meta: {
title: "列表选择器",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "wang-editor",
component: "demo/wang-editor",
component: "demo/component/wang-editor",
name: "WangEditor",
meta: {
title: "富文本编辑器",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "upload",
component: "demo/upload",
component: "demo/component/upload",
name: "Upload",
meta: {
title: "图片上传",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "dict-demo",
component: "demo/dictionary",
component: "demo/component/dictionary",
name: "DictDemo",
meta: {
title: "字典组件",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "icon-select",
component: "demo/icon-select",
component: "demo/component/icon-select",
name: "IconSelect",
meta: {
title: "图标选择器",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "drag",
component: "demo/drag",
component: "demo/component/drag",
name: "Drag",
meta: {
title: "拖拽组件",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "text-scroll",
component: "demo/text-scroll",
component: "demo/component/text-scroll",
name: "TextScroll",
meta: {
title: "滚动文本",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -431,20 +388,18 @@ export default defineMock([
title: "路由参数",
icon: "el-icon-ElementPlus",
hidden: false,
alwaysShow: true,
params: null,
},
children: [
{
path: "route-param-type1",
component: "demo/route-param",
component: "demo/route/route-param",
name: "RouteParamType1",
meta: {
title: "参数(type=1)",
icon: "el-icon-Star",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: {
type: "1",
},
@@ -452,14 +407,13 @@ export default defineMock([
},
{
path: "route-param-type2",
component: "demo/route-param",
component: "demo/route/route-param",
name: "RouteParamType2",
meta: {
title: "参数(type=2)",
icon: "el-icon-StarFilled",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: {
type: "2",
},
@@ -475,59 +429,54 @@ export default defineMock([
title: "功能演示",
icon: "menu",
hidden: false,
alwaysShow: false,
params: null,
},
children: [
{
path: "icon-demo",
component: "demo/icons",
component: "demo/component/icons",
name: "IconDemo",
meta: {
title: "Icons",
icon: "el-icon-Notification",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "dict-sync",
component: "demo/dict-sync",
component: "demo/component/dict-sync",
name: "DictSync",
meta: {
title: "字典实时同步",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "vxe-table",
component: "demo/vxe-table/index",
component: "demo/table/vxe-table/index",
name: "VxeTable",
meta: {
title: "VxeTable",
icon: "el-icon-MagicStick",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "curd-single",
component: "demo/curd-single",
name: "CurdSingle",
path: "crud-single",
component: "demo/table/crud-single",
name: "CrudSingle",
meta: {
title: "CURD单文件",
title: "CRUD单文件",
icon: "el-icon-Reading",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
@@ -922,25 +871,9 @@ export default defineMock([
perm: "sys:dict_type:delete",
children: [],
},
],
},
{
id: "135",
parentId: "1",
name: "字典项",
type: "M",
routeName: "DictData",
routePath: "dict-item",
component: "system/dict/dict-item",
sort: 6,
visible: 0,
icon: "",
redirect: null,
perm: null,
children: [
{
id: "136",
parentId: "135",
parentId: "6",
name: "字典项新增",
type: "B",
routeName: null,
@@ -955,7 +888,7 @@ export default defineMock([
},
{
id: "137",
parentId: "135",
parentId: "6",
name: "字典项编辑",
type: "B",
routeName: null,
@@ -970,7 +903,7 @@ export default defineMock([
},
{
id: "138",
parentId: "135",
parentId: "6",
name: "字典项删除",
type: "B",
routeName: null,
@@ -1364,7 +1297,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "level-three-a",
component: "demo/multi-level/level-one/level-two/level-three-a/index",
component: "demo/route/multi-level/level-one/level-two/level-three-a/index",
sort: 1,
visible: 1,
icon: "",
@@ -1379,7 +1312,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "level-three-b",
component: "demo/multi-level/level-one/level-two/level-three-b/index",
component: "demo/route/multi-level/level-one/level-two/level-three-b/index",
sort: 2,
visible: 1,
icon: "",
@@ -1413,8 +1346,8 @@ export default defineMock([
name: "增删改查",
type: "M",
routeName: null,
routePath: "curd",
component: "demo/curd/index",
routePath: "crud",
component: "demo/table/crud/index",
sort: 0,
visible: 1,
icon: "",
@@ -1429,7 +1362,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "table-select",
component: "demo/table-select/index",
component: "demo/component/table-select/index",
sort: 1,
visible: 1,
icon: "",
@@ -1444,7 +1377,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "wang-editor",
component: "demo/wang-editor",
component: "demo/component/wang-editor",
sort: 2,
visible: 1,
icon: "",
@@ -1459,7 +1392,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "upload",
component: "demo/upload",
component: "demo/component/upload",
sort: 3,
visible: 1,
icon: "",
@@ -1474,7 +1407,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "dict-demo",
component: "demo/dictionary",
component: "demo/component/dictionary",
sort: 4,
visible: 1,
icon: "",
@@ -1489,7 +1422,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "icon-select",
component: "demo/icon-select",
component: "demo/component/icon-select",
sort: 4,
visible: 1,
icon: "",
@@ -1520,7 +1453,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "route-param-type1",
component: "demo/route-param",
component: "demo/route/route-param",
sort: 1,
visible: 1,
icon: "el-icon-Star",
@@ -1535,7 +1468,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "route-param-type2",
component: "demo/route-param",
component: "demo/route/route-param",
sort: 2,
visible: 1,
icon: "el-icon-StarFilled",
@@ -1566,7 +1499,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "icon-demo",
component: "demo/icons",
component: "demo/component/icons",
sort: 2,
visible: 1,
icon: "el-icon-Notification",
@@ -1581,7 +1514,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "dict-sync",
component: "demo/dict-sync",
component: "demo/component/dict-sync",
sort: 3,
visible: 1,
icon: "",
@@ -1596,7 +1529,7 @@ export default defineMock([
type: "M",
routeName: null,
routePath: "vxe-table",
component: "demo/vxe-table/index",
component: "demo/table/vxe-table/index",
sort: 4,
visible: 1,
icon: "el-icon-MagicStick",
@@ -1607,11 +1540,11 @@ export default defineMock([
{
id: "804",
parentId: "7",
name: "CURD单文件",
name: "CRUD单文件",
type: "M",
routeName: null,
routePath: "curd-single",
component: "demo/curd-single",
routePath: "crud-single",
component: "demo/table/crud-single",
sort: 5,
visible: 1,
icon: "el-icon-Reading",
@@ -1965,7 +1898,7 @@ export default defineMock([
},
{
value: "804",
label: "CURD单文件",
label: "CRUD单文件",
},
],
},
@@ -2012,7 +1945,6 @@ export default defineMock([
visible: 1,
scope: 2,
sort: 1,
alwaysShow: 0,
keepAlive: 1,
params: [],
} as any),
@@ -2064,7 +1996,6 @@ const menuMap: Record<string, any> = {
icon: "system",
redirect: "/system/user",
keepAlive: null,
alwaysShow: null,
params: null,
},
2: {
@@ -2081,7 +2012,6 @@ const menuMap: Record<string, any> = {
icon: "user",
redirect: null,
keepAlive: 1,
alwaysShow: null,
},
3: {
id: "3",
@@ -2097,7 +2027,6 @@ const menuMap: Record<string, any> = {
icon: "role",
redirect: null,
keepAlive: 1,
alwaysShow: null,
},
4: {
id: "4",
@@ -2113,7 +2042,6 @@ const menuMap: Record<string, any> = {
icon: "menu",
redirect: null,
keepAlive: 1,
alwaysShow: null,
},
5: {
id: "5",
@@ -2129,7 +2057,6 @@ const menuMap: Record<string, any> = {
icon: "tree",
redirect: null,
keepAlive: 1,
alwaysShow: null,
},
6: {
id: "6",
@@ -2145,7 +2072,6 @@ const menuMap: Record<string, any> = {
icon: "dict",
redirect: null,
keepAlive: 1,
alwaysShow: null,
},
7: {
id: "7",
@@ -2161,7 +2087,6 @@ const menuMap: Record<string, any> = {
icon: "menu",
redirect: "/function/icon-demo",
keepAlive: null,
alwaysShow: null,
params: null,
},
801: {
@@ -2171,14 +2096,13 @@ const menuMap: Record<string, any> = {
type: "M",
routeName: "IconDemo",
routePath: "icon-demo",
component: "demo/icons",
component: "demo/component/icons",
perm: null,
visible: 1,
sort: 1,
icon: "el-icon-Notification",
redirect: null,
keepAlive: 1,
alwaysShow: null,
params: null,
},
802: {
@@ -2188,14 +2112,13 @@ const menuMap: Record<string, any> = {
type: "M",
routeName: "DictSync",
routePath: "dict-sync",
component: "demo/dict-sync",
component: "demo/component/dict-sync",
perm: null,
visible: 1,
sort: 2,
icon: "",
redirect: null,
keepAlive: 1,
alwaysShow: null,
params: null,
},
803: {
@@ -2205,31 +2128,29 @@ const menuMap: Record<string, any> = {
type: "M",
routeName: "VxeTable",
routePath: "vxe-table",
component: "demo/vxe-table/index",
component: "demo/table/vxe-table/index",
perm: null,
visible: 1,
sort: 3,
icon: "el-icon-MagicStick",
redirect: null,
keepAlive: 1,
alwaysShow: null,
params: null,
},
804: {
id: "804",
parentId: "7",
name: "CURD单文件",
name: "CRUD单文件",
type: "M",
routeName: "CurdSingle",
routePath: "curd-single",
component: "demo/curd-single",
routeName: "CrudSingle",
routePath: "crud-single",
component: "demo/table/crud-single",
perm: null,
visible: 1,
sort: 4,
icon: "el-icon-Reading",
redirect: null,
keepAlive: 1,
alwaysShow: null,
params: null,
},
41: {
@@ -2247,7 +2168,6 @@ const menuMap: Record<string, any> = {
icon: "api",
redirect: "",
keepAlive: 1,
alwaysShow: null,
params: [],
},
102: {
@@ -2265,7 +2185,6 @@ const menuMap: Record<string, any> = {
icon: "document",
redirect: "",
keepAlive: 1,
alwaysShow: null,
params: [],
},
30: {
@@ -2283,7 +2202,6 @@ const menuMap: Record<string, any> = {
icon: "link",
redirect: "",
keepAlive: null,
alwaysShow: null,
params: [],
},
};