@okiss/oms 0.0.1
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/README.md +3 -0
- package/dist/index.es.js +6156 -0
- package/dist/index.es.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/types/auto-imports.d.ts +53 -0
- package/dist/types/components.d.ts +50 -0
- package/dist/types/src/App.vue.d.ts +125 -0
- package/dist/types/src/admin.d.ts +8 -0
- package/dist/types/src/components/PageLoad.vue.d.ts +14 -0
- package/dist/types/src/components/VIcon.d.ts +13 -0
- package/dist/types/src/components/VTree.vue.d.ts +100 -0
- package/dist/types/src/components/chart/index.vue.d.ts +17 -0
- package/dist/types/src/components/report/NumberPanel.vue.d.ts +9 -0
- package/dist/types/src/components/report/option.d.ts +1 -0
- package/dist/types/src/components/report/part.vue.d.ts +168 -0
- package/dist/types/src/default.d.ts +4 -0
- package/dist/types/src/directive/devtool.d.ts +3 -0
- package/dist/types/src/directive/index.d.ts +4 -0
- package/dist/types/src/directive/outClick.d.ts +3 -0
- package/dist/types/src/directive/resize.d.ts +3 -0
- package/dist/types/src/directive/rightClick.d.ts +3 -0
- package/dist/types/src/index.d.ts +13 -0
- package/dist/types/src/init.d.ts +3 -0
- package/dist/types/src/mock/apis/index.d.ts +3 -0
- package/dist/types/src/mock/apis/user.d.ts +3 -0
- package/dist/types/src/mock/data/example.d.ts +897 -0
- package/dist/types/src/mock/data/menu.d.ts +104 -0
- package/dist/types/src/mock/data/role.d.ts +68 -0
- package/dist/types/src/mock/index.d.ts +3 -0
- package/dist/types/src/mock/types.d.ts +21 -0
- package/dist/types/src/plugins/element-plus.d.ts +6 -0
- package/dist/types/src/plugins/eventBus.d.ts +6 -0
- package/dist/types/src/router/guard/func.d.ts +3 -0
- package/dist/types/src/router/guard/index.d.ts +2 -0
- package/dist/types/src/router/guard/nprogress.d.ts +2 -0
- package/dist/types/src/router/guard/permission.d.ts +2 -0
- package/dist/types/src/router/guard/remote-routes.d.ts +2 -0
- package/dist/types/src/router/guard/set-page-title.d.ts +2 -0
- package/dist/types/src/router/index.d.ts +2 -0
- package/dist/types/src/router/remote.d.ts +3 -0
- package/dist/types/src/router/router.d.ts +3 -0
- package/dist/types/src/router/vue-router.d.ts +16 -0
- package/dist/types/src/scaffold/404.vue.d.ts +4 -0
- package/dist/types/src/scaffold/container.vue.d.ts +17 -0
- package/dist/types/src/scaffold/dashboard.vue.d.ts +3 -0
- package/dist/types/src/scaffold/devtool/formBuilder/index.vue.d.ts +280 -0
- package/dist/types/src/scaffold/devtool/tableBuilder/index.vue.d.ts +1115 -0
- package/dist/types/src/scaffold/form.vue.d.ts +59 -0
- package/dist/types/src/scaffold/index.d.ts +5 -0
- package/dist/types/src/scaffold/layout/components/AppMain.vue.d.ts +24 -0
- package/dist/types/src/scaffold/layout/components/Breadcrumb/index.vue.d.ts +25 -0
- package/dist/types/src/scaffold/layout/components/Hamburger/index.vue.d.ts +16 -0
- package/dist/types/src/scaffold/layout/components/Navbar.vue.d.ts +49 -0
- package/dist/types/src/scaffold/layout/components/PageEditor.vue.d.ts +23 -0
- package/dist/types/src/scaffold/layout/components/Sidebar/FixiOSBug.d.ts +10 -0
- package/dist/types/src/scaffold/layout/components/Sidebar/Link.vue.d.ts +21 -0
- package/dist/types/src/scaffold/layout/components/Sidebar/Logo.vue.d.ts +16 -0
- package/dist/types/src/scaffold/layout/components/Sidebar/MenuContent.vue.d.ts +21 -0
- package/dist/types/src/scaffold/layout/components/Sidebar/SidebarItem.vue.d.ts +41 -0
- package/dist/types/src/scaffold/layout/components/Sidebar/index.vue.d.ts +3 -0
- package/dist/types/src/scaffold/layout/components/index.d.ts +3 -0
- package/dist/types/src/scaffold/layout/index.vue.d.ts +1965 -0
- package/dist/types/src/scaffold/login.vue.d.ts +17 -0
- package/dist/types/src/scaffold/report.vue.d.ts +485 -0
- package/dist/types/src/scaffold/table.vue.d.ts +54 -0
- package/dist/types/src/scaffold/tree.vue.d.ts +234 -0
- package/dist/types/src/shims-vue.d.ts +22 -0
- package/dist/types/src/store/index.d.ts +6 -0
- package/dist/types/src/store/modules/app.d.ts +5 -0
- package/dist/types/src/store/modules/builderSchema.d.ts +9 -0
- package/dist/types/src/store/modules/settings.d.ts +5 -0
- package/dist/types/src/store/modules/user.d.ts +5 -0
- package/dist/types/src/store/types.d.ts +42 -0
- package/dist/types/src/types.d.ts +105 -0
- package/dist/types/src/utils/container/index.d.ts +3 -0
- package/dist/types/src/utils/env.d.ts +3 -0
- package/dist/types/src/utils/index.d.ts +1 -0
- package/dist/types/src/utils/request/cache.d.ts +5 -0
- package/dist/types/src/utils/request/index.d.ts +8 -0
- package/dist/types/src/utils/request/interceptors.d.ts +3 -0
- package/dist/types/src/utils/request/types.d.ts +14 -0
- package/dist/types/src/utils/sso/index.d.ts +35 -0
- package/dist/types/src/utils/token.d.ts +3 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/init.ts","../src/App.vue","../src/mock/types.ts","../src/mock/data/example.ts","../src/mock/apis/user.ts","../src/mock/apis/index.ts","../src/default.ts","../src/mock/index.ts","../src/utils/token.ts","../src/store/modules/user.ts","../src/store/modules/settings.ts","../src/store/modules/app.ts","../src/store/modules/builderSchema.ts","../src/store/index.ts","../src/plugins/element-plus.ts","../src/utils/request/cache.ts","../src/utils/request/interceptors.ts","../src/utils/request/index.ts","../src/utils/container/index.ts","../src/scaffold/dashboard.vue","../plugin-vue:export-helper","../src/scaffold/layout/components/Breadcrumb/index.vue","../src/scaffold/layout/components/Hamburger/index.vue","../src/scaffold/devtool/formBuilder/ctrls/input.js","../src/scaffold/devtool/formBuilder/ctrls/number.js","../src/scaffold/devtool/formBuilder/ctrls/number-range.js","../src/scaffold/devtool/formBuilder/ctrls/select.js","../src/scaffold/devtool/formBuilder/ctrls/radio.js","../src/scaffold/devtool/formBuilder/ctrls/switch.js","../src/scaffold/devtool/formBuilder/ctrls/code.js","../src/scaffold/devtool/formBuilder/ctrls/json.js","../src/scaffold/devtool/formBuilder/ctrls/upload.js","../src/scaffold/devtool/formBuilder/ctrls/template.js","../src/scaffold/devtool/formBuilder/ctrls/icon-select.js","../src/scaffold/devtool/formBuilder/ctrls/sub-form.js","../src/scaffold/devtool/formBuilder/ctrls/checkbox.js","../src/scaffold/devtool/formBuilder/form.js","../src/scaffold/devtool/formBuilder/index.vue","../src/scaffold/devtool/tableBuilder/ctrls/input.js","../src/scaffold/devtool/tableBuilder/ctrls/select.js","../src/scaffold/devtool/tableBuilder/ctrls/date.js","../src/scaffold/devtool/tableBuilder/table.js","../src/scaffold/devtool/base.js","../src/scaffold/devtool/tableBuilder/columns/span.js","../src/scaffold/devtool/tableBuilder/columns/emum.js","../src/scaffold/devtool/tableBuilder/columns/html.js","../src/scaffold/devtool/tableBuilder/columns/icon.js","../src/scaffold/devtool/tableBuilder/columns/image.js","../src/scaffold/devtool/tableBuilder/columns/json.js","../src/scaffold/devtool/tableBuilder/columns/link.js","../src/scaffold/devtool/tableBuilder/columns/rich.js","../src/scaffold/devtool/tableBuilder/columns/tpl.js","../src/scaffold/devtool/tableBuilder/columns/index.js","../src/scaffold/devtool/tableBuilder/btn/jump.js","../src/scaffold/devtool/tableBuilder/btn/api.js","../src/scaffold/devtool/tableBuilder/btn/form.js","../src/scaffold/devtool/tableBuilder/btn/table.js","../src/scaffold/devtool/tableBuilder/btn/index.js","../src/scaffold/devtool/tableBuilder/index.vue","../src/scaffold/layout/components/PageEditor.vue","../src/scaffold/layout/components/Navbar.vue","../src/scaffold/layout/components/Sidebar/Logo.vue","../src/scaffold/layout/components/Sidebar/Link.vue","../src/scaffold/layout/components/Sidebar/FixiOSBug.ts","../src/scaffold/layout/components/Sidebar/SidebarItem.vue","../src/scaffold/layout/components/Sidebar/SearchMenu.vue","../src/types.ts","../src/scaffold/layout/components/Sidebar/index.vue","../src/scaffold/layout/components/AppMain.vue","../src/scaffold/layout/index.vue","../src/utils/sso/index.ts","../src/scaffold/login.vue","../src/scaffold/404.vue","../src/router/router.ts","../src/router/guard/nprogress.ts","../src/router/guard/func.ts","../src/router/guard/permission.ts","../src/components/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/chart/index.vue","../src/components/report/NumberPanel.vue","../src/components/report/part.vue","../src/components/report/index.vue","../src/scaffold/report.vue","../src/router/remote.ts","../src/router/guard/remote-routes.ts","../src/router/guard/set-page-title.ts","../src/router/guard/index.ts","../src/router/index.ts","../src/components/VIcon.tsx","../src/directive/outClick.ts","../src/plugins/eventBus.ts","../src/directive/rightClick.ts","../src/directive/resize.ts","../src/directive/devtool.ts","../src/admin.ts","../src/utils/env.ts"],"sourcesContent":["/* eslint-disable */\ninterface String {\n format(...replacements: string[]): string;\n}\n\nif (!String.prototype.format) {\n String.prototype.format = function () {\n const args = arguments\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] !== 'undefined'\n ? args[number]\n : match\n })\n }\n}\n","<template>\n <el-config-provider :locale=\"locale\">\n <router-view />\n </el-config-provider>\n</template>\n\n<script setup lang=\"ts\">\nimport zhCn from 'element-plus/lib/locale/lang/zh-cn'\nimport { addNewStyle, addNewStyleTag } from '@okiss/utils'\n\nonBeforeMount(() => {\n const loading = document.getElementById('preloader')\n if (loading !== null) {\n document.body.removeChild(loading)\n addNewStyle('test-icon', '//at.alicdn.com/t/font_2246548_zclaqxwmzq8.css')\n\n const css = `.iconfont {\n font-size: 19px;\n font-style: normal;\n -webkit-font-smoothing: antialiased;\n font-family: iconfont !important;\n }`\n\n addNewStyleTag(css)\n }\n})\nconst locale = zhCn\n</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: '/user/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 timeout: 5000\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}\n\nexport const defaultOptions: OmsOptions = {\n axios: defaultAxios,\n settings: defaultSettings,\n plugins: [],\n mock: false\n}\n","import Mock from 'mockjs'\nimport { MockApi, MockApiMap } from './types'\nimport apis from './apis'\nimport { logGroup, queryParams } from '@okiss/utils'\nimport { defaultOptions } from '../default'\n\nconst uniqueApis: MockApiMap = {}\n\nexport function regMockApis(apis: MockApi[]) {\n apis.forEach(item => {\n const key = realUrl(item)\n uniqueApis[`${item.method}::${key}`] = item\n })\n}\n\nregMockApis(apis)\n\nfunction realUrl(api: MockApi) {\n let url = api.url\n let baseUrl = api.baseURL || defaultOptions.axios?.baseURL\n if (!baseUrl) {\n baseUrl = ''\n }\n if (typeof url === 'string') {\n url = ('/' + baseUrl + url).split('/').filter(v => v).join('/')\n url += '(|\\\\?.*)$'\n return new RegExp(url)\n }\n return url\n}\n\nexport function startMock() {\n Object.keys(uniqueApis).forEach(k => {\n const api = uniqueApis[k]\n const url = realUrl(api)\n Mock.mock(url, api.method, function(options: { url: string, body: any, type: string }) {\n const { url, type, body } = options\n const query = queryParams(url)\n const data = body ? JSON.parse(body) : {}\n const mock = api.response({ query, data })\n const response = Mock.mock(mock)\n logGroup(url, { type, query, data, response })\n return Mock.mock(response)\n })\n })\n console.log(`%c ApiMock is stared! `, 'background: #606060; color: #fff; padding: 4px 5px; border-radius: 1px;')\n}\n","import Cookies from 'js-cookie'\nimport store from '../store'\n\nconst TokenKey = 'oms:token'\n\nexport function getToken(): string {\n return Cookies.get(TokenKey) || ''\n}\n\nexport function setToken(token: string) {\n const expires = new Date(new Date().getTime() + (store.state.settings.tokenExpire || 24 * 60 * 60 * 1000))\n return Cookies.set(TokenKey, token, { expires })\n}\n\nexport function removeToken() {\n return Cookies.remove(TokenKey)\n}\n","import { ActionContext, Module } from 'vuex'\nimport { RootState, strOrNum, User } from '../types'\nimport { LoginForm, LoginTicket, RemoteModule, UserInfo } from '../../types'\nimport { ApiResponse } from '../../utils/request/types'\nimport { getToken, removeToken, setToken } from '../../utils/token'\nimport { RouteRecordRaw } from 'vue-router'\nimport Cookies from 'js-cookie'\n\nexport const user: User = {\n name: '',\n nickname: '',\n avatar: '',\n token: getToken(),\n customRouter: [],\n remoteRouter: [],\n menuRoutes: [],\n isLodeRemoteRoutes: false,\n resource: {},\n roleIds: [],\n path: ''\n}\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 })\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 // @ts-ignore\n !Cookies.get('username') && Cookies.set('username', response.data?.name)\n resolve(true)\n }).catch(error => {\n reject(error)\n })\n }\n })\n },\n loadRemoteRoutes({ state, rootState }: ActionContext<User, RootState>): Promise<RemoteModule[]> {\n return new Promise<RemoteModule[]>((resolve, reject) => {\n rootState.http?.request<RemoteModule, ApiResponse<RemoteModule[]>>({\n url: '/user/routes',\n method: 'get'\n }).then((response: ApiResponse<RemoteModule[]>) => {\n if (response.code === 0) {\n const resource: RemoteModule[] = response.data || []\n resolve(resource)\n } else {\n reject('error')\n }\n }).catch(error => {\n console.log(error)\n reject(error)\n })\n })\n }\n }\n}\n\nexport default userModule\n","import { ActionContext, Module } from 'vuex'\nimport { Settings } from '../../types'\nimport { defaultSettings } from '../../default'\nimport { cloneDeep, merge } from 'lodash'\n\nexport const settings: Settings = cloneDeep(defaultSettings)\n\nconst settingsModule: Module<Settings, any> = {\n namespaced: true,\n state: settings,\n mutations: {\n updateSettings(state: Settings, newSettings: Settings) {\n state = merge(state, newSettings)\n }\n },\n actions: {\n updateSettings({ commit, state }: ActionContext<Settings, any>, remoteConfig: Settings) {\n commit('updateSettings', remoteConfig)\n }\n }\n}\n\nexport default settingsModule\n","import { ActionContext, Module } from 'vuex'\nimport { App, PageSchema, Sidebar } from '../types'\nimport Cookies from 'js-cookie'\n\nexport const app: App = {\n sidebar: {\n opened: Cookies.get('sidebarStatus') ? !!Cookies.get('sidebarStatus') : true,\n withoutAnimation: false\n },\n device: 'desktop',\n pages: {},\n currentRouteMeta: {},\n builderSchema: {}\n}\n\nconst _module: Module<App, any> = {\n namespaced: true,\n state: app,\n mutations: {\n TOGGLE_SIDEBAR: (state: App) => {\n state.sidebar.opened = !state.sidebar.opened\n state.sidebar.withoutAnimation = false\n if (state.sidebar.opened) {\n Cookies.set('sidebarStatus', '1')\n } else {\n Cookies.set('sidebarStatus', '0')\n }\n },\n CLOSE_SIDEBAR: (state: App, withoutAnimation: boolean) => {\n Cookies.set('sidebarStatus', '0')\n state.sidebar.opened = false\n state.sidebar.withoutAnimation = withoutAnimation\n },\n TOGGLE_DEVICE: (state: App, device: string) => {\n state.device = device\n },\n SET_PAGE_JSON_SCHEMA: (state: App, { page, json }: PageSchema) => {\n state.pages[page] = json\n },\n SET_CURRENT_META: (state: App, data: Record<string, any>) => {\n state.currentRouteMeta = data\n },\n SET_BUILDER_SCHEMA: (state: App, data: Record<string, any>) => {\n state.builderSchema = data\n }\n },\n actions: {\n toggleSideBar({ commit }: ActionContext<App, App>) {\n commit('TOGGLE_SIDEBAR')\n },\n closeSideBar({ commit }: ActionContext<App, App>, { withoutAnimation }: Sidebar) {\n commit('CLOSE_SIDEBAR', withoutAnimation)\n },\n toggleDevice({ commit }: ActionContext<App, App>, device: string) {\n commit('TOGGLE_DEVICE', device)\n },\n setPageJsonSchema({ commit }: ActionContext<App, App>, data: PageSchema) {\n commit('SET_PAGE_JSON_SCHEMA', data)\n },\n setCurrentMeta({ commit }: ActionContext<App, App>, data: Record<string, any>) {\n commit('SET_CURRENT_META', data)\n },\n setBuilderSchema({ commit }: ActionContext<App, App>, data: Record<string, any>) {\n commit('SET_BUILDER_SCHEMA', data)\n }\n }\n}\n\nexport default _module\n","/**\n * BuilderSchema\n * 存储pageEditor 编辑模式下时子组件联动相关的状态数据\n */\n\nimport { ActionContext, Module } from 'vuex'\n\nimport { BuilderSchema } from '../types'\n\nexport const builderSchema: BuilderSchema = {\n currentCellItem: {} // form/sub-form 当前单元格编辑数据\n}\n\nconst builderSchemaModule: Module<BuilderSchema, any> = {\n namespaced: true,\n state: builderSchema,\n mutations: {\n SET_CURRENT_CELLITEM: (state: BuilderSchema, data: Record<string, any>) => {\n state.currentCellItem = data\n }\n },\n actions: {\n setCurrentCellItem({ commit }: ActionContext<BuilderSchema, BuilderSchema>, data: Record<string, any>) {\n commit('SET_CURRENT_CELLITEM', data)\n }\n }\n}\n\nexport default builderSchemaModule\n","import type { App } from 'vue'\nimport user from './modules/user'\nimport settings from './modules/settings'\nimport app from './modules/app'\nimport builderSchema from './modules/builderSchema'\nimport { ActionContext, createStore } from 'vuex'\nimport { RootState } from './types'\nimport { AxiosInstance } from 'axios'\n\nconst store = createStore<RootState>({\n state: undefined,\n getters: {\n http: state => state.http,\n sidebar: state => state.app.sidebar,\n device: state => state.app.device,\n token: state => state.user.token,\n avatar: state => state.user.avatar,\n name: state => state.user.name,\n nickname: state => state.user.nickname,\n remoteRouter: state => state.user.remoteRouter,\n customRouter: state => state.user.customRouter,\n nav: state => state.settings.nav,\n builderSchema: state => state.app.builderSchema,\n currentCellItem: state => state.builderSchema.currentCellItem\n },\n mutations: {\n setHttp(state: RootState, http: AxiosInstance) {\n state.http = http\n }\n },\n actions: {\n setHttp({ commit, state }: ActionContext<RootState, any>, http: AxiosInstance) {\n commit('setHttp', http)\n }\n },\n modules: {\n user,\n settings,\n app,\n builderSchema\n }\n})\n\nexport function setupStore(app: App<Element>) {\n app.use(store)\n}\n\nexport default store\n","import ElementPlus, { ElMessage, ElMessageBox } from 'element-plus'\nimport 'element-plus/dist/index.css'\nimport 'dayjs/locale/zh-cn'\n\nexport const Message = ElMessage\nexport const MessageBox = ElMessageBox\n\nexport default ElementPlus\n","import { InterceptorUse } from './types'\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, Canceler } 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 (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 if (response.config.method === 'get' && Object.keys(response.data as Record<string, any>).length > 0) {\n task.addCache(response.config, response.data)\n }\n return response\n },\n onRejected(error: AxiosError) {\n return Promise.reject(error)\n }\n}\n","import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport store from '../../store'\nimport { Interceptor, InterceptorUse } from './types'\nimport { Message, MessageBox } from '../../plugins/element-plus'\nimport { removeToken } from '../token'\nimport { cancelRequestInterceptor, cancelResponseInterceptor } from './cache'\nimport { isString } from '@okiss/utils'\n// @ts-nocheck\nfunction getToken() {\n return store.state.user.token\n}\n\nconst baseRequestInterceptor: InterceptorUse<AxiosRequestConfig, AxiosError> = {\n onFulfilled: function(config: AxiosRequestConfig) {\n config.headers = config.headers || {}\n const token = getToken()\n if (token) {\n config.headers['X-Token'] = token\n }\n return config\n }\n}\n\nconst baseResponseInterceptor: InterceptorUse<AxiosResponse, AxiosError> = {\n onFulfilled(response) {\n const notHoldApiErr = response.config.notHoldApiErr !== undefined && response.config.notHoldApiErr === true\n if (!notHoldApiErr && response.data.code !== 0) {\n const message = response.data.message || `接口请求错误 ${response.config.method}::${response.config.url}`\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 }\n }\n })\n return\n } else {\n Message({\n message: message,\n type: 'error',\n duration: 5 * 1000\n })\n }\n return Promise.reject(message)\n }\n\n let _message_box = response.data?.data?._message_box\n if (_message_box !== undefined) {\n if (isString(_message_box)) {\n _message_box = {\n message: response.data?.data?._message_box\n }\n }\n MessageBox({\n title: '提示',\n type: 'success',\n ..._message_box\n })\n }\n\n return response.data\n },\n onRejected(error: AxiosError) {\n if (axios.isCancel(error)) {\n return Promise.reject('')\n }\n Message({\n message: `${error.message} ${error.config.method}::${error.config.url}`,\n type: 'error',\n duration: 5 * 1000\n })\n return Promise.reject(error)\n }\n}\n\nexport const interceptors: Interceptor[] = [\n {\n request: cancelRequestInterceptor,\n response: cancelResponseInterceptor\n },\n {\n request: baseRequestInterceptor,\n response: baseResponseInterceptor\n }\n]\n\nexport function addInterceptor(newInterceptor: Interceptor) {\n interceptors.push(newInterceptor)\n}\n","import axios, { AxiosRequestConfig as C } from 'axios'\nimport { defaultOptions } from '../../default'\nimport { merge } from 'lodash'\nimport { interceptors } from './interceptors'\nimport { cacheAdapter } from './cache'\n\nexport interface AxiosRequestConfig extends C {\n cacheTime?: number,\n notHoldApiErr?: boolean\n}\n\nexport function instance(conf: AxiosRequestConfig = {}) {\n const defaultConf: AxiosRequestConfig = defaultOptions.axios || {}\n const c = merge(defaultConf, conf || {})\n const defaultAxios = axios.create(c)\n const service = axios.create({\n ...c,\n adapter: (c) => cacheAdapter(c, defaultAxios)\n })\n\n interceptors.forEach(item => {\n service.interceptors.request.use(item.request.onFulfilled, item.request.onRejected)\n service.interceptors.response.use(item.response.onFulfilled, item.response.onRejected)\n })\n\n return service\n}\n\nexport default instance()\n","import { Component } from '@vue/runtime-core'\n\nconst defaultMap: Record<string, Component> = {}\n\nexport function setCmp(name: string, cmp: Component) {\n defaultMap[name] = cmp\n}\n\nexport function getCmp(name: string) {\n return defaultMap[name]\n}\n","<script lang=\"jsx\">\nimport { useStore } from 'vuex'\nimport { getCmp } from '../utils/container'\n\nexport default defineComponent({\n name: 'VDashboard',\n setup() {\n const store = useStore()\n const name = computed(() => store.getters.name)\n const custom = getCmp('test')\n if (custom) {\n return () => <span> <custom/> </span>\n }\n return () => <div class='dashboard-container'>\n <div class='dashboard-text'>Hi { name.value } 😄</div>\n </div>\n }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.dashboard {\n &-container {\n margin: 30px;\n }\n\n &-text {\n font-size: 30px;\n line-height: 46px;\n }\n}\n</style>\n","\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\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","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, VButton } from '@okiss/lib'\nimport { compactObject } from '@okiss/utils'\nimport { cloneDeep, get, merge, unset } from 'lodash'\nimport { baseSchema, ctrls } from './form'\nimport { eventBus } from '../../../index'\nimport JsonView from '@okiss/jsonview'\n\nexport const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n\nconst typs = []\n\nObject.keys(ctrls).forEach(item => {\n typs.push({ value: item, label: ctrls[item].name })\n})\n\nconst sqlSchema = {\n options: {\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'sub-form',\n field: 'columns',\n props: {\n repeat: true,\n formItems: [\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: cloneDeep(typs)\n },\n {\n type: 'input',\n field: 'label',\n label: '字段label'\n }\n ]\n }\n }\n ]\n}\n\nexport default {\n components: { DevLayout, VForm, VButton, JsonView },\n props: {\n schema: {\n type: Object,\n default: _ => {}\n }\n },\n data() {\n return {\n sqlOptions: {},\n sqlSchema: sqlSchema,\n baseSchema: baseSchema,\n activeTab: 'base',\n builderSchema: Object.assign(\n {},\n this.$props.schema,\n {\n options: {\n submitButton: false,\n cancelButton: false\n }\n }\n ),\n baseOptions: {},\n key: 0,\n ctrlKey: 0,\n activeCtrl: undefined,\n ctrlOptions: {},\n ctrlSchema: {},\n ctrlName: '',\n activeIndex: undefined,\n ctrlMap: ctrls,\n activeIndexReg: /(formItems)?\\[(\\d+)\\]/,\n tableStruct: '',\n activeName: '1',\n currentCtrlType: 'input',\n types: cloneDeep(typs)\n }\n },\n computed: {\n getSaveSchema() {\n return {\n formItems: this.builderSchema.formItems\n }\n }\n },\n watch: {\n baseOptions: {\n deep: true,\n immediate: true,\n handler(val) {\n const tmp = cloneDeep(val)\n if (val.showSubmitButton === false) {\n tmp.submitButton = false\n }\n if (val.cancelSubmitButton === false) {\n tmp.cancelButton = false\n }\n delete tmp.showSubmitButton\n delete tmp.showCancelButton\n if (Object.keys(tmp).length > 0) {\n this.builderSchema = merge(this.builderSchema, { options: tmp })\n this.key++\n }\n }\n },\n ctrlOptions: {\n deep: true,\n // immediate: true,\n handler(val) {\n const current = get(this.builderSchema, this.activeIndex)\n if (!current) {\n return\n }\n const type = current ? current.type : ''\n const ctrl = this.ctrlMap[type]\n const transData = ctrl.trans ? ctrl.trans(val) : val\n if (transData && Object.keys(transData).length > 0) {\n transData.type = type\n // update `builderSchema` nested data\n if (this.activeIndex.indexOf('[') > -1) {\n // format like: `headers[0]`\n const [_, key, keyIndex] = this.activeIndex.match(/(\\w+)\\[(\\d+)\\]/)\n _\n this.builderSchema[key][keyIndex] = { ...transData }\n } else {\n this.builderSchema[this.activeIndex] = transData\n }\n // set(this.builderSchema, this.activeIndex, transData)\n this.key++\n }\n }\n },\n currentCtrlType: {\n handler(val) {\n const ctrl = this.ctrlMap[val]\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n const sourceCtrlOptions = get(this.builderSchema, this.activeIndex)\n this.ctrlOptions = cloneDeep(sourceCtrlOptions)\n this.ctrlOptions.type = val\n this.ctrlKey++\n this.key++\n }\n }\n },\n beforeCreate() {\n eventBus.on('dev-action', ({ event, data }) => {\n this.onDevAction(data.type, data.devId)\n })\n },\n unmounted() {\n eventBus.off('dev-action')\n },\n methods: {\n onDevAction(btnType, path) {\n console.log(111, btnType, path)\n this.activeIndex = 'formItems' + path\n if (btnType === 'edit') {\n this.activeTab = 'ctrl'\n this.clicklabel()\n }\n if (btnType === 'del') {\n this.activeTab = 'base'\n this.removeOne()\n }\n this.ctrlKey++\n },\n push(name) {\n const target = 'formItems'\n this.ctrlOptions = {}\n this.builderSchema[target] = this.builderSchema[target] || []\n const ctrl = this.ctrlMap[name]\n this.activeCtrl = ctrl\n this.builderSchema[target].push(cloneDeep(ctrl.default))\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n this.key++\n this.activeIndex = `${target}[${this.builderSchema[target].length - 1}]`\n this.activeTab = 'ctrl'\n },\n removeOne() {\n unset(this.builderSchema, this.activeIndex)\n this.builderSchema = cloneDeep(compactObject(this.builderSchema))\n this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n const type = ctrlOptions.type\n const ctrl = this.ctrlMap[type]\n if (!ctrl) {\n this.$message({ type: 'warning', message: '尚未支持该组件的UI编辑' })\n return\n }\n this.currentCtrlType = type\n this.ctrlOptions = ctrlOptions\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: { formItems: this.builderSchema.formItems }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","export default {\n type: 'input',\n name: '文本框',\n default: {\n type: 'input',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'number',\n field: 'maxlength',\n label: '最大字符数'\n },\n {\n type: 'switch',\n field: 'showWordLimit',\n label: '显示限制词数'\n },\n {\n type: 'input',\n field: 'mask',\n label: 'mask',\n info: '<a href=\"https://github.com/RobinHerbots/Inputmask\" target=\"_blank\" class=\"el-link el-link--primary\">文档</a>'\n }\n ]\n }\n }\n ]\n}\n","import { cloneDeep } from 'lodash'\n\nexport default {\n type: 'select',\n name: '下拉框',\n default: {\n type: 'select',\n label: 'label',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'radio',\n field: 'optionType',\n label: '备选项类型',\n value: 0,\n options: [\n { value: 0, label: 'local' },\n { value: 1, label: 'remote' }\n ]\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '备选项',\n props: {\n repeat: true,\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n depend: {\n field: 'optionType',\n value: 0\n }\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'selectApi',\n label: '备选项接口',\n depend: {\n field: '.optionType',\n value: 1\n }\n },\n {\n type: 'switch',\n field: 'multiple',\n label: '多选'\n },\n {\n type: 'number',\n field: 'multipleLimit',\n label: '最大选中数',\n depend: {\n field: 'multiple',\n value: true\n }\n },\n {\n type: 'switch',\n field: 'filterable',\n label: '允许过滤'\n }\n ]\n }\n }\n ],\n trans(item) {\n const tmp = cloneDeep(item)\n if (item.optionType === 0) {\n if (tmp.props && tmp.props.selectApi !== undefined) {\n delete tmp.props.selectApi\n }\n } else if (item.optionType === 1) {\n if (tmp.options) {\n delete tmp.options\n }\n }\n delete tmp.optionType\n return tmp\n }\n}\n","export default {\n type: 'date',\n name: '日期',\n default: {\n type: 'date',\n label: '时间',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n }\n ]\n}\n","export const baseSchema = {\n options: {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n },\n formItems: [\n {\n type: 'switch',\n field: 'showFilter',\n label: '搜索条件',\n value: true\n },\n {\n type: 'switch',\n field: 'showPagination',\n label: '页码',\n value: true\n },\n {\n type: 'switch',\n field: 'exportAble',\n label: '导出按钮'\n }\n ]\n}\n","export const ctrlFormDefaultOptions = {\n labelPosition: 'top',\n submitButton: false,\n cancelButton: false\n}\n","export default {\n type: 'span',\n name: '文本',\n default: {\n type: 'span',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'switch',\n field: 'sortable',\n label: '排序'\n }\n ]\n}\n","export default {\n type: 'enum',\n name: '标签',\n default: {\n type: 'enum',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'sub-form',\n field: 'options',\n label: '映射',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'value',\n label: 'value'\n },\n {\n type: 'input',\n field: 'label',\n label: 'label'\n }\n ]\n },\n value: []\n }\n ],\n trans(val) {\n val.options = val.options || []\n if (!val.label) {\n val.label = '表头'\n }\n return val\n }\n}\n","export default {\n type: 'html',\n name: 'HTML',\n default: {\n type: 'html',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'icon',\n name: '图标',\n default: {\n type: 'icon',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'image',\n name: '图片',\n default: {\n type: 'image',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'json',\n name: 'JSON',\n default: {\n type: 'json',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'link',\n name: '链接',\n default: {\n type: 'link',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'rich',\n name: '富文本',\n default: {\n type: 'rich',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n }\n ]\n}\n","export default {\n type: 'tpl',\n name: '模板',\n default: {\n type: 'tpl',\n label: '表头',\n field: 'field_name'\n },\n builder: [\n {\n type: 'input',\n field: 'label',\n label: '字段名'\n },\n {\n type: 'input',\n field: 'field',\n label: '字段key'\n },\n {\n type: 'input',\n field: 'info',\n label: '提示'\n },\n {\n type: 'input',\n field: 'tpl',\n label: '模板',\n info: '例如 <code>姓名: {name} 年龄:{age}</code>'\n }\n ]\n}\n","import span from './span'\nimport xenum from './emum'\nimport html from './html'\nimport icon from './icon'\nimport image from './image'\nimport json from './json'\nimport link from './link'\nimport rich from './rich'\nimport tpl from './tpl'\n\nexport default {\n span,\n enum: xenum,\n html,\n icon,\n image,\n json,\n link,\n rich,\n tpl\n}\n","export default {\n type: 'jump',\n name: '跳转',\n default: {\n type: 'jump',\n target: '',\n text: '按钮'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: '跳转地址',\n info: '可以是本地路由, 也可以是url'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'api',\n name: '接口请求',\n default: {\n type: 'api',\n target: '',\n text: '请求'\n },\n builder: [\n {\n type: 'input',\n field: 'target',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'sub-form',\n field: 'props',\n label: '属性',\n props: {\n options: {\n labelPosition: 'top'\n },\n formItems: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'icon-select',\n field: 'icon',\n label: '图标'\n },\n {\n type: 'select',\n field: 'type',\n label: '类型',\n options: [\n { value: 'primary', label: 'primary' },\n { value: 'info', label: 'info' }\n ]\n },\n {\n type: 'input',\n field: 'api',\n label: 'API地址',\n info: '此处填写接口path即可'\n },\n {\n type: 'select',\n field: 'method',\n label: '请求类型',\n options: [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'DELETE', label: 'DELETE' },\n { value: 'PUT', label: 'PUT' }\n ]\n }\n ]\n }\n }\n ]\n}\n","export default {\n type: 'form',\n name: '弹框表单',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","export default {\n type: 'table',\n name: '弹框列表',\n default: {\n type: 'form',\n target: '',\n text: '弹框表单'\n },\n builder: [\n {\n type: 'input',\n field: 'text',\n label: '文案'\n },\n {\n type: 'radio',\n field: 'container',\n label: '模式',\n options: [\n { value: 'dialog', label: '模态框' },\n { value: 'drawer', label: '抽屉' }\n ],\n value: 'dialog'\n },\n {\n type: 'radio',\n field: 'schema_type',\n label: '表单类型',\n options: [\n { value: 0, label: '本地' },\n { value: 1, label: '远程' }\n ],\n value: 1\n },\n {\n type: 'input',\n field: 'infoApi',\n label: 'formSchema接口',\n depend: {\n field: 'schema_type',\n value: 1\n }\n },\n {\n type: 'json',\n field: 'form-items',\n label: '表单控件'\n },\n {\n type: 'input',\n field: 'saveApi',\n label: '保存接口'\n }\n ]\n}\n","import jump from './jump'\nimport api from './api'\nimport form from './form'\nimport table from './table'\n\nexport default {\n jump,\n api,\n form,\n table\n}\n","<template>\n <dev-layout>\n <template #left-aside>\n <el-row style=\"width: 200px\">\n <el-row>\n <el-col\n class=\"title\"\n :data-id=\"22222\"\n >添加搜索条件</el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('input')\"\n >文本框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('select')\"\n >下拉框</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushFilter('date')\"\n >日期</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加列表项</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.headers)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushHeaders(ctrlMap.headers[item].type)\"\n >{{ ctrlMap.headers[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加行按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushRowButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加常规按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushNormalButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n <el-row>\n <el-col class=\"title\">添加批量按钮</el-col>\n <el-col\n v-for=\"(item, index) in Object.keys(ctrlMap.buttons)\"\n :key=\"`column-${index}`\"\n class=\"ctrl\"\n >\n <el-button\n class=\"ctrl-btn\"\n @click=\"pushBatchButton(ctrlMap.buttons[item].type)\"\n >{{ ctrlMap.buttons[item].name }}</el-button>\n </el-col>\n <el-col class=\"ctrl\">\n <el-button class=\"ctrl-btn\">按钮组</el-button>\n </el-col>\n </el-row>\n </el-row>\n </template>\n <template #main>\n <v-table\n ref=\"table\"\n :key=\"key\"\n :dev=\"true\"\n v-bind=\"builderSchema\"\n />\n <el-divider />\n <ElButton\n type=\"primary\"\n @click=\"saveSchema\"\n >保存页面配置</ElButton>\n \n <VButton\n text=\"PageSchema\"\n type=\"modal\"\n >\n <JsonView :data=\"getSaveSchema\" />\n </VButton>\n </template>\n <template #right-aside>\n <el-form v-if=\"activeIndex\">\n <el-form-item label=\"控件类型\">\n <el-select v-model=\"currentCtrlType\">\n <el-option\n v-for=\"(item,index) in types\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </el-form-item>\n </el-form>\n <v-form\n :key=\"ctrlKey\"\n v-model=\"ctrlOptions\"\n v-bind=\"ctrlSchema\"\n />\n </template>\n </dev-layout>\n</template>\n<script>\nimport DevLayout from '../DevLayout.vue'\nimport { VButton, VForm, VTable } from '@okiss/lib'\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'\nimport JsonView from '@okiss/jsonview'\n\nexport default {\n components: { JsonView, DevLayout, VTable, VForm, VButton },\n props: {\n schema: {\n type: Object,\n default: _ => {}\n }\n },\n data() {\n const schema = toRefs(this.$props.schema)\n delete schema.listApi\n schema.list = [{}]\n return {\n baseSchema: baseSchema,\n activeTab: 'base',\n builderSchema: Object.assign(\n {},\n baseSchema,\n schema\n ),\n baseOptions: {},\n key: 0,\n ctrlKey: 0,\n activeCtrl: undefined,\n activeBrick: undefined,\n ctrlOptions: {},\n ctrlSchema: {},\n ctrlName: '',\n activeIndex: undefined,\n ctrlMap: {\n filter: { input, select, date },\n headers: columns,\n buttons: buttons\n },\n activeIndexReg: /(filter|headers|normalButton|batchButton|rowButton)?\\[(\\d+)\\]/,\n currentCtrlType: 'input'\n }\n },\n computed: {\n types() {\n const typs = []\n const ctrls = this.ctrlMap[this.activeBrick]\n Object.keys(ctrls).forEach(item => {\n typs.push({ value: item, label: ctrls[item].name })\n })\n\n return typs\n },\n getSaveSchema() {\n return {\n filter: this.builderSchema.filter,\n headers: this.builderSchema.headers,\n rowButton: this.builderSchema.rowButton,\n normalButton: this.builderSchema.normalButton,\n batchButton: this.builderSchema.batchButton\n }\n },\n currentBuilderSchema() {\n return this.$store.state.app.builderSchema\n }\n },\n watch: {\n baseOptions: {\n deep: true,\n immediate: true,\n handler(val) {\n this.builderSchema = merge(this.builderSchema, val)\n this.key++\n this.updateBuilderSchema()\n }\n },\n ctrlOptions: {\n deep: true,\n // immediate: true,\n handler(val) {\n const m = this.activeIndex.match(this.activeIndexReg)\n if (!m) {\n return\n }\n let type = this.builderSchema[m[1]][parseInt(m[2])].type\n\n if (m[1] === 'headers' && type === undefined) {\n type = 'span'\n }\n const ctrl = this.ctrlMap[this.activeBrick][type]\n if (!ctrl) {\n return\n }\n\n const transData = ctrl.trans ? ctrl.trans(val) : val\n if (transData && Object.keys(transData).length > 0) {\n transData.type = type\n\n // update `builderSchema` nested data\n if (this.activeIndex.indexOf('[') > -1) {\n // format like: `headers[0]`\n const [_, key, keyIndex] = this.activeIndex.match(/(\\w+)\\[(\\d+)\\]/)\n _\n this.builderSchema[key][keyIndex] = { ...transData }\n } else {\n this.builderSchema[this.activeIndex] = transData\n }\n this.key++\n }\n\n this.updateBuilderSchema()\n }\n },\n currentCtrlType: {\n handler(val) {\n const ctrl = this.ctrlMap[this.activeBrick][val]\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n const sourceCtrlOptions = get(this.builderSchema, this.activeIndex)\n sourceCtrlOptions.type = val\n const ctrlOptions = cloneDeep(sourceCtrlOptions)\n this.ctrlOptions = ctrlOptions\n if (ctrlOptions.text) {\n this.ctrlOptions.text = ctrlOptions.text\n this.ctrlOptions.props = ctrlOptions.props || {}\n }\n this.ctrlKey++\n this.key++\n this.updateBuilderSchema()\n }\n }\n },\n beforeCreate() {\n eventBus.on('dev-action', ({ event, data }) => {\n this.onDevAction(data.type, data.devId)\n })\n },\n unmounted() {\n eventBus.off('dev-action')\n },\n methods: {\n updateBuilderSchema() {\n this.$store.dispatch('app/setBuilderSchema', this.builderSchema)\n },\n onDevAction(btnType, path) {\n this.activeIndex = path\n if (btnType === 'edit') {\n this.activeTab = 'ctrl'\n this.clicklabel()\n }\n if (btnType === 'del') {\n this.activeTab = 'base'\n this.removeOne()\n }\n this.ctrlKey++\n },\n pushFilter(name) {\n this.push(name, 'filter', 'filter', 'filter')\n },\n pushHeaders(name) {\n this.push(name, 'headers', 'headers', 'headers')\n },\n pushNormalButton(name) {\n this.push(name, 'normalButton', 'buttons', 'buttons')\n },\n pushBatchButton(name) {\n this.push(name, 'batchButton', 'buttons', 'buttons')\n },\n pushRowButton(name) {\n this.push(name, 'rowButton', 'buttons', 'buttons')\n },\n push(name, target, ctrlMapName, brick) {\n const ctrl = this.ctrlMap[ctrlMapName]\n if (!ctrl[name]) {\n this.$message({ type: 'warning', message: '尚未支持此组件的UI编辑' })\n return\n }\n this.activeCtrl = ctrl[name]\n this.activeBrick = brick\n this.ctrlOptions = {}\n this.builderSchema[target] = this.builderSchema[target] || []\n this.builderSchema[target].push(cloneDeep(ctrl[name].default))\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl[name].builder)\n })\n this.key++\n this.ctrlKey++\n this.activeIndex = `${target}[${this.builderSchema[target].length - 1}]`\n this.activeTab = 'ctrl'\n },\n removeOne() {\n unset(this.builderSchema, this.activeIndex)\n this.builderSchema = cloneDeep(compactObject(this.builderSchema))\n console.log(this.builderSchema)\n this.activeIndex = ''\n this.ctrlOptions = {}\n this.ctrlSchema = {}\n this.key++\n this.ctrlKey++\n },\n clicklabel() {\n const p = this.activeIndex\n const m = p.match(this.activeIndexReg)\n if (m) {\n const ctrlOptions = cloneDeep(get(this.builderSchema, p))\n this.activeBrick = m[1]\n if (['normalButton', 'batchButton', 'rowButton'].indexOf(m[1]) > -1) {\n this.activeBrick = 'buttons'\n }\n console.log(m)\n let type = this.builderSchema[m[1]][parseInt(m[2])].type\n if (m[1] === 'headers' && type === undefined) {\n type = 'span'\n }\n const ctrl = this.ctrlMap[this.activeBrick][type]\n if (!ctrl) {\n console.log(this.activeBrick, type, m)\n this.$message({ type: 'warning', message: '尚未支持此组件的UI编辑' })\n return\n }\n this.ctrlOptions = ctrlOptions\n this.currentCtrlType = type\n this.ctrlSchema = cloneDeep({\n options: cloneDeep(ctrlFormDefaultOptions),\n formItems: cloneDeep(ctrl.builder)\n })\n this.ctrlKey++\n }\n },\n saveSchema() {\n const { filter, headers, rowButton, normalButton, batchButton } = this.currentBuilderSchema\n this.$http.request({\n method: 'POST',\n url: '/devtool/page_schema',\n data: {\n filter,\n headers,\n rowButton,\n normalButton,\n batchButton\n }\n }).then(({ data }) => {\n if (data) {\n this.$message({ type: 'success', message: '保存成功, 请刷新页面查看效果' })\n }\n })\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.title {\n size: 2em;\n padding: 5px 20px;\n}\n.ctrl {\n padding: 5px 20px;\n .ctrl-btn {\n width: 100%;\n }\n}\n</style>\n","<template>\n <VIcon\n name=\"ra-set\"\n @click=\"show = !show\"\n />\n <el-drawer\n v-model=\"show\"\n title=\"页面设计\"\n custom-class=\"my-drawer\"\n :direction=\"direction\"\n size=\"90%\"\n destroy-on-close\n append-to-body\n >\n <form-builder\n v-if=\"pageSchema.formItems !== undefined\"\n :schema=\"pageSchema\"\n />\n <table-builder\n v-if=\"pageSchema.headers !== undefined\"\n :schema=\"pageSchema\"\n />\n </el-drawer>\n</template>\n<script>\nimport FormBuilder from '../../devtool/formBuilder/index.vue'\nimport TableBuilder from '../../devtool/tableBuilder/index.vue'\nimport store from '../../../store'\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 class=\"navbar\">\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 <el-popover\n placement=\"bottom\"\n width=\"400\"\n trigger=\"click\"\n @show=\"showPopover\"\n >\n <el-badge\n class=\"right-item\"\n :is-dot=\"hasNewMessage\"\n >\n <i\n class=\"el-icon-bell icon\"\n circle\n />\n </el-badge>\n </el-popover>\n <div\n class=\"right-item\"\n >\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-btn :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 { cache as Cache, showEleByClassName } from '@okiss/utils'\nimport { VBtn } from '@okiss/lib'\n\nexport default {\n components: {\n Breadcrumb,\n Hamburger,\n VBtn,\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 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 },\n methods: {\n toggleSideBar() {\n this.$store.dispatch('app/toggleSideBar')\n },\n async logout() {\n await this.$store.dispatch('user/logout')\n location.reload(`${location.origin}/#/login?redirect=${this.$route.fullPath}`)\n },\n getSetting(name) {\n return this.$store.state.settings[name]\n },\n async closeNavBarNotice() {\n await this.$store.commit('settings/updateSettings', { closeNavNotice: true })\n this.closeNotice(this.getSetting('navBarNotice'))\n },\n showPopover() {\n this.showExportPop = true\n },\n showNotice(text) {\n const key = 'dismiss:navbar_notice'\n if (!Cache.exist(key)) {\n return true\n }\n return Cache.get(key) !== text\n },\n closeNotice(text) {\n const key = 'dismiss:navbar_notice'\n Cache.set(key, text)\n },\n gotoMenuEdit() {\n if (this.$route?.meta?.pageId) {\n window.open(location.origin + location.pathname + '#/menu/' + this.$route?.meta?.pageId)\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.el-dropdown-link {\n cursor: pointer;\n color: #409eff;\n}\n\n.el-icon-arrow-down {\n font-size: 12px;\n}\n\n.navbar {\n display: flex;\n height: 50px;\n /*overflow: hidden;*/\n position: relative;\n background: #fff;\n box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);\n\n .hamburger-container {\n line-height: 50px;\n height: 100%;\n float: left;\n cursor: pointer;\n transition: background 0.3s;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .breadcrumb-container {\n float: left;\n }\n}\n\n.notice-setting {\n left: 50%;\n top: 50%;\n position: absolute;\n transform: translate(-50%, -50%);\n}\n\n.right-content {\n float: right;\n height: 100%;\n padding-right: 20px;\n color: rgba(0, 0, 0, 0.65);\n display: flex;\n\n .icon {\n font-size: 18px;\n\n &:focus {\n outline: none;\n }\n }\n\n .right-item {\n padding: 0 12px;\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .right-item {\n padding: 0 12px;\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n &:hover {\n background: rgba(0, 0, 0, 0.025);\n }\n }\n\n .right-item-button {\n height: 100%;\n transition: all 0.3s;\n cursor: pointer;\n display: flex;\n align-items: center;\n }\n\n .user-info {\n height: 50px;\n line-height: 50px;\n }\n\n .user-avatar {\n width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 50%;\n margin: 0 10px 0 0;\n color: #1890ff;\n vertical-align: middle;\n background: hsla(0, 0%, 100%, 0.85);\n }\n\n .user-name {\n vertical-align: middle;\n }\n}\n</style>\n","<template>\n <div\n class=\"sidebar-logo-container\"\n :class=\"{ collapse: collapse }\"\n >\n <transition name=\"sidebarLogoFade\">\n <router-link\n v-if=\"collapse\"\n key=\"collapse\"\n class=\"sidebar-logo-link\"\n to=\"/\"\n >\n <img\n v-if=\"logo\"\n :src=\"logo\"\n class=\"sidebar-logo\"\n >\n <h1\n v-else\n class=\"sidebar-title\"\n >{{ title }}</h1>\n <div>系统</div>\n </router-link>\n <router-link\n v-else\n key=\"expand\"\n class=\"sidebar-logo-link\"\n to=\"/\"\n >\n <img\n v-if=\"logo\"\n :src=\"logo\"\n class=\"sidebar-logo\"\n >\n <h1 class=\"sidebar-title\">{{ title }}</h1>\n </router-link>\n </transition>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SidebarLogo',\n props: {\n collapse: {\n type: Boolean,\n required: true\n }\n },\n computed: {\n title() {\n return this.$store.state.settings.title\n },\n logo() {\n return this.$store.state.settings.logo\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sidebarLogoFade-enter-active {\n transition: opacity 1.5s;\n}\n\n.sidebarLogoFade-enter,\n.sidebarLogoFade-leave-to {\n opacity: 0;\n}\n\n.sidebar-logo-container {\n position: relative;\n width: 100%;\n height: 50px;\n line-height: 50px;\n background: #2b2f3a;\n text-align: center;\n overflow: hidden;\n\n & .sidebar-logo-link {\n height: 100%;\n width: 100%;\n\n & .sidebar-logo {\n width: 32px;\n height: 32px;\n vertical-align: middle;\n margin-right: 12px;\n }\n\n & .sidebar-title {\n display: inline-block;\n margin: 0;\n color: #fff;\n font-weight: 600;\n line-height: 50px;\n font-size: 14px;\n font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;\n vertical-align: middle;\n }\n }\n\n &.collapse {\n .sidebar-logo {\n margin-right: 0px;\n }\n }\n}\n</style>\n","<template>\n <component\n :is=\"compType(to)\"\n v-bind=\"linkProps(to)\"\n >\n <slot />\n </component>\n</template>\n\n<script>\nimport { isExternal } from '@okiss/utils'\n\nexport default {\n props: {\n to: {\n type: String,\n required: true\n },\n newTab: {\n type: Boolean,\n required: false\n }\n },\n methods: {\n compType(url) {\n if (isExternal(url) || this.newTab) {\n return 'a'\n } else {\n return 'router-link'\n }\n },\n linkProps(url) {\n if (isExternal(url)) {\n return {\n is: 'a',\n href: url,\n target: '_blank',\n rel: 'noopener'\n }\n }\n if (this.newTab) {\n const routeData = this.$router.resolve(url)\n return {\n is: 'a',\n href: routeData.href,\n target: '_blank',\n rel: 'noopener'\n }\n }\n return {\n is: 'router-link',\n to: url\n }\n }\n }\n}\n</script>\n","export default {\n computed: {\n // @ts-ignore\n device() {\n // @ts-ignore\n return this.$store.state.app.device\n }\n },\n mounted() {\n // In order to fix the click on menu on the ios device will trigger the mouseleave bug\n // https://github.com/PanJiaChen/vue-element-admin/issues/1135\n // @ts-ignore\n this.fixBugIniOS()\n },\n methods: {\n fixBugIniOS() {\n // @ts-ignore\n const $subMenu = this.$refs.subMenu\n if ($subMenu) {\n const handleMouseleave = $subMenu.handleMouseleave\n // @ts-ignore\n $subMenu.handleMouseleave = e => {\n // @ts-ignore\n if (this.device === 'mobile') {\n return\n }\n handleMouseleave(e)\n }\n }\n }\n }\n}\n","<template>\n <div\n v-if=\"item.hidden !== false\"\n class=\"menu-wrapper\"\n >\n <!-- 没有子菜单 -->\n <template v-if=\"item.meta && item.meta.menuType === 2\">\n <app-link\n v-if=\"item.meta\"\n :to=\"to\"\n :new-tab=\"item.meta.newTab\"\n >\n <el-menu-item\n :index=\"to\"\n :class=\"{ 'submenu-title-noDropdown': !isNest }\"\n >\n <menu-content :meta=\"item.meta\" />\n </el-menu-item>\n </app-link>\n </template>\n <!-- 有子菜单 -->\n <el-sub-menu\n v-else-if=\"item.meta && item.meta.menuType === 1\"\n ref=\"subMenu\"\n :index=\"to\"\n :class=\"{ 'submenu-title-noDropdown': !isNest }\"\n popper-append-to-body\n >\n <template #title>\n <app-link\n v-if=\"item.redirect && item.redirect !== '#'\"\n :to=\"to\"\n >\n <menu-content :meta=\"item.meta\" />\n </app-link>\n <menu-content\n v-else\n :meta=\"item.meta\"\n />\n </template>\n <sidebar-item\n v-for=\"child in item.children\"\n :key=\"child.path\"\n :is-nest=\"true\"\n :item=\"child\"\n :to=\"getTo(child)\"\n class=\"nest-menu\"\n />\n </el-sub-menu>\n </div>\n</template>\n\n<script>\nimport AppLink from './Link.vue'\nimport FixiOSBug from './FixiOSBug'\nimport MenuContent from './MenuContent.vue'\n\nexport default {\n name: 'SidebarItem',\n components: {\n AppLink,\n MenuContent\n },\n mixins: [FixiOSBug],\n props: {\n // route object\n item: {\n type: Object,\n required: true\n },\n isNest: {\n type: Boolean,\n default: false\n },\n to: {\n type: String,\n default: ''\n }\n },\n methods: {\n getTo(child) {\n try {\n return this.$router.resolve(child.redirect ? child.redirect : child).fullPath\n } catch (e) {\n console.error('路由解析错误')\n console.log(child)\n return '/'\n }\n }\n }\n}\n</script>\n","<template>\n <el-select\n v-model=\"selected\"\n filterable\n placeholder=\"搜索菜单...\"\n class=\"search-menu\"\n @change=\"onselected\"\n >\n <template\n v-for=\"group in filterRoutes\"\n :key=\"group.path\"\n >\n <template v-if=\"group.children !== undefined\">\n <el-option-group\n v-if=\"group.meta.menuType !== 0\"\n :key=\"group.path + '-'\"\n :label=\"group.meta.title\"\n >\n <template\n v-for=\"(item, index) in group.children\"\n :key=\"item.path\"\n >\n <el-option\n v-if=\"group.meta.menuType !== 0\"\n :label=\"(index === (group.children.length - 1) ? '└─' : '├─' )+ item.meta.title\"\n :value=\"item.path\"\n />\n </template>\n </el-option-group>\n </template>\n <template v-else>\n <el-option\n :label=\"'' + group.meta.title\"\n :value=\"group.path\"\n />\n </template>\n </template>\n </el-select>\n</template>\n<script>\nimport { mapGetters } from 'vuex'\nimport { cloneDeep } from 'lodash'\n\nfunction filterHidden(arr) {\n return arr.filter(each => {\n if (each.meta?.menuType === 0) {\n return false\n }\n if (each.children) {\n each.children = filterHidden(each.children)\n if (each.children.length === 0) {\n delete each.children\n }\n }\n return true\n })\n}\n\nexport default {\n data() {\n return {\n selected: ''\n }\n },\n computed: {\n ...mapGetters(['remoteRouter']),\n filterRoutes() {\n let routes = []\n this.remoteRouter.forEach(item => {\n routes = routes.concat(cloneDeep(item.routes))\n })\n return filterHidden(routes)\n }\n },\n methods: {\n onselected: function(to) {\n this.$router.push(to)\n this.selected = ''\n }\n }\n}\n</script>\n<style lang=\"scss\" scoped>\n.search-menu {\n width: 100%;\n padding: 15px 20px 0 20px;\n\n ::v-deep(.el-input__wrapper) {\n background-color: #304156;\n border: 1px dashed gray;\n border-radius: var(--el-input-border-radius,var(--el-border-radius-base));\n box-shadow: none;\n }\n}\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/runtime-core'\nimport { Module } from 'vuex'\nimport { MockApi } from './mock/types'\nimport { Sso } from './utils/sso'\n\nexport interface Nav {\n}\n\nexport type newSso = (params: Record<string, any>) => Sso\n\nexport interface Settings {\n title?: string,\n fixedHeader?: boolean,\n sidebarLogo?: boolean,\n logo?: string,\n closeNavNotice?: boolean,\n navBarNotice?: string,\n hasNewMessage?: boolean,\n showPageJsonSchema?: boolean,\n loginTips?: string,\n sso?: Record<string, newSso>,\n activeSsoKey?: string,\n ElementPlus?: Object,\n nav?: Nav[],\n whiteRoutes?: Array<string | RegExp>,\n tokenExpire?: number,\n defaultAvatar?: string\n}\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}\n\nexport interface LoginForm {\n username: string,\n password: string\n}\n\nexport interface LoginTicket {\n ticket: string\n}\n\nexport type ResourceIds = Array<Array<string>>\n\nexport interface UserInfo {\n id: number,\n name: string,\n token: string,\n avatar: string,\n nickname: string,\n role_ids: Array<string>,\n resource: ResourceIds\n}\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'\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 let route = this.$route\n if (route.meta.menuType === 0) {\n route = route.matched[route.matched.length - 2]\n }\n return this.$router.resolve(route.redirect ? route.redirect : route).fullPath\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 methods: {\n filterRoute(arr) {\n return arr.filter(item => {\n // console.log(item, [1, 2].indexOf(item.meta.menuType) > 0)\n // 1 目录 2 菜单\n return [MenuType.dir, MenuType.menu].indexOf(item.meta.menuType) !== -1\n }).map(item => {\n item = Object.assign({}, item)\n if (item.children) {\n item.children = this.filterRoute(item.children)\n }\n return item\n })\n }\n }\n})\n</script>\n<style scoped>\n::v-deep(.el-scrollbar__wrap) {\n overflow: scroll;\n}\n\n.menu-section {\n height: 30px;\n font-size: 14px;\n display: table-cell;\n vertical-align: bottom;\n padding-left: 20px;\n color: #97a8be;\n padding-top: 5px;\n}\n</style>\n","<template>\n <section class=\"app-main\">\n <router-view :key=\"$route.fullPath + key\" />\n <el-backtop :bottom=\"50\" />\n </section>\n</template>\n\n<script setup>\nimport { useRoute, onBeforeRouteLeave } from 'vue-router'\nconst route = useRoute()\nconst include = []\nconst key = ref(0)\nonBeforeRouteLeave(() => {\n if (route.meta?.keepAlive) {\n !!include.indexOf(route.name) && include.push(route.name)\n }\n key.value++\n})\n</script>\n\n<style scoped>\n.app-main {\n /*50 = navbar */\n min-height: calc(100vh - 50px);\n width: 100%;\n position: relative;\n overflow: hidden;\n padding: 20px;\n}\n\n.fixed-header + .app-main {\n padding-top: 50px;\n}\n</style>\n","<template>\n <div\n :class=\"classObj\"\n class=\"app-wrapper\"\n >\n <div\n v-if=\"device === 'mobile' && sidebar.opened\"\n class=\"drawer-bg\"\n @click=\"handleClickOutside\"\n />\n <Sidebar class=\"sidebar-container\" />\n <div class=\"main-container\">\n <div :class=\"{ 'fixed-header': fixedHeader }\">\n <Navbar />\n </div>\n <AppMain />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { Navbar, Sidebar, AppMain } from './components'\nimport { useEventListener } from '@vueuse/core'\nimport { useStore } from 'vuex'\n\nconst store = useStore()\nconst { body } = document\nconst WIDTH = 992 // refer to Bootstrap's responsive design\n\nconst sidebar = computed(() => {\n return store.state.app.sidebar\n})\n\nconst device = computed(() => {\n return store.state.app.device\n})\n\nconst fixedHeader = computed(() => {\n return store.state.settings.fixedHeader\n})\n\nconst classObj = computed(() => {\n return {\n hideSidebar: !sidebar.value.opened,\n openSidebar: sidebar.value.opened,\n withoutAnimation: sidebar.value.withoutAnimation,\n mobile: device.value === 'mobile'\n }\n})\n\nconst isMobile = () => {\n const rect = body.getBoundingClientRect()\n return rect.width - 1 < WIDTH\n}\n\nuseEventListener(window, 'resize', () => resizeHandler())\n\nconst handleClickOutside = () => {\n store.dispatch('app/closeSideBar', { withoutAnimation: false })\n}\n\nconst resizeHandler = () => {\n if (!document.hidden) {\n const ismobile = isMobile()\n store.dispatch('app/toggleDevice', ismobile ? 'mobile' : 'desktop')\n if (ismobile) {\n store.dispatch('app/closeSideBar', { withoutAnimation: true })\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../styles/mixin\";\n@import \"../../styles/variables\";\n\n.app-wrapper {\n @include clearfix;\n position: relative;\n height: 100%;\n width: 100%;\n\n &.mobile.openSidebar {\n position: fixed;\n top: 0;\n }\n}\n\n.drawer-bg {\n background: #000;\n opacity: 0.3;\n width: 100%;\n top: 0;\n height: 100%;\n position: absolute;\n z-index: 999;\n}\n\n.fixed-header {\n position: fixed;\n top: 0;\n right: 0;\n z-index: 9;\n width: calc(100% - #{$sideBarWidth});\n transition: width 0.28s;\n}\n\n.hideSidebar .fixed-header {\n width: calc(100% - 54px);\n}\n\n.mobile .fixed-header {\n width: 100%;\n}\n</style>\n","import { NavigationGuardNext } from 'vue-router'\nimport { getQueryParam, obj2Param, strVarReplace, createIFrame } from '@okiss/utils'\nimport store from '../../store'\nimport { newSso } from '../../types'\nimport { merge } from 'lodash'\n\nexport type SsoType = 'jump' | 'qrcode'\n\nexport interface Sso {\n flag(): string | undefined,\n\n type: SsoType,\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void,\n\n showQrCode(): void\n\n qrCodeUrl?: string,\n appid?: string,\n style?: string,\n redirectUri?: string,\n elId?: string\n}\n\nexport class BaseSso implements Sso {\n type: SsoType = 'qrcode'\n\n flag(): string | undefined {\n return undefined\n }\n\n jumpToLoginPage(next: NavigationGuardNext, path: string): void {\n next(path)\n }\n\n showQrCode(): void {\n }\n}\n\nexport class DingTalk extends BaseSso {\n type: SsoType = 'qrcode'\n qrCodeUrl = 'https://login.dingtalk.com/login/qrcode.htm?goto={goto}&style={style}'\n reloadUrl = 'https://oapi.dingtalk.com/connect/oauth2/sns_authorize?response_type=code&scope=snsapi_login&state=&appid={appid}&redirect_uri={redirect_uri}'\n\n elId: string = ''\n appid: string = ''\n iframe: HTMLIFrameElement = new HTMLIFrameElement()\n redirectUri: string = ''\n style: string = ''\n\n constructor(options: Record<string, any>) {\n super()\n }\n\n flag(): string | undefined {\n const code = getQueryParam('code')\n if (code) {\n return code\n }\n return undefined\n }\n\n showQrCode(): void {\n const getReloadUrl = (extra?: Record<string, any>) => {\n const data = {\n appid: this.appid,\n redirect_uri: encodeURIComponent(this.redirectUri)\n }\n return strVarReplace(this.reloadUrl, data) + '&' + obj2Param(extra || {})\n }\n const getQrCodeUrl = () => {\n const data = {\n goto: encodeURIComponent(getReloadUrl()),\n style: encodeURIComponent(this.style)\n }\n return strVarReplace(this.qrCodeUrl, data)\n }\n const onScanSuccess = (event: any) => {\n const { origin, data } = event\n if (origin === 'https://login.dingtalk.com') {\n window.location.href = getReloadUrl({ loginTmpCode: data })\n }\n }\n\n this.iframe.src = getQrCodeUrl()\n createIFrame({ elId: this.elId, attrs: this.iframe })\n if (typeof window.addEventListener !== 'undefined') {\n window.addEventListener(\n 'message',\n event => onScanSuccess(event),\n false\n )\n // @ts-ignore\n } else if (typeof window.attachEvent !== 'undefined') {\n // @ts-ignore\n window.attachEvent('onmessage', event => this.onScanSuccess(event))\n }\n }\n}\n\nconst defaultSso: Record<string, newSso> = {\n 'dingtalk': p => new DingTalk(p)\n}\n\nexport function allSso(): Record<string, newSso> {\n return merge<Record<string, newSso>, Record<string, newSso>>(store.state.settings.sso || {}, defaultSso)\n}\n\nexport default function(options: Record<string, any>): Sso | undefined {\n const sso = allSso()\n const key = store.state.settings.activeSsoKey || ''\n const active = sso[key]\n if (active !== undefined) {\n return active(options)\n }\n return undefined\n}\n\n","<template>\n <div id=\"login\">\n <h1 id=\"title\">登录</h1>\n <form id=\"form\">\n <input\n v-model=\"data.username\"\n type=\"text\"\n placeholder=\"用户名\"\n class=\"input\"\n >\n <input\n v-model=\"data.password\"\n type=\"password\"\n placeholder=\"密码\"\n class=\"input\"\n >\n <div\n class=\"input button\"\n @click=\"login\"\n >登录</div>\n <div class=\"tips\">\n <div>{{ tips }}</div>\n </div>\n <div class=\"sso\">\n <div id=\"sso-qrcode\" />\n <div\n v-for=\"item in Object.keys(allsso)\"\n :key=\"item\"\n >\n {{ item }}\n </div>\n </div>\n </form>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useRouter, useRoute } from 'vue-router'\nimport store from '@/store'\nimport sso, { allSso } from '../utils/sso'\n\nconst router = useRouter()\nconst route = useRoute()\nconst tips = computed(() => store.state.settings.loginTips)\nconst allsso = allSso()\n\nconst data = ref({\n username: '',\n password: ''\n})\n\nconst login = () => {\n if (data.value.username === '' || data.value.password === '') {\n ElMessage.error('请填写用户名和密码')\n return\n }\n store.dispatch('user/login', data.value).then(res => {\n router.push({ path: route.query?.redirect as string || '/' })\n })\n return\n}\n\nconst loginType = ref()\n\nconst changLoginChannel = () => {\n if (loginType.value) {\n return\n }\n const redirect_url = location.origin + location.pathname + '#' + (route.params.redirect || '')\n const params = {\n elId: 'sso-qrcode',\n redirect_uri: redirect_url,\n iframe: {\n width: '280px',\n height: '320px'\n }\n }\n sso(params)?.showQrCode()\n}\n</script>\n\n<style lang=\"scss\">\n$bg: #2d3a4b;\n$dark_gray: #889aa4;\n#login {\n width: 100%;\n height: 100%;\n background: $bg;\n text-align: center;\n display: flex;\n flex-direction: column;\n padding-top: 150px;\n #title {\n color: #fff;\n }\n #form {\n width: 300px;\n margin: 10px auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n .input {\n width: 300px;\n height: 40px;\n margin: 10px auto;\n padding: 10px;\n }\n .button {\n width: 300px;\n height: 40px;\n border: 1px solid #fff;\n background: #fff;\n }\n }\n .tips, .sso {\n padding: 10px 0;\n display: flex;\n justify-content: flex-start;\n color: gray;\n }\n}\n</style>\n","<template>\n <div class=\"not-found\">\n <svg\n width=\"380px\"\n height=\"500px\"\n viewBox=\"0 0 837 1045\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\"\n >\n <g\n id=\"Page-1\"\n stroke=\"none\"\n stroke-width=\"1\"\n fill=\"none\"\n fill-rule=\"evenodd\"\n sketch:type=\"MSPage\"\n >\n <path\n id=\"Polygon-1\"\n d=\"M353,9 L626.664028,170 L626.664028,487 L353,642 L79.3359724,487 L79.3359724,170 L353,9 Z\"\n stroke=\"#007FB2\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-2\"\n d=\"M78.5,529 L147,569.186414 L147,648.311216 L78.5,687 L10,648.311216 L10,569.186414 L78.5,529 Z\"\n stroke=\"#EF4A5B\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-3\"\n d=\"M773,186 L827,217.538705 L827,279.636651 L773,310 L719,279.636651 L719,217.538705 L773,186 Z\"\n stroke=\"#795D9C\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-4\"\n d=\"M639,529 L773,607.846761 L773,763.091627 L639,839 L505,763.091627 L505,607.846761 L639,529 Z\"\n stroke=\"#F2773F\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n <path\n id=\"Polygon-5\"\n d=\"M281,801 L383,861.025276 L383,979.21169 L281,1037 L179,979.21169 L179,861.025276 L281,801 Z\"\n stroke=\"#36B455\"\n stroke-width=\"6\"\n sketch:type=\"MSShapeGroup\"\n />\n </g>\n </svg>\n <div class=\"message-box\">\n <h1>404</h1>\n <p>Page not found</p>\n <div class=\"buttons-con\">\n <div class=\"action-link-wrap\">\n <!--<a onclick=\"history.back(-2)\" class=\"link-button link-back-button\">Go Back</a>-->\n <a\n href=\"\"\n class=\"link-button\"\n >Go to Home Page</a>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'NotFoundPage'\n}\n</script>\n\n<style scoped>\n.not-found {\n background-color: #2F3242;\n width: 100%;\n height: 100%;\n}\n\nsvg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -400px;\n}\n\n.message-box {\n height: 200px;\n width: 380px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: 50px;\n color: #FFF;\n font-family: Roboto;\n font-weight: 300;\n}\n\n.message-box h1 {\n font-size: 60px;\n line-height: 46px;\n margin-bottom: 40px;\n}\n\n.buttons-con .action-link-wrap {\n margin-top: 40px;\n}\n\n.buttons-con .action-link-wrap a {\n background: #68c950;\n padding: 8px 25px;\n border-radius: 4px;\n color: #FFF;\n font-weight: bold;\n font-size: 14px;\n transition: all 0.3s linear;\n cursor: pointer;\n text-decoration: none;\n margin-right: 10px\n}\n\n.buttons-con .action-link-wrap a:hover {\n background: #5A5C6C;\n color: #fff;\n}\n\n#Polygon-1, #Polygon-2, #Polygon-3, #Polygon-4, #Polygon-4, #Polygon-5 {\n animation: float 1s infinite ease-in-out alternate;\n}\n\n#Polygon-2 {\n animation-delay: .2s;\n}\n\n#Polygon-3 {\n animation-delay: .4s;\n}\n\n#Polygon-4 {\n animation-delay: .6s;\n}\n\n#Polygon-5 {\n animation-delay: .8s;\n}\n\n@keyframes float {\n 100% {\n transform: translateY(20px);\n }\n}\n\n@media (max-width: 450px) {\n svg {\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -250px;\n margin-left: -190px;\n }\n\n .message-box {\n top: 50%;\n left: 50%;\n margin-top: -100px;\n margin-left: -190px;\n text-align: center;\n }\n}\n</style>\n","import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'\nimport Dashboard from '../scaffold/dashboard.vue'\nimport Layout from '../scaffold/layout/index.vue'\nimport Login from '../scaffold/login.vue'\nimport NotFoundPage from '../scaffold/404.vue'\n\nconst routes: RouteRecordRaw[] = [\n {\n path: '/',\n component: Layout,\n redirect: '/dashboard',\n name: 'Root',\n meta: {\n menuType: 1\n },\n children: [\n {\n path: 'dashboard',\n name: 'Dashboard',\n component: Dashboard,\n meta: { title: 'Dashboard', icon: 'el-icon-help', menuType: 2, keepAlive: true }\n }\n ]\n },\n {\n path: '/login',\n component: Login,\n meta: { title: '用户登录', menuType: 0 },\n hidden: true\n },\n {\n path: '/404',\n component: NotFoundPage,\n meta: { menuType: 0 },\n hidden: true\n }\n]\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes\n})\n\nexport default router\n","import { Router } from 'vue-router'\nimport NProgress from 'nprogress'\nimport 'nprogress/nprogress.css'\nimport store from '../../store'\n\nNProgress.configure({ showSpinner: false })\n\nexport default function(router: Router) {\n router.beforeEach((to, form, next) => {\n NProgress.start()\n next()\n })\n router.afterEach((to) => {\n if (to.matched.length > 0) {\n store.commit('user/updateState', {\n key: 'path',\n value: to.matched[to.matched.length - 1].path.replace('(\\\\d+)', '')\n })\n }\n NProgress.done()\n })\n}\n","import store from '../../store'\n\nexport function isLodeRemoteRoutes(): boolean {\n return store.state.user.isLodeRemoteRoutes\n}\n\nexport function getWhiteRoutes(): Array<string | RegExp> {\n return store.state.settings.whiteRoutes || []\n}\n\nexport function getToken() {\n return store.state.user.token\n}\n","import { Router } from 'vue-router'\nimport store from '../../store'\nimport { getToken, getWhiteRoutes } from './func'\nimport sso from '../../utils/sso'\n\nexport default function(router: Router) {\n router.beforeEach(async(to, form, next) => {\n if (getWhiteRoutes().indexOf(to.path) !== -1) {\n next()\n return\n }\n\n const token = getToken()\n if (token) {\n next()\n return\n }\n\n const s = sso({})\n if (!s) {\n next(`/login?redirect=${to.path}`)\n return\n }\n\n const flag = s.flag()\n if (flag && await store.dispatch('user/login', { ticket: flag })) {\n next()\n return\n }\n s.jumpToLoginPage(next, `/login?redirect=${to.path}`)\n })\n}\n","<template>\n <ElAlert\n v-if=\"haveNotice\"\n v-bind=\"notice\"\n style=\"margin: 0 0 20px 0\"\n />\n <VLoading v-if=\"loading\" />\n <template v-else>\n <slot v-bind=\"schema\" />\n </template>\n</template>\n<script lang=\"ts\">\nimport VLoading from './VLoading.vue'\nimport { isObject, isString } from '@okiss/utils'\nimport store from '../store'\n\nexport default defineComponent({\n components: { VLoading },\n props: {\n schemaHandler: {\n type: Function,\n default: function(val: any, project: string) { return val }\n },\n schemaApi: {\n type: String,\n default: ''\n }\n },\n data() {\n return {\n loading: true,\n haveNotice: false,\n notice: {},\n schema: {}\n }\n },\n beforeCreate() {\n const token = this.$route.path.split('/').filter(item => item)\n const project = token.length > 1 ? token.slice(0, token.length - 1).join('/') : token[0]\n const api = '/schema' + this.$route.meta.path\n // const conf = { cacheTime: 10 * 60 * 1000, params: this.$route.params }\n const conf = { params: this.$route.params }\n this.$http.get(this.$props.schemaApi || api, conf).then(({ data }) => {\n this.loading = false\n if (data.notice !== undefined) {\n this.haveNotice = true\n if (isString(data.notice)) {\n this.notice = {\n title: data.notice\n }\n } else if (isObject(data.notice)) {\n this.notice = data.notice\n }\n delete data['notice']\n }\n this.schema = this.$props.schemaHandler(data, project)\n store.commit('app/SET_PAGE_JSON_SCHEMA', { page: this.$route.path, json: this.schema })\n })\n }\n})\n</script>\n","<template>\n <PageLoad :schema-handler=\"schemaHandler\">\n <template #default=\"slotProps\">\n <VTable v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup>\nimport { VTable } from '@okiss/lib'\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>\nimport { VForm } from '@okiss/lib'\nimport PageLoad from '../components/PageLoad.vue'\nimport { strVarReplace } from '@okiss/utils'\nimport { merge } from 'lodash'\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 }, 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 class=\"button\"\n type=\"text\"\n >操作按钮</el-button>\n </div>\n </template>\n <el-tree\n :data=\"treeData\"\n node-key=\"id\"\n v-bind=\"treeProps\"\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>{{ node.label }}</span>\n <span>\n <el-button\n v-if=\"data.label\"\n class=\"button\"\n type=\"text\"\n @click=\"() => onclick(data)\"\n >编辑</el-button>\n <el-button\n class=\"button\"\n type=\"text\"\n @click=\"() => append(data)\"\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 shadow=\"never\">\n <template #header>\n <div class=\"card-header\">\n <span>表单</span>\n <el-button\n class=\"button\"\n type=\"text\"\n >添加</el-button>\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/lib'\nimport { strVarReplace } from '@okiss/utils'\nexport default defineComponent({\n name: 'VTrue',\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 },\n data() {\n return {\n type: 0, // 1 新增, 2 编辑\n treeData: [],\n formData: {},\n treeProps: {\n showCheckbox: true,\n 'default-expand-all': true,\n 'expand-on-click-node': false,\n props: {\n children: 'children',\n label: 'label'\n }\n },\n formkey: 0,\n menuOptions: {}\n }\n },\n computed: {\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) {\n this.type = 1\n const newChild = { pid: data.id }\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 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 }, 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>\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</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 { 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 <div\n ref=\"chartDom\"\n class=\"chart\"\n style=\"height:100%;width:100%;\"\n />\n</template>\n\n<script lang=\"ts\">\n// @ts-nocheck\n// todo ts\nimport * as echarts from 'echarts'\nimport { debounce } from '@okiss/utils'\n\nexport default {\n name: 'VChart',\n props: {\n options: {\n type: Object,\n default: () => {}\n }\n },\n setup(props: { options: any }) {\n const chartDom = ref(null)\n let chart = null\n\n onMounted(() => {\n chart = shallowRef(echarts.init(chartDom.value))\n chart.value.setOption(props.options)\n window.addEventListener('resize', resize)\n resize()\n })\n\n const resize = debounce(() => chart.value.resize(), 200)\n\n onUnmounted(() => {\n window.removeEventListener('resize', resize)\n })\n\n return {\n chartDom,\n chart\n }\n }\n}\n</script>\n\n<style>\n.chart {\n width: 100%;\n height: 100%;\n min-height: 350px;\n /*min-width: 600px;*/\n}\n</style>\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 Chart from '../chart/index.vue'\nimport JsonView from '@okiss/jsonview'\nimport { VTable } from '@okiss/lib'\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: Chart,\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/lib'\nimport Part from './part.vue'\n// import store from '../../store'\nimport http from '../../utils/request'\n\nconst route = useRoute()\n\nonMounted(() => {\n // store.dispatch('app/toggleSideBar')\n})\n\nconst props = defineProps({\n filter: {\n type: Array,\n default: () => []\n },\n dataPart: {\n type: Array,\n default: () => []\n }\n})\n\nconst formData = ref<Record<string, any>>({})\nonBeforeMount(() => {\n props.filter?.forEach((item: any) => {\n if (item.default !== null) {\n formData.value[item.field] = item.default\n }\n })\n})\nconst formOptions = {\n inline: true,\n labelPosition: 'right',\n labelWidth: 'auto',\n submitButton: {\n text: '查询'\n },\n cancelButton: {\n text: '重置'\n }\n}\nconst key = ref(1)\nconst _filter = ref(props.filter)\nconst _dataPart = ref(props.dataPart)\n\nconst schemaapi = computed(() => {\n let id = route.params.id\n if (!id) {\n const token = route.path.split('/')\n id = token[token.length - 1]\n }\n return '/focusbi_report/view/' + id\n})\n\nconst onsubmit = (data: any) => {\n http.get(schemaapi.value, { params: data }).then(({ data }) => {\n _filter.value = data.filter\n _dataPart.value = data.dataPart\n key.value++\n })\n}\n</script>\n\n<style lang=\"scss\">\n.part-filter {\n margin-bottom: 15px;\n}\n\n</style>\n","<template>\n <PageLoad :schema-api=\"schemaapi\">\n <template #default=\"slotProps\">\n <Report v-bind=\"slotProps\" />\n </template>\n </PageLoad>\n</template>\n<script setup>\nimport PageLoad from '../components/PageLoad.vue'\nimport Report from '../components/report/index.vue'\nconst route = useRoute()\n\nconst schemaapi = computed(() => {\n let id = route.params.id\n if (!id) {\n const token = route.path.split('/')\n id = token[token.length - 1]\n }\n return '/focusbi_report/view/' + id\n})\n</script>\n","import type { RouteRecordRaw } from 'vue-router'\nimport { MenuType, OmsModule, PageInfo, PageType, RemoteModule } from '../types'\nimport { Component } from '@vue/runtime-core'\nimport { Container, Form, Report, Table, Tree } from '../scaffold'\n\nlet bu: Record<string, any> = {}\nexport function regViews(_bu: Record<string, any>) {\n bu = _bu\n}\n\nconst getComponent = (item: PageInfo): Component => {\n const loadCustom = (path: string): any => {\n const _path = './views/' + path + '.vue'\n if (bu && bu[_path] && bu[_path].default) {\n return bu[_path].default\n }\n console.error(`自定义组件不存在 ${item.name} ${item.view}`)\n return Container\n }\n if (item.path === '#') {\n return Container\n }\n switch (item.page_type) {\n case PageType.list:\n return Table\n case PageType.form:\n return Form\n case PageType.custom:\n case PageType.localComp:\n return loadCustom(item.view || '')\n case PageType.tree:\n return Tree\n case PageType.report:\n return Report\n case PageType.customSchema:\n return Container\n }\n return Container\n}\n\nfunction getPath(item: PageInfo) {\n let path = item.path\n if (item.type === MenuType.menu && item.page_type === PageType.entity) {\n path = '#'\n }\n // :id 默认转换为数字型匹配模式\n if (path.indexOf(':id') > -1 && path.indexOf(':id') + 3 === path.length) {\n path = path.replace(':id', ':id(\\\\d+)')\n }\n return path === '#'\n ? '/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: getName(item),\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 + '列表',\n component: Table,\n meta: {\n id: item.id + 99999,\n title: '列表',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id\n }\n }, {\n path: createForm,\n name: item.name + '新建',\n component: Form,\n meta: {\n id: item.id + 99999 + 1,\n title: '新建',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id\n }\n }, {\n path: createEdit,\n name: item.name + '编辑',\n component: Form,\n meta: {\n id: item.id + 99999 + 2,\n title: '编辑',\n hidden: true,\n menuType: MenuType.hidden,\n keepAlive: false,\n pageId: item.id\n }\n }]\n route.children = [...children, ...route.children as RouteRecordRaw[]]\n }\n if (route.children && route.children.length > 0) {\n let allChildHidden = true\n route.children.forEach(each => {\n if (each.meta && !each.meta.hidden) {\n allChildHidden = false\n }\n })\n if (route.meta) {\n route.meta.menuType = isShow ? MenuType.dir : MenuType.hidden\n }\n if (allChildHidden) {\n if (route.meta) {\n route.meta.menuType = MenuType.menu\n }\n let redirect = '/'\n for (let i = 0; i < route.children.length; i++) {\n if (route.children[i].path.indexOf('/:') === -1) {\n redirect = route.children[i].path\n break\n }\n }\n route.redirect = redirect\n route.path = '/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: '/:catchAll(.*)', 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 * as Icons from '@element-plus/icons-vue'\nimport { snakeToCamel } from '@okiss/utils'\nimport { Component } from '@vue/runtime-core'\n\ninterface Props {\n name: string\n}\n\nconst _icons = Icons as Record<string, Component>\n\nexport default defineComponent({\n name: 'VIcon',\n props: {\n name: {\n type: String,\n required: true\n }\n },\n setup(props: Props) {\n const _null = () => null\n if (props.name === undefined) {\n return _null\n }\n if (props.name.indexOf('el-') === 0) {\n const name = snakeToCamel(props.name.replace('el-icon-', ''), '-')\n const com = _icons[name]\n if (!com) {\n return _null\n }\n const comStyle = { height: '1em', width: '1em' }\n return () => <com style={comStyle}/>\n }\n if (_icons[props.name]) {\n const com = _icons[props.name]\n const comStyle = { height: '1em', width: '1em' }\n return () => <com style={comStyle}/>\n }\n if (props.name.indexOf('ra-') === 0) {\n return () => (<i class={'iconfont ' + props.name}/>)\n }\n return _null\n }\n})\n","import type { ObjectDirective } from '@vue/runtime-core'\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/runtime-core'\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/runtime-core'\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/runtime-core'\nimport bus from '../plugins/eventBus'\n\nfunction getElementPosition(element: HTMLElement | any, key: 'Top' | 'Left' | 'Right' | 'Botton') {\n let result = element[`offset${key}`]\n let current = element.offsetParent\n\n while (current) {\n result += current[`offset${key}`]\n current = current.offsetParent\n }\n\n return result\n}\n\nconst devtool: ObjectDirective = {\n mounted: (el, binding) => {\n if (el === null || !binding.value.dev) {\n return\n }\n let target : HTMLElement = el\n if (binding.value.parent) {\n for (let i = 0; i < binding.value.parent; i++) {\n if (target.parentElement) {\n target = target.parentElement\n }\n }\n }\n\n target.classList.add('devtool-hover')\n\n // button wrapper\n const wrapper = document.createElement('i')\n wrapper.className = 'devtool-item-wrapper'\n\n target.onmouseover = () => {\n wrapper.style.height = (target.offsetHeight + 30) + 'px'\n wrapper.style.width = (target.offsetWidth + 30) + 'px'\n wrapper.style.top = (getElementPosition(target, 'Top') - 15) + 'px'\n wrapper.style.left = (getElementPosition(target, 'Left') - 15) + 'px'\n }\n\n // create edit button\n const editBtn = document.createElement('span')\n editBtn.className = 'dev-action-edit'\n editBtn.title = '编辑'\n const editIcon = document.createElement('i')\n editIcon.className = 'iconfont ra-editor1'\n editBtn.appendChild(editIcon)\n editBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'edit', devId: binding.value.devId }})\n }\n wrapper.appendChild(editBtn)\n\n // create delete button\n const delBtn = document.createElement('span')\n delBtn.className = 'dev-action-del'\n delBtn.title = '删除'\n const delIcon = document.createElement('i')\n delIcon.className = 'iconfont ra-cut'\n delBtn.appendChild(delIcon)\n delBtn.onclick = (ev) => {\n bus.emit('dev-action', { event: ev, data: { type: 'del', devId: binding.value.devId }})\n }\n wrapper.appendChild(delBtn)\n\n // append wrapper as first child\n target.insertBefore(wrapper, target.firstChild)\n\n return\n }\n}\n\nexport default devtool\n","import type { App, Component, Directive } from 'vue'\nimport type { RouteRecordRaw } from 'vue-router'\nimport type { OmsOptions, OmsPlugin, UsePlugin } from './types'\nimport type { AxiosInstance } from 'axios'\nimport type { Module } from 'vuex'\n\nimport AppComp from './App.vue'\nimport { startMock, regMockApis } from './mock'\nimport { AxiosRequestConfig, instance } from './utils/request'\nimport { isObject } from '@okiss/utils'\nimport { merge } from 'lodash'\n\nimport 'normalize.css/normalize.css'\nimport './styles/index.scss'\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 VIcon from './components/VIcon'\nimport * as directives from './directive'\nimport { defaultOptions } from './default'\nimport { RegComponents, VForm, VTable } from '@okiss/lib'\nimport '@okiss/lib/style.css'\n\nlet http: any\n\nexport function useHttp(options?: AxiosRequestConfig): AxiosInstance {\n return options ? instance((merge(defaultOptions.axios, options))) : http\n}\n\nexport function createAdmin(omsOptions?: OmsOptions) {\n RegComponents({ VForm, VTable })\n const options = merge(defaultOptions, omsOptions)\n const app: App = createApp(AppComp)\n const omsPlugin = createOmsPlugin(options)\n const plugins = options.plugins || []\n plugins.unshift(omsPlugin)\n plugins.forEach(item => {\n regPlugin(app, item)\n })\n if (options?.mock) {\n startMock()\n }\n http = instance(options.axios)\n store.dispatch('setHttp', http).then()\n store.dispatch('settings/updateSettings', omsOptions?.settings).then()\n app.config.globalProperties.$http = http\n app.config.globalProperties.$router = router\n window.App = app\n 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","export function isDevMode(): boolean {\n return import.meta.env.DEV\n}\n\nexport function isProdMode(): boolean {\n return import.meta.env.PROD\n}\n\nexport function apiPrefix(): string {\n const api = import.meta.env.VITE_BASE_API\n if (api) {\n return api + ''\n }\n return ''\n}\n"],"names":["locale","zhCn","form","buttons","table","user","getToken","settings","app","builderSchema","name","setup","_createVNode","_createTextVNode","_sfc_main","_openBlock","_createElementBlock","_Fragment","_renderList","_hoisted_1","_toDisplayString","_normalizeClass","input","select","json","baseSchema","ctrlFormDefaultOptions","_withCtx","_createBlock","_mergeProps","Cache","_hoisted_3","_hoisted_6","_hoisted_9","_createElementVNode","_hoisted_4","_hoisted_5","_withScopeId","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps","useRoute","ElMessage","Login","VLoading","_createCommentVNode","_renderSlot","http","Container","Table","Form","Tree","Report","_icons","Icons","defineComponent","props","type","String","required","_null","undefined","indexOf","snakeToCamel","replace","com","comStyle","height","width","bus","AppComp"],"mappings":"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"}
|