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

【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风格统一

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

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

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

http://www.xdnf.cn/news/6655.html

相关文章:

  • 子查询对多层join优化记录
  • 汉诺塔超算堆栈结构编码和流程详细设计(附源代码)
  • 什么是有向图 无向图 求图的邻接矩阵 软考
  • 搭建游戏云服务器的配置要求包括哪些条件?
  • S32DS使用JLINK编译调试问题点记录
  • Nginx常用命令
  • 在24GB显存大小的GPU上运行27GB的Pytorch模型
  • 基于 Java Socket 的多线程网络聊天程序
  • 依赖倒转原则:Java 架构设计的核心准则
  • 【数据机构】2. 线性表之“链表”
  • 如何使用 Solana Yellowstone gRPC 重新连接和重放插槽
  • Leetcode76覆盖最小子串
  • 软件架构风格系列(4):事件驱动架构
  • 【八股战神篇】Java高频基础面试题
  • C++ 中,using namespace std
  • 一款利用ADB (安卓调试桥)来控制手机的玩机工具
  • Java基础(反射)
  • MySQL——3、数据类型
  • AI:初识NLP
  • Java基础学习
  • NAR项目文章 | 真菌染色质重塑因子通过调控tRNA转录来调节蛋白翻译
  • 《Cryptical Path》开发诀窍:像玩游戏一样开发一款类Rogue游戏
  • shiro 反序列化攻防
  • 【C语言字符函数和字符串函数(一)】--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现
  • AI数字人+展厅,定义未来展示空间的新模式
  • 如何选择PCB快速打样生产厂家?
  • UWB定位方案在水力发电站人员安全的应用推荐
  • C语言实现简单的—栈
  • 【漫话机器学习系列】261.工具变量(Instrumental Variables)
  • 从验证码绕过到信息轰炸:全面剖析安全隐患与防范策略