develop #11
20
src/gen/ApiTypes.d.ts
vendored
20
src/gen/ApiTypes.d.ts
vendored
@ -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]
|
||||
|
||||
@ -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 });
|
||||
|
||||
@ -154,7 +154,7 @@ export const BannersTypeEnum= {
|
||||
|
||||
// 缓存类型
|
||||
export const CacheTypeEnum= {
|
||||
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#0a9319","value":"MobilePhoneVerificationCode"},
|
||||
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#262025","value":"MobilePhoneVerificationCode"},
|
||||
};
|
||||
|
||||
// CompaniesMerchantTypeEnum
|
||||
|
||||
@ -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="添加业主"
|
||||
/>
|
||||
) : (
|
||||
''
|
||||
|
||||
@ -79,7 +79,7 @@ export default function Create(props: MyBetaModalFormProps) {
|
||||
fieldProps: {
|
||||
copyIconProps: false,
|
||||
creatorButtonProps: {
|
||||
creatorButtonText: '添加产权人',
|
||||
creatorButtonText: '添加业主',
|
||||
},
|
||||
itemRender: (
|
||||
{ listDom, action }: any,
|
||||
|
||||
@ -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 ? (
|
||||
''
|
||||
|
||||
@ -82,7 +82,7 @@ export default function Create(props: MyBetaModalFormProps) {
|
||||
fieldProps: {
|
||||
copyIconProps: false,
|
||||
creatorButtonProps: {
|
||||
creatorButtonText: '添加产权人',
|
||||
creatorButtonText: '添加业主',
|
||||
},
|
||||
itemRender: (
|
||||
{ listDom, action }: any,
|
||||
|
||||
@ -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(),
|
||||
{
|
||||
|
||||
@ -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>
|
||||
);
|
||||
}
|
||||
@ -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',
|
||||
|
||||
35
src/pages/bills/summary/components/BillInfo.tsx
Normal file
35
src/pages/bills/summary/components/BillInfo.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
@ -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>
|
||||
),
|
||||
}),
|
||||
|
||||
@ -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>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
83
src/pages/bills/summary/show/$id.tsx
Normal file
83
src/pages/bills/summary/show/$id.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
76
src/pages/bills/summary/table/CancelledBill.tsx
Normal file
76
src/pages/bills/summary/table/CancelledBill.tsx
Normal 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>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
79
src/pages/bills/summary/table/PaidBill.tsx
Normal file
79
src/pages/bills/summary/table/PaidBill.tsx
Normal 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>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
80
src/pages/bills/summary/table/UnpaidBill.tsx
Normal file
80
src/pages/bills/summary/table/UnpaidBill.tsx
Normal 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>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
71
src/pages/bills/summary/table/modals/BillShow.tsx
Normal file
71
src/pages/bills/summary/table/modals/BillShow.tsx
Normal 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>
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@ -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
|
||||
|
||||
@ -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: '',
|
||||
},
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
|
||||
@ -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 },
|
||||
|
||||
@ -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,14 +61,21 @@ 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="组织"
|
||||
/>
|
||||
<OrganizationChange
|
||||
item={{ ...item, companies_id: props?.item?.id }}
|
||||
{item?.type !== OrganizationsTypeEnum.Group.value && (
|
||||
<OrganizationChange
|
||||
item={{ ...item, companies_id: props?.item?.companies_id }}
|
||||
reload={action?.reload}
|
||||
title="组织"
|
||||
/>
|
||||
)}
|
||||
<NextOrganizationChange
|
||||
item={{ ...item, companies_id: item?.companies_id }}
|
||||
reload={action?.reload}
|
||||
title="组织"
|
||||
title="下级组织"
|
||||
/>
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
|
||||
@ -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,14 +78,23 @@ 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="组织"
|
||||
/>
|
||||
<OrganizationChange
|
||||
item={{ ...item, companies_id: item?.id }}
|
||||
|
||||
{item?.type !== OrganizationsTypeEnum.Group.value && (
|
||||
<OrganizationChange
|
||||
item={{ ...item, companies_id: item?.companies_id }}
|
||||
reload={action?.reload}
|
||||
title="组织"
|
||||
/>
|
||||
)}
|
||||
|
||||
<NextOrganizationChange
|
||||
item={{ ...item, companies_id: item?.companies_id }}
|
||||
reload={action?.reload}
|
||||
title="组织"
|
||||
title="下级组织"
|
||||
/>
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
|
||||
@ -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 },
|
||||
},
|
||||
]}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@ -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 },
|
||||
|
||||
@ -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(() => {
|
||||
|
||||
@ -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}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user