Commit 986d1328e0a0d37e2de2fb9d937faeed9d9bee7b

Authored by YunaiV
1 parent 4a8129bf

v3.6.0 增加字典标签样式回显

yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataBaseVO.java
... ... @@ -38,6 +38,11 @@ public class DictDataBaseVO {
38 38 // @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
39 39 private Integer status;
40 40  
  41 + @ApiModelProperty(value = "颜色类型", example = "default", notes = "default、primary、success、info、warning、danger")
  42 + private String colorType;
  43 + @ApiModelProperty(value = "css 样式", example = "btn-visible")
  44 + private String cssClass;
  45 +
41 46 @ApiModelProperty(value = "备注", example = "我是一个角色")
42 47 private String remark;
43 48  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java
... ... @@ -17,4 +17,9 @@ public class DictDataSimpleRespVO {
17 17 @ApiModelProperty(value = "字典标签", required = true, example = "男")
18 18 private String label;
19 19  
  20 + @ApiModelProperty(value = "颜色类型", example = "default", notes = "default、primary、success、info、warning、danger")
  21 + private String colorType;
  22 + @ApiModelProperty(value = "css 样式", example = "btn-visible")
  23 + private String cssClass;
  24 +
20 25 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictDataDO.java
... ... @@ -47,6 +47,16 @@ public class DictDataDO extends BaseDO {
47 47 */
48 48 private Integer status;
49 49 /**
  50 + * 颜色类型
  51 + *
  52 + * 对应到 element-ui 为 default、primary、success、info、warning、danger
  53 + */
  54 + private String colorType;
  55 + /**
  56 + * css 样式
  57 + */
  58 + private String cssClass;
  59 + /**
50 60 * 备注
51 61 */
52 62 private String remark;
... ...
yudao-ui-admin/src/components/DictTag/index.vue 0 → 100644
  1 +<template>
  2 + <div>
  3 + <template v-for="(dict, index) in this.getDictDatas2(type, value)">
  4 + <!-- 默认样式 -->
  5 + <span v-if="dict.colorType === 'default' || dict.colorType === '' || dict.color === undefined" :key="dict.value" :index="index"
  6 + :class="dict.cssClass">{{ dict.label }}</span>
  7 + <!-- Tag 样式 -->
  8 + <el-tag v-else :key="dict.value" :index="index" :type="dict.colorType" :class="dict.cssClass">
  9 + {{ dict.label }}
  10 + </el-tag>
  11 + </template>
  12 + </div>
  13 +</template>
  14 +
  15 +<script>
  16 +export default {
  17 + name: "DictTag",
  18 + props: {
  19 + type: String,
  20 + value: [Number, String, Array],
  21 + },
  22 +};
  23 +</script>
  24 +<style scoped>
  25 +.el-tag + .el-tag {
  26 + margin-left: 10px;
  27 +}
  28 +</style>
... ...
yudao-ui-admin/src/main.js
... ... @@ -36,7 +36,7 @@ import RightToolbar from &quot;@/components/RightToolbar&quot;
36 36 // 代码高亮插件
37 37 // import hljs from 'highlight.js'
38 38 // import 'highlight.js/styles/github-gist.css'
39   -import {DICT_TYPE, getDictDataLabel, getDictDatas} from "@/utils/dict";
  39 +import {DICT_TYPE, getDictDataLabel, getDictDatas, getDictDatas2} from "@/utils/dict";
40 40  
41 41 // 全局方法挂载
42 42 Vue.prototype.getDicts = getDicts
... ... @@ -47,6 +47,7 @@ Vue.prototype.addDateRange = addDateRange
47 47 Vue.prototype.addBeginAndEndTime = addBeginAndEndTime
48 48 Vue.prototype.selectDictLabel = selectDictLabel
49 49 Vue.prototype.getDictDatas = getDictDatas
  50 +Vue.prototype.getDictDatas2 = getDictDatas2
50 51 Vue.prototype.getDictDataLabel = getDictDataLabel
51 52 Vue.prototype.DICT_TYPE = DICT_TYPE
52 53 Vue.prototype.download = download
... ... @@ -70,8 +71,11 @@ Vue.prototype.msgInfo = function (msg) {
70 71 }
71 72  
72 73 // 全局组件挂载
  74 +Vue.component('DictTag', DictTag)
73 75 Vue.component('Pagination', Pagination)
74 76 Vue.component('RightToolbar', RightToolbar)
  77 +// 字典标签组件
  78 +import DictTag from '@/components/DictTag'
75 79 // 头部标签插件
76 80 import VueMeta from 'vue-meta'
77 81  
... ...
yudao-ui-admin/src/utils/dict.js
... ... @@ -68,10 +68,37 @@ export function getDictDatas(dictType) {
68 68 // console.log(store.getters.dict_datas[dictType]);
69 69 // debugger
70 70 // }
  71 + // debugger
71 72 return store.getters.dict_datas[dictType] || []
72 73 }
73 74  
74   -export function getDictDataLabel(dictType, value) {
  75 +/**
  76 + * 获取 dictType 对应的数据字典数组
  77 + *
  78 + * @param dictType 数据类型
  79 + * @param values 数组、单个元素
  80 + * @returns {*|Array} 数据字典数组
  81 + */
  82 +export function getDictDatas2(dictType, values) {
  83 + if (values === undefined) {
  84 + return [];
  85 + }
  86 + // 如果是单个元素,则转换成数组
  87 + if (!Array.isArray(values)) {
  88 + values = [this.value];
  89 + }
  90 + // 获得字典数据
  91 + const results = [];
  92 + for (const value of values) {
  93 + const dict = getDictData(dictType, value);
  94 + if (dict) {
  95 + results.push(dict);
  96 + }
  97 + }
  98 + return results;
  99 +}
  100 +
  101 +export function getDictData(dictType, value) {
75 102 // 获取 dictType 对应的数据字典数组
76 103 const dictDatas = getDictDatas(dictType)
77 104 if (!dictDatas || dictDatas.length === 0) {
... ... @@ -81,8 +108,14 @@ export function getDictDataLabel(dictType, value) {
81 108 value = value + '' // 强制转换成字符串,因为 DictData 小类数值,是字符串
82 109 for (const dictData of dictDatas) {
83 110 if (dictData.value === value) {
84   - return dictData.label
  111 + return dictData;
85 112 }
86 113 }
87   - return ''
  114 + return undefined
88 115 }
  116 +
  117 +export function getDictDataLabel(dictType, value) {
  118 + const dict = getDictData(dictType, value);
  119 + return dict ? dict.label : '';
  120 +}
  121 +
... ...
yudao-ui-admin/src/views/system/dict/data.vue
... ... @@ -37,7 +37,13 @@
37 37 <el-table-column label="字典标签" align="center" prop="label" />
38 38 <el-table-column label="字典键值" align="center" prop="value" />
39 39 <el-table-column label="字典排序" align="center" prop="sort" />
40   - <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
  40 + <el-table-column label="状态" align="center" prop="status">
  41 + <template slot-scope="scope">
  42 + <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
  43 + </template>
  44 + </el-table-column>
  45 + <el-table-column label="颜色类型" align="center" prop="colorType" />
  46 + <el-table-column label="CSS Class" align="center" prop="cssClass" />
41 47 <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
42 48 <el-table-column label="创建时间" align="center" prop="createTime" width="180">
43 49 <template slot-scope="scope">
... ... @@ -59,7 +65,7 @@
59 65  
60 66 <!-- 添加或修改参数配置对话框 -->
61 67 <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
62   - <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  68 + <el-form ref="form" :model="form" :rules="rules" label-width="90px">
63 69 <el-form-item label="字典类型">
64 70 <el-input v-model="form.dictType" :disabled="true" />
65 71 </el-form-item>
... ... @@ -77,6 +83,14 @@
77 83 <el-radio v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
78 84 </el-radio-group>
79 85 </el-form-item>
  86 + <el-form-item label="颜色类型" prop="colorType">
  87 + <el-select v-model="form.colorType">
  88 + <el-option v-for="item in colorTypeOptions" :key="item.value" :label="item.label + '(' + item.value + ')'" :value="item.value" />
  89 + </el-select>
  90 + </el-form-item>
  91 + <el-form-item label="CSS Class" prop="cssClass">
  92 + <el-input v-model="form.cssClass" placeholder="请输入 CSS Class" />
  93 + </el-form-item>
80 94 <el-form-item label="备注" prop="remark">
81 95 <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
82 96 </el-form-item>
... ... @@ -142,6 +156,27 @@ export default {
142 156 { required: true, message: "数据顺序不能为空", trigger: "blur" }
143 157 ]
144 158 },
  159 + // 数据标签回显样式
  160 + colorTypeOptions: [{
  161 + value: "default",
  162 + label: "默认"
  163 + }, {
  164 + value: "primary",
  165 + label: "主要"
  166 + }, {
  167 + value: "success",
  168 + label: "成功"
  169 + }, {
  170 + value: "info",
  171 + label: "信息"
  172 + }, {
  173 + value: "warning",
  174 + label: "警告"
  175 + }, {
  176 + value: "danger",
  177 + label: "危险"
  178 + }
  179 + ],
145 180  
146 181 // 枚举
147 182 CommonStatusEnum: CommonStatusEnum,
... ... @@ -178,10 +213,6 @@ export default {
178 213 this.loading = false;
179 214 });
180 215 },
181   - // 数据状态字典翻译
182   - statusFormat(row, column) {
183   - return getDictDataLabel(DICT_TYPE.COMMON_STATUS, row.status)
184   - },
185 216 // 取消按钮
186 217 cancel() {
187 218 this.open = false;
... ... @@ -195,6 +226,8 @@ export default {
195 226 value: undefined,
196 227 sort: 0,
197 228 status: CommonStatusEnum.ENABLE,
  229 + colorType: 'default',
  230 + cssClass: undefined,
198 231 remark: undefined
199 232 };
200 233 this.resetForm("form");
... ...
更新日志.md
... ... @@ -35,7 +35,7 @@
35 35 * 【新增】前端的表格右侧工具栏组件支持显隐列,具体可见【用户管理】功能 [commit](https://gitee.com/zhijiantianya/ruoyi-vue-pro/commit/20e34e35a3bdc48e6a4c58e3849aa729bd18efe5)
36 36 * 【新增】前端的菜单导航显示风格 TopNav(false 为 左侧导航菜单,true 为顶部导航菜单),支持布局的保存与重置 [commit1](https://gitee.com/zhijiantianya/ruoyi-vue-pro/commit/4bf5b04d542014a49c5a41b20935cef35033a518) [commit2](https://gitee.com/zhijiantianya/ruoyi-vue-pro/commit/cff4391f2d7830770731c0034085c0f77ea8c68e)
37 37 * 【新增】前端的网页标题支持根据选择的菜单,动态展示标题 [commit](https://gitee.com/zhijiantianya/ruoyi-vue-pro/commit/7bf9a85263e0c44b2bc88485b83557c129583f5c)
38   -* 【新增】前端的 iframe 组件,方便内嵌网页 [commit]()
  38 +* 【新增】前端的 iframe 组件,方便内嵌网页 [commit](https://gitee.com/zhijiantianya/ruoyi-vue-pro/commit/4a8129bffa9e3928c56333e29f5874f55a079764)
39 39  
40 40 ### 🐞 Bug Fixes
41 41  
... ...