1. 增加字典数据接口

2. 前端接入全局字典数据
This commit is contained in:
YunaiV
2021-01-08 01:28:41 +08:00
parent 74daab066d
commit dba723b8fc
19 changed files with 245 additions and 23 deletions

View File

@ -58,4 +58,12 @@ export function exportData(query) {
method: 'get',
params: query
})
}
}
// 查询全部字典数据列表
export function listSimpleDictDatas() {
return request({
url: '/system/dict-data/list-all-simple',
method: 'get',
})
}

View File

@ -18,6 +18,8 @@ router.beforeEach((to, from, next) => {
NProgress.done()
} else {
if (store.getters.roles.length === 0) {
// 获取字典数据
store.dispatch('dict/loadDictDatas')
// 判断当前用户是否已拉取完user_info信息
store.dispatch('GetInfo').then(res => {
// 拉取user_info

View File

@ -12,5 +12,7 @@ const getters = {
permissions: state => state.user.permissions,
permission_routes: state => state.permission.routes,
sidebarRouters:state => state.permission.sidebarRouters,
// 数据字典
dict_datas: state => state.dict.dictDatas
}
export default getters

View File

@ -5,6 +5,7 @@ import user from './modules/user'
import tagsView from './modules/tagsView'
import permission from './modules/permission'
import settings from './modules/settings'
import dict from './modules/dict'
import getters from './getters'
Vue.use(Vuex)
@ -15,7 +16,8 @@ const store = new Vuex.Store({
user,
tagsView,
permission,
settings
settings,
dict
},
getters
})

View File

@ -0,0 +1,46 @@
import { listSimpleDictDatas } from '@/api/system/dict/data'
const state = {
/**
* 数据字典 MAP
* key数据字典大类枚举值 dictType
* dictValue数据字典小类数值 {dictValue: '', dictLabel: ''} 的数组
*/
dictDatas: {}
}
const mutations = {
SET_DICT_DATAS: (state, dictDatas) => {
state.dictDatas = dictDatas
}
}
const actions = {
loadDictDatas({ commit }) {
listSimpleDictDatas().then(response => {
// 设置数据
const dictDataMap = {}
response.data.forEach(dictData => {
// 获得 dictType 层级
const enumValueObj = dictDataMap[dictData.dictType]
if (!enumValueObj) {
dictDataMap[dictData.dictType] = []
}
// 处理 dictValue 层级
dictDataMap[dictData.dictType].push({
dictValue: dictData.dictValue,
dictLabel: dictData.dictLabel
})
})
// 存储到 Store 中
commit('SET_DICT_DATAS', dictDataMap)
})
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

View File

@ -37,6 +37,7 @@ const user = {
const uuid = userInfo.uuid
return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => {
res = res.data;
setToken(res.token)
commit('SET_TOKEN', res.token)
resolve()
@ -53,7 +54,6 @@ const user = {
res = res.data; // 读取 data 数据
const user = res.user
const avatar = user.avatar === "" ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar;
debugger
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
commit('SET_ROLES', res.roles)
commit('SET_PERMISSIONS', res.permissions)

View File

@ -0,0 +1,36 @@
/**
* Created by 芋道源码
*
* 数据字典工具类
*/
import store from '@/store'
export const DICT_TYPE = {
SYS_COMMON_STATUS: 'sys_common_status'
}
/**
* 获取 dictType 对应的数据字典数组
*
* @param dictType 数据类型
* @returns {*|Array} 数据字典数组
*/
export function getDictDatas(dictType) {
return store.getters.dict_datas[dictType] || []
}
export function getDictDataLabel(dictType, value) {
// 获取 dictType 对应的数据字典数组
const dictDatas = getDictDatas(dictType)
if (!dictDatas || dictDatas.length === 0) {
return ''
}
// 获取 value 对应的展示名
value = value + '' // 强制转换成字符串,因为 DictData 小类数值,是字符串
for (const dictData of dictDatas) {
if (dictData.dictValue === value) {
return dictData.dictLabel
}
}
return ''
}

View File

@ -99,6 +99,7 @@ export default {
methods: {
getCode() {
getCodeImg().then(res => {
res = res.data;
this.codeUrl = "data:image/gif;base64," + res.img;
this.loginForm.uuid = res.uuid;
});

View File

@ -211,6 +211,8 @@ import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import IconSelect from "@/components/IconSelect";
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "Menu",
components: { Treeselect, IconSelect },
@ -255,12 +257,6 @@ export default {
},
created() {
this.getList();
this.getDicts("sys_show_hide").then(response => {
this.visibleOptions = response.data;
});
this.getDicts("sys_normal_disable").then(response => {
this.statusOptions = response.data;
});
},
methods: {
// 选择图标
@ -295,19 +291,9 @@ export default {
this.menuOptions.push(menu);
});
},
// 显示状态字典翻译
visibleFormat(row, column) {
if (row.menuType == "3") {
return "";
}
return this.selectDictLabel(this.visibleOptions, row.visible);
},
// 菜单状态字典翻译
statusFormat(row, column) {
if (row.menuType == "3") {
return "";
}
return this.selectDictLabel(this.statusOptions, row.status);
return getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, row.status)
},
// 取消按钮
cancel() {