From 1ee118ed66388333954dd06d50024c67750430d4 Mon Sep 17 00:00:00 2001 From: zsqtony <450952271@qq.com> Date: Fri, 26 Sep 2025 21:02:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=EF=BC=9A=E6=8E=A8=E9=80=81=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/MomentCategories.tsx | 59 ++++ src/components/MyModal.tsx | 1 + src/components/TransferProject.tsx | 77 +++++ src/gen/ApiTypes.d.ts | 20 +- src/gen/Apis.ts | 14 + src/gen/Enums.ts | 8 +- src/pages/moments/classification/index.tsx | 69 ++++ .../moments/classification/modals/Create.tsx | 38 +++ .../moments/classification/modals/Update.tsx | 51 +++ src/pages/moments/list/index.tsx | 69 ++++ src/pages/moments/list/modals/Create.tsx | 305 ++++++++++++++++++ src/pages/moments/list/modals/Update.tsx | 51 +++ 12 files changed, 759 insertions(+), 3 deletions(-) create mode 100644 src/components/MomentCategories.tsx create mode 100644 src/components/TransferProject.tsx create mode 100644 src/pages/moments/classification/index.tsx create mode 100644 src/pages/moments/classification/modals/Create.tsx create mode 100644 src/pages/moments/classification/modals/Update.tsx create mode 100644 src/pages/moments/list/index.tsx create mode 100644 src/pages/moments/list/modals/Create.tsx create mode 100644 src/pages/moments/list/modals/Update.tsx diff --git a/src/components/MomentCategories.tsx b/src/components/MomentCategories.tsx new file mode 100644 index 0000000..8822f80 --- /dev/null +++ b/src/components/MomentCategories.tsx @@ -0,0 +1,59 @@ +import { MyColumnsType } from '@/common'; +import { Apis } from '@/gen/Apis'; +import { ProColumns, ProFormColumnsType } from '@ant-design/pro-components'; + +type ReturnType = ProColumns & ProFormColumnsType; +type PropsType = { required?: boolean } & ReturnType; +export const MomentSelect = { + MomentCategoriesTree(props?: PropsType): ReturnType { + const { ...rest } = props ?? {}; + return { + key: 'parent_id', + title: '上级分类', + valueType: 'treeSelect', + request: async () => { + return Apis.Customer.CustomerMomentCategories.SelectTree().then( + (res) => res.data, + ); + }, + fieldProps: { + allowClear: true, + autoClearSearchValue: true, + bordered: true, + fieldNames: { + label: 'name', + value: 'id', + }, + filterTreeNode: true, + showSearch: true, + treeNodeFilterProp: 'title', + treeDefaultExpandAll: true, + }, + ...rest, + }; + }, + MomentCategoriesSelect(props?: PropsType): MyColumnsType { + const { ...rest } = props ?? {}; + return { + title: '内容分类', + dataIndex: 'moment_categories_ids', + valueType: 'cascader', + request: async () => { + return Apis.Customer.CustomerMomentCategories.SelectTree().then( + (res) => res.data, + ); + }, + hideInTable: true, + fieldProps: { + showSearch: true, + placeholder: '请选择 / 输入名称搜索', + fieldNames: { + label: 'name', + value: 'id', + children: 'children', + }, + }, + ...rest, + }; + }, +}; diff --git a/src/components/MyModal.tsx b/src/components/MyModal.tsx index 53a5164..4e47799 100644 --- a/src/components/MyModal.tsx +++ b/src/components/MyModal.tsx @@ -25,6 +25,7 @@ export function MyModal(props?: any) { setOpen(true)} /> )} diff --git a/src/components/TransferProject.tsx b/src/components/TransferProject.tsx new file mode 100644 index 0000000..0ec9189 --- /dev/null +++ b/src/components/TransferProject.tsx @@ -0,0 +1,77 @@ +import { Apis } from '@/gen/Apis'; +import { Transfer } from 'antd'; +import { useEffect, useState } from 'react'; +const MyTransferProject = (props: any) => { + const [getLoading, setLoading] = useState(false); + const [dataSource, setTransferData] = useState([]); + const [targetKeys, setTargetKeys] = useState([]); + useEffect(() => { + Apis.Asset.AssetProjects.Select({}) + .then((res) => { + setLoading(true); + const data = + res.data?.map((item: any) => ({ + key: item.value?.toString(), + title: item.label, + })) || []; + setTransferData(data); + }) + .catch(() => { + setTransferData([]); + }); + }, []); + + useEffect(() => { + console.log(props.value, 'props.value'); + if (props.value?.length) { + setTargetKeys(props.value); + } + }, [props.value]); + + return ( + getLoading && ( + { + let dataIds: any = []; + console.log(targetKeys, 'targetKeys', props.value); + targetKeys?.forEach((res: any) => { + dataSource?.forEach((k: any) => { + if (res === k.key) { + dataIds?.push(k?.key); + } + }); + }); + setTargetKeys(targetKeys as string[]); + props?.onChange?.(dataIds); + }} + render={(item) => item.title} + titles={['可选项目', '已选项目']} + showSearch + listStyle={{ + width: 250, + height: 300, + }} + operations={['选择', '移除']} + operationStyle={{ marginTop: 20 }} + locale={{ + itemUnit: '项', + itemsUnit: '项', + searchPlaceholder: '请输入搜索内容', + notFoundContent: '列表为空', + }} + onSelectChange={(sourceSelectedKeys, targetSelectedKeys) => { + console.log( + sourceSelectedKeys, + targetSelectedKeys, + 'sourceSelectedKeys', + ); + // 处理选择变化,但不触发表单提交 + }} + /> + ) + ); +}; + +export default MyTransferProject; diff --git a/src/gen/ApiTypes.d.ts b/src/gen/ApiTypes.d.ts index 40edeec..bc7fbe6 100644 --- a/src/gen/ApiTypes.d.ts +++ b/src/gen/ApiTypes.d.ts @@ -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] diff --git a/src/gen/Apis.ts b/src/gen/Apis.ts index b2b2119..f5cb3ed 100644 --- a/src/gen/Apis.ts +++ b/src/gen/Apis.ts @@ -266,6 +266,9 @@ export const Apis = { Show(data: ApiTypes.Bill.HouseBills.Show): Promise { return request('admin/bill/house_bills/show', { data }); }, + SummaryShow(data: ApiTypes.Bill.HouseBills.SummaryShow): Promise { + return request('admin/bill/house_bills/summary_show', { data }); + }, SoftDelete(data: ApiTypes.Bill.HouseBills.SoftDelete): Promise { 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 { + return request('admin/meter/house_meter_task_details/list', { data }); + }, + Show(data: ApiTypes.Meter.HouseMeterTaskDetails.Show): Promise { + return request('admin/meter/house_meter_task_details/show', { data }); + }, + Delete(data: ApiTypes.Meter.HouseMeterTaskDetails.Delete): Promise { + return request('admin/meter/house_meter_task_details/delete', { data }); + }, + }, HouseMeterTasks: { List(data?: ApiTypes.Meter.HouseMeterTasks.List): Promise { return request('admin/meter/house_meter_tasks/list', { data }); diff --git a/src/gen/Enums.ts b/src/gen/Enums.ts index eceb3cf..9c062a6 100644 --- a/src/gen/Enums.ts +++ b/src/gen/Enums.ts @@ -154,7 +154,7 @@ export const BannersTypeEnum= { // 缓存类型 export const CacheTypeEnum= { - 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#0a9319","value":"MobilePhoneVerificationCode"}, + 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#b123bc","value":"MobilePhoneVerificationCode"}, }; // CompaniesMerchantTypeEnum @@ -176,6 +176,12 @@ export const CompanyAppsModuleEnum= { 'Customer': {"text":"客户端","color":"#10b981","value":"Customer"}, }; +// CompanyAppsWorkTypeEnum +export const CompanyAppsWorkTypeEnum= { + 'WorkWechatApp': {"text":"企微应用","color":"#00c853","value":"WorkWechatApp"}, + 'WorkWechat': {"text":"企微","color":"#0091ea","value":"WorkWechat"}, +}; + // CompanyEmployeeBacklogsStatusEnum export const CompanyEmployeeBacklogsStatusEnum= { 'Pending': {"text":"待办","color":"#FF6600","value":"Pending"}, diff --git a/src/pages/moments/classification/index.tsx b/src/pages/moments/classification/index.tsx new file mode 100644 index 0000000..3f3b7b6 --- /dev/null +++ b/src/pages/moments/classification/index.tsx @@ -0,0 +1,69 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { ProTable } from '@ant-design/pro-components'; +import { Space } from 'antd'; +import Create from './modals/Create'; +import Update from './modals/Update'; + +export default function Index({ title = '朋友圈分类' }) { + // 注册当前页面为标签页 + usePageTabs({ + tabKey: 'moments-classification', + tabLabel: title, + }); + + return ( + + + MyProTableProps.request( + params, + sort, + Apis.Customer.CustomerMomentCategories.List, + ) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + MyColumns.ID(), + { + title: '名称', + dataIndex: 'name', + }, + MyColumns.UpdatedAt(), + MyColumns.CreatedAt(), + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + Apis.Customer.CustomerMomentCategories.Delete({ + id: item.id, + }).then(() => action?.reload()) + } + /> + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/moments/classification/modals/Create.tsx b/src/pages/moments/classification/modals/Create.tsx new file mode 100644 index 0000000..edbcfa5 --- /dev/null +++ b/src/pages/moments/classification/modals/Create.tsx @@ -0,0 +1,38 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { MomentSelect } from '@/components/MomentCategories'; +import { Apis } from '@/gen/Apis'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { message } from 'antd'; +export default function Create(props: MyBetaModalFormProps) { + return ( + + {...MyModalFormProps.props} + title={`添加${props.title}`} + wrapperCol={{ span: 24 }} + width="500px" + trigger={} + onFinish={async (values) => + Apis.Customer.CustomerMomentCategories.Store(values) + .then(() => { + props.reload?.(); + message.success(props.title + '成功'); + return true; + }) + .catch(() => false) + } + columns={[ + MomentSelect.MomentCategoriesTree(), + { + key: 'name', + title: '分类名称', + formItemProps: { ...rulesHelper.text }, + }, + ]} + /> + ); +} diff --git a/src/pages/moments/classification/modals/Update.tsx b/src/pages/moments/classification/modals/Update.tsx new file mode 100644 index 0000000..90d16ba --- /dev/null +++ b/src/pages/moments/classification/modals/Update.tsx @@ -0,0 +1,51 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { MomentSelect } from '@/components/MomentCategories'; +import { Apis } from '@/gen/Apis'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { Form, message } from 'antd'; +export default function Update(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + return ( + + {...MyModalFormProps.props} + title={`编辑${props.title}`} + trigger={} + wrapperCol={{ span: 24 }} + width="500px" + form={form} + onOpenChange={(open: any) => { + if (open && props.item) { + form.setFieldsValue({ + ...props.item, + roles_id: props.item?.roles?.map((item: any) => item.value), + }); + } + }} + onFinish={async (values) => + Apis.Customer.CustomerMomentCategories.Update({ + ...values, + id: props.item?.id ?? 0, + }) + .then(() => { + props.reload?.(); + message.success(props.title + '成功'); + return true; + }) + .catch(() => false) + } + columns={[ + MomentSelect.MomentCategoriesTree(), + { + key: 'name', + title: '分类名称', + formItemProps: { ...rulesHelper.text }, + }, + ]} + /> + ); +} diff --git a/src/pages/moments/list/index.tsx b/src/pages/moments/list/index.tsx new file mode 100644 index 0000000..84dfae9 --- /dev/null +++ b/src/pages/moments/list/index.tsx @@ -0,0 +1,69 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { ProTable } from '@ant-design/pro-components'; +import { Space } from 'antd'; +import Create from './modals/Create'; +import Update from './modals/Update'; + +export default function Index({ title = '推送任务' }) { + // 注册当前页面为标签页 + usePageTabs({ + tabKey: 'moments-list', + tabLabel: title, + }); + + return ( + + + MyProTableProps.request( + params, + sort, + Apis.Customer.CustomerMoments.List, + ) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + MyColumns.ID(), + { + title: '名称', + dataIndex: 'name', + }, + MyColumns.UpdatedAt(), + MyColumns.CreatedAt(), + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + Apis.Customer.CustomerMomentCategories.Delete({ + id: item.id, + }).then(() => action?.reload()) + } + /> + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/moments/list/modals/Create.tsx b/src/pages/moments/list/modals/Create.tsx new file mode 100644 index 0000000..5e747ae --- /dev/null +++ b/src/pages/moments/list/modals/Create.tsx @@ -0,0 +1,305 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { MomentSelect } from '@/components/MomentCategories'; +import { MyModal } from '@/components/MyModal'; +import { Selects } from '@/components/Select'; +import MyTransferProject from '@/components/TransferProject'; +import { Apis } from '@/gen/Apis'; +import { + CustomerMomentsChannelEnum, + CustomerMomentsContentTypeEnum, + CustomerMomentsPushTypeEnum, + CustomerMomentsRangeTypeEnum, + CustomerMomentsTaskEndTypeEnum, +} from '@/gen/Enums'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { Button, message, Space, Steps } from 'antd'; +import { useState } from 'react'; +export default function Create(props: MyBetaModalFormProps) { + const [current, setCurrent] = useState(0); + const [formData, setFormData] = useState({}); + const steps = [ + { + title: '创建任务', + columns: [ + MyFormItems.EnumRadio({ + key: 'channel', + title: '发送渠道', + valueEnum: CustomerMomentsChannelEnum, + required: true, + }), + Selects?.Companies({ + key: 'companies_id', + title: '公司', + colProps: { span: 24 }, + required: true, + }), + MomentSelect.MomentCategoriesSelect({ + title: '内容分类', + formItemProps: { ...rulesHelper.array }, + }), + { + valueType: 'group', + colProps: { span: 24 }, + columns: [ + MyFormItems.EnumRadio({ + key: 'push_type', + title: '推送类型', + valueEnum: CustomerMomentsPushTypeEnum, + required: true, + colProps: { span: 8 }, + }), + { + name: ['push_type'], + valueType: 'dependency', + columns: ({ push_type }: any) => { + return push_type === 'ScheduledPush' + ? [ + { + key: 'scheduled_time', + title: '定时发送时间', + valueType: 'dateTime', + colProps: { span: 10 }, + }, + ] + : []; + }, + }, + ], + }, + { + valueType: 'group', + colProps: { span: 24 }, + columns: [ + MyFormItems.EnumRadio({ + key: 'task_end_type', + title: '任务结束类型', + valueEnum: CustomerMomentsTaskEndTypeEnum, + required: true, + colProps: { span: 8 }, + }), + { + name: ['task_end_type'], + valueType: 'dependency', + columns: ({ task_end_type }: any) => { + return task_end_type === 'AfterNDays' + ? [ + { + key: 'task_days', + title: '任务结束天数', + colProps: { span: 10 }, + valueType: 'number', + formItemProps: { ...rulesHelper.number }, + fieldProps: { + suffix: '天结束', + }, + }, + ] + : task_end_type === 'ScheduledEnd' + ? [ + { + key: 'task_end_time', + title: '定时结束', + valueType: 'dateTime', + formItemProps: { ...rulesHelper.text }, + colProps: { span: 10 }, + }, + ] + : []; + }, + }, + ], + }, + MyFormItems.EnumSelect({ + key: 'range_type', + title: '范围类型', + valueEnum: CustomerMomentsRangeTypeEnum, + required: true, + }), + + { + name: ['range_type'], + valueType: 'dependency', + columns: ({ range_type }: any) => { + return range_type === 'Project' + ? [ + { + key: 'range_data', + title: '选择范围', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.array }, + renderFormItem: () => , + }, + ] + : []; + }, + }, + ], + }, + { + title: '创建内容', + columns: [ + MyFormItems.EnumRadio({ + key: 'content_type', + title: '内容类型', + valueEnum: CustomerMomentsContentTypeEnum, + required: true, + colProps: { span: 24 }, + }), + + { + key: 'skip_url', + title: '链接', + formItemProps: { ...rulesHelper.text }, + colProps: { span: 12 }, + }, + { + key: 'title', + title: '标题', + formItemProps: { ...rulesHelper.text }, + colProps: { span: 12 }, + }, + { + name: ['content_type'], + valueType: 'dependency', + columns: ({ content_type }: any) => { + return content_type === 'MiniProgram' + ? [ + { + key: 'mini_program_app_id', + title: '小程序APPID', + formItemProps: { ...rulesHelper.text }, + colProps: { span: 24 }, + }, + ] + : []; + }, + }, + { + key: 'content', + title: '内容', + valueType: 'textarea', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }, + { + key: 'desc', + title: '描述', + valueType: 'textarea', + colProps: { span: 24 }, + }, + MyFormItems.UploadImages({ + key: 'cover_image', + title: '封面', + max: 1, + }), + MyFormItems.UploadImages({ + key: 'attachments', + title: '附件', + uploadType: 'file', + max: 100, + colProps: { span: 12 }, + }), + ], + }, + ]; + + const handleNext = async () => { + // 这里可以添加表单验证逻辑 + if (current < steps.length - 1) { + setCurrent(current + 1); + } + }; + + // 处理上一步 + const handlePrev = () => { + if (current > 0) { + setCurrent(current - 1); + } + }; + + return ( + + + + {...MyModalFormProps.props} + title={`添加${props.title}`} + wrapperCol={{ span: 24 }} + width="800px" + layoutType="Form" + trigger={} + onFinish={async (values) => { + setFormData(values); + console.log('提交的数据2:', values); + if (current < steps.length - 1) { + handleNext(); + } else { + let data = { ...formData, ...values }; + Apis.Customer.CustomerMoments.Store({ + ...data, + one_moment_categories_id: formData?.moment_categories_ids[0], + two_moment_categories_id: formData?.moment_categories_ids[1], + }) + .then(() => { + props.reload?.(); + message.success(props.title + '成功'); + return true; + }) + .catch(() => false); + } + }} + // onFinish={async (values) => + // Apis.Customer.CustomerMomentCategories.Store(values) + // .then(() => { + // props.reload?.(); + // message.success(props.title + '成功'); + // return true; + // }) + // .catch(() => false) + // } + columns={steps[current].columns} + submitter={{ + render: (props, dom) => { + return ( + + {current > 0 && ( + + )} + {current < steps.length - 1 ? ( + + ) : ( + + )} + + ); + }, + }} + /> + + } + /> + ); +} diff --git a/src/pages/moments/list/modals/Update.tsx b/src/pages/moments/list/modals/Update.tsx new file mode 100644 index 0000000..90d16ba --- /dev/null +++ b/src/pages/moments/list/modals/Update.tsx @@ -0,0 +1,51 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { MomentSelect } from '@/components/MomentCategories'; +import { Apis } from '@/gen/Apis'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { Form, message } from 'antd'; +export default function Update(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + return ( + + {...MyModalFormProps.props} + title={`编辑${props.title}`} + trigger={} + wrapperCol={{ span: 24 }} + width="500px" + form={form} + onOpenChange={(open: any) => { + if (open && props.item) { + form.setFieldsValue({ + ...props.item, + roles_id: props.item?.roles?.map((item: any) => item.value), + }); + } + }} + onFinish={async (values) => + Apis.Customer.CustomerMomentCategories.Update({ + ...values, + id: props.item?.id ?? 0, + }) + .then(() => { + props.reload?.(); + message.success(props.title + '成功'); + return true; + }) + .catch(() => false) + } + columns={[ + MomentSelect.MomentCategoriesTree(), + { + key: 'name', + title: '分类名称', + formItemProps: { ...rulesHelper.text }, + }, + ]} + /> + ); +} -- 2.47.2 From 3f07ea45a2f626a335d9a1befb78b4064463c71b Mon Sep 17 00:00:00 2001 From: uiuJun <> Date: Sat, 27 Sep 2025 23:22:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat=EF=BC=9A=E6=9B=B4=E6=96=B0=E6=88=BF?= =?UTF-8?q?=E5=B1=8B=E8=B4=A6=E5=8D=95=EF=BC=8C=E4=BF=AE=E5=A4=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=88=9B=E5=BB=BA=E7=9A=84=20id=20=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gen/ApiTypes.d.ts | 20 ++- src/gen/Apis.ts | 14 ++ src/gen/Enums.ts | 2 +- src/pages/archive/index.tsx | 4 +- src/pages/archive/modals/Delivery.tsx | 2 +- src/pages/archive/table/OccupantsNow.tsx | 2 +- src/pages/archive/table/modals/Transfer.tsx | 2 +- .../asset/activities/modals/EnrollsList.tsx | 3 +- src/pages/asset_houses_bill/index.tsx | 128 ------------------ src/pages/bills/list/index.tsx | 13 +- .../bills/summary/components/BillInfo.tsx | 35 +++++ src/pages/bills/summary/index.tsx | 23 ++-- .../bills/summary/modals/SummaryShow.tsx | 100 -------------- src/pages/bills/summary/show/$id.tsx | 83 ++++++++++++ .../bills/summary/table/CancelledBill.tsx | 76 +++++++++++ src/pages/bills/summary/table/PaidBill.tsx | 79 +++++++++++ src/pages/bills/summary/table/UnpaidBill.tsx | 80 +++++++++++ .../bills/summary/table/modals/BillShow.tsx | 71 ++++++++++ src/pages/charge/standard/index.tsx | 2 +- .../company/brand/modals/BrandsCreate.tsx | 5 +- .../employees/modals/EmployeeCreate.tsx | 4 +- .../company/list/table/Organizations.tsx | 16 ++- src/pages/company/organizations/index.tsx | 18 ++- .../modals/NextOrganizationChange.tsx | 71 ++++++++++ .../modals/OrganizationChange.tsx | 8 +- .../modals/OrganizationCreate.tsx | 2 +- src/pages/mete/list/modals/MeterHasOne.tsx | 5 + 27 files changed, 594 insertions(+), 274 deletions(-) delete mode 100644 src/pages/asset_houses_bill/index.tsx create mode 100644 src/pages/bills/summary/components/BillInfo.tsx delete mode 100644 src/pages/bills/summary/modals/SummaryShow.tsx create mode 100644 src/pages/bills/summary/show/$id.tsx create mode 100644 src/pages/bills/summary/table/CancelledBill.tsx create mode 100644 src/pages/bills/summary/table/PaidBill.tsx create mode 100644 src/pages/bills/summary/table/UnpaidBill.tsx create mode 100644 src/pages/bills/summary/table/modals/BillShow.tsx create mode 100644 src/pages/company/organizations/modals/NextOrganizationChange.tsx diff --git a/src/gen/ApiTypes.d.ts b/src/gen/ApiTypes.d.ts index 40edeec..fe79f13 100644 --- a/src/gen/ApiTypes.d.ts +++ b/src/gen/ApiTypes.d.ts @@ -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] diff --git a/src/gen/Apis.ts b/src/gen/Apis.ts index b2b2119..f5cb3ed 100644 --- a/src/gen/Apis.ts +++ b/src/gen/Apis.ts @@ -266,6 +266,9 @@ export const Apis = { Show(data: ApiTypes.Bill.HouseBills.Show): Promise { return request('admin/bill/house_bills/show', { data }); }, + SummaryShow(data: ApiTypes.Bill.HouseBills.SummaryShow): Promise { + return request('admin/bill/house_bills/summary_show', { data }); + }, SoftDelete(data: ApiTypes.Bill.HouseBills.SoftDelete): Promise { 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 { + return request('admin/meter/house_meter_task_details/list', { data }); + }, + Show(data: ApiTypes.Meter.HouseMeterTaskDetails.Show): Promise { + return request('admin/meter/house_meter_task_details/show', { data }); + }, + Delete(data: ApiTypes.Meter.HouseMeterTaskDetails.Delete): Promise { + return request('admin/meter/house_meter_task_details/delete', { data }); + }, + }, HouseMeterTasks: { List(data?: ApiTypes.Meter.HouseMeterTasks.List): Promise { return request('admin/meter/house_meter_tasks/list', { data }); diff --git a/src/gen/Enums.ts b/src/gen/Enums.ts index eceb3cf..cc50d7d 100644 --- a/src/gen/Enums.ts +++ b/src/gen/Enums.ts @@ -154,7 +154,7 @@ export const BannersTypeEnum= { // 缓存类型 export const CacheTypeEnum= { - 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#0a9319","value":"MobilePhoneVerificationCode"}, + 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#262025","value":"MobilePhoneVerificationCode"}, }; // CompaniesMerchantTypeEnum diff --git a/src/pages/archive/index.tsx b/src/pages/archive/index.tsx index c6c8695..2d06536 100644 --- a/src/pages/archive/index.tsx +++ b/src/pages/archive/index.tsx @@ -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 = '房屋档案' }) { ) : ( '' diff --git a/src/pages/archive/modals/Delivery.tsx b/src/pages/archive/modals/Delivery.tsx index ecf078f..744d191 100644 --- a/src/pages/archive/modals/Delivery.tsx +++ b/src/pages/archive/modals/Delivery.tsx @@ -79,7 +79,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { copyIconProps: false, creatorButtonProps: { - creatorButtonText: '添加产权人', + creatorButtonText: '添加业主', }, itemRender: ( { listDom, action }: any, diff --git a/src/pages/archive/table/OccupantsNow.tsx b/src/pages/archive/table/OccupantsNow.tsx index c8e00ee..5171a64 100644 --- a/src/pages/archive/table/OccupantsNow.tsx +++ b/src/pages/archive/table/OccupantsNow.tsx @@ -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 ? ( '' diff --git a/src/pages/archive/table/modals/Transfer.tsx b/src/pages/archive/table/modals/Transfer.tsx index 43e2d0e..916b040 100644 --- a/src/pages/archive/table/modals/Transfer.tsx +++ b/src/pages/archive/table/modals/Transfer.tsx @@ -82,7 +82,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { copyIconProps: false, creatorButtonProps: { - creatorButtonText: '添加产权人', + creatorButtonText: '添加业主', }, itemRender: ( { listDom, action }: any, diff --git a/src/pages/asset/activities/modals/EnrollsList.tsx b/src/pages/asset/activities/modals/EnrollsList.tsx index a24842f..ac89d19 100644 --- a/src/pages/asset/activities/modals/EnrollsList.tsx +++ b/src/pages/asset/activities/modals/EnrollsList.tsx @@ -15,7 +15,7 @@ export default function EnrollsList(props: MyBetaModalFormProps) { - { - setParams(params); - return MyProTableProps.request( - params, - sort, - Apis.Asset.AssetHouses.List, - ); - }} - toolBarRender={() => [ - , - ]} - 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) => ( - - - - - Apis.Asset.AssetHouses.Delete({ - id: item.id, - }).then(() => action?.reload()) - } - /> - - ), - }), - ]} - /> - - ); -} diff --git a/src/pages/bills/list/index.tsx b/src/pages/bills/list/index.tsx index 06f5bce..7ee7b6c 100644 --- a/src/pages/bills/list/index.tsx +++ b/src/pages/bills/list/index.tsx @@ -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', diff --git a/src/pages/bills/summary/components/BillInfo.tsx b/src/pages/bills/summary/components/BillInfo.tsx new file mode 100644 index 0000000..ceadd72 --- /dev/null +++ b/src/pages/bills/summary/components/BillInfo.tsx @@ -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 ( + + + + + {item?.asset_house?.full_name || '-'} + + + {item?.total_payable_sum || '-'} + + + {item?.payable_amount_sum || '-'} + + + {item?.late_fee_sum || '-'} + + + {item?.discount_amount_sum || '-'} + + + + + ); +} diff --git a/src/pages/bills/summary/index.tsx b/src/pages/bills/summary/index.tsx index 40bb1c6..3a29097 100644 --- a/src/pages/bills/summary/index.tsx +++ b/src/pages/bills/summary/index.tsx @@ -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) => [ - // , - // , - // ]} columns={[ { title: '房屋ID', @@ -81,7 +71,12 @@ export default function Index({ title = '房屋账单' }) { MyColumns.Option({ render: (_, item: any, index, action) => ( - + { + navigate(`/bills/summary/show/${item.asset_houses_id}`); + }} + /> ), }), diff --git a/src/pages/bills/summary/modals/SummaryShow.tsx b/src/pages/bills/summary/modals/SummaryShow.tsx deleted file mode 100644 index 7d00e9f..0000000 --- a/src/pages/bills/summary/modals/SummaryShow.tsx +++ /dev/null @@ -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 ( - - 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) => ( - - - {/* - Apis.Bill.HouseBills.Delete({ id: item.id }).then(() => - action?.reload(), - ) - } - /> */} - - ), - }), - ]} - /> - } - /> - ); -} diff --git a/src/pages/bills/summary/show/$id.tsx b/src/pages/bills/summary/show/$id.tsx new file mode 100644 index 0000000..634dbcd --- /dev/null +++ b/src/pages/bills/summary/show/$id.tsx @@ -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({}); + + // 注册标签页 + 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: ( + + ), + }, + { + label: '已付账单', + key: '2', + closable: false, + children: ( + + ), + }, + { + label: '作废账单', + key: '3', + closable: false, + children: ( + + ), + }, + ]; + + return ( + + + + + + + ); +} diff --git a/src/pages/bills/summary/table/CancelledBill.tsx b/src/pages/bills/summary/table/CancelledBill.tsx new file mode 100644 index 0000000..1c5238d --- /dev/null +++ b/src/pages/bills/summary/table/CancelledBill.tsx @@ -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(); + useEffect(() => { + actionLooks?.current.reloadAndRest(); + }, [rest.loadmore]); + + return ( + <> + > + {...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) => ( + + + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/bills/summary/table/PaidBill.tsx b/src/pages/bills/summary/table/PaidBill.tsx new file mode 100644 index 0000000..6348be6 --- /dev/null +++ b/src/pages/bills/summary/table/PaidBill.tsx @@ -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(); + useEffect(() => { + actionLooks?.current.reloadAndRest(); + }, [rest.loadmore]); + + return ( + <> + > + {...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) => ( + + + + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/bills/summary/table/UnpaidBill.tsx b/src/pages/bills/summary/table/UnpaidBill.tsx new file mode 100644 index 0000000..a7a3ed1 --- /dev/null +++ b/src/pages/bills/summary/table/UnpaidBill.tsx @@ -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(); + useEffect(() => { + actionLooks?.current.reloadAndRest(); + }, [rest.loadmore]); + + return ( + <> + > + {...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) => ( + + + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/bills/summary/table/modals/BillShow.tsx b/src/pages/bills/summary/table/modals/BillShow.tsx new file mode 100644 index 0000000..c31c7ec --- /dev/null +++ b/src/pages/bills/summary/table/modals/BillShow.tsx @@ -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 ( + + + + + {props?.item?.asset_house?.full_name || '-'} + + + + {props?.item?.amount || '-'} + + + + + {props?.item?.discount_amount || '-'} + + + {props?.item?.late_fee || '-'} + + + + {props?.item?.total_payable_amount || '-'}{' '} + + + + + + + {props?.item?.year || '-'}- + {String(props?.item?.month).padStart(2, '0')}月 + + + ( {props?.item?.start_date || '-'} 至{' '} + {props?.item?.end_date || '-'}) + + + + + + {props?.item?.receipt_account?.company_name || '-'} + {props?.item?.receipt_account?.company_bank || '-'} + {props?.item?.receipt_account?.company_account || '-'} + + + + + + } + /> + ); +} diff --git a/src/pages/charge/standard/index.tsx b/src/pages/charge/standard/index.tsx index 5c1ccca..3056a3d 100644 --- a/src/pages/charge/standard/index.tsx +++ b/src/pages/charge/standard/index.tsx @@ -140,7 +140,7 @@ export default function Index({ title = '收费标准' }) { { - navigate(`/house_charge_standard/show/${item.id}`); + navigate(`/charge/standard/show/${item.id}`); }} /> diff --git a/src/pages/company/employees/modals/EmployeeCreate.tsx b/src/pages/company/employees/modals/EmployeeCreate.tsx index 3a5e503..a904def 100644 --- a/src/pages/company/employees/modals/EmployeeCreate.tsx +++ b/src/pages/company/employees/modals/EmployeeCreate.tsx @@ -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 }, diff --git a/src/pages/company/list/table/Organizations.tsx b/src/pages/company/list/table/Organizations.tsx index ed08b33..93d4460 100644 --- a/src/pages/company/list/table/Organizations.tsx +++ b/src/pages/company/list/table/Organizations.tsx @@ -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) => ( - + )} + diff --git a/src/pages/company/organizations/index.tsx b/src/pages/company/organizations/index.tsx index 8db39a3..06acbf8 100644 --- a/src/pages/company/organizations/index.tsx +++ b/src/pages/company/organizations/index.tsx @@ -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) => ( - + )} + + diff --git a/src/pages/company/organizations/modals/NextOrganizationChange.tsx b/src/pages/company/organizations/modals/NextOrganizationChange.tsx new file mode 100644 index 0000000..41ce715 --- /dev/null +++ b/src/pages/company/organizations/modals/NextOrganizationChange.tsx @@ -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 ( + + {...MyModalFormProps.props} + title={`添加${props.title}`} + wrapperCol={{ span: 24 }} + width="500px" + trigger={} + 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 }, + }, + ]} + /> + ); +} diff --git a/src/pages/company/organizations/modals/OrganizationChange.tsx b/src/pages/company/organizations/modals/OrganizationChange.tsx index 7e26393..035a8ab 100644 --- a/src/pages/company/organizations/modals/OrganizationChange.tsx +++ b/src/pages/company/organizations/modals/OrganizationChange.tsx @@ -11,14 +11,12 @@ export default function Update(props: MyBetaModalFormProps) { {...MyModalFormProps.props} title={`${props.title}调整`} form={form} - trigger={ - - } + trigger={} 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 }, diff --git a/src/pages/company/organizations/modals/OrganizationCreate.tsx b/src/pages/company/organizations/modals/OrganizationCreate.tsx index b9432ab..aba85ff 100644 --- a/src/pages/company/organizations/modals/OrganizationCreate.tsx +++ b/src/pages/company/organizations/modals/OrganizationCreate.tsx @@ -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(() => { diff --git a/src/pages/mete/list/modals/MeterHasOne.tsx b/src/pages/mete/list/modals/MeterHasOne.tsx index 0528a9c..3429070 100644 --- a/src/pages/mete/list/modals/MeterHasOne.tsx +++ b/src/pages/mete/list/modals/MeterHasOne.tsx @@ -22,6 +22,8 @@ export default function ChargeStandardHasHouse(props: MyBetaModalFormProps) { // 添加 tableRef 用于操作表格 const tableRef = useRef(); + // 添加 modalRef 用于关闭窗口 + const modalRef = useRef(); 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={