@okiss/oms 0.0.92 → 0.0.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/init.ts","../src/utils/token.ts","../src/store/http.ts","../src/default.ts","../src/store/modules/settings.ts","../src/store/modules/user.ts","../src/store/modules/app.ts","../src/store/modules/builderSchema.ts","../src/store/index.ts","../src/composables/useThemeMode.ts","../src/App.vue","../src/mock/types.ts","../src/mock/data/example.ts","../src/mock/apis/user.ts","../src/mock/apis/index.ts","../src/mock/index.ts","../src/plugins/element-plus.ts","../src/utils/request/cache.ts","../src/utils/container/index.ts","../src/scaffold/dashboard.vue","../src/scaffold/layout/components/Breadcrumb/index.vue","../src/scaffold/layout/components/Hamburger/index.vue","../src/scaffold/devtool/DevLayout.vue","../src/scaffold/devtool/formBuilder/ctrls/input.js","../src/scaffold/devtool/formBuilder/ctrls/number.js","../src/scaffold/devtool/formBuilder/ctrls/number-range.js","../src/scaffold/devtool/formBuilder/ctrls/select.js","../src/scaffold/devtool/formBuilder/ctrls/radio.js","../src/scaffold/devtool/formBuilder/ctrls/switch.js","../src/scaffold/devtool/formBuilder/ctrls/code.js","../src/scaffold/devtool/formBuilder/ctrls/json.js","../src/scaffold/devtool/formBuilder/ctrls/upload.js","../src/scaffold/devtool/formBuilder/ctrls/template.js","../src/scaffold/devtool/formBuilder/ctrls/icon-select.js","../src/scaffold/devtool/formBuilder/ctrls/sub-form.js","../src/scaffold/devtool/formBuilder/ctrls/checkbox.js","../src/scaffold/devtool/formBuilder/form.js","../src/scaffold/devtool/formBuilder/index.vue","../src/scaffold/devtool/tableBuilder/ctrls/input.js","../src/scaffold/devtool/tableBuilder/ctrls/select.js","../src/scaffold/devtool/tableBuilder/ctrls/date.js","../src/scaffold/devtool/tableBuilder/table.js","../src/scaffold/devtool/base.js","../src/scaffold/devtool/tableBuilder/columns/span.js","../src/scaffold/devtool/tableBuilder/columns/emum.js","../src/scaffold/devtool/tableBuilder/columns/html.js","../src/scaffold/devtool/tableBuilder/columns/icon.js","../src/scaffold/devtool/tableBuilder/columns/image.js","../src/scaffold/devtool/tableBuilder/columns/json.js","../src/scaffold/devtool/tableBuilder/columns/link.js","../src/scaffold/devtool/tableBuilder/columns/rich.js","../src/scaffold/devtool/tableBuilder/columns/tpl.js","../src/scaffold/devtool/tableBuilder/columns/index.js","../src/scaffold/devtool/tableBuilder/btn/jump.js","../src/scaffold/devtool/tableBuilder/btn/api.js","../src/scaffold/devtool/tableBuilder/btn/form.js","../src/scaffold/devtool/tableBuilder/btn/table.js","../src/scaffold/devtool/tableBuilder/btn/index.js","../src/scaffold/devtool/tableBuilder/index.vue","../src/scaffold/layout/components/PageEditor.vue","../src/scaffold/layout/components/Navbar.vue","../src/scaffold/layout/components/Sidebar/Logo.vue","../src/scaffold/layout/components/Sidebar/Link.vue","../src/scaffold/layout/components/Sidebar/FixiOSBug.ts","../src/scaffold/layout/components/Sidebar/MenuContent.vue","../src/scaffold/layout/components/Sidebar/SidebarItem.vue","../src/scaffold/layout/components/Sidebar/SearchMenu.vue","../src/types.ts","../src/scaffold/layout/components/Sidebar/index.vue","../src/scaffold/layout/components/AppMain.vue","../src/scaffold/layout/index.vue","../src/scaffold/login.vue","../src/scaffold/404.vue","../src/router/router.ts","../src/router/guard/nprogress.ts","../src/router/guard/func.ts","../src/utils/sso/base.ts","../src/utils/sso/github.ts","../src/utils/sso/dingtalk.ts","../src/utils/sso/index.ts","../src/router/guard/permission.ts","../src/components/VLoading.vue","../src/components/notice/VNotice.vue","../src/components/PageLoad.vue","../src/scaffold/table.vue","../src/scaffold/form.vue","../src/components/VTree.vue","../src/scaffold/tree.vue","../src/scaffold/container.vue","../src/components/report/option.ts","../src/components/report/NumberPanel.vue","../src/components/report/part.vue","../src/components/report/index.vue","../src/scaffold/report.vue","../src/render/index.tsx","../src/scaffold/custom.vue","../src/router/remote.ts","../src/router/permission.ts","../src/utils/jwt.ts","../src/router/guard/remote-routes.ts","../src/router/guard/set-page-title.ts","../src/router/guard/index.ts","../src/router/index.ts","../src/utils/request/interceptors.ts","../src/utils/request/index.ts","../src/directive/outClick.ts","../src/plugins/eventBus.ts","../src/directive/rightClick.ts","../src/directive/resize.ts","../src/directive/devtool.ts","../src/admin.ts"],"sourcesContent":["/* eslint-disable */\ninterface String {\n format(...replacements: string[]): string;\n}\n\nif (!String.prototype.format) {\n String.prototype.format = function () {\n const args = arguments\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] !== 'undefined'\n ? args[number]\n : match\n })\n }\n}\n","import Cookies from 'js-cookie'\nimport { pinia, useSettingsStore } from '../store'\n\nconst TokenKey = 'oms:token'\n\nexport function getToken(): string {\n return Cookies.get(TokenKey) || ''\n}\n\nexport function setToken(token: string) {\n const settings = useSettingsStore(pinia)\n const expires = new Date(new Date().getTime() + (settings.tokenExpire || 24 * 60 * 60 * 1000))\n return Cookies.set(TokenKey, token, { expires })\n}\n\nexport function removeToken() {\n return Cookies.remove(TokenKey)\n}\n","import type { AxiosInstance } from 'axios'\n\nlet httpClient: AxiosInstance | null = null\n\nexport function setHttp(http: AxiosInstance) { httpClient = http }\nexport function getHttp(): AxiosInstance | null { return httpClient }\n\n","import zhCn from 'element-plus/es/locale/lang/zh-cn'\nimport { AxiosRequestConfig } from 'axios'\nimport { OmsOptions } from './types'\nimport { Settings } from './types'\n\nconst defaultAxios: AxiosRequestConfig = {\n baseURL: '/api',\n withCredentials: true,\n cacheEnable: true\n}\n\nexport const defaultSettings: Settings = {\n title: 'oms',\n fixedHeader: false,\n sidebarLogo: true,\n logo: 'http://assest.daodao.run/logo.png',\n closeNavNotice: false,\n navBarNotice: '',\n hasNewMessage: true,\n showPageJsonSchema: false,\n loginTips: '',\n sso: {},\n ElementPlus: {\n size: 'default',\n zIndex: 3000,\n locale: zhCn\n },\n nav: [],\n whiteRoutes: ['/login'],\n tokenExpire: 7 * 24 * 60 * 60 * 1000,\n defaultAvatar: 'http://assest.daodao.run/avatar.jpg',\n envColor: {\n 'uat': 'gray',\n 'pre': 'green'\n },\n serviceOffLineNotice: '当前页面功能正在维护, 请稍后再试~~~',\n formMutex: true,\n captcha: true,\n themeMode: 'light'\n}\n\nexport const defaultOptions: OmsOptions = {\n axios: defaultAxios,\n settings: defaultSettings,\n plugins: [],\n mock: false\n}\n","import { defineStore } from 'pinia'\nimport { Settings } from '../../types'\nimport { defaultSettings } from '../../default'\nimport { cloneDeep, merge } from 'lodash'\n\nexport const settings: Settings = cloneDeep(defaultSettings)\n\nexport const useSettingsStore = defineStore('settings', {\n state: (): Settings => ({ ...settings }),\n actions: {\n updateSettings(newSettings: Settings) {\n // merge into reactive state\n merge(this, newSettings)\n }\n }\n})\n\nexport default useSettingsStore\n","import { defineStore } from 'pinia'\nimport { strOrNum, User } from '../types'\nimport { LoginForm, LoginTicket, RemoteModule, Settings, UserInfo } from '../../types'\nimport { ApiResponse } from '../../utils/request/types'\nimport { getToken, removeToken, setToken } from '../../utils/token'\nimport { RouteRecordRaw } from 'vue-router'\nimport Cookies from 'js-cookie'\nimport { getHttp } from '../http'\nimport { useSettingsStore } from './settings'\n\nexport const userState: User = {\n name: '',\n nickname: '',\n avatar: '',\n token: getToken(),\n customRouter: [],\n remoteRouter: [],\n menuRoutes: [],\n isLodeRemoteRoutes: false,\n resource: {},\n roleIds: [],\n path: '',\n env: '',\n expired: false\n}\n\nconst getRouteKey = (route: RouteRecordRaw): string => {\n return typeof route.name === 'string' ? route.name : route.path\n}\n\nexport const useUserStore = defineStore('user', {\n state: (): User => ({ ...userState }),\n actions: {\n updateToken(token: string) {\n this.token = token\n setToken(token)\n },\n removeToken() {\n this.token = ''\n removeToken()\n },\n updateRemoteRouter(routes: RemoteModule[]) {\n this.remoteRouter = routes\n this.isLodeRemoteRoutes = true\n },\n setCustomRoutes(routes: RouteRecordRaw[]) {\n const existed = new Set(this.customRouter.map(route => getRouteKey(route)))\n const append = routes.filter(route => !existed.has(getRouteKey(route)))\n if (append.length) {\n this.customRouter = this.customRouter.concat(append)\n }\n },\n updateState<K extends keyof User>({ key, value }: { key: K, value: any }) {\n // @ts-ignore\n this[key] = value\n },\n resetUser() {\n const fresh: User = { ...userState, token: getToken() }\n Object.assign(this, fresh)\n },\n SET_EXPIRED() {\n this.expired = !this.expired\n },\n\n // async actions\n login(data: LoginForm | LoginTicket): Promise<boolean> {\n return new Promise<boolean>((resolve, reject) => {\n const http = getHttp()\n if (!http) {\n reject('http client not init')\n return\n }\n http.request<UserInfo, ApiResponse<UserInfo>>({\n url: '/user/login',\n method: 'POST',\n data\n }).then((response: ApiResponse<UserInfo>) => {\n this.updateToken(response.data?.token || '')\n resolve(true)\n }).catch(error => reject(error))\n })\n },\n logout() {\n this.removeToken()\n this.resetUser()\n },\n info(): Promise<boolean> {\n return new Promise<boolean>((resolve, reject) => {\n const http = getHttp()\n if (!http) {\n reject('http client not init')\n return\n }\n http.request<UserInfo, ApiResponse<UserInfo>>({\n url: '/user/info',\n method: 'GET'\n }).then((response: ApiResponse<UserInfo>) => {\n const roleIds: strOrNum[] = response.data?.role_ids || []\n this.updateState({ key: 'name', value: response.data?.name })\n this.updateState({ key: 'nickname', value: response.data?.nickname })\n this.updateState({ key: 'roleIds', value: roleIds })\n this.updateState({ key: 'env', value: response.data?.env })\n const website = (response.data?.website || {}) as Settings\n useSettingsStore().updateSettings(website)\n // @ts-ignore\n !Cookies.get('username') && Cookies.set('username', response.data?.name)\n // We cannot directly import settings store here without circular concerns in some flows.\n resolve(true)\n }).catch(error => reject(error))\n })\n },\n loadRemoteRoutes(): Promise<RemoteModule[]> {\n return new Promise<RemoteModule[]>((resolve, reject) => {\n const http = getHttp()\n http?.request<RemoteModule, ApiResponse<RemoteModule[]>>({\n url: '/user/routes',\n method: 'get'\n }).then((response: ApiResponse<RemoteModule[]>) => {\n if (response.code === 0) {\n const resource: RemoteModule[] = response.data || []\n resolve(resource)\n } else {\n reject('error')\n }\n }).catch(error => {\n console.log(error)\n reject(error)\n })\n })\n },\n SetExpired() {\n this.SET_EXPIRED()\n }\n }\n})\n\nexport default useUserStore\n","import { defineStore } from 'pinia'\nimport { App, PageSchema, Sidebar } from '../types'\nimport Cookies from 'js-cookie'\n\nconst SIDEBAR_STATUS_KEY = 'sidebarStatus'\n\nfunction getStoredSidebarStatus() {\n if (typeof window === 'undefined')\n return undefined\n const local = window.localStorage.getItem(SIDEBAR_STATUS_KEY)\n if (local !== null)\n return local === '1'\n const cookie = Cookies.get(SIDEBAR_STATUS_KEY)\n if (cookie !== undefined)\n return !!cookie\n}\n\nfunction persistSidebarStatus(opened: boolean) {\n if (typeof window !== 'undefined')\n window.localStorage.setItem(SIDEBAR_STATUS_KEY, opened ? '1' : '0')\n Cookies.set(SIDEBAR_STATUS_KEY, opened ? '1' : '0')\n}\n\nexport const appState: App = {\n sidebar: {\n opened: getStoredSidebarStatus() ?? true,\n withoutAnimation: false\n },\n device: 'desktop',\n pages: {},\n currentRouteMeta: {},\n builderSchema: {},\n baseURL: ''\n}\n\nexport const useAppStore = defineStore('app', {\n state: (): App => ({ ...appState }),\n actions: {\n TOGGLE_SIDEBAR() {\n this.sidebar.opened = !this.sidebar.opened\n this.sidebar.withoutAnimation = false\n persistSidebarStatus(this.sidebar.opened)\n },\n CLOSE_SIDEBAR(withoutAnimation: boolean) {\n this.sidebar.opened = false\n persistSidebarStatus(this.sidebar.opened)\n this.sidebar.withoutAnimation = withoutAnimation\n },\n TOGGLE_DEVICE(device: string) {\n this.device = device\n },\n SET_PAGE_JSON_SCHEMA({ page, json }: PageSchema) {\n this.pages[page] = json\n },\n SET_CURRENT_META(data: Record<string, any>) {\n this.currentRouteMeta = data\n },\n SET_BUILDER_SCHEMA(data: Record<string, any>) {\n this.builderSchema = data\n },\n SET_BASE_API(data: string) {\n this.baseURL = data\n },\n\n // Vuex-compat method names\n toggleSideBar() { this.TOGGLE_SIDEBAR() },\n closeSideBar({ withoutAnimation }: Sidebar) { this.CLOSE_SIDEBAR(withoutAnimation) },\n toggleDevice(device: string) { this.TOGGLE_DEVICE(device) },\n setPageJsonSchema(data: PageSchema) { this.SET_PAGE_JSON_SCHEMA(data) },\n setCurrentMeta(data: Record<string, any>) { this.SET_CURRENT_META(data) },\n setBuilderSchema(data: Record<string, any>) { this.SET_BUILDER_SCHEMA(data) },\n setBaseAPI(data: string) { this.SET_BASE_API(data) }\n }\n})\n\nexport default useAppStore\n","/**\n * BuilderSchema\n * 存储pageEditor 编辑模式下时子组件联动相关的状态数据\n */\n\nimport { defineStore } from 'pinia'\nimport { BuilderSchema } from '../types'\n\nexport const builderSchemaState: BuilderSchema = {\n currentCellItem: {} // form/sub-form 当前单元格编辑数据\n}\n\nexport const useBuilderSchemaStore = defineStore('builderSchema', {\n state: (): BuilderSchema => ({ ...builderSchemaState }),\n actions: {\n SET_CURRENT_CELLITEM(data: Record<string, any>) {\n this.currentCellItem = data\n },\n setCurrentCellItem(data: Record<string, any>) {\n this.SET_CURRENT_CELLITEM(data)\n }\n }\n})\n\nexport default useBuilderSchemaStore\n","import type { App } from 'vue'\nimport { createPinia } from 'pinia'\n\nexport const pinia = createPinia()\n\nexport function setupStore(app: App<Element>) {\n app.use(pinia)\n}\n\nexport * from './modules/user'\nexport * from './modules/app'\nexport * from './modules/settings'\nexport * from './modules/builderSchema'\nexport * from './http'\n\nexport default pinia\n","import { computed, ref, watch } from 'vue'\nimport { useSettingsStore } from '../store'\nimport {\n applyDocumentTheme,\n dispatchThemeChange,\n getDocumentTheme,\n normalizeTheme,\n type ThemeMode\n} from '@okiss/utils'\n\nconst THEME_STORAGE_KEY = 'oms-theme'\n\nconst themeMode = ref<ThemeMode>('light')\nlet initialized = false\nlet stopWatch: (() => void) | null = null\nlet stopSystemListener: (() => void) | null = null\n\nfunction detectInitialTheme(storeMode: unknown): ThemeMode {\n const fromStore = normalizeTheme((storeMode as string) ?? undefined)\n if (typeof window === 'undefined') {\n return fromStore\n }\n const cached = window.localStorage?.getItem(THEME_STORAGE_KEY)\n if (cached === 'dark' || cached === 'light') {\n return cached\n }\n if (storeMode === 'dark' || storeMode === 'light') {\n return storeMode\n }\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\nfunction persistTheme(mode: ThemeMode) {\n if (typeof window !== 'undefined') {\n window.localStorage?.setItem(THEME_STORAGE_KEY, mode)\n }\n}\n\nfunction applyTheme(mode: ThemeMode) {\n const normalized = normalizeTheme(mode)\n themeMode.value = normalized\n applyDocumentTheme(normalized)\n dispatchThemeChange(normalized)\n persistTheme(normalized)\n}\n\nfunction setupSystemThemeListener(onChange: (mode: ThemeMode) => void) {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n stopSystemListener = null\n return\n }\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n const listener = (event: MediaQueryListEvent) => {\n const matches = event.matches ?? mediaQuery.matches\n onChange(matches ? 'dark' : 'light')\n }\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', listener)\n } else {\n mediaQuery.addListener(listener)\n }\n stopSystemListener = () => {\n if (typeof mediaQuery.removeEventListener === 'function') {\n mediaQuery.removeEventListener('change', listener)\n } else {\n mediaQuery.removeListener(listener)\n }\n stopSystemListener = null\n }\n}\n\nexport function useThemeMode() {\n const settingsStore = useSettingsStore()\n\n const setTheme = (next: ThemeMode) => {\n const normalized = normalizeTheme(next)\n if (settingsStore.themeMode !== normalized) {\n settingsStore.updateSettings({ themeMode: normalized } as any)\n } else {\n applyTheme(normalized)\n }\n }\n\n if (!initialized) {\n initialized = true\n const resolved = detectInitialTheme(settingsStore.themeMode)\n if (normalizeTheme(settingsStore.themeMode as string) !== resolved) {\n settingsStore.updateSettings({ themeMode: resolved } as any)\n } else {\n applyTheme(resolved)\n }\n stopWatch = watch(\n () => settingsStore.themeMode,\n (mode) => {\n applyTheme(normalizeTheme(mode as string))\n },\n { immediate: true }\n )\n stopSystemListener?.()\n setupSystemThemeListener((mode) => {\n setTheme(mode)\n })\n }\n\n const mode = computed(() => themeMode.value)\n const isDark = computed(() => mode.value === 'dark')\n\n const toggleTheme = () => {\n setTheme(isDark.value ? 'light' : 'dark')\n }\n\n return {\n themeMode: mode,\n isDark,\n setTheme,\n toggleTheme\n }\n}\n\nexport function getThemeMode(): ThemeMode {\n if (!initialized) {\n return normalizeTheme(getDocumentTheme())\n }\n return themeMode.value\n}\n\nexport function stopThemeWatcher() {\n stopWatch?.()\n stopWatch = null\n stopSystemListener?.()\n stopSystemListener = null\n initialized = false\n}\n","<template>\n <router-view />\n</template>\n\n<script setup lang=\"ts\">\nimport { addNewStyle, addNewStyleTag } from '@okiss/utils'\nimport { provide } from 'vue'\nimport { useThemeMode } from './composables/useThemeMode'\n\nuseThemeMode()\n\nonBeforeMount(() => {\n const loading = document.getElementById('preloader')\n if (loading !== null) {\n document.body.removeChild(loading)\n document.getElementById('preloader')?.remove()\n addNewStyle('test-icon', '//at.alicdn.com/t/font_2246548_zclaqxwmzq8.css')\n\n const css = `.iconfont {\n font-size: 19px;\n font-style: normal;\n -webkit-font-smoothing: antialiased;\n font-family: iconfont !important;\n }`\n\n addNewStyleTag(css)\n }\n})\n\nif (window?.OmsOptions?.form?.vsPath) {\n provide('vsPath', window?.OmsOptions?.form?.vsPath)\n}\n</script>\n","export enum MockHttpMethod {\n GET = 'get',\n POST = 'post',\n DELETE = 'delete',\n FETCH = 'fetch',\n OPTION = 'option',\n PUT = 'put'\n}\n\nexport interface MockOption {\n query: Record<string, any>,\n data: Record<string, any>\n}\n\nexport interface MockApi {\n method: MockHttpMethod,\n url: string | RegExp,\n baseURL?: string,\n response: (options: MockOption) => Record<string, any>\n}\n\nexport interface MockApiMap {\n [key: string]: MockApi\n}\n","import _ from 'lodash'\n\nconst form = {\n saveApi: '/save',\n afterSubmit: '',\n afterReset: 'goback',\n options: {\n column: 3,\n submitButton: {\n text: '提交'\n },\n cancelButton: {\n text: '取消',\n on: {\n click: '() => console.error(33333333)'\n }\n }\n },\n formItems: [\n {\n type: 'radio',\n field: 'radio',\n label: '单选框',\n info:\n '表单控件支持提示信息, 可写html <a class=\"el-link el-link--primary is-underline\" target=\"_blank\" href=\"http://github.com/daodao97\">文档</a>',\n options: [\n {\n value: 1,\n label: '选项1'\n },\n {\n value: 2,\n label: '选项2'\n }\n ],\n value: 1,\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n field: 'input',\n label: '输入框',\n value: 5,\n props: {\n maxlength: 10,\n suffixIcon: 'el-icon-date',\n slots: {\n prepend: '前缀'\n },\n showCopy: true,\n prefixIcon: 'el-icon-search'\n },\n rules: [{ required: true, message: '该项为必填项' }],\n depend: {\n field: 'radio',\n value: 1\n },\n computed: [\n {\n when: 'aaa',\n set: {\n checkbox: {\n value: [1]\n }\n }\n },\n {\n when: 'bbb',\n set: {\n checkbox: {\n value: [2, 3]\n }\n }\n }\n ],\n info: '当前控件依赖 单选框 的值, 仅在 选项1 下显示',\n col: {\n span: 12\n }\n },\n {\n type: 'number',\n field: 'number',\n label: '数字',\n props: {\n step: 2\n },\n computed: {\n // when: [\"$self\", \">\", 10],\n // when: [\">\", 3],\n when: 4,\n set: {\n range_number: {\n label: '数字区间2'\n }\n }\n },\n col: {\n span: 12\n },\n value: 4\n },\n {\n type: 'number-range',\n field: 'range_number',\n label: '数字区间',\n col: {\n span: 12\n }\n },\n {\n type: 'checkbox',\n field: 'checkbox',\n label: '复选框',\n value: [],\n options: [\n { value: 1, label: '复选框1' },\n { value: 2, label: '复选框2' },\n { value: 3, label: '复选框3' }\n ],\n info: '动态计算, 当 输入框 字段的值 为 aaa 时, 复选框1将被选中, 为 bbb 时, 复选框2,3 将被选中',\n col: {\n span: 8\n }\n },\n {\n type: 'date',\n field: 'date',\n label: '日期',\n props: {\n disabled: true\n },\n info: '禁用控件',\n col: {\n span: 8\n }\n },\n {\n type: 'date',\n field: 'date_range',\n label: '日期范围',\n value: '',\n props: {\n type: 'daterange',\n rangeSeparator: '~',\n startPlaceholder: '开始日期',\n endPlaceholder: '结束日期'\n },\n col: {\n span: 8\n }\n },\n {\n type: 'time',\n field: 'time',\n label: '时间'\n },\n {\n type: 'time',\n field: 'time_range',\n label: '时间范围',\n props: {\n isRange: true\n }\n },\n {\n type: 'datetime',\n field: 'datetime',\n label: '日期时间'\n },\n {\n type: 'datetime',\n field: 'datetime_range',\n label: '日期时间范围',\n props: {\n type: 'datetimerange'\n }\n },\n {\n type: 'select',\n field: 'select',\n label: '下拉框',\n options: [\n { value: 1, label: '选项1' },\n { value: 2, label: '选项2' },\n { value: 3, label: '选项3' },\n { value: 4, label: '选项4' }\n ],\n props: {\n selectApi: '/user/select'\n }\n },\n {\n type: 'switch',\n field: 'switch',\n label: '开关'\n },\n {\n type: 'slider',\n field: 'slider',\n label: '滑块'\n },\n {\n type: 'upload',\n field: 'upload',\n label: '上传',\n value: 'http://qupinapptest.oss-cn-beijing.aliyuncs.com/1/202002/d81d3c9dc7c3df7590d333f783a97995.jpeg',\n props: {}\n },\n {\n type: 'upload',\n field: 'upload_multiple',\n label: '上传多张',\n props: {\n limit: 3\n }\n },\n {\n type: 'transfer',\n field: 'transfer',\n label: '穿梭框',\n options: [\n { value: 1, label: '备选项1' },\n { value: 2, label: '备选项2' },\n { value: 3, label: '备选项3' }\n ],\n value: []\n },\n {\n type: 'color',\n field: 'color',\n label: '颜色'\n },\n {\n type: 'rate',\n field: 'rate',\n label: '评分',\n value: 3\n },\n {\n type: 'sub-form',\n field: 'sub_form',\n label: '多项子表单',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'sub_input',\n label: '输入框',\n rules: [\n {\n required: true,\n message: '子表单的校验将在上层表单校验通过后执行'\n }\n ],\n info: 'input 输入框支持 mask',\n props: {\n mask: '99-9999999'\n }\n },\n {\n type: 'input',\n field: 'sub_input_1',\n label: '输入框1'\n }\n ]\n }\n },\n {\n type: 'sub-form',\n field: 'sub_form_not_repeat',\n label: '子表单',\n props: {\n options: {\n inline: true\n },\n formItems: [\n {\n type: 'input',\n field: 'sub_input',\n label: '输入框',\n rules: [\n {\n required: true,\n message: '子表单的校验将在上层表单校验通过后执行'\n }\n ]\n },\n {\n type: 'input',\n field: 'sub_input_1',\n label: '输入框1'\n }\n ]\n }\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'json',\n field: 'json',\n label: 'json',\n value: '{\"a\":1}'\n },\n {\n type: 'rule',\n field: 'rule',\n label: 'rule',\n value: [],\n props: {\n factorOptions: [{ label: 'A', value: 'A' }, { label: 'B', value: 'B' }, { label: 'C', value: 'C' }],\n symbolOptions: [{ label: '大于', value: '>' }, { label: '等于', value: '=' }, { label: '小于', value: '<' }]\n }\n },\n {\n type: 'template',\n field: 'p3',\n label: '自定义',\n comp: {\n inject: ['formData'],\n template: '<div>{{ msg }}<br/>当前的表单数据是:<pre>{{JSON.stringify(formData, null, 2)}}</pre><el-button @click=\"onclick\">click</el-button></div>',\n data: {\n msg: 'this is custom data'\n },\n methods: {\n onclick: '() => { console.log(this)}'\n }\n },\n info: '在通用表单控件无法满足需求时, 可以编写 `template` 模板组件'\n }\n ]\n}\n\nconst buttons = [\n {\n type: 'jump',\n text: '跳转',\n target: 'http://github.com/daodao97'\n },\n {\n type: 'api',\n text: '请求接口',\n target: '/test_api',\n extra: {\n method: 'POST',\n url: '/test_api'\n },\n props: {\n type: 'warning'\n }\n },\n {\n type: 'table',\n text: '表格',\n extra: {\n infoApi: '/student/list_info',\n listApi: '/student/list'\n },\n props: {\n type: 'info'\n }\n },\n [\n {\n type: 'jump',\n text: '跳转',\n target: 'http://github.com/daodao97'\n },\n {\n type: 'api',\n text: '请求接口',\n extra: {\n method: 'POST',\n url: '/test_api'\n }\n }\n ],\n {\n type: 'form',\n text: '表单',\n extra: {\n infoApi: '/form',\n saveApi: '/save'\n },\n props: {\n type: 'success'\n }\n }\n]\n\nconst table = {\n exportAble: true,\n filter: [\n {\n field: 'name',\n type: 'input',\n label: '姓名'\n },\n {\n field: 'sex',\n type: 'select',\n label: '性别',\n options: [\n { value: 1, label: '男' },\n { value: 0, label: '女' }\n ]\n }\n ],\n headers: [\n {\n field: 'name',\n label: '姓名',\n info: '表头提示'\n },\n {\n field: 'sex',\n type: 'enum',\n label: '性别',\n options: [\n { value: 1, label: '男' },\n { value: 0, label: '女' }\n ],\n state: {\n 1: 'info',\n 0: 'warning'\n },\n props: {\n sortable: true\n }\n },\n {\n field: 'github',\n type: 'link',\n label: '主页'\n },\n {\n field: 'html',\n type: 'html',\n label: 'HTML'\n },\n {\n field: 'image',\n type: 'image',\n label: '头像'\n },\n {\n field: 'json',\n type: 'json',\n label: '信息'\n },\n {\n field: 'richText',\n type: 'rich-text',\n label: '信息'\n }\n ],\n batchButton: buttons,\n rowButton: [\n {\n type: 'jump',\n text: '编辑',\n target: '/user/{id}'\n },\n {\n type: 'form',\n extra: {\n infoApi: '/user/{id}',\n saveApi: '/user/{id}'\n },\n props: {\n icon: 'el-icon-edit',\n type: 'success'\n }\n },\n {\n type: 'api',\n extra: {\n method: 'POST',\n url: '/student/{id}'\n },\n props: {\n icon: 'el-icon-delete',\n type: 'danger'\n }\n }\n ],\n normalButton: [\n ..._.cloneDeep(buttons),\n {\n type: 'jump',\n target: '/user/form',\n props: {\n icon: 'el-icon-plus',\n type: 'primary'\n }\n }\n ],\n selectedNotice: '当前共勾选: {selectedCount} 条',\n listApi: '/user/list'\n}\n\nconst listMock = {\n code: 0,\n data: {\n 'list|0-100': [\n {\n 'id|0-1000': 1,\n name: '@cname',\n 'sex|0-1': 1,\n 'score|0-100': 60,\n link: 'http://github.com/daodao97',\n image: 'http://qupinapptest.oss-cn-beijing.aliyuncs.com/1/202002/d81d3c9dc7c3df7590d333f783a97995.jpeg',\n html: '<S>显示删除线1</S>',\n json: { slogan: '左手代码右手诗' },\n richText: '在一段文本中<突出|black|yellow>显示某些<文字|#ffffff|#000000>'\n }\n ],\n page: {\n 'count|1-10': 2,\n 'page|1-5': 2\n }\n }\n}\n\nconst layoutForm = {\n afterSubmit: '',\n afterReset: 'goback',\n formItems: [\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span'\n }\n ]\n}\n\nconst layoutSection = {\n afterSubmit: '',\n afterReset: '',\n formItems: [\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n section: '表单片段1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n section: '表单片段2',\n type: 'input',\n label: 'span'\n }\n ]\n}\n\nexport default { form, table, listMock, layoutForm, layoutSection }\n\n","import { MockApi, MockHttpMethod, MockOption } from '../types'\nimport menu from '../data/menu'\nimport role from '../data/role'\nimport example from '../data/example'\n\nconst userApis: MockApi[] = [\n {\n method: MockHttpMethod.POST,\n url: '/login',\n response(options: MockOption) {\n return {\n code: 0,\n data: {\n name: 'daodao97',\n token: 'xxxxxxx'\n }\n }\n }\n },\n {\n method: MockHttpMethod.GET,\n url: '/user/info',\n response(options: MockOption) {\n return {\n code: 0,\n data: {\n role_ids: [1],\n resource: [[0, 20, 'formItems', 'radio'], [0, 1, 2]]\n }\n }\n }\n },\n {\n url: '/user/routes',\n method: MockHttpMethod.GET,\n response: (options: MockOption) => {\n return {\n code: 0,\n data: [\n {\n id: 0,\n label: '',\n routes: []\n }\n ]\n }\n }\n },\n {\n url: '/user/list',\n method: MockHttpMethod.GET,\n response: (options: MockOption) => {\n return example.listMock\n }\n }\n]\n\nexport default userApis\n","import user from './user'\nimport { MockApi } from '../types'\n\nconst apis: MockApi[] = [\n ...user\n]\n\nexport default apis\n","import Mock from 'mockjs'\nimport { MockApi, MockApiMap } from './types'\nimport apis from './apis'\nimport { logGroup, queryParams } from '@okiss/utils'\nimport { defaultOptions } from '../default'\n\nconst uniqueApis: MockApiMap = {}\n\nexport function regMockApis(apis: MockApi[]) {\n apis.forEach(item => {\n const key = realUrl(item)\n uniqueApis[`${item.method}::${key}`] = item\n })\n}\n\nregMockApis(apis)\n\nfunction realUrl(api: MockApi) {\n let url = api.url\n let baseUrl = api.baseURL || defaultOptions.axios?.baseURL\n if (!baseUrl) {\n baseUrl = ''\n }\n if (typeof url === 'string') {\n url = ('/' + baseUrl + url).split('/').filter(v => v).join('/')\n url += '(|\\\\?.*)$'\n return new RegExp(url)\n }\n return url\n}\n\nexport function startMock() {\n Object.keys(uniqueApis).forEach(k => {\n const api = uniqueApis[k]\n const url = realUrl(api)\n Mock.mock(url, api.method, function(options: { url: string, body: any, type: string }) {\n const { url, type, body } = options\n const query = queryParams(url)\n const data = body ? JSON.parse(body) : {}\n const mock = api.response({ query, data })\n const response = Mock.mock(mock)\n logGroup(url, { type, query, data, response })\n return Mock.mock(response)\n })\n })\n console.log(`%c ApiMock is stared! `, 'background: #606060; color: #fff; padding: 4px 5px; border-radius: 1px;')\n}\n","import ElementPlus, { ElMessage, ElMessageBox } from 'element-plus'\nimport 'element-plus/dist/index.css'\nimport 'element-plus/theme-chalk/dark/css-vars.css'\nimport 'dayjs/locale/zh-cn'\n\nexport const Message = ElMessage\nexport const MessageBox = ElMessageBox\n\nexport default ElementPlus\n","import { InterceptorUse } from './types'\nimport axios, { AxiosError, AxiosInstance, AxiosResponse, Canceler, AxiosRequestConfig } from 'axios'\n// @ts-ignore\nimport qs from 'qs'\n\nconst CancelToken = axios.CancelToken\n\nconst task = {\n taskList: {} as Record<string, any>,\n cacheList: new Map(),\n uniqueId(config: AxiosRequestConfig) {\n return `${location.href}|${config.method}|${config.url}|`\n // + qs.stringify(config.params)\n },\n addTask(config: AxiosRequestConfig, cancelfun: Canceler) {\n const key = this.uniqueId(config)\n this.taskList[key] = cancelfun\n },\n delTask(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n const c = this.taskList[key]\n c && c(config)\n },\n pending(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n return !!this.taskList[key]\n },\n cache(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n const c = this.cacheList.get(key)\n if (!c) {\n return undefined\n }\n if (c.expirationTime < (new Date()).getTime()) {\n this.delCache(config)\n return undefined\n }\n console.log('getcache', key, c.response)\n return c.response\n },\n addCache(config: AxiosRequestConfig, response: any) {\n const key = this.uniqueId(config)\n const cacheTime = config.cacheTime || 0\n if (cacheTime) {\n this.cacheList.set(key, { response, expirationTime: (new Date()).getTime() + cacheTime })\n }\n },\n delCache(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n return this.cacheList.delete(key)\n }\n}\n\nexport const cacheAdapter: (config: AxiosRequestConfig, instance: AxiosInstance) => Promise<any> = (config: AxiosRequestConfig, instance: AxiosInstance) => {\n return new Promise((resolve, reject) => {\n if (config.method !== 'get') {\n delete config.adapter\n resolve(instance(config))\n return\n }\n const cache = task.cache(config)\n if (!cache) {\n delete config.adapter\n resolve(instance(config))\n return\n }\n resolve({ data: cache, config: config })\n })\n}\n\nexport const cancelRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n if (config.cacheEnable === false) {\n return config\n }\n if (task.pending(config)) {\n task.delTask(config)\n }\n config.cancelToken = new CancelToken((cancel) => {\n task.addTask(config, cancel)\n })\n return config\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n\nexport const cancelResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled: function(response: AxiosResponse) {\n // @ts-ignore\n if (response.config.cacheEnable === false) {\n return response\n }\n if (response.config.method === 'get' && Object.keys(response.data as Record<string, any>).length > 0) {\n task.addCache(response.config, response.data)\n }\n return response\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n","import { Component } from 'vue'\n\nconst defaultMap: Record<string, Component> = {}\n\nexport function setCmp(name: string, cmp: Component) {\n defaultMap[name] = cmp\n}\n\nexport function getCmp(name: string) {\n return defaultMap[name]\n}\n","<script lang=\"jsx\">\nimport { useUserStore } from '../store'\nimport { getCmp } from '../utils/container'\nimport { computed } from 'vue'\n\nexport default defineComponent({\n name: 'Dashboard',\n setup() {\n // use global store shim\n // const roleIds = computed(() => store.state.settings.loginTips)\n const custom = getCmp('dashboard')\n if (custom) {\n return () => <span>\n <custom/>\n </span>\n }\n const name = computed(() => useUserStore().name)\n return () => <div class='dashboard-container'>\n <div class='dashboard-text'>Hi { name.value } 😄</div>\n </div>\n }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.dashboard {\n &-container {\n margin: 30px;\n }\n\n &-text {\n font-size: 30px;\n line-height: 46px;\n }\n}\n</style>\n","<template>\n <el-breadcrumb\n class=\"app-breadcrumb\"\n separator=\"/\"\n >\n <transition-group name=\"breadcrumb\">\n <el-breadcrumb-item\n v-for=\"(item, index) in levelList\"\n :key=\"item.path\"\n >\n <span\n v-if=\"(item.path.indexOf('/DIR_') === 0 && item.redirect === undefined) || index === levelList.length - 1\"\n class=\"no-redirect\"\n >{{ item.meta.title }}</span> <a\n v-else\n @click=\"handleLink(item)\"\n >{{ item.meta.title }}</a>\n </el-breadcrumb-item>\n </transition-group>\n </el-breadcrumb>\n</template>\n\n<script>\nimport * as pathToRegexp from 'path-to-regexp'\n\nexport default {\n data() {\n return {\n levelList: null\n }\n },\n watch: {\n $route() {\n this.getBreadcrumb()\n }\n },\n created() {\n this.getBreadcrumb()\n },\n methods: {\n getBreadcrumb() {\n // only show routes with meta.title\n let matched = this.$route.matched.filter(\n item => item.meta && item.meta.title\n )\n const first = matched[0]\n\n if (!this.isDashboard(first)) {\n matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(\n matched\n )\n }\n\n this.levelList = matched.filter(\n item => item.meta && item.meta.title && item.meta.breadcrumb !== false\n )\n },\n isDashboard(route) {\n const name = route && route.name\n if (!name) {\n return false\n }\n return (\n name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()\n )\n },\n pathCompile(path) {\n // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561\n const { params } = this.$route\n const toPath = pathToRegexp.compile(path)\n return toPath(params)\n },\n handleLink(item) {\n const { redirect, path } = item\n if (redirect) {\n this.$router.push(redirect)\n return\n }\n this.$router.push(this.pathCompile(path))\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-breadcrumb.el-breadcrumb {\n display: inline-block;\n font-size: 14px;\n line-height: 50px;\n margin-left: 8px;\n\n .no-redirect {\n color: #97a8be;\n cursor: text;\n }\n}\n</style>\n","<template>\n <div\n style=\"padding: 0 15px;\"\n @click=\"toggleClick\"\n >\n <v-icon\n :class=\"{ 'is-active': isActive }\"\n name=\"ra-leftalignment\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Hamburger',\n props: {\n isActive: {\n type: Boolean,\n default: false\n }\n },\n emits: ['toggle-click'],\n methods: {\n toggleClick() {\n this.$emit('toggle-click')\n }\n }\n}\n</script>\n","<template>\n <el-container style=\"width: 100%;height: 100%\">\n <el-row class=\"aside\">\n <slot name=\"left-aside\" />\n </el-row>\n <el-main\n class=\"main\"\n style=\"margin: 0 10px\"\n >\n <slot name=\"main\" />\n </el-main>\n <el-aside\n class=\"aside\"\n width=\"350px\"\n style=\"padding: 20px\"\n >\n <slot name=\"right-aside\" />\n </el-aside>\n </el-container>\n</template>\n<style scoped>\n.main {\n border: 1px solid #ebebeb;\n border-radius: 3px;\n transition: .2s;\n min-height: calc(100vh - 50px);\n width: 100%;\n position: relative;\n}\n.aside {\n padding-top: 20px;\n border: 1px solid #ebebeb;\n border-radius: 3px;\n transition: .2s;\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n\n {\n type: 'icon-select',\n field: 'prefixIcon',\n label: '前置ICON'\n },\n {\n type: 'icon-select',\n field: 'suffixIcon',\n label: '后置ICON'\n },\n {\n type: 'switch',\n field: 'showCopy',\n label: '复制'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'number',\n name: '数字',\n default: {\n type: 'number',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'min',\n label: '最小值'\n },\n {\n type: 'number',\n field: 'man',\n label: '最大值'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'number-range',\n name: '数字区间',\n default: {\n type: 'number-range',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'unit',\n label: '单位'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'allowCreate',\n label: '允许创建'\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'radio',\n name: '单选框',\n default: {\n type: 'radio',\n label: 'label',\n field: 'field_name',\n options: []\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n formItems: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'value',\n label: '字段值'\n }\n ],\n repeat: true\n }\n },\n {\n type: 'input',\n field: 'default',\n label: '默认值'\n }\n ]\n}\n","export default {\n type: 'switch',\n name: '开关',\n default: {\n type: 'switch',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'activeText',\n label: '打开时的文字描述'\n },\n {\n type: 'input',\n field: 'inactiveText',\n label: '关闭时的文字描述'\n },\n {\n type: 'color',\n field: 'activeColor',\n label: '打开时的背景色'\n },\n {\n type: 'color',\n field: 'inactiveColor',\n label: '关闭时的背景色'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'code',\n name: 'Code',\n default: {\n type: 'code',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'json',\n default: {\n type: 'json',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'upload',\n name: '上传',\n default: {\n type: 'upload',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'template',\n name: '自定义组件',\n default: {\n type: 'template',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'icon-select',\n name: '图标选择器',\n default: {\n type: 'icon-select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'sub-form',\n name: '子表单',\n default: {\n type: 'sub-form',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'switch',\n field: 'repeat',\n label: '可重复'\n },\n {\n type: 'sub-form',\n field: 'form-items',\n label: '子表单控件',\n props: {\n options: {\n labelPosition: 'top'\n },\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'label',\n label: 'label'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'input', label: '文本框' }\n ]\n }\n ]\n }\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'checkbox',\n name: '复选框',\n default: {\n type: 'checkbox',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'max',\n label: '最大选中数'\n },\n {\n type: 'number',\n field: 'min',\n label: '最小选中数'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","import input from './ctrls/input'\nimport number from './ctrls/number'\nimport numberRange from './ctrls/number-range'\nimport select from './ctrls/select'\nimport radio from './ctrls/radio'\nimport xswitch from './ctrls/switch'\nimport code from './ctrls/code'\nimport json from './ctrls/json'\nimport upload from './ctrls/upload'\nimport template from './ctrls/template'\nimport iconSelect from './ctrls/icon-select'\nimport subForm from './ctrls/sub-form'\nimport checkbox from './ctrls/checkbox'\n\nconst ctrlMaps = {}\n\nexport function regCtrl(options) {\n ctrlMaps[options.type] = options\n}\n\nregCtrl(input)\nregCtrl(select)\nregCtrl(number)\nregCtrl(numberRange)\nregCtrl(xswitch)\nregCtrl(subForm)\nregCtrl(radio)\nregCtrl(checkbox)\nregCtrl(code)\nregCtrl(json)\nregCtrl(upload)\nregCtrl(iconSelect)\nregCtrl(template)\n\nexport const ctrls = ctrlMaps\n\nexport const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n },\n {\n type: 'switch',\n field: 'inline',\n label: '行布局'\n },\n {\n type: 'radio',\n field: 'labelPosition',\n label: 'label位置',\n options: [\n { value: 'right', label: '右' },\n { value: 'left', label: '左' },\n { value: 'top', label: '上' }\n ]\n },\n {\n type: 'input',\n field: 'labelWidth',\n label: 'label宽度',\n value: '100px'\n },\n {\n type: 'switch',\n field: 'showSubmitButton',\n label: '显示提交按钮',\n value: true\n },\n {\n type: 'sub-form',\n field: 'submitButton',\n label: '提交按钮',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案',\n value: '提交'\n },\n {\n type: 'select',\n field: 'type',\n label: '按钮类型',\n options: [\n { value: 'primary', label: 'primary' }\n ]\n }\n ]\n }\n },\n {\n type: 'switch',\n field: 'showCancelButton',\n label: '显示取消按钮',\n value: true\n },\n {\n type: 'sub-form',\n field: 'cancelButton',\n label: '取消按钮',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案',\n value: '取消'\n },\n {\n type: 'select',\n field: 'type',\n label: '按钮类型',\n options: [\n { value: 'primary', label: 'primary' }\n ]\n }\n ]\n }\n }\n ]\n}\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","<template>\n <dev-layout>\n <template #main>\n <v-form\n v-if=\"builderSchema.formItems\"\n ref=\"form\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n &nbsp;&nbsp;\n <VButton\n text=\"PageSchema\"\n type=\"modal\"\n >\n <JsonView :data=\"getSaveSchema\" />\n </VButton>\n </template>\n <template #right-aside>\n <el-form v-if=\"activeIndex\">\n <el-form-item label=\"控件类型\">\n <el-select v-model=\"currentCtrlType\">\n <el-option\n v-for=\"(item,index) in types\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </el-form-item>\n </el-form>\n <v-form\n :key=\"ctrlKey\"\n v-model=\"ctrlOptions\"\n v-bind=\"ctrlSchema\"\n />\n </template>\n </dev-layout>\n</template>\n<script>\nimport DevLayout from '../DevLayout.vue'\nimport { VForm, VBtn as VButton, JsonView } from '@okiss/vbtf'\nimport { compactObject } from '@okiss/utils'\nimport { cloneDeep, get, merge, set, unset } from 'lodash'\nimport { baseSchema, ctrls } from './form'\nimport { eventBus } from '../../../index'\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n\nconst typs = []\n\nObject.keys(ctrls).forEach(item => {\n typs.push({ value: item, label: ctrls[item].name })\n})\n\nconst sqlSchema = {\n options: {\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'sub-form',\n field: 'columns',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: cloneDeep(typs)\n },\n {\n type: 'input',\n field: 'label',\n label: '字段label'\n }\n ]\n }\n }\n ]\n}\n\nexport default {\n components: { DevLayout, VForm, VButton, JsonView },\n props: {\n schema: {\n type: Object,\n default: _ => {}\n }\n },\n data() {\n return {\n sqlOptions: {},\n sqlSchema: sqlSchema,\n baseSchema: baseSchema,\n activeTab: 'base',\n builderSchema: Object.assign(\n {},\n this.$props.schema,\n {\n options: {\n submitButton: false,\n cancelButton: false\n }\n }\n ),\n baseOptions: {},\n key: 0,\n ctrlKey: 0,\n activeCtrl: undefined,\n ctrlOptions: {},\n ctrlSchema: {},\n ctrlName: '',\n activeIndex: undefined,\n ctrlMap: ctrls,\n activeIndexReg: /(formItems)?\\[(\\d+)\\]/,\n tableStruct: '',\n activeName: '1',\n currentCtrlType: 'input',\n types: cloneDeep(typs)\n }\n },\n computed: {\n getSaveSchema() {\n return {\n formItems: this.builderSchema.formItems\n }\n }\n },\n watch: {\n baseOptions: {\n deep: true,\n immediate: true,\n handler(val) {\n const tmp = cloneDeep(val)\n if (val.showSubmitButton === false) {\n tmp.submitButton = false\n }\n if (val.cancelSubmitButton === false) {\n tmp.cancelButton = false\n }\n delete tmp.showSubmitButton\n delete tmp.showCancelButton\n if (Object.keys(tmp).length > 0) {\n this.builderSchema = merge(this.builderSchema, { options: tmp })\n this.key++\n }\n }\n },\n ctrlOptions: {\n deep: true,\n // immediate: true,\n handler(val) {\n const current = get(this.builderSchema, this.activeIndex)\n if (!current) {\n return\n }\n const type = current ? current.type : ''\n const ctrl = this.ctrlMap[type]\n const transData = ctrl.trans ? ctrl.trans(val) : val\n if (transData && Object.keys(transData).length > 0) {\n transData.type = type\n // update `builderSchema` nested data\n if (this.activeIndex.indexOf('[') > -1) {\n // format like: `headers[0]`\n const [_, key, keyIndex] = this.activeIndex.match(/(\\w+)\\[(\\d+)\\]/)\n _\n this.builderSchema[key][keyIndex] = { ...transData }\n } else {\n this.builderSchema[this.activeIndex] = transData\n }\n // set(this.builderSchema, this.activeIndex, transData)\n this.key++\n }\n }\n },\n currentCtrlType: {\n handler(val) {\n const ctrl = this.ctrlMap[val]\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n const sourceCtrlOptions = get(this.builderSchema, this.activeIndex)\n this.ctrlOptions = cloneDeep(sourceCtrlOptions)\n this.ctrlOptions.type = val\n this.ctrlKey++\n this.key++\n }\n }\n },\n beforeCreate() {\n eventBus.on('dev-action', ({ event, data }) => {\n this.onDevAction(data.type, data.devId)\n })\n },\n unmounted() {\n eventBus.off('dev-action')\n },\n methods: {\n onDevAction(btnType, path) {\n this.activeIndex = 'formItems' + path\n if (btnType === 'edit') {\n this.activeTab = 'ctrl'\n this.clicklabel()\n }\n if (btnType === 'del') {\n this.activeTab = 'base'\n this.removeOne()\n }\n this.ctrlKey++\n },\n push(name) {\n const target = 'formItems'\n this.ctrlOptions = {}\n this.builderSchema[target] = this.builderSchema[target] || []\n const ctrl = this.ctrlMap[name]\n this.activeCtrl = ctrl\n this.builderSchema[target].push(cloneDeep(ctrl.default))\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n this.key++\n this.activeIndex = `${target}[${this.builderSchema[target].length - 1}]`\n this.activeTab = 'ctrl'\n },\n removeOne() {\n unset(this.builderSchema, this.activeIndex)\n this.builderSchema = cloneDeep(compactObject(this.builderSchema))\n this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n const type = ctrlOptions.type\n const ctrl = this.ctrlMap[type]\n if (!ctrl) {\n this.$message({ type: 'warning', message: '尚未支持该组件的UI编辑' })\n return\n }\n this.currentCtrlType = type\n this.ctrlOptions = ctrlOptions\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: { formItems: this.builderSchema.formItems }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'date',\n name: '日期',\n default: {\n type: 'date',\n label: '时间',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'switch',\n field: 'showFilter',\n label: '搜索条件',\n value: true\n },\n {\n type: 'switch',\n field: 'showPagination',\n label: '页码',\n value: true\n },\n {\n type: 'switch',\n field: 'exportAble',\n label: '导出按钮'\n }\n ]\n}\n","export const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","export default {\n type: 'span',\n name: '文本',\n default: {\n type: 'span',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'switch',\n field: 'sortable',\n label: '排序'\n }\n ]\n}\n","export default {\n type: 'enum',\n name: '标签',\n default: {\n type: 'enum',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '映射',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n value: []\n }\n ],\n trans(val) {\n val.options = val.options || []\n if (!val.label) {\n val.label = '表头'\n }\n return val\n }\n}\n","export default {\n type: 'html',\n name: 'HTML',\n default: {\n type: 'html',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'icon',\n name: '图标',\n default: {\n type: 'icon',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'image',\n name: '图片',\n default: {\n type: 'image',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'JSON',\n default: {\n type: 'json',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'link',\n name: '链接',\n default: {\n type: 'link',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'rich',\n name: '富文本',\n default: {\n type: 'rich',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'tpl',\n name: '模板',\n default: {\n type: 'tpl',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'input',\n field: 'tpl',\n label: '模板',\n info: '例如 <code>姓名: {name} 年龄:{age}</code>'\n }\n ]\n}\n","import span from './span'\nimport xenum from './emum'\nimport html from './html'\nimport icon from './icon'\nimport image from './image'\nimport json from './json'\nimport link from './link'\nimport rich from './rich'\nimport tpl from './tpl'\n\nexport default {\n span,\n enum: xenum,\n html,\n icon,\n image,\n json,\n link,\n rich,\n tpl\n}\n","export default {\n type: 'jump',\n name: '跳转',\n default: {\n type: 'jump',\n target: '',\n text: '按钮'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: '跳转地址',\n info: '可以是本地路由, 也可以是url'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'api',\n name: '接口请求',\n default: {\n type: 'api',\n target: '',\n text: '请求'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n },\n {\n type: 'input',\n field: 'api',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'select',\n field: 'method',\n label: '请求类型',\n options: [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'DELETE', label: 'DELETE' },\n { value: 'PUT', label: 'PUT' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'form',\n name: '弹框表单',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","export default {\n type: 'table',\n name: '弹框列表',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","import jump from './jump'\nimport api from './api'\nimport form from './form'\nimport table from './table'\n\nexport default {\n jump,\n api,\n form,\n table\n}\n","<template>\n <dev-layout>\n <template #left-aside>\n <el-row style=\"width: 200px\">\n <el-row>\n <el-col\n class=\"title\"\n :data-id=\"22222\"\n >添加搜索条件</el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('input')\"\n >文本框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('select')\"\n >下拉框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('date')\"\n >日期</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加列表项</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.headers)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushHeaders(ctrlMap.headers[item].type)\"\n >{{ ctrlMap.headers[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加行按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushRowButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加常规按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushNormalButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加批量按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushBatchButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n </el-row>\n </template>\n <template #main>\n <v-table\n ref=\"table\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n &nbsp;&nbsp;\n <VButton\n text=\"PageSchema\"\n type=\"modal\"\n >\n <JsonView :data=\"getSaveSchema\" />\n </VButton>\n </template>\n <template #right-aside>\n <el-form v-if=\"activeIndex\">\n <el-form-item label=\"控件类型\">\n <el-select v-model=\"currentCtrlType\">\n <el-option\n v-for=\"(item,index) in types\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </el-form-item>\n </el-form>\n <v-form\n :key=\"ctrlKey\"\n v-model=\"ctrlOptions\"\n v-bind=\"ctrlSchema\"\n />\n </template>\n </dev-layout>\n</template>\n<script lang=\"ts\">\nimport DevLayout from '../DevLayout.vue'\nimport { VTable, VForm, VBtn as VButton, JsonView } from '@okiss/vbtf'\nimport { compactObject } from '@okiss/utils'\nimport input from './ctrls/input'\nimport select from './ctrls/select'\nimport date from './ctrls/date'\nimport { cloneDeep, merge, get, unset } from 'lodash'\nimport { baseSchema } from './table'\nimport { ctrlFormDefaultOptions } from '../base'\nimport columns from './columns'\nimport buttons from './btn'\nimport { eventBus } from '../../../index'\n\nexport default {\n components: { JsonView, DevLayout, VTable, VForm, VButton },\n props: {\n schema: {\n type: Object,\n default: _ => {}\n }\n },\n data() {\n const schema = toRefs(this.$props.schema)\n delete schema.listApi\n schema.list = [{}]\n return {\n baseSchema: baseSchema,\n activeTab: 'base',\n builderSchema: Object.assign(\n {},\n baseSchema,\n schema\n ),\n baseOptions: {},\n key: 0,\n ctrlKey: 0,\n activeCtrl: undefined,\n activeBrick: undefined,\n ctrlOptions: {},\n ctrlSchema: {},\n ctrlName: '',\n activeIndex: undefined,\n ctrlMap: {\n filter: { input, select, date },\n headers: columns,\n buttons: buttons\n },\n activeIndexReg: /(filter|headers|normalButton|batchButton|rowButton)?\\[(\\d+)\\]/,\n currentCtrlType: 'input'\n }\n },\n computed: {\n types() {\n const typs = []\n const ctrls = this.ctrlMap[this.activeBrick]\n Object.keys(ctrls).forEach(item => {\n typs.push({ value: item, label: ctrls[item].name })\n })\n\n return typs\n },\n getSaveSchema() {\n return {\n filter: this.builderSchema.filter,\n headers: this.builderSchema.headers,\n rowButton: this.builderSchema.rowButton,\n normalButton: this.builderSchema.normalButton,\n batchButton: this.builderSchema.batchButton\n }\n },\n currentBuilderSchema() {\n // @ts-ignore\n return this.$pinia?.state?.value?.app?.builderSchema\n }\n },\n watch: {\n baseOptions: {\n deep: true,\n immediate: true,\n handler(val) {\n this.builderSchema = merge(this.builderSchema, val)\n this.key++\n this.updateBuilderSchema()\n }\n },\n ctrlOptions: {\n deep: true,\n // immediate: true,\n handler(val) {\n const m = this.activeIndex.match(this.activeIndexReg)\n if (!m) {\n return\n }\n let type = this.builderSchema[m[1]][parseInt(m[2])].type\n\n if (m[1] === 'headers' && type === undefined) {\n type = 'span'\n }\n const ctrl = this.ctrlMap[this.activeBrick][type]\n if (!ctrl) {\n return\n }\n\n const transData = ctrl.trans ? ctrl.trans(val) : val\n if (transData && Object.keys(transData).length > 0) {\n transData.type = type\n\n // update `builderSchema` nested data\n if (this.activeIndex.indexOf('[') > -1) {\n // format like: `headers[0]`\n const [_, key, keyIndex] = this.activeIndex.match(/(\\w+)\\[(\\d+)\\]/)\n _\n this.builderSchema[key][keyIndex] = { ...transData }\n } else {\n this.builderSchema[this.activeIndex] = transData\n }\n this.key++\n }\n\n this.updateBuilderSchema()\n }\n },\n currentCtrlType: {\n handler(val) {\n const ctrl = this.ctrlMap[this.activeBrick][val]\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n const sourceCtrlOptions = get(this.builderSchema, this.activeIndex)\n sourceCtrlOptions.type = val\n const ctrlOptions = cloneDeep(sourceCtrlOptions)\n this.ctrlOptions = ctrlOptions\n if (ctrlOptions.text) {\n this.ctrlOptions.text = ctrlOptions.text\n this.ctrlOptions.props = ctrlOptions.props || {}\n }\n this.ctrlKey++\n this.key++\n this.updateBuilderSchema()\n }\n }\n },\n beforeCreate() {\n eventBus.on('dev-action', ({ event, data }) => {\n this.onDevAction(data.type, data.devId)\n })\n },\n unmounted() {\n eventBus.off('dev-action')\n },\n methods: {\n updateBuilderSchema() {\n // Using Pinia app store\n // @ts-ignore\n const appStore = (this as any).$pinia?._s?.get('app') || null\n if (appStore && appStore.setBuilderSchema) {\n appStore.setBuilderSchema(this.builderSchema)\n }\n },\n onDevAction(btnType, path) {\n this.activeIndex = path\n if (btnType === 'edit') {\n this.activeTab = 'ctrl'\n this.clicklabel()\n }\n if (btnType === 'del') {\n this.activeTab = 'base'\n this.removeOne()\n }\n this.ctrlKey++\n },\n pushFilter(name) {\n this.push(name, 'filter', 'filter', 'filter')\n },\n pushHeaders(name) {\n this.push(name, 'headers', 'headers', 'headers')\n },\n pushNormalButton(name) {\n this.push(name, 'normalButton', 'buttons', 'buttons')\n },\n pushBatchButton(name) {\n this.push(name, 'batchButton', 'buttons', 'buttons')\n },\n pushRowButton(name) {\n this.push(name, 'rowButton', 'buttons', 'buttons')\n },\n push(name, target, ctrlMapName, brick) {\n const ctrl = this.ctrlMap[ctrlMapName]\n if (!ctrl[name]) {\n this.$message({ type: 'warning', message: '尚未支持此组件的UI编辑' })\n return\n }\n this.activeCtrl = ctrl[name]\n this.activeBrick = brick\n this.ctrlOptions = {}\n this.builderSchema[target] = this.builderSchema[target] || []\n this.builderSchema[target].push(cloneDeep(ctrl[name].default))\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl[name].builder)\n })\n this.key++\n this.ctrlKey++\n this.activeIndex = `${target}[${this.builderSchema[target].length - 1}]`\n this.activeTab = 'ctrl'\n },\n removeOne() {\n unset(this.builderSchema, this.activeIndex)\n this.builderSchema = cloneDeep(compactObject(this.builderSchema))\n this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n this.activeBrick = m[1]\n if (['normalButton', 'batchButton', 'rowButton'].indexOf(m[1]) > -1) {\n this.activeBrick = 'buttons'\n }\n let type = this.builderSchema[m[1]][parseInt(m[2])].type\n if (m[1] === 'headers' && type === undefined) {\n type = 'span'\n }\n const ctrl = this.ctrlMap[this.activeBrick][type]\n if (!ctrl) {\n console.log(this.activeBrick, type, m)\n this.$message({ type: 'warning', message: '尚未支持此组件的UI编辑' })\n return\n }\n this.ctrlOptions = ctrlOptions\n this.currentCtrlType = type\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n const { filter, headers, rowButton, normalButton, batchButton } = this.currentBuilderSchema\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: {\n filter,\n headers,\n rowButton,\n normalButton,\n batchButton\n }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","<template>\n <VIcon\n name=\"ra-set\"\n @click=\"show = !show\"\n />\n <el-drawer\n v-model=\"show\"\n title=\"页面设计\"\n class=\"my-drawer\"\n :direction=\"direction\"\n size=\"90%\"\n destroy-on-close\n append-to-body\n >\n <form-builder\n v-if=\"pageSchema.formItems !== undefined\"\n :schema=\"pageSchema\"\n />\n <table-builder\n v-if=\"pageSchema.headers !== undefined\"\n :schema=\"pageSchema\"\n />\n </el-drawer>\n</template>\n<script setup>\nimport FormBuilder from '../../devtool/formBuilder/index.vue'\nimport TableBuilder from '../../devtool/tableBuilder/index.vue'\nimport { useAppStore } from '../../../store'\nimport { useRoute } from 'vue-router'\n\nconst show = ref(false)\nconst key = ref(1)\nconst direction = 'rtl'\nconst route = useRoute()\nconst appStore = useAppStore()\nconst pageSchema = computed(() => appStore.pages[route.path])\n</script>\n","<template>\n <el-row\n ref=\"header\"\n class=\"navbar\"\n :style=\"navbarStyle\"\n >\n <el-col :span=\"16\">\n <hamburger\n :is-active=\"sidebar.opened\"\n class=\"hamburger-container\"\n @toggleClick=\"toggleSideBar\"\n />\n <breadcrumb\n v-if=\"device !== 'mobile'\"\n class=\"breadcrumb-container\"\n />\n </el-col>\n <el-col :span=\"8\">\n <div class=\"right-content\">\n <div\n v-if=\"showPageJsonSchemaIcon\"\n class=\"right-item\"\n >\n <PageEditor />\n </div>\n <div\n class=\"right-item-button\"\n style=\"padding: 0\"\n >\n <v-button :buttons=\"nav\" />\n </div>\n <el-tooltip\n placement=\"bottom\"\n :content=\"isDark ? '切换为明亮模式' : '切换为暗黑模式'\"\n >\n <div\n class=\"right-item theme-toggle\"\n role=\"button\"\n tabindex=\"0\"\n @click=\"toggleTheme\"\n @keydown.enter.prevent=\"toggleTheme\"\n @keydown.space.prevent=\"toggleTheme\"\n >\n <el-icon>\n <component :is=\"isDark ? Moon : Sunny\" />\n </el-icon>\n </div>\n </el-tooltip>\n <el-dropdown\n class=\"right-item\"\n trigger=\"click\"\n >\n <div class=\"user-info\">\n <el-avatar\n class=\"user-avatar\"\n :size=\"32\"\n :src=\"currentAvatar || undefined\"\n @error=\"handleAvatarError\"\n >{{ avatarFallback }}</el-avatar>\n <span class=\"user-name\">{{ nickname || name }}</span>\n </div>\n <template #dropdown>\n <el-dropdown-menu class=\"user-dropdown\">\n <el-dropdown-item\n icon=\"oms-icon-index\"\n @click=\"$router.push('/')\"\n >首页</el-dropdown-item>\n <el-dropdown-item\n divided\n icon=\"el-icon-switch-button\"\n @click=\"logout\"\n >退出登录</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n </el-col>\n <el-drawer\n v-if=\"showJsonSchema\"\n :with-header=\"false\"\n size=\"50%\"\n />\n </el-row>\n</template>\n\n<script setup lang=\"ts\">\nimport Breadcrumb from './Breadcrumb/index.vue'\nimport Hamburger from './Hamburger/index.vue'\nimport PageEditor from './PageEditor.vue'\nimport { showEleByClassName, Cache, waterMarker } from '@okiss/utils'\nimport { VBtn as VButton } from '@okiss/vbtf'\nimport { useAppStore, useSettingsStore, useUserStore } from '../../../store'\nimport { useThemeMode } from '../../../composables/useThemeMode'\nimport { computed, ref, onMounted, watch } from 'vue'\nimport { Sunny, Moon } from '@element-plus/icons-vue'\n\nconst appStore = useAppStore()\nconst settingsStore = useSettingsStore()\nconst userStore = useUserStore()\n\nconst showExportPop = ref(false)\nconst showJsonSchema = ref(false)\nconst json = ref('')\nconst key = ref(0)\nconst defaultAvatar = computed(() => settingsStore.defaultAvatar)\nconst sidebar = computed(() => appStore.sidebar)\nconst device = computed(() => appStore.device)\nconst avatar = computed(() => userStore.avatar)\nconst name = computed(() => userStore.name)\nconst nickname = computed(() => userStore.nickname)\nconst nav = computed(() => (settingsStore as any).nav)\nconst setting = computed(() => settingsStore)\nconst user = computed(() => userStore)\nconst showPageJsonSchemaIcon = computed(() => settingsStore.showPageJsonSchema || false)\nconst { isDark, toggleTheme } = useThemeMode()\nconst navbarStyle = computed(() => {\n const envColor = setting.value.envColor?.[user.value.env]\n if (isDark.value) {\n return {\n background: 'linear-gradient(135deg, rgba(59, 130, 246, 0.55) 0%, rgba(37, 99, 235, 0.45) 45%, rgba(15, 23, 42, 0.92) 100%)',\n borderBottom: '1px solid rgba(148, 163, 184, 0.35)',\n boxShadow: '0 1px 8px rgba(15, 23, 42, 0.7)'\n }\n }\n if (envColor) {\n return {\n background: `linear-gradient(135deg, rgba(255, 255, 255, 0.18) 0%, rgba(255, 255, 255, 0.05) 60%, ${envColor} 100%)`,\n borderBottom: '1px solid rgba(15, 23, 42, 0.08)',\n boxShadow: '0 1px 4px rgba(15, 23, 42, 0.08)'\n }\n }\n return {\n background: 'linear-gradient(135deg, rgba(255, 255, 255, 0.9) 0%, rgba(248, 250, 252, 0.9) 70%, #ffffff 100%)',\n borderBottom: '1px solid rgba(15, 23, 42, 0.08)',\n boxShadow: '0 1px 4px rgba(15, 23, 42, 0.05)'\n }\n})\n\nonMounted(() => {\n showEleByClassName('el-submenu is-active')\n const noticeStr = getSetting('navBarNotice') || ''\n if (noticeStr.length > 0 && !getSetting('closeNavNotice') && showNotice(noticeStr)) {\n // @ts-ignore\n window?.App?.config?.globalProperties?.$notify({\n title: '提示',\n message: noticeStr,\n dangerouslyUseHTMLString: true,\n duration: 0,\n onClose: closeNavBarNotice\n })\n }\n if (setting.value.envColor?.[user.value.env]) {\n // @ts-ignore\n waterMarker({\n elRef: header.value.$el,\n waterMark: user.value.env,\n color: 'skyblue',\n size: '20'\n })\n }\n})\n\nconst header = ref()\nconst currentAvatar = ref('')\nconst avatarError = ref(false)\n\nwatch([avatar, defaultAvatar], () => {\n avatarError.value = false\n currentAvatar.value = avatar.value || defaultAvatar.value || ''\n}, { immediate: true })\n\nconst avatarFallback = computed(() => {\n const text = nickname.value || name.value || settingsStore.title || '用户'\n return text ? text.toString().trim().charAt(0).toUpperCase() : '用'\n})\nfunction toggleSideBar() { appStore.toggleSideBar() }\nasync function logout() {\n await userStore.logout()\n // @ts-ignore\n const route = window?.App?.config?.globalProperties?.$router?.currentRoute?.value\n location.reload(`${location.origin}/#/login?redirect=${route?.fullPath || '/'}`)\n}\nfunction getSetting(name: string): any { return (settingsStore as any)[name] }\nasync function closeNavBarNotice() {\n settingsStore.updateSettings({ closeNavNotice: true } as any)\n closeNotice(getSetting('navBarNotice'))\n}\nfunction showPopover() { showExportPop.value = true }\nfunction showNotice(text: string) {\n const key = 'dismiss:navbar_notice'\n if (!Cache.exist(key)) return true\n return Cache.get(key) !== text\n}\nfunction closeNotice(text: string) {\n const key = 'dismiss:navbar_notice'\n Cache.set(key, text)\n}\nfunction gotoMenuEdit() {\n // @ts-ignore\n const route = window?.App?.config?.globalProperties?.$router?.currentRoute?.value\n if (route?.meta?.pageId) {\n window.open(location.origin + location.pathname + '#/menu/' + route?.meta?.pageId)\n }\n}\n\nfunction handleAvatarError() {\n if (avatarError.value)\n return\n avatarError.value = true\n currentAvatar.value = ''\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.el-dropdown-link {\n cursor: pointer;\n color: #409eff;\n}\n\n.el-icon-arrow-down {\n font-size: 12px;\n}\n\n.navbar {\n display: flex;\n height: 50px;\n /*overflow: hidden;*/\n position: relative;\n background: #fff;\n box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);\n\n .hamburger-container {\n line-height: 50px;\n height: 100%;\n float: left;\n cursor: pointer;\n transition: background 0.3s;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .breadcrumb-container {\n float: left;\n }\n}\n\n.notice-setting {\n left: 50%;\n top: 50%;\n position: absolute;\n transform: translate(-50%, -50%);\n}\n\n.right-content {\n float: right;\n height: 100%;\n padding-right: 20px;\n color: rgba(0, 0, 0, 0.65);\n display: flex;\n\n .icon {\n font-size: 18px;\n\n &:focus {\n outline: none;\n }\n }\n\n .right-item {\n padding: 0 12px;\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .right-item {\n padding: 0 12px;\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .theme-toggle {\n justify-content: center;\n\n .el-icon {\n font-size: 18px;\n }\n }\n\n .right-item-button {\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n }\n\n .user-info {\n height: 50px;\n line-height: 50px;\n display: inline-flex;\n align-items: center;\n }\n\n .user-avatar {\n margin: 0 10px 0 0;\n color: #fff;\n background: #1890ff;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .user-name {\n vertical-align: middle;\n }\n}\n</style>\n","<template>\n <div\n class=\"sidebar-logo-container\"\n :class=\"{ collapse: collapse }\"\n >\n <transition name=\"sidebarLogoFade\">\n <router-link\n v-if=\"collapse\"\n key=\"collapse\"\n class=\"sidebar-logo-link\"\n to=\"/\"\n >\n <el-image\n v-if=\"showLogoImage\"\n :src=\"logo || ''\"\n fit=\"contain\"\n class=\"sidebar-logo\"\n @error=\"handleLogoError\"\n >\n <template #error>\n <div class=\"sidebar-logo-fallback\">{{ logoFallback }}</div>\n </template>\n </el-image>\n <template v-else>\n <div class=\"sidebar-logo-fallback\">{{ logoFallback }}</div>\n </template>\n <div class=\"sidebar-subtitle\">系统</div>\n </router-link>\n <router-link\n v-else\n key=\"expand\"\n class=\"sidebar-logo-link\"\n to=\"/\"\n >\n <el-image\n v-if=\"showLogoImage\"\n :src=\"logo || ''\"\n fit=\"contain\"\n class=\"sidebar-logo\"\n @error=\"handleLogoError\"\n >\n <template #error>\n <div class=\"sidebar-logo-fallback\">{{ logoFallback }}</div>\n </template>\n </el-image>\n <template v-else>\n <div class=\"sidebar-logo-fallback\">{{ logoFallback }}</div>\n </template>\n <h1 class=\"sidebar-title\">{{ title }}</h1>\n </router-link>\n </transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useSettingsStore } from '../../../../store'\nimport { computed, ref, watch } from 'vue'\n\ndefineProps<{ collapse: boolean }>()\nconst settings = useSettingsStore()\nconst title = computed(() => settings.title as any)\nconst logo = computed(() => settings.logo as any)\nconst logoError = ref(false)\n\nconst showLogoImage = computed(() => !!logo.value && !logoError.value)\nconst logoFallback = computed(() => {\n const text = title.value || 'OMS'\n return text ? text.toString().trim().charAt(0).toUpperCase() : 'O'\n})\n\nwatch(logo, () => {\n logoError.value = false\n}, { immediate: true })\n\nfunction handleLogoError() {\n logoError.value = true\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sidebarLogoFade-enter-active {\n transition: opacity 1.5s;\n}\n\n.sidebarLogoFade-enter,\n.sidebarLogoFade-leave-to {\n opacity: 0;\n}\n\n.sidebar-logo-container {\n position: relative;\n width: 100%;\n height: 50px;\n line-height: 50px;\n background: var(--sidebar-logo-bg, #2b2f3a);\n text-align: center;\n color: var(--sidebar-logo-text-color, #fff);\n overflow: hidden;\n\n & .sidebar-logo-link {\n height: 100%;\n width: 100%;\n\n & .sidebar-logo {\n width: 32px;\n height: 32px;\n vertical-align: middle;\n margin-right: 12px;\n }\n\n & .sidebar-title {\n display: inline-block;\n margin: 0;\n color: var(--sidebar-logo-text-color, #fff);\n font-weight: 600;\n line-height: 50px;\n font-size: 14px;\n font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;\n vertical-align: middle;\n }\n\n & .sidebar-logo-fallback {\n width: 32px;\n height: 32px;\n line-height: 32px;\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.2);\n color: #fff;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: 12px;\n }\n\n & .sidebar-subtitle {\n font-size: 12px;\n color: rgba(255, 255, 255, 0.78);\n }\n }\n\n &.collapse {\n .sidebar-logo {\n margin-right: 0px;\n }\n\n .sidebar-logo-fallback {\n margin-right: 0px;\n }\n }\n}\n</style>\n","<template>\n <component\n :is=\"compType(to)\"\n v-bind=\"linkProps(to)\"\n >\n <slot />\n </component>\n</template>\n\n<script>\nimport { isExternal } from '@okiss/utils'\n\nexport default {\n props: {\n to: {\n type: String,\n required: true\n },\n newTab: {\n type: Boolean,\n required: false\n }\n },\n methods: {\n compType(url) {\n if (isExternal(url) || this.newTab) {\n return 'a'\n } else {\n return 'router-link'\n }\n },\n linkProps(url) {\n if (isExternal(url)) {\n return {\n is: 'a',\n href: url,\n target: '_blank',\n rel: 'noopener'\n }\n }\n if (this.newTab) {\n const routeData = this.$router.resolve(url)\n return {\n is: 'a',\n href: routeData.href,\n target: '_blank',\n rel: 'noopener'\n }\n }\n return {\n is: 'router-link',\n to: url\n }\n }\n }\n}\n</script>\n","export default {\n computed: {\n // @ts-ignore\n device() {\n // Access device from Pinia state without importing\n // @ts-ignore\n return this.$pinia?.state?.value?.app?.device || 'desktop'\n }\n },\n mounted() {\n // In order to fix the click on menu on the ios device will trigger the mouseleave bug\n // https://github.com/PanJiaChen/vue-element-admin/issues/1135\n // @ts-ignore\n this.fixBugIniOS()\n },\n methods: {\n fixBugIniOS() {\n // @ts-ignore\n const $subMenu = this.$refs.subMenu\n if ($subMenu) {\n const handleMouseleave = $subMenu.handleMouseleave\n // @ts-ignore\n $subMenu.handleMouseleave = e => {\n // @ts-ignore\n if (this.device === 'mobile') {\n return\n }\n handleMouseleave(e)\n }\n }\n }\n }\n}\n","<template>\n <VIcon :name=\"meta.icon || 'ra-all'\" />\n <span class=\"menu-content\">{{ meta.title }}</span>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps({\n meta: {\n type: Object,\n default: () => {\n return {\n icon: '',\n title: ''\n }\n }\n }\n})\n</script>\n","<template>\n <div\n v-if=\"item.hidden !== false\"\n class=\"menu-wrapper\"\n >\n <!-- 没有子菜单 -->\n <template v-if=\"item.meta && item.meta.menuType === 2\">\n <el-tooltip\n :disabled=\"!isCollapse\"\n effect=\"dark\"\n placement=\"right\"\n :content=\"item.meta?.title\"\n >\n <app-link\n v-if=\"item.meta\"\n :to=\"to\"\n :new-tab=\"item.meta.newTab\"\n >\n <el-menu-item\n :index=\"to\"\n :class=\"{ 'submenu-title-noDropdown': !isNest }\"\n @click=\"itemClick\"\n >\n <menu-content :meta=\"item.meta\" />\n </el-menu-item>\n </app-link>\n </el-tooltip>\n </template>\n <!-- 有子菜单 -->\n <el-tooltip\n v-else-if=\"item.meta && item.meta.menuType === 1\"\n :disabled=\"!isCollapse\"\n effect=\"dark\"\n placement=\"right\"\n :content=\"item.meta?.title\"\n >\n <el-sub-menu\n ref=\"subMenu\"\n :index=\"to\"\n :class=\"{ 'submenu-title-noDropdown': !isNest }\"\n >\n <template #title>\n <app-link\n v-if=\"item.redirect && item.redirect !== '#'\"\n :to=\"to\"\n >\n <menu-content :meta=\"item.meta\" />\n </app-link>\n <menu-content\n v-else\n :meta=\"item.meta\"\n />\n </template>\n <sidebar-item\n v-for=\"child in item.children\"\n :key=\"child.path\"\n :is-nest=\"true\"\n :item=\"child\"\n :to=\"getTo(child)\"\n class=\"nest-menu\"\n />\n </el-sub-menu>\n </el-tooltip>\n </div>\n</template>\n\n<script>\nimport AppLink from './Link.vue'\nimport FixiOSBug from './FixiOSBug'\nimport MenuContent from './MenuContent.vue'\nimport { Cache } from '@okiss/utils'\n\nexport default {\n name: 'SidebarItem',\n components: {\n AppLink,\n MenuContent\n },\n mixins: [FixiOSBug],\n props: {\n // route object\n item: {\n type: Object,\n required: true\n },\n isNest: {\n type: Boolean,\n default: false\n },\n to: {\n type: String,\n default: ''\n },\n isCollapse: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n itemClick() {\n Cache.remove('table_filter:' + this.$props.to)\n },\n getTo(child) {\n try {\n const to = this.$router.resolve(child.redirect ? child.redirect : child)\n return to.fullPath\n } catch (e) {\n console.error('路由解析错误')\n return '/'\n }\n }\n }\n}\n</script>\n","<template>\n <el-select\n v-model=\"selected\"\n filterable\n placeholder=\"搜索菜单...\"\n class=\"search-menu\"\n @change=\"onselected\"\n >\n <template\n v-for=\"group in filterRoutes\"\n :key=\"group.path\"\n >\n <template v-if=\"group.children !== undefined\">\n <el-option-group\n v-if=\"group.meta.menuType !== 0\"\n :key=\"group.path + '-'\"\n :label=\"group.meta.title\"\n >\n <template\n v-for=\"(item, index) in group.children\"\n :key=\"item.path\"\n >\n <el-option\n v-if=\"group.meta.menuType !== 0\"\n :label=\"(index === (group.children.length - 1) ? '└─' : '├─' )+ item.meta.title\"\n :value=\"getJumpPath(item)\"\n />\n </template>\n </el-option-group>\n </template>\n <template v-else>\n <el-option\n :label=\"'' + group.meta.title\"\n :value=\"getJumpPath(group)\"\n />\n </template>\n </template>\n </el-select>\n</template>\n<script setup lang=\"ts\">\nimport { cloneDeep } from 'lodash'\nimport { useUserStore } from '../../../../store'\nimport { useRouter } from 'vue-router'\nconst userStore = useUserStore()\n\nfunction filterHidden(arr) {\n return arr.filter(each => {\n if (each.meta?.menuType === 0) {\n return false\n }\n if (each.children) {\n each.children = filterHidden(each.children)\n if (each.children.length === 0) {\n delete each.children\n }\n }\n return true\n })\n}\n\nconst selected = ref('')\nconst remoteRouter = computed(() => userStore.remoteRouter)\nconst router = useRouter()\n\nconst filterRoutes = computed(() => {\n let routes: any[] = []\n remoteRouter.value.forEach(item => { routes = routes.concat(cloneDeep(item.routes)) })\n return filterHidden(routes)\n})\n\nfunction getJumpPath(route: any) {\n let _route = route\n if (route.meta.menuType === 1 && route.children && route.children.length > 0) {\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n _route = route.children[i]\n break\n }\n }\n }\n return router.resolve(_route.redirect ? _route.redirect : _route).fullPath\n}\nfunction onselected(to: string) { router.push(to); selected.value = '' }\n</script>\n<style lang=\"scss\" scoped>\n.search-menu {\n width: 100%;\n padding: 15px 20px 0 20px;\n\n ::v-deep(.el-select__wrapper) {\n background-color: #304156;\n border: 1px dashed gray;\n border-radius: var(--el-input-border-radius,var(--el-border-radius-base));\n box-shadow: none;\n }\n //::v-deep(.el-input__wrapper:hover) {\n // box-shadow: none;\n //}\n //::v-deep(.el-input__wrapper:focus) {\n // box-shadow: none;\n //}\n //::v-deep(.is-focus) {\n // border: none;\n // box-shadow: none;\n //}\n}\n\n.filter-tree {\n max-height: 500px;\n}\n</style>\n","import { AxiosRequestConfig } from './utils/request'\nimport type { RouteRecordRaw } from 'vue-router'\nimport { Component, Directive, Plugin } from 'vue'\nimport { MockApi } from './mock/types'\nimport { Sso } from './utils/sso'\n\nexport interface Nav {\n}\n\nexport type newSso = () => Sso\n\nexport interface Settings {\n title?: string,\n fixedHeader?: boolean,\n sidebarLogo?: boolean,\n logo?: string,\n closeNavNotice?: boolean,\n navBarNotice?: string,\n hasNewMessage?: boolean,\n showPageJsonSchema?: boolean,\n loginTips?: string,\n sso?: Record<string, newSso>,\n activeSsoKey?: string,\n ElementPlus?: Object,\n nav?: Nav[],\n whiteRoutes?: Array<string | RegExp>,\n tokenExpire?: number,\n defaultAvatar?: string,\n envColor?: Record<string, string>,\n serviceOffLineNotice? : string,\n formMutex?: boolean\n captcha?: boolean\n themeMode?: 'light' | 'dark'\n}\n\nexport type UsePlugin = Plugin | [Plugin, any]\n\nexport interface OmsPlugin {\n use?: UsePlugin[],\n components?: Record<string, Component>,\n directives?: Record<string, Directive>,\n mockApis?: MockApi[],\n routes?: RouteRecordRaw[],\n // Pinia does not support dynamic registration like Vuex modules;\n // this field is deprecated and ignored in Pinia migration.\n // Kept for backward compatibility with type 'any'.\n storeModules?: Record<string, any>\n}\n\nexport interface OmsOptions {\n axios?: AxiosRequestConfig,\n settings?: Settings,\n plugins?: OmsPlugin[],\n mock?: boolean,\n form?: FormOptions\n}\n\nexport interface FormOptions {\n vsPath: string\n}\n\nexport interface LoginForm {\n username: string,\n password: string\n}\n\nexport interface LoginTicket {\n ticket: string,\n key: string\n}\n\nexport type ResourceIds = Array<Array<string>>\n\nexport interface UserInfo {\n id: number,\n name: string,\n token: string,\n avatar: string,\n nickname: string,\n role_ids: Array<string>,\n resource: ResourceIds\n env: string,\n website?: any\n}\n\nexport type Resource = Record<string, boolean | Record<string, boolean>>\n\n// eslint-disable-next-line no-unused-vars\nexport enum PageType { custom, list, form, customSchema, localComp, tree, report, entity }\n// eslint-disable-next-line no-unused-vars\nexport enum MenuType { hidden = 0, dir = 1, menu = 2, page = 3}\n\nexport interface PageInfo {\n module_id: number,\n module_name?: string\n id: number,\n pid: number,\n name: string,\n path: string,\n icon?: string,\n view?: string,\n is_show: number,\n type: number,\n page_type: PageType,\n role?: string,\n children?: PageInfo[],\n code: string\n}\n\nexport interface RemoteModule {\n id: number,\n label: string,\n routes: PageInfo[]\n}\n\nexport interface OmsModule {\n id: number,\n label: string,\n routes: RouteRecordRaw[]\n}\n\nexport interface ImportMetaEnv {\n VITE_BASE_API?: string\n VITE_BASE?: string\n}\n","<template>\n <div :class=\"{ 'has-logo': showLogo }\">\n <logo\n v-if=\"showLogo\"\n :collapse=\"isCollapse\"\n />\n <el-scrollbar wrap-class=\"scrollbar-wrapper\">\n <search-menu v-if=\"!isCollapse\" />\n <el-menu\n :default-active=\"activeMenu\"\n :collapse=\"isCollapse\"\n :background-color=\"variables.menuBg\"\n :text-color=\"variables.menuText\"\n :unique-opened=\"false\"\n :active-text-color=\"variables.menuActiveText\"\n :collapse-transition=\"false\"\n mode=\"vertical\"\n >\n <template\n v-for=\"(item, index) in routes\"\n :key=\"index + '-module'\"\n >\n <!-- <div v-if=\"item.routes.length > 0 && item.label\" class=\"menu-section\">{{ item.label }}</div>-->\n <sidebar-item\n v-for=\"route in filterRoute(item.routes)\"\n :key=\"route.path\"\n :item=\"route\"\n :to=\"$router.resolve(route.redirect ? route.redirect : route).fullPath\"\n :is-collapse=\"isCollapse\"\n />\n </template>\n </el-menu>\n </el-scrollbar>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Logo from './Logo.vue'\nimport SidebarItem from './SidebarItem.vue'\nimport SearchMenu from './SearchMenu.vue'\nimport { cloneDeep } from 'lodash'\nimport { MenuType } from '../../../../types'\nimport { showEleByClassName } from '@okiss/utils'\nimport { useAppStore, useUserStore, useSettingsStore } from '../../../../store'\nimport { useRouter, useRoute } from 'vue-router'\n\nconst appStore = useAppStore()\nconst userStore = useUserStore()\nconst settingsStore = useSettingsStore()\n\nconst sidebar = computed(() => appStore.sidebar)\nconst remoteRouter = computed(() => userStore.remoteRouter)\nconst customRouter = computed(() => userStore.customRouter)\n\nconst router = useRouter()\nconst route = useRoute()\n\nconst routes = computed(() => {\n let localRoutes: any[] = []\n router.options.routes.concat(customRouter.value || []).forEach(item => {\n if (item.path === '/') {\n localRoutes = localRoutes.concat(item.children || [])\n } else {\n localRoutes.push(item)\n }\n })\n return cloneDeep([\n { label: '', routes: localRoutes },\n ...remoteRouter.value\n ])\n})\n\nconst activeMenu = computed(() => {\n const m = route.matched\n for (let i = m.length - 1; i >= 0; i--) {\n const tmp = m[i]\n if (tmp.meta.menuType === MenuType.menu) {\n showActive()\n return router.resolve(tmp.redirect ? tmp.redirect : tmp).fullPath\n }\n }\n return ''\n})\n\nconst showLogo = computed(() => settingsStore.sidebarLogo)\nconst variables = computed(() => ({\n menuBg: '#304156',\n menuText: '#bfcbd9',\n menuActiveText: '#409EFF'\n}))\nconst isCollapse = computed(() => !sidebar.value.opened)\n\nonMounted(() => showActive())\nfunction showActive() { showEleByClassName('is-active', 200) }\nfunction filterRoute(arr: any[]) {\n return arr.filter(item => [MenuType.dir, MenuType.menu].indexOf(item.meta.menuType) !== -1)\n .map(item => {\n item = Object.assign({}, item)\n if (item.children) item.children = filterRoute(item.children)\n return item\n })\n}\n</script>\n<style scoped>\n::v-deep(.el-scrollbar__wrap) {\n overflow: scroll;\n}\n\n.menu-section {\n height: 30px;\n font-size: 14px;\n display: table-cell;\n vertical-align: bottom;\n padding-left: 20px;\n color: #97a8be;\n padding-top: 5px;\n}\n</style>\n","<template>\n <section class=\"app-main\">\n <router-view :key=\"$route.fullPath + key\" />\n <el-backtop :bottom=\"50\" />\n </section>\n</template>\n\n<script setup>\nimport { useRoute, onBeforeRouteLeave } from 'vue-router'\nconst route = useRoute()\nconst include = []\nconst key = ref(0)\nonBeforeRouteLeave(() => {\n if (route.meta?.keepAlive) {\n !!include.indexOf(route.name) && include.push(route.name)\n }\n key.value++\n})\n</script>\n\n<style scoped>\n.app-main {\n /*50 = navbar */\n min-height: calc(100vh - 50px);\n width: 100%;\n position: relative;\n overflow: hidden;\n padding: 20px;\n}\n\n.fixed-header + .app-main {\n padding-top: 50px;\n}\n</style>\n","<template>\n <div\n :class=\"classObj\"\n class=\"app-wrapper\"\n >\n <div\n v-if=\"device === 'mobile' && sidebar.opened\"\n class=\"drawer-bg\"\n @click=\"handleClickOutside\"\n />\n <Sidebar class=\"sidebar-container\" />\n <div class=\"main-container\">\n <div :class=\"{ 'fixed-header': fixedHeader }\">\n <Navbar />\n </div>\n <AppMain />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { Navbar, Sidebar, AppMain } from './components'\nimport { useEventListener } from '@vueuse/core'\nimport { useAppStore, useSettingsStore } from '../../store'\nimport { useRoute } from 'vue-router'\nimport { watch } from 'vue'\n\nconst { body } = document\nconst WIDTH = 992 // refer to Bootstrap's responsive design\n\nconst appStore = useAppStore()\nconst settingsStore = useSettingsStore()\nconst route = useRoute()\n\nconst sidebar = computed(() => appStore.sidebar)\nconst device = computed(() => appStore.device)\nconst fixedHeader = computed(() => settingsStore.fixedHeader)\n\nconst classObj = computed(() => {\n return {\n hideSidebar: !sidebar.value.opened,\n openSidebar: sidebar.value.opened,\n withoutAnimation: sidebar.value.withoutAnimation,\n mobile: device.value === 'mobile'\n }\n})\n\nconst isMobile = () => {\n const rect = body.getBoundingClientRect()\n return rect.width - 1 < WIDTH\n}\n\nconst resizeHandler = () => {\n if (!document.hidden) {\n const ismobile = isMobile()\n appStore.toggleDevice(ismobile ? 'mobile' : 'desktop')\n if (ismobile) appStore.closeSideBar({ withoutAnimation: true })\n }\n}\n\nresizeHandler()\n\nuseEventListener(window, 'resize', () => resizeHandler())\n\nwatch(route, () => {\n if (device.value === 'mobile' && sidebar.value.opened) {\n appStore.closeSideBar({ withoutAnimation: false })\n }\n})\n\nconst handleClickOutside = () => appStore.closeSideBar({ withoutAnimation: false })\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"../../styles/mixin\" as *;\n@use \"../../styles/variables\" as *;\n\n.app-wrapper {\n @include clearfix;\n\n &.mobile.openSidebar {\n position: fixed;\n top: 0;\n }\n}\n\n.drawer-bg {\n background: #000;\n opacity: 0.3;\n width: 100%;\n top: 0;\n height: 100%;\n position: fixed;\n z-index: 999;\n}\n\n.fixed-header {\n position: fixed;\n top: 0;\n right: 0;\n z-index: 9;\n width: calc(100% - #{$sideBarWidth});\n transition: width 0.28s;\n}\n\n.hideSidebar .fixed-header {\n width: calc(100% - 54px);\n}\n\n.mobile .fixed-header {\n width: 100%;\n}\n</style>\n","<template>\n <div id=\"login\">\n <h1 id=\"title\">登录</h1>\n <form id=\"form\">\n <input\n v-model=\"data.username\"\n type=\"text\"\n placeholder=\"用户名\"\n class=\"input\"\n >\n <input\n v-model=\"data.password\"\n type=\"password\"\n placeholder=\"密码\"\n class=\"input\"\n >\n <div v-if=\"captcha\" class=\"captcha\">\n <input\n v-model=\"data.captcha\"\n type=\"text\"\n placeholder=\"验证码\"\n class=\"input-captcha\"\n >\n <img\n class=\"captcha-img\"\n :src=\"baseAPI + '/user/captcha?ts=' + ts\"\n title=\"点击刷新\"\n @click=\"onCaptchaClick\"\n >\n </div>\n <el-button\n class=\"login-button\"\n type=\"primary\"\n :loading=\"loading\"\n :disabled=\"!onReady\"\n @click=\"login\"\n >登录</el-button>\n <div class=\"tips\">\n <div>{{ tips }}</div>\n </div>\n <div class=\"sso\">\n <div id=\"sso-qrcode\" />\n <div\n v-for=\"item in Object.keys([])\"\n :key=\"item\"\n >\n {{ item }}\n </div>\n </div>\n </form>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useRouter, useRoute } from 'vue-router'\nimport { useSettingsStore, useAppStore, useUserStore } from '../store'\nimport CryptoJS from 'crypto-js'\nimport { computed } from 'vue'\n\nconst router = useRouter()\nconst route = useRoute()\nconst settingsStore = useSettingsStore()\nconst appStore = useAppStore()\nconst userStore = useUserStore()\nconst tips = computed(() => settingsStore.loginTips)\nconst captcha = computed(() => settingsStore.captcha)\nconst baseAPI = computed(() => appStore.baseURL)\n\nconst ts = ref(0)\nconst loading = ref(false)\nconst onCaptchaClick = () => ts.value++\nconst onReady = computed(() => {\n return data.value.username.length > 0 && data.value.password.length >= 4 && (captcha.value ? data.value.captcha.length === 4 : true)\n})\n\nconst data = ref({\n username: '',\n password: '',\n captcha: '',\n sing: ''\n})\n\nconst login = () => {\n if (loading.value)\n return\n if (data.value.username === '' || data.value.password === '' || (captcha.value && data.value.captcha === '')) {\n ElMessage.error('用户名, 密码, 验证码是必须的')\n return\n }\n if (captcha.value) {\n data.value.sing = CryptoJS.MD5(`${data.value.username}${data.value.password}${data.value.captcha}`).toString()\n }\n loading.value = true\n userStore.login(data.value).then(res => {\n router.push({ path: route.query?.redirect as string || '/' })\n }).catch(e => {\n ts.value++\n }).finally(() => {\n loading.value = false\n })\n return\n}\n</script>\n\n<style lang=\"scss\">\n$bg: #2d3a4b;\n$dark_gray: #889aa4;\n\n#login {\n width: 100%;\n height: 100%;\n background: $bg;\n text-align: center;\n display: flex;\n flex-direction: column;\n padding-top: 150px;\n\n #title {\n color: #fff;\n }\n\n #form {\n width: 300px;\n margin: 10px auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n .input {\n width: 300px;\n height: 40px;\n margin: 10px auto;\n padding: 10px;\n }\n\n .captcha {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n padding: 10px 0;\n\n .input-captcha {\n width: 60%;\n height: 40px;\n margin-right: 10px;\n }\n\n .captcha-img {\n height: 40px;\n width: auto;\n }\n }\n\n .login-button {\n width: 300px;\n height: 40px;\n }\n }\n\n .tips,\n .sso {\n padding: 10px 0;\n display: flex;\n justify-content: flex-start;\n color: gray;\n }\n}\n</style>\n","<template>\n <div class=\"not-found\">\n <svg\n width=\"380px\"\n height=\"500px\"\n viewBox=\"0 0 837 1045\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\"\n >\n <g\n id=\"Page-1\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n sketch:type=\"MSPage\"\n >\n <path\n id=\"Polygon-1\"\n d=\"M353,9 L626.664028,170 L626.664028,487 L353,642 L79.3359724,487 L79.3359724,170 L353,9 Z\"\n stroke=\"#007FB2\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-2\"\n d=\"M78.5,529 L147,569.186414 L147,648.311216 L78.5,687 L10,648.311216 L10,569.186414 L78.5,529 Z\"\n stroke=\"#EF4A5B\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-3\"\n d=\"M773,186 L827,217.538705 L827,279.636651 L773,310 L719,279.636651 L719,217.538705 L773,186 Z\"\n stroke=\"#795D9C\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-4\"\n d=\"M639,529 L773,607.846761 L773,763.091627 L639,839 L505,763.091627 L505,607.846761 L639,529 Z\"\n stroke=\"#F2773F\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-5\"\n d=\"M281,801 L383,861.025276 L383,979.21169 L281,1037 L179,979.21169 L179,861.025276 L281,801 Z\"\n stroke=\"#36B455\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n </g>\n </svg>\n <div class=\"message-box\">\n <h1>404</h1>\n <p>Page not found</p>\n <div class=\"buttons-con\">\n <div class=\"action-link-wrap\">\n <!--<a onclick=\"history.back(-2)\" class=\"link-button link-back-button\">Go Back</a>-->\n <a\n href=\"\"\n class=\"link-button\"\n >Go to Home Page</a>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'NotFoundPage'\n}\n</script>\n\n<style scoped>\n.not-found {\n background-color: #2F3242;\n width: 100%;\n height: 100%;\n}\n\nsvg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -400px;\n}\n\n.message-box {\n height: 200px;\n width: 380px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: 50px;\n color: #FFF;\n font-family: Roboto;\n font-weight: 300;\n}\n\n.message-box h1 {\n font-size: 60px;\n line-height: 46px;\n margin-bottom: 40px;\n}\n\n.buttons-con .action-link-wrap {\n margin-top: 40px;\n}\n\n.buttons-con .action-link-wrap a {\n background: #68c950;\n padding: 8px 25px;\n border-radius: 4px;\n color: #FFF;\n font-weight: bold;\n font-size: 14px;\n transition: all 0.3s linear;\n cursor: pointer;\n text-decoration: none;\n margin-right: 10px\n}\n\n.buttons-con .action-link-wrap a:hover {\n background: #5A5C6C;\n color: #fff;\n}\n\n#Polygon-1, #Polygon-2, #Polygon-3, #Polygon-4, #Polygon-4, #Polygon-5 {\n animation: float 1s infinite ease-in-out alternate;\n}\n\n#Polygon-2 {\n animation-delay: .2s;\n}\n\n#Polygon-3 {\n animation-delay: .4s;\n}\n\n#Polygon-4 {\n animation-delay: .6s;\n}\n\n#Polygon-5 {\n animation-delay: .8s;\n}\n\n@keyframes float {\n 100% {\n transform: translateY(20px);\n }\n}\n\n@media (max-width: 450px) {\n svg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -190px;\n }\n\n .message-box {\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: -190px;\n text-align: center;\n }\n}\n</style>\n","import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'\nimport Dashboard from '../scaffold/dashboard.vue'\nimport Layout from '../scaffold/layout/index.vue'\nimport Login from '../scaffold/login.vue'\nimport NotFoundPage from '../scaffold/404.vue'\n\nconst routes: RouteRecordRaw[] = [\n {\n path: '/',\n component: Layout,\n redirect: '/dashboard',\n name: 'Root',\n meta: {\n menuType: 1\n },\n children: [\n {\n path: 'dashboard',\n name: 'Dashboard',\n component: Dashboard,\n meta: { title: 'Dashboard', icon: 'el-icon-help', menuType: 2, keepAlive: true },\n }\n ]\n },\n {\n path: '/login',\n component: Login,\n meta: { title: '用户登录', menuType: 0 },\n hidden: true\n },\n {\n path: '/404',\n component: NotFoundPage,\n meta: { menuType: 0 },\n hidden: true\n }\n]\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes\n})\n\nexport default router\n","import { Router } from 'vue-router'\nimport NProgress from 'nprogress'\nimport 'nprogress/nprogress.css'\nimport { pinia, useUserStore } from '../../store'\n\nNProgress.configure({ showSpinner: false })\n\nexport default function(router: Router) {\n router.beforeEach((to, from, next) => {\n NProgress.start()\n to.preHash = location.hash.replace('#', '')\n next()\n })\n router.afterEach((to) => {\n const user = useUserStore(pinia)\n if (to.matched.length > 0) {\n user.updateState({\n key: 'path',\n value: to.matched[to.matched.length - 1].path.replace('(\\\\d+)', '')\n })\n }\n NProgress.done()\n })\n}\n","import { pinia, useUserStore, useSettingsStore } from '../../store'\n\nexport function isLodeRemoteRoutes(): boolean {\n return useUserStore(pinia).isLodeRemoteRoutes\n}\n\nexport function getWhiteRoutes(): Array<string | RegExp> {\n return useSettingsStore(pinia).whiteRoutes || []\n}\n\nexport function getToken() {\n return useUserStore(pinia).token\n}\n","import { NavigationGuardNext } from 'vue-router'\nimport type { LoginTicket } from '@/types'\n\nexport type SsoType = 'jump' | 'qrcode'\n\nexport interface Sso {\n flag(): LoginTicket | undefined,\n\n type: SsoType,\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void,\n\n showQrCode(): void\n\n qrCodeUrl?: string,\n appid?: string,\n style?: string,\n redirectUri?: string,\n elId?: string\n}\n\nexport class BaseSso implements Sso {\n type: SsoType = 'qrcode'\n\n flag(): LoginTicket | undefined {\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void {\n next(path)\n }\n\n showQrCode(): void {\n }\n}\n","import { NavigationGuardNext } from 'vue-router'\nimport { BaseSso, SsoType } from './index'\nimport { getQueryParam } from '@okiss/utils'\nimport type { LoginTicket } from '@/types'\n\nexport class Github extends BaseSso {\n type: SsoType = 'jump'\n\n client_id: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n this.client_id = options.client_id\n }\n\n flag(): LoginTicket | undefined {\n const code = getQueryParam('code')\n if (code) {\n return {\n ticket: code,\n key: 'github'\n }\n }\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string) {\n const redirect = encodeURIComponent(location.href)\n location.replace(`https://github.com/login/oauth/authorize?client_id=${this.client_id}&redirect_uri${redirect}`)\n }\n}\n","import { getQueryParam, obj2Param, strVarReplace, createIFrame } from '@okiss/utils'\nimport { BaseSso, SsoType } from './index'\nimport type { LoginTicket } from '@/types'\n\nexport class DingTalk extends BaseSso {\n type: SsoType = 'qrcode'\n qrCodeUrl = 'https://login.dingtalk.com/login/qrcode.htm?goto={goto}&style={style}'\n reloadUrl = 'https://oapi.dingtalk.com/connect/oauth2/sns_authorize?response_type=code&scope=snsapi_login&state=&appid={appid}&redirect_uri={redirect_uri}'\n\n elId: string = ''\n appid: string = ''\n iframe: HTMLIFrameElement = new HTMLIFrameElement()\n redirectUri: string = ''\n style: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n }\n\n flag(): LoginTicket | undefined {\n const code = getQueryParam('code')\n if (code) {\n return {\n ticket: code,\n key: 'dingtalk'\n }\n }\n return undefined\n }\n\n showQrCode(): void {\n const getReloadUrl = (extra?: Record<string, any>) => {\n const data = {\n appid: this.appid,\n redirect_uri: encodeURIComponent(this.redirectUri)\n }\n return strVarReplace(this.reloadUrl, data) + '&' + obj2Param(extra || {})\n }\n const getQrCodeUrl = () => {\n const data = {\n goto: encodeURIComponent(getReloadUrl()),\n style: encodeURIComponent(this.style)\n }\n return strVarReplace(this.qrCodeUrl, data)\n }\n const onScanSuccess = (event: any) => {\n const { origin, data } = event\n if (origin === 'https://login.dingtalk.com') {\n window.location.href = getReloadUrl({ loginTmpCode: data })\n }\n }\n\n this.iframe.src = getQrCodeUrl()\n createIFrame({ elId: this.elId, attrs: this.iframe })\n if (typeof window.addEventListener !== 'undefined') {\n window.addEventListener(\n 'message',\n event => onScanSuccess(event),\n false\n )\n // @ts-ignore\n } else if (typeof window.attachEvent !== 'undefined') {\n // @ts-ignore\n window.attachEvent('onmessage', event => this.onScanSuccess(event))\n }\n }\n}\n","import { BaseSso } from './base'\nimport type { SsoType, Sso } from './base'\nimport { Github } from './github'\nimport { DingTalk } from './dingtalk'\nimport { pinia, useSettingsStore } from '../../store'\nimport { newSso } from '../../types'\nimport { merge } from 'lodash'\n\nexport { BaseSso, SsoType, Sso, Github, DingTalk }\n\nconst defaultSso: Record<string, newSso> = {}\n\nexport function allSso(): Record<string, newSso> {\n return merge(useSettingsStore(pinia).sso || {}, defaultSso)\n}\n\nexport default function(): Sso | undefined {\n const sso = allSso()\n const key = useSettingsStore(pinia).activeSsoKey || ''\n console.log(sso, key)\n const active = sso[key]\n if (active !== undefined) {\n return active()\n }\n return undefined\n}\n","import { Router } from 'vue-router'\nimport { pinia, useUserStore } from '../../store'\nimport { getToken, getWhiteRoutes } from './func'\nimport sso from '../../utils/sso'\nimport { isObject } from 'lodash'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, form, next) => {\n if (getWhiteRoutes().indexOf(to.path) !== -1) {\n next()\n return\n }\n\n const token = getToken()\n if (token) {\n if (to.query?.redirect) {\n next(to.query?.redirect as string)\n } else {\n next()\n }\n return\n }\n const redirect = to.query.redirect || to.path\n\n const s = sso()\n if (!s) {\n next(`/login?redirect=${redirect}`)\n return\n }\n\n const flag = s.flag()\n const user = useUserStore(pinia)\n if (flag && await user.login(isObject(flag) ? flag : { ticket: flag })) {\n next()\n return\n }\n s.jumpToLoginPage(next, `/login?redirect=${redirect}`)\n })\n}\n","<template>\n <div class=\"loading preloader\">\n <div class=\"preloader-inner\" />\n </div>\n</template>\n<style>\n.loading {\n width: 100%;\n min-height: calc(100vh - 50px);\n text-align: center;\n line-height: calc(100vh - 50px);\n}\n</style>\n","<template>\n <div>\n <el-alert\n v-if=\"hasNotice\"\n v-bind=\"noticeProps\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VNotice',\n props: {\n dataApi: {\n type: String,\n default: ''\n },\n notice: {\n type: Object,\n default: () => {}\n }\n },\n data() {\n return {\n noticeProps: {},\n hasNotice: false\n }\n },\n mounted() {\n console.log('dataApi', !!this.$props.dataApi)\n if (this.$props.dataApi) {\n this.$http.get(this.$props.dataApi).then(({ data }) => {\n this.noticeProps = data\n this.hasNotice = !!data\n })\n return\n } else {\n this.hasNotice = Object.keys(this.$props.notice).length > 0\n this.noticeProps = this.$props.notice\n }\n }\n}\n</script>\n","<template>\n <el-alert\n v-if=\"owners.length > 0\"\n :title=\"`该页面功能对应开发: [ ${owners.join(', ')} ] 有问题可直接企微反馈`\"\n type=\"info\"\n style=\"margin: 0 0 20px 0\"\n :closable=\"false\"\n />\n <template v-if=\"env === 'prod' && serviceOffLine\">\n <div\n class=\"offline-notice\"\n v-html=\"serviceOffLine === true ? setting.serviceOffLineNotice : serviceOffLine\"\n />\n </template>\n <template v-else>\n <VNotice\n v-if=\"haveNotice\"\n :notice=\"notice\"\n style=\"margin: 0 0 20px 0\"\n :data-api=\"noticeApi\"\n />\n <VLoading v-if=\"loading\" />\n <template v-else>\n <slot v-bind=\"schema\" />\n </template>\n </template>\n\n</template>\n<script lang=\"ts\" setup>\nimport VLoading from './VLoading.vue'\nimport { isObject, isString, isArray } from '@okiss/utils'\nimport VNotice from './notice/VNotice.vue'\nimport { useAppStore, useSettingsStore, useUserStore } from '../store'\nimport { useRoute } from 'vue-router'\n\nconst props = withDefaults(defineProps<{ schemaHandler?: (val: any, project: string) => any, schemaApi?: string }>(), {\n schemaHandler: (val: any) => val,\n schemaApi: ''\n})\nconst appStore = useAppStore(); const settingsStore = useSettingsStore(); const userStore = useUserStore()\nconst route = useRoute()\nconst loading = ref(true)\nconst haveNotice = ref(false)\nconst notice = ref<any>({})\nconst noticeApi = ref('')\nconst schema = ref<any>({})\nconst owners = ref<string[]>([])\nconst serviceOffLine = ref<boolean | string>(false)\n\nconst env = computed(() => userStore.env)\nconst setting = computed(() => settingsStore)\n\nonBeforeMount(() => {\n const token = route.path.split('/').filter(item => item)\n const project = token.length > 1 ? token.slice(0, token.length - 1).join('/') : token[0]\n const api = '/schema' + (route.meta as any).path\n const conf = { params: route.params }\n // @ts-ignore\n const http = window?.App?.config?.globalProperties?.$http\n http.get(props.schemaApi || api, conf).then(({ data }) => {\n loading.value = false\n if (isObject(data)) {\n if (data.notice !== undefined) {\n haveNotice.value = true\n if (isString(data.notice)) {\n notice.value = { title: data.notice }\n } else if (isObject(data.notice)) {\n notice.value = data.notice\n // @ts-ignore\n noticeApi.value = data.notice.noticeApi\n }\n delete data['notice']\n }\n owners.value = data.ownerNames || []\n serviceOffLine.value = data.serviceOffLine || false\n }\n schema.value = props.schemaHandler(data, project)\n appStore.SET_PAGE_JSON_SCHEMA({ page: route.path, json: schema.value })\n })\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.offline-notice {\n text-align: center;\n color: red;\n font-size: 250%;\n height: 300px;\n line-height: 300px;\n}\n</style>\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <template #default=\"slotProps\">\n <VTable v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup name=\"ScaffoldName\">\nimport { VTable } from '@okiss/vbtf'\nimport PageLoad from '../components/PageLoad.vue'\nimport { merge } from 'lodash'\n\nconst schemaHandler = (schema, project) => {\n if (schema.orderBy) {\n const defaultSort = {\n prop: schema.orderBy.field,\n order: schema.orderBy.mod === 'desc' ? 'descending' : 'ascending'\n }\n schema.tableProps = merge(schema.tableProps, { defaultSort })\n }\n const allowedProps = Object.keys(VTable.props)\n Object.keys(schema).forEach(key => {\n if (allowedProps.indexOf(key) === -1) {\n delete schema[key]\n }\n })\n if (schema.listApi === undefined) {\n schema.listApi = `/${project}/list`\n }\n\n return schema\n}\n</script>\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <template #default=\"slotProps\">\n <VForm v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup name=\"ScaffoldForm\">\nimport { VForm } from '@okiss/vbtf'\nimport PageLoad from '../components/PageLoad.vue'\nimport { strVarReplace } from '@okiss/utils'\nimport { merge } from 'lodash'\nimport { useRoute, useRouter } from 'vue-router'\nimport { onMounted, onUnmounted } from 'vue'\nimport http from '../utils/request'\nimport { ElMessageBox } from 'element-plus'\nimport { useSettingsStore } from '../store'\n\nconst route = useRoute()\nconst router = useRouter()\n\nconst schemaHandler = (schema, project) => {\n const allowedProps = Object.keys(VForm.props)\n Object.keys(schema).forEach(key => {\n if (allowedProps.indexOf(key) === -1) {\n delete schema[key]\n return\n }\n\n if (/.*Api$/.test(key)) {\n schema[key] = strVarReplace(schema[key], route.params)\n }\n })\n\n if (schema.saveApi === undefined) {\n if (route.params.id !== undefined) {\n schema.saveApi = `/${project}/update/${route.params.id}`\n if (!schema.getApi) {\n schema.getApi = `/${project}/get/${route.params.id}`\n }\n } else {\n delete schema['getApi']\n schema.saveApi = `/${project}/create`\n }\n }\n\n schema = merge({\n saveApi: project + '/save',\n afterSubmit: 'goback',\n afterReset: 'goback',\n mod: route.params.id ? 'edit' : 'create'\n }, schema)\n\n return schema\n}\n\nconst mutexId = ref(0)\nconst mutex = () => {\n http.request({\n url: '/form_mutex',\n method: 'get',\n params: {\n path: route.fullPath\n }\n }).then(res => {\n console.log(res)\n if (res.data) {\n clearInterval(mutexId.value)\n ElMessageBox.alert(`${res.data}`, '操作提醒', {\n showClose: false,\n showCancelButton: true,\n confirmButtonText: '返回',\n cancelButtonText: '刷新',\n callback: (action) => {\n if (action === 'cancel') {\n location.reload()\n } else {\n goBack()\n }\n }\n })\n }\n })\n}\n\nonMounted(() => {\n const settings = useSettingsStore()\n if (route.params.id !== undefined && settings.formMutex) {\n mutex()\n mutexId.value = setInterval(mutex, 2000)\n }\n})\nonUnmounted(() => {\n clearInterval(mutexId.value)\n})\n\nfunction goBack() {\n if (route.query?.goback) {\n router.push(route.query?.goback)\n } else {\n history.state.back && history.back()\n }\n}\n</script>\n","<template>\n <el-row\n class=\"tree-box\"\n :gutter=\"20\"\n >\n <el-col\n :span=\"8\"\n class=\"tree-tree\"\n >\n <el-card shadow=\"never\">\n <template #header>\n <div class=\"card-header\">\n <span>列表</span>\n <el-button\n type=\"text\"\n @click=\"() => appendNew()\"\n >添加</el-button>\n </div>\n </template>\n <el-tree\n v-if=\"(treeData || []).length > 0\"\n style=\"height: 100vh\"\n :data=\"treeData\"\n node-key=\"id\"\n v-bind=\"localTreeProps\"\n draggable\n :allow-drag=\"allowDrap\"\n :allow-drop=\"allowDrop\"\n @node-drag-end=\"handleDragEnd\"\n >\n <template #default=\"{ node, data }\">\n <span class=\"tree-action\">\n <span v-if=\"data[localTreeProps.props.label]\">{{ data[localTreeProps.props.label] }}</span>\n <span\n v-else\n style=\"color: #E6A23C\"\n >请在右侧表单中修改 --> </span>\n <span>\n <el-button\n v-if=\"data[localTreeProps.props.label]\"\n class=\"button\"\n type=\"text\"\n @click=\"() => onclick(data)\"\n >编辑</el-button>\n <el-button\n v-if=\"canAppend(data, node)\"\n class=\"button\"\n type=\"text\"\n @click=\"() => append(data, node)\"\n >添加</el-button>\n <el-button\n v-if=\"data.children === undefined || data.children.length === 0\"\n class=\"button\"\n type=\"text\"\n @click=\"() => remove(data)\"\n >删除</el-button>\n </span>\n </span>\n </template>\n </el-tree>\n </el-card>\n </el-col>\n <el-col\n :span=\"16\"\n class=\"tree-form\"\n >\n <el-card\n v-if=\"type\"\n shadow=\"never\"\n >\n <template #header>\n <div class=\"card-header\">\n <span>{{ formType }}</span>\n </div>\n </template>\n <v-form\n :key=\"formkey\"\n v-model=\"formData\"\n v-bind=\"formProps\"\n @submit=\"submit\"\n />\n </el-card>\n </el-col>\n </el-row>\n</template>\n<script lang=\"js\">\nimport { VForm } from '@okiss/vbtf'\nimport { strVarReplace, effectDataTrans } from '@okiss/utils'\nimport { merge } from 'lodash'\n\nexport default defineComponent({\n name: 'VTree',\n components: {\n VForm\n },\n props: {\n treeApi: {\n type: String,\n default: '',\n require: true\n },\n getApi: {\n type: String,\n default: '',\n require: true\n },\n saveApi: {\n type: String,\n default: '',\n require: true\n },\n createApi: {\n type: String,\n default: '',\n require: true\n },\n deleteApi: {\n type: String,\n default: '',\n require: true\n },\n formItems: {\n type: Array,\n default: () => {\n return []\n }\n },\n treeProps: {\n type: Object,\n default: () => {}\n },\n maxDepth: {\n type: Number,\n default: 3\n },\n props: {\n type: Object,\n default: () => {}\n }\n },\n data() {\n return {\n type: 0, // 1 新增, 2 编辑\n treeData: [],\n formData: {},\n localTreeProps: merge({\n 'default-expand-all': true,\n 'expand-on-click-node': false,\n props: {\n children: 'children',\n label: 'label'\n }\n }, this.$props.treeProps),\n formkey: 0,\n tablekey: 0,\n menuOptions: {}\n }\n },\n computed: {\n formType() {\n const m = ['', '新建', '编辑']\n return m[this.type]\n },\n formProps() {\n let saveApi = strVarReplace(this.$props.saveApi, this.formData)\n if (this.type === 1) {\n saveApi = this.$props.createApi\n }\n return {\n saveApi: saveApi,\n getApi: this.$props.getApi,\n formItems: this.$props.formItems\n }\n }\n },\n created() {\n this.loadTree()\n },\n methods: {\n loadTree() {\n this.$http.request({\n method: 'GET',\n url: this.$props.treeApi\n }).then(({ data }) => {\n this.treeData = data\n })\n },\n onclick(data) {\n this.type = 2\n this.formData = data\n this.formkey++\n },\n append(data, node) {\n this.type = 1\n\n const newChild = { pid: data.id, [this.$props.props?.levelKey ?? 'level']: node.level + 1, ...effectDataTrans(this.$props.props?.effectData, data) }\n console.log(111, newChild)\n if (!data.children) {\n data.children = []\n }\n this.formData = newChild\n this.formkey++\n data.children.push(newChild)\n this.treeData = [...this.treeData]\n },\n canAppend(data, node) {\n if (!data[this.localTreeProps.props.label]) {\n return false\n }\n return node.level < this.$props.maxDepth\n },\n appendNew() {\n this.type = 1\n const newChild = { pid: 0, [this.$props.props?.levelKey ?? 'level']: 1 }\n this.formData = newChild\n this.formkey++\n this.tablekey++\n this.treeData = [...this.treeData, newChild]\n },\n remove(data) {\n this.$http.request({\n method: 'DELETE',\n url: strVarReplace(this.$props.deleteApi, data)\n }).then(({ code }) => {\n if (code !== 0) {\n this.$message.error('操作失败')\n } else {\n this.loadTree()\n }\n })\n },\n submit() {\n setTimeout(() => {\n this.loadTree()\n this.formData = {}\n this.tablekey++\n this.type = 0\n }, 200)\n },\n allowDrap(draggingNode) {\n return true\n },\n allowDrop(draggingNode, dropNode, type) {\n console.log(type)\n return type === 'inner'\n },\n handleDragEnd(draggingNode, dropNode, dropType, ev) {\n const form = draggingNode.data\n form.pid = dropNode.data.id\n this.$http.request({\n method: 'POST',\n url: strVarReplace(this.$props.saveApi, form),\n data: form\n }).then(({ code }) => {\n if (code !== 0) {\n this.$message.error('操作失败')\n }\n })\n }\n }\n})\n</script>\n<style lang=\"scss\">\n.card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.tree-box {\n height: 100%;\n}\n.tree-tree .tree-form {\n height: 100%;\n}\n.tree-action {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 14px;\n padding-right: 8px;\n}\n\n</style>\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <template #default=\"slotProps\">\n <VTree v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup>\nimport VTree from '../components/VTree.vue'\nimport PageLoad from '../components/PageLoad.vue'\nconst schemaHandler = (schema, project) => {\n const allowedProps = Object.keys(VTree.props)\n Object.keys(schema).forEach(key => {\n if (allowedProps.indexOf(key) === -1) {\n delete schema[key]\n }\n })\n\n return schema\n}\n</script>\n","<template>\n <router-view />\n</template>\n<script setup>\nimport { onBeforeRouteUpdate } from 'vue-router'\nconst key = ref(0)\nonBeforeRouteUpdate(() => {\n key.value++\n})\n</script>\n","// @ts-nocheck\nimport { cloneDeep, merge } from 'lodash'\nimport { isObject, isString } from '@okiss/utils'\n\nconst pie = {\n title: {\n text: 'Referer of a Website',\n left: 'center'\n },\n tooltip: {\n trigger: 'item',\n formatter: '{b} : {c} ({d}%)'\n },\n legend: {\n orient: 'vertical',\n left: 'bottom'\n },\n series: [\n {\n name: 'Access From',\n type: 'pie',\n radius: '50%',\n data: [\n { value: 1048, name: 'Search Engine' },\n { value: 735, name: 'Direct' },\n { value: 580, name: 'Email' },\n { value: 484, name: 'Union Ads' },\n { value: 300, name: 'Video Ads' }\n ],\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)'\n }\n }\n }\n ]\n}\n\nconst lienOption = {\n title: {\n text: ''\n },\n tooltip: {\n trigger: 'axis'\n },\n grid: {\n left: '2%',\n right: '2%',\n bottom: '5%',\n containLabel: true\n },\n toolbox: {\n feature: {\n saveAsImage: {}\n }\n },\n legend: {\n data: []\n },\n xAxis: {\n type: 'category'\n },\n yAxis: {\n type: 'value'\n },\n series: []\n}\n\nexport function makeOption(id: string, config: Object|string, data: Array<Record<string, any>>) {\n if (data.length === 0) {\n return {}\n }\n let opt = merge({}, lienOption)\n opt.title.text = id\n if (isString(config)) {\n const xAxisData = []\n const keys = Object.keys(data[0])\n let xkey = keys[0]\n let ykeys = keys.filter((v, i) => i > 0)\n let type = config\n if (config.indexOf(':') > -1) {\n const token = config.split(':')\n const _keys = token[1].split(',')\n type = token[0]\n xkey = _keys[0]\n ykeys = _keys.filter((v, i) => i > 0)\n }\n ykeys.forEach(key => {\n const seriesData = []\n data.forEach(each => {\n seriesData.push(each[key])\n })\n opt.series.push({\n name: key,\n type: type,\n smooth: true,\n data: seriesData\n })\n opt.legend.data.push(key)\n })\n\n data.forEach(each => {\n xAxisData.push(each[xkey])\n })\n\n opt.xAxis.data = xAxisData\n }\n\n if (isObject(config)) {\n opt = merge(opt, config)\n }\n // const _pie = cloneDeep(pie)\n // _pie.title.text = id\n // _pie.series[0].data = data\n //\n // return _pie\n console.log(111, opt)\n return opt\n}\n","<template>\n <span\n v-for=\"(each, i) in dataList\"\n :key=\"i\"\n >\n <div class=\"number-panel-title\">\n <div\n v-for=\"(item, index) in Object.keys(each)\"\n :key=\"index\"\n class=\"title-inner\"\n >\n <p class=\"number\">{{ each[item] }}</p>\n <p class=\"name\">{{ item }}</p>\n </div>\n </div>\n </span>\n</template>\n\n<script>\nexport default defineComponent({\n name: 'NumberPanel',\n props: {\n dataList: {\n type: Array,\n default: _ => []\n }\n },\n data() {\n return {\n }\n }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.number-panel-title {\n padding: 20px;\n text-align: center;\n .title-inner {\n display: inline-block;\n width: 20%;\n position: relative;\n text-align: center;\n border-right: 1px solid #e8e8e8;\n &:last-child {\n border: none;\n }\n }\n .el-divider {\n position: absolute;\n right: 0;\n top: 10px;\n }\n .name {\n font-size: 12px;\n color: #666;\n }\n .number {\n font-size: 20px;\n line-height: 30px;\n }\n}\n</style>\n","<template>\n <ElCard\n v-resize=\"true\"\n shadow=\"never\"\n class=\"part\"\n >\n <component\n :is=\"comptype()\"\n v-bind=\"compprops(option)\"\n />\n </ElCard>\n</template>\n<script lang=\"ts\">\nimport { makeOption } from './option'\nimport { VTable, VChart, JsonView } from '@okiss/vbtf'\nimport NumberPanel from './NumberPanel.vue'\n// @ts-ignore\nimport Markdown from 'vue3-markdown-it'\nimport { isArray } from '@okiss/utils'\n\nexport default {\n components: {\n Chart: VChart,\n Md: Markdown,\n Json: JsonView,\n Table: VTable,\n Number: NumberPanel,\n Html: ''\n },\n props: {\n option: {\n type: Object,\n default: () => {}\n }\n },\n setup(props: Record<string, any>) {\n const comptype = () => {\n if (props.option.chart === 'num') {\n return 'number'\n }\n return props.option.type\n }\n const compprops = (item: Record<string, any>) => {\n const type = comptype()\n if (type === 'number') {\n return {\n dataList: item.data\n }\n }\n if (type === 'chart') {\n return {\n options: makeOption(item.id, item.chart, item.data)\n }\n }\n if (type === 'md') {\n return {\n source: item.data\n }\n }\n\n if (type === 'table') {\n if (!isArray(item.data)) {\n return { showPagination: false }\n }\n const headers: { field: string; label: string }[] = []\n item.data[0] && Object.keys(item.data[0]).forEach((key, index) => {\n headers.push({ field: key, label: key })\n })\n return {\n headers: headers,\n list: item.data,\n showPagination: false\n }\n }\n return {}\n }\n\n return {\n compprops,\n comptype\n }\n }\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n.part {\n //height: 350px;\n width: auto;\n margin-bottom: 15px;\n :last-child {\n margin-bottom: 0;\n }\n}\n::v-deep(.el-card__header) {\n padding: 5px;\n}\n::v-deep(.el-card__body) {\n padding: 5px;\n}\n</style>\n","<template>\n <el-row>\n <el-col\n v-if=\"_filter.length > 0\"\n :span=\"24\"\n >\n <ElCard\n shadow=\"never\"\n class=\"part-filter\"\n >\n <VForm\n v-model=\"formData\"\n :form-items=\"_filter\"\n :options=\"formOptions\"\n @submit=\"onsubmit\"\n />\n </ElCard>\n </el-col>\n <el-col :span=\"24\">\n <el-row :gutter=\"20\">\n <el-col\n v-for=\"(item,index) in _dataPart\"\n :key=\"index\"\n :span=\"item.col || 24\"\n >\n <Part\n v-if=\"!item.errMsg\"\n :key=\"key\"\n :option=\"item\"\n />\n <el-alert\n v-else\n :title=\"item.id+' 片段执行出错'\"\n type=\"error\"\n >{{ item.errMsg }}</el-alert>\n </el-col>\n </el-row>\n </el-col>\n </el-row>\n</template>\n<script lang=\"ts\" setup>\nimport { VForm } from '@okiss/vbtf'\nimport Part from './part.vue'\n// import store from '../../store'\nimport http from '../../utils/request'\nimport { useRoute } from 'vue-router'\n\nconst route = useRoute()\n\nonMounted(() => {\n // store.dispatch('app/toggleSideBar')\n})\n\nconst props = defineProps({\n filter: {\n type: Array,\n default: () => []\n },\n dataPart: {\n type: Array,\n default: () => []\n }\n})\n\nconst formData = ref<Record<string, any>>({})\nonBeforeMount(() => {\n props.filter?.forEach((item: any) => {\n if (item.default !== null) {\n formData.value[item.field] = item.default\n }\n })\n})\nconst formOptions = {\n inline: true,\n labelPosition: 'right',\n labelWidth: 'auto',\n submitButton: {\n text: '查询'\n },\n cancelButton: {\n text: '重置'\n }\n}\nconst key = ref(1)\nconst _filter = ref(props.filter)\nconst _dataPart = ref(props.dataPart)\n\nconst schemaapi = computed(() => {\n let id = route.params.id\n if (!id) {\n const token = route.path.split('/')\n id = token[token.length - 1]\n }\n return '/focusbi_report/view/' + id\n})\n\nconst onsubmit = (data: any) => {\n http.get(schemaapi.value, { params: data }).then(({ data }) => {\n _filter.value = data.filter\n _dataPart.value = data.dataPart\n key.value++\n })\n}\n</script>\n\n<style lang=\"scss\">\n.part-filter {\n margin-bottom: 15px;\n}\n\n</style>\n","<template>\n <PageLoad :schema-api=\"schemaapi\">\n <template #default=\"slotProps\">\n <Report v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup>\nimport PageLoad from '../components/PageLoad.vue'\nimport Report from '../components/report/index.vue'\nimport { useRoute } from 'vue-router'\nconst route = useRoute()\n\nconst schemaapi = computed(() => {\n let id = route.params.id\n if (!id) {\n const token = route.path.split('/')\n id = token[token.length - 1]\n }\n return '/focusbi_report/view/' + id\n})\n</script>\n","import { h, getCurrentInstance, Component } from 'vue'\nimport { ElRow, ElCol, ElCard } from 'element-plus'\nimport { merge } from 'lodash'\nimport { VForm, VTable } from '@okiss/vbtf'\nimport { isObject, isArray } from '@okiss/utils'\n\nimport './index.scss'\n\ntype CompProps = Record<string, any>\n\nconst test = (props: CompProps) => <div>{props.test}</div>\n\nconst components: Record<string, any> = {\n 'card': ElCard,\n 'form': VForm,\n 'table': VTable,\n 'test': test,\n 'row': ElRow,\n 'col': ElCol\n}\n\nexport function regComponents(comps: Record<string, any>) {\n Object.keys(comps).forEach(k => {\n components[k] = comps[k]\n })\n}\n\nconst defaultSchema: Record<string, Node> = {\n 'card': {\n type: 'card',\n props: {\n class: 'render-card',\n shadow: 'never'\n }\n },\n 'form': {\n type: 'form',\n props: {\n afterReset: ''\n }\n },\n 'table': {\n type: 'table',\n props: {\n syncUrl: false\n }\n }\n}\n\nexport interface Node {\n type: string,\n props?: Record<string, string | number | boolean | any>\n children?: Node[] | Node\n span?: number\n}\n\nexport interface Props {\n schema: Node[]\n}\n\nfunction pathNodeParse(node: Node): Node[] {\n const _node = Object.assign({}, node)\n const part = _node.type.split('.').reverse()\n const span = _node.span || 24\n delete _node.span\n let tmp = { ..._node, type: part[0] }\n for (let i = 1; i < part.length; i++) {\n const item = part[i]\n tmp = { type: item, children: [tmp] }\n }\n tmp.span = span\n\n return nodesParse([tmp])\n}\n\nfunction nodesParse(_nodes: Node[]): Node[] {\n const root: Node = { type: 'row', props: { gutter: 20, class: 'render-row' }, children: [] }\n _nodes.forEach(_node => {\n let node = Object.assign({}, _node)\n if (isObject(node.props?.style)) {\n let style = ''\n Object.keys(node.props?.style).forEach(k => {\n style += k + ':' + node.props?.style[k] + ';'\n })\n node.props!.style = style\n }\n const colProps = { span: node.span ?? 24, class: 'render-col' }\n delete node.span\n if (node.type.indexOf('.') > 0) {\n (root.children! as Node[]).push({\n type: 'col',\n props: colProps,\n children: pathNodeParse(node)\n })\n return\n }\n node = merge({ props: {}}, defaultSchema[node.type] || {}, node)\n const children = transChildren(node.children)\n if (children.length) {\n node.children = nodesParse(children)\n }\n (root.children! as Node[]).push({\n type: 'col',\n props: colProps,\n children: [\n node\n ]\n })\n })\n\n return [root]\n}\n\nfunction transChildren(children : Node[] | Node | undefined) : Node[] {\n const _children : Node[] = isArray(children) ? children! as Node[] : (isObject(children) ? [children! as Node] : [])\n return _children\n}\n\nlet globalComps : Record<string, Component> = {}\n\nconst createVNode = (node: Node) => {\n const comp = components[node.type] || globalComps[node.type] || node.type\n return h(comp, node.props, { default: () => transChildren(node.children).map(item => createVNode(item)) })\n}\n\nexport const render = (props: Props) => {\n if (Object.keys(globalComps).length === 0) {\n globalComps = getCurrentInstance()!.appContext.components\n }\n const nodes: Node[] = nodesParse(Object.values(props.schema))\n return nodes.map(item => createVNode(item))\n}\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <render :schema=\"schema\" />\n </PageLoad>\n</template>\n<script setup name=\"Custom\">\nimport PageLoad from '../components/PageLoad.vue'\nimport { render } from '../render'\nimport { toRaw } from 'vue'\nconst schema = ref([])\nconst schemaHandler = (_schema, project) => {\n schema.value = toRaw(_schema)\n return _schema\n}\n</script>\n","import type { RouteRecordRaw } from 'vue-router'\nimport { MenuType, OmsModule, PageInfo, PageType, RemoteModule } from '../types'\nimport { Component } from 'vue'\nimport { Container, Form, Report, Table, Tree, Custom } from '../scaffold'\n\nlet bu: Record<string, any> = {}\nexport function regViews(_bu: Record<string, any>) {\n bu = _bu\n}\n\nconst getComponent = (item: PageInfo): Component => {\n const loadCustom = (path: string): any => {\n const _path = './views/' + path + '.vue'\n if (bu && bu[_path] && bu[_path].default) {\n return bu[_path].default\n }\n console.error(`自定义组件不存在 ${item.name} ${item.view}`)\n return Container\n }\n if (item.path === '#') {\n return Container\n }\n switch (item.page_type) {\n case PageType.list:\n return Table\n case PageType.form:\n return Form\n case PageType.custom:\n case PageType.localComp:\n return loadCustom(item.view || '')\n case PageType.tree:\n return Tree\n case PageType.report:\n return Report\n case PageType.customSchema:\n return Custom\n }\n return Container\n}\n\nfunction getPath(item: PageInfo) {\n let path = item.path\n if (item.type === MenuType.menu && item.page_type === PageType.entity) {\n path = '#'\n }\n // :id 默认转换为数字型匹配模式\n if (path.indexOf(':id') > -1 && path.indexOf(':id') + 3 === path.length) {\n path = path.replace(':id', ':id(\\\\d+)')\n }\n return path === '#'\n ? '/' + item.id + '_DIR_' + item.name\n : path[0] !== '/'\n ? '/' + path\n : path\n}\n\nfunction getName(item: PageInfo): string {\n return (item.path + item.name).split('/').filter(v => v).join('_')\n}\n\nconst transRoute = (item: PageInfo): RouteRecordRaw => {\n const isShow = item.type !== MenuType.page\n const route: RouteRecordRaw = {\n path: getPath(item),\n name: item.id + '_' + getName(item) + '_' + item.path.replaceAll('/', '_'),\n component: getComponent(item),\n meta: {\n id: item.id,\n pageId: item.id,\n title: item.name,\n icon: item.icon,\n hidden: !isShow,\n path: item.path,\n menuType: item.type,\n keepAlive: false,\n role: item.role\n },\n children: item.children ? item.children.map(each => transRoute(each)) : []\n }\n if (item.page_type === PageType.entity) {\n const createList = item.path + '/list'\n const createForm = item.path + '/form'\n const createEdit = item.path + '/:id'\n const children : Array<RouteRecordRaw> = [{\n path: createList,\n name: item.name + '列表' + item.id,\n component: Table,\n meta: {\n id: item.id + 99999,\n title: '列表',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }, {\n path: createForm,\n name: item.name + '新建' + item.id,\n component: Form,\n meta: {\n id: item.id + 99999 + 1,\n title: '新建',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }, {\n path: createEdit,\n name: item.name + '编辑' + item.id,\n component: Form,\n meta: {\n id: item.id + 99999 + 2,\n title: '编辑',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }]\n route.children = [...children, ...route.children as RouteRecordRaw[]]\n }\n if (route.children && route.children.length > 0) {\n let allChildHidden = true\n route.children.forEach(each => {\n if (each.meta && !each.meta.hidden) {\n allChildHidden = false\n }\n })\n if (route.meta) {\n route.meta.menuType = isShow ? MenuType.dir : MenuType.hidden\n }\n if (allChildHidden) {\n if (route.meta) {\n route.meta.menuType = MenuType.menu\n }\n let redirect = '/'\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n redirect = route.children[i].path\n break\n }\n }\n route.redirect = redirect\n route.path = '/' + item.id + '_DIR' + route.redirect.replaceAll('/', '_').toUpperCase()\n }\n }\n\n return route\n}\n\nexport const transRemoteModules = (data: RemoteModule[]): OmsModule[] => {\n const vueRouteModule: OmsModule[] = []\n data.forEach(item => {\n const m: OmsModule = {\n id: item.id,\n label: item.label,\n routes: []\n }\n item.routes.forEach(each => {\n m.routes.push(transRoute(each))\n })\n vueRouteModule.push(m)\n })\n\n return vueRouteModule\n}\n","import type { RouteRecordRaw } from 'vue-router'\n\nconst SUPER_ROLE = 'root'\n\nconst splitRoles = (roleValue: string | undefined): string[] => {\n if (!roleValue) {\n return []\n }\n return roleValue\n .split(',')\n .map(item => item.trim())\n .filter(item => !!item)\n}\n\nconst getRouteRoles = (route: RouteRecordRaw): string[] => {\n const directRole = typeof (route as any).role === 'string' ? (route as any).role : ''\n const metaRole = route.meta && typeof (route.meta as any).role === 'string' ? (route.meta as any).role : ''\n const roles = [...splitRoles(directRole), ...splitRoles(metaRole)]\n if (!roles.length && route.children && route.children.length) {\n return []\n }\n return Array.from(new Set(roles))\n}\n\nconst cloneRoute = (route: RouteRecordRaw): RouteRecordRaw => {\n const cloned: RouteRecordRaw = { ...route }\n if (route.meta) {\n cloned.meta = { ...route.meta }\n }\n if (route.children && route.children.length) {\n cloned.children = route.children.map(item => cloneRoute(item))\n }\n return cloned\n}\n\nconst hasPermission = (routeRoles: string[], userRoles: string[]): boolean => {\n if (!routeRoles.length) {\n return true\n }\n if (!userRoles.length) {\n return false\n }\n return routeRoles.some(role => userRoles.includes(role))\n}\n\nexport const filterRoutesByRole = (routes: RouteRecordRaw[] = [], userRoles: string[]): RouteRecordRaw[] => {\n console.log(\"routes\", routes, userRoles )\n if (userRoles.includes(SUPER_ROLE)) {\n return routes.map(route => cloneRoute(route))\n }\n return routes.reduce<RouteRecordRaw[]>((acc, route) => {\n console.log(acc, route)\n const routeRoles = getRouteRoles(route)\n if (!hasPermission(routeRoles, userRoles)) {\n return acc\n }\n const cloned: RouteRecordRaw = { ...route }\n if (route.meta) {\n cloned.meta = { ...route.meta }\n }\n if (route.children && route.children.length) {\n const children = filterRoutesByRole(route.children, userRoles)\n if (!children.length) {\n // 如果子路由全部被过滤,父路由不再保留,避免注册空壳路由阻挡后续权限变更时的注册\n return acc\n }\n cloned.children = children\n }\n acc.push(cloned)\n return acc\n }, [])\n}\n","const decodeWithAtob = (input: string): string => {\n const binary = (globalThis.atob as (data: string) => string)(input)\n let output = ''\n for (let i = 0; i < binary.length; i++) {\n const code = binary.charCodeAt(i).toString(16).padStart(2, '0')\n output += '%' + code\n }\n try {\n return decodeURIComponent(output)\n } catch (error) {\n return decodeURIComponent(encodeURIComponent(binary))\n }\n}\n\nconst base64UrlDecode = (input: string): string => {\n const base64 = input.replace(/-/g, '+').replace(/_/g, '/')\n const padding = 4 - (base64.length % 4)\n const padded = base64 + (padding < 4 ? '='.repeat(padding) : '')\n if (typeof globalThis.atob === 'function') {\n return decodeWithAtob(padded)\n }\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(padded, 'base64').toString('utf-8')\n }\n return ''\n}\n\nexport const decodeJwtPayload = (token: string): Record<string, any> | null => {\n if (!token) {\n return null\n }\n const segments = token.split('.')\n if (segments.length < 2) {\n return null\n }\n try {\n const decoded = base64UrlDecode(segments[1])\n return decoded ? JSON.parse(decoded) : null\n } catch (error) {\n return null\n }\n}\n\nexport const getRolesFromJwt = (token: string): string[] => {\n const payload = decodeJwtPayload(token)\n const role = payload && typeof payload.role === 'string' ? payload.role : ''\n return role\n .split(',')\n .map(item => item.trim())\n .filter(item => !!item)\n}\n","import { Router } from 'vue-router'\nimport { pinia, useUserStore } from '../../store'\nimport { OmsModule, RemoteModule } from '../../types'\nimport { transRemoteModules } from '../remote'\nimport Layout from '../../scaffold/layout/index.vue'\nimport { getWhiteRoutes, isLodeRemoteRoutes } from './func'\nimport { filterRoutesByRole } from '../permission'\nimport { getRolesFromJwt, getToken } from '../../utils'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, form, next) => {\n if (getWhiteRoutes().indexOf(to.path) !== -1) {\n next()\n return\n }\n if (isLodeRemoteRoutes()) {\n next()\n return\n }\n const user = useUserStore(pinia)\n await user.info()\n const remoteRoute: RemoteModule[] = await user.loadRemoteRoutes()\n const routeModules: OmsModule[] = transRemoteModules(remoteRoute)\n const userRoles = getRolesFromJwt(getToken())\n const filteredModules: OmsModule[] = routeModules.map(item => {\n const permittedRoutes = filterRoutesByRole(item.routes, userRoles)\n return {\n ...item,\n routes: permittedRoutes\n }\n }).filter(item => item.routes.length > 0)\n\n filteredModules.forEach(item => {\n item.routes.forEach(each => {\n router.addRoute({\n path: '/',\n component: Layout,\n children: [each]\n })\n })\n })\n router.addRoute({ name: '404', path: '/:pathMatch(.*)*', redirect: '/404', hidden: true })\n user.updateRemoteRouter(filteredModules)\n await router.replace(to)\n next()\n })\n}\n","import { Router } from 'vue-router'\nimport { pinia, useAppStore, useSettingsStore } from '../../store'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, from, next) => {\n const settings = useSettingsStore(pinia)\n const tokens: string[] = [settings.title || '']\n const len = to.matched.length\n for (let i = len; i > len - 3; i--) {\n const item = to.matched[i - 1]\n if (item?.meta?.title) {\n tokens.push(item.meta.title + '')\n }\n }\n if (tokens.length > 1) {\n document.title = tokens.reverse().join('-')\n }\n next()\n })\n router.afterEach(async(to, from, failure) => {\n const app = useAppStore(pinia)\n if (Object.keys(to.meta).length > 0) {\n await app.setCurrentMeta(to.meta)\n }\n })\n}\n","import { Router } from 'vue-router'\nimport nprogress from './nprogress'\nimport permission from './permission'\nimport remoteRoutes from './remote-routes'\nimport setPageTitle from './set-page-title'\n\nexport default function(router: Router) {\n permission(router)\n nprogress(router)\n remoteRoutes(router)\n setPageTitle(router)\n}\n","import router from './router'\nimport guard from './guard'\n\nguard(router)\nexport default router\n","import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport { pinia, useUserStore } from '../../store'\nimport { Interceptor, InterceptorUse } from './types'\nimport { Message, MessageBox } from '../../plugins/element-plus'\nimport { removeToken } from '../token'\nimport { cancelRequestInterceptor, cancelResponseInterceptor } from './cache'\nimport { isString } from '@okiss/utils'\nimport router from '../../router'\n\nfunction getToken() {\n return useUserStore(pinia).token\n}\n\nfunction expired() {\n return useUserStore(pinia).expired\n}\n\nfunction errMsg(message: string) {\n Message({\n message: message,\n type: 'error',\n duration: 5 * 1000,\n grouping: true\n })\n}\n\nconst baseRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n config.headers = config.headers || {}\n const token = getToken()\n if (token) {\n config.headers['X-Token'] = token\n }\n if (router.currentRoute.value.meta?.path) {\n config.headers['X-Path'] = router.currentRoute.value.meta.path\n }\n return config\n }\n}\n\nconst baseResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled(response) {\n const notHoldApiErr = response.config?.notHoldApiErr !== undefined && response.config?.notHoldApiErr === true\n if (!notHoldApiErr && response.data.code !== 0) {\n const message = response.data.message || `接口请求错误 ${response.config.method}::${response.config.url?.split('?')[0]}`\n if (response.data.code === 401) {\n if (expired()) {\n return\n }\n useUserStore(pinia).SetExpired()\n MessageBox.alert('登录信息已过期或未登录, 是否跳转登录', '操作提醒', {\n showClose: false,\n confirmButtonText: '重新登录',\n showCancelButton: true,\n cancelButtonText: '取消',\n callback: (action: string) => {\n if (action === 'confirm') {\n removeToken()\n // location.href = location.origin + location.pathname\n location.href = location.origin + location.pathname + location.hash.replace('#', '#/?redirect=')\n location.reload()\n }\n useUserStore(pinia).SetExpired()\n }\n })\n return\n } else {\n errMsg(message)\n }\n return Promise.reject(message)\n }\n\n let _message_box = response.data?.data?._message_box\n if (_message_box !== undefined) {\n if (isString(_message_box)) {\n _message_box = {\n message: response.data?.data?._message_box\n }\n }\n MessageBox({\n title: '提示',\n type: 'success',\n grouping: true,\n ..._message_box\n })\n }\n\n return response.data\n },\n onRejected(error: AxiosError) {\n if (axios.isCancel(error)) {\n return Promise.reject('')\n }\n errMsg(`${error.message} ${error.config.method}::${error.config.url?.split('?')[0]}`)\n return Promise.reject(error)\n }\n}\n\nexport const interceptors: Interceptor[] = [\n {\n request: cancelRequestInterceptor,\n response: cancelResponseInterceptor\n },\n {\n request: baseRequestInterceptor,\n response: baseResponseInterceptor\n }\n]\n\nexport function addInterceptor(newInterceptor: Interceptor) {\n interceptors.push(newInterceptor)\n}\n","import axios, { AxiosRequestConfig } from 'axios'\nimport { defaultOptions } from '../../default'\nimport { merge } from 'lodash'\nimport { interceptors } from './interceptors'\n\nexport function instance(conf: AxiosRequestConfig = {}) {\n const defaultConf: AxiosRequestConfig = defaultOptions.axios || {}\n const c = merge(defaultConf, conf || {})\n const service = axios.create({\n ...c\n // adapter: (c) => cacheAdapter(c, defaultAxios)\n })\n\n interceptors.forEach(item => {\n service.interceptors.request.use(item.request.onFulfilled, item.request.onRejected)\n service.interceptors.response.use(item.response.onFulfilled, item.response.onRejected)\n })\n\n return service\n}\n\nexport default instance()\n","import type { ObjectDirective } from 'vue'\n\nconst outClick: ObjectDirective = {\n beforeMount(el, binding) {\n el.clickOutsideEvent = function(event: Event) {\n if (!(el === event.target || el.contains(event.target))) {\n binding.value(event, el)\n }\n }\n document.body.addEventListener('click', el.clickOutsideEvent)\n },\n unmounted(el) {\n document.body.removeEventListener('click', el.clickOutsideEvent)\n }\n}\n\nexport default outClick\n","import mitt from 'mitt'\nimport type { App } from 'vue'\n\nconst eventBus = mitt()\n\nconst defaultOptions = {\n global: true,\n inject: true,\n globalPropertyName: '$eventBus',\n injectName: '$eventBus'\n}\n\n// eventBus.install = install\nexport default eventBus\nexport const bus = eventBus\n\nexport function install(app: App, options = {}) {\n const opt = {\n ...defaultOptions,\n ...options\n }\n if (opt.global) {\n app.config.globalProperties[opt.globalPropertyName] = eventBus\n }\n if (opt.inject) {\n app.provide(opt.injectName, eventBus)\n }\n return eventBus\n}\n","import bus from '../plugins/eventBus'\nimport type { ObjectDirective } from 'vue'\n\nconst rightClient: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null) {\n return\n }\n if (binding.value) {\n // el.style.border = '1px solid red'\n }\n el.oncontextmenu = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.cancelBubble = true\n binding.value && bus.emit('right-click', { event: e, data: binding.value })\n }\n }\n}\n\nexport default rightClient\n","import type { ObjectDirective } from 'vue'\n\nconst resize: ObjectDirective = {\n mounted(el) {\n // console.log(8888, el.style)\n }\n}\n\nexport default resize\n","import type { ObjectDirective } from 'vue'\nimport bus from '../plugins/eventBus'\n\nfunction getElementPosition(element: HTMLElement | any, key: 'Top' | 'Left' | 'Right' | 'Botton') {\n let result = element[`offset${key}`]\n let current = element.offsetParent\n\n while (current) {\n result += current[`offset${key}`]\n current = current.offsetParent\n }\n\n return result\n}\n\nconst devtool: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null || !binding.value.dev) {\n return\n }\n let target : HTMLElement = el\n if (binding.value.parent) {\n for (let i = 0; i < binding.value.parent; i++) {\n if (target.parentElement) {\n target = target.parentElement\n }\n }\n }\n\n target.classList.add('devtool-hover')\n\n // button wrapper\n const wrapper = document.createElement('i')\n wrapper.className = 'devtool-item-wrapper'\n\n target.onmouseover = () => {\n wrapper.style.height = (target.offsetHeight + 30) + 'px'\n wrapper.style.width = (target.offsetWidth + 30) + 'px'\n wrapper.style.top = (getElementPosition(target, 'Top') - 15) + 'px'\n wrapper.style.left = (getElementPosition(target, 'Left') - 15) + 'px'\n }\n\n // create edit button\n const editBtn = document.createElement('span')\n editBtn.className = 'dev-action-edit'\n editBtn.title = '编辑'\n const editIcon = document.createElement('i')\n editIcon.className = 'iconfont ra-editor1'\n editBtn.appendChild(editIcon)\n editBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'edit', devId: binding.value.devId }})\n }\n wrapper.appendChild(editBtn)\n\n // create delete button\n const delBtn = document.createElement('span')\n delBtn.className = 'dev-action-del'\n delBtn.title = '删除'\n const delIcon = document.createElement('i')\n delIcon.className = 'iconfont ra-cut'\n delBtn.appendChild(delIcon)\n delBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'del', devId: binding.value.devId }})\n }\n wrapper.appendChild(delBtn)\n\n // append wrapper as first child\n target.insertBefore(wrapper, target.firstChild)\n\n return\n }\n}\n\nexport default devtool\n","import { createApp, watch, type App, type Component, type Directive } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport type { OmsOptions, OmsPlugin, UsePlugin } from './types'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\n// Vuex Module removed in Pinia migration\n\nimport AppComp from './App.vue'\nimport { startMock, regMockApis } from './mock'\nimport { instance } from './utils/request'\nimport { isObject } from '@okiss/utils'\nimport { VIcon, setUploadHeaderHandle } from '@okiss/vbtf'\nimport { getRolesFromJwt, getToken } from './utils'\nimport { merge } from 'lodash'\n\nimport 'normalize.css/normalize.css'\nimport './styles/index.scss'\nimport '@okiss/vbtf/style.css'\n\nimport ElementPlus from './plugins/element-plus'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\n\nimport { setupStore, pinia, useAppStore, useSettingsStore, useUserStore, setHttp } from './store'\nimport router from './router'\nimport { filterRoutesByRole } from './router/permission'\nimport * as directives from './directive'\nimport { defaultOptions } from './default'\n\nexport let http: AxiosInstance\nconst pendingRoutes: RouteRecordRaw[] = []\nconst registeredRouteKeys = new Set<string>()\n\nconst getRouteKey = (route: RouteRecordRaw): string => {\n return typeof route.name === 'string' ? route.name : route.path\n}\n\nexport function useHttp(options?: AxiosRequestConfig): AxiosInstance {\n return options ? instance((merge(defaultOptions.axios, options))) : http\n}\n\nexport function createAdmin(omsOptions?: OmsOptions) {\n const options = merge(defaultOptions, omsOptions)\n const app: App = createApp(AppComp)\n const omsPlugin = createOmsPlugin(options)\n const plugins = options.plugins || []\n plugins.unshift(omsPlugin)\n plugins.forEach(item => {\n regPlugin(app, item)\n })\n if (options?.mock) {\n startMock()\n }\n http = instance(options.axios)\n // install pinia\n setupStore(app)\n const appStore = useAppStore(pinia)\n const settingsStore = useSettingsStore(pinia)\n const userStore = useUserStore(pinia)\n setHttp(http)\n settingsStore.updateSettings(omsOptions?.settings || {})\n appStore.setBaseAPI(options?.axios.baseURL as any)\n app.config.globalProperties.$http = http\n app.config.globalProperties.$router = router\n window.App = app\n window.OmsOptions = options\n setUploadHeaderHandle(() => {\n return {\n 'X-Token': getToken()\n }\n })\n watch(() => userStore.token, () => {\n syncRoutesWithRoles()\n }, { immediate: true })\n router.isReady().then(() => app.mount('#app'))\n}\n\nfunction regComponents(app: App, components: Record<string, Component> = {}) {\n Object.keys(components).forEach((item: string) => {\n app.component(item, components[item])\n })\n}\n\nfunction syncRoutesWithRoles() {\n const userRoles = getRolesFromJwt(getToken())\n const permittedRoutes = filterRoutesByRole(pendingRoutes, userRoles)\n const userStore = useUserStore(pinia)\n const existedKeys = new Set(userStore.customRouter.map(item => getRouteKey(item)))\n const newRoutes = permittedRoutes.filter(route => {\n const key = getRouteKey(route)\n if (registeredRouteKeys.has(key) || existedKeys.has(key)) {\n return false\n }\n registeredRouteKeys.add(key)\n return true\n })\n newRoutes.forEach(item => {\n router.addRoute(item)\n })\n if (newRoutes.length) {\n userStore.setCustomRoutes(newRoutes)\n }\n}\n\nfunction regRoutes(routes: RouteRecordRaw[] = []) {\n pendingRoutes.push(...routes)\n syncRoutesWithRoles()\n}\n\nfunction regUse(app: App, use: UsePlugin[]) {\n use.forEach(item => {\n if (isObject(item)) {\n // @ts-ignore\n item = [item]\n }\n // @ts-ignore\n app.use(...item)\n })\n}\n\nfunction regDirective(app: App, directives: Record<string, Directive> = {}) {\n Object.keys(directives).forEach(item => {\n app.directive(item, directives[item])\n })\n}\n\nfunction regStoreModule(modules: Record<string, any> = {}) {\n const keepModuleNames = ['app', 'settings', 'user']\n Object.keys(modules).forEach(item => {\n if (keepModuleNames.indexOf(item) !== -1) {\n console.warn(`storeModule name [${item}] is use by base, please change it!`)\n return\n }\n // Pinia does not support dynamic Vuex-style module registration\n console.warn('[store] plugin storeModules are not supported under Pinia. Ignored:', item)\n })\n}\n\nexport function regPlugin(app: App, plugin: OmsPlugin) {\n regComponents(app, plugin.components || {})\n regRoutes(plugin.routes || [])\n regUse(app, plugin.use || [])\n regDirective(app, plugin.directives || {})\n regStoreModule(plugin.storeModules || {})\n regMockApis(plugin.mockApis || [])\n}\n\nexport function createOmsPlugin(options: OmsOptions): OmsPlugin {\n return {\n components: { VIcon },\n directives: directives,\n use: [\n router,\n [ElementPlus, { locale: zhCn, ...options.settings?.ElementPlus }]\n ]\n }\n}\n"],"names":["args","match","number","TokenKey","getToken","Cookies","setToken","token","settings","useSettingsStore","pinia","expires","removeToken","httpClient","setHttp","http","getHttp","defaultAxios","defaultSettings","zhCn","defaultOptions","cloneDeep","defineStore","newSettings","merge","userState","getRouteKey","route","useUserStore","routes","existed","append","key","value","fresh","data","resolve","reject","response","error","roleIds","website","resource","SIDEBAR_STATUS_KEY","getStoredSidebarStatus","local","cookie","persistSidebarStatus","opened","appState","useAppStore","withoutAnimation","device","page","json","builderSchemaState","useBuilderSchemaStore","createPinia","setupStore","app","THEME_STORAGE_KEY","themeMode","ref","initialized","stopSystemListener","detectInitialTheme","storeMode","fromStore","normalizeTheme","cached","persistTheme","mode","applyTheme","normalized","applyDocumentTheme","dispatchThemeChange","setupSystemThemeListener","onChange","mediaQuery","listener","event","matches","useThemeMode","settingsStore","setTheme","next","resolved","watch","computed","isDark","onBeforeMount","loading","addNewStyle","addNewStyleTag","provide","_createBlock","_component_router_view","MockHttpMethod","buttons","_","listMock","example","userApis","options","apis","user","uniqueApis","regMockApis","item","realUrl","api","url","baseUrl","v","startMock","k","Mock","type","body","query","queryParams","mock","logGroup","Message","ElMessage","MessageBox","ElMessageBox","CancelToken","axios","task","config","cancelfun","c","cacheTime","cancelRequestInterceptor","cancel","cancelResponseInterceptor","defaultMap","setCmp","name","cmp","getCmp","_sfc_main$u","setup","custom","_createVNode","_createTextVNode","_sfc_main","matched","first","path","params","pathToRegexp","redirect","_component_el_breadcrumb","_TransitionGroup","_openBlock","_createElementBlock","_Fragment","_renderList","$data","index","_component_el_breadcrumb_item","_hoisted_1","_toDisplayString","$event","$options","_hoisted_2","_component_v_icon","$props","_component_el_container","_component_el_row","_renderSlot","_ctx","_component_el_main","_component_el_aside","input$1","numberRange","select$1","tmp","radio","xswitch","code","json$1","upload","template","iconSelect","subForm","checkbox","ctrlMaps","regCtrl","input","select","ctrls","baseSchema","ctrlFormDefaultOptions","typs","sqlSchema","DevLayout","VForm","VButton","JsonView","val","current","get","ctrl","transData","keyIndex","sourceCtrlOptions","eventBus","btnType","target","unset","compactObject","p","ctrlOptions","_component_dev_layout","_component_v_form","_mergeProps","_component_el_divider","_component_ElButton","_cache","_component_VButton","_component_JsonView","_component_el_form","_component_el_form_item","_component_el_select","_component_el_option","date","span","xenum","html","icon","image","link","rich","tpl","columns","jump","form","table","_sfc_main$p","VTable","schema","toRefs","m","appStore","ctrlMapName","brick","filter","headers","rowButton","normalButton","batchButton","_withCtx","_component_el_col","_component_el_button","_component_v_table","direction","show","useRoute","pageSchema","_component_VIcon","_unref","_component_el_drawer","FormBuilder","TableBuilder","userStore","showJsonSchema","defaultAvatar","sidebar","avatar","nickname","nav","setting","showPageJsonSchemaIcon","toggleTheme","navbarStyle","envColor","onMounted","showEleByClassName","noticeStr","getSetting","showNotice","closeNavBarNotice","waterMarker","header","currentAvatar","avatarError","avatarFallback","text","toggleSideBar","logout","closeNotice","Cache","handleAvatarError","Hamburger","Breadcrumb","_createElementVNode","PageEditor","_hoisted_3","_component_el_tooltip","_component_el_icon","_resolveDynamicComponent","Moon","Sunny","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","$router","_hoisted_4","_component_el_avatar","_hoisted_5","title","logo","logoError","showLogoImage","logoFallback","handleLogoError","_normalizeClass","__props","_Transition","_component_router_link","_component_el_image","isExternal","_normalizeProps","_guardReactiveProps","FixiOSBug","$subMenu","handleMouseleave","e","AppLink","MenuContent","child","_component_app_link","_component_el_menu_item","_component_menu_content","_component_el_sub_menu","_component_sidebar_item","filterHidden","arr","each","selected","remoteRouter","router","useRouter","filterRoutes","getJumpPath","_route","i","onselected","to","group","_component_el_option_group","PageType","MenuType","customRouter","localRoutes","activeMenu","showActive","showLogo","variables","isCollapse","filterRoute","Logo","_component_el_scrollbar","SearchMenu","_component_el_menu","SidebarItem","include","onBeforeRouteLeave","$route","_component_el_backtop","WIDTH","fixedHeader","classObj","isMobile","resizeHandler","ismobile","useEventListener","handleClickOutside","Sidebar","Navbar","AppMain","tips","captcha","baseAPI","ts","onCaptchaClick","onReady","login","CryptoJS","res","_vModelText","_hoisted_6","Layout","Dashboard","Login","NotFoundPage","createRouter","createWebHashHistory","NProgress","nprogress","from","isLodeRemoteRoutes","getWhiteRoutes","BaseSso","Github","getQueryParam","DingTalk","getReloadUrl","extra","strVarReplace","obj2Param","getQrCodeUrl","onScanSuccess","origin","createIFrame","defaultSso","allSso","sso","active","permission","s","flag","isObject","_component_el_alert","props","haveNotice","notice","noticeApi","owners","serviceOffLine","env","project","conf","isString","VNotice","VLoading","schemaHandler","defaultSort","allowedProps","PageLoad","slotProps","mutexId","mutex","action","goBack","onUnmounted","defineComponent","saveApi","node","newChild","effectDataTrans","draggingNode","dropNode","dropType","ev","_component_el_card","_component_el_tree","VTree","onBeforeRouteUpdate","lienOption","makeOption","id","opt","xAxisData","keys","xkey","ykeys","_keys","seriesData","_sfc_main$3","VChart","Markdown","NumberPanel","comptype","isArray","_component_ElCard","$setup","formData","formOptions","_filter","_dataPart","schemaapi","onsubmit","Part","Report","test","components","ElCard","ElRow","ElCol","defaultSchema","class","shadow","afterReset","syncUrl","pathNodeParse","_node","Object","assign","part","split","reverse","length","children","nodesParse","_nodes","root","gutter","forEach","style","colProps","indexOf","push","transChildren","globalComps","createVNode","comp","h","default","map","render","getCurrentInstance","appContext","values","_schema","toRaw","bu","regViews","_bu","getComponent","loadCustom","_path","Container","Table","Form","Tree","Custom","getPath","getName","transRoute","isShow","createList","createForm","createEdit","allChildHidden","transRemoteModules","vueRouteModule","SUPER_ROLE","splitRoles","roleValue","getRouteRoles","directRole","metaRole","roles","cloneRoute","cloned","hasPermission","routeRoles","userRoles","role","filterRoutesByRole","acc","decodeWithAtob","binary","output","base64UrlDecode","base64","padding","padded","decodeJwtPayload","segments","decoded","getRolesFromJwt","payload","remoteRoutes","remoteRoute","routeModules","filteredModules","permittedRoutes","setPageTitle","tokens","len","failure","guard","expired","errMsg","message","baseRequestInterceptor","baseResponseInterceptor","_message_box","interceptors","instance","defaultConf","service","http$1","outClick","el","binding","mitt","rightClient","bus","resize","getElementPosition","element","result","devtool","wrapper","editBtn","editIcon","delBtn","delIcon","pendingRoutes","registeredRouteKeys","useHttp","createAdmin","omsOptions","createApp","AppComp","omsPlugin","createOmsPlugin","plugins","regPlugin","setUploadHeaderHandle","syncRoutesWithRoles","regComponents","existedKeys","newRoutes","regRoutes","regUse","use","regDirective","directives","regStoreModule","modules","keepModuleNames","plugin","VIcon","ElementPlus"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/init.ts","../src/utils/token.ts","../src/store/http.ts","../src/default.ts","../src/store/modules/settings.ts","../src/store/modules/user.ts","../src/store/modules/app.ts","../src/store/modules/builderSchema.ts","../src/store/index.ts","../src/composables/useThemeMode.ts","../src/App.vue","../src/mock/types.ts","../src/mock/data/example.ts","../src/mock/apis/user.ts","../src/mock/apis/index.ts","../src/mock/index.ts","../src/plugins/element-plus.ts","../src/utils/request/cache.ts","../src/utils/container/index.ts","../src/scaffold/dashboard.vue","../src/scaffold/layout/components/Breadcrumb/index.vue","../src/scaffold/layout/components/Hamburger/index.vue","../src/scaffold/devtool/DevLayout.vue","../src/scaffold/devtool/formBuilder/ctrls/input.js","../src/scaffold/devtool/formBuilder/ctrls/number.js","../src/scaffold/devtool/formBuilder/ctrls/number-range.js","../src/scaffold/devtool/formBuilder/ctrls/select.js","../src/scaffold/devtool/formBuilder/ctrls/radio.js","../src/scaffold/devtool/formBuilder/ctrls/switch.js","../src/scaffold/devtool/formBuilder/ctrls/code.js","../src/scaffold/devtool/formBuilder/ctrls/json.js","../src/scaffold/devtool/formBuilder/ctrls/upload.js","../src/scaffold/devtool/formBuilder/ctrls/template.js","../src/scaffold/devtool/formBuilder/ctrls/icon-select.js","../src/scaffold/devtool/formBuilder/ctrls/sub-form.js","../src/scaffold/devtool/formBuilder/ctrls/checkbox.js","../src/scaffold/devtool/formBuilder/form.js","../src/scaffold/devtool/formBuilder/index.vue","../src/scaffold/devtool/tableBuilder/ctrls/input.js","../src/scaffold/devtool/tableBuilder/ctrls/select.js","../src/scaffold/devtool/tableBuilder/ctrls/date.js","../src/scaffold/devtool/tableBuilder/table.js","../src/scaffold/devtool/base.js","../src/scaffold/devtool/tableBuilder/columns/span.js","../src/scaffold/devtool/tableBuilder/columns/emum.js","../src/scaffold/devtool/tableBuilder/columns/html.js","../src/scaffold/devtool/tableBuilder/columns/icon.js","../src/scaffold/devtool/tableBuilder/columns/image.js","../src/scaffold/devtool/tableBuilder/columns/json.js","../src/scaffold/devtool/tableBuilder/columns/link.js","../src/scaffold/devtool/tableBuilder/columns/rich.js","../src/scaffold/devtool/tableBuilder/columns/tpl.js","../src/scaffold/devtool/tableBuilder/columns/index.js","../src/scaffold/devtool/tableBuilder/btn/jump.js","../src/scaffold/devtool/tableBuilder/btn/api.js","../src/scaffold/devtool/tableBuilder/btn/form.js","../src/scaffold/devtool/tableBuilder/btn/table.js","../src/scaffold/devtool/tableBuilder/btn/index.js","../src/scaffold/devtool/tableBuilder/index.vue","../src/scaffold/layout/components/PageEditor.vue","../src/composables/useAestheticMode.ts","../src/scaffold/layout/components/Navbar.vue","../src/scaffold/layout/components/Sidebar/Logo.vue","../src/scaffold/layout/components/Sidebar/Link.vue","../src/scaffold/layout/components/Sidebar/FixiOSBug.ts","../src/scaffold/layout/components/Sidebar/MenuContent.vue","../src/scaffold/layout/components/Sidebar/SidebarItem.vue","../src/scaffold/layout/components/Sidebar/SearchMenu.vue","../src/types.ts","../src/scaffold/layout/components/Sidebar/index.vue","../src/scaffold/layout/components/AppMain.vue","../src/scaffold/layout/index.vue","../src/scaffold/login.vue","../src/scaffold/404.vue","../src/router/router.ts","../src/router/guard/nprogress.ts","../src/router/guard/func.ts","../src/utils/sso/base.ts","../src/utils/sso/github.ts","../src/utils/sso/dingtalk.ts","../src/utils/sso/index.ts","../src/router/guard/permission.ts","../src/components/VLoading.vue","../src/components/notice/VNotice.vue","../src/components/PageLoad.vue","../src/scaffold/table.vue","../src/scaffold/form.vue","../src/components/VTree.vue","../src/scaffold/tree.vue","../src/scaffold/container.vue","../src/components/report/option.ts","../src/components/report/NumberPanel.vue","../src/components/report/part.vue","../src/components/report/index.vue","../src/scaffold/report.vue","../src/render/index.tsx","../src/scaffold/custom.vue","../src/router/remote.ts","../src/router/permission.ts","../src/utils/jwt.ts","../src/router/guard/remote-routes.ts","../src/router/guard/set-page-title.ts","../src/router/guard/index.ts","../src/router/index.ts","../src/utils/request/interceptors.ts","../src/utils/request/index.ts","../src/directive/outClick.ts","../src/plugins/eventBus.ts","../src/directive/rightClick.ts","../src/directive/resize.ts","../src/directive/devtool.ts","../src/admin.ts"],"sourcesContent":["/* eslint-disable */\ninterface String {\n format(...replacements: string[]): string;\n}\n\nif (!String.prototype.format) {\n String.prototype.format = function () {\n const args = arguments\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] !== 'undefined'\n ? args[number]\n : match\n })\n }\n}\n","import Cookies from 'js-cookie'\nimport { pinia, useSettingsStore } from '../store'\n\nconst TokenKey = 'oms:token'\n\nexport function getToken(): string {\n return Cookies.get(TokenKey) || ''\n}\n\nexport function setToken(token: string) {\n const settings = useSettingsStore(pinia)\n const expires = new Date(new Date().getTime() + (settings.tokenExpire || 24 * 60 * 60 * 1000))\n return Cookies.set(TokenKey, token, { expires })\n}\n\nexport function removeToken() {\n return Cookies.remove(TokenKey)\n}\n","import type { AxiosInstance } from 'axios'\n\nlet httpClient: AxiosInstance | null = null\n\nexport function setHttp(http: AxiosInstance) { httpClient = http }\nexport function getHttp(): AxiosInstance | null { return httpClient }\n\n","import zhCn from 'element-plus/es/locale/lang/zh-cn'\nimport { AxiosRequestConfig } from 'axios'\nimport { OmsOptions } from './types'\nimport { Settings } from './types'\n\nconst defaultAxios: AxiosRequestConfig = {\n baseURL: '/api',\n withCredentials: true,\n cacheEnable: true\n}\n\nexport const defaultSettings: Settings = {\n title: 'oms',\n fixedHeader: false,\n sidebarLogo: true,\n logo: '',\n closeNavNotice: false,\n navBarNotice: '',\n hasNewMessage: true,\n showPageJsonSchema: false,\n loginTips: '',\n sso: {},\n ElementPlus: {\n size: 'default',\n zIndex: 3000,\n locale: zhCn\n },\n nav: [],\n whiteRoutes: ['/login'],\n tokenExpire: 7 * 24 * 60 * 60 * 1000,\n defaultAvatar: '',\n envColor: {\n 'uat': 'gray',\n 'pre': 'green'\n },\n serviceOffLineNotice: '当前页面功能正在维护, 请稍后再试~~~',\n formMutex: true,\n captcha: true,\n themeMode: 'light',\n aestheticMode: 'default'\n}\n\nexport const defaultOptions: OmsOptions = {\n axios: defaultAxios,\n settings: defaultSettings,\n plugins: [],\n mock: false\n}\n","import { defineStore } from 'pinia'\nimport { Settings } from '../../types'\nimport { defaultSettings } from '../../default'\nimport { cloneDeep, merge } from 'lodash'\n\nexport const settings: Settings = cloneDeep(defaultSettings)\n\nexport const useSettingsStore = defineStore('settings', {\n state: (): Settings => ({ ...settings }),\n actions: {\n updateSettings(newSettings: Settings) {\n // merge into reactive state\n merge(this, newSettings)\n }\n }\n})\n\nexport default useSettingsStore\n","import { defineStore } from 'pinia'\nimport { strOrNum, User } from '../types'\nimport { LoginForm, LoginTicket, RemoteModule, Settings, UserInfo } from '../../types'\nimport { ApiResponse } from '../../utils/request/types'\nimport { getToken, removeToken, setToken } from '../../utils/token'\nimport { RouteRecordRaw } from 'vue-router'\nimport Cookies from 'js-cookie'\nimport { getHttp } from '../http'\nimport { useSettingsStore } from './settings'\n\nexport const userState: User = {\n name: '',\n nickname: '',\n avatar: '',\n token: getToken(),\n customRouter: [],\n remoteRouter: [],\n menuRoutes: [],\n isLodeRemoteRoutes: false,\n resource: {},\n roleIds: [],\n path: '',\n env: '',\n expired: false\n}\n\nconst getRouteKey = (route: RouteRecordRaw): string => {\n return typeof route.name === 'string' ? route.name : route.path\n}\n\nexport const useUserStore = defineStore('user', {\n state: (): User => ({ ...userState }),\n actions: {\n updateToken(token: string) {\n this.token = token\n setToken(token)\n },\n removeToken() {\n this.token = ''\n removeToken()\n },\n updateRemoteRouter(routes: RemoteModule[]) {\n this.remoteRouter = routes\n this.isLodeRemoteRoutes = true\n },\n setCustomRoutes(routes: RouteRecordRaw[]) {\n const existed = new Set(this.customRouter.map(route => getRouteKey(route)))\n const append = routes.filter(route => !existed.has(getRouteKey(route)))\n if (append.length) {\n this.customRouter = this.customRouter.concat(append)\n }\n },\n updateState<K extends keyof User>({ key, value }: { key: K, value: any }) {\n // @ts-ignore\n this[key] = value\n },\n resetUser() {\n const fresh: User = { ...userState, token: getToken() }\n Object.assign(this, fresh)\n },\n SET_EXPIRED() {\n this.expired = !this.expired\n },\n\n // async actions\n login(data: LoginForm | LoginTicket): Promise<boolean> {\n return new Promise<boolean>((resolve, reject) => {\n const http = getHttp()\n if (!http) {\n reject('http client not init')\n return\n }\n http.request<UserInfo, ApiResponse<UserInfo>>({\n url: '/user/login',\n method: 'POST',\n data\n }).then((response: ApiResponse<UserInfo>) => {\n this.updateToken(response.data?.token || '')\n resolve(true)\n }).catch(error => reject(error))\n })\n },\n logout() {\n this.removeToken()\n this.resetUser()\n },\n info(): Promise<boolean> {\n return new Promise<boolean>((resolve, reject) => {\n const http = getHttp()\n if (!http) {\n reject('http client not init')\n return\n }\n http.request<UserInfo, ApiResponse<UserInfo>>({\n url: '/user/info',\n method: 'GET'\n }).then((response: ApiResponse<UserInfo>) => {\n const roleIds: strOrNum[] = response.data?.role_ids || []\n this.updateState({ key: 'name', value: response.data?.name })\n this.updateState({ key: 'nickname', value: response.data?.nickname })\n this.updateState({ key: 'roleIds', value: roleIds })\n this.updateState({ key: 'env', value: response.data?.env })\n const website = (response.data?.website || {}) as Settings\n useSettingsStore().updateSettings(website)\n // @ts-ignore\n !Cookies.get('username') && Cookies.set('username', response.data?.name)\n // We cannot directly import settings store here without circular concerns in some flows.\n resolve(true)\n }).catch(error => reject(error))\n })\n },\n loadRemoteRoutes(): Promise<RemoteModule[]> {\n return new Promise<RemoteModule[]>((resolve, reject) => {\n const http = getHttp()\n http?.request<RemoteModule, ApiResponse<RemoteModule[]>>({\n url: '/user/routes',\n method: 'get'\n }).then((response: ApiResponse<RemoteModule[]>) => {\n if (response.code === 0) {\n const resource: RemoteModule[] = response.data || []\n resolve(resource)\n } else {\n reject('error')\n }\n }).catch(error => {\n console.log(error)\n reject(error)\n })\n })\n },\n SetExpired() {\n this.SET_EXPIRED()\n }\n }\n})\n\nexport default useUserStore\n","import { defineStore } from 'pinia'\nimport { App, PageSchema, Sidebar } from '../types'\nimport Cookies from 'js-cookie'\n\nconst SIDEBAR_STATUS_KEY = 'sidebarStatus'\n\nfunction getStoredSidebarStatus() {\n if (typeof window === 'undefined')\n return undefined\n const local = window.localStorage.getItem(SIDEBAR_STATUS_KEY)\n if (local !== null)\n return local === '1'\n const cookie = Cookies.get(SIDEBAR_STATUS_KEY)\n if (cookie !== undefined)\n return !!cookie\n}\n\nfunction persistSidebarStatus(opened: boolean) {\n if (typeof window !== 'undefined')\n window.localStorage.setItem(SIDEBAR_STATUS_KEY, opened ? '1' : '0')\n Cookies.set(SIDEBAR_STATUS_KEY, opened ? '1' : '0')\n}\n\nexport const appState: App = {\n sidebar: {\n opened: getStoredSidebarStatus() ?? true,\n withoutAnimation: false\n },\n device: 'desktop',\n pages: {},\n currentRouteMeta: {},\n builderSchema: {},\n baseURL: ''\n}\n\nexport const useAppStore = defineStore('app', {\n state: (): App => ({ ...appState }),\n actions: {\n TOGGLE_SIDEBAR() {\n this.sidebar.opened = !this.sidebar.opened\n this.sidebar.withoutAnimation = false\n persistSidebarStatus(this.sidebar.opened)\n },\n CLOSE_SIDEBAR(withoutAnimation: boolean) {\n this.sidebar.opened = false\n persistSidebarStatus(this.sidebar.opened)\n this.sidebar.withoutAnimation = withoutAnimation\n },\n TOGGLE_DEVICE(device: string) {\n this.device = device\n },\n SET_PAGE_JSON_SCHEMA({ page, json }: PageSchema) {\n this.pages[page] = json\n },\n SET_CURRENT_META(data: Record<string, any>) {\n this.currentRouteMeta = data\n },\n SET_BUILDER_SCHEMA(data: Record<string, any>) {\n this.builderSchema = data\n },\n SET_BASE_API(data: string) {\n this.baseURL = data\n },\n\n // Vuex-compat method names\n toggleSideBar() { this.TOGGLE_SIDEBAR() },\n closeSideBar({ withoutAnimation }: Sidebar) { this.CLOSE_SIDEBAR(withoutAnimation) },\n toggleDevice(device: string) { this.TOGGLE_DEVICE(device) },\n setPageJsonSchema(data: PageSchema) { this.SET_PAGE_JSON_SCHEMA(data) },\n setCurrentMeta(data: Record<string, any>) { this.SET_CURRENT_META(data) },\n setBuilderSchema(data: Record<string, any>) { this.SET_BUILDER_SCHEMA(data) },\n setBaseAPI(data: string) { this.SET_BASE_API(data) }\n }\n})\n\nexport default useAppStore\n","/**\n * BuilderSchema\n * 存储pageEditor 编辑模式下时子组件联动相关的状态数据\n */\n\nimport { defineStore } from 'pinia'\nimport { BuilderSchema } from '../types'\n\nexport const builderSchemaState: BuilderSchema = {\n currentCellItem: {} // form/sub-form 当前单元格编辑数据\n}\n\nexport const useBuilderSchemaStore = defineStore('builderSchema', {\n state: (): BuilderSchema => ({ ...builderSchemaState }),\n actions: {\n SET_CURRENT_CELLITEM(data: Record<string, any>) {\n this.currentCellItem = data\n },\n setCurrentCellItem(data: Record<string, any>) {\n this.SET_CURRENT_CELLITEM(data)\n }\n }\n})\n\nexport default useBuilderSchemaStore\n","import type { App } from 'vue'\nimport { createPinia } from 'pinia'\n\nexport const pinia = createPinia()\n\nexport function setupStore(app: App<Element>) {\n app.use(pinia)\n}\n\nexport * from './modules/user'\nexport * from './modules/app'\nexport * from './modules/settings'\nexport * from './modules/builderSchema'\nexport * from './http'\n\nexport default pinia\n","import { computed, ref, watch } from 'vue'\nimport { useSettingsStore } from '../store'\nimport {\n applyDocumentTheme,\n dispatchThemeChange,\n getDocumentTheme,\n normalizeTheme,\n type ThemeMode\n} from '@okiss/utils'\n\nconst THEME_STORAGE_KEY = 'oms-theme'\n\nconst themeMode = ref<ThemeMode>('light')\nlet initialized = false\nlet stopWatch: (() => void) | null = null\nlet stopSystemListener: (() => void) | null = null\n\nfunction detectInitialTheme(storeMode: unknown): ThemeMode {\n const fromStore = normalizeTheme((storeMode as string) ?? undefined)\n if (typeof window === 'undefined') {\n return fromStore\n }\n const cached = window.localStorage?.getItem(THEME_STORAGE_KEY)\n if (cached === 'dark' || cached === 'light') {\n return cached\n }\n if (storeMode === 'dark' || storeMode === 'light') {\n return storeMode\n }\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\nfunction persistTheme(mode: ThemeMode) {\n if (typeof window !== 'undefined') {\n window.localStorage?.setItem(THEME_STORAGE_KEY, mode)\n }\n}\n\nfunction applyTheme(mode: ThemeMode) {\n const normalized = normalizeTheme(mode)\n themeMode.value = normalized\n applyDocumentTheme(normalized)\n dispatchThemeChange(normalized)\n persistTheme(normalized)\n}\n\nfunction setupSystemThemeListener(onChange: (mode: ThemeMode) => void) {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n stopSystemListener = null\n return\n }\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n const listener = (event: MediaQueryListEvent) => {\n const matches = event.matches ?? mediaQuery.matches\n onChange(matches ? 'dark' : 'light')\n }\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', listener)\n } else {\n mediaQuery.addListener(listener)\n }\n stopSystemListener = () => {\n if (typeof mediaQuery.removeEventListener === 'function') {\n mediaQuery.removeEventListener('change', listener)\n } else {\n mediaQuery.removeListener(listener)\n }\n stopSystemListener = null\n }\n}\n\nexport function useThemeMode() {\n const settingsStore = useSettingsStore()\n\n const setTheme = (next: ThemeMode) => {\n const normalized = normalizeTheme(next)\n if (settingsStore.themeMode !== normalized) {\n settingsStore.updateSettings({ themeMode: normalized } as any)\n } else {\n applyTheme(normalized)\n }\n }\n\n if (!initialized) {\n initialized = true\n const resolved = detectInitialTheme(settingsStore.themeMode)\n if (normalizeTheme(settingsStore.themeMode as string) !== resolved) {\n settingsStore.updateSettings({ themeMode: resolved } as any)\n } else {\n applyTheme(resolved)\n }\n stopWatch = watch(\n () => settingsStore.themeMode,\n (mode) => {\n applyTheme(normalizeTheme(mode as string))\n },\n { immediate: true }\n )\n stopSystemListener?.()\n setupSystemThemeListener((mode) => {\n setTheme(mode)\n })\n }\n\n const mode = computed(() => themeMode.value)\n const isDark = computed(() => mode.value === 'dark')\n\n const toggleTheme = () => {\n setTheme(isDark.value ? 'light' : 'dark')\n }\n\n return {\n themeMode: mode,\n isDark,\n setTheme,\n toggleTheme\n }\n}\n\nexport function getThemeMode(): ThemeMode {\n if (!initialized) {\n return normalizeTheme(getDocumentTheme())\n }\n return themeMode.value\n}\n\nexport function stopThemeWatcher() {\n stopWatch?.()\n stopWatch = null\n stopSystemListener?.()\n stopSystemListener = null\n initialized = false\n}\n","<template>\n <router-view />\n</template>\n\n<script setup lang=\"ts\">\nimport { addNewStyle, addNewStyleTag } from '@okiss/utils'\nimport { provide } from 'vue'\nimport { useThemeMode } from './composables/useThemeMode'\n\nuseThemeMode()\n\nonBeforeMount(() => {\n const loading = document.getElementById('preloader')\n if (loading !== null) {\n document.body.removeChild(loading)\n document.getElementById('preloader')?.remove()\n addNewStyle('test-icon', '//at.alicdn.com/t/font_2246548_zclaqxwmzq8.css')\n\n const css = `.iconfont {\n font-size: 19px;\n font-style: normal;\n -webkit-font-smoothing: antialiased;\n font-family: iconfont !important;\n }`\n\n addNewStyleTag(css)\n }\n})\n\nif (window?.OmsOptions?.form?.vsPath) {\n provide('vsPath', window?.OmsOptions?.form?.vsPath)\n}\n</script>\n","export enum MockHttpMethod {\n GET = 'get',\n POST = 'post',\n DELETE = 'delete',\n FETCH = 'fetch',\n OPTION = 'option',\n PUT = 'put'\n}\n\nexport interface MockOption {\n query: Record<string, any>,\n data: Record<string, any>\n}\n\nexport interface MockApi {\n method: MockHttpMethod,\n url: string | RegExp,\n baseURL?: string,\n response: (options: MockOption) => Record<string, any>\n}\n\nexport interface MockApiMap {\n [key: string]: MockApi\n}\n","import _ from 'lodash'\n\nconst form = {\n saveApi: '/save',\n afterSubmit: '',\n afterReset: 'goback',\n options: {\n column: 3,\n submitButton: {\n text: '提交'\n },\n cancelButton: {\n text: '取消',\n on: {\n click: '() => console.error(33333333)'\n }\n }\n },\n formItems: [\n {\n type: 'radio',\n field: 'radio',\n label: '单选框',\n info:\n '表单控件支持提示信息, 可写html <a class=\"el-link el-link--primary is-underline\" target=\"_blank\" href=\"http://github.com/daodao97\">文档</a>',\n options: [\n {\n value: 1,\n label: '选项1'\n },\n {\n value: 2,\n label: '选项2'\n }\n ],\n value: 1,\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n field: 'input',\n label: '输入框',\n value: 5,\n props: {\n maxlength: 10,\n suffixIcon: 'el-icon-date',\n slots: {\n prepend: '前缀'\n },\n showCopy: true,\n prefixIcon: 'el-icon-search'\n },\n rules: [{ required: true, message: '该项为必填项' }],\n depend: {\n field: 'radio',\n value: 1\n },\n computed: [\n {\n when: 'aaa',\n set: {\n checkbox: {\n value: [1]\n }\n }\n },\n {\n when: 'bbb',\n set: {\n checkbox: {\n value: [2, 3]\n }\n }\n }\n ],\n info: '当前控件依赖 单选框 的值, 仅在 选项1 下显示',\n col: {\n span: 12\n }\n },\n {\n type: 'number',\n field: 'number',\n label: '数字',\n props: {\n step: 2\n },\n computed: {\n // when: [\"$self\", \">\", 10],\n // when: [\">\", 3],\n when: 4,\n set: {\n range_number: {\n label: '数字区间2'\n }\n }\n },\n col: {\n span: 12\n },\n value: 4\n },\n {\n type: 'number-range',\n field: 'range_number',\n label: '数字区间',\n col: {\n span: 12\n }\n },\n {\n type: 'checkbox',\n field: 'checkbox',\n label: '复选框',\n value: [],\n options: [\n { value: 1, label: '复选框1' },\n { value: 2, label: '复选框2' },\n { value: 3, label: '复选框3' }\n ],\n info: '动态计算, 当 输入框 字段的值 为 aaa 时, 复选框1将被选中, 为 bbb 时, 复选框2,3 将被选中',\n col: {\n span: 8\n }\n },\n {\n type: 'date',\n field: 'date',\n label: '日期',\n props: {\n disabled: true\n },\n info: '禁用控件',\n col: {\n span: 8\n }\n },\n {\n type: 'date',\n field: 'date_range',\n label: '日期范围',\n value: '',\n props: {\n type: 'daterange',\n rangeSeparator: '~',\n startPlaceholder: '开始日期',\n endPlaceholder: '结束日期'\n },\n col: {\n span: 8\n }\n },\n {\n type: 'time',\n field: 'time',\n label: '时间'\n },\n {\n type: 'time',\n field: 'time_range',\n label: '时间范围',\n props: {\n isRange: true\n }\n },\n {\n type: 'datetime',\n field: 'datetime',\n label: '日期时间'\n },\n {\n type: 'datetime',\n field: 'datetime_range',\n label: '日期时间范围',\n props: {\n type: 'datetimerange'\n }\n },\n {\n type: 'select',\n field: 'select',\n label: '下拉框',\n options: [\n { value: 1, label: '选项1' },\n { value: 2, label: '选项2' },\n { value: 3, label: '选项3' },\n { value: 4, label: '选项4' }\n ],\n props: {\n selectApi: '/user/select'\n }\n },\n {\n type: 'switch',\n field: 'switch',\n label: '开关'\n },\n {\n type: 'slider',\n field: 'slider',\n label: '滑块'\n },\n {\n type: 'upload',\n field: 'upload',\n label: '上传',\n value: 'http://qupinapptest.oss-cn-beijing.aliyuncs.com/1/202002/d81d3c9dc7c3df7590d333f783a97995.jpeg',\n props: {}\n },\n {\n type: 'upload',\n field: 'upload_multiple',\n label: '上传多张',\n props: {\n limit: 3\n }\n },\n {\n type: 'transfer',\n field: 'transfer',\n label: '穿梭框',\n options: [\n { value: 1, label: '备选项1' },\n { value: 2, label: '备选项2' },\n { value: 3, label: '备选项3' }\n ],\n value: []\n },\n {\n type: 'color',\n field: 'color',\n label: '颜色'\n },\n {\n type: 'rate',\n field: 'rate',\n label: '评分',\n value: 3\n },\n {\n type: 'sub-form',\n field: 'sub_form',\n label: '多项子表单',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'sub_input',\n label: '输入框',\n rules: [\n {\n required: true,\n message: '子表单的校验将在上层表单校验通过后执行'\n }\n ],\n info: 'input 输入框支持 mask',\n props: {\n mask: '99-9999999'\n }\n },\n {\n type: 'input',\n field: 'sub_input_1',\n label: '输入框1'\n }\n ]\n }\n },\n {\n type: 'sub-form',\n field: 'sub_form_not_repeat',\n label: '子表单',\n props: {\n options: {\n inline: true\n },\n formItems: [\n {\n type: 'input',\n field: 'sub_input',\n label: '输入框',\n rules: [\n {\n required: true,\n message: '子表单的校验将在上层表单校验通过后执行'\n }\n ]\n },\n {\n type: 'input',\n field: 'sub_input_1',\n label: '输入框1'\n }\n ]\n }\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'json',\n field: 'json',\n label: 'json',\n value: '{\"a\":1}'\n },\n {\n type: 'rule',\n field: 'rule',\n label: 'rule',\n value: [],\n props: {\n factorOptions: [{ label: 'A', value: 'A' }, { label: 'B', value: 'B' }, { label: 'C', value: 'C' }],\n symbolOptions: [{ label: '大于', value: '>' }, { label: '等于', value: '=' }, { label: '小于', value: '<' }]\n }\n },\n {\n type: 'template',\n field: 'p3',\n label: '自定义',\n comp: {\n inject: ['formData'],\n template: '<div>{{ msg }}<br/>当前的表单数据是:<pre>{{JSON.stringify(formData, null, 2)}}</pre><el-button @click=\"onclick\">click</el-button></div>',\n data: {\n msg: 'this is custom data'\n },\n methods: {\n onclick: '() => { console.log(this)}'\n }\n },\n info: '在通用表单控件无法满足需求时, 可以编写 `template` 模板组件'\n }\n ]\n}\n\nconst buttons = [\n {\n type: 'jump',\n text: '跳转',\n target: 'http://github.com/daodao97'\n },\n {\n type: 'api',\n text: '请求接口',\n target: '/test_api',\n extra: {\n method: 'POST',\n url: '/test_api'\n },\n props: {\n type: 'warning'\n }\n },\n {\n type: 'table',\n text: '表格',\n extra: {\n infoApi: '/student/list_info',\n listApi: '/student/list'\n },\n props: {\n type: 'info'\n }\n },\n [\n {\n type: 'jump',\n text: '跳转',\n target: 'http://github.com/daodao97'\n },\n {\n type: 'api',\n text: '请求接口',\n extra: {\n method: 'POST',\n url: '/test_api'\n }\n }\n ],\n {\n type: 'form',\n text: '表单',\n extra: {\n infoApi: '/form',\n saveApi: '/save'\n },\n props: {\n type: 'success'\n }\n }\n]\n\nconst table = {\n exportAble: true,\n filter: [\n {\n field: 'name',\n type: 'input',\n label: '姓名'\n },\n {\n field: 'sex',\n type: 'select',\n label: '性别',\n options: [\n { value: 1, label: '男' },\n { value: 0, label: '女' }\n ]\n }\n ],\n headers: [\n {\n field: 'name',\n label: '姓名',\n info: '表头提示'\n },\n {\n field: 'sex',\n type: 'enum',\n label: '性别',\n options: [\n { value: 1, label: '男' },\n { value: 0, label: '女' }\n ],\n state: {\n 1: 'info',\n 0: 'warning'\n },\n props: {\n sortable: true\n }\n },\n {\n field: 'github',\n type: 'link',\n label: '主页'\n },\n {\n field: 'html',\n type: 'html',\n label: 'HTML'\n },\n {\n field: 'image',\n type: 'image',\n label: '头像'\n },\n {\n field: 'json',\n type: 'json',\n label: '信息'\n },\n {\n field: 'richText',\n type: 'rich-text',\n label: '信息'\n }\n ],\n batchButton: buttons,\n rowButton: [\n {\n type: 'jump',\n text: '编辑',\n target: '/user/{id}'\n },\n {\n type: 'form',\n extra: {\n infoApi: '/user/{id}',\n saveApi: '/user/{id}'\n },\n props: {\n icon: 'el-icon-edit',\n type: 'success'\n }\n },\n {\n type: 'api',\n extra: {\n method: 'POST',\n url: '/student/{id}'\n },\n props: {\n icon: 'el-icon-delete',\n type: 'danger'\n }\n }\n ],\n normalButton: [\n ..._.cloneDeep(buttons),\n {\n type: 'jump',\n target: '/user/form',\n props: {\n icon: 'el-icon-plus',\n type: 'primary'\n }\n }\n ],\n selectedNotice: '当前共勾选: {selectedCount} 条',\n listApi: '/user/list'\n}\n\nconst listMock = {\n code: 0,\n data: {\n 'list|0-100': [\n {\n 'id|0-1000': 1,\n name: '@cname',\n 'sex|0-1': 1,\n 'score|0-100': 60,\n link: 'http://github.com/daodao97',\n image: 'http://qupinapptest.oss-cn-beijing.aliyuncs.com/1/202002/d81d3c9dc7c3df7590d333f783a97995.jpeg',\n html: '<S>显示删除线1</S>',\n json: { slogan: '左手代码右手诗' },\n richText: '在一段文本中<突出|black|yellow>显示某些<文字|#ffffff|#000000>'\n }\n ],\n page: {\n 'count|1-10': 2,\n 'page|1-5': 2\n }\n }\n}\n\nconst layoutForm = {\n afterSubmit: '',\n afterReset: 'goback',\n formItems: [\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span'\n }\n ]\n}\n\nconst layoutSection = {\n afterSubmit: '',\n afterReset: '',\n formItems: [\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n section: '表单片段1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n section: '表单片段2',\n type: 'input',\n label: 'span'\n }\n ]\n}\n\nexport default { form, table, listMock, layoutForm, layoutSection }\n\n","import { MockApi, MockHttpMethod, MockOption } from '../types'\nimport menu from '../data/menu'\nimport role from '../data/role'\nimport example from '../data/example'\n\nconst userApis: MockApi[] = [\n {\n method: MockHttpMethod.POST,\n url: '/login',\n response(options: MockOption) {\n return {\n code: 0,\n data: {\n name: 'daodao97',\n token: 'xxxxxxx'\n }\n }\n }\n },\n {\n method: MockHttpMethod.GET,\n url: '/user/info',\n response(options: MockOption) {\n return {\n code: 0,\n data: {\n role_ids: [1],\n resource: [[0, 20, 'formItems', 'radio'], [0, 1, 2]]\n }\n }\n }\n },\n {\n url: '/user/routes',\n method: MockHttpMethod.GET,\n response: (options: MockOption) => {\n return {\n code: 0,\n data: [\n {\n id: 0,\n label: '',\n routes: []\n }\n ]\n }\n }\n },\n {\n url: '/user/list',\n method: MockHttpMethod.GET,\n response: (options: MockOption) => {\n return example.listMock\n }\n }\n]\n\nexport default userApis\n","import user from './user'\nimport { MockApi } from '../types'\n\nconst apis: MockApi[] = [\n ...user\n]\n\nexport default apis\n","import Mock from 'mockjs'\nimport { MockApi, MockApiMap } from './types'\nimport apis from './apis'\nimport { logGroup, queryParams } from '@okiss/utils'\nimport { defaultOptions } from '../default'\n\nconst uniqueApis: MockApiMap = {}\n\nexport function regMockApis(apis: MockApi[]) {\n apis.forEach(item => {\n const key = realUrl(item)\n uniqueApis[`${item.method}::${key}`] = item\n })\n}\n\nregMockApis(apis)\n\nfunction realUrl(api: MockApi) {\n let url = api.url\n let baseUrl = api.baseURL || defaultOptions.axios?.baseURL\n if (!baseUrl) {\n baseUrl = ''\n }\n if (typeof url === 'string') {\n url = ('/' + baseUrl + url).split('/').filter(v => v).join('/')\n url += '(|\\\\?.*)$'\n return new RegExp(url)\n }\n return url\n}\n\nexport function startMock() {\n Object.keys(uniqueApis).forEach(k => {\n const api = uniqueApis[k]\n const url = realUrl(api)\n Mock.mock(url, api.method, function(options: { url: string, body: any, type: string }) {\n const { url, type, body } = options\n const query = queryParams(url)\n const data = body ? JSON.parse(body) : {}\n const mock = api.response({ query, data })\n const response = Mock.mock(mock)\n logGroup(url, { type, query, data, response })\n return Mock.mock(response)\n })\n })\n console.log(`%c ApiMock is stared! `, 'background: #606060; color: #fff; padding: 4px 5px; border-radius: 1px;')\n}\n","import ElementPlus, { ElMessage, ElMessageBox } from 'element-plus'\nimport '../styles/element/index.scss'\nimport 'element-plus/theme-chalk/src/index.scss'\nimport 'element-plus/theme-chalk/src/dark/css-vars.scss'\nimport 'dayjs/locale/zh-cn'\n\nexport const Message = ElMessage\nexport const MessageBox = ElMessageBox\n\nexport default ElementPlus\n","import { InterceptorUse } from './types'\nimport axios, { AxiosError, AxiosInstance, AxiosResponse, Canceler, AxiosRequestConfig } from 'axios'\n// @ts-ignore\nimport qs from 'qs'\n\nconst CancelToken = axios.CancelToken\n\nconst task = {\n taskList: {} as Record<string, any>,\n cacheList: new Map(),\n uniqueId(config: AxiosRequestConfig) {\n return `${location.href}|${config.method}|${config.url}|`\n // + qs.stringify(config.params)\n },\n addTask(config: AxiosRequestConfig, cancelfun: Canceler) {\n const key = this.uniqueId(config)\n this.taskList[key] = cancelfun\n },\n delTask(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n const c = this.taskList[key]\n c && c(config)\n },\n pending(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n return !!this.taskList[key]\n },\n cache(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n const c = this.cacheList.get(key)\n if (!c) {\n return undefined\n }\n if (c.expirationTime < (new Date()).getTime()) {\n this.delCache(config)\n return undefined\n }\n console.log('getcache', key, c.response)\n return c.response\n },\n addCache(config: AxiosRequestConfig, response: any) {\n const key = this.uniqueId(config)\n const cacheTime = config.cacheTime || 0\n if (cacheTime) {\n this.cacheList.set(key, { response, expirationTime: (new Date()).getTime() + cacheTime })\n }\n },\n delCache(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n return this.cacheList.delete(key)\n }\n}\n\nexport const cacheAdapter: (config: AxiosRequestConfig, instance: AxiosInstance) => Promise<any> = (config: AxiosRequestConfig, instance: AxiosInstance) => {\n return new Promise((resolve, reject) => {\n if (config.method !== 'get') {\n delete config.adapter\n resolve(instance(config))\n return\n }\n const cache = task.cache(config)\n if (!cache) {\n delete config.adapter\n resolve(instance(config))\n return\n }\n resolve({ data: cache, config: config })\n })\n}\n\nexport const cancelRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n if (config.cacheEnable === false) {\n return config\n }\n if (task.pending(config)) {\n task.delTask(config)\n }\n config.cancelToken = new CancelToken((cancel) => {\n task.addTask(config, cancel)\n })\n return config\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n\nexport const cancelResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled: function(response: AxiosResponse) {\n // @ts-ignore\n if (response.config.cacheEnable === false) {\n return response\n }\n if (response.config.method === 'get' && Object.keys(response.data as Record<string, any>).length > 0) {\n task.addCache(response.config, response.data)\n }\n return response\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n","import { Component } from 'vue'\n\nconst defaultMap: Record<string, Component> = {}\n\nexport function setCmp(name: string, cmp: Component) {\n defaultMap[name] = cmp\n}\n\nexport function getCmp(name: string) {\n return defaultMap[name]\n}\n","<script lang=\"jsx\">\nimport { useUserStore } from '../store'\nimport { getCmp } from '../utils/container'\nimport { computed } from 'vue'\n\nexport default defineComponent({\n name: 'Dashboard',\n setup() {\n // use global store shim\n // const roleIds = computed(() => store.state.settings.loginTips)\n const custom = getCmp('dashboard')\n if (custom) {\n return () => <span>\n <custom/>\n </span>\n }\n const name = computed(() => useUserStore().name)\n return () => <div class='dashboard-container'>\n <div class='dashboard-text'>Hi { name.value } 😄</div>\n </div>\n }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.dashboard {\n &-container {\n margin: 30px;\n }\n\n &-text {\n font-size: 30px;\n line-height: 46px;\n }\n}\n</style>\n","<template>\n <el-breadcrumb\n class=\"app-breadcrumb\"\n separator=\"/\"\n >\n <transition-group name=\"breadcrumb\">\n <el-breadcrumb-item\n v-for=\"(item, index) in levelList\"\n :key=\"item.path\"\n >\n <span\n v-if=\"(item.path.indexOf('/DIR_') === 0 && item.redirect === undefined) || index === levelList.length - 1\"\n class=\"no-redirect\"\n >{{ item.meta.title }}</span> <a\n v-else\n @click=\"handleLink(item)\"\n >{{ item.meta.title }}</a>\n </el-breadcrumb-item>\n </transition-group>\n </el-breadcrumb>\n</template>\n\n<script>\nimport * as pathToRegexp from 'path-to-regexp'\n\nexport default {\n data() {\n return {\n levelList: null\n }\n },\n watch: {\n $route() {\n this.getBreadcrumb()\n }\n },\n created() {\n this.getBreadcrumb()\n },\n methods: {\n getBreadcrumb() {\n // only show routes with meta.title\n let matched = this.$route.matched.filter(\n item => item.meta && item.meta.title\n )\n const first = matched[0]\n\n if (!this.isDashboard(first)) {\n matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(\n matched\n )\n }\n\n this.levelList = matched.filter(\n item => item.meta && item.meta.title && item.meta.breadcrumb !== false\n )\n },\n isDashboard(route) {\n const name = route && route.name\n if (!name) {\n return false\n }\n return (\n name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()\n )\n },\n pathCompile(path) {\n // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561\n const { params } = this.$route\n const toPath = pathToRegexp.compile(path)\n return toPath(params)\n },\n handleLink(item) {\n const { redirect, path } = item\n if (redirect) {\n this.$router.push(redirect)\n return\n }\n this.$router.push(this.pathCompile(path))\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-breadcrumb.el-breadcrumb {\n display: inline-block;\n font-size: 14px;\n line-height: 50px;\n margin-left: 8px;\n\n .no-redirect {\n color: #97a8be;\n cursor: text;\n }\n}\n</style>\n","<template>\n <div\n style=\"padding: 0 15px;\"\n @click=\"toggleClick\"\n >\n <v-icon\n :class=\"{ 'is-active': isActive }\"\n name=\"ra-leftalignment\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Hamburger',\n props: {\n isActive: {\n type: Boolean,\n default: false\n }\n },\n emits: ['toggle-click'],\n methods: {\n toggleClick() {\n this.$emit('toggle-click')\n }\n }\n}\n</script>\n","<template>\n <el-container style=\"width: 100%;height: 100%\">\n <el-row class=\"aside\">\n <slot name=\"left-aside\" />\n </el-row>\n <el-main\n class=\"main\"\n style=\"margin: 0 10px\"\n >\n <slot name=\"main\" />\n </el-main>\n <el-aside\n class=\"aside\"\n width=\"350px\"\n style=\"padding: 20px\"\n >\n <slot name=\"right-aside\" />\n </el-aside>\n </el-container>\n</template>\n<style scoped>\n.main {\n border: 1px solid #ebebeb;\n border-radius: 3px;\n transition: .2s;\n min-height: calc(100vh - 50px);\n width: 100%;\n position: relative;\n}\n.aside {\n padding-top: 20px;\n border: 1px solid #ebebeb;\n border-radius: 3px;\n transition: .2s;\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n\n {\n type: 'icon-select',\n field: 'prefixIcon',\n label: '前置ICON'\n },\n {\n type: 'icon-select',\n field: 'suffixIcon',\n label: '后置ICON'\n },\n {\n type: 'switch',\n field: 'showCopy',\n label: '复制'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'number',\n name: '数字',\n default: {\n type: 'number',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'min',\n label: '最小值'\n },\n {\n type: 'number',\n field: 'man',\n label: '最大值'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'number-range',\n name: '数字区间',\n default: {\n type: 'number-range',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'unit',\n label: '单位'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'allowCreate',\n label: '允许创建'\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'radio',\n name: '单选框',\n default: {\n type: 'radio',\n label: 'label',\n field: 'field_name',\n options: []\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n formItems: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'value',\n label: '字段值'\n }\n ],\n repeat: true\n }\n },\n {\n type: 'input',\n field: 'default',\n label: '默认值'\n }\n ]\n}\n","export default {\n type: 'switch',\n name: '开关',\n default: {\n type: 'switch',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'activeText',\n label: '打开时的文字描述'\n },\n {\n type: 'input',\n field: 'inactiveText',\n label: '关闭时的文字描述'\n },\n {\n type: 'color',\n field: 'activeColor',\n label: '打开时的背景色'\n },\n {\n type: 'color',\n field: 'inactiveColor',\n label: '关闭时的背景色'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'code',\n name: 'Code',\n default: {\n type: 'code',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'json',\n default: {\n type: 'json',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'upload',\n name: '上传',\n default: {\n type: 'upload',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'template',\n name: '自定义组件',\n default: {\n type: 'template',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'icon-select',\n name: '图标选择器',\n default: {\n type: 'icon-select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'sub-form',\n name: '子表单',\n default: {\n type: 'sub-form',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'switch',\n field: 'repeat',\n label: '可重复'\n },\n {\n type: 'sub-form',\n field: 'form-items',\n label: '子表单控件',\n props: {\n options: {\n labelPosition: 'top'\n },\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'label',\n label: 'label'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'input', label: '文本框' }\n ]\n }\n ]\n }\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'checkbox',\n name: '复选框',\n default: {\n type: 'checkbox',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'max',\n label: '最大选中数'\n },\n {\n type: 'number',\n field: 'min',\n label: '最小选中数'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","import input from './ctrls/input'\nimport number from './ctrls/number'\nimport numberRange from './ctrls/number-range'\nimport select from './ctrls/select'\nimport radio from './ctrls/radio'\nimport xswitch from './ctrls/switch'\nimport code from './ctrls/code'\nimport json from './ctrls/json'\nimport upload from './ctrls/upload'\nimport template from './ctrls/template'\nimport iconSelect from './ctrls/icon-select'\nimport subForm from './ctrls/sub-form'\nimport checkbox from './ctrls/checkbox'\n\nconst ctrlMaps = {}\n\nexport function regCtrl(options) {\n ctrlMaps[options.type] = options\n}\n\nregCtrl(input)\nregCtrl(select)\nregCtrl(number)\nregCtrl(numberRange)\nregCtrl(xswitch)\nregCtrl(subForm)\nregCtrl(radio)\nregCtrl(checkbox)\nregCtrl(code)\nregCtrl(json)\nregCtrl(upload)\nregCtrl(iconSelect)\nregCtrl(template)\n\nexport const ctrls = ctrlMaps\n\nexport const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n },\n {\n type: 'switch',\n field: 'inline',\n label: '行布局'\n },\n {\n type: 'radio',\n field: 'labelPosition',\n label: 'label位置',\n options: [\n { value: 'right', label: '右' },\n { value: 'left', label: '左' },\n { value: 'top', label: '上' }\n ]\n },\n {\n type: 'input',\n field: 'labelWidth',\n label: 'label宽度',\n value: '100px'\n },\n {\n type: 'switch',\n field: 'showSubmitButton',\n label: '显示提交按钮',\n value: true\n },\n {\n type: 'sub-form',\n field: 'submitButton',\n label: '提交按钮',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案',\n value: '提交'\n },\n {\n type: 'select',\n field: 'type',\n label: '按钮类型',\n options: [\n { value: 'primary', label: 'primary' }\n ]\n }\n ]\n }\n },\n {\n type: 'switch',\n field: 'showCancelButton',\n label: '显示取消按钮',\n value: true\n },\n {\n type: 'sub-form',\n field: 'cancelButton',\n label: '取消按钮',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案',\n value: '取消'\n },\n {\n type: 'select',\n field: 'type',\n label: '按钮类型',\n options: [\n { value: 'primary', label: 'primary' }\n ]\n }\n ]\n }\n }\n ]\n}\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","<template>\n <dev-layout>\n <template #main>\n <v-form\n v-if=\"builderSchema.formItems\"\n ref=\"form\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n &nbsp;&nbsp;\n <VButton\n text=\"PageSchema\"\n type=\"modal\"\n >\n <JsonView :data=\"getSaveSchema\" />\n </VButton>\n </template>\n <template #right-aside>\n <el-form v-if=\"activeIndex\">\n <el-form-item label=\"控件类型\">\n <el-select v-model=\"currentCtrlType\">\n <el-option\n v-for=\"(item,index) in types\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </el-form-item>\n </el-form>\n <v-form\n :key=\"ctrlKey\"\n v-model=\"ctrlOptions\"\n v-bind=\"ctrlSchema\"\n />\n </template>\n </dev-layout>\n</template>\n<script>\nimport DevLayout from '../DevLayout.vue'\nimport { VForm, VBtn as VButton, JsonView } from '@okiss/vbtf'\nimport { compactObject } from '@okiss/utils'\nimport { cloneDeep, get, merge, set, unset } from 'lodash'\nimport { baseSchema, ctrls } from './form'\nimport { eventBus } from '../../../index'\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n\nconst typs = []\n\nObject.keys(ctrls).forEach(item => {\n typs.push({ value: item, label: ctrls[item].name })\n})\n\nconst sqlSchema = {\n options: {\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'sub-form',\n field: 'columns',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: cloneDeep(typs)\n },\n {\n type: 'input',\n field: 'label',\n label: '字段label'\n }\n ]\n }\n }\n ]\n}\n\nexport default {\n components: { DevLayout, VForm, VButton, JsonView },\n props: {\n schema: {\n type: Object,\n default: _ => {}\n }\n },\n data() {\n return {\n sqlOptions: {},\n sqlSchema: sqlSchema,\n baseSchema: baseSchema,\n activeTab: 'base',\n builderSchema: Object.assign(\n {},\n this.$props.schema,\n {\n options: {\n submitButton: false,\n cancelButton: false\n }\n }\n ),\n baseOptions: {},\n key: 0,\n ctrlKey: 0,\n activeCtrl: undefined,\n ctrlOptions: {},\n ctrlSchema: {},\n ctrlName: '',\n activeIndex: undefined,\n ctrlMap: ctrls,\n activeIndexReg: /(formItems)?\\[(\\d+)\\]/,\n tableStruct: '',\n activeName: '1',\n currentCtrlType: 'input',\n types: cloneDeep(typs)\n }\n },\n computed: {\n getSaveSchema() {\n return {\n formItems: this.builderSchema.formItems\n }\n }\n },\n watch: {\n baseOptions: {\n deep: true,\n immediate: true,\n handler(val) {\n const tmp = cloneDeep(val)\n if (val.showSubmitButton === false) {\n tmp.submitButton = false\n }\n if (val.cancelSubmitButton === false) {\n tmp.cancelButton = false\n }\n delete tmp.showSubmitButton\n delete tmp.showCancelButton\n if (Object.keys(tmp).length > 0) {\n this.builderSchema = merge(this.builderSchema, { options: tmp })\n this.key++\n }\n }\n },\n ctrlOptions: {\n deep: true,\n // immediate: true,\n handler(val) {\n const current = get(this.builderSchema, this.activeIndex)\n if (!current) {\n return\n }\n const type = current ? current.type : ''\n const ctrl = this.ctrlMap[type]\n const transData = ctrl.trans ? ctrl.trans(val) : val\n if (transData && Object.keys(transData).length > 0) {\n transData.type = type\n // update `builderSchema` nested data\n if (this.activeIndex.indexOf('[') > -1) {\n // format like: `headers[0]`\n const [_, key, keyIndex] = this.activeIndex.match(/(\\w+)\\[(\\d+)\\]/)\n _\n this.builderSchema[key][keyIndex] = { ...transData }\n } else {\n this.builderSchema[this.activeIndex] = transData\n }\n // set(this.builderSchema, this.activeIndex, transData)\n this.key++\n }\n }\n },\n currentCtrlType: {\n handler(val) {\n const ctrl = this.ctrlMap[val]\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n const sourceCtrlOptions = get(this.builderSchema, this.activeIndex)\n this.ctrlOptions = cloneDeep(sourceCtrlOptions)\n this.ctrlOptions.type = val\n this.ctrlKey++\n this.key++\n }\n }\n },\n beforeCreate() {\n eventBus.on('dev-action', ({ event, data }) => {\n this.onDevAction(data.type, data.devId)\n })\n },\n unmounted() {\n eventBus.off('dev-action')\n },\n methods: {\n onDevAction(btnType, path) {\n this.activeIndex = 'formItems' + path\n if (btnType === 'edit') {\n this.activeTab = 'ctrl'\n this.clicklabel()\n }\n if (btnType === 'del') {\n this.activeTab = 'base'\n this.removeOne()\n }\n this.ctrlKey++\n },\n push(name) {\n const target = 'formItems'\n this.ctrlOptions = {}\n this.builderSchema[target] = this.builderSchema[target] || []\n const ctrl = this.ctrlMap[name]\n this.activeCtrl = ctrl\n this.builderSchema[target].push(cloneDeep(ctrl.default))\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n this.key++\n this.activeIndex = `${target}[${this.builderSchema[target].length - 1}]`\n this.activeTab = 'ctrl'\n },\n removeOne() {\n unset(this.builderSchema, this.activeIndex)\n this.builderSchema = cloneDeep(compactObject(this.builderSchema))\n this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n const type = ctrlOptions.type\n const ctrl = this.ctrlMap[type]\n if (!ctrl) {\n this.$message({ type: 'warning', message: '尚未支持该组件的UI编辑' })\n return\n }\n this.currentCtrlType = type\n this.ctrlOptions = ctrlOptions\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: { formItems: this.builderSchema.formItems }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'date',\n name: '日期',\n default: {\n type: 'date',\n label: '时间',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'switch',\n field: 'showFilter',\n label: '搜索条件',\n value: true\n },\n {\n type: 'switch',\n field: 'showPagination',\n label: '页码',\n value: true\n },\n {\n type: 'switch',\n field: 'exportAble',\n label: '导出按钮'\n }\n ]\n}\n","export const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","export default {\n type: 'span',\n name: '文本',\n default: {\n type: 'span',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'switch',\n field: 'sortable',\n label: '排序'\n }\n ]\n}\n","export default {\n type: 'enum',\n name: '标签',\n default: {\n type: 'enum',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '映射',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n value: []\n }\n ],\n trans(val) {\n val.options = val.options || []\n if (!val.label) {\n val.label = '表头'\n }\n return val\n }\n}\n","export default {\n type: 'html',\n name: 'HTML',\n default: {\n type: 'html',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'icon',\n name: '图标',\n default: {\n type: 'icon',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'image',\n name: '图片',\n default: {\n type: 'image',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'JSON',\n default: {\n type: 'json',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'link',\n name: '链接',\n default: {\n type: 'link',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'rich',\n name: '富文本',\n default: {\n type: 'rich',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'tpl',\n name: '模板',\n default: {\n type: 'tpl',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'input',\n field: 'tpl',\n label: '模板',\n info: '例如 <code>姓名: {name} 年龄:{age}</code>'\n }\n ]\n}\n","import span from './span'\nimport xenum from './emum'\nimport html from './html'\nimport icon from './icon'\nimport image from './image'\nimport json from './json'\nimport link from './link'\nimport rich from './rich'\nimport tpl from './tpl'\n\nexport default {\n span,\n enum: xenum,\n html,\n icon,\n image,\n json,\n link,\n rich,\n tpl\n}\n","export default {\n type: 'jump',\n name: '跳转',\n default: {\n type: 'jump',\n target: '',\n text: '按钮'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: '跳转地址',\n info: '可以是本地路由, 也可以是url'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'api',\n name: '接口请求',\n default: {\n type: 'api',\n target: '',\n text: '请求'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n },\n {\n type: 'input',\n field: 'api',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'select',\n field: 'method',\n label: '请求类型',\n options: [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'DELETE', label: 'DELETE' },\n { value: 'PUT', label: 'PUT' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'form',\n name: '弹框表单',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","export default {\n type: 'table',\n name: '弹框列表',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","import jump from './jump'\nimport api from './api'\nimport form from './form'\nimport table from './table'\n\nexport default {\n jump,\n api,\n form,\n table\n}\n","<template>\n <dev-layout>\n <template #left-aside>\n <el-row style=\"width: 200px\">\n <el-row>\n <el-col\n class=\"title\"\n :data-id=\"22222\"\n >添加搜索条件</el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('input')\"\n >文本框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('select')\"\n >下拉框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('date')\"\n >日期</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加列表项</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.headers)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushHeaders(ctrlMap.headers[item].type)\"\n >{{ ctrlMap.headers[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加行按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushRowButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加常规按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushNormalButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加批量按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushBatchButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n </el-row>\n </template>\n <template #main>\n <v-table\n ref=\"table\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n &nbsp;&nbsp;\n <VButton\n text=\"PageSchema\"\n type=\"modal\"\n >\n <JsonView :data=\"getSaveSchema\" />\n </VButton>\n </template>\n <template #right-aside>\n <el-form v-if=\"activeIndex\">\n <el-form-item label=\"控件类型\">\n <el-select v-model=\"currentCtrlType\">\n <el-option\n v-for=\"(item,index) in types\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </el-form-item>\n </el-form>\n <v-form\n :key=\"ctrlKey\"\n v-model=\"ctrlOptions\"\n v-bind=\"ctrlSchema\"\n />\n </template>\n </dev-layout>\n</template>\n<script lang=\"ts\">\nimport DevLayout from '../DevLayout.vue'\nimport { VTable, VForm, VBtn as VButton, JsonView } from '@okiss/vbtf'\nimport { compactObject } from '@okiss/utils'\nimport input from './ctrls/input'\nimport select from './ctrls/select'\nimport date from './ctrls/date'\nimport { cloneDeep, merge, get, unset } from 'lodash'\nimport { baseSchema } from './table'\nimport { ctrlFormDefaultOptions } from '../base'\nimport columns from './columns'\nimport buttons from './btn'\nimport { eventBus } from '../../../index'\n\nexport default {\n components: { JsonView, DevLayout, VTable, VForm, VButton },\n props: {\n schema: {\n type: Object,\n default: _ => {}\n }\n },\n data() {\n const schema = toRefs(this.$props.schema)\n delete schema.listApi\n schema.list = [{}]\n return {\n baseSchema: baseSchema,\n activeTab: 'base',\n builderSchema: Object.assign(\n {},\n baseSchema,\n schema\n ),\n baseOptions: {},\n key: 0,\n ctrlKey: 0,\n activeCtrl: undefined,\n activeBrick: undefined,\n ctrlOptions: {},\n ctrlSchema: {},\n ctrlName: '',\n activeIndex: undefined,\n ctrlMap: {\n filter: { input, select, date },\n headers: columns,\n buttons: buttons\n },\n activeIndexReg: /(filter|headers|normalButton|batchButton|rowButton)?\\[(\\d+)\\]/,\n currentCtrlType: 'input'\n }\n },\n computed: {\n types() {\n const typs = []\n const ctrls = this.ctrlMap[this.activeBrick]\n Object.keys(ctrls).forEach(item => {\n typs.push({ value: item, label: ctrls[item].name })\n })\n\n return typs\n },\n getSaveSchema() {\n return {\n filter: this.builderSchema.filter,\n headers: this.builderSchema.headers,\n rowButton: this.builderSchema.rowButton,\n normalButton: this.builderSchema.normalButton,\n batchButton: this.builderSchema.batchButton\n }\n },\n currentBuilderSchema() {\n // @ts-ignore\n return this.$pinia?.state?.value?.app?.builderSchema\n }\n },\n watch: {\n baseOptions: {\n deep: true,\n immediate: true,\n handler(val) {\n this.builderSchema = merge(this.builderSchema, val)\n this.key++\n this.updateBuilderSchema()\n }\n },\n ctrlOptions: {\n deep: true,\n // immediate: true,\n handler(val) {\n const m = this.activeIndex.match(this.activeIndexReg)\n if (!m) {\n return\n }\n let type = this.builderSchema[m[1]][parseInt(m[2])].type\n\n if (m[1] === 'headers' && type === undefined) {\n type = 'span'\n }\n const ctrl = this.ctrlMap[this.activeBrick][type]\n if (!ctrl) {\n return\n }\n\n const transData = ctrl.trans ? ctrl.trans(val) : val\n if (transData && Object.keys(transData).length > 0) {\n transData.type = type\n\n // update `builderSchema` nested data\n if (this.activeIndex.indexOf('[') > -1) {\n // format like: `headers[0]`\n const [_, key, keyIndex] = this.activeIndex.match(/(\\w+)\\[(\\d+)\\]/)\n _\n this.builderSchema[key][keyIndex] = { ...transData }\n } else {\n this.builderSchema[this.activeIndex] = transData\n }\n this.key++\n }\n\n this.updateBuilderSchema()\n }\n },\n currentCtrlType: {\n handler(val) {\n const ctrl = this.ctrlMap[this.activeBrick][val]\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n const sourceCtrlOptions = get(this.builderSchema, this.activeIndex)\n sourceCtrlOptions.type = val\n const ctrlOptions = cloneDeep(sourceCtrlOptions)\n this.ctrlOptions = ctrlOptions\n if (ctrlOptions.text) {\n this.ctrlOptions.text = ctrlOptions.text\n this.ctrlOptions.props = ctrlOptions.props || {}\n }\n this.ctrlKey++\n this.key++\n this.updateBuilderSchema()\n }\n }\n },\n beforeCreate() {\n eventBus.on('dev-action', ({ event, data }) => {\n this.onDevAction(data.type, data.devId)\n })\n },\n unmounted() {\n eventBus.off('dev-action')\n },\n methods: {\n updateBuilderSchema() {\n // Using Pinia app store\n // @ts-ignore\n const appStore = (this as any).$pinia?._s?.get('app') || null\n if (appStore && appStore.setBuilderSchema) {\n appStore.setBuilderSchema(this.builderSchema)\n }\n },\n onDevAction(btnType, path) {\n this.activeIndex = path\n if (btnType === 'edit') {\n this.activeTab = 'ctrl'\n this.clicklabel()\n }\n if (btnType === 'del') {\n this.activeTab = 'base'\n this.removeOne()\n }\n this.ctrlKey++\n },\n pushFilter(name) {\n this.push(name, 'filter', 'filter', 'filter')\n },\n pushHeaders(name) {\n this.push(name, 'headers', 'headers', 'headers')\n },\n pushNormalButton(name) {\n this.push(name, 'normalButton', 'buttons', 'buttons')\n },\n pushBatchButton(name) {\n this.push(name, 'batchButton', 'buttons', 'buttons')\n },\n pushRowButton(name) {\n this.push(name, 'rowButton', 'buttons', 'buttons')\n },\n push(name, target, ctrlMapName, brick) {\n const ctrl = this.ctrlMap[ctrlMapName]\n if (!ctrl[name]) {\n this.$message({ type: 'warning', message: '尚未支持此组件的UI编辑' })\n return\n }\n this.activeCtrl = ctrl[name]\n this.activeBrick = brick\n this.ctrlOptions = {}\n this.builderSchema[target] = this.builderSchema[target] || []\n this.builderSchema[target].push(cloneDeep(ctrl[name].default))\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl[name].builder)\n })\n this.key++\n this.ctrlKey++\n this.activeIndex = `${target}[${this.builderSchema[target].length - 1}]`\n this.activeTab = 'ctrl'\n },\n removeOne() {\n unset(this.builderSchema, this.activeIndex)\n this.builderSchema = cloneDeep(compactObject(this.builderSchema))\n this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n this.activeBrick = m[1]\n if (['normalButton', 'batchButton', 'rowButton'].indexOf(m[1]) > -1) {\n this.activeBrick = 'buttons'\n }\n let type = this.builderSchema[m[1]][parseInt(m[2])].type\n if (m[1] === 'headers' && type === undefined) {\n type = 'span'\n }\n const ctrl = this.ctrlMap[this.activeBrick][type]\n if (!ctrl) {\n console.log(this.activeBrick, type, m)\n this.$message({ type: 'warning', message: '尚未支持此组件的UI编辑' })\n return\n }\n this.ctrlOptions = ctrlOptions\n this.currentCtrlType = type\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n const { filter, headers, rowButton, normalButton, batchButton } = this.currentBuilderSchema\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: {\n filter,\n headers,\n rowButton,\n normalButton,\n batchButton\n }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","<template>\n <VIcon\n name=\"ra-set\"\n @click=\"show = !show\"\n />\n <el-drawer\n v-model=\"show\"\n title=\"页面设计\"\n class=\"my-drawer\"\n :direction=\"direction\"\n size=\"90%\"\n destroy-on-close\n append-to-body\n >\n <form-builder\n v-if=\"pageSchema.formItems !== undefined\"\n :schema=\"pageSchema\"\n />\n <table-builder\n v-if=\"pageSchema.headers !== undefined\"\n :schema=\"pageSchema\"\n />\n </el-drawer>\n</template>\n<script setup>\nimport FormBuilder from '../../devtool/formBuilder/index.vue'\nimport TableBuilder from '../../devtool/tableBuilder/index.vue'\nimport { useAppStore } from '../../../store'\nimport { useRoute } from 'vue-router'\n\nconst show = ref(false)\nconst key = ref(1)\nconst direction = 'rtl'\nconst route = useRoute()\nconst appStore = useAppStore()\nconst pageSchema = computed(() => appStore.pages[route.path])\n</script>\n","import { computed, ref, watch } from 'vue'\nimport { useSettingsStore } from '../store'\n\nexport type AestheticMode = 'default' | 'theme1' | 'theme2' | 'theme3'\nconst AESTHETIC_STORAGE_KEY = 'oms-aesthetic-mode'\n\nconst aestheticMode = ref<AestheticMode>('theme1')\nlet initialized = false\n\nfunction detectInitialAesthetic(storeMode: unknown): 'default' | 'theme1' | 'theme2' | 'theme3' {\n // Priority 1: Explicit Developer Configuration (from store/OmsOptions)\n if (storeMode === 'default' || storeMode === 'theme1' || storeMode === 'theme2' || storeMode === 'theme3') {\n return storeMode as any\n }\n\n if (typeof window === 'undefined') {\n return 'theme1'\n }\n\n // Priority 2: User Preference from LocalStorage (Fallback)\n const cached = window.localStorage?.getItem(AESTHETIC_STORAGE_KEY)\n if (cached === 'default' || cached === 'theme1' || cached === 'theme2' || cached === 'theme3') {\n return cached as any\n }\n\n return 'theme1'\n}\n\nfunction persistAesthetic(mode: 'default' | 'theme1' | 'theme2' | 'theme3') {\n if (typeof window !== 'undefined') {\n window.localStorage?.setItem(AESTHETIC_STORAGE_KEY, mode)\n }\n}\n\nfunction applyAesthetic(mode: 'default' | 'theme1' | 'theme2' | 'theme3') {\n aestheticMode.value = mode\n if (typeof document !== 'undefined') {\n const html = document.documentElement\n // Remove all theme classes first\n html.classList.remove('aesthetic-default', 'aesthetic-theme2', 'aesthetic-theme3')\n\n if (mode === 'default') {\n html.classList.add('aesthetic-default')\n } else if (mode === 'theme2') {\n html.classList.add('aesthetic-theme2')\n } else if (mode === 'theme3') {\n html.classList.add('aesthetic-theme3')\n }\n // theme1 is the base, no class needed\n }\n persistAesthetic(mode)\n}\n\nexport function useAestheticMode() {\n const settingsStore = useSettingsStore()\n\n const setAestheticMode = (next: 'default' | 'theme1' | 'theme2' | 'theme3') => {\n if (settingsStore.aestheticMode !== next) {\n settingsStore.updateSettings({ aestheticMode: next } as any)\n } else {\n applyAesthetic(next)\n }\n }\n\n if (!initialized) {\n initialized = true\n const resolved = detectInitialAesthetic(settingsStore.aestheticMode)\n applyAesthetic(resolved)\n\n watch(\n () => settingsStore.aestheticMode,\n (mode) => {\n if (mode === 'default' || mode === 'theme1' || mode === 'theme2' || mode === 'theme3') {\n applyAesthetic(mode)\n }\n },\n { immediate: true }\n )\n }\n\n return {\n aestheticMode: computed(() => aestheticMode.value),\n isTheme1: computed(() => aestheticMode.value === 'theme1'),\n setAestheticMode,\n toggleAestheticMode: () => {\n // Cycle through all themes for verification\n const modes: ('default' | 'theme1' | 'theme2' | 'theme3')[] = ['default', 'theme1', 'theme2', 'theme3']\n const currentIndex = modes.indexOf(aestheticMode.value)\n const nextIndex = (currentIndex + 1) % modes.length\n setAestheticMode(modes[nextIndex])\n }\n }\n}\n","<template>\n <el-row ref=\"header\" class=\"navbar\" :style=\"navbarStyle\">\n <el-col :span=\"16\">\n <hamburger :is-active=\"sidebar.opened\" class=\"hamburger-container\" @toggleClick=\"toggleSideBar\" />\n <breadcrumb v-if=\"device !== 'mobile'\" class=\"breadcrumb-container\" />\n </el-col>\n <el-col :span=\"8\">\n <div class=\"right-content\">\n <div v-if=\"showPageJsonSchemaIcon\" class=\"right-item\">\n <PageEditor />\n </div>\n <div class=\"right-item-button\" style=\"padding: 0\">\n <v-button :buttons=\"nav\" />\n </div>\n <el-tooltip placement=\"bottom\" :content=\"isDark ? '切换为明亮模式' : '切换为暗黑模式'\">\n <div class=\"right-item theme-toggle\" role=\"button\" tabindex=\"0\" @click=\"toggleTheme\"\n @keydown.enter.prevent=\"toggleTheme\" @keydown.space.prevent=\"toggleTheme\">\n <el-icon>\n <component :is=\"isDark ? Moon : Sunny\" />\n </el-icon>\n </div>\n </el-tooltip>\n <el-dropdown class=\"right-item\" trigger=\"click\" @command=\"setAestheticMode\">\n <div class=\"aesthetic-picker\" role=\"button\" tabindex=\"0\">\n <el-icon>\n <Brush />\n </el-icon>\n </div>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"theme1\" :disabled=\"aestheticMode === 'theme1'\">薄荷绿 (Mint)</el-dropdown-item>\n <el-dropdown-item command=\"theme2\" :disabled=\"aestheticMode === 'theme2'\">皇家紫 (Purple)</el-dropdown-item>\n <el-dropdown-item command=\"theme3\" :disabled=\"aestheticMode === 'theme3'\">海洋蓝 (Blue)</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"aestheticMode === 'default'\" divided>原生样式\n (Native)</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-dropdown class=\"right-item\" trigger=\"click\">\n <div class=\"user-info\">\n <el-avatar class=\"user-avatar\" :size=\"32\" :src=\"currentAvatar || undefined\" @error=\"handleAvatarError\">{{\n avatarFallback }}</el-avatar>\n <span class=\"user-name\">{{ nickname || name }}</span>\n </div>\n <template #dropdown>\n <el-dropdown-menu class=\"user-dropdown\">\n <el-dropdown-item icon=\"oms-icon-index\" @click=\"$router.push('/')\">首页</el-dropdown-item>\n <el-dropdown-item divided icon=\"el-icon-switch-button\" @click=\"logout\">退出登录</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n </el-col>\n <el-drawer v-if=\"showJsonSchema\" :with-header=\"false\" size=\"50%\" />\n </el-row>\n</template>\n\n<script setup lang=\"ts\">\nimport Breadcrumb from './Breadcrumb/index.vue'\nimport Hamburger from './Hamburger/index.vue'\nimport PageEditor from './PageEditor.vue'\nimport { showEleByClassName, Cache, waterMarker } from '@okiss/utils'\nimport { VBtn as VButton } from '@okiss/vbtf'\nimport { useAppStore, useSettingsStore, useUserStore } from '../../../store'\nimport { useThemeMode } from '../../../composables/useThemeMode'\nimport { useAestheticMode } from '../../../composables/useAestheticMode'\nimport { computed, ref, onMounted, watch } from 'vue'\nimport { Sunny, Moon, Brush } from '@element-plus/icons-vue'\n\nconst appStore = useAppStore()\nconst settingsStore = useSettingsStore()\nconst userStore = useUserStore()\n\nconst showExportPop = ref(false)\nconst showJsonSchema = ref(false)\nconst json = ref('')\nconst key = ref(0)\nconst defaultAvatar = computed(() => settingsStore.defaultAvatar)\nconst sidebar = computed(() => appStore.sidebar)\nconst device = computed(() => appStore.device)\nconst avatar = computed(() => userStore.avatar)\nconst name = computed(() => userStore.name)\nconst nickname = computed(() => userStore.nickname)\nconst nav = computed(() => (settingsStore as any).nav)\nconst setting = computed(() => settingsStore)\nconst user = computed(() => userStore)\nconst showPageJsonSchemaIcon = computed(() => settingsStore.showPageJsonSchema || false)\nconst { isDark, toggleTheme } = useThemeMode()\nconst { aestheticMode, setAestheticMode } = useAestheticMode()\n\nconst navbarStyle = computed(() => {\n const envColor = setting.value.envColor?.[user.value.env]\n if (isDark.value) {\n return {\n background: 'linear-gradient(135deg, rgba(0, 176, 116, 0.15) 0%, rgba(2, 6, 23, 0.95) 100%)',\n borderBottom: '1px solid var(--border-color)',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.3)'\n }\n }\n if (envColor) {\n return {\n background: `linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(243, 244, 248, 0.9) 60%, ${envColor} 100%)`,\n borderBottom: '1px solid var(--border-color)',\n boxShadow: '0 1px 4px rgba(0, 0, 0, 0.05)'\n }\n }\n return {\n background: 'linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(243, 244, 248, 0.95) 70%, #ffffff 100%)',\n borderBottom: '1px solid var(--border-color)',\n boxShadow: '0 1px 10px rgba(0, 0, 0, 0.03)'\n }\n})\n\nonMounted(() => {\n showEleByClassName('el-submenu is-active')\n const noticeStr = getSetting('navBarNotice') || ''\n if (noticeStr.length > 0 && !getSetting('closeNavNotice') && showNotice(noticeStr)) {\n // @ts-ignore\n window?.App?.config?.globalProperties?.$notify({\n title: '提示',\n message: noticeStr,\n dangerouslyUseHTMLString: true,\n duration: 0,\n onClose: closeNavBarNotice\n })\n }\n if (setting.value.envColor?.[user.value.env]) {\n // @ts-ignore\n waterMarker({\n elRef: header.value.$el,\n waterMark: user.value.env,\n color: 'skyblue',\n size: '20'\n })\n }\n})\n\nconst header = ref()\nconst currentAvatar = ref('')\nconst avatarError = ref(false)\n\nwatch([avatar, defaultAvatar], () => {\n avatarError.value = false\n currentAvatar.value = avatar.value || defaultAvatar.value || ''\n}, { immediate: true })\n\nconst avatarFallback = computed(() => {\n const text = nickname.value || name.value || settingsStore.title || '用户'\n return text ? text.toString().trim().charAt(0).toUpperCase() : '用'\n})\nfunction toggleSideBar() { appStore.toggleSideBar() }\nasync function logout() {\n await userStore.logout()\n // @ts-ignore\n const route = window?.App?.config?.globalProperties?.$router?.currentRoute?.value\n location.reload(`${location.origin}/#/login?redirect=${route?.fullPath || '/'}`)\n}\nfunction getSetting(name: string): any { return (settingsStore as any)[name] }\nasync function closeNavBarNotice() {\n settingsStore.updateSettings({ closeNavNotice: true } as any)\n closeNotice(getSetting('navBarNotice'))\n}\nfunction showPopover() { showExportPop.value = true }\nfunction showNotice(text: string) {\n const key = 'dismiss:navbar_notice'\n if (!Cache.exist(key)) return true\n return Cache.get(key) !== text\n}\nfunction closeNotice(text: string) {\n const key = 'dismiss:navbar_notice'\n Cache.set(key, text)\n}\nfunction gotoMenuEdit() {\n // @ts-ignore\n const route = window?.App?.config?.globalProperties?.$router?.currentRoute?.value\n if (route?.meta?.pageId) {\n window.open(location.origin + location.pathname + '#/menu/' + route?.meta?.pageId)\n }\n}\n\nfunction handleAvatarError() {\n if (avatarError.value)\n return\n avatarError.value = true\n currentAvatar.value = ''\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.el-dropdown-link {\n cursor: pointer;\n color: #409eff;\n}\n\n.el-icon-arrow-down {\n font-size: 12px;\n}\n\n.navbar {\n display: flex;\n height: 50px;\n /*overflow: hidden;*/\n position: relative;\n background: #fff;\n box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);\n\n .hamburger-container {\n line-height: 50px;\n height: 100%;\n float: left;\n cursor: pointer;\n transition: background 0.3s;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .breadcrumb-container {\n float: left;\n }\n}\n\n.notice-setting {\n left: 50%;\n top: 50%;\n position: absolute;\n transform: translate(-50%, -50%);\n}\n\n.right-content {\n float: right;\n height: 100%;\n padding-right: 20px;\n color: rgba(0, 0, 0, 0.65);\n display: flex;\n\n .icon {\n font-size: 18px;\n\n &:focus {\n outline: none;\n }\n }\n\n .right-item {\n padding: 0 12px;\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .right-item {\n padding: 0 12px;\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .theme-toggle {\n justify-content: center;\n\n .el-icon {\n font-size: 18px;\n }\n }\n\n .aesthetic-picker {\n justify-content: center;\n display: flex;\n align-items: center;\n height: 100%;\n\n .el-icon {\n font-size: 18px;\n }\n }\n\n .right-item-button {\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n }\n\n .user-info {\n height: 50px;\n line-height: 50px;\n display: inline-flex;\n align-items: center;\n }\n\n .user-avatar {\n margin: 0 10px 0 0;\n color: #fff;\n background: #1890ff;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .user-name {\n vertical-align: middle;\n }\n}\n</style>\n","<template>\n <div\n class=\"sidebar-logo-container\"\n :class=\"{ collapse: collapse }\"\n >\n <transition name=\"sidebarLogoFade\">\n <router-link\n v-if=\"collapse\"\n key=\"collapse\"\n class=\"sidebar-logo-link\"\n to=\"/\"\n >\n <el-image\n v-if=\"showLogoImage\"\n :src=\"logo || ''\"\n fit=\"contain\"\n class=\"sidebar-logo\"\n @error=\"handleLogoError\"\n >\n <template #error>\n <div class=\"sidebar-logo-fallback\">{{ logoFallback }}</div>\n </template>\n </el-image>\n <template v-else>\n <div class=\"sidebar-logo-fallback\">{{ logoFallback }}</div>\n </template>\n <div class=\"sidebar-subtitle\">系统</div>\n </router-link>\n <router-link\n v-else\n key=\"expand\"\n class=\"sidebar-logo-link\"\n to=\"/\"\n >\n <el-image\n v-if=\"showLogoImage\"\n :src=\"logo || ''\"\n fit=\"contain\"\n class=\"sidebar-logo\"\n @error=\"handleLogoError\"\n >\n <template #error>\n <div class=\"sidebar-logo-fallback\">{{ logoFallback }}</div>\n </template>\n </el-image>\n <template v-else>\n <div class=\"sidebar-logo-fallback\">{{ logoFallback }}</div>\n </template>\n <h1 class=\"sidebar-title\">{{ title }}</h1>\n </router-link>\n </transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useSettingsStore } from '../../../../store'\nimport { computed, ref, watch } from 'vue'\n\ndefineProps<{ collapse: boolean }>()\nconst settings = useSettingsStore()\nconst title = computed(() => settings.title as any)\nconst logo = computed(() => settings.logo as any)\nconst logoError = ref(false)\n\nconst showLogoImage = computed(() => !!logo.value && !logoError.value)\nconst logoFallback = computed(() => {\n const text = title.value || 'OMS'\n return text ? text.toString().trim().charAt(0).toUpperCase() : 'O'\n})\n\nwatch(logo, () => {\n logoError.value = false\n}, { immediate: true })\n\nfunction handleLogoError() {\n logoError.value = true\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sidebarLogoFade-enter-active {\n transition: opacity 1.5s;\n}\n\n.sidebarLogoFade-enter,\n.sidebarLogoFade-leave-to {\n opacity: 0;\n}\n\n.sidebar-logo-container {\n position: relative;\n width: 100%;\n height: 50px;\n line-height: 50px;\n background: var(--sidebar-logo-bg, #ffffff);\n text-align: center;\n color: var(--sidebar-logo-text-color, #00b074);\n overflow: hidden;\n\n & .sidebar-logo-link {\n height: 100%;\n width: 100%;\n\n & .sidebar-logo {\n width: 32px;\n height: 32px;\n vertical-align: middle;\n margin-right: 12px;\n }\n\n & .sidebar-title {\n display: inline-block;\n margin: 0;\n color: var(--sidebar-logo-text-color, #00b074);\n font-weight: 700;\n line-height: 50px;\n font-size: 20px;\n font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;\n vertical-align: middle;\n }\n\n & .sidebar-logo-fallback {\n width: 32px;\n height: 32px;\n line-height: 32px;\n border-radius: 6px;\n background: rgba(0, 176, 116, 0.1);\n color: #00b074;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: 12px;\n }\n\n & .sidebar-subtitle {\n font-size: 12px;\n color: rgba(255, 255, 255, 0.78);\n }\n }\n\n &.collapse {\n .sidebar-logo {\n margin-right: 0px;\n }\n\n .sidebar-logo-fallback {\n margin-right: 0px;\n }\n }\n}\n</style>\n","<template>\n <component\n :is=\"compType(to)\"\n v-bind=\"linkProps(to)\"\n >\n <slot />\n </component>\n</template>\n\n<script>\nimport { isExternal } from '@okiss/utils'\n\nexport default {\n props: {\n to: {\n type: String,\n required: true\n },\n newTab: {\n type: Boolean,\n required: false\n }\n },\n methods: {\n compType(url) {\n if (isExternal(url) || this.newTab) {\n return 'a'\n } else {\n return 'router-link'\n }\n },\n linkProps(url) {\n if (isExternal(url)) {\n return {\n is: 'a',\n href: url,\n target: '_blank',\n rel: 'noopener'\n }\n }\n if (this.newTab) {\n const routeData = this.$router.resolve(url)\n return {\n is: 'a',\n href: routeData.href,\n target: '_blank',\n rel: 'noopener'\n }\n }\n return {\n is: 'router-link',\n to: url\n }\n }\n }\n}\n</script>\n","export default {\n computed: {\n // @ts-ignore\n device() {\n // Access device from Pinia state without importing\n // @ts-ignore\n return this.$pinia?.state?.value?.app?.device || 'desktop'\n }\n },\n mounted() {\n // In order to fix the click on menu on the ios device will trigger the mouseleave bug\n // https://github.com/PanJiaChen/vue-element-admin/issues/1135\n // @ts-ignore\n this.fixBugIniOS()\n },\n methods: {\n fixBugIniOS() {\n // @ts-ignore\n const $subMenu = this.$refs.subMenu\n if ($subMenu) {\n const handleMouseleave = $subMenu.handleMouseleave\n // @ts-ignore\n $subMenu.handleMouseleave = e => {\n // @ts-ignore\n if (this.device === 'mobile') {\n return\n }\n handleMouseleave(e)\n }\n }\n }\n }\n}\n","<template>\n <VIcon :name=\"meta.icon || 'ra-all'\" />\n <span class=\"menu-content\">{{ meta.title }}</span>\n</template>\n\n<script setup lang=\"ts\">\ndefineProps({\n meta: {\n type: Object,\n default: () => {\n return {\n icon: '',\n title: ''\n }\n }\n }\n})\n</script>\n","<template>\n <div\n v-if=\"item.hidden !== false\"\n class=\"menu-wrapper\"\n >\n <!-- 没有子菜单 -->\n <template v-if=\"item.meta && item.meta.menuType === 2\">\n <el-tooltip\n :disabled=\"!isCollapse\"\n effect=\"dark\"\n placement=\"right\"\n :content=\"item.meta?.title\"\n >\n <app-link\n v-if=\"item.meta\"\n :to=\"to\"\n :new-tab=\"item.meta.newTab\"\n >\n <el-menu-item\n :index=\"to\"\n :class=\"{ 'submenu-title-noDropdown': !isNest }\"\n @click=\"itemClick\"\n >\n <menu-content :meta=\"item.meta\" />\n </el-menu-item>\n </app-link>\n </el-tooltip>\n </template>\n <!-- 有子菜单 -->\n <el-tooltip\n v-else-if=\"item.meta && item.meta.menuType === 1\"\n :disabled=\"!isCollapse\"\n effect=\"dark\"\n placement=\"right\"\n :content=\"item.meta?.title\"\n >\n <el-sub-menu\n ref=\"subMenu\"\n :index=\"to\"\n :class=\"{ 'submenu-title-noDropdown': !isNest }\"\n >\n <template #title>\n <app-link\n v-if=\"item.redirect && item.redirect !== '#'\"\n :to=\"to\"\n >\n <menu-content :meta=\"item.meta\" />\n </app-link>\n <menu-content\n v-else\n :meta=\"item.meta\"\n />\n </template>\n <sidebar-item\n v-for=\"child in item.children\"\n :key=\"child.path\"\n :is-nest=\"true\"\n :item=\"child\"\n :to=\"getTo(child)\"\n class=\"nest-menu\"\n />\n </el-sub-menu>\n </el-tooltip>\n </div>\n</template>\n\n<script>\nimport AppLink from './Link.vue'\nimport FixiOSBug from './FixiOSBug'\nimport MenuContent from './MenuContent.vue'\nimport { Cache } from '@okiss/utils'\n\nexport default {\n name: 'SidebarItem',\n components: {\n AppLink,\n MenuContent\n },\n mixins: [FixiOSBug],\n props: {\n // route object\n item: {\n type: Object,\n required: true\n },\n isNest: {\n type: Boolean,\n default: false\n },\n to: {\n type: String,\n default: ''\n },\n isCollapse: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n itemClick() {\n Cache.remove('table_filter:' + this.$props.to)\n },\n getTo(child) {\n try {\n const to = this.$router.resolve(child.redirect ? child.redirect : child)\n return to.fullPath\n } catch (e) {\n console.error('路由解析错误')\n return '/'\n }\n }\n }\n}\n</script>\n","<template>\n <el-select\n v-model=\"selected\"\n filterable\n placeholder=\"搜索菜单...\"\n class=\"search-menu\"\n @change=\"onselected\"\n >\n <template\n v-for=\"group in filterRoutes\"\n :key=\"group.path\"\n >\n <template v-if=\"group.children !== undefined\">\n <el-option-group\n v-if=\"group.meta.menuType !== 0\"\n :key=\"group.path + '-'\"\n :label=\"group.meta.title\"\n >\n <template\n v-for=\"(item, index) in group.children\"\n :key=\"item.path\"\n >\n <el-option\n v-if=\"group.meta.menuType !== 0\"\n :label=\"(index === (group.children.length - 1) ? '└─' : '├─' )+ item.meta.title\"\n :value=\"getJumpPath(item)\"\n />\n </template>\n </el-option-group>\n </template>\n <template v-else>\n <el-option\n :label=\"'' + group.meta.title\"\n :value=\"getJumpPath(group)\"\n />\n </template>\n </template>\n </el-select>\n</template>\n<script setup lang=\"ts\">\nimport { cloneDeep } from 'lodash'\nimport { useUserStore } from '../../../../store'\nimport { useRouter } from 'vue-router'\nconst userStore = useUserStore()\n\nfunction filterHidden(arr: any[]) {\n return arr.filter((each: any) => {\n if (each.meta?.menuType === 0) {\n return false\n }\n if (each.children) {\n each.children = filterHidden(each.children)\n if (each.children.length === 0) {\n delete each.children\n }\n }\n return true\n })\n}\n\nconst selected = ref('')\nconst remoteRouter = computed(() => userStore.remoteRouter)\nconst router = useRouter()\n\nconst filterRoutes = computed(() => {\n let routes: any[] = []\n remoteRouter.value.forEach(item => { routes = routes.concat(cloneDeep(item.routes)) })\n return filterHidden(routes)\n})\n\nfunction getJumpPath(route: any) {\n let _route = route\n if (route.meta.menuType === 1 && route.children && route.children.length > 0) {\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n _route = route.children[i]\n break\n }\n }\n }\n return router.resolve(_route.redirect ? _route.redirect : _route).fullPath\n}\nfunction onselected(to: string) { router.push(to); selected.value = '' }\n</script>\n<style lang=\"scss\" scoped>\n.search-menu {\n width: 100%;\n padding: 15px 20px 0 20px;\n\n ::v-deep(.el-select__wrapper) {\n background-color: transparent;\n border: 1.5px solid var(--border-color);\n border-radius: 12px;\n box-shadow: none;\n transition: all 0.3s ease;\n\n &:hover {\n border-color: var(--sidebar-active-text-color);\n background-color: var(--sidebar-hover-bg);\n }\n }\n //::v-deep(.el-input__wrapper:hover) {\n // box-shadow: none;\n //}\n //::v-deep(.el-input__wrapper:focus) {\n // box-shadow: none;\n //}\n //::v-deep(.is-focus) {\n // border: none;\n // box-shadow: none;\n //}\n}\n\n.filter-tree {\n max-height: 500px;\n}\n</style>\n","import type { AxiosRequestConfig } from 'axios'\nimport type { RouteRecordRaw } from 'vue-router'\nimport { Component, Directive, Plugin } from 'vue'\nimport { MockApi } from './mock/types'\nimport { Sso } from './utils/sso'\n\nexport interface Nav {\n}\n\nexport type newSso = () => Sso\n\nexport interface Settings {\n title?: string,\n fixedHeader?: boolean,\n sidebarLogo?: boolean,\n logo?: string,\n closeNavNotice?: boolean,\n navBarNotice?: string,\n hasNewMessage?: boolean,\n showPageJsonSchema?: boolean,\n loginTips?: string,\n sso?: Record<string, newSso>,\n activeSsoKey?: string,\n ElementPlus?: Object,\n nav?: Nav[],\n whiteRoutes?: Array<string | RegExp>,\n tokenExpire?: number,\n defaultAvatar?: string,\n envColor?: Record<string, string>,\n serviceOffLineNotice?: string,\n formMutex?: boolean\n captcha?: boolean\n themeMode?: 'light' | 'dark'\n aestheticMode?: 'default' | 'theme1' | 'theme2' | 'theme3'\n}\n\nexport type UsePlugin = Plugin | [Plugin, any]\n\nexport interface OmsPlugin {\n use?: UsePlugin[],\n components?: Record<string, Component>,\n directives?: Record<string, Directive>,\n mockApis?: MockApi[],\n routes?: RouteRecordRaw[],\n // Pinia does not support dynamic registration like Vuex modules;\n // this field is deprecated and ignored in Pinia migration.\n // Kept for backward compatibility with type 'any'.\n storeModules?: Record<string, any>\n}\n\nexport interface OmsOptions {\n axios?: AxiosRequestConfig,\n settings?: Settings,\n plugins?: OmsPlugin[],\n mock?: boolean,\n form?: FormOptions\n}\n\nexport interface FormOptions {\n vsPath: string\n}\n\nexport interface LoginForm {\n username: string,\n password: string\n}\n\nexport interface LoginTicket {\n ticket: string,\n key: string\n}\n\nexport type ResourceIds = Array<Array<string>>\n\nexport interface UserInfo {\n id: number,\n name: string,\n token: string,\n avatar: string,\n nickname: string,\n role_ids: Array<string>,\n resource: ResourceIds\n env: string,\n website?: any\n}\n\nexport type Resource = Record<string, boolean | Record<string, boolean>>\n\n// eslint-disable-next-line no-unused-vars\nexport enum PageType { custom, list, form, customSchema, localComp, tree, report, entity }\n// eslint-disable-next-line no-unused-vars\nexport enum MenuType { hidden = 0, dir = 1, menu = 2, page = 3 }\n\nexport interface PageInfo {\n module_id: number,\n module_name?: string\n id: number,\n pid: number,\n name: string,\n path: string,\n icon?: string,\n view?: string,\n is_show: number,\n type: number,\n page_type: PageType,\n role?: string,\n children?: PageInfo[],\n code: string\n}\n\nexport interface RemoteModule {\n id: number,\n label: string,\n routes: PageInfo[]\n}\n\nexport interface OmsModule {\n id: number,\n label: string,\n routes: RouteRecordRaw[]\n}\n\nexport interface ImportMetaEnv {\n VITE_BASE_API?: string\n VITE_BASE?: string\n}\n","<template>\n <div :class=\"{ 'has-logo': showLogo }\">\n <logo\n v-if=\"showLogo\"\n :collapse=\"isCollapse\"\n />\n <el-scrollbar wrap-class=\"scrollbar-wrapper\">\n <search-menu v-if=\"!isCollapse\" />\n <el-menu\n :default-active=\"activeMenu\"\n :collapse=\"isCollapse\"\n :unique-opened=\"false\"\n :collapse-transition=\"false\"\n mode=\"vertical\"\n >\n <template\n v-for=\"(item, index) in routes\"\n :key=\"index + '-module'\"\n >\n <!-- <div v-if=\"item.routes.length > 0 && item.label\" class=\"menu-section\">{{ item.label }}</div>-->\n <sidebar-item\n v-for=\"route in filterRoute(item.routes)\"\n :key=\"route.path\"\n :item=\"route\"\n :to=\"$router.resolve(route.redirect ? route.redirect : route).fullPath\"\n :is-collapse=\"isCollapse\"\n />\n </template>\n </el-menu>\n </el-scrollbar>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Logo from './Logo.vue'\nimport SidebarItem from './SidebarItem.vue'\nimport SearchMenu from './SearchMenu.vue'\nimport { cloneDeep } from 'lodash'\nimport { MenuType } from '../../../../types'\nimport { showEleByClassName } from '@okiss/utils'\nimport { useAppStore, useUserStore, useSettingsStore } from '../../../../store'\nimport { useRouter, useRoute } from 'vue-router'\n\nconst appStore = useAppStore()\nconst userStore = useUserStore()\nconst settingsStore = useSettingsStore()\n\nconst sidebar = computed(() => appStore.sidebar)\nconst remoteRouter = computed(() => userStore.remoteRouter)\nconst customRouter = computed(() => userStore.customRouter)\n\nconst router = useRouter()\nconst route = useRoute()\n\nconst routes = computed(() => {\n let localRoutes: any[] = []\n router.options.routes.concat(customRouter.value || []).forEach(item => {\n if (item.path === '/') {\n localRoutes = localRoutes.concat(item.children || [])\n } else {\n localRoutes.push(item)\n }\n })\n return cloneDeep([\n { label: '', routes: localRoutes },\n ...remoteRouter.value\n ])\n})\n\nconst activeMenu = computed(() => {\n const m = route.matched\n for (let i = m.length - 1; i >= 0; i--) {\n const tmp = m[i]\n if (tmp.meta.menuType === MenuType.menu) {\n showActive()\n return router.resolve(tmp.redirect ? tmp.redirect : tmp).fullPath\n }\n }\n return ''\n})\n\nconst showLogo = computed(() => settingsStore.sidebarLogo)\nconst isCollapse = computed(() => !sidebar.value.opened)\n\nonMounted(() => showActive())\nfunction showActive() { showEleByClassName('is-active', 200) }\nfunction filterRoute(arr: any[]) {\n return arr.filter(item => [MenuType.dir, MenuType.menu].indexOf(item.meta.menuType) !== -1)\n .map(item => {\n item = Object.assign({}, item)\n if (item.children) item.children = filterRoute(item.children)\n return item\n })\n}\n</script>\n<style scoped>\n::v-deep(.el-scrollbar__wrap) {\n overflow: scroll;\n}\n\n.menu-section {\n height: 30px;\n font-size: 14px;\n display: table-cell;\n vertical-align: bottom;\n padding-left: 20px;\n color: #97a8be;\n padding-top: 5px;\n}\n</style>\n","<template>\n <section class=\"app-main\">\n <router-view :key=\"$route.fullPath + key\" />\n <el-backtop :bottom=\"50\" />\n </section>\n</template>\n\n<script setup>\nimport { useRoute, onBeforeRouteLeave } from 'vue-router'\nconst route = useRoute()\nconst include = []\nconst key = ref(0)\nonBeforeRouteLeave(() => {\n if (route.meta?.keepAlive) {\n !!include.indexOf(route.name) && include.push(route.name)\n }\n key.value++\n})\n</script>\n\n<style scoped>\n.app-main {\n /*50 = navbar */\n min-height: calc(100vh - 50px);\n width: 100%;\n position: relative;\n overflow: hidden;\n padding: 20px;\n}\n\n.fixed-header + .app-main {\n padding-top: 50px;\n}\n</style>\n","<template>\n <div :class=\"classObj\" class=\"app-wrapper\">\n <div v-if=\"device === 'mobile' && sidebar.opened\" class=\"drawer-bg\" @click=\"handleClickOutside\" />\n <Sidebar class=\"sidebar-container\" />\n <div class=\"main-container\">\n <div :class=\"{ 'fixed-header': fixedHeader }\">\n <Navbar />\n </div>\n <AppMain />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { Navbar, Sidebar, AppMain } from './components'\nimport { useEventListener } from '@vueuse/core'\nimport { useAppStore, useSettingsStore } from '../../store'\nimport { useRoute } from 'vue-router'\nimport { watch } from 'vue'\nimport { useAestheticMode } from '../../composables/useAestheticMode'\n\nconst { body } = document\nconst WIDTH = 992 // refer to Bootstrap's responsive design\n\nconst appStore = useAppStore()\nconst settingsStore = useSettingsStore()\nconst route = useRoute()\n\nconst sidebar = computed(() => appStore.sidebar)\nconst device = computed(() => appStore.device)\nconst fixedHeader = computed(() => settingsStore.fixedHeader)\n\nconst classObj = computed(() => {\n return {\n hideSidebar: !sidebar.value.opened,\n openSidebar: sidebar.value.opened,\n withoutAnimation: sidebar.value.withoutAnimation,\n mobile: device.value === 'mobile'\n }\n})\n\nconst isMobile = () => {\n const rect = body.getBoundingClientRect()\n return rect.width - 1 < WIDTH\n}\n\nconst resizeHandler = () => {\n if (!document.hidden) {\n const ismobile = isMobile()\n appStore.toggleDevice(ismobile ? 'mobile' : 'desktop')\n if (ismobile) appStore.closeSideBar({ withoutAnimation: true })\n }\n}\n\nresizeHandler()\n\nuseEventListener(window, 'resize', () => resizeHandler())\n\nwatch(route, () => {\n if (device.value === 'mobile' && sidebar.value.opened) {\n appStore.closeSideBar({ withoutAnimation: false })\n }\n})\n\nconst handleClickOutside = () => appStore.closeSideBar({ withoutAnimation: false })\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"../../styles/mixin\" as *;\n@use \"../../styles/variables\" as *;\n\n.app-wrapper {\n @include clearfix;\n\n &.mobile.openSidebar {\n position: fixed;\n top: 0;\n }\n}\n\n.drawer-bg {\n background: #000;\n opacity: 0.3;\n width: 100%;\n top: 0;\n height: 100%;\n position: fixed;\n z-index: 999;\n}\n\n.fixed-header {\n position: fixed;\n top: 0;\n right: 0;\n z-index: 9;\n width: calc(100% - #{$sideBarWidth});\n transition: width 0.28s;\n}\n\n.hideSidebar .fixed-header {\n width: calc(100% - 54px);\n}\n\n.mobile .fixed-header {\n width: 100%;\n}\n</style>\n","<template>\n <div class=\"login-container\">\n <div class=\"login-background\">\n <div class=\"shape shape-1\" />\n <div class=\"shape shape-2\" />\n <div class=\"shape shape-3\" />\n </div>\n\n <transition name=\"fade-scale\" appear>\n <div class=\"login-card-wrapper\">\n <el-card class=\"login-card\" shadow=\"never\">\n <div class=\"login-header\">\n <div class=\"logo-wrapper\">\n <img v-if=\"settingsStore.logo\" :src=\"settingsStore.logo\" alt=\"Logo\" class=\"logo-img\">\n <div v-else class=\"logo-fallback\">{{ logoFallback }}</div>\n </div>\n <h1 class=\"login-title\">{{ settingsStore.title || 'OMS' }}</h1>\n <p class=\"login-subtitle\">欢迎回来,请登录您的账户</p>\n </div>\n\n <el-form\n ref=\"loginForm\"\n :model=\"data\"\n class=\"login-form\"\n size=\"large\"\n @submit.prevent=\"login\"\n >\n <el-form-item prop=\"username\">\n <el-input\n v-model=\"data.username\"\n placeholder=\"用户名\"\n prefix-icon=\"User\"\n class=\"custom-input\"\n />\n </el-form-item>\n\n <el-form-item prop=\"password\">\n <el-input\n v-model=\"data.password\"\n type=\"password\"\n placeholder=\"密码\"\n show-password\n prefix-icon=\"Lock\"\n class=\"custom-input\"\n />\n </el-form-item>\n\n <el-form-item v-if=\"captcha\" prop=\"captcha\">\n <div class=\"captcha-wrapper\">\n <el-input\n v-model=\"data.captcha\"\n placeholder=\"验证码\"\n prefix-icon=\"Key\"\n class=\"custom-input captcha-input\"\n />\n <div class=\"captcha-img-box\" @click=\"onCaptchaClick\">\n <img\n :src=\"baseAPI + '/user/captcha?ts=' + ts\"\n title=\"点击刷新\"\n class=\"captcha-img\"\n >\n </div>\n </div>\n </el-form-item>\n\n <div v-if=\"tips\" class=\"login-tips\">\n <el-icon><InfoFilled /></el-icon>\n <span>{{ tips }}</span>\n </div>\n\n <el-button\n class=\"submit-button\"\n type=\"primary\"\n :loading=\"loading\"\n :disabled=\"!onReady\"\n native-type=\"submit\"\n @click=\"login\"\n >\n 登 录\n </el-button>\n\n <div v-if=\"Object.keys(settingsStore.sso || {}).length > 0\" class=\"sso-divider\">\n <span>其他登录方式</span>\n </div>\n\n <div class=\"sso-container\">\n <div id=\"sso-qrcode\" />\n <!-- SSO items logic conserved -->\n </div>\n </el-form>\n </el-card>\n <div class=\"login-footer\">\n &copy; {{ new Date().getFullYear() }} {{ settingsStore.title || 'OMS' }}. All rights reserved.\n </div>\n </div>\n </transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useRouter, useRoute } from 'vue-router'\nimport { useSettingsStore, useAppStore, useUserStore } from '../store'\nimport CryptoJS from 'crypto-js'\nimport { computed, ref } from 'vue'\nimport { User, Lock, Key, InfoFilled } from '@element-plus/icons-vue'\nimport { ElMessage } from 'element-plus'\n\nconst router = useRouter()\nconst route = useRoute()\nconst settingsStore = useSettingsStore()\nconst appStore = useAppStore()\nconst userStore = useUserStore()\n\nconst tips = computed(() => settingsStore.loginTips)\nconst captcha = computed(() => settingsStore.captcha)\nconst baseAPI = computed(() => appStore.baseURL)\n\nconst ts = ref(0)\nconst loading = ref(false)\n\nconst data = ref({\n username: '',\n password: '',\n captcha: '',\n sing: ''\n})\n\nconst logoFallback = computed(() => {\n const text = settingsStore.title || 'OMS'\n return text ? text.toString().trim().charAt(0).toUpperCase() : 'O'\n})\n\nconst onCaptchaClick = () => {\n ts.value++\n}\n\nconst onReady = computed(() => {\n return data.value.username.length > 0 &&\n data.value.password.length >= 4 &&\n (captcha.value ? data.value.captcha.length === 4 : true)\n})\n\nconst login = () => {\n if (loading.value) return\n if (!onReady.value) {\n ElMessage.error('请填写完整的登录信息')\n return\n }\n\n if (captcha.value) {\n data.value.sing = CryptoJS.MD5(`${data.value.username}${data.value.password}${data.value.captcha}`).toString()\n }\n\n loading.value = true\n userStore.login(data.value).then(res => {\n router.push({ path: route.query?.redirect as string || '/' })\n }).catch(e => {\n ts.value++\n // Error handling is handled by store/interceptors usually, but we refresh captcha\n }).finally(() => {\n loading.value = false\n })\n}\n</script>\n\n<style lang=\"scss\">\n.login-container {\n position: relative;\n width: 100vw;\n height: 100vh;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--app-bg);\n}\n\n.login-background {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n\n .shape {\n position: absolute;\n filter: blur(100px);\n opacity: 0.15;\n border-radius: 50%;\n z-index: 1;\n }\n\n .shape-1 {\n top: -10%;\n left: -10%;\n width: 40%;\n height: 40%;\n background: #00b074; // Mint\n animation: float 20s infinite alternate;\n }\n\n .shape-2 {\n bottom: -15%;\n right: -5%;\n width: 50%;\n height: 50%;\n background: #00b074;\n animation: float 25s infinite alternate-reverse;\n }\n}\n\n@keyframes float {\n 0% { transform: translate(0, 0) rotate(0deg); }\n 100% { transform: translate(10%, 10%) rotate(10deg); }\n}\n\n.login-card-wrapper {\n position: relative;\n z-index: 10;\n width: 100%;\n max-width: 460px;\n padding: 20px;\n}\n\n.login-card {\n background: var(--card-bg) !important;\n border: none !important;\n border-radius: 24px !important;\n padding: 48px 40px !important;\n box-shadow: var(--card-shadow) !important;\n\n .el-card__body {\n padding: 0;\n }\n}\n\n.login-header {\n text-align: center;\n margin-bottom: 40px;\n\n .logo-wrapper {\n margin-bottom: 24px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .logo-img {\n height: 72px;\n width: auto;\n }\n\n .logo-fallback {\n width: 72px;\n height: 72px;\n background: #e6f7f1;\n color: #00b074;\n font-size: 36px;\n font-weight: 800;\n border-radius: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n .login-title {\n font-size: 32px;\n font-weight: 800;\n color: var(--sidebar-text-color);\n margin: 0 0 8px 0;\n letter-spacing: -0.02em;\n }\n\n .login-subtitle {\n font-size: 15px;\n color: var(--sidebar-text-color);\n opacity: 0.7;\n margin: 0;\n }\n}\n\n.custom-input {\n .el-input__wrapper {\n background-color: var(--sidebar-hover-bg) !important;\n box-shadow: none !important;\n border: 1.5px solid var(--border-color) !important;\n border-radius: 16px !important;\n padding: 0 16px !important;\n transition: all 0.3s ease;\n\n &:hover {\n border-color: var(--sidebar-active-text-color) !important;\n background-color: var(--card-bg) !important;\n }\n\n &.is-focus {\n border-color: var(--sidebar-active-text-color) !important;\n background-color: var(--card-bg) !important;\n box-shadow: 0 0 0 4px rgba(0, 176, 116, 0.1) !important;\n }\n }\n\n .el-input__inner {\n color: var(--sidebar-text-color) !important;\n height: 56px !important;\n\n &::placeholder {\n color: #b0b0b0 !important;\n }\n }\n\n .el-input__prefix-icon {\n color: #00b074 !important;\n font-size: 20px;\n }\n}\n\n.captcha-wrapper {\n display: flex;\n gap: 12px;\n align-items: stretch;\n\n .captcha-input {\n flex: 1;\n }\n\n .captcha-img-box {\n width: 140px;\n height: 56px;\n background: var(--sidebar-hover-bg);\n border-radius: 16px;\n overflow: hidden;\n cursor: pointer;\n border: 1.5px solid var(--border-color);\n transition: all 0.3s ease;\n\n &:hover {\n border-color: var(--sidebar-active-text-color);\n }\n\n .captcha-img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n}\n\n.login-tips {\n display: flex;\n align-items: center;\n gap: 10px;\n color: #00b074;\n font-size: 14px;\n margin-bottom: 28px;\n padding: 14px 18px;\n background: #e6f7f1;\n border-radius: 14px;\n font-weight: 500;\n}\n\n.submit-button {\n width: 100%;\n height: 58px !important;\n border-radius: 18px !important;\n font-size: 17px !important;\n font-weight: 700 !important;\n background: #00b074 !important;\n box-shadow: 0 8px 20px rgba(0, 176, 116, 0.25) !important;\n border: none !important;\n margin-top: 16px;\n transition: all 0.3s ease !important;\n\n &:hover:not(:disabled) {\n transform: translateY(-2px);\n box-shadow: 0 12px 25px rgba(0, 176, 116, 0.35) !important;\n background: #009663 !important;\n }\n\n &:active:not(:disabled) {\n transform: translateY(0);\n }\n \n &:disabled {\n opacity: 0.5;\n background: #b0b0b0 !important;\n box-shadow: none !important;\n }\n}\n\n.sso-divider {\n display: flex;\n align-items: center;\n margin: 40px 0 20px;\n color: #b0b0b0;\n font-size: 14px;\n\n &::before,\n &::after {\n content: \"\";\n flex: 1;\n height: 1px;\n background: var(--border-color);\n }\n\n span {\n padding: 0 16px;\n }\n}\n\n.login-footer {\n text-align: center;\n margin-top: 40px;\n color: #b0b0b0;\n font-size: 13px;\n font-weight: 500;\n}\n</style>\n","<template>\n <div class=\"not-found\">\n <svg\n width=\"380px\"\n height=\"500px\"\n viewBox=\"0 0 837 1045\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\"\n >\n <g\n id=\"Page-1\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n sketch:type=\"MSPage\"\n >\n <path\n id=\"Polygon-1\"\n d=\"M353,9 L626.664028,170 L626.664028,487 L353,642 L79.3359724,487 L79.3359724,170 L353,9 Z\"\n stroke=\"#007FB2\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-2\"\n d=\"M78.5,529 L147,569.186414 L147,648.311216 L78.5,687 L10,648.311216 L10,569.186414 L78.5,529 Z\"\n stroke=\"#EF4A5B\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-3\"\n d=\"M773,186 L827,217.538705 L827,279.636651 L773,310 L719,279.636651 L719,217.538705 L773,186 Z\"\n stroke=\"#795D9C\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-4\"\n d=\"M639,529 L773,607.846761 L773,763.091627 L639,839 L505,763.091627 L505,607.846761 L639,529 Z\"\n stroke=\"#F2773F\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-5\"\n d=\"M281,801 L383,861.025276 L383,979.21169 L281,1037 L179,979.21169 L179,861.025276 L281,801 Z\"\n stroke=\"#36B455\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n </g>\n </svg>\n <div class=\"message-box\">\n <h1>404</h1>\n <p>Page not found</p>\n <div class=\"buttons-con\">\n <div class=\"action-link-wrap\">\n <!--<a onclick=\"history.back(-2)\" class=\"link-button link-back-button\">Go Back</a>-->\n <a\n href=\"\"\n class=\"link-button\"\n >Go to Home Page</a>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'NotFoundPage'\n}\n</script>\n\n<style scoped>\n.not-found {\n background-color: #2F3242;\n width: 100%;\n height: 100%;\n}\n\nsvg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -400px;\n}\n\n.message-box {\n height: 200px;\n width: 380px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: 50px;\n color: #FFF;\n font-family: Roboto;\n font-weight: 300;\n}\n\n.message-box h1 {\n font-size: 60px;\n line-height: 46px;\n margin-bottom: 40px;\n}\n\n.buttons-con .action-link-wrap {\n margin-top: 40px;\n}\n\n.buttons-con .action-link-wrap a {\n background: #68c950;\n padding: 8px 25px;\n border-radius: 4px;\n color: #FFF;\n font-weight: bold;\n font-size: 14px;\n transition: all 0.3s linear;\n cursor: pointer;\n text-decoration: none;\n margin-right: 10px\n}\n\n.buttons-con .action-link-wrap a:hover {\n background: #5A5C6C;\n color: #fff;\n}\n\n#Polygon-1, #Polygon-2, #Polygon-3, #Polygon-4, #Polygon-4, #Polygon-5 {\n animation: float 1s infinite ease-in-out alternate;\n}\n\n#Polygon-2 {\n animation-delay: .2s;\n}\n\n#Polygon-3 {\n animation-delay: .4s;\n}\n\n#Polygon-4 {\n animation-delay: .6s;\n}\n\n#Polygon-5 {\n animation-delay: .8s;\n}\n\n@keyframes float {\n 100% {\n transform: translateY(20px);\n }\n}\n\n@media (max-width: 450px) {\n svg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -190px;\n }\n\n .message-box {\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: -190px;\n text-align: center;\n }\n}\n</style>\n","import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'\nimport Dashboard from '../scaffold/dashboard.vue'\nimport Layout from '../scaffold/layout/index.vue'\nimport Login from '../scaffold/login.vue'\nimport NotFoundPage from '../scaffold/404.vue'\n\nconst routes: RouteRecordRaw[] = [\n {\n path: '/',\n component: Layout,\n redirect: '/dashboard',\n name: 'Root',\n meta: {\n menuType: 1\n },\n children: [\n {\n path: 'dashboard',\n name: 'Dashboard',\n component: Dashboard,\n meta: { title: 'Dashboard', icon: 'el-icon-help', menuType: 2, keepAlive: true },\n }\n ]\n },\n {\n path: '/login',\n component: Login,\n meta: { title: '用户登录', menuType: 0 },\n hidden: true\n },\n {\n path: '/404',\n component: NotFoundPage,\n meta: { menuType: 0 },\n hidden: true\n }\n]\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes\n})\n\nexport default router\n","import { Router } from 'vue-router'\nimport NProgress from 'nprogress'\nimport 'nprogress/nprogress.css'\nimport { pinia, useUserStore } from '../../store'\n\nNProgress.configure({ showSpinner: false })\n\nexport default function(router: Router) {\n router.beforeEach((to, from, next) => {\n NProgress.start()\n to.preHash = location.hash.replace('#', '')\n next()\n })\n router.afterEach((to) => {\n const user = useUserStore(pinia)\n if (to.matched.length > 0) {\n user.updateState({\n key: 'path',\n value: to.matched[to.matched.length - 1].path.replace('(\\\\d+)', '')\n })\n }\n NProgress.done()\n })\n}\n","import { pinia, useUserStore, useSettingsStore } from '../../store'\n\nexport function isLodeRemoteRoutes(): boolean {\n return useUserStore(pinia).isLodeRemoteRoutes\n}\n\nexport function getWhiteRoutes(): Array<string | RegExp> {\n return useSettingsStore(pinia).whiteRoutes || []\n}\n\nexport function getToken() {\n return useUserStore(pinia).token\n}\n","import { NavigationGuardNext } from 'vue-router'\nimport type { LoginTicket } from '@/types'\n\nexport type SsoType = 'jump' | 'qrcode'\n\nexport interface Sso {\n flag(): LoginTicket | undefined,\n\n type: SsoType,\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void,\n\n showQrCode(): void\n\n qrCodeUrl?: string,\n appid?: string,\n style?: string,\n redirectUri?: string,\n elId?: string\n}\n\nexport class BaseSso implements Sso {\n type: SsoType = 'qrcode'\n\n flag(): LoginTicket | undefined {\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void {\n next(path)\n }\n\n showQrCode(): void {\n }\n}\n","import { NavigationGuardNext } from 'vue-router'\nimport { BaseSso, SsoType } from './index'\nimport { getQueryParam } from '@okiss/utils'\nimport type { LoginTicket } from '@/types'\n\nexport class Github extends BaseSso {\n type: SsoType = 'jump'\n\n client_id: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n this.client_id = options.client_id\n }\n\n flag(): LoginTicket | undefined {\n const code = getQueryParam('code')\n if (code) {\n return {\n ticket: code,\n key: 'github'\n }\n }\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string) {\n const redirect = encodeURIComponent(location.href)\n location.replace(`https://github.com/login/oauth/authorize?client_id=${this.client_id}&redirect_uri${redirect}`)\n }\n}\n","import { getQueryParam, obj2Param, strVarReplace, createIFrame } from '@okiss/utils'\nimport { BaseSso, SsoType } from './index'\nimport type { LoginTicket } from '@/types'\n\nexport class DingTalk extends BaseSso {\n type: SsoType = 'qrcode'\n qrCodeUrl = 'https://login.dingtalk.com/login/qrcode.htm?goto={goto}&style={style}'\n reloadUrl = 'https://oapi.dingtalk.com/connect/oauth2/sns_authorize?response_type=code&scope=snsapi_login&state=&appid={appid}&redirect_uri={redirect_uri}'\n\n elId: string = ''\n appid: string = ''\n iframe: HTMLIFrameElement = new HTMLIFrameElement()\n redirectUri: string = ''\n style: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n }\n\n flag(): LoginTicket | undefined {\n const code = getQueryParam('code')\n if (code) {\n return {\n ticket: code,\n key: 'dingtalk'\n }\n }\n return undefined\n }\n\n showQrCode(): void {\n const getReloadUrl = (extra?: Record<string, any>) => {\n const data = {\n appid: this.appid,\n redirect_uri: encodeURIComponent(this.redirectUri)\n }\n return strVarReplace(this.reloadUrl, data) + '&' + obj2Param(extra || {})\n }\n const getQrCodeUrl = () => {\n const data = {\n goto: encodeURIComponent(getReloadUrl()),\n style: encodeURIComponent(this.style)\n }\n return strVarReplace(this.qrCodeUrl, data)\n }\n const onScanSuccess = (event: any) => {\n const { origin, data } = event\n if (origin === 'https://login.dingtalk.com') {\n window.location.href = getReloadUrl({ loginTmpCode: data })\n }\n }\n\n this.iframe.src = getQrCodeUrl()\n createIFrame({ elId: this.elId, attrs: this.iframe })\n if (typeof window.addEventListener !== 'undefined') {\n window.addEventListener(\n 'message',\n event => onScanSuccess(event),\n false\n )\n // @ts-ignore\n } else if (typeof window.attachEvent !== 'undefined') {\n // @ts-ignore\n window.attachEvent('onmessage', event => this.onScanSuccess(event))\n }\n }\n}\n","import { BaseSso } from './base'\nimport type { SsoType, Sso } from './base'\nimport { Github } from './github'\nimport { DingTalk } from './dingtalk'\nimport { pinia, useSettingsStore } from '../../store'\nimport { newSso } from '../../types'\nimport { merge } from 'lodash'\n\nexport { BaseSso, SsoType, Sso, Github, DingTalk }\n\nconst defaultSso: Record<string, newSso> = {}\n\nexport function allSso(): Record<string, newSso> {\n return merge(useSettingsStore(pinia).sso || {}, defaultSso)\n}\n\nexport default function(): Sso | undefined {\n const sso = allSso()\n const key = useSettingsStore(pinia).activeSsoKey || ''\n console.log(sso, key)\n const active = sso[key]\n if (active !== undefined) {\n return active()\n }\n return undefined\n}\n","import { Router } from 'vue-router'\nimport { pinia, useUserStore } from '../../store'\nimport { getToken, getWhiteRoutes } from './func'\nimport sso from '../../utils/sso'\nimport { isObject } from 'lodash'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, form, next) => {\n if (getWhiteRoutes().indexOf(to.path) !== -1) {\n next()\n return\n }\n\n const token = getToken()\n if (token) {\n if (to.query?.redirect) {\n next(to.query?.redirect as string)\n } else {\n next()\n }\n return\n }\n const redirect = to.query.redirect || to.path\n\n const s = sso()\n if (!s) {\n next(`/login?redirect=${redirect}`)\n return\n }\n\n const flag = s.flag()\n const user = useUserStore(pinia)\n if (flag && await user.login(isObject(flag) ? flag : { ticket: flag })) {\n next()\n return\n }\n s.jumpToLoginPage(next, `/login?redirect=${redirect}`)\n })\n}\n","<template>\n <div class=\"loading preloader\">\n <div class=\"preloader-inner\" />\n </div>\n</template>\n<style>\n.loading {\n width: 100%;\n min-height: calc(100vh - 50px);\n text-align: center;\n line-height: calc(100vh - 50px);\n}\n</style>\n","<template>\n <div>\n <el-alert\n v-if=\"hasNotice\"\n v-bind=\"noticeProps\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VNotice',\n props: {\n dataApi: {\n type: String,\n default: ''\n },\n notice: {\n type: Object,\n default: () => {}\n }\n },\n data() {\n return {\n noticeProps: {},\n hasNotice: false\n }\n },\n mounted() {\n console.log('dataApi', !!this.$props.dataApi)\n if (this.$props.dataApi) {\n this.$http.get(this.$props.dataApi).then(({ data }) => {\n this.noticeProps = data\n this.hasNotice = !!data\n })\n return\n } else {\n this.hasNotice = Object.keys(this.$props.notice).length > 0\n this.noticeProps = this.$props.notice\n }\n }\n}\n</script>\n","<template>\n <el-alert\n v-if=\"owners.length > 0\"\n :title=\"`该页面功能对应开发: [ ${owners.join(', ')} ] 有问题可直接企微反馈`\"\n type=\"info\"\n style=\"margin: 0 0 20px 0\"\n :closable=\"false\"\n />\n <template v-if=\"env === 'prod' && serviceOffLine\">\n <div\n class=\"offline-notice\"\n v-html=\"serviceOffLine === true ? setting.serviceOffLineNotice : serviceOffLine\"\n />\n </template>\n <template v-else>\n <VNotice\n v-if=\"haveNotice\"\n :notice=\"notice\"\n style=\"margin: 0 0 20px 0\"\n :data-api=\"noticeApi\"\n />\n <VLoading v-if=\"loading\" />\n <template v-else>\n <slot v-bind=\"schema\" />\n </template>\n </template>\n\n</template>\n<script lang=\"ts\" setup>\nimport VLoading from './VLoading.vue'\nimport { isObject, isString, isArray } from '@okiss/utils'\nimport VNotice from './notice/VNotice.vue'\nimport { useAppStore, useSettingsStore, useUserStore } from '../store'\nimport { useRoute } from 'vue-router'\n\nconst props = withDefaults(defineProps<{ schemaHandler?: (val: any, project: string) => any, schemaApi?: string }>(), {\n schemaHandler: (val: any) => val,\n schemaApi: ''\n})\nconst appStore = useAppStore(); const settingsStore = useSettingsStore(); const userStore = useUserStore()\nconst route = useRoute()\nconst loading = ref(true)\nconst haveNotice = ref(false)\nconst notice = ref<any>({})\nconst noticeApi = ref('')\nconst schema = ref<any>({})\nconst owners = ref<string[]>([])\nconst serviceOffLine = ref<boolean | string>(false)\n\nconst env = computed(() => userStore.env)\nconst setting = computed(() => settingsStore)\n\nonBeforeMount(() => {\n const token = route.path.split('/').filter(item => item)\n const project = token.length > 1 ? token.slice(0, token.length - 1).join('/') : token[0]\n const api = '/schema' + (route.meta as any).path\n const conf = { params: route.params }\n // @ts-ignore\n const http = window?.App?.config?.globalProperties?.$http\n http.get(props.schemaApi || api, conf).then(({ data }) => {\n loading.value = false\n if (isObject(data)) {\n if (data.notice !== undefined) {\n haveNotice.value = true\n if (isString(data.notice)) {\n notice.value = { title: data.notice }\n } else if (isObject(data.notice)) {\n notice.value = data.notice\n // @ts-ignore\n noticeApi.value = data.notice.noticeApi\n }\n delete data['notice']\n }\n owners.value = data.ownerNames || []\n serviceOffLine.value = data.serviceOffLine || false\n }\n schema.value = props.schemaHandler(data, project)\n appStore.SET_PAGE_JSON_SCHEMA({ page: route.path, json: schema.value })\n })\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.offline-notice {\n text-align: center;\n color: red;\n font-size: 250%;\n height: 300px;\n line-height: 300px;\n}\n</style>\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <template #default=\"slotProps\">\n <VTable v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup name=\"ScaffoldName\">\nimport { VTable } from '@okiss/vbtf'\nimport PageLoad from '../components/PageLoad.vue'\nimport { merge } from 'lodash'\n\nconst schemaHandler = (schema, project) => {\n if (schema.orderBy) {\n const defaultSort = {\n prop: schema.orderBy.field,\n order: schema.orderBy.mod === 'desc' ? 'descending' : 'ascending'\n }\n schema.tableProps = merge(schema.tableProps, { defaultSort })\n }\n const allowedProps = Object.keys(VTable.props)\n Object.keys(schema).forEach(key => {\n if (allowedProps.indexOf(key) === -1) {\n delete schema[key]\n }\n })\n if (schema.listApi === undefined) {\n schema.listApi = `/${project}/list`\n }\n\n return schema\n}\n</script>\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <template #default=\"slotProps\">\n <VForm v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup name=\"ScaffoldForm\">\nimport { VForm } from '@okiss/vbtf'\nimport PageLoad from '../components/PageLoad.vue'\nimport { strVarReplace } from '@okiss/utils'\nimport { merge } from 'lodash'\nimport { useRoute, useRouter } from 'vue-router'\nimport { onMounted, onUnmounted } from 'vue'\nimport http from '../utils/request'\nimport { ElMessageBox } from 'element-plus'\nimport { useSettingsStore } from '../store'\n\nconst route = useRoute()\nconst router = useRouter()\n\nconst schemaHandler = (schema, project) => {\n const allowedProps = Object.keys(VForm.props)\n Object.keys(schema).forEach(key => {\n if (allowedProps.indexOf(key) === -1) {\n delete schema[key]\n return\n }\n\n if (/.*Api$/.test(key)) {\n schema[key] = strVarReplace(schema[key], route.params)\n }\n })\n\n if (schema.saveApi === undefined) {\n if (route.params.id !== undefined) {\n schema.saveApi = `/${project}/update/${route.params.id}`\n if (!schema.getApi) {\n schema.getApi = `/${project}/get/${route.params.id}`\n }\n } else {\n delete schema['getApi']\n schema.saveApi = `/${project}/create`\n }\n }\n\n schema = merge({\n saveApi: project + '/save',\n afterSubmit: 'goback',\n afterReset: 'goback',\n mod: route.params.id ? 'edit' : 'create'\n }, schema)\n\n return schema\n}\n\nconst mutexId = ref(0)\nconst mutex = () => {\n http.request({\n url: '/form_mutex',\n method: 'get',\n params: {\n path: route.fullPath\n }\n }).then(res => {\n console.log(res)\n if (res.data) {\n clearInterval(mutexId.value)\n ElMessageBox.alert(`${res.data}`, '操作提醒', {\n showClose: false,\n showCancelButton: true,\n confirmButtonText: '返回',\n cancelButtonText: '刷新',\n callback: (action) => {\n if (action === 'cancel') {\n location.reload()\n } else {\n goBack()\n }\n }\n })\n }\n })\n}\n\nonMounted(() => {\n const settings = useSettingsStore()\n if (route.params.id !== undefined && settings.formMutex) {\n mutex()\n mutexId.value = setInterval(mutex, 2000)\n }\n})\nonUnmounted(() => {\n clearInterval(mutexId.value)\n})\n\nfunction goBack() {\n if (route.query?.goback) {\n router.push(route.query?.goback)\n } else {\n history.state.back && history.back()\n }\n}\n</script>\n","<template>\n <el-row\n class=\"tree-box\"\n :gutter=\"20\"\n >\n <el-col\n :span=\"8\"\n class=\"tree-tree\"\n >\n <el-card shadow=\"never\">\n <template #header>\n <div class=\"card-header\">\n <span>列表</span>\n <el-button\n type=\"text\"\n @click=\"() => appendNew()\"\n >添加</el-button>\n </div>\n </template>\n <el-tree\n v-if=\"(treeData || []).length > 0\"\n style=\"height: 100vh\"\n :data=\"treeData\"\n node-key=\"id\"\n v-bind=\"localTreeProps\"\n draggable\n :allow-drag=\"allowDrap\"\n :allow-drop=\"allowDrop\"\n @node-drag-end=\"handleDragEnd\"\n >\n <template #default=\"{ node, data }\">\n <span class=\"tree-action\">\n <span v-if=\"data[localTreeProps.props.label]\">{{ data[localTreeProps.props.label] }}</span>\n <span\n v-else\n style=\"color: #E6A23C\"\n >请在右侧表单中修改 --> </span>\n <span>\n <el-button\n v-if=\"data[localTreeProps.props.label]\"\n class=\"button\"\n type=\"text\"\n @click=\"() => onclick(data)\"\n >编辑</el-button>\n <el-button\n v-if=\"canAppend(data, node)\"\n class=\"button\"\n type=\"text\"\n @click=\"() => append(data, node)\"\n >添加</el-button>\n <el-button\n v-if=\"data.children === undefined || data.children.length === 0\"\n class=\"button\"\n type=\"text\"\n @click=\"() => remove(data)\"\n >删除</el-button>\n </span>\n </span>\n </template>\n </el-tree>\n </el-card>\n </el-col>\n <el-col\n :span=\"16\"\n class=\"tree-form\"\n >\n <el-card\n v-if=\"type\"\n shadow=\"never\"\n >\n <template #header>\n <div class=\"card-header\">\n <span>{{ formType }}</span>\n </div>\n </template>\n <v-form\n :key=\"formkey\"\n v-model=\"formData\"\n v-bind=\"formProps\"\n @submit=\"submit\"\n />\n </el-card>\n </el-col>\n </el-row>\n</template>\n<script lang=\"js\">\nimport { VForm } from '@okiss/vbtf'\nimport { strVarReplace, effectDataTrans } from '@okiss/utils'\nimport { merge } from 'lodash'\n\nexport default defineComponent({\n name: 'VTree',\n components: {\n VForm\n },\n props: {\n treeApi: {\n type: String,\n default: '',\n require: true\n },\n getApi: {\n type: String,\n default: '',\n require: true\n },\n saveApi: {\n type: String,\n default: '',\n require: true\n },\n createApi: {\n type: String,\n default: '',\n require: true\n },\n deleteApi: {\n type: String,\n default: '',\n require: true\n },\n formItems: {\n type: Array,\n default: () => {\n return []\n }\n },\n treeProps: {\n type: Object,\n default: () => {}\n },\n maxDepth: {\n type: Number,\n default: 3\n },\n props: {\n type: Object,\n default: () => {}\n }\n },\n data() {\n return {\n type: 0, // 1 新增, 2 编辑\n treeData: [],\n formData: {},\n localTreeProps: merge({\n 'default-expand-all': true,\n 'expand-on-click-node': false,\n props: {\n children: 'children',\n label: 'label'\n }\n }, this.$props.treeProps),\n formkey: 0,\n tablekey: 0,\n menuOptions: {}\n }\n },\n computed: {\n formType() {\n const m = ['', '新建', '编辑']\n return m[this.type]\n },\n formProps() {\n let saveApi = strVarReplace(this.$props.saveApi, this.formData)\n if (this.type === 1) {\n saveApi = this.$props.createApi\n }\n return {\n saveApi: saveApi,\n getApi: this.$props.getApi,\n formItems: this.$props.formItems\n }\n }\n },\n created() {\n this.loadTree()\n },\n methods: {\n loadTree() {\n this.$http.request({\n method: 'GET',\n url: this.$props.treeApi\n }).then(({ data }) => {\n this.treeData = data\n })\n },\n onclick(data) {\n this.type = 2\n this.formData = data\n this.formkey++\n },\n append(data, node) {\n this.type = 1\n\n const newChild = { pid: data.id, [this.$props.props?.levelKey ?? 'level']: node.level + 1, ...effectDataTrans(this.$props.props?.effectData, data) }\n console.log(111, newChild)\n if (!data.children) {\n data.children = []\n }\n this.formData = newChild\n this.formkey++\n data.children.push(newChild)\n this.treeData = [...this.treeData]\n },\n canAppend(data, node) {\n if (!data[this.localTreeProps.props.label]) {\n return false\n }\n return node.level < this.$props.maxDepth\n },\n appendNew() {\n this.type = 1\n const newChild = { pid: 0, [this.$props.props?.levelKey ?? 'level']: 1 }\n this.formData = newChild\n this.formkey++\n this.tablekey++\n this.treeData = [...this.treeData, newChild]\n },\n remove(data) {\n this.$http.request({\n method: 'DELETE',\n url: strVarReplace(this.$props.deleteApi, data)\n }).then(({ code }) => {\n if (code !== 0) {\n this.$message.error('操作失败')\n } else {\n this.loadTree()\n }\n })\n },\n submit() {\n setTimeout(() => {\n this.loadTree()\n this.formData = {}\n this.tablekey++\n this.type = 0\n }, 200)\n },\n allowDrap(draggingNode) {\n return true\n },\n allowDrop(draggingNode, dropNode, type) {\n console.log(type)\n return type === 'inner'\n },\n handleDragEnd(draggingNode, dropNode, dropType, ev) {\n const form = draggingNode.data\n form.pid = dropNode.data.id\n this.$http.request({\n method: 'POST',\n url: strVarReplace(this.$props.saveApi, form),\n data: form\n }).then(({ code }) => {\n if (code !== 0) {\n this.$message.error('操作失败')\n }\n })\n }\n }\n})\n</script>\n<style lang=\"scss\">\n.card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.tree-box {\n height: 100%;\n}\n.tree-tree .tree-form {\n height: 100%;\n}\n.tree-action {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 14px;\n padding-right: 8px;\n}\n\n</style>\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <template #default=\"slotProps\">\n <VTree v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup>\nimport VTree from '../components/VTree.vue'\nimport PageLoad from '../components/PageLoad.vue'\nconst schemaHandler = (schema, project) => {\n const allowedProps = Object.keys(VTree.props)\n Object.keys(schema).forEach(key => {\n if (allowedProps.indexOf(key) === -1) {\n delete schema[key]\n }\n })\n\n return schema\n}\n</script>\n","<template>\n <router-view />\n</template>\n<script setup>\nimport { onBeforeRouteUpdate } from 'vue-router'\nconst key = ref(0)\nonBeforeRouteUpdate(() => {\n key.value++\n})\n</script>\n","// @ts-nocheck\nimport { cloneDeep, merge } from 'lodash'\nimport { isObject, isString } from '@okiss/utils'\n\nconst pie = {\n title: {\n text: 'Referer of a Website',\n left: 'center'\n },\n tooltip: {\n trigger: 'item',\n formatter: '{b} : {c} ({d}%)'\n },\n legend: {\n orient: 'vertical',\n left: 'bottom'\n },\n series: [\n {\n name: 'Access From',\n type: 'pie',\n radius: '50%',\n data: [\n { value: 1048, name: 'Search Engine' },\n { value: 735, name: 'Direct' },\n { value: 580, name: 'Email' },\n { value: 484, name: 'Union Ads' },\n { value: 300, name: 'Video Ads' }\n ],\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowColor: 'rgba(0, 0, 0, 0.5)'\n }\n }\n }\n ]\n}\n\nconst lienOption = {\n title: {\n text: ''\n },\n tooltip: {\n trigger: 'axis'\n },\n grid: {\n left: '2%',\n right: '2%',\n bottom: '5%',\n containLabel: true\n },\n toolbox: {\n feature: {\n saveAsImage: {}\n }\n },\n legend: {\n data: []\n },\n xAxis: {\n type: 'category'\n },\n yAxis: {\n type: 'value'\n },\n series: []\n}\n\nexport function makeOption(id: string, config: Object|string, data: Array<Record<string, any>>) {\n if (data.length === 0) {\n return {}\n }\n let opt = merge({}, lienOption)\n opt.title.text = id\n if (isString(config)) {\n const xAxisData = []\n const keys = Object.keys(data[0])\n let xkey = keys[0]\n let ykeys = keys.filter((v, i) => i > 0)\n let type = config\n if (config.indexOf(':') > -1) {\n const token = config.split(':')\n const _keys = token[1].split(',')\n type = token[0]\n xkey = _keys[0]\n ykeys = _keys.filter((v, i) => i > 0)\n }\n ykeys.forEach(key => {\n const seriesData = []\n data.forEach(each => {\n seriesData.push(each[key])\n })\n opt.series.push({\n name: key,\n type: type,\n smooth: true,\n data: seriesData\n })\n opt.legend.data.push(key)\n })\n\n data.forEach(each => {\n xAxisData.push(each[xkey])\n })\n\n opt.xAxis.data = xAxisData\n }\n\n if (isObject(config)) {\n opt = merge(opt, config)\n }\n // const _pie = cloneDeep(pie)\n // _pie.title.text = id\n // _pie.series[0].data = data\n //\n // return _pie\n console.log(111, opt)\n return opt\n}\n","<template>\n <span\n v-for=\"(each, i) in dataList\"\n :key=\"i\"\n >\n <div class=\"number-panel-title\">\n <div\n v-for=\"(item, index) in Object.keys(each)\"\n :key=\"index\"\n class=\"title-inner\"\n >\n <p class=\"number\">{{ each[item] }}</p>\n <p class=\"name\">{{ item }}</p>\n </div>\n </div>\n </span>\n</template>\n\n<script>\nexport default defineComponent({\n name: 'NumberPanel',\n props: {\n dataList: {\n type: Array,\n default: _ => []\n }\n },\n data() {\n return {\n }\n }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.number-panel-title {\n padding: 20px;\n text-align: center;\n .title-inner {\n display: inline-block;\n width: 20%;\n position: relative;\n text-align: center;\n border-right: 1px solid #e8e8e8;\n &:last-child {\n border: none;\n }\n }\n .el-divider {\n position: absolute;\n right: 0;\n top: 10px;\n }\n .name {\n font-size: 12px;\n color: #666;\n }\n .number {\n font-size: 20px;\n line-height: 30px;\n }\n}\n</style>\n","<template>\n <ElCard\n v-resize=\"true\"\n shadow=\"never\"\n class=\"part\"\n >\n <component\n :is=\"comptype()\"\n v-bind=\"compprops(option)\"\n />\n </ElCard>\n</template>\n<script lang=\"ts\">\nimport { makeOption } from './option'\nimport { VTable, VChart, JsonView } from '@okiss/vbtf'\nimport NumberPanel from './NumberPanel.vue'\n// @ts-ignore\nimport Markdown from 'vue3-markdown-it'\nimport { isArray } from '@okiss/utils'\n\nexport default {\n components: {\n Chart: VChart,\n Md: Markdown,\n Json: JsonView,\n Table: VTable,\n Number: NumberPanel,\n Html: ''\n },\n props: {\n option: {\n type: Object,\n default: () => {}\n }\n },\n setup(props: Record<string, any>) {\n const comptype = () => {\n if (props.option.chart === 'num') {\n return 'number'\n }\n return props.option.type\n }\n const compprops = (item: Record<string, any>) => {\n const type = comptype()\n if (type === 'number') {\n return {\n dataList: item.data\n }\n }\n if (type === 'chart') {\n return {\n options: makeOption(item.id, item.chart, item.data)\n }\n }\n if (type === 'md') {\n return {\n source: item.data\n }\n }\n\n if (type === 'table') {\n if (!isArray(item.data)) {\n return { showPagination: false }\n }\n const headers: { field: string; label: string }[] = []\n item.data[0] && Object.keys(item.data[0]).forEach((key, index) => {\n headers.push({ field: key, label: key })\n })\n return {\n headers: headers,\n list: item.data,\n showPagination: false\n }\n }\n return {}\n }\n\n return {\n compprops,\n comptype\n }\n }\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n.part {\n //height: 350px;\n width: auto;\n margin-bottom: 15px;\n :last-child {\n margin-bottom: 0;\n }\n}\n::v-deep(.el-card__header) {\n padding: 5px;\n}\n::v-deep(.el-card__body) {\n padding: 5px;\n}\n</style>\n","<template>\n <el-row>\n <el-col\n v-if=\"_filter.length > 0\"\n :span=\"24\"\n >\n <ElCard\n shadow=\"never\"\n class=\"part-filter\"\n >\n <VForm\n v-model=\"formData\"\n :form-items=\"_filter\"\n :options=\"formOptions\"\n @submit=\"onsubmit\"\n />\n </ElCard>\n </el-col>\n <el-col :span=\"24\">\n <el-row :gutter=\"20\">\n <el-col\n v-for=\"(item,index) in _dataPart\"\n :key=\"index\"\n :span=\"item.col || 24\"\n >\n <Part\n v-if=\"!item.errMsg\"\n :key=\"key\"\n :option=\"item\"\n />\n <el-alert\n v-else\n :title=\"item.id+' 片段执行出错'\"\n type=\"error\"\n >{{ item.errMsg }}</el-alert>\n </el-col>\n </el-row>\n </el-col>\n </el-row>\n</template>\n<script lang=\"ts\" setup>\nimport { VForm } from '@okiss/vbtf'\nimport Part from './part.vue'\n// import store from '../../store'\nimport http from '../../utils/request'\nimport { useRoute } from 'vue-router'\n\nconst route = useRoute()\n\nonMounted(() => {\n // store.dispatch('app/toggleSideBar')\n})\n\nconst props = defineProps({\n filter: {\n type: Array,\n default: () => []\n },\n dataPart: {\n type: Array,\n default: () => []\n }\n})\n\nconst formData = ref<Record<string, any>>({})\nonBeforeMount(() => {\n props.filter?.forEach((item: any) => {\n if (item.default !== null) {\n formData.value[item.field] = item.default\n }\n })\n})\nconst formOptions = {\n inline: true,\n labelPosition: 'right',\n labelWidth: 'auto',\n submitButton: {\n text: '查询'\n },\n cancelButton: {\n text: '重置'\n }\n}\nconst key = ref(1)\nconst _filter = ref(props.filter)\nconst _dataPart = ref(props.dataPart)\n\nconst schemaapi = computed(() => {\n let id = route.params.id\n if (!id) {\n const token = route.path.split('/')\n id = token[token.length - 1]\n }\n return '/focusbi_report/view/' + id\n})\n\nconst onsubmit = (data: any) => {\n http.get(schemaapi.value, { params: data }).then(({ data }) => {\n _filter.value = data.filter\n _dataPart.value = data.dataPart\n key.value++\n })\n}\n</script>\n\n<style lang=\"scss\">\n.part-filter {\n margin-bottom: 15px;\n}\n\n</style>\n","<template>\n <PageLoad :schema-api=\"schemaapi\">\n <template #default=\"slotProps\">\n <Report v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup>\nimport PageLoad from '../components/PageLoad.vue'\nimport Report from '../components/report/index.vue'\nimport { useRoute } from 'vue-router'\nconst route = useRoute()\n\nconst schemaapi = computed(() => {\n let id = route.params.id\n if (!id) {\n const token = route.path.split('/')\n id = token[token.length - 1]\n }\n return '/focusbi_report/view/' + id\n})\n</script>\n","import { h, getCurrentInstance, Component } from 'vue'\nimport { ElRow, ElCol, ElCard } from 'element-plus'\nimport { merge } from 'lodash'\nimport { VForm, VTable } from '@okiss/vbtf'\nimport { isObject, isArray } from '@okiss/utils'\n\nimport './index.scss'\n\ntype CompProps = Record<string, any>\n\nconst test = (props: CompProps) => <div>{props.test}</div>\n\nconst components: Record<string, any> = {\n 'card': ElCard,\n 'form': VForm,\n 'table': VTable,\n 'test': test,\n 'row': ElRow,\n 'col': ElCol\n}\n\nexport function regComponents(comps: Record<string, any>) {\n Object.keys(comps).forEach(k => {\n components[k] = comps[k]\n })\n}\n\nconst defaultSchema: Record<string, Node> = {\n 'card': {\n type: 'card',\n props: {\n class: 'render-card',\n shadow: 'never'\n }\n },\n 'form': {\n type: 'form',\n props: {\n afterReset: ''\n }\n },\n 'table': {\n type: 'table',\n props: {\n syncUrl: false\n }\n }\n}\n\nexport interface Node {\n type: string,\n props?: Record<string, string | number | boolean | any>\n children?: Node[] | Node\n span?: number\n}\n\nexport interface Props {\n schema: Node[]\n}\n\nfunction pathNodeParse(node: Node): Node[] {\n const _node = Object.assign({}, node)\n const part = _node.type.split('.').reverse()\n const span = _node.span || 24\n delete _node.span\n let tmp = { ..._node, type: part[0] }\n for (let i = 1; i < part.length; i++) {\n const item = part[i]\n tmp = { type: item, children: [tmp] }\n }\n tmp.span = span\n\n return nodesParse([tmp])\n}\n\nfunction nodesParse(_nodes: Node[]): Node[] {\n const root: Node = { type: 'row', props: { gutter: 20, class: 'render-row' }, children: [] }\n _nodes.forEach(_node => {\n let node = Object.assign({}, _node)\n if (isObject(node.props?.style)) {\n let style = ''\n Object.keys(node.props?.style).forEach(k => {\n style += k + ':' + node.props?.style[k] + ';'\n })\n node.props!.style = style\n }\n const colProps = { span: node.span ?? 24, class: 'render-col' }\n delete node.span\n if (node.type.indexOf('.') > 0) {\n (root.children! as Node[]).push({\n type: 'col',\n props: colProps,\n children: pathNodeParse(node)\n })\n return\n }\n node = merge({ props: {}}, defaultSchema[node.type] || {}, node)\n const children = transChildren(node.children)\n if (children.length) {\n node.children = nodesParse(children)\n }\n (root.children! as Node[]).push({\n type: 'col',\n props: colProps,\n children: [\n node\n ]\n })\n })\n\n return [root]\n}\n\nfunction transChildren(children : Node[] | Node | undefined) : Node[] {\n const _children : Node[] = isArray(children) ? children! as Node[] : (isObject(children) ? [children! as Node] : [])\n return _children\n}\n\nlet globalComps : Record<string, Component> = {}\n\nconst createVNode = (node: Node) => {\n const comp = components[node.type] || globalComps[node.type] || node.type\n return h(comp, node.props, { default: () => transChildren(node.children).map(item => createVNode(item)) })\n}\n\nexport const render = (props: Props) => {\n if (Object.keys(globalComps).length === 0) {\n globalComps = getCurrentInstance()!.appContext.components\n }\n const nodes: Node[] = nodesParse(Object.values(props.schema))\n return nodes.map(item => createVNode(item))\n}\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <render :schema=\"schema\" />\n </PageLoad>\n</template>\n<script setup name=\"Custom\">\nimport PageLoad from '../components/PageLoad.vue'\nimport { render } from '../render'\nimport { toRaw } from 'vue'\nconst schema = ref([])\nconst schemaHandler = (_schema, project) => {\n schema.value = toRaw(_schema)\n return _schema\n}\n</script>\n","import type { RouteRecordRaw } from 'vue-router'\nimport { MenuType, OmsModule, PageInfo, PageType, RemoteModule } from '../types'\nimport { Component } from 'vue'\nimport { Container, Form, Report, Table, Tree, Custom } from '../scaffold'\n\nlet bu: Record<string, any> = {}\nexport function regViews(_bu: Record<string, any>) {\n bu = _bu\n}\n\nconst getComponent = (item: PageInfo): Component => {\n const loadCustom = (path: string): any => {\n const _path = './views/' + path + '.vue'\n if (bu && bu[_path] && bu[_path].default) {\n return bu[_path].default\n }\n console.error(`自定义组件不存在 ${item.name} ${item.view}`)\n return Container\n }\n if (item.path === '#') {\n return Container\n }\n switch (item.page_type) {\n case PageType.list:\n return Table\n case PageType.form:\n return Form\n case PageType.custom:\n case PageType.localComp:\n return loadCustom(item.view || '')\n case PageType.tree:\n return Tree\n case PageType.report:\n return Report\n case PageType.customSchema:\n return Custom\n }\n return Container\n}\n\nfunction getPath(item: PageInfo) {\n let path = item.path\n if (item.type === MenuType.menu && item.page_type === PageType.entity) {\n path = '#'\n }\n // :id 默认转换为数字型匹配模式\n if (path.indexOf(':id') > -1 && path.indexOf(':id') + 3 === path.length) {\n path = path.replace(':id', ':id(\\\\d+)')\n }\n return path === '#'\n ? '/' + item.id + '_DIR_' + item.name\n : path[0] !== '/'\n ? '/' + path\n : path\n}\n\nfunction getName(item: PageInfo): string {\n return (item.path + item.name).split('/').filter(v => v).join('_')\n}\n\nconst transRoute = (item: PageInfo): RouteRecordRaw => {\n const isShow = item.type !== MenuType.page\n const route: RouteRecordRaw = {\n path: getPath(item),\n name: item.id + '_' + getName(item) + '_' + item.path.replaceAll('/', '_'),\n component: getComponent(item),\n meta: {\n id: item.id,\n pageId: item.id,\n title: item.name,\n icon: item.icon,\n hidden: !isShow,\n path: item.path,\n menuType: item.type,\n keepAlive: false,\n role: item.role\n },\n children: item.children ? item.children.map(each => transRoute(each)) : []\n }\n if (item.page_type === PageType.entity) {\n const createList = item.path + '/list'\n const createForm = item.path + '/form'\n const createEdit = item.path + '/:id'\n const children : Array<RouteRecordRaw> = [{\n path: createList,\n name: item.name + '列表' + item.id,\n component: Table,\n meta: {\n id: item.id + 99999,\n title: '列表',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }, {\n path: createForm,\n name: item.name + '新建' + item.id,\n component: Form,\n meta: {\n id: item.id + 99999 + 1,\n title: '新建',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }, {\n path: createEdit,\n name: item.name + '编辑' + item.id,\n component: Form,\n meta: {\n id: item.id + 99999 + 2,\n title: '编辑',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }]\n route.children = [...children, ...route.children as RouteRecordRaw[]]\n }\n if (route.children && route.children.length > 0) {\n let allChildHidden = true\n route.children.forEach(each => {\n if (each.meta && !each.meta.hidden) {\n allChildHidden = false\n }\n })\n if (route.meta) {\n route.meta.menuType = isShow ? MenuType.dir : MenuType.hidden\n }\n if (allChildHidden) {\n if (route.meta) {\n route.meta.menuType = MenuType.menu\n }\n let redirect = '/'\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n redirect = route.children[i].path\n break\n }\n }\n route.redirect = redirect\n route.path = '/' + item.id + '_DIR' + route.redirect.replaceAll('/', '_').toUpperCase()\n }\n }\n\n return route\n}\n\nexport const transRemoteModules = (data: RemoteModule[]): OmsModule[] => {\n const vueRouteModule: OmsModule[] = []\n data.forEach(item => {\n const m: OmsModule = {\n id: item.id,\n label: item.label,\n routes: []\n }\n item.routes.forEach(each => {\n m.routes.push(transRoute(each))\n })\n vueRouteModule.push(m)\n })\n\n return vueRouteModule\n}\n","import type { RouteRecordRaw } from 'vue-router'\n\nconst SUPER_ROLE = 'root'\n\nconst splitRoles = (roleValue: string | undefined): string[] => {\n if (!roleValue) {\n return []\n }\n return roleValue\n .split(',')\n .map(item => item.trim())\n .filter(item => !!item)\n}\n\nconst getRouteRoles = (route: RouteRecordRaw): string[] => {\n const directRole = typeof (route as any).role === 'string' ? (route as any).role : ''\n const metaRole = route.meta && typeof (route.meta as any).role === 'string' ? (route.meta as any).role : ''\n const roles = [...splitRoles(directRole), ...splitRoles(metaRole)]\n if (!roles.length && route.children && route.children.length) {\n return []\n }\n return Array.from(new Set(roles))\n}\n\nconst cloneRoute = (route: RouteRecordRaw): RouteRecordRaw => {\n const cloned: RouteRecordRaw = { ...route }\n if (route.meta) {\n cloned.meta = { ...route.meta }\n }\n if (route.children && route.children.length) {\n cloned.children = route.children.map(item => cloneRoute(item))\n }\n return cloned\n}\n\nconst hasPermission = (routeRoles: string[], userRoles: string[]): boolean => {\n if (!routeRoles.length) {\n return true\n }\n if (!userRoles.length) {\n return false\n }\n return routeRoles.some(role => userRoles.includes(role))\n}\n\nexport const filterRoutesByRole = (routes: RouteRecordRaw[] = [], userRoles: string[]): RouteRecordRaw[] => {\n console.log(\"routes\", routes, userRoles )\n if (userRoles.includes(SUPER_ROLE)) {\n return routes.map(route => cloneRoute(route))\n }\n return routes.reduce<RouteRecordRaw[]>((acc, route) => {\n console.log(acc, route)\n const routeRoles = getRouteRoles(route)\n if (!hasPermission(routeRoles, userRoles)) {\n return acc\n }\n const cloned: RouteRecordRaw = { ...route }\n if (route.meta) {\n cloned.meta = { ...route.meta }\n }\n if (route.children && route.children.length) {\n const children = filterRoutesByRole(route.children, userRoles)\n if (!children.length) {\n // 如果子路由全部被过滤,父路由不再保留,避免注册空壳路由阻挡后续权限变更时的注册\n return acc\n }\n cloned.children = children\n }\n acc.push(cloned)\n return acc\n }, [])\n}\n","const decodeWithAtob = (input: string): string => {\n const binary = (globalThis.atob as (data: string) => string)(input)\n let output = ''\n for (let i = 0; i < binary.length; i++) {\n const code = binary.charCodeAt(i).toString(16).padStart(2, '0')\n output += '%' + code\n }\n try {\n return decodeURIComponent(output)\n } catch (error) {\n return decodeURIComponent(encodeURIComponent(binary))\n }\n}\n\nconst base64UrlDecode = (input: string): string => {\n const base64 = input.replace(/-/g, '+').replace(/_/g, '/')\n const padding = 4 - (base64.length % 4)\n const padded = base64 + (padding < 4 ? '='.repeat(padding) : '')\n if (typeof globalThis.atob === 'function') {\n return decodeWithAtob(padded)\n }\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(padded, 'base64').toString('utf-8')\n }\n return ''\n}\n\nexport const decodeJwtPayload = (token: string): Record<string, any> | null => {\n if (!token) {\n return null\n }\n const segments = token.split('.')\n if (segments.length < 2) {\n return null\n }\n try {\n const decoded = base64UrlDecode(segments[1])\n return decoded ? JSON.parse(decoded) : null\n } catch (error) {\n return null\n }\n}\n\nexport const getRolesFromJwt = (token: string): string[] => {\n const payload = decodeJwtPayload(token)\n const role = payload && typeof payload.role === 'string' ? payload.role : ''\n return role\n .split(',')\n .map(item => item.trim())\n .filter(item => !!item)\n}\n","import { Router } from 'vue-router'\nimport { pinia, useUserStore } from '../../store'\nimport { OmsModule, RemoteModule } from '../../types'\nimport { transRemoteModules } from '../remote'\nimport Layout from '../../scaffold/layout/index.vue'\nimport { getWhiteRoutes, isLodeRemoteRoutes } from './func'\nimport { filterRoutesByRole } from '../permission'\nimport { getRolesFromJwt, getToken } from '../../utils'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, form, next) => {\n if (getWhiteRoutes().indexOf(to.path) !== -1) {\n next()\n return\n }\n if (isLodeRemoteRoutes()) {\n next()\n return\n }\n const user = useUserStore(pinia)\n await user.info()\n const remoteRoute: RemoteModule[] = await user.loadRemoteRoutes()\n const routeModules: OmsModule[] = transRemoteModules(remoteRoute)\n const userRoles = getRolesFromJwt(getToken())\n const filteredModules: OmsModule[] = routeModules.map(item => {\n const permittedRoutes = filterRoutesByRole(item.routes, userRoles)\n return {\n ...item,\n routes: permittedRoutes\n }\n }).filter(item => item.routes.length > 0)\n\n filteredModules.forEach(item => {\n item.routes.forEach(each => {\n router.addRoute({\n path: '/',\n component: Layout,\n children: [each]\n })\n })\n })\n router.addRoute({ name: '404', path: '/:pathMatch(.*)*', redirect: '/404', hidden: true })\n user.updateRemoteRouter(filteredModules)\n await router.replace(to)\n next()\n })\n}\n","import { Router } from 'vue-router'\nimport { pinia, useAppStore, useSettingsStore } from '../../store'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, from, next) => {\n const settings = useSettingsStore(pinia)\n const tokens: string[] = [settings.title || '']\n const len = to.matched.length\n for (let i = len; i > len - 3; i--) {\n const item = to.matched[i - 1]\n if (item?.meta?.title) {\n tokens.push(item.meta.title + '')\n }\n }\n if (tokens.length > 1) {\n document.title = tokens.reverse().join('-')\n }\n next()\n })\n router.afterEach(async(to, from, failure) => {\n const app = useAppStore(pinia)\n if (Object.keys(to.meta).length > 0) {\n await app.setCurrentMeta(to.meta)\n }\n })\n}\n","import { Router } from 'vue-router'\nimport nprogress from './nprogress'\nimport permission from './permission'\nimport remoteRoutes from './remote-routes'\nimport setPageTitle from './set-page-title'\n\nexport default function(router: Router) {\n permission(router)\n nprogress(router)\n remoteRoutes(router)\n setPageTitle(router)\n}\n","import router from './router'\nimport guard from './guard'\n\nguard(router)\nexport default router\n","import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport { pinia, useUserStore } from '../../store'\nimport { Interceptor, InterceptorUse } from './types'\nimport { Message, MessageBox } from '../../plugins/element-plus'\nimport { removeToken } from '../token'\nimport { cancelRequestInterceptor, cancelResponseInterceptor } from './cache'\nimport { isString } from '@okiss/utils'\nimport router from '../../router'\n\nfunction getToken() {\n return useUserStore(pinia).token\n}\n\nfunction expired() {\n return useUserStore(pinia).expired\n}\n\nfunction errMsg(message: string) {\n Message({\n message: message,\n type: 'error',\n duration: 5 * 1000,\n grouping: true\n })\n}\n\nconst baseRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n config.headers = config.headers || {}\n const token = getToken()\n if (token) {\n config.headers['X-Token'] = token\n }\n if (router.currentRoute.value.meta?.path) {\n config.headers['X-Path'] = router.currentRoute.value.meta.path\n }\n return config\n }\n}\n\nconst baseResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled(response) {\n const notHoldApiErr = response.config?.notHoldApiErr !== undefined && response.config?.notHoldApiErr === true\n if (!notHoldApiErr && response.data.code !== 0) {\n const message = response.data.message || `接口请求错误 ${response.config.method}::${response.config.url?.split('?')[0]}`\n if (response.data.code === 401) {\n if (expired()) {\n return\n }\n useUserStore(pinia).SetExpired()\n MessageBox.alert('登录信息已过期或未登录, 是否跳转登录', '操作提醒', {\n showClose: false,\n confirmButtonText: '重新登录',\n showCancelButton: true,\n cancelButtonText: '取消',\n callback: (action: string) => {\n if (action === 'confirm') {\n removeToken()\n // location.href = location.origin + location.pathname\n location.href = location.origin + location.pathname + location.hash.replace('#', '#/?redirect=')\n location.reload()\n }\n useUserStore(pinia).SetExpired()\n }\n })\n return\n } else {\n errMsg(message)\n }\n return Promise.reject(message)\n }\n\n let _message_box = response.data?.data?._message_box\n if (_message_box !== undefined) {\n if (isString(_message_box)) {\n _message_box = {\n message: response.data?.data?._message_box\n }\n }\n MessageBox({\n title: '提示',\n type: 'success',\n grouping: true,\n ..._message_box\n })\n }\n\n return response.data\n },\n onRejected(error: AxiosError) {\n if (axios.isCancel(error)) {\n return Promise.reject('')\n }\n errMsg(`${error.message} ${error.config.method}::${error.config.url?.split('?')[0]}`)\n return Promise.reject(error)\n }\n}\n\nexport const interceptors: Interceptor[] = [\n {\n request: cancelRequestInterceptor,\n response: cancelResponseInterceptor\n },\n {\n request: baseRequestInterceptor,\n response: baseResponseInterceptor\n }\n]\n\nexport function addInterceptor(newInterceptor: Interceptor) {\n interceptors.push(newInterceptor)\n}\n","import axios, { AxiosRequestConfig } from 'axios'\nimport { defaultOptions } from '../../default'\nimport { merge } from 'lodash'\nimport { interceptors } from './interceptors'\n\nexport function instance(conf: AxiosRequestConfig = {}) {\n const defaultConf: AxiosRequestConfig = defaultOptions.axios || {}\n const c = merge(defaultConf, conf || {})\n const service = axios.create({\n ...c\n // adapter: (c) => cacheAdapter(c, defaultAxios)\n })\n\n interceptors.forEach(item => {\n service.interceptors.request.use(item.request.onFulfilled, item.request.onRejected)\n service.interceptors.response.use(item.response.onFulfilled, item.response.onRejected)\n })\n\n return service\n}\n\nexport default instance()\n","import type { ObjectDirective } from 'vue'\n\nconst outClick: ObjectDirective = {\n beforeMount(el, binding) {\n el.clickOutsideEvent = function(event: Event) {\n if (!(el === event.target || el.contains(event.target))) {\n binding.value(event, el)\n }\n }\n document.body.addEventListener('click', el.clickOutsideEvent)\n },\n unmounted(el) {\n document.body.removeEventListener('click', el.clickOutsideEvent)\n }\n}\n\nexport default outClick\n","import mitt from 'mitt'\nimport type { App } from 'vue'\n\nconst eventBus = mitt()\n\nconst defaultOptions = {\n global: true,\n inject: true,\n globalPropertyName: '$eventBus',\n injectName: '$eventBus'\n}\n\n// eventBus.install = install\nexport default eventBus\nexport const bus = eventBus\n\nexport function install(app: App, options = {}) {\n const opt = {\n ...defaultOptions,\n ...options\n }\n if (opt.global) {\n app.config.globalProperties[opt.globalPropertyName] = eventBus\n }\n if (opt.inject) {\n app.provide(opt.injectName, eventBus)\n }\n return eventBus\n}\n","import bus from '../plugins/eventBus'\nimport type { ObjectDirective } from 'vue'\n\nconst rightClient: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null) {\n return\n }\n if (binding.value) {\n // el.style.border = '1px solid red'\n }\n el.oncontextmenu = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.cancelBubble = true\n binding.value && bus.emit('right-click', { event: e, data: binding.value })\n }\n }\n}\n\nexport default rightClient\n","import type { ObjectDirective } from 'vue'\n\nconst resize: ObjectDirective = {\n mounted(el) {\n // console.log(8888, el.style)\n }\n}\n\nexport default resize\n","import type { ObjectDirective } from 'vue'\nimport bus from '../plugins/eventBus'\n\nfunction getElementPosition(element: HTMLElement | any, key: 'Top' | 'Left' | 'Right' | 'Botton') {\n let result = element[`offset${key}`]\n let current = element.offsetParent\n\n while (current) {\n result += current[`offset${key}`]\n current = current.offsetParent\n }\n\n return result\n}\n\nconst devtool: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null || !binding.value.dev) {\n return\n }\n let target : HTMLElement = el\n if (binding.value.parent) {\n for (let i = 0; i < binding.value.parent; i++) {\n if (target.parentElement) {\n target = target.parentElement\n }\n }\n }\n\n target.classList.add('devtool-hover')\n\n // button wrapper\n const wrapper = document.createElement('i')\n wrapper.className = 'devtool-item-wrapper'\n\n target.onmouseover = () => {\n wrapper.style.height = (target.offsetHeight + 30) + 'px'\n wrapper.style.width = (target.offsetWidth + 30) + 'px'\n wrapper.style.top = (getElementPosition(target, 'Top') - 15) + 'px'\n wrapper.style.left = (getElementPosition(target, 'Left') - 15) + 'px'\n }\n\n // create edit button\n const editBtn = document.createElement('span')\n editBtn.className = 'dev-action-edit'\n editBtn.title = '编辑'\n const editIcon = document.createElement('i')\n editIcon.className = 'iconfont ra-editor1'\n editBtn.appendChild(editIcon)\n editBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'edit', devId: binding.value.devId }})\n }\n wrapper.appendChild(editBtn)\n\n // create delete button\n const delBtn = document.createElement('span')\n delBtn.className = 'dev-action-del'\n delBtn.title = '删除'\n const delIcon = document.createElement('i')\n delIcon.className = 'iconfont ra-cut'\n delBtn.appendChild(delIcon)\n delBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'del', devId: binding.value.devId }})\n }\n wrapper.appendChild(delBtn)\n\n // append wrapper as first child\n target.insertBefore(wrapper, target.firstChild)\n\n return\n }\n}\n\nexport default devtool\n","import { createApp, watch, type App, type Component, type Directive } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport type { OmsOptions, OmsPlugin, UsePlugin } from './types'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\n// Vuex Module removed in Pinia migration\n\nimport AppComp from './App.vue'\nimport { startMock, regMockApis } from './mock'\nimport { instance } from './utils/request'\nimport { isObject } from '@okiss/utils'\nimport { VIcon, setUploadHeaderHandle } from '@okiss/vbtf'\nimport { getRolesFromJwt, getToken } from './utils'\nimport { merge } from 'lodash'\n\nimport 'normalize.css/normalize.css'\nimport './styles/index.scss'\nimport '@okiss/vbtf/style.css'\n\nimport ElementPlus from './plugins/element-plus'\nimport zhCn from 'element-plus/es/locale/lang/zh-cn'\n\nimport { setupStore, pinia, useAppStore, useSettingsStore, useUserStore, setHttp } from './store'\nimport router from './router'\nimport { filterRoutesByRole } from './router/permission'\nimport * as directives from './directive'\nimport { defaultOptions } from './default'\n\nexport let http: AxiosInstance\nconst pendingRoutes: RouteRecordRaw[] = []\nconst registeredRouteKeys = new Set<string>()\n\nconst getRouteKey = (route: RouteRecordRaw): string => {\n return typeof route.name === 'string' ? route.name : route.path\n}\n\nexport function useHttp(options?: AxiosRequestConfig): AxiosInstance {\n return options ? instance((merge(defaultOptions.axios, options))) : http\n}\n\nexport function createAdmin(omsOptions?: OmsOptions) {\n const options = merge(defaultOptions, omsOptions)\n const app: App = createApp(AppComp)\n const omsPlugin = createOmsPlugin(options)\n const plugins = options.plugins || []\n plugins.unshift(omsPlugin)\n plugins.forEach(item => {\n regPlugin(app, item)\n })\n if (options?.mock) {\n startMock()\n }\n http = instance(options.axios)\n // install pinia\n setupStore(app)\n const appStore = useAppStore(pinia)\n const settingsStore = useSettingsStore(pinia)\n const userStore = useUserStore(pinia)\n setHttp(http)\n settingsStore.updateSettings(omsOptions?.settings || {})\n appStore.setBaseAPI(options?.axios.baseURL as any)\n app.config.globalProperties.$http = http\n app.config.globalProperties.$router = router\n window.App = app\n window.OmsOptions = options\n setUploadHeaderHandle(() => {\n return {\n 'X-Token': getToken()\n }\n })\n watch(() => userStore.token, () => {\n syncRoutesWithRoles()\n }, { immediate: true })\n router.isReady().then(() => app.mount('#app'))\n}\n\nfunction regComponents(app: App, components: Record<string, Component> = {}) {\n Object.keys(components).forEach((item: string) => {\n app.component(item, components[item])\n })\n}\n\nfunction syncRoutesWithRoles() {\n const userRoles = getRolesFromJwt(getToken())\n const permittedRoutes = filterRoutesByRole(pendingRoutes, userRoles)\n const userStore = useUserStore(pinia)\n const existedKeys = new Set(userStore.customRouter.map(item => getRouteKey(item)))\n const newRoutes = permittedRoutes.filter(route => {\n const key = getRouteKey(route)\n if (registeredRouteKeys.has(key) || existedKeys.has(key)) {\n return false\n }\n registeredRouteKeys.add(key)\n return true\n })\n newRoutes.forEach(item => {\n router.addRoute(item)\n })\n if (newRoutes.length) {\n userStore.setCustomRoutes(newRoutes)\n }\n}\n\nfunction regRoutes(routes: RouteRecordRaw[] = []) {\n pendingRoutes.push(...routes)\n syncRoutesWithRoles()\n}\n\nfunction regUse(app: App, use: UsePlugin[]) {\n use.forEach(item => {\n if (isObject(item)) {\n // @ts-ignore\n item = [item]\n }\n // @ts-ignore\n app.use(...item)\n })\n}\n\nfunction regDirective(app: App, directives: Record<string, Directive> = {}) {\n Object.keys(directives).forEach(item => {\n app.directive(item, directives[item])\n })\n}\n\nfunction regStoreModule(modules: Record<string, any> = {}) {\n const keepModuleNames = ['app', 'settings', 'user']\n Object.keys(modules).forEach(item => {\n if (keepModuleNames.indexOf(item) !== -1) {\n console.warn(`storeModule name [${item}] is use by base, please change it!`)\n return\n }\n // Pinia does not support dynamic Vuex-style module registration\n console.warn('[store] plugin storeModules are not supported under Pinia. Ignored:', item)\n })\n}\n\nexport function regPlugin(app: App, plugin: OmsPlugin) {\n regComponents(app, plugin.components || {})\n regRoutes(plugin.routes || [])\n regUse(app, plugin.use || [])\n regDirective(app, plugin.directives || {})\n regStoreModule(plugin.storeModules || {})\n regMockApis(plugin.mockApis || [])\n}\n\nexport function createOmsPlugin(options: OmsOptions): OmsPlugin {\n return {\n components: { VIcon },\n directives: directives,\n use: [\n router,\n [ElementPlus, { locale: zhCn, ...options.settings?.ElementPlus }]\n ]\n }\n}\n"],"names":["args","match","number","TokenKey","getToken","Cookies","setToken","token","settings","useSettingsStore","pinia","expires","removeToken","httpClient","setHttp","http","getHttp","defaultAxios","defaultSettings","zhCn","defaultOptions","cloneDeep","defineStore","newSettings","merge","userState","getRouteKey","route","useUserStore","routes","existed","append","key","value","fresh","data","resolve","reject","response","error","roleIds","website","resource","SIDEBAR_STATUS_KEY","getStoredSidebarStatus","local","cookie","persistSidebarStatus","opened","appState","useAppStore","withoutAnimation","device","page","json","builderSchemaState","useBuilderSchemaStore","createPinia","setupStore","app","THEME_STORAGE_KEY","themeMode","ref","initialized","stopSystemListener","detectInitialTheme","storeMode","fromStore","normalizeTheme","cached","persistTheme","mode","applyTheme","normalized","applyDocumentTheme","dispatchThemeChange","setupSystemThemeListener","onChange","mediaQuery","listener","event","matches","useThemeMode","settingsStore","setTheme","next","resolved","watch","computed","isDark","onBeforeMount","loading","addNewStyle","addNewStyleTag","provide","_createBlock","_component_router_view","MockHttpMethod","buttons","_","listMock","example","userApis","options","apis","user","uniqueApis","regMockApis","item","realUrl","api","url","baseUrl","v","startMock","k","Mock","type","body","query","queryParams","mock","logGroup","Message","ElMessage","MessageBox","ElMessageBox","CancelToken","axios","task","config","cancelfun","c","cacheTime","cancelRequestInterceptor","cancel","cancelResponseInterceptor","defaultMap","setCmp","name","cmp","getCmp","_sfc_main$u","setup","custom","_createVNode","_createTextVNode","_sfc_main","matched","first","path","params","pathToRegexp","redirect","_component_el_breadcrumb","_TransitionGroup","_openBlock","_createElementBlock","_Fragment","_renderList","$data","index","_component_el_breadcrumb_item","_hoisted_1","_toDisplayString","$event","$options","_hoisted_2","_component_v_icon","$props","_component_el_container","_component_el_row","_renderSlot","_ctx","_component_el_main","_component_el_aside","input$1","numberRange","select$1","tmp","radio","xswitch","code","json$1","upload","template","iconSelect","subForm","checkbox","ctrlMaps","regCtrl","input","select","ctrls","baseSchema","ctrlFormDefaultOptions","typs","sqlSchema","DevLayout","VForm","VButton","JsonView","val","current","get","ctrl","transData","keyIndex","sourceCtrlOptions","eventBus","btnType","target","unset","compactObject","p","ctrlOptions","_component_dev_layout","_component_v_form","_mergeProps","_component_el_divider","_component_ElButton","_cache","_component_VButton","_component_JsonView","_component_el_form","_component_el_form_item","_component_el_select","_component_el_option","date","span","xenum","html","icon","image","link","rich","tpl","columns","jump","form","table","_sfc_main$p","VTable","schema","toRefs","m","appStore","ctrlMapName","brick","filter","headers","rowButton","normalButton","batchButton","_withCtx","_component_el_col","_component_el_button","_component_v_table","direction","show","useRoute","pageSchema","_component_VIcon","_unref","_component_el_drawer","FormBuilder","TableBuilder","AESTHETIC_STORAGE_KEY","aestheticMode","detectInitialAesthetic","persistAesthetic","applyAesthetic","useAestheticMode","setAestheticMode","modes","nextIndex","userStore","showJsonSchema","defaultAvatar","sidebar","avatar","nickname","nav","setting","showPageJsonSchemaIcon","toggleTheme","navbarStyle","envColor","onMounted","showEleByClassName","noticeStr","getSetting","showNotice","closeNavBarNotice","waterMarker","header","currentAvatar","avatarError","avatarFallback","text","toggleSideBar","logout","closeNotice","Cache","handleAvatarError","Hamburger","Breadcrumb","_createElementVNode","PageEditor","_hoisted_3","_component_el_tooltip","_component_el_icon","_resolveDynamicComponent","Moon","Sunny","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_hoisted_4","Brush","$router","_hoisted_5","_component_el_avatar","_hoisted_6","title","logo","logoError","showLogoImage","logoFallback","handleLogoError","_normalizeClass","__props","_Transition","_component_router_link","_component_el_image","isExternal","_normalizeProps","_guardReactiveProps","FixiOSBug","$subMenu","handleMouseleave","e","AppLink","MenuContent","child","_component_app_link","_component_el_menu_item","_component_menu_content","_component_el_sub_menu","_component_sidebar_item","filterHidden","arr","each","selected","remoteRouter","router","useRouter","filterRoutes","getJumpPath","_route","i","onselected","to","group","_component_el_option_group","PageType","MenuType","customRouter","localRoutes","activeMenu","showActive","showLogo","isCollapse","filterRoute","Logo","_component_el_scrollbar","SearchMenu","_component_el_menu","SidebarItem","include","onBeforeRouteLeave","$route","_component_el_backtop","WIDTH","fixedHeader","classObj","isMobile","resizeHandler","ismobile","useEventListener","handleClickOutside","Sidebar","Navbar","AppMain","tips","captcha","baseAPI","ts","onCaptchaClick","onReady","login","CryptoJS","res","_component_el_card","_hoisted_7","_component_el_input","_hoisted_8","_hoisted_10","InfoFilled","_hoisted_11","_hoisted_12","Layout","Dashboard","Login","NotFoundPage","createRouter","createWebHashHistory","NProgress","nprogress","from","isLodeRemoteRoutes","getWhiteRoutes","BaseSso","Github","getQueryParam","DingTalk","getReloadUrl","extra","strVarReplace","obj2Param","getQrCodeUrl","onScanSuccess","origin","createIFrame","defaultSso","allSso","sso","active","permission","s","flag","isObject","_component_el_alert","props","haveNotice","notice","noticeApi","owners","serviceOffLine","env","project","conf","isString","VNotice","VLoading","schemaHandler","defaultSort","allowedProps","PageLoad","slotProps","mutexId","mutex","action","goBack","onUnmounted","defineComponent","saveApi","node","newChild","effectDataTrans","draggingNode","dropNode","dropType","ev","_component_el_tree","VTree","onBeforeRouteUpdate","lienOption","makeOption","id","opt","xAxisData","keys","xkey","ykeys","_keys","seriesData","_sfc_main$3","VChart","Markdown","NumberPanel","comptype","isArray","_component_ElCard","$setup","formData","formOptions","_filter","_dataPart","schemaapi","onsubmit","Part","Report","test","components","ElCard","ElRow","ElCol","defaultSchema","class","shadow","afterReset","syncUrl","pathNodeParse","_node","Object","assign","part","split","reverse","length","children","nodesParse","_nodes","root","gutter","forEach","style","colProps","indexOf","push","transChildren","globalComps","createVNode","comp","h","default","map","render","getCurrentInstance","appContext","values","_schema","toRaw","bu","regViews","_bu","getComponent","loadCustom","_path","Container","Table","Form","Tree","Custom","getPath","getName","transRoute","isShow","createList","createForm","createEdit","allChildHidden","transRemoteModules","vueRouteModule","SUPER_ROLE","splitRoles","roleValue","getRouteRoles","directRole","metaRole","roles","cloneRoute","cloned","hasPermission","routeRoles","userRoles","role","filterRoutesByRole","acc","decodeWithAtob","binary","output","base64UrlDecode","base64","padding","padded","decodeJwtPayload","segments","decoded","getRolesFromJwt","payload","remoteRoutes","remoteRoute","routeModules","filteredModules","permittedRoutes","setPageTitle","tokens","len","failure","guard","expired","errMsg","message","baseRequestInterceptor","baseResponseInterceptor","_message_box","interceptors","instance","defaultConf","service","http$1","outClick","el","binding","mitt","rightClient","bus","resize","getElementPosition","element","result","devtool","wrapper","editBtn","editIcon","delBtn","delIcon","pendingRoutes","registeredRouteKeys","useHttp","createAdmin","omsOptions","createApp","AppComp","omsPlugin","createOmsPlugin","plugins","regPlugin","setUploadHeaderHandle","syncRoutesWithRoles","regComponents","existedKeys","newRoutes","regRoutes","regUse","use","regDirective","directives","regStoreModule","modules","keepModuleNames","plugin","VIcon","ElementPlus"],"mappings":"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"}