| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- import type { VbenFormProps } from '#/adapter/form';
- import type { VxeGridProps } from '#/adapter/vxe-table';
- import { h } from 'vue';
- import { EnumApi, MenuApi } from '#/api';
- import { boolOptions, formatterStatus } from '#/api/model';
- import { Icon } from '#/components/icon';
- export const searchFormOptions: VbenFormProps = {
- schema: [
- {
- component: 'Input',
- fieldName: 'title',
- label: '标题',
- },
- {
- component: 'ApiSelect',
- fieldName: 'type',
- label: '菜单类型',
- componentProps: {
- api: {
- type: 'enum',
- params: EnumApi.EnumType.MenuType,
- },
- },
- },
- ],
- };
- export const gridOptions: VxeGridProps<MenuApi.RecordItem> = {
- toolbarConfig: {
- refresh: true,
- print: false,
- export: false,
- zoom: true,
- custom: true,
- },
- columns: [
- { title: '序号', type: 'seq', width: 50 },
- {
- align: 'left',
- field: 'title',
- title: '菜单名称',
- width: 200,
- treeNode: true,
- showOverflow: true,
- slots: {
- default: ({ row }) => {
- return row.icon
- ? h(
- 'span',
- {
- style: {
- display: 'flex',
- alignItems: 'center',
- },
- },
- [
- h(Icon, {
- icon: row.icon,
- }),
- h(
- 'span',
- {
- style: {
- paddingLeft: '6px',
- },
- },
- row.title,
- ),
- ],
- )
- : h('span', {}, row.title);
- },
- },
- },
- { align: 'left', field: 'path', title: '路由地址', width: 180 },
- { align: 'left', field: 'component', title: '组件' },
- {
- align: 'left',
- field: 'permission',
- title: '权限标识',
- width: 120,
- showOverflow: true,
- },
- {
- field: 'status',
- title: '状态',
- width: 60,
- formatter: formatterStatus,
- },
- { field: 'sort', title: '排序', width: 80 },
- {
- field: 'action',
- fixed: 'right',
- slots: { default: 'action' },
- title: '操作',
- width: 170,
- },
- ],
- height: 'auto',
- keepSource: true,
- pagerConfig: {
- enabled: false,
- },
- treeConfig: {
- rowField: 'id',
- childrenField: 'children',
- },
- proxyConfig: {
- ajax: {
- query: async ({ page }, formValues) => {
- return await MenuApi.getList({
- pageIndex: page.currentPage,
- pageSize: page.pageSize,
- ...formValues,
- });
- },
- },
- },
- };
- export const formOptions: VbenFormProps = {
- commonConfig: {
- componentProps: {
- class: 'w-full',
- labelWidth: 110,
- },
- },
- schema: [
- {
- component: 'ApiRadio',
- defaultValue: 0,
- componentProps: {
- api: {
- type: 'enum',
- params: EnumApi.EnumType.MenuType,
- },
- isBtn: true,
- },
- fieldName: 'type',
- label: '菜单类型',
- rules: 'required',
- },
- {
- component: 'Input',
- componentProps: {
- placeholder: '请输入路由名称',
- },
- fieldName: 'name',
- label: '路由名称',
- rules: 'required',
- dependencies: {
- show(values) {
- return [0, 1].includes(values.type);
- },
- triggerFields: ['type'],
- },
- },
- {
- component: 'Input',
- componentProps: {
- placeholder: '请输入路由地址',
- },
- fieldName: 'path',
- label: '路由地址',
- rules: 'required',
- dependencies: {
- triggerFields: ['type'],
- show(values) {
- return [0, 1].includes(values.type);
- },
- },
- },
- {
- component: 'Input',
- componentProps: {
- placeholder: '请输入组件路径',
- },
- dependencies: {
- show(values) {
- return [0, 1].includes(values.type);
- },
- triggerFields: ['type'],
- },
- fieldName: 'component',
- label: '组件路径',
- rules: 'required',
- },
- {
- component: 'Input',
- componentProps: {
- placeholder: '请输入重定向',
- },
- dependencies: {
- triggerFields: ['type'],
- show(values) {
- return [0, 1].includes(values.type);
- },
- },
- fieldName: 'redirect',
- label: '重定向',
- },
- {
- component: 'Input',
- componentProps: {
- placeholder: '请输入菜单名称',
- },
- fieldName: 'title',
- label: '菜单名称',
- rules: 'required',
- },
- {
- component: 'IconPicker',
- componentProps: {
- placeholder: '请输入图标',
- },
- fieldName: 'icon',
- label: '图标',
- rules: 'required',
- dependencies: {
- show(values) {
- return [0, 1].includes(values.type);
- },
- triggerFields: ['type'],
- },
- },
- {
- component: 'RadioGroup',
- defaultValue: 1,
- componentProps: {
- placeholder: '请输入',
- options: boolOptions,
- optionType: 'button',
- buttonStyle: 'solid',
- },
- dependencies: {
- triggerFields: ['type'],
- show(values) {
- return [1].includes(values.type);
- },
- },
- fieldName: 'keepAlive',
- label: '缓存',
- },
- {
- component: 'RadioGroup',
- defaultValue: 0,
- componentProps: {
- placeholder: '请输入',
- options: boolOptions,
- optionType: 'button',
- buttonStyle: 'solid',
- },
- dependencies: {
- triggerFields: ['type'],
- show(values) {
- return [0, 1].includes(values.type);
- },
- },
- fieldName: 'hideInTab',
- label: '隐藏',
- },
- {
- component: 'ApiSelect',
- componentProps: {
- placeholder: '请输入',
- api: {
- type: 'enum',
- params: EnumApi.EnumType.PathType,
- },
- },
- dependencies: {
- triggerFields: ['type'],
- show(values) {
- return [0, 1].includes(values.type);
- },
- },
- fieldName: 'pathType',
- label: '路由类型',
- rules: 'required',
- },
- {
- component: 'InputNumber',
- componentProps: {
- placeholder: '请输入',
- },
- fieldName: 'sort',
- label: '排序',
- rules: 'required',
- },
- {
- component: 'Input',
- componentProps: {
- placeholder: '请输入',
- },
- dependencies: {
- show(values) {
- return [2].includes(values.type);
- },
- triggerFields: ['type'],
- },
- fieldName: 'permission',
- label: '权限标识',
- },
- {
- component: 'ApiRadio',
- defaultValue: 1,
- componentProps: {
- placeholder: '请输入',
- api: {
- type: 'enum',
- params: EnumApi.EnumType.Status,
- },
- isBtn: true,
- },
- fieldName: 'status',
- label: '状态',
- },
- ],
- showDefaultActions: false,
- wrapperClass: 'grid-cols-1',
- };
|