Commit a0ea7efe9c0042b4d7b755270801f94cd32516e8
0 parents
init
Showing
9 changed files
with
324 additions
and
0 deletions
.gitignore
0 → 100644
| 1 | +++ a/.gitignore | |
| 1 | +.DS_Store | |
| 2 | +yarn.lock | |
| 3 | +node_modules | |
| 4 | +package-lock | |
| 5 | +package-lock.json | |
| 6 | +/dist | |
| 7 | +dist.zip | |
| 8 | +/public/font_family | |
| 9 | + | |
| 10 | +# local env files | |
| 11 | +.env.local | |
| 12 | +.env.*.local | |
| 13 | + | |
| 14 | +# Log files | |
| 15 | +npm-debug.log* | |
| 16 | +yarn-debug.log* | |
| 17 | +yarn-error.log* | |
| 18 | +pnpm-debug.log* | |
| 19 | + | |
| 20 | +# Editor directories and files | |
| 21 | +.idea | |
| 22 | +.vscode | |
| 23 | +*.suo | |
| 24 | +*.ntvs* | |
| 25 | +*.njsproj | |
| 26 | +*.sln | |
| 27 | +*.sw? | |
| 28 | +src/views/portrait/test.vue | ... | ... |
.postcssrc.js
0 → 100755
README.md
0 → 100644
| 1 | +++ a/README.md | |
| 1 | +-开发环境 | |
| 2 | +- node.js v8.0+ | |
| 3 | +- git | |
| 4 | + | |
| 5 | +-技术栈 | |
| 6 | +- ES6+ | |
| 7 | +- vue v2.5+ | |
| 8 | +- vue-router | |
| 9 | +- vuex | |
| 10 | +- axios | |
| 11 | +- scss | |
| 12 | +- element-ui v2.4+ | |
| 13 | + | |
| 14 | +- 实现功能 | |
| 15 | + | |
| 16 | +- 登录、退出 | |
| 17 | ++ 基于token | |
| 18 | + - 状态拦截、404页面 | |
| 19 | + - 动态加载路由 | |
| 20 | + - 页面、按钮指令权限管理 | |
| 21 | + - 无限级菜单 | |
| 22 | +- 封装vue-i18n@8.x国际化组件 | |
| 23 | +- 系统全屏化 | |
| 24 | + | |
| 25 | +# 安装依赖 (如果安装失败就多安装几次,实在不行就换淘宝镜像) | |
| 26 | +yarn or yarn install | |
| 27 | +or | |
| 28 | +npm install | |
| 29 | + | |
| 30 | +# 启动项目 (已经配置好启动服务自动打开浏览器,如果没自动打开按照控制台输出的地址自己打开) | |
| 31 | +# 如果eslint语法检查报错,直接关掉eslint语法检查 | |
| 32 | +yarn dev | |
| 33 | +or | |
| 34 | +npm run dev | |
| 35 | + | |
| 36 | +# 启动编译打包 生产环境 | |
| 37 | +yarn build | |
| 38 | +or | |
| 39 | + npm run build | |
| 0 | 40 | \ No newline at end of file | ... | ... |
babel.config.js
0 → 100644
package.json
0 → 100755
| 1 | +++ a/package.json | |
| 1 | +{ | |
| 2 | + "name": "vue-admin", | |
| 3 | + "version": "1.0.0", | |
| 4 | + "private": true, | |
| 5 | + "scripts": { | |
| 6 | + "serve": "vue-cli-service serve", | |
| 7 | + "build": "vue-cli-service build", | |
| 8 | + "lint": "vue-cli-service lint" | |
| 9 | + }, | |
| 10 | + "dependencies": { | |
| 11 | + "core-js": "^3.6.5", | |
| 12 | + "echarts": "5.3.2", | |
| 13 | + "element-ui": "^2.15.1", | |
| 14 | + "js-cookie": "^2.2.0", | |
| 15 | + "jsencrypt": "^3.2.0", | |
| 16 | + "nprogress": "^0.2.0", | |
| 17 | + "font-awesome": "^4.7.0", | |
| 18 | + "vue": "^2.6.11", | |
| 19 | + "vue-i18n": "^8.4.0", | |
| 20 | + "vue-router": "^3.5.1", | |
| 21 | + "axios": "^0.21.1", | |
| 22 | + "vuex": "^3.6.2" | |
| 23 | + }, | |
| 24 | + "devDependencies": { | |
| 25 | + "@vue/cli-plugin-babel": "~4.5.0", | |
| 26 | + "@vue/cli-service": "~4.5.0", | |
| 27 | + "autoprefixer": "^7.1.2", | |
| 28 | + "babel-core": "^6.22.1", | |
| 29 | + "babel-loader": "^7.1.1", | |
| 30 | + "babel-eslint": "^10.1.0", | |
| 31 | + "eslint": "^6.7.2", | |
| 32 | + "eslint-plugin-vue": "^6.2.2", | |
| 33 | + "extract-text-webpack-plugin": "^3.0.0", | |
| 34 | + "html-webpack-plugin": "^4.2.0", | |
| 35 | + "mini-css-extract-plugin": "^0.9.0", | |
| 36 | + "node-sass": "^4.13.0", | |
| 37 | + "sass-loader": "^7.1.0", | |
| 38 | + "postcss-import": "^12.0.1", | |
| 39 | + "postcss-loader": "^3.0.0", | |
| 40 | + "postcss-url": "^7.2.1", | |
| 41 | + "optimize-css-assets-webpack-plugin": "^3.2.0", | |
| 42 | + "vue-template-compiler": "^2.5.2" | |
| 43 | + } | |
| 44 | +} | ... | ... |
public/index.html
0 → 100644
| 1 | +++ a/public/index.html | |
| 1 | +<!DOCTYPE html> | |
| 2 | +<html lang=""> | |
| 3 | + | |
| 4 | +<head> | |
| 5 | + <meta charset="utf-8"> | |
| 6 | + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | |
| 7 | + <meta name="viewport" content="width=device-width,initial-scale=1.0"> | |
| 8 | + <link rel="icon" href="<%= BASE_URL %>favicon.ico"> | |
| 9 | + <title> | |
| 10 | + <%= htmlWebpackPlugin.options.title %> | |
| 11 | + </title> | |
| 12 | +</head> | |
| 13 | + | |
| 14 | +<body> | |
| 15 | + <noscript> | |
| 16 | + <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. | |
| 17 | + Please enable it to continue.</strong> | |
| 18 | + </noscript> | |
| 19 | + <div id="app"></div> | |
| 20 | + <!-- built files will be auto injected --> | |
| 21 | +</body> | |
| 22 | + | |
| 23 | +</html> | |
| 0 | 24 | \ No newline at end of file | ... | ... |
src/App.vue
0 → 100644
| 1 | +++ a/src/App.vue | |
| 1 | +<template> | |
| 2 | + <div id="app"> | |
| 3 | + <transition name="fade" mode="out-in"> | |
| 4 | + <router-view></router-view> | |
| 5 | + </transition> | |
| 6 | + </div> | |
| 7 | +</template> | |
| 8 | + | |
| 9 | +<script> | |
| 10 | +export default { | |
| 11 | + name: "app" | |
| 12 | +} | |
| 13 | + | |
| 14 | +</script> | |
| 15 | + | |
| 16 | +<style lang="scss"> | |
| 17 | +body { | |
| 18 | + margin: 0px; | |
| 19 | + padding: 0px; | |
| 20 | + font-family: Microsoft YaHei, Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, SimSun, sans-serif; | |
| 21 | + font-size: 14px; | |
| 22 | + -webkit-font-smoothing: antialiased; | |
| 23 | +} | |
| 24 | + | |
| 25 | +#app { | |
| 26 | + position: absolute; | |
| 27 | + top: 0px; | |
| 28 | + bottom: 0px; | |
| 29 | + width: 100%; | |
| 30 | +} | |
| 31 | +a{ | |
| 32 | + color: #56a9ff; | |
| 33 | +} | |
| 34 | +.fade-enter-active, | |
| 35 | +.fade-leave-active { | |
| 36 | + transition: all .2s ease; | |
| 37 | +} | |
| 38 | + | |
| 39 | +.fade-enter, | |
| 40 | +.fade-leave-active { | |
| 41 | + opacity: 0; | |
| 42 | +} | |
| 43 | +#nprogress .bar { | |
| 44 | + height: 3px !important; | |
| 45 | + background: #56a9ff !important; //自定义颜色 | |
| 46 | +} | |
| 47 | +</style> | ... | ... |
src/main.js
0 → 100755
| 1 | +++ a/src/main.js | |
| 1 | +// The Vue build version to load with the `import` command | |
| 2 | +// (runtime-only or standalone) has been set in webpack.base.conf with an alias. | |
| 3 | +import Vue from "vue" | |
| 4 | +import ElementUI from "element-ui" | |
| 5 | +import App from "./App.vue" | |
| 6 | +import router from "./router" | |
| 7 | +import store from "./store" | |
| 8 | +import i18n from "./i18n/i18n" | |
| 9 | +import globalPlugin from "./utils/global" | |
| 10 | +import permission from "./directive/permission/button" | |
| 11 | +import NProgress from "nprogress" | |
| 12 | + | |
| 13 | +import "nprogress/nprogress.css" | |
| 14 | +import "element-ui/lib/theme-chalk/index.css" | |
| 15 | +import "font-awesome/css/font-awesome.css" | |
| 16 | +import "@/router/permission" | |
| 17 | + | |
| 18 | +Vue.config.productionTip = false | |
| 19 | +Vue.use(ElementUI) | |
| 20 | +Vue.use(globalPlugin) | |
| 21 | +Vue.use(permission) | |
| 22 | + | |
| 23 | +NProgress.inc(0.2) | |
| 24 | +NProgress.configure({ easing: "ease", speed: 500, showSpinner: false }) | |
| 25 | + | |
| 26 | +/* eslint-disable no-new */ | |
| 27 | +new Vue({ | |
| 28 | + el: "#app", | |
| 29 | + router, | |
| 30 | + store, | |
| 31 | + i18n, | |
| 32 | + render: h => h(App), | |
| 33 | + components: {App}, | |
| 34 | + template: "<App/>" | |
| 35 | +}) | ... | ... |
vue.config.js
0 → 100644
| 1 | +++ a/vue.config.js | |
| 1 | +const path = require("path"); | |
| 2 | +const resolve = (dir) => path.join(__dirname, dir); | |
| 3 | +const IS_PROD = ["production", "prod"].includes(process.env.NODE_ENV); | |
| 4 | +const BundleAnalyzerPlugin = require("webpack-bundle-analyzer") | |
| 5 | + .BundleAnalyzerPlugin; | |
| 6 | + | |
| 7 | +module.exports = { | |
| 8 | + publicPath: "./", // 编译后的地址,可以根据环境进行设置 | |
| 9 | + outputDir: "dist", // 生产环境构建文件的目录 | |
| 10 | + assetsDir: "static", // 静态文件目录 | |
| 11 | + lintOnSave: false, //是否开启编译时是否不符合eslint提示 | |
| 12 | + productionSourceMap: false, // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 | |
| 13 | + devServer: { | |
| 14 | + hot:true, | |
| 15 | + port: 8080, // 端口 | |
| 16 | + open: false, // 启动后打开浏览器 | |
| 17 | + compress: true, | |
| 18 | + overlay: { | |
| 19 | + // 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层 | |
| 20 | + warnings: false, | |
| 21 | + errors: true, | |
| 22 | + }, | |
| 23 | + proxy: { | |
| 24 | + "/": { | |
| 25 | + target:"http://lead.xc.com:32269", | |
| 26 | + changeOrigin: true, | |
| 27 | + ws:true, | |
| 28 | + }, | |
| 29 | + }, | |
| 30 | + disableHostCheck: true | |
| 31 | + }, | |
| 32 | + css: { | |
| 33 | + extract: IS_PROD, // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。 | |
| 34 | + sourceMap: false, | |
| 35 | + }, | |
| 36 | + chainWebpack: (config) => { | |
| 37 | + config.plugin('html').tap(args => { | |
| 38 | + args[0].title = '云平台'; | |
| 39 | + return args; | |
| 40 | + }); | |
| 41 | + config.resolve.alias | |
| 42 | + .set("@", resolve("src")) | |
| 43 | + .set("assets", resolve("src/assets")) | |
| 44 | + .set("components", resolve("src/components")) | |
| 45 | + .set("router", resolve("src/router")) | |
| 46 | + .set("utils", resolve("src/utils")) | |
| 47 | + .set("store", resolve("src/store")) | |
| 48 | + .set("views", resolve("src/views")) | |
| 49 | + .set("api", resolve("src/api")); | |
| 50 | + if (IS_PROD) { | |
| 51 | + config.plugin("webpack-report").use(BundleAnalyzerPlugin, [ | |
| 52 | + { | |
| 53 | + analyzerMode: "static", | |
| 54 | + }, | |
| 55 | + ]); | |
| 56 | + } | |
| 57 | + config.when(IS_PROD, (config) => { | |
| 58 | + config.devtool("cheap-source-map"); | |
| 59 | + config | |
| 60 | + .plugin("ScriptExtHtmlWebpackPlugin") | |
| 61 | + .after("html") | |
| 62 | + .use("script-ext-html-webpack-plugin") | |
| 63 | + .end(); | |
| 64 | + config.optimization.splitChunks({ | |
| 65 | + chunks: "all", | |
| 66 | + cacheGroups: { | |
| 67 | + // cacheGroups 下可以可以配置多个组,每个组根据test设置条件,符合test条件的模块 | |
| 68 | + commons: { | |
| 69 | + name: "chunk-commons", | |
| 70 | + test: resolve("src/components"), | |
| 71 | + minChunks: 3, // 被至少用三次以上打包分离 | |
| 72 | + priority: 5, // 优先级 | |
| 73 | + reuseExistingChunk: true, // 表示是否使用已有的 chunk,如果为 true 则表示如果当前的 chunk 包含的模块已经被抽取出去了,那么将不会重新生成新的。 | |
| 74 | + }, | |
| 75 | + node_vendors: { | |
| 76 | + name: "chunk-libs", | |
| 77 | + chunks: "initial", // 只打包初始时依赖的第三方 | |
| 78 | + test: /[\\/]node_modules[\\/]/, | |
| 79 | + priority: 10, | |
| 80 | + }, | |
| 81 | + elementUI: { | |
| 82 | + name: "chunk-elementUI", // 单独将 elementUI 拆包 | |
| 83 | + priority: 20, // 数字大权重到,满足多个 cacheGroups 的条件时候分到权重高的 | |
| 84 | + test: /[\\/]node_modules[\\/]_?element(.*)/, | |
| 85 | + }, | |
| 86 | + }, | |
| 87 | + }); | |
| 88 | + config.optimization.runtimeChunk("single"); | |
| 89 | + config.optimization.minimize(true); | |
| 90 | + }); | |
| 91 | + }, | |
| 92 | +}; | |
| 93 | + | ... | ... |