初始版本提交

This commit is contained in:
yaoyn
2024-02-05 09:15:37 +08:00
parent b52d4414be
commit 445292105f
1848 changed files with 236859 additions and 75 deletions

View File

@ -0,0 +1,149 @@
<template>
<BasicDrawer
v-bind="$attrs"
@register="registerDrawer"
showFooter
:title="getTitle"
width="500px"
@ok="handleSubmit"
>
<BasicForm @register="registerForm" />
</BasicDrawer>
</template>
<script lang="ts">
import { defineComponent, ref, computed, unref } from 'vue';
import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { addDicDetail, updateDicDetail } from '/@/api/system/dic';
import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
export const formSchema: FormSchema[] = [
{
field: 'name',
label: t('字典名称'),
required: true,
title: t('基本信息'),
component: 'Input',
componentProps: {
placeholder: t('请输入字典名称'),
},
colProps: { span: 24 },
},
{
field: 'code',
label: t('字典编码'),
required: true,
component: 'Input',
componentProps: {
placeholder: t('请输入字典编码'),
},
colProps: { span: 24 },
},
{
field: 'value',
label: t('字典值'),
required: true,
component: 'Input',
componentProps: {
placeholder: t('请输入字典值'),
},
colProps: { span: 24 },
},
{
field: 'sortCode',
label: t('排序'),
component: 'InputNumber',
componentProps: {
style: { width: '100%' },
placeholder: t('请输入排序号'),
},
colProps: { span: 24 },
},
{
label: t('备注'),
field: 'remark',
component: 'InputTextArea',
componentProps: {
placeholder: t('请输入备注'),
},
colProps: { span: 24 },
},
];
export default defineComponent({
name: 'DicDetailDrawer',
components: { BasicDrawer, BasicForm },
emits: ['success', 'register'],
setup(_, { emit }) {
const isUpdate = ref(true);
const { notification } = useMessage();
const rowId = ref('');
const itemId = ref('');
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 90,
schemas: formSchema,
showActionButtonGroup: false,
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
resetFields();
setDrawerProps({ confirmLoading: false });
console.log(data);
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
rowId.value = data.record.id;
itemId.value = data.record.itemId;
setFieldsValue({
...data.record,
});
} else {
itemId.value = data.itemId;
}
});
const getTitle = computed(() => (!unref(isUpdate) ? t('新增数据字典') : t('编辑数据字典')));
async function handleSubmit() {
try {
const values = await validate();
setDrawerProps({ confirmLoading: true });
values.itemId = itemId.value;
// TODO custom api
if (!unref(isUpdate)) {
//false 新增
await addDicDetail(values);
notification.success({
message: t('提示'),
description: t('新增数据字典成功'),
}); //提示消息
} else {
values.id = rowId.value;
await updateDicDetail(values);
notification.success({
message: t('提示'),
description: t('编辑数据字典成功'),
}); //提示消息
}
closeDrawer();
emit('success');
} catch (error) {
setDrawerProps({ confirmLoading: false });
}
}
return {
registerDrawer,
registerForm,
getTitle,
handleSubmit,
};
},
});
</script>

View File

@ -0,0 +1,119 @@
<template>
<BasicDrawer
v-bind="$attrs"
@register="registerDrawer"
showFooter
:title="getTitle"
width="500px"
@ok="handleSubmit"
>
<BasicForm @register="registerForm" />
</BasicDrawer>
</template>
<script lang="ts">
import { defineComponent, ref, computed, unref } from 'vue';
import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { addDicItem, updateDicItem } from '/@/api/system/dic';
import { useMessage } from '/@/hooks/web/useMessage';
// import { useI18n } from 'vue-i18n';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
export const formSchema: FormSchema[] = [
{
field: 'name',
label: t('项目名'),
required: true,
component: 'Input',
colProps: { span: 24 },
},
{
field: 'code',
label: t('编码'),
required: true,
component: 'Input',
colProps: { span: 24 },
},
{
field: 'sortCode',
label: t('排序'),
component: 'InputNumber',
colProps: { span: 24 },
},
{
label: t('备注'),
field: 'remark',
component: 'InputTextArea',
colProps: { span: 24 },
},
];
export default defineComponent({
name: 'DicItemDrawer',
components: { BasicDrawer, BasicForm },
emits: ['success', 'register'],
setup(_, { emit }) {
const isUpdate = ref(true);
const { notification } = useMessage();
const rowId = ref('');
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 90,
schemas: formSchema,
showActionButtonGroup: false,
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
resetFields();
setDrawerProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
rowId.value = data.record.id;
setFieldsValue({
...data.record,
});
}
});
const getTitle = computed(() => (!unref(isUpdate) ? t('新增字典项') : t('编辑字典项')));
async function handleSubmit() {
try {
const values = await validate();
setDrawerProps({ confirmLoading: true });
// TODO custom api
if (!unref(isUpdate)) {
//false 新增
await addDicItem(values);
notification.success({
message: t('提示'),
description: t('新增字典项成功'),
}); //提示消息
} else {
values.id = rowId.value;
await updateDicItem(values);
notification.success({
message: t('提示'),
description: t('编辑字典项成功'),
}); //提示消息
}
closeDrawer();
emit('success');
} catch (error) {
setDrawerProps({ confirmLoading: false });
}
}
return {
registerDrawer,
registerForm,
getTitle,
handleSubmit,
};
},
});
</script>

View File

@ -0,0 +1,321 @@
<template>
<PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
<BasicTable
@register="registerTableItem"
@row-click="handleRowClick"
class="w-2/5 xl:w-2/5 mr-2"
>
<template #toolbar>
<a-button type="primary" v-auth="'dic:addItems'" @click="handleItemCreate">{{
t('新增项')
}}</a-button>
</template>
<template #action="{ record }">
<TableAction
stopButtonPropagation
:actions="[
{
icon: 'clarity:note-edit-line',
auth: 'dic:edit',
onClick: handleItemEdit.bind(null, record),
},
{
icon: 'ant-design:delete-outlined',
auth: 'dic:delete',
color: 'error',
popConfirm: {
title: t('是否确认删除'),
confirm: handleItemDelete.bind(null, record),
},
},
]"
/>
</template>
</BasicTable>
<BasicTable @register="registerTableDetail" class="w-3/5 xl:w-3/5">
<template #toolbar>
<a-button type="primary" v-auth="'dic:addDictionary'" @click="handleDetailCreate">{{
t('新增字典')
}}</a-button>
</template>
<template #action="{ record }">
<TableAction
stopButtonPropagation
:actions="[
{
icon: 'clarity:note-edit-line',
auth: 'dic:edit',
onClick: handleDetailEdit.bind(null, record),
},
{
icon: 'ant-design:delete-outlined',
auth: 'dic:delete',
color: 'error',
popConfirm: {
title: t('是否确认删除'),
confirm: handleDetailDelete.bind(null, record),
},
},
]"
/>
</template>
</BasicTable>
<DicItemDrawer @register="registerItemDrawer" @success="handleItemSuccess" />
<DicDetailDrawer @register="registerDetailDrawer" @success="handleDetailSuccess" />
</PageWrapper>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
import { BasicTable, useTable, TableAction, FormSchema, BasicColumn } from '/@/components/Table';
import {
getDicItemPageList,
getDicDetailPageList,
deleteDicItem,
deleteDicDetail,
} from '/@/api/system/dic';
import { PageWrapper } from '/@/components/Page';
import DicItemDrawer from './components/DicItemDrawer.vue';
import DicDetailDrawer from './components/DicDetailDrawer.vue';
import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n';
import { useDrawer } from '/@/components/Drawer';
const { t } = useI18n();
export const searchFormSchemaItem: FormSchema[] = [
{
field: 'name',
label: t('项目名'),
component: 'Input',
},
{
field: 'code',
label: t('编码'),
component: 'Input',
},
];
export const itemColumns: BasicColumn[] = [
{
title: t('项目名'),
dataIndex: 'name',
width: 120,
align: 'left',
},
{
title: t('编号'),
dataIndex: 'code',
width: 120,
align: 'left',
},
{
title: t('备注'),
dataIndex: 'remark',
align: 'left',
},
];
export const searchFormSchemaDetail: FormSchema[] = [
{
field: 'name',
label: t('字典名'),
component: 'Input',
},
{
field: 'code',
label: t('编码'),
component: 'Input',
},
];
export const detailColumns: BasicColumn[] = [
{
title: t('字典名'),
dataIndex: 'name',
width: 120,
align: 'left',
},
{
title: t('编号'),
dataIndex: 'code',
width: 120,
align: 'left',
},
{
title: t('值'),
dataIndex: 'value',
width: 120,
align: 'left',
},
{
title: t('备注'),
align: 'left',
dataIndex: 'remark',
},
];
export default defineComponent({
name: 'DicManagement',
components: { BasicTable, PageWrapper, TableAction, DicItemDrawer, DicDetailDrawer },
setup() {
const { notification } = useMessage();
const selectItemId = ref('');
const [registerItemDrawer, { openDrawer: openItemDrawer }] = useDrawer();
const [registerDetailDrawer, { openDrawer: openDetailDrawer }] = useDrawer();
const [registerTableItem, { reload: itemReload }] = useTable({
title: t('数据字典项'),
api: getDicItemPageList,
rowKey: 'id',
columns: itemColumns,
formConfig: {
rowProps: {
gutter: 16,
},
schemas: searchFormSchemaItem,
showResetButton: false,
},
rowSelection: {
type: 'radio',
onChange: onSelectChange,
},
useSearchForm: true,
showTableSetting: true,
striped: false,
actionColumn: {
width: 80,
title: t('操作'),
dataIndex: 'action',
slots: { customRender: 'action' },
},
tableSetting: {
size: false,
setting: false,
},
});
const [registerTableDetail, { reload: detailReload }] = useTable({
title: t('数据字典详情'),
api: getDicDetailPageList,
rowKey: 'id',
columns: detailColumns,
formConfig: {
rowProps: {
gutter: 16,
},
schemas: searchFormSchemaDetail,
showResetButton: false,
},
beforeFetch: (params) => {
//发送请求默认新增 左边树结构所选机构id
return { ...params, itemId: selectItemId.value };
},
useSearchForm: true,
showTableSetting: true,
striped: false,
actionColumn: {
width: 80,
title: t('操作'),
dataIndex: 'action',
slots: { customRender: 'action' },
},
tableSetting: {
size: false,
setting: false,
},
});
function handleRowClick(record: any) {
selectItemId.value = record.id;
detailReload();
}
function onSelectChange(rowKey: string[]) {
selectItemId.value = rowKey[0];
detailReload();
}
function handleItemCreate() {
openItemDrawer(true, {
isUpdate: false,
});
}
function handleDetailCreate() {
if (!selectItemId.value) {
notification.warning({
message: t('提示'),
description: t('没有选择任意一行字典项!'),
});
return;
}
openDetailDrawer(true, {
itemId: selectItemId.value,
isUpdate: false,
});
}
function handleItemEdit(record: Recordable) {
console.log(record);
openItemDrawer(true, {
record,
isUpdate: true,
});
}
function handleDetailEdit(record: Recordable) {
console.log(record);
openDetailDrawer(true, {
record,
isUpdate: true,
});
}
function handleItemDelete(record: Recordable) {
deleteDicItem([record.id]).then((_) => {
itemReload();
notification.success({
message: t('提示'),
description: t('删除成功'),
}); //提示消息
});
}
function handleDetailDelete(record: Recordable) {
deleteDicDetail([record.id]).then((_) => {
detailReload();
notification.success({
message: t('提示'),
description: t('删除成功'),
}); //提示消息
});
}
function handleItemSuccess() {
itemReload();
}
function handleDetailSuccess() {
detailReload();
}
return {
registerTableItem,
registerTableDetail,
registerItemDrawer,
registerDetailDrawer,
handleItemCreate,
handleItemEdit,
handleItemDelete,
handleDetailCreate,
handleDetailEdit,
handleDetailDelete,
handleItemSuccess,
handleDetailSuccess,
handleRowClick,
t,
};
},
});
</script>