feat-wip(components): 数据字典相关页面代码提交
This commit is contained in:
@ -53,3 +53,29 @@ export function fetchTreeDictionaryItem(dictionaryId: string) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function fetchDictionaryItemAdd(dictionaryOp: Api.Sys.Core.DictionaryItemOp) {
|
||||||
|
return request({
|
||||||
|
url: '/dictionaryItem/insert',
|
||||||
|
method: 'post',
|
||||||
|
data: dictionaryOp
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function fetchDictionaryItemEdit(dictionaryOp: Api.Sys.Core.DictionaryItemOp) {
|
||||||
|
return request({
|
||||||
|
url: '/dictionaryItem/update',
|
||||||
|
method: 'post',
|
||||||
|
data: dictionaryOp
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function fetchDictionaryItemDelete(id: string) {
|
||||||
|
return request({
|
||||||
|
url: '/dictionaryItem/delete',
|
||||||
|
method: 'post',
|
||||||
|
data: {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
8
src/typings/api/sys/core.d.ts
vendored
8
src/typings/api/sys/core.d.ts
vendored
@ -35,6 +35,14 @@ declare namespace Api {
|
|||||||
updateTime: string | null;
|
updateTime: string | null;
|
||||||
children: DictionaryItem[];
|
children: DictionaryItem[];
|
||||||
}
|
}
|
||||||
|
interface DictionaryItemOp {
|
||||||
|
id: string | null;
|
||||||
|
dictionaryId: string;
|
||||||
|
name: string;
|
||||||
|
code: string;
|
||||||
|
sort: number;
|
||||||
|
description: string | null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,14 @@ import { computed, ref, watch } from 'vue';
|
|||||||
import type { DataTableColumns } from 'naive-ui';
|
import type { DataTableColumns } from 'naive-ui';
|
||||||
import { jsonClone } from '@sa/utils';
|
import { jsonClone } from '@sa/utils';
|
||||||
import { dictionaryTypeOptions } from '@/constants/sys/core/dictionary';
|
import { dictionaryTypeOptions } from '@/constants/sys/core/dictionary';
|
||||||
import { fetchDictionaryAdd, fetchDictionaryEdit, fetchTreeDictionaryItem } from '@/service/api';
|
import {
|
||||||
|
fetchDictionaryAdd,
|
||||||
|
fetchDictionaryEdit,
|
||||||
|
fetchDictionaryItemAdd,
|
||||||
|
fetchDictionaryItemDelete,
|
||||||
|
fetchDictionaryItemEdit,
|
||||||
|
fetchTreeDictionaryItem
|
||||||
|
} from '@/service/api';
|
||||||
import { useFormRules, useNaiveForm } from '@/hooks/common/form';
|
import { useFormRules, useNaiveForm } from '@/hooks/common/form';
|
||||||
import { $t } from '@/locales';
|
import { $t } from '@/locales';
|
||||||
import DictionaryItem = Api.Sys.Core.DictionaryItem;
|
import DictionaryItem = Api.Sys.Core.DictionaryItem;
|
||||||
@ -50,8 +57,32 @@ interface Model {
|
|||||||
children: Api.Sys.Core.DictionaryItem[];
|
children: Api.Sys.Core.DictionaryItem[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ChildrenOperateModel {
|
||||||
|
id: string | null;
|
||||||
|
name: string;
|
||||||
|
code: string;
|
||||||
|
sort: number;
|
||||||
|
description: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
const model = ref(createDefaultModel());
|
const model = ref(createDefaultModel());
|
||||||
|
|
||||||
|
const childrenOperateModel = ref(createDefaultModel2());
|
||||||
|
|
||||||
|
const childrenModelVisible = ref(false);
|
||||||
|
const childrenTitle = ref('');
|
||||||
|
const childrenModelOperateType = ref('');
|
||||||
|
|
||||||
|
function showChildrenModel(operateType: NaiveUI.TableOperateType, row: DictionaryItem | null = null) {
|
||||||
|
childrenModelOperateType.value = operateType;
|
||||||
|
childrenTitle.value = operateType === 'edit' ? $t('common.edit') : $t('common.add');
|
||||||
|
childrenModelVisible.value = true;
|
||||||
|
childrenOperateModel.value = createDefaultModel2();
|
||||||
|
if (row) {
|
||||||
|
Object.assign(childrenOperateModel.value, jsonClone(row));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const childrenColumns: DataTableColumns<DictionaryItem> = [
|
const childrenColumns: DataTableColumns<DictionaryItem> = [
|
||||||
{
|
{
|
||||||
key: 'name',
|
key: 'name',
|
||||||
@ -76,14 +107,14 @@ const childrenColumns: DataTableColumns<DictionaryItem> = [
|
|||||||
title: $t('common.operate'),
|
title: $t('common.operate'),
|
||||||
align: 'center',
|
align: 'center',
|
||||||
width: 80,
|
width: 80,
|
||||||
render: _ => {
|
render: (row, index) => {
|
||||||
if (model.value.type === 'tree') {
|
if (model.value.type === 'tree') {
|
||||||
return (
|
return (
|
||||||
<div class="flex-center gap-8px">
|
<div class="flex-center gap-8px">
|
||||||
<NButton type="success" ghost size="small">
|
<NButton type="success" ghost size="small">
|
||||||
{$t('common.children')}
|
{$t('common.children')}
|
||||||
</NButton>
|
</NButton>
|
||||||
<NButton type="primary" ghost size="small">
|
<NButton type="primary" ghost size="small" onClick={() => showChildrenModel('edit', row)}>
|
||||||
{$t('common.edit')}
|
{$t('common.edit')}
|
||||||
</NButton>
|
</NButton>
|
||||||
<NButton type="error" ghost size="small">
|
<NButton type="error" ghost size="small">
|
||||||
@ -94,12 +125,19 @@ const childrenColumns: DataTableColumns<DictionaryItem> = [
|
|||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div class="flex-center gap-8px">
|
<div class="flex-center gap-8px">
|
||||||
<NButton type="primary" ghost size="small">
|
<NButton type="primary" ghost size="small" onClick={() => showChildrenModel('edit', row)}>
|
||||||
{$t('common.edit')}
|
{$t('common.edit')}
|
||||||
</NButton>
|
</NButton>
|
||||||
<NButton type="error" ghost size="small">
|
<NPopconfirm onPositiveClick={() => handleChildrenDelete(row, index)}>
|
||||||
{$t('common.delete')}
|
{{
|
||||||
</NButton>
|
default: () => $t('common.confirmDelete'),
|
||||||
|
trigger: () => (
|
||||||
|
<NButton type="error" ghost size="small">
|
||||||
|
{$t('common.delete')}
|
||||||
|
</NButton>
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</NPopconfirm>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -116,6 +154,16 @@ function createDefaultModel(): Model {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createDefaultModel2(): ChildrenOperateModel {
|
||||||
|
return {
|
||||||
|
id: null,
|
||||||
|
name: '',
|
||||||
|
code: '',
|
||||||
|
sort: 0,
|
||||||
|
description: null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
type RuleKey = 'name' | 'code' | 'type';
|
type RuleKey = 'name' | 'code' | 'type';
|
||||||
|
|
||||||
const rules: Record<RuleKey, App.Global.FormRule> = {
|
const rules: Record<RuleKey, App.Global.FormRule> = {
|
||||||
@ -143,6 +191,40 @@ function handleInitChildrenModel() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleChildrenSubmit() {
|
||||||
|
const apiParams: Api.Sys.Core.DictionaryItemOp = {
|
||||||
|
dictionaryId: props.rowData?.id || '',
|
||||||
|
...childrenOperateModel.value
|
||||||
|
};
|
||||||
|
if (childrenModelOperateType.value === 'edit') {
|
||||||
|
// 编辑
|
||||||
|
fetchDictionaryItemEdit(apiParams).then(() => {
|
||||||
|
window.$message?.success($t('common.updateSuccess'));
|
||||||
|
childrenModelVisible.value = false;
|
||||||
|
handleInitChildrenModel();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// 新增
|
||||||
|
fetchDictionaryItemAdd(apiParams).then(() => {
|
||||||
|
window.$message?.success($t('common.updateSuccess'));
|
||||||
|
childrenModelVisible.value = false;
|
||||||
|
handleInitChildrenModel();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleChildrenDelete(row: DictionaryItem, index: number) {
|
||||||
|
if (row.id) {
|
||||||
|
// 执行删除
|
||||||
|
fetchDictionaryItemDelete(row.id).then(() => {
|
||||||
|
window.$message?.success($t('common.deleteSuccess'));
|
||||||
|
handleInitChildrenModel();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
model.value.children = model.value.children.splice(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function closeDrawer() {
|
function closeDrawer() {
|
||||||
visible.value = false;
|
visible.value = false;
|
||||||
}
|
}
|
||||||
@ -204,10 +286,49 @@ watch(visible, () => {
|
|||||||
<NCard v-if="props.operateType === 'edit'" :title="$t('page.sys.core.dictionary.item.title')">
|
<NCard v-if="props.operateType === 'edit'" :title="$t('page.sys.core.dictionary.item.title')">
|
||||||
<template #header-extra>
|
<template #header-extra>
|
||||||
<NSpace>
|
<NSpace>
|
||||||
<NButton type="primary">{{ $t('common.add') }}</NButton>
|
<NButton type="primary" @click="showChildrenModel('add')">
|
||||||
|
{{ $t('common.add') }}
|
||||||
|
</NButton>
|
||||||
</NSpace>
|
</NSpace>
|
||||||
</template>
|
</template>
|
||||||
<NDataTable :data="model.children" :columns="childrenColumns" :bordered="true" />
|
<NDataTable :data="model.children" :columns="childrenColumns" :bordered="true" />
|
||||||
|
<NModal
|
||||||
|
v-model:show="childrenModelVisible"
|
||||||
|
preset="dialog"
|
||||||
|
:title="childrenTitle"
|
||||||
|
:positive-text="$t('common.confirm')"
|
||||||
|
:negative-text="$t('common.cancel')"
|
||||||
|
@positive-click="handleChildrenSubmit"
|
||||||
|
@negative-click="childrenModelVisible = false"
|
||||||
|
>
|
||||||
|
<NForm :model="childrenOperateModel">
|
||||||
|
<NFormItem :label="$t('page.sys.core.dictionary.item.fields.name')" path="name">
|
||||||
|
<NInput
|
||||||
|
v-model:value="childrenOperateModel.name"
|
||||||
|
:placeholder="$t('page.sys.core.dictionary.item.fields.name')"
|
||||||
|
/>
|
||||||
|
</NFormItem>
|
||||||
|
<NFormItem :label="$t('page.sys.core.dictionary.item.fields.code')" path="code">
|
||||||
|
<NInput
|
||||||
|
v-model:value="childrenOperateModel.code"
|
||||||
|
:placeholder="$t('page.sys.core.dictionary.item.fields.code')"
|
||||||
|
/>
|
||||||
|
</NFormItem>
|
||||||
|
<NFormItem :label="$t('page.sys.core.dictionary.item.fields.sort')" path="sort">
|
||||||
|
<NInputNumber
|
||||||
|
v-model:value="childrenOperateModel.sort"
|
||||||
|
:placeholder="$t('page.sys.core.dictionary.item.fields.sort')"
|
||||||
|
/>
|
||||||
|
</NFormItem>
|
||||||
|
<NFormItem :label="$t('page.sys.core.dictionary.item.fields.description')" path="description">
|
||||||
|
<NInput
|
||||||
|
v-model:value="childrenOperateModel.description"
|
||||||
|
:placeholder="$t('page.sys.core.dictionary.item.fields.description')"
|
||||||
|
type="textarea"
|
||||||
|
/>
|
||||||
|
</NFormItem>
|
||||||
|
</NForm>
|
||||||
|
</NModal>
|
||||||
</NCard>
|
</NCard>
|
||||||
</NScrollbar>
|
</NScrollbar>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|||||||
Reference in New Issue
Block a user