You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.0 KiB
70 lines
2.0 KiB
import Vue from 'vue'
|
|
import router from './router'
|
|
import store from './store'
|
|
import App from './App.vue'
|
|
import ElementUI from 'element-ui';
|
|
import request from "./utils/request";
|
|
import 'element-ui/lib/theme-chalk/index.css';
|
|
import './style/theme/index.css'
|
|
import './style/theme/common.scss'
|
|
import 'core-js/stable';
|
|
import 'regenerator-runtime/runtime';
|
|
import '@/assets/css/fonts.css';
|
|
import LoadingService from './services/loading'
|
|
import { directive as clickaway } from 'vue-clickaway';
|
|
import GuipMessage from '@/components/GuipMessage/index';
|
|
import HeaderIcon from './utils/headerIcon'
|
|
// 复制到粘贴板
|
|
import clipboard from '@/utils/dirClipBoard';
|
|
import { modernCopyToClipboard } from '@/utils/clipboard';
|
|
//登陆
|
|
import { autoLoginByToken } from '@/utils/login'
|
|
|
|
function filterByPermission(data, targetPermission) {
|
|
return data.filter(item => {
|
|
// 检查主项权限
|
|
const hasMainPermission = item.permission?.includes(targetPermission);
|
|
|
|
// 检查子项权限(如果存在list)
|
|
const hasChildPermission = item.list?.some(
|
|
child => child.permission?.includes(targetPermission)
|
|
);
|
|
|
|
return hasMainPermission || hasChildPermission;
|
|
}).map(item => {
|
|
// 深拷贝避免污染原数据
|
|
const newItem = JSON.parse(JSON.stringify(item));
|
|
|
|
// 过滤子项
|
|
if (newItem.list) {
|
|
newItem.list = newItem.list.filter(
|
|
child => child.permission?.includes(targetPermission)
|
|
);
|
|
}
|
|
|
|
return newItem;
|
|
});
|
|
}
|
|
|
|
// 复制
|
|
Vue.prototype.$copy = modernCopyToClipboard;
|
|
Vue.prototype.$filterByPermission = filterByPermission;
|
|
Vue.prototype.$loadingFn = LoadingService;
|
|
Vue.config.productionTip = false;
|
|
// 请求
|
|
Vue.prototype.$http = request;
|
|
Vue.prototype.$token = ''
|
|
Vue.use(ElementUI);
|
|
Vue.use(GuipMessage)
|
|
Vue.use(clipboard);
|
|
|
|
Vue.directive('clickaway', clickaway);
|
|
Vue.mixin(HeaderIcon)
|
|
// ✅ 自动登录后再启动应用
|
|
autoLoginByToken().finally(() => {
|
|
new Vue({
|
|
router,
|
|
store,
|
|
render: h => h(App)
|
|
}).$mount('#app')
|
|
})
|
|
|