初始化仓库
This commit is contained in:
30
src/install/directives/copy.ts
Normal file
30
src/install/directives/copy.ts
Normal file
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* perm 操作权限处理
|
||||
* 指令用法:
|
||||
* <el-button v-perms="['auth.menu/edit']">编辑</el-button>
|
||||
*/
|
||||
|
||||
import useClipboard from 'vue-clipboard3'
|
||||
|
||||
import feedback from '@/utils/feedback'
|
||||
|
||||
const clipboard = 'data-clipboard-text'
|
||||
export default {
|
||||
mounted: (el: HTMLElement, binding: any) => {
|
||||
el.setAttribute(clipboard, binding.value)
|
||||
const { toClipboard } = useClipboard()
|
||||
|
||||
el.onclick = () => {
|
||||
toClipboard(el.getAttribute(clipboard)!)
|
||||
.then(() => {
|
||||
feedback.msgSuccess('复制成功')
|
||||
})
|
||||
.catch(() => {
|
||||
feedback.msgError('复制失败')
|
||||
})
|
||||
}
|
||||
},
|
||||
updated: (el: HTMLElement, binding: any) => {
|
||||
el.setAttribute(clipboard, binding.value)
|
||||
}
|
||||
}
|
||||
29
src/install/directives/perms.ts
Normal file
29
src/install/directives/perms.ts
Normal file
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* perm 操作权限处理
|
||||
* 指令用法:
|
||||
* <el-button v-perms="['auth.menu/edit']">编辑</el-button>
|
||||
*/
|
||||
|
||||
import useUserStore from '@/stores/modules/user'
|
||||
|
||||
export default {
|
||||
mounted: (el: HTMLElement, binding: any) => {
|
||||
const { value } = binding
|
||||
const userStore = useUserStore()
|
||||
const permissions = userStore.perms
|
||||
const all_permission = '*'
|
||||
if (Array.isArray(value)) {
|
||||
if (value.length > 0) {
|
||||
const hasPermission = permissions.some((key: string) => {
|
||||
return all_permission == key || value.includes(key)
|
||||
})
|
||||
|
||||
if (!hasPermission) {
|
||||
el.parentNode && el.parentNode.removeChild(el)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new Error('like v-perms="[\'auth.menu/edit\']"')
|
||||
}
|
||||
}
|
||||
}
|
||||
28
src/install/index.ts
Normal file
28
src/install/index.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import type { App } from 'vue'
|
||||
|
||||
const modules = import.meta.glob('./**/*', { eager: true })
|
||||
|
||||
// 安装方法,执行某一类相同操作
|
||||
function install(app: App<Element>) {
|
||||
Object.keys(modules).forEach((key) => {
|
||||
const name = key.replace(/(.*\/)*([^.]+).*/gi, '$2')
|
||||
const type = key.replace(/^\.\/([\w-]+).*/gi, '$1')
|
||||
const module: any = modules[key]
|
||||
if (module.default) {
|
||||
switch (type) {
|
||||
// 用于注册全局指令
|
||||
case 'directives':
|
||||
app.directive(name, module.default)
|
||||
break
|
||||
// 使用插件
|
||||
case 'plugins':
|
||||
typeof module.default === 'function' && module.default(app)
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export default {
|
||||
install
|
||||
}
|
||||
62
src/install/plugins/echart.ts
Normal file
62
src/install/plugins/echart.ts
Normal file
@ -0,0 +1,62 @@
|
||||
//引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
|
||||
|
||||
//引入柱状图图表,图表后缀都为 Chart
|
||||
import {
|
||||
BarChart,
|
||||
LineChart,
|
||||
MapChart,
|
||||
PictorialBarChart,
|
||||
PieChart,
|
||||
RadarChart,
|
||||
ScatterChart
|
||||
} from 'echarts/charts'
|
||||
// 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
|
||||
import {
|
||||
AriaComponent,
|
||||
CalendarComponent,
|
||||
DataZoomComponent,
|
||||
GraphicComponent,
|
||||
GridComponent,
|
||||
LegendComponent,
|
||||
ParallelComponent,
|
||||
PolarComponent,
|
||||
RadarComponent,
|
||||
TimelineComponent,
|
||||
TitleComponent,
|
||||
ToolboxComponent,
|
||||
TooltipComponent,
|
||||
VisualMapComponent
|
||||
} from 'echarts/components'
|
||||
import * as echarts from 'echarts/core'
|
||||
//标签自动布局,全局过渡动画等特性
|
||||
import { LabelLayout, UniversalTransition } from 'echarts/features'
|
||||
//引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
|
||||
import { CanvasRenderer } from 'echarts/renderers'
|
||||
|
||||
// 注册必须的组件
|
||||
echarts.use([
|
||||
LegendComponent,
|
||||
TitleComponent,
|
||||
TooltipComponent,
|
||||
GridComponent,
|
||||
PolarComponent,
|
||||
AriaComponent,
|
||||
ParallelComponent,
|
||||
BarChart,
|
||||
LineChart,
|
||||
PieChart,
|
||||
MapChart,
|
||||
RadarChart,
|
||||
PictorialBarChart,
|
||||
RadarComponent,
|
||||
ToolboxComponent,
|
||||
DataZoomComponent,
|
||||
VisualMapComponent,
|
||||
TimelineComponent,
|
||||
CalendarComponent,
|
||||
GraphicComponent,
|
||||
ScatterChart,
|
||||
CanvasRenderer,
|
||||
LabelLayout,
|
||||
UniversalTransition
|
||||
])
|
||||
12
src/install/plugins/element.ts
Normal file
12
src/install/plugins/element.ts
Normal file
@ -0,0 +1,12 @@
|
||||
//https://github.com/element-plus/element-plus/issues/7293
|
||||
import 'element-plus/es/components/dialog/style/css'
|
||||
|
||||
import * as ElementPlusIcons from '@element-plus/icons-vue'
|
||||
import type { App } from 'vue'
|
||||
|
||||
export default (app: App<Element>) => {
|
||||
// 全局注册ElementPlus图标
|
||||
for (const [key, component] of Object.entries(ElementPlusIcons)) {
|
||||
app.component(key, component)
|
||||
}
|
||||
}
|
||||
10
src/install/plugins/hljs.ts
Normal file
10
src/install/plugins/hljs.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import 'highlight.js/styles/github.css'
|
||||
|
||||
import hljsVuePlugin from '@highlightjs/vue-plugin'
|
||||
import hljs from 'highlight.js'
|
||||
import type { App } from 'vue'
|
||||
console.log(hljs)
|
||||
|
||||
export default (app: App<Element>) => {
|
||||
app.use(hljsVuePlugin)
|
||||
}
|
||||
7
src/install/plugins/pinia.ts
Normal file
7
src/install/plugins/pinia.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import type { App } from 'vue'
|
||||
|
||||
import store from '@/stores'
|
||||
|
||||
export default (app: App<Element>) => {
|
||||
app.use(store)
|
||||
}
|
||||
9
src/install/plugins/router.ts
Normal file
9
src/install/plugins/router.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import type { App } from 'vue'
|
||||
|
||||
import router from '@/router'
|
||||
import { registerRouteGuard } from '@/router/guard'
|
||||
|
||||
export default (app: App<Element>) => {
|
||||
registerRouteGuard(router)
|
||||
app.use(router)
|
||||
}
|
||||
Reference in New Issue
Block a user