@okiss/oms 0.0.50 → 0.0.51
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 +2 -2
- package/dist/index.es.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
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/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/base.ts","../src/utils/sso/github.ts","../src/utils/sso/dingtalk.ts","../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/notice/VNotice.vue","../src/components/PageLoad.vue","../src/scaffold/table.vue","../src/scaffold/form.vue","../src/components/VTree.vue","../src/scaffold/tree.vue","../src/scaffold/container.vue","../src/components/report/option.ts","../src/components/report/NumberPanel.vue","../src/components/report/part.vue","../src/components/report/index.vue","../src/scaffold/report.vue","../src/render/index.tsx","../src/scaffold/custom.vue","../src/router/remote.ts","../src/router/guard/remote-routes.ts","../src/router/guard/set-page-title.ts","../src/router/guard/index.ts","../src/router/index.ts","../src/utils/request/interceptors.ts","../src/utils/request/index.ts","../src/directive/outClick.ts","../src/plugins/eventBus.ts","../src/directive/rightClick.ts","../src/directive/resize.ts","../src/directive/devtool.ts","../src/admin.ts"],"sourcesContent":["/* eslint-disable */\ninterface String {\n format(...replacements: string[]): string;\n}\n\nif (!String.prototype.format) {\n String.prototype.format = function () {\n const args = arguments\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] !== 'undefined'\n ? args[number]\n : match\n })\n }\n}\n","<template>\n <router-view />\n</template>\n\n<script setup lang=\"ts\">\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 document.getElementById('preloader')?.remove()\n addNewStyle('test-icon', '//at.alicdn.com/t/font_2246548_zclaqxwmzq8.css')\n\n const css = `.iconfont {\n font-size: 19px;\n font-style: normal;\n -webkit-font-smoothing: antialiased;\n font-family: iconfont !important;\n }`\n\n addNewStyleTag(css)\n }\n})\n\nif (window?.OmsOptions?.form?.vsPath) {\n provide('vsPath', window?.OmsOptions?.form?.vsPath)\n}\n</script>\n","export enum MockHttpMethod {\n GET = 'get',\n POST = 'post',\n DELETE = 'delete',\n FETCH = 'fetch',\n OPTION = 'option',\n PUT = 'put'\n}\n\nexport interface MockOption {\n query: Record<string, any>,\n data: Record<string, any>\n}\n\nexport interface MockApi {\n method: MockHttpMethod,\n url: string | RegExp,\n baseURL?: string,\n response: (options: MockOption) => Record<string, any>\n}\n\nexport interface MockApiMap {\n [key: string]: MockApi\n}\n","import _ from 'lodash'\n\nconst form = {\n saveApi: '/save',\n afterSubmit: '',\n afterReset: 'goback',\n options: {\n column: 3,\n submitButton: {\n text: '提交'\n },\n cancelButton: {\n text: '取消',\n on: {\n click: '() => console.error(33333333)'\n }\n }\n },\n formItems: [\n {\n type: 'radio',\n field: 'radio',\n label: '单选框',\n info:\n '表单控件支持提示信息, 可写html <a class=\"el-link el-link--primary is-underline\" target=\"_blank\" href=\"http://github.com/daodao97\">文档</a>',\n options: [\n {\n value: 1,\n label: '选项1'\n },\n {\n value: 2,\n label: '选项2'\n }\n ],\n value: 1,\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n field: 'input',\n label: '输入框',\n value: 5,\n props: {\n maxlength: 10,\n suffixIcon: 'el-icon-date',\n slots: {\n prepend: '前缀'\n },\n showCopy: true,\n prefixIcon: 'el-icon-search'\n },\n rules: [{ required: true, message: '该项为必填项' }],\n depend: {\n field: 'radio',\n value: 1\n },\n computed: [\n {\n when: 'aaa',\n set: {\n checkbox: {\n value: [1]\n }\n }\n },\n {\n when: 'bbb',\n set: {\n checkbox: {\n value: [2, 3]\n }\n }\n }\n ],\n info: '当前控件依赖 单选框 的值, 仅在 选项1 下显示',\n col: {\n span: 12\n }\n },\n {\n type: 'number',\n field: 'number',\n label: '数字',\n props: {\n step: 2\n },\n computed: {\n // when: [\"$self\", \">\", 10],\n // when: [\">\", 3],\n when: 4,\n set: {\n range_number: {\n label: '数字区间2'\n }\n }\n },\n col: {\n span: 12\n },\n value: 4\n },\n {\n type: 'number-range',\n field: 'range_number',\n label: '数字区间',\n col: {\n span: 12\n }\n },\n {\n type: 'checkbox',\n field: 'checkbox',\n label: '复选框',\n value: [],\n options: [\n { value: 1, label: '复选框1' },\n { value: 2, label: '复选框2' },\n { value: 3, label: '复选框3' }\n ],\n info: '动态计算, 当 输入框 字段的值 为 aaa 时, 复选框1将被选中, 为 bbb 时, 复选框2,3 将被选中',\n col: {\n span: 8\n }\n },\n {\n type: 'date',\n field: 'date',\n label: '日期',\n props: {\n disabled: true\n },\n info: '禁用控件',\n col: {\n span: 8\n }\n },\n {\n type: 'date',\n field: 'date_range',\n label: '日期范围',\n value: '',\n props: {\n type: 'daterange',\n rangeSeparator: '~',\n startPlaceholder: '开始日期',\n endPlaceholder: '结束日期'\n },\n col: {\n span: 8\n }\n },\n {\n type: 'time',\n field: 'time',\n label: '时间'\n },\n {\n type: 'time',\n field: 'time_range',\n label: '时间范围',\n props: {\n isRange: true\n }\n },\n {\n type: 'datetime',\n field: 'datetime',\n label: '日期时间'\n },\n {\n type: 'datetime',\n field: 'datetime_range',\n label: '日期时间范围',\n props: {\n type: 'datetimerange'\n }\n },\n {\n type: 'select',\n field: 'select',\n label: '下拉框',\n options: [\n { value: 1, label: '选项1' },\n { value: 2, label: '选项2' },\n { value: 3, label: '选项3' },\n { value: 4, label: '选项4' }\n ],\n props: {\n selectApi: '/user/select'\n }\n },\n {\n type: 'switch',\n field: 'switch',\n label: '开关'\n },\n {\n type: 'slider',\n field: 'slider',\n label: '滑块'\n },\n {\n type: 'upload',\n field: 'upload',\n label: '上传',\n value: 'http://qupinapptest.oss-cn-beijing.aliyuncs.com/1/202002/d81d3c9dc7c3df7590d333f783a97995.jpeg',\n props: {}\n },\n {\n type: 'upload',\n field: 'upload_multiple',\n label: '上传多张',\n props: {\n limit: 3\n }\n },\n {\n type: 'transfer',\n field: 'transfer',\n label: '穿梭框',\n options: [\n { value: 1, label: '备选项1' },\n { value: 2, label: '备选项2' },\n { value: 3, label: '备选项3' }\n ],\n value: []\n },\n {\n type: 'color',\n field: 'color',\n label: '颜色'\n },\n {\n type: 'rate',\n field: 'rate',\n label: '评分',\n value: 3\n },\n {\n type: 'sub-form',\n field: 'sub_form',\n label: '多项子表单',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'sub_input',\n label: '输入框',\n rules: [\n {\n required: true,\n message: '子表单的校验将在上层表单校验通过后执行'\n }\n ],\n info: 'input 输入框支持 mask',\n props: {\n mask: '99-9999999'\n }\n },\n {\n type: 'input',\n field: 'sub_input_1',\n label: '输入框1'\n }\n ]\n }\n },\n {\n type: 'sub-form',\n field: 'sub_form_not_repeat',\n label: '子表单',\n props: {\n options: {\n inline: true\n },\n formItems: [\n {\n type: 'input',\n field: 'sub_input',\n label: '输入框',\n rules: [\n {\n required: true,\n message: '子表单的校验将在上层表单校验通过后执行'\n }\n ]\n },\n {\n type: 'input',\n field: 'sub_input_1',\n label: '输入框1'\n }\n ]\n }\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'json',\n field: 'json',\n label: 'json',\n value: '{\"a\":1}'\n },\n {\n type: 'rule',\n field: 'rule',\n label: 'rule',\n value: [],\n props: {\n factorOptions: [{ label: 'A', value: 'A' }, { label: 'B', value: 'B' }, { label: 'C', value: 'C' }],\n symbolOptions: [{ label: '大于', value: '>' }, { label: '等于', value: '=' }, { label: '小于', value: '<' }]\n }\n },\n {\n type: 'template',\n field: 'p3',\n label: '自定义',\n comp: {\n inject: ['formData'],\n template: '<div>{{ msg }}<br/>当前的表单数据是:<pre>{{JSON.stringify(formData, null, 2)}}</pre><el-button @click=\"onclick\">click</el-button></div>',\n data: {\n msg: 'this is custom data'\n },\n methods: {\n onclick: '() => { console.log(this)}'\n }\n },\n info: '在通用表单控件无法满足需求时, 可以编写 `template` 模板组件'\n }\n ]\n}\n\nconst buttons = [\n {\n type: 'jump',\n text: '跳转',\n target: 'http://github.com/daodao97'\n },\n {\n type: 'api',\n text: '请求接口',\n target: '/test_api',\n extra: {\n method: 'POST',\n url: '/test_api'\n },\n props: {\n type: 'warning'\n }\n },\n {\n type: 'table',\n text: '表格',\n extra: {\n infoApi: '/student/list_info',\n listApi: '/student/list'\n },\n props: {\n type: 'info'\n }\n },\n [\n {\n type: 'jump',\n text: '跳转',\n target: 'http://github.com/daodao97'\n },\n {\n type: 'api',\n text: '请求接口',\n extra: {\n method: 'POST',\n url: '/test_api'\n }\n }\n ],\n {\n type: 'form',\n text: '表单',\n extra: {\n infoApi: '/form',\n saveApi: '/save'\n },\n props: {\n type: 'success'\n }\n }\n]\n\nconst table = {\n exportAble: true,\n filter: [\n {\n field: 'name',\n type: 'input',\n label: '姓名'\n },\n {\n field: 'sex',\n type: 'select',\n label: '性别',\n options: [\n { value: 1, label: '男' },\n { value: 0, label: '女' }\n ]\n }\n ],\n headers: [\n {\n field: 'name',\n label: '姓名',\n info: '表头提示'\n },\n {\n field: 'sex',\n type: 'enum',\n label: '性别',\n options: [\n { value: 1, label: '男' },\n { value: 0, label: '女' }\n ],\n state: {\n 1: 'info',\n 0: 'warning'\n },\n props: {\n sortable: true\n }\n },\n {\n field: 'github',\n type: 'link',\n label: '主页'\n },\n {\n field: 'html',\n type: 'html',\n label: 'HTML'\n },\n {\n field: 'image',\n type: 'image',\n label: '头像'\n },\n {\n field: 'json',\n type: 'json',\n label: '信息'\n },\n {\n field: 'richText',\n type: 'rich-text',\n label: '信息'\n }\n ],\n batchButton: buttons,\n rowButton: [\n {\n type: 'jump',\n text: '编辑',\n target: '/user/{id}'\n },\n {\n type: 'form',\n extra: {\n infoApi: '/user/{id}',\n saveApi: '/user/{id}'\n },\n props: {\n icon: 'el-icon-edit',\n type: 'success'\n }\n },\n {\n type: 'api',\n extra: {\n method: 'POST',\n url: '/student/{id}'\n },\n props: {\n icon: 'el-icon-delete',\n type: 'danger'\n }\n }\n ],\n normalButton: [\n ..._.cloneDeep(buttons),\n {\n type: 'jump',\n target: '/user/form',\n props: {\n icon: 'el-icon-plus',\n type: 'primary'\n }\n }\n ],\n selectedNotice: '当前共勾选: {selectedCount} 条',\n listApi: '/user/list'\n}\n\nconst listMock = {\n code: 0,\n data: {\n 'list|0-100': [\n {\n 'id|0-1000': 1,\n name: '@cname',\n 'sex|0-1': 1,\n 'score|0-100': 60,\n link: 'http://github.com/daodao97',\n image: 'http://qupinapptest.oss-cn-beijing.aliyuncs.com/1/202002/d81d3c9dc7c3df7590d333f783a97995.jpeg',\n html: '<S>显示删除线1</S>',\n json: { slogan: '左手代码右手诗' },\n richText: '在一段文本中<突出|black|yellow>显示某些<文字|#ffffff|#000000>'\n }\n ],\n page: {\n 'count|1-10': 2,\n 'page|1-5': 2\n }\n }\n}\n\nconst layoutForm = {\n afterSubmit: '',\n afterReset: 'goback',\n formItems: [\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span'\n }\n ]\n}\n\nconst layoutSection = {\n afterSubmit: '',\n afterReset: '',\n formItems: [\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n section: '表单片段1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n section: '表单片段2',\n type: 'input',\n label: 'span'\n }\n ]\n}\n\nexport default { form, table, listMock, layoutForm, layoutSection }\n\n","import { MockApi, MockHttpMethod, MockOption } from '../types'\nimport menu from '../data/menu'\nimport role from '../data/role'\nimport example from '../data/example'\n\nconst userApis: MockApi[] = [\n {\n method: MockHttpMethod.POST,\n url: '/login',\n response(options: MockOption) {\n return {\n code: 0,\n data: {\n name: 'daodao97',\n token: 'xxxxxxx'\n }\n }\n }\n },\n {\n method: MockHttpMethod.GET,\n url: '/user/info',\n response(options: MockOption) {\n return {\n code: 0,\n data: {\n role_ids: [1],\n resource: [[0, 20, 'formItems', 'radio'], [0, 1, 2]]\n }\n }\n }\n },\n {\n url: '/user/routes',\n method: MockHttpMethod.GET,\n response: (options: MockOption) => {\n return {\n code: 0,\n data: [\n {\n id: 0,\n label: '',\n routes: []\n }\n ]\n }\n }\n },\n {\n url: '/user/list',\n method: MockHttpMethod.GET,\n response: (options: MockOption) => {\n return example.listMock\n }\n }\n]\n\nexport default userApis\n","import user from './user'\nimport { MockApi } from '../types'\n\nconst apis: MockApi[] = [\n ...user\n]\n\nexport default apis\n","import locale from 'element-plus/lib/locale/lang/zh-cn'\nimport { AxiosRequestConfig } from 'axios'\nimport { OmsOptions } from './types'\nimport { Settings } from './types'\n\nconst defaultAxios: AxiosRequestConfig = {\n baseURL: '/api',\n withCredentials: true,\n cacheEnable: true\n}\n\nexport const defaultSettings: Settings = {\n title: 'oms',\n fixedHeader: false,\n sidebarLogo: true,\n logo: 'http://assest.daodao.run/logo.png',\n closeNavNotice: false,\n navBarNotice: '',\n hasNewMessage: true,\n showPageJsonSchema: false,\n loginTips: '',\n sso: {},\n ElementPlus: {\n size: 'default',\n zIndex: 3000,\n locale: 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, Settings, UserInfo } from '../../types'\nimport { ApiResponse } from '../../utils/request/types'\nimport { getToken, removeToken, setToken } from '../../utils/token'\nimport { RouteRecordRaw } from 'vue-router'\nimport Cookies from 'js-cookie'\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 const website = (response.data?.website || {}) as Settings\n commit('settings/updateSettings', website, { root: true })\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 baseURL: ''\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 SET_BASE_API: (state: App, data: string) => {\n state.baseURL = 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 setBaseAPI({ commit }: ActionContext<App, App>, data: string) {\n commit('SET_BASE_API', 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, AxiosRequestConfig } from 'axios'\n// @ts-ignore\nimport qs from 'qs'\n\nconst CancelToken = axios.CancelToken\n\nconst task = {\n taskList: {} as Record<string, any>,\n cacheList: new Map(),\n uniqueId(config: AxiosRequestConfig) {\n return `${location.href}|${config.method}|${config.url}|`\n // + qs.stringify(config.params)\n },\n addTask(config: AxiosRequestConfig, cancelfun: Canceler) {\n const key = this.uniqueId(config)\n this.taskList[key] = cancelfun\n },\n delTask(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n const c = this.taskList[key]\n c && c(config)\n },\n pending(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n return !!this.taskList[key]\n },\n cache(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n const c = this.cacheList.get(key)\n if (!c) {\n return undefined\n }\n if (c.expirationTime < (new Date()).getTime()) {\n this.delCache(config)\n return undefined\n }\n console.log('getcache', key, c.response)\n return c.response\n },\n addCache(config: AxiosRequestConfig, response: any) {\n const key = this.uniqueId(config)\n const cacheTime = config.cacheTime || 0\n if (cacheTime) {\n this.cacheList.set(key, { response, expirationTime: (new Date()).getTime() + cacheTime })\n }\n },\n delCache(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n return this.cacheList.delete(key)\n }\n}\n\nexport const cacheAdapter: (config: AxiosRequestConfig, instance: AxiosInstance) => Promise<any> = (config: AxiosRequestConfig, instance: AxiosInstance) => {\n return new Promise((resolve, reject) => {\n if (config.method !== 'get') {\n delete config.adapter\n resolve(instance(config))\n return\n }\n const cache = task.cache(config)\n if (!cache) {\n delete config.adapter\n resolve(instance(config))\n return\n }\n resolve({ data: cache, config: config })\n })\n}\n\nexport const cancelRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n if (config.cacheEnable === false) {\n return config\n }\n if (task.pending(config)) {\n task.delTask(config)\n }\n config.cancelToken = new CancelToken((cancel) => {\n task.addTask(config, cancel)\n })\n return config\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n\nexport const cancelResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled: function(response: AxiosResponse) {\n // @ts-ignore\n if (response.config.cacheEnable === false) {\n return response\n }\n if (response.config.method === 'get' && Object.keys(response.data as Record<string, any>).length > 0) {\n task.addCache(response.config, response.data)\n }\n return response\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n","import { Component } from 'vue'\n\nconst defaultMap: Record<string, Component> = {}\n\nexport function setCmp(name: string, cmp: Component) {\n defaultMap[name] = cmp\n}\n\nexport function getCmp(name: string) {\n return defaultMap[name]\n}\n","<script lang=\"jsx\">\nimport { useStore } from 'vuex'\nimport { getCmp } from '../utils/container'\nimport { computed } from 'vue'\n\nexport default defineComponent({\n name: 'Dashboard',\n setup() {\n const store = useStore()\n // const roleIds = computed(() => store.state.settings.loginTips)\n const custom = getCmp('dashboard')\n if (custom) {\n return () => <span>\n <custom/>\n </span>\n }\n const name = computed(() => store.getters.name)\n return () => <div class='dashboard-container'>\n <div class='dashboard-text'>Hi { name.value } 😄</div>\n </div>\n }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.dashboard {\n &-container {\n margin: 30px;\n }\n\n &-text {\n font-size: 30px;\n line-height: 46px;\n }\n}\n</style>\n","<template>\n <el-breadcrumb\n class=\"app-breadcrumb\"\n separator=\"/\"\n >\n <transition-group name=\"breadcrumb\">\n <el-breadcrumb-item\n v-for=\"(item, index) in levelList\"\n :key=\"item.path\"\n >\n <span\n v-if=\"(item.path.indexOf('/DIR_') === 0 && item.redirect === undefined) || index === levelList.length - 1\"\n class=\"no-redirect\"\n >{{ item.meta.title }}</span> <a\n v-else\n @click=\"handleLink(item)\"\n >{{ item.meta.title }}</a>\n </el-breadcrumb-item>\n </transition-group>\n </el-breadcrumb>\n</template>\n\n<script>\nimport * as pathToRegexp from 'path-to-regexp'\n\nexport default {\n data() {\n return {\n levelList: null\n }\n },\n watch: {\n $route() {\n this.getBreadcrumb()\n }\n },\n created() {\n this.getBreadcrumb()\n },\n methods: {\n getBreadcrumb() {\n // only show routes with meta.title\n let matched = this.$route.matched.filter(\n item => item.meta && item.meta.title\n )\n const first = matched[0]\n\n if (!this.isDashboard(first)) {\n matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(\n matched\n )\n }\n\n this.levelList = matched.filter(\n item => item.meta && item.meta.title && item.meta.breadcrumb !== false\n )\n },\n isDashboard(route) {\n const name = route && route.name\n if (!name) {\n return false\n }\n return (\n name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()\n )\n },\n pathCompile(path) {\n // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561\n const { params } = this.$route\n const toPath = pathToRegexp.compile(path)\n return toPath(params)\n },\n handleLink(item) {\n const { redirect, path } = item\n if (redirect) {\n this.$router.push(redirect)\n return\n }\n this.$router.push(this.pathCompile(path))\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-breadcrumb.el-breadcrumb {\n display: inline-block;\n font-size: 14px;\n line-height: 50px;\n margin-left: 8px;\n\n .no-redirect {\n color: #97a8be;\n cursor: text;\n }\n}\n</style>\n","<template>\n <div\n style=\"padding: 0 15px;\"\n @click=\"toggleClick\"\n >\n <v-icon\n :class=\"{ 'is-active': isActive }\"\n name=\"ra-leftalignment\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Hamburger',\n props: {\n isActive: {\n type: Boolean,\n default: false\n }\n },\n emits: ['toggle-click'],\n methods: {\n toggleClick() {\n this.$emit('toggle-click')\n }\n }\n}\n</script>\n","<template>\n <el-container style=\"width: 100%;height: 100%\">\n <el-row class=\"aside\">\n <slot name=\"left-aside\" />\n </el-row>\n <el-main\n class=\"main\"\n style=\"margin: 0 10px\"\n >\n <slot name=\"main\" />\n </el-main>\n <el-aside\n class=\"aside\"\n width=\"350px\"\n style=\"padding: 20px\"\n >\n <slot name=\"right-aside\" />\n </el-aside>\n </el-container>\n</template>\n<style scoped>\n.main {\n border: 1px solid #ebebeb;\n border-radius: 3px;\n transition: .2s;\n min-height: calc(100vh - 50px);\n width: 100%;\n position: relative;\n}\n.aside {\n padding-top: 20px;\n border: 1px solid #ebebeb;\n border-radius: 3px;\n transition: .2s;\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n\n {\n type: 'icon-select',\n field: 'prefixIcon',\n label: '前置ICON'\n },\n {\n type: 'icon-select',\n field: 'suffixIcon',\n label: '后置ICON'\n },\n {\n type: 'switch',\n field: 'showCopy',\n label: '复制'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'number',\n name: '数字',\n default: {\n type: 'number',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'min',\n label: '最小值'\n },\n {\n type: 'number',\n field: 'man',\n label: '最大值'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'number-range',\n name: '数字区间',\n default: {\n type: 'number-range',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'unit',\n label: '单位'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'allowCreate',\n label: '允许创建'\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'radio',\n name: '单选框',\n default: {\n type: 'radio',\n label: 'label',\n field: 'field_name',\n options: []\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n formItems: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'value',\n label: '字段值'\n }\n ],\n repeat: true\n }\n },\n {\n type: 'input',\n field: 'default',\n label: '默认值'\n }\n ]\n}\n","export default {\n type: 'switch',\n name: '开关',\n default: {\n type: 'switch',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'activeText',\n label: '打开时的文字描述'\n },\n {\n type: 'input',\n field: 'inactiveText',\n label: '关闭时的文字描述'\n },\n {\n type: 'color',\n field: 'activeColor',\n label: '打开时的背景色'\n },\n {\n type: 'color',\n field: 'inactiveColor',\n label: '关闭时的背景色'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'code',\n name: 'Code',\n default: {\n type: 'code',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'json',\n default: {\n type: 'json',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'upload',\n name: '上传',\n default: {\n type: 'upload',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'template',\n name: '自定义组件',\n default: {\n type: 'template',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'icon-select',\n name: '图标选择器',\n default: {\n type: 'icon-select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'sub-form',\n name: '子表单',\n default: {\n type: 'sub-form',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'switch',\n field: 'repeat',\n label: '可重复'\n },\n {\n type: 'sub-form',\n field: 'form-items',\n label: '子表单控件',\n props: {\n options: {\n labelPosition: 'top'\n },\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'label',\n label: 'label'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'input', label: '文本框' }\n ]\n }\n ]\n }\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'checkbox',\n name: '复选框',\n default: {\n type: 'checkbox',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'max',\n label: '最大选中数'\n },\n {\n type: 'number',\n field: 'min',\n label: '最小选中数'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","import input from './ctrls/input'\nimport number from './ctrls/number'\nimport numberRange from './ctrls/number-range'\nimport select from './ctrls/select'\nimport radio from './ctrls/radio'\nimport xswitch from './ctrls/switch'\nimport code from './ctrls/code'\nimport json from './ctrls/json'\nimport upload from './ctrls/upload'\nimport template from './ctrls/template'\nimport iconSelect from './ctrls/icon-select'\nimport subForm from './ctrls/sub-form'\nimport checkbox from './ctrls/checkbox'\n\nconst ctrlMaps = {}\n\nexport function regCtrl(options) {\n ctrlMaps[options.type] = options\n}\n\nregCtrl(input)\nregCtrl(select)\nregCtrl(number)\nregCtrl(numberRange)\nregCtrl(xswitch)\nregCtrl(subForm)\nregCtrl(radio)\nregCtrl(checkbox)\nregCtrl(code)\nregCtrl(json)\nregCtrl(upload)\nregCtrl(iconSelect)\nregCtrl(template)\n\nexport const ctrls = ctrlMaps\n\nexport const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n },\n {\n type: 'switch',\n field: 'inline',\n label: '行布局'\n },\n {\n type: 'radio',\n field: 'labelPosition',\n label: 'label位置',\n options: [\n { value: 'right', label: '右' },\n { value: 'left', label: '左' },\n { value: 'top', label: '上' }\n ]\n },\n {\n type: 'input',\n field: 'labelWidth',\n label: 'label宽度',\n value: '100px'\n },\n {\n type: 'switch',\n field: 'showSubmitButton',\n label: '显示提交按钮',\n value: true\n },\n {\n type: 'sub-form',\n field: 'submitButton',\n label: '提交按钮',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案',\n value: '提交'\n },\n {\n type: 'select',\n field: 'type',\n label: '按钮类型',\n options: [\n { value: 'primary', label: 'primary' }\n ]\n }\n ]\n }\n },\n {\n type: 'switch',\n field: 'showCancelButton',\n label: '显示取消按钮',\n value: true\n },\n {\n type: 'sub-form',\n field: 'cancelButton',\n label: '取消按钮',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案',\n value: '取消'\n },\n {\n type: 'select',\n field: 'type',\n label: '按钮类型',\n options: [\n { value: 'primary', label: 'primary' }\n ]\n }\n ]\n }\n }\n ]\n}\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","<template>\n <dev-layout>\n <template #main>\n <v-form\n v-if=\"builderSchema.formItems\"\n ref=\"form\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n \n <VButton\n text=\"PageSchema\"\n type=\"modal\"\n >\n <JsonView :data=\"getSaveSchema\" />\n </VButton>\n </template>\n <template #right-aside>\n <el-form v-if=\"activeIndex\">\n <el-form-item label=\"控件类型\">\n <el-select v-model=\"currentCtrlType\">\n <el-option\n v-for=\"(item,index) in types\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </el-form-item>\n </el-form>\n <v-form\n :key=\"ctrlKey\"\n v-model=\"ctrlOptions\"\n v-bind=\"ctrlSchema\"\n />\n </template>\n </dev-layout>\n</template>\n<script>\nimport DevLayout from '../DevLayout.vue'\nimport { VForm, VBtn as VButton, JsonView } from '@okiss/vbtf'\nimport { compactObject } from '@okiss/utils'\nimport { cloneDeep, get, merge, set, unset } from 'lodash'\nimport { baseSchema, ctrls } from './form'\nimport { eventBus } from '../../../index'\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n\nconst typs = []\n\nObject.keys(ctrls).forEach(item => {\n typs.push({ value: item, label: ctrls[item].name })\n})\n\nconst sqlSchema = {\n options: {\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'sub-form',\n field: 'columns',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: cloneDeep(typs)\n },\n {\n type: 'input',\n field: 'label',\n label: '字段label'\n }\n ]\n }\n }\n ]\n}\n\nexport default {\n components: { DevLayout, VForm, VButton, JsonView },\n props: {\n schema: {\n type: Object,\n default: _ => {}\n }\n },\n data() {\n return {\n sqlOptions: {},\n sqlSchema: sqlSchema,\n baseSchema: baseSchema,\n activeTab: 'base',\n builderSchema: Object.assign(\n {},\n this.$props.schema,\n {\n options: {\n submitButton: false,\n cancelButton: false\n }\n }\n ),\n baseOptions: {},\n key: 0,\n ctrlKey: 0,\n activeCtrl: undefined,\n ctrlOptions: {},\n ctrlSchema: {},\n ctrlName: '',\n activeIndex: undefined,\n ctrlMap: ctrls,\n activeIndexReg: /(formItems)?\\[(\\d+)\\]/,\n tableStruct: '',\n activeName: '1',\n currentCtrlType: 'input',\n types: cloneDeep(typs)\n }\n },\n computed: {\n getSaveSchema() {\n return {\n formItems: this.builderSchema.formItems\n }\n }\n },\n watch: {\n baseOptions: {\n deep: true,\n immediate: true,\n handler(val) {\n const tmp = cloneDeep(val)\n if (val.showSubmitButton === false) {\n tmp.submitButton = false\n }\n if (val.cancelSubmitButton === false) {\n tmp.cancelButton = false\n }\n delete tmp.showSubmitButton\n delete tmp.showCancelButton\n if (Object.keys(tmp).length > 0) {\n this.builderSchema = merge(this.builderSchema, { options: tmp })\n this.key++\n }\n }\n },\n ctrlOptions: {\n deep: true,\n // immediate: true,\n handler(val) {\n const current = get(this.builderSchema, this.activeIndex)\n if (!current) {\n return\n }\n const type = current ? current.type : ''\n const ctrl = this.ctrlMap[type]\n const transData = ctrl.trans ? ctrl.trans(val) : val\n if (transData && Object.keys(transData).length > 0) {\n transData.type = type\n // update `builderSchema` nested data\n if (this.activeIndex.indexOf('[') > -1) {\n // format like: `headers[0]`\n const [_, key, keyIndex] = this.activeIndex.match(/(\\w+)\\[(\\d+)\\]/)\n _\n this.builderSchema[key][keyIndex] = { ...transData }\n } else {\n this.builderSchema[this.activeIndex] = transData\n }\n // set(this.builderSchema, this.activeIndex, transData)\n this.key++\n }\n }\n },\n currentCtrlType: {\n handler(val) {\n const ctrl = this.ctrlMap[val]\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n const sourceCtrlOptions = get(this.builderSchema, this.activeIndex)\n this.ctrlOptions = cloneDeep(sourceCtrlOptions)\n this.ctrlOptions.type = val\n this.ctrlKey++\n this.key++\n }\n }\n },\n beforeCreate() {\n eventBus.on('dev-action', ({ event, data }) => {\n this.onDevAction(data.type, data.devId)\n })\n },\n unmounted() {\n eventBus.off('dev-action')\n },\n methods: {\n onDevAction(btnType, path) {\n this.activeIndex = 'formItems' + path\n if (btnType === 'edit') {\n this.activeTab = 'ctrl'\n this.clicklabel()\n }\n if (btnType === 'del') {\n this.activeTab = 'base'\n this.removeOne()\n }\n this.ctrlKey++\n },\n push(name) {\n const target = 'formItems'\n this.ctrlOptions = {}\n this.builderSchema[target] = this.builderSchema[target] || []\n const ctrl = this.ctrlMap[name]\n this.activeCtrl = ctrl\n this.builderSchema[target].push(cloneDeep(ctrl.default))\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n this.key++\n this.activeIndex = `${target}[${this.builderSchema[target].length - 1}]`\n this.activeTab = 'ctrl'\n },\n removeOne() {\n unset(this.builderSchema, this.activeIndex)\n this.builderSchema = cloneDeep(compactObject(this.builderSchema))\n this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n const type = ctrlOptions.type\n const ctrl = this.ctrlMap[type]\n if (!ctrl) {\n this.$message({ type: 'warning', message: '尚未支持该组件的UI编辑' })\n return\n }\n this.currentCtrlType = type\n this.ctrlOptions = ctrlOptions\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: { formItems: this.builderSchema.formItems }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'date',\n name: '日期',\n default: {\n type: 'date',\n label: '时间',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'switch',\n field: 'showFilter',\n label: '搜索条件',\n value: true\n },\n {\n type: 'switch',\n field: 'showPagination',\n label: '页码',\n value: true\n },\n {\n type: 'switch',\n field: 'exportAble',\n label: '导出按钮'\n }\n ]\n}\n","export const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","export default {\n type: 'span',\n name: '文本',\n default: {\n type: 'span',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'switch',\n field: 'sortable',\n label: '排序'\n }\n ]\n}\n","export default {\n type: 'enum',\n name: '标签',\n default: {\n type: 'enum',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '映射',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n value: []\n }\n ],\n trans(val) {\n val.options = val.options || []\n if (!val.label) {\n val.label = '表头'\n }\n return val\n }\n}\n","export default {\n type: 'html',\n name: 'HTML',\n default: {\n type: 'html',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'icon',\n name: '图标',\n default: {\n type: 'icon',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'image',\n name: '图片',\n default: {\n type: 'image',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'JSON',\n default: {\n type: 'json',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'link',\n name: '链接',\n default: {\n type: 'link',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'rich',\n name: '富文本',\n default: {\n type: 'rich',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'tpl',\n name: '模板',\n default: {\n type: 'tpl',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'input',\n field: 'tpl',\n label: '模板',\n info: '例如 <code>姓名: {name} 年龄:{age}</code>'\n }\n ]\n}\n","import span from './span'\nimport xenum from './emum'\nimport html from './html'\nimport icon from './icon'\nimport image from './image'\nimport json from './json'\nimport link from './link'\nimport rich from './rich'\nimport tpl from './tpl'\n\nexport default {\n span,\n enum: xenum,\n html,\n icon,\n image,\n json,\n link,\n rich,\n tpl\n}\n","export default {\n type: 'jump',\n name: '跳转',\n default: {\n type: 'jump',\n target: '',\n text: '按钮'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: '跳转地址',\n info: '可以是本地路由, 也可以是url'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'api',\n name: '接口请求',\n default: {\n type: 'api',\n target: '',\n text: '请求'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n },\n {\n type: 'input',\n field: 'api',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'select',\n field: 'method',\n label: '请求类型',\n options: [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'DELETE', label: 'DELETE' },\n { value: 'PUT', label: 'PUT' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'form',\n name: '弹框表单',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","export default {\n type: 'table',\n name: '弹框列表',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","import jump from './jump'\nimport api from './api'\nimport form from './form'\nimport table from './table'\n\nexport default {\n jump,\n api,\n form,\n table\n}\n","<template>\n <dev-layout>\n <template #left-aside>\n <el-row style=\"width: 200px\">\n <el-row>\n <el-col\n class=\"title\"\n :data-id=\"22222\"\n >添加搜索条件</el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('input')\"\n >文本框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('select')\"\n >下拉框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('date')\"\n >日期</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加列表项</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.headers)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushHeaders(ctrlMap.headers[item].type)\"\n >{{ ctrlMap.headers[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加行按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushRowButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加常规按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushNormalButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加批量按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushBatchButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n </el-row>\n </template>\n <template #main>\n <v-table\n ref=\"table\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n \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 this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n this.activeBrick = m[1]\n if (['normalButton', 'batchButton', 'rowButton'].indexOf(m[1]) > -1) {\n this.activeBrick = 'buttons'\n }\n let type = this.builderSchema[m[1]][parseInt(m[2])].type\n if (m[1] === 'headers' && type === undefined) {\n type = 'span'\n }\n const ctrl = this.ctrlMap[this.activeBrick][type]\n if (!ctrl) {\n console.log(this.activeBrick, type, m)\n this.$message({ type: 'warning', message: '尚未支持此组件的UI编辑' })\n return\n }\n this.ctrlOptions = ctrlOptions\n this.currentCtrlType = type\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n const { filter, headers, rowButton, normalButton, batchButton } = this.currentBuilderSchema\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: {\n filter,\n headers,\n rowButton,\n normalButton,\n batchButton\n }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","<template>\n <VIcon\n name=\"ra-set\"\n @click=\"show = !show\"\n />\n <el-drawer\n v-model=\"show\"\n title=\"页面设计\"\n class=\"my-drawer\"\n :direction=\"direction\"\n size=\"90%\"\n destroy-on-close\n append-to-body\n >\n <form-builder\n v-if=\"pageSchema.formItems !== undefined\"\n :schema=\"pageSchema\"\n />\n <table-builder\n v-if=\"pageSchema.headers !== undefined\"\n :schema=\"pageSchema\"\n />\n </el-drawer>\n</template>\n<script>\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\n ref=\"header\"\n class=\"navbar\"\n :style=\"{background: setting.envColor[user.env]}\"\n >\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 >\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 return '/'\n }\n }\n }\n}\n</script>\n","<template>\n <el-select\n v-model=\"selected\"\n filterable\n placeholder=\"搜索菜单...\"\n class=\"search-menu\"\n @change=\"onselected\"\n >\n <template\n v-for=\"group in filterRoutes\"\n :key=\"group.path\"\n >\n <template v-if=\"group.children !== undefined\">\n <el-option-group\n v-if=\"group.meta.menuType !== 0\"\n :key=\"group.path + '-'\"\n :label=\"group.meta.title\"\n >\n <template\n v-for=\"(item, index) in group.children\"\n :key=\"item.path\"\n >\n <el-option\n v-if=\"group.meta.menuType !== 0\"\n :label=\"(index === (group.children.length - 1) ? '└─' : '├─' )+ item.meta.title\"\n :value=\"getJumpPath(item)\"\n />\n </template>\n </el-option-group>\n </template>\n <template v-else>\n <el-option\n :label=\"'' + group.meta.title\"\n :value=\"getJumpPath(group)\"\n />\n </template>\n </template>\n </el-select>\n</template>\n<script>\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 getJumpPath: function(route) {\n let _route = route\n if (route.meta.menuType === 1 && route.children.length > 0) {\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n _route = route.children[i]\n break\n }\n }\n }\n return this.$router.resolve(_route.redirect ? _route.redirect : _route).fullPath\n },\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 = () => 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 key: string\n}\n\nexport type ResourceIds = Array<Array<string>>\n\nexport interface UserInfo {\n id: number,\n name: string,\n token: string,\n avatar: string,\n nickname: string,\n role_ids: Array<string>,\n resource: ResourceIds\n env: string,\n website?: any\n}\n\nexport type Resource = Record<string, boolean | Record<string, boolean>>\n\n// eslint-disable-next-line no-unused-vars\nexport enum PageType { custom, list, form, customSchema, localComp, tree, report, entity }\n// eslint-disable-next-line no-unused-vars\nexport enum MenuType { hidden = 0, dir = 1, menu = 2, page = 3}\n\nexport interface PageInfo {\n module_id: number,\n module_name?: string\n id: number,\n pid: number,\n name: string,\n path: string,\n icon?: string,\n view?: string,\n is_show: number,\n type: number,\n page_type: PageType,\n 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 return cloneDeep([\n {\n label: '',\n routes: localRoutes\n },\n ...this.remoteRouter\n ])\n },\n activeMenu() {\n const m = this.$route.matched\n\n for (let i = m.length - 1; i >= 0; i--) {\n const tmp = m[i]\n if (tmp.meta.menuType === MenuType.menu) {\n this.showActive()\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 this.showActive()\n },\n methods: {\n showActive() {\n showEleByClassName('is-active', 200)\n },\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 type { LoginTicket } from '@/types'\n\nexport type SsoType = 'jump' | 'qrcode'\n\nexport interface Sso {\n flag(): LoginTicket | undefined,\n\n type: SsoType,\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void,\n\n showQrCode(): void\n\n qrCodeUrl?: string,\n appid?: string,\n style?: string,\n redirectUri?: string,\n elId?: string\n}\n\nexport class BaseSso implements Sso {\n type: SsoType = 'qrcode'\n\n flag(): LoginTicket | undefined {\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void {\n next(path)\n }\n\n showQrCode(): void {\n }\n}\n","import { NavigationGuardNext } from 'vue-router'\nimport { BaseSso, SsoType } from './index'\nimport { getQueryParam } from '@okiss/utils'\nimport type { LoginTicket } from '@/types'\n\nexport class Github extends BaseSso {\n type: SsoType = 'jump'\n\n client_id: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n this.client_id = options.client_id\n }\n\n flag(): LoginTicket | undefined {\n const code = getQueryParam('code')\n if (code) {\n return {\n ticket: code,\n key: 'github'\n }\n }\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string) {\n const redirect = encodeURIComponent(location.href)\n location.replace(`https://github.com/login/oauth/authorize?client_id=${this.client_id}&redirect_uri${redirect}`)\n }\n}\n","import { getQueryParam, obj2Param, strVarReplace, createIFrame } from '@okiss/utils'\nimport { BaseSso, SsoType } from './index'\nimport type { LoginTicket } from '@/types'\n\nexport class DingTalk extends BaseSso {\n type: SsoType = 'qrcode'\n qrCodeUrl = 'https://login.dingtalk.com/login/qrcode.htm?goto={goto}&style={style}'\n reloadUrl = 'https://oapi.dingtalk.com/connect/oauth2/sns_authorize?response_type=code&scope=snsapi_login&state=&appid={appid}&redirect_uri={redirect_uri}'\n\n elId: string = ''\n appid: string = ''\n iframe: HTMLIFrameElement = new HTMLIFrameElement()\n redirectUri: string = ''\n style: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n }\n\n flag(): LoginTicket | undefined {\n const code = getQueryParam('code')\n if (code) {\n return {\n ticket: code,\n key: 'dingtalk'\n }\n }\n return undefined\n }\n\n showQrCode(): void {\n const getReloadUrl = (extra?: Record<string, any>) => {\n const data = {\n appid: this.appid,\n redirect_uri: encodeURIComponent(this.redirectUri)\n }\n return strVarReplace(this.reloadUrl, data) + '&' + obj2Param(extra || {})\n }\n const getQrCodeUrl = () => {\n const data = {\n goto: encodeURIComponent(getReloadUrl()),\n style: encodeURIComponent(this.style)\n }\n return strVarReplace(this.qrCodeUrl, data)\n }\n const onScanSuccess = (event: any) => {\n const { origin, data } = event\n if (origin === 'https://login.dingtalk.com') {\n window.location.href = getReloadUrl({ loginTmpCode: data })\n }\n }\n\n this.iframe.src = getQrCodeUrl()\n createIFrame({ elId: this.elId, attrs: this.iframe })\n if (typeof window.addEventListener !== 'undefined') {\n window.addEventListener(\n 'message',\n event => onScanSuccess(event),\n false\n )\n // @ts-ignore\n } else if (typeof window.attachEvent !== 'undefined') {\n // @ts-ignore\n window.attachEvent('onmessage', event => this.onScanSuccess(event))\n }\n }\n}\n","import { BaseSso } from './base'\nimport type { SsoType, Sso } from './base'\nimport { Github } from './github'\nimport { DingTalk } from './dingtalk'\nimport store from '../../store'\nimport { newSso } from '../../types'\nimport { merge } from 'lodash'\n\nexport { BaseSso, SsoType, Sso, Github, DingTalk }\n\nconst defaultSso: Record<string, newSso> = {}\n\nexport function allSso(): Record<string, newSso> {\n return merge(store.state.settings.sso || {}, defaultSso)\n}\n\nexport default function(): Sso | undefined {\n const sso = allSso()\n const key = store.state.settings.activeSsoKey || ''\n console.log(sso, key)\n const active = sso[key]\n if (active !== undefined) {\n return active()\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 class=\"captcha\">\n <input\n v-model=\"data.captcha\"\n type=\"text\"\n placeholder=\"验证码\"\n class=\"input-captcha\"\n >\n <img\n class=\"captcha-img\"\n :src=\"baseAPI + '/user/captcha?ts=' + ts\"\n title=\"点击刷新\"\n @click=\"onCaptchaClick\"\n >\n </div>\n <div\n :class=\"{input: true, button: true, 'no-ready': !onReady}\"\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// @ts-ignore\nimport { MD5 } from 'crypto-js'\nimport { computed } from 'vue'\n\nconst router = useRouter()\nconst route = useRoute()\nconst tips = computed(() => store.state.settings.loginTips)\nconst baseAPI = computed(() => {\n console.log(store.state.app)\n return store.state.app.baseURL\n})\n\nconst allsso = () => allSso()\n\nconst ts = ref(0)\nconst onCaptchaClick = () => ts.value++\nconst onReady = computed(() => {\n return data.value.username.length > 0 && data.value.password.length >= 4 && data.value.captcha.length === 4\n})\n\nconst data = ref({\n username: '',\n password: '',\n captcha: '',\n sing: ''\n})\n\nconst login = () => {\n if (data.value.username === '' || data.value.password === '' || data.value.captcha === '') {\n ElMessage.error('用户名, 密码, 验证码是必须的')\n return\n }\n data.value.sing = MD5(`${data.value.username}${data.value.password}${data.value.captcha}`).toString()\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\n#login {\n width: 100%;\n height: 100%;\n background: $bg;\n text-align: center;\n display: flex;\n flex-direction: column;\n padding-top: 150px;\n\n #title {\n color: #fff;\n }\n\n #form {\n width: 300px;\n margin: 10px auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n .input {\n width: 300px;\n height: 40px;\n margin: 10px auto;\n padding: 10px;\n }\n\n .captcha {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n padding: 10px 0;\n\n .input-captcha {\n width: 60%;\n height: 40px;\n margin-right: 10px;\n }\n\n .captcha-img {\n height: 40px;\n width: auto;\n }\n }\n\n .button {\n width: 300px;\n height: 40px;\n border: 1px solid #fff;\n background: #fff;\n }\n\n .no-ready {\n background: #909399 !important;\n border: 1px solid #909399 !important;\n color: #DCDFE6;\n }\n }\n\n .tips,\n .sso {\n padding: 10px 0;\n display: flex;\n justify-content: flex-start;\n color: gray;\n }\n}\n</style>\n","<template>\n <div class=\"not-found\">\n <svg\n width=\"380px\"\n height=\"500px\"\n viewBox=\"0 0 837 1045\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\"\n >\n <g\n id=\"Page-1\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n sketch:type=\"MSPage\"\n >\n <path\n id=\"Polygon-1\"\n d=\"M353,9 L626.664028,170 L626.664028,487 L353,642 L79.3359724,487 L79.3359724,170 L353,9 Z\"\n stroke=\"#007FB2\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-2\"\n d=\"M78.5,529 L147,569.186414 L147,648.311216 L78.5,687 L10,648.311216 L10,569.186414 L78.5,529 Z\"\n stroke=\"#EF4A5B\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-3\"\n d=\"M773,186 L827,217.538705 L827,279.636651 L773,310 L719,279.636651 L719,217.538705 L773,186 Z\"\n stroke=\"#795D9C\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-4\"\n d=\"M639,529 L773,607.846761 L773,763.091627 L639,839 L505,763.091627 L505,607.846761 L639,529 Z\"\n stroke=\"#F2773F\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-5\"\n d=\"M281,801 L383,861.025276 L383,979.21169 L281,1037 L179,979.21169 L179,861.025276 L281,801 Z\"\n stroke=\"#36B455\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n </g>\n </svg>\n <div class=\"message-box\">\n <h1>404</h1>\n <p>Page not found</p>\n <div class=\"buttons-con\">\n <div class=\"action-link-wrap\">\n <!--<a onclick=\"history.back(-2)\" class=\"link-button link-back-button\">Go Back</a>-->\n <a\n href=\"\"\n class=\"link-button\"\n >Go to Home Page</a>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'NotFoundPage'\n}\n</script>\n\n<style scoped>\n.not-found {\n background-color: #2F3242;\n width: 100%;\n height: 100%;\n}\n\nsvg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -400px;\n}\n\n.message-box {\n height: 200px;\n width: 380px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: 50px;\n color: #FFF;\n font-family: Roboto;\n font-weight: 300;\n}\n\n.message-box h1 {\n font-size: 60px;\n line-height: 46px;\n margin-bottom: 40px;\n}\n\n.buttons-con .action-link-wrap {\n margin-top: 40px;\n}\n\n.buttons-con .action-link-wrap a {\n background: #68c950;\n padding: 8px 25px;\n border-radius: 4px;\n color: #FFF;\n font-weight: bold;\n font-size: 14px;\n transition: all 0.3s linear;\n cursor: pointer;\n text-decoration: none;\n margin-right: 10px\n}\n\n.buttons-con .action-link-wrap a:hover {\n background: #5A5C6C;\n color: #fff;\n}\n\n#Polygon-1, #Polygon-2, #Polygon-3, #Polygon-4, #Polygon-4, #Polygon-5 {\n animation: float 1s infinite ease-in-out alternate;\n}\n\n#Polygon-2 {\n animation-delay: .2s;\n}\n\n#Polygon-3 {\n animation-delay: .4s;\n}\n\n#Polygon-4 {\n animation-delay: .6s;\n}\n\n#Polygon-5 {\n animation-delay: .8s;\n}\n\n@keyframes float {\n 100% {\n transform: translateY(20px);\n }\n}\n\n@media (max-width: 450px) {\n svg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -190px;\n }\n\n .message-box {\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: -190px;\n text-align: center;\n }\n}\n</style>\n","import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'\nimport Dashboard from '../scaffold/dashboard.vue'\nimport Layout from '../scaffold/layout/index.vue'\nimport Login from '../scaffold/login.vue'\nimport NotFoundPage from '../scaffold/404.vue'\n\nconst routes: RouteRecordRaw[] = [\n {\n path: '/',\n component: Layout,\n redirect: '/dashboard',\n name: 'Root',\n meta: {\n menuType: 1\n },\n children: [\n {\n path: 'dashboard',\n name: 'Dashboard',\n component: Dashboard,\n meta: { title: 'Dashboard', icon: 'el-icon-help', menuType: 2, keepAlive: true }\n }\n ]\n },\n {\n path: '/login',\n component: Login,\n meta: { title: '用户登录', menuType: 0 },\n hidden: true\n },\n {\n path: '/404',\n component: NotFoundPage,\n meta: { menuType: 0 },\n hidden: true\n }\n]\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes\n})\n\nexport default router\n","import { Router } from 'vue-router'\nimport NProgress from 'nprogress'\nimport 'nprogress/nprogress.css'\nimport 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'\nimport { isObject } from 'lodash'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, form, next) => {\n if (getWhiteRoutes().indexOf(to.path) !== -1) {\n next()\n return\n }\n\n const token = getToken()\n if (token) {\n if (to.query?.redirect) {\n next(to.query?.redirect as string)\n } else {\n next()\n }\n return\n }\n const redirect = to.query.redirect || to.path\n\n const s = sso()\n if (!s) {\n next(`/login?redirect=${redirect}`)\n return\n }\n\n const flag = s.flag()\n if (flag && await store.dispatch('user/login', isObject(flag) ? flag : { ticket: flag })) {\n next()\n return\n }\n s.jumpToLoginPage(next, `/login?redirect=${redirect}`)\n })\n}\n","<template>\n <div class=\"loading preloader\">\n <div class=\"preloader-inner\" />\n </div>\n</template>\n<style>\n.loading {\n width: 100%;\n min-height: calc(100vh - 50px);\n text-align: center;\n line-height: calc(100vh - 50px);\n}\n</style>\n","<template>\n <div>\n <el-alert\n v-if=\"hasNotice\"\n v-bind=\"noticeProps\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VNotice',\n props: {\n dataApi: {\n type: String,\n default: ''\n },\n notice: {\n type: Object,\n default: () => {}\n }\n },\n data() {\n return {\n noticeProps: {},\n hasNotice: false\n }\n },\n mounted() {\n console.log('dataApi', !!this.$props.dataApi)\n if (this.$props.dataApi) {\n this.$http.get(this.$props.dataApi).then(({ data }) => {\n this.noticeProps = data\n this.hasNotice = !!data\n })\n return\n } else {\n this.hasNotice = Object.keys(this.$props.notice).length > 0\n this.noticeProps = this.$props.notice\n }\n }\n}\n</script>\n","<template>\n <el-alert\n v-if=\"owners.length > 0\"\n :title=\"`该页面功能对应开发: [ ${owners.join(', ')} ] 有问题可直接企微反馈`\"\n type=\"info\"\n style=\"margin: 0 0 20px 0\"\n :closable=\"false\"\n />\n <template v-if=\"env === 'prod' && serviceOffLine\">\n <div\n class=\"offline-notice\"\n v-html=\"serviceOffLine === true ? setting.serviceOffLineNotice : serviceOffLine\"\n />\n </template>\n <template v-else>\n <VNotice\n v-if=\"haveNotice\"\n :notice=\"notice\"\n style=\"margin: 0 0 20px 0\"\n :data-api=\"noticeApi\"\n />\n <VLoading v-if=\"loading\" />\n <template v-else>\n <slot v-bind=\"schema\" />\n </template>\n </template>\n\n</template>\n<script lang=\"ts\">\nimport VLoading from './VLoading.vue'\nimport { isObject, isString, isArray } from '@okiss/utils'\nimport store from '../store'\nimport VNotice from './notice/VNotice.vue'\n\nexport default defineComponent({\n components: { VLoading, VNotice },\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 noticeApi: '',\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 (isObject(data)) {\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 this.noticeApi = data.notice.noticeApi\n }\n delete data['notice']\n }\n this.owners = data.ownerNames || []\n this.serviceOffLine = data.serviceOffLine || false\n\n }\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 { h, getCurrentInstance, Component } from 'vue'\nimport { ElRow, ElCol, ElCard } from 'element-plus'\nimport { merge } from 'lodash'\nimport { VForm, VTable } from '@okiss/vbtf'\nimport { isObject, isArray } from '@okiss/utils'\n\nimport './index.scss'\n\ntype CompProps = Record<string, any>\n\nconst test = (props: CompProps) => <div>{props.test}</div>\n\nconst components: Record<string, any> = {\n 'card': ElCard,\n 'form': VForm,\n 'table': VTable,\n 'test': test,\n 'row': ElRow,\n 'col': ElCol\n}\n\nexport function regComponents(comps: Record<string, any>) {\n Object.keys(comps).forEach(k => {\n components[k] = comps[k]\n })\n}\n\nconst defaultSchema: Record<string, Node> = {\n 'card': {\n type: 'card',\n props: {\n class: 'render-card',\n shadow: 'never'\n }\n },\n 'form': {\n type: 'form',\n props: {\n afterReset: ''\n }\n },\n 'table': {\n type: 'table',\n props: {\n syncUrl: false\n }\n }\n}\n\nexport interface Node {\n type: string,\n props?: Record<string, string | number | boolean | any>\n children?: Node[] | Node\n span?: number\n}\n\nexport interface Props {\n schema: Node[]\n}\n\nfunction pathNodeParse(node: Node): Node[] {\n const _node = Object.assign({}, node)\n const part = _node.type.split('.').reverse()\n const span = _node.span || 24\n delete _node.span\n let tmp = { ..._node, type: part[0] }\n for (let i = 1; i < part.length; i++) {\n const item = part[i]\n tmp = { type: item, children: [tmp] }\n }\n tmp.span = span\n\n return nodesParse([tmp])\n}\n\nfunction nodesParse(_nodes: Node[]): Node[] {\n const root: Node = { type: 'row', props: { gutter: 20, class: 'render-row' }, children: [] }\n _nodes.forEach(_node => {\n let node = Object.assign({}, _node)\n if (isObject(node.props?.style)) {\n let style = ''\n Object.keys(node.props?.style).forEach(k => {\n style += k + ':' + node.props?.style[k] + ';'\n })\n node.props!.style = style\n }\n const colProps = { span: node.span ?? 24, class: 'render-col' }\n delete node.span\n if (node.type.indexOf('.') > 0) {\n (root.children! as Node[]).push({\n type: 'col',\n props: colProps,\n children: pathNodeParse(node)\n })\n return\n }\n node = merge({ props: {}}, defaultSchema[node.type] || {}, node)\n const children = transChildren(node.children)\n if (children.length) {\n node.children = nodesParse(children)\n }\n (root.children! as Node[]).push({\n type: 'col',\n props: colProps,\n children: [\n node\n ]\n })\n })\n\n return [root]\n}\n\nfunction transChildren(children : Node[] | Node | undefined) : Node[] {\n const _children : Node[] = isArray(children) ? children! as Node[] : (isObject(children) ? [children! as Node] : [])\n return _children\n}\n\nlet globalComps : Record<string, Component> = {}\n\nconst createVNode = (node: Node) => {\n const comp = components[node.type] || globalComps[node.type] || node.type\n return h(comp, node.props, { default: () => transChildren(node.children).map(item => createVNode(item)) })\n}\n\nexport const render = (props: Props) => {\n if (Object.keys(globalComps).length === 0) {\n globalComps = getCurrentInstance()!.appContext.components\n }\n const nodes: Node[] = nodesParse(Object.values(props.schema))\n return nodes.map(item => createVNode(item))\n}\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <render :schema=\"schema\" />\n </PageLoad>\n</template>\n<script setup name=\"Custom\">\nimport PageLoad from '../components/PageLoad.vue'\nimport { render } from '../render'\nimport { toRaw } from 'vue'\nconst schema = ref([])\nconst schemaHandler = (_schema, project) => {\n schema.value = toRaw(_schema)\n return _schema\n}\n</script>\n","import type { RouteRecordRaw } from 'vue-router'\nimport { MenuType, OmsModule, PageInfo, PageType, RemoteModule } from '../types'\nimport { Component } from 'vue'\nimport { Container, Form, Report, Table, Tree, Custom } from '../scaffold'\n\nlet bu: Record<string, any> = {}\nexport function regViews(_bu: Record<string, any>) {\n bu = _bu\n}\n\nconst getComponent = (item: PageInfo): Component => {\n const loadCustom = (path: string): any => {\n const _path = './views/' + path + '.vue'\n if (bu && bu[_path] && bu[_path].default) {\n return bu[_path].default\n }\n console.error(`自定义组件不存在 ${item.name} ${item.view}`)\n return Container\n }\n if (item.path === '#') {\n return Container\n }\n switch (item.page_type) {\n case PageType.list:\n return Table\n case PageType.form:\n return Form\n case PageType.custom:\n case PageType.localComp:\n return loadCustom(item.view || '')\n case PageType.tree:\n return Tree\n case PageType.report:\n return Report\n case PageType.customSchema:\n return Custom\n }\n return Container\n}\n\nfunction getPath(item: PageInfo) {\n let path = item.path\n if (item.type === MenuType.menu && item.page_type === PageType.entity) {\n path = '#'\n }\n // :id 默认转换为数字型匹配模式\n if (path.indexOf(':id') > -1 && path.indexOf(':id') + 3 === path.length) {\n path = path.replace(':id', ':id(\\\\d+)')\n }\n return path === '#'\n ? '/' + item.id + '_DIR_' + item.name\n : path[0] !== '/'\n ? '/' + path\n : path\n}\n\nfunction getName(item: PageInfo): string {\n return (item.path + item.name).split('/').filter(v => v).join('_')\n}\n\nconst transRoute = (item: PageInfo): RouteRecordRaw => {\n const isShow = item.type !== MenuType.page\n const route: RouteRecordRaw = {\n path: getPath(item),\n name: item.id + '_' + getName(item) + '_' + item.path.replaceAll('/', '_'),\n component: getComponent(item),\n meta: {\n id: item.id,\n pageId: item.id,\n title: item.name,\n icon: item.icon,\n hidden: !isShow,\n path: item.path,\n menuType: item.type,\n keepAlive: false\n },\n children: item.children ? item.children.map(each => transRoute(each)) : []\n }\n if (item.page_type === PageType.entity) {\n const createList = item.path + '/list'\n const createForm = item.path + '/form'\n const createEdit = item.path + '/:id'\n const children : Array<RouteRecordRaw> = [{\n path: createList,\n name: item.name + '列表' + item.id,\n component: Table,\n meta: {\n id: item.id + 99999,\n title: '列表',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }, {\n path: createForm,\n name: item.name + '新建' + item.id,\n component: Form,\n meta: {\n id: item.id + 99999 + 1,\n title: '新建',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }, {\n path: createEdit,\n name: item.name + '编辑' + item.id,\n component: Form,\n meta: {\n id: item.id + 99999 + 2,\n title: '编辑',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }]\n route.children = [...children, ...route.children as RouteRecordRaw[]]\n }\n if (route.children && route.children.length > 0) {\n let allChildHidden = true\n route.children.forEach(each => {\n if (each.meta && !each.meta.hidden) {\n allChildHidden = false\n }\n })\n if (route.meta) {\n route.meta.menuType = isShow ? MenuType.dir : MenuType.hidden\n }\n if (allChildHidden) {\n if (route.meta) {\n route.meta.menuType = MenuType.menu\n }\n let redirect = '/'\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n redirect = route.children[i].path\n break\n }\n }\n route.redirect = redirect\n route.path = '/' + item.id + '_DIR' + route.redirect.replaceAll('/', '_').toUpperCase()\n }\n }\n\n return route\n}\n\nexport const transRemoteModules = (data: RemoteModule[]): OmsModule[] => {\n const vueRouteModule: OmsModule[] = []\n data.forEach(item => {\n const m: OmsModule = {\n id: item.id,\n label: item.label,\n routes: []\n }\n item.routes.forEach(each => {\n m.routes.push(transRoute(each))\n })\n vueRouteModule.push(m)\n })\n\n return vueRouteModule\n}\n","import { 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 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'\nimport router from '../../router'\n\nfunction getToken() {\n return store.state.user.token\n}\n\nfunction errMsg(message: string) {\n Message({\n message: message,\n type: 'error',\n duration: 5 * 1000,\n grouping: true\n })\n}\n\nconst baseRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n config.headers = config.headers || {}\n const token = getToken()\n if (token) {\n config.headers['X-Token'] = token\n }\n if (router.currentRoute.value.meta?.path) {\n config.headers['X-Path'] = router.currentRoute.value.meta.path\n }\n return config\n }\n}\n\nconst baseResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled(response) {\n const notHoldApiErr = response.config?.notHoldApiErr !== undefined && response.config?.notHoldApiErr === true\n if (!notHoldApiErr && response.data.code !== 0) {\n const message = response.data.message || `接口请求错误 ${response.config.method}::${response.config.url?.split('?')[0]}`\n if (response.data.code === 401) {\n 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 errMsg(message)\n }\n return Promise.reject(message)\n }\n\n let _message_box = response.data?.data?._message_box\n if (_message_box !== undefined) {\n if (isString(_message_box)) {\n _message_box = {\n message: response.data?.data?._message_box\n }\n }\n MessageBox({\n title: '提示',\n type: 'success',\n grouping: true,\n ..._message_box\n })\n }\n\n return response.data\n },\n onRejected(error: AxiosError) {\n if (axios.isCancel(error)) {\n return Promise.reject('')\n }\n errMsg(`${error.message} ${error.config.method}::${error.config.url?.split('?')[0]}`)\n return Promise.reject(error)\n }\n}\n\nexport const interceptors: Interceptor[] = [\n {\n request: cancelRequestInterceptor,\n response: cancelResponseInterceptor\n },\n {\n request: baseRequestInterceptor,\n response: baseResponseInterceptor\n }\n]\n\nexport function addInterceptor(newInterceptor: Interceptor) {\n interceptors.push(newInterceptor)\n}\n","import axios, { AxiosRequestConfig } from 'axios'\nimport { defaultOptions } from '../../default'\nimport { merge } from 'lodash'\nimport { interceptors } from './interceptors'\n\nexport function instance(conf: AxiosRequestConfig = {}) {\n const defaultConf: AxiosRequestConfig = defaultOptions.axios || {}\n const c = merge(defaultConf, conf || {})\n const service = axios.create({\n ...c\n // adapter: (c) => cacheAdapter(c, defaultAxios)\n })\n\n interceptors.forEach(item => {\n service.interceptors.request.use(item.request.onFulfilled, item.request.onRejected)\n service.interceptors.response.use(item.response.onFulfilled, item.response.onRejected)\n })\n\n return service\n}\n\nexport default instance()\n","import type { ObjectDirective } from 'vue'\n\nconst outClick: ObjectDirective = {\n beforeMount(el, binding) {\n el.clickOutsideEvent = function(event: Event) {\n if (!(el === event.target || el.contains(event.target))) {\n binding.value(event, el)\n }\n }\n document.body.addEventListener('click', el.clickOutsideEvent)\n },\n unmounted(el) {\n document.body.removeEventListener('click', el.clickOutsideEvent)\n }\n}\n\nexport default outClick\n","import mitt from 'mitt'\nimport type { App } from 'vue'\n\nconst eventBus = mitt()\n\nconst defaultOptions = {\n global: true,\n inject: true,\n globalPropertyName: '$eventBus',\n injectName: '$eventBus'\n}\n\n// eventBus.install = install\nexport default eventBus\nexport const bus = eventBus\n\nexport function install(app: App, options = {}) {\n const opt = {\n ...defaultOptions,\n ...options\n }\n if (opt.global) {\n app.config.globalProperties[opt.globalPropertyName] = eventBus\n }\n if (opt.inject) {\n app.provide(opt.injectName, eventBus)\n }\n return eventBus\n}\n","import bus from '../plugins/eventBus'\nimport type { ObjectDirective } from 'vue'\n\nconst rightClient: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null) {\n return\n }\n if (binding.value) {\n // el.style.border = '1px solid red'\n }\n el.oncontextmenu = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.cancelBubble = true\n binding.value && bus.emit('right-click', { event: e, data: binding.value })\n }\n }\n}\n\nexport default rightClient\n","import type { ObjectDirective } from 'vue'\n\nconst resize: ObjectDirective = {\n mounted(el) {\n // console.log(8888, el.style)\n }\n}\n\nexport default resize\n","import type { ObjectDirective } from 'vue'\nimport bus from '../plugins/eventBus'\n\nfunction getElementPosition(element: HTMLElement | any, key: 'Top' | 'Left' | 'Right' | 'Botton') {\n let result = element[`offset${key}`]\n let current = element.offsetParent\n\n while (current) {\n result += current[`offset${key}`]\n current = current.offsetParent\n }\n\n return result\n}\n\nconst devtool: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null || !binding.value.dev) {\n return\n }\n let target : HTMLElement = el\n if (binding.value.parent) {\n for (let i = 0; i < binding.value.parent; i++) {\n if (target.parentElement) {\n target = target.parentElement\n }\n }\n }\n\n target.classList.add('devtool-hover')\n\n // button wrapper\n const wrapper = document.createElement('i')\n wrapper.className = 'devtool-item-wrapper'\n\n target.onmouseover = () => {\n wrapper.style.height = (target.offsetHeight + 30) + 'px'\n wrapper.style.width = (target.offsetWidth + 30) + 'px'\n wrapper.style.top = (getElementPosition(target, 'Top') - 15) + 'px'\n wrapper.style.left = (getElementPosition(target, 'Left') - 15) + 'px'\n }\n\n // create edit button\n const editBtn = document.createElement('span')\n editBtn.className = 'dev-action-edit'\n editBtn.title = '编辑'\n const editIcon = document.createElement('i')\n editIcon.className = 'iconfont ra-editor1'\n editBtn.appendChild(editIcon)\n editBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'edit', devId: binding.value.devId }})\n }\n wrapper.appendChild(editBtn)\n\n // create delete button\n const delBtn = document.createElement('span')\n delBtn.className = 'dev-action-del'\n delBtn.title = '删除'\n const delIcon = document.createElement('i')\n delIcon.className = 'iconfont ra-cut'\n delBtn.appendChild(delIcon)\n delBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'del', devId: binding.value.devId }})\n }\n wrapper.appendChild(delBtn)\n\n // append wrapper as first child\n target.insertBefore(wrapper, target.firstChild)\n\n return\n }\n}\n\nexport default devtool\n","import type { App, Component, Directive } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport type { OmsOptions, OmsPlugin, UsePlugin } from './types'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport type { Module } from 'vuex'\n\nimport AppComp from './App.vue'\nimport { startMock, regMockApis } from './mock'\nimport { instance } from './utils/request'\nimport { isObject } from '@okiss/utils'\nimport { VIcon, setUploadHeaderHandle } from '@okiss/vbtf'\nimport { 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 store.dispatch('app/setBaseAPI', options?.axios.baseURL).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","_a","addNewStyle","addNewStyleTag","_b","provide","_d","_c","MockHttpMethod","form","buttons","table","_","listMock","layoutForm","layoutSection","example","userApis","options","apis","user","defaultAxios","defaultSettings","locale","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","website","_e","_f","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","defaultMap","setCmp","name","cmp","getCmp","_sfc_main$u","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","_route","i","to","group","PageType","PageType2","MenuType","SidebarItem","Logo","SearchMenu","localRoutes","include","onBeforeRouteLeave","WIDTH","useStore","sidebar","computed","fixedHeader","classObj","isMobile","useEventListener","resizeHandler","handleClickOutside","ismobile","BaseSso","__publicField","next","Github","getQueryParam","redirect","DingTalk","getReloadUrl","extra","strVarReplace","obj2Param","getQrCodeUrl","onScanSuccess","origin","createIFrame","defaultSso","allSso","sso","active","router","useRouter","tips","baseAPI","ts","onCaptchaClick","onReady","login","MD5","res","Layout","Dashboard","Login","NotFoundPage","createRouter","createWebHashHistory","NProgress","nprogress","from","isLodeRemoteRoutes","getWhiteRoutes","permission","flag","isObject","_sfc_render","_component_el_alert","_sfc_main$a","VLoading","VNotice","project","conf","isString","_createCommentVNode","_component_VNotice","_component_VLoading","_renderSlot","schemaHandler","defaultSort","allowedProps","VTable","_sfc_main$7","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","_keys","seriesData","_sfc_main$3","VChart","Markdown","NumberPanel","props","comptype","isArray","onMounted","formData","formOptions","_filter","_dataPart","schemaapi","onsubmit","data2","test","components","ElCard","ElRow","ElCol","defaultSchema","class","shadow","afterReset","syncUrl","pathNodeParse","_node","Object","assign","part","split","reverse","length","children","nodesParse","_nodes","root","gutter","forEach","style","colProps","indexOf","push","transChildren","globalComps","createVNode","comp","h","default","map","render","getCurrentInstance","appContext","values","_schema","toRaw","bu","regViews","_bu","getComponent","loadCustom","_path","Container","Table","Form","Tree","Report","Custom","getPath","getName","transRoute","isShow","createList","createForm","createEdit","allChildHidden","transRemoteModules","vueRouteModule","remoteRoutes","remoteRoute","routeModules","setPageTitle","tokens","len","failure","guard","errMsg","message","baseRequestInterceptor","baseResponseInterceptor","action","_message_box","_g","interceptors","instance","defaultConf","service","http$1","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","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/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/base.ts","../src/utils/sso/github.ts","../src/utils/sso/dingtalk.ts","../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/notice/VNotice.vue","../src/components/PageLoad.vue","../src/scaffold/table.vue","../src/scaffold/form.vue","../src/components/VTree.vue","../src/scaffold/tree.vue","../src/scaffold/container.vue","../src/components/report/option.ts","../src/components/report/NumberPanel.vue","../src/components/report/part.vue","../src/components/report/index.vue","../src/scaffold/report.vue","../src/render/index.tsx","../src/scaffold/custom.vue","../src/router/remote.ts","../src/router/guard/remote-routes.ts","../src/router/guard/set-page-title.ts","../src/router/guard/index.ts","../src/router/index.ts","../src/utils/request/interceptors.ts","../src/utils/request/index.ts","../src/directive/outClick.ts","../src/plugins/eventBus.ts","../src/directive/rightClick.ts","../src/directive/resize.ts","../src/directive/devtool.ts","../src/admin.ts"],"sourcesContent":["/* eslint-disable */\ninterface String {\n format(...replacements: string[]): string;\n}\n\nif (!String.prototype.format) {\n String.prototype.format = function () {\n const args = arguments\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] !== 'undefined'\n ? args[number]\n : match\n })\n }\n}\n","<template>\n <router-view />\n</template>\n\n<script setup lang=\"ts\">\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 document.getElementById('preloader')?.remove()\n addNewStyle('test-icon', '//at.alicdn.com/t/font_2246548_zclaqxwmzq8.css')\n\n const css = `.iconfont {\n font-size: 19px;\n font-style: normal;\n -webkit-font-smoothing: antialiased;\n font-family: iconfont !important;\n }`\n\n addNewStyleTag(css)\n }\n})\n\nif (window?.OmsOptions?.form?.vsPath) {\n provide('vsPath', window?.OmsOptions?.form?.vsPath)\n}\n</script>\n","export enum MockHttpMethod {\n GET = 'get',\n POST = 'post',\n DELETE = 'delete',\n FETCH = 'fetch',\n OPTION = 'option',\n PUT = 'put'\n}\n\nexport interface MockOption {\n query: Record<string, any>,\n data: Record<string, any>\n}\n\nexport interface MockApi {\n method: MockHttpMethod,\n url: string | RegExp,\n baseURL?: string,\n response: (options: MockOption) => Record<string, any>\n}\n\nexport interface MockApiMap {\n [key: string]: MockApi\n}\n","import _ from 'lodash'\n\nconst form = {\n saveApi: '/save',\n afterSubmit: '',\n afterReset: 'goback',\n options: {\n column: 3,\n submitButton: {\n text: '提交'\n },\n cancelButton: {\n text: '取消',\n on: {\n click: '() => console.error(33333333)'\n }\n }\n },\n formItems: [\n {\n type: 'radio',\n field: 'radio',\n label: '单选框',\n info:\n '表单控件支持提示信息, 可写html <a class=\"el-link el-link--primary is-underline\" target=\"_blank\" href=\"http://github.com/daodao97\">文档</a>',\n options: [\n {\n value: 1,\n label: '选项1'\n },\n {\n value: 2,\n label: '选项2'\n }\n ],\n value: 1,\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n field: 'input',\n label: '输入框',\n value: 5,\n props: {\n maxlength: 10,\n suffixIcon: 'el-icon-date',\n slots: {\n prepend: '前缀'\n },\n showCopy: true,\n prefixIcon: 'el-icon-search'\n },\n rules: [{ required: true, message: '该项为必填项' }],\n depend: {\n field: 'radio',\n value: 1\n },\n computed: [\n {\n when: 'aaa',\n set: {\n checkbox: {\n value: [1]\n }\n }\n },\n {\n when: 'bbb',\n set: {\n checkbox: {\n value: [2, 3]\n }\n }\n }\n ],\n info: '当前控件依赖 单选框 的值, 仅在 选项1 下显示',\n col: {\n span: 12\n }\n },\n {\n type: 'number',\n field: 'number',\n label: '数字',\n props: {\n step: 2\n },\n computed: {\n // when: [\"$self\", \">\", 10],\n // when: [\">\", 3],\n when: 4,\n set: {\n range_number: {\n label: '数字区间2'\n }\n }\n },\n col: {\n span: 12\n },\n value: 4\n },\n {\n type: 'number-range',\n field: 'range_number',\n label: '数字区间',\n col: {\n span: 12\n }\n },\n {\n type: 'checkbox',\n field: 'checkbox',\n label: '复选框',\n value: [],\n options: [\n { value: 1, label: '复选框1' },\n { value: 2, label: '复选框2' },\n { value: 3, label: '复选框3' }\n ],\n info: '动态计算, 当 输入框 字段的值 为 aaa 时, 复选框1将被选中, 为 bbb 时, 复选框2,3 将被选中',\n col: {\n span: 8\n }\n },\n {\n type: 'date',\n field: 'date',\n label: '日期',\n props: {\n disabled: true\n },\n info: '禁用控件',\n col: {\n span: 8\n }\n },\n {\n type: 'date',\n field: 'date_range',\n label: '日期范围',\n value: '',\n props: {\n type: 'daterange',\n rangeSeparator: '~',\n startPlaceholder: '开始日期',\n endPlaceholder: '结束日期'\n },\n col: {\n span: 8\n }\n },\n {\n type: 'time',\n field: 'time',\n label: '时间'\n },\n {\n type: 'time',\n field: 'time_range',\n label: '时间范围',\n props: {\n isRange: true\n }\n },\n {\n type: 'datetime',\n field: 'datetime',\n label: '日期时间'\n },\n {\n type: 'datetime',\n field: 'datetime_range',\n label: '日期时间范围',\n props: {\n type: 'datetimerange'\n }\n },\n {\n type: 'select',\n field: 'select',\n label: '下拉框',\n options: [\n { value: 1, label: '选项1' },\n { value: 2, label: '选项2' },\n { value: 3, label: '选项3' },\n { value: 4, label: '选项4' }\n ],\n props: {\n selectApi: '/user/select'\n }\n },\n {\n type: 'switch',\n field: 'switch',\n label: '开关'\n },\n {\n type: 'slider',\n field: 'slider',\n label: '滑块'\n },\n {\n type: 'upload',\n field: 'upload',\n label: '上传',\n value: 'http://qupinapptest.oss-cn-beijing.aliyuncs.com/1/202002/d81d3c9dc7c3df7590d333f783a97995.jpeg',\n props: {}\n },\n {\n type: 'upload',\n field: 'upload_multiple',\n label: '上传多张',\n props: {\n limit: 3\n }\n },\n {\n type: 'transfer',\n field: 'transfer',\n label: '穿梭框',\n options: [\n { value: 1, label: '备选项1' },\n { value: 2, label: '备选项2' },\n { value: 3, label: '备选项3' }\n ],\n value: []\n },\n {\n type: 'color',\n field: 'color',\n label: '颜色'\n },\n {\n type: 'rate',\n field: 'rate',\n label: '评分',\n value: 3\n },\n {\n type: 'sub-form',\n field: 'sub_form',\n label: '多项子表单',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'sub_input',\n label: '输入框',\n rules: [\n {\n required: true,\n message: '子表单的校验将在上层表单校验通过后执行'\n }\n ],\n info: 'input 输入框支持 mask',\n props: {\n mask: '99-9999999'\n }\n },\n {\n type: 'input',\n field: 'sub_input_1',\n label: '输入框1'\n }\n ]\n }\n },\n {\n type: 'sub-form',\n field: 'sub_form_not_repeat',\n label: '子表单',\n props: {\n options: {\n inline: true\n },\n formItems: [\n {\n type: 'input',\n field: 'sub_input',\n label: '输入框',\n rules: [\n {\n required: true,\n message: '子表单的校验将在上层表单校验通过后执行'\n }\n ]\n },\n {\n type: 'input',\n field: 'sub_input_1',\n label: '输入框1'\n }\n ]\n }\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'json',\n field: 'json',\n label: 'json',\n value: '{\"a\":1}'\n },\n {\n type: 'rule',\n field: 'rule',\n label: 'rule',\n value: [],\n props: {\n factorOptions: [{ label: 'A', value: 'A' }, { label: 'B', value: 'B' }, { label: 'C', value: 'C' }],\n symbolOptions: [{ label: '大于', value: '>' }, { label: '等于', value: '=' }, { label: '小于', value: '<' }]\n }\n },\n {\n type: 'template',\n field: 'p3',\n label: '自定义',\n comp: {\n inject: ['formData'],\n template: '<div>{{ msg }}<br/>当前的表单数据是:<pre>{{JSON.stringify(formData, null, 2)}}</pre><el-button @click=\"onclick\">click</el-button></div>',\n data: {\n msg: 'this is custom data'\n },\n methods: {\n onclick: '() => { console.log(this)}'\n }\n },\n info: '在通用表单控件无法满足需求时, 可以编写 `template` 模板组件'\n }\n ]\n}\n\nconst buttons = [\n {\n type: 'jump',\n text: '跳转',\n target: 'http://github.com/daodao97'\n },\n {\n type: 'api',\n text: '请求接口',\n target: '/test_api',\n extra: {\n method: 'POST',\n url: '/test_api'\n },\n props: {\n type: 'warning'\n }\n },\n {\n type: 'table',\n text: '表格',\n extra: {\n infoApi: '/student/list_info',\n listApi: '/student/list'\n },\n props: {\n type: 'info'\n }\n },\n [\n {\n type: 'jump',\n text: '跳转',\n target: 'http://github.com/daodao97'\n },\n {\n type: 'api',\n text: '请求接口',\n extra: {\n method: 'POST',\n url: '/test_api'\n }\n }\n ],\n {\n type: 'form',\n text: '表单',\n extra: {\n infoApi: '/form',\n saveApi: '/save'\n },\n props: {\n type: 'success'\n }\n }\n]\n\nconst table = {\n exportAble: true,\n filter: [\n {\n field: 'name',\n type: 'input',\n label: '姓名'\n },\n {\n field: 'sex',\n type: 'select',\n label: '性别',\n options: [\n { value: 1, label: '男' },\n { value: 0, label: '女' }\n ]\n }\n ],\n headers: [\n {\n field: 'name',\n label: '姓名',\n info: '表头提示'\n },\n {\n field: 'sex',\n type: 'enum',\n label: '性别',\n options: [\n { value: 1, label: '男' },\n { value: 0, label: '女' }\n ],\n state: {\n 1: 'info',\n 0: 'warning'\n },\n props: {\n sortable: true\n }\n },\n {\n field: 'github',\n type: 'link',\n label: '主页'\n },\n {\n field: 'html',\n type: 'html',\n label: 'HTML'\n },\n {\n field: 'image',\n type: 'image',\n label: '头像'\n },\n {\n field: 'json',\n type: 'json',\n label: '信息'\n },\n {\n field: 'richText',\n type: 'rich-text',\n label: '信息'\n }\n ],\n batchButton: buttons,\n rowButton: [\n {\n type: 'jump',\n text: '编辑',\n target: '/user/{id}'\n },\n {\n type: 'form',\n extra: {\n infoApi: '/user/{id}',\n saveApi: '/user/{id}'\n },\n props: {\n icon: 'el-icon-edit',\n type: 'success'\n }\n },\n {\n type: 'api',\n extra: {\n method: 'POST',\n url: '/student/{id}'\n },\n props: {\n icon: 'el-icon-delete',\n type: 'danger'\n }\n }\n ],\n normalButton: [\n ..._.cloneDeep(buttons),\n {\n type: 'jump',\n target: '/user/form',\n props: {\n icon: 'el-icon-plus',\n type: 'primary'\n }\n }\n ],\n selectedNotice: '当前共勾选: {selectedCount} 条',\n listApi: '/user/list'\n}\n\nconst listMock = {\n code: 0,\n data: {\n 'list|0-100': [\n {\n 'id|0-1000': 1,\n name: '@cname',\n 'sex|0-1': 1,\n 'score|0-100': 60,\n link: 'http://github.com/daodao97',\n image: 'http://qupinapptest.oss-cn-beijing.aliyuncs.com/1/202002/d81d3c9dc7c3df7590d333f783a97995.jpeg',\n html: '<S>显示删除线1</S>',\n json: { slogan: '左手代码右手诗' },\n richText: '在一段文本中<突出|black|yellow>显示某些<文字|#ffffff|#000000>'\n }\n ],\n page: {\n 'count|1-10': 2,\n 'page|1-5': 2\n }\n }\n}\n\nconst layoutForm = {\n afterSubmit: '',\n afterReset: 'goback',\n formItems: [\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span'\n }\n ]\n}\n\nconst layoutSection = {\n afterSubmit: '',\n afterReset: '',\n formItems: [\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span12-1',\n col: {\n span: 12\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n section: '表单片段1',\n col: {\n span: 6\n }\n },\n {\n type: 'input',\n label: 'span6-1',\n col: {\n span: 6\n }\n },\n {\n section: '表单片段2',\n type: 'input',\n label: 'span'\n }\n ]\n}\n\nexport default { form, table, listMock, layoutForm, layoutSection }\n\n","import { MockApi, MockHttpMethod, MockOption } from '../types'\nimport menu from '../data/menu'\nimport role from '../data/role'\nimport example from '../data/example'\n\nconst userApis: MockApi[] = [\n {\n method: MockHttpMethod.POST,\n url: '/login',\n response(options: MockOption) {\n return {\n code: 0,\n data: {\n name: 'daodao97',\n token: 'xxxxxxx'\n }\n }\n }\n },\n {\n method: MockHttpMethod.GET,\n url: '/user/info',\n response(options: MockOption) {\n return {\n code: 0,\n data: {\n role_ids: [1],\n resource: [[0, 20, 'formItems', 'radio'], [0, 1, 2]]\n }\n }\n }\n },\n {\n url: '/user/routes',\n method: MockHttpMethod.GET,\n response: (options: MockOption) => {\n return {\n code: 0,\n data: [\n {\n id: 0,\n label: '',\n routes: []\n }\n ]\n }\n }\n },\n {\n url: '/user/list',\n method: MockHttpMethod.GET,\n response: (options: MockOption) => {\n return example.listMock\n }\n }\n]\n\nexport default userApis\n","import user from './user'\nimport { MockApi } from '../types'\n\nconst apis: MockApi[] = [\n ...user\n]\n\nexport default apis\n","import locale from 'element-plus/lib/locale/lang/zh-cn'\nimport { AxiosRequestConfig } from 'axios'\nimport { OmsOptions } from './types'\nimport { Settings } from './types'\n\nconst defaultAxios: AxiosRequestConfig = {\n baseURL: '/api',\n withCredentials: true,\n cacheEnable: true\n}\n\nexport const defaultSettings: Settings = {\n title: 'oms',\n fixedHeader: false,\n sidebarLogo: true,\n logo: 'http://assest.daodao.run/logo.png',\n closeNavNotice: false,\n navBarNotice: '',\n hasNewMessage: true,\n showPageJsonSchema: false,\n loginTips: '',\n sso: {},\n ElementPlus: {\n size: 'default',\n zIndex: 3000,\n locale: 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, Settings, UserInfo } from '../../types'\nimport { ApiResponse } from '../../utils/request/types'\nimport { getToken, removeToken, setToken } from '../../utils/token'\nimport { RouteRecordRaw } from 'vue-router'\nimport Cookies from 'js-cookie'\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 const website = (response.data?.website || {}) as Settings\n commit('settings/updateSettings', website, { root: true })\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 baseURL: ''\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 SET_BASE_API: (state: App, data: string) => {\n state.baseURL = 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 setBaseAPI({ commit }: ActionContext<App, App>, data: string) {\n commit('SET_BASE_API', 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, AxiosRequestConfig } from 'axios'\n// @ts-ignore\nimport qs from 'qs'\n\nconst CancelToken = axios.CancelToken\n\nconst task = {\n taskList: {} as Record<string, any>,\n cacheList: new Map(),\n uniqueId(config: AxiosRequestConfig) {\n return `${location.href}|${config.method}|${config.url}|`\n // + qs.stringify(config.params)\n },\n addTask(config: AxiosRequestConfig, cancelfun: Canceler) {\n const key = this.uniqueId(config)\n this.taskList[key] = cancelfun\n },\n delTask(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n const c = this.taskList[key]\n c && c(config)\n },\n pending(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n return !!this.taskList[key]\n },\n cache(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n const c = this.cacheList.get(key)\n if (!c) {\n return undefined\n }\n if (c.expirationTime < (new Date()).getTime()) {\n this.delCache(config)\n return undefined\n }\n console.log('getcache', key, c.response)\n return c.response\n },\n addCache(config: AxiosRequestConfig, response: any) {\n const key = this.uniqueId(config)\n const cacheTime = config.cacheTime || 0\n if (cacheTime) {\n this.cacheList.set(key, { response, expirationTime: (new Date()).getTime() + cacheTime })\n }\n },\n delCache(config: AxiosRequestConfig) {\n const key = this.uniqueId(config)\n return this.cacheList.delete(key)\n }\n}\n\nexport const cacheAdapter: (config: AxiosRequestConfig, instance: AxiosInstance) => Promise<any> = (config: AxiosRequestConfig, instance: AxiosInstance) => {\n return new Promise((resolve, reject) => {\n if (config.method !== 'get') {\n delete config.adapter\n resolve(instance(config))\n return\n }\n const cache = task.cache(config)\n if (!cache) {\n delete config.adapter\n resolve(instance(config))\n return\n }\n resolve({ data: cache, config: config })\n })\n}\n\nexport const cancelRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n if (config.cacheEnable === false) {\n return config\n }\n if (task.pending(config)) {\n task.delTask(config)\n }\n config.cancelToken = new CancelToken((cancel) => {\n task.addTask(config, cancel)\n })\n return config\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n\nexport const cancelResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled: function(response: AxiosResponse) {\n // @ts-ignore\n if (response.config.cacheEnable === false) {\n return response\n }\n if (response.config.method === 'get' && Object.keys(response.data as Record<string, any>).length > 0) {\n task.addCache(response.config, response.data)\n }\n return response\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n","import { Component } from 'vue'\n\nconst defaultMap: Record<string, Component> = {}\n\nexport function setCmp(name: string, cmp: Component) {\n defaultMap[name] = cmp\n}\n\nexport function getCmp(name: string) {\n return defaultMap[name]\n}\n","<script lang=\"jsx\">\nimport { useStore } from 'vuex'\nimport { getCmp } from '../utils/container'\nimport { computed } from 'vue'\n\nexport default defineComponent({\n name: 'Dashboard',\n setup() {\n const store = useStore()\n // const roleIds = computed(() => store.state.settings.loginTips)\n const custom = getCmp('dashboard')\n if (custom) {\n return () => <span>\n <custom/>\n </span>\n }\n const name = computed(() => store.getters.name)\n return () => <div class='dashboard-container'>\n <div class='dashboard-text'>Hi { name.value } 😄</div>\n </div>\n }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.dashboard {\n &-container {\n margin: 30px;\n }\n\n &-text {\n font-size: 30px;\n line-height: 46px;\n }\n}\n</style>\n","<template>\n <el-breadcrumb\n class=\"app-breadcrumb\"\n separator=\"/\"\n >\n <transition-group name=\"breadcrumb\">\n <el-breadcrumb-item\n v-for=\"(item, index) in levelList\"\n :key=\"item.path\"\n >\n <span\n v-if=\"(item.path.indexOf('/DIR_') === 0 && item.redirect === undefined) || index === levelList.length - 1\"\n class=\"no-redirect\"\n >{{ item.meta.title }}</span> <a\n v-else\n @click=\"handleLink(item)\"\n >{{ item.meta.title }}</a>\n </el-breadcrumb-item>\n </transition-group>\n </el-breadcrumb>\n</template>\n\n<script>\nimport * as pathToRegexp from 'path-to-regexp'\n\nexport default {\n data() {\n return {\n levelList: null\n }\n },\n watch: {\n $route() {\n this.getBreadcrumb()\n }\n },\n created() {\n this.getBreadcrumb()\n },\n methods: {\n getBreadcrumb() {\n // only show routes with meta.title\n let matched = this.$route.matched.filter(\n item => item.meta && item.meta.title\n )\n const first = matched[0]\n\n if (!this.isDashboard(first)) {\n matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(\n matched\n )\n }\n\n this.levelList = matched.filter(\n item => item.meta && item.meta.title && item.meta.breadcrumb !== false\n )\n },\n isDashboard(route) {\n const name = route && route.name\n if (!name) {\n return false\n }\n return (\n name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()\n )\n },\n pathCompile(path) {\n // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561\n const { params } = this.$route\n const toPath = pathToRegexp.compile(path)\n return toPath(params)\n },\n handleLink(item) {\n const { redirect, path } = item\n if (redirect) {\n this.$router.push(redirect)\n return\n }\n this.$router.push(this.pathCompile(path))\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-breadcrumb.el-breadcrumb {\n display: inline-block;\n font-size: 14px;\n line-height: 50px;\n margin-left: 8px;\n\n .no-redirect {\n color: #97a8be;\n cursor: text;\n }\n}\n</style>\n","<template>\n <div\n style=\"padding: 0 15px;\"\n @click=\"toggleClick\"\n >\n <v-icon\n :class=\"{ 'is-active': isActive }\"\n name=\"ra-leftalignment\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Hamburger',\n props: {\n isActive: {\n type: Boolean,\n default: false\n }\n },\n emits: ['toggle-click'],\n methods: {\n toggleClick() {\n this.$emit('toggle-click')\n }\n }\n}\n</script>\n","<template>\n <el-container style=\"width: 100%;height: 100%\">\n <el-row class=\"aside\">\n <slot name=\"left-aside\" />\n </el-row>\n <el-main\n class=\"main\"\n style=\"margin: 0 10px\"\n >\n <slot name=\"main\" />\n </el-main>\n <el-aside\n class=\"aside\"\n width=\"350px\"\n style=\"padding: 20px\"\n >\n <slot name=\"right-aside\" />\n </el-aside>\n </el-container>\n</template>\n<style scoped>\n.main {\n border: 1px solid #ebebeb;\n border-radius: 3px;\n transition: .2s;\n min-height: calc(100vh - 50px);\n width: 100%;\n position: relative;\n}\n.aside {\n padding-top: 20px;\n border: 1px solid #ebebeb;\n border-radius: 3px;\n transition: .2s;\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n\n {\n type: 'icon-select',\n field: 'prefixIcon',\n label: '前置ICON'\n },\n {\n type: 'icon-select',\n field: 'suffixIcon',\n label: '后置ICON'\n },\n {\n type: 'switch',\n field: 'showCopy',\n label: '复制'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'number',\n name: '数字',\n default: {\n type: 'number',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'min',\n label: '最小值'\n },\n {\n type: 'number',\n field: 'man',\n label: '最大值'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'number-range',\n name: '数字区间',\n default: {\n type: 'number-range',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'unit',\n label: '单位'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'allowCreate',\n label: '允许创建'\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'radio',\n name: '单选框',\n default: {\n type: 'radio',\n label: 'label',\n field: 'field_name',\n options: []\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n formItems: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'value',\n label: '字段值'\n }\n ],\n repeat: true\n }\n },\n {\n type: 'input',\n field: 'default',\n label: '默认值'\n }\n ]\n}\n","export default {\n type: 'switch',\n name: '开关',\n default: {\n type: 'switch',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'activeText',\n label: '打开时的文字描述'\n },\n {\n type: 'input',\n field: 'inactiveText',\n label: '关闭时的文字描述'\n },\n {\n type: 'color',\n field: 'activeColor',\n label: '打开时的背景色'\n },\n {\n type: 'color',\n field: 'inactiveColor',\n label: '关闭时的背景色'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'code',\n name: 'Code',\n default: {\n type: 'code',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'json',\n default: {\n type: 'json',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'upload',\n name: '上传',\n default: {\n type: 'upload',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'template',\n name: '自定义组件',\n default: {\n type: 'template',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'icon-select',\n name: '图标选择器',\n default: {\n type: 'icon-select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export default {\n type: 'sub-form',\n name: '子表单',\n default: {\n type: 'sub-form',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'switch',\n field: 'repeat',\n label: '可重复'\n },\n {\n type: 'sub-form',\n field: 'form-items',\n label: '子表单控件',\n props: {\n options: {\n labelPosition: 'top'\n },\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'label',\n label: 'label'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'input', label: '文本框' }\n ]\n }\n ]\n }\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'checkbox',\n name: '复选框',\n default: {\n type: 'checkbox',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'max',\n label: '最大选中数'\n },\n {\n type: 'number',\n field: 'min',\n label: '最小选中数'\n },\n {\n type: 'switch',\n field: 'disabled',\n label: '禁用'\n }\n ]\n }\n }\n ]\n}\n","import input from './ctrls/input'\nimport number from './ctrls/number'\nimport numberRange from './ctrls/number-range'\nimport select from './ctrls/select'\nimport radio from './ctrls/radio'\nimport xswitch from './ctrls/switch'\nimport code from './ctrls/code'\nimport json from './ctrls/json'\nimport upload from './ctrls/upload'\nimport template from './ctrls/template'\nimport iconSelect from './ctrls/icon-select'\nimport subForm from './ctrls/sub-form'\nimport checkbox from './ctrls/checkbox'\n\nconst ctrlMaps = {}\n\nexport function regCtrl(options) {\n ctrlMaps[options.type] = options\n}\n\nregCtrl(input)\nregCtrl(select)\nregCtrl(number)\nregCtrl(numberRange)\nregCtrl(xswitch)\nregCtrl(subForm)\nregCtrl(radio)\nregCtrl(checkbox)\nregCtrl(code)\nregCtrl(json)\nregCtrl(upload)\nregCtrl(iconSelect)\nregCtrl(template)\n\nexport const ctrls = ctrlMaps\n\nexport const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n },\n {\n type: 'switch',\n field: 'inline',\n label: '行布局'\n },\n {\n type: 'radio',\n field: 'labelPosition',\n label: 'label位置',\n options: [\n { value: 'right', label: '右' },\n { value: 'left', label: '左' },\n { value: 'top', label: '上' }\n ]\n },\n {\n type: 'input',\n field: 'labelWidth',\n label: 'label宽度',\n value: '100px'\n },\n {\n type: 'switch',\n field: 'showSubmitButton',\n label: '显示提交按钮',\n value: true\n },\n {\n type: 'sub-form',\n field: 'submitButton',\n label: '提交按钮',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案',\n value: '提交'\n },\n {\n type: 'select',\n field: 'type',\n label: '按钮类型',\n options: [\n { value: 'primary', label: 'primary' }\n ]\n }\n ]\n }\n },\n {\n type: 'switch',\n field: 'showCancelButton',\n label: '显示取消按钮',\n value: true\n },\n {\n type: 'sub-form',\n field: 'cancelButton',\n label: '取消按钮',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案',\n value: '取消'\n },\n {\n type: 'select',\n field: 'type',\n label: '按钮类型',\n options: [\n { value: 'primary', label: 'primary' }\n ]\n }\n ]\n }\n }\n ]\n}\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","<template>\n <dev-layout>\n <template #main>\n <v-form\n v-if=\"builderSchema.formItems\"\n ref=\"form\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n \n <VButton\n text=\"PageSchema\"\n type=\"modal\"\n >\n <JsonView :data=\"getSaveSchema\" />\n </VButton>\n </template>\n <template #right-aside>\n <el-form v-if=\"activeIndex\">\n <el-form-item label=\"控件类型\">\n <el-select v-model=\"currentCtrlType\">\n <el-option\n v-for=\"(item,index) in types\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </el-form-item>\n </el-form>\n <v-form\n :key=\"ctrlKey\"\n v-model=\"ctrlOptions\"\n v-bind=\"ctrlSchema\"\n />\n </template>\n </dev-layout>\n</template>\n<script>\nimport DevLayout from '../DevLayout.vue'\nimport { VForm, VBtn as VButton, JsonView } from '@okiss/vbtf'\nimport { compactObject } from '@okiss/utils'\nimport { cloneDeep, get, merge, set, unset } from 'lodash'\nimport { baseSchema, ctrls } from './form'\nimport { eventBus } from '../../../index'\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n\nconst typs = []\n\nObject.keys(ctrls).forEach(item => {\n typs.push({ value: item, label: ctrls[item].name })\n})\n\nconst sqlSchema = {\n options: {\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'sub-form',\n field: 'columns',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: cloneDeep(typs)\n },\n {\n type: 'input',\n field: 'label',\n label: '字段label'\n }\n ]\n }\n }\n ]\n}\n\nexport default {\n components: { DevLayout, VForm, VButton, JsonView },\n props: {\n schema: {\n type: Object,\n default: _ => {}\n }\n },\n data() {\n return {\n sqlOptions: {},\n sqlSchema: sqlSchema,\n baseSchema: baseSchema,\n activeTab: 'base',\n builderSchema: Object.assign(\n {},\n this.$props.schema,\n {\n options: {\n submitButton: false,\n cancelButton: false\n }\n }\n ),\n baseOptions: {},\n key: 0,\n ctrlKey: 0,\n activeCtrl: undefined,\n ctrlOptions: {},\n ctrlSchema: {},\n ctrlName: '',\n activeIndex: undefined,\n ctrlMap: ctrls,\n activeIndexReg: /(formItems)?\\[(\\d+)\\]/,\n tableStruct: '',\n activeName: '1',\n currentCtrlType: 'input',\n types: cloneDeep(typs)\n }\n },\n computed: {\n getSaveSchema() {\n return {\n formItems: this.builderSchema.formItems\n }\n }\n },\n watch: {\n baseOptions: {\n deep: true,\n immediate: true,\n handler(val) {\n const tmp = cloneDeep(val)\n if (val.showSubmitButton === false) {\n tmp.submitButton = false\n }\n if (val.cancelSubmitButton === false) {\n tmp.cancelButton = false\n }\n delete tmp.showSubmitButton\n delete tmp.showCancelButton\n if (Object.keys(tmp).length > 0) {\n this.builderSchema = merge(this.builderSchema, { options: tmp })\n this.key++\n }\n }\n },\n ctrlOptions: {\n deep: true,\n // immediate: true,\n handler(val) {\n const current = get(this.builderSchema, this.activeIndex)\n if (!current) {\n return\n }\n const type = current ? current.type : ''\n const ctrl = this.ctrlMap[type]\n const transData = ctrl.trans ? ctrl.trans(val) : val\n if (transData && Object.keys(transData).length > 0) {\n transData.type = type\n // update `builderSchema` nested data\n if (this.activeIndex.indexOf('[') > -1) {\n // format like: `headers[0]`\n const [_, key, keyIndex] = this.activeIndex.match(/(\\w+)\\[(\\d+)\\]/)\n _\n this.builderSchema[key][keyIndex] = { ...transData }\n } else {\n this.builderSchema[this.activeIndex] = transData\n }\n // set(this.builderSchema, this.activeIndex, transData)\n this.key++\n }\n }\n },\n currentCtrlType: {\n handler(val) {\n const ctrl = this.ctrlMap[val]\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n const sourceCtrlOptions = get(this.builderSchema, this.activeIndex)\n this.ctrlOptions = cloneDeep(sourceCtrlOptions)\n this.ctrlOptions.type = val\n this.ctrlKey++\n this.key++\n }\n }\n },\n beforeCreate() {\n eventBus.on('dev-action', ({ event, data }) => {\n this.onDevAction(data.type, data.devId)\n })\n },\n unmounted() {\n eventBus.off('dev-action')\n },\n methods: {\n onDevAction(btnType, path) {\n this.activeIndex = 'formItems' + path\n if (btnType === 'edit') {\n this.activeTab = 'ctrl'\n this.clicklabel()\n }\n if (btnType === 'del') {\n this.activeTab = 'base'\n this.removeOne()\n }\n this.ctrlKey++\n },\n push(name) {\n const target = 'formItems'\n this.ctrlOptions = {}\n this.builderSchema[target] = this.builderSchema[target] || []\n const ctrl = this.ctrlMap[name]\n this.activeCtrl = ctrl\n this.builderSchema[target].push(cloneDeep(ctrl.default))\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n this.key++\n this.activeIndex = `${target}[${this.builderSchema[target].length - 1}]`\n this.activeTab = 'ctrl'\n },\n removeOne() {\n unset(this.builderSchema, this.activeIndex)\n this.builderSchema = cloneDeep(compactObject(this.builderSchema))\n this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n const type = ctrlOptions.type\n const ctrl = this.ctrlMap[type]\n if (!ctrl) {\n this.$message({ type: 'warning', message: '尚未支持该组件的UI编辑' })\n return\n }\n this.currentCtrlType = type\n this.ctrlOptions = ctrlOptions\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: { formItems: this.builderSchema.formItems }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'date',\n name: '日期',\n default: {\n type: 'date',\n label: '时间',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'switch',\n field: 'showFilter',\n label: '搜索条件',\n value: true\n },\n {\n type: 'switch',\n field: 'showPagination',\n label: '页码',\n value: true\n },\n {\n type: 'switch',\n field: 'exportAble',\n label: '导出按钮'\n }\n ]\n}\n","export const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","export default {\n type: 'span',\n name: '文本',\n default: {\n type: 'span',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'switch',\n field: 'sortable',\n label: '排序'\n }\n ]\n}\n","export default {\n type: 'enum',\n name: '标签',\n default: {\n type: 'enum',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '映射',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n value: []\n }\n ],\n trans(val) {\n val.options = val.options || []\n if (!val.label) {\n val.label = '表头'\n }\n return val\n }\n}\n","export default {\n type: 'html',\n name: 'HTML',\n default: {\n type: 'html',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'icon',\n name: '图标',\n default: {\n type: 'icon',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'image',\n name: '图片',\n default: {\n type: 'image',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'JSON',\n default: {\n type: 'json',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'link',\n name: '链接',\n default: {\n type: 'link',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'rich',\n name: '富文本',\n default: {\n type: 'rich',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'tpl',\n name: '模板',\n default: {\n type: 'tpl',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'input',\n field: 'tpl',\n label: '模板',\n info: '例如 <code>姓名: {name} 年龄:{age}</code>'\n }\n ]\n}\n","import span from './span'\nimport xenum from './emum'\nimport html from './html'\nimport icon from './icon'\nimport image from './image'\nimport json from './json'\nimport link from './link'\nimport rich from './rich'\nimport tpl from './tpl'\n\nexport default {\n span,\n enum: xenum,\n html,\n icon,\n image,\n json,\n link,\n rich,\n tpl\n}\n","export default {\n type: 'jump',\n name: '跳转',\n default: {\n type: 'jump',\n target: '',\n text: '按钮'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: '跳转地址',\n info: '可以是本地路由, 也可以是url'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'api',\n name: '接口请求',\n default: {\n type: 'api',\n target: '',\n text: '请求'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n },\n {\n type: 'input',\n field: 'api',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'select',\n field: 'method',\n label: '请求类型',\n options: [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'DELETE', label: 'DELETE' },\n { value: 'PUT', label: 'PUT' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'form',\n name: '弹框表单',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","export default {\n type: 'table',\n name: '弹框列表',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","import jump from './jump'\nimport api from './api'\nimport form from './form'\nimport table from './table'\n\nexport default {\n jump,\n api,\n form,\n table\n}\n","<template>\n <dev-layout>\n <template #left-aside>\n <el-row style=\"width: 200px\">\n <el-row>\n <el-col\n class=\"title\"\n :data-id=\"22222\"\n >添加搜索条件</el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('input')\"\n >文本框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('select')\"\n >下拉框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('date')\"\n >日期</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加列表项</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.headers)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushHeaders(ctrlMap.headers[item].type)\"\n >{{ ctrlMap.headers[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加行按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushRowButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加常规按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushNormalButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加批量按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushBatchButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n </el-row>\n </template>\n <template #main>\n <v-table\n ref=\"table\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n \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 this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n this.activeBrick = m[1]\n if (['normalButton', 'batchButton', 'rowButton'].indexOf(m[1]) > -1) {\n this.activeBrick = 'buttons'\n }\n let type = this.builderSchema[m[1]][parseInt(m[2])].type\n if (m[1] === 'headers' && type === undefined) {\n type = 'span'\n }\n const ctrl = this.ctrlMap[this.activeBrick][type]\n if (!ctrl) {\n console.log(this.activeBrick, type, m)\n this.$message({ type: 'warning', message: '尚未支持此组件的UI编辑' })\n return\n }\n this.ctrlOptions = ctrlOptions\n this.currentCtrlType = type\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n const { filter, headers, rowButton, normalButton, batchButton } = this.currentBuilderSchema\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: {\n filter,\n headers,\n rowButton,\n normalButton,\n batchButton\n }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","<template>\n <VIcon\n name=\"ra-set\"\n @click=\"show = !show\"\n />\n <el-drawer\n v-model=\"show\"\n title=\"页面设计\"\n class=\"my-drawer\"\n :direction=\"direction\"\n size=\"90%\"\n destroy-on-close\n append-to-body\n >\n <form-builder\n v-if=\"pageSchema.formItems !== undefined\"\n :schema=\"pageSchema\"\n />\n <table-builder\n v-if=\"pageSchema.headers !== undefined\"\n :schema=\"pageSchema\"\n />\n </el-drawer>\n</template>\n<script>\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\n ref=\"header\"\n class=\"navbar\"\n :style=\"{background: setting.envColor[user.env]}\"\n >\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 >\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 return '/'\n }\n }\n }\n}\n</script>\n","<template>\n <el-select\n v-model=\"selected\"\n filterable\n placeholder=\"搜索菜单...\"\n class=\"search-menu\"\n @change=\"onselected\"\n >\n <template\n v-for=\"group in filterRoutes\"\n :key=\"group.path\"\n >\n <template v-if=\"group.children !== undefined\">\n <el-option-group\n v-if=\"group.meta.menuType !== 0\"\n :key=\"group.path + '-'\"\n :label=\"group.meta.title\"\n >\n <template\n v-for=\"(item, index) in group.children\"\n :key=\"item.path\"\n >\n <el-option\n v-if=\"group.meta.menuType !== 0\"\n :label=\"(index === (group.children.length - 1) ? '└─' : '├─' )+ item.meta.title\"\n :value=\"getJumpPath(item)\"\n />\n </template>\n </el-option-group>\n </template>\n <template v-else>\n <el-option\n :label=\"'' + group.meta.title\"\n :value=\"getJumpPath(group)\"\n />\n </template>\n </template>\n </el-select>\n</template>\n<script>\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 getJumpPath: function(route) {\n let _route = route\n if (route.meta.menuType === 1 && route.children && route.children.length > 0) {\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n _route = route.children[i]\n break\n }\n }\n }\n return this.$router.resolve(_route.redirect ? _route.redirect : _route).fullPath\n },\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 = () => 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 key: string\n}\n\nexport type ResourceIds = Array<Array<string>>\n\nexport interface UserInfo {\n id: number,\n name: string,\n token: string,\n avatar: string,\n nickname: string,\n role_ids: Array<string>,\n resource: ResourceIds\n env: string,\n website?: any\n}\n\nexport type Resource = Record<string, boolean | Record<string, boolean>>\n\n// eslint-disable-next-line no-unused-vars\nexport enum PageType { custom, list, form, customSchema, localComp, tree, report, entity }\n// eslint-disable-next-line no-unused-vars\nexport enum MenuType { hidden = 0, dir = 1, menu = 2, page = 3}\n\nexport interface PageInfo {\n module_id: number,\n module_name?: string\n id: number,\n pid: number,\n name: string,\n path: string,\n icon?: string,\n view?: string,\n is_show: number,\n type: number,\n page_type: PageType,\n 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 return cloneDeep([\n {\n label: '',\n routes: localRoutes\n },\n ...this.remoteRouter\n ])\n },\n activeMenu() {\n const m = this.$route.matched\n\n for (let i = m.length - 1; i >= 0; i--) {\n const tmp = m[i]\n if (tmp.meta.menuType === MenuType.menu) {\n this.showActive()\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 this.showActive()\n },\n methods: {\n showActive() {\n showEleByClassName('is-active', 200)\n },\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 type { LoginTicket } from '@/types'\n\nexport type SsoType = 'jump' | 'qrcode'\n\nexport interface Sso {\n flag(): LoginTicket | undefined,\n\n type: SsoType,\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void,\n\n showQrCode(): void\n\n qrCodeUrl?: string,\n appid?: string,\n style?: string,\n redirectUri?: string,\n elId?: string\n}\n\nexport class BaseSso implements Sso {\n type: SsoType = 'qrcode'\n\n flag(): LoginTicket | undefined {\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void {\n next(path)\n }\n\n showQrCode(): void {\n }\n}\n","import { NavigationGuardNext } from 'vue-router'\nimport { BaseSso, SsoType } from './index'\nimport { getQueryParam } from '@okiss/utils'\nimport type { LoginTicket } from '@/types'\n\nexport class Github extends BaseSso {\n type: SsoType = 'jump'\n\n client_id: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n this.client_id = options.client_id\n }\n\n flag(): LoginTicket | undefined {\n const code = getQueryParam('code')\n if (code) {\n return {\n ticket: code,\n key: 'github'\n }\n }\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string) {\n const redirect = encodeURIComponent(location.href)\n location.replace(`https://github.com/login/oauth/authorize?client_id=${this.client_id}&redirect_uri${redirect}`)\n }\n}\n","import { getQueryParam, obj2Param, strVarReplace, createIFrame } from '@okiss/utils'\nimport { BaseSso, SsoType } from './index'\nimport type { LoginTicket } from '@/types'\n\nexport class DingTalk extends BaseSso {\n type: SsoType = 'qrcode'\n qrCodeUrl = 'https://login.dingtalk.com/login/qrcode.htm?goto={goto}&style={style}'\n reloadUrl = 'https://oapi.dingtalk.com/connect/oauth2/sns_authorize?response_type=code&scope=snsapi_login&state=&appid={appid}&redirect_uri={redirect_uri}'\n\n elId: string = ''\n appid: string = ''\n iframe: HTMLIFrameElement = new HTMLIFrameElement()\n redirectUri: string = ''\n style: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n }\n\n flag(): LoginTicket | undefined {\n const code = getQueryParam('code')\n if (code) {\n return {\n ticket: code,\n key: 'dingtalk'\n }\n }\n return undefined\n }\n\n showQrCode(): void {\n const getReloadUrl = (extra?: Record<string, any>) => {\n const data = {\n appid: this.appid,\n redirect_uri: encodeURIComponent(this.redirectUri)\n }\n return strVarReplace(this.reloadUrl, data) + '&' + obj2Param(extra || {})\n }\n const getQrCodeUrl = () => {\n const data = {\n goto: encodeURIComponent(getReloadUrl()),\n style: encodeURIComponent(this.style)\n }\n return strVarReplace(this.qrCodeUrl, data)\n }\n const onScanSuccess = (event: any) => {\n const { origin, data } = event\n if (origin === 'https://login.dingtalk.com') {\n window.location.href = getReloadUrl({ loginTmpCode: data })\n }\n }\n\n this.iframe.src = getQrCodeUrl()\n createIFrame({ elId: this.elId, attrs: this.iframe })\n if (typeof window.addEventListener !== 'undefined') {\n window.addEventListener(\n 'message',\n event => onScanSuccess(event),\n false\n )\n // @ts-ignore\n } else if (typeof window.attachEvent !== 'undefined') {\n // @ts-ignore\n window.attachEvent('onmessage', event => this.onScanSuccess(event))\n }\n }\n}\n","import { BaseSso } from './base'\nimport type { SsoType, Sso } from './base'\nimport { Github } from './github'\nimport { DingTalk } from './dingtalk'\nimport store from '../../store'\nimport { newSso } from '../../types'\nimport { merge } from 'lodash'\n\nexport { BaseSso, SsoType, Sso, Github, DingTalk }\n\nconst defaultSso: Record<string, newSso> = {}\n\nexport function allSso(): Record<string, newSso> {\n return merge(store.state.settings.sso || {}, defaultSso)\n}\n\nexport default function(): Sso | undefined {\n const sso = allSso()\n const key = store.state.settings.activeSsoKey || ''\n console.log(sso, key)\n const active = sso[key]\n if (active !== undefined) {\n return active()\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 class=\"captcha\">\n <input\n v-model=\"data.captcha\"\n type=\"text\"\n placeholder=\"验证码\"\n class=\"input-captcha\"\n >\n <img\n class=\"captcha-img\"\n :src=\"baseAPI + '/user/captcha?ts=' + ts\"\n title=\"点击刷新\"\n @click=\"onCaptchaClick\"\n >\n </div>\n <div\n :class=\"{input: true, button: true, 'no-ready': !onReady}\"\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// @ts-ignore\nimport { MD5 } from 'crypto-js'\nimport { computed } from 'vue'\n\nconst router = useRouter()\nconst route = useRoute()\nconst tips = computed(() => store.state.settings.loginTips)\nconst baseAPI = computed(() => {\n console.log(store.state.app)\n return store.state.app.baseURL\n})\n\nconst allsso = () => allSso()\n\nconst ts = ref(0)\nconst onCaptchaClick = () => ts.value++\nconst onReady = computed(() => {\n return data.value.username.length > 0 && data.value.password.length >= 4 && data.value.captcha.length === 4\n})\n\nconst data = ref({\n username: '',\n password: '',\n captcha: '',\n sing: ''\n})\n\nconst login = () => {\n if (data.value.username === '' || data.value.password === '' || data.value.captcha === '') {\n ElMessage.error('用户名, 密码, 验证码是必须的')\n return\n }\n data.value.sing = MD5(`${data.value.username}${data.value.password}${data.value.captcha}`).toString()\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\n#login {\n width: 100%;\n height: 100%;\n background: $bg;\n text-align: center;\n display: flex;\n flex-direction: column;\n padding-top: 150px;\n\n #title {\n color: #fff;\n }\n\n #form {\n width: 300px;\n margin: 10px auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n .input {\n width: 300px;\n height: 40px;\n margin: 10px auto;\n padding: 10px;\n }\n\n .captcha {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n padding: 10px 0;\n\n .input-captcha {\n width: 60%;\n height: 40px;\n margin-right: 10px;\n }\n\n .captcha-img {\n height: 40px;\n width: auto;\n }\n }\n\n .button {\n width: 300px;\n height: 40px;\n border: 1px solid #fff;\n background: #fff;\n }\n\n .no-ready {\n background: #909399 !important;\n border: 1px solid #909399 !important;\n color: #DCDFE6;\n }\n }\n\n .tips,\n .sso {\n padding: 10px 0;\n display: flex;\n justify-content: flex-start;\n color: gray;\n }\n}\n</style>\n","<template>\n <div class=\"not-found\">\n <svg\n width=\"380px\"\n height=\"500px\"\n viewBox=\"0 0 837 1045\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\"\n >\n <g\n id=\"Page-1\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n sketch:type=\"MSPage\"\n >\n <path\n id=\"Polygon-1\"\n d=\"M353,9 L626.664028,170 L626.664028,487 L353,642 L79.3359724,487 L79.3359724,170 L353,9 Z\"\n stroke=\"#007FB2\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-2\"\n d=\"M78.5,529 L147,569.186414 L147,648.311216 L78.5,687 L10,648.311216 L10,569.186414 L78.5,529 Z\"\n stroke=\"#EF4A5B\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-3\"\n d=\"M773,186 L827,217.538705 L827,279.636651 L773,310 L719,279.636651 L719,217.538705 L773,186 Z\"\n stroke=\"#795D9C\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-4\"\n d=\"M639,529 L773,607.846761 L773,763.091627 L639,839 L505,763.091627 L505,607.846761 L639,529 Z\"\n stroke=\"#F2773F\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-5\"\n d=\"M281,801 L383,861.025276 L383,979.21169 L281,1037 L179,979.21169 L179,861.025276 L281,801 Z\"\n stroke=\"#36B455\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n </g>\n </svg>\n <div class=\"message-box\">\n <h1>404</h1>\n <p>Page not found</p>\n <div class=\"buttons-con\">\n <div class=\"action-link-wrap\">\n <!--<a onclick=\"history.back(-2)\" class=\"link-button link-back-button\">Go Back</a>-->\n <a\n href=\"\"\n class=\"link-button\"\n >Go to Home Page</a>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'NotFoundPage'\n}\n</script>\n\n<style scoped>\n.not-found {\n background-color: #2F3242;\n width: 100%;\n height: 100%;\n}\n\nsvg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -400px;\n}\n\n.message-box {\n height: 200px;\n width: 380px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: 50px;\n color: #FFF;\n font-family: Roboto;\n font-weight: 300;\n}\n\n.message-box h1 {\n font-size: 60px;\n line-height: 46px;\n margin-bottom: 40px;\n}\n\n.buttons-con .action-link-wrap {\n margin-top: 40px;\n}\n\n.buttons-con .action-link-wrap a {\n background: #68c950;\n padding: 8px 25px;\n border-radius: 4px;\n color: #FFF;\n font-weight: bold;\n font-size: 14px;\n transition: all 0.3s linear;\n cursor: pointer;\n text-decoration: none;\n margin-right: 10px\n}\n\n.buttons-con .action-link-wrap a:hover {\n background: #5A5C6C;\n color: #fff;\n}\n\n#Polygon-1, #Polygon-2, #Polygon-3, #Polygon-4, #Polygon-4, #Polygon-5 {\n animation: float 1s infinite ease-in-out alternate;\n}\n\n#Polygon-2 {\n animation-delay: .2s;\n}\n\n#Polygon-3 {\n animation-delay: .4s;\n}\n\n#Polygon-4 {\n animation-delay: .6s;\n}\n\n#Polygon-5 {\n animation-delay: .8s;\n}\n\n@keyframes float {\n 100% {\n transform: translateY(20px);\n }\n}\n\n@media (max-width: 450px) {\n svg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -190px;\n }\n\n .message-box {\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: -190px;\n text-align: center;\n }\n}\n</style>\n","import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'\nimport Dashboard from '../scaffold/dashboard.vue'\nimport Layout from '../scaffold/layout/index.vue'\nimport Login from '../scaffold/login.vue'\nimport NotFoundPage from '../scaffold/404.vue'\n\nconst routes: RouteRecordRaw[] = [\n {\n path: '/',\n component: Layout,\n redirect: '/dashboard',\n name: 'Root',\n meta: {\n menuType: 1\n },\n children: [\n {\n path: 'dashboard',\n name: 'Dashboard',\n component: Dashboard,\n meta: { title: 'Dashboard', icon: 'el-icon-help', menuType: 2, keepAlive: true }\n }\n ]\n },\n {\n path: '/login',\n component: Login,\n meta: { title: '用户登录', menuType: 0 },\n hidden: true\n },\n {\n path: '/404',\n component: NotFoundPage,\n meta: { menuType: 0 },\n hidden: true\n }\n]\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes\n})\n\nexport default router\n","import { Router } from 'vue-router'\nimport NProgress from 'nprogress'\nimport 'nprogress/nprogress.css'\nimport 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'\nimport { isObject } from 'lodash'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, form, next) => {\n if (getWhiteRoutes().indexOf(to.path) !== -1) {\n next()\n return\n }\n\n const token = getToken()\n if (token) {\n if (to.query?.redirect) {\n next(to.query?.redirect as string)\n } else {\n next()\n }\n return\n }\n const redirect = to.query.redirect || to.path\n\n const s = sso()\n if (!s) {\n next(`/login?redirect=${redirect}`)\n return\n }\n\n const flag = s.flag()\n if (flag && await store.dispatch('user/login', isObject(flag) ? flag : { ticket: flag })) {\n next()\n return\n }\n s.jumpToLoginPage(next, `/login?redirect=${redirect}`)\n })\n}\n","<template>\n <div class=\"loading preloader\">\n <div class=\"preloader-inner\" />\n </div>\n</template>\n<style>\n.loading {\n width: 100%;\n min-height: calc(100vh - 50px);\n text-align: center;\n line-height: calc(100vh - 50px);\n}\n</style>\n","<template>\n <div>\n <el-alert\n v-if=\"hasNotice\"\n v-bind=\"noticeProps\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VNotice',\n props: {\n dataApi: {\n type: String,\n default: ''\n },\n notice: {\n type: Object,\n default: () => {}\n }\n },\n data() {\n return {\n noticeProps: {},\n hasNotice: false\n }\n },\n mounted() {\n console.log('dataApi', !!this.$props.dataApi)\n if (this.$props.dataApi) {\n this.$http.get(this.$props.dataApi).then(({ data }) => {\n this.noticeProps = data\n this.hasNotice = !!data\n })\n return\n } else {\n this.hasNotice = Object.keys(this.$props.notice).length > 0\n this.noticeProps = this.$props.notice\n }\n }\n}\n</script>\n","<template>\n <el-alert\n v-if=\"owners.length > 0\"\n :title=\"`该页面功能对应开发: [ ${owners.join(', ')} ] 有问题可直接企微反馈`\"\n type=\"info\"\n style=\"margin: 0 0 20px 0\"\n :closable=\"false\"\n />\n <template v-if=\"env === 'prod' && serviceOffLine\">\n <div\n class=\"offline-notice\"\n v-html=\"serviceOffLine === true ? setting.serviceOffLineNotice : serviceOffLine\"\n />\n </template>\n <template v-else>\n <VNotice\n v-if=\"haveNotice\"\n :notice=\"notice\"\n style=\"margin: 0 0 20px 0\"\n :data-api=\"noticeApi\"\n />\n <VLoading v-if=\"loading\" />\n <template v-else>\n <slot v-bind=\"schema\" />\n </template>\n </template>\n\n</template>\n<script lang=\"ts\">\nimport VLoading from './VLoading.vue'\nimport { isObject, isString, isArray } from '@okiss/utils'\nimport store from '../store'\nimport VNotice from './notice/VNotice.vue'\n\nexport default defineComponent({\n components: { VLoading, VNotice },\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 noticeApi: '',\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 (isObject(data)) {\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 this.noticeApi = data.notice.noticeApi\n }\n delete data['notice']\n }\n this.owners = data.ownerNames || []\n this.serviceOffLine = data.serviceOffLine || false\n\n }\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 { h, getCurrentInstance, Component } from 'vue'\nimport { ElRow, ElCol, ElCard } from 'element-plus'\nimport { merge } from 'lodash'\nimport { VForm, VTable } from '@okiss/vbtf'\nimport { isObject, isArray } from '@okiss/utils'\n\nimport './index.scss'\n\ntype CompProps = Record<string, any>\n\nconst test = (props: CompProps) => <div>{props.test}</div>\n\nconst components: Record<string, any> = {\n 'card': ElCard,\n 'form': VForm,\n 'table': VTable,\n 'test': test,\n 'row': ElRow,\n 'col': ElCol\n}\n\nexport function regComponents(comps: Record<string, any>) {\n Object.keys(comps).forEach(k => {\n components[k] = comps[k]\n })\n}\n\nconst defaultSchema: Record<string, Node> = {\n 'card': {\n type: 'card',\n props: {\n class: 'render-card',\n shadow: 'never'\n }\n },\n 'form': {\n type: 'form',\n props: {\n afterReset: ''\n }\n },\n 'table': {\n type: 'table',\n props: {\n syncUrl: false\n }\n }\n}\n\nexport interface Node {\n type: string,\n props?: Record<string, string | number | boolean | any>\n children?: Node[] | Node\n span?: number\n}\n\nexport interface Props {\n schema: Node[]\n}\n\nfunction pathNodeParse(node: Node): Node[] {\n const _node = Object.assign({}, node)\n const part = _node.type.split('.').reverse()\n const span = _node.span || 24\n delete _node.span\n let tmp = { ..._node, type: part[0] }\n for (let i = 1; i < part.length; i++) {\n const item = part[i]\n tmp = { type: item, children: [tmp] }\n }\n tmp.span = span\n\n return nodesParse([tmp])\n}\n\nfunction nodesParse(_nodes: Node[]): Node[] {\n const root: Node = { type: 'row', props: { gutter: 20, class: 'render-row' }, children: [] }\n _nodes.forEach(_node => {\n let node = Object.assign({}, _node)\n if (isObject(node.props?.style)) {\n let style = ''\n Object.keys(node.props?.style).forEach(k => {\n style += k + ':' + node.props?.style[k] + ';'\n })\n node.props!.style = style\n }\n const colProps = { span: node.span ?? 24, class: 'render-col' }\n delete node.span\n if (node.type.indexOf('.') > 0) {\n (root.children! as Node[]).push({\n type: 'col',\n props: colProps,\n children: pathNodeParse(node)\n })\n return\n }\n node = merge({ props: {}}, defaultSchema[node.type] || {}, node)\n const children = transChildren(node.children)\n if (children.length) {\n node.children = nodesParse(children)\n }\n (root.children! as Node[]).push({\n type: 'col',\n props: colProps,\n children: [\n node\n ]\n })\n })\n\n return [root]\n}\n\nfunction transChildren(children : Node[] | Node | undefined) : Node[] {\n const _children : Node[] = isArray(children) ? children! as Node[] : (isObject(children) ? [children! as Node] : [])\n return _children\n}\n\nlet globalComps : Record<string, Component> = {}\n\nconst createVNode = (node: Node) => {\n const comp = components[node.type] || globalComps[node.type] || node.type\n return h(comp, node.props, { default: () => transChildren(node.children).map(item => createVNode(item)) })\n}\n\nexport const render = (props: Props) => {\n if (Object.keys(globalComps).length === 0) {\n globalComps = getCurrentInstance()!.appContext.components\n }\n const nodes: Node[] = nodesParse(Object.values(props.schema))\n return nodes.map(item => createVNode(item))\n}\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <render :schema=\"schema\" />\n </PageLoad>\n</template>\n<script setup name=\"Custom\">\nimport PageLoad from '../components/PageLoad.vue'\nimport { render } from '../render'\nimport { toRaw } from 'vue'\nconst schema = ref([])\nconst schemaHandler = (_schema, project) => {\n schema.value = toRaw(_schema)\n return _schema\n}\n</script>\n","import type { RouteRecordRaw } from 'vue-router'\nimport { MenuType, OmsModule, PageInfo, PageType, RemoteModule } from '../types'\nimport { Component } from 'vue'\nimport { Container, Form, Report, Table, Tree, Custom } from '../scaffold'\n\nlet bu: Record<string, any> = {}\nexport function regViews(_bu: Record<string, any>) {\n bu = _bu\n}\n\nconst getComponent = (item: PageInfo): Component => {\n const loadCustom = (path: string): any => {\n const _path = './views/' + path + '.vue'\n if (bu && bu[_path] && bu[_path].default) {\n return bu[_path].default\n }\n console.error(`自定义组件不存在 ${item.name} ${item.view}`)\n return Container\n }\n if (item.path === '#') {\n return Container\n }\n switch (item.page_type) {\n case PageType.list:\n return Table\n case PageType.form:\n return Form\n case PageType.custom:\n case PageType.localComp:\n return loadCustom(item.view || '')\n case PageType.tree:\n return Tree\n case PageType.report:\n return Report\n case PageType.customSchema:\n return Custom\n }\n return Container\n}\n\nfunction getPath(item: PageInfo) {\n let path = item.path\n if (item.type === MenuType.menu && item.page_type === PageType.entity) {\n path = '#'\n }\n // :id 默认转换为数字型匹配模式\n if (path.indexOf(':id') > -1 && path.indexOf(':id') + 3 === path.length) {\n path = path.replace(':id', ':id(\\\\d+)')\n }\n return path === '#'\n ? '/' + item.id + '_DIR_' + item.name\n : path[0] !== '/'\n ? '/' + path\n : path\n}\n\nfunction getName(item: PageInfo): string {\n return (item.path + item.name).split('/').filter(v => v).join('_')\n}\n\nconst transRoute = (item: PageInfo): RouteRecordRaw => {\n const isShow = item.type !== MenuType.page\n const route: RouteRecordRaw = {\n path: getPath(item),\n name: item.id + '_' + getName(item) + '_' + item.path.replaceAll('/', '_'),\n component: getComponent(item),\n meta: {\n id: item.id,\n pageId: item.id,\n title: item.name,\n icon: item.icon,\n hidden: !isShow,\n path: item.path,\n menuType: item.type,\n keepAlive: false\n },\n children: item.children ? item.children.map(each => transRoute(each)) : []\n }\n if (item.page_type === PageType.entity) {\n const createList = item.path + '/list'\n const createForm = item.path + '/form'\n const createEdit = item.path + '/:id'\n const children : Array<RouteRecordRaw> = [{\n path: createList,\n name: item.name + '列表' + item.id,\n component: Table,\n meta: {\n id: item.id + 99999,\n title: '列表',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }, {\n path: createForm,\n name: item.name + '新建' + item.id,\n component: Form,\n meta: {\n id: item.id + 99999 + 1,\n title: '新建',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }, {\n path: createEdit,\n name: item.name + '编辑' + item.id,\n component: Form,\n meta: {\n id: item.id + 99999 + 2,\n title: '编辑',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id,\n path: item.path\n }\n }]\n route.children = [...children, ...route.children as RouteRecordRaw[]]\n }\n if (route.children && route.children.length > 0) {\n let allChildHidden = true\n route.children.forEach(each => {\n if (each.meta && !each.meta.hidden) {\n allChildHidden = false\n }\n })\n if (route.meta) {\n route.meta.menuType = isShow ? MenuType.dir : MenuType.hidden\n }\n if (allChildHidden) {\n if (route.meta) {\n route.meta.menuType = MenuType.menu\n }\n let redirect = '/'\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n redirect = route.children[i].path\n break\n }\n }\n route.redirect = redirect\n route.path = '/' + item.id + '_DIR' + route.redirect.replaceAll('/', '_').toUpperCase()\n }\n }\n\n return route\n}\n\nexport const transRemoteModules = (data: RemoteModule[]): OmsModule[] => {\n const vueRouteModule: OmsModule[] = []\n data.forEach(item => {\n const m: OmsModule = {\n id: item.id,\n label: item.label,\n routes: []\n }\n item.routes.forEach(each => {\n m.routes.push(transRoute(each))\n })\n vueRouteModule.push(m)\n })\n\n return vueRouteModule\n}\n","import { 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 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'\nimport router from '../../router'\n\nfunction getToken() {\n return store.state.user.token\n}\n\nfunction errMsg(message: string) {\n Message({\n message: message,\n type: 'error',\n duration: 5 * 1000,\n grouping: true\n })\n}\n\nconst baseRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n config.headers = config.headers || {}\n const token = getToken()\n if (token) {\n config.headers['X-Token'] = token\n }\n if (router.currentRoute.value.meta?.path) {\n config.headers['X-Path'] = router.currentRoute.value.meta.path\n }\n return config\n }\n}\n\nconst baseResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled(response) {\n const notHoldApiErr = response.config?.notHoldApiErr !== undefined && response.config?.notHoldApiErr === true\n if (!notHoldApiErr && response.data.code !== 0) {\n const message = response.data.message || `接口请求错误 ${response.config.method}::${response.config.url?.split('?')[0]}`\n if (response.data.code === 401) {\n 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 errMsg(message)\n }\n return Promise.reject(message)\n }\n\n let _message_box = response.data?.data?._message_box\n if (_message_box !== undefined) {\n if (isString(_message_box)) {\n _message_box = {\n message: response.data?.data?._message_box\n }\n }\n MessageBox({\n title: '提示',\n type: 'success',\n grouping: true,\n ..._message_box\n })\n }\n\n return response.data\n },\n onRejected(error: AxiosError) {\n if (axios.isCancel(error)) {\n return Promise.reject('')\n }\n errMsg(`${error.message} ${error.config.method}::${error.config.url?.split('?')[0]}`)\n return Promise.reject(error)\n }\n}\n\nexport const interceptors: Interceptor[] = [\n {\n request: cancelRequestInterceptor,\n response: cancelResponseInterceptor\n },\n {\n request: baseRequestInterceptor,\n response: baseResponseInterceptor\n }\n]\n\nexport function addInterceptor(newInterceptor: Interceptor) {\n interceptors.push(newInterceptor)\n}\n","import axios, { AxiosRequestConfig } from 'axios'\nimport { defaultOptions } from '../../default'\nimport { merge } from 'lodash'\nimport { interceptors } from './interceptors'\n\nexport function instance(conf: AxiosRequestConfig = {}) {\n const defaultConf: AxiosRequestConfig = defaultOptions.axios || {}\n const c = merge(defaultConf, conf || {})\n const service = axios.create({\n ...c\n // adapter: (c) => cacheAdapter(c, defaultAxios)\n })\n\n interceptors.forEach(item => {\n service.interceptors.request.use(item.request.onFulfilled, item.request.onRejected)\n service.interceptors.response.use(item.response.onFulfilled, item.response.onRejected)\n })\n\n return service\n}\n\nexport default instance()\n","import type { ObjectDirective } from 'vue'\n\nconst outClick: ObjectDirective = {\n beforeMount(el, binding) {\n el.clickOutsideEvent = function(event: Event) {\n if (!(el === event.target || el.contains(event.target))) {\n binding.value(event, el)\n }\n }\n document.body.addEventListener('click', el.clickOutsideEvent)\n },\n unmounted(el) {\n document.body.removeEventListener('click', el.clickOutsideEvent)\n }\n}\n\nexport default outClick\n","import mitt from 'mitt'\nimport type { App } from 'vue'\n\nconst eventBus = mitt()\n\nconst defaultOptions = {\n global: true,\n inject: true,\n globalPropertyName: '$eventBus',\n injectName: '$eventBus'\n}\n\n// eventBus.install = install\nexport default eventBus\nexport const bus = eventBus\n\nexport function install(app: App, options = {}) {\n const opt = {\n ...defaultOptions,\n ...options\n }\n if (opt.global) {\n app.config.globalProperties[opt.globalPropertyName] = eventBus\n }\n if (opt.inject) {\n app.provide(opt.injectName, eventBus)\n }\n return eventBus\n}\n","import bus from '../plugins/eventBus'\nimport type { ObjectDirective } from 'vue'\n\nconst rightClient: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null) {\n return\n }\n if (binding.value) {\n // el.style.border = '1px solid red'\n }\n el.oncontextmenu = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n e.cancelBubble = true\n binding.value && bus.emit('right-click', { event: e, data: binding.value })\n }\n }\n}\n\nexport default rightClient\n","import type { ObjectDirective } from 'vue'\n\nconst resize: ObjectDirective = {\n mounted(el) {\n // console.log(8888, el.style)\n }\n}\n\nexport default resize\n","import type { ObjectDirective } from 'vue'\nimport bus from '../plugins/eventBus'\n\nfunction getElementPosition(element: HTMLElement | any, key: 'Top' | 'Left' | 'Right' | 'Botton') {\n let result = element[`offset${key}`]\n let current = element.offsetParent\n\n while (current) {\n result += current[`offset${key}`]\n current = current.offsetParent\n }\n\n return result\n}\n\nconst devtool: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null || !binding.value.dev) {\n return\n }\n let target : HTMLElement = el\n if (binding.value.parent) {\n for (let i = 0; i < binding.value.parent; i++) {\n if (target.parentElement) {\n target = target.parentElement\n }\n }\n }\n\n target.classList.add('devtool-hover')\n\n // button wrapper\n const wrapper = document.createElement('i')\n wrapper.className = 'devtool-item-wrapper'\n\n target.onmouseover = () => {\n wrapper.style.height = (target.offsetHeight + 30) + 'px'\n wrapper.style.width = (target.offsetWidth + 30) + 'px'\n wrapper.style.top = (getElementPosition(target, 'Top') - 15) + 'px'\n wrapper.style.left = (getElementPosition(target, 'Left') - 15) + 'px'\n }\n\n // create edit button\n const editBtn = document.createElement('span')\n editBtn.className = 'dev-action-edit'\n editBtn.title = '编辑'\n const editIcon = document.createElement('i')\n editIcon.className = 'iconfont ra-editor1'\n editBtn.appendChild(editIcon)\n editBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'edit', devId: binding.value.devId }})\n }\n wrapper.appendChild(editBtn)\n\n // create delete button\n const delBtn = document.createElement('span')\n delBtn.className = 'dev-action-del'\n delBtn.title = '删除'\n const delIcon = document.createElement('i')\n delIcon.className = 'iconfont ra-cut'\n delBtn.appendChild(delIcon)\n delBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'del', devId: binding.value.devId }})\n }\n wrapper.appendChild(delBtn)\n\n // append wrapper as first child\n target.insertBefore(wrapper, target.firstChild)\n\n return\n }\n}\n\nexport default devtool\n","import type { App, Component, Directive } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport type { OmsOptions, OmsPlugin, UsePlugin } from './types'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport type { Module } from 'vuex'\n\nimport AppComp from './App.vue'\nimport { startMock, regMockApis } from './mock'\nimport { instance } from './utils/request'\nimport { isObject } from '@okiss/utils'\nimport { VIcon, setUploadHeaderHandle } from '@okiss/vbtf'\nimport { 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 store.dispatch('app/setBaseAPI', options?.axios.baseURL).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","_a","addNewStyle","addNewStyleTag","_b","provide","_d","_c","MockHttpMethod","form","buttons","table","_","listMock","layoutForm","layoutSection","example","userApis","options","apis","user","defaultAxios","defaultSettings","locale","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","website","_e","_f","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","defaultMap","setCmp","name","cmp","getCmp","_sfc_main$u","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","_route","i","to","group","PageType","PageType2","MenuType","SidebarItem","Logo","SearchMenu","localRoutes","include","onBeforeRouteLeave","WIDTH","useStore","sidebar","computed","fixedHeader","classObj","isMobile","useEventListener","resizeHandler","handleClickOutside","ismobile","BaseSso","__publicField","next","Github","getQueryParam","redirect","DingTalk","getReloadUrl","extra","strVarReplace","obj2Param","getQrCodeUrl","onScanSuccess","origin","createIFrame","defaultSso","allSso","sso","active","router","useRouter","tips","baseAPI","ts","onCaptchaClick","onReady","login","MD5","res","Layout","Dashboard","Login","NotFoundPage","createRouter","createWebHashHistory","NProgress","nprogress","from","isLodeRemoteRoutes","getWhiteRoutes","permission","flag","isObject","_sfc_render","_component_el_alert","_sfc_main$a","VLoading","VNotice","project","conf","isString","_createCommentVNode","_component_VNotice","_component_VLoading","_renderSlot","schemaHandler","defaultSort","allowedProps","VTable","_sfc_main$7","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","_keys","seriesData","_sfc_main$3","VChart","Markdown","NumberPanel","props","comptype","isArray","onMounted","formData","formOptions","_filter","_dataPart","schemaapi","onsubmit","data2","test","components","ElCard","ElRow","ElCol","defaultSchema","class","shadow","afterReset","syncUrl","pathNodeParse","_node","Object","assign","part","split","reverse","length","children","nodesParse","_nodes","root","gutter","forEach","style","colProps","indexOf","push","transChildren","globalComps","createVNode","comp","h","default","map","render","getCurrentInstance","appContext","values","_schema","toRaw","bu","regViews","_bu","getComponent","loadCustom","_path","Container","Table","Form","Tree","Report","Custom","getPath","getName","transRoute","isShow","createList","createForm","createEdit","allChildHidden","transRemoteModules","vueRouteModule","remoteRoutes","remoteRoute","routeModules","setPageTitle","tokens","len","failure","guard","errMsg","message","baseRequestInterceptor","baseResponseInterceptor","action","_message_box","_g","interceptors","instance","defaultConf","service","http$1","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","regRoutes","regUse","use","regDirective","directives2","regStoreModule","modules","keepModuleNames","plugin","VIcon","directives","ElementPlus"],"mappings":"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"}
|