当前位置: 首页 > article >正文

【vue】封装接口,全局字典,表格表头及使用

一、封装接口(API请求)

1. 创建axios实例
// src/utils/request.js
import axios from 'axios'const service = axios.create({baseURL: process.env.VUE_APP_BASE_API,timeout: 10000
})// 请求拦截器
service.interceptors.request.use(config => {config.headers['Authorization'] = getToken()return config
})// 响应拦截器
service.interceptors.response.use(response => response.data,error => {if (error.response.status === 401) {// 处理未授权}return Promise.reject(error)}
)export default service
2. 模块化接口管理
// src/api/user.js
import request from '@/utils/request'export function getUserList(params) {return request.get('/users', { params })
}export function updateUser(data) {return request.post('/users/update', data)
}
3. 组件中使用
import { getUserList } from '@/api/user'export default {methods: {async fetchData() {try {const res = await getUserList({ page: 1 })this.list = res.data} catch (err) {console.error(err)}}}
}

二、封装全局字典

1. 字典定义文件
// src/utils/dict.js
export const DICT = {status: [{ value: 1, label: '启用' },{ value: 0, label: '禁用' }],gender: [{ value: 1, label: '男' },{ value: 2, label: '女' }]
}// 字典转换方法
export const formatDict = (value, dictType) => {const target = DICT[dictType].find(item => item.value === value)return target ? target.label : '未知'
}
2. 全局注入字典
// main.js
import { DICT, formatDict } from '@/utils/dict'Vue.prototype.$dict = DICT
Vue.prototype.$formatDict = formatDict
3. 组件中使用
<template><div><!-- 直接访问字典 --><el-select v-model="status"><el-option v-for="item in $dict.status":key="item.value":label="item.label":value="item.value"/></el-select><!-- 格式化显示 --><span>{{ $formatDict(userStatus, 'status') }}</span></div>
</template>

三、封装通用表格表头

1. 创建可配置表格组件
<!-- src/components/CommonTable.vue -->
<template><el-table :data="tableData"><el-table-column v-for="col in columns":key="col.prop":prop="col.prop":label="col.label":width="col.width":sortable="col.sortable || false"><template v-slot="{ row }"><!-- 自定义格式化 --><template v-if="col.formatter">{{ col.formatter(row[col.prop]) }}</template><!-- 自定义插槽 --><slot v-else-if="col.slotName" :name="col.slotName" :row="row"/><!-- 默认显示 --><span v-else>{{ row[col.prop] }}</span></template></el-table-column></el-table>
</template><script>
export default {props: {columns: {type: Array,required: true},tableData: {type: Array,default: () => []}}
}
</script>
2. 使用配置式表头
// 在组件中定义表头配置
const columns = [{prop: 'name',label: '姓名',width: 120},{prop: 'status',label: '状态',formatter: value => this.$formatDict(value, 'status')},{prop: 'action',label: '操作',slotName: 'action' // 使用插槽自定义内容}
]
3. 父组件中使用
<template><CommonTable :columns="columns" :table-data="list"><!-- 自定义操作列 --><template #action="{ row }"><el-button @click="edit(row)">编辑</el-button></template></CommonTable>
</template><script>
import CommonTable from '@/components/CommonTable'export default {components: { CommonTable },data() {return {columns: [...],list: [...]}}
}
</script>

四、优势总结

  1. 接口封装

    • 统一错误处理
    • 集中管理API端点
    • 自动携带Token等通用配置
  2. 全局字典

    • 避免重复定义常量
    • 实现数据与显示的分离
    • 支持快速维护更新
  3. 通用表格

    • 减少重复列定义代码
    • 支持灵活配置和扩展
    • 保持UI风格统一

通过以上封装,可以显著提升开发效率和代码质量,特别适用于中后台管理系统等需要大量表格和字典的场景。

本文内容尚不完善,友友们还有啥需要封装可以留言

码字不易,各位大佬点点赞呗

相关文章:

【vue】封装接口,全局字典,表格表头及使用

一、封装接口&#xff08;API请求&#xff09; 1. 创建axios实例 // src/utils/request.js import axios from axiosconst service axios.create({baseURL: process.env.VUE_APP_BASE_API,timeout: 10000 })// 请求拦截器 service.interceptors.request.use(config > {co…...

深入解析ZAB协议:ZooKeeper的分布式一致性核心

引言 在分布式系统中&#xff0c;如何高效、可靠地实现多节点间的数据一致性是核心挑战之一。ZAB协议&#xff08;ZooKeeper Atomic Broadcast&#xff09;作为 ZooKeeper的核心算法&#xff0c;被广泛应用于分布式协调服务&#xff08;如Kafka、HBase、Dubbo等&#xff09;。…...

COMSOL随机参数化表面流体流动模拟

基于粗糙度表面的裂隙流研究对于理解地下水的流动、污染物传输以及与之相关的地质灾害&#xff08;如滑坡&#xff09;等方面具有重要意义。本研究通过蒙特卡洛方法生成随机表面形貌&#xff0c;并利用COMSOL Multiphysics对随机参数化表面的微尺度流体流动进行模拟。 参数化…...

大模型笔记-“训练”和“推理”概念

在大模型&#xff08;如Transformer类模型、LLM&#xff09;的资源管理和开发流程中&#xff0c;“训练”和“推理”是两个核心概念&#xff0c;分别对应模型的构建和实际应用阶段&#xff1a; 训练是模型的“学习过程”&#xff0c;需要大量资源和时间。推理是模型的“应用过…...

JavaSwing中的容器之--JScrollPane

JavaSwing中的容器之–JScrollPane 在Java Swing中&#xff0c;容器是用于容纳其他组件&#xff08;如按钮、标签等&#xff09;的组件。Swing提供了多种容器&#xff0c;它们可以嵌套使用以创建复杂的用户界面。 JScrollPane是一个轻量级组件&#xff0c;提供可滚动视图。JSc…...

使用 Cookie 实现认证跳转功能

使用 Cookie 实现认证跳转功能的实践与解析 在 Web 开发中&#xff0c;用户身份认证是一个基础而关键的功能点。本文将通过一个简单的前后端示例系统&#xff0c;介绍如何基于 Cookie 实现 Token 保存与自动跳转认证的功能&#xff0c;并结合 Cookie 与 Header 的区别、使用场…...

Reth(冗余以太网接口) 和Bridge-Aggregation(链路聚合接口)区别

Reth&#xff08;Redundant Ethernet&#xff09;与Bridge-Aggregation是H3C设备中两种不同的接口技术&#xff0c;主要区别体现在工作原理、应用场景及配置特性上。以下是详细对比分析&#xff1a; 定义与类型 Reth&#xff08;冗余以太网接口&#xff09; 类型&#xff1a;…...

(面试)Android各版本新特性

Android 6.0 (Marshmallow, API 23) 运行时权限管理&#xff1a;用户可在应用运行时动态授予或拒绝权限&#xff0c;取代安装时统一授权4。Doze模式与应用待机&#xff1a;优化后台耗电&#xff0c;延长设备续航5。指纹识别支持&#xff1a;原生API支持指纹身份验证。 Android…...

算法基础 -- 小根堆构建的两种方式:上浮法与下沉法

小根堆构建的两种方式&#xff1a;上浮法与下沉法 在构建小根堆&#xff08;Min-Heap&#xff09;时&#xff0c;通常有两种常见的构建方式&#xff1a; 上浮建堆&#xff08;逐个插入&#xff0c;上浮调整&#xff09;下沉建堆&#xff08;Heapify 自底向上&#xff0c;下沉…...

LED接口设计

一个LED灯有3种控制状态&#xff0c;常亮、常灭和闪烁&#xff0c;要做到这种控制最简单的一种方法是使用任何一款处理器的普通IO去控制。 用IO控制方式有两种&#xff0c;一种是高有效&#xff0c;如下图1所示IO口为高电平时LED亮&#xff0c;IO为低电平时LED不亮。IO口出一个…...

西安前端面试

面试1 1.vue2和vue3的原理及区别 2.伪数组 3.对箭头函数怎么理解的 4.vue父子组件传值的几种方式 5.对Promise的理解 面试2 1.两个升序数组实现合并升序排序 2.数组拍平[3, [[7, [1, 5]], 4], 8, [6]] 面试3 1.let var const的区别&#xff0c;什么时候const能改变 …...

SpringBoot项目使用POI-TL动态生成Word文档

近期项目工作需要动态生成Word文档的需求&#xff0c;特意调研了动态生成Word的技术方案。主要有以下两种&#xff1a; 第一种是FreeMarker模板来进行填充&#xff1b;第二种是POI-TL技术使用Word模板来进行填充&#xff1b; 以下是关于POI-TL的官方介绍 重点关注&#xff1…...

java高效实现爬虫

一、前言 在Web爬虫技术中&#xff0c;Selenium作为一款强大的浏览器自动化工具&#xff0c;能够模拟真实用户操作&#xff0c;有效应对JavaScript渲染、Ajax加载等复杂场景。而集成代理服务则能够解决IP限制、地域访问限制等问题。本文将详细介绍如何利用JavaSelenium快代理实…...

YOLOv3深度解析:多尺度特征融合与实时检测的里程碑

一、YOLOv3的诞生&#xff1a;继承与突破的起点 YOLOv3作为YOLO系列的第三代算法&#xff0c;于2018年由Joseph Redmon等人提出。它在YOLOv2的基础上&#xff0c;针对小目标检测精度低、多类别标签预测受限等问题进行了系统性改进。通过引入多尺度特征图检测、残差网络架构和独…...

uniapp-商城-60-后台 新增商品(属性的选中和页面显示)

前面添加了属性&#xff0c;添加属性的子级项目。也分析了如何回显&#xff0c;但是在添加新的商品的时&#xff0c;我们也同样需要进行选择&#xff0c;还要能正常的显示在界面上。下面对页面的显示进行分析。 1、界面情况回顾 属性显示其实是个一嵌套的数据显示。 2、选中的…...

虹科技术 | 简化汽车零部件测试:LIN/CAN总线设备的按键触发功能实现

汽车零部件测试领域对操作的便捷性要求越来越高&#xff0c;虹科Baby-LIN-RC系列产品为这一需求提供了完美的解决方案。从基础的按键设置到高级的Shift键应用&#xff0c;本文将一步步引导您了解虹科Baby-LIN-RC系列产品的智能控制之道。 虹科Baby-LIN-3-RC 想象一下&#xff0…...

单片机ESP32天气日历闹铃语音播报

自制Arduino Esp32 单片机 可以整点语音播报&#xff0c;闹铃语音播报&#xff0c;农历显示&#xff0c;白天晚上天气&#xff0c;硬件有 Esp32&#xff0c;ST7789显示屏&#xff0c;Max98357 喇叭驱动&#xff0c;小喇叭一枚。有需要源码的私信我。#单片机 #闹钟 #嵌入式 #智能…...

如何解决LCMS 液质联用液相进样器定量环漏液问题

以下是解决安捷伦1260液相色谱仪为例的进样器定量环漏液问题的一些方法&#xff1a;视频操作 检查相关部件 检查定量环本身&#xff1a;观察定量环是否有破损、裂纹或变形等情况。如果发现定量环损坏&#xff0c;需及时更换。检查密封垫&#xff1a;查看进样阀的转子密封垫、计…...

服务器内部可以访问外部网络,docker内部无法访问外部网络,只能docker内部访问

要通过 iptables 将容器中的特定端口请求转发到特定服务器&#xff0c;你需要设置 DNAT&#xff08;目标地址转换&#xff09;规则。以下是详细步骤&#xff1a; 假设场景 容器端口: 8080&#xff08;容器内服务监听的端口&#xff09;目标服务器: 192.168.1.100&#xff08;请…...

机器学习中的特征工程:解锁模型性能的关键

在机器学习领域&#xff0c;模型的性能往往取决于数据的质量和特征的有效性。尽管深度学习模型在某些任务中能够自动提取特征&#xff0c;但在大多数传统机器学习任务中&#xff0c;特征工程仍然是提升模型性能的关键环节。本文将深入探讨特征工程的重要性、常用方法以及在实际…...

JAVA:Spring Boot 集成 RDF4J 实现欺诈检测的技术指南

1、简述 在大数据、知识图谱和金融风控等领域,RDF(Resource Description Framework) 是一种用于表示和查询关联数据的强大工具。RDF4J 是一个流行的 Java 库,用于操作 RDF 数据集,并支持 SPARQL 查询,能够帮助我们进行复杂的欺诈检测。 项目的核心功能: RDF 数据存储:…...

spring boot 注解

spring boot 注解 spring 会把被注解Controller、Service、Repository、Component 标注的类 纳入Spring容器中进行管理。 第7章会讲解 IoC 容器。 Controller。 它用于标注控制器层&#xff0c;在MVC 开发模式中代表C&#xff08;控制器)。 Model View Controller Controlle…...

Spring框架的事务管理

配置文件的方式 <!--第二种写法:使用提供标签的方式--> <context:property-placeholder location"classpath:jd.properties"/><!--加载属性的文件&#xff08;使用开源连接池&#xff09;--> <bean id"dataSource" class"com.a…...

Spring MVC 中请求处理流程及核心组件解析

在 Spring MVC 中&#xff0c;请求从客户端发送到服务器后&#xff0c;需要经过一系列组件的处理才能最终到达具体的 Controller 方法。这个过程涉及多个核心组件和复杂的映射机制&#xff0c;下面详细解析其工作流程&#xff1a; 1. 核心组件与请求流程 Spring MVC 的请求处…...

PCIe Switch 问题点

系列文章目录 文章目录 系列文章目录完善PCIe Retimer Overview Document OutlineSwitch 维度BroadComMicroChipAsmedia 祥硕Cyan其他 完善 Functional block diagram&#xff0c;功能框图Key Features and Benefits&#xff0c;主要功能和优点Fabric 链路Multi-root PCIe Re…...

开源轻量级地图解决方案leaflet

Leaflet 地图&#xff1a;开源轻量级地图解决方案 Leaflet 是一个开源的 JavaScript 库&#xff0c;用于在网页中嵌入交互式地图。它以轻量级、灵活性和易用性著称&#xff0c;适用于需要快速集成地图功能的项目。以下是关于 Leaflet 的详细介绍和使用指南。 1. Leaflet 的核心…...

Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件

目录 1. 创建Flutter项目 1.1使用Android Studio创建Flutter项目 1.2 使用命令行创建Flutter项目 2. Flutter项目介绍 2.1所有代码都在lib目录下编写 2.1 pubspec.yaml 依赖库/图片的引用 ​编辑 3. 运行项目 4. 编写mian.dart文件 4.1 使用MaterialApp 和 Scaffold两个组件…...

如何实现金蝶云星空到MySQL的数据高效集成

金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化建设中&#xff0c;数据的高效流动和准确处理是关键。本文将聚焦于一个具体的系统对接集成案例&#xff1a;金蝶云星空的数据集成到MySQL&#xff0c;方案名称为“xsck-2金蝶销售出库-->mysql”。通过这一案例&#x…...

Web性能优化的未来:边缘计算、AI与新型渲染架构

一、边缘计算与性能优化深度整合 1.1 边缘节点计算卸载策略 • 智能任务分割:将非关键路径计算卸载到边缘节点 // 客户端代码 const edgeTask = new EdgeTask(image-processing); edgeTask.postMessage(imageData, {transfer...

院校机试刷题第四天:1911反转公约数、1702十六进制不进位加法

一、1911反转公约数 1.题目描述 2.解题思路 两个关键点&#xff1a;1.如何把数字反转&#xff0c;2.如何求最大公约数。 反转&#xff1a;用字符串形式存储&#xff0c;定义一个新的字符串倒序存储反转之后的字符串&#xff0c;将字符串按位转换位数字。 求最大公约数&…...