vuecli3后台管理项目小结

小白优选-> 创建cli项目:新增图形化界面创建项目; vue ui 回车;懂中文都看得懂了,按步骤往下走就完成了; 下面是一些小结 1.如果不习惯代码检查,最好不安装什么代码检查插件,写代码会把你逼疯,打个log都很麻烦,安装过程注意看自己是否安装了这个鬼玩意儿,这个不是必选的; 2.pc端友好的ui框架:element UI、 Ant Design 移动端相对有好的ui框架:vant 3.npm install = npm i ;npm run dev = npm run serve 4.配置生产的相对路径: 这个文件vue.config.js直接放到根目录 module.exports = { /** 区分打包环境与开发环境 * process.env.NODE_ENV==='production' (打包环境) * process.env.NODE_ENV==='development' (开发环境) * baseUrl: process.env.NODE_ENV==='production'?"https://cdn.didabisai.com/front/":'front/', */ // 项目部署的基础路径 // 我们默认假设你的应用将会部署在域名的根部, // 例如 https://www.my-app.com/ // 如果你的应用部署在一个子路径下,那么你需要在这里 // 指定子路径。比如将你的应用部署在 // https://www.foobar.com/my-app/ // 那么将这个值改为 '/my-app/' publicPath: process.env.NODE_ENV === 'production' ? './' : '/', // 构建好的文件输出到哪里 outputDir: "dist", // where to put static assets (js/css/img/font/...) // 是否在保存时使用‘eslint-loader’进行检查 // 有效值: true | false | 'error' // 当设置为‘error’时,检查出的错误会触发编译失败 lintOnSave: true, // 使用带有浏览器内编译器的完整构建版本 // https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only runtimeCompiler: false, // babel-loader默认会跳过`node_modules`依赖. // 通过这个选项可以显示转译一个依赖 transpileDependencies: [ /* string or regex */ ], // 是否为生产环境构建生成sourceMap? productionSourceMap: false, // 生产打包时不输出map文件,增加打包速度 chainWebpack: config => { // 修复HMR config.resolve.symlinks(true); }, configureWebpack: () => { }, // CSS 相关选项 css: { // 将组件内部的css提取到一个单独的css文件(只用在生产环境) // 也可以是传递给 extract-text-webpack-plugin 的选项对象 // extract: true, // 允许生成 CSS source maps? sourceMap: false, // pass custom options to pre-processor loaders. e.g. to pass options to // sass-loader, use { sass: { ... } } loaderOptions: {}, // Enable CSS modules for all css / pre-processor files. // This option does not affect *.vue files. modules: false }, // use thread-loader for babel & TS in production build // enabled by default if the machine has more than 1 cores parallel: require("os").cpus().length > 1, // PWA 插件相关配置 // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa pwa: {}, // configure webpack-dev-server behavior devServer: { open: process.platform === "darwin", disableHostCheck: true, //开启热更新 host: "0.0.0.0", port: 8088, https: false, hotOnly: false, // See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#configuring-proxy // proxy: { // '/api': { // target: 'https://dev.njjmyj.com/uc_client_api', // changeOrigin: true, // ws: true, // pathRewrite: { // '^/api': '' // } // } // } // string | Object // before: app => {} }, // 第三方插件配置 pluginOptions: { // ... }, }; 5.axios的封装使用 src目录新建 axios目录(包含两个目录)-> axios.js, api.js;这样做法相对规范;将请求全部归纳到一起 axios.js // BaseModule.js import axios from "axios"; import store from '../store' // const GlobalConfig = require("@/config").config; const codeMessage = { 200: "服务器成功返回请求的数据。", 201: "新建或修改数据成功。", 202: "一个请求已经进入后台排队(异步任务)。", 204: "删除数据成功。", 400: "错误请求", 401: "未授权,请重新登录", 403: "拒绝访问", 404: "请求错误,未找到该资源", 406: "请求的格式不可得", 410: "请求的资源被永久删除", 422: "当创建一个对象时,发生一个验证错误。", 500: "服务器端出错", 502: "网络错误", 503: "服务不可用", 504: "网络超时" }; // this.$store.commit('getAppValue','quyoucai') if (process.env.NODE_ENV == 'development') { // 开发环境 axios.defaults.baseURL = 'http://192.168.1.32:8901';} else if (process.env.NODE_ENV == 'debug') { axios.defaults.baseURL = 'http://192.168.1.32:8901'; } else if (process.env.NODE_ENV == 'production') { // 生产环境 axios.defaults.baseURL = 'http://47.103.122.228:8901/qddbackend'; } /****** 创建axios实例 ******/ const service = axios.create({ timeout: 60 * 1000, // 请求超时时间 }); service.interceptors.request.use( config => { if (config.method == 'post') { config.data = { ...config.data, appValue: store.state.appValue, } } return config; }, err => { return Promise.reject(err); } ); service.interceptors.response.use( response => { //成功请求到数据 //这里根据后端提供的数据进行对应的处理 // 对响应数据做点什么 if (response.status >= 200 && response.status <= 300) { if (response.data.code !== 0) { } return response.data; } return response; }, error => { console.log(error.response); if (axios.isCancel(error)) { console.log("中断请求", error.message); } else { // 处理错误 if (error && error.response) { error.message = codeMessage[error.response.status] || `连接错误${error.response.status}`; } else { error.message = "连接到服务器失败"; } } return Promise.reject(error.message); } ) export default service; api.js import service from './axios' // 登录 // post data =>{} // get param =>{} export const login = data => { return service({ url: '/sys/login', method: 'post', data }) }; export const getFeedBack = data => { return service({ url: '/feedback/getFeedbackList', method: 'post', data }) }; export const getVersion = data => { return service({ url: '/sys/getVersionList', method: 'post', data }) }; export const date = () => { let date = new Date(); let dd = date.getDate(); let mm = date.getMonth() + 1; let yy = date.getFullYear(); if (mm >= 1 && mm <= 9) { mm = "0" + mm; } if (dd >= 0 && dd <= 9) { dd = "0" + dd; } return `${yy}-${mm}-${dd}` } 页面按需引入方法 目录结构.png 6.async/await成对出现 ;async包裹调用axios的方法 , await替代了axios的.then(()=>{})很实用。 7.遇到改不掉的ui样式,两种方法: 1.局部设置:本页面scoped style 里面 -> /deep/ 例如:修改class ‘.div’子元素 el-input样式 .div /deep/ .el-input { font-size:12px; } 2.index.html:style 全局设置 deep依然可使用,但是会适用于全局; 8.组建最好异步加载(按需引入),不要问,问就是 "优雅" 持续更新....

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):