当前位置:   article > 正文

Vue-使用vue+elementUi从0到1创建一个后台管理系统_elementui创建的系统csdn

elementui创建的系统csdn

1.背景

1.对应很多入门前端来说,进入到一个公司一般来说都只是负责项目的某一个模块,很少有机会轮到自己从0到1去搭建一个项目。一般都是项目组长负责创建好项目,对页面的基本结构做好架构,做对应的跨域处理,token管理,路由拦截,API封装,打包优化这些。我们只是简单的调接口,写一些业务性的代码,这不利于我们提高自己的技术。

2.创建项目

1.在一个空的文件夹中打开终端,运行命令:

vue create demo(demo为项目名)

2.安装elelment ui:

npm i element-ui -S

3.配置按需引入:

  1. npm i babel-plugin-component -D
  2. /*如项目有需要,怎可以安装echarts*/
  3. npm i echarts --save

4.配置babel.config.js:

  1. module.exports = {
  2. presets:[
  3. '@vue/cli-plugin-balbel/preset'
  4. ],
  5. "pluguns":[
  6. [
  7. "component",
  8. {
  9. "libraryName":"element-ui",
  10. "styleLibraryName":"theme-chalk"
  11. }
  12. ]
  13. ]
  14. }

5.main.js按需引入组件,并注册。

6.安装axios

npm i axios --save

3.配置代理处理跨域请求

1.在vue.config.js文件中进行相关配置,这是vue官方推荐的一个文件命名方式,当服务起来的时候会自动找这个文件,找到了之后会自动解析读取里面相关的配置。

  1. module.exports = {
  2. //关闭eslint
  3. lintOnSave: false,
  4. // 处理vue服务相关选项
  5. devServer: {
  6. // 项目运行起来后自动打开浏览器
  7. opne: true,
  8. // 配置代理
  9. proxy: {
  10. // 知识一个标识
  11. 'api': {
  12. // target就是需要代理的服务器地址
  13. target: 'http://www.chenji.store',
  14. // ws => websocket (即时通讯,游戏)
  15. // 相当于在前后端之间开启了一个通道 数据会实时在通道内进行传输
  16. // 配置支持跨域
  17. changeOrigin: true,
  18. // 重写 防止原有的接口路径上也有一个api路径,导致有两个api
  19. pathRewrite: {
  20. '/api':'/'
  21. }
  22. }
  23. },
  24. // 配置全局sass
  25. css:{
  26. // 加载器
  27. loaderOptions:{
  28. sass: {
  29. prependData:`@import "./src/common/css/global"`
  30. }
  31. }
  32. },
  33. // vue的打包优化
  34. }
  35. }

4.封装API

1.不建议把axios挂载带vue的原型上,因为每次new一个vue都会带上这个属性。

2.创建request文件夹,新建service.js文件:

  1. // 引入axios,直接和后台接口打交道,统一处理所有接口(加token)
  2. import axios from 'axios'
  3. import vue from '../main.js'
  4. function getTokenByLocal() {
  5. let token = sessionStorage.getItem('token');
  6. // 不使用cookie 1.cookie存的值大小有限定(几K) 2.cookie在服务端不安全,容易被攻击
  7. const service = axios.create({
  8. // 这里的/api和vue.config.js中的target中的服务器地址是一一对应的
  9. baseURL: '/api',
  10. // 请求超时时间
  11. timeout: 5000
  12. })
  13. // 请求拦截
  14. service.interceptors.request.use(
  15. config => {
  16. if(getTokenByLocal()) {
  17. service.headers['token'] = getTokenByLocal()
  18. // 使用cookie现在新版的谷歌浏览器会报错
  19. // service.headers['cookie'] = 'xxx'
  20. } else {
  21. vue.$router.push('/login')
  22. }
  23. return config
  24. },
  25. error => {
  26. return Promise.reject(error)
  27. }
  28. )
  29. // 响应拦截
  30. service.interceptors.response.use(
  31. response => {
  32. let res = response.data
  33. // 要根据后端定义的code值做相应操作
  34. if(res.code == 400) {
  35. vue.$router.push('/login')
  36. }
  37. return Promise.resolve(res)
  38. },
  39. error => {
  40. return Promise.reject(error)
  41. }
  42. )
  43. }
  44. // 默认导出service
  45. export default service

3.在request文件夹下新建comon.js文件,处理get、post封装请求:

  1. import servie from './service.js'
  2. import service from './service.js'
  3. // 耦合度低 => 复用性高
  4. // 封装post请求
  5. export function requestOfPost(url, data) {
  6. return servie.post(url, data)
  7. }
  8. // 封装get请求
  9. export function requestOfGet(url, data) {
  10. return service.post(url, data)
  11. }
  12. // 添加其他类似请求

4.在request文件夹下新建url.js,用于集中管理api:

  1. // 管理所有的接口url 如果项目中的接口较多,为了方便管理,也可以分模块分成多个urlXXX.js:
  2. const url = {
  3. // 例如登录注册相关
  4. login: 'fengmang/login',
  5. register:'fengmang/register',
  6. getCode:'fengmang/getCode',
  7. findPassword:'fengmang/findPassword'
  8. }
  9. export default url

5.在request文件夹中新建api.js文件,直接和api、业务打交道:

  1. //直接与api打交道
  2. import { requestOfPost, requestOfGet } from './common.js'
  3. export function postRequest(url, data) {
  4. return new Promose(
  5. (resolve, reject) => {
  6. requestOfPost(url, data).then(res => {
  7. resolve(res)
  8. }).catch(
  9. error => {
  10. reject(error)
  11. })
  12. })
  13. }
  14. export function getRequest(url, data) {
  15. return new Promose(
  16. (resolve, reject) => {
  17. requestOfGet(url, data).then(res => {
  18. resolve(res)
  19. }).catch(
  20. error => {
  21. reject(error)
  22. })
  23. })
  24. }

6.调用api,以登录为例:

  1. <script>
  2. import { postRequest } from "../request/api.js";
  3. import url from "../request/url.js";
  4. export default {
  5. data() {
  6. return {
  7. account: "",
  8. password: ""
  9. };
  10. },
  11. methods: {
  12. login() {
  13. let data = {
  14. account: this.account,
  15. password: this.password
  16. };
  17. if (!this.account && !this.password) {
  18. postRequest(url.login, data).then(res => {
  19. if (res.code == 200) {
  20. console.log(res);
  21. sessionStorage.setItem('token',res.data.token)
  22. setTimeout(() => {
  23. this.$router.push('/home')
  24. })
  25. }
  26. });
  27. }
  28. }
  29. }
  30. };
  31. </script>

未完待续~~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/96313
推荐阅读
相关标签
  

闽ICP备14008679号