首页 > 其他分享 >从0到1写一个vue2管理后台项目(二)

从0到1写一个vue2管理后台项目(二)

时间:2024-07-03 14:54:01浏览次数:12  
标签:case vue 项目 break vue2 error 后台 message response

前言:现在有很多vue2的管理后台系统,为什么还要自己写一个呢?我觉得会用总没有会写理解得深

一、有了基础框架(一)之后,对于一个vue开发工程师来说如何自己搭建自己的后台管理系统呢?当然可以直接抄一些现有的开源系统的代码,比如admin、ruoyi等,同样我想试试通过AI来写,一步一步完善,于是用了chatGPT

二、直接带上框架代码给GPT提问:

1、request.js代码:

import axios from "axios"; // 导入axios

import {Message} from "element-ui"; // 使用element-ui Message做消息提醒

import router from "../router"; //使用router做token到期或没有token时强制跳转login页

let state = true

// 这里面加入后端环境的地址

const request = axios.create({

   baseURL: process.env.VUE_APP_BASE_URL,

   timeout: 50000,  // 超时时间设置

   withCredentials: true, // true允许跨域

   headers: {

      post: {

         "Content-Type": "application/json;charset=UTF-8"

      }

   }

 });

request.interceptors.request.use(

   config => {

      let token = Cookies.get('userToken');

      if (localStorage.getItem("bearerToken") == null) {

         config.headers['Authorization'] = 'Bearer ' + token;

      } else {

         config.headers.Authorization = JSON.parse(localStorage.getItem("userToken"));

      }

      return config;

   },

   error => {

      Promise.reject(error);//记录错误到promise对象

      localstorage.removeItem( 'userData ');//移除用户数据

      localstorage.removeItem( 'userToken ');//移除token

      router.push( '/login');//跳转到登录页面

   }

);

 

request.interceptors.response.use(

   response => {

      if (response.status === 200 || response.status === 201 || response.status === 204) {

         if (response.data.code == -10) {

            if (state) {

               Message.error(response.data.message);

               state = false

            }

            localStorage.removeItem("userToken");

            localStorage.removeItem("userData");

            router.push({

               name: "login"

            });

            return;

         } else if (response.data.code == -1) {

            Message.error(response.data.message);

            return

         } else {

            state = true

            return Promise.resolve(response);

         }

      } else {

         return Promise.reject(response);

      }

   },

   error => {

      if (error && error.response) {

         switch (error.response.status) {

            case 400: error.message = '请求错误(400)'; break

               case 401: error.message = '未授权,请重新登录(401)'; break

               case 403: error.message = '拒绝访问(403)'; break

               case 404: error.message = '请求出错(404)'; break

               case 408: error.message = '请求超时(408)'; break

               case 500: error.message = '服务器错误(500)'; break

               case 501: error.message = '服务未实现(501)'; break

               case 502: error.message = '网络错误(502)'; break

               case 503: error.message = '服务不可用(503)'; break

               case 504: error.message = '网络超时(504)'; break

               case 505: error.message = 'HTTP版本不受支持(505)'; break

               case -1: error.message = "系统繁忙,请稍后再试"; break

               default: error.message = `连接出错(:${error})!`

         }

      } else {

         // 超时处理

         if (JSON.stringify(error).includes("timeout")) {

            Message.error("服务器响应超时,请刷新当前页");

         }

         error.message("连接服务器失败");

      }

      return Promise.resolve(error.response);

   }

);

 

export default request;

2、api文件夹下的user.js

import request from '@/utils/request'

 

//  退出登录

export function logout() {

  return request({

    url: '/vue-admin-template/user/logout',

    method: 'post'

  })

}

 

3、main.js

import Vue from 'vue';

import App from './App.vue';

import router from './router';

import ElementUI from 'element-ui';

import "element-ui/lib/theme-chalk/index.css";

 

Vue.use(ElementUI);

 

Vue.config.productionTip = false;

new Vue({

  router,

  render: h => h(App),

}).$mount('#app');

4、package.json

{

  "name": "my-website",

  "version": "0.1.0",

  "private": true,

  "scripts": {

    "serve": "vue-cli-service serve",

    "serve:dev": "cross-env NODE_ENV=development vue-cli-service serve --mode development",

    "serve:prod": "cross-env NODE_ENV=production vue-cli-service serve --mode production",

    "build": "vue-cli-service build",

    "build:dev": "cross-env NODE_ENV=development vue-cli-service build --mode development",

    "build:prod": "cross-env NODE_ENV=production vue-cli-service build --mode production",

    "lint": "vue-cli-service lint"

  },

  "dependencies": {

    "core-js": "^3.8.3",

    "element-ui": "^2.15.14",

    "vue": "^2.6.14",

    "vue-router": "^3.6.5"

  },

  "devDependencies": {

    "@babel/core": "^7.12.16",

    "@babel/eslint-parser": "^7.12.16",

    "@vue/cli-plugin-babel": "~5.0.0",

    "@vue/cli-plugin-eslint": "~5.0.0",

    "@vue/cli-service": "~5.0.0",

    "clean-webpack-plugin": "^4.0.0",

    "cross-env": "^7.0.3",

    "eslint": "^7.32.0",

    "eslint-plugin-vue": "^8.0.3",

    "less": "^4.2.0",

    "less-loader": "^12.2.0",

    "postcss-import": "^16.1.0",

    "vue-template-compiler": "^2.6.14"

  },

  "eslintConfig": {

    "root": true,

    "env": {

      "node": true

    },

    "extends": [

      "plugin:vue/essential",

      "eslint:recommended"

    ],

    "parserOptions": {

      "parser": "@babel/eslint-parser"

    },

    "rules": {}

  },

  "browserslist": [

    "> 1%",

    "last 2 versions",

    "not dead"

  ]

}

5:如何在vue2框架下写一个登录页面以及后台管理的通用左侧菜单栏(包括用户、角色等)和顶部个人中心栏,要求类似于若依的框架,现在有api.js,request.js等基础组件,给出需要的文件代码粘贴到项目中

三、问题为上面5的问题:如何在vue2框架下写一个登录页面以及后台管理的通用左侧菜单栏(包括用户、角色等)和顶部个人中心栏,要求类似于若依的框架,现在有api.js,request.js等基础组件,给出需要的文件代码粘贴到项目中

 

 

 

 

 

四、以上基本的框架已经成型,但是跑项目报错,继续丢错误给chatGPT

 

 

五、用chatGPT解决掉问题后,跑项目成功

 

六、继续通过GPT完善

七、添加后如图:

 至此后台管理框架成形,如果要继续完善就是写CSS样式和组件封装以及js并和后台联调,以后有时间再写。
顺便推荐一本书《CSS新世界》

 

标签:case,vue,项目,break,vue2,error,后台,message,response
From: https://www.cnblogs.com/CarlJohnson9527/p/18281624

相关文章

  • vue项目子组件使用 dialog 弹框,如何实现父子组件弹框展示状态关联?
    vue项目,子组件使用el-dialog组件,想要实现在父组件可以控制子组件dialog的展示和隐藏,子组件自己可以控制dialog展示和隐藏,该如何实现?1.子组件(DialogComponent.vue)子组件接受一个来自父组件的prop,用来控制dialog的显示状态,并且当子组件内部需要改变dialog状态时,通过......
  • 软考中项(第三版):项目立项管理总结
    前言系统集成项目管理工程师考试(简称软考中项),其中案例分析也是很大一部分考试内容,目前正在学习中,现总结一些可能会考到的知识点供大家参考。1.1、项目建议与立项申请1、立项管理包括的4个阶段:(1)项目建议书与立项申请(2)初步可行性研究(3)详细可性型研究(4)项目评估与决策2、......
  • GIT - 一条命令把项目更新到远程仓库
    前言阅读本文大概需要3分钟说明更新项目到远程仓库只需要执行一条命令,相当的简便步骤第一步编辑配置文件vim~/.bash_profile第二步写入配置文件gsh(){localmsg="${1:-ADDCOMMITPUSH}"gitadd.&&gitcommit-m"$msg"&&gitpush}第三步......
  • 2024年5大最强免费项目管理软件使您能够轻松应对各种项目管理难题
    作为软件开发人员或测试人员,选择最适合自己的测试管理工具可能是一项艰巨的任务。目前有无数种免费的测试管理工具,它们旨在帮助开发人员轻松管理测试流程。以下是2024年5大最强免费测试管理工具,帮助您轻松应对各种测试难题。1.禅道项目管理软件禅道作为国内知名的开源项目管理......
  • 以Java项目为例,实现Jenkins对接CCE Autopilot集群
    本文分享自华为云社区《Jenkins对接CCEautopilot集群实战》,作者:可以交个朋友。一背景鉴于日趋流行的serverless技术架构、以及用户经常谈及的降本的需求。考虑Jenkins主从架构的特性,slave节点可以在工作的时候部署在任意平台上执行master节点下发的任务,因此可以基于CCEAuto......
  • 基于Java中的SSM框架实现口腔护理网站系统项目【项目源码+论文说明】计算机毕业设计
    基于Java中的SSM框架实现口腔护理网站系统演示摘要本文主要讲述了是使用Jsp与Mysql数据库实现基于SSM框架的口腔护理网站的详细过程。这里所谓的口腔护理网站是建立一个类似于医院的医疗系统使得所有的患者人员有一个更方便的工具,从而可以随时预约自己的口腔护理。口腔护......
  • 本地资源(local resource)与项目资源文件(project resource)的区别
    导入“本地资源”的图片,会在Form文件下面的Form.resx文件里面,不可以在多个Form界面引用,不可以在里面修改图片的名称;导入“项目资源文件”的图片,会保存在Properties文件夹下面的Resources.resx文件夹里面,可以在多个form界面引用,可以在里面修改图片的名称。注意:Resources.rexs......
  • C语言小项目-词法分析器
    1.什么是词法分析器?        词法分析器是编译器中的第一个阶段,其主要任务是扫描输入的源代码字符流,并将字符组成的序列转换为有意义的标记(Token)。每个Token包含一个词法单元的信息,如关键字、标识符、运算符、常量等。例如,对于表达式inta=10;,词法分析器会生成诸......
  • 仿论坛项目--初识Spring Boot
    1.技术准备技术架构•SpringBoot•Spring、SpringMVC、MyBatis•Redis、Kafka、Elasticsearch•SpringSecurity、SpringActuator开发环境•构建工具:ApacheMaven•集成开发工具:IntelliJIDEA•数据库:MySQL、Redis•应用服务器:ApacheTomcat•版本......
  • WebAPI项目框架仓储模式+导入SqlSuag
    仓储(Respository)是对数据库访问的一个封装解决方案新建Respository文件夹,新建类库Web.Core.IRepository,Web.Core.Repository解决方案新建Services文件夹,新建类库Web.Core.IServices,Web.Core.Services在类库Web.Core.Model下面新建Entity文件夹SqlSugar是国人开发者开发的一......