refactor(dict): 优化字典管理页面的状态显示和删除逻辑

- 将状态显示逻辑从组件配置移至模板中,提高代码可读性
- 重构删除逻辑,使用 `removeRow` 替代 `removeId` 和 `dict`,简化代码结构
- 更新国际化文件,添加“状态”字段的翻译
This commit is contained in:
user 2025-03-21 22:13:47 +08:00
parent 721731500a
commit c975adb431
3 changed files with 39 additions and 69 deletions

View File

@ -6,7 +6,6 @@ import buildPaginationQuery from '@/shared/sort/sorts';
import VueSelect from '@/shared/components/vue-select.vue';
import type { SelectOption } from '@/shared/components/vue-select.vue';
import JhiSortIndicator from '@/shared/sort/jhi-sort-indicator.vue';
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
export default defineComponent({
compatConfig: { MODE: 3 },
@ -44,19 +43,7 @@ export default defineComponent({
// 父级字典选项
const numberOptions = ref<SelectOption[]>([]);
const isLoadingNumberOptions = ref(false);
const dict = ref({
id: null,
number: '',
parentNumber: '',
name: '',
property: '',
remark: '',
status: '1',
sortNo: 0,
version: 0,
});
const removeId = ref(null);
const removeRow = ref(null);
const deleteDialog = ref<any>(null);
// 分页相关变量
@ -82,6 +69,11 @@ export default defineComponent({
field: 'name',
sortable: true,
},
{
title: t$('jewpmsApp.dict.parentNumber'),
field: 'parentNumber',
visible: false,
},
{
title: t$('jewpmsApp.dict.property'),
field: 'property',
@ -91,12 +83,6 @@ export default defineComponent({
title: t$('jewpmsApp.dict.status'),
field: 'status',
sortable: true,
slots: {
default: ({ row }) => {
const statusDict = statusDicts.value.find(s => s.number === String(row.status));
return statusDict?.name || (row.status === 1 ? '生效' : '失效');
},
},
},
{
title: t$('jewpmsApp.dict.remark'),
@ -110,31 +96,6 @@ export default defineComponent({
{
title: t$('entity.action.actions'),
width: 160,
slots: {
default: ({ row }) => {
return [
h('div', { class: 'btn-group' }, [
h(
'router-link',
{
to: { name: 'DictEdit', params: { id: row.id } },
class: 'btn btn-primary btn-sm',
},
[h(FontAwesomeIcon, { icon: 'pencil-alt' }), h('span', { class: 'd-none d-md-inline' }, t$('entity.action.edit'))],
),
h(
'button',
{
class: 'btn btn-danger btn-sm',
onClick: () => prepareDelete(row),
'data-cy': 'entityDeleteButton',
},
[h(FontAwesomeIcon, { icon: 'times' }), h('span', { class: 'd-none d-md-inline' }, t$('entity.action.delete'))],
),
]),
];
},
},
},
];
@ -204,15 +165,17 @@ export default defineComponent({
try {
const params = Object.fromEntries([
// 基础参数
...Object.keys(dict.value).flatMap(key => [
[`${key}[name]`, ''],
...(key === 'parentNumber'
? [
[`${key}[op]`, 'IFNULL'],
[`${key}[value]`, ''],
]
: []),
]),
...columns
.filter(col => col.field !== undefined)
.flatMap(col => [
[`${col.field}[name]`, ''],
...(col.field === 'parentNumber'
? [
[`${col.field}[op]`, 'IFNULL'],
[`${col.field}[value]`, ''],
]
: []),
]),
// 过滤参数
...(showFilter.value
? Object.entries(filterParams.value)
@ -262,22 +225,17 @@ export default defineComponent({
};
const prepareDelete = (row: any) => {
removeId.value = row.id;
dict.value = { ...row };
if (deleteDialog.value) {
deleteDialog.value.show();
}
removeRow.value = { ...row };
if (deleteDialog.value) deleteDialog.value.show();
};
const deleteDict = async () => {
try {
await axios.delete(`api/dicts/${removeId.value}`);
await axios.delete(`api/dicts/${removeRow.value.id}`);
alertService.showInfo(t$('jewpmsApp.dict.deleted'));
removeId.value = null;
removeRow.value.id = null;
handleSyncList();
if (deleteDialog.value) {
deleteDialog.value.hide();
}
if (deleteDialog.value) deleteDialog.value.hide();
} catch (e) {
alertService.showHttpError(e);
}
@ -288,8 +246,7 @@ export default defineComponent({
return {
isFetching,
dicts,
dict,
removeId,
removeRow,
deleteDialog,
columns,
page,

View File

@ -90,8 +90,20 @@
:tree-node="col.treeNode"
:width="col.width"
>
<template #default="{ row }" v-if="col.slots && col.slots.default">
<component :is="col.slots.default({ row })"></component>
<template #default="{ row }" v-if="col.field === 'status'">
{{ statusDicts.find(s => s.number === String(row.status))?.name || (row.status === 1 ? '生效' : '失效') }}
</template>
<template #default="{ row }" v-else-if="col.title === $t('entity.action.actions')">
<div class="btn-group">
<router-link :to="{ name: 'DictEdit', params: { id: row.id } }" class="btn btn-primary btn-sm">
<font-awesome-icon icon="pencil-alt" />
<span class="d-none d-md-inline">{{ $t('entity.action.edit') }}</span>
</router-link>
<button @click="prepareDelete(row)" class="btn btn-danger btn-sm" data-cy="entityDeleteButton">
<font-awesome-icon icon="times" />
<span class="d-none d-md-inline">{{ $t('entity.action.delete') }}</span>
</button>
</div>
</template>
</vxe-column>
</vxe-table>
@ -132,7 +144,7 @@
<!-- 删除确认对话框 -->
<b-modal ref="deleteDialog" id="deleteDialog" :title="$t('entity.delete.title')" @ok="deleteDict">
<div class="modal-body">
<p id="jhi-delete-dict-heading" v-text="$t('jewpmsApp.dict.delete.question', { param: dict.name })"></p>
<p id="jhi-delete-dict-heading" v-text="$t('jewpmsApp.dict.delete.question', { param: removeRow.name })"></p>
</div>
</b-modal>
</div>

View File

@ -18,6 +18,7 @@
"email": "电子邮箱",
"website": "公司网站",
"remark": "备注",
"status": "状态",
"actions": "操作"
}
}