vue+elementUI 路由拦截提示

本文介绍了如何在Vue项目中使用axios进行接口请求时处理过期响应和超时问题,包括错误提示及登出重定向机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口过期,响应超时界面提示:

request.ts:

import axios from "axios";
import ElementUI from "element-ui";
import Vue from "vue";
import { ticket } from "@/api";
const service = axios.create({
  // baseURL: 'process.env.VUE_APP_BASE_API', // url = base url + request url
  baseURL: "", // url = base url + request url
  timeout: 2000
  // withCredentials: true // send cookies when cross-domain requests
});

// Request interceptors
service.interceptors.request.use(
  (config: any) => {
    return config;
  },
  error => {
    console.log(error);
    Promise.reject(error);
  }
);

// Response interceptors
service.interceptors.response.use(
  response => {
    // console.log(response)
    // Some example codes here:
    // code == 20000: success
    // code == 50001: invalid access token
    // code == 50002: already login in other place
    // code == 50003: access token expired
    // code == 50004: invalid user (user not exist)
    // code == 50005: username or password is incorrect
    // You can change this part for your own usage.
    const res = response;
    if (response.status == 401) {
        ElementUI.MessageBox.confirm("会话过期,请重新登录", "提示", {
          confirmButtonText: "确定",
          showCancelButton:false,
          type: "warning"
          }).then(() => {
              ticket.end();
              localStorage.clear();
              window.location.href = window.location.origin;
          }).catch(() => {});
      
    } else {
      return response;
    }
  },
  error => {
    if(error.response){
        if (error.response.status == 401) {
          ElementUI.MessageBox.confirm("会话过期,请重新登录", "提示", {
            confirmButtonText: "确定",
            showCancelButton:false,
            type: "warning"
            }).then(() => {
                ticket.end();
                localStorage.clear();
                window.location.href = window.location.origin;
            }).catch(() => {});
         }
    }else{
      ElementUI.MessageBox.confirm("请求超时,请检查网络", "提示", {
        confirmButtonText: "确定",
        showCancelButton:false,
        type: "warning"
        }).then(() => {
            ticket.end();
            localStorage.clear();
            window.location.href = window.location.origin;
        }).catch(() => {});
    }
    
  }
);

export default service;

 

<think>我们正在开发一个基于微信的校园跑腿小程序,并计划使用VueElementUI构建后端控制面板。根据用户的需求和站内引用,我们将整合以下内容: ###开发背景校园跑腿小程序旨在解决学生在校园内的即时需求(如代取快递、代买餐食等),依托微信生态实现轻量化服务。移动互联网普及使微信小程序成为理想载体,无需下载安装,使用便捷且开发成本低[^1]。校园场景具有用户集中、需求高频的特点,市场潜力显著。 ###技术可行性分析根据引用[2][3][4],我们选择以下技术栈:- **后端框架**:Spring Boot(Java)提供稳定高效的API服务[^2][^3] -**前端小程序**:微信小程序原生框架(WXML/WXSS/JS) -**后台管理面板**:Vue.js +ElementUI(符合用户需求) -**数据库**:MySQL(关系型数据库,支持事务)- **部署**:Docker容器化部署(引用[2]中提到的SpringBoot+Vue方案) 技术可行性高,因为:1.Spring Boot和Vue.js都是成熟框架,社区支持丰富2.微信小程序开发文档完善,与后端API交互标准3.ElementUI提供丰富的后台管理组件,加速开发###经济可行性- **开发成本**:利用开源技术栈(Spring Boot/Vue/ElementUI),人力成本约$3$人月(后端$1.5$人月,前端$1.5$人月) -**运维成本**:云服务器(如腾讯云)月均$\leq300$元 +域名备案-**收益模式**:订单佣金($3\%-5\%$)、广告位、会员服务###操作可行性-**用户端**:微信授权登录,操作流程符合学生习惯-**跑腿员端**:接单、执行、交付三步操作- **管理后台**:Vue+ElementUI提供直观的数据看板和操作界面###需求分析####功能模块1. **用户模块**:微信登录、角色切换(学生/跑腿员)、个人信息管理2. **订单模块**:发布订单(物品描述、地点、酬劳)、订单状态管理(待接单→进行中→已完成)、订单评价3.**支付模块**:微信支付集成、佣金结算4. **通知模块**:模板消息推送、实时状态更新5. **后台管理**(Vue+ElementUI):-用户管理(学生/跑腿员列表)-订单监控(状态查看、异常订单处理)-数据统计(订单量、交易额图表)-系统配置(佣金比例、广告位管理) ####非功能需求-**性能**:订单查询响应$ \leq500\text{ms} $(数据库索引优化) -**安全**:HTTPS传输 +JWT令牌验证+敏感操作二次确认- **并发**:支持高峰$1000+$TPS(SpringBoot线程池优化+Redis缓存) ###模块流程图(核心业务) ```mermaidsequenceDiagramparticipant用户participant小程序participant后端(Spring Boot)participant数据库(MySQL)用户->>小程序:发布订单小程序->>后端:POST /api/order (JSON)后端->>数据库:写入订单(状态=0)后端-->>小程序:返回成功后端->>跑腿员: WebSocket推送跑腿员->>小程序:点击接单小程序->>后端: POST/api/order/accept后端->>数据库:更新状态=1后端-->>用户:通知“已接单” ```###数据库ER图```mermaiderDiagramUSERS||--o{ORDERS :"发布"USERS{intuser_idPKvarchar(50) openidenumrole "student,runner"varchar(20)phone}ORDERS||--o{PAYMENTS: "关联"ORDERS{int order_id PKvarchar(200)descriptiondecimal(8,2) rewarddatetime create_timeintstatus "0:待接单,1:进行中,2:已完成"int user_id FK}PAYMENTS{int payment_id PKdecimal(8,2)amountdatetimepay_timevarchar(32) transaction_idintorder_idFK}``` ###后端控制面板实现(Vue+ElementUI) ####技术框架|层级|技术方案|说明| |-------------|-------------------------|-----------------------------||前端框架|Vue3 +VueRouter|构建单页面应用|| UI组件库|Element Plus|提供丰富后台组件(表格/表单)||状态管理|Pinia|替代Vuex的轻量级方案|| HTTP客户端| Axios|调用SpringBoot API|####关键界面示例1.**登录页**:ElementUI表单组件(账号密码+验证码)2.**订单管理页**:-使用`<el-table>`展示订单数据-状态筛选:`<el-select>`按状态过滤-操作列:`<el-button>`用于查看详情/强制取消3.**数据看板**:-ECharts集成:折线图显示日订单量趋势-统计卡片:今日订单数、交易总额等####代码片段(Vue组件) ```vue<template><el-table :data="orders"style="width:100%"><el-table-columnprop="id" label="订单ID"width="100"/><el-table-columnprop="description"label="物品描述" /><el-table-column label="状态"><template#default="{ row}"><el-tag :type="statusTagType(row.status)">{{ statusText(row.status)}}</el-tag></template></el-table-column><el-table-columnlabel="操作"><template#default="{ row}"><el-button@click="showDetail(row)">详情</el-button></template></el-table-column></el-table></template> <scriptsetup> import{ ref} from'vue'; importaxios from'axios'; constorders =ref([]); //获取订单数据axios.get('/api/admin/orders').then(res =>{orders.value= res.data;});//状态标签样式conststatusTagType =(status) =>{return status===0 ?'warning' :status ===1? 'primary': 'success';}; </script>``` ###总结本方案采用Spring Boot+Vue+ElementUI技术栈,满足校园跑腿小程序及后台管理需求。微信小程序作为用户入口,Vue+ElementUI提供高效的管理后台,两者通过RESTfulAPI交互[^2][^3]。§§相关问题§§1.如何设计后台管理系统的权限控制(例如区分管理员和运营人员)? 2. Vue+ElementUI后台如何实现实时监控订单状态变化?3.校园跑腿小程序的后台管理系统有哪些关键性能指标需要监控?</think>### 校园跑腿微信小程序设计与开发指南(含Vue+ElementUI后台) #### 一、开发背景 校园跑腿小程序解决学生高频需求(代取快递、代买餐食等),依托微信生态实现轻量化服务。移动互联网普及使微信小程序成为理想载体,无需下载安装,使用便捷且开发成本低[^1]。后台管理系统采用Vue+ElementUI提供可视化数据管理能力。 #### 二、可行性分析 1. **技术可行性** - 小程序端:微信原生框架(WXML/WXSS) - 后台管理:Vue3 + Element Plus + Axios - 后端:Spring Boot 2.7(Java)[^2][^3] - 数据库:MySQL 8.0(事务支持) - 部署:Nginx反向代理 + Docker容器化 2. **经济可行性** - 开发成本:$3-4$人月(利用开源框架) - 运维成本:云服务器月均$ \leq $300元(2核4G配置) - 收益模型:订单佣金(3%-5%) + 广告位 + VIP会员服务 3. **操作可行性** - 用户端:微信授权一键登录 - 管理后台:ElementUI提供直观操作界面 - 响应式设计:适配PC/平板等管理设备 #### 三、需求分析 **核心功能模块**: ```mermaid graph TD A[用户端] --> A1(微信登录) A --> A2(发布订单) A --> A3(订单追踪) B[跑腿端] --> B1(抢单系统) B --> B2(路线导航) C[管理后台] --> C1(用户管理) C --> C2(订单监控) C --> C3(数据统计) C --> C4(佣金设置) ``` **非功能需求**: - 性能:后台列表加载$ \leq $1s(Vue虚拟滚动优化) - 安全:RBAC权限控制 + JWT令牌验证 - 可靠性:订单状态变更日志审计 #### 四、模块流程图 **后台管理核心流程**: ```mermaid sequenceDiagram participant 管理员 participant Vue前端 participant SpringBoot后端 participant MySQL 管理员->>Vue前端: 登录后台系统 Vue前端->>SpringBoot后端: POST /login (JSON) SpringBoot后端->>MySQL: 校验账号密码 MySQL-->>SpringBoot后端: 返回用户权限 SpringBoot后端-->>Vue前端: 返回JWT令牌 Vue前端->>管理员: 显示管理仪表盘 管理员->>Vue前端: 查询异常订单 Vue前端->>SpringBoot后端: GET /orders?status=exception SpringBoot后端->>MySQL: 执行复合查询 ``` **绘图提示词**: > "绘制泳道图:左侧纵向角色(管理员、Vue前端、SpringBoot、MySQL),横向流程:登录认证→数据查询→结果渲染,使用ElementUI组件图标表示界面元素" #### 五、数据库ER图 ```mermaid erDiagram USER ||--o{ ORDER : "发布" USER { bigint user_id PK varchar openid enum role "学生,跑腿员,管理员" datetime create_time } ORDER ||--|{ TASK_LOG : "状态变更" ORDER { bigint order_id PK varchar goods_desc decimal(10,2) reward enum status "0-待接单,1-进行中,2-已完成" bigint user_id FK } TASK_LOG { bigint log_id PK varchar operation "接单/送达/取消" datetime op_time bigint order_id FK } ``` **绘图提示词**: > "绘制ER图:矩形表示实体(用户、订单、日志),菱形表示关系。用户与订单1:N关系,订单与日志1:N关系,主键标注PK,外键标注FK" #### 六、技术框架实现 **后台管理系统技术栈**: | 层级 | 技术方案 | 优势说明 | |------------|--------------------------|---------------------------------| | **UI框架** | Vue3 + Element Plus | 丰富组件库(Table/Form/Chart) | | **状态管理**| Pinia | 轻量级状态管理 | | **路由** | Vue Router | 动态路由权限控制 | | **HTTP** | Axios + 拦截器 | 统一错误处理 | | **构建** | Vite | 急速热更新 | **关键代码示例(Vue+ElementUI)**: ```vue <template> <el-table :data="orderList" v-loading="loading"> <el-table-column prop="id" label="订单ID" width="100" /> <el-table-column label="状态"> <template #default="{ row }"> <el-tag :type="statusColor[row.status]"> {{ statusMap[row.status] }} </el-tag> </template> </el-table-column> <el-table-column label="操作"> <template #default="{ row }"> <el-button @click="showDetail(row)">详情</el-button> <el-button v-if="row.status===0" type="danger" @click="cancelOrder(row)">取消</el-button> </template> </el-table-column> </el-table> </template> <script setup> import { ref } from 'vue'; import axios from '@/api/request'; const orderList = ref([]); const loading = ref(true); // 获取订单数据 const fetchOrders = async () => { try { const res = await axios.get('/admin/orders'); orderList.value = res.data; } finally { loading.value = false; } }; // 状态映射配置 const statusMap = { 0: '待接单', 1: '进行中', 2: '已完成' }; const statusColor = { 0: 'warning', 1: 'primary', 2: 'success' }; </script> ``` #### 七、性能优化方案 1. **前端优化**: - 表格虚拟滚动:`<el-table-v2>` 处理万级数据 - 请求缓存:Pinia存储高频访问数据 - 懒加载:路由级组件动态导入 2. **后端优化**: - 热点数据缓存:Redis存储订单状态 - 查询优化:MySQL索引`(status, create_time)` - 分库分表:订单表按月份水平拆分 3. **安全措施**: - 接口防护:RBAC权限控制 - 敏感操作:二次密码确认 - 日志审计:记录关键操作 [^1]: 微信小程序设计—点餐系统开发步骤强调线性开发流程和阶段检验[^1] [^2]: SpringBoot+微信小程序方案在订单处理中展现稳定性[^2] [^3]: Vue+ElementUI后台管理系统提供高效的数据管理能力[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值