Commit f6c412f4 by chuzhixin

🎉代码规范强制使用单引号并取消行末分号

parent 17b70225
...@@ -3,24 +3,24 @@ module.exports = { ...@@ -3,24 +3,24 @@ module.exports = {
env: { env: {
node: true, node: true,
}, },
extends: ["plugin:vue/recommended", "@vue/prettier"], extends: ['plugin:vue/recommended', '@vue/prettier'],
rules: { rules: {
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off", 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
"vue/no-v-html": "off", 'vue/no-v-html': 'off',
}, },
parserOptions: { parserOptions: {
parser: "babel-eslint", parser: 'babel-eslint',
}, },
overrides: [ overrides: [
{ {
files: [ files: [
"**/__tests__/*.{j,t}s?(x)", '**/__tests__/*.{j,t}s?(x)',
"**/tests/unit/**/*.spec.{j,t}s?(x)", '**/tests/unit/**/*.spec.{j,t}s?(x)',
], ],
env: { env: {
jest: true, jest: true,
}, },
}, },
], ],
}; }
module.exports = { module.exports = {
extends: ["stylelint-config-recess-order", "stylelint-config-prettier"], extends: ['stylelint-config-recess-order', 'stylelint-config-prettier'],
}; }
module.exports = { module.exports = {
presets: ["@vue/cli-plugin-babel/preset"], presets: ['@vue/cli-plugin-babel/preset'],
}; }
const data = [ const data = [
{ {
title: "vue-admin-beautiful-pro 1.7版本已发布,点我提前体验", title: 'vue-admin-beautiful-pro 1.7版本已发布,点我提前体验',
url: "https://chu1204505056.gitee.io/vue-admin-beautiful-pro/#/index", url: 'https://chu1204505056.gitee.io/vue-admin-beautiful-pro/#/index',
}, },
{ {
title: "vue-admin-beautiful(antdv) vue3.0版本已发布,点我提前体验", title: 'vue-admin-beautiful(antdv) vue3.0版本已发布,点我提前体验',
url: "https://chu1204505056.gitee.io/vue-admin-beautiful-mini/#/index", url: 'https://chu1204505056.gitee.io/vue-admin-beautiful-mini/#/index',
}, },
]; ]
module.exports = [ module.exports = [
{ {
url: "/ad/getList", url: '/ad/getList',
type: "get", type: 'get',
response() { response() {
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
data, data,
}; }
}, },
}, },
]; ]
const data = [ const data = [
{ {
content: "在github上获得了第一个star,感恩一位名叫Bequiet2014的github用户", content: '在github上获得了第一个star,感恩一位名叫Bequiet2014的github用户',
timestamp: "2020-03-23", timestamp: '2020-03-23',
}, },
{ {
content: "增加更换主题功能", content: '增加更换主题功能',
timestamp: "2020-04-10", timestamp: '2020-04-10',
}, },
{ {
content: "大幅精简代码", content: '大幅精简代码',
timestamp: "2020-04-14", timestamp: '2020-04-14',
}, },
{ {
content: "修复群友反馈的bug", content: '修复群友反馈的bug',
timestamp: "2020-04-16", timestamp: '2020-04-16',
}, },
{ {
content: "剔除maptalks", content: '剔除maptalks',
timestamp: "2020-04-17", timestamp: '2020-04-17',
}, },
{ {
content: content:
"换行符统一修改为lf 支持苹果 linux windows协同开发 强制开启最严格eslint规则 不要哭 严格是有好处的", '换行符统一修改为lf 支持苹果 linux windows协同开发 强制开启最严格eslint规则 不要哭 严格是有好处的',
timestamp: "2020-04-17", timestamp: '2020-04-17',
}, },
{ {
content: "彻底完成手机端适配,记录这一天熬夜到了晚上三点", content: '彻底完成手机端适配,记录这一天熬夜到了晚上三点',
timestamp: "2020-04-18", timestamp: '2020-04-18',
}, },
{ {
content: content:
"删除babel-polyfill 提高打包速度 减少压缩体积(放弃ie是这个项目做出的最伟大的决定)", '删除babel-polyfill 提高打包速度 减少压缩体积(放弃ie是这个项目做出的最伟大的决定)',
timestamp: "2020-04-18", timestamp: '2020-04-18',
}, },
{ {
content: "源码精简至800k", content: '源码精简至800k',
timestamp: "2020-04-19", timestamp: '2020-04-19',
}, },
{ {
content: "添加视频播放器组件", content: '添加视频播放器组件',
timestamp: "2020-04-20", timestamp: '2020-04-20',
}, },
{ {
content: "修复路由懒加载 完善主题配色", content: '修复路由懒加载 完善主题配色',
timestamp: "2020-04-22", timestamp: '2020-04-22',
}, },
{ {
content: "修复全局axios拦截 加快动画展示效果 修改登录页样式", content: '修复全局axios拦截 加快动画展示效果 修改登录页样式',
timestamp: "2020-04-24", timestamp: '2020-04-24',
}, },
{ {
content: "简化权限与登录逻辑 更新mockServer", content: '简化权限与登录逻辑 更新mockServer',
timestamp: "2020-04-25", timestamp: '2020-04-25',
}, },
{ {
content: "优化登录退出逻辑 代码更清晰 退出不再重载网页 改为重载路由形式", content: '优化登录退出逻辑 代码更清晰 退出不再重载网页 改为重载路由形式',
timestamp: "2020-04-26", timestamp: '2020-04-26',
}, },
{ {
content: "无端的指责只会让我更加努力 修复sidebar 简化permission", content: '无端的指责只会让我更加努力 修复sidebar 简化permission',
timestamp: "2020-04-28", timestamp: '2020-04-28',
}, },
{ {
content: "又是一个深夜 实现了表格增删改查的一键生成", content: '又是一个深夜 实现了表格增删改查的一键生成',
timestamp: "2020-04-30", timestamp: '2020-04-30',
}, },
{ {
content: "大幅优化tagsview标签动画", content: '大幅优化tagsview标签动画',
timestamp: "2020-05-02", timestamp: '2020-05-02',
}, },
{ {
content: "三种图标组件实现mock模拟分页", content: '三种图标组件实现mock模拟分页',
timestamp: "2020-05-03", timestamp: '2020-05-03',
}, },
{ {
content: "添加了markdown编辑器组件", content: '添加了markdown编辑器组件',
timestamp: "2020-05-04", timestamp: '2020-05-04',
}, },
{ {
content: "添加stylelint-plus自动规整排序样式", content: '添加stylelint-plus自动规整排序样式',
timestamp: "2020-05-06", timestamp: '2020-05-06',
}, },
{ {
content: "添加商城模板", content: '添加商城模板',
timestamp: "2020-05-12", timestamp: '2020-05-12',
}, },
{ {
content: "github标星超过1000 感恩", content: 'github标星超过1000 感恩',
timestamp: "2020-05-13", timestamp: '2020-05-13',
}, },
{ {
content: "添加验证码组件", content: '添加验证码组件',
timestamp: "2020-05-14", timestamp: '2020-05-14',
}, },
{ {
content: "修复横向菜单bug", content: '修复横向菜单bug',
timestamp: "2020-05-16", timestamp: '2020-05-16',
}, },
{ {
content: "又被人骂了 挺好的 让我下定决心重写了tabsBar", content: '又被人骂了 挺好的 让我下定决心重写了tabsBar',
timestamp: "2020-05-20", timestamp: '2020-05-20',
}, },
{ {
content: "仿ant-design 添加雪花屏", content: '仿ant-design 添加雪花屏',
timestamp: "2020-05-26", timestamp: '2020-05-26',
}, },
{ {
content: "添加人员管理模块", content: '添加人员管理模块',
timestamp: "2020-06-02", timestamp: '2020-06-02',
}, },
{ {
content: "github标星超过2000 感恩", content: 'github标星超过2000 感恩',
timestamp: "2020-06-03", timestamp: '2020-06-03',
}, },
{ {
content: "添加炫酷地图组件", content: '添加炫酷地图组件',
timestamp: "2020-06-11", timestamp: '2020-06-11',
}, },
{ {
content: "抽离更多公共配置,框架使用更顺手", content: '抽离更多公共配置,框架使用更顺手',
timestamp: "2020-06-19", timestamp: '2020-06-19',
}, },
{ {
content: "彻底完成了tabsBar多标签页的重构", content: '彻底完成了tabsBar多标签页的重构',
timestamp: "2020-06-22", timestamp: '2020-06-22',
}, },
{ {
content: "感恩github标星过3.0K 祝大家端午节快乐", content: '感恩github标星过3.0K 祝大家端午节快乐',
timestamp: "2020-06-25", timestamp: '2020-06-25',
}, },
{ {
content: "彻底重构了SideBar与TopBar 大幅精简dom渲染逻辑 全球首发", content: '彻底重构了SideBar与TopBar 大幅精简dom渲染逻辑 全球首发',
timestamp: "2020-06-25", timestamp: '2020-06-25',
}, },
{ {
content: "添加菜单管理", content: '添加菜单管理',
timestamp: "2020-07-7", timestamp: '2020-07-7',
}, },
{ {
content: "首次采用sass-loader 9.0写法,感谢github用户 shaonialife", content: '首次采用sass-loader 9.0写法,感谢github用户 shaonialife',
timestamp: "2020-07-7", timestamp: '2020-07-7',
}, },
{ {
content: "添加vue-amap组件", content: '添加vue-amap组件',
timestamp: "2020-07-11", timestamp: '2020-07-11',
}, },
{ {
content: "修改zx-layouts引入方式", content: '修改zx-layouts引入方式',
timestamp: "2020-07-15", timestamp: '2020-07-15',
}, },
{ {
content: content:
"记录这一天vue-admin-beautiful在插件市场、百度已花费超过1万元广告费用,希望一切都值得", '记录这一天vue-admin-beautiful在插件市场、百度已花费超过1万元广告费用,希望一切都值得',
timestamp: "2020-07-18", timestamp: '2020-07-18',
}, },
{ {
content: "主题配置添加绿荫草场、荣耀典藏、暗黑之子模式", content: '主题配置添加绿荫草场、荣耀典藏、暗黑之子模式',
timestamp: "2020-07-18", timestamp: '2020-07-18',
}, },
{ {
content: "全局axios请求全面支持Status Code拦截处理", content: '全局axios请求全面支持Status Code拦截处理',
timestamp: "2020-07-29", timestamp: '2020-07-29',
}, },
{ {
content: "重构全局loadding加载代码", content: '重构全局loadding加载代码',
timestamp: "2020-07-31", timestamp: '2020-07-31',
}, },
{ {
content: "升级stylelint自动排序功能", content: '升级stylelint自动排序功能',
timestamp: "2020-08-25", timestamp: '2020-08-25',
}, },
{ {
content: "修复视频播放器组件重载路由失效的bug", content: '修复视频播放器组件重载路由失效的bug',
timestamp: "2020-09-03", timestamp: '2020-09-03',
}, },
{ {
content: "修复极个别情况image-loader打包报错", content: '修复极个别情况image-loader打包报错',
timestamp: "2020-09-18", timestamp: '2020-09-18',
}, },
{ {
content: "全网首个基于vue3.0开发的admin框架已发布,具体请访问github", content: '全网首个基于vue3.0开发的admin框架已发布,具体请访问github',
timestamp: "2020-09-22", timestamp: '2020-09-22',
}, },
{ {
content: "完善路由后端渲染方案,弃用之前写法", content: '完善路由后端渲染方案,弃用之前写法',
timestamp: "2020-09-30", timestamp: '2020-09-30',
}, },
{ {
content: "大版本迭代,请关注github tag", content: '大版本迭代,请关注github tag',
timestamp: "2020-09-30", timestamp: '2020-09-30',
}, },
/* { /* {
content: content:
...@@ -196,22 +196,22 @@ const data = [ ...@@ -196,22 +196,22 @@ const data = [
timestamp: "2020-10-01", timestamp: "2020-10-01",
}, */ }, */
{ {
content: "凌晨两点,我累了,移除无用组件,精简package", content: '凌晨两点,我累了,移除无用组件,精简package',
timestamp: "2020-10-02", timestamp: '2020-10-02',
}, },
]; ]
module.exports = [ module.exports = [
{ {
url: "/changeLog/getList", url: '/changeLog/getList',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
totalCount: 999, totalCount: 999,
data: data, data: data,
}; }
}, },
}, },
]; ]
const { mock } = require("mockjs"); const { mock } = require('mockjs')
const List = []; const List = []
const count = 999; const count = 999
let num = 0; let num = 0
for (let i = 0; i < count; i++) { for (let i = 0; i < count; i++) {
List.push( List.push(
mock({ mock({
uuid: "@uuid", uuid: '@uuid',
image: `https://picsum.photos/300/600?random=${num++}`, image: `https://picsum.photos/300/600?random=${num++}`,
title: "@ctitle", title: '@ctitle',
description: "@csentence", description: '@csentence',
link: "https://www.baidu.com", link: 'https://www.baidu.com',
price: "@integer(100, 500)", price: '@integer(100, 500)',
"status|1": [1, 0], 'status|1': [1, 0],
"isRecommend|1": [1, 0], 'isRecommend|1': [1, 0],
}) })
); )
} }
module.exports = [ module.exports = [
{ {
url: "/goodsList/getList", url: '/goodsList/getList',
type: "post", type: 'post',
response(config) { response(config) {
const { title = "", pageNo = 1, pageSize = 20 } = config.body; const { title = '', pageNo = 1, pageSize = 20 } = config.body
let mockList = List.filter((item) => { let mockList = List.filter((item) => {
if (title && item.title.indexOf(title) < 0) return false; if (title && item.title.indexOf(title) < 0) return false
return true; return true
}); })
const pageList = mockList.filter( const pageList = mockList.filter(
(item, index) => (item, index) =>
index < pageSize * pageNo && index >= pageSize * (pageNo - 1) index < pageSize * pageNo && index >= pageSize * (pageNo - 1)
); )
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
totalCount: count, totalCount: count,
data: pageList, data: pageList,
}; }
}, },
}, },
]; ]
module.exports = [ module.exports = [
{ {
url: "/menuManagement/getTree", url: '/menuManagement/getTree',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
totalCount: 999, totalCount: 999,
data: [ data: [
{ {
id: "root", id: 'root',
label: "全部角色", label: '全部角色',
children: [ children: [
{ {
id: "@id", id: '@id',
permission: "admin", permission: 'admin',
label: "admin角色", label: 'admin角色',
}, },
{ {
id: "@id", id: '@id',
permission: "editor", permission: 'editor',
label: "editor角色", label: 'editor角色',
}, },
], ],
}, },
], ],
}; }
}, },
}, },
{ {
url: "/menuManagement/doEdit", url: '/menuManagement/doEdit',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟保存成功", msg: '模拟保存成功',
}; }
}, },
}, },
{ {
url: "/menuManagement/doDelete", url: '/menuManagement/doDelete',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟删除成功", msg: '模拟删除成功',
}; }
}, },
}, },
]; ]
const data = [ const data = [
{ {
title: title:
"鸣谢:尤雨溪、蒋豪群、element-ui、唐金州、花裤衩、贤心、iView、uView的开源项目给我带来的很多的灵感,弱小的人才习惯嘲讽与否定,内心强大的人从不吝啬赞美与鼓励,人生在世,得到每个人的认可几乎是痴心妄想,我也只是一条略懂前端的咸鱼,可我仍一直怀揣着改变世界的梦想,希望我们每个人,不管过程怎样,结局都是美好的。", '鸣谢:尤雨溪、蒋豪群、element-ui、唐金州、花裤衩、贤心、iView、uView的开源项目给我带来的很多的灵感,弱小的人才习惯嘲讽与否定,内心强大的人从不吝啬赞美与鼓励,人生在世,得到每个人的认可几乎是痴心妄想,我也只是一条略懂前端的咸鱼,可我仍一直怀揣着改变世界的梦想,希望我们每个人,不管过程怎样,结局都是美好的。',
closable: false, closable: false,
type: "success", type: 'success',
}, },
{ {
title: title:
"作者寄语:感谢Star,感恩相遇,愿世间美好与我们环环相扣,加油!屏幕前的我们,打破桎梏,坚守初心。其实人生改变命运的机会并没有太多,我们并不是不优秀,我们也并不是一无是处,我们也希望驻足山巅被众人仰望,也许我们缺少的只是一个机会,缺少的只是生命中的导师,我希望这个框架帮助到更多的人,希望有一天,我们面试的时候不再胆怯,希望有一天别人看到的不仅仅是你的努力,还有你的功成名就,出人头地。", '作者寄语:感谢Star,感恩相遇,愿世间美好与我们环环相扣,加油!屏幕前的我们,打破桎梏,坚守初心。其实人生改变命运的机会并没有太多,我们并不是不优秀,我们也并不是一无是处,我们也希望驻足山巅被众人仰望,也许我们缺少的只是一个机会,缺少的只是生命中的导师,我希望这个框架帮助到更多的人,希望有一天,我们面试的时候不再胆怯,希望有一天别人看到的不仅仅是你的努力,还有你的功成名就,出人头地。',
closable: false, closable: false,
type: "warning", type: 'warning',
}, },
{ {
title: title:
"随笔:我一直在寻找开源的真谛,我一直再想什么是开源,我一开始觉得免费就是开源,好像又不是。我理解的开源是:你也开源,我也开源,大家一起贡献,相互帮助。我最担心的事情是:我一个小人物,去伺候一众的伸手党,我想,这不是开源该有的氛围。我还太年轻,不懂什么是格局,我只知道,无私的帮助他人,能给我带来快乐,却不能给我带来收入,当然,有时候,快乐对我来说就已经足够了。可惜我是一个人,没有精力帮助到每一个人,可惜这个世界需要赚钱,才能过上平凡的生活,可惜了我的梦想,这个物欲横流的时代,理想主义的我们,即使内心坚决如铁,也似乎寸步难行。", '随笔:我一直在寻找开源的真谛,我一直再想什么是开源,我一开始觉得免费就是开源,好像又不是。我理解的开源是:你也开源,我也开源,大家一起贡献,相互帮助。我最担心的事情是:我一个小人物,去伺候一众的伸手党,我想,这不是开源该有的氛围。我还太年轻,不懂什么是格局,我只知道,无私的帮助他人,能给我带来快乐,却不能给我带来收入,当然,有时候,快乐对我来说就已经足够了。可惜我是一个人,没有精力帮助到每一个人,可惜这个世界需要赚钱,才能过上平凡的生活,可惜了我的梦想,这个物欲横流的时代,理想主义的我们,即使内心坚决如铁,也似乎寸步难行。',
closable: false, closable: false,
type: "success", type: 'success',
}, },
]; ]
module.exports = [ module.exports = [
{ {
url: "/notice/getList", url: '/notice/getList',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
data, data,
}; }
}, },
}, },
]; ]
const { mock } = require("mockjs"); const { mock } = require('mockjs')
module.exports = [ module.exports = [
{ {
url: "/personalCenter/getList", url: '/personalCenter/getList',
type: "post", type: 'post',
response(config) { response(config) {
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
totalCount: 999, totalCount: 999,
data: mock({ data: mock({
"data|10": [ 'data|10': [
{ {
id: "@id", id: '@id',
}, },
], ],
}).data, }).data,
}; }
}, },
}, },
{ {
url: "/personalCenter/doEdit", url: '/personalCenter/doEdit',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟保存成功", msg: '模拟保存成功',
}; }
}, },
}, },
{ {
url: "/personalCenter/doDelete", url: '/personalCenter/doDelete',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟删除成功", msg: '模拟删除成功',
}; }
}, },
}, },
]; ]
const totalCount = 2; const totalCount = 2
const List = [ const List = [
{ {
id: "@id", id: '@id',
permission: "admin", permission: 'admin',
}, },
{ {
id: "@id", id: '@id',
permission: "editor", permission: 'editor',
}, },
]; ]
module.exports = [ module.exports = [
{ {
url: "/roleManagement/getList", url: '/roleManagement/getList',
type: "post", type: 'post',
response(config) { response(config) {
const { title = "", pageNo = 1, pageSize = 20 } = config.body; const { title = '', pageNo = 1, pageSize = 20 } = config.body
let mockList = List.filter((item) => { let mockList = List.filter((item) => {
return !(title && item.title.indexOf(title) < 0); return !(title && item.title.indexOf(title) < 0)
}); })
const pageList = mockList.filter( const pageList = mockList.filter(
(item, index) => (item, index) =>
index < pageSize * pageNo && index >= pageSize * (pageNo - 1) index < pageSize * pageNo && index >= pageSize * (pageNo - 1)
); )
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
totalCount, totalCount,
data: pageList, data: pageList,
}; }
}, },
}, },
{ {
url: "/roleManagement/doEdit", url: '/roleManagement/doEdit',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟保存成功", msg: '模拟保存成功',
}; }
}, },
}, },
{ {
url: "/roleManagement/doDelete", url: '/roleManagement/doDelete',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟删除成功", msg: '模拟删除成功',
}; }
}, },
}, },
]; ]
const { mock } = require("mockjs"); const { mock } = require('mockjs')
const { handleRandomImage } = require("../utils"); const { handleRandomImage } = require('../utils')
const List = []; const List = []
const count = 999; const count = 999
for (let i = 0; i < count; i++) { for (let i = 0; i < count; i++) {
List.push( List.push(
mock({ mock({
uuid: "@uuid", uuid: '@uuid',
id: "@id", id: '@id',
title: "@csentence(1, 2)", title: '@csentence(1, 2)',
"status|1": ["published", "draft", "deleted"], 'status|1': ['published', 'draft', 'deleted'],
author: "@cname", author: '@cname',
datetime: "@datetime", datetime: '@datetime',
pageViews: "@integer(300, 5000)", pageViews: '@integer(300, 5000)',
img: handleRandomImage(200, 200), img: handleRandomImage(200, 200),
smallImg: handleRandomImage(40, 40), smallImg: handleRandomImage(40, 40),
switch: "@boolean", switch: '@boolean',
percent: "@integer(80,99)", percent: '@integer(80,99)',
}) })
); )
} }
module.exports = [ module.exports = [
{ {
url: "/table/getList", url: '/table/getList',
type: "post", type: 'post',
response(config) { response(config) {
if (!config.body) { if (!config.body) {
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
totalCount: count, totalCount: count,
data: mock({ data: mock({
"data|50": [ 'data|50': [
{ {
id: "@id", id: '@id',
title: "@csentence(1, 2)", title: '@csentence(1, 2)',
"status|1": ["published", "draft", "deleted"], 'status|1': ['published', 'draft', 'deleted'],
author: "@cname", author: '@cname',
datetime: "@datetime", datetime: '@datetime',
pageViews: "@integer(300, 5000)", pageViews: '@integer(300, 5000)',
img: handleRandomImage(200, 200), img: handleRandomImage(200, 200),
smallImg: handleRandomImage(40, 40), smallImg: handleRandomImage(40, 40),
switch: "@boolean", switch: '@boolean',
percent: "@integer(80,99)", percent: '@integer(80,99)',
}, },
], ],
}).data, }).data,
}; }
} }
const { title = "", pageNo = 1, pageSize = 20 } = config.body; const { title = '', pageNo = 1, pageSize = 20 } = config.body
let mockList = List.filter((item) => { let mockList = List.filter((item) => {
return !(title && item.title.indexOf(title) < 0); return !(title && item.title.indexOf(title) < 0)
}); })
const pageList = mockList.filter( const pageList = mockList.filter(
(item, index) => (item, index) =>
index < pageSize * pageNo && index >= pageSize * (pageNo - 1) index < pageSize * pageNo && index >= pageSize * (pageNo - 1)
); )
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
totalCount: count, totalCount: count,
data: pageList, data: pageList,
}; }
}, },
}, },
{ {
url: "/table/doEdit", url: '/table/doEdit',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟保存成功", msg: '模拟保存成功',
}; }
}, },
}, },
{ {
url: "/table/doDelete", url: '/table/doDelete',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟删除成功", msg: '模拟删除成功',
}; }
}, },
}, },
]; ]
const data = [ const data = [
{ {
id: "1", id: '1',
parentId: "0", parentId: '0',
name: "root", name: 'root',
title: "root", title: 'root',
text: "root", text: 'root',
value: "1", value: '1',
rank: 1, rank: 1,
children: [ children: [
{ {
id: "32816b88ff72423f960e7d492a386131", id: '32816b88ff72423f960e7d492a386131',
parentId: "1", parentId: '1',
name: "一级", name: '一级',
title: "一级", title: '一级',
text: "一级", text: '一级',
value: "32816b88ff72423f960e7d492a386131", value: '32816b88ff72423f960e7d492a386131',
rank: 2, rank: 2,
children: [ children: [
{ {
id: "9e11afc35d55475fb0bd3164b9684cbe", id: '9e11afc35d55475fb0bd3164b9684cbe',
parentId: "32816b88ff72423f960e7d492a386131", parentId: '32816b88ff72423f960e7d492a386131',
name: "二级", name: '二级',
title: "二级", title: '二级',
text: "二级", text: '二级',
value: "9e11afc35d55475fb0bd3164b9684cbe", value: '9e11afc35d55475fb0bd3164b9684cbe',
rank: 3, rank: 3,
children: [ children: [
{ {
id: "4cc1b04635e4444292526c5391699077", id: '4cc1b04635e4444292526c5391699077',
parentId: "9e11afc35d55475fb0bd3164b9684cbe", parentId: '9e11afc35d55475fb0bd3164b9684cbe',
name: "三级", name: '三级',
title: "三级", title: '三级',
text: "三级", text: '三级',
value: "4cc1b04635e4444292526c5391699077", value: '4cc1b04635e4444292526c5391699077',
rank: 4, rank: 4,
children: [], children: [],
}, },
...@@ -42,13 +42,13 @@ const data = [ ...@@ -42,13 +42,13 @@ const data = [
}, },
], ],
}, },
]; ]
module.exports = [ module.exports = [
{ {
url: "/tree/list", url: '/tree/list',
type: "post", type: 'post',
response() { response() {
return { code: 200, msg: "success", data }; return { code: 200, msg: 'success', data }
}, },
}, },
]; ]
const accessTokens = { const accessTokens = {
admin: "admin-accessToken", admin: 'admin-accessToken',
editor: "editor-accessToken", editor: 'editor-accessToken',
test: "test-accessToken", test: 'test-accessToken',
}; }
module.exports = [ module.exports = [
{ {
url: "/publicKey", url: '/publicKey',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
data: { data: {
mockServer: true, mockServer: true,
publicKey: publicKey:
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBT2vr+dhZElF73FJ6xiP181txKWUSNLPQQlid6DUJhGAOZblluafIdLmnUyKE8mMHhT3R+Ib3ssZcJku6Hn72yHYj/qPkCGFv0eFo7G+GJfDIUeDyalBN0QsuiE/XzPHJBuJDfRArOiWvH0BXOv5kpeXSXM8yTt5Na1jAYSiQ/wIDAQAB", 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBT2vr+dhZElF73FJ6xiP181txKWUSNLPQQlid6DUJhGAOZblluafIdLmnUyKE8mMHhT3R+Ib3ssZcJku6Hn72yHYj/qPkCGFv0eFo7G+GJfDIUeDyalBN0QsuiE/XzPHJBuJDfRArOiWvH0BXOv5kpeXSXM8yTt5Na1jAYSiQ/wIDAQAB',
}, },
}; }
}, },
}, },
{ {
url: "/login", url: '/login',
type: "post", type: 'post',
response(config) { response(config) {
const { username } = config.body; const { username } = config.body
const accessToken = accessTokens[username]; const accessToken = accessTokens[username]
if (!accessToken) { if (!accessToken) {
return { return {
code: 500, code: 500,
msg: "帐户或密码不正确。", msg: '帐户或密码不正确。',
}; }
} }
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
data: { accessToken }, data: { accessToken },
}; }
}, },
}, },
{ {
url: "/register", url: '/register',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟注册成功", msg: '模拟注册成功',
}; }
}, },
}, },
{ {
url: "/userInfo", url: '/userInfo',
type: "post", type: 'post',
response(config) { response(config) {
const { accessToken } = config.body; const { accessToken } = config.body
let permissions = ["admin"]; let permissions = ['admin']
let username = "admin"; let username = 'admin'
if ("admin-accessToken" === accessToken) { if ('admin-accessToken' === accessToken) {
permissions = ["admin"]; permissions = ['admin']
username = "admin"; username = 'admin'
} }
if ("editor-accessToken" === accessToken) { if ('editor-accessToken' === accessToken) {
permissions = ["editor"]; permissions = ['editor']
username = "editor"; username = 'editor'
} }
if ("test-accessToken" === accessToken) { if ('test-accessToken' === accessToken) {
permissions = ["admin", "editor"]; permissions = ['admin', 'editor']
username = "test"; username = 'test'
} }
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
data: { data: {
permissions, permissions,
username, username,
"avatar|1": [ 'avatar|1': [
"https://i.gtimg.cn/club/item/face/img/2/15922_100.gif", 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif',
"https://i.gtimg.cn/club/item/face/img/8/15918_100.gif", 'https://i.gtimg.cn/club/item/face/img/8/15918_100.gif',
], ],
}, },
}; }
}, },
}, },
{ {
url: "/logout", url: '/logout',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
}; }
}, },
}, },
]; ]
const totalCount = 3; const totalCount = 3
const List = [ const List = [
{ {
id: "@id", id: '@id',
username: "admin", username: 'admin',
password: "admin", password: 'admin',
email: "@email", email: '@email',
permissions: ["admin"], permissions: ['admin'],
datatime: "@datetime", datatime: '@datetime',
}, },
{ {
id: "@id", id: '@id',
username: "editor", username: 'editor',
password: "editor", password: 'editor',
email: "@email", email: '@email',
permissions: ["editor"], permissions: ['editor'],
datatime: "@datetime", datatime: '@datetime',
}, },
{ {
id: "@id", id: '@id',
username: "test", username: 'test',
password: "test", password: 'test',
email: "@email", email: '@email',
permissions: ["admin", "editor"], permissions: ['admin', 'editor'],
datatime: "@datetime", datatime: '@datetime',
}, },
]; ]
module.exports = [ module.exports = [
{ {
url: "/userManagement/getList", url: '/userManagement/getList',
type: "post", type: 'post',
response(config) { response(config) {
const { title = "", pageNo = 1, pageSize = 20 } = config.body; const { title = '', pageNo = 1, pageSize = 20 } = config.body
let mockList = List.filter((item) => { let mockList = List.filter((item) => {
if (title && item.title.indexOf(title) < 0) return false; if (title && item.title.indexOf(title) < 0) return false
return true; return true
}); })
const pageList = mockList.filter( const pageList = mockList.filter(
(item, index) => (item, index) =>
index < pageSize * pageNo && index >= pageSize * (pageNo - 1) index < pageSize * pageNo && index >= pageSize * (pageNo - 1)
); )
return { return {
code: 200, code: 200,
msg: "success", msg: 'success',
totalCount, totalCount,
data: pageList, data: pageList,
}; }
}, },
}, },
{ {
url: "/userManagement/doEdit", url: '/userManagement/doEdit',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟保存成功", msg: '模拟保存成功',
}; }
}, },
}, },
{ {
url: "/userManagement/doDelete", url: '/userManagement/doDelete',
type: "post", type: 'post',
response() { response() {
return { return {
code: 200, code: 200,
msg: "模拟删除成功", msg: '模拟删除成功',
}; }
}, },
}, },
]; ]
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
* @description 导入所有 controller 模块,npm run serve时在node环境中自动输出controller文件夹下Mock接口,请勿修改。 * @description 导入所有 controller 模块,npm run serve时在node环境中自动输出controller文件夹下Mock接口,请勿修改。
*/ */
const { handleMockArray } = require("./utils"); const { handleMockArray } = require('./utils')
const mocks = []; const mocks = []
const mockArray = handleMockArray(); const mockArray = handleMockArray()
mockArray.forEach((item) => { mockArray.forEach((item) => {
const obj = require(item); const obj = require(item)
mocks.push(...obj); mocks.push(...obj)
}); })
module.exports = { module.exports = {
mocks, mocks,
}; }
const chokidar = require("chokidar"); const chokidar = require('chokidar')
const bodyParser = require("body-parser"); const bodyParser = require('body-parser')
const chalk = require("chalk"); const chalk = require('chalk')
const path = require("path"); const path = require('path')
const Mock = require("mockjs"); const Mock = require('mockjs')
const { baseURL } = require("../src/config/settings"); const { baseURL } = require('../src/config/settings')
const mockDir = path.join(process.cwd(), "mock"); const mockDir = path.join(process.cwd(), 'mock')
/** /**
* *
...@@ -12,21 +12,21 @@ const mockDir = path.join(process.cwd(), "mock"); ...@@ -12,21 +12,21 @@ const mockDir = path.join(process.cwd(), "mock");
* @returns {{mockStartIndex: number, mockRoutesLength: number}} * @returns {{mockStartIndex: number, mockRoutesLength: number}}
*/ */
const registerRoutes = (app) => { const registerRoutes = (app) => {
let mockLastIndex; let mockLastIndex
const { mocks } = require("./index.js"); const { mocks } = require('./index.js')
const mocksForServer = mocks.map((route) => { const mocksForServer = mocks.map((route) => {
return responseFake(route.url, route.type, route.response); return responseFake(route.url, route.type, route.response)
}); })
for (const mock of mocksForServer) { for (const mock of mocksForServer) {
app[mock.type](mock.url, mock.response); app[mock.type](mock.url, mock.response)
mockLastIndex = app._router.stack.length; mockLastIndex = app._router.stack.length
} }
const mockRoutesLength = Object.keys(mocksForServer).length; const mockRoutesLength = Object.keys(mocksForServer).length
return { return {
mockRoutesLength: mockRoutesLength, mockRoutesLength: mockRoutesLength,
mockStartIndex: mockLastIndex - mockRoutesLength, mockStartIndex: mockLastIndex - mockRoutesLength,
}; }
}; }
/** /**
* *
...@@ -38,56 +38,56 @@ const registerRoutes = (app) => { ...@@ -38,56 +38,56 @@ const registerRoutes = (app) => {
const responseFake = (url, type, respond) => { const responseFake = (url, type, respond) => {
return { return {
url: new RegExp(`${baseURL}${url}`), url: new RegExp(`${baseURL}${url}`),
type: type || "get", type: type || 'get',
response(req, res) { response(req, res) {
res.status(200); res.status(200)
if (JSON.stringify(req.body) !== "{}") { if (JSON.stringify(req.body) !== '{}') {
console.log(chalk.green(`> 请求地址:${req.path}`)); console.log(chalk.green(`> 请求地址:${req.path}`))
console.log(chalk.green(`> 请求参数:${JSON.stringify(req.body)}\n`)); console.log(chalk.green(`> 请求参数:${JSON.stringify(req.body)}\n`))
} else { } else {
console.log(chalk.green(`> 请求地址:${req.path}\n`)); console.log(chalk.green(`> 请求地址:${req.path}\n`))
} }
res.json( res.json(
Mock.mock(respond instanceof Function ? respond(req, res) : respond) Mock.mock(respond instanceof Function ? respond(req, res) : respond)
); )
}, },
}; }
}; }
/** /**
* *
* @param app * @param app
*/ */
module.exports = (app) => { module.exports = (app) => {
app.use(bodyParser.json()); app.use(bodyParser.json())
app.use( app.use(
bodyParser.urlencoded({ bodyParser.urlencoded({
extended: true, extended: true,
}) })
); )
const mockRoutes = registerRoutes(app); const mockRoutes = registerRoutes(app)
let mockRoutesLength = mockRoutes.mockRoutesLength; let mockRoutesLength = mockRoutes.mockRoutesLength
let mockStartIndex = mockRoutes.mockStartIndex; let mockStartIndex = mockRoutes.mockStartIndex
chokidar chokidar
.watch(mockDir, { .watch(mockDir, {
ignoreInitial: true, ignoreInitial: true,
}) })
.on("all", (event) => { .on('all', (event) => {
if (event === "change" || event === "add") { if (event === 'change' || event === 'add') {
try { try {
app._router.stack.splice(mockStartIndex, mockRoutesLength); app._router.stack.splice(mockStartIndex, mockRoutesLength)
Object.keys(require.cache).forEach((item) => { Object.keys(require.cache).forEach((item) => {
if (item.includes(mockDir)) { if (item.includes(mockDir)) {
delete require.cache[require.resolve(item)]; delete require.cache[require.resolve(item)]
} }
}); })
const mockRoutes = registerRoutes(app); const mockRoutes = registerRoutes(app)
mockRoutesLength = mockRoutes.mockRoutesLength; mockRoutesLength = mockRoutes.mockRoutesLength
mockStartIndex = mockRoutes.mockStartIndex; mockStartIndex = mockRoutes.mockStartIndex
} catch (error) { } catch (error) {
console.log(chalk.red(error)); console.log(chalk.red(error))
} }
} }
}); })
}; }
const { Random } = require("mockjs"); const { Random } = require('mockjs')
const { join } = require("path"); const { join } = require('path')
const fs = require("fs"); const fs = require('fs')
/** /**
* @author chuzhixin 1204505056@qq.com (不想保留author可删除) * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
...@@ -10,7 +10,7 @@ const fs = require("fs"); ...@@ -10,7 +10,7 @@ const fs = require("fs");
* @returns {string} * @returns {string}
*/ */
function handleRandomImage(width = 50, height = 50) { function handleRandomImage(width = 50, height = 50) {
return `https://picsum.photos/${width}/${height}?random=${Random.guid()}`; return `https://picsum.photos/${width}/${height}?random=${Random.guid()}`
} }
/** /**
...@@ -19,25 +19,25 @@ function handleRandomImage(width = 50, height = 50) { ...@@ -19,25 +19,25 @@ function handleRandomImage(width = 50, height = 50) {
* @returns {[]} * @returns {[]}
*/ */
function handleMockArray() { function handleMockArray() {
const mockArray = []; const mockArray = []
const getFiles = (jsonPath) => { const getFiles = (jsonPath) => {
const jsonFiles = []; const jsonFiles = []
const findJsonFile = (path) => { const findJsonFile = (path) => {
const files = fs.readdirSync(path); const files = fs.readdirSync(path)
files.forEach((item) => { files.forEach((item) => {
const fPath = join(path, item); const fPath = join(path, item)
const stat = fs.statSync(fPath); const stat = fs.statSync(fPath)
if (stat.isDirectory() === true) findJsonFile(item); if (stat.isDirectory() === true) findJsonFile(item)
if (stat.isFile() === true) jsonFiles.push(item); if (stat.isFile() === true) jsonFiles.push(item)
}); })
}; }
findJsonFile(jsonPath); findJsonFile(jsonPath)
jsonFiles.forEach((item) => mockArray.push(`./controller/${item}`)); jsonFiles.forEach((item) => mockArray.push(`./controller/${item}`))
}; }
getFiles("mock/controller"); getFiles('mock/controller')
return mockArray; return mockArray
} }
module.exports = { module.exports = {
handleRandomImage, handleRandomImage,
handleMockArray, handleMockArray,
}; }
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
"lint:style": "stylelint-config-prettier-check", "lint:style": "stylelint-config-prettier-check",
"inspect": "vue-cli-service inspect", "inspect": "vue-cli-service inspect",
"template": "plop", "template": "plop",
"clear": "rimraf node_modules&&cnpm i", "clear": "rimraf node_modules&&npm install --registry=https://registry.npm.taobao.org&&cnpm i image-webpack-loader -D",
"use:npm": "nrm use npm", "use:npm": "nrm use npm",
"use:taobao": "nrm use taobao", "use:taobao": "nrm use taobao",
"update": "ncu -u&&cnpm i", "update": "ncu -u&&cnpm i",
......
const viewGenerator = require("zx-templates/view/prompt"); const viewGenerator = require('zx-templates/view/prompt')
const curdGenerator = require("zx-templates/curd/prompt"); const curdGenerator = require('zx-templates/curd/prompt')
const componentGenerator = require("zx-templates/component/prompt"); const componentGenerator = require('zx-templates/component/prompt')
const mockGenerator = require("zx-templates/mock/prompt"); const mockGenerator = require('zx-templates/mock/prompt')
const vuexGenerator = require("zx-templates/vuex/prompt"); const vuexGenerator = require('zx-templates/vuex/prompt')
module.exports = (plop) => { module.exports = (plop) => {
plop.setGenerator("view", viewGenerator); plop.setGenerator('view', viewGenerator)
plop.setGenerator("curd", curdGenerator); plop.setGenerator('curd', curdGenerator)
plop.setGenerator("component", componentGenerator); plop.setGenerator('component', componentGenerator)
plop.setGenerator("mock&api", mockGenerator); plop.setGenerator('mock&api', mockGenerator)
plop.setGenerator("vuex", vuexGenerator); plop.setGenerator('vuex', vuexGenerator)
}; }
...@@ -2,15 +2,15 @@ module.exports = { ...@@ -2,15 +2,15 @@ module.exports = {
printWidth: 80, printWidth: 80,
tabWidth: 2, tabWidth: 2,
useTabs: false, useTabs: false,
semi: true, semi: false,
singleQuote: false, singleQuote: true,
quoteProps: "as-needed", quoteProps: 'as-needed',
jsxSingleQuote: false, jsxSingleQuote: false,
trailingComma: "es5", trailingComma: 'es5',
bracketSpacing: true, bracketSpacing: true,
jsxBracketSameLine: false, jsxBracketSameLine: false,
arrowParens: "always", arrowParens: 'always',
htmlWhitespaceSensitivity: "ignore", htmlWhitespaceSensitivity: 'ignore',
vueIndentScriptAndStyle: true, vueIndentScriptAndStyle: true,
endOfLine: "lf", endOfLine: 'lf',
}; }
...@@ -17,13 +17,13 @@ ...@@ -17,13 +17,13 @@
<meta name="author" content="<%= VUE_APP_AUTHOR %>" /> <meta name="author" content="<%= VUE_APP_AUTHOR %>" />
<link rel="stylesheet" href="<%= BASE_URL %>static/css/loading.css" /> <link rel="stylesheet" href="<%= BASE_URL %>static/css/loading.css" />
<script> <script>
var _hmt = _hmt || []; var _hmt = _hmt || []
(function () { ;(function () {
var hm = document.createElement("script"); var hm = document.createElement('script')
hm.src = "https://hm.baidu.com/hm.js?7174bade1219f9cc272e7978f9523fc8"; hm.src = 'https://hm.baidu.com/hm.js?7174bade1219f9cc272e7978f9523fc8'
var s = document.getElementsByTagName("script")[0]; var s = document.getElementsByTagName('script')[0]
s.parentNode.insertBefore(hm, s); s.parentNode.insertBefore(hm, s)
})(); })()
</script> </script>
</head> </head>
<body> <body>
...@@ -45,8 +45,8 @@ ...@@ -45,8 +45,8 @@
</div> </div>
</div> </div>
<script> <script>
/^http(s*):\/\//.test(location.href) || ;/^http(s*):\/\//.test(location.href) ||
alert("基于vue-admin-beautiful开发的项目需要部署到服务器下访问"); alert('基于vue-admin-beautiful开发的项目需要部署到服务器下访问')
</script> </script>
</body> </body>
</html> </html>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<script> <script>
export default { export default {
name: "App", name: 'App',
mounted() {}, mounted() {},
}; }
</script> </script>
import request from "@/utils/request"; import request from '@/utils/request'
export function getList(data) { export function getList(data) {
return request({ return request({
url: "/ad/getList", url: '/ad/getList',
method: "get", method: 'get',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getList(data) { export function getList(data) {
return request({ return request({
url: "/changeLog/getList", url: '/changeLog/getList',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getIconList(data) { export function getIconList(data) {
return request({ return request({
url: "/colorfulIcon/getList", url: '/colorfulIcon/getList',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "axios"; import request from 'axios'
export function getRepos(params) { export function getRepos(params) {
return request({ return request({
url: "https://api.github.com/repos/chuzhixin/vue-admin-beautiful", url: 'https://api.github.com/repos/chuzhixin/vue-admin-beautiful',
method: "get", method: 'get',
params, params,
timeout: 10000, timeout: 10000,
}); })
} }
export function getStargazers(params) { export function getStargazers(params) {
return request({ return request({
url: url:
"https://api.github.com/repos/chuzhixin/vue-admin-beautiful/stargazers", 'https://api.github.com/repos/chuzhixin/vue-admin-beautiful/stargazers',
method: "get", method: 'get',
params, params,
timeout: 10000, timeout: 10000,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getList(data) { export function getList(data) {
return request({ return request({
url: "/goodsList/getList", url: '/goodsList/getList',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getIconList(data) { export function getIconList(data) {
return request({ return request({
url: "/icon/getList", url: '/icon/getList',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "axios"; import request from 'axios'
export function getList() { export function getList() {
return request({ return request({
url: "https://cdn.jsdelivr.net/gh/prettier/prettier@master/docs/options.md", url: 'https://cdn.jsdelivr.net/gh/prettier/prettier@master/docs/options.md',
method: "get", method: 'get',
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getTree(data) { export function getTree(data) {
return request({ return request({
url: "/menuManagement/getTree", url: '/menuManagement/getTree',
method: "post", method: 'post',
data, data,
}); })
} }
export function doEdit(data) { export function doEdit(data) {
return request({ return request({
url: "/menuManagement/doEdit", url: '/menuManagement/doEdit',
method: "post", method: 'post',
data, data,
}); })
} }
export function doDelete(data) { export function doDelete(data) {
return request({ return request({
url: "/menuManagement/doDelete", url: '/menuManagement/doDelete',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getNoticeList() { export function getNoticeList() {
return request({ return request({
url: "/notice/getList", url: '/notice/getList',
method: "post", method: 'post',
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getList(data) { export function getList(data) {
return request({ return request({
url: "/personalCenter/getList", url: '/personalCenter/getList',
method: "post", method: 'post',
data, data,
}); })
} }
export function doEdit(data) { export function doEdit(data) {
return request({ return request({
url: "/personalCenter/doEdit", url: '/personalCenter/doEdit',
method: "post", method: 'post',
data, data,
}); })
} }
export function doDelete(data) { export function doDelete(data) {
return request({ return request({
url: "/personalCenter/doDelete", url: '/personalCenter/doDelete',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getPublicKey() { export function getPublicKey() {
return request({ return request({
url: "/publicKey", url: '/publicKey',
method: "post", method: 'post',
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getIconList(data) { export function getIconList(data) {
return request({ return request({
url: "/remixIcon/getList", url: '/remixIcon/getList',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getList(data) { export function getList(data) {
return request({ return request({
url: "/roleManagement/getList", url: '/roleManagement/getList',
method: "post", method: 'post',
data, data,
}); })
} }
export function doEdit(data) { export function doEdit(data) {
return request({ return request({
url: "/roleManagement/doEdit", url: '/roleManagement/doEdit',
method: "post", method: 'post',
data, data,
}); })
} }
export function doDelete(data) { export function doDelete(data) {
return request({ return request({
url: "/roleManagement/doDelete", url: '/roleManagement/doDelete',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getRouterList(data) { export function getRouterList(data) {
return request({ return request({
url: "/menu/navigate", url: '/menu/navigate',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getList(data) { export function getList(data) {
return request({ return request({
url: "/table/getList", url: '/table/getList',
method: "post", method: 'post',
data, data,
}); })
} }
export function doEdit(data) { export function doEdit(data) {
return request({ return request({
url: "/table/doEdit", url: '/table/doEdit',
method: "post", method: 'post',
data, data,
}); })
} }
export function doDelete(data) { export function doDelete(data) {
return request({ return request({
url: "/table/doDelete", url: '/table/doDelete',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getTreeList(data) { export function getTreeList(data) {
return request({ return request({
url: "/tree/list", url: '/tree/list',
method: "post", method: 'post',
data, data,
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
import { encryptedData } from "@/utils/encrypt"; import { encryptedData } from '@/utils/encrypt'
import { loginRSA, tokenName } from "@/config/settings"; import { loginRSA, tokenName } from '@/config/settings'
export async function login(data) { export async function login(data) {
if (loginRSA) { if (loginRSA) {
data = await encryptedData(data); data = await encryptedData(data)
} }
return request({ return request({
url: "/login", url: '/login',
method: "post", method: 'post',
data, data,
}); })
} }
export function getUserInfo(accessToken) { export function getUserInfo(accessToken) {
return request({ return request({
url: "/userInfo", url: '/userInfo',
method: "post", method: 'post',
data: { data: {
[tokenName]: accessToken, [tokenName]: accessToken,
}, },
}); })
} }
export function logout() { export function logout() {
return request({ return request({
url: "/logout", url: '/logout',
method: "post", method: 'post',
}); })
} }
export function register() { export function register() {
return request({ return request({
url: "/register", url: '/register',
method: "post", method: 'post',
}); })
} }
import request from "@/utils/request"; import request from '@/utils/request'
export function getList(data) { export function getList(data) {
return request({ return request({
url: "/userManagement/getList", url: '/userManagement/getList',
method: "post", method: 'post',
data, data,
}); })
} }
export function doEdit(data) { export function doEdit(data) {
return request({ return request({
url: "/userManagement/doEdit", url: '/userManagement/doEdit',
method: "post", method: 'post',
data, data,
}); })
} }
export function doDelete(data) { export function doDelete(data) {
return request({ return request({
url: "/userManagement/doDelete", url: '/userManagement/doDelete',
method: "post", method: 'post',
data, data,
}); })
} }
import Vue from "vue"; import Vue from 'vue'
import { ColorfullIcon } from "@/layouts/components"; import { ColorfullIcon } from '@/layouts/components'
Vue.component("VabColorfulIcon", ColorfullIcon); Vue.component('VabColorfulIcon', ColorfullIcon)
const req = require.context("./svg", false, /\.svg$/), const req = require.context('./svg', false, /\.svg$/),
requireAll = (requireContext) => { requireAll = (requireContext) => {
/*let a = requireContext.keys().map(requireContext); /*let a = requireContext.keys().map(requireContext);
let arr = []; let arr = [];
...@@ -12,6 +12,6 @@ const req = require.context("./svg", false, /\.svg$/), ...@@ -12,6 +12,6 @@ const req = require.context("./svg", false, /\.svg$/),
arr.push(icon); arr.push(icon);
} }
console.log(JSON.stringify(arr));*/ console.log(JSON.stringify(arr));*/
return requireContext.keys().map(requireContext); return requireContext.keys().map(requireContext)
}; }
requireAll(req); requireAll(req)
...@@ -32,132 +32,132 @@ ...@@ -32,132 +32,132 @@
<script> <script>
export default { export default {
name: "SelectTreeTemplate", name: 'SelectTreeTemplate',
props: { props: {
/* 树形结构数据 */ /* 树形结构数据 */
treeOptions: { treeOptions: {
type: Array, type: Array,
default: () => { default: () => {
return []; return []
}, },
}, },
/* 单选/多选 */ /* 单选/多选 */
selectType: { selectType: {
type: String, type: String,
default: () => { default: () => {
return "single"; return 'single'
}, },
}, },
/* 初始选中值key */ /* 初始选中值key */
selectedKey: { selectedKey: {
type: String, type: String,
default: () => { default: () => {
return ""; return ''
}, },
}, },
/* 初始选中值name */ /* 初始选中值name */
selectedValue: { selectedValue: {
type: String, type: String,
default: () => { default: () => {
return ""; return ''
}, },
}, },
/* 可做选择的层级 */ /* 可做选择的层级 */
selectLevel: { selectLevel: {
type: [String, Number], type: [String, Number],
default: () => { default: () => {
return ""; return ''
}, },
}, },
/* 可清空选项 */ /* 可清空选项 */
clearable: { clearable: {
type: Boolean, type: Boolean,
default: () => { default: () => {
return true; return true
}, },
}, },
}, },
data() { data() {
return { return {
defaultProps: { defaultProps: {
children: "children", children: 'children',
label: "name", label: 'name',
}, },
defaultSelectedKeys: [], //初始选中值数组 defaultSelectedKeys: [], //初始选中值数组
currentNodeKey: this.selectedKey, currentNodeKey: this.selectedKey,
selectValue: selectValue:
this.selectType == "multiple" this.selectType == 'multiple'
? this.selectedValue.split(",") ? this.selectedValue.split(',')
: this.selectedValue, //下拉框选中值label : this.selectedValue, //下拉框选中值label
selectKey: selectKey:
this.selectType == "multiple" this.selectType == 'multiple'
? this.selectedKey.split(",") ? this.selectedKey.split(',')
: this.selectedKey, //下拉框选中值value : this.selectedKey, //下拉框选中值value
}; }
}, },
mounted() { mounted() {
const that = this; const that = this
this.initTree(); this.initTree()
}, },
methods: { methods: {
// 初始化树的值 // 初始化树的值
initTree() { initTree() {
const that = this; const that = this
if (that.selectedKey) { if (that.selectedKey) {
that.defaultSelectedKeys = that.selectedKey.split(","); // 设置默认展开 that.defaultSelectedKeys = that.selectedKey.split(',') // 设置默认展开
if (that.selectType == "single") { if (that.selectType == 'single') {
that.$refs.treeOption.setCurrentKey(that.selectedKey); // 设置默认选中 that.$refs.treeOption.setCurrentKey(that.selectedKey) // 设置默认选中
} else { } else {
that.$refs.treeOption.setCheckedKeys(that.defaultSelectedKeys); that.$refs.treeOption.setCheckedKeys(that.defaultSelectedKeys)
} }
} }
}, },
// 清除选中 // 清除选中
clearHandle() { clearHandle() {
const that = this; const that = this
this.selectValue = ""; this.selectValue = ''
this.selectKey = ""; this.selectKey = ''
this.defaultSelectedKeys = []; this.defaultSelectedKeys = []
this.currentNodeKey = ""; this.currentNodeKey = ''
this.clearSelected(); this.clearSelected()
if (that.selectType == "single") { if (that.selectType == 'single') {
that.$refs.treeOption.setCurrentKey(""); // 设置默认选中 that.$refs.treeOption.setCurrentKey('') // 设置默认选中
} else { } else {
that.$refs.treeOption.setCheckedKeys([]); that.$refs.treeOption.setCheckedKeys([])
} }
}, },
/* 清空选中样式 */ /* 清空选中样式 */
clearSelected() { clearSelected() {
const allNode = document.querySelectorAll("#treeOption .el-tree-node"); const allNode = document.querySelectorAll('#treeOption .el-tree-node')
allNode.forEach((element) => element.classList.remove("is-current")); allNode.forEach((element) => element.classList.remove('is-current'))
}, },
// select多选时移除某项操作 // select多选时移除某项操作
removeTag(val) { removeTag(val) {
this.$refs.treeOption.setCheckedKeys([]); this.$refs.treeOption.setCheckedKeys([])
}, },
// 点击叶子节点 // 点击叶子节点
nodeClick(data, node, el) { nodeClick(data, node, el) {
if (data.rank >= this.selectLevel) { if (data.rank >= this.selectLevel) {
this.selectValue = data.name; this.selectValue = data.name
this.selectKey = data.id; this.selectKey = data.id
} }
}, },
// 节点选中操作 // 节点选中操作
checkNode(data, node, el) { checkNode(data, node, el) {
const checkedNodes = this.$refs.treeOption.getCheckedNodes(); const checkedNodes = this.$refs.treeOption.getCheckedNodes()
const keyArr = []; const keyArr = []
const valueArr = []; const valueArr = []
checkedNodes.forEach((item) => { checkedNodes.forEach((item) => {
if (item.rank >= this.selectLevel) { if (item.rank >= this.selectLevel) {
keyArr.push(item.id); keyArr.push(item.id)
valueArr.push(item.name); valueArr.push(item.name)
} }
}); })
this.selectValue = valueArr; this.selectValue = valueArr
this.selectKey = keyArr; this.selectKey = keyArr
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -24,12 +24,12 @@ ...@@ -24,12 +24,12 @@
<script> <script>
export default { export default {
name: "VabCharge", name: 'VabCharge',
props: { props: {
styleObj: { styleObj: {
type: Object, type: Object,
default: () => { default: () => {
return {}; return {}
}, },
}, },
startVal: { startVal: {
...@@ -44,16 +44,16 @@ ...@@ -44,16 +44,16 @@
data() { data() {
return { return {
decimals: 2, decimals: 2,
prefix: "", prefix: '',
suffix: "%", suffix: '%',
separator: ",", separator: ',',
duration: 3000, duration: 3000,
}; }
}, },
created() {}, created() {},
mounted() {}, mounted() {},
methods: {}, methods: {},
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
left: 50%; left: 50%;
width: 200px; width: 200px;
height: 200px; height: 200px;
content: ""; content: '';
background-color: #00ff6f; background-color: #00ff6f;
border-radius: 42% 38% 62% 49% / 45%; border-radius: 42% 38% 62% 49% / 45%;
transform: translate(-50%, -50%) rotate(0); transform: translate(-50%, -50%) rotate(0);
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
z-index: 99; z-index: 99;
width: 176px; width: 176px;
height: 176px; height: 176px;
content: ""; content: '';
background-color: #000; background-color: #000;
border-radius: 50%; border-radius: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
......
...@@ -18,16 +18,16 @@ ...@@ -18,16 +18,16 @@
<script> <script>
export default { export default {
name: "VabImage", name: 'VabImage',
components: {}, components: {},
props: { props: {
bigSrc: { bigSrc: {
type: String, type: String,
default: "", default: '',
}, },
smallSrc: { smallSrc: {
type: String, type: String,
default: "", default: '',
}, },
percent: { percent: {
type: Number, type: Number,
...@@ -35,19 +35,19 @@ ...@@ -35,19 +35,19 @@
}, },
}, },
data() { data() {
return {}; return {}
}, },
created() {}, created() {},
mounted() {}, mounted() {},
methods: { methods: {
clickBig() { clickBig() {
this.$emit("click-big"); this.$emit('click-big')
}, },
clickSmall() { clickSmall() {
this.$emit("click-small"); this.$emit('click-small')
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -26,40 +26,40 @@ ...@@ -26,40 +26,40 @@
<script> <script>
export default { export default {
name: "VabProfile", name: 'VabProfile',
props: { props: {
styleObj: { styleObj: {
type: Object, type: Object,
default: () => { default: () => {
return {}; return {}
}, },
}, },
username: { username: {
type: String, type: String,
default: "", default: '',
}, },
avatar: { avatar: {
type: String, type: String,
default: "", default: '',
}, },
iconArray: { iconArray: {
type: Array, type: Array,
default: () => { default: () => {
return [ return [
{ icon: "bell", url: "" }, { icon: 'bell', url: '' },
{ icon: "bookmark", url: "" }, { icon: 'bookmark', url: '' },
{ icon: "cloud-sun", url: "" }, { icon: 'cloud-sun', url: '' },
]; ]
}, },
}, },
}, },
data() { data() {
return {}; return {}
}, },
created() {}, created() {},
mounted() {}, mounted() {},
methods: {}, methods: {},
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -161,7 +161,7 @@ ...@@ -161,7 +161,7 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
color: black; color: black;
content: ""; content: '';
background: #35b9f1; background: #35b9f1;
transform: scaleX(0); transform: scaleX(0);
transform-origin: left; transform-origin: left;
...@@ -207,7 +207,7 @@ ...@@ -207,7 +207,7 @@
left: 0; left: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
content: ""; content: '';
border-radius: inherit; border-radius: inherit;
transform: scale(0); transform: scale(0);
} }
......
...@@ -6,22 +6,22 @@ ...@@ -6,22 +6,22 @@
<script> <script>
export default { export default {
name: "VabSnow", name: 'VabSnow',
props: { props: {
styleObj: { styleObj: {
type: Object, type: Object,
default: () => { default: () => {
return {}; return {}
}, },
}, },
}, },
data() { data() {
return {}; return {}
}, },
created() {}, created() {},
mounted() {}, mounted() {},
methods: {}, methods: {},
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -75,19 +75,19 @@ ...@@ -75,19 +75,19 @@
</template> </template>
<script> <script>
import { baseURL, tokenName } from "@/config/settings"; import { baseURL, tokenName } from '@/config/settings'
export default { export default {
name: "VabUpload", name: 'VabUpload',
props: { props: {
url: { url: {
type: String, type: String,
default: "/upload", default: '/upload',
required: true, required: true,
}, },
name: { name: {
type: String, type: String,
default: "file", default: 'file',
required: true, required: true,
}, },
limit: { limit: {
...@@ -106,106 +106,106 @@ ...@@ -106,106 +106,106 @@
show: false, show: false,
loading: false, loading: false,
dialogVisible: false, dialogVisible: false,
dialogImageUrl: "", dialogImageUrl: '',
action: "https://vab-unicloud-3a9da9.service.tcloudbase.com/upload", action: 'https://vab-unicloud-3a9da9.service.tcloudbase.com/upload',
headers: {}, headers: {},
fileList: [], fileList: [],
picture: "picture", picture: 'picture',
imgNum: 0, imgNum: 0,
imgSuccessNum: 0, imgSuccessNum: 0,
imgErrorNum: 0, imgErrorNum: 0,
typeList: null, typeList: null,
title: "上传", title: '上传',
dialogFormVisible: false, dialogFormVisible: false,
data: {}, data: {},
}; }
}, },
computed: { computed: {
percentage() { percentage() {
if (this.allImgNum == 0) return 0; if (this.allImgNum == 0) return 0
return this.$baseLodash.round(this.imgNum / this.allImgNum, 2) * 100; return this.$baseLodash.round(this.imgNum / this.allImgNum, 2) * 100
}, },
}, },
methods: { methods: {
submitUpload() { submitUpload() {
this.$refs.upload.submit(); this.$refs.upload.submit()
}, },
handleProgress(event, file, fileList) { handleProgress(event, file, fileList) {
this.loading = true; this.loading = true
this.show = true; this.show = true
}, },
handleChange(file, fileList) { handleChange(file, fileList) {
if (file.size > 1048576 * this.size) { if (file.size > 1048576 * this.size) {
fileList.map((item, index) => { fileList.map((item, index) => {
if (item === file) { if (item === file) {
fileList.splice(index, 1); fileList.splice(index, 1)
} }
}); })
this.fileList = fileList; this.fileList = fileList
} else { } else {
this.allImgNum = fileList.length; this.allImgNum = fileList.length
} }
}, },
handleSuccess(response, file, fileList) { handleSuccess(response, file, fileList) {
this.imgNum = this.imgNum + 1; this.imgNum = this.imgNum + 1
this.imgSuccessNum = this.imgSuccessNum + 1; this.imgSuccessNum = this.imgSuccessNum + 1
if (fileList.length === this.imgNum) { if (fileList.length === this.imgNum) {
setTimeout(() => { setTimeout(() => {
this.$baseMessage( this.$baseMessage(
`上传完成! 共上传${fileList.length}张图片`, `上传完成! 共上传${fileList.length}张图片`,
"success" 'success'
); )
}, 1000); }, 1000)
} }
setTimeout(() => { setTimeout(() => {
this.loading = false; this.loading = false
this.show = false; this.show = false
}, 1000); }, 1000)
}, },
handleError(err, file, fileList) { handleError(err, file, fileList) {
this.imgNum = this.imgNum + 1; this.imgNum = this.imgNum + 1
this.imgErrorNum = this.imgErrorNum + 1; this.imgErrorNum = this.imgErrorNum + 1
this.$baseMessage( this.$baseMessage(
`文件[${file.raw.name}]上传失败,文件大小为${this.$baseLodash.round( `文件[${file.raw.name}]上传失败,文件大小为${this.$baseLodash.round(
file.raw.size / 1024, file.raw.size / 1024,
0 0
)}KB`, )}KB`,
"error" 'error'
); )
setTimeout(() => { setTimeout(() => {
this.loading = false; this.loading = false
this.show = false; this.show = false
}, 1000); }, 1000)
}, },
handleRemove(file, fileList) { handleRemove(file, fileList) {
this.imgNum = this.imgNum - 1; this.imgNum = this.imgNum - 1
this.allNum = this.allNum - 1; this.allNum = this.allNum - 1
}, },
handlePreview(file) { handlePreview(file) {
this.dialogImageUrl = file.url; this.dialogImageUrl = file.url
this.dialogVisible = true; this.dialogVisible = true
}, },
handleExceed(files, fileList) { handleExceed(files, fileList) {
this.$baseMessage( this.$baseMessage(
`当前限制选择 ${this.limit} 个文件,本次选择了 `当前限制选择 ${this.limit} 个文件,本次选择了
${files.length} ${files.length}
个文件`, 个文件`,
"error" 'error'
); )
}, },
handleShow(data) { handleShow(data) {
this.title = "上传"; this.title = '上传'
this.data = data; this.data = data
this.dialogFormVisible = true; this.dialogFormVisible = true
}, },
handleClose() { handleClose() {
this.fileList = []; this.fileList = []
this.picture = "picture"; this.picture = 'picture'
this.allImgNum = 0; this.allImgNum = 0
this.imgNum = 0; this.imgNum = 0
this.imgSuccessNum = 0; this.imgSuccessNum = 0
this.imgErrorNum = 0; this.imgErrorNum = 0
/* if ("development" === process.env.NODE_ENV) { /* if ("development" === process.env.NODE_ENV) {
this.api = process.env.VUE_APP_BASE_API; this.api = process.env.VUE_APP_BASE_API;
} else { } else {
...@@ -213,10 +213,10 @@ ...@@ -213,10 +213,10 @@
} }
this.action = this.api + this.url; */ this.action = this.api + this.url; */
this.dialogFormVisible = false; this.dialogFormVisible = false
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
* @description 导出自定义配置 * @description 导出自定义配置
**/ **/
const config = { const config = {
layout: "vertical", layout: 'vertical',
}; }
module.exports = config; module.exports = config
/** /**
* @description 导出默认配置(通用配置|主题配置|网络配置) * @description 导出默认配置(通用配置|主题配置|网络配置)
**/ **/
const setting = require("./setting.config"); const setting = require('./setting.config')
const theme = require("./theme.config"); const theme = require('./theme.config')
const network = require("./net.config"); const network = require('./net.config')
module.exports = { setting, theme, network }; module.exports = { setting, theme, network }
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
**/ **/
const network = { const network = {
//配后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8 //配后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8
contentType: "application/json;charset=UTF-8", contentType: 'application/json;charset=UTF-8',
//消息框消失时间 //消息框消失时间
messageDuration: 3000, messageDuration: 3000,
//最长请求时间 //最长请求时间
...@@ -14,5 +14,5 @@ const network = { ...@@ -14,5 +14,5 @@ const network = {
invalidCode: 402, invalidCode: 402,
//无权限code //无权限code
noPermissionCode: 401, noPermissionCode: 401,
}; }
module.exports = network; module.exports = network
...@@ -3,26 +3,26 @@ ...@@ -3,26 +3,26 @@
*/ */
const setting = { const setting = {
// 开发以及部署时的URL // 开发以及部署时的URL
publicPath: "", publicPath: '',
// 生产环境构建文件的目录名 // 生产环境构建文件的目录名
outputDir: "dist", outputDir: 'dist',
// 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。 // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
assetsDir: "static", assetsDir: 'static',
// 开发环境每次保存时是否输出为eslint编译警告 // 开发环境每次保存时是否输出为eslint编译警告
lintOnSave: true, lintOnSave: true,
// 进行编译的依赖 // 进行编译的依赖
transpileDependencies: ["vue-echarts", "resize-detector"], transpileDependencies: ['vue-echarts', 'resize-detector'],
// 默认的接口地址 如果是开发环境和生产环境走vab-mock-server,当然你也可以选择自己配置成需要的接口地址 // 默认的接口地址 如果是开发环境和生产环境走vab-mock-server,当然你也可以选择自己配置成需要的接口地址
baseURL: baseURL:
process.env.NODE_ENV === "development" process.env.NODE_ENV === 'development'
? "vab-mock-server" ? 'vab-mock-server'
: "vab-mock-server", : 'vab-mock-server',
//标题 (包括初次加载雪花屏的标题 页面的标题 浏览器的标题) //标题 (包括初次加载雪花屏的标题 页面的标题 浏览器的标题)
title: "vue-admin-beautiful", title: 'vue-admin-beautiful',
//简写 //简写
abbreviation: "vab", abbreviation: 'vab',
//开发环境端口号 //开发环境端口号
devPort: "80", devPort: '80',
//版本号 //版本号
version: process.env.VUE_APP_VERSION, version: process.env.VUE_APP_VERSION,
//烦请保留package.json作者信息 即可免费商用 //烦请保留package.json作者信息 即可免费商用
...@@ -34,42 +34,42 @@ const setting = { ...@@ -34,42 +34,42 @@ const setting = {
//缓存路由的最大数量 //缓存路由的最大数量
keepAliveMaxNum: 99, keepAliveMaxNum: 99,
// 路由模式,可选值为 history 或 hash // 路由模式,可选值为 history 或 hash
routerMode: "hash", routerMode: 'hash',
//不经过token校验的路由 //不经过token校验的路由
routesWhiteList: ["/login", "/register", "/404", "/401"], routesWhiteList: ['/login', '/register', '/404', '/401'],
//加载时显示文字 //加载时显示文字
loadingText: "正在加载中...", loadingText: '正在加载中...',
//token名称 //token名称
tokenName: "accessToken", tokenName: 'accessToken',
//token在localStorage、sessionStorage存储的key的名称 //token在localStorage、sessionStorage存储的key的名称
tokenTableName: "vue-admin-beautiful", tokenTableName: 'vue-admin-beautiful',
//token存储位置localStorage sessionStorage //token存储位置localStorage sessionStorage
storage: "localStorage", storage: 'localStorage',
//token失效回退到登录页时是否记录本次的路由 //token失效回退到登录页时是否记录本次的路由
recordRoute: true, recordRoute: true,
//是否显示logo,不显示时设置false,显示时请填写remixIcon图标名称,暂时只支持设置remixIcon //是否显示logo,不显示时设置false,显示时请填写remixIcon图标名称,暂时只支持设置remixIcon
logo: "vuejs-fill", logo: 'vuejs-fill',
//是否显示在页面高亮错误 //是否显示在页面高亮错误
errorLog: ["development"], errorLog: ['development'],
//是否开启登录拦截 //是否开启登录拦截
loginInterception: true, loginInterception: true,
//是否开启登录RSA加密 //是否开启登录RSA加密
loginRSA: false, loginRSA: false,
//intelligence和all两种方式,前者后端权限只控制permissions不控制view文件的import(前后端配合,减轻后端工作量),all方式完全交给后端前端只负责加载 //intelligence和all两种方式,前者后端权限只控制permissions不控制view文件的import(前后端配合,减轻后端工作量),all方式完全交给后端前端只负责加载
authentication: "intelligence", authentication: 'intelligence',
//vertical布局时是否只保持一个子菜单的展开 //vertical布局时是否只保持一个子菜单的展开
uniqueOpened: true, uniqueOpened: true,
//vertical布局时默认展开的菜单path,使用逗号隔开建议只展开一个 //vertical布局时默认展开的菜单path,使用逗号隔开建议只展开一个
defaultOopeneds: ["/vab"], defaultOopeneds: ['/vab'],
//需要加loading层的请求,防止重复提交 //需要加loading层的请求,防止重复提交
debounce: ["doEdit"], debounce: ['doEdit'],
//需要自动注入并加载的模块 //需要自动注入并加载的模块
providePlugin: { maptalks: "maptalks", "window.maptalks": "maptalks" }, providePlugin: { maptalks: 'maptalks', 'window.maptalks': 'maptalks' },
//npm run build时是否自动生成7z压缩包 //npm run build时是否自动生成7z压缩包
build7z: false, build7z: false,
//代码生成机生成在view下的文件夹名称 //代码生成机生成在view下的文件夹名称
templateFolder: "project", templateFolder: 'project',
//是否显示终端donation打印 //是否显示终端donation打印
donation: true, donation: true,
}; }
module.exports = setting; module.exports = setting
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
*/ */
const theme = { const theme = {
//是否国定头部 固定fixed 不固定noFixed //是否国定头部 固定fixed 不固定noFixed
header: "fixed", header: 'fixed',
//横纵布局 horizontal vertical //横纵布局 horizontal vertical
layout: "vertical", layout: 'vertical',
//是否开启主题配置按钮 //是否开启主题配置按钮
themeBar: true, themeBar: true,
//是否显示多标签页 //是否显示多标签页
tabsBar: true, tabsBar: true,
}; }
module.exports = theme; module.exports = theme
...@@ -2,84 +2,81 @@ ...@@ -2,84 +2,81 @@
* @author chuzhixin 1204505056@qq.com (不想保留author可删除) * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
* @description 路由守卫,目前两种模式:all模式与intelligence模式 * @description 路由守卫,目前两种模式:all模式与intelligence模式
*/ */
import router from "@/router"; import router from '@/router'
import store from "@/store"; import store from '@/store'
import VabProgress from "nprogress"; import VabProgress from 'nprogress'
import "nprogress/nprogress.css"; import 'nprogress/nprogress.css'
import getPageTitle from "@/utils/pageTitle"; import getPageTitle from '@/utils/pageTitle'
import { import {
authentication, authentication,
loginInterception, loginInterception,
progressBar, progressBar,
recordRoute, recordRoute,
routesWhiteList, routesWhiteList,
} from "./settings"; } from './settings'
VabProgress.configure({ VabProgress.configure({
easing: "ease", easing: 'ease',
speed: 500, speed: 500,
trickleSpeed: 200, trickleSpeed: 200,
showSpinner: false, showSpinner: false,
}); })
router.beforeResolve(async (to, from, next) => { router.beforeResolve(async (to, from, next) => {
if (progressBar) VabProgress.start(); if (progressBar) VabProgress.start()
let hasToken = store.getters["user/accessToken"]; let hasToken = store.getters['user/accessToken']
if (!loginInterception) hasToken = true; if (!loginInterception) hasToken = true
if (hasToken) { if (hasToken) {
if (to.path === "/login") { if (to.path === '/login') {
next({ path: "/" }); next({ path: '/' })
if (progressBar) VabProgress.done(); if (progressBar) VabProgress.done()
} else { } else {
const hasPermissions = const hasPermissions =
store.getters["user/permissions"] && store.getters['user/permissions'] &&
store.getters["user/permissions"].length > 0; store.getters['user/permissions'].length > 0
if (hasPermissions) { if (hasPermissions) {
next(); next()
} else { } else {
try { try {
let permissions; let permissions
if (!loginInterception) { if (!loginInterception) {
//settings.js loginInterception为false时,创建虚拟权限 //settings.js loginInterception为false时,创建虚拟权限
await store.dispatch("user/setPermissions", ["admin"]); await store.dispatch('user/setPermissions', ['admin'])
permissions = ["admin"]; permissions = ['admin']
} else { } else {
permissions = await store.dispatch("user/getUserInfo"); permissions = await store.dispatch('user/getUserInfo')
} }
let accessRoutes = []; let accessRoutes = []
if (authentication === "intelligence") { if (authentication === 'intelligence') {
accessRoutes = await store.dispatch( accessRoutes = await store.dispatch('routes/setRoutes', permissions)
"routes/setRoutes", } else if (authentication === 'all') {
permissions accessRoutes = await store.dispatch('routes/setAllRoutes')
);
} else if (authentication === "all") {
accessRoutes = await store.dispatch("routes/setAllRoutes");
} }
router.addRoutes(accessRoutes); router.addRoutes(accessRoutes)
next({ ...to, replace: true }); next({ ...to, replace: true })
} catch { } catch {
await store.dispatch("user/resetAccessToken"); await store.dispatch('user/resetAccessToken')
if (progressBar) VabProgress.done(); if (progressBar) VabProgress.done()
} }
} }
} }
} else { } else {
if (routesWhiteList.indexOf(to.path) !== -1) { if (routesWhiteList.indexOf(to.path) !== -1) {
next(); next()
} else { } else {
if (recordRoute) { if (recordRoute) {
next(`/login?redirect=${to.path}`); next(`/login?redirect=${to.path}`)
} else { } else {
next("/login"); next('/login')
} }
if (progressBar) VabProgress.done(); if (progressBar) VabProgress.done()
} }
} }
document.title = getPageTitle(to.meta.title); document.title = getPageTitle(to.meta.title)
}); })
router.afterEach(() => { router.afterEach(() => {
if (progressBar) VabProgress.done(); if (progressBar) VabProgress.done()
}); })
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* @description 3个子配置,通用配置|主题配置|网络配置,建议在当前目录下修改config.js修改配置,会覆盖默认配置,也可以直接修改默认配置 * @description 3个子配置,通用配置|主题配置|网络配置,建议在当前目录下修改config.js修改配置,会覆盖默认配置,也可以直接修改默认配置
*/ */
//默认配置 //默认配置
const { setting, theme, network } = require("./default"); const { setting, theme, network } = require('./default')
//自定义配置 //自定义配置
const config = require("./config"); const config = require('./config')
//导出配置(以自定义配置为主) //导出配置(以自定义配置为主)
module.exports = Object.assign({}, setting, theme, network, config); module.exports = Object.assign({}, setting, theme, network, config)
...@@ -16,24 +16,24 @@ ...@@ -16,24 +16,24 @@
</div> </div>
</template> </template>
<script> <script>
import { getList } from "@/api/ad"; import { getList } from '@/api/ad'
export default { export default {
data() { data() {
return { return {
nodeEnv: process.env.NODE_ENV, nodeEnv: process.env.NODE_ENV,
adList: [], adList: [],
}; }
}, },
created() { created() {
this.fetchData(); this.fetchData()
}, },
methods: { methods: {
async fetchData() { async fetchData() {
const { data } = await getList(); const { data } = await getList()
this.adList = data; this.adList = data
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.vab-ad { .vab-ad {
......
...@@ -14,16 +14,16 @@ ...@@ -14,16 +14,16 @@
</template> </template>
<script> <script>
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from 'vuex'
import { import {
copyright, copyright,
footerCopyright, footerCopyright,
keepAliveMaxNum, keepAliveMaxNum,
title, title,
} from "@/config/settings"; } from '@/config/settings'
export default { export default {
name: "AppMain", name: 'AppMain',
data() { data() {
return { return {
show: false, show: false,
...@@ -33,50 +33,50 @@ ...@@ -33,50 +33,50 @@
keepAliveMaxNum, keepAliveMaxNum,
routerView: true, routerView: true,
footerCopyright, footerCopyright,
}; }
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
visitedRoutes: "tabsBar/visitedRoutes", visitedRoutes: 'tabsBar/visitedRoutes',
device: "settings/device", device: 'settings/device',
}), }),
cachedRoutes() { cachedRoutes() {
const cachedRoutesArr = []; const cachedRoutesArr = []
this.visitedRoutes.forEach((item) => { this.visitedRoutes.forEach((item) => {
if (!item.meta.noKeepAlive) { if (!item.meta.noKeepAlive) {
cachedRoutesArr.push(item.name); cachedRoutesArr.push(item.name)
} }
}); })
return cachedRoutesArr; return cachedRoutesArr
}, },
key() { key() {
return this.$route.path; return this.$route.path
}, },
}, },
watch: { watch: {
$route: { $route: {
handler(route) { handler(route) {
if ("mobile" === this.device) this.foldSideBar(); if ('mobile' === this.device) this.foldSideBar()
}, },
immediate: true, immediate: true,
}, },
}, },
created() { created() {
//重载所有路由 //重载所有路由
this.$baseEventBus.$on("reload-routerview", () => { this.$baseEventBus.$on('reload-routerview', () => {
this.routerView = false; this.routerView = false
this.$nextTick(() => { this.$nextTick(() => {
this.routerView = true; this.routerView = true
}); })
}); })
}, },
mounted() {}, mounted() {},
methods: { methods: {
...mapActions({ ...mapActions({
foldSideBar: "settings/foldSideBar", foldSideBar: 'settings/foldSideBar',
}), }),
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -18,54 +18,54 @@ ...@@ -18,54 +18,54 @@
</template> </template>
<script> <script>
import { mapGetters } from "vuex"; import { mapGetters } from 'vuex'
import { recordRoute } from "@/config/settings"; import { recordRoute } from '@/config/settings'
export default { export default {
name: "Avatar", name: 'Avatar',
computed: { computed: {
...mapGetters({ ...mapGetters({
avatar: "user/avatar", avatar: 'user/avatar',
username: "user/username", username: 'user/username',
}), }),
}, },
methods: { methods: {
handleCommand(command) { handleCommand(command) {
switch (command) { switch (command) {
case "logout": case 'logout':
this.logout(); this.logout()
break; break
case "personalCenter": case 'personalCenter':
this.personalCenter(); this.personalCenter()
break; break
case "github": case 'github':
window.open("https://github.com/chuzhixin/vue-admin-beautiful"); window.open('https://github.com/chuzhixin/vue-admin-beautiful')
break; break
case "gitee": case 'gitee':
window.open("https://gitee.com/chu1204505056/vue-admin-beautiful"); window.open('https://gitee.com/chu1204505056/vue-admin-beautiful')
break; break
} }
}, },
personalCenter() { personalCenter() {
this.$router.push("/personalCenter/personalCenter"); this.$router.push('/personalCenter/personalCenter')
}, },
logout() { logout() {
this.$baseConfirm( this.$baseConfirm(
"您确定要退出" + this.$baseTitle + "吗?", '您确定要退出' + this.$baseTitle + '吗?',
null, null,
async () => { async () => {
await this.$store.dispatch("user/logout"); await this.$store.dispatch('user/logout')
if (recordRoute) { if (recordRoute) {
const fullPath = this.$route.fullPath; const fullPath = this.$route.fullPath
this.$router.push(`/login?redirect=${fullPath}`); this.$router.push(`/login?redirect=${fullPath}`)
} else { } else {
this.$router.push("/login"); this.$router.push('/login')
} }
} }
); )
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.avatar-dropdown { .avatar-dropdown {
......
...@@ -8,25 +8,25 @@ ...@@ -8,25 +8,25 @@
<script> <script>
export default { export default {
name: "Breadcrumb", name: 'Breadcrumb',
data() { data() {
return { return {
list: this.getBreadcrumb(), list: this.getBreadcrumb(),
}; }
}, },
watch: { watch: {
$route() { $route() {
this.list = this.getBreadcrumb(); this.list = this.getBreadcrumb()
}, },
}, },
methods: { methods: {
getBreadcrumb() { getBreadcrumb() {
return this.$route.matched.filter( return this.$route.matched.filter(
(item) => item.name && item.meta.title (item) => item.name && item.meta.title
); )
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -14,23 +14,23 @@ ...@@ -14,23 +14,23 @@
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from "vuex"; import { mapGetters } from 'vuex'
import { logo } from "@/config/settings"; import { logo } from '@/config/settings'
export default { export default {
name: "Logo", name: 'Logo',
data() { data() {
return { return {
title: this.$baseTitle, title: this.$baseTitle,
}; }
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
logo: "settings/logo", logo: 'settings/logo',
layout: "settings/layout", layout: 'settings/layout',
}), }),
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@mixin container { @mixin container {
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</template> </template>
<script> <script>
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from 'vuex'
import { import {
Avatar, Avatar,
...@@ -44,10 +44,10 @@ ...@@ -44,10 +44,10 @@
ErrorLog, ErrorLog,
FullScreenBar, FullScreenBar,
ThemeBar, ThemeBar,
} from "@/layouts/components"; } from '@/layouts/components'
export default { export default {
name: "NavBar", name: 'NavBar',
components: { components: {
Avatar, Avatar,
Breadcrumb, Breadcrumb,
...@@ -58,32 +58,32 @@ ...@@ -58,32 +58,32 @@
data() { data() {
return { return {
pulse: false, pulse: false,
}; }
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
collapse: "settings/collapse", collapse: 'settings/collapse',
visitedRoutes: "tabsBar/visitedRoutes", visitedRoutes: 'tabsBar/visitedRoutes',
device: "settings/device", device: 'settings/device',
routes: "routes/routes", routes: 'routes/routes',
}), }),
}, },
methods: { methods: {
...mapActions({ ...mapActions({
changeCollapse: "settings/changeCollapse", changeCollapse: 'settings/changeCollapse',
}), }),
handleCollapse() { handleCollapse() {
this.changeCollapse(); this.changeCollapse()
}, },
async refreshRoute() { async refreshRoute() {
this.$baseEventBus.$emit("reload-routerview"); this.$baseEventBus.$emit('reload-routerview')
this.pulse = true; this.pulse = true
setTimeout(() => { setTimeout(() => {
this.pulse = false; this.pulse = false
}, 1000); }, 1000)
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -66,119 +66,119 @@ ...@@ -66,119 +66,119 @@
</template> </template>
<script> <script>
import variables from "@/styles/variables.scss"; import variables from '@/styles/variables.scss'
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from 'vuex'
import { layout as defaultLayout } from "@/config/settings"; import { layout as defaultLayout } from '@/config/settings'
export default { export default {
name: "ThemeBar", name: 'ThemeBar',
data() { data() {
return { return {
drawerVisible: false, drawerVisible: false,
theme: { theme: {
name: "default", name: 'default',
layout: "", layout: '',
header: "", header: '',
tabsBar: "", tabsBar: '',
}, },
}; }
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
layout: "settings/layout", layout: 'settings/layout',
header: "settings/header", header: 'settings/header',
tabsBar: "settings/tabsBar", tabsBar: 'settings/tabsBar',
themeBar: "settings/themeBar", themeBar: 'settings/themeBar',
}), }),
}, },
created() { created() {
this.$baseEventBus.$on("theme", () => { this.$baseEventBus.$on('theme', () => {
this.handleOpenThemeBar(); this.handleOpenThemeBar()
}); })
const theme = localStorage.getItem("vue-admin-beautiful-theme"); const theme = localStorage.getItem('vue-admin-beautiful-theme')
if (null !== theme) { if (null !== theme) {
this.theme = JSON.parse(theme); this.theme = JSON.parse(theme)
this.handleSetTheme(); this.handleSetTheme()
} else { } else {
this.theme.layout = this.layout; this.theme.layout = this.layout
this.theme.header = this.header; this.theme.header = this.header
this.theme.tabsBar = this.tabsBar; this.theme.tabsBar = this.tabsBar
} }
}, },
methods: { methods: {
...mapActions({ ...mapActions({
changeLayout: "settings/changeLayout", changeLayout: 'settings/changeLayout',
changeHeader: "settings/changeHeader", changeHeader: 'settings/changeHeader',
changeTabsBar: "settings/changeTabsBar", changeTabsBar: 'settings/changeTabsBar',
}), }),
handleIsMobile() { handleIsMobile() {
return document.body.getBoundingClientRect().width - 1 < 992; return document.body.getBoundingClientRect().width - 1 < 992
}, },
handleOpenThemeBar() { handleOpenThemeBar() {
this.drawerVisible = true; this.drawerVisible = true
}, },
handleSetTheme() { handleSetTheme() {
let { name, layout, header, tabsBar } = this.theme; let { name, layout, header, tabsBar } = this.theme
localStorage.setItem( localStorage.setItem(
"vue-admin-beautiful-theme", 'vue-admin-beautiful-theme',
`{ `{
"name":"${name}", "name":"${name}",
"layout":"${layout}", "layout":"${layout}",
"header":"${header}", "header":"${header}",
"tabsBar":"${tabsBar}" "tabsBar":"${tabsBar}"
}` }`
); )
if (!this.handleIsMobile()) this.changeLayout(layout); if (!this.handleIsMobile()) this.changeLayout(layout)
this.changeHeader(header); this.changeHeader(header)
this.changeTabsBar(tabsBar); this.changeTabsBar(tabsBar)
document.getElementsByTagName( document.getElementsByTagName(
"body" 'body'
)[0].className = `vue-admin-beautiful-theme-${name}`; )[0].className = `vue-admin-beautiful-theme-${name}`
this.drawerVisible = false; this.drawerVisible = false
}, },
handleSaveTheme() { handleSaveTheme() {
this.handleSetTheme(); this.handleSetTheme()
}, },
handleSetDfaultTheme() { handleSetDfaultTheme() {
let { name } = this.theme; let { name } = this.theme
document document
.getElementsByTagName("body")[0] .getElementsByTagName('body')[0]
.classList.remove(`vue-admin-beautiful-theme-${name}`); .classList.remove(`vue-admin-beautiful-theme-${name}`)
localStorage.removeItem("vue-admin-beautiful-theme"); localStorage.removeItem('vue-admin-beautiful-theme')
this.$refs["form"].resetFields(); this.$refs['form'].resetFields()
Object.assign(this.$data, this.$options.data()); Object.assign(this.$data, this.$options.data())
this.changeHeader(defaultLayout); this.changeHeader(defaultLayout)
this.theme.name = "default"; this.theme.name = 'default'
this.theme.layout = this.layout; this.theme.layout = this.layout
this.theme.header = this.header; this.theme.header = this.header
this.theme.tabsBar = this.tabsBar; this.theme.tabsBar = this.tabsBar
this.drawerVisible = false; this.drawerVisible = false
}, },
handleGetCode() { handleGetCode() {
const url = const url =
"https://github.com/chuzhixin/vue-admin-beautiful/tree/master/src/views"; 'https://github.com/chuzhixin/vue-admin-beautiful/tree/master/src/views'
let path = this.$route.path + "/index.vue"; let path = this.$route.path + '/index.vue'
if (path === "/vab/menu1/menu1-1/menu1-1-1/index.vue") { if (path === '/vab/menu1/menu1-1/menu1-1-1/index.vue') {
path = "/vab/nested/menu1/menu1-1/menu1-1-1/index.vue"; path = '/vab/nested/menu1/menu1-1/menu1-1-1/index.vue'
} }
if (path === "/vab/icon/awesomeIcon/index.vue") { if (path === '/vab/icon/awesomeIcon/index.vue') {
path = "/vab/icon/index.vue"; path = '/vab/icon/index.vue'
} }
if (path === "/vab/icon/remixIcon/index.vue") { if (path === '/vab/icon/remixIcon/index.vue') {
path = "/vab/icon/remixIcon.vue"; path = '/vab/icon/remixIcon.vue'
} }
if (path === "/vab/icon/colorfulIcon/index.vue") { if (path === '/vab/icon/colorfulIcon/index.vue') {
path = "/vab/icon/colorfulIcon.vue"; path = '/vab/icon/colorfulIcon.vue'
} }
if (path === "/vab/table/comprehensiveTable/index.vue") { if (path === '/vab/table/comprehensiveTable/index.vue') {
path = "/vab/table/index.vue"; path = '/vab/table/index.vue'
} }
if (path === "/vab/table/inlineEditTable/index.vue") { if (path === '/vab/table/inlineEditTable/index.vue') {
path = "/vab/table/inlineEditTable.vue"; path = '/vab/table/inlineEditTable.vue'
} }
window.open(url + path); window.open(url + path)
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -4,27 +4,27 @@ ...@@ -4,27 +4,27 @@
* 当然也存在一定的弊端,给开发者自定义增加了一定的困难, * 当然也存在一定的弊端,给开发者自定义增加了一定的困难,
* 如果您一定要进行高度自定义,请仔细阅读讨论群文档,layouts本地化篇。 * 如果您一定要进行高度自定义,请仔细阅读讨论群文档,layouts本地化篇。
*/ */
export { default as ColorfullIcon } from "zx-layouts/ColorfullIcon"; export { default as ColorfullIcon } from 'zx-layouts/ColorfullIcon'
export { default as RemixIcon } from "zx-layouts/RemixIcon"; export { default as RemixIcon } from 'zx-layouts/RemixIcon'
export { default as VabDrag } from "zx-layouts/Drag"; export { default as VabDrag } from 'zx-layouts/Drag'
export { default as VabPermissions } from "zx-layouts/Permissions"; export { default as VabPermissions } from 'zx-layouts/Permissions'
export { default as VabQueryForm } from "zx-layouts/VabQueryForm/export"; export { default as VabQueryForm } from 'zx-layouts/VabQueryForm/export'
//本地化logo、默认使用svg,如需变更为png更改logo源码即可 //本地化logo、默认使用svg,如需变更为png更改logo源码即可
export { default as Logo } from "./Logo"; export { default as Logo } from './Logo'
//本地化头像组件 //本地化头像组件
export { default as Avatar } from "./Avatar"; export { default as Avatar } from './Avatar'
//本地化广告组件,如不需要全局搜索ad组件删掉即可 //本地化广告组件,如不需要全局搜索ad组件删掉即可
export { default as Ad } from "./Ad"; export { default as Ad } from './Ad'
//本地化AppMain组件 //本地化AppMain组件
export { default as AppMain } from "./AppMain"; export { default as AppMain } from './AppMain'
export { default as TabsBar } from "zx-layouts/TabsBar"; export { default as TabsBar } from 'zx-layouts/TabsBar'
export { default as SideBar } from "zx-layouts/SideBar"; export { default as SideBar } from 'zx-layouts/SideBar'
//本地化Breadcrumb组件 //本地化Breadcrumb组件
export { default as Breadcrumb } from "./Breadcrumb"; export { default as Breadcrumb } from './Breadcrumb'
export { default as FullScreenBar } from "zx-layouts/FullScreenBar"; export { default as FullScreenBar } from 'zx-layouts/FullScreenBar'
export { default as ErrorLog } from "zx-layouts/ErrorLog"; export { default as ErrorLog } from 'zx-layouts/ErrorLog'
//本地化ThemeBar组件 //本地化ThemeBar组件
export { default as ThemeBar } from "./ThemeBar"; export { default as ThemeBar } from './ThemeBar'
export { default as TopBar } from "zx-layouts/TopBar"; export { default as TopBar } from 'zx-layouts/TopBar'
//本地化NavBar组件 //本地化NavBar组件
export { default as NavBar } from "./NavBar"; export { default as NavBar } from './NavBar'
...@@ -52,11 +52,11 @@ ...@@ -52,11 +52,11 @@
</template> </template>
<script> <script>
import { Ad, AppMain, NavBar, SideBar, TabsBar, TopBar } from "./components"; import { Ad, AppMain, NavBar, SideBar, TabsBar, TopBar } from './components'
import { mapActions, mapGetters } from "vuex"; import { mapActions, mapGetters } from 'vuex'
import { tokenName } from "@/config/settings"; import { tokenName } from '@/config/settings'
export default { export default {
name: "Layout", name: 'Layout',
components: { components: {
Ad, Ad,
TopBar, TopBar,
...@@ -66,88 +66,88 @@ ...@@ -66,88 +66,88 @@
TabsBar, TabsBar,
}, },
data() { data() {
return { oldLayout: "" }; return { oldLayout: '' }
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
layout: "settings/layout", layout: 'settings/layout',
tabsBar: "settings/tabsBar", tabsBar: 'settings/tabsBar',
collapse: "settings/collapse", collapse: 'settings/collapse',
header: "settings/header", header: 'settings/header',
device: "settings/device", device: 'settings/device',
}), }),
classObj() { classObj() {
return { return {
mobile: this.device === "mobile", mobile: this.device === 'mobile',
}; }
}, },
}, },
beforeMount() { beforeMount() {
window.addEventListener("resize", this.handleResize); window.addEventListener('resize', this.handleResize)
}, },
beforeDestroy() { beforeDestroy() {
window.removeEventListener("resize", this.handleResize); window.removeEventListener('resize', this.handleResize)
}, },
mounted() { mounted() {
this.oldLayout = this.layout; this.oldLayout = this.layout
const userAgent = navigator.userAgent; const userAgent = navigator.userAgent
if (userAgent.includes("Juejin")) { if (userAgent.includes('Juejin')) {
this.$baseAlert( this.$baseAlert(
"vue-admin-beautiful不支持在掘金内置浏览器演示,请手动复制以下地址到浏览器中查看http://mpfhrd48.sanxing.uz7.cn/vue-admin-beautiful" 'vue-admin-beautiful不支持在掘金内置浏览器演示,请手动复制以下地址到浏览器中查看http://mpfhrd48.sanxing.uz7.cn/vue-admin-beautiful'
); )
} }
const isMobile = this.handleIsMobile(); const isMobile = this.handleIsMobile()
if (isMobile) { if (isMobile) {
if (isMobile) { if (isMobile) {
//横向布局时如果是手机端访问那么改成纵向版 //横向布局时如果是手机端访问那么改成纵向版
this.$store.dispatch("settings/changeLayout", "vertical"); this.$store.dispatch('settings/changeLayout', 'vertical')
} else { } else {
this.$store.dispatch("settings/changeLayout", this.oldLayout); this.$store.dispatch('settings/changeLayout', this.oldLayout)
} }
this.$store.dispatch("settings/toggleDevice", "mobile"); this.$store.dispatch('settings/toggleDevice', 'mobile')
setTimeout(() => { setTimeout(() => {
this.$store.dispatch("settings/foldSideBar"); this.$store.dispatch('settings/foldSideBar')
}, 2000); }, 2000)
} else { } else {
this.$store.dispatch("settings/openSideBar"); this.$store.dispatch('settings/openSideBar')
} }
this.$nextTick(() => { this.$nextTick(() => {
window.addEventListener( window.addEventListener(
"storage", 'storage',
(e) => { (e) => {
if (e.key === tokenName || e.key === null) window.location.reload(); if (e.key === tokenName || e.key === null) window.location.reload()
if (e.key === tokenName && e.value === null) if (e.key === tokenName && e.value === null)
window.location.reload(); window.location.reload()
}, },
false false
); )
}); })
}, },
methods: { methods: {
...mapActions({ ...mapActions({
handleFoldSideBar: "settings/foldSideBar", handleFoldSideBar: 'settings/foldSideBar',
}), }),
handleIsMobile() { handleIsMobile() {
return document.body.getBoundingClientRect().width - 1 < 992; return document.body.getBoundingClientRect().width - 1 < 992
}, },
handleResize() { handleResize() {
if (!document.hidden) { if (!document.hidden) {
const isMobile = this.handleIsMobile(); const isMobile = this.handleIsMobile()
if (isMobile) { if (isMobile) {
//横向布局时如果是手机端访问那么改成纵向版 //横向布局时如果是手机端访问那么改成纵向版
this.$store.dispatch("settings/changeLayout", "vertical"); this.$store.dispatch('settings/changeLayout', 'vertical')
} else { } else {
this.$store.dispatch("settings/changeLayout", this.oldLayout); this.$store.dispatch('settings/changeLayout', this.oldLayout)
} }
this.$store.dispatch( this.$store.dispatch(
"settings/toggleDevice", 'settings/toggleDevice',
isMobile ? "mobile" : "desktop" isMobile ? 'mobile' : 'desktop'
); )
} }
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
import Vue from "vue"; import Vue from 'vue'
import App from "./App"; import App from './App'
import store from "./store"; import store from './store'
import router from "./router"; import router from './router'
import "./plugins"; import './plugins'
/** /**
* @author chuzhixin 1204505056@qq.com (不想保留author可删除) * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
* @description 生产环境默认都使用mock,如果正式用于生产环境时,记得去掉 * @description 生产环境默认都使用mock,如果正式用于生产环境时,记得去掉
*/ */
if (process.env.NODE_ENV === "production") { if (process.env.NODE_ENV === 'production') {
const { mockXHR } = require("@/utils/static"); const { mockXHR } = require('@/utils/static')
mockXHR(); mockXHR()
} }
Vue.config.productionTip = false; Vue.config.productionTip = false
new Vue({ new Vue({
el: "#vue-admin-beautiful", el: '#vue-admin-beautiful',
router, router,
store, store,
render: (h) => h(App), render: (h) => h(App),
}); })
import "echarts"; import 'echarts'
import "echarts/map/js/china"; import 'echarts/map/js/china'
import "echarts/map/js/world"; import 'echarts/map/js/world'
import "echarts-wordcloud"; import 'echarts-wordcloud'
import VabChart from "vue-echarts"; import VabChart from 'vue-echarts'
import theme from "./vab-echarts-theme.json"; import theme from './vab-echarts-theme.json'
VabChart.registerTheme("vab-echarts-theme", theme); VabChart.registerTheme('vab-echarts-theme', theme)
export default VabChart; export default VabChart
import Vue from "vue"; import Vue from 'vue'
import ElementUI from "element-ui"; import ElementUI from 'element-ui'
import "element-ui/lib/theme-chalk/display.css"; import 'element-ui/lib/theme-chalk/display.css'
import "@/styles/element-variables.scss"; import '@/styles/element-variables.scss'
Vue.use(ElementUI, { Vue.use(ElementUI, {
size: "small", size: 'small',
}); })
/* 公共引入,勿随意修改,修改时需经过确认 */ /* 公共引入,勿随意修改,修改时需经过确认 */
import Vue from "vue"; import Vue from 'vue'
import "./element"; import './element'
import "./support"; import './support'
import "@/styles/vab.scss"; import '@/styles/vab.scss'
import "@/remixIcon"; import '@/remixIcon'
import "@/colorfulIcon"; import '@/colorfulIcon'
import "@/config/permission"; import '@/config/permission'
import "@/utils/errorLog"; import '@/utils/errorLog'
import "./vabIcon"; import './vabIcon'
import Vab from "@/utils/vab"; import Vab from '@/utils/vab'
import { VabDrag, VabPermissions, VabQueryForm } from "@/layouts/components"; import { VabDrag, VabPermissions, VabQueryForm } from '@/layouts/components'
import VabCount from "zx-count"; import VabCount from 'zx-count'
Vue.use(Vab); Vue.use(Vab)
Vue.use(VabPermissions); Vue.use(VabPermissions)
Vue.use(VabDrag); Vue.use(VabDrag)
Vue.use(VabQueryForm); Vue.use(VabQueryForm)
Vue.use(VabCount); Vue.use(VabCount)
import { MessageBox } from "element-ui"; import { MessageBox } from 'element-ui'
import { donation } from "@/config/settings"; import { donation } from '@/config/settings'
import { dependencies, repository } from "../../package.json"; import { dependencies, repository } from '../../package.json'
if (!!window.ActiveXObject || "ActiveXObject" in window) { if (!!window.ActiveXObject || 'ActiveXObject' in window) {
MessageBox({ MessageBox({
title: "温馨提示", title: '温馨提示',
message: message:
'自2015年3月起,微软已宣布弃用IE,且不再对IE提供任何更新维护,请<a target="_blank" style="color:blue" href="https://www.microsoft.com/zh-cn/edge/">点击此处</a>访问微软官网更新浏览器,如果您使用的是双核浏览器,请您切换浏览器内核为极速模式', '自2015年3月起,微软已宣布弃用IE,且不再对IE提供任何更新维护,请<a target="_blank" style="color:blue" href="https://www.microsoft.com/zh-cn/edge/">点击此处</a>访问微软官网更新浏览器,如果您使用的是双核浏览器,请您切换浏览器内核为极速模式',
type: "warning", type: 'warning',
showClose: false, showClose: false,
showConfirmButton: false, showConfirmButton: false,
closeOnClickModal: false, closeOnClickModal: false,
closeOnPressEscape: false, closeOnPressEscape: false,
closeOnHashChange: false, closeOnHashChange: false,
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
}); })
} }
if (!dependencies["zx-icon"] || !dependencies["zx-layouts"]) { if (!dependencies['zx-icon'] || !dependencies['zx-layouts']) {
document.body.innerHTML = ""; document.body.innerHTML = ''
} }
import VabComparison from "zx-comparison"; import VabComparison from 'zx-comparison'
export default VabComparison; export default VabComparison
import Vue from "vue"; import Vue from 'vue'
import VabIcon from "zx-icon"; import VabIcon from 'zx-icon'
Vue.component("VabIcon", VabIcon); Vue.component('VabIcon', VabIcon)
import VabMagnifier from "zx-magnifie"; import VabMagnifier from 'zx-magnifie'
export default VabMagnifier; export default VabMagnifier
import ZxMarkdownEditor from "zx-markdown-editor"; import ZxMarkdownEditor from 'zx-markdown-editor'
import "zx-markdown-editor/dist/zx-markdown-editor.css"; import 'zx-markdown-editor/dist/zx-markdown-editor.css'
const VabMarkdownEditor = ZxMarkdownEditor; const VabMarkdownEditor = ZxMarkdownEditor
export default VabMarkdownEditor; export default VabMarkdownEditor
import { Custom, Flv, Hls, Mp4 } from "zx-player"; import { Custom, Flv, Hls, Mp4 } from 'zx-player'
const VabPlayerMp4 = Mp4; const VabPlayerMp4 = Mp4
const VabPlayerHls = Hls; const VabPlayerHls = Hls
const VabPlayerFlv = Flv; const VabPlayerFlv = Flv
const VabPlayerCustom = Custom; const VabPlayerCustom = Custom
export { VabPlayerMp4, VabPlayerHls, VabPlayerFlv, VabPlayerCustom }; export { VabPlayerMp4, VabPlayerHls, VabPlayerFlv, VabPlayerCustom }
import "zx-quill/dist/zx-quill.css"; import 'zx-quill/dist/zx-quill.css'
import VabQuill from "zx-quill"; import VabQuill from 'zx-quill'
export default VabQuill; export default VabQuill
import VabVerify from "zx-verify"; import VabVerify from 'zx-verify'
import "zx-verify/dist/zx-verify.css"; import 'zx-verify/dist/zx-verify.css'
export default VabVerify; export default VabVerify
import Vue from "vue"; import Vue from 'vue'
import { RemixIcon } from "@/layouts/components"; import { RemixIcon } from '@/layouts/components'
Vue.component("VabRemixIcon", RemixIcon); Vue.component('VabRemixIcon', RemixIcon)
const req = require.context("./svg", false, /\.svg$/), const req = require.context('./svg', false, /\.svg$/),
requireAll = (requireContext) => { requireAll = (requireContext) => {
/*let a = requireContext.keys().map(requireContext); /*let a = requireContext.keys().map(requireContext);
let arr = []; let arr = [];
...@@ -12,6 +12,6 @@ const req = require.context("./svg", false, /\.svg$/), ...@@ -12,6 +12,6 @@ const req = require.context("./svg", false, /\.svg$/),
arr.push(icon); arr.push(icon);
} }
console.log(JSON.stringify(arr));*/ console.log(JSON.stringify(arr));*/
return requireContext.keys().map(requireContext); return requireContext.keys().map(requireContext)
}; }
requireAll(req); requireAll(req)
...@@ -3,20 +3,20 @@ ...@@ -3,20 +3,20 @@
* @description 导入所有 vuex 模块,自动加入namespaced:true,用于解决vuex命名冲突,请勿修改。 * @description 导入所有 vuex 模块,自动加入namespaced:true,用于解决vuex命名冲突,请勿修改。
*/ */
import Vue from "vue"; import Vue from 'vue'
import Vuex from "vuex"; import Vuex from 'vuex'
Vue.use(Vuex); Vue.use(Vuex)
const files = require.context("./modules", false, /\.js$/); const files = require.context('./modules', false, /\.js$/)
const modules = {}; const modules = {}
files.keys().forEach((key) => { files.keys().forEach((key) => {
modules[key.replace(/(\.\/|\.js)/g, "")] = files(key).default; modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
}); })
Object.keys(modules).forEach((key) => { Object.keys(modules).forEach((key) => {
modules[key]["namespaced"] = true; modules[key]['namespaced'] = true
}); })
const store = new Vuex.Store({ const store = new Vuex.Store({
modules, modules,
}); })
export default store; export default store
...@@ -3,24 +3,24 @@ ...@@ -3,24 +3,24 @@
* @description 异常捕获的状态拦截,请勿修改 * @description 异常捕获的状态拦截,请勿修改
*/ */
const state = { errorLogs: [] }; const state = { errorLogs: [] }
const getters = { const getters = {
errorLogs: (state) => state.errorLogs, errorLogs: (state) => state.errorLogs,
}; }
const mutations = { const mutations = {
addErrorLog(state, errorLog) { addErrorLog(state, errorLog) {
state.errorLogs.push(errorLog); state.errorLogs.push(errorLog)
}, },
clearErrorLog: (state) => { clearErrorLog: (state) => {
state.errorLogs.splice(0); state.errorLogs.splice(0)
}, },
}; }
const actions = { const actions = {
addErrorLog({ commit }, errorLog) { addErrorLog({ commit }, errorLog) {
commit("addErrorLog", errorLog); commit('addErrorLog', errorLog)
}, },
clearErrorLog({ commit }) { clearErrorLog({ commit }) {
commit("clearErrorLog"); commit('clearErrorLog')
}, },
}; }
export default { state, getters, mutations, actions }; export default { state, getters, mutations, actions }
...@@ -2,46 +2,46 @@ ...@@ -2,46 +2,46 @@
* @author chuzhixin 1204505056@qq.com (不想保留author可删除) * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
* @description 路由拦截状态管理,目前两种模式:all模式与intelligence模式,其中partialRoutes是菜单暂未使用 * @description 路由拦截状态管理,目前两种模式:all模式与intelligence模式,其中partialRoutes是菜单暂未使用
*/ */
import { asyncRoutes, constantRoutes } from "@/router"; import { asyncRoutes, constantRoutes } from '@/router'
import { getRouterList } from "@/api/router"; import { getRouterList } from '@/api/router'
import { convertRouter, filterAsyncRoutes } from "@/utils/handleRoutes"; import { convertRouter, filterAsyncRoutes } from '@/utils/handleRoutes'
const state = { routes: [], partialRoutes: [] }; const state = { routes: [], partialRoutes: [] }
const getters = { const getters = {
routes: (state) => state.routes, routes: (state) => state.routes,
partialRoutes: (state) => state.partialRoutes, partialRoutes: (state) => state.partialRoutes,
}; }
const mutations = { const mutations = {
setRoutes(state, routes) { setRoutes(state, routes) {
state.routes = constantRoutes.concat(routes); state.routes = constantRoutes.concat(routes)
}, },
setAllRoutes(state, routes) { setAllRoutes(state, routes) {
state.routes = constantRoutes.concat(routes); state.routes = constantRoutes.concat(routes)
}, },
setPartialRoutes(state, routes) { setPartialRoutes(state, routes) {
state.partialRoutes = constantRoutes.concat(routes); state.partialRoutes = constantRoutes.concat(routes)
}, },
}; }
const actions = { const actions = {
async setRoutes({ commit }, permissions) { async setRoutes({ commit }, permissions) {
//开源版只过滤动态路由permissions,admin不再默认拥有全部权限 //开源版只过滤动态路由permissions,admin不再默认拥有全部权限
const finallyAsyncRoutes = await filterAsyncRoutes( const finallyAsyncRoutes = await filterAsyncRoutes(
[...asyncRoutes], [...asyncRoutes],
permissions permissions
); )
commit("setRoutes", finallyAsyncRoutes); commit('setRoutes', finallyAsyncRoutes)
return finallyAsyncRoutes; return finallyAsyncRoutes
}, },
async setAllRoutes({ commit }) { async setAllRoutes({ commit }) {
let { data } = await getRouterList(); let { data } = await getRouterList()
data.push({ path: "*", redirect: "/404", hidden: true }); data.push({ path: '*', redirect: '/404', hidden: true })
let accessRoutes = convertRouter(data); let accessRoutes = convertRouter(data)
commit("setAllRoutes", accessRoutes); commit('setAllRoutes', accessRoutes)
return accessRoutes; return accessRoutes
}, },
setPartialRoutes({ commit }, accessRoutes) { setPartialRoutes({ commit }, accessRoutes) {
commit("setPartialRoutes", accessRoutes); commit('setPartialRoutes', accessRoutes)
return accessRoutes; return accessRoutes
}, },
}; }
export default { state, getters, mutations, actions }; export default { state, getters, mutations, actions }
...@@ -3,20 +3,20 @@ ...@@ -3,20 +3,20 @@
* @description 所有全局配置的状态管理,如无必要请勿修改 * @description 所有全局配置的状态管理,如无必要请勿修改
*/ */
import defaultSettings from "@/config/settings"; import defaultSettings from '@/config/settings'
const { tabsBar, logo, layout, header, themeBar } = defaultSettings; const { tabsBar, logo, layout, header, themeBar } = defaultSettings
const theme = const theme =
JSON.parse(localStorage.getItem("vue-admin-beautiful-theme")) || ""; JSON.parse(localStorage.getItem('vue-admin-beautiful-theme')) || ''
const state = { const state = {
tabsBar: theme.tabsBar || tabsBar, tabsBar: theme.tabsBar || tabsBar,
logo, logo,
collapse: false, collapse: false,
layout: theme.layout || layout, layout: theme.layout || layout,
header: theme.header || header, header: theme.header || header,
device: "desktop", device: 'desktop',
themeBar, themeBar,
}; }
const getters = { const getters = {
collapse: (state) => state.collapse, collapse: (state) => state.collapse,
device: (state) => state.device, device: (state) => state.device,
...@@ -25,51 +25,51 @@ const getters = { ...@@ -25,51 +25,51 @@ const getters = {
logo: (state) => state.logo, logo: (state) => state.logo,
tabsBar: (state) => state.tabsBar, tabsBar: (state) => state.tabsBar,
themeBar: (state) => state.themeBar, themeBar: (state) => state.themeBar,
}; }
const mutations = { const mutations = {
changeLayout: (state, layout) => { changeLayout: (state, layout) => {
if (layout) state.layout = layout; if (layout) state.layout = layout
}, },
changeHeader: (state, header) => { changeHeader: (state, header) => {
if (header) state.header = header; if (header) state.header = header
}, },
changeTabsBar: (state, tabsBar) => { changeTabsBar: (state, tabsBar) => {
if (tabsBar) state.tabsBar = tabsBar; if (tabsBar) state.tabsBar = tabsBar
}, },
changeCollapse: (state) => { changeCollapse: (state) => {
state.collapse = !state.collapse; state.collapse = !state.collapse
}, },
foldSideBar: (state) => { foldSideBar: (state) => {
state.collapse = true; state.collapse = true
}, },
openSideBar: (state) => { openSideBar: (state) => {
state.collapse = false; state.collapse = false
}, },
toggleDevice: (state, device) => { toggleDevice: (state, device) => {
state.device = device; state.device = device
}, },
}; }
const actions = { const actions = {
changeLayout({ commit }, layout) { changeLayout({ commit }, layout) {
commit("changeLayout", layout); commit('changeLayout', layout)
}, },
changeHeader({ commit }, header) { changeHeader({ commit }, header) {
commit("changeHeader", header); commit('changeHeader', header)
}, },
changeTabsBar({ commit }, tabsBar) { changeTabsBar({ commit }, tabsBar) {
commit("changeTabsBar", tabsBar); commit('changeTabsBar', tabsBar)
}, },
changeCollapse({ commit }) { changeCollapse({ commit }) {
commit("changeCollapse"); commit('changeCollapse')
}, },
foldSideBar({ commit }) { foldSideBar({ commit }) {
commit("foldSideBar"); commit('foldSideBar')
}, },
openSideBar({ commit }) { openSideBar({ commit }) {
commit("openSideBar"); commit('openSideBar')
}, },
toggleDevice({ commit }, device) { toggleDevice({ commit }, device) {
commit("toggleDevice", device); commit('toggleDevice', device)
}, },
}; }
export default { state, getters, mutations, actions }; export default { state, getters, mutations, actions }
...@@ -3,19 +3,19 @@ ...@@ -3,19 +3,19 @@
* @description 代码生成机状态管理 * @description 代码生成机状态管理
*/ */
const state = { srcCode: "" }; const state = { srcCode: '' }
const getters = { const getters = {
srcTableCode: (state) => state.srcCode, srcTableCode: (state) => state.srcCode,
}; }
const mutations = { const mutations = {
setTableCode(state, srcCode) { setTableCode(state, srcCode) {
state.srcCode = srcCode; state.srcCode = srcCode
}, },
}; }
const actions = { const actions = {
setTableCode({ commit }, srcCode) { setTableCode({ commit }, srcCode) {
commit("setTableCode", srcCode); commit('setTableCode', srcCode)
}, },
}; }
export default { state, getters, mutations, actions }; export default { state, getters, mutations, actions }
...@@ -5,108 +5,108 @@ ...@@ -5,108 +5,108 @@
const state = { const state = {
visitedRoutes: [], visitedRoutes: [],
}; }
const getters = { const getters = {
visitedRoutes: (state) => state.visitedRoutes, visitedRoutes: (state) => state.visitedRoutes,
}; }
const mutations = { const mutations = {
addVisitedRoute(state, route) { addVisitedRoute(state, route) {
let target = state.visitedRoutes.find((item) => item.path === route.path); let target = state.visitedRoutes.find((item) => item.path === route.path)
if (target) { if (target) {
if (route.fullPath !== target.fullPath) Object.assign(target, route); if (route.fullPath !== target.fullPath) Object.assign(target, route)
return; return
} }
state.visitedRoutes.push(Object.assign({}, route)); state.visitedRoutes.push(Object.assign({}, route))
}, },
delVisitedRoute(state, route) { delVisitedRoute(state, route) {
state.visitedRoutes.forEach((item, index) => { state.visitedRoutes.forEach((item, index) => {
if (item.path === route.path) state.visitedRoutes.splice(index, 1); if (item.path === route.path) state.visitedRoutes.splice(index, 1)
}); })
}, },
delOthersVisitedRoute(state, route) { delOthersVisitedRoute(state, route) {
state.visitedRoutes = state.visitedRoutes.filter( state.visitedRoutes = state.visitedRoutes.filter(
(item) => item.meta.affix || item.path === route.path (item) => item.meta.affix || item.path === route.path
); )
}, },
delLeftVisitedRoute(state, route) { delLeftVisitedRoute(state, route) {
let index = state.visitedRoutes.length; let index = state.visitedRoutes.length
state.visitedRoutes = state.visitedRoutes.filter((item) => { state.visitedRoutes = state.visitedRoutes.filter((item) => {
if (item.name === route.name) index = state.visitedRoutes.indexOf(item); if (item.name === route.name) index = state.visitedRoutes.indexOf(item)
return item.meta.affix || index <= state.visitedRoutes.indexOf(item); return item.meta.affix || index <= state.visitedRoutes.indexOf(item)
}); })
}, },
delRightVisitedRoute(state, route) { delRightVisitedRoute(state, route) {
let index = state.visitedRoutes.length; let index = state.visitedRoutes.length
state.visitedRoutes = state.visitedRoutes.filter((item) => { state.visitedRoutes = state.visitedRoutes.filter((item) => {
if (item.name === route.name) index = state.visitedRoutes.indexOf(item); if (item.name === route.name) index = state.visitedRoutes.indexOf(item)
return item.meta.affix || index >= state.visitedRoutes.indexOf(item); return item.meta.affix || index >= state.visitedRoutes.indexOf(item)
}); })
}, },
delAllVisitedRoutes(state) { delAllVisitedRoutes(state) {
state.visitedRoutes = state.visitedRoutes.filter((item) => item.meta.affix); state.visitedRoutes = state.visitedRoutes.filter((item) => item.meta.affix)
}, },
updateVisitedRoute(state, route) { updateVisitedRoute(state, route) {
state.visitedRoutes.forEach((item) => { state.visitedRoutes.forEach((item) => {
if (item.path === route.path) item = Object.assign(item, route); if (item.path === route.path) item = Object.assign(item, route)
}); })
}, },
}; }
const actions = { const actions = {
addVisitedRoute({ commit }, route) { addVisitedRoute({ commit }, route) {
commit("addVisitedRoute", route); commit('addVisitedRoute', route)
}, },
async delRoute({ dispatch, state }, route) { async delRoute({ dispatch, state }, route) {
await dispatch("delVisitedRoute", route); await dispatch('delVisitedRoute', route)
return { return {
visitedRoutes: [...state.visitedRoutes], visitedRoutes: [...state.visitedRoutes],
}; }
}, },
delVisitedRoute({ commit, state }, route) { delVisitedRoute({ commit, state }, route) {
commit("delVisitedRoute", route); commit('delVisitedRoute', route)
return [...state.visitedRoutes]; return [...state.visitedRoutes]
}, },
async delOthersRoutes({ dispatch, state }, route) { async delOthersRoutes({ dispatch, state }, route) {
await dispatch("delOthersVisitedRoute", route); await dispatch('delOthersVisitedRoute', route)
return { return {
visitedRoutes: [...state.visitedRoutes], visitedRoutes: [...state.visitedRoutes],
}; }
}, },
async delLeftRoutes({ dispatch, state }, route) { async delLeftRoutes({ dispatch, state }, route) {
await dispatch("delLeftVisitedRoute", route); await dispatch('delLeftVisitedRoute', route)
return { return {
visitedRoutes: [...state.visitedRoutes], visitedRoutes: [...state.visitedRoutes],
}; }
}, },
async delRightRoutes({ dispatch, state }, route) { async delRightRoutes({ dispatch, state }, route) {
await dispatch("delRightVisitedRoute", route); await dispatch('delRightVisitedRoute', route)
return { return {
visitedRoutes: [...state.visitedRoutes], visitedRoutes: [...state.visitedRoutes],
}; }
}, },
delOthersVisitedRoute({ commit, state }, route) { delOthersVisitedRoute({ commit, state }, route) {
commit("delOthersVisitedRoute", route); commit('delOthersVisitedRoute', route)
return [...state.visitedRoutes]; return [...state.visitedRoutes]
}, },
delLeftVisitedRoute({ commit, state }, route) { delLeftVisitedRoute({ commit, state }, route) {
commit("delLeftVisitedRoute", route); commit('delLeftVisitedRoute', route)
return [...state.visitedRoutes]; return [...state.visitedRoutes]
}, },
delRightVisitedRoute({ commit, state }, route) { delRightVisitedRoute({ commit, state }, route) {
commit("delRightVisitedRoute", route); commit('delRightVisitedRoute', route)
return [...state.visitedRoutes]; return [...state.visitedRoutes]
}, },
async delAllRoutes({ dispatch, state }, route) { async delAllRoutes({ dispatch, state }, route) {
await dispatch("delAllVisitedRoutes", route); await dispatch('delAllVisitedRoutes', route)
return { return {
visitedRoutes: [...state.visitedRoutes], visitedRoutes: [...state.visitedRoutes],
}; }
}, },
delAllVisitedRoutes({ commit, state }) { delAllVisitedRoutes({ commit, state }) {
commit("delAllVisitedRoutes"); commit('delAllVisitedRoutes')
return [...state.visitedRoutes]; return [...state.visitedRoutes]
}, },
updateVisitedRoute({ commit }, route) { updateVisitedRoute({ commit }, route) {
commit("updateVisitedRoute", route); commit('updateVisitedRoute', route)
}, },
}; }
export default { state, getters, mutations, actions }; export default { state, getters, mutations, actions }
...@@ -3,97 +3,97 @@ ...@@ -3,97 +3,97 @@
* @description 登录、获取用户信息、退出登录、清除accessToken逻辑,不建议修改 * @description 登录、获取用户信息、退出登录、清除accessToken逻辑,不建议修改
*/ */
import Vue from "vue"; import Vue from 'vue'
import { getUserInfo, login, logout } from "@/api/user"; import { getUserInfo, login, logout } from '@/api/user'
import { import {
getAccessToken, getAccessToken,
removeAccessToken, removeAccessToken,
setAccessToken, setAccessToken,
} from "@/utils/accessToken"; } from '@/utils/accessToken'
import { resetRouter } from "@/router"; import { resetRouter } from '@/router'
import { title, tokenName } from "@/config/settings"; import { title, tokenName } from '@/config/settings'
const state = { const state = {
accessToken: getAccessToken(), accessToken: getAccessToken(),
username: "", username: '',
avatar: "", avatar: '',
permissions: [], permissions: [],
}; }
const getters = { const getters = {
accessToken: (state) => state.accessToken, accessToken: (state) => state.accessToken,
username: (state) => state.username, username: (state) => state.username,
avatar: (state) => state.avatar, avatar: (state) => state.avatar,
permissions: (state) => state.permissions, permissions: (state) => state.permissions,
}; }
const mutations = { const mutations = {
setAccessToken(state, accessToken) { setAccessToken(state, accessToken) {
state.accessToken = accessToken; state.accessToken = accessToken
setAccessToken(accessToken); setAccessToken(accessToken)
}, },
setUsername(state, username) { setUsername(state, username) {
state.username = username; state.username = username
}, },
setAvatar(state, avatar) { setAvatar(state, avatar) {
state.avatar = avatar; state.avatar = avatar
}, },
setPermissions(state, permissions) { setPermissions(state, permissions) {
state.permissions = permissions; state.permissions = permissions
}, },
}; }
const actions = { const actions = {
setPermissions({ commit }, permissions) { setPermissions({ commit }, permissions) {
commit("setPermissions", permissions); commit('setPermissions', permissions)
}, },
async login({ commit }, userInfo) { async login({ commit }, userInfo) {
const { data } = await login(userInfo); const { data } = await login(userInfo)
const accessToken = data[tokenName]; const accessToken = data[tokenName]
if (accessToken) { if (accessToken) {
commit("setAccessToken", accessToken); commit('setAccessToken', accessToken)
const hour = new Date().getHours(); const hour = new Date().getHours()
const thisTime = const thisTime =
hour < 8 hour < 8
? "早上好" ? '早上好'
: hour <= 11 : hour <= 11
? "上午好" ? '上午好'
: hour <= 13 : hour <= 13
? "中午好" ? '中午好'
: hour < 18 : hour < 18
? "下午好" ? '下午好'
: "晚上好"; : '晚上好'
Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}!`); Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}!`)
} else { } else {
Vue.prototype.$baseMessage( Vue.prototype.$baseMessage(
`登录接口异常,未正确返回${tokenName}...`, `登录接口异常,未正确返回${tokenName}...`,
"error" 'error'
); )
} }
}, },
async getUserInfo({ commit, state }) { async getUserInfo({ commit, state }) {
const { data } = await getUserInfo(state.accessToken); const { data } = await getUserInfo(state.accessToken)
if (!data) { if (!data) {
Vue.prototype.$baseMessage("验证失败,请重新登录...", "error"); Vue.prototype.$baseMessage('验证失败,请重新登录...', 'error')
return false; return false
} }
let { permissions, username, avatar } = data; let { permissions, username, avatar } = data
if (permissions && username && Array.isArray(permissions)) { if (permissions && username && Array.isArray(permissions)) {
commit("setPermissions", permissions); commit('setPermissions', permissions)
commit("setUsername", username); commit('setUsername', username)
commit("setAvatar", avatar); commit('setAvatar', avatar)
return permissions; return permissions
} else { } else {
Vue.prototype.$baseMessage("用户信息接口异常", "error"); Vue.prototype.$baseMessage('用户信息接口异常', 'error')
return false; return false
} }
}, },
async logout({ dispatch }) { async logout({ dispatch }) {
await logout(state.accessToken); await logout(state.accessToken)
await dispatch("resetAccessToken"); await dispatch('resetAccessToken')
await resetRouter(); await resetRouter()
}, },
resetAccessToken({ commit }) { resetAccessToken({ commit }) {
commit("setPermissions", []); commit('setPermissions', [])
commit("setAccessToken", ""); commit('setAccessToken', '')
removeAccessToken(); removeAccessToken()
}, },
}; }
export default { state, getters, mutations, actions }; export default { state, getters, mutations, actions }
import { storage, tokenTableName } from "@/config/settings"; import { storage, tokenTableName } from '@/config/settings'
/** /**
* @author chuzhixin 1204505056@qq.com (不想保留author可删除) * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
...@@ -7,15 +7,15 @@ import { storage, tokenTableName } from "@/config/settings"; ...@@ -7,15 +7,15 @@ import { storage, tokenTableName } from "@/config/settings";
*/ */
export function getAccessToken() { export function getAccessToken() {
if (storage) { if (storage) {
if ("localStorage" === storage) { if ('localStorage' === storage) {
return localStorage.getItem(tokenTableName); return localStorage.getItem(tokenTableName)
} else if ("sessionStorage" === storage) { } else if ('sessionStorage' === storage) {
return sessionStorage.getItem(tokenTableName); return sessionStorage.getItem(tokenTableName)
} else { } else {
return localStorage.getItem(tokenTableName); return localStorage.getItem(tokenTableName)
} }
} else { } else {
return localStorage.getItem(tokenTableName); return localStorage.getItem(tokenTableName)
} }
} }
...@@ -27,15 +27,15 @@ export function getAccessToken() { ...@@ -27,15 +27,15 @@ export function getAccessToken() {
*/ */
export function setAccessToken(accessToken) { export function setAccessToken(accessToken) {
if (storage) { if (storage) {
if ("localStorage" === storage) { if ('localStorage' === storage) {
return localStorage.setItem(tokenTableName, accessToken); return localStorage.setItem(tokenTableName, accessToken)
} else if ("sessionStorage" === storage) { } else if ('sessionStorage' === storage) {
return sessionStorage.setItem(tokenTableName, accessToken); return sessionStorage.setItem(tokenTableName, accessToken)
} else { } else {
return localStorage.setItem(tokenTableName, accessToken); return localStorage.setItem(tokenTableName, accessToken)
} }
} else { } else {
return localStorage.setItem(tokenTableName, accessToken); return localStorage.setItem(tokenTableName, accessToken)
} }
} }
...@@ -46,14 +46,14 @@ export function setAccessToken(accessToken) { ...@@ -46,14 +46,14 @@ export function setAccessToken(accessToken) {
*/ */
export function removeAccessToken() { export function removeAccessToken() {
if (storage) { if (storage) {
if ("localStorage" === storage) { if ('localStorage' === storage) {
return localStorage.removeItem(tokenTableName); return localStorage.removeItem(tokenTableName)
} else if ("sessionStorage" === storage) { } else if ('sessionStorage' === storage) {
return sessionStorage.clear(); return sessionStorage.clear()
} else { } else {
return localStorage.removeItem(tokenTableName); return localStorage.removeItem(tokenTableName)
} }
} else { } else {
return localStorage.removeItem(tokenTableName); return localStorage.removeItem(tokenTableName)
} }
} }
import Vue from "vue"; import Vue from 'vue'
import Clipboard from "clipboard"; import Clipboard from 'clipboard'
function clipboardSuccess() { function clipboardSuccess() {
Vue.prototype.$baseMessage("复制成功", "success"); Vue.prototype.$baseMessage('复制成功', 'success')
} }
function clipboardError() { function clipboardError() {
Vue.prototype.$baseMessage("复制失败", "error"); Vue.prototype.$baseMessage('复制失败', 'error')
} }
/** /**
...@@ -18,14 +18,14 @@ function clipboardError() { ...@@ -18,14 +18,14 @@ function clipboardError() {
export default function handleClipboard(text, event) { export default function handleClipboard(text, event) {
const clipboard = new Clipboard(event.target, { const clipboard = new Clipboard(event.target, {
text: () => text, text: () => text,
}); })
clipboard.on("success", () => { clipboard.on('success', () => {
clipboardSuccess(); clipboardSuccess()
clipboard.destroy(); clipboard.destroy()
}); })
clipboard.on("error", () => { clipboard.on('error', () => {
clipboardError(); clipboardError()
clipboard.destroy(); clipboard.destroy()
}); })
clipboard.onClick(event); clipboard.onClick(event)
} }
import { JSEncrypt } from "jsencrypt"; import { JSEncrypt } from 'jsencrypt'
import { getPublicKey } from "@/api/publicKey"; import { getPublicKey } from '@/api/publicKey'
const privateKey = const privateKey =
"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMFPa+v52FkSUXvcUnrGI/XzW3EpZRI0s9BCWJ3oNQmEYA5luWW5p8h0uadTIoTyYweFPdH4hveyxlwmS7oefvbIdiP+o+QIYW/R4Wjsb4Yl8MhR4PJqUE3RCy6IT9fM8ckG4kN9ECs6Ja8fQFc6/mSl5dJczzJO3k1rWMBhKJD/AgMBAAECgYEAucMakH9dWeryhrYoRHcXo4giPVJsH9ypVt4KzmOQY/7jV7KFQK3x//27UoHfUCak51sxFw9ek7UmTPM4HjikA9LkYeE7S381b4QRvFuf3L6IbMP3ywJnJ8pPr2l5SqQ00W+oKv+w/VmEsyUHr+k4Z+4ik+FheTkVWp566WbqFsECQQDjYaMcaKw3j2Zecl8T6eUe7fdaRMIzp/gcpPMfT/9rDzIQk+7ORvm1NI9AUmFv/FAlfpuAMrdL2n7p9uznWb7RAkEA2aP934kbXg5bdV0R313MrL+7WTK/qdcYxATUbMsMuWWQBoS5irrt80WCZbG48hpocJavLNjbtrjmUX3CuJBmzwJAOJg8uP10n/+ZQzjEYXh+BszEHDuw+pp8LuT/fnOy5zrJA0dO0RjpXijO3vuiNPVgHXT9z1LQPJkNrb5ACPVVgQJBALPeb4uV0bNrJDUb5RB4ghZnIxv18CcaqNIft7vuGCcFBAIPIRTBprR+RuVq+xHDt3sNXdsvom4h49+Hky1b0ksCQBBwUtVaqH6ztCtwUF1j2c/Zcrt5P/uN7IHAd44K0gIJc1+Csr3qPG+G2yoqRM8KVqLI8Z2ZYn9c+AvEE+L9OQY="; 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMFPa+v52FkSUXvcUnrGI/XzW3EpZRI0s9BCWJ3oNQmEYA5luWW5p8h0uadTIoTyYweFPdH4hveyxlwmS7oefvbIdiP+o+QIYW/R4Wjsb4Yl8MhR4PJqUE3RCy6IT9fM8ckG4kN9ECs6Ja8fQFc6/mSl5dJczzJO3k1rWMBhKJD/AgMBAAECgYEAucMakH9dWeryhrYoRHcXo4giPVJsH9ypVt4KzmOQY/7jV7KFQK3x//27UoHfUCak51sxFw9ek7UmTPM4HjikA9LkYeE7S381b4QRvFuf3L6IbMP3ywJnJ8pPr2l5SqQ00W+oKv+w/VmEsyUHr+k4Z+4ik+FheTkVWp566WbqFsECQQDjYaMcaKw3j2Zecl8T6eUe7fdaRMIzp/gcpPMfT/9rDzIQk+7ORvm1NI9AUmFv/FAlfpuAMrdL2n7p9uznWb7RAkEA2aP934kbXg5bdV0R313MrL+7WTK/qdcYxATUbMsMuWWQBoS5irrt80WCZbG48hpocJavLNjbtrjmUX3CuJBmzwJAOJg8uP10n/+ZQzjEYXh+BszEHDuw+pp8LuT/fnOy5zrJA0dO0RjpXijO3vuiNPVgHXT9z1LQPJkNrb5ACPVVgQJBALPeb4uV0bNrJDUb5RB4ghZnIxv18CcaqNIft7vuGCcFBAIPIRTBprR+RuVq+xHDt3sNXdsvom4h49+Hky1b0ksCQBBwUtVaqH6ztCtwUF1j2c/Zcrt5P/uN7IHAd44K0gIJc1+Csr3qPG+G2yoqRM8KVqLI8Z2ZYn9c+AvEE+L9OQY='
/** /**
* @author chuzhixin 1204505056@qq.com (不想保留author可删除) * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
...@@ -11,23 +11,23 @@ const privateKey = ...@@ -11,23 +11,23 @@ const privateKey =
* @returns {Promise<{param: PromiseLike<ArrayBuffer>}|*>} * @returns {Promise<{param: PromiseLike<ArrayBuffer>}|*>}
*/ */
export async function encryptedData(data) { export async function encryptedData(data) {
let publicKey = ""; let publicKey = ''
const res = await getPublicKey(); const res = await getPublicKey()
publicKey = res.data.publicKey; publicKey = res.data.publicKey
if (res.data.mockServer) { if (res.data.mockServer) {
publicKey = ""; publicKey = ''
} }
if (publicKey == "") { if (publicKey == '') {
return data; return data
} }
const encrypt = new JSEncrypt(); const encrypt = new JSEncrypt()
encrypt.setPublicKey( encrypt.setPublicKey(
`-----BEGIN PUBLIC KEY-----${publicKey}-----END PUBLIC KEY-----` `-----BEGIN PUBLIC KEY-----${publicKey}-----END PUBLIC KEY-----`
); )
data = encrypt.encrypt(JSON.stringify(data)); data = encrypt.encrypt(JSON.stringify(data))
return { return {
param: data, param: data,
}; }
} }
/** /**
...@@ -37,10 +37,10 @@ export async function encryptedData(data) { ...@@ -37,10 +37,10 @@ export async function encryptedData(data) {
* @returns {PromiseLike<ArrayBuffer>} * @returns {PromiseLike<ArrayBuffer>}
*/ */
export function decryptedData(data) { export function decryptedData(data) {
const decrypt = new JSEncrypt(); const decrypt = new JSEncrypt()
decrypt.setPrivateKey( decrypt.setPrivateKey(
`-----BEGIN RSA PRIVATE KEY-----${privateKey}-----END RSA PRIVATE KEY-----` `-----BEGIN RSA PRIVATE KEY-----${privateKey}-----END RSA PRIVATE KEY-----`
); )
data = decrypt.decrypt(JSON.stringify(data)); data = decrypt.decrypt(JSON.stringify(data))
return data; return data
} }
import Vue from "vue"; import Vue from 'vue'
import store from "@/store"; import store from '@/store'
import { isArray, isString } from "@/utils/validate"; import { isArray, isString } from '@/utils/validate'
import { errorLog } from "@/config/settings"; import { errorLog } from '@/config/settings'
const needErrorLog = errorLog; const needErrorLog = errorLog
const checkNeed = () => { const checkNeed = () => {
const env = process.env.NODE_ENV; const env = process.env.NODE_ENV
if (isString(needErrorLog)) { if (isString(needErrorLog)) {
return env === needErrorLog; return env === needErrorLog
} }
if (isArray(needErrorLog)) { if (isArray(needErrorLog)) {
return needErrorLog.includes(env); return needErrorLog.includes(env)
} }
return false; return false
}; }
if (checkNeed()) { if (checkNeed()) {
Vue.config.errorHandler = (err, vm, info) => { Vue.config.errorHandler = (err, vm, info) => {
console.error("vue-admin-beautiful错误拦截:", err, vm, info); console.error('vue-admin-beautiful错误拦截:', err, vm, info)
const url = window.location.href; const url = window.location.href
Vue.nextTick(() => { Vue.nextTick(() => {
store.dispatch("errorLog/addErrorLog", { err, vm, info, url }); store.dispatch('errorLog/addErrorLog', { err, vm, info, url })
}); })
}; }
} }
...@@ -7,23 +7,23 @@ ...@@ -7,23 +7,23 @@
export function convertRouter(asyncRoutes) { export function convertRouter(asyncRoutes) {
return asyncRoutes.map((route) => { return asyncRoutes.map((route) => {
if (route.component) { if (route.component) {
if (route.component === "Layout") { if (route.component === 'Layout') {
route.component = (resolve) => require(["@/layouts"], resolve); route.component = (resolve) => require(['@/layouts'], resolve)
} else if (route.component === "EmptyLayout") { } else if (route.component === 'EmptyLayout') {
route.component = (resolve) => route.component = (resolve) =>
require(["@/layouts/EmptyLayout"], resolve); require(['@/layouts/EmptyLayout'], resolve)
} else { } else {
const index = route.component.indexOf("views"); const index = route.component.indexOf('views')
const path = const path =
index > 0 ? route.component.slice(index) : `views/${route.component}`; index > 0 ? route.component.slice(index) : `views/${route.component}`
route.component = (resolve) => require([`@/${path}`], resolve); route.component = (resolve) => require([`@/${path}`], resolve)
} }
} }
if (route.children && route.children.length) if (route.children && route.children.length)
route.children = convertRouter(route.children); route.children = convertRouter(route.children)
if (route.children && route.children.length === 0) delete route.children; if (route.children && route.children.length === 0) delete route.children
return route; return route
}); })
} }
/** /**
...@@ -35,9 +35,9 @@ export function convertRouter(asyncRoutes) { ...@@ -35,9 +35,9 @@ export function convertRouter(asyncRoutes) {
*/ */
function hasPermission(permissions, route) { function hasPermission(permissions, route) {
if (route.meta && route.meta.permissions) { if (route.meta && route.meta.permissions) {
return permissions.some((role) => route.meta.permissions.includes(role)); return permissions.some((role) => route.meta.permissions.includes(role))
} else { } else {
return true; return true
} }
} }
...@@ -49,15 +49,15 @@ function hasPermission(permissions, route) { ...@@ -49,15 +49,15 @@ function hasPermission(permissions, route) {
* @returns {[]} * @returns {[]}
*/ */
export function filterAsyncRoutes(routes, permissions) { export function filterAsyncRoutes(routes, permissions) {
const finallyRoutes = []; const finallyRoutes = []
routes.forEach((route) => { routes.forEach((route) => {
const item = { ...route }; const item = { ...route }
if (hasPermission(permissions, item)) { if (hasPermission(permissions, item)) {
if (item.children) { if (item.children) {
item.children = filterAsyncRoutes(item.children, permissions); item.children = filterAsyncRoutes(item.children, permissions)
} }
finallyRoutes.push(item); finallyRoutes.push(item)
} }
}); })
return finallyRoutes; return finallyRoutes
} }
...@@ -7,20 +7,20 @@ ...@@ -7,20 +7,20 @@
*/ */
export function parseTime(time, cFormat) { export function parseTime(time, cFormat) {
if (arguments.length === 0) { if (arguments.length === 0) {
return null; return null
} }
const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}"; const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date; let date
if (typeof time === "object") { if (typeof time === 'object') {
date = time; date = time
} else { } else {
if (typeof time === "string" && /^[0-9]+$/.test(time)) { if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
time = parseInt(time); time = parseInt(time)
} }
if (typeof time === "number" && time.toString().length === 10) { if (typeof time === 'number' && time.toString().length === 10) {
time = time * 1000; time = time * 1000
} }
date = new Date(time); date = new Date(time)
} }
const formatObj = { const formatObj = {
y: date.getFullYear(), y: date.getFullYear(),
...@@ -30,18 +30,18 @@ export function parseTime(time, cFormat) { ...@@ -30,18 +30,18 @@ export function parseTime(time, cFormat) {
i: date.getMinutes(), i: date.getMinutes(),
s: date.getSeconds(), s: date.getSeconds(),
a: date.getDay(), a: date.getDay(),
}; }
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]; let value = formatObj[key]
if (key === "a") { if (key === 'a') {
return ["日", "一", "二", "三", "四", "五", "六"][value]; return ['日', '一', '二', '三', '四', '五', '六'][value]
} }
if (result.length > 0 && value < 10) { if (result.length > 0 && value < 10) {
value = "0" + value; value = '0' + value
} }
return value || 0; return value || 0
}); })
return time_str; return time_str
} }
/** /**
...@@ -52,40 +52,40 @@ export function parseTime(time, cFormat) { ...@@ -52,40 +52,40 @@ export function parseTime(time, cFormat) {
* @returns {string} * @returns {string}
*/ */
export function formatTime(time, option) { export function formatTime(time, option) {
if (("" + time).length === 10) { if (('' + time).length === 10) {
time = parseInt(time) * 1000; time = parseInt(time) * 1000
} else { } else {
time = +time; time = +time
} }
const d = new Date(time); const d = new Date(time)
const now = Date.now(); const now = Date.now()
const diff = (now - d) / 1000; const diff = (now - d) / 1000
if (diff < 30) { if (diff < 30) {
return "刚刚"; return '刚刚'
} else if (diff < 3600) { } else if (diff < 3600) {
// less 1 hour // less 1 hour
return Math.ceil(diff / 60) + "分钟前"; return Math.ceil(diff / 60) + '分钟前'
} else if (diff < 3600 * 24) { } else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + "小时前"; return Math.ceil(diff / 3600) + '小时前'
} else if (diff < 3600 * 24 * 2) { } else if (diff < 3600 * 24 * 2) {
return "1天前"; return '1天前'
} }
if (option) { if (option) {
return parseTime(time, option); return parseTime(time, option)
} else { } else {
return ( return (
d.getMonth() + d.getMonth() +
1 + 1 +
"月" + '月' +
d.getDate() + d.getDate() +
"日" + '日' +
d.getHours() + d.getHours() +
"时" + '时' +
d.getMinutes() + d.getMinutes() +
"分" '分'
); )
} }
} }
...@@ -96,9 +96,9 @@ export function formatTime(time, option) { ...@@ -96,9 +96,9 @@ export function formatTime(time, option) {
* @returns {{}|any} * @returns {{}|any}
*/ */
export function paramObj(url) { export function paramObj(url) {
const search = url.split("?")[1]; const search = url.split('?')[1]
if (!search) { if (!search) {
return {}; return {}
} }
return JSON.parse( return JSON.parse(
'{"' + '{"' +
...@@ -106,9 +106,9 @@ export function paramObj(url) { ...@@ -106,9 +106,9 @@ export function paramObj(url) {
.replace(/"/g, '\\"') .replace(/"/g, '\\"')
.replace(/&/g, '","') .replace(/&/g, '","')
.replace(/=/g, '":"') .replace(/=/g, '":"')
.replace(/\+/g, " ") + .replace(/\+/g, ' ') +
'"}' '"}'
); )
} }
/** /**
...@@ -119,27 +119,27 @@ export function paramObj(url) { ...@@ -119,27 +119,27 @@ export function paramObj(url) {
*/ */
export function translateDataToTree(data) { export function translateDataToTree(data) {
const parent = data.filter( const parent = data.filter(
(value) => value.parentId === "undefined" || value.parentId == null (value) => value.parentId === 'undefined' || value.parentId == null
); )
const children = data.filter( const children = data.filter(
(value) => value.parentId !== "undefined" && value.parentId != null (value) => value.parentId !== 'undefined' && value.parentId != null
); )
const translator = (parent, children) => { const translator = (parent, children) => {
parent.forEach((parent) => { parent.forEach((parent) => {
children.forEach((current, index) => { children.forEach((current, index) => {
if (current.parentId === parent.id) { if (current.parentId === parent.id) {
const temp = JSON.parse(JSON.stringify(children)); const temp = JSON.parse(JSON.stringify(children))
temp.splice(index, 1); temp.splice(index, 1)
translator([current], temp); translator([current], temp)
typeof parent.children !== "undefined" typeof parent.children !== 'undefined'
? parent.children.push(current) ? parent.children.push(current)
: (parent.children = [current]); : (parent.children = [current])
} }
}); })
}); })
}; }
translator(parent, children); translator(parent, children)
return parent; return parent
} }
/** /**
...@@ -149,24 +149,24 @@ export function translateDataToTree(data) { ...@@ -149,24 +149,24 @@ export function translateDataToTree(data) {
* @returns {[]} * @returns {[]}
*/ */
export function translateTreeToData(data) { export function translateTreeToData(data) {
const result = []; const result = []
data.forEach((item) => { data.forEach((item) => {
const loop = (data) => { const loop = (data) => {
result.push({ result.push({
id: data.id, id: data.id,
name: data.name, name: data.name,
parentId: data.parentId, parentId: data.parentId,
}); })
const child = data.children; const child = data.children
if (child) { if (child) {
for (let i = 0; i < child.length; i++) { for (let i = 0; i < child.length; i++) {
loop(child[i]); loop(child[i])
} }
} }
}; }
loop(item); loop(item)
}); })
return result; return result
} }
/** /**
...@@ -176,19 +176,19 @@ export function translateTreeToData(data) { ...@@ -176,19 +176,19 @@ export function translateTreeToData(data) {
* @returns {string} * @returns {string}
*/ */
export function tenBitTimestamp(time) { export function tenBitTimestamp(time) {
const date = new Date(time * 1000); const date = new Date(time * 1000)
const y = date.getFullYear(); const y = date.getFullYear()
let m = date.getMonth() + 1; let m = date.getMonth() + 1
m = m < 10 ? "" + m : m; m = m < 10 ? '' + m : m
let d = date.getDate(); let d = date.getDate()
d = d < 10 ? "" + d : d; d = d < 10 ? '' + d : d
let h = date.getHours(); let h = date.getHours()
h = h < 10 ? "0" + h : h; h = h < 10 ? '0' + h : h
let minute = date.getMinutes(); let minute = date.getMinutes()
let second = date.getSeconds(); let second = date.getSeconds()
minute = minute < 10 ? "0" + minute : minute; minute = minute < 10 ? '0' + minute : minute
second = second < 10 ? "0" + second : second; second = second < 10 ? '0' + second : second
return y + "年" + m + "月" + d + "日 " + h + ":" + minute + ":" + second; //组合 return y + '年' + m + '月' + d + '日 ' + h + ':' + minute + ':' + second //组合
} }
/** /**
...@@ -198,19 +198,19 @@ export function tenBitTimestamp(time) { ...@@ -198,19 +198,19 @@ export function tenBitTimestamp(time) {
* @returns {string} * @returns {string}
*/ */
export function thirteenBitTimestamp(time) { export function thirteenBitTimestamp(time) {
const date = new Date(time / 1); const date = new Date(time / 1)
const y = date.getFullYear(); const y = date.getFullYear()
let m = date.getMonth() + 1; let m = date.getMonth() + 1
m = m < 10 ? "" + m : m; m = m < 10 ? '' + m : m
let d = date.getDate(); let d = date.getDate()
d = d < 10 ? "" + d : d; d = d < 10 ? '' + d : d
let h = date.getHours(); let h = date.getHours()
h = h < 10 ? "0" + h : h; h = h < 10 ? '0' + h : h
let minute = date.getMinutes(); let minute = date.getMinutes()
let second = date.getSeconds(); let second = date.getSeconds()
minute = minute < 10 ? "0" + minute : minute; minute = minute < 10 ? '0' + minute : minute
second = second < 10 ? "0" + second : second; second = second < 10 ? '0' + second : second
return y + "年" + m + "月" + d + "日 " + h + ":" + minute + ":" + second; //组合 return y + '年' + m + '月' + d + '日 ' + h + ':' + minute + ':' + second //组合
} }
/** /**
...@@ -220,12 +220,12 @@ export function thirteenBitTimestamp(time) { ...@@ -220,12 +220,12 @@ export function thirteenBitTimestamp(time) {
* @returns {string} * @returns {string}
*/ */
export function uuid(length = 32) { export function uuid(length = 32) {
const num = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; const num = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
let str = ""; let str = ''
for (let i = 0; i < length; i++) { for (let i = 0; i < length; i++) {
str += num.charAt(Math.floor(Math.random() * num.length)); str += num.charAt(Math.floor(Math.random() * num.length))
} }
return str; return str
} }
/** /**
...@@ -236,7 +236,7 @@ export function uuid(length = 32) { ...@@ -236,7 +236,7 @@ export function uuid(length = 32) {
* @returns {number} * @returns {number}
*/ */
export function random(m, n) { export function random(m, n) {
return Math.floor(Math.random() * (m - n) + n); return Math.floor(Math.random() * (m - n) + n)
} }
/** /**
...@@ -247,10 +247,10 @@ export function random(m, n) { ...@@ -247,10 +247,10 @@ export function random(m, n) {
export const on = (function () { export const on = (function () {
return function (element, event, handler, useCapture = false) { return function (element, event, handler, useCapture = false) {
if (element && event && handler) { if (element && event && handler) {
element.addEventListener(event, handler, useCapture); element.addEventListener(event, handler, useCapture)
} }
}; }
})(); })()
/** /**
* @author chuzhixin 1204505056@qq.com (不想保留author可删除) * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
...@@ -260,7 +260,7 @@ export const on = (function () { ...@@ -260,7 +260,7 @@ export const on = (function () {
export const off = (function () { export const off = (function () {
return function (element, event, handler, useCapture = false) { return function (element, event, handler, useCapture = false) {
if (element && event) { if (element && event) {
element.removeEventListener(event, handler, useCapture); element.removeEventListener(event, handler, useCapture)
} }
}; }
})(); })()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment