+
{{
extra: () => (slots['extra'] ? slots['extra']() : props.extra),
diff --git a/src/components/Form/src/helper/componentMap.ts b/src/components/Form/src/helper/componentMap.ts
index b40c8ce..1f69009 100644
--- a/src/components/Form/src/helper/componentMap.ts
+++ b/src/components/Form/src/helper/componentMap.ts
@@ -22,6 +22,7 @@ import {
} from 'element-plus'
import { InputPassword } from '@/components/InputPassword'
import { Editor } from '@/components/Editor'
+import { JsonEditor } from '@/components/JsonEditor'
import { ComponentName } from '../types'
const componentMap: Recordable = {
@@ -47,7 +48,8 @@ const componentMap: Recordable = {
InputPassword: InputPassword,
Editor: Editor,
TreeSelect: ElTreeSelect,
- Upload: ElUpload
+ Upload: ElUpload,
+ JsonEditor: JsonEditor
}
export { componentMap }
diff --git a/src/components/Form/src/types/index.ts b/src/components/Form/src/types/index.ts
index 8d13e0d..2d08d84 100644
--- a/src/components/Form/src/types/index.ts
+++ b/src/components/Form/src/types/index.ts
@@ -21,6 +21,7 @@ import {
UploadProps
} from 'element-plus'
import { IEditorConfig } from '@wangeditor/editor'
+import { JsonEditorProps } from '@/components/JsonEditor'
import { CSSProperties } from 'vue'
export interface PlaceholderModel {
@@ -53,7 +54,8 @@ export enum ComponentNameEnum {
INPUT_PASSWORD = 'InputPassword',
EDITOR = 'Editor',
TREE_SELECT = 'TreeSelect',
- UPLOAD = 'Upload'
+ UPLOAD = 'Upload',
+ JSON_EDITOR = 'JsonEditor'
}
type CamelCaseComponentName = keyof typeof ComponentNameEnum extends infer K
@@ -620,6 +622,7 @@ export interface FormSchema {
| InputPasswordComponentProps
| TreeSelectComponentProps
| UploadComponentProps
+ | JsonEditorProps
| any
/**
diff --git a/src/components/JsonEditor/index.ts b/src/components/JsonEditor/index.ts
new file mode 100644
index 0000000..53a2d06
--- /dev/null
+++ b/src/components/JsonEditor/index.ts
@@ -0,0 +1,4 @@
+import JsonEditor from './src/JsonEditor.vue'
+export type { JsonEditorProps } from './src/types'
+
+export { JsonEditor }
diff --git a/src/components/JsonEditor/src/JsonEditor.vue b/src/components/JsonEditor/src/JsonEditor.vue
new file mode 100644
index 0000000..a1c0a43
--- /dev/null
+++ b/src/components/JsonEditor/src/JsonEditor.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
diff --git a/src/components/JsonEditor/src/types/index.ts b/src/components/JsonEditor/src/types/index.ts
new file mode 100644
index 0000000..d77097f
--- /dev/null
+++ b/src/components/JsonEditor/src/types/index.ts
@@ -0,0 +1,23 @@
+export interface JsonEditorProps {
+ value: any
+ deep?: number
+ showLength?: boolean
+ showLineNumbers?: boolean
+ showLineNumber?: boolean
+ showIcon?: boolean
+ showDoubleQuotes?: boolean
+ virtual?: boolean
+ height?: number
+ itemHeight?: number
+ rootPath?: string
+ nodeSelectable?: (...args: any[]) => boolean
+ selectableType?: 'multiple' | 'single'
+ showSelectController?: boolean
+ selectOnClickNode?: boolean
+ highlightSelectedNode?: boolean
+ collapsedOnClickBrackets?: boolean
+ renderNodeKey?: (...args: any[]) => any
+ renderNodeValue?: (...args: any[]) => any
+ editable?: boolean
+ editableTrigger?: 'click' | 'dblclick'
+}
diff --git a/src/components/Menu/src/components/useRenderMenuItem.tsx b/src/components/Menu/src/components/useRenderMenuItem.tsx
index 17a520a..d7fede2 100644
--- a/src/components/Menu/src/components/useRenderMenuItem.tsx
+++ b/src/components/Menu/src/components/useRenderMenuItem.tsx
@@ -1,24 +1,23 @@
import { ElSubMenu, ElMenuItem } from 'element-plus'
-import type { RouteMeta } from 'vue-router'
import { hasOneShowingChild } from '../helper'
import { isUrl } from '@/utils/is'
import { useRenderMenuTitle } from './useRenderMenuTitle'
import { useDesign } from '@/hooks/web/useDesign'
import { pathResolve } from '@/utils/routerHelper'
+const { renderMenuTitle } = useRenderMenuTitle()
+
export const useRenderMenuItem = (
// allRouters: AppRouteRecordRaw[] = [],
menuMode: 'vertical' | 'horizontal'
) => {
const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => {
return routers.map((v) => {
- const meta = (v.meta ?? {}) as RouteMeta
+ const meta = v.meta ?? {}
if (!meta.hidden) {
const { oneShowingChild, onlyOneChild } = hasOneShowingChild(v.children, v)
const fullPath = isUrl(v.path) ? v.path : pathResolve(parentPath, v.path) // getAllParentPath(allRouters, v.path).join('/')
- const { renderMenuTitle } = useRenderMenuTitle()
-
if (
oneShowingChild &&
(!onlyOneChild?.children || onlyOneChild?.noShowingChildren) &&
diff --git a/src/components/Menu/src/helper.ts b/src/components/Menu/src/helper.ts
index b483881..003cf10 100644
--- a/src/components/Menu/src/helper.ts
+++ b/src/components/Menu/src/helper.ts
@@ -1,4 +1,3 @@
-import type { RouteMeta } from 'vue-router'
import { ref, unref } from 'vue'
import { findPath } from '@/utils/tree'
@@ -21,7 +20,7 @@ export const hasOneShowingChild = (
const onlyOneChild = ref()
const showingChildren = children.filter((v) => {
- const meta = (v.meta ?? {}) as RouteMeta
+ const meta = v.meta ?? {}
if (meta.hidden) {
return false
} else {
diff --git a/src/components/Setting/src/components/InterfaceDisplay.vue b/src/components/Setting/src/components/InterfaceDisplay.vue
index 8e7d779..e8fbde6 100644
--- a/src/components/Setting/src/components/InterfaceDisplay.vue
+++ b/src/components/Setting/src/components/InterfaceDisplay.vue
@@ -115,6 +115,14 @@ const dynamicRouterChange = (show: boolean) => {
appStore.setDynamicRouter(show)
}
+// 服务端动态路由
+const serverDynamicRouter = ref(appStore.getServerDynamicRouter)
+
+const serverDynamicRouterChange = (show: boolean) => {
+ ElMessage.info(t('setting.reExperienced'))
+ appStore.setServerDynamicRouter(show)
+}
+
// 固定菜单
const fixedMenu = ref(appStore.getFixedMenu)
@@ -206,6 +214,11 @@ watch(
+
+ {{ t('setting.serverDynamicRouter') }}
+
+
+
{{ t('setting.fixedMenu') }}
diff --git a/src/components/TabMenu/src/TabMenu.vue b/src/components/TabMenu/src/TabMenu.vue
index 3305113..4ca39b2 100644
--- a/src/components/TabMenu/src/TabMenu.vue
+++ b/src/components/TabMenu/src/TabMenu.vue
@@ -105,7 +105,8 @@ export default defineComponent({
tabActive.value = item.children ? item.path : item.path.split('/')[0]
if (item.children) {
if (newPath === oldPath || !unref(showMenu)) {
- showMenu.value = unref(fixedMenu) ? true : !unref(showMenu)
+ // showMenu.value = unref(fixedMenu) ? true : !unref(showMenu)
+ showMenu.value = !unref(showMenu)
}
if (unref(showMenu)) {
permissionStore.setMenuTabRouters(
@@ -131,11 +132,6 @@ export default defineComponent({
return false
}
- const mouseleave = () => {
- if (!unref(showMenu) || unref(fixedMenu)) return
- showMenu.value = false
- }
-
return () => (
)
@@ -197,11 +192,11 @@ export default defineComponent({