# 字典包配置

目录结构这篇文章中字典配置文件涉及到字典配置,此篇文章详细介绍可配置项。

# 配置文档说明

字段 类型 说明 默认值
getDictCodeApi promise 必传,获取字典数据接口
verssion String 必传 ,最新字典数据的版本号
elementUI element对象 选传,传当前项目使用的element对象,避免element版本不一致,导致功能或样式问题 默认element-ui@2.15.6版本
query String 获取字典数据接口传参的 key字段名 type
usuallyGetFileds String 字符串,多个的话,英文逗号隔开,经常需要用到的字段,子项目非常适用此字段配置 ""
verssionKey String 存入浏览器缓存的当前版本号key字段名 currentVerssion
dictDataKey String 存入浏览器缓存的字典数据key字段名 dictCodeList
format Object 接口返回的数据的value和label字段名,value和label的 key不能改 如有配置value与label必须同时传(即使有一个与默认值一致) {value: "value", label: "label"}
formatterRequest function 对入参进行数据格式转化,将我们规定的格式,转化为后端人员接口期望传的参数 默认格式 (query, data)=> {if(!data) {return {[query]:""}return [query]:""}}
formatterDictList function 处理接口返回的数据,将返回数据处理成包期望的字典数据 data为接口返回的数据
V3.0.3版本开始新增可配置参数query,query为该字典类型type的值,兼容当接口仅支持单个查询且返回数据无对应字典类型时 可配置使用
(data, query)=> {return data.data.dictCodeList}
formatterDictVerssion function 处理接口返回的数据,返回包期望的版本号 data为接口返回的数据 (data)=> {return data.data.verssion}
storage window的对象 localStorage/ sessionStorage 浏览器缓存位置的配置 localStorage
isGetAll Boolean 是否获取全部字典值 false
localDictCodes Object 本地项目写死的字典数据 {}
getDictEveryTime Boolean 是否每次进入页面都加载请求字典 false
filterDataFun Function 组件过滤数据方法函数 接收该字典类型的数据 默认不变 (list) => { return list }
disabledDataFun Function 组件禁用数据方法函数 接收该字典类型的数据 默认不变 (list) => { return list }
treeSetting Object 数组转树形数据需要的配置 详见treesetting配置

::: tips

formatterRequest接收两个参数,第一个是 query,默认值为type,第二个是字典类型,多个时默认英文逗号隔开。此配置的目的就是将我们默认的传参格式,转化为后端接口想要的格式。

formatterDictList接收一个参数data,这个的值就是请求字典接口返回的最外层的数据,将后端返回的数据转化为我们包想要的格式,然后return回来即可。

V3.0.3版本开始 formatterDictList接收两个参数,第一个是data,第二个是query,data就是请求字典接口返回的最外层的数据,query就是请求的字典类型,将后端返回的数据转化为我们包想要的格式,然后return回来即可。

:::

// V3.0.3版本开始 支持接口只能请求一个字典类型时 的配置
import { getDicts } from "@/api/system/dict/data"
import localDictCodes from "@/assets/data/dict"
import elementUI from "element-ui"
export default {
  getDictCodeApi: getDicts, //必传 获取字典数据接口
  localDictCodes, //选填 项目写死的字典数据
  elementUI: elementUI,
  // 格式化请求参数,query为 配置项query的值, data为 请求传入的参数,也就是字典类型,多个字典时用英文逗号隔开
  formatterRequest: (query, data) => {
    return data
  },
  format: {
    value: "dictValue", label: "dictLabel"
  },
  formatterDictList: (data, query) => {
    return {
      [query]: data.data
    };
  },
  version: "0.0.1",
  // 项目无法实时返回版本时  返回和配置一样的版本号,避免版本号不一致 缓存被删除
  formatterDictVerssion: () => {
    return "0.0.1"
  }
}

# treesetting配置

字段名 说明 默认值
idField id字段名,唯一标识 id
parentIdField 父节点字段名,父节点字段标识 parentId
childrenField 数组转树形数据后子节点字段名 children
firstId 根节点数据值,默认字符串 0 “0”
labelField 展示值字段名 label
labelArrField 树形数据数组字段名(如["福建省","漳州市","诏安县"]) labelArr
idArrField 树形数据数组字段名(如["350000","350600","350624"]) idArr
levelField 层级字段名,展示层级 level
level 配置第一级为第几级 1
leafField 叶子节点字段名 leaf

# 常见问题

  1. 后端无返回版本号时怎么办。

    /* 
    答:当后端无返回版本号时,可将版本号写死固定,如0.0.1,且使用formatterDictVerssion格式化返回版本号数据写死 0.0.1(必须和前面一致)。
    
    具体使用方法 如下:
    */
    
    //  src/api/modules/common-api.js
    //获取全局配置  包含版本号
    export function getGlobalConfigApi() {
      return new Promise((resolve, reject) => {
        resolve({verssion: "0.0.1"})
      })
    }
    
    // src/dict-setting.js 文件
    import {getDictCodeApi} from "@/api/module/common-api.js"
    import localDictCodes from "@/assets/data/dict.js"
    export default {
        getDictCodeApi, //必传 获取字典数据接口
        localDictCodes, //选填 项目写死的字典数据
        formatterDictVerssion: (data) => {
            //data为 经过 axios 响应处理后返回的 第一级数据
            return "0.0.1"
        }
    }
    
    //以上操作即可解决后端接口无返回版本号问题,实现方法很多,以上方法为遵循文档推荐代码的解决方式
    
  2. 后端字典接口正常请求,但是返回数据与文档要求格式不一致怎么办?

    /*
    答:此包拥有诸多配置,面对后端人员不配合修改接口返回格式时,部门字典包无能为力。此包就针对这个问题,实现对接口返回数据进行操作。让各种各样的接口数据经过您优秀的数据操作,都能适配此字典包。
    
    具体如下:
    */
    
    // src/dict-setting.js 文件
    import {getDictCodeApi} from "@/api/module/common-api.js"
    import localDictCodes from "@/assets/data/dict.js"
    export default {
        getDictCodeApi, //必传 获取字典数据接口
        localDictCodes, //选填 项目写死的字典数据
        formatterDictList: (data) => {
            //data为 经过 axios 响应处理后返回的 第一级数据
            const dictCodeList = 一系列操作后 .....
            return dictCodeList
        }
    }
    
  3. 后端请求格式与字典包要求的不一致怎么办?

    /*
    答:此包拥有诸多配置,面对后端人员不愿意修改请求参数来适配字典包,部门字典包无能为力。此包就针对这个问题,实现对请求参数数据进行操作。让请求参数能适配此字典包。
    
    具体如下:
    */
    
    // src/dict-setting.js 文件
    import {getDictCodeApi} from "@/api/module/common-api.js"
    import localDictCodes from "@/assets/data/dict.js"
    export default {
        getDictCodeApi, //必传 获取字典数据接口
        localDictCodes, //选填 项目写死的字典数据
        formatterRequest: (query, data) => {
            //query 为字典类型参数   如  type: "AAC004" 中的type
            //data  为字典类型数据   如  type: "AAC004" 中的AAC004
            const req = 一系列操作后 .....
            return req
        }
    }
    
  4. 此字典组件使用后会调用多次接口且每个接口只请求一个字典类型的数据,能让他们在同个接口请求?

    /*
    答:针对这个问题,此包已经有预判到了,所以有个usuallyGetFileds配置项,用来配置经常请求的字典类型,这种情况下,这些字典数据就会在同个接口请求。当然如果在整个项目上或多或少 会有部分字典数据 不在usuallyGetFileds范畴内。不过此字段已经大大的解决了您的问题。
    如果是项目是供iframe作为单个功能页使用,可将页面上所有使用到的字典数据配置起来就能完全达到您的要求。
    */
    
  5. 后端接口返回数据格式一致,但是字段名不一致,我该如何处理?

    /*
    答:format配置项可以解决您的问题。
    具体如下
    */
    
    // src/dict-setting.js 文件
    import {getDictCodeApi} from "@/api/module/common-api.js"
    import localDictCodes from "@/assets/data/dict.js"
    export default {
        getDictCodeApi, //必传 获取字典数据接口
        localDictCodes, //选填 项目写死的字典数据
        format: {value: "后端返回的value", label: "后端返回的label"}
    }
    
    
上次更新: 1/7/2023, 11:28:07 AM