前言

在使用若依框架开发小项目的时候,发现在项目中频繁使用到字典,原本代码中的dicts没有深入研究,故自己写了一个混入来实现想要的字典获取功能。但是觉得每次切换页面都需要调用一下,而且每个系统都有一个mixins混入文件,感觉维护起来稍显繁琐。继而研究了一下dicts的用法,记录一下使用过程。

1.首先确定字典的接口,在若依框架中如下,具体可根据自己后端提供的字典接口进行修改

// 根据字典类型查询字典数据信息
export function getDicts(dictType) {
  return request({
    url: '/system/dict/data/type/' + dictType,
    method: 'get'
  })
}

此段代码在公共的api目录下

2.在公共的方法文件中提供一个方法

目录在 /src/utils/dict/DictData.js

/**
 * @classdesc 字典数据
 * @property {String} label 标签
 * @property {*} value 标签
 * @property {Object} raw 原始数据
 */
export default class DictData {
  constructor(label, value, raw) {
    this.label = label
    this.value = value
    this.raw = raw
  }
}

3.在组件库中添加该组件

目录/src/components/DictData/index.js

import Vue from 'vue'
import DataDict from '@/utils/dict'
import { getDicts as getDicts } from '@/api/system/dict/data'

function install() {
  Vue.use(DataDict, {
    metas: {
      '*': {
        labelField: 'dictLabel',
        valueField: 'dictValue',
        request(dictMeta) {
          return getDicts(dictMeta.type).then(res => res.data)
        },
      },
    },
  })
}

export default {
  install,
}

4.挂载

在main.js中

// 字典数据组件
import DictData from '@/components/DictData'
DictData.install()

5.使用

export default {
  name: "xxx",
  dicts: ['dict_xxx'],
 }

该字典在使用中作为select下拉内容,则使用dict.type.dict_xxx 作为调用。具体为嘛加上这个前缀还未弄清楚,待研究。

Logo

快速构建 Web 应用程序

更多推荐