From 50ef72bc802fd17a4a5ec7ef77f0fee4de6666bb Mon Sep 17 00:00:00 2001 From: uiuJun <> Date: Sun, 18 Jan 2026 18:48:42 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A2?= 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 | 43 ++ src/gen/Apis.ts | 34 ++ src/gen/Enums.ts | 11 +- src/pages/asset/grids/modals/GridUpdate.tsx | 2 +- src/pages/asset/parking_space/index.tsx | 40 +- .../parking_space/modals/SpaceCreate.tsx | 23 +- .../asset/parking_space/modals/SpaceShow.tsx | 95 ++++ .../parking_space/modals/SpaceUpdate.tsx | 18 + .../charge/standard/components/CarPortFee.tsx | 164 ++++++ .../charge/standard/components/ChargeInfo.tsx | 85 ++- .../charge/standard/components/HasCar.tsx | 111 ++++ .../charge/standard/components/Instrument.tsx | 2 +- src/pages/charge/standard/index.tsx | 6 + .../standard/modals/ChargeStandardHasCar.tsx | 174 ++++++ .../standard/modals/ChargeStandardUpdate.tsx | 7 +- .../standard/pages/CreateCarPortFee.tsx | 522 ++++++++++++++++++ .../standard/pages/CreateElectricityFee.tsx | 7 +- .../standard/pages/CreateMaintenanceFund.tsx | 7 +- .../standard/pages/CreatePropertyfee.tsx | 7 +- .../pages/CreateSharedElectricityFee.tsx | 7 +- .../standard/pages/CreateSharedWaterFee.tsx | 7 +- .../charge/standard/pages/CreateWaterFee.tsx | 7 +- src/pages/charge/standard/show/$id.tsx | 17 + src/pages/charge/tasks/modals/TaskCreate.tsx | 4 +- src/pages/meter/common_meter/index.tsx | 43 +- .../common_meter/modals/ChargingStandard.tsx | 2 +- src/pages/meter/house_meter/index.tsx | 27 +- .../house_meter/modals/ChargingStandard.tsx | 2 +- src/pages/meter/readings/table/HasHouse.tsx | 2 - 30 files changed, 1386 insertions(+), 124 deletions(-) create mode 100644 src/pages/asset/parking_space/modals/SpaceShow.tsx create mode 100644 src/pages/charge/standard/components/CarPortFee.tsx create mode 100644 src/pages/charge/standard/components/HasCar.tsx create mode 100644 src/pages/charge/standard/modals/ChargeStandardHasCar.tsx create mode 100644 src/pages/charge/standard/pages/CreateCarPortFee.tsx diff --git a/src/components/Select.tsx b/src/components/Select.tsx index d6e4854..d8bf8b5 100644 --- a/src/components/Select.tsx +++ b/src/components/Select.tsx @@ -445,7 +445,41 @@ export const Selects = { }, }; }, + //房屋全称 + AssetFullName(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.SelectFullName({ + keywords: params?.keyWords, + ...params, + }) + ).data, + ...rest, + fieldProps: { + showSearch: true, + placeholder: '请选择(支持关键字搜索)', + fieldNames: { + label: 'label', + value: 'value', + }, + ...rest?.fieldProps, + }, + }; + }, //获取广告位 GetBannerSpace(props?: PropsType): ReturnType { const { diff --git a/src/gen/ApiTypes.d.ts b/src/gen/ApiTypes.d.ts index 4b3a6bb..3a9f01c 100644 --- a/src/gen/ApiTypes.d.ts +++ b/src/gen/ApiTypes.d.ts @@ -324,6 +324,12 @@ declare namespace ApiTypes { "asset_units_id"?: number; // 所属单元id,[ref:asset_units] "keywords"?: string; // 关键词 }; + type SelectFullName = { + "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; // 关键词 + }; type Import = { "asset_projects_id": number; // 所属项目id,[ref:asset_projects] "upload_file": mimes:xlsx,xls; // 上传的文件 @@ -385,6 +391,25 @@ declare namespace ApiTypes { "keywords"?: string; // 关键词 }; } + namespace AssetProjectAdmins { + type List = { + "asset_projects_id"?: number; // 项目id,[ref:asset_projects] + "company_employees_id"?: number; // 员工id,[ref:company_employees] + "project_name"?: string; // 模糊搜索:名称 + "employee_name"?: string; // 模糊搜索:员工名称 + }; + type Store = { + "asset_projects_id": number; // 项目id,[ref:asset_projects] + "company_employees_id": number; // 员工id,[ref:company_employees] + "type": string; // 类型,[enum:HouseWorkOrdersTypeEnum] + }; + type Show = { + "id": number; // id + }; + type Delete = { + "id": number; // id + }; + } namespace AssetProjects { type List = { "id"?: number; // id @@ -944,6 +969,24 @@ declare namespace ApiTypes { } } namespace HouseCharge { + namespace HouseChargeHasCarPorts { + type List = { + "house_charge_standards_id": number; // 收费标准id,[ref:house_charge_standards] + }; + type Store = { + "house_charge_standards_id": number; // 收费标准id,[ref:house_charge_standards] + "car_ports_ids": string[]; // 车位id数组 + }; + type GetChargeStandardCarPortIds = { + "house_charge_standards_id": number; // 收费标准id,[ref:house_charge_standards] + }; + type Show = { + "id": number; // id + }; + type Delete = { + "id": number; // id + }; + } namespace HouseChargeHasHouses { type List = { "house_charge_standards_id": number; // 房屋收费标准id,[ref:house_charge_standards] diff --git a/src/gen/Apis.ts b/src/gen/Apis.ts index c92d79d..69ad63b 100644 --- a/src/gen/Apis.ts +++ b/src/gen/Apis.ts @@ -158,6 +158,9 @@ export const Apis = { Select(data?: ApiTypes.Asset.AssetHouses.Select): Promise { return request('company/asset/asset_houses/select', { data }); }, + SelectFullName(data?: ApiTypes.Asset.AssetHouses.SelectFullName): Promise { + return request('company/asset/asset_houses/select_full_name', { data }); + }, Import(data: ApiTypes.Asset.AssetHouses.Import): Promise { return request('company/asset/asset_houses/import', { data }); }, @@ -185,6 +188,20 @@ export const Apis = { return request('company/asset/asset_parking_places/select', { data }); }, }, + AssetProjectAdmins: { + List(data?: ApiTypes.Asset.AssetProjectAdmins.List): Promise { + return request('company/asset/asset_project_admins/list', { data }); + }, + Store(data: ApiTypes.Asset.AssetProjectAdmins.Store): Promise { + return request('company/asset/asset_project_admins/store', { data }); + }, + Show(data: ApiTypes.Asset.AssetProjectAdmins.Show): Promise { + return request('company/asset/asset_project_admins/show', { data }); + }, + Delete(data: ApiTypes.Asset.AssetProjectAdmins.Delete): Promise { + return request('company/asset/asset_project_admins/delete', { data }); + }, + }, AssetProjects: { List(data?: ApiTypes.Asset.AssetProjects.List): Promise { return request('company/asset/asset_projects/list', { data }); @@ -500,6 +517,23 @@ export const Apis = { }, }, HouseCharge: { + HouseChargeHasCarPorts: { + List(data: ApiTypes.HouseCharge.HouseChargeHasCarPorts.List): Promise { + return request('company/house_charge/house_charge_has_car_ports/list', { data }); + }, + Store(data: ApiTypes.HouseCharge.HouseChargeHasCarPorts.Store): Promise { + return request('company/house_charge/house_charge_has_car_ports/store', { data }); + }, + GetChargeStandardCarPortIds(data: ApiTypes.HouseCharge.HouseChargeHasCarPorts.GetChargeStandardCarPortIds): Promise { + return request('company/house_charge/house_charge_has_car_ports/get_charge_standard_car_port_ids', { data }); + }, + Show(data: ApiTypes.HouseCharge.HouseChargeHasCarPorts.Show): Promise { + return request('company/house_charge/house_charge_has_car_ports/show', { data }); + }, + Delete(data: ApiTypes.HouseCharge.HouseChargeHasCarPorts.Delete): Promise { + return request('company/house_charge/house_charge_has_car_ports/delete', { data }); + }, + }, HouseChargeHasHouses: { List(data: ApiTypes.HouseCharge.HouseChargeHasHouses.List): Promise { return request('company/house_charge/house_charge_has_houses/list', { data }); diff --git a/src/gen/Enums.ts b/src/gen/Enums.ts index b7d1d9f..00eb7c7 100644 --- a/src/gen/Enums.ts +++ b/src/gen/Enums.ts @@ -39,6 +39,7 @@ export const ApprovalRecordsStatusEnum = { Pending: { text: '待审批', color: '#ff9800', value: 'Pending' }, Approved: { text: '同意', color: '#4caf50', value: 'Approved' }, Rejected: { text: '拒绝', color: '#f44336', value: 'Rejected' }, + Transferred: { text: '转交', color: '#9c27b0', value: 'Transferred' }, }; // ApprovalTemplateNodesApproveTypeEnum @@ -559,7 +560,7 @@ export const BillsStatusEnum = { export const CacheTypeEnum = { MobilePhoneVerificationCode: { text: '手机验证码', - color: '#65806d', + color: '#d518aa', value: 'MobilePhoneVerificationCode', }, }; @@ -1014,6 +1015,7 @@ export const HouseBillsTypeEnum = { color: '#ec4899', value: 'SharedElectricityFee', }, + CarPortFee: { text: '车位费', color: '#f59e0b', value: 'CarPortFee' }, }; // HouseChargeStandardsApportionmentMethodEnum @@ -1080,6 +1082,7 @@ export const HouseChargeStandardsStatusEnum = { export const HouseChargeStandardsTypeEnum = { House: { text: '房屋', color: '#3b82f6', value: 'House' }, Meter: { text: '仪表', color: '#10b981', value: 'Meter' }, + CarPort: { text: '车位', color: '#f59e0b', value: 'CarPort' }, }; // HouseChargeTaskDetailsStatusEnum @@ -1089,6 +1092,12 @@ export const HouseChargeTaskDetailsStatusEnum = { Failed: { text: '失败', color: '#ef4444', value: 'Failed' }, }; +// HouseChargeTaskDetailsTargetTypeEnum +export const HouseChargeTaskDetailsTargetTypeEnum = { + House: { text: '房屋', color: '#3b82f6', value: 'House' }, + CarPort: { text: '车位', color: '#f59e0b', value: 'CarPort' }, +}; + // HouseChargeTasksStatusEnum export const HouseChargeTasksStatusEnum = { Pending: { text: '待执行', color: '#f59e0b', value: 'Pending' }, diff --git a/src/pages/asset/grids/modals/GridUpdate.tsx b/src/pages/asset/grids/modals/GridUpdate.tsx index a1757e2..af6cd09 100644 --- a/src/pages/asset/grids/modals/GridUpdate.tsx +++ b/src/pages/asset/grids/modals/GridUpdate.tsx @@ -21,7 +21,7 @@ export default function Update(props: MyBetaModalFormProps) { labelCol={{ span: 4 }} wrapperCol={{ span: 24 }} labelAlign="right" - trigger={} + trigger={} form={form} key={new Date().getTime()} onOpenChange={(open: any) => { diff --git a/src/pages/asset/parking_space/index.tsx b/src/pages/asset/parking_space/index.tsx index 1f2be7b..9691a65 100644 --- a/src/pages/asset/parking_space/index.tsx +++ b/src/pages/asset/parking_space/index.tsx @@ -5,6 +5,7 @@ import { MyProTableProps, useCurrentPermissions, } from '@/common'; +import { MyExport } from '@/components/MyExport'; import { Selects } from '@/components/Select'; import { Apis } from '@/gen/Apis'; import { @@ -14,9 +15,13 @@ import { } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; +import { useState } from 'react'; + +import SpaceShow from './modals/SpaceShow'; import SpaceUpdate from './modals/SpaceUpdate'; export default function Index({ title = '车位列表' }) { + const [getParams, setParams] = useState({ page: 1 }); const getCurrentPermissions = useCurrentPermissions(); let tableRender = (item: any, action: any) => { return getCurrentPermissions({ @@ -44,11 +49,22 @@ export default function Index({ title = '车位列表' }) { headerTitle="车位列表" tooltip="车位列表的信息管理,请在【项目列表】的【配置】中进行操作" request={async (params, sort) => - MyProTableProps.request(params, sort, Apis.Asset.AssetCarPorts.List) + MyProTableProps.request( + params, + sort, + Apis.Asset.AssetCarPorts.List, + setParams, + ) } - // toolBarRender={(action) => [ - // , - // ]} + toolBarRender={(action) => [ + , + // , + ]} columns={[ MyColumns.ID({ search: false }), Selects?.AssetProjects({ @@ -59,11 +75,12 @@ export default function Index({ title = '车位列表' }) { { title: '项目名称', dataIndex: ['asset_project', 'name'], - search: { - transform: (value) => { - return { project_name: value }; - }, - }, + // search: { + // transform: (value) => { + // return { project_name: value }; + // }, + // }, + search: false, }, { title: '车场名称', @@ -106,7 +123,10 @@ export default function Index({ title = '车位列表' }) { MyColumns.CreatedAt(), MyColumns.Option({ render: (_, item: any, index, action) => ( - {tableRender(item, action)} + + + {tableRender(item, action)} + ), }), ]} diff --git a/src/pages/asset/parking_space/modals/SpaceCreate.tsx b/src/pages/asset/parking_space/modals/SpaceCreate.tsx index b025a5f..e0d9d7f 100644 --- a/src/pages/asset/parking_space/modals/SpaceCreate.tsx +++ b/src/pages/asset/parking_space/modals/SpaceCreate.tsx @@ -5,6 +5,7 @@ import { MyModalFormProps, rulesHelper, } from '@/common'; +import { Selects } from '@/components/Select'; import { Apis } from '@/gen/Apis'; import { AssetCarPortsPropertyTypeEnum, @@ -14,7 +15,7 @@ import { import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; -export default function Create(props: MyBetaModalFormProps) { +export default function SpaceCreate(props: MyBetaModalFormProps) { const [form] = Form.useForm(); return ( @@ -60,6 +61,7 @@ export default function Create(props: MyBetaModalFormProps) { title: '建筑面积', valueType: 'digit', colProps: { span: 24 }, + formItemProps: { ...rulesHelper.number }, fieldProps: { addonAfter: 'm²', }, @@ -83,7 +85,24 @@ export default function Create(props: MyBetaModalFormProps) { valueEnum: AssetCarPortsStatusEnum, required: true, }), - + { + key: 'owner_name', + title: '业主姓名', + colProps: { span: 24 }, + }, + { + key: 'owner_phone', + title: '业主手机号', + colProps: { span: 24 }, + }, + Selects?.AssetFullName({ + key: 'asset_houses_id', + params: { + asset_projects_id: props?.item?.asset_projects_id, + }, + title: '关联房屋', + colProps: { span: 24 }, + }), { key: 'remark', title: '备注', diff --git a/src/pages/asset/parking_space/modals/SpaceShow.tsx b/src/pages/asset/parking_space/modals/SpaceShow.tsx new file mode 100644 index 0000000..b005d25 --- /dev/null +++ b/src/pages/asset/parking_space/modals/SpaceShow.tsx @@ -0,0 +1,95 @@ +import { MyBetaModalFormProps, MyButtons, renderTextHelper } from '@/common'; +import { MyModal } from '@/components/MyModal'; +import { Apis } from '@/gen/Apis'; +import { + AssetCarPortsPropertyTypeEnum, + AssetCarPortsStatusEnum, + AssetCarPortsTypeEnum, +} from '@/gen/Enums'; +import { ProCard, ProDescriptions } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { Space, Spin } from 'antd'; +import { useState } from 'react'; + +export default function SpaceShow(props: MyBetaModalFormProps) { + const [loading, setLoading] = useState(true); + const [data, setData] = useState({}); + const navigate = useNavigate(); + + return ( + { + if (props?.item?.id) { + setLoading(true); + Apis.Asset.AssetCarPorts.Show({ id: props.item.id }) + .then((res) => { + setData(res?.data || {}); + }) + .finally(() => { + setLoading(false); + }); + } + }} + node={ + + + + + + {data?.name} + + + {data?.built_area} m² + + + + + + + + + + + + {data?.owner_name || '-'} + + + {data?.owner_phone || '-'} + + + {data?.asset_houses_id ? ( + { + navigate( + `/customer/archive/show/${data?.asset_houses_id}`, + ); + }} + /> + ) : ( + '无' + )} + + + + {data?.remark || '-'} + + + + + + } + /> + ); +} diff --git a/src/pages/asset/parking_space/modals/SpaceUpdate.tsx b/src/pages/asset/parking_space/modals/SpaceUpdate.tsx index 0b78e46..ca36d3a 100644 --- a/src/pages/asset/parking_space/modals/SpaceUpdate.tsx +++ b/src/pages/asset/parking_space/modals/SpaceUpdate.tsx @@ -5,6 +5,7 @@ import { MyModalFormProps, rulesHelper, } from '@/common'; +import { Selects } from '@/components/Select'; import { Apis } from '@/gen/Apis'; import { AssetCarPortsPropertyTypeEnum, @@ -59,6 +60,7 @@ export default function Update(props: MyBetaModalFormProps) { title: '建筑面积', valueType: 'digit', colProps: { span: 24 }, + formItemProps: { ...rulesHelper.number }, fieldProps: { addonAfter: 'm²', }, @@ -82,6 +84,22 @@ export default function Update(props: MyBetaModalFormProps) { valueEnum: AssetCarPortsStatusEnum, required: true, }), + { + key: 'owner_name', + title: '业主姓名', + colProps: { span: 24 }, + }, + { + key: 'owner_phone', + title: '业主手机号', + colProps: { span: 24 }, + }, + Selects?.AssetFullName({ + key: 'asset_houses_id', + params: { + asset_projects_id: props?.item?.asset_projects_id, + }, + }), { key: 'remark', title: '备注', diff --git a/src/pages/charge/standard/components/CarPortFee.tsx b/src/pages/charge/standard/components/CarPortFee.tsx new file mode 100644 index 0000000..f979631 --- /dev/null +++ b/src/pages/charge/standard/components/CarPortFee.tsx @@ -0,0 +1,164 @@ +import { MyButtons, MyColumns, MyProTableProps } from '@/common'; +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { + HouseBillsTypeEnum, + HouseChargeStandardsCalculationMethodEnum, + HouseChargeStandardsCalculationModeEnum, + HouseChargeStandardsCalculationPeriodEnum, + HouseChargeStandardsPriceAlgorithmEnum, +} from '@/gen/Enums'; +import { ProTable } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { Space } from 'antd'; +import ChargeStandardHasCar from '../modals/ChargeStandardHasCar'; +import ChargeStandardUpdate from '../modals/ChargeStandardUpdate'; +import ChargingStandard from '../modals/ChargingStandard'; +import CreateCarPortFee from '../pages/CreateCarPortFee'; + +export default function Index({ title = '车位管理费标准' }) { + const navigate = useNavigate(); + + return ( + + MyProTableProps.request( + { + ...params, + charge_type: HouseBillsTypeEnum.CarPortFee.value, + }, + sort, + Apis.HouseCharge.HouseChargeStandards.List, + ) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + MyColumns.ID({ search: false }), + Selects?.AssetProjects({ + title: '选择项目', + key: 'asset_projects_id', + hidden: true, + }), + { + title: '关联项目', + dataIndex: ['asset_project', 'name'], + // search: { + // transform: (value) => { + // return { project_name: value }; + // }, + // }, + search: false, + }, + { + title: '收费名称', + dataIndex: 'name', + search: false, + render: (_, item: any) => { + return ; + }, + }, + { + title: '绑定车位', + dataIndex: 'house_charge_has_houses_count', + search: false, + }, + MyColumns.EnumTag({ + title: '收费项', + dataIndex: 'charge_type', + valueEnum: HouseBillsTypeEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '计量单位', + dataIndex: 'calculation_method', + valueEnum: HouseChargeStandardsCalculationMethodEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '计费模式', + dataIndex: 'calculation_mode', + valueEnum: HouseChargeStandardsCalculationModeEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '计费算法', + dataIndex: 'price_algorithm', + valueEnum: HouseChargeStandardsPriceAlgorithmEnum, + search: false, + }), + { + title: '价格', + dataIndex: 'price', + search: false, + render(_, record) { + if (record?.price_algorithm === 'Fixed') { + return record?.price; + } else { + return ( +
+ {record?.tiered_rates?.map((rate: any, index: number) => ( +
+ {rate?.min_quantity} - {rate?.max_quantity} :{rate?.price} +
+ ))} +
+ ); + } + }, + }, + MyColumns.EnumTag({ + title: '账单计费周期', + dataIndex: 'calculation_period', + valueEnum: HouseChargeStandardsCalculationPeriodEnum, + search: false, + }), + { + title: '账单自动生成日期', + dataIndex: 'auto_date', + search: false, + }, + { + title: '是否公摊', + dataIndex: 'is_apportionment', + search: false, + render(_, record) { + return `${record?.is_apportionment ? '是' : '否'} `; + }, + }, + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + { + navigate(`/charge/standard/show/${item.id}?type=Car`); + }} + /> + + + + Apis.HouseCharge.HouseChargeStandards.Delete({ + id: item.id, + }).then(() => action?.reload()) + } + /> + + ), + }), + ]} + /> + ); +} diff --git a/src/pages/charge/standard/components/ChargeInfo.tsx b/src/pages/charge/standard/components/ChargeInfo.tsx index 4766f23..1f0a224 100644 --- a/src/pages/charge/standard/components/ChargeInfo.tsx +++ b/src/pages/charge/standard/components/ChargeInfo.tsx @@ -1,49 +1,108 @@ import { MyBetaModalFormProps, renderTextHelper } from '@/common'; import { HouseBillsTypeEnum, + HouseChargeStandardsApportionmentMethodEnum, + HouseChargeStandardsCalculationMethodEnum, HouseChargeStandardsCalculationModeEnum, HouseChargeStandardsCalculationPeriodEnum, + HouseChargeStandardsPriceAlgorithmEnum, } from '@/gen/Enums'; import { ProCard, ProDescriptions } from '@ant-design/pro-components'; import { Space } from 'antd'; -export default function info(props: MyBetaModalFormProps) { +export default function ChargeInfo(props: MyBetaModalFormProps) { const { item } = props; return ( - - - {item?.asset_project?.name} - + {item?.name} - - + + {item?.asset_project?.name || '-'} + + + + + {item?.company_receipt_account?.company_bank}: + {item?.company_receipt_account?.company_account} + + {item?.apportionment_method ? ( + + + + ) : ( + '' + )} + + {item?.is_apportionment ? '是' : '否'} + + + - + + + + + ¥{item?.price}元 + + {item?.calculation_method !== 'PerUnit' ? ( + + + {item?.tiered_rates?.map((rate: any, index: number) => ( +
+ 阶梯范围:{rate?.min_quantity}-{rate?.max_quantity}{' '} + 阶梯单价:¥{rate?.price}元 +
+ ))} +
+
+ ) : ( + '' + )} + - - + + {item?.auto_date} + + {item?.has_late_fee ? ( + + +
有滞纳金:{item?.has_late_fee ? '是' : '否'}
+
起算天数:生成账单后{item?.late_fee_start_days}天
+
收取费率:每日{item?.late_fee_rate}%
+
封顶天数:最多{item?.late_fee_cap_days}天
+
+
+ ) : ( + '' + )} + {item?.remark}
diff --git a/src/pages/charge/standard/components/HasCar.tsx b/src/pages/charge/standard/components/HasCar.tsx new file mode 100644 index 0000000..1b10c8e --- /dev/null +++ b/src/pages/charge/standard/components/HasCar.tsx @@ -0,0 +1,111 @@ +import { MyButtons, MyColumns, MyProTableProps } from '@/common'; +import { Apis } from '@/gen/Apis'; + +import { + AssetCarPortsPropertyTypeEnum, + AssetCarPortsStatusEnum, + AssetCarPortsTypeEnum, +} from '@/gen/Enums'; +import { ProTable } from '@ant-design/pro-components'; +import { Space } from 'antd'; +import { useEffect, useRef } from 'react'; +import ChargeStandardHasCar from '../modals/ChargeStandardHasCar'; + +export default function Index({ ...rest }) { + const actionLooks = useRef(); + useEffect(() => { + actionLooks?.current.reloadAndRest(); + }, [rest.loadmore]); + + return ( + <> + > + {...MyProTableProps.props} + actionRef={actionLooks} + request={async (params, sort) => + MyProTableProps.request( + { + ...params, + house_charge_standards_id: rest.item?.house_charge_has_houses_id, + }, + sort, + Apis.HouseCharge.HouseChargeHasCarPorts.List, + ) + } + toolBarRender={(action) => [ + , + ]} + search={false} + columns={[ + // MyColumns.ID({ + // search: false, + // }), + { + title: '车场名称', + dataIndex: ['asset_parking_place', 'name'], + search: { + transform: (value) => { + return { parking_place_name: value }; + }, + }, + }, + { + title: '车位号', + dataIndex: ['asset_car_port', 'name'], + search: false, + }, + // { + // title: '车位全称', + // dataIndex: ['asset_car_port', 'full_name'], + // }, + { + title: '建筑面积', + dataIndex: ['asset_car_port', 'built_area'], + search: false, + }, + MyColumns.EnumTag({ + title: '类型', + dataIndex: ['asset_car_port', 'type'], + valueEnum: AssetCarPortsTypeEnum, + }), + MyColumns.EnumTag({ + title: '产权类型', + dataIndex: ['asset_car_port', 'property_type'], + valueEnum: AssetCarPortsPropertyTypeEnum, + }), + MyColumns.EnumTag({ + title: '状态', + dataIndex: ['asset_car_port', 'status'], + valueEnum: AssetCarPortsStatusEnum, + }), + { + title: '绑定时间', + dataIndex: 'updated_at', + search: false, + }, + MyColumns.Option({ + width: 80, + render: (_, item: any, index, action) => ( + + + Apis.HouseCharge.HouseChargeHasCarPorts.Delete({ + id: item.id, + }).then(() => action?.reload()) + } + /> + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/charge/standard/components/Instrument.tsx b/src/pages/charge/standard/components/Instrument.tsx index 1ec4c6a..5b9bd3a 100644 --- a/src/pages/charge/standard/components/Instrument.tsx +++ b/src/pages/charge/standard/components/Instrument.tsx @@ -40,7 +40,7 @@ export default function Index(props: MyBetaModalFormProps) { { - navigate(`/instrument/readings/show/${item.id}`); + navigate(`/meter/readings/show/${item.id}`); }} /> ), diff --git a/src/pages/charge/standard/index.tsx b/src/pages/charge/standard/index.tsx index 10e6751..e52fdcb 100644 --- a/src/pages/charge/standard/index.tsx +++ b/src/pages/charge/standard/index.tsx @@ -1,5 +1,6 @@ import { MyPageContainer } from '@/common'; import { Tabs } from 'antd'; +import CarPortFee from './components/CarPortFee'; import ElectricityFee from './components/ElectricityFee'; import MaintenanceFund from './components/MaintenanceFund'; import PropertyFee from './components/PropertyFee'; @@ -39,6 +40,11 @@ export default function Index({ title = '收费标准配置' }) { label: '维修基金', children: , }, + { + key: 'CarPortFee', + label: '车位管理费', + children: , + }, ]; return ( diff --git a/src/pages/charge/standard/modals/ChargeStandardHasCar.tsx b/src/pages/charge/standard/modals/ChargeStandardHasCar.tsx new file mode 100644 index 0000000..5fae263 --- /dev/null +++ b/src/pages/charge/standard/modals/ChargeStandardHasCar.tsx @@ -0,0 +1,174 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyColumns, + MyProTableProps, +} from '@/common'; +import { MyModal } from '@/components/MyModal'; + +import { Apis } from '@/gen/Apis'; +import { + AssetCarPortsPropertyTypeEnum, + AssetCarPortsStatusEnum, + AssetCarPortsTypeEnum, +} from '@/gen/Enums'; +import { ProTable } from '@ant-design/pro-components'; +import { message, Space } from 'antd'; +import { useRef, useState } from 'react'; + +export default function ChargeStandardHasHouse(props: MyBetaModalFormProps) { + // 使用 useState 保存选中的房屋 ID 和行数据,确保跨页选中状态保持 + const [selectedHousesIds, setSelectedHousesIds] = useState([]); + const [selectedRows, setSelectedRows] = useState([]); + + // 添加 tableRef 用于操作表格 + const tableRef = useRef(); + + const onShowContactPhone = () => { + if (selectedRows.length === 0) { + message.warning('请至少选择一个车位'); + return; + } + + // 确保 houses_ids 是字符串数组 + const carPortsIds = selectedRows.map((row) => String(row.id)); + + Apis.HouseCharge.HouseChargeHasCarPorts.Store({ + house_charge_standards_id: props?.item?.id ?? 0, + car_ports_ids: carPortsIds, + }) + .then(() => { + // 成功后重置选中状态 + setSelectedHousesIds([]); + setSelectedRows([]); + props.reload?.(); + message.success('绑车位成功!'); + }) + .catch((error) => { + console.error('绑车位失败:', error); + message.error('绑车位失败: ' + (error.message || '未知错误')); + return false; + }); + }; + + return ( + + MyProTableProps.request( + { + ...params, + asset_projects_id: props?.item?.asset_projects_id, + }, + sort, + Apis.Asset.AssetCarPorts.List, + undefined, + (res) => { + // 确保响应数据正确处理 + console.log('加载房屋数据:', res); + return res; + }, + ) + } + style={{ + padding: '20px', + height: '680px', + overflowY: 'auto', + overflowX: 'hidden', + }} + pagination={{ + showQuickJumper: true, + // pageSizeOptions: [10, 20, 50, 100, 200, 500, 1000, 2000], + }} + rowSelection={{ + type: 'checkbox', + preserveSelectedRowKeys: true, // 启用跨页选择 + selectedRowKeys: selectedHousesIds, + onChange: (selectedRowKeys, selectedRows) => { + // 确保 selectedRowKeys 是数字类型 + const numericKeys = selectedRowKeys.map((key) => + typeof key === 'string' ? parseInt(key, 10) : key, + ) as number[]; + + // 更新选中状态 + setSelectedHousesIds(numericKeys); + + // 合并当前页面选中的行和之前选中的行 + const newSelectedRows = [...selectedRows]; + + // 设置选中行数据 + setSelectedRows(newSelectedRows); + }, + }} + tableAlertOptionRender={({ selectedRowKeys, onCleanSelected }) => { + return ( + + 已选 {selectedRowKeys.length} 项 + 清空 + onShowContactPhone()} + /> + + ); + }} + options={false} + columns={[ + { + title: '项目名称', + dataIndex: ['asset_project', 'name'], + search: false, + }, + { + title: '车场名称', + dataIndex: ['asset_parking_place', 'name'], + search: { + transform: (value) => { + return { parking_place_name: value }; + }, + }, + }, + { + title: '车位号', + dataIndex: 'name', + search: false, + }, + { + title: '车位全称', + dataIndex: 'full_name', + }, + { + title: '建筑面积', + dataIndex: 'built_area', + search: false, + }, + MyColumns.EnumTag({ + title: '类型', + dataIndex: 'type', + valueEnum: AssetCarPortsTypeEnum, + }), + MyColumns.EnumTag({ + title: '产权类型', + dataIndex: 'property_type', + valueEnum: AssetCarPortsPropertyTypeEnum, + }), + MyColumns.EnumTag({ + title: '状态', + dataIndex: 'status', + valueEnum: AssetCarPortsStatusEnum, + }), + ]} + /> + } + /> + ); +} diff --git a/src/pages/charge/standard/modals/ChargeStandardUpdate.tsx b/src/pages/charge/standard/modals/ChargeStandardUpdate.tsx index 109a644..2ea2ad7 100644 --- a/src/pages/charge/standard/modals/ChargeStandardUpdate.tsx +++ b/src/pages/charge/standard/modals/ChargeStandardUpdate.tsx @@ -14,7 +14,6 @@ import { HouseChargeStandardsCalculationModeEnum, HouseChargeStandardsCalculationPeriodEnum, HouseChargeStandardsPriceAlgorithmEnum, - HouseChargeStandardsTypeEnum, } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -51,11 +50,7 @@ export default function Update(props: MyBetaModalFormProps) { ...values, charge_type: props?.item?.charge_type, asset_projects_id: props?.item?.asset_projects_id, - type: - values.charge_type === HouseBillsTypeEnum.PropertyFee.value || - values.charge_type === HouseBillsTypeEnum.MaintenanceFund.value - ? HouseChargeStandardsTypeEnum.House.value - : HouseChargeStandardsTypeEnum.Meter.value, + type: props?.item?.type, is_apportionment: values.charge_type === HouseBillsTypeEnum.SharedWaterFee.value || values.charge_type === HouseBillsTypeEnum.SharedElectricityFee.value diff --git a/src/pages/charge/standard/pages/CreateCarPortFee.tsx b/src/pages/charge/standard/pages/CreateCarPortFee.tsx new file mode 100644 index 0000000..d65bf92 --- /dev/null +++ b/src/pages/charge/standard/pages/CreateCarPortFee.tsx @@ -0,0 +1,522 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { + HouseBillsTypeEnum, + HouseChargeStandardsCalculationMethodEnum, + HouseChargeStandardsCalculationModeEnum, + HouseChargeStandardsCalculationPeriodEnum, + HouseChargeStandardsPriceAlgorithmEnum, +} from '@/gen/Enums'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { Form, message } from 'antd'; +import { useRef } from 'react'; + +export default function CreatePropertyFee(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + const actionRef = useRef(); + + return ( + + {...MyModalFormProps.props} + form={form} + title={`新增车位管理费标准`} + // wrapperCol={{ span: 24 }} + // 基础表单 + layout="horizontal" + labelCol={{ span: 5 }} + wrapperCol={{ span: 19 }} + labelAlign="left" + width="680px" + trigger={} + key={new Date().getTime()} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + } + }} + onFinish={async (values: any) => + Apis.HouseCharge.HouseChargeStandards.Store({ + ...values, + charge_type: HouseBillsTypeEnum.CarPortFee.value, + type: 'House', + is_apportionment: + values.charge_type === HouseBillsTypeEnum.SharedWaterFee.value || + values.charge_type === HouseBillsTypeEnum.SharedElectricityFee.value + ? 1 + : 0, + // 按套 + calculation_mode: + values?.calculation_method === + HouseChargeStandardsCalculationMethodEnum.PerUnit.value + ? HouseChargeStandardsCalculationModeEnum.FixedAmount.value + : values?.calculation_mode, + // 按固定金额 + price_algorithm: + values?.calculation_mode === + HouseChargeStandardsCalculationModeEnum.FixedAmount.value || + values?.calculation_method === + HouseChargeStandardsCalculationMethodEnum.PerUnit.value + ? HouseChargeStandardsPriceAlgorithmEnum.Fixed.value + : values?.price_algorithm, + tiered_rates: values.tiered_rates?.map((res: any) => { + return { + ...res, + }; + }), + // 避免计费模式切换导致的价格异常 + price: + values?.price_algorithm === + HouseChargeStandardsPriceAlgorithmEnum.Fixed.value || + values?.calculation_mode === + HouseChargeStandardsCalculationModeEnum.FixedAmount.value + ? values.price + : 0, + late_fee_rate: values.has_late_fee || '', + late_fee_start_days: values.has_late_fee || '', + late_fee_cap_days: values.has_late_fee || '', + }) + .then(() => { + props.reload?.(); + message.success('车位管理费标准创建成功'); + return true; + }) + .catch(() => false) + } + columns={[ + Selects?.AssetProjects({ + key: 'asset_projects_id', + title: '选择项目', + colProps: { span: 24 }, + required: true, + fieldProps: { + onChange: () => { + // 切换计量单位时清空计费模式 + form.setFieldValue('company_receipt_accounts_id', undefined); + }, + }, + }), + { + key: 'name', + title: '收费标准名称', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }, + { + valueType: 'dependency', + name: ['asset_projects_id'], + columns: ({ asset_projects_id }) => { + return [ + Selects?.ProjectAccounts({ + title: '项目收款账户', + key: 'company_receipt_accounts_id', + params: { + asset_projects_id: asset_projects_id, + }, + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }), + ]; + }, + }, + MyFormItems.EnumRadio({ + key: 'calculation_method', + title: '计量单位', + colProps: { span: 24 }, + valueEnum: () => { + let obj: any = JSON.parse( + JSON.stringify(HouseChargeStandardsCalculationMethodEnum), + ); + delete obj.ElectricityUsage; + delete obj.WaterUsage; + return obj; + }, + required: true, + fieldProps: { + buttonStyle: 'solid', + onChange: () => { + // 切换计量单位时清空计费模式 + form.setFieldValue('calculation_mode', undefined); + form.setFieldValue('price', undefined); + form.setFieldValue('price_algorithm', undefined); + }, + }, + }), + + { + name: ['calculation_method'], + valueType: 'dependency', + columns: ({ calculation_method }: any) => { + return calculation_method === + HouseChargeStandardsCalculationMethodEnum.PerUnit.value + ? [ + { + key: 'price', + title: '固定单价', + colProps: { span: 24 }, + fieldProps: { + addonAfter: '元', + }, + formItemProps: { ...rulesHelper.number }, + }, + ] + : !calculation_method && + calculation_method !== + HouseChargeStandardsCalculationMethodEnum.PerUnit.value + ? [] + : [ + MyFormItems.EnumRadio({ + key: 'calculation_mode', + title: '计费模式', + colProps: { span: 24 }, + // valueEnum: HouseChargeStandardsCalculationModeEnum, + valueEnum: () => { + let obj: any = JSON.parse( + JSON.stringify(HouseChargeStandardsCalculationModeEnum), + ); + delete obj.FixedAmount; + return obj; + }, + required: true, + }), + ]; + }, + }, + + { + name: ['calculation_mode'], + valueType: 'dependency', + columns: ({ calculation_mode }: any) => { + return calculation_mode === + HouseChargeStandardsCalculationModeEnum.FixedAmount.value + ? [ + { + key: 'price', + title: '固定单价', + colProps: { span: 24 }, + fieldProps: { + addonAfter: '元', + }, + formItemProps: { ...rulesHelper.number }, + }, + ] + : calculation_mode === + HouseChargeStandardsCalculationModeEnum.QuantityPrice.value + ? [ + MyFormItems.EnumRadio({ + key: 'price_algorithm', + title: '计费算法', + colProps: { span: 24 }, + valueEnum: HouseChargeStandardsPriceAlgorithmEnum, + required: true, + fieldProps: { + buttonStyle: 'solid', + onChange: () => { + // 切换计费算法时清空阶梯配置 + form.setFieldValue('price', undefined); + form.setFieldValue('tiered_rates', undefined); + }, + }, + }), + { + name: ['price_algorithm'], + valueType: 'dependency', + columns: ({ price_algorithm }: any) => { + return price_algorithm === + HouseChargeStandardsPriceAlgorithmEnum.Fixed.value + ? [ + { + key: 'price', + title: '固定单价', + valueType: 'digit', + colProps: { span: 24 }, + fieldProps: { + addonAfter: '元', + max: 99, + }, + formItemProps: { ...rulesHelper.number }, + }, + ] + : price_algorithm === + HouseChargeStandardsPriceAlgorithmEnum.Tiered.value + ? [ + { + valueType: 'formList', + dataIndex: 'tiered_rates', + title: '阶梯标准', + formItemProps: { ...rulesHelper.array }, + initialValue: [ + { + min_quantity: 0, + max_quantity: null, + price: null, + }, + ], + fieldProps: { + actionRef: actionRef, + copyIconProps: false, + // deleteIconProps: false, + }, + columns: [ + { + valueType: 'group', + colProps: { span: 24 }, + columns: [ + { + key: 'min_quantity', + colProps: { span: 9 }, + // title: '起始值', + valueType: 'digit', + fieldProps: { + min: 0, + addonBefore: '阶梯范围', + placeholder: '起始值', + }, + width: '100%', + formItemProps: { + ...rulesHelper.number, + }, + }, + { + key: 'max_quantity', + colProps: { span: 5 }, + // title: '结束值', + valueType: 'digit', + width: '100%', + formItemProps: { + ...rulesHelper.number, + }, + fieldProps: { + min: 0, + max: 999, + placeholder: '结束值', + }, + }, + { + key: 'price', + colProps: { span: 10 }, + // title: '阶梯单价', + valueType: 'digit', + fieldProps: { + addonBefore: '阶梯单价', + addonAfter: '元', + min: 0, + max: 999, + }, + formItemProps: { + ...rulesHelper.number, + }, + }, + ], + }, + ], + }, + ] + : price_algorithm === + HouseChargeStandardsPriceAlgorithmEnum.Peak.value + ? [ + { + valueType: 'formList', + dataIndex: 'tiered_rates', + title: '阶梯标准', + formItemProps: { ...rulesHelper.array }, + initialValue: [ + { + min_quantity: 0, + max_quantity: null, + price: null, + }, + ], + fieldProps: { + actionRef: actionRef, + copyIconProps: false, + // deleteIconProps: false, + }, + columns: [ + { + valueType: 'group', + colProps: { span: 24 }, + columns: [ + { + key: 'min_quantity', + colProps: { span: 9 }, + // title: '起始值', + valueType: 'digit', + fieldProps: { + min: 0, + addonBefore: '阶梯范围', + placeholder: '起始值', + }, + width: '100%', + formItemProps: { + ...rulesHelper.number, + }, + }, + { + key: 'max_quantity', + colProps: { span: 5 }, + // title: '结束值', + valueType: 'digit', + width: '100%', + formItemProps: { + ...rulesHelper.number, + }, + fieldProps: { + min: 0, + max: 999, + placeholder: '结束值', + }, + }, + { + key: 'price', + colProps: { span: 10 }, + // title: '阶梯单价', + valueType: 'digit', + fieldProps: { + addonBefore: '阶梯单价', + addonAfter: '元', + min: 0, + max: 999, + }, + formItemProps: { + ...rulesHelper.number, + }, + }, + ], + }, + ], + }, + ] + : []; + }, + }, + ] + : []; + }, + }, + { + name: ['price', 'price_algorithm'], + valueType: 'dependency', + columns: ({ price, price_algorithm }: any) => { + return price || + price_algorithm === + HouseChargeStandardsPriceAlgorithmEnum.Tiered.value || + price_algorithm === + HouseChargeStandardsPriceAlgorithmEnum.Peak.value + ? [ + { + valueType: 'group', + columns: [ + MyFormItems.EnumRadio({ + key: 'calculation_period', + title: '计费周期', + colProps: { span: 24 }, + valueEnum: HouseChargeStandardsCalculationPeriodEnum, + required: true, + }), + { + key: 'auto_date', + title: '生成日期', + colProps: { span: 24 }, + tooltip: '系统将按该设置日期自动生成第一期的账单', + valueType: 'date', + width: '100%', + formItemProps: { ...rulesHelper.text }, + }, + { + key: 'has_late_fee', + title: '启用滞纳金', + colProps: { span: 24 }, + valueType: 'switch', + width: '100%', + fieldProps: { + onChange: () => { + // 切换计费算法时清空阶梯配置 + form.setFieldValue( + 'late_fee_start_days', + undefined, + ); + form.setFieldValue('late_fee_rate', undefined); + form.setFieldValue('late_fee_cap_days', undefined); + }, + }, + }, + { + name: ['has_late_fee'], + valueType: 'dependency', + columns: ({ has_late_fee }: any) => { + return has_late_fee + ? [ + { + key: 'late_fee_start_days', + title: '滞纳起算', + colProps: { span: 24 }, + formItemProps: { + ...rulesHelper.number, + }, + fieldProps: { + mix: 1, + addonBefore: '生成账单后', + addonAfter: '天', + placeholder: + '请输入按账单生成后多少天后开始收取', + }, + }, + { + key: 'late_fee_rate', + title: '滞纳金费率', + valueType: 'digit', + colProps: { span: 24 }, + formItemProps: { + ...rulesHelper.number, + }, + fieldProps: { + addonBefore: '每日', + addonAfter: '%', + max: 100, + }, + }, + { + key: 'late_fee_cap_days', + title: '滞纳金封顶', + colProps: { span: 24 }, + formItemProps: { + ...rulesHelper.number, + }, + fieldProps: { + mix: 1, + placeholder: '请输入封顶天数', + addonAfter: '天', + }, + }, + ] + : []; + }, + }, + { + key: 'remark', + title: '备注', + colProps: { span: 24 }, + valueType: 'textarea', + fieldProps: { + // rows: 2, + maxLength: 100, + showCount: true, + }, + }, + ], + }, + ] + : []; + }, + }, + ]} + /> + ); +} diff --git a/src/pages/charge/standard/pages/CreateElectricityFee.tsx b/src/pages/charge/standard/pages/CreateElectricityFee.tsx index 84870d0..f4b7791 100644 --- a/src/pages/charge/standard/pages/CreateElectricityFee.tsx +++ b/src/pages/charge/standard/pages/CreateElectricityFee.tsx @@ -13,7 +13,6 @@ import { HouseChargeStandardsCalculationModeEnum, HouseChargeStandardsCalculationPeriodEnum, HouseChargeStandardsPriceAlgorithmEnum, - HouseChargeStandardsTypeEnum, } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -46,11 +45,7 @@ export default function CreateWaterFee(props: MyBetaModalFormProps) { Apis.HouseCharge.HouseChargeStandards.Store({ ...values, charge_type: HouseBillsTypeEnum.ElectricityFee.value, - type: - values.charge_type === HouseBillsTypeEnum.PropertyFee.value || - values.charge_type === HouseBillsTypeEnum.MaintenanceFund.value - ? HouseChargeStandardsTypeEnum.House.value - : HouseChargeStandardsTypeEnum.Meter.value, + type: 'Meter', is_apportionment: values.charge_type === HouseBillsTypeEnum.SharedWaterFee.value || values.charge_type === HouseBillsTypeEnum.SharedElectricityFee.value diff --git a/src/pages/charge/standard/pages/CreateMaintenanceFund.tsx b/src/pages/charge/standard/pages/CreateMaintenanceFund.tsx index e514faf..7b6959e 100644 --- a/src/pages/charge/standard/pages/CreateMaintenanceFund.tsx +++ b/src/pages/charge/standard/pages/CreateMaintenanceFund.tsx @@ -13,7 +13,6 @@ import { HouseChargeStandardsCalculationModeEnum, HouseChargeStandardsCalculationPeriodEnum, HouseChargeStandardsPriceAlgorithmEnum, - HouseChargeStandardsTypeEnum, } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -46,11 +45,7 @@ export default function CreateMaintenanceFund(props: MyBetaModalFormProps) { Apis.HouseCharge.HouseChargeStandards.Store({ ...values, charge_type: HouseBillsTypeEnum.MaintenanceFund.value, - type: - values.charge_type === HouseBillsTypeEnum.PropertyFee.value || - values.charge_type === HouseBillsTypeEnum.MaintenanceFund.value - ? HouseChargeStandardsTypeEnum.House.value - : HouseChargeStandardsTypeEnum.Meter.value, + type: 'House', is_apportionment: values.charge_type === HouseBillsTypeEnum.SharedWaterFee.value || values.charge_type === HouseBillsTypeEnum.SharedElectricityFee.value diff --git a/src/pages/charge/standard/pages/CreatePropertyfee.tsx b/src/pages/charge/standard/pages/CreatePropertyfee.tsx index 93edc7b..8af9dd4 100644 --- a/src/pages/charge/standard/pages/CreatePropertyfee.tsx +++ b/src/pages/charge/standard/pages/CreatePropertyfee.tsx @@ -13,7 +13,6 @@ import { HouseChargeStandardsCalculationModeEnum, HouseChargeStandardsCalculationPeriodEnum, HouseChargeStandardsPriceAlgorithmEnum, - HouseChargeStandardsTypeEnum, } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -46,11 +45,7 @@ export default function CreatePropertyFee(props: MyBetaModalFormProps) { Apis.HouseCharge.HouseChargeStandards.Store({ ...values, charge_type: HouseBillsTypeEnum.PropertyFee.value, - type: - values.charge_type === HouseBillsTypeEnum.PropertyFee.value || - values.charge_type === HouseBillsTypeEnum.MaintenanceFund.value - ? HouseChargeStandardsTypeEnum.House.value - : HouseChargeStandardsTypeEnum.Meter.value, + type: 'House', is_apportionment: values.charge_type === HouseBillsTypeEnum.SharedWaterFee.value || values.charge_type === HouseBillsTypeEnum.SharedElectricityFee.value diff --git a/src/pages/charge/standard/pages/CreateSharedElectricityFee.tsx b/src/pages/charge/standard/pages/CreateSharedElectricityFee.tsx index dc55db6..8f2e03e 100644 --- a/src/pages/charge/standard/pages/CreateSharedElectricityFee.tsx +++ b/src/pages/charge/standard/pages/CreateSharedElectricityFee.tsx @@ -14,7 +14,6 @@ import { HouseChargeStandardsCalculationModeEnum, HouseChargeStandardsCalculationPeriodEnum, HouseChargeStandardsPriceAlgorithmEnum, - HouseChargeStandardsTypeEnum, } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -47,11 +46,7 @@ export default function CreateWaterFee(props: MyBetaModalFormProps) { Apis.HouseCharge.HouseChargeStandards.Store({ ...values, charge_type: HouseBillsTypeEnum.SharedElectricityFee.value, - type: - values.charge_type === HouseBillsTypeEnum.PropertyFee.value || - values.charge_type === HouseBillsTypeEnum.MaintenanceFund.value - ? HouseChargeStandardsTypeEnum.House.value - : HouseChargeStandardsTypeEnum.Meter.value, + type: 'Meter', is_apportionment: values.charge_type === HouseBillsTypeEnum.SharedWaterFee.value || values.charge_type === HouseBillsTypeEnum.SharedElectricityFee.value diff --git a/src/pages/charge/standard/pages/CreateSharedWaterFee.tsx b/src/pages/charge/standard/pages/CreateSharedWaterFee.tsx index 293382f..40427ce 100644 --- a/src/pages/charge/standard/pages/CreateSharedWaterFee.tsx +++ b/src/pages/charge/standard/pages/CreateSharedWaterFee.tsx @@ -14,7 +14,6 @@ import { HouseChargeStandardsCalculationModeEnum, HouseChargeStandardsCalculationPeriodEnum, HouseChargeStandardsPriceAlgorithmEnum, - HouseChargeStandardsTypeEnum, } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -47,11 +46,7 @@ export default function CreateSharedWaterFee(props: MyBetaModalFormProps) { Apis.HouseCharge.HouseChargeStandards.Store({ ...values, charge_type: HouseBillsTypeEnum.SharedWaterFee.value, - type: - values.charge_type === HouseBillsTypeEnum.PropertyFee.value || - values.charge_type === HouseBillsTypeEnum.MaintenanceFund.value - ? HouseChargeStandardsTypeEnum.House.value - : HouseChargeStandardsTypeEnum.Meter.value, + type: 'Meter', is_apportionment: values.charge_type === HouseBillsTypeEnum.SharedWaterFee.value || values.charge_type === HouseBillsTypeEnum.SharedElectricityFee.value diff --git a/src/pages/charge/standard/pages/CreateWaterFee.tsx b/src/pages/charge/standard/pages/CreateWaterFee.tsx index dbe790b..9046f39 100644 --- a/src/pages/charge/standard/pages/CreateWaterFee.tsx +++ b/src/pages/charge/standard/pages/CreateWaterFee.tsx @@ -13,7 +13,6 @@ import { HouseChargeStandardsCalculationModeEnum, HouseChargeStandardsCalculationPeriodEnum, HouseChargeStandardsPriceAlgorithmEnum, - HouseChargeStandardsTypeEnum, } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -46,11 +45,7 @@ export default function CreateWaterFee(props: MyBetaModalFormProps) { Apis.HouseCharge.HouseChargeStandards.Store({ ...values, charge_type: HouseBillsTypeEnum.WaterFee.value, - type: - values.charge_type === HouseBillsTypeEnum.PropertyFee.value || - values.charge_type === HouseBillsTypeEnum.MaintenanceFund.value - ? HouseChargeStandardsTypeEnum.House.value - : HouseChargeStandardsTypeEnum.Meter.value, + type: 'Meter', is_apportionment: values.charge_type === HouseBillsTypeEnum.SharedWaterFee.value || values.charge_type === HouseBillsTypeEnum.SharedElectricityFee.value diff --git a/src/pages/charge/standard/show/$id.tsx b/src/pages/charge/standard/show/$id.tsx index 4a79134..5319956 100644 --- a/src/pages/charge/standard/show/$id.tsx +++ b/src/pages/charge/standard/show/$id.tsx @@ -6,6 +6,7 @@ import { useParams, useSearchParams } from '@umijs/max'; import { Tabs } from 'antd'; import { useEffect, useState } from 'react'; import ChargeInfo from '../components/ChargeInfo'; +import HasCar from '../components/HasCar'; import HasHouse from '../components/HasHouse'; import Instrument from '../components/Instrument'; @@ -56,6 +57,22 @@ export default function Show({ title = '详情' }: { title?: string } = {}) { }, ]); } + + if (pageType === 'Car') { + setItem([ + { + label: '关联车位', + key: '3', + closable: false, + children: ( + loadShow()} + /> + ), + }, + ]); + } }); }; diff --git a/src/pages/charge/tasks/modals/TaskCreate.tsx b/src/pages/charge/tasks/modals/TaskCreate.tsx index a4627a0..baa44b9 100644 --- a/src/pages/charge/tasks/modals/TaskCreate.tsx +++ b/src/pages/charge/tasks/modals/TaskCreate.tsx @@ -20,7 +20,7 @@ export default function Create(props: MyBetaModalFormProps) { labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} labelAlign="left" - trigger={} + trigger={} key={new Date().getTime()} form={form} onOpenChange={(open: any) => { @@ -61,7 +61,7 @@ export default function Create(props: MyBetaModalFormProps) { key: 'house_charge_standards_id', params: { asset_projects_id: asset_projects_id, - charge_type: ['PropertyFee', 'MaintenanceFund'], + charge_type: ['PropertyFee', 'MaintenanceFund', 'CarPortFee'], }, colProps: { span: 24 }, formItemProps: { ...rulesHelper.text }, diff --git a/src/pages/meter/common_meter/index.tsx b/src/pages/meter/common_meter/index.tsx index 5e6fd48..7664fa4 100644 --- a/src/pages/meter/common_meter/index.tsx +++ b/src/pages/meter/common_meter/index.tsx @@ -21,7 +21,6 @@ import { useState } from 'react'; import ChargingStandard from './modals/ChargingStandard'; import Create from './modals/Create'; import MeterHasHouse from './modals/MeterHasHouse'; -import MeterHasOne from './modals/MeterHasOne'; import Update from './modals/Update'; export default function CommonMeter({ title = '公摊表' }) { @@ -69,7 +68,7 @@ export default function CommonMeter({ title = '公摊表' }) { { - navigate(`/instrument/readings/show/${item.id}`); + navigate(`/meter/readings/show/${item.id}`); }} /> ), @@ -80,23 +79,11 @@ export default function CommonMeter({ title = '公摊表' }) { has: { key: '1', label: ( - <> - {item.meter_type === HouseMetersMeterTypeEnum.HouseMeter.value && - !item.house_meter_has_houses_count && ( - - )} - {item.meter_type === HouseMetersMeterTypeEnum.CommonMeter.value && ( - - )} - + ), }, delete: { @@ -178,7 +165,7 @@ export default function CommonMeter({ title = '公摊表' }) { }, }, { - title: '关联房屋数', + title: '绑定房屋', dataIndex: 'house_meter_has_houses_count', search: false, }, @@ -218,14 +205,14 @@ export default function CommonMeter({ title = '公摊表' }) { // dataIndex: 'remark', // search: false, // }, - MyColumns.SoftDelete({ - onRestore: Apis.Meter.HouseMeters.Restore, - onSoftDelete: Apis.Meter.HouseMeters.SoftDelete, - search: false, - setPermissions: getCurrentPermissions({ - enableDisable: true, - }), - }), + // MyColumns.SoftDelete({ + // onRestore: Apis.Meter.HouseMeters.Restore, + // onSoftDelete: Apis.Meter.HouseMeters.SoftDelete, + // search: false, + // setPermissions: getCurrentPermissions({ + // enableDisable: true, + // }), + // }), // MyColumns.CreatedAt(), MyColumns.Option({ render: (_, item: any, index, action) => ( diff --git a/src/pages/meter/common_meter/modals/ChargingStandard.tsx b/src/pages/meter/common_meter/modals/ChargingStandard.tsx index 8d19569..bd9b92c 100644 --- a/src/pages/meter/common_meter/modals/ChargingStandard.tsx +++ b/src/pages/meter/common_meter/modals/ChargingStandard.tsx @@ -20,7 +20,7 @@ export default function Index(props: MyBetaModalFormProps) { type="link" width="1000px" onOpen={() => { - Apis.HouseCharage.HouseChargeStandards.Show({ + Apis.HouseCharge.HouseChargeStandards.Show({ id: props.item?.charge_standards_id ?? 0, }).then((res) => { setData(res?.data || {}); diff --git a/src/pages/meter/house_meter/index.tsx b/src/pages/meter/house_meter/index.tsx index 0f9cd47..2a743fb 100644 --- a/src/pages/meter/house_meter/index.tsx +++ b/src/pages/meter/house_meter/index.tsx @@ -20,7 +20,6 @@ import dayjs from 'dayjs'; import { useState } from 'react'; import ChargingStandard from './modals/ChargingStandard'; import Create from './modals/Create'; -import MeterHasHouse from './modals/MeterHasHouse'; import MeterHasOne from './modals/MeterHasOne'; import Update from './modals/Update'; @@ -69,7 +68,7 @@ export default function HouseMeter({ title = '房屋表' }) { { - navigate(`/instrument/readings/show/${item.id}`); + navigate(`/meter/readings/show/${item.id}`); }} /> ), @@ -80,23 +79,11 @@ export default function HouseMeter({ title = '房屋表' }) { has: { key: '1', label: ( - <> - {item.meter_type === HouseMetersMeterTypeEnum.HouseMeter.value && - !item.house_meter_has_houses_count && ( - - )} - {item.meter_type === HouseMetersMeterTypeEnum.CommonMeter.value && ( - - )} - + ), }, delete: { @@ -178,7 +165,7 @@ export default function HouseMeter({ title = '房屋表' }) { }, }, { - title: '关联房屋数', + title: '绑定房屋', dataIndex: 'house_meter_has_houses_count', search: false, }, diff --git a/src/pages/meter/house_meter/modals/ChargingStandard.tsx b/src/pages/meter/house_meter/modals/ChargingStandard.tsx index 8d19569..bd9b92c 100644 --- a/src/pages/meter/house_meter/modals/ChargingStandard.tsx +++ b/src/pages/meter/house_meter/modals/ChargingStandard.tsx @@ -20,7 +20,7 @@ export default function Index(props: MyBetaModalFormProps) { type="link" width="1000px" onOpen={() => { - Apis.HouseCharage.HouseChargeStandards.Show({ + Apis.HouseCharge.HouseChargeStandards.Show({ id: props.item?.charge_standards_id ?? 0, }).then((res) => { setData(res?.data || {}); diff --git a/src/pages/meter/readings/table/HasHouse.tsx b/src/pages/meter/readings/table/HasHouse.tsx index 459c309..0bb9ac4 100644 --- a/src/pages/meter/readings/table/HasHouse.tsx +++ b/src/pages/meter/readings/table/HasHouse.tsx @@ -9,8 +9,6 @@ import { HouseMetersMeterTypeEnum } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { useNavigate } from '@umijs/max'; import { Space } from 'antd'; -import MeterHasHouse from '../../instrument_list/modals/MeterHasHouse'; -import MeterHasOne from '../../instrument_list/modals/MeterHasOne'; export default function Index(props: MyBetaModalFormProps) { const navigate = useNavigate();