Merge branch 'develop' of ssh://code.juyouwu.cn:2222/pay/pay-admin into develop
All checks were successful
Build and Push Docker Image / build (push) Successful in 3m30s
All checks were successful
Build and Push Docker Image / build (push) Successful in 3m30s
* 'develop' of ssh://code.juyouwu.cn:2222/pay/pay-admin: fix: 更新接口 feat:更新房屋账单,修复部分创建的 id 错误
This commit is contained in:
commit
8ba778a1eb
38
src/gen/ApiTypes.d.ts
vendored
38
src/gen/ApiTypes.d.ts
vendored
@ -113,17 +113,20 @@ declare namespace ApiTypes {
|
||||
"status"?: string; // 状态,[enum:HouseRegistersStatusEnum]
|
||||
"customer_info"?: string[]; // 客户信息
|
||||
"ownership_info"?: string[]; // 产权信息
|
||||
"remark"?: string; // 备注
|
||||
};
|
||||
type Update = {
|
||||
"id": number; // id
|
||||
"type": string; // 类型,[enum:HouseRegistersTypeEnum]
|
||||
"customer_info"?: string[]; // 客户信息
|
||||
"ownership_info"?: string[]; // 产权信息
|
||||
"remark"?: string; // 备注
|
||||
};
|
||||
type MoveOut = {
|
||||
"house_occupants_id": number; // 房客id
|
||||
"move_out_date"?: Date; // 搬离时间
|
||||
"apply_reason"?: string; // 搬离原因
|
||||
"remark"?: string; // 备注
|
||||
};
|
||||
type MoveIn = {
|
||||
"house_occupants_id": number; // 房客id
|
||||
@ -132,6 +135,7 @@ declare namespace ApiTypes {
|
||||
};
|
||||
type RemoveOwner = {
|
||||
"house_occupants_id": number; // 房客id
|
||||
"remark"?: string; // 备注
|
||||
};
|
||||
type ChangeOccupant = {
|
||||
"house_occupants_id": number; // 房客id
|
||||
@ -151,6 +155,7 @@ declare namespace ApiTypes {
|
||||
"owners_id"?: number; // 产权人id,[ref:house_occupants]
|
||||
"relation_with_owner"?: string; // 与产权人关系,[enum:HouseOccupantsRelationWithOwnerEnum]
|
||||
"status"?: string; // 状态,[enum:HouseOccupantsStatusEnum]
|
||||
"remark"?: string; // 备注
|
||||
};
|
||||
type Show = {
|
||||
"id": number; // id
|
||||
@ -356,6 +361,9 @@ declare namespace ApiTypes {
|
||||
"keywords"?: string; // 关键词
|
||||
"companies_id"?: number; // 机构id
|
||||
};
|
||||
type Import = {
|
||||
"upload_file"?: mimes:xlsx,xls; // 上传的时候必填文件
|
||||
};
|
||||
}
|
||||
namespace AssetUnits {
|
||||
type List = {
|
||||
@ -633,6 +641,29 @@ declare namespace ApiTypes {
|
||||
"id": number; // id
|
||||
};
|
||||
}
|
||||
namespace Positions {
|
||||
type List = {
|
||||
"name"?: string; // 模糊搜索:名称
|
||||
};
|
||||
type Store = {
|
||||
"name": string; // 岗位名称
|
||||
"is_use"?: number; // 是否启用,1启用,0禁用
|
||||
};
|
||||
type Update = {
|
||||
"id": number; // id
|
||||
"name": string; // 岗位名称
|
||||
"is_use"?: number; // 是否启用,1启用,0禁用
|
||||
};
|
||||
type Show = {
|
||||
"id": number; // id
|
||||
};
|
||||
type Delete = {
|
||||
"id": number; // id
|
||||
};
|
||||
type Select = {
|
||||
"keywords"?: string; // 关键词
|
||||
};
|
||||
}
|
||||
}
|
||||
namespace Company {
|
||||
namespace Companies {
|
||||
@ -797,6 +828,10 @@ declare namespace ApiTypes {
|
||||
"status"?: number; // 状态
|
||||
"remark"?: string; // 备注
|
||||
};
|
||||
type BatchStore = {
|
||||
"companies_id": number; // 所属机构id,[ref:companies]
|
||||
"positions_ids": string[]; // 岗位ID
|
||||
};
|
||||
type Show = {
|
||||
"id": number; // id
|
||||
};
|
||||
@ -1424,6 +1459,9 @@ declare namespace ApiTypes {
|
||||
type Delete = {
|
||||
"id": number; // id
|
||||
};
|
||||
type Import = {
|
||||
"upload_file"?: mimes:xlsx,xls; // 上传的时候必填文件
|
||||
};
|
||||
}
|
||||
}
|
||||
namespace Msg {
|
||||
|
||||
@ -185,6 +185,12 @@ export const Apis = {
|
||||
Select(data?: ApiTypes.Asset.AssetProjects.Select): Promise<MyResponseType> {
|
||||
return request('admin/asset/asset_projects/select', { data });
|
||||
},
|
||||
Import(data?: ApiTypes.Asset.AssetProjects.Import): Promise<MyResponseType> {
|
||||
return request('admin/asset/asset_projects/import', { data });
|
||||
},
|
||||
DownloadTemplate(): Promise<MyResponseType> {
|
||||
return request('admin/asset/asset_projects/download_template', {responseType: 'blob',});
|
||||
},
|
||||
},
|
||||
AssetUnits: {
|
||||
List(data?: ApiTypes.Asset.AssetUnits.List): Promise<MyResponseType> {
|
||||
@ -374,6 +380,26 @@ export const Apis = {
|
||||
return request('admin/common/convenience_services/delete', { data });
|
||||
},
|
||||
},
|
||||
Positions: {
|
||||
List(data?: ApiTypes.Common.Positions.List): Promise<MyResponseType> {
|
||||
return request('admin/common/positions/list', { data });
|
||||
},
|
||||
Store(data: ApiTypes.Common.Positions.Store): Promise<MyResponseType> {
|
||||
return request('admin/common/positions/store', { data });
|
||||
},
|
||||
Update(data: ApiTypes.Common.Positions.Update): Promise<MyResponseType> {
|
||||
return request('admin/common/positions/update', { data });
|
||||
},
|
||||
Show(data: ApiTypes.Common.Positions.Show): Promise<MyResponseType> {
|
||||
return request('admin/common/positions/show', { data });
|
||||
},
|
||||
Delete(data: ApiTypes.Common.Positions.Delete): Promise<MyResponseType> {
|
||||
return request('admin/common/positions/delete', { data });
|
||||
},
|
||||
Select(data?: ApiTypes.Common.Positions.Select): Promise<MyResponseType> {
|
||||
return request('admin/common/positions/select', { data });
|
||||
},
|
||||
},
|
||||
},
|
||||
Company: {
|
||||
Companies: {
|
||||
@ -461,6 +487,9 @@ export const Apis = {
|
||||
Update(data: ApiTypes.Company.CompanyPositions.Update): Promise<MyResponseType> {
|
||||
return request('admin/company/company_positions/update', { data });
|
||||
},
|
||||
BatchStore(data: ApiTypes.Company.CompanyPositions.BatchStore): Promise<MyResponseType> {
|
||||
return request('admin/company/company_positions/batch_store', { data });
|
||||
},
|
||||
Show(data: ApiTypes.Company.CompanyPositions.Show): Promise<MyResponseType> {
|
||||
return request('admin/company/company_positions/show', { data });
|
||||
},
|
||||
@ -845,6 +874,12 @@ export const Apis = {
|
||||
Delete(data: ApiTypes.Meter.HouseMeters.Delete): Promise<MyResponseType> {
|
||||
return request('admin/meter/house_meters/delete', { data });
|
||||
},
|
||||
Import(data?: ApiTypes.Meter.HouseMeters.Import): Promise<MyResponseType> {
|
||||
return request('admin/meter/house_meters/import', { data });
|
||||
},
|
||||
DownloadTemplate(): Promise<MyResponseType> {
|
||||
return request('admin/meter/house_meters/download_template', {responseType: 'blob',});
|
||||
},
|
||||
},
|
||||
},
|
||||
Msg: {
|
||||
|
||||
@ -154,7 +154,7 @@ export const BannersTypeEnum= {
|
||||
|
||||
// 缓存类型
|
||||
export const CacheTypeEnum= {
|
||||
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#b123bc","value":"MobilePhoneVerificationCode"},
|
||||
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#e3da02","value":"MobilePhoneVerificationCode"},
|
||||
};
|
||||
|
||||
// CompaniesMerchantTypeEnum
|
||||
@ -447,11 +447,14 @@ export const HouseOccupantsHouseRelationEnum= {
|
||||
|
||||
// HouseOccupantsRelationWithOwnerEnum
|
||||
export const HouseOccupantsRelationWithOwnerEnum= {
|
||||
'Self': {"text":"本人","color":"#52c41a","value":"Self"},
|
||||
'Spouse': {"text":"配偶","color":"#2db7f5","value":"Spouse"},
|
||||
'Children': {"text":"子女","color":"#87d068","value":"Children"},
|
||||
'Parents': {"text":"父母","color":"#faad14","value":"Parents"},
|
||||
'Siblings': {"text":"兄弟姐妹","color":"#fa8c16","value":"Siblings"},
|
||||
'OtherRelatives': {"text":"其他亲属","color":"#f5222d","value":"OtherRelatives"},
|
||||
'PrimaryTenant': {"text":"主租客","color":"#722ed1","value":"PrimaryTenant"},
|
||||
'Tenant': {"text":"租客","color":"#1890ff","value":"Tenant"},
|
||||
};
|
||||
|
||||
// HouseOccupantsResidentialRelationEnum
|
||||
@ -463,8 +466,8 @@ export const HouseOccupantsResidentialRelationEnum= {
|
||||
|
||||
// HouseOccupantsStatusEnum
|
||||
export const HouseOccupantsStatusEnum= {
|
||||
'Normal': {"text":"正常","color":"#52c41a","value":"Normal"},
|
||||
'Unbound': {"text":"已解除","color":"#f5222d","value":"Unbound"},
|
||||
'Normal': {"text":"绑定","color":"#52c41a","value":"Normal"},
|
||||
'Unbound': {"text":"解绑","color":"#f5222d","value":"Unbound"},
|
||||
};
|
||||
|
||||
// 订单状态枚举
|
||||
|
||||
@ -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}
|
||||
|
||||
115
src/pages/mete/tasks/index.tsx
Normal file
115
src/pages/mete/tasks/index.tsx
Normal file
@ -0,0 +1,115 @@
|
||||
import {
|
||||
MyButtons,
|
||||
MyColumns,
|
||||
MyPageContainer,
|
||||
MyProTableProps,
|
||||
usePageTabs,
|
||||
} from '@/common';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import {
|
||||
HouseChargeTasksStatusEnum,
|
||||
HouseChargeTasksTypeEnum,
|
||||
} from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { Space } from 'antd';
|
||||
import TaskCreate from './modals/TaskCreate';
|
||||
import TaskShow from './modals/TaskShow';
|
||||
|
||||
export default function Index({ title = '账单任务' }) {
|
||||
// 注册当前页面为标签页
|
||||
usePageTabs({
|
||||
tabKey: 'house_charge_tasks',
|
||||
tabLabel: title,
|
||||
});
|
||||
|
||||
return (
|
||||
<MyPageContainer
|
||||
title={title}
|
||||
enableTabs={true}
|
||||
tabKey="house_charge_tasks"
|
||||
tabLabel={title}
|
||||
>
|
||||
<ProTable
|
||||
{...MyProTableProps.props}
|
||||
request={async (params, sort) =>
|
||||
MyProTableProps.request(
|
||||
params,
|
||||
sort,
|
||||
Apis.HouseCharage.HouseChargeTasks.List,
|
||||
)
|
||||
}
|
||||
toolBarRender={(action) => [
|
||||
<TaskCreate key="Create" reload={action?.reload} title="账单任务" />,
|
||||
]}
|
||||
columns={[
|
||||
{
|
||||
title: '机构',
|
||||
dataIndex: ['company', 'name'],
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '任务ID',
|
||||
dataIndex: 'id',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '创建类型',
|
||||
dataIndex: 'type',
|
||||
valueEnum: HouseChargeTasksTypeEnum,
|
||||
}),
|
||||
MyColumns.EnumTag({
|
||||
title: '任务状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: HouseChargeTasksStatusEnum,
|
||||
}),
|
||||
{
|
||||
title: '收费标准',
|
||||
dataIndex: ['house_charge_standard', 'name'],
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '账单月份',
|
||||
render: (_, record) => {
|
||||
return `${record.bill_year}-${String(record.bill_month).padStart(
|
||||
2,
|
||||
'0',
|
||||
)}`;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '计费周期',
|
||||
|
||||
render: (_, record) => {
|
||||
return `${record.start_date}-${String(record.end_date).padStart(
|
||||
2,
|
||||
'0',
|
||||
)}`;
|
||||
},
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '账单数',
|
||||
dataIndex: 'task_count',
|
||||
search: false,
|
||||
},
|
||||
// MyColumns.UpdatedAt(),
|
||||
MyColumns.CreatedAt(),
|
||||
MyColumns.Option({
|
||||
render: (_, item: any, index, action) => (
|
||||
<Space key={index}>
|
||||
<TaskShow item={item} title="查看" reload={action?.reload} />
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
Apis.HouseCharage.HouseChargeTasks.Delete({
|
||||
id: item.id,
|
||||
}).then(() => action?.reload())
|
||||
}
|
||||
/>
|
||||
</Space>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
</MyPageContainer>
|
||||
);
|
||||
}
|
||||
122
src/pages/mete/tasks/modals/TaskCreate.tsx
Normal file
122
src/pages/mete/tasks/modals/TaskCreate.tsx
Normal file
@ -0,0 +1,122 @@
|
||||
import {
|
||||
MyBetaModalFormProps,
|
||||
MyButtons,
|
||||
MyModalFormProps,
|
||||
rulesHelper,
|
||||
} from '@/common';
|
||||
import { Selects } from '@/components/Select';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
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.HouseCharage.HouseChargeTasks.Store>
|
||||
{...MyModalFormProps.props}
|
||||
title={`创建${props.title}`}
|
||||
width="480px"
|
||||
layout="horizontal"
|
||||
labelCol={{ span: 8 }}
|
||||
wrapperCol={{ span: 16 }}
|
||||
labelAlign="left"
|
||||
trigger={<MyButtons.Create title={`创建${props.title}`} />}
|
||||
key={new Date().getTime()}
|
||||
form={form}
|
||||
onOpenChange={(open: any) => {
|
||||
if (open) {
|
||||
form.resetFields(); // 清空表单数据
|
||||
}
|
||||
}}
|
||||
onFinish={async (values) =>
|
||||
Apis.HouseCharage.HouseChargeTasks.Store(values)
|
||||
.then(() => {
|
||||
props.reload?.();
|
||||
message.success(props.title + '账单任务创建成功');
|
||||
return true;
|
||||
})
|
||||
.catch(() => false)
|
||||
}
|
||||
columns={[
|
||||
Selects?.AssetProjects({
|
||||
title: '选择项目',
|
||||
key: 'asset_projects_id',
|
||||
colProps: { span: 24 },
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
fieldProps: {
|
||||
onChange: (val: any) => {
|
||||
form.setFieldsValue({
|
||||
house_charge_standards_id: undefined,
|
||||
});
|
||||
},
|
||||
},
|
||||
}),
|
||||
{
|
||||
valueType: 'dependency',
|
||||
name: ['asset_projects_id'],
|
||||
columns: ({ asset_projects_id }) => {
|
||||
return [
|
||||
Selects?.ChargeStandard({
|
||||
title: '选择收费标准',
|
||||
key: 'house_charge_standards_id',
|
||||
params: {
|
||||
asset_projects_id: asset_projects_id,
|
||||
},
|
||||
colProps: { span: 24 },
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
fieldProps: {
|
||||
showSearch: true,
|
||||
},
|
||||
}),
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'month',
|
||||
title: '选择生成月份',
|
||||
valueType: 'date',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
picker: 'month',
|
||||
format: 'YYYY-MM',
|
||||
valueFormat: 'YYYY-MM',
|
||||
style: {
|
||||
width: '100%',
|
||||
},
|
||||
onChange: (e: any, dateString: string) => {
|
||||
form.setFieldsValue({
|
||||
start_date: rulesHelper.getMonthStartDate(dateString),
|
||||
end_date: rulesHelper.getMonthEndDate(dateString),
|
||||
});
|
||||
},
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
},
|
||||
{
|
||||
key: 'start_date',
|
||||
title: '计费开始日期',
|
||||
valueType: 'date',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
style: {
|
||||
width: '100%',
|
||||
},
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
},
|
||||
{
|
||||
key: 'end_date',
|
||||
title: '计费结束日期',
|
||||
valueType: 'date',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
style: {
|
||||
width: '100%',
|
||||
},
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
},
|
||||
]}
|
||||
/>
|
||||
);
|
||||
}
|
||||
69
src/pages/mete/tasks/modals/TaskShow.tsx
Normal file
69
src/pages/mete/tasks/modals/TaskShow.tsx
Normal file
@ -0,0 +1,69 @@
|
||||
import { MyBetaModalFormProps, MyColumns, MyProTableProps } from '@/common';
|
||||
import { MyModal } from '@/components/MyModal';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { HouseChargeTaskDetailsStatusEnum } from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
|
||||
export default function AssetInfo(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, house_charge_tasks_id: props?.item?.id },
|
||||
sort,
|
||||
Apis.HouseCharage.HouseChargeTaskDetails.List,
|
||||
)
|
||||
}
|
||||
columns={[
|
||||
MyColumns.ID(),
|
||||
{
|
||||
title: '对象',
|
||||
dataIndex: 'full_name',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: HouseChargeTaskDetailsStatusEnum,
|
||||
}),
|
||||
|
||||
{
|
||||
title: '收费标准',
|
||||
dataIndex: ['house_charge_task', 'house_charge_standard', 'name'],
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '账单月份',
|
||||
render: (_, record) => {
|
||||
return `${record.year}-${String(record.month).padStart(
|
||||
2,
|
||||
'0',
|
||||
)}`;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '计费周期',
|
||||
render: (_, record) => {
|
||||
return `${record.house_charge_task.start_date} 至 ${String(
|
||||
record.house_charge_task.end_date,
|
||||
).padStart(2, '0')}`;
|
||||
},
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '完成时间',
|
||||
dataIndex: 'processed_time',
|
||||
search: false,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user