From 2a7f3d2c46ffa956e289affa41747fd06f488de7 Mon Sep 17 00:00:00 2001 From: kailong321200875 <321200875@qq.com> Date: Sun, 24 Oct 2021 13:03:37 +0800 Subject: [PATCH] =?UTF-8?q?release:=20template=E7=89=88=E6=9C=AC=E5=8F=91?= =?UTF-8?q?=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 9 - src/axios-config/config.ts | 50 -- src/axios-config/index.ts | 32 - src/axios-config/request.ts | 70 -- src/components/Avatars/index.vue | 141 ---- src/components/Avatars/types.ts | 5 - src/components/CountTo/index.vue | 156 ----- src/components/CountTo/props.ts | 62 -- src/components/Editor/index.vue | 215 ------- src/components/Editor/types.ts | 13 - src/components/Highlight/index.tsx | 68 -- src/components/Preview/index.ts | 33 - src/components/Preview/index.vue | 429 ------------- src/components/Preview/props.ts | 28 - src/components/Preview/types.ts | 18 - src/components/Qrcode/index.vue | 270 -------- src/components/Qrcode/types.ts | 9 - src/directives/clipboard/index.ts | 71 -- src/directives/index.ts | 7 - src/hooks/work/useWork.ts | 235 ------- src/main.ts | 11 - src/mock/example/index.ts | 131 ---- src/mock/index.ts | 64 -- src/mock/role/admin-role.ts | 606 ------------------ src/mock/role/index.ts | 100 --- src/mock/role/test-role.ts | 460 ------------- src/mock/user/index.ts | 71 -- src/router/index.ts | 434 ------------- src/store/modules/permission.ts | 135 ++-- src/views/components-demo/avatars/index.vue | 84 --- src/views/components-demo/count-to/index.vue | 116 ---- src/views/components-demo/detail/index.vue | 218 ------- src/views/components-demo/dialog/index.vue | 27 - .../components-demo/echarts/echart-data.ts | 306 --------- src/views/components-demo/echarts/index.vue | 53 -- src/views/components-demo/editor/index.vue | 45 -- src/views/components-demo/highlight/index.vue | 38 -- src/views/components-demo/message/index.vue | 24 - src/views/components-demo/preview/index.vue | 113 ---- src/views/components-demo/qrcode/index.vue | 90 --- src/views/components-demo/search/data.ts | 149 ----- src/views/components-demo/search/index.vue | 95 --- src/views/components-demo/watermark/index.vue | 26 - src/views/dashboard/components/PanelGroup.vue | 147 ----- src/views/dashboard/index.vue | 2 - src/views/directives-demo/clipboard/index.vue | 61 -- src/views/example-demo/example-dialog/api.ts | 17 - .../example-dialog/components/Detail.vue | 96 --- .../example-dialog/components/InfoWrite.vue | 158 ----- .../example-dialog/components/types.ts | 18 - .../example-demo/example-dialog/index.vue | 135 ---- src/views/example-demo/example-page/api.ts | 17 - .../example-page/components/Detail.vue | 98 --- .../example-page/components/InfoWrite.vue | 160 ----- .../example-page/components/types.ts | 18 - .../example-demo/example-page/example-add.vue | 11 - .../example-page/example-detail.vue | 10 - .../example-page/example-edit.vue | 17 - src/views/example-demo/example-page/index.vue | 139 ---- src/views/guide/index.vue | 32 - src/views/guide/steps.ts | 40 -- src/views/icons/index.vue | 58 -- src/views/icons/svg-icons.ts | 9 - src/views/login/api.ts | 9 - src/views/login/index.vue | 26 +- src/views/role-demo/role/api.ts | 13 - .../role-demo/role/components/InfoWrite.vue | 201 ------ .../role-demo/role/components/InfoWrite2.vue | 225 ------- src/views/role-demo/role/index.vue | 124 ---- src/views/role-demo/user/api.ts | 5 - src/views/role-demo/user/index.vue | 90 --- src/views/table-demo/basic-table/index.vue | 61 -- src/views/table-demo/border-table/index.vue | 61 -- src/views/table-demo/custom-header/index.vue | 91 --- src/views/table-demo/custom-index/index.vue | 68 -- src/views/table-demo/expand-row/index.vue | 125 ---- .../table-demo/fixed-column-header/index.vue | 149 ----- src/views/table-demo/fixed-column/index.vue | 110 ---- src/views/table-demo/fixed-header/index.vue | 81 --- src/views/table-demo/fluid-height/index.vue | 147 ----- src/views/table-demo/merge-table/index.vue | 151 ----- src/views/table-demo/multi-header/index.vue | 145 ----- .../table-demo/multiple-choice/index.vue | 90 --- src/views/table-demo/page-table/index.vue | 79 --- src/views/table-demo/screen-table/index.vue | 124 ---- src/views/table-demo/single-choice/index.vue | 82 --- src/views/table-demo/sort-table/index.vue | 69 -- src/views/table-demo/state-table/index.vue | 85 --- src/views/table-demo/stripe-table/index.vue | 61 -- src/views/table-demo/total-table/index.vue | 148 ----- src/views/table-demo/tree-and-load/index.vue | 163 ----- src/vue-bus/index.ts | 13 - 92 files changed, 75 insertions(+), 9281 deletions(-) delete mode 100644 src/axios-config/config.ts delete mode 100644 src/axios-config/index.ts delete mode 100644 src/axios-config/request.ts delete mode 100644 src/components/Avatars/index.vue delete mode 100644 src/components/Avatars/types.ts delete mode 100644 src/components/CountTo/index.vue delete mode 100644 src/components/CountTo/props.ts delete mode 100644 src/components/Editor/index.vue delete mode 100644 src/components/Editor/types.ts delete mode 100644 src/components/Highlight/index.tsx delete mode 100644 src/components/Preview/index.ts delete mode 100644 src/components/Preview/index.vue delete mode 100644 src/components/Preview/props.ts delete mode 100644 src/components/Preview/types.ts delete mode 100644 src/components/Qrcode/index.vue delete mode 100644 src/components/Qrcode/types.ts delete mode 100644 src/directives/clipboard/index.ts delete mode 100644 src/directives/index.ts delete mode 100644 src/hooks/work/useWork.ts delete mode 100644 src/mock/example/index.ts delete mode 100644 src/mock/index.ts delete mode 100644 src/mock/role/admin-role.ts delete mode 100644 src/mock/role/index.ts delete mode 100644 src/mock/role/test-role.ts delete mode 100644 src/mock/user/index.ts delete mode 100644 src/views/components-demo/avatars/index.vue delete mode 100644 src/views/components-demo/count-to/index.vue delete mode 100644 src/views/components-demo/detail/index.vue delete mode 100644 src/views/components-demo/dialog/index.vue delete mode 100644 src/views/components-demo/echarts/echart-data.ts delete mode 100644 src/views/components-demo/echarts/index.vue delete mode 100644 src/views/components-demo/editor/index.vue delete mode 100644 src/views/components-demo/highlight/index.vue delete mode 100644 src/views/components-demo/message/index.vue delete mode 100644 src/views/components-demo/preview/index.vue delete mode 100644 src/views/components-demo/qrcode/index.vue delete mode 100644 src/views/components-demo/search/data.ts delete mode 100644 src/views/components-demo/search/index.vue delete mode 100644 src/views/components-demo/watermark/index.vue delete mode 100644 src/views/dashboard/components/PanelGroup.vue delete mode 100644 src/views/directives-demo/clipboard/index.vue delete mode 100644 src/views/example-demo/example-dialog/api.ts delete mode 100644 src/views/example-demo/example-dialog/components/Detail.vue delete mode 100644 src/views/example-demo/example-dialog/components/InfoWrite.vue delete mode 100644 src/views/example-demo/example-dialog/components/types.ts delete mode 100644 src/views/example-demo/example-dialog/index.vue delete mode 100644 src/views/example-demo/example-page/api.ts delete mode 100644 src/views/example-demo/example-page/components/Detail.vue delete mode 100644 src/views/example-demo/example-page/components/InfoWrite.vue delete mode 100644 src/views/example-demo/example-page/components/types.ts delete mode 100644 src/views/example-demo/example-page/example-add.vue delete mode 100644 src/views/example-demo/example-page/example-detail.vue delete mode 100644 src/views/example-demo/example-page/example-edit.vue delete mode 100644 src/views/example-demo/example-page/index.vue delete mode 100644 src/views/guide/index.vue delete mode 100644 src/views/guide/steps.ts delete mode 100644 src/views/icons/index.vue delete mode 100644 src/views/icons/svg-icons.ts delete mode 100644 src/views/login/api.ts delete mode 100644 src/views/role-demo/role/api.ts delete mode 100644 src/views/role-demo/role/components/InfoWrite.vue delete mode 100644 src/views/role-demo/role/components/InfoWrite2.vue delete mode 100644 src/views/role-demo/role/index.vue delete mode 100644 src/views/role-demo/user/api.ts delete mode 100644 src/views/role-demo/user/index.vue delete mode 100644 src/views/table-demo/basic-table/index.vue delete mode 100644 src/views/table-demo/border-table/index.vue delete mode 100644 src/views/table-demo/custom-header/index.vue delete mode 100644 src/views/table-demo/custom-index/index.vue delete mode 100644 src/views/table-demo/expand-row/index.vue delete mode 100644 src/views/table-demo/fixed-column-header/index.vue delete mode 100644 src/views/table-demo/fixed-column/index.vue delete mode 100644 src/views/table-demo/fixed-header/index.vue delete mode 100644 src/views/table-demo/fluid-height/index.vue delete mode 100644 src/views/table-demo/merge-table/index.vue delete mode 100644 src/views/table-demo/multi-header/index.vue delete mode 100644 src/views/table-demo/multiple-choice/index.vue delete mode 100644 src/views/table-demo/page-table/index.vue delete mode 100644 src/views/table-demo/screen-table/index.vue delete mode 100644 src/views/table-demo/single-choice/index.vue delete mode 100644 src/views/table-demo/sort-table/index.vue delete mode 100644 src/views/table-demo/state-table/index.vue delete mode 100644 src/views/table-demo/stripe-table/index.vue delete mode 100644 src/views/table-demo/total-table/index.vue delete mode 100644 src/views/table-demo/tree-and-load/index.vue delete mode 100644 src/vue-bus/index.ts diff --git a/package.json b/package.json index 00a6ad8..a932c30 100644 --- a/package.json +++ b/package.json @@ -26,26 +26,17 @@ }, "dependencies": { "@element-plus/icons": "^0.0.11", - "@vueuse/core": "^6.5.3", - "axios": "^0.23.0", - "clipboard": "^2.0.8", "echarts": "^5.2.1", "echarts-wordcloud": "^2.0.0", "element-plus": "1.1.0-beta.24", - "highlight.js": "^11.3.1", - "intro.js": "^4.2.2", "lodash-es": "^4.17.21", - "mitt": "^3.0.0", - "mockjs": "^1.1.0", "nprogress": "^0.2.0", "path-browserify": "^1.0.1", "path-to-regexp": "^6.2.0", "pinia": "^2.0.0-rc.13", - "qrcode": "^1.4.4", "qs": "^6.10.1", "vue": "^3.2.16", "vue-router": "^4.0.11", - "wangeditor": "^4.7.9", "web-storage-cache": "^1.1.1" }, "devDependencies": { diff --git a/src/axios-config/config.ts b/src/axios-config/config.ts deleted file mode 100644 index f380c39..0000000 --- a/src/axios-config/config.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * request全局配置 - */ - -const config: { - base_url: { - base: string - dev: string - pro: string - test: string - } - result_code: number | string - default_headers: 'application/json' | 'application/x-www-form-urlencoded' | 'multipart/form-data' - request_timeout: number -} = { - /** - * api请求基础路径 - */ - base_url: { - // 开发环境接口前缀 - base: 'http://mockjs.test.cn', - - // 打包开发环境接口前缀 - dev: 'http://mockjs.test.cn', - - // 打包生产环境接口前缀 - pro: 'http://mockjs.test.cn', - - // 打包测试环境接口前缀 - test: 'http://mockjs.test.cn' - }, - - /** - * 接口成功返回状态码 - */ - result_code: '0000', - - /** - * 接口请求超时时间 - */ - request_timeout: 60000, - - /** - * 默认接口请求类型 - * 可选值:application/x-www-form-urlencoded multipart/form-data - */ - default_headers: 'application/json' -} - -export default config diff --git a/src/axios-config/index.ts b/src/axios-config/index.ts deleted file mode 100644 index adbfa49..0000000 --- a/src/axios-config/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import request from './request' - -import { useAppStoreWithOut } from '@/store/modules/app' -const appStore = useAppStoreWithOut() - -import config from './config' - -import { AxiosPromise } from 'axios' - -const { default_headers } = config - -function fetch({ - url, - method, - params, - data, - headersType, - responseType -}: FetchConfig): AxiosPromise { - return request({ - url: url, - method, - params: appStore.getRequestTime ? { time: new Date().getTime(), ...(params || {}) } : params, - data, - responseType: responseType, - headers: { - 'Content-Type': headersType || default_headers - } - }) -} - -export default fetch diff --git a/src/axios-config/request.ts b/src/axios-config/request.ts deleted file mode 100644 index 46b0509..0000000 --- a/src/axios-config/request.ts +++ /dev/null @@ -1,70 +0,0 @@ -import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios' - -import { ElMessage } from 'element-plus' - -import qs from 'qs' - -import config from './config' - -const { result_code, base_url } = config - -export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH as string] - -// 创建axios实例 -const service: AxiosInstance = axios.create({ - baseURL: PATH_URL, // api 的 base_url - timeout: config.request_timeout // 请求超时时间 -}) - -// request拦截器 -service.interceptors.request.use( - (config: AxiosRequestConfig) => { - if ( - config.method === 'post' && - (config.headers as any)['Content-Type'] === 'application/x-www-form-urlencoded' - ) { - config.data = qs.stringify(config.data) - } - // get参数编码 - if (config.method === 'get' && config.params) { - let url = config.url as string - url += '?' - const keys = Object.keys(config.params) - for (const key of keys) { - if (config.params[key] !== void 0 && config.params[key] !== null) { - url += `${key}=${encodeURIComponent(config.params[key])}&` - } - } - url = url.substring(0, url.length - 1) - config.params = {} - config.url = url - } - return config - }, - (error: AxiosError) => { - // Do something with request error - console.log(error) // for debug - Promise.reject(error) - } -) - -// response 拦截器 -service.interceptors.response.use( - (response: AxiosResponse) => { - if (response.config.responseType === 'blob') { - // 如果是文件流,直接过 - return response - } else if (response.data.code === result_code) { - return response.data - } else { - ElMessage.error(response.data.message) - } - }, - (error: AxiosError) => { - console.log('err' + error) // for debug - ElMessage.error(error.message) - return Promise.reject(error) - } -) - -export default service diff --git a/src/components/Avatars/index.vue b/src/components/Avatars/index.vue deleted file mode 100644 index b5c4a2f..0000000 --- a/src/components/Avatars/index.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - diff --git a/src/components/Avatars/types.ts b/src/components/Avatars/types.ts deleted file mode 100644 index ee72ae9..0000000 --- a/src/components/Avatars/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface AvatarConfig { - text: string - type?: string - url?: string -} diff --git a/src/components/CountTo/index.vue b/src/components/CountTo/index.vue deleted file mode 100644 index b9be7e3..0000000 --- a/src/components/CountTo/index.vue +++ /dev/null @@ -1,156 +0,0 @@ - - diff --git a/src/components/CountTo/props.ts b/src/components/CountTo/props.ts deleted file mode 100644 index 793c608..0000000 --- a/src/components/CountTo/props.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { PropType } from 'vue' -export const countToProps = { - startVal: { - type: Number as PropType, - required: false, - default: 0 - }, - endVal: { - type: Number as PropType, - required: false, - default: 2017 - }, - duration: { - type: Number as PropType, - required: false, - default: 3000 - }, - autoplay: { - type: Boolean as PropType, - required: false, - default: true - }, - decimals: { - type: Number as PropType, - required: false, - default: 0, - validator(value: number) { - return value >= 0 - } - }, - decimal: { - type: String as PropType, - required: false, - default: '.' - }, - separator: { - type: String as PropType, - required: false, - default: ',' - }, - prefix: { - type: String as PropType, - required: false, - default: '' - }, - suffix: { - type: String as PropType, - required: false, - default: '' - }, - useEasing: { - type: Boolean as PropType, - required: false, - default: true - }, - easingFn: { - type: Function as PropType<(t: number, b: number, c: number, d: number) => number>, - default(t: number, b: number, c: number, d: number) { - return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b - } - } -} diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue deleted file mode 100644 index 6648f19..0000000 --- a/src/components/Editor/index.vue +++ /dev/null @@ -1,215 +0,0 @@ - - - diff --git a/src/components/Editor/types.ts b/src/components/Editor/types.ts deleted file mode 100644 index 260669d..0000000 --- a/src/components/Editor/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface EditorConfig { - height?: number // 富文本高度 - zIndex?: number // 层级 - placeholder?: string // 提示文字 - focus?: boolean // 是否聚焦 - onchangeTimeout?: number // 几秒监听一次变化 - customAlert?: (s: string, t: string) => {} // 自定义提示 - menus?: string[] // 按钮菜单 - colors?: string[] // 颜色 - fontNames?: string[] // 字体 - lineHeights?: string[] // 行间距 - showFullScreen?: boolean // 是否全屏 -} diff --git a/src/components/Highlight/index.tsx b/src/components/Highlight/index.tsx deleted file mode 100644 index b9f478a..0000000 --- a/src/components/Highlight/index.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { defineComponent, PropType, computed, h } from 'vue' -export default defineComponent({ - name: 'Highlight', - props: { - tag: { - type: String as PropType, - default: 'span' - }, - keys: { - type: Array as PropType, - default: () => [] - }, - color: { - type: String as PropType, - default: '#2d8cf0' - } - }, - emits: ['click'], - setup(props, { emit }) { - const keyNodes = computed(() => { - return props.keys.map((key) => { - return h( - 'span', - { - onClick: () => { - emit('click', key) - }, - style: { - color: props.color, - cursor: 'pointer' - } - }, - key - ) - }) - }) - - function parseText(text: string) { - props.keys.forEach((key, index) => { - const regexp = new RegExp(key, 'g') - text = text.replace(regexp, `{{${index}}}`) - }) - return text.split(/{{|}}/) - } - - return { - keyNodes, - parseText - } - }, - render(props: any) { - if (!props.$slots.default) return null - const node = props.$slots.default()[0].children - if (!node) { - console.warn('Highlight组件的插槽必须要是文本') - return props.$slots.default()[0] - } - const textArray = props.parseText(node) - const regexp = /^[0-9]*$/ - const nodes = textArray.map((t: any) => { - if (regexp.test(t)) { - return props.keyNodes[Math.floor(t)] || t - } - return t - }) - return h(props.tag, nodes) - } -}) diff --git a/src/components/Preview/index.ts b/src/components/Preview/index.ts deleted file mode 100644 index 0294570..0000000 --- a/src/components/Preview/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import ImgPreview from './index.vue' -import { isClient } from '@/utils/validate' - -import type { Options, Props } from './types' - -import { createVNode, render } from 'vue' - -let instance: any = null - -export function createImgPreview(options: Options) { - if (!isClient) return - const { - imageList, - show = true, - index = 0, - onSelect = null, - onClose = null, - zIndex = 500 - } = options - - const propsData: Partial = {} - const container = document.createElement('div') - propsData.imageList = imageList - propsData.show = show - propsData.index = index - propsData.zIndex = zIndex - propsData.onSelect = onSelect - propsData.onClose = onClose - - document.body.appendChild(container) - instance = createVNode(ImgPreview, propsData) - render(instance, container) -} diff --git a/src/components/Preview/index.vue b/src/components/Preview/index.vue deleted file mode 100644 index d9bd6dc..0000000 --- a/src/components/Preview/index.vue +++ /dev/null @@ -1,429 +0,0 @@ - - - - - diff --git a/src/components/Preview/props.ts b/src/components/Preview/props.ts deleted file mode 100644 index 0a2bb67..0000000 --- a/src/components/Preview/props.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { PropType } from 'vue' - -export const previewProps = { - index: { - type: Number as PropType, - default: 0 - }, - zIndex: { - type: Number as PropType, - default: 100 - }, - show: { - type: Boolean as PropType, - default: false - }, - imageList: { - type: [Array] as PropType, - default: [] - }, - onClose: { - type: Function as PropType, - default: null - }, - onSelect: { - type: Function as PropType, - default: null - } -} diff --git a/src/components/Preview/types.ts b/src/components/Preview/types.ts deleted file mode 100644 index 891d712..0000000 --- a/src/components/Preview/types.ts +++ /dev/null @@ -1,18 +0,0 @@ -export interface Options { - show?: boolean - imageList: string[] - index?: number - zIndex?: number - onSelect?: Function | null - onClose?: Function | null -} - -export interface Props { - show: boolean - instance: Props - imageList: string[] - index: number - zIndex: number - onSelect: Function | null - onClose: Function | null -} diff --git a/src/components/Qrcode/index.vue b/src/components/Qrcode/index.vue deleted file mode 100644 index 8fba031..0000000 --- a/src/components/Qrcode/index.vue +++ /dev/null @@ -1,270 +0,0 @@ - - - - - diff --git a/src/components/Qrcode/types.ts b/src/components/Qrcode/types.ts deleted file mode 100644 index 86edb6f..0000000 --- a/src/components/Qrcode/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface LogoTypes { - src?: string - logoSize?: number - bgColor?: string - borderSize?: number - crossOrigin?: string - borderRadius?: number - logoRadius?: number -} diff --git a/src/directives/clipboard/index.ts b/src/directives/clipboard/index.ts deleted file mode 100644 index c502937..0000000 --- a/src/directives/clipboard/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -import Clipboard from 'clipboard' -import { Directive, DirectiveBinding } from 'vue' -import { Message } from '_c/Message' - -if (!Clipboard) { - throw new Error('you should npm install `clipboard` --save at first ') -} - -export const clipboard: Directive = { - beforeMount(el: HTMLElement, binding: DirectiveBinding) { - createdClipboard(el, binding.arg, binding.value) - }, - updated(el: HTMLElement | any, binding: DirectiveBinding) { - if (binding.arg === 'success') { - el._v_clipboard_success = binding.value - } else if (binding.arg === 'error') { - el._v_clipboard_error = binding.value - } else { - el._v_clipboard.text = function () { - return binding.value - } - el._v_clipboard.action = function () { - return 'copy' - } - } - }, - unmounted(el: HTMLElement | any, binding: DirectiveBinding) { - if (binding.arg === 'success') { - delete el._v_clipboard_success - } else if (binding.arg === 'error') { - delete el._v_clipboard_error - } else { - el._v_clipboard.destroy() - delete el._v_clipboard - } - } -} - -function createdClipboard(el: HTMLElement | any, arg: string | undefined, value: any) { - if (arg === 'success') { - el._v_clipboard_success = value - } else if (arg === 'error') { - el._v_clipboard_error = value - } else { - const clipboard = new Clipboard(el, { - text() { - return value - }, - action() { - return 'copy' - } - }) - clipboard.on('success', (e) => { - const callback = el._v_clipboard_success - if (callback) { - callback(e) - } else { - Message.success('复制成功') - } - }) - clipboard.on('error', (e) => { - const callback = el._v_clipboard_error - if (callback) { - callback(e) - } else { - Message.success('复制失败') - } - }) - el._v_clipboard = clipboard - } -} diff --git a/src/directives/index.ts b/src/directives/index.ts deleted file mode 100644 index 9fb6f77..0000000 --- a/src/directives/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { App } from 'vue' - -import { clipboard } from './clipboard' - -export function setupDirectives(app: App) { - app.directive('clipboard', clipboard) -} diff --git a/src/hooks/work/useWork.ts b/src/hooks/work/useWork.ts deleted file mode 100644 index ba019f7..0000000 --- a/src/hooks/work/useWork.ts +++ /dev/null @@ -1,235 +0,0 @@ -import { reactive, ref } from 'vue' -import { ElMessageBox } from 'element-plus' -import { Message } from '_c/Message' - -interface DefalutParams { - pageIndex: number // 页码 - pageSize: number // 页数 -} - -interface DelsParmas { - noDataText?: string // 没有选中数据时的提示 - text?: string // 删除前的提示 - hiddenVerify?: boolean // 是否隐藏前置判断 -} - -interface InitOption { - listFun?: Fn - delFun?: Fn -} - -interface DilogOption { - title?: string - width?: string -} - -export function useWork(option?: InitOption) { - const listFun: Nullable = option?.listFun || null - - const delFun: Nullable = option?.delFun || null - - // 请求接口的基本参数 - const defaultParams = reactive({ - pageIndex: 1, - pageSize: 10 - }) - - // 多选数据 - const selectionData = ref([]) - - // 表格数据 - const tableData = ref([]) - - // 表格加载状态 - const loading = ref(true) - - // 表格总条数 - const total = ref(0) - - // 是否展示弹窗 - const dialogVisible = ref(false) - - // 弹窗标题 - const dialogTitle = ref('') - - // 组件名称 - const comName = ref('') - - // 弹窗宽度 - const dialogWidth = ref('') - - // 传送的数据 - const rowData = ref>(null) - - // 需要传给后端的其他参数 - const otherParams = ref>({}) - - // 表格展示条目改变时候重置基本参数 - function sizeChange(val: number) { - loading.value = true - defaultParams.pageIndex = 1 - defaultParams.pageSize = val - } - - // 表格分页改变时候重置基本参数 - function currentChange(val: number) { - loading.value = true - defaultParams.pageIndex = val - } - - // 删除多选 - /** - * @param {Object} callBack - * @param {Object} config { - noDataText?: string // 没有选中数据时的提示 - text?: string // 删除前的提示 - hiddenVerify?: boolean // 是否隐藏前置判断 - } - */ - function delData(callBack: Fn, config: DelsParmas) { - if (!selectionData.value.length && config && !config.hiddenVerify) { - Message.warning((config && config.noDataText) || '请选择需要删除的数据!') - return - } - ElMessageBox.confirm((config && config.text) || '此操作将永久删除选中数据, 是否继续?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning' - }).then(async () => { - await callBack() - }) - } - - // 多选变化的时候 - function handleSelectionChange(selection: IObj) { - selectionData.value = selection - } - - // 改变弹窗dialogVisible - function toggleVisible(val = false) { - dialogVisible.value = val - } - - // 以下都是业务逻辑混入 - // 请求数据 - async function getList(data?: IObj) { - try { - const res = await (listFun as Fn)({ - params: Object.assign(otherParams.value, data || {}, defaultParams) - }) - if (res) { - // 返回结果可以自己更改 - console.log(res) - total.value = res.data.total - tableData.value = res.data.list - } - } finally { - loading.value = false - } - } - - // 查询 - function searchSubmit(data: IObj) { - // 该方法重置了一些默认参数 - currentChange(1) - getList(data) - } - - // 重置 - function resetSubmit(data: IObj) { - // 该方法重置了一些默认参数 - currentChange(1) - getList(data) - } - - // 展示多少条 - function handleSizeChange(val: number) { - // 该方法重置了一些默认参数 - sizeChange(val) - getList() - } - - // 展示第几页 - function handleCurrentChange(val: number) { - // 该方法重置了一些默认参数 - currentChange(val) - getList() - } - - // 删除多选 - function dels(item: IObj, single?: boolean, callback?: Fn) { - delData( - async () => { - let ids: Nullable = null - if (item.id) { - ids = single ? item.id : [item.id] - } else { - ids = selectionData.value.map((v: IObj) => { - return v.id - }) - } - const res = await (delFun as Fn)({ - data: { ids } - }) - if (res) { - Message.success('删除成功') - const pageIndex = - total.value % defaultParams.pageSize === (ids as IObj[]).length || - defaultParams.pageSize === 1 - ? defaultParams.pageIndex > 1 - ? defaultParams.pageIndex - 1 - : defaultParams.pageIndex - : defaultParams.pageIndex - currentChange(pageIndex) - getList() - callback && callback instanceof Function && callback() - } - }, - { hiddenVerify: item.id } - ) - } - - // 打开弹窗 - function open(row: Nullable, component: string, options?: DilogOption) { - comName.value = component - dialogTitle.value = - (options && options.title) || (!row ? '新增' : component === 'Detail' ? '详情' : '编辑') - dialogWidth.value = (options && options.width) || '55%' - rowData.value = row || null - toggleVisible(true) - } - - // 成功之后的回调 - function refreshTable(type: string) { - if (type === 'add') { - currentChange(1) - } - toggleVisible() - getList() - } - - return { - defaultParams, - selectionData, - tableData, - loading, - total, - dialogVisible, - dialogTitle, - comName, - dialogWidth, - rowData, - otherParams, - // delData, - handleSelectionChange, - toggleVisible, - getList, - searchSubmit, - resetSubmit, - handleSizeChange, - handleCurrentChange, - dels, - open, - refreshTable - } -} diff --git a/src/main.ts b/src/main.ts index 525a50e..50533ea 100644 --- a/src/main.ts +++ b/src/main.ts @@ -6,31 +6,20 @@ import router, { setupRouter } from './router' // 路由 import { setupStore } from './store' // 状态管理 -import { setupDirectives } from '@/directives' // 自定义指令 - import { setupGlobCom } from './components' -// import { setupElement } from '@/plugins/element-plus' - import '@/styles/index.less' import 'virtual:svg-icons-register' import './permission' // permission control -import { mockXHR } from '@/mock' -mockXHR() - const app = createApp(App) setupStore(app) // 引入状态管理 setupRouter(app) // 引入路由 -setupDirectives(app) - -// setupElement(app) - setupGlobCom(app) // 引入全局组件 router.isReady().then(() => { diff --git a/src/mock/example/index.ts b/src/mock/example/index.ts deleted file mode 100644 index c66cf48..0000000 --- a/src/mock/example/index.ts +++ /dev/null @@ -1,131 +0,0 @@ -import Mock from 'mockjs' -import { toAnyString } from '@/utils' - -let List: any[] = [] -const count = 100 - -const baseContent = - '

I am testing data, I am testing data.

' - -for (let i = 0; i < count; i++) { - List.push( - Mock.mock({ - id: toAnyString(), - // timestamp: +Mock.Random.date('T'), - author: '@first', - title: '@title(5, 10)', - content: baseContent, - importance: '@integer(1, 3)', - display_time: '@datetime', - pageviews: '@integer(300, 5000)' - // image_uri - }) - ) -} - -export default [ - // 列表接口 - { - url: 'http://mockjs.test.cn/example/list', - type: 'get', - response: (config: any) => { - const { title, pageIndex, pageSize } = config.query - - const mockList = List.filter((item) => { - if (title && item.title.indexOf(title) < 0) return false - return true - }) - const pageList = mockList.filter( - (_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1) - ) - - return { - code: '0000', - data: { - total: mockList.length, - list: pageList - } - } - } - }, - - // 删除接口 - { - url: 'http://mockjs.test.cn/example/delete', - type: 'post', - response: (config: any) => { - const ids = config.body.ids - if (!ids) { - return { - code: '500', - message: '请选择需要删除的数据' - } - } else { - let i = List.length - while (i--) { - if (ids.indexOf(List[i].id) !== -1) { - List.splice(i, 1) - } - } - return { - code: '0000', - data: 'success' - } - } - } - }, - - // 详情接口 - { - url: 'http://mockjs.test.cn/example/detail', - type: 'get', - response: (config: any) => { - const { id } = config.query - for (const example of List) { - if (example.id === id) { - return { - code: '0000', - data: example - } - } - } - } - }, - - // 保存接口 - { - url: 'http://mockjs.test.cn/example/save', - type: 'post', - response: (config: any) => { - const data = config.body - if (!data.id) { - List = [ - Object.assign(data, { - id: toAnyString(), - importance: Number(data.importance) - }) - ].concat(List) - return { - code: '0000', - data: 'success' - } - } else { - List.map((item) => { - if (item.id === data.id) { - for (const key in item) { - if (key === 'importance') { - item[key] = Number(data[key]) - } else { - item[key] = data[key] - } - } - } - }) - return { - code: '0000', - data: 'success' - } - } - } - } -] diff --git a/src/mock/index.ts b/src/mock/index.ts deleted file mode 100644 index 88f8cf1..0000000 --- a/src/mock/index.ts +++ /dev/null @@ -1,64 +0,0 @@ -import Mock from 'mockjs' -import { param2Obj } from '@/utils' - -import example from './example' -import user from './user' -import role from './role' - -const mocks = [...example, ...user, ...role] - -// for front mock -// please use it cautiously, it will redefine XMLHttpRequest, -// which will cause many of your third-party libraries to be invalidated(like progress event). -export function mockXHR() { - const MockJs: any = Mock - MockJs.XHR.prototype.proxy_send = MockJs.XHR.prototype.send - MockJs.XHR.prototype.send = function () { - if (this.custom.xhr) { - this.custom.xhr.withCredentials = this.withCredentials || false - - if (this.responseType) { - this.custom.xhr.responseType = this.responseType - } - } - /* eslint-disable */ - this.proxy_send(...arguments) - } - - function XHR2ExpressReqWrap(respond: any) { - return function (options: any) { - let result = null - if (respond instanceof Function) { - const { body, type, url } = options - // https://expressjs.com/en/4x/api.html#req - result = respond({ - method: type, - body: JSON.parse(body), - query: param2Obj(url) - }) - } else { - result = respond - } - return Mock.mock(result) - } - } - - for (const i of mocks) { - Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response)) - } -} - -// for mock server -const responseFake = (url: string, type: string, respond: any) => { - return { - url: new RegExp(`${url}`), - type: type || 'get', - response(req: any, res: any) { - res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) - } - } -} - -export default mocks.map((route) => { - return responseFake(route.url, route.type, route.response) -}) diff --git a/src/mock/role/admin-role.ts b/src/mock/role/admin-role.ts deleted file mode 100644 index e3096e8..0000000 --- a/src/mock/role/admin-role.ts +++ /dev/null @@ -1,606 +0,0 @@ -export const checkedNodes = [ - { - path: '/components-demo', - title: '功能组件', - name: 'ComponentsDemo', - children: [ - { - path: '/components-demo/echarts', - title: '图表', - name: 'EchartsDemo' - }, - { - path: '/components-demo/preview', - title: '图片预览', - name: 'PreviewDemo' - }, - { - path: '/components-demo/button', - title: '按钮', - name: 'ButtonDemo' - }, - { - path: '/components-demo/message', - title: '消息提示', - name: 'MessageDemo' - }, - { - path: '/components-demo/count-to', - title: '数字动画', - name: 'CountToDemo' - }, - { - path: '/components-demo/search', - title: '查询', - name: 'SearchDemo' - }, - { - path: '/components-demo/editor', - title: '富文本编辑器', - name: 'EditorDemo' - }, - { - path: '/components-demo/markdown', - title: 'markdown编辑器', - name: 'MarkdownDemo' - }, - { - path: '/components-demo/dialog', - title: '弹窗', - name: 'DialogDemo' - }, - { - path: '/components-demo/detail', - title: '详情', - name: 'DetailDemo' - }, - { - path: '/components-demo/qrcode', - title: '二维码', - name: 'QrcodeDemo' - }, - { - path: '/components-demo/avatars', - title: '头像组', - name: 'AvatarsDemo' - }, - { - path: '/components-demo/highlight', - title: '文字高亮', - name: 'HighlightDemo' - }, - { - path: '/components-demo/watermark', - name: 'WatermarkDemo', - title: '水印' - } - ] - }, - { - path: '/components-demo/echarts', - title: '图表', - name: 'EchartsDemo' - }, - { - path: '/components-demo/preview', - title: '图片预览', - name: 'PreviewDemo' - }, - { - path: '/components-demo/button', - title: '按钮', - name: 'ButtonDemo' - }, - { - path: '/components-demo/message', - title: '消息提示', - name: 'MessageDemo' - }, - { - path: '/components-demo/count-to', - title: '数字动画', - name: 'CountToDemo' - }, - { - path: '/components-demo/search', - title: '查询', - name: 'SearchDemo' - }, - { - path: '/components-demo/editor', - title: '富文本编辑器', - name: 'EditorDemo' - }, - { - path: '/components-demo/markdown', - title: 'markdown编辑器', - name: 'MarkdownDemo' - }, - { - path: '/components-demo/dialog', - title: '弹窗', - name: 'DialogDemo' - }, - { - path: '/components-demo/detail', - title: '详情', - name: 'DetailDemo' - }, - { - path: '/components-demo/qrcode', - title: '二维码', - name: 'QrcodeDemo' - }, - { - path: '/components-demo/avatars', - title: '头像组', - name: 'AvatarsDemo' - }, - { - path: '/components-demo/highlight', - title: '文字高亮', - name: 'HighlightDemo' - }, - { - path: '/components-demo/watermark', - name: 'WatermarkDemo', - title: '水印' - }, - { - path: '/table-demo', - title: '表格', - name: 'TableDemo', - children: [ - { - path: '/table-demo/basic-table', - title: '基础表格', - name: 'BasicTable' - }, - { - path: '/table-demo/page-table', - title: '分页表格', - name: 'PageTable' - }, - { - path: '/table-demo/stripe-table', - title: '带斑马纹表格', - name: 'StripeTable' - }, - { - path: '/table-demo/border-table', - title: '带边框表格', - name: 'BorderTable' - }, - { - path: '/table-demo/state-table', - title: '带状态表格', - name: 'StateTable' - }, - { - path: '/table-demo/fixed-header', - title: '固定表头', - name: 'FixedHeader' - }, - { - path: '/table-demo/fixed-column', - title: '固定列', - name: 'FixedColumn' - }, - { - path: '/table-demo/fixed-column-header', - title: '固定列和表头', - name: 'FixedColumnHeader' - }, - { - path: '/table-demo/fluid-height', - title: '流体高度', - name: 'FluidHeight' - }, - { - path: '/table-demo/multi-header', - title: '多级表头', - name: 'MultiHeader' - }, - { - path: '/table-demo/single-choice', - title: '单选', - name: 'SingleChoice' - }, - { - path: '/table-demo/multiple-choice', - title: '多选', - name: 'MultipleChoice' - }, - { - path: '/table-demo/sort-table', - title: '排序', - name: 'SortTable' - }, - { - path: '/table-demo/screen-table', - title: '筛选', - name: 'ScreenTable' - }, - { - path: '/table-demo/expand-row', - title: '展开行', - name: 'ExpandRow' - }, - { - path: '/table-demo/tree-and-load', - title: '树形数据与懒加载', - name: 'TreeAndLoad' - }, - { - path: '/table-demo/custom-header', - title: '自定义表头', - name: 'CustomHeader' - }, - { - path: '/table-demo/total-table', - title: '表尾合计行', - name: 'TotalTable' - }, - { - path: '/table-demo/merge-table', - title: '合并行或列', - name: 'MergeTable' - }, - { - path: '/table-demo/custom-index', - title: '自定义索引', - name: 'CustomIndex' - } - ] - }, - { - path: '/table-demo/basic-table', - title: '基础表格', - name: 'BasicTable' - }, - { - path: '/table-demo/page-table', - title: '分页表格', - name: 'PageTable' - }, - { - path: '/table-demo/stripe-table', - title: '带斑马纹表格', - name: 'StripeTable' - }, - { - path: '/table-demo/border-table', - title: '带边框表格', - name: 'BorderTable' - }, - { - path: '/table-demo/state-table', - title: '带状态表格', - name: 'StateTable' - }, - { - path: '/table-demo/fixed-header', - title: '固定表头', - name: 'FixedHeader' - }, - { - path: '/table-demo/fixed-column', - title: '固定列', - name: 'FixedColumn' - }, - { - path: '/table-demo/fixed-column-header', - title: '固定列和表头', - name: 'FixedColumnHeader' - }, - { - path: '/table-demo/fluid-height', - title: '流体高度', - name: 'FluidHeight' - }, - { - path: '/table-demo/multi-header', - title: '多级表头', - name: 'MultiHeader' - }, - { - path: '/table-demo/single-choice', - title: '单选', - name: 'SingleChoice' - }, - { - path: '/table-demo/multiple-choice', - title: '多选', - name: 'MultipleChoice' - }, - { - path: '/table-demo/sort-table', - title: '排序', - name: 'SortTable' - }, - { - path: '/table-demo/screen-table', - title: '筛选', - name: 'ScreenTable' - }, - { - path: '/table-demo/expand-row', - title: '展开行', - name: 'ExpandRow' - }, - { - path: '/table-demo/tree-and-load', - title: '树形数据与懒加载', - name: 'TreeAndLoad' - }, - { - path: '/table-demo/custom-header', - title: '自定义表头', - name: 'CustomHeader' - }, - { - path: '/table-demo/total-table', - title: '表尾合计行', - name: 'TotalTable' - }, - { - path: '/table-demo/merge-table', - title: '合并行或列', - name: 'MergeTable' - }, - { - path: '/table-demo/custom-index', - title: '自定义索引', - name: 'CustomIndex' - }, - { - path: '/directives-demo', - title: '自定义指令', - name: 'DirectivesDemo', - children: [ - { - path: '/directives-demo/clipboard', - title: 'Clipboard', - name: 'ClipboardDemo' - } - ] - }, - { - path: '/directives-demo/clipboard', - title: 'Clipboard', - name: 'ClipboardDemo' - }, - { - path: '/icon/index', - title: '图标', - name: 'Icons' - }, - { - path: '/level', - title: '多级菜单缓存', - name: 'Level', - children: [ - { - path: '/level/menu1', - title: 'Menu1', - name: 'Menu1Demo', - children: [ - { - path: '/level/menu1/menu1-1', - title: 'Menu1-1', - name: 'Menu11Demo', - children: [ - { - path: '/level/menu1/menu1-1/menu1-1-1', - title: 'Menu1-1-1', - name: 'Menu111Demo' - } - ] - }, - { - path: '/level/menu1/menu1-2', - title: 'Menu1-2', - name: 'Menu12Demo' - } - ] - }, - { - path: '/level/menu2', - title: 'Menu2', - name: 'Menu2Demo' - } - ] - }, - { - path: '/level/menu1', - title: 'Menu1', - name: 'Menu1Demo', - children: [ - { - path: '/level/menu1/menu1-1', - title: 'Menu1-1', - name: 'Menu11Demo', - children: [ - { - path: '/level/menu1/menu1-1/menu1-1-1', - title: 'Menu1-1-1', - name: 'Menu111Demo' - } - ] - }, - { - path: '/level/menu1/menu1-2', - title: 'Menu1-2', - name: 'Menu12Demo' - } - ] - }, - { - path: '/level/menu1/menu1-1', - title: 'Menu1-1', - name: 'Menu11Demo', - children: [ - { - path: '/level/menu1/menu1-1/menu1-1-1', - title: 'Menu1-1-1', - name: 'Menu111Demo' - } - ] - }, - { - path: '/level/menu1/menu1-1/menu1-1-1', - title: 'Menu1-1-1', - name: 'Menu111Demo' - }, - { - path: '/level/menu1/menu1-2', - title: 'Menu1-2', - name: 'Menu12Demo' - }, - { - path: '/level/menu2', - title: 'Menu2', - name: 'Menu2Demo' - }, - { - path: '/example-demo', - title: '综合实例', - name: 'ExampleDemo', - children: [ - { - path: '/example-demo/example-dialog', - title: '列表综合实例-弹窗', - name: 'ExampleDialog' - }, - { - path: '/example-demo/example-page', - title: '列表综合实例-页面', - name: 'ExamplePage' - }, - { - path: '/example-demo/example-add', - title: '列表综合实例-新增', - name: 'ExampleAdd' - }, - { - path: '/example-demo/example-edit', - title: '列表综合实例-编辑', - name: 'ExampleEdit' - }, - { - path: '/example-demo/example-detail', - title: '列表综合实例-详情', - name: 'ExampleDetail' - } - ] - }, - { - path: '/example-demo/example-dialog', - title: '列表综合实例-弹窗', - name: 'ExampleDialog' - }, - { - path: '/example-demo/example-page', - title: '列表综合实例-页面', - name: 'ExamplePage' - }, - { - path: '/example-demo/example-add', - title: '列表综合实例-新增', - name: 'ExampleAdd' - }, - { - path: '/example-demo/example-edit', - title: '列表综合实例-编辑', - name: 'ExampleEdit' - }, - { - path: '/example-demo/example-detail', - title: '列表综合实例-详情', - name: 'ExampleDetail' - }, - { - path: '/role-demo', - title: '权限管理', - name: 'RoleDemo', - children: [ - { - path: '/role-demo/user', - title: '用户管理', - name: 'User' - }, - { - path: '/role-demo/role', - title: '角色管理', - name: 'Role' - } - ] - }, - { - path: '/role-demo/user', - title: '用户管理', - name: 'User' - }, - { - path: '/role-demo/role', - title: '角色管理', - name: 'Role' - } -] - -export const checkedkeys = [ - '/components-demo', - '/components-demo/echarts', - '/components-demo/preview', - '/components-demo/button', - '/components-demo/message', - '/components-demo/count-to', - '/components-demo/search', - '/components-demo/editor', - '/components-demo/markdown', - '/components-demo/dialog', - '/components-demo/more', - '/components-demo/detail', - '/components-demo/qrcode', - '/components-demo/avatars', - '/components-demo/watermark', - '/table-demo', - '/table-demo/basic-table', - '/table-demo/page-table', - '/table-demo/stripe-table', - '/table-demo/border-table', - '/table-demo/state-table', - '/table-demo/fixed-header', - '/table-demo/fixed-column', - '/table-demo/fixed-column-header', - '/table-demo/fluid-height', - '/table-demo/multi-header', - '/table-demo/single-choice', - '/table-demo/multiple-choice', - '/table-demo/sort-table', - '/table-demo/screen-table', - '/table-demo/expand-row', - '/table-demo/tree-and-load', - '/table-demo/custom-header', - '/table-demo/total-table', - '/table-demo/merge-table', - '/table-demo/custom-index', - '/directives-demo', - '/directives-demo/clipboard', - '/icon/index', - '/level', - '/level/menu1', - '/level/menu1/menu1-1', - '/level/menu1/menu1-1/menu1-1-1', - '/level/menu1/menu1-2', - '/level/menu2', - '/example-demo', - '/example-demo/example-dialog', - '/example-demo/example-page', - '/example-demo/example-add', - '/example-demo/example-edit', - '/example-demo/example-detail', - '/role-demo', - '/role-demo/user', - '/role-demo/role' -] diff --git a/src/mock/role/index.ts b/src/mock/role/index.ts deleted file mode 100644 index fb4bd6e..0000000 --- a/src/mock/role/index.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { useCache } from '@/hooks/web/useCache' -const { wsCache } = useCache() - -import { checkedNodes, checkedkeys } from './admin-role' - -import { checkedRoleNodes } from './test-role' - -let List: { - roleName: string - id: string - checkedNodes: any[] - checkedkeys: any[] -}[] = wsCache.get('roleList') || [ - { - roleName: 'admin', - id: '1', - checkedNodes: checkedNodes, - checkedkeys: checkedkeys - }, - { - roleName: 'test', - id: '2', - checkedNodes: checkedRoleNodes, - checkedkeys: [] - } -] - -export default [ - // 列表接口 - { - url: 'http://mockjs.test.cn/role/list', - type: 'get', - response: (config: any) => { - const { roleName, pageIndex, pageSize } = config.query - - const mockList = List.filter((item) => { - if (roleName && item.roleName.indexOf(roleName) < 0) return false - return true - }) - const pageList = mockList.filter( - (_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1) - ) - - return { - code: '0000', - data: { - total: mockList.length, - list: pageList - } - } - } - }, - - // 详情接口 - { - url: 'http://mockjs.test.cn/role/detail', - type: 'get', - response: (config: any) => { - const { id } = config.query - for (const role of List) { - if (role.id === id) { - return { - code: '0000', - data: role - } - } - } - } - }, - - // 保存接口 - { - url: 'http://mockjs.test.cn/role/save', - type: 'post', - response: (config: any) => { - const data = config.body - if (!data.id) { - List = [data].concat(List) - return { - code: '0000', - data: 'success' - } - } else { - List.map((item) => { - if (item.id === data.id) { - for (const key in item) { - item[key] = data[key] - } - } - }) - // 存在缓存中,避免刷新没有掉 - wsCache.set('roleList', List) - return { - code: '0000', - data: 'success' - } - } - } - } -] diff --git a/src/mock/role/test-role.ts b/src/mock/role/test-role.ts deleted file mode 100644 index 30dd081..0000000 --- a/src/mock/role/test-role.ts +++ /dev/null @@ -1,460 +0,0 @@ -export const checkedRoleNodes = [ - { - path: '/components-demo', - component: '#', - redirect: '/components-demo/echarts', - name: 'ComponentsDemo', - meta: { - title: '功能组件', - icon: 'component', - alwaysShow: true - }, - children: [ - { - path: 'echarts', - component: 'views/components-demo/echarts/index', - name: 'EchartsDemo', - meta: { - title: '图表' - } - }, - { - path: 'preview', - component: 'views/components-demo/preview/index', - name: 'PreviewDemo', - meta: { - title: '图片预览' - } - }, - { - path: 'message', - component: 'views/components-demo/message/index', - name: 'MessageDemo', - meta: { - title: '消息提示' - } - }, - { - path: 'search', - component: 'views/components-demo/search/index', - name: 'SearchDemo', - meta: { - title: '查询' - } - }, - { - path: 'editor', - component: 'views/components-demo/editor/index', - name: 'EditorDemo', - meta: { - title: '富文本编辑器' - } - }, - // { - // path: 'markdown', - // component: 'views/components-demo/markdown/index', - // name: 'MarkdownDemo', - // meta: { - // title: 'markdown编辑器' - // } - // }, - { - path: 'dialog', - component: 'views/components-demo/dialog/index', - name: 'DialogDemo', - meta: { - title: '弹窗' - } - }, - { - path: 'detail', - component: 'views/components-demo/detail/index', - name: 'DetailDemo', - meta: { - title: '详情' - } - }, - { - path: 'qrcode', - component: 'views/components-demo/qrcode/index', - name: 'QrcodeDemo', - meta: { - title: '二维码' - } - }, - { - path: 'avatars', - component: 'views/components-demo/avatars/index', - name: 'AvatarsDemo', - meta: { - title: '头像组' - } - }, - { - path: 'highlight', - component: 'views/components-demo/highlight/index', - name: 'HighlightDemo', - meta: { - title: '文字高亮' - } - }, - { - path: 'watermark', - component: 'views/components-demo/watermark/index', - name: 'WatermarkDemo', - meta: { - title: '水印' - } - } - ] - }, - { - path: '/table-demo', - component: '#', - redirect: '/table-demo/basic-usage', - name: 'TableDemo', - meta: { - title: '表格', - icon: 'table', - alwaysShow: true - }, - children: [ - { - path: 'basic-table', - component: 'views/table-demo/basic-table/index', - name: 'BasicTable', - meta: { - title: '基础表格' - } - }, - { - path: 'page-table', - component: 'views/table-demo/page-table/index', - name: 'PageTable', - meta: { - title: '分页表格' - } - }, - { - path: 'stripe-table', - component: 'views/table-demo/stripe-table/index', - name: 'StripeTable', - meta: { - title: '带斑马纹表格' - } - }, - { - path: 'border-table', - component: 'views/table-demo/border-table/index', - name: 'BorderTable', - meta: { - title: '带边框表格' - } - }, - { - path: 'state-table', - component: 'views/table-demo/state-table/index', - name: 'StateTable', - meta: { - title: '带状态表格' - } - }, - { - path: 'fixed-header', - component: 'views/table-demo/fixed-header/index', - name: 'FixedHeader', - meta: { - title: '固定表头' - } - }, - { - path: 'fixed-column', - component: 'views/table-demo/fixed-column/index', - name: 'FixedColumn', - meta: { - title: '固定列' - } - }, - { - path: 'fixed-column-header', - component: 'views/table-demo/fixed-column-header/index', - name: 'FixedColumnHeader', - meta: { - title: '固定列和表头' - } - }, - { - path: 'fluid-height', - component: 'views/table-demo/fluid-height/index', - name: 'FluidHeight', - meta: { - title: '流体高度' - } - }, - { - path: 'multi-header', - component: 'views/table-demo/multi-header/index', - name: 'MultiHeader', - meta: { - title: '多级表头' - } - }, - { - path: 'single-choice', - component: 'views/table-demo/single-choice/index', - name: 'SingleChoice', - meta: { - title: '单选' - } - }, - { - path: 'multiple-choice', - component: 'views/table-demo/multiple-choice/index', - name: 'MultipleChoice', - meta: { - title: '多选' - } - }, - { - path: 'sort-table', - component: 'views/table-demo/sort-table/index', - name: 'SortTable', - meta: { - title: '排序' - } - }, - { - path: 'screen-table', - component: 'views/table-demo/screen-table/index', - name: 'ScreenTable', - meta: { - title: '筛选' - } - }, - { - path: 'expand-row', - component: 'views/table-demo/expand-row/index', - name: 'ExpandRow', - meta: { - title: '展开行' - } - }, - { - path: 'tree-and-load', - component: 'views/table-demo/tree-and-load/index', - name: 'TreeAndLoad', - meta: { - title: '树形数据与懒加载' - } - }, - { - path: 'custom-header', - component: 'views/table-demo/custom-header/index', - name: 'CustomHeader', - meta: { - title: '自定义表头' - } - }, - { - path: 'total-table', - component: 'views/table-demo/total-table/index', - name: 'TotalTable', - meta: { - title: '表尾合计行' - } - }, - { - path: 'merge-table', - component: 'views/table-demo/merge-table/index', - name: 'MergeTable', - meta: { - title: '合并行或列' - } - }, - { - path: 'custom-index', - component: 'views/table-demo/custom-index/index', - name: 'CustomIndex', - meta: { - title: '自定义索引' - } - } - ] - }, - { - path: '/icon', - component: '#', - name: 'IconsDemo', - meta: { - title: '图标', - icon: 'icon' - }, - children: [ - { - path: 'index', - component: 'views/icons/index', - name: 'Icons', - meta: { - title: '图标', - icon: 'icon' - } - } - ] - }, - { - path: '/level', - component: '#', - redirect: '/level/menu1/menu1-1/menu1-1-1', - name: 'Level', - meta: { - title: '多级菜单缓存', - icon: 'nested' - }, - children: [ - { - path: 'menu1', - name: 'Menu1Demo', - component: '##Menu1Demo', - redirect: '/level/menu1/menu1-1/menu1-1-1', - meta: { - title: 'Menu1' - }, - children: [ - { - path: 'menu1-1', - name: 'Menu11Demo', - component: '##Menu11Demo', - redirect: '/level/menu1/menu1-1/menu1-1-1', - meta: { - title: 'Menu1-1', - alwaysShow: true - }, - children: [ - { - path: 'menu1-1-1', - name: 'Menu111Demo', - component: 'views/level/menu111', - meta: { - title: 'Menu1-1-1' - } - } - ] - }, - { - path: 'menu1-2', - name: 'Menu12Demo', - component: 'views/level/menu12', - meta: { - title: 'Menu1-2' - } - } - ] - }, - { - path: 'menu2', - name: 'Menu2Demo', - component: 'views/level/menu2', - meta: { - title: 'Menu2' - } - } - ] - }, - { - path: '/example-demo', - component: '#', - name: 'ExampleDemo', - redirect: '/example-demo/example-dialog', - meta: { - alwaysShow: true, - icon: 'example', - title: '综合实例' - }, - children: [ - { - path: 'example-dialog', - component: 'views/example-demo/example-dialog/index', - name: 'ExampleDialog', - meta: { - title: '列表综合实例-弹窗' - } - }, - { - path: 'example-page', - component: 'views/example-demo/example-page/index', - name: 'ExamplePage', - meta: { - title: '列表综合实例-页面' - } - }, - { - path: 'example-add', - component: 'views/example-demo/example-page/example-add', - name: 'ExampleAdd', - meta: { - title: '列表综合实例-新增', - noTagsView: true, - noCache: true, - hidden: true, - showMainRoute: true, - activeMenu: '/example-demo/example-page' - } - }, - { - path: 'example-edit', - component: 'views/example-demo/example-page/example-edit', - name: 'ExampleEdit', - meta: { - title: '列表综合实例-编辑', - noTagsView: true, - noCache: true, - hidden: true, - showMainRoute: true, - activeMenu: '/example-demo/example-page' - } - }, - { - path: 'example-detail', - component: 'views/example-demo/example-page/example-detail', - name: 'ExampleDetail', - meta: { - title: '列表综合实例-详情', - noTagsView: true, - noCache: true, - hidden: true, - showMainRoute: true, - activeMenu: '/example-demo/example-page' - } - } - ] - }, - { - path: '/role-demo', - component: '#', - redirect: '/role-demo/user', - name: 'RoleDemo', - meta: { - title: '权限管理', - icon: 'user', - alwaysShow: true - }, - children: [ - { - path: 'user', - component: 'views/role-demo/user/index', - name: 'User', - meta: { - title: '用户管理' - } - }, - { - path: 'role', - component: 'views/role-demo/role/index', - name: 'Role', - meta: { - title: '角色管理' - } - } - ] - } -] diff --git a/src/mock/user/index.ts b/src/mock/user/index.ts deleted file mode 100644 index b7a9ce4..0000000 --- a/src/mock/user/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -const List: { - userName: string - password: string - role: string - roleId: string -}[] = [ - { - userName: 'admin', - password: 'admin', - role: 'admin', - roleId: '1' - }, - { - userName: 'test', - password: 'test', - role: 'test', - roleId: '2' - } -] - -export default [ - // 列表接口 - { - url: 'http://mockjs.test.cn/user/list', - type: 'get', - response: (config: any) => { - const { userName, pageIndex, pageSize } = config.query - - const mockList = List.filter((item) => { - if (userName && item.userName.indexOf(userName) < 0) return false - return true - }) - const pageList = mockList.filter( - (_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1) - ) - - return { - code: '0000', - data: { - total: mockList.length, - list: pageList - } - } - } - }, - - // 登录接口 - { - url: 'http://mockjs.test.cn/user/login', - type: 'post', - response: (config: any) => { - const data = config.body - let hasUser = false - for (const user of List) { - if (user.userName === data.userName && user.password === data.passWord) { - hasUser = true - return { - code: '0000', - data: user - } - } - } - if (!hasUser) { - return { - code: '500', - message: '账号或密码错误' - } - } - } - } -] diff --git a/src/router/index.ts b/src/router/index.ts index bdfe674..7a7071d 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -97,347 +97,10 @@ export const constantRouterMap: AppRouteRecordRaw[] = [ meta: { title: '文档', icon: 'documentation' } } ] - }, - { - path: '/guide', - component: Layout, - name: 'Guide', - meta: {}, - children: [ - { - path: 'index', - component: () => import('_v/guide/index.vue'), - name: 'GuideDemo', - meta: { - title: '引导页', - icon: 'guide' - } - } - ] } ] export const asyncRouterMap: AppRouteRecordRaw[] = [ - { - path: '/components-demo', - component: Layout, - redirect: '/components-demo/echarts', - name: 'ComponentsDemo', - meta: { - title: '功能组件', - icon: 'component', - alwaysShow: true - }, - children: [ - { - path: 'echarts', - component: () => import('_v/components-demo/echarts/index.vue'), - name: 'EchartsDemo', - meta: { - title: '图表' - } - }, - { - path: 'preview', - component: () => import('_v/components-demo/preview/index.vue'), - name: 'PreviewDemo', - meta: { - title: '图片预览' - } - }, - { - path: 'message', - component: () => import('_v/components-demo/message/index.vue'), - name: 'MessageDemo', - meta: { - title: '消息提示' - } - }, - { - path: 'count-to', - component: () => import('_v/components-demo/count-to/index.vue'), - name: 'CountToDemo', - meta: { - title: '数字动画' - } - }, - { - path: 'search', - component: () => import('_v/components-demo/search/index.vue'), - name: 'SearchDemo', - meta: { - title: '查询' - } - }, - { - path: 'editor', - component: () => import('_v/components-demo/editor/index.vue'), - name: 'EditorDemo', - meta: { - title: '富文本编辑器' - } - }, - { - path: 'dialog', - component: () => import('_v/components-demo/dialog/index.vue'), - name: 'DialogDemo', - meta: { - title: '弹窗' - } - }, - { - path: 'detail', - component: () => import('_v/components-demo/detail/index.vue'), - name: 'DetailDemo', - meta: { - title: '详情' - } - }, - { - path: 'qrcode', - component: () => import('_v/components-demo/qrcode/index.vue'), - name: 'QrcodeDemo', - meta: { - title: '二维码' - } - }, - { - path: 'avatars', - component: () => import('_v/components-demo/avatars/index.vue'), - name: 'AvatarsDemo', - meta: { - title: '头像组' - } - }, - { - path: 'highlight', - component: () => import('_v/components-demo/highlight/index.vue'), - name: 'HighlightDemo', - meta: { - title: '文字高亮' - } - }, - { - path: 'watermark', - component: () => import('_v/components-demo/watermark/index.vue'), - name: 'WatermarkDemo', - meta: { - title: '水印' - } - } - ] - }, - { - path: '/table-demo', - component: Layout, - redirect: '/table-demo/basic-table', - name: 'TableDemo', - meta: { - title: '表格', - icon: 'table', - alwaysShow: true - }, - children: [ - { - path: 'basic-table', - component: () => import('_v/table-demo/basic-table/index.vue'), - name: 'BasicTable', - meta: { - title: '基础表格' - } - }, - { - path: 'page-table', - component: () => import('_v/table-demo/page-table/index.vue'), - name: 'PageTable', - meta: { - title: '分页表格' - } - }, - { - path: 'stripe-table', - component: () => import('_v/table-demo/stripe-table/index.vue'), - name: 'StripeTable', - meta: { - title: '带斑马纹表格' - } - }, - { - path: 'border-table', - component: () => import('_v/table-demo/border-table/index.vue'), - name: 'BorderTable', - meta: { - title: '带边框表格' - } - }, - { - path: 'state-table', - component: () => import('_v/table-demo/state-table/index.vue'), - name: 'StateTable', - meta: { - title: '带状态表格' - } - }, - { - path: 'fixed-header', - component: () => import('_v/table-demo/fixed-header/index.vue'), - name: 'FixedHeader', - meta: { - title: '固定表头' - } - }, - { - path: 'fixed-column', - component: () => import('_v/table-demo/fixed-column/index.vue'), - name: 'FixedColumn', - meta: { - title: '固定列' - } - }, - { - path: 'fixed-column-header', - component: () => import('_v/table-demo/fixed-column-header/index.vue'), - name: 'FixedColumnHeader', - meta: { - title: '固定列和表头' - } - }, - { - path: 'fluid-height', - component: () => import('_v/table-demo/fluid-height/index.vue'), - name: 'FluidHeight', - meta: { - title: '流体高度' - } - }, - { - path: 'multi-header', - component: () => import('_v/table-demo/multi-header/index.vue'), - name: 'MultiHeader', - meta: { - title: '多级表头' - } - }, - { - path: 'single-choice', - component: () => import('_v/table-demo/single-choice/index.vue'), - name: 'SingleChoice', - meta: { - title: '单选' - } - }, - { - path: 'multiple-choice', - component: () => import('_v/table-demo/multiple-choice/index.vue'), - name: 'MultipleChoice', - meta: { - title: '多选' - } - }, - { - path: 'sort-table', - component: () => import('_v/table-demo/sort-table/index.vue'), - name: 'SortTable', - meta: { - title: '排序' - } - }, - { - path: 'screen-table', - component: () => import('_v/table-demo/screen-table/index.vue'), - name: 'ScreenTable', - meta: { - title: '筛选' - } - }, - { - path: 'expand-row', - component: () => import('_v/table-demo/expand-row/index.vue'), - name: 'ExpandRow', - meta: { - title: '展开行' - } - }, - { - path: 'tree-and-load', - component: () => import('_v/table-demo/tree-and-load/index.vue'), - name: 'TreeAndLoad', - meta: { - title: '树形数据与懒加载' - } - }, - { - path: 'custom-header', - component: () => import('_v/table-demo/custom-header/index.vue'), - name: 'CustomHeader', - meta: { - title: '自定义表头' - } - }, - { - path: 'total-table', - component: () => import('_v/table-demo/total-table/index.vue'), - name: 'TotalTable', - meta: { - title: '表尾合计行' - } - }, - { - path: 'merge-table', - component: () => import('_v/table-demo/merge-table/index.vue'), - name: 'MergeTable', - meta: { - title: '合并行或列' - } - }, - { - path: 'custom-index', - component: () => import('_v/table-demo/custom-index/index.vue'), - name: 'CustomIndex', - meta: { - title: '自定义索引' - } - } - ] - }, - { - path: '/directives-demo', - component: Layout, - redirect: '/directives-demo/clipboard', - name: 'DirectivesDemo', - meta: { - title: '自定义指令', - icon: 'clipboard', - alwaysShow: true - }, - children: [ - { - path: 'clipboard', - component: () => import('_v/directives-demo/clipboard/index.vue'), - name: 'ClipboardDemo', - meta: { - title: 'Clipboard' - } - } - ] - }, - { - path: '/icon', - component: Layout, - name: 'IconsDemo', - meta: {}, - children: [ - { - path: 'index', - component: () => import('_v/icons/index.vue'), - name: 'Icons', - meta: { - title: '图标', - icon: 'icon' - } - } - ] - }, { path: '/level', component: Layout, @@ -496,103 +159,6 @@ export const asyncRouterMap: AppRouteRecordRaw[] = [ } } ] - }, - { - path: '/example-demo', - component: Layout, - name: 'ExampleDemo', - redirect: '/example-demo/example-dialog', - meta: { - alwaysShow: true, - icon: 'example', - title: '综合实例' - }, - children: [ - { - path: 'example-dialog', - component: () => import('_v/example-demo/example-dialog/index.vue'), - name: 'ExampleDialog', - meta: { - title: '列表综合实例-弹窗' - } - }, - { - path: 'example-page', - component: () => import('_v/example-demo/example-page/index.vue'), - name: 'ExamplePage', - meta: { - title: '列表综合实例-页面' - } - }, - { - path: 'example-add', - component: () => import('_v/example-demo/example-page/example-add.vue'), - name: 'ExampleAdd', - meta: { - title: '列表综合实例-新增', - noTagsView: true, - noCache: true, - hidden: true, - showMainRoute: true, - activeMenu: '/example-demo/example-page' - } - }, - { - path: 'example-edit', - component: () => import('_v/example-demo/example-page/example-edit.vue'), - name: 'ExampleEdit', - meta: { - title: '列表综合实例-编辑', - noTagsView: true, - noCache: true, - hidden: true, - showMainRoute: true, - activeMenu: '/example-demo/example-page' - } - }, - { - path: 'example-detail', - component: () => import('_v/example-demo/example-page/example-detail.vue'), - name: 'ExampleDetail', - meta: { - title: '列表综合实例-详情', - noTagsView: true, - noCache: true, - hidden: true, - showMainRoute: true, - activeMenu: '/example-demo/example-page' - } - } - ] - }, - { - path: '/role-demo', - component: Layout, - redirect: '/role-demo/user', - name: 'RoleDemo', - meta: { - title: '权限管理', - icon: 'user', - alwaysShow: true - }, - children: [ - { - path: 'user', - component: () => import('_v/role-demo/user/index.vue'), - name: 'User', - meta: { - title: '用户管理' - } - }, - { - path: 'role', - component: () => import('_v/role-demo/role/index.vue'), - name: 'Role', - meta: { - title: '角色管理' - } - } - ] } ] diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index 73e998d..b6ab281 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -2,20 +2,20 @@ import { defineStore } from 'pinia' import { asyncRouterMap, constantRouterMap } from '@/router' import { deepClone } from '@/utils' import { AppRouteRecordRaw } from '@/router/types' -import { useCache } from '@/hooks/web/useCache' -const { wsCache } = useCache() -import { isExternal } from '@/utils/validate' +// import { useCache } from '@/hooks/web/useCache' +// const { wsCache } = useCache() +// import { isExternal } from '@/utils/validate' import path from 'path-browserify' -import { getParentLayout } from '@/router/utils' +// import { getParentLayout } from '@/router/utils' import { store } from '../index' -import { useAppStoreWithOut } from '@/store/modules/app' -const appStore = useAppStoreWithOut() +// import { useAppStoreWithOut } from '@/store/modules/app' +// const appStore = useAppStoreWithOut() -const modules = import.meta.glob('../../views/**/*.vue') +// const modules = import.meta.glob('../../views/**/*.vue') /* Layout */ -const Layout = () => import('@/layout/index.vue') +// const Layout = () => import('@/layout/index.vue') export interface PermissionState { routers: AppRouteRecordRaw[] @@ -55,15 +55,17 @@ export const usePermissionStore = defineStore({ generateRoutes(): Promise { return new Promise((resolve) => { // 路由权限控制 - let routerMap: AppRouteRecordRaw[] = [] - if (wsCache.get(appStore.getUserInfo).roleName === 'admin') { - // 模拟前端控制权限 - routerMap = generateRoutesFn(deepClone(asyncRouterMap, ['component'])) - } else { - // 模拟后端控制权限 - routerMap = getFilterRoutes(wsCache.get(appStore.getUserInfo).checkedNodes) - } - // const routerMap: AppRouteRecordRaw[] = generateRoutesFn(deepClone(asyncRouterMap, ['component'])) + // let routerMap: AppRouteRecordRaw[] = [] + // if (wsCache.get(appStore.getUserInfo).roleName === 'admin') { + // // 模拟前端控制权限 + // routerMap = generateRoutesFn(deepClone(asyncRouterMap, ['component'])) + // } else { + // // 模拟后端控制权限 + // routerMap = getFilterRoutes(wsCache.get(appStore.getUserInfo).checkedNodes) + // } + const routerMap: AppRouteRecordRaw[] = generateRoutesFn( + deepClone(asyncRouterMap, ['component']) + ) // 动态路由,404一定要放到最后面 this.addRouters = routerMap.concat([ { @@ -100,39 +102,38 @@ function generateRoutesFn(routes: AppRouteRecordRaw[], basePath = '/'): AppRoute for (const route of routes) { // skip some route if (route.meta && route.meta.hidden && !route.meta.showMainRoute) { - console.log(route) continue } - let onlyOneChild: Nullable = null + // let onlyOneChild: Nullable = null - if (route.children && route.children.length === 1 && !route.meta.alwaysShow) { - onlyOneChild = ( - isExternal(route.children[0].path) - ? route.children[0].path - : path.resolve(path.resolve(basePath, route.path), route.children[0].path) - ) as string - } + // if (route.children && route.children.length === 1 && !route.meta.alwaysShow) { + // onlyOneChild = ( + // isExternal(route.children[0].path) + // ? route.children[0].path + // : path.resolve(path.resolve(basePath, route.path), route.children[0].path) + // ) as string + // } let data: Nullable = null // 如不需要路由权限,可注释以下逻辑 // 权限过滤,通过获取登录信息里面的角色权限,动态的渲染菜单。 - const list = wsCache.get(appStore.getUserInfo).checkedNodes - // 开发者可以根据实际情况进行扩展 - for (const item of list) { - // 通过路径去匹配 - if (isExternal(item.path) && (onlyOneChild === item.path || route.path === item.path)) { - data = Object.assign({}, route) - } else { - const routePath = path.resolve(basePath, onlyOneChild || route.path) - if (routePath === item.path || (route.meta && route.meta.followRoute === item.path)) { - data = Object.assign({}, route) - } - } - } + // const list = wsCache.get(appStore.getUserInfo).checkedNodes + // // 开发者可以根据实际情况进行扩展 + // for (const item of list) { + // // 通过路径去匹配 + // if (isExternal(item.path) && (onlyOneChild === item.path || route.path === item.path)) { + // data = Object.assign({}, route) + // } else { + // const routePath = path.resolve(basePath, onlyOneChild || route.path) + // if (routePath === item.path || (route.meta && route.meta.followRoute === item.path)) { + // data = Object.assign({}, route) + // } + // } + // } // 如不需要路由权限,解注释下面一行 - // data = Object.assign({}, route) + data = Object.assign({}, route) // recursive child routes if (route.children && data) { @@ -146,34 +147,34 @@ function generateRoutesFn(routes: AppRouteRecordRaw[], basePath = '/'): AppRoute } // 模拟后端过滤路由 -function getFilterRoutes(routes: AppRouteRecordRaw[]): AppRouteRecordRaw[] { - const res: AppRouteRecordRaw[] = [] +// function getFilterRoutes(routes: AppRouteRecordRaw[]): AppRouteRecordRaw[] { +// const res: AppRouteRecordRaw[] = [] - for (const route of routes) { - const data: AppRouteRecordRaw | IObj = { - path: route.path, - name: route.name, - redirect: route.redirect - } - data.meta = Object.assign({}, route.meta || {}, { title: route.meta.title }) - if (route.component) { - // 动态加载路由文件,可根据实际情况进行自定义逻辑 - data.component = ( - (route.component as any) === '#' - ? Layout - : (route.component as any).includes('##') - ? getParentLayout((route.component as any).split('##')[1]) - : modules[`../../${route.component}.vue`] - ) as any - } - // recursive child routes - if (route.children) { - data.children = getFilterRoutes(route.children) - } - res.push(data as AppRouteRecordRaw) - } - return res -} +// for (const route of routes) { +// const data: AppRouteRecordRaw | IObj = { +// path: route.path, +// name: route.name, +// redirect: route.redirect +// } +// data.meta = Object.assign({}, route.meta || {}, { title: route.meta.title }) +// if (route.component) { +// // 动态加载路由文件,可根据实际情况进行自定义逻辑 +// data.component = ( +// (route.component as any) === '#' +// ? Layout +// : (route.component as any).includes('##') +// ? getParentLayout((route.component as any).split('##')[1]) +// : modules[`../../${route.component}.vue`] +// ) as any +// } +// // recursive child routes +// if (route.children) { +// data.children = getFilterRoutes(route.children) +// } +// res.push(data as AppRouteRecordRaw) +// } +// return res +// } export function usePermissionStoreWithOut() { return usePermissionStore(store) diff --git a/src/views/components-demo/avatars/index.vue b/src/views/components-demo/avatars/index.vue deleted file mode 100644 index c8939d6..0000000 --- a/src/views/components-demo/avatars/index.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - diff --git a/src/views/components-demo/count-to/index.vue b/src/views/components-demo/count-to/index.vue deleted file mode 100644 index fddbe08..0000000 --- a/src/views/components-demo/count-to/index.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - diff --git a/src/views/components-demo/detail/index.vue b/src/views/components-demo/detail/index.vue deleted file mode 100644 index c092c0a..0000000 --- a/src/views/components-demo/detail/index.vue +++ /dev/null @@ -1,218 +0,0 @@ - - - diff --git a/src/views/components-demo/dialog/index.vue b/src/views/components-demo/dialog/index.vue deleted file mode 100644 index b3f833c..0000000 --- a/src/views/components-demo/dialog/index.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - - - diff --git a/src/views/components-demo/echarts/echart-data.ts b/src/views/components-demo/echarts/echart-data.ts deleted file mode 100644 index 90282ab..0000000 --- a/src/views/components-demo/echarts/echart-data.ts +++ /dev/null @@ -1,306 +0,0 @@ -import { EChartsOption } from 'echarts' -import { EChartsOption as EChartsWordOption } from 'echarts-wordcloud' - -export const lineOptions: EChartsOption = { - xAxis: { - data: [ - '一月', - '二月', - '三月', - '四月', - '五月', - '六月', - '七月', - '八月', - '九月', - '十月', - '十一月', - '十二月' - ], - boundaryGap: false, - axisTick: { - show: false - } - }, - grid: { - left: 20, - right: 20, - bottom: 20, - top: 30, - containLabel: true - }, - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross' - }, - padding: [5, 10] - }, - yAxis: { - axisTick: { - show: false - } - }, - legend: { - data: ['预期', '实际'] - }, - series: [ - { - name: '预期', - smooth: true, - type: 'line', - data: [100, 120, 161, 134, 105, 160, 165, 114, 163, 185, 118, 123], - animationDuration: 2800, - animationEasing: 'cubicInOut' - }, - { - name: '实际', - smooth: true, - type: 'line', - itemStyle: {}, - data: [120, 82, 91, 154, 162, 140, 145, 250, 134, 56, 99, 123], - animationDuration: 2800, - animationEasing: 'quadraticOut' - } - ] -} - -export const pieOptions: EChartsOption = { - title: { - text: '用户访问来源', - left: 'center' - }, - tooltip: { - trigger: 'item', - formatter: '{a}
{b} : {c} ({d}%)' - }, - legend: { - orient: 'vertical', - left: 'left', - data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'] - }, - series: [ - { - name: '用户访问来源', - type: 'pie', - radius: '55%', - center: ['50%', '60%'], - data: [ - { value: 335, name: '直接访问' }, - { value: 310, name: '邮件营销' }, - { value: 234, name: '联盟广告' }, - { value: 135, name: '视频广告' }, - { value: 1548, name: '搜索引擎' } - ] - } - ] -} - -export const barOptions: EChartsOption = { - title: { - text: '每周用户活跃量', - left: 'center' - }, - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'shadow' - } - }, - xAxis: { - type: 'category', - data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], - axisTick: { - alignWithLabel: true - } - }, - yAxis: { - type: 'value' - }, - series: [ - { - name: '活跃量', - data: [13253, 34235, 26321, 12340, 24643, 1322, 1324], - type: 'bar' - } - ] -} - -export const pieOptions2: EChartsOption = { - title: { - text: '用户访问来源', - left: 'center' - }, - tooltip: { - trigger: 'item', - formatter: '{a}
{b} : {c} ({d}%)' - }, - legend: { - orient: 'vertical', - left: 'left' - }, - series: [ - { - name: '访问来源', - type: 'pie', - radius: '55%', - center: ['50%', '50%'], - data: [ - { - value: 335, - name: '直接访问' - }, - { - value: 310, - name: '邮件营销' - }, - { - value: 274, - name: '联盟广告' - }, - { - value: 235, - name: '视频广告' - }, - { - value: 400, - name: '搜索引擎' - } - ].sort(function (a, b) { - return a.value - b.value - }), - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)' - } - } - } - ] -} - -export const wordOptions: EChartsWordOption = { - tooltip: {}, - series: [ - { - type: 'wordCloud', - gridSize: 2, - sizeRange: [12, 50], - rotationRange: [-90, 90], - shape: 'pentagon', - width: 600, - height: 400, - drawOutOfBound: true, - textStyle: { - color: function () { - return ( - 'rgb(' + - [ - Math.round(Math.random() * 160), - Math.round(Math.random() * 160), - Math.round(Math.random() * 160) - ].join(',') + - ')' - ) - } - }, - emphasis: { - textStyle: { - shadowBlur: 10, - shadowColor: '#333' - } - }, - data: [ - { - name: 'Sam S Club', - value: 10000, - textStyle: { - color: 'black' - }, - emphasis: { - textStyle: { - color: 'red' - } - } - }, - { - name: 'Macys', - value: 6181 - }, - { - name: 'Amy Schumer', - value: 4386 - }, - { - name: 'Jurassic World', - value: 4055 - }, - { - name: 'Charter Communications', - value: 2467 - }, - { - name: 'Chick Fil A', - value: 2244 - }, - { - name: 'Planet Fitness', - value: 1898 - }, - { - name: 'Pitch Perfect', - value: 1484 - }, - { - name: 'Express', - value: 1112 - }, - { - name: 'Home', - value: 965 - }, - { - name: 'Johnny Depp', - value: 847 - }, - { - name: 'Lena Dunham', - value: 582 - }, - { - name: 'Lewis Hamilton', - value: 555 - }, - { - name: 'KXAN', - value: 550 - }, - { - name: 'Mary Ellen Mark', - value: 462 - }, - { - name: 'Farrah Abraham', - value: 366 - }, - { - name: 'Rita Ora', - value: 360 - }, - { - name: 'Serena Williams', - value: 282 - }, - { - name: 'NCAA baseball tournament', - value: 273 - }, - { - name: 'Point Break', - value: 265 - } - ] - } - ] -} diff --git a/src/views/components-demo/echarts/index.vue b/src/views/components-demo/echarts/index.vue deleted file mode 100644 index a6f404e..0000000 --- a/src/views/components-demo/echarts/index.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - - - diff --git a/src/views/components-demo/editor/index.vue b/src/views/components-demo/editor/index.vue deleted file mode 100644 index 39c5a2a..0000000 --- a/src/views/components-demo/editor/index.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - - - diff --git a/src/views/components-demo/highlight/index.vue b/src/views/components-demo/highlight/index.vue deleted file mode 100644 index fb589b8..0000000 --- a/src/views/components-demo/highlight/index.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - - - diff --git a/src/views/components-demo/message/index.vue b/src/views/components-demo/message/index.vue deleted file mode 100644 index f1584c2..0000000 --- a/src/views/components-demo/message/index.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - - - diff --git a/src/views/components-demo/preview/index.vue b/src/views/components-demo/preview/index.vue deleted file mode 100644 index bae6649..0000000 --- a/src/views/components-demo/preview/index.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - diff --git a/src/views/components-demo/qrcode/index.vue b/src/views/components-demo/qrcode/index.vue deleted file mode 100644 index d92e68a..0000000 --- a/src/views/components-demo/qrcode/index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - diff --git a/src/views/components-demo/search/data.ts b/src/views/components-demo/search/data.ts deleted file mode 100644 index f67fb9b..0000000 --- a/src/views/components-demo/search/data.ts +++ /dev/null @@ -1,149 +0,0 @@ -export const classicData = [ - { - label: '即时配送', - value: true, - itemType: 'switch', - field: 'delivery' - }, - { - label: '活动名称', - value: '', - itemType: 'input', - field: 'name', - placeholder: '活动名称', - clearable: true, - rules: [ - { - required: true, - message: '请输入活动名称' - } - ] - }, - { - label: '活动区域', - value: '', - itemType: 'select', - placeholder: '活动区域', - clearable: true, - field: 'region', - options: [ - { - title: '区域一', - value: 'fujian' - }, - { - title: '区域二', - value: 'beijing' - } - ], - rules: [ - { - itemType: 'string', - required: true, - message: '请选择活动区域' - } - ] - }, - { - label: '特殊资源', - value: '2', - itemType: 'radio', - field: 'resource', - radioType: 'button', // button or radio - options: [ - { - label: '线上品牌商赞助', - value: '1' - }, - { - label: '线下场地免费', - value: '2' - } - ] - }, - // { - // label: '组织机构', - // value: [], - // itemType: 'treeSelect', - // field: 'company', - // allowClear: true, - // placeholder: '请选择组织机构', - // treeCheckable: false, - // maxTagCount: 2, - // options: [ - // { - // title: 'Node1', - // value: '0-0', - // key: '0-0', - // children: [ - // { - // title: 'Child Node1', - // value: '0-0-0', - // key: '0-0-0' - // } - // ] - // }, - // { - // title: 'Node2', - // value: '0-1', - // key: '0-1', - // children: [ - // { - // title: 'Child Node3', - // value: '0-1-0', - // key: '0-1-0', - // disabled: true - // }, - // { - // title: 'Child Node4', - // value: '0-1-1', - // key: '0-1-1' - // }, - // { - // title: 'Child Node5', - // value: '0-1-2', - // key: '0-1-2' - // } - // ] - // } - // ] - // }, - { - label: '日选择器', - value: '', - itemType: 'datePicker', - field: 'date1', - clearable: true, - format: 'YYYY-MM-DD', - placeholder: '请选择日期' - }, - { - label: '月选择器', - value: '', - itemType: 'datePicker', - field: 'date2', - clearable: true, - format: 'YYYY-MM', - placeholder: '请选择日期' - }, - { - label: '范围选择器', - value: [], - itemType: 'datePicker', - field: 'date3', - clearable: true, - type: 'daterange', - rangeSeparator: '至', - startPlaceholder: '开始日期', - endPlaceholder: '结束日期' - }, - { - label: '周选择器', - value: '', - itemType: 'datePicker', - field: 'date4', - type: 'week', - clearable: true, - placeholder: '请选择日期' - } -] diff --git a/src/views/components-demo/search/index.vue b/src/views/components-demo/search/index.vue deleted file mode 100644 index 4d1c516..0000000 --- a/src/views/components-demo/search/index.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - - - diff --git a/src/views/components-demo/watermark/index.vue b/src/views/components-demo/watermark/index.vue deleted file mode 100644 index 7b08996..0000000 --- a/src/views/components-demo/watermark/index.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/src/views/dashboard/components/PanelGroup.vue b/src/views/dashboard/components/PanelGroup.vue deleted file mode 100644 index 51f89a9..0000000 --- a/src/views/dashboard/components/PanelGroup.vue +++ /dev/null @@ -1,147 +0,0 @@ - - - - - diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue index 72fa249..04fccd9 100644 --- a/src/views/dashboard/index.vue +++ b/src/views/dashboard/index.vue @@ -1,6 +1,5 @@