From 4494bc0119e5a1c635ec3189fac03771b4c016f5 Mon Sep 17 00:00:00 2001 From: zsqtony <450952271@qq.com> Date: Tue, 1 Jul 2025 17:56:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=88=BF=E5=B1=8B?= =?UTF-8?q?=E7=99=BB=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Select.tsx | 34 +++++++ src/gen/ApiTypes.d.ts | 6 ++ src/gen/Apis.ts | 3 + src/pages/archive/house_registers/index.tsx | 89 ++++++++++++++++++ .../archive/house_registers/modals/Create.tsx | 78 ++++++++++++++++ .../archive/house_registers/modals/Update.tsx | 91 +++++++++++++++++++ 6 files changed, 301 insertions(+) create mode 100644 src/pages/archive/house_registers/index.tsx create mode 100644 src/pages/archive/house_registers/modals/Create.tsx create mode 100644 src/pages/archive/house_registers/modals/Update.tsx diff --git a/src/components/Select.tsx b/src/components/Select.tsx index 9bc320e..938958b 100644 --- a/src/components/Select.tsx +++ b/src/components/Select.tsx @@ -250,4 +250,38 @@ export const Selects = { }, }; }, + //房屋 + AssetHouses(props?: PropsType): ReturnType { + const { + title = '选择房屋', + key = 'asset_houses_id', + required = false, + hideInTable = true, + ...rest + } = props ?? {}; + + return { + title: title, + key: key, + valueType: 'select', + hideInTable: hideInTable, + formItemProps: { ...(required ? rulesHelper.number : {}) }, + request: async (params) => + ( + await Apis.Asset.AssetHouses.Select({ + keywords: params?.KeyWords, + ...params, + }) + ).data, + ...rest, + fieldProps: { + showSearch: true, + fieldNames: { + label: 'label', + value: 'value', + }, + ...rest?.fieldProps, + }, + }; + }, }; diff --git a/src/gen/ApiTypes.d.ts b/src/gen/ApiTypes.d.ts index 6f5cdbf..9015d59 100644 --- a/src/gen/ApiTypes.d.ts +++ b/src/gen/ApiTypes.d.ts @@ -134,6 +134,12 @@ declare namespace ApiTypes { type Delete = { "id": number; // id }; + type Select = { + "asset_projects_id"?: number; // 所属项目id,[ref:asset_projects] + "asset_buildings_id"?: number; // 所属楼栋id,[ref:asset_buildings] + "asset_units_id"?: number; // 所属单元id,[ref:asset_units] + "keywords"?: string; // 关键词 + }; } namespace AssetProjects { type List = { diff --git a/src/gen/Apis.ts b/src/gen/Apis.ts index 84d4269..92b0ab0 100644 --- a/src/gen/Apis.ts +++ b/src/gen/Apis.ts @@ -75,6 +75,9 @@ export const Apis = { Delete(data: ApiTypes.Asset.AssetHouses.Delete): Promise { return request('admin/asset/asset_houses/delete', { data }); }, + Select(data?: ApiTypes.Asset.AssetHouses.Select): Promise { + return request('admin/asset/asset_houses/select', { data }); + }, }, AssetProjects: { List(data?: ApiTypes.Asset.AssetProjects.List): Promise { diff --git a/src/pages/archive/house_registers/index.tsx b/src/pages/archive/house_registers/index.tsx new file mode 100644 index 0000000..0b209fe --- /dev/null +++ b/src/pages/archive/house_registers/index.tsx @@ -0,0 +1,89 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { + HouseRegistersCustomerTypeEnum, + HouseRegistersHouseStatusEnum, + HouseRegistersStatusEnum, + HouseRegistersTypeEnum, + HouseRegistersUsagePlanEnum, +} from '@/gen/Enums'; +import { ProTable } from '@ant-design/pro-components'; +import { Space } from 'antd'; +import Create from './modals/Create'; +import Update from './modals/Update'; + +export default function Index({ title = '房屋登记' }) { + return ( + + + MyProTableProps.request( + params, + sort, + Apis.Archive.HouseRegisters.List, + ) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + MyColumns.ID(), + { + title: '房屋', + dataIndex: ['asset_house', 'full_name'], + }, + MyColumns.EnumTag({ + title: '类型', + dataIndex: 'type', + valueEnum: HouseRegistersTypeEnum, + }), + MyColumns.EnumTag({ + title: '状态', + dataIndex: 'status', + valueEnum: HouseRegistersStatusEnum, + }), + MyColumns.EnumTag({ + title: '房屋状态', + dataIndex: 'house_status', + valueEnum: HouseRegistersHouseStatusEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '使用计划', + dataIndex: 'usage_plan', + valueEnum: HouseRegistersUsagePlanEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '客户类型', + dataIndex: 'customer_type', + valueEnum: HouseRegistersCustomerTypeEnum, + search: false, + }), + MyColumns.CreatedAt(), + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + Apis.Archive.HouseRegisters.Delete({ id: item.id }).then( + () => action?.reload(), + ) + } + /> + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/archive/house_registers/modals/Create.tsx b/src/pages/archive/house_registers/modals/Create.tsx new file mode 100644 index 0000000..1c16833 --- /dev/null +++ b/src/pages/archive/house_registers/modals/Create.tsx @@ -0,0 +1,78 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { + HouseRegistersCustomerTypeEnum, + HouseRegistersHouseStatusEnum, + HouseRegistersStatusEnum, + HouseRegistersTypeEnum, + HouseRegistersUsagePlanEnum, +} from '@/gen/Enums'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { message } from 'antd'; + +export default function Create(props: MyBetaModalFormProps) { + return ( + + {...MyModalFormProps.props} + title={`添加${props.title}`} + wrapperCol={{ span: 24 }} + width="800px" + trigger={} + onFinish={async (values) => + Apis.Archive.HouseRegisters.Store(values) + .then(() => { + props.reload?.(); + message.success(props.title + '成功'); + return true; + }) + .catch(() => false) + } + columns={[ + Selects?.AssetHouses({ + title: '选择房屋', + key: 'asset_houses_id', + formItemProps: { ...rulesHelper.text }, + colProps: { span: 12 }, + }), + MyFormItems.EnumRadio({ + key: 'type', + title: '类型', + colProps: { span: 12 }, + valueEnum: HouseRegistersTypeEnum, + required: true, + }), + MyFormItems.EnumRadio({ + key: 'customer_type', + title: '客户类型', + colProps: { span: 12 }, + valueEnum: HouseRegistersCustomerTypeEnum, + }), + MyFormItems.EnumRadio({ + key: 'usage_plan', + title: '使用计划', + colProps: { span: 12 }, + valueEnum: HouseRegistersUsagePlanEnum, + }), + MyFormItems.EnumRadio({ + key: 'status', + title: '状态', + colProps: { span: 12 }, + valueEnum: HouseRegistersStatusEnum, + }), + MyFormItems.EnumRadio({ + key: 'house_status', + title: '房屋状态', + colProps: { span: 12 }, + valueEnum: HouseRegistersHouseStatusEnum, + }), + ]} + /> + ); +} diff --git a/src/pages/archive/house_registers/modals/Update.tsx b/src/pages/archive/house_registers/modals/Update.tsx new file mode 100644 index 0000000..c54deba --- /dev/null +++ b/src/pages/archive/house_registers/modals/Update.tsx @@ -0,0 +1,91 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; + +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { + HouseRegistersCustomerTypeEnum, + HouseRegistersHouseStatusEnum, + HouseRegistersStatusEnum, + HouseRegistersTypeEnum, + HouseRegistersUsagePlanEnum, +} from '@/gen/Enums'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { Form, message } from 'antd'; +export default function Update(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + return ( + + {...MyModalFormProps.props} + title={`编辑员工`} + trigger={} + wrapperCol={{ span: 24 }} + width="800px" + form={form} + onOpenChange={(open: any) => { + if (open && props.item) { + form.setFieldsValue({ + ...props.item, + roles_id: props.item?.roles?.map((item: any) => item.value), + }); + } + }} + onFinish={async (values) => + Apis.Archive.HouseRegisters.Update({ + ...values, + id: props.item?.id ?? 0, + }) + .then(() => { + props.reload?.(); + message.success(props.title + '成功'); + return true; + }) + .catch(() => false) + } + columns={[ + Selects?.AssetHouses({ + title: '选择房屋', + key: 'asset_houses_id', + formItemProps: { ...rulesHelper.text }, + colProps: { span: 8 }, + }), + MyFormItems.EnumRadio({ + key: 'type', + title: '类型', + colProps: { span: 12 }, + valueEnum: HouseRegistersTypeEnum, + required: true, + }), + MyFormItems.EnumRadio({ + key: 'customer_type', + title: '客户类型', + colProps: { span: 12 }, + valueEnum: HouseRegistersCustomerTypeEnum, + }), + MyFormItems.EnumRadio({ + key: 'usage_plan', + title: '使用计划', + colProps: { span: 12 }, + valueEnum: HouseRegistersUsagePlanEnum, + }), + MyFormItems.EnumRadio({ + key: 'status', + title: '状态', + colProps: { span: 12 }, + valueEnum: HouseRegistersStatusEnum, + }), + MyFormItems.EnumRadio({ + key: 'house_status', + title: '房屋状态', + colProps: { span: 12 }, + valueEnum: HouseRegistersHouseStatusEnum, + }), + ]} + /> + ); +}