• Avue使用本地/网络数据字典


    当我们在项目中使用 avue 表格展示 选择器内容时,就需要使用数据字典

    本地字典

    比如我们使用一个前端写死的字典

    1. // html
    2. ref="crud"
    3. :data="studentList"
    4. :option="option"
    5. :page.sync="page"
    6. >
    7. // js
    8. option: {
    9. column: [
    10. {
    11. dicData: [{ label:'zs',value:0 }],
    12. }
    13. ]
    14. }

    没错就是这么简单,但是一般情况我们需要使用可以通过系统维护的字典,比如若依就是一个很好的例子,若依在项目启动时,已经将我们可能使用到的所以字典,都存放到了vuex中,我们可以直接通过vuex调用字典值

    this.$store.state.dict.dictTree

    这个 dictTree 中存放着系统所有的字典,我们也可以看一下他的源码

    1. getListAll().then(res => {
    2. // 获取所有信息
    3. console.log(res)
    4. if (res.code === 200) {
    5. const dictTree = {};
    6. res.data.forEach(i => {
    7. dictTree[i.dictType] = {}
    8. const obj = {};
    9. const arr = [];
    10. i.dictDataList.map(childDict => {
    11. obj[childDict.dictValue] = childDict.dictLabel
    12. arr.push({
    13. value:JSON.stringify(parseInt(childDict.dictValue))=='null'? childDict.dictValue:parseInt(childDict.dictValue),
    14. label: childDict.dictLabel
    15. })
    16. });
    17. dictTree[i.dictType] = {
    18. dictName: i.dictType,
    19. dictType: i.dictName,
    20. obj,
    21. arr
    22. }
    23. });
    24. commit('SET_DICT_TREE', dictTree)
    25. }
    26. })

    其实也很简单,首先在系统中按照规范添加字典,在请求所有的字典后,遍历一次,通过 dictTree[i.dictType] = {} 规整好数据,其中包括了,obj格式和arr格式,完全满足我们的使用需求,由于他存在了vuex中其实就是一个一个的变量,我们使用时也是使用 dicData

    1. type: 'select',
    2. dicData: this.$store.state.dict.dictTree['字典名称']['arr'],

    props

    首先是一些公共的参数比如配置字典的显示值 label 和绑定值 value

    1. props: {
    2. label: 'name',
    3. value: 'code'
    4. },

    默认是就是 label:label 和 value:value ,通常我们使用网络字典是需要自己配置一下这个参数

    网络字典

    有的使用我们需要通过接口去请求某些字典不能满足的数据

    1. dicUrl: 'xxxxxxxxxx请求地址'
    2. dicMethod:'post',
    3. dicQuery:{
    4. type: 2
    5. }

    dicUrl 也是可以使用代理的比如

    dicUrl: `${process.env.VUE_APP_BASE_API}/getDic`

    process.env.VUE_APP_BASE_API为前缀 ‘/api’

    但是这样请求可能会有一个问题,就使我们无法配置请求头,有一些限制,比如接口 401 问题,没有办法携带token。

    直接请求字典

    这时我们需要直接去请求数据,然后修改字典变量

    1. option: {
    2. column: [
    3. {
    4. dicData: [],
    5. }
    6. ]
    7. }

    定义好 option,去请求数据通过下标去访问 dicData 并修改值

    1. created() {
    2. this.getDicData()
    3. },
    4. methods: {
    5. getDicData() {
    6. listRoles({ roleId: 2 }).then(res => {
    7. if (res.code === 200) {
    8. this.option.column[0].dicData.push(...res.rows)
    9. }
    10. })
    11. }
    12. }

    不能是用 = 直接赋值,页面是不会更新的,我们需要让vue知道我们已经修改了值,在这里我使用了(...)扩展运算符进行了一次深拷贝

  • 相关阅读:
    FileZilla软件的下载、服务器站点配置与数据传输方法
    从电影《沙丘》说起——对人工智能的思考
    VMware Workstation中桥接模式、NAT模式、仅主机模式
    安装JDK(不同环境下都有)
    【云原生-白皮书】简章2:深入理解DevOps+微服务
    Flutter ☞ 数据类型
    基于 PostgreSQL 构建 AI 电商产品图片相似度搜索方案
    【送面试题】深入理解Netty与NIO:原理与关键组件解析
    PostgreSQL中插件如何新增一个配置项
    微信小程序之首页-后台交互及WXS的使用
  • 原文地址:https://blog.csdn.net/paidaboluo/article/details/126490623