【更新】字典功能被选中后列表包含自己,且自动区分上下级

pull/110/head
小诺 2023-04-14 00:25:35 +08:00 committed by 俞宝山
parent 18ee9d4ec8
commit 3e28c838ee
3 changed files with 78 additions and 14 deletions

View File

@ -48,6 +48,10 @@
</a-button> </a-button>
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'level'">
<a-tag color="blue" v-if="record.level">{{ record.level }}</a-tag>
<a-tag color="green" v-else></a-tag>
</template>
<template v-if="column.dataIndex === 'action'"> <template v-if="column.dataIndex === 'action'">
<a @click="form.onOpen(record, 'BIZ')">编辑</a> <a @click="form.onOpen(record, 'BIZ')">编辑</a>
<a-divider type="vertical" /> <a-divider type="vertical" />
@ -70,11 +74,13 @@
const columns = [ const columns = [
{ {
title: '字典名称', title: '字典名称',
dataIndex: 'dictLabel' dataIndex: 'dictLabel',
width: 350
}, },
{ {
title: '字典值', title: '字典值',
dataIndex: 'dictValue' dataIndex: 'dictValue',
width: 350
}, },
{ {
title: '排序', title: '排序',
@ -103,8 +109,27 @@
const loadData = (parameter) => { const loadData = (parameter) => {
loadTreeData() loadTreeData()
parameter.category = 'BIZ' parameter.category = 'BIZ'
return dictApi.dictPage(Object.assign(parameter, searchFormState)).then((res) => { return dictApi.dictPage(Object.assign(parameter, searchFormState)).then((data) => {
return res if (data.records) {
if (searchFormState.parentId) {
let dataArray = []
data.records.forEach((item) => {
const obj = data.records.find((f) => f.id === item.parentId)
if (!obj) {
dataArray.push(item)
}
})
if (dataArray.length === 1) {
data.records.forEach((item) => {
if (item.id === dataArray[0].id) {
item.level = '上级'
}
})
}
dataArray = []
}
}
return data
}) })
} }
// //
@ -127,8 +152,16 @@
const treeSelect = (selectedKeys) => { const treeSelect = (selectedKeys) => {
if (selectedKeys && selectedKeys.length > 0) { if (selectedKeys && selectedKeys.length > 0) {
searchFormState.parentId = selectedKeys.toString() searchFormState.parentId = selectedKeys.toString()
if (!columns.find((f) => f.title === '层级')) {
columns.splice(2, 0, {
title: '层级',
dataIndex: 'level',
width: 100
})
}
} else { } else {
delete searchFormState.parentId delete searchFormState.parentId
columns.splice(2, 1)
} }
table.value.refresh(true) table.value.refresh(true)
} }

View File

@ -48,8 +48,9 @@
</a-button> </a-button>
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'category'"> <template v-if="column.dataIndex === 'level'">
{{ $TOOL.dictTypeData('DICT_CATEGORY', record.category) }} <a-tag color="blue" v-if="record.level">{{ record.level }}</a-tag>
<a-tag color="green" v-else></a-tag>
</template> </template>
<template v-if="column.dataIndex === 'action'"> <template v-if="column.dataIndex === 'action'">
<a @click="form.onOpen(record, 'FRM')">编辑</a> <a @click="form.onOpen(record, 'FRM')">编辑</a>
@ -66,14 +67,17 @@
import dictApi from '@/api/dev/dictApi' import dictApi from '@/api/dev/dictApi'
import Form from './form.vue' import Form from './form.vue'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
let searchFormState = reactive({})
const columns = [ const columns = [
{ {
title: '字典名称', title: '字典名称',
dataIndex: 'dictLabel' dataIndex: 'dictLabel',
width: 350
}, },
{ {
title: '字典值', title: '字典值',
dataIndex: 'dictValue' dataIndex: 'dictValue',
width: 350
}, },
{ {
title: '排序', title: '排序',
@ -90,7 +94,6 @@
const table = ref(null) const table = ref(null)
const form = ref() const form = ref()
const searchFormRef = ref() const searchFormRef = ref()
let searchFormState = reactive({})
// //
let defaultExpandedKeys = ref([]) let defaultExpandedKeys = ref([])
const treeData = ref([]) const treeData = ref([])
@ -102,8 +105,27 @@
const loadData = (parameter) => { const loadData = (parameter) => {
loadTreeData() loadTreeData()
parameter.category = 'FRM' parameter.category = 'FRM'
return dictApi.dictPage(Object.assign(parameter, searchFormState)).then((res) => { return dictApi.dictPage(Object.assign(parameter, searchFormState)).then((data) => {
return res if (data.records) {
if (searchFormState.parentId) {
let dataArray = []
data.records.forEach((item) => {
const obj = data.records.find((f) => f.id === item.parentId)
if (!obj) {
dataArray.push(item)
}
})
if (dataArray.length === 1) {
data.records.forEach((item) => {
if (item.id === dataArray[0].id) {
item.level = '上级'
}
})
}
dataArray = []
}
}
return data
}) })
} }
// //
@ -126,8 +148,16 @@
const treeSelect = (selectedKeys) => { const treeSelect = (selectedKeys) => {
if (selectedKeys && selectedKeys.length > 0) { if (selectedKeys && selectedKeys.length > 0) {
searchFormState.parentId = selectedKeys.toString() searchFormState.parentId = selectedKeys.toString()
if (!columns.find((f) => f.title === '层级')) {
columns.splice(2, 0, {
title: '层级',
dataIndex: 'level',
width: 100
})
}
} else { } else {
delete searchFormState.parentId delete searchFormState.parentId
columns.splice(2, 1)
} }
table.value.refresh(true) table.value.refresh(true)
} }

View File

@ -63,7 +63,8 @@ public class DevDictServiceImpl extends ServiceImpl<DevDictMapper, DevDict> impl
queryWrapper.lambda().select(DevDict::getId, DevDict::getParentId, DevDict::getCategory, DevDict::getDictLabel, queryWrapper.lambda().select(DevDict::getId, DevDict::getParentId, DevDict::getCategory, DevDict::getDictLabel,
DevDict::getDictValue, DevDict::getSortCode); DevDict::getDictValue, DevDict::getSortCode);
if (ObjectUtil.isNotEmpty(devDictPageParam.getParentId())) { if (ObjectUtil.isNotEmpty(devDictPageParam.getParentId())) {
queryWrapper.lambda().eq(DevDict::getParentId, devDictPageParam.getParentId()); queryWrapper.lambda().eq(DevDict::getParentId, devDictPageParam.getParentId())
.or().eq(DevDict::getId, devDictPageParam.getParentId());
} }
if (ObjectUtil.isNotEmpty(devDictPageParam.getCategory())) { if (ObjectUtil.isNotEmpty(devDictPageParam.getCategory())) {
queryWrapper.lambda().eq(DevDict::getCategory, devDictPageParam.getCategory()); queryWrapper.lambda().eq(DevDict::getCategory, devDictPageParam.getCategory());