|
|
@@ -40,14 +40,14 @@ export const gridOptions: VxeGridProps<MenuApi.RecordItem> = {
|
|
|
{ title: '序号', type: 'seq', width: 50 },
|
|
|
{
|
|
|
align: 'left',
|
|
|
- field: 'title',
|
|
|
+ field: 'meta.title',
|
|
|
title: '菜单名称',
|
|
|
width: 200,
|
|
|
treeNode: true,
|
|
|
showOverflow: true,
|
|
|
slots: {
|
|
|
- default: ({ row }) => {
|
|
|
- return row.icon
|
|
|
+ default: ({ row }: any) => {
|
|
|
+ return row.meta.icon
|
|
|
? h(
|
|
|
'span',
|
|
|
{
|
|
|
@@ -58,7 +58,7 @@ export const gridOptions: VxeGridProps<MenuApi.RecordItem> = {
|
|
|
},
|
|
|
[
|
|
|
h(Icon, {
|
|
|
- icon: row.icon,
|
|
|
+ icon: row.meta.icon,
|
|
|
}),
|
|
|
h(
|
|
|
'span',
|
|
|
@@ -67,11 +67,11 @@ export const gridOptions: VxeGridProps<MenuApi.RecordItem> = {
|
|
|
paddingLeft: '6px',
|
|
|
},
|
|
|
},
|
|
|
- row.title,
|
|
|
+ row.meta.title,
|
|
|
),
|
|
|
],
|
|
|
)
|
|
|
- : h('span', {}, row.title);
|
|
|
+ : h('span', {}, row.meta.title);
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
@@ -150,6 +150,7 @@ export const formOptions: VbenFormProps = {
|
|
|
},
|
|
|
fieldName: 'name',
|
|
|
label: '路由名称',
|
|
|
+ help: 'route.name',
|
|
|
rules: 'required',
|
|
|
dependencies: {
|
|
|
show(values) {
|
|
|
@@ -165,6 +166,7 @@ export const formOptions: VbenFormProps = {
|
|
|
},
|
|
|
fieldName: 'path',
|
|
|
label: '路由地址',
|
|
|
+ help: 'route.path',
|
|
|
rules: 'required',
|
|
|
dependencies: {
|
|
|
triggerFields: ['type'],
|
|
|
@@ -186,6 +188,7 @@ export const formOptions: VbenFormProps = {
|
|
|
},
|
|
|
fieldName: 'component',
|
|
|
label: '组件路径',
|
|
|
+ help: 'route.component',
|
|
|
rules: 'required',
|
|
|
},
|
|
|
{
|
|
|
@@ -201,6 +204,7 @@ export const formOptions: VbenFormProps = {
|
|
|
},
|
|
|
fieldName: 'redirect',
|
|
|
label: '重定向',
|
|
|
+ help: 'route.redirect',
|
|
|
},
|
|
|
{
|
|
|
component: 'Input',
|
|
|
@@ -208,6 +212,7 @@ export const formOptions: VbenFormProps = {
|
|
|
placeholder: '请输入菜单名称',
|
|
|
},
|
|
|
fieldName: 'title',
|
|
|
+ help: 'meta.title',
|
|
|
label: '菜单名称',
|
|
|
rules: 'required',
|
|
|
},
|
|
|
@@ -218,6 +223,7 @@ export const formOptions: VbenFormProps = {
|
|
|
},
|
|
|
fieldName: 'icon',
|
|
|
label: '图标',
|
|
|
+ help: 'meta.icon',
|
|
|
rules: 'required',
|
|
|
dependencies: {
|
|
|
show(values) {
|
|
|
@@ -228,7 +234,7 @@ export const formOptions: VbenFormProps = {
|
|
|
},
|
|
|
{
|
|
|
component: 'RadioGroup',
|
|
|
- defaultValue: 1,
|
|
|
+ defaultValue: true,
|
|
|
componentProps: {
|
|
|
placeholder: '请输入',
|
|
|
options: boolOptions,
|
|
|
@@ -243,10 +249,11 @@ export const formOptions: VbenFormProps = {
|
|
|
},
|
|
|
fieldName: 'keepAlive',
|
|
|
label: '缓存',
|
|
|
+ help: 'meta.keepAlive',
|
|
|
},
|
|
|
{
|
|
|
component: 'RadioGroup',
|
|
|
- defaultValue: 0,
|
|
|
+ defaultValue: false,
|
|
|
componentProps: {
|
|
|
placeholder: '请输入',
|
|
|
options: boolOptions,
|
|
|
@@ -261,9 +268,11 @@ export const formOptions: VbenFormProps = {
|
|
|
},
|
|
|
fieldName: 'hideInTab',
|
|
|
label: '隐藏',
|
|
|
+ help: 'meta.keepAlive',
|
|
|
},
|
|
|
{
|
|
|
component: 'ApiSelect',
|
|
|
+ defaultValue: 0,
|
|
|
componentProps: {
|
|
|
placeholder: '请输入',
|
|
|
api: {
|
|
|
@@ -281,6 +290,38 @@ export const formOptions: VbenFormProps = {
|
|
|
label: '路由类型',
|
|
|
rules: 'required',
|
|
|
},
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入内嵌页面',
|
|
|
+ },
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['pathType'],
|
|
|
+ show(values) {
|
|
|
+ return [1].includes(values.pathType);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ fieldName: 'iframeSrc',
|
|
|
+ help: 'meta.iframeSrc',
|
|
|
+ label: '内嵌页面',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入外链地址',
|
|
|
+ },
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['pathType'],
|
|
|
+ show(values) {
|
|
|
+ return [2].includes(values.pathType);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ fieldName: 'link',
|
|
|
+ help: 'meta.link',
|
|
|
+ label: '外链地址',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
{
|
|
|
component: 'InputNumber',
|
|
|
componentProps: {
|
|
|
@@ -322,3 +363,174 @@ export const formOptions: VbenFormProps = {
|
|
|
showDefaultActions: false,
|
|
|
wrapperClass: 'grid-cols-1',
|
|
|
};
|
|
|
+
|
|
|
+export const formMenuOptions: VbenFormProps = {
|
|
|
+ commonConfig: {
|
|
|
+ componentProps: {
|
|
|
+ class: 'w-full',
|
|
|
+ labelWidth: 110,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ schema: [
|
|
|
+ {
|
|
|
+ component: 'ApiTreeSelect',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入上级菜单',
|
|
|
+ api: {
|
|
|
+ url: MenuApi.getTree,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ fieldName: 'pid',
|
|
|
+ label: '上级菜单',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入路由名称',
|
|
|
+ },
|
|
|
+ fieldName: 'name',
|
|
|
+ label: '路由名称',
|
|
|
+ help: 'route.name',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入路由地址',
|
|
|
+ },
|
|
|
+ fieldName: 'path',
|
|
|
+ label: '路由地址',
|
|
|
+ help: 'route.path',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入组件路径',
|
|
|
+ disabled: true,
|
|
|
+ },
|
|
|
+ fieldName: 'component',
|
|
|
+ label: '组件路径',
|
|
|
+ help: 'route.component',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入菜单名称',
|
|
|
+ },
|
|
|
+ fieldName: 'title',
|
|
|
+ label: '菜单名称',
|
|
|
+ help: 'meta.title',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'IconPicker',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入图标',
|
|
|
+ },
|
|
|
+ fieldName: 'icon',
|
|
|
+ label: '图标',
|
|
|
+ help: 'meta.icon',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'RadioGroup',
|
|
|
+ defaultValue: true,
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入',
|
|
|
+ options: boolOptions,
|
|
|
+ optionType: 'button',
|
|
|
+ buttonStyle: 'solid',
|
|
|
+ },
|
|
|
+ fieldName: 'keepAlive',
|
|
|
+ label: '缓存',
|
|
|
+ help: 'meta.keepAlive',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'RadioGroup',
|
|
|
+ defaultValue: false,
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入',
|
|
|
+ options: boolOptions,
|
|
|
+ optionType: 'button',
|
|
|
+ buttonStyle: 'solid',
|
|
|
+ },
|
|
|
+ fieldName: 'hideInTab',
|
|
|
+ help: 'meta.hideInTab',
|
|
|
+ label: '隐藏',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'ApiSelect',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入',
|
|
|
+ api: {
|
|
|
+ type: 'enum',
|
|
|
+ params: EnumApi.EnumType.PathType,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ defaultValue: 0,
|
|
|
+ fieldName: 'pathType',
|
|
|
+ label: '路由类型',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入内嵌页面',
|
|
|
+ },
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['pathType'],
|
|
|
+ show(values) {
|
|
|
+ return [1].includes(values.pathType);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ fieldName: 'iframeSrc',
|
|
|
+ help: 'meta.iframeSrc',
|
|
|
+ label: '内嵌页面',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入外链地址',
|
|
|
+ },
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['pathType'],
|
|
|
+ show(values) {
|
|
|
+ return [2].includes(values.pathType);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ fieldName: 'link',
|
|
|
+ help: 'meta.link',
|
|
|
+ label: '外链地址',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'InputNumber',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入',
|
|
|
+ },
|
|
|
+ fieldName: 'sort',
|
|
|
+ label: '排序',
|
|
|
+ rules: 'required',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ component: 'ApiRadio',
|
|
|
+ defaultValue: 1,
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入',
|
|
|
+ api: {
|
|
|
+ type: 'enum',
|
|
|
+ params: EnumApi.EnumType.Status,
|
|
|
+ },
|
|
|
+ isBtn: true,
|
|
|
+ },
|
|
|
+ fieldName: 'status',
|
|
|
+ label: '状态',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ showDefaultActions: false,
|
|
|
+ wrapperClass: 'grid-cols-2',
|
|
|
+};
|