feat:更新房屋账单,修复部分创建的 id 错误

This commit is contained in:
uiuJun 2025-09-27 23:22:02 +08:00
parent 6ffc7bb71f
commit 3f07ea45a2
27 changed files with 594 additions and 274 deletions

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

@ -475,6 +475,7 @@ declare namespace ApiTypes {
"asset_houses_id"?: number; // 资产房屋id,[ref:asset_houses]
"full_name"?: string; // 模糊搜索:房屋名称
"company_name"?: string; // 模糊搜索:公司名称
"bill_status"?: string; // 账单状态,[enum:HouseBillsBillStatusEnum]
};
type SummaryBillList = {
"full_name"?: string; // 模糊搜索:房屋名称
@ -511,6 +512,9 @@ declare namespace ApiTypes {
type Show = {
"id": number; // id
};
type SummaryShow = {
"asset_houses_id": number; // 资产房屋id,[ref:asset_houses]
};
type SoftDelete = {
"id": number; // id
};
@ -1334,6 +1338,19 @@ declare namespace ApiTypes {
"id": number; // id
};
}
namespace HouseMeterTaskDetails {
type List = {
"house_meter_task_id"?: number; // 仪表任务id,[ref:house_meter_tasks]
"full_name"?: string; // 房屋全称
"meter_name"?: string; // 仪表名称
};
type Show = {
"id": number; // id
};
type Delete = {
"id": number; // id
};
}
namespace HouseMeterTasks {
type List = {
"name"?: string; // 模糊搜索:名称
@ -1364,11 +1381,11 @@ declare namespace ApiTypes {
"name"?: string; // 模糊搜索:名称
"asset_projects_id"?: number; // 项目id,[ref:asset_projects]
"project_name"?: string; // 模糊搜索:项目名称
"charge_standards_id"?: number; // 房屋收费标准id,[ref:house_charge_standards]
};
type Store = {
"asset_projects_id": number; // 项目id,[ref:asset_projects]
"charge_standards_id"?: number; // 房屋收费标准id,[ref:house_charge_standards]
"companies_id": number; // 机构id,[ref:companies]
"name": string; // 名称
"meter_type": string; // 仪表类型,[enum:HouseMetersMeterTypeEnum]
"usage_type": string; // 使用类型,[enum:HouseMetersUsageTypeEnum]
@ -1384,7 +1401,6 @@ declare namespace ApiTypes {
"id": number; // id
"asset_projects_id": number; // 项目id,[ref:asset_projects]
"charge_standards_id"?: number; // 房屋收费标准id,[ref:house_charge_standards]
"companies_id": number; // 机构id,[ref:companies]
"name": string; // 名称
"meter_type": string; // 仪表类型,[enum:HouseMetersMeterTypeEnum]
"usage_type": string; // 使用类型,[enum:HouseMetersUsageTypeEnum]

View File

@ -266,6 +266,9 @@ export const Apis = {
Show(data: ApiTypes.Bill.HouseBills.Show): Promise<MyResponseType> {
return request('admin/bill/house_bills/show', { data });
},
SummaryShow(data: ApiTypes.Bill.HouseBills.SummaryShow): Promise<MyResponseType> {
return request('admin/bill/house_bills/summary_show', { data });
},
SoftDelete(data: ApiTypes.Bill.HouseBills.SoftDelete): Promise<MyResponseType> {
return request('admin/bill/house_bills/soft_delete', { data });
},
@ -789,6 +792,17 @@ export const Apis = {
return request('admin/meter/house_meter_readings/delete', { data });
},
},
HouseMeterTaskDetails: {
List(data?: ApiTypes.Meter.HouseMeterTaskDetails.List): Promise<MyResponseType> {
return request('admin/meter/house_meter_task_details/list', { data });
},
Show(data: ApiTypes.Meter.HouseMeterTaskDetails.Show): Promise<MyResponseType> {
return request('admin/meter/house_meter_task_details/show', { data });
},
Delete(data: ApiTypes.Meter.HouseMeterTaskDetails.Delete): Promise<MyResponseType> {
return request('admin/meter/house_meter_task_details/delete', { data });
},
},
HouseMeterTasks: {
List(data?: ApiTypes.Meter.HouseMeterTasks.List): Promise<MyResponseType> {
return request('admin/meter/house_meter_tasks/list', { data });

View File

@ -154,7 +154,7 @@ export const BannersTypeEnum= {
// 缓存类型
export const CacheTypeEnum= {
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#0a9319","value":"MobilePhoneVerificationCode"},
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#262025","value":"MobilePhoneVerificationCode"},
};
// CompaniesMerchantTypeEnum

View File

@ -16,7 +16,7 @@ import { useNavigate } from '@umijs/max';
import { Space, Tag } from 'antd';
import Delivery from './modals/Delivery';
export default function Index({ title = '房屋档案' }) {
export default function Index({ title = '房客关系' }) {
const navigate = useNavigate();
// 注册当前页面为标签页
usePageTabs({
@ -140,7 +140,7 @@ export default function Index({ title = '房屋档案' }) {
<Delivery
item={item}
reload={action?.reload}
title="添加产权人"
title="添加业主"
/>
) : (
''

View File

@ -79,7 +79,7 @@ export default function Create(props: MyBetaModalFormProps) {
fieldProps: {
copyIconProps: false,
creatorButtonProps: {
creatorButtonText: '添加产权人',
creatorButtonText: '添加业主',
},
itemRender: (
{ listDom, action }: any,

View File

@ -51,7 +51,7 @@ export default function Index({ ...rest }) {
key="Delivery"
item={{ ...rest.item, size: 'middle' }}
reload={action?.reload}
title="添加产权人"
title="添加业主"
/>,
!rest.item?.house_occupants?.length ? (
''

View File

@ -82,7 +82,7 @@ export default function Create(props: MyBetaModalFormProps) {
fieldProps: {
copyIconProps: false,
creatorButtonProps: {
creatorButtonText: '添加产权人',
creatorButtonText: '添加业主',
},
itemRender: (
{ listDom, action }: any,

View File

@ -15,7 +15,7 @@ export default function EnrollsList(props: MyBetaModalFormProps) {
<MyModal
title={props.title || '报名'}
type={props.item?.type || 'primary'}
width="900px"
width="800px"
node={
<ProTable
{...MyProTableProps.props}
@ -26,6 +26,7 @@ export default function EnrollsList(props: MyBetaModalFormProps) {
Apis.Activity.ActivityEnrolls.List,
)
}
options={false}
columns={[
MyColumns.ID(),
{

View File

@ -1,128 +0,0 @@
import {
MyButtons,
MyColumns,
MyPageContainer,
MyProTableProps,
usePageTabs,
} from '@/common';
import { MyExport } from '@/components/MyExport';
import { Apis } from '@/gen/Apis';
import { AssetHousesUsageEnum } from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components';
import { useNavigate } from '@umijs/max';
import { Space } from 'antd';
import { useState } from 'react';
import HousesShow from '../asset/dictionary/modals/HousesShow';
import HousesUpdate from '../asset/dictionary/modals/HousesUpdate';
export default function Index({ title = '房屋列表' }) {
const [getParams, setParams] = useState({});
const navigate = useNavigate();
// 注册当前页面为标签页
usePageTabs({
tabKey: 'asset-houses',
tabLabel: title,
});
return (
<MyPageContainer title={title}>
<ProTable
{...MyProTableProps.props}
request={async (params, sort) => {
setParams(params);
return MyProTableProps.request(
params,
sort,
Apis.Asset.AssetHouses.List,
);
}}
toolBarRender={() => [
<MyExport
key="export"
item={getParams}
download={Apis.Asset.AssetHouses}
/>,
]}
columns={[
MyColumns.ID(),
{
title: '项目名称',
dataIndex: ['asset_project', 'name'],
search: {
transform: (value) => {
return { project_name: value };
},
},
},
{
title: '房屋名称',
dataIndex: 'full_name',
},
MyColumns.EnumTag({
title: '用途',
dataIndex: 'usage',
valueEnum: AssetHousesUsageEnum,
}),
{
title: '楼层',
dataIndex: 'floor',
render(_, record) {
return `${record?.floor}`;
},
search: false,
},
{
title: '建筑面积',
dataIndex: 'built_area',
render(_, record) {
return `${
record?.built_area ? record?.built_area + ' m²' : '-'
} `;
},
search: false,
},
{
title: '套内面积',
dataIndex: 'inside_area',
render(_, record) {
return `${
record?.inside_area ? record?.inside_area + ' m²' : '-'
} `;
},
search: false,
},
{
title: '计费面积',
dataIndex: 'chargeable_area',
render(_, record) {
return `${
record?.chargeable_area ? record?.chargeable_area + ' m²' : '-'
} `;
},
search: false,
},
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>
<HousesShow item={item} reload={action?.reload} />
<HousesUpdate
item={item}
reload={action?.reload}
title="编辑"
/>
<MyButtons.Delete
onConfirm={() =>
Apis.Asset.AssetHouses.Delete({
id: item.id,
}).then(() => action?.reload())
}
/>
</Space>
),
}),
]}
/>
</MyPageContainer>
);
}

View File

@ -7,7 +7,7 @@ import {
usePageTabs,
} from '@/common';
import { Apis } from '@/gen/Apis';
import { HouseBillsTypeEnum } from '@/gen/Enums';
import { HouseBillsBillStatusEnum, HouseBillsTypeEnum } from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd';
import BillCreate from './modals/BillCreate';
@ -46,6 +46,11 @@ export default function Index({ title = '账单明细' }) {
]}
columns={[
MyColumns.ID(),
MyColumns.EnumTag({
title: '状态',
dataIndex: 'bill_status',
valueEnum: HouseBillsBillStatusEnum,
}),
MyColumns.EnumTag({
title: '类型',
dataIndex: 'type',
@ -81,7 +86,11 @@ export default function Index({ title = '账单明细' }) {
dataIndex: 'late_fee',
search: false,
},
{
title: '应付金额',
dataIndex: 'total_payable_amount',
search: false,
},
{
title: '计费开始日期',
dataIndex: 'start_date',

View File

@ -0,0 +1,35 @@
import { MyBetaModalFormProps } from '@/common';
import { ProCard, ProDescriptions } from '@ant-design/pro-components';
import { Space } from 'antd';
export default function info(props: MyBetaModalFormProps) {
const { item } = props;
// 添加调试日志
console.log('BillInfo props:', props);
console.log('BillInfo 11111111:', item);
return (
<Space direction="vertical" style={{ width: '100%' }}>
<ProCard title="基本信息">
<ProDescriptions bordered>
<ProDescriptions.Item label="房屋名称" span={2}>
{item?.asset_house?.full_name || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="应付金额">
{item?.total_payable_sum || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="账单金额">
{item?.payable_amount_sum || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="滞纳金">
{item?.late_fee_sum || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="优惠金额">
{item?.discount_amount_sum || '-'}
</ProDescriptions.Item>
</ProDescriptions>
</ProCard>
</Space>
);
}

View File

@ -1,4 +1,5 @@
import {
MyButtons,
MyColumns,
MyPageContainer,
MyProTableProps,
@ -6,10 +7,11 @@ import {
} from '@/common';
import { Apis } from '@/gen/Apis';
import { ProTable } from '@ant-design/pro-components';
import { useNavigate } from '@umijs/max';
import { Space } from 'antd';
import SummaryShow from './modals/SummaryShow';
export default function Index({ title = '房屋账单' }) {
const navigate = useNavigate();
// 注册当前页面为标签页
usePageTabs({
tabKey: 'summary',
@ -32,18 +34,6 @@ export default function Index({ title = '房屋账单' }) {
Apis.Bill.HouseBills.SummaryBillList,
)
}
// toolBarRender={(action) => [
// <MyImportModal
// key="ImportHouse"
// title="批量导入"
// type="danger"
// size="middle"
// templateApi={Apis.Bill.HouseBills.DownloadTemplate}
// importApi={Apis.Bill.HouseBills.Import}
// reload={action?.reload}
// />,
// <BillCreate key="Create" reload={action?.reload} title={title} />,
// ]}
columns={[
{
title: '房屋ID',
@ -81,7 +71,12 @@ export default function Index({ title = '房屋账单' }) {
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>
<SummaryShow item={item} title="查看" reload={action?.reload} />
<MyButtons.View
title="查看"
onClick={() => {
navigate(`/bills/summary/show/${item.asset_houses_id}`);
}}
/>
</Space>
),
}),

View File

@ -1,100 +0,0 @@
import { MyBetaModalFormProps, MyColumns, MyProTableProps } from '@/common';
import { MyModal } from '@/components/MyModal';
import { Apis } from '@/gen/Apis';
import { HouseBillsTypeEnum } from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd';
import BillUpdate from '../../list/modals/BillUpdate';
export default function SummaryShow(props: MyBetaModalFormProps) {
return (
<MyModal
title={props.title || '查看'}
type={props.item?.type || 'primary'}
width="1000px"
node={
<ProTable
{...MyProTableProps.props}
request={async (params, sort) =>
MyProTableProps.request(
{ ...params, asset_houses_id: props?.item?.asset_houses_id },
sort,
Apis.Bill.HouseBills.List,
)
}
columns={[
MyColumns.ID(),
MyColumns.EnumTag({
title: '类型',
dataIndex: 'type',
valueEnum: HouseBillsTypeEnum,
}),
{
title: '房屋',
dataIndex: ['asset_house', 'full_name'],
search: {
transform: (value) => {
return { full_name: value };
},
},
},
{
title: '账单月份',
render: (_, record) => {
return `${record.year}-${String(record.month).padStart(
2,
'0',
)}`;
},
},
{
title: '账单金额',
dataIndex: 'amount',
search: false,
},
{
title: '优惠金额',
dataIndex: 'discount_amount',
search: false,
},
{
title: '滞纳金',
dataIndex: 'late_fee',
search: false,
},
{
title: '计费开始日期',
dataIndex: 'start_date',
search: false,
},
{
title: '计费结束日期',
dataIndex: 'end_date',
search: false,
},
MyColumns.CreatedAt(),
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>
<BillUpdate
item={item}
reload={action?.reload}
title="编辑"
/>
{/* <MyButtons.Delete
onConfirm={() =>
Apis.Bill.HouseBills.Delete({ id: item.id }).then(() =>
action?.reload(),
)
}
/> */}
</Space>
),
}),
]}
/>
}
/>
);
}

View File

@ -0,0 +1,83 @@
import { MyPageContainer, usePageTabs } from '@/common';
import { Apis } from '@/gen/Apis';
import { ProCard } from '@ant-design/pro-components';
import { useParams } from '@umijs/max';
import { Tabs } from 'antd';
import { useEffect, useState } from 'react';
import BillInfo from '../components/BillInfo';
import CancelledBill from '../table/CancelledBill';
import PaidBill from '../table/PaidBill';
import UnpaidBill from '../table/UnpaidBill';
export default function Show({ title = '账单详情' }) {
const { id } = useParams<{ id: string }>();
const [data, setShow] = useState<any>({});
// 注册标签页
const { addTab } = usePageTabs({
tabKey: `bill-detail-${id}`,
tabLabel: `${data?.asset_house?.name}账单` || title,
});
const loadShow = () => {
let paramsId: any = { asset_houses_id: id ?? 0 };
Apis.Bill.HouseBills.SummaryShow(paramsId).then((res) => {
setShow(res?.data);
// 更新标签页标题
if (res?.data?.asset_house?.name) {
addTab({
key: `bill-detail-${id}`,
label: `${data?.asset_house?.name}档案`,
path: `/bills/${id}`,
});
}
});
};
useEffect(() => {
loadShow();
}, [id]);
let items = [
{
label: '欠费账单',
key: '1',
closable: false,
children: (
<UnpaidBill item={{ ...data, asset_houses_id: data.asset_houses_id }} />
),
},
{
label: '已付账单',
key: '2',
closable: false,
children: (
<PaidBill item={{ ...data, asset_houses_id: data.asset_houses_id }} />
),
},
{
label: '作废账单',
key: '3',
closable: false,
children: (
<CancelledBill
item={{ ...data, asset_houses_id: data.asset_houses_id }}
/>
),
},
];
return (
<MyPageContainer
title={title}
enableTabs
tabKey={`bill-detail-${id}`}
tabLabel={data?.asset_house?.name || title}
>
<BillInfo item={data} reload={loadShow} />
<ProCard style={{ marginTop: 16 }}>
<Tabs type="card" items={items} defaultActiveKey="1" size="small" />
</ProCard>
</MyPageContainer>
);
}

View File

@ -0,0 +1,76 @@
import { MyColumns, MyProTableProps } from '@/common';
import { Apis } from '@/gen/Apis';
import { HouseBillsBillStatusEnum, HouseBillsTypeEnum } from '@/gen/Enums';
import BillUpdate from '@/pages/bills/list/modals/BillUpdate';
import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd';
import { useEffect, useRef } from 'react';
export default function Index({ ...rest }) {
const actionLooks = useRef<any>();
useEffect(() => {
actionLooks?.current.reloadAndRest();
}, [rest.loadmore]);
return (
<>
<ProTable<Record<any, any>>
{...MyProTableProps.props}
actionRef={actionLooks}
request={async (params, sort) =>
MyProTableProps.request(
{
...params,
asset_houses_id: rest.item?.asset_houses_id,
bill_status: [HouseBillsBillStatusEnum.Cancelled.value],
},
sort,
Apis.Bill.HouseBills.List,
)
}
search={false}
columns={[
MyColumns.ID(),
MyColumns.EnumTag({
title: '状态',
dataIndex: 'bill_status',
valueEnum: HouseBillsBillStatusEnum,
}),
MyColumns.EnumTag({
title: '类型',
dataIndex: 'type',
valueEnum: HouseBillsTypeEnum,
}),
{
title: '账单月份',
render: (_, record) => {
return `${record.year}-${String(record.month).padStart(2, '0')}`;
},
},
{
title: '应付金额',
dataIndex: 'total_payable_amount',
search: false,
},
{
title: '计费开始日期',
dataIndex: 'start_date',
search: false,
},
{
title: '计费结束日期',
dataIndex: 'end_date',
search: false,
},
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>
<BillUpdate item={item} reload={action?.reload} title="编辑" />
</Space>
),
}),
]}
/>
</>
);
}

View File

@ -0,0 +1,79 @@
import { MyColumns, MyProTableProps } from '@/common';
import { Apis } from '@/gen/Apis';
import { HouseBillsBillStatusEnum, HouseBillsTypeEnum } from '@/gen/Enums';
import BillUpdate from '@/pages/bills/list/modals/BillUpdate';
import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd';
import { useEffect, useRef } from 'react';
import BillShow from './modals/BillShow';
export default function Index({ ...rest }) {
const actionLooks = useRef<any>();
useEffect(() => {
actionLooks?.current.reloadAndRest();
}, [rest.loadmore]);
return (
<>
<ProTable<Record<any, any>>
{...MyProTableProps.props}
actionRef={actionLooks}
request={async (params, sort) =>
MyProTableProps.request(
{
...params,
asset_houses_id: rest.item?.asset_houses_id,
bill_status: [HouseBillsBillStatusEnum.Paid.value],
},
sort,
Apis.Bill.HouseBills.List,
)
}
search={false}
columns={[
MyColumns.ID(),
MyColumns.EnumTag({
title: '状态',
dataIndex: 'bill_status',
valueEnum: HouseBillsBillStatusEnum,
}),
MyColumns.EnumTag({
title: '类型',
dataIndex: 'type',
valueEnum: HouseBillsTypeEnum,
}),
{
title: '账单月份',
render: (_, record) => {
return `${record.year}-${String(record.month).padStart(2, '0')}`;
},
},
{
title: '应付金额',
dataIndex: 'total_payable_amount',
search: false,
},
{
title: '计费开始日期',
dataIndex: 'start_date',
search: false,
},
{
title: '计费结束日期',
dataIndex: 'end_date',
search: false,
},
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>
<BillUpdate item={item} reload={action?.reload} title="编辑" />
<BillShow item={item} title="查看" reload={action?.reload} />
</Space>
),
}),
]}
/>
</>
);
}

View File

@ -0,0 +1,80 @@
import { MyColumns, MyProTableProps } from '@/common';
import { Apis } from '@/gen/Apis';
import { HouseBillsBillStatusEnum, HouseBillsTypeEnum } from '@/gen/Enums';
import BillUpdate from '@/pages/bills/list/modals/BillUpdate';
import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd';
import { useEffect, useRef } from 'react';
export default function Index({ ...rest }) {
const actionLooks = useRef<any>();
useEffect(() => {
actionLooks?.current.reloadAndRest();
}, [rest.loadmore]);
return (
<>
<ProTable<Record<any, any>>
{...MyProTableProps.props}
actionRef={actionLooks}
request={async (params, sort) =>
MyProTableProps.request(
{
...params,
asset_houses_id: rest.item?.asset_houses_id,
bill_status: [
HouseBillsBillStatusEnum.PendingPayment.value,
HouseBillsBillStatusEnum.PartiallyPaid.value,
HouseBillsBillStatusEnum.Overdue.value,
],
},
sort,
Apis.Bill.HouseBills.List,
)
}
search={false}
columns={[
MyColumns.ID(),
MyColumns.EnumTag({
title: '状态',
dataIndex: 'bill_status',
valueEnum: HouseBillsBillStatusEnum,
}),
MyColumns.EnumTag({
title: '类型',
dataIndex: 'type',
valueEnum: HouseBillsTypeEnum,
}),
{
title: '账单月份',
render: (_, record) => {
return `${record.year}-${String(record.month).padStart(2, '0')}`;
},
},
{
title: '应付金额',
dataIndex: 'total_payable_amount',
search: false,
},
{
title: '计费开始日期',
dataIndex: 'start_date',
search: false,
},
{
title: '计费结束日期',
dataIndex: 'end_date',
search: false,
},
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>
<BillUpdate item={item} reload={action?.reload} title="编辑" />
</Space>
),
}),
]}
/>
</>
);
}

View File

@ -0,0 +1,71 @@
import { MyBetaModalFormProps, renderTextHelper } from '@/common';
import { MyModal } from '@/components/MyModal';
import { HouseBillsBillStatusEnum, HouseBillsTypeEnum } from '@/gen/Enums';
import { ProCard, ProDescriptions } from '@ant-design/pro-components';
import { Space } from 'antd';
export default function SummaryShow(props: MyBetaModalFormProps) {
return (
<MyModal
title={props.title || '查看'}
type={props.item?.type || 'primary'}
width="600px"
node={
<Space direction="vertical" style={{ width: '100%' }}>
<ProCard>
<ProDescriptions column={1}>
<ProDescriptions.Item label="房屋名称" span={3}>
{props?.item?.asset_house?.full_name || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="账单金额">
<Space>
{props?.item?.amount || '-'}
<renderTextHelper.Tag
Enums={HouseBillsTypeEnum}
value={props?.item?.type}
key="type"
/>
</Space>
</ProDescriptions.Item>
<ProDescriptions.Item label="优惠金额">
{props?.item?.discount_amount || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="滞纳金">
{props?.item?.late_fee || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="应付金额">
<Space>
{props?.item?.total_payable_amount || '-'}{' '}
<renderTextHelper.Tag
Enums={HouseBillsBillStatusEnum}
value={props?.item?.bill_status}
key="bill_status"
/>
</Space>
</ProDescriptions.Item>
<ProDescriptions.Item label="账单月份">
<Space>
<span>
{props?.item?.year || '-'}-
{String(props?.item?.month).padStart(2, '0')}
</span>
<span>
{props?.item?.start_date || '-'} {' '}
{props?.item?.end_date || '-'}
</span>
</Space>
</ProDescriptions.Item>
<ProDescriptions.Item label="收款账号">
<Space>
{props?.item?.receipt_account?.company_name || '-'}
{props?.item?.receipt_account?.company_bank || '-'}
{props?.item?.receipt_account?.company_account || '-'}
</Space>
</ProDescriptions.Item>
</ProDescriptions>
</ProCard>
</Space>
}
/>
);
}

View File

@ -140,7 +140,7 @@ export default function Index({ title = '收费标准' }) {
<MyButtons.View
title="查看"
onClick={() => {
navigate(`/house_charge_standard/show/${item.id}`);
navigate(`/charge/standard/show/${item.id}`);
}}
/>
<ChargeStandardUpdate

View File

@ -57,14 +57,11 @@ export default function Create(props: MyBetaModalFormProps) {
},
MyFormItems.UploadImages({
key: 'logo',
title: '品牌logo【尺寸:1024*1024】',
title: '品牌logo【 尺寸比例 1:1 】',
tooltip: '只能上传1张图片',
max: 1,
colProps: { span: 24 },
formItemProps: { required: false },
fieldProps: {
placeholder: '',
},
}),
]}
/>

View File

@ -69,7 +69,7 @@ export default function Create(props: MyBetaModalFormProps) {
title: '选择组织',
key: 'organizations_id',
params: {
companies_id: companies_id || props?.item?.companies_id || 0,
companies_id: companies_id || props?.item?.id || 0,
},
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
@ -109,7 +109,7 @@ export default function Create(props: MyBetaModalFormProps) {
Selects?.Positions({
title: '岗位',
params: {
companies_id: companies_id || props?.item?.companies_id || 0,
companies_id: companies_id || props?.item?.id || 0,
},
key: 'positions_id',
formItemProps: { ...rulesHelper.text },

View File

@ -8,6 +8,7 @@ import { Apis } from '@/gen/Apis';
import { OrganizationsTypeEnum } from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd';
import NextOrganizationChange from '../../organizations/modals/NextOrganizationChange';
import OrganizationChange from '../../organizations/modals/OrganizationChange';
import OrganizationCreate from '../../organizations/modals/OrganizationCreate';
import OrganizationUpdate from '../../organizations/modals/OrganizationUpdate';
@ -60,15 +61,22 @@ export default function Organizations(props: MyBetaModalFormProps) {
render: (_, item: any, index, action) => (
<Space key={index}>
<OrganizationUpdate
item={{ ...item, companies_id: props?.item?.id }}
item={item}
reload={action?.reload}
title="组织"
/>
{item?.type !== OrganizationsTypeEnum.Group.value && (
<OrganizationChange
item={{ ...item, companies_id: props?.item?.id }}
item={{ ...item, companies_id: props?.item?.companies_id }}
reload={action?.reload}
title="组织"
/>
)}
<NextOrganizationChange
item={{ ...item, companies_id: item?.companies_id }}
reload={action?.reload}
title="下级组织"
/>
<MyButtons.Delete
onConfirm={() =>
Apis.Company.Organizations.Delete({ id: item.id }).then(

View File

@ -10,6 +10,7 @@ import { OrganizationsTypeEnum } from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components';
import { useNavigate } from '@umijs/max';
import { Space } from 'antd';
import NextOrganizationChange from './modals/NextOrganizationChange';
import OrganizationChange from './modals/OrganizationChange';
import OrganizationCreate from './modals/OrganizationCreate';
import OrganizationUpdate from './modals/OrganizationUpdate';
@ -77,15 +78,24 @@ export default function Index({ title = '组织列表' }) {
render: (_, item: any, index, action) => (
<Space key={index}>
<OrganizationUpdate
item={{ ...item, companies_id: item?.id }}
item={item}
reload={action?.reload}
title="组织"
/>
{item?.type !== OrganizationsTypeEnum.Group.value && (
<OrganizationChange
item={{ ...item, companies_id: item?.id }}
item={{ ...item, companies_id: item?.companies_id }}
reload={action?.reload}
title="组织"
/>
)}
<NextOrganizationChange
item={{ ...item, companies_id: item?.companies_id }}
reload={action?.reload}
title="下级组织"
/>
<MyButtons.Delete
onConfirm={() =>
Apis.Company.Organizations.Delete({ id: item.id }).then(

View File

@ -0,0 +1,71 @@
import {
MyBetaModalFormProps,
MyButtons,
MyFormItems,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { Selects } from '@/components/Select';
import { Apis } from '@/gen/Apis';
import { OrganizationsTypeEnum } from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components';
import { Form, message } from 'antd';
export default function Create(props: MyBetaModalFormProps) {
const [form] = Form.useForm();
return (
<BetaSchemaForm<ApiTypes.Company.Organizations.Store>
{...MyModalFormProps.props}
title={`添加${props.title}`}
wrapperCol={{ span: 24 }}
width="500px"
trigger={<MyButtons.Create title={`添加${props.title}`} size="small" />}
key={new Date().getTime()}
form={form}
onOpenChange={(open: any) => {
if (open) {
form.resetFields(); // 清空表单数据
}
}}
onFinish={async (values: any) =>
Apis.Company.Organizations.Store({
...values,
companies_id: values?.companies_id || props?.item?.companies_id,
parent_id: props.item?.id,
})
.then(() => {
props.reload?.();
message.success(props.title + '成功');
return true;
})
.catch(() => false)
}
columns={[
...(props?.item?.id
? []
: [
Selects?.Companies({
key: 'companies_id',
title: '公司',
colProps: { span: 24 },
required: true,
}),
]),
MyFormItems.EnumRadio({
key: 'type',
title: '组织类型',
colProps: { span: 24 },
valueEnum: OrganizationsTypeEnum,
required: true,
}),
{
key: 'name',
title: '组织名称',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
]}
/>
);
}

View File

@ -11,14 +11,12 @@ export default function Update(props: MyBetaModalFormProps) {
{...MyModalFormProps.props}
title={`${props.title}调整`}
form={form}
trigger={
<MyButtons.Default title="组织调整" type="primary" size="small" />
}
trigger={<MyButtons.Default title="调整" type="primary" size="small" />}
wrapperCol={{ span: 24 }}
width="500px"
onOpenChange={(open: any) => {
if (open && props.item) {
form.setFieldsValue(props.item);
form.resetFields(); // 清空表单数据
}
}}
onFinish={async (values: any) =>
@ -40,7 +38,7 @@ export default function Update(props: MyBetaModalFormProps) {
}
columns={[
Selects?.OrganizationsTree({
title: '请选择新的上级组织',
title: '请选择新的上级组织',
key: 'parent_id',
params: { companies_id: props?.item?.companies_id },
colProps: { span: 24 },

View File

@ -31,7 +31,7 @@ export default function Create(props: MyBetaModalFormProps) {
onFinish={async (values: any) =>
Apis.Company.Organizations.Store({
...values,
companies_id: values?.companies_id || props?.item?.id,
companies_id: values?.companies_id || props?.item?.companies_id,
parent_id: values?.parent_id?.[values.parent_id.length - 1],
})
.then(() => {

View File

@ -22,6 +22,8 @@ export default function ChargeStandardHasHouse(props: MyBetaModalFormProps) {
// 添加 tableRef 用于操作表格
const tableRef = useRef<any>();
// 添加 modalRef 用于关闭窗口
const modalRef = useRef<any>();
const onShowContactPhone = () => {
if (!selectedHouseId) {
@ -42,6 +44,8 @@ export default function ChargeStandardHasHouse(props: MyBetaModalFormProps) {
setSelectedRow(null);
props.reload?.();
message.success('添加成功!');
// 关闭窗口
modalRef.current?.close();
})
.catch((error) => {
console.error('添加失败:', error);
@ -55,6 +59,7 @@ export default function ChargeStandardHasHouse(props: MyBetaModalFormProps) {
title={props.title || '查看'}
type="primary"
width="920px"
myRef={modalRef}
node={
<ProTable
actionRef={tableRef}