Vuex全局码表mixins配置

简介: Vuex全局码表mixins配置

dicts.js mixins文件

//src\store\modules\dicts.js

import { getDictParamTableBatch } from '@/api/common/index'
import store from '@/store'
import Vue from 'vue'
class Dict {
  constructor(dict) {
    this.dict = dict
  }

  async init(names) {
    const ps = []
    const hash = {}
    names.forEach((name) => {
      if (store.getters.dicts[name]) {
        Vue.set(this.dict, name, store.getters.dicts[name])
      } else {
        Vue.set(this.dict, name, [])
        hash[name] = name
      }
    })
    const dictCodeList = Object.keys(hash).map(v => hash[v])
    ps.push(
      getDictParamTableBatch({ dictCodeList }).then((res) => {
        res.data.forEach(item => {
          this.dict[item.dictCode] = Object.freeze(item.dictParamTables)
          store.commit('dicts/SET_DICTS', {
            label: item.dictCode,
            value: Object.freeze(item.dictParamTables)
          })
        })
      })
    )
    await Promise.all(ps)
  }
}

const install = function(Vue) {
  Vue.mixin({
    data() {
      if (
        this.$options.dicts instanceof Array &&
                this.$options.dicts.length > 0
      ) {
        return { dict: {}}
      } else {
        return {}
      }
    },
    created() {
      if (
        this.$options.dicts instanceof Array &&
                this.$options.dicts.length > 0
      ) {
        new Dict(this.dict).init(this.$options.dicts)
      }
    }
  })
}

export default { install }

在main.js里面注册mixins

// 全局字典
import dict from '@/mixins/dicts.js'
Vue.use(dict)

getters里面定义

  dicts: state => state.dicts.dicts

页面中使用

  computed: {
    ...mapGetters(['dicts'])
  },
  dicts: ['bab005', 'bab007'],
  watch: {
    dict(v) {
      console.log(v)// 建议使用
    }
  },
  async mounted() {
    // 取值 this.dict['bab005'] 就能取到该字典
    const timer = setTimeout(() => { // 不推荐使用。网络差时会出现问题
      clearTimeout(timer)
      console.log(this.dict['bab005'])
    }, 1500)
  },
  methods: {
    // 详情
    detailClick() {
      this.isVisible = true
    },
    codeClick() {
      // 取值 this.dict['bab005'] 就能取到
      console.log(this.dict['bab005']) // 1.直接获取全局变量dict里面的
      console.log(this.dicts) // 2.取mapGetter里面的
      console.log(this.$store.getters.dicts) // 3.取store仓库getters里面的
    }
  }
相关文章
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
1333 6
|
存储 Linux Shell
Linux绝对路径和相对路径
在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置。 只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。指明一个文件存放的位置,有 2 种方法,分别是使用绝对路径和相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根目录“/”开始的倒置的树状结构 绝对路径一定是由根目录 / 开始写起。例如,使用绝对路径的表示方式指明 bin 文件所在的位置,该路径应写为 /usr/bin,测试代码如下: [root@localhost ~]# bin bash: bin: command not found <-- 没有找到 [
507 0
使用ruoyi-vue控制数据权限
使用ruoyi-vue控制数据权限
1860 0
|
安全 网络协议 物联网
不看后悔系列之一篇搞懂LinuxCentOS搭建MQTT服务器及客户端操作使用
linux CentOS上搭建MQTT服务器并不难,主要就是用到了mosquitto这款消息代理服务软件。其采用发布/订阅模式传输机制,轻量、简单、开放并易于实现,被广泛应用于物联网之中。
3035 0
|
SQL 数据可视化 前端开发
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
2177 0
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
|
存储 开发框架 前端开发
在Vue&Element前端项目中,对于字典列表的显示处理
在Vue&Element前端项目中,对于字典列表的显示处理
|
JavaScript
Vue3数值动画(NumberAnimation)
该文档介绍了一个基于 Vue 的数值动画组件 `NumberAnimation`,提供了丰富的配置选项,如起始值、目标值、动画时长等,并支持自定义前缀、后缀及样式。通过简单的方法和事件,可以轻松控制动画的播放与停止。
554 0
Vue3数值动画(NumberAnimation)
|
JavaScript 前端开发 测试技术
vue组件化架构
Vue 的组件化架构为开发复杂的前端应用提供了一种高效、灵活和可维护的方式。它使得开发人员能够更好地组织代码、提高开发效率,并为应用的扩展和维护提供了坚实的基础。
292 49
|
11月前
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
601 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略

热门文章

最新文章