1、bus_dict_type 字典类型表
列名 | 类型 | 说明 |
---|---|---|
id | int(11) | 自增主键 |
custom_id | int(11) | 自定义id,取代id作为和bus_dict_item表的parent_id关联 |
sort_id | int(11) | 排序id,用于自定义顺序 |
type | int(2) | 用于指定某个custom_id,默认和自己的custom_id一样。 使用场景:使用其他的custom_id的字典属性的时候可以指定type等于其他custom_id即可,自己对应的bus_dict_item表里不需要写属性 |
name | varchar(255) | 名称,用于简要说明使用的位置 |
display_name | varchar(255) | 显示名称,用于页面显示 |
en_name | varchar(255) | 英文名称,默认和display_en_name一样 |
display_en_name | varchar(255) | 英文显示名称,用于页面显示 |
display_type | int(2) | 显示类型,当大于等于1的时候,会根据自己custom_id、display_type去bus_dict_style中查找对应的parent_id和display_type下的属性。 使用提供的接口方法会自动把查到的属性替换到display_value中 |
display_value | varchar(255) | 显示值,用于页面自定义样式显示,该值只能display_type小于1的时候使用,可以用来设置颜色、类型等 |
describe | varchar(255) | 详细说明 |
is_deleted | int(2) | 逻辑删除标记(0:不可用,1:可用),默认1 |
creator | varchar(255) | 创建者 |
create_time | datetime | 创建时间 |
updater | varchar(255) | 修改者 |
update_time | datetime | 修改时间 |
2、bus_dict_item 字典属性表
列名 | 类型 | 说明 |
---|---|---|
id | int(11) | 自增主键 |
parent_id | int(11) | 上级id(bus_dict_type表custom_id) |
sort_id | int(11) | 排序id,用于自定义顺序 |
type | int(2) | 保留字段、暂未使用 |
name | varchar(255) | 名称,用于简要说明使用的位置 |
display_name | varchar(255) | 显示名称,用于页面显示 |
en_name | varchar(255) | 英文名称,默认和display_en_name一样 |
display_en_name | varchar(255) | 英文显示名称,用于页面显示 |
display_type | int(2) | 保留字段、暂未使用 |
display_key | varchar(255) | 属性所属,用于绑定到某个标识。例:(0、1、2、3、50等),(full、real、error等),(inserts、deletes、ddls等) |
display_value | varchar(255) | 显示值,用于页面自定义样式显示,可以用来设置颜色、类型等 |
describe | varchar(255) | 详细说明 |
is_deleted | int(2) | 逻辑删除标记(0:不可用,1:可用),默认1 |
creator | varchar(255) | 创建者 |
create_time | datetime | 创建时间 |
updater | varchar(255) | 修改者 |
update_time | datetime | 修改时间 |
3、bus_dict_style 字典样式表
列名 | 类型 | 说明 |
---|---|---|
id | int(11) | 自增主键 |
parent_id | int(11) | 上级id(bus_dict_type表custom_id) |
display_type | int(2) | 与bus_dict_type表的display_type一样 |
display_key | varchar(255) | 属性所属,与bus_dict_item表的display_key一样 |
display_value | varchar(255) | 显示值,使用提供的接口会覆盖bus_dict_item表的display_value然后返回 |
describe | varchar(255) | 详细说明 |
is_deleted | int(2) | 逻辑删除标记(0:不可用,1:可用),默认1 |
creator | varchar(255) | 创建者 |
create_time | datetime | 创建时间 |
updater | varchar(255) | 修改者 |
update_time | datetime | 修改时间 |
使用场景
例1:
首先,这里我要对发布订阅
进行字典关联,首先把属性录入字典。
先录入类型表
bus_dict_type
再录入属性表bus_dict_item
他们通过custom_id
和parent_id
进行关联,通过display_key来进行属性绑定
这时候前端就可以通过接口指定参数customId = 100006
来获取字典类型和字典列表,如果需要自定义样式还可以配置display_type
来关联字典样式表
然后,我要对订阅统计
进行字典关联,这时候发现发布订阅
和订阅统计
的字典属性一样。
那么我只录入类型表
bus_dict_type
通过type
指定到发布订阅
的customId
上
这时候前端就可以通过接口指定参数customId = 100007
来获取字典类型和字典列表(字典列表可以选择是否获取)
例2:
首先,这里我要对进程统计
进行字典关联,首先把属性录入字典。
先录入类型表
bus_dict_type
,这里display_type
默认值
再录入属性表bus_dict_item
他们通过custom_id
和parent_id
进行关联,通过display_key来进行属性绑定,我在display_value
中写了颜色属性。然后前端照例获取,参考例1。
然后,我在对订阅
的按钮状态属性进行字典关联的时候发现
这里的按钮状态属性和
进程统计
时录入的属性一样,那么我就可以在录入的时候通过type
指定获取它的属性列表
注意这里我用了display_type = 1,因为我这里是按钮,颜色是按钮的type决定的并不是color决定的,所以我要自定义样式,当然如果不是和进程统计
共用属性字段就可以直接把按钮type的值写在display_value中获取即可。
录入样式表
bus_dict_style
parent_id
和bus_dict_type表的custom_id
关联 ,display_type
和bus_dict_type表的display_type
一样,display_key
和bus_dict_item表的display_key
一一对应
然后就可以通过指定接口customId = 100010
和 customId = 100011
来获取字典类型和字典列表,bus_dict_style表中的display_value
会覆盖bus_dict_item表的display_value
进行返回。
ps: 如果要用到样式表,那么bus_dict_type的display_type就要大于等于1,因为null和0用的是bus_dict_item的display_value,只有大于等于1才会去主动获取bus_dict_style表的属性并覆盖返回
后端接口
@ApiOperation("根据customerId获取字典(包含类型、属性)")
@GetMapping("findDictType")
public Response<?> findDictType(@RequestParam Integer customerId) {
BusDictTypeVo busDictTypeVo = busDictTypeService.getDictItemsWithCustomId(customerId);
HashMap<Object, Object> resultMap = new HashMap<>(1);
resultMap.put("dict", busDictTypeVo);
return ResponseUtil.makeSuccess(resultMap);
}
@ApiOperation("根据customerId获取字典(包含类型、属性)")
@PostMapping("findDictType")
public Response<?> findDictType(@RequestBody BusDictTypeDto dto) {
BusDictTypeVo busDictTypeVo = busDictTypeService.getDictItemsWithCustomId(dto.getCustomId());
HashMap<Object, Object> resultMap = new HashMap<>(1);
resultMap.put("dict", busDictTypeVo);
return ResponseUtil.makeSuccess(resultMap);
}
@ApiOperation("根据customerId和type获取字典(包含类型、属性)")
@PostMapping("findDictTypeByCustomerIdAndType")
public Response<?> findDictTypeByCustomerIdAndType(@RequestBody BusDictTypeDto dto) {
HashMap<Object, Object> resultMap = new HashMap<>(1);
BusDictTypeVo busDictTypeVo = busDictTypeService.getDictTypeByCustomerIdAndType(dto.getCustomId(), dto.getType(), dto.getEnableBusDictItems());
resultMap.put("dict", busDictTypeVo);
return ResponseUtil.makeSuccess(resultMap);
}
前端接口
import request from '@/utils/request'
import { isNotNull } from './validate'
export function findDictItems(data) {
// 获取字典属性列表
if (isNotNull(data.dict)) {
return data.dict.busDictItems
}
}
export function findDictItem(data, displayKey) {
// 获取字典属性(用于获取任意字段)
if (isNotNull(displayKey)) {
displayKey = displayKey + ''
if (isNotNull(data.dict) && isNotNull(data.dict.busDictItems)) {
return data.dict.busDictItems.find(v => isNotNull(v) && v.displayKey === displayKey)
}
}
}
export function findDictItemDisplayValue(data, displayKey) {
// 获取字典属性的显示值
if (isNotNull(displayKey)) {
displayKey = displayKey + ''
if (isNotNull(data.dict) && isNotNull(data.dict.busDictItems)) {
return data.dict.busDictItems.find(v => isNotNull(v) && v.displayKey === displayKey).displayValue
}
}
}
export function findDictTypeByLanguage(data) {
// 国际化适配字典类型显示名(displayName)
if (isNotNull(data.dict)) {
if (this.$isEnLanguage()) {
return isNotNull(data.dict.displayEnName) ? data.dict.displayEnName : data.dict.displayName
} else {
return data.dict.displayName
}
}
}
export function findDictItemByLanguage(data, displayKey) {
// 国际化适配字典属性显示名(displayName)
if (isNotNull(displayKey)) {
displayKey = displayKey + ''
if (isNotNull(data.dict) && isNotNull(data.dict.busDictItems)) {
if (this.$isEnLanguage()) {
const dictItem = data.dict.busDictItems.find(v => isNotNull(v) && v.displayKey === displayKey)
return isNotNull(dictItem.displayEnName) ? dictItem.displayEnName : dictItem.displayName
} else {
return data.dict.busDictItems.find(v => isNotNull(v) && v.displayKey === displayKey).displayName
}
}
}
}
// 根据参数 { customerId } 获取字典类型,里面包含字典属性列表,字典属性列表是以(parentId = customerId)来进行获取的
export function postBusDictType(params) {
return request({
url: '/api/zbomc/common/findDictType',
method: 'post',
data: params
})
}
// 单独请求字典方法,参数 customerId
export function getBusDictType(customerId) {
return request({
url: '/api/zbomc/common/findDictType?customerId=' + customerId,
method: 'get'
})
}
// 根据参数 { customerId, type } 获取字典类型,里面包含字典属性列表,但是字典属性列表是以(parentId = type)来进行获取的
export function postDictTypeByCustomerIdAndType(params) {
return request({
url: '/api/zbomc/common/findDictTypeByCustomerIdAndType',
method: 'post',
data: params
})
}
export function getDictList(customId) {
const params = {
customId: customId
}
return new Promise((resolve, reject) => {
postBusDictType(params).then(res => {
// 将得到的数据存储到Promise中
resolve(res)
}).catch(error => { reject(error) })
})
}
// 根据参数 { customerId, type } 获取字典类型,里面包含字典属性列表,但是字典属性列表是以(parentId = type)来进行获取的
export function getDictListByCustomIdAndType(customId, enableBusDictItems) {
const params = {
customId: customId,
// 如果不需要获取字典属性,可以不传这个参数
enableBusDictItems: enableBusDictItems
}
return new Promise((resolve, reject) => {
postDictTypeByCustomerIdAndType(params).then(res => {
// 将得到的数据存储到Promise中
resolve(res)
}).catch(error => { reject(error) })
})
}