Compare commits

..

3 Commits

Author SHA1 Message Date
4494bc0119 feat:增加房屋登记 2025-07-01 17:56:01 +08:00
aa49d82c16 Merge branch 'develop' of ssh://code.juyouwu.cn:2222/pay/pay-admin into develop
* 'develop' of ssh://code.juyouwu.cn:2222/pay/pay-admin:
  fix:岗位调整
2025-07-01 16:23:06 +08:00
3e9a7dfd0f fix:更新api 2025-07-01 16:22:53 +08:00
8 changed files with 456 additions and 0 deletions

View File

@ -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,
},
};
},
};

59
src/gen/ApiTypes.d.ts vendored
View File

@ -1,4 +1,57 @@
declare namespace ApiTypes {
namespace Archive {
namespace HouseOccupants {
type List = {
"asset_houses_id": number; // 资产房屋ID
"status"?: number; // 状态,[enum:HouseOccupantsStatusEnum]
};
type Show = {
"id": number; // id
};
}
namespace HouseRegisters {
type List = {
"house_name"?: string; // 模糊搜索:房屋名称
"type"?: string; // 类型,[enum:HouseRegistersTypeEnum]
"status"?: string; // 状态,[enum:HouseRegistersStatusEnum]
};
type Store = {
"asset_houses_id": number; // 房屋ID
"type": string; // 类型,[enum:HouseRegistersTypeEnum]
"status"?: string; // 状态,[enum:HouseRegistersStatusEnum]
"house_status"?: string; // 房屋状态,[enum:HouseRegistersHouseStatusEnum]
"usage_plan"?: string; // 使用计划,[enum:HouseRegistersUsagePlanEnum]
"customer_type"?: string; // 客户类型,[enum:HouseRegistersCustomerTypeEnum]
"customer_info"?: string[]; // 客户信息
};
type Update = {
"id": number; // id
"type": string; // 类型,[enum:HouseRegistersTypeEnum]
"status"?: string; // 状态,[enum:HouseRegistersStatusEnum]
"house_status"?: string; // 房屋状态,[enum:HouseRegistersHouseStatusEnum]
"usage_plan"?: string; // 使用计划,[enum:HouseRegistersUsagePlanEnum]
"customer_type"?: string; // 客户类型,[enum:HouseRegistersCustomerTypeEnum]
"customer_info"?: string[]; // 客户信息
};
type Show = {
"id": number; // id
};
type Audit = {
"id": number; // id
"status": string; // 状态Approved 通过、Rejected 拒绝
"reason"?: string; // 拒绝原因
};
type SoftDelete = {
"id": number; // id
};
type Restore = {
"id": number; // id
};
type Delete = {
"id": number; // id
};
}
}
namespace Asset {
namespace AssetBuildings {
type List = {
@ -81,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 = {

View File

@ -2,6 +2,42 @@ import { MyResponseType } from '@/common';
import { request } from '@umijs/max';
export const Apis = {
Archive: {
HouseOccupants: {
List(data: ApiTypes.Archive.HouseOccupants.List): Promise<MyResponseType> {
return request('admin/archive/house_occupants/list', { data });
},
Show(data: ApiTypes.Archive.HouseOccupants.Show): Promise<MyResponseType> {
return request('admin/archive/house_occupants/show', { data });
},
},
HouseRegisters: {
List(data?: ApiTypes.Archive.HouseRegisters.List): Promise<MyResponseType> {
return request('admin/archive/house_registers/list', { data });
},
Store(data: ApiTypes.Archive.HouseRegisters.Store): Promise<MyResponseType> {
return request('admin/archive/house_registers/store', { data });
},
Update(data: ApiTypes.Archive.HouseRegisters.Update): Promise<MyResponseType> {
return request('admin/archive/house_registers/update', { data });
},
Show(data: ApiTypes.Archive.HouseRegisters.Show): Promise<MyResponseType> {
return request('admin/archive/house_registers/show', { data });
},
Audit(data: ApiTypes.Archive.HouseRegisters.Audit): Promise<MyResponseType> {
return request('admin/archive/house_registers/audit', { data });
},
SoftDelete(data: ApiTypes.Archive.HouseRegisters.SoftDelete): Promise<MyResponseType> {
return request('admin/archive/house_registers/soft_delete', { data });
},
Restore(data: ApiTypes.Archive.HouseRegisters.Restore): Promise<MyResponseType> {
return request('admin/archive/house_registers/restore', { data });
},
Delete(data: ApiTypes.Archive.HouseRegisters.Delete): Promise<MyResponseType> {
return request('admin/archive/house_registers/delete', { data });
},
},
},
Asset: {
AssetBuildings: {
List(data?: ApiTypes.Asset.AssetBuildings.List): Promise<MyResponseType> {
@ -39,6 +75,9 @@ export const Apis = {
Delete(data: ApiTypes.Asset.AssetHouses.Delete): Promise<MyResponseType> {
return request('admin/asset/asset_houses/delete', { data });
},
Select(data?: ApiTypes.Asset.AssetHouses.Select): Promise<MyResponseType> {
return request('admin/asset/asset_houses/select', { data });
},
},
AssetProjects: {
List(data?: ApiTypes.Asset.AssetProjects.List): Promise<MyResponseType> {

View File

@ -108,6 +108,71 @@ export const CompanyReceiptAccountsPayChannelEnum= {
'TongLian': {"text":"通联支付","color":"#ff9f0a","value":"TongLian"},
};
// HouseOccupantsCardTypeEnum
export const HouseOccupantsCardTypeEnum= {
'MainlandID': {"text":"中国大陆居民身份证","color":"#2db7f5","value":"MainlandID"},
'HKPermit': {"text":"香港来往大陆通行证(回乡证)","color":"#fa8c16","value":"HKPermit"},
'MOPermit': {"text":"澳门来往大陆通行证(回乡证)","color":"#faad14","value":"MOPermit"},
'TWPermit': {"text":"台湾来往大陆通行证(台胞证)","color":"#87d068","value":"TWPermit"},
'Passport': {"text":"护照","color":"#108ee9","value":"Passport"},
'BusinessLicense': {"text":"营业执照","color":"#f5222d","value":"BusinessLicense"},
};
// HouseOccupantsHouseRelationEnum
export const HouseOccupantsHouseRelationEnum= {
'Owner': {"text":"产权人","color":"#2db7f5","value":"Owner"},
'Resident': {"text":"住户","color":"#87d068","value":"Resident"},
'Tenant': {"text":"租户","color":"#fa8c16","value":"Tenant"},
};
// HouseOccupantsRelationWithOwnerEnum
export const HouseOccupantsRelationWithOwnerEnum= {
'Value': {"text":"Label","color":"#ff0000","value":"Value"},
};
// HouseOccupantsStatusEnum
export const HouseOccupantsStatusEnum= {
'Normal': {"text":"正常","color":"#52c41a","value":"Normal"},
'Unbound': {"text":"已解除","color":"#f5222d","value":"Unbound"},
};
// HouseRegistersCustomerTypeEnum
export const HouseRegistersCustomerTypeEnum= {
'Individual': {"text":"个人客户","color":"#2db7f5","value":"Individual"},
'Enterprise': {"text":"普通企业","color":"#87d068","value":"Enterprise"},
'Developer': {"text":"开发企业","color":"#fa8c16","value":"Developer"},
'Government': {"text":"政府组织","color":"#f5222d","value":"Government"},
};
// HouseRegistersHouseStatusEnum
export const HouseRegistersHouseStatusEnum= {
'SelfOccupied': {"text":"自住","color":"#28a745","value":"SelfOccupied"},
'Rented': {"text":"出租","color":"#007bff","value":"Rented"},
'Vacant': {"text":"空置","color":"#dc3545","value":"Vacant"},
};
// HouseRegistersStatusEnum
export const HouseRegistersStatusEnum= {
'Pending': {"text":"待审","color":"#faad14","value":"Pending"},
'Approved': {"text":"已审","color":"#52c41a","value":"Approved"},
'Rejected': {"text":"驳回","color":"#f5222d","value":"Rejected"},
};
// HouseRegistersTypeEnum
export const HouseRegistersTypeEnum= {
'Delivery': {"text":"交付登记","color":"#2db7f5","value":"Delivery"},
'Transfer': {"text":"过户登记","color":"#87d068","value":"Transfer"},
'AddOccupant': {"text":"添加住户","color":"#108ee9","value":"AddOccupant"},
};
// HouseRegistersUsagePlanEnum
export const HouseRegistersUsagePlanEnum= {
'Permanent': {"text":"常住","color":"#52c41a","value":"Permanent"},
'Vacation': {"text":"度假","color":"#faad14","value":"Vacation"},
'Rental': {"text":"出租","color":"#2db7f5","value":"Rental"},
'Commercial': {"text":"商用","color":"#f5222d","value":"Commercial"},
};
// OrganizationsTypeEnum
export const OrganizationsTypeEnum= {
'Group': {"text":"集团","color":"#007bff","value":"Group"},

View File

@ -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 (
<MyPageContainer title={title}>
<ProTable
{...MyProTableProps.props}
// search={false}
request={async (params, sort) =>
MyProTableProps.request(
params,
sort,
Apis.Archive.HouseRegisters.List,
)
}
toolBarRender={(action) => [
<Create key="Create" reload={action?.reload} title={title} />,
]}
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) => (
<Space key={index}>
<Update item={item} reload={action?.reload} title={title} />
<MyButtons.Delete
onConfirm={() =>
Apis.Archive.HouseRegisters.Delete({ id: item.id }).then(
() => action?.reload(),
)
}
/>
</Space>
),
}),
]}
/>
</MyPageContainer>
);
}

View File

@ -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 (
<BetaSchemaForm<ApiTypes.Archive.HouseRegisters.Store>
{...MyModalFormProps.props}
title={`添加${props.title}`}
wrapperCol={{ span: 24 }}
width="800px"
trigger={<MyButtons.Create title={`添加${props.title}`} />}
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,
}),
]}
/>
);
}

View File

@ -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 (
<BetaSchemaForm<ApiTypes.Archive.HouseRegisters.Update>
{...MyModalFormProps.props}
title={`编辑员工`}
trigger={<MyButtons.Edit />}
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,
}),
]}
/>
);
}

View File

@ -30,6 +30,7 @@ export default function Index(props: MyBetaModalFormProps) {
title="员工"
/>,
]}
options={false}
columns={[
MyColumns.ID(),
{