Vue字典配置_全局字典数据获取、快速转义
Vue.js使用VueEasyDict统一管理静态、接口字典数据,支持快速转义、原始匹配对象获取
# 一、需求说明
在很多的数据列表中,经常有些字典后端会一个特定的数值或字符串,让你通过某个接口去获取数据,进行转义。
如现在有一个数据列表,要显示字段**姓名、部门名称、状态文本**,而后端的接口只返回了**姓名、部门ID,状态值**。
**后端返回数据格式**
```json
[
{
name: "张三",
deptId: 1,
status: 0
},
{
name: "李四",
deptId: 2,
status: 1
}
]
```
其中部门名称需要通过部门列表接口获取部门列表数据,再从部门列表中找到与部门ID匹配的部门名称
**部门列表数据**
```json
[
{
id: 1,
name: "信息部"
},
{
id: 2,
name: "人力资源部"
}
]
```
状态文本需要通过状态结果字典进行翻译。
**状态结果字典**
```json
[
{
label: "启用",
value: 0
},
{
label: "禁用",
value: 1
}
]
```
# 二、解决方案
1. 安装字典管理插件
```
npm i vue-easy-dict@1.2.0 --save
```
2. 在项目src文件加内建立字典配置文件(如:src/dict/index.js),内容如下:
```js
import Vue from 'vue'
import VueEasyDict from 'vue-easy-dict'
import { selectDict } from '@/api/dict'
import { getDeptList } from '@/api/dept'
Vue.use(VueEasyDict, {
types: [
{
dictKey: 'status',
data: [
{ label: '启用', value: 0, color: 'green' },
{ label: '禁用', value: 1, color: 'red' }
]
},
{
dictKey: 'dept',
data() {
return new Promise((resolve) => {
getDeptList().then(res => {
resolve(res.data)
})
})
},
labelField: 'name',
valueField: 'id'
},
{ // 未配置data的字典配置,将通过外层的defaultData获取
dictKey: 'sex'
}
],
// 如果某个字典配置未配置data,则会使用当前方法获取数据
defaultData(dictKey) {
return new Promise((resolve) => {
selectDict({dictKey}).then(res => {
resolve(res.data)
})
})
},
})
```
3. 在项目main.js中导入字典配置文件
```js
import Vue from 'vue'
import App from './App.vue'
import './dict' // 导入字典配置文件
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')
```
4. 列表页面使用字典
```vue
<template>
<div>
<div class="item" v-for="(item, index) in list" :key="index">
<div>姓名:{{ item.name }}</div>
<div>部门:{{ item.deptName }}</div>
<div :style="{color: item.statusColor}">状态:{{ item.statusStr }}</div>
</div>
</div>
</template>
<script>
import { getUserList } from '@/api/user'
export default {
data() {
return {
list: []
}
},
async mounted() {
await this.$dict.loadType('dept') // 等待部门数据加载到字典
this.getList()
},
methods: {
async getList() {
let res = getUserList({})
// 解析并转义字典数据赋值
this.list = await res.data.map(item => {
let statusRaw = this.$dict.selectDictRaw("status", item.status) // 获取状态对应字典原始对象
return {
...item,
statusStr: statusRaw.label,
statusColor: statusRaw.color,
deptName: this.$dict.selectDictLabel("dept", item.deptId) // 翻译字典值
}
})
}
}
}
</script>
<style scoped>
.item {
margin-bottom: 20px;
}
</style>
```
效果展示:
更多使用说明查看插件npm主页(https://www.npmjs.com/package/vue-easy-dict)
更多推荐
所有评论(0)