@okiss/oms 0.0.27 → 0.0.29
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.
- package/dist/index.es.js +887 -866
- package/dist/index.es.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/App.d.ts +1 -1
- package/dist/types/components/PageLoad.d.ts +5 -1
- package/dist/types/components/RightMenu.d.ts +1 -1
- package/dist/types/components/VTree.d.ts +1 -1
- package/dist/types/components/report/NumberPanel.d.ts +1 -1
- package/dist/types/scaffold/dashboard.d.ts +1 -1
- package/dist/types/scaffold/login.d.ts +1 -1
- package/dist/types/types.d.ts +1 -0
- package/package.json +24 -26
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/init.ts","../src/App.vue","../src/mock/types.ts","../src/mock/data/example.ts","../src/mock/apis/user.ts","../src/mock/apis/index.ts","../src/default.ts","../src/mock/index.ts","../src/utils/token.ts","../src/store/modules/user.ts","../src/store/modules/settings.ts","../src/store/modules/app.ts","../src/store/modules/builderSchema.ts","../src/store/index.ts","../src/plugins/element-plus.ts","../src/utils/request/cache.ts","../src/utils/request/interceptors.ts","../src/utils/request/index.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/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/utils/sso/index.ts","../src/scaffold/login.vue","../src/scaffold/404.vue","../src/router/router.ts","../src/router/guard/nprogress.ts","../src/router/guard/func.ts","../src/router/guard/permission.ts","../src/components/VLoading.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/router/remote.ts","../src/router/guard/remote-routes.ts","../src/router/guard/set-page-title.ts","../src/router/guard/index.ts","../src/router/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","<template>\n <el-config-provider :locale=\"locale\">\n <router-view />\n </el-config-provider>\n</template>\n\n<script setup lang=\"ts\">\nimport zhCn from 'element-plus/lib/locale/lang/zh-cn'\nimport { addNewStyle, addNewStyleTag } from '@okiss/utils'\nimport { provide } from 'vue'\n\nonBeforeMount(() => {\n const loading = document.getElementById('preloader')\n if (loading !== null) {\n document.body.removeChild(loading)\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})\nconst locale = zhCn\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 locale from 'element-plus/lib/locale/lang/zh-cn'\nimport { AxiosRequestConfig } from './utils/request'\nimport { OmsOptions } from './types'\nimport { Settings } from './types'\n\nconst defaultAxios: AxiosRequestConfig = {\n baseURL: '/api',\n withCredentials: true,\n timeout: 5000,\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: true,\n loginTips: '',\n sso: {},\n ElementPlus: {\n size: 'default',\n zIndex: 3000,\n locale: locale\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}\n\nexport const defaultOptions: OmsOptions = {\n axios: defaultAxios,\n settings: defaultSettings,\n plugins: [],\n mock: false\n}\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 Cookies from 'js-cookie'\nimport store 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 expires = new Date(new Date().getTime() + (store.state.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 { ActionContext, Module } from 'vuex'\nimport { RootState, strOrNum, User } from '../types'\nimport { LoginForm, LoginTicket, RemoteModule, 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'\n\nexport const user: 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}\n\nconst userModule: Module<User, any> = {\n namespaced: true,\n state: user,\n mutations: {\n updateToken(state: User, token: string) {\n state.token = token\n setToken(token)\n },\n removeToken(state: User) {\n state.token = ''\n removeToken()\n },\n updateRemoteRouter(state: User, routes: RemoteModule[]) {\n state.remoteRouter = routes\n state.isLodeRemoteRoutes = true\n },\n setCustomRoutes(state: User, routes: RouteRecordRaw[]) {\n state.customRouter = state.customRouter.concat(routes)\n },\n updateState<K extends keyof User>(state: User, { key, value }: { key: K, value: any }) {\n state[key] = value\n },\n resetUser(state: User) {\n state = Object.assign({\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 })\n }\n },\n actions: {\n login({\n commit,\n state,\n rootState\n }: ActionContext<User, RootState>, data: LoginForm | LoginTicket): Promise<boolean> {\n return new Promise<boolean>((resolve, reject) => {\n if (!rootState.http) {\n reject('http client not init')\n } else {\n rootState.http.request<UserInfo, ApiResponse<UserInfo>>({\n url: '/user/login',\n method: 'POST',\n data: data\n }).then((response: ApiResponse<UserInfo>) => {\n commit('updateToken', response.data?.token)\n resolve(true)\n }).catch(error => {\n reject(error)\n })\n }\n })\n },\n logout({ commit }: ActionContext<User, RootState>) {\n commit('removeToken')\n commit('resetUser')\n },\n info({ commit, rootState }: ActionContext<User, RootState>): Promise<boolean> {\n return new Promise<boolean>((resolve, reject) => {\n if (!rootState.http) {\n reject('http client not init')\n } else {\n rootState.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 commit('updateState', { key: 'name', value: response.data?.name })\n commit('updateState', { key: 'nickname', value: response.data?.nickname })\n // commit('updateState', { key: 'avatar', value: response.data?.avatar })\n commit('updateState', { key: 'roleIds', value: roleIds })\n commit('updateState', { key: 'env', value: response.data?.env })\n // @ts-ignore\n !Cookies.get('username') && Cookies.set('username', response.data?.name)\n resolve(true)\n }).catch(error => {\n reject(error)\n })\n }\n })\n },\n loadRemoteRoutes({ state, rootState }: ActionContext<User, RootState>): Promise<RemoteModule[]> {\n return new Promise<RemoteModule[]>((resolve, reject) => {\n rootState.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 }\n}\n\nexport default userModule\n","import { ActionContext, Module } from 'vuex'\nimport { Settings } from '../../types'\nimport { defaultSettings } from '../../default'\nimport { cloneDeep, merge } from 'lodash'\n\nexport const settings: Settings = cloneDeep(defaultSettings)\n\nconst settingsModule: Module<Settings, any> = {\n namespaced: true,\n state: settings,\n mutations: {\n updateSettings(state: Settings, newSettings: Settings) {\n state = merge(state, newSettings)\n }\n },\n actions: {\n updateSettings({ commit, state }: ActionContext<Settings, any>, remoteConfig: Settings) {\n commit('updateSettings', remoteConfig)\n }\n }\n}\n\nexport default settingsModule\n","import { ActionContext, Module } from 'vuex'\nimport { App, PageSchema, Sidebar } from '../types'\nimport Cookies from 'js-cookie'\n\nexport const app: App = {\n sidebar: {\n opened: Cookies.get('sidebarStatus') ? !!Cookies.get('sidebarStatus') : true,\n withoutAnimation: false\n },\n device: 'desktop',\n pages: {},\n currentRouteMeta: {},\n builderSchema: {}\n}\n\nconst _module: Module<App, any> = {\n namespaced: true,\n state: app,\n mutations: {\n TOGGLE_SIDEBAR: (state: App) => {\n state.sidebar.opened = !state.sidebar.opened\n state.sidebar.withoutAnimation = false\n if (state.sidebar.opened) {\n Cookies.set('sidebarStatus', '1')\n } else {\n Cookies.set('sidebarStatus', '0')\n }\n },\n CLOSE_SIDEBAR: (state: App, withoutAnimation: boolean) => {\n Cookies.set('sidebarStatus', '0')\n state.sidebar.opened = false\n state.sidebar.withoutAnimation = withoutAnimation\n },\n TOGGLE_DEVICE: (state: App, device: string) => {\n state.device = device\n },\n SET_PAGE_JSON_SCHEMA: (state: App, { page, json }: PageSchema) => {\n state.pages[page] = json\n },\n SET_CURRENT_META: (state: App, data: Record<string, any>) => {\n state.currentRouteMeta = data\n },\n SET_BUILDER_SCHEMA: (state: App, data: Record<string, any>) => {\n state.builderSchema = data\n }\n },\n actions: {\n toggleSideBar({ commit }: ActionContext<App, App>) {\n commit('TOGGLE_SIDEBAR')\n },\n closeSideBar({ commit }: ActionContext<App, App>, { withoutAnimation }: Sidebar) {\n commit('CLOSE_SIDEBAR', withoutAnimation)\n },\n toggleDevice({ commit }: ActionContext<App, App>, device: string) {\n commit('TOGGLE_DEVICE', device)\n },\n setPageJsonSchema({ commit }: ActionContext<App, App>, data: PageSchema) {\n commit('SET_PAGE_JSON_SCHEMA', data)\n },\n setCurrentMeta({ commit }: ActionContext<App, App>, data: Record<string, any>) {\n commit('SET_CURRENT_META', data)\n },\n setBuilderSchema({ commit }: ActionContext<App, App>, data: Record<string, any>) {\n commit('SET_BUILDER_SCHEMA', data)\n }\n }\n}\n\nexport default _module\n","/**\n * BuilderSchema\n * 存储pageEditor 编辑模式下时子组件联动相关的状态数据\n */\n\nimport { ActionContext, Module } from 'vuex'\n\nimport { BuilderSchema } from '../types'\n\nexport const builderSchema: BuilderSchema = {\n currentCellItem: {} // form/sub-form 当前单元格编辑数据\n}\n\nconst builderSchemaModule: Module<BuilderSchema, any> = {\n namespaced: true,\n state: builderSchema,\n mutations: {\n SET_CURRENT_CELLITEM: (state: BuilderSchema, data: Record<string, any>) => {\n state.currentCellItem = data\n }\n },\n actions: {\n setCurrentCellItem({ commit }: ActionContext<BuilderSchema, BuilderSchema>, data: Record<string, any>) {\n commit('SET_CURRENT_CELLITEM', data)\n }\n }\n}\n\nexport default builderSchemaModule\n","import type { App } from 'vue'\nimport user from './modules/user'\nimport settings from './modules/settings'\nimport app from './modules/app'\nimport builderSchema from './modules/builderSchema'\nimport { ActionContext, createStore } from 'vuex'\nimport { RootState } from './types'\nimport { AxiosInstance } from 'axios'\n\nconst store = createStore<RootState>({\n state: undefined,\n getters: {\n http: state => state.http,\n sidebar: state => state.app.sidebar,\n device: state => state.app.device,\n token: state => state.user.token,\n avatar: state => state.user.avatar,\n name: state => state.user.name,\n nickname: state => state.user.nickname,\n remoteRouter: state => state.user.remoteRouter,\n customRouter: state => state.user.customRouter,\n nav: state => state.settings.nav,\n builderSchema: state => state.app.builderSchema,\n currentCellItem: state => state.builderSchema.currentCellItem\n },\n mutations: {\n setHttp(state: RootState, http: AxiosInstance) {\n state.http = http\n }\n },\n actions: {\n setHttp({ commit, state }: ActionContext<RootState, any>, http: AxiosInstance) {\n commit('setHttp', http)\n }\n },\n modules: {\n user,\n settings,\n app,\n builderSchema\n }\n})\n\nexport function setupStore(app: App<Element>) {\n app.use(store)\n}\n\nexport default store\n","import ElementPlus, { ElMessage, ElMessageBox } from 'element-plus'\nimport 'element-plus/dist/index.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 } from 'axios'\nimport { AxiosRequestConfig } from './index'\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 console.log(response.config)\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 axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport store 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'\n// @ts-nocheck\nfunction getToken() {\n return store.state.user.token\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 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 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 }\n })\n return\n } else {\n Message({\n message: message,\n type: 'error',\n duration: 5 * 1000\n })\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 ..._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 Message({\n message: `${error.message} ${error.config.method}::${error.config.url?.split('?')[0]}`,\n type: 'error',\n duration: 5 * 1000\n })\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 as C } from 'axios'\nimport { defaultOptions } from '../../default'\nimport { merge } from 'lodash'\nimport { interceptors } from './interceptors'\n\nexport interface AxiosRequestConfig extends C {\n cacheTime?: number,\n cacheEnable?: boolean,\n notHoldApiErr?: boolean\n}\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 { 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 { useStore } from 'vuex'\nimport { getCmp } from '../utils/container'\n\nexport default defineComponent({\n name: 'Dashboard',\n setup() {\n const store = useStore()\n const name = computed(() => store.getters.name)\n const custom = getCmp('test')\n if (custom) {\n return () => <custom/>\n }\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 \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 console.log(111, 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 \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 { 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 return this.$store.state.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 this.$store.dispatch('app/setBuilderSchema', this.builderSchema)\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 console.log(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 console.log(m)\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 custom-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>\nimport FormBuilder from '../../devtool/formBuilder/index.vue'\nimport TableBuilder from '../../devtool/tableBuilder/index.vue'\nimport store from '../../../store'\nimport { useRoute } from 'vue-router'\n\nexport default {\n name: 'PageEditor',\n components: { FormBuilder, TableBuilder },\n setup() {\n const show = ref(false)\n const key = ref(1)\n const direction = 'rtl'\n const route = useRoute()\n const pageSchema = computed(() => {\n return store.state.app.pages[route.path]\n })\n\n return { show, key, direction, pageSchema: pageSchema }\n }\n}\n</script>\n","<template>\n <el-row ref=\"header\" class=\"navbar\" :style=\"{background: setting.envColor[user.env]}\">\n <el-col :span=\"16\">\n <hamburger\n :is-active=\"sidebar.opened\"\n class=\"hamburger-container\"\n @toggleClick=\"toggleSideBar\"\n />\n <breadcrumb class=\"breadcrumb-container\" />\n </el-col>\n <el-col :span=\"8\">\n <div class=\"right-content\">\n <div class=\"right-item\">\n <VIcon\n name=\"ra-code\"\n @click=\"gotoMenuEdit\"\n />\n </div>\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-dropdown\n class=\"right-item\"\n trigger=\"click\"\n >\n <div class=\"user-info\">\n <img\n :src=\"avatar ? avatar : defaultAvatar\"\n class=\"user-avatar\"\n alt=\"头像\"\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>\nimport { mapGetters } from 'vuex'\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'\n\nexport default {\n components: {\n Breadcrumb,\n Hamburger,\n VButton,\n PageEditor\n },\n data() {\n return {\n showExportPop: false,\n modulesList: this.getSetting('system_module'),\n showJsonSchema: false,\n json: '',\n key: 0,\n defaultAvatar: this.getSetting('defaultAvatar')\n }\n },\n computed: {\n ...mapGetters(['sidebar', 'avatar', 'name', 'nickname', 'nav']),\n hasNewMessage() {\n return this.$store.state.settings.hasNewMessage\n },\n moduleName() {\n return this.$store.state.app.moduleName\n },\n setting() {\n return this.$store.state.settings\n },\n user() {\n return this.$store.state.user\n },\n showPageJsonSchemaIcon() {\n return this.$store.state.settings.showPageJsonSchema || false\n }\n },\n mounted() {\n showEleByClassName('el-submenu is-active')\n const noticeStr = this.getSetting('navBarNotice')\n if (noticeStr.length > 0 && !this.getSetting('closeNavNotice') && this.showNotice(noticeStr)) {\n this.$notify({\n title: '提示',\n message: noticeStr,\n dangerouslyUseHTMLString: true,\n duration: 0,\n onClose: this.closeNavBarNotice\n })\n }\n if (!!this.setting.envColor[this.user.env]) {\n waterMarker({\n elRef: this.$refs.header.$el, \n waterMark: this.user.env,\n color:\"skyblue\",\n size: \"20\"\n })\n }\n },\n methods: {\n toggleSideBar() {\n this.$store.dispatch('app/toggleSideBar')\n },\n async logout() {\n await this.$store.dispatch('user/logout')\n location.reload(`${location.origin}/#/login?redirect=${this.$route.fullPath}`)\n },\n getSetting(name) {\n return this.$store.state.settings[name]\n },\n async closeNavBarNotice() {\n await this.$store.commit('settings/updateSettings', { closeNavNotice: true })\n this.closeNotice(this.getSetting('navBarNotice'))\n },\n showPopover() {\n this.showExportPop = true\n },\n showNotice(text) {\n const key = 'dismiss:navbar_notice'\n if (!Cache.exist(key)) {\n return true\n }\n return Cache.get(key) !== text\n },\n closeNotice(text) {\n const key = 'dismiss:navbar_notice'\n Cache.set(key, text)\n },\n gotoMenuEdit() {\n if (this.$route?.meta?.pageId) {\n window.open(location.origin + location.pathname + '#/menu/' + this.$route?.meta?.pageId)\n }\n }\n }\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 .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 }\n\n .user-avatar {\n width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 50%;\n margin: 0 10px 0 0;\n color: #1890ff;\n vertical-align: middle;\n background: hsla(0, 0%, 100%, 0.85);\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 <img\n v-if=\"logo\"\n :src=\"logo\"\n class=\"sidebar-logo\"\n >\n <h1\n v-else\n class=\"sidebar-title\"\n >{{ title }}</h1>\n <div>系统</div>\n </router-link>\n <router-link\n v-else\n key=\"expand\"\n class=\"sidebar-logo-link\"\n to=\"/\"\n >\n <img\n v-if=\"logo\"\n :src=\"logo\"\n class=\"sidebar-logo\"\n >\n <h1 class=\"sidebar-title\">{{ title }}</h1>\n </router-link>\n </transition>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SidebarLogo',\n props: {\n collapse: {\n type: Boolean,\n required: true\n }\n },\n computed: {\n title() {\n return this.$store.state.settings.title\n },\n logo() {\n return this.$store.state.settings.logo\n }\n }\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: #2b2f3a;\n text-align: center;\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: #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\n &.collapse {\n .sidebar-logo {\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 // @ts-ignore\n return this.$store.state.app.device\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 <div\n v-if=\"item.hidden !== false\"\n class=\"menu-wrapper\"\n >\n <!-- 没有子菜单 -->\n <template v-if=\"item.meta && item.meta.menuType === 2\">\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 >\n <menu-content :meta=\"item.meta\" />\n </el-menu-item>\n </app-link>\n </template>\n <!-- 有子菜单 -->\n <el-sub-menu\n v-else-if=\"item.meta && item.meta.menuType === 1\"\n ref=\"subMenu\"\n :index=\"to\"\n :class=\"{ 'submenu-title-noDropdown': !isNest }\"\n popper-append-to-body\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 </div>\n</template>\n\n<script>\nimport AppLink from './Link.vue'\nimport FixiOSBug from './FixiOSBug'\nimport MenuContent from './MenuContent.vue'\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 },\n methods: {\n getTo(child) {\n try {\n return this.$router.resolve(child.redirect ? child.redirect : child).fullPath\n } catch (e) {\n console.error('路由解析错误')\n console.log(child)\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=\"item.path\"\n />\n </template>\n </el-option-group>\n </template>\n <template v-else>\n <el-option\n :label=\"'' + group.meta.title\"\n :value=\"group.path\"\n />\n </template>\n </template>\n </el-select>\n</template>\n<script>\nimport { mapGetters } from 'vuex'\nimport { cloneDeep } from 'lodash'\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\nexport default {\n data() {\n return {\n selected: ''\n }\n },\n computed: {\n ...mapGetters(['remoteRouter']),\n filterRoutes() {\n let routes = []\n this.remoteRouter.forEach(item => {\n routes = routes.concat(cloneDeep(item.routes))\n })\n return filterHidden(routes)\n }\n },\n methods: {\n onselected: function(to) {\n this.$router.push(to)\n this.selected = ''\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.search-menu {\n width: 100%;\n padding: 15px 20px 0 20px;\n\n ::v-deep(.el-input__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 { Module } from 'vuex'\nimport { MockApi } from './mock/types'\nimport { Sso } from './utils/sso'\n\nexport interface Nav {\n}\n\nexport type newSso = (params: Record<string, any>) => 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}\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 storeModules?: Record<string, Module<any, 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}\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}\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 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 />\n </template>\n </el-menu>\n </el-scrollbar>\n </div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\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'\n\nexport default defineComponent({\n components: { SidebarItem, Logo, SearchMenu },\n computed: {\n ...mapGetters(['sidebar', 'remoteRouter', 'customRouter']),\n routes() {\n let localRoutes = []\n this.$router.options.routes.concat(this.customRouter || []).forEach(item => {\n if (item.path === '/') {\n localRoutes = localRoutes.concat(item.children || [])\n } else {\n localRoutes.push(item)\n }\n })\n console.log(cloneDeep([\n {\n label: '',\n routes: localRoutes\n },\n ...this.remoteRouter\n ]))\n return cloneDeep([\n {\n label: '',\n routes: localRoutes\n },\n ...this.remoteRouter\n ])\n },\n activeMenu() {\n console.log(2222, this.$route)\n let m = this.$route.matched\n\n for(let i = m.length - 1; i >= 0; i--) {\n let tmp = m[i]\n if (tmp.meta.menuType == MenuType.menu) {\n return this.$router.resolve(tmp.redirect ? tmp.redirect : tmp).fullPath \n }\n }\n \n return ''\n },\n showLogo() {\n return this.$store.state.settings.sidebarLogo\n },\n variables() {\n return {\n menuBg: '#304156',\n menuText: '#bfcbd9',\n menuActiveText: '#409EFF'\n }\n },\n isCollapse() {\n return !this.sidebar.opened\n }\n },\n mounted() {\n showEleByClassName('is-active')\n },\n methods: {\n filterRoute(arr) {\n return arr.filter(item => {\n // console.log(item, [1, 2].indexOf(item.meta.menuType) > 0)\n // 1 目录 2 菜单\n return [MenuType.dir, MenuType.menu].indexOf(item.meta.menuType) !== -1\n }).map(item => {\n item = Object.assign({}, item)\n if (item.children) {\n item.children = this.filterRoute(item.children)\n }\n return item\n })\n }\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 { useStore } from 'vuex'\n\nconst store = useStore()\nconst { body } = document\nconst WIDTH = 992 // refer to Bootstrap's responsive design\n\nconst sidebar = computed(() => {\n return store.state.app.sidebar\n})\n\nconst device = computed(() => {\n return store.state.app.device\n})\n\nconst fixedHeader = computed(() => {\n return store.state.settings.fixedHeader\n})\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\nuseEventListener(window, 'resize', () => resizeHandler())\n\nconst handleClickOutside = () => {\n store.dispatch('app/closeSideBar', { withoutAnimation: false })\n}\n\nconst resizeHandler = () => {\n if (!document.hidden) {\n const ismobile = isMobile()\n store.dispatch('app/toggleDevice', ismobile ? 'mobile' : 'desktop')\n if (ismobile) {\n store.dispatch('app/closeSideBar', { withoutAnimation: true })\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../styles/mixin\";\n@import \"../../styles/variables\";\n\n.app-wrapper {\n @include clearfix;\n position: relative;\n height: 100%;\n width: 100%;\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: absolute;\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","import { NavigationGuardNext } from 'vue-router'\nimport { getQueryParam, obj2Param, strVarReplace, createIFrame } from '@okiss/utils'\nimport store from '../../store'\nimport { newSso } from '../../types'\nimport { merge } from 'lodash'\n\nexport type SsoType = 'jump' | 'qrcode'\n\nexport interface Sso {\n flag(): string | 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(): string | undefined {\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void {\n next(path)\n }\n\n showQrCode(): void {\n }\n}\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(): string | undefined {\n const code = getQueryParam('code')\n if (code) {\n return code\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\nconst defaultSso: Record<string, newSso> = {\n 'dingtalk': p => new DingTalk(p)\n}\n\nexport function allSso(): Record<string, newSso> {\n return merge<Record<string, newSso>, Record<string, newSso>>(store.state.settings.sso || {}, defaultSso)\n}\n\nexport default function(options: Record<string, any>): Sso | undefined {\n const sso = allSso()\n const key = store.state.settings.activeSsoKey || ''\n const active = sso[key]\n if (active !== undefined) {\n return active(options)\n }\n return undefined\n}\n\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\n class=\"input button\"\n @click=\"login\"\n >登录</div>\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 store from '../store'\nimport sso, { allSso } from '../utils/sso'\n\nconst router = useRouter()\nconst route = useRoute()\nconst tips = computed(() => store.state.settings.loginTips)\nconst allsso = () => allSso()\n\nconst data = ref({\n username: '',\n password: ''\n})\n\nconst login = () => {\n if (data.value.username === '' || data.value.password === '') {\n ElMessage.error('请填写用户名和密码')\n return\n }\n store.dispatch('user/login', data.value).then(res => {\n router.push({ path: route.query?.redirect as string || '/' })\n })\n return\n}\n\nconst loginType = ref()\n\nconst changLoginChannel = () => {\n if (loginType.value) {\n return\n }\n const redirect_url = location.origin + location.pathname + '#' + (route.params.redirect || '')\n const params = {\n elId: 'sso-qrcode',\n redirect_uri: redirect_url,\n iframe: {\n width: '280px',\n height: '320px'\n }\n }\n sso(params)?.showQrCode()\n}\n</script>\n\n<style lang=\"scss\">\n$bg: #2d3a4b;\n$dark_gray: #889aa4;\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 #title {\n color: #fff;\n }\n #form {\n width: 300px;\n margin: 10px auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n .input {\n width: 300px;\n height: 40px;\n margin: 10px auto;\n padding: 10px;\n }\n .button {\n width: 300px;\n height: 40px;\n border: 1px solid #fff;\n background: #fff;\n }\n }\n .tips, .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 store 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 if (to.matched.length > 0) {\n store.commit('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 store from '../../store'\n\nexport function isLodeRemoteRoutes(): boolean {\n return store.state.user.isLodeRemoteRoutes\n}\n\nexport function getWhiteRoutes(): Array<string | RegExp> {\n return store.state.settings.whiteRoutes || []\n}\n\nexport function getToken() {\n return store.state.user.token\n}\n","import { Router } from 'vue-router'\nimport store from '../../store'\nimport { getToken, getWhiteRoutes } from './func'\nimport sso from '../../utils/sso'\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 if (flag && await store.dispatch('user/login', { 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 <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 <ElAlert\n v-if=\"haveNotice\"\n v-bind=\"notice\"\n style=\"margin: 0 0 20px 0\"\n />\n <VLoading v-if=\"loading\" />\n <template v-else>\n <slot v-bind=\"schema\" />\n </template>\n</template>\n<script lang=\"ts\">\nimport VLoading from './VLoading.vue'\nimport { isObject, isString } from '@okiss/utils'\nimport store from '../store'\n\nexport default defineComponent({\n components: { VLoading },\n props: {\n schemaHandler: {\n type: Function,\n default: function(val: any, project: string) { return val }\n },\n schemaApi: {\n type: String,\n default: ''\n }\n },\n data() {\n return {\n loading: true,\n haveNotice: false,\n notice: {},\n schema: {},\n owners: []\n }\n },\n beforeCreate() {\n const token = this.$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' + this.$route.meta.path\n // const conf = { cacheTime: 10 * 60 * 1000, params: this.$route.params }\n const conf = { params: this.$route.params }\n this.$http.get(this.$props.schemaApi || api, conf).then(({ data }) => {\n this.loading = false\n if (data.notice !== undefined) {\n this.haveNotice = true\n if (isString(data.notice)) {\n this.notice = {\n title: data.notice\n }\n } else if (isObject(data.notice)) {\n this.notice = data.notice\n }\n delete data['notice']\n }\n this.owners = data.ownerNames || []\n this.schema = this.$props.schemaHandler(data, project)\n store.commit('app/SET_PAGE_JSON_SCHEMA', { page: this.$route.path, json: this.schema })\n })\n }\n})\n</script>\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 } from 'vue-router'\nconst route = useRoute()\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</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'\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'\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 type { RouteRecordRaw } from 'vue-router'\nimport { MenuType, OmsModule, PageInfo, PageType, RemoteModule } from '../types'\nimport { Component } from 'vue'\nimport { Container, Form, Report, Table, Tree } 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 Container\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 },\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 }\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 }\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 }\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 { Router } from 'vue-router'\nimport store from '../../store'\nimport { OmsModule, RemoteModule } from '../../types'\nimport { transRemoteModules } from '../remote'\nimport Layout from '../../scaffold/layout/index.vue'\nimport { getWhiteRoutes, isLodeRemoteRoutes } from './func'\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 await store.dispatch('user/info')\n const remoteRoute: RemoteModule[] = await store.dispatch('user/loadRemoteRoutes')\n const routeModules: OmsModule[] = transRemoteModules(remoteRoute)\n routeModules.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 store.commit('user/updateRemoteRouter', routeModules)\n await router.replace(to)\n next()\n })\n}\n","import { Router } from 'vue-router'\nimport store from '../../store'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, from, next) => {\n const settings = store.state.settings\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 if (Object.keys(to.meta).length > 0) {\n await store.dispatch('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 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 type { App, Component, Directive } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport type { OmsOptions, OmsPlugin, UsePlugin } from './types'\nimport type { AxiosInstance } from 'axios'\nimport type { Module } from 'vuex'\n\nimport AppComp from './App.vue'\nimport { startMock, regMockApis } from './mock'\nimport { AxiosRequestConfig, instance } from './utils/request'\nimport { isObject } from '@okiss/utils'\nimport { VIcon, setUploadHeaderHandle } from '@okiss/vbtf'\nimport { 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 locale from 'element-plus/lib/locale/lang/zh-cn'\n\nimport store from './store'\nimport router from './router'\nimport * as directives from './directive'\nimport { defaultOptions } from './default'\n\nexport let http: AxiosInstance\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 store.dispatch('setHttp', http).then()\n store.dispatch('settings/updateSettings', omsOptions?.settings).then()\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 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 regRoutes(routes: RouteRecordRaw[] = []) {\n routes.forEach(item => {\n router.addRoute(item)\n })\n store.commit('user/setCustomRoutes', routes)\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, Module<any, 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 store.registerModule(item, modules[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 store,\n router,\n [ElementPlus, { locale, ...options.settings?.ElementPlus }]\n ]\n }\n}\n"],"names":["args","match","number","onBeforeMount","loading","addNewStyle","addNewStyleTag","locale","zhCn","_b","_a","provide","_d","_c","MockHttpMethod","form","buttons","table","_","listMock","layoutForm","layoutSection","example","userApis","options","apis","user","defaultAxios","defaultSettings","defaultOptions","uniqueApis","regMockApis","item","key","realUrl","api","url","baseUrl","v","startMock","k","Mock","type","body","query","queryParams","data","mock","response","logGroup","TokenKey","getToken","Cookies","setToken","token","expires","store","removeToken","userModule","state","routes","value","commit","rootState","resolve","reject","error","roleIds","_e","resource","settings","cloneDeep","settingsModule","newSettings","merge","remoteConfig","app","_module","withoutAnimation","device","page","json","builderSchema","builderSchemaModule","createStore","http","Message","ElMessage","MessageBox","ElMessageBox","CancelToken","axios","task","config","cancelfun","c","cacheTime","cancelRequestInterceptor","cancel","cancelResponseInterceptor","baseRequestInterceptor","baseResponseInterceptor","message","action","_message_box","isString","_g","_f","interceptors","instance","conf","defaultConf","service","http$1","defaultMap","setCmp","name","cmp","getCmp","_sfc_main$s","defineComponent","setup","custom","_createVNode","_sfc_main","matched","first","route","path","pathToRegexp","params","_openBlock","_createElementBlock","_Fragment","_renderList","$data","index","_hoisted_1","_toDisplayString","_cache","$options","_normalizeClass","$props","_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","transData","ctrl","sourceCtrlOptions","get","eventBus","event","btnType","target","unset","compactObject","p","_withCtx","_createBlock","_component_v_form","_mergeProps","date","span","xenum","html","icon","image","link","rich","tpl","columns","jump","schema","toRefs","m","ctrlOptions","ctrlMapName","brick","filter","headers","rowButton","normalButton","batchButton","$event","_createTextVNode","_component_v_table","FormBuilder","TableBuilder","show","ref","direction","useRoute","$setup","Hamburger","PageEditor","showEleByClassName","noticeStr","text","Cache","_hoisted_2","_hoisted_5","_hoisted_8","_normalizeStyle","_createElementVNode","_hoisted_3","_hoisted_4","_ctx","_withScopeId","isExternal","routeData","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps","FixiOSBug","$subMenu","handleMouseleave","e","AppLink","child","filterHidden","arr","each","mapGetters","to","group","PageType","PageType2","MenuType","SidebarItem","Logo","SearchMenu","localRoutes","include","onBeforeRouteLeave","useStore","WIDTH","sidebar","computed","fixedHeader","classObj","isMobile","useEventListener","resizeHandler","handleClickOutside","ismobile","BaseSso","next","DingTalk","getQueryParam","getReloadUrl","extra","strVarReplace","obj2Param","getQrCodeUrl","onScanSuccess","origin","createIFrame","defaultSso","allSso","sso","active","router","useRouter","tips","login","res","Layout","Dashboard","Login","NotFoundPage","createRouter","createWebHashHistory","NProgress","nprogress","from","isLodeRemoteRoutes","getWhiteRoutes","permission","redirect","flag","_sfc_render","_sfc_main$9","VLoading","project","isObject","_component_el_alert","_createCommentVNode","_component_ElAlert","_component_VLoading","_renderSlot","schemaHandler","defaultSort","allowedProps","VTable","_sfc_main$6","saveApi","node","newChild","effectDataTrans","draggingNode","dropNode","_hoisted_6","__unplugin_components_4","_component_el_row","_component_el_col","_component_el_card","_component_el_button","_component_el_tree","VTree","onBeforeRouteUpdate","lienOption","makeOption","id","opt","xAxisData","keys","xkey","ykeys","i","_keys","seriesData","_sfc_main$2","VChart","Markdown","NumberPanel","props","comptype","isArray","onMounted","formData","formOptions","_filter","_dataPart","schemaapi","onsubmit","data2","bu","regViews","_bu","getComponent","loadCustom","_path","Container","Table","Form","Tree","Report","getPath","getName","transRoute","isShow","createList","createForm","createEdit","children","allChildHidden","transRemoteModules","vueRouteModule","remoteRoutes","remoteRoute","routeModules","setPageTitle","tokens","len","failure","guard","outClick","el","binding","mitt","rightClient","bus","resize","getElementPosition","element","result","devtool","wrapper","editBtn","editIcon","ev","delBtn","delIcon","useHttp","createAdmin","omsOptions","createApp","AppComp","omsPlugin","createOmsPlugin","plugins","regPlugin","setUploadHeaderHandle","regComponents","components","regRoutes","regUse","use","regDirective","directives2","regStoreModule","modules","keepModuleNames","plugin","VIcon","directives","ElementPlus"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/init.ts","../src/App.vue","../src/mock/types.ts","../src/mock/data/example.ts","../src/mock/apis/user.ts","../src/mock/apis/index.ts","../src/default.ts","../src/mock/index.ts","../src/utils/token.ts","../src/store/modules/user.ts","../src/store/modules/settings.ts","../src/store/modules/app.ts","../src/store/modules/builderSchema.ts","../src/store/index.ts","../src/plugins/element-plus.ts","../src/utils/request/cache.ts","../src/utils/request/interceptors.ts","../src/utils/request/index.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/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/utils/sso/index.ts","../src/scaffold/login.vue","../src/scaffold/404.vue","../src/router/router.ts","../src/router/guard/nprogress.ts","../src/router/guard/func.ts","../src/router/guard/permission.ts","../src/components/VLoading.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/router/remote.ts","../src/router/guard/remote-routes.ts","../src/router/guard/set-page-title.ts","../src/router/guard/index.ts","../src/router/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","<template>\n <el-config-provider :locale=\"locale\">\n <router-view />\n </el-config-provider>\n</template>\n\n<script setup lang=\"ts\">\nimport zhCn from 'element-plus/lib/locale/lang/zh-cn'\nimport { addNewStyle, addNewStyleTag } from '@okiss/utils'\nimport { provide } from 'vue'\n\nonBeforeMount(() => {\n const loading = document.getElementById('preloader')\n if (loading !== null) {\n document.body.removeChild(loading)\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})\nconst locale = zhCn\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 locale from 'element-plus/lib/locale/lang/zh-cn'\nimport { AxiosRequestConfig } from './utils/request'\nimport { OmsOptions } from './types'\nimport { Settings } from './types'\n\nconst defaultAxios: AxiosRequestConfig = {\n baseURL: '/api',\n withCredentials: true,\n timeout: 5000,\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: true,\n loginTips: '',\n sso: {},\n ElementPlus: {\n size: 'default',\n zIndex: 3000,\n locale: locale\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}\n\nexport const defaultOptions: OmsOptions = {\n axios: defaultAxios,\n settings: defaultSettings,\n plugins: [],\n mock: false\n}\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 Cookies from 'js-cookie'\nimport store 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 expires = new Date(new Date().getTime() + (store.state.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 { ActionContext, Module } from 'vuex'\nimport { RootState, strOrNum, User } from '../types'\nimport { LoginForm, LoginTicket, RemoteModule, 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'\n\nexport const user: 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}\n\nconst userModule: Module<User, any> = {\n namespaced: true,\n state: user,\n mutations: {\n updateToken(state: User, token: string) {\n state.token = token\n setToken(token)\n },\n removeToken(state: User) {\n state.token = ''\n removeToken()\n },\n updateRemoteRouter(state: User, routes: RemoteModule[]) {\n state.remoteRouter = routes\n state.isLodeRemoteRoutes = true\n },\n setCustomRoutes(state: User, routes: RouteRecordRaw[]) {\n state.customRouter = state.customRouter.concat(routes)\n },\n updateState<K extends keyof User>(state: User, { key, value }: { key: K, value: any }) {\n state[key] = value\n },\n resetUser(state: User) {\n state = Object.assign({\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 })\n }\n },\n actions: {\n login({\n commit,\n state,\n rootState\n }: ActionContext<User, RootState>, data: LoginForm | LoginTicket): Promise<boolean> {\n return new Promise<boolean>((resolve, reject) => {\n if (!rootState.http) {\n reject('http client not init')\n } else {\n rootState.http.request<UserInfo, ApiResponse<UserInfo>>({\n url: '/user/login',\n method: 'POST',\n data: data\n }).then((response: ApiResponse<UserInfo>) => {\n commit('updateToken', response.data?.token)\n resolve(true)\n }).catch(error => {\n reject(error)\n })\n }\n })\n },\n logout({ commit }: ActionContext<User, RootState>) {\n commit('removeToken')\n commit('resetUser')\n },\n info({ commit, rootState }: ActionContext<User, RootState>): Promise<boolean> {\n return new Promise<boolean>((resolve, reject) => {\n if (!rootState.http) {\n reject('http client not init')\n } else {\n rootState.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 commit('updateState', { key: 'name', value: response.data?.name })\n commit('updateState', { key: 'nickname', value: response.data?.nickname })\n // commit('updateState', { key: 'avatar', value: response.data?.avatar })\n commit('updateState', { key: 'roleIds', value: roleIds })\n commit('updateState', { key: 'env', value: response.data?.env })\n // @ts-ignore\n !Cookies.get('username') && Cookies.set('username', response.data?.name)\n resolve(true)\n }).catch(error => {\n reject(error)\n })\n }\n })\n },\n loadRemoteRoutes({ state, rootState }: ActionContext<User, RootState>): Promise<RemoteModule[]> {\n return new Promise<RemoteModule[]>((resolve, reject) => {\n rootState.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 }\n}\n\nexport default userModule\n","import { ActionContext, Module } from 'vuex'\nimport { Settings } from '../../types'\nimport { defaultSettings } from '../../default'\nimport { cloneDeep, merge } from 'lodash'\n\nexport const settings: Settings = cloneDeep(defaultSettings)\n\nconst settingsModule: Module<Settings, any> = {\n namespaced: true,\n state: settings,\n mutations: {\n updateSettings(state: Settings, newSettings: Settings) {\n state = merge(state, newSettings)\n }\n },\n actions: {\n updateSettings({ commit, state }: ActionContext<Settings, any>, remoteConfig: Settings) {\n commit('updateSettings', remoteConfig)\n }\n }\n}\n\nexport default settingsModule\n","import { ActionContext, Module } from 'vuex'\nimport { App, PageSchema, Sidebar } from '../types'\nimport Cookies from 'js-cookie'\n\nexport const app: App = {\n sidebar: {\n opened: Cookies.get('sidebarStatus') ? !!Cookies.get('sidebarStatus') : true,\n withoutAnimation: false\n },\n device: 'desktop',\n pages: {},\n currentRouteMeta: {},\n builderSchema: {}\n}\n\nconst _module: Module<App, any> = {\n namespaced: true,\n state: app,\n mutations: {\n TOGGLE_SIDEBAR: (state: App) => {\n state.sidebar.opened = !state.sidebar.opened\n state.sidebar.withoutAnimation = false\n if (state.sidebar.opened) {\n Cookies.set('sidebarStatus', '1')\n } else {\n Cookies.set('sidebarStatus', '0')\n }\n },\n CLOSE_SIDEBAR: (state: App, withoutAnimation: boolean) => {\n Cookies.set('sidebarStatus', '0')\n state.sidebar.opened = false\n state.sidebar.withoutAnimation = withoutAnimation\n },\n TOGGLE_DEVICE: (state: App, device: string) => {\n state.device = device\n },\n SET_PAGE_JSON_SCHEMA: (state: App, { page, json }: PageSchema) => {\n state.pages[page] = json\n },\n SET_CURRENT_META: (state: App, data: Record<string, any>) => {\n state.currentRouteMeta = data\n },\n SET_BUILDER_SCHEMA: (state: App, data: Record<string, any>) => {\n state.builderSchema = data\n }\n },\n actions: {\n toggleSideBar({ commit }: ActionContext<App, App>) {\n commit('TOGGLE_SIDEBAR')\n },\n closeSideBar({ commit }: ActionContext<App, App>, { withoutAnimation }: Sidebar) {\n commit('CLOSE_SIDEBAR', withoutAnimation)\n },\n toggleDevice({ commit }: ActionContext<App, App>, device: string) {\n commit('TOGGLE_DEVICE', device)\n },\n setPageJsonSchema({ commit }: ActionContext<App, App>, data: PageSchema) {\n commit('SET_PAGE_JSON_SCHEMA', data)\n },\n setCurrentMeta({ commit }: ActionContext<App, App>, data: Record<string, any>) {\n commit('SET_CURRENT_META', data)\n },\n setBuilderSchema({ commit }: ActionContext<App, App>, data: Record<string, any>) {\n commit('SET_BUILDER_SCHEMA', data)\n }\n }\n}\n\nexport default _module\n","/**\n * BuilderSchema\n * 存储pageEditor 编辑模式下时子组件联动相关的状态数据\n */\n\nimport { ActionContext, Module } from 'vuex'\n\nimport { BuilderSchema } from '../types'\n\nexport const builderSchema: BuilderSchema = {\n currentCellItem: {} // form/sub-form 当前单元格编辑数据\n}\n\nconst builderSchemaModule: Module<BuilderSchema, any> = {\n namespaced: true,\n state: builderSchema,\n mutations: {\n SET_CURRENT_CELLITEM: (state: BuilderSchema, data: Record<string, any>) => {\n state.currentCellItem = data\n }\n },\n actions: {\n setCurrentCellItem({ commit }: ActionContext<BuilderSchema, BuilderSchema>, data: Record<string, any>) {\n commit('SET_CURRENT_CELLITEM', data)\n }\n }\n}\n\nexport default builderSchemaModule\n","import type { App } from 'vue'\nimport user from './modules/user'\nimport settings from './modules/settings'\nimport app from './modules/app'\nimport builderSchema from './modules/builderSchema'\nimport { ActionContext, createStore } from 'vuex'\nimport { RootState } from './types'\nimport { AxiosInstance } from 'axios'\n\nconst store = createStore<RootState>({\n state: undefined,\n getters: {\n http: state => state.http,\n sidebar: state => state.app.sidebar,\n device: state => state.app.device,\n token: state => state.user.token,\n avatar: state => state.user.avatar,\n name: state => state.user.name,\n nickname: state => state.user.nickname,\n remoteRouter: state => state.user.remoteRouter,\n customRouter: state => state.user.customRouter,\n nav: state => state.settings.nav,\n builderSchema: state => state.app.builderSchema,\n currentCellItem: state => state.builderSchema.currentCellItem\n },\n mutations: {\n setHttp(state: RootState, http: AxiosInstance) {\n state.http = http\n }\n },\n actions: {\n setHttp({ commit, state }: ActionContext<RootState, any>, http: AxiosInstance) {\n commit('setHttp', http)\n }\n },\n modules: {\n user,\n settings,\n app,\n builderSchema\n }\n})\n\nexport function setupStore(app: App<Element>) {\n app.use(store)\n}\n\nexport default store\n","import ElementPlus, { ElMessage, ElMessageBox } from 'element-plus'\nimport 'element-plus/dist/index.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 } from 'axios'\nimport { AxiosRequestConfig } from './index'\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 axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport store 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'\n// @ts-nocheck\nfunction getToken() {\n return store.state.user.token\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 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 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 }\n })\n return\n } else {\n Message({\n message: message,\n type: 'error',\n duration: 5 * 1000\n })\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 ..._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 Message({\n message: `${error.message} ${error.config.method}::${error.config.url?.split('?')[0]}`,\n type: 'error',\n duration: 5 * 1000\n })\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 as C } from 'axios'\nimport { defaultOptions } from '../../default'\nimport { merge } from 'lodash'\nimport { interceptors } from './interceptors'\n\nexport interface AxiosRequestConfig extends C {\n cacheTime?: number,\n cacheEnable?: boolean,\n notHoldApiErr?: boolean\n}\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 { 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 { useStore } from 'vuex'\nimport { getCmp } from '../utils/container'\n\nexport default defineComponent({\n name: 'Dashboard',\n setup() {\n const store = useStore()\n const name = computed(() => store.getters.name)\n const custom = getCmp('test')\n if (custom) {\n return () => <custom/>\n }\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 \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 console.log(111, 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 \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 { 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 return this.$store.state.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 this.$store.dispatch('app/setBuilderSchema', this.builderSchema)\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 console.log(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 console.log(m)\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 custom-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>\nimport FormBuilder from '../../devtool/formBuilder/index.vue'\nimport TableBuilder from '../../devtool/tableBuilder/index.vue'\nimport store from '../../../store'\nimport { useRoute } from 'vue-router'\n\nexport default {\n name: 'PageEditor',\n components: { FormBuilder, TableBuilder },\n setup() {\n const show = ref(false)\n const key = ref(1)\n const direction = 'rtl'\n const route = useRoute()\n const pageSchema = computed(() => {\n return store.state.app.pages[route.path]\n })\n\n return { show, key, direction, pageSchema: pageSchema }\n }\n}\n</script>\n","<template>\n <el-row ref=\"header\" class=\"navbar\" :style=\"{background: setting.envColor[user.env]}\">\n <el-col :span=\"16\">\n <hamburger\n :is-active=\"sidebar.opened\"\n class=\"hamburger-container\"\n @toggleClick=\"toggleSideBar\"\n />\n <breadcrumb class=\"breadcrumb-container\" />\n </el-col>\n <el-col :span=\"8\">\n <div class=\"right-content\">\n <div class=\"right-item\">\n <VIcon\n name=\"ra-code\"\n @click=\"gotoMenuEdit\"\n />\n </div>\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-dropdown\n class=\"right-item\"\n trigger=\"click\"\n >\n <div class=\"user-info\">\n <img\n :src=\"avatar ? avatar : defaultAvatar\"\n class=\"user-avatar\"\n alt=\"头像\"\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>\nimport { mapGetters } from 'vuex'\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'\n\nexport default {\n components: {\n Breadcrumb,\n Hamburger,\n VButton,\n PageEditor\n },\n data() {\n return {\n showExportPop: false,\n modulesList: this.getSetting('system_module'),\n showJsonSchema: false,\n json: '',\n key: 0,\n defaultAvatar: this.getSetting('defaultAvatar')\n }\n },\n computed: {\n ...mapGetters(['sidebar', 'avatar', 'name', 'nickname', 'nav']),\n hasNewMessage() {\n return this.$store.state.settings.hasNewMessage\n },\n moduleName() {\n return this.$store.state.app.moduleName\n },\n setting() {\n return this.$store.state.settings\n },\n user() {\n return this.$store.state.user\n },\n showPageJsonSchemaIcon() {\n return this.$store.state.settings.showPageJsonSchema || false\n }\n },\n mounted() {\n showEleByClassName('el-submenu is-active')\n const noticeStr = this.getSetting('navBarNotice')\n if (noticeStr.length > 0 && !this.getSetting('closeNavNotice') && this.showNotice(noticeStr)) {\n this.$notify({\n title: '提示',\n message: noticeStr,\n dangerouslyUseHTMLString: true,\n duration: 0,\n onClose: this.closeNavBarNotice\n })\n }\n if (!!this.setting.envColor[this.user.env]) {\n waterMarker({\n elRef: this.$refs.header.$el, \n waterMark: this.user.env,\n color:\"skyblue\",\n size: \"20\"\n })\n }\n },\n methods: {\n toggleSideBar() {\n this.$store.dispatch('app/toggleSideBar')\n },\n async logout() {\n await this.$store.dispatch('user/logout')\n location.reload(`${location.origin}/#/login?redirect=${this.$route.fullPath}`)\n },\n getSetting(name) {\n return this.$store.state.settings[name]\n },\n async closeNavBarNotice() {\n await this.$store.commit('settings/updateSettings', { closeNavNotice: true })\n this.closeNotice(this.getSetting('navBarNotice'))\n },\n showPopover() {\n this.showExportPop = true\n },\n showNotice(text) {\n const key = 'dismiss:navbar_notice'\n if (!Cache.exist(key)) {\n return true\n }\n return Cache.get(key) !== text\n },\n closeNotice(text) {\n const key = 'dismiss:navbar_notice'\n Cache.set(key, text)\n },\n gotoMenuEdit() {\n if (this.$route?.meta?.pageId) {\n window.open(location.origin + location.pathname + '#/menu/' + this.$route?.meta?.pageId)\n }\n }\n }\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 .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 }\n\n .user-avatar {\n width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 50%;\n margin: 0 10px 0 0;\n color: #1890ff;\n vertical-align: middle;\n background: hsla(0, 0%, 100%, 0.85);\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 <img\n v-if=\"logo\"\n :src=\"logo\"\n class=\"sidebar-logo\"\n >\n <h1\n v-else\n class=\"sidebar-title\"\n >{{ title }}</h1>\n <div>系统</div>\n </router-link>\n <router-link\n v-else\n key=\"expand\"\n class=\"sidebar-logo-link\"\n to=\"/\"\n >\n <img\n v-if=\"logo\"\n :src=\"logo\"\n class=\"sidebar-logo\"\n >\n <h1 class=\"sidebar-title\">{{ title }}</h1>\n </router-link>\n </transition>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SidebarLogo',\n props: {\n collapse: {\n type: Boolean,\n required: true\n }\n },\n computed: {\n title() {\n return this.$store.state.settings.title\n },\n logo() {\n return this.$store.state.settings.logo\n }\n }\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: #2b2f3a;\n text-align: center;\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: #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\n &.collapse {\n .sidebar-logo {\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 // @ts-ignore\n return this.$store.state.app.device\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 <div\n v-if=\"item.hidden !== false\"\n class=\"menu-wrapper\"\n >\n <!-- 没有子菜单 -->\n <template v-if=\"item.meta && item.meta.menuType === 2\">\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 >\n <menu-content :meta=\"item.meta\" />\n </el-menu-item>\n </app-link>\n </template>\n <!-- 有子菜单 -->\n <el-sub-menu\n v-else-if=\"item.meta && item.meta.menuType === 1\"\n ref=\"subMenu\"\n :index=\"to\"\n :class=\"{ 'submenu-title-noDropdown': !isNest }\"\n popper-append-to-body\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 </div>\n</template>\n\n<script>\nimport AppLink from './Link.vue'\nimport FixiOSBug from './FixiOSBug'\nimport MenuContent from './MenuContent.vue'\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 },\n methods: {\n getTo(child) {\n try {\n return this.$router.resolve(child.redirect ? child.redirect : child).fullPath\n } catch (e) {\n console.error('路由解析错误')\n console.log(child)\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=\"item.path\"\n />\n </template>\n </el-option-group>\n </template>\n <template v-else>\n <el-option\n :label=\"'' + group.meta.title\"\n :value=\"group.path\"\n />\n </template>\n </template>\n </el-select>\n</template>\n<script>\nimport { mapGetters } from 'vuex'\nimport { cloneDeep } from 'lodash'\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\nexport default {\n data() {\n return {\n selected: ''\n }\n },\n computed: {\n ...mapGetters(['remoteRouter']),\n filterRoutes() {\n let routes = []\n this.remoteRouter.forEach(item => {\n routes = routes.concat(cloneDeep(item.routes))\n })\n return filterHidden(routes)\n }\n },\n methods: {\n onselected: function(to) {\n this.$router.push(to)\n this.selected = ''\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.search-menu {\n width: 100%;\n padding: 15px 20px 0 20px;\n\n ::v-deep(.el-input__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 { Module } from 'vuex'\nimport { MockApi } from './mock/types'\nimport { Sso } from './utils/sso'\n\nexport interface Nav {\n}\n\nexport type newSso = (params: Record<string, any>) => 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}\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 storeModules?: Record<string, Module<any, 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}\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}\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 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 />\n </template>\n </el-menu>\n </el-scrollbar>\n </div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\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'\n\nexport default defineComponent({\n components: { SidebarItem, Logo, SearchMenu },\n computed: {\n ...mapGetters(['sidebar', 'remoteRouter', 'customRouter']),\n routes() {\n let localRoutes = []\n this.$router.options.routes.concat(this.customRouter || []).forEach(item => {\n if (item.path === '/') {\n localRoutes = localRoutes.concat(item.children || [])\n } else {\n localRoutes.push(item)\n }\n })\n console.log(cloneDeep([\n {\n label: '',\n routes: localRoutes\n },\n ...this.remoteRouter\n ]))\n return cloneDeep([\n {\n label: '',\n routes: localRoutes\n },\n ...this.remoteRouter\n ])\n },\n activeMenu() {\n console.log(2222, this.$route)\n let m = this.$route.matched\n\n for(let i = m.length - 1; i >= 0; i--) {\n let tmp = m[i]\n if (tmp.meta.menuType == MenuType.menu) {\n return this.$router.resolve(tmp.redirect ? tmp.redirect : tmp).fullPath \n }\n }\n \n return ''\n },\n showLogo() {\n return this.$store.state.settings.sidebarLogo\n },\n variables() {\n return {\n menuBg: '#304156',\n menuText: '#bfcbd9',\n menuActiveText: '#409EFF'\n }\n },\n isCollapse() {\n return !this.sidebar.opened\n }\n },\n mounted() {\n showEleByClassName('is-active')\n },\n methods: {\n filterRoute(arr) {\n return arr.filter(item => {\n // console.log(item, [1, 2].indexOf(item.meta.menuType) > 0)\n // 1 目录 2 菜单\n return [MenuType.dir, MenuType.menu].indexOf(item.meta.menuType) !== -1\n }).map(item => {\n item = Object.assign({}, item)\n if (item.children) {\n item.children = this.filterRoute(item.children)\n }\n return item\n })\n }\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 { useStore } from 'vuex'\n\nconst store = useStore()\nconst { body } = document\nconst WIDTH = 992 // refer to Bootstrap's responsive design\n\nconst sidebar = computed(() => {\n return store.state.app.sidebar\n})\n\nconst device = computed(() => {\n return store.state.app.device\n})\n\nconst fixedHeader = computed(() => {\n return store.state.settings.fixedHeader\n})\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\nuseEventListener(window, 'resize', () => resizeHandler())\n\nconst handleClickOutside = () => {\n store.dispatch('app/closeSideBar', { withoutAnimation: false })\n}\n\nconst resizeHandler = () => {\n if (!document.hidden) {\n const ismobile = isMobile()\n store.dispatch('app/toggleDevice', ismobile ? 'mobile' : 'desktop')\n if (ismobile) {\n store.dispatch('app/closeSideBar', { withoutAnimation: true })\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../styles/mixin\";\n@import \"../../styles/variables\";\n\n.app-wrapper {\n @include clearfix;\n position: relative;\n height: 100%;\n width: 100%;\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: absolute;\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","import { NavigationGuardNext } from 'vue-router'\nimport { getQueryParam, obj2Param, strVarReplace, createIFrame } from '@okiss/utils'\nimport store from '../../store'\nimport { newSso } from '../../types'\nimport { merge } from 'lodash'\n\nexport type SsoType = 'jump' | 'qrcode'\n\nexport interface Sso {\n flag(): string | 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(): string | undefined {\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void {\n next(path)\n }\n\n showQrCode(): void {\n }\n}\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(): string | undefined {\n const code = getQueryParam('code')\n if (code) {\n return code\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\nconst defaultSso: Record<string, newSso> = {\n 'dingtalk': p => new DingTalk(p)\n}\n\nexport function allSso(): Record<string, newSso> {\n return merge<Record<string, newSso>, Record<string, newSso>>(store.state.settings.sso || {}, defaultSso)\n}\n\nexport default function(options: Record<string, any>): Sso | undefined {\n const sso = allSso()\n const key = store.state.settings.activeSsoKey || ''\n const active = sso[key]\n if (active !== undefined) {\n return active(options)\n }\n return undefined\n}\n\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\n class=\"input button\"\n @click=\"login\"\n >登录</div>\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 store from '../store'\nimport sso, { allSso } from '../utils/sso'\n\nconst router = useRouter()\nconst route = useRoute()\nconst tips = computed(() => store.state.settings.loginTips)\nconst allsso = () => allSso()\n\nconst data = ref({\n username: '',\n password: ''\n})\n\nconst login = () => {\n if (data.value.username === '' || data.value.password === '') {\n ElMessage.error('请填写用户名和密码')\n return\n }\n store.dispatch('user/login', data.value).then(res => {\n router.push({ path: route.query?.redirect as string || '/' })\n })\n return\n}\n\nconst loginType = ref()\n\nconst changLoginChannel = () => {\n if (loginType.value) {\n return\n }\n const redirect_url = location.origin + location.pathname + '#' + (route.params.redirect || '')\n const params = {\n elId: 'sso-qrcode',\n redirect_uri: redirect_url,\n iframe: {\n width: '280px',\n height: '320px'\n }\n }\n sso(params)?.showQrCode()\n}\n</script>\n\n<style lang=\"scss\">\n$bg: #2d3a4b;\n$dark_gray: #889aa4;\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 #title {\n color: #fff;\n }\n #form {\n width: 300px;\n margin: 10px auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n .input {\n width: 300px;\n height: 40px;\n margin: 10px auto;\n padding: 10px;\n }\n .button {\n width: 300px;\n height: 40px;\n border: 1px solid #fff;\n background: #fff;\n }\n }\n .tips, .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 store 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 if (to.matched.length > 0) {\n store.commit('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 store from '../../store'\n\nexport function isLodeRemoteRoutes(): boolean {\n return store.state.user.isLodeRemoteRoutes\n}\n\nexport function getWhiteRoutes(): Array<string | RegExp> {\n return store.state.settings.whiteRoutes || []\n}\n\nexport function getToken() {\n return store.state.user.token\n}\n","import { Router } from 'vue-router'\nimport store from '../../store'\nimport { getToken, getWhiteRoutes } from './func'\nimport sso from '../../utils/sso'\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 if (flag && await store.dispatch('user/login', { 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 <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\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 <ElAlert\n v-if=\"haveNotice\"\n v-bind=\"notice\"\n style=\"margin: 0 0 20px 0\"\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\">\nimport VLoading from './VLoading.vue'\nimport { isObject, isString } from '@okiss/utils'\nimport store from '../store'\n\nexport default defineComponent({\n components: { VLoading },\n props: {\n schemaHandler: {\n type: Function,\n default: function(val: any, project: string) { return val }\n },\n schemaApi: {\n type: String,\n default: ''\n }\n },\n data() {\n return {\n loading: true,\n haveNotice: false,\n notice: {},\n schema: {},\n owners: [],\n serviceOffLine: false\n }\n },\n computed: {\n env() {\n return this.$store.state.user.env\n },\n setting() {\n return this.$store.state.settings\n }\n },\n beforeCreate() {\n const token = this.$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' + this.$route.meta.path\n // const conf = { cacheTime: 10 * 60 * 1000, params: this.$route.params }\n const conf = { params: this.$route.params }\n this.$http.get(this.$props.schemaApi || api, conf).then(({ data }) => {\n this.loading = false\n if (data.notice !== undefined) {\n this.haveNotice = true\n if (isString(data.notice)) {\n this.notice = {\n title: data.notice\n }\n } else if (isObject(data.notice)) {\n this.notice = data.notice\n }\n delete data['notice']\n }\n this.owners = data.ownerNames || []\n this.serviceOffLine = data.serviceOffLine || false\n this.schema = this.$props.schemaHandler(data, project)\n store.commit('app/SET_PAGE_JSON_SCHEMA', { page: this.$route.path, json: this.schema })\n })\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 } from 'vue-router'\nconst route = useRoute()\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</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'\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'\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 type { RouteRecordRaw } from 'vue-router'\nimport { MenuType, OmsModule, PageInfo, PageType, RemoteModule } from '../types'\nimport { Component } from 'vue'\nimport { Container, Form, Report, Table, Tree } 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 Container\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 },\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 }\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 }\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 }\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 { Router } from 'vue-router'\nimport store from '../../store'\nimport { OmsModule, RemoteModule } from '../../types'\nimport { transRemoteModules } from '../remote'\nimport Layout from '../../scaffold/layout/index.vue'\nimport { getWhiteRoutes, isLodeRemoteRoutes } from './func'\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 await store.dispatch('user/info')\n const remoteRoute: RemoteModule[] = await store.dispatch('user/loadRemoteRoutes')\n const routeModules: OmsModule[] = transRemoteModules(remoteRoute)\n routeModules.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 store.commit('user/updateRemoteRouter', routeModules)\n await router.replace(to)\n next()\n })\n}\n","import { Router } from 'vue-router'\nimport store from '../../store'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, from, next) => {\n const settings = store.state.settings\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 if (Object.keys(to.meta).length > 0) {\n await store.dispatch('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 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 type { App, Component, Directive } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport type { OmsOptions, OmsPlugin, UsePlugin } from './types'\nimport type { AxiosInstance } from 'axios'\nimport type { Module } from 'vuex'\n\nimport AppComp from './App.vue'\nimport { startMock, regMockApis } from './mock'\nimport { AxiosRequestConfig, instance } from './utils/request'\nimport { isObject } from '@okiss/utils'\nimport { VIcon, setUploadHeaderHandle } from '@okiss/vbtf'\nimport { 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 locale from 'element-plus/lib/locale/lang/zh-cn'\n\nimport store from './store'\nimport router from './router'\nimport * as directives from './directive'\nimport { defaultOptions } from './default'\n\nexport let http: AxiosInstance\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 store.dispatch('setHttp', http).then()\n store.dispatch('settings/updateSettings', omsOptions?.settings).then()\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 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 regRoutes(routes: RouteRecordRaw[] = []) {\n routes.forEach(item => {\n router.addRoute(item)\n })\n store.commit('user/setCustomRoutes', routes)\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, Module<any, 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 store.registerModule(item, modules[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 store,\n router,\n [ElementPlus, { locale, ...options.settings?.ElementPlus }]\n ]\n }\n}\n"],"names":["args","match","number","onBeforeMount","loading","addNewStyle","addNewStyleTag","locale","zhCn","_b","_a","provide","_d","_c","MockHttpMethod","form","buttons","table","_","listMock","layoutForm","layoutSection","example","userApis","options","apis","user","defaultAxios","defaultSettings","defaultOptions","uniqueApis","regMockApis","item","key","realUrl","api","url","baseUrl","v","startMock","k","Mock","type","body","query","queryParams","data","mock","response","logGroup","TokenKey","getToken","Cookies","setToken","token","expires","store","removeToken","userModule","state","routes","value","commit","rootState","resolve","reject","error","roleIds","_e","resource","settings","cloneDeep","settingsModule","newSettings","merge","remoteConfig","app","_module","withoutAnimation","device","page","json","builderSchema","builderSchemaModule","createStore","http","Message","ElMessage","MessageBox","ElMessageBox","CancelToken","axios","task","config","cancelfun","c","cacheTime","cancelRequestInterceptor","cancel","cancelResponseInterceptor","baseRequestInterceptor","baseResponseInterceptor","message","action","_message_box","isString","_g","_f","interceptors","instance","conf","defaultConf","service","http$1","defaultMap","setCmp","name","cmp","getCmp","_sfc_main$s","defineComponent","setup","custom","_createVNode","_sfc_main","matched","first","route","path","pathToRegexp","params","_openBlock","_createElementBlock","_Fragment","_renderList","$data","index","_hoisted_1","_toDisplayString","_cache","$options","_normalizeClass","$props","_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","transData","ctrl","sourceCtrlOptions","get","eventBus","event","btnType","target","unset","compactObject","p","_withCtx","_createBlock","_component_v_form","_mergeProps","date","span","xenum","html","icon","image","link","rich","tpl","columns","jump","schema","toRefs","m","ctrlOptions","ctrlMapName","brick","filter","headers","rowButton","normalButton","batchButton","$event","_createTextVNode","_component_v_table","FormBuilder","TableBuilder","show","ref","direction","useRoute","$setup","Hamburger","PageEditor","showEleByClassName","noticeStr","text","Cache","_hoisted_2","_hoisted_5","_hoisted_7","_normalizeStyle","_createElementVNode","_hoisted_3","_hoisted_4","_ctx","_withScopeId","isExternal","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps","FixiOSBug","$subMenu","handleMouseleave","e","AppLink","child","filterHidden","arr","each","mapGetters","to","group","PageType","PageType2","MenuType","SidebarItem","Logo","SearchMenu","localRoutes","include","onBeforeRouteLeave","useStore","WIDTH","sidebar","computed","fixedHeader","classObj","isMobile","useEventListener","resizeHandler","handleClickOutside","ismobile","BaseSso","__publicField","next","DingTalk","getQueryParam","getReloadUrl","extra","strVarReplace","obj2Param","getQrCodeUrl","onScanSuccess","origin","createIFrame","defaultSso","allSso","sso","active","router","useRouter","tips","login","res","Layout","Dashboard","Login","NotFoundPage","createRouter","createWebHashHistory","NProgress","nprogress","from","isLodeRemoteRoutes","getWhiteRoutes","permission","redirect","flag","_sfc_render","_sfc_main$9","VLoading","project","isObject","_component_el_alert","_createCommentVNode","_component_ElAlert","_component_VLoading","_renderSlot","schemaHandler","defaultSort","allowedProps","VTable","_sfc_main$6","saveApi","node","newChild","effectDataTrans","draggingNode","dropNode","__unplugin_components_4","_component_el_row","_component_el_col","_component_el_card","_component_el_button","_component_el_tree","VTree","onBeforeRouteUpdate","lienOption","makeOption","id","opt","xAxisData","keys","xkey","ykeys","i","_keys","seriesData","_sfc_main$2","VChart","Markdown","NumberPanel","props","comptype","isArray","onMounted","formData","formOptions","_filter","_dataPart","schemaapi","onsubmit","data2","bu","regViews","_bu","getComponent","loadCustom","_path","Container","Table","Form","Tree","Report","getPath","getName","transRoute","isShow","createList","createForm","createEdit","children","allChildHidden","transRemoteModules","vueRouteModule","remoteRoutes","remoteRoute","routeModules","setPageTitle","tokens","len","failure","guard","outClick","el","binding","mitt","rightClient","bus","resize","getElementPosition","element","result","devtool","wrapper","editBtn","editIcon","ev","delBtn","delIcon","useHttp","createAdmin","omsOptions","createApp","AppComp","omsPlugin","createOmsPlugin","plugins","regPlugin","setUploadHeaderHandle","regComponents","components","regRoutes","regUse","use","regDirective","directives2","regStoreModule","modules","keepModuleNames","plugin","VIcon","directives","ElementPlus"],"mappings":"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"}
|