From 60b89dd18828dd12ba009dfef7f4f1f9214bd3f7 Mon Sep 17 00:00:00 2001 From: uiuJun <> Date: Thu, 18 Sep 2025 19:40:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .umirc.ts | 6 +- gencode.json | 2 +- src/common/components/schema/MyColumns.tsx | 45 +- src/components/Select.tsx | 58 +- src/gen/ApiTypes.d.ts | 13 +- src/gen/Apis.ts | 5 +- src/gen/Enums.ts | 2 +- .../modals/AnnouncementCreate.tsx | 85 --- .../announcement/modals/AnnouncementShow.tsx | 53 -- .../modals/AnnouncementUpdate.tsx | 95 --- src/pages/asset/accounts/index.tsx | 88 +++ .../asset/accounts/modals/AccountsGet.tsx | 67 +++ .../modals/AccountsSelect.tsx} | 2 +- src/pages/{ => asset}/announcement/index.tsx | 34 +- .../modals/AnnouncementCreate.tsx | 13 +- .../modals/AnnouncementShow.tsx | 0 .../modals/AnnouncementUpdate.tsx | 0 .../asset/components/modals/GridCreate.tsx | 154 ----- .../asset/convenience_services/index.tsx | 111 ++++ .../modals/ServiceCreate.tsx | 13 +- .../modals/ServiceUpdate.tsx | 0 src/pages/asset/grids/index.tsx | 91 +++ .../asset/grids/modals/GridCreate copy 2.tsx | 216 +++++++ .../asset/grids/modals/GridCreate copy.tsx | 157 +++++ src/pages/asset/grids/modals/GridCreate.tsx | 159 ++++++ .../modals/GridMannger.tsx | 0 .../modals/GridUpdate.tsx | 0 src/pages/asset/houses/index.tsx | 539 ++++++++++++++++++ .../modals/BuildingsCreate.tsx | 7 +- .../modals/BuildingsUpdate.tsx | 0 .../modals/HousesCreate.tsx | 7 +- .../modals/HousesShow.tsx | 0 .../modals/HousesUpdate.tsx | 2 +- .../modals/UnitsCreate.tsx | 7 +- .../modals/UnitsUpdate.tsx | 0 .../{ => list}/components/Announcement.tsx | 7 +- .../{ => list}/components/AssetAccounts.tsx | 4 +- .../{ => list}/components/AssetBuildings.tsx | 12 +- .../asset/{ => list}/components/AssetGrid.tsx | 13 +- .../asset/{ => list}/components/AssetInfo.tsx | 2 +- .../{ => list}/components/ChargeStandard.tsx | 0 .../components/ConvenienceServices.tsx | 4 +- .../components/modals/BindCompany.tsx | 0 .../modals/ChargeStandardCreate.tsx | 0 .../modals/ChargeStandardHasHouse.tsx | 0 .../modals/ChargeStandardUpdate.tsx | 0 src/pages/asset/{ => list}/index.tsx | 4 +- .../asset/{ => list}/modals/AssetCreate.tsx | 0 .../asset/{ => list}/modals/AssetUpdate.tsx | 0 src/pages/asset/{ => list/show}/$id.tsx | 18 +- src/pages/asset_houses/index.tsx | 6 +- src/pages/asset_houses_bill/index.tsx | 4 +- .../company/{company_apps => apps}/index.tsx | 65 ++- .../modals/AppCreate.tsx | 0 .../modals/AppUpdate.tsx | 0 src/pages/company/brand/index.tsx | 4 +- .../company/brand/modals/BrandUpdate.tsx | 2 +- .../company/brand/modals/BrandsCreate.tsx | 2 +- src/pages/company/{auto => list}/index.tsx | 2 +- .../{auto => list}/modals/CompanyCreate.tsx | 10 +- .../{auto => list}/modals/CompanyUpdate.tsx | 0 src/pages/company/{auto => list/show}/$id.tsx | 18 +- .../company/{auto => list}/table/Apps.tsx | 9 +- .../company/{auto => list}/table/Assets.tsx | 2 +- .../company/{auto => list}/table/Brands.tsx | 4 +- .../{auto => list}/table/ComponentsInfo.tsx | 0 .../{auto => list}/table/Employees.tsx | 0 .../{auto => list}/table/Organizations.tsx | 0 .../{auto => list}/table/Positions.tsx | 0 .../{auto => list}/table/ReceiptAccounts.tsx | 0 .../modals/CustomerOpinionShow.tsx | 2 +- .../components/HasHouse.tsx | 2 +- src/pages/house_charge_standard/index.tsx | 4 +- 73 files changed, 1681 insertions(+), 550 deletions(-) delete mode 100644 src/pages/announcement/modals/AnnouncementCreate.tsx delete mode 100644 src/pages/announcement/modals/AnnouncementShow.tsx delete mode 100644 src/pages/announcement/modals/AnnouncementUpdate.tsx create mode 100644 src/pages/asset/accounts/index.tsx create mode 100644 src/pages/asset/accounts/modals/AccountsGet.tsx rename src/pages/asset/{components/modals/AssetAccountsSelect.tsx => accounts/modals/AccountsSelect.tsx} (98%) rename src/pages/{ => asset}/announcement/index.tsx (89%) rename src/pages/asset/{components => announcement}/modals/AnnouncementCreate.tsx (86%) rename src/pages/asset/{components => announcement}/modals/AnnouncementShow.tsx (100%) rename src/pages/asset/{components => announcement}/modals/AnnouncementUpdate.tsx (100%) delete mode 100644 src/pages/asset/components/modals/GridCreate.tsx create mode 100644 src/pages/asset/convenience_services/index.tsx rename src/pages/asset/{components => convenience_services}/modals/ServiceCreate.tsx (92%) rename src/pages/asset/{components => convenience_services}/modals/ServiceUpdate.tsx (100%) create mode 100644 src/pages/asset/grids/index.tsx create mode 100644 src/pages/asset/grids/modals/GridCreate copy 2.tsx create mode 100644 src/pages/asset/grids/modals/GridCreate copy.tsx create mode 100644 src/pages/asset/grids/modals/GridCreate.tsx rename src/pages/asset/{components => grids}/modals/GridMannger.tsx (100%) rename src/pages/asset/{components => grids}/modals/GridUpdate.tsx (100%) create mode 100644 src/pages/asset/houses/index.tsx rename src/pages/asset/{components => houses}/modals/BuildingsCreate.tsx (90%) rename src/pages/asset/{components => houses}/modals/BuildingsUpdate.tsx (100%) rename src/pages/asset/{components => houses}/modals/HousesCreate.tsx (97%) rename src/pages/asset/{components => houses}/modals/HousesShow.tsx (100%) rename src/pages/asset/{components => houses}/modals/HousesUpdate.tsx (99%) rename src/pages/asset/{components => houses}/modals/UnitsCreate.tsx (94%) rename src/pages/asset/{components => houses}/modals/UnitsUpdate.tsx (100%) rename src/pages/asset/{ => list}/components/Announcement.tsx (94%) rename src/pages/asset/{ => list}/components/AssetAccounts.tsx (96%) rename src/pages/asset/{ => list}/components/AssetBuildings.tsx (96%) rename src/pages/asset/{ => list}/components/AssetGrid.tsx (85%) rename src/pages/asset/{ => list}/components/AssetInfo.tsx (98%) rename src/pages/asset/{ => list}/components/ChargeStandard.tsx (100%) rename src/pages/asset/{ => list}/components/ConvenienceServices.tsx (95%) rename src/pages/asset/{ => list}/components/modals/BindCompany.tsx (100%) rename src/pages/asset/{ => list}/components/modals/ChargeStandardCreate.tsx (100%) rename src/pages/asset/{ => list}/components/modals/ChargeStandardHasHouse.tsx (100%) rename src/pages/asset/{ => list}/components/modals/ChargeStandardUpdate.tsx (100%) rename src/pages/asset/{ => list}/index.tsx (97%) rename src/pages/asset/{ => list}/modals/AssetCreate.tsx (100%) rename src/pages/asset/{ => list}/modals/AssetUpdate.tsx (100%) rename src/pages/asset/{ => list/show}/$id.tsx (84%) rename src/pages/company/{company_apps => apps}/index.tsx (55%) rename src/pages/company/{company_apps => apps}/modals/AppCreate.tsx (100%) rename src/pages/company/{company_apps => apps}/modals/AppUpdate.tsx (100%) rename src/pages/company/{auto => list}/index.tsx (97%) rename src/pages/company/{auto => list}/modals/CompanyCreate.tsx (93%) rename src/pages/company/{auto => list}/modals/CompanyUpdate.tsx (100%) rename src/pages/company/{auto => list/show}/$id.tsx (86%) rename src/pages/company/{auto => list}/table/Apps.tsx (91%) rename src/pages/company/{auto => list}/table/Assets.tsx (97%) rename src/pages/company/{auto => list}/table/Brands.tsx (95%) rename src/pages/company/{auto => list}/table/ComponentsInfo.tsx (100%) rename src/pages/company/{auto => list}/table/Employees.tsx (100%) rename src/pages/company/{auto => list}/table/Organizations.tsx (100%) rename src/pages/company/{auto => list}/table/Positions.tsx (100%) rename src/pages/company/{auto => list}/table/ReceiptAccounts.tsx (100%) diff --git a/.umirc.ts b/.umirc.ts index 8050038..af85b4a 100644 --- a/.umirc.ts +++ b/.umirc.ts @@ -15,9 +15,9 @@ export default defineConfig({ proxy: { '/api/': { // target: 'http://yt:8003', - target: 'http://10.39.13.80:8001', - // target: 'http://10.39.67.86:8001/', - // target: 'https://test-admin.linyikj.com.cn/', + // target: 'http://10.39.13.80:8001', + // target: 'http://10.39.13.78:8001/', + target: 'https://test-admin.linyikj.com.cn/', // target: 'http://we6f9c65.natappfree.cc', // target: 'https://loanos-test.nchl.net/', changeOrigin: true, diff --git a/gencode.json b/gencode.json index 5c1814c..b5fb778 100644 --- a/gencode.json +++ b/gencode.json @@ -1,4 +1,4 @@ { - "url": "http://10.39.13.80:8001/api/docs/openapi", + "url": "http://10.39.13.78:8001/api/docs/openapi", "module": "Admin" } diff --git a/src/common/components/schema/MyColumns.tsx b/src/common/components/schema/MyColumns.tsx index f667992..736cc91 100644 --- a/src/common/components/schema/MyColumns.tsx +++ b/src/common/components/schema/MyColumns.tsx @@ -1,6 +1,6 @@ import { MyResponseType, renderTextHelper } from '@/common'; import { ProColumns } from '@ant-design/pro-components'; -import { Image, Popconfirm, Tag } from 'antd'; +import { Image, Popconfirm, Switch, Tag } from 'antd'; type ReturnType = ProColumns, 'text'>; @@ -50,36 +50,23 @@ export const MyColumns = { } & ReturnType): ReturnType { return { title: '启/禁用', - render: (_, item, index, action) => - item?.deleted_at ? ( - { + render: (_, item, index, action) => ( + { + if (item?.deleted_at) { onRestore?.({ id: item.id }).then(() => action?.reload()); - }} - okText="是" - cancelText="否" - > - - 已禁用 - - - ) : ( - { + } else { onSoftDelete?.({ id: item.id }).then(() => action?.reload()); - }} - okText="是" - cancelText="否" - > - - 已启用 - - - ), + } + }} + okText="是" + cancelText="否" + > + + + ), search: false, ...rest, }; diff --git a/src/components/Select.tsx b/src/components/Select.tsx index 86188f4..99b8e30 100644 --- a/src/components/Select.tsx +++ b/src/components/Select.tsx @@ -110,7 +110,7 @@ export const Selects = { }, }; }, - // 单元下拉框 + // 网格单元下拉框 GridUnits(props?: PropsType): ReturnType { const { title = '单元', @@ -126,18 +126,21 @@ export const Selects = { valueType: 'select', hideInTable: hideInTable, formItemProps: { ...(required ? rulesHelper.number : {}) }, - request: async (params) => - ( - await Apis.Asset.AssetUnits.GridSelect({ - keywords: params?.KeyWords, - asset_projects_id: params?.asset_projects_id, - asset_buildings_id: params?.asset_buildings_id, - ...params, - }) - ).data, + request: async (params) => { + let res = await Apis.Asset.AssetUnits.GridSelect({ + keywords: params?.KeyWords, + asset_projects_id: params?.asset_projects_id, + ...params, + }); + res?.data?.map((l: any) => { + l.label = l.asset_building.name + l.label; + }); + return res?.data; + }, ...rest, fieldProps: { showSearch: true, + // mode: 'multiple', fieldNames: { label: 'label', value: 'value', @@ -355,6 +358,41 @@ export const Selects = { }, }; }, + //机构收款账户 + CompanyAccounts(props?: PropsType): ReturnType { + const { + title = '收款账户', + key = 'receipt_accounts_id', + required = false, + hideInTable = true, + ...rest + } = props ?? {}; + + return { + title: title, + key: key, + valueType: 'select', + hideInTable: hideInTable, + formItemProps: { ...(required ? rulesHelper.number : {}) }, + request: async (params) => + ( + await Apis.Company.CompanyReceiptAccounts.Select({ + keywords: params?.KeyWords, + ...params, + }) + ).data, + ...rest, + fieldProps: { + showSearch: true, + fieldNames: { + label: 'label', + value: 'value', + }, + ...rest?.fieldProps, + }, + }; + }, + //项目收款账户 ProjectAccounts(props?: PropsType): ReturnType { const { title = '收款账户', diff --git a/src/gen/ApiTypes.d.ts b/src/gen/ApiTypes.d.ts index 768203b..df54f66 100644 --- a/src/gen/ApiTypes.d.ts +++ b/src/gen/ApiTypes.d.ts @@ -75,7 +75,8 @@ declare namespace ApiTypes { "house_occupants_id": number; // 房客id "type": string; // 类型,[enum:HouseRegistersTypeEnum "update_info": string[]; // 要修改的信息 - "update_info.phone"?: phone|required_if:type,UpdatePhone; // 客户手机号 + "update_info.name"?: string; // 客户姓名 + "update_info.phone"?: string; // 客户手机号 "update_info.reserve_phone"?: phone; // 客户备用电话 "update_info.card_type"?: string; // 证件类型,[enum:HouseOccupantsCardTypeEnum] "update_info.id_card"?: string; // 客户身份证号 @@ -733,8 +734,8 @@ declare namespace ApiTypes { } namespace CompanyProjectReceiptAccounts { type List = { - "companies_id": number; // 所属机构id,[ref:companies] - "projects_id": number; // 所属项目id,[ref:asset_projects] + "companies_id"?: number; // 所属机构id,[ref:companies] + "projects_id"?: number; // 所属项目id,[ref:asset_projects] }; type Store = { "companies_id": number; // 所属机构id,[ref:companies] @@ -789,7 +790,7 @@ declare namespace ApiTypes { } namespace CompanyReceiptAccounts { type List = { - "name"?: string; // 模糊搜索:名称 + "company_name"?: string; // 模糊搜索:名称 "companies_id"?: number; // 所属机构id,[ref:companies] }; type Store = { @@ -823,6 +824,10 @@ declare namespace ApiTypes { type Delete = { "id": number; // id }; + type Select = { + "company_name"?: string; // 模糊搜索:名称 + "companies_id"?: number; // 所属机构id,[ref:companies] + }; } namespace Organizations { type List = { diff --git a/src/gen/Apis.ts b/src/gen/Apis.ts index 64afa06..93433d4 100644 --- a/src/gen/Apis.ts +++ b/src/gen/Apis.ts @@ -421,7 +421,7 @@ export const Apis = { }, }, CompanyProjectReceiptAccounts: { - List(data: ApiTypes.Company.CompanyProjectReceiptAccounts.List): Promise { + List(data?: ApiTypes.Company.CompanyProjectReceiptAccounts.List): Promise { return request('admin/company/company_project_receipt_accounts/list', { data }); }, Store(data: ApiTypes.Company.CompanyProjectReceiptAccounts.Store): Promise { @@ -482,6 +482,9 @@ export const Apis = { Delete(data: ApiTypes.Company.CompanyReceiptAccounts.Delete): Promise { return request('admin/company/company_receipt_accounts/delete', { data }); }, + Select(data?: ApiTypes.Company.CompanyReceiptAccounts.Select): Promise { + return request('admin/company/company_receipt_accounts/select', { data }); + }, }, Organizations: { List(data?: ApiTypes.Company.Organizations.List): Promise { diff --git a/src/gen/Enums.ts b/src/gen/Enums.ts index 0e065c9..8e5f44e 100644 --- a/src/gen/Enums.ts +++ b/src/gen/Enums.ts @@ -126,7 +126,7 @@ export const BannersTypeEnum= { // 缓存类型 export const CacheTypeEnum= { - 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#81d182","value":"MobilePhoneVerificationCode"}, + 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#1f86c5","value":"MobilePhoneVerificationCode"}, }; // CompaniesMerchantTypeEnum diff --git a/src/pages/announcement/modals/AnnouncementCreate.tsx b/src/pages/announcement/modals/AnnouncementCreate.tsx deleted file mode 100644 index 768e196..0000000 --- a/src/pages/announcement/modals/AnnouncementCreate.tsx +++ /dev/null @@ -1,85 +0,0 @@ -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 ( - - {...MyModalFormProps.props} - title={`添加公告`} - wrapperCol={{ span: 24 }} - width="600px" - trigger={} - form={form} - onOpenChange={(open: any) => { - if (open) { - form.resetFields(); // 清空表单数据 - } - }} - onFinish={async (values) => - Apis.Msg.MsgPropertyAnnouncements.Store(values) - .then(() => { - props.reload?.(); - message.success('添加公告内容成功'); - return true; - }) - .catch(() => false) - } - columns={[ - { - key: 'title', - title: '公告标题', - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.text }, - }, - { - key: 'content', - title: '公告内容', - valueType: 'textarea', - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.text }, - fieldProps: { - autoSize: { minRows: 4, maxRows: 6 }, - }, - }, - { - key: 'publish_at', - title: '内容显示的发布日期', - valueType: 'date', - colProps: { span: 12 }, - fieldProps: { - style: { width: '100%' }, - }, - formItemProps: { ...rulesHelper.text }, - }, - Selects?.AssetProjects({ - title: '请选择项目', - key: 'asset_projects_id', - colProps: { span: 12 }, - formItemProps: { ...rulesHelper.text }, - }), - { - key: 'sort', - title: '排序', - valueType: 'digit', - colProps: { span: 12 }, - tooltip: '数值越大越靠前', - fieldProps: { - placeholder: '数值越大越靠前', - min: 0, - style: { width: '100%' }, - }, - initialValue: 0, - }, - ]} - /> - ); -} diff --git a/src/pages/announcement/modals/AnnouncementShow.tsx b/src/pages/announcement/modals/AnnouncementShow.tsx deleted file mode 100644 index e2b7215..0000000 --- a/src/pages/announcement/modals/AnnouncementShow.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { MyBetaModalFormProps } from '@/common'; -import { MyModal } from '@/components/MyModal'; -import { ProCard, ProDescriptions } from '@ant-design/pro-components'; -import { Typography } from 'antd'; - -const { Text } = Typography; - -export default function info(props: MyBetaModalFormProps) { - return ( - - - - {props?.item?.title || '-'} - - - -
- {props?.item?.content || '-'} -
-
- - - {props?.item?.publish_at || '-'} - - - {props?.item?.asset_project?.name || '-'} - - - {props?.item?.created_at || '-'} - -
- - } - /> - ); -} diff --git a/src/pages/announcement/modals/AnnouncementUpdate.tsx b/src/pages/announcement/modals/AnnouncementUpdate.tsx deleted file mode 100644 index 2a2043f..0000000 --- a/src/pages/announcement/modals/AnnouncementUpdate.tsx +++ /dev/null @@ -1,95 +0,0 @@ -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 Update(props: MyBetaModalFormProps) { - const [form] = Form.useForm(); - return ( - - {...MyModalFormProps.props} - title={`编辑公告内容`} - trigger={} - wrapperCol={{ span: 24 }} - width="600px" - key={new Date().getTime()} - form={form} - onOpenChange={(open: any) => { - if (open && props.item) { - form.setFieldsValue(props.item); - } - }} - onFinish={async (values) => - Apis.Msg.MsgPropertyAnnouncements.Update({ - ...values, - id: props.item?.id ?? 0, - }) - .then(() => { - props.reload?.(); - message.success('编辑公告内容成功'); - return true; - }) - .catch(() => false) - } - columns={[ - { - key: 'title', - title: '公告标题', - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.text }, - }, - { - key: 'content', - title: '公告内容', - valueType: 'textarea', - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.text }, - fieldProps: { - autoSize: { minRows: 4, maxRows: 6 }, - }, - }, - { - key: 'publish_at', - title: '内容显示的发布日期', - valueType: 'date', - colProps: { span: 12 }, - fieldProps: { - style: { width: '100%' }, - }, - formItemProps: { ...rulesHelper.text }, - }, - Selects?.AssetProjects({ - title: '请选择项目', - key: 'asset_projects_id', - colProps: { span: 12 }, - formItemProps: { ...rulesHelper.text }, - }), - // { - // key: 'is_publish', - // title: '是否立刻发布', - // valueType: 'switch', - // colProps: { span: 8 }, - // }, - { - key: 'sort', - title: '排序', - valueType: 'digit', - colProps: { span: 12 }, - tooltip: '数值越大越靠前', - fieldProps: { - placeholder: '数值越大越靠前', - min: 0, - style: { width: '100%' }, - }, - initialValue: 0, - }, - ]} - /> - ); -} diff --git a/src/pages/asset/accounts/index.tsx b/src/pages/asset/accounts/index.tsx new file mode 100644 index 0000000..3a94e7d --- /dev/null +++ b/src/pages/asset/accounts/index.tsx @@ -0,0 +1,88 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { ProTable } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { Space } from 'antd'; +import AccountsGet from './modals/AccountsGet'; + +export default function Index({ title = '项目账户' }) { + const navigate = useNavigate(); + + // 注册当前页面为标签页 + usePageTabs({ + tabKey: 'company-project-receipt-accounts', + tabLabel: title, + }); + + return ( + + + MyProTableProps.request( + params, + sort, + Apis.Company.CompanyProjectReceiptAccounts.List, + ) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + { + title: 'ID', + dataIndex: 'id', + // width: 360, + }, + { + title: '收款账号名称', + dataIndex: ['receipt_account', 'company_name'], + }, + { + title: '开户行', + dataIndex: ['receipt_account', 'company_bank'], + search: false, + }, + { + title: '收款账号', + dataIndex: ['receipt_account', 'company_account'], + search: false, + }, + // { + // title: '是否默认', + // dataIndex: 'is_default', + // search: false, + // render(_, record) { + // return `${record?.is_default ? '是' : '否'} `; + // }, + // }, + MyColumns.UpdatedAt(), + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + Apis.Company.CompanyProjectReceiptAccounts.Delete({ + id: item.id, + }).then(() => action?.reload()) + } + /> + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/asset/accounts/modals/AccountsGet.tsx b/src/pages/asset/accounts/modals/AccountsGet.tsx new file mode 100644 index 0000000..90b5158 --- /dev/null +++ b/src/pages/asset/accounts/modals/AccountsGet.tsx @@ -0,0 +1,67 @@ +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 ( + + {...MyModalFormProps.props} + form={form} + title={`${props.title}`} + wrapperCol={{ span: 24 }} + width="500px" + trigger={ + + } + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + } + }} + key={new Date().getTime()} + onFinish={async (values) => + Apis.Company.CompanyProjectReceiptAccounts.Store({ + ...values, + }) + .then(() => { + props.reload?.(); + message.success(props.title + '成功'); + return true; + }) + .catch(() => false) + } + columns={[ + Selects?.Companies({ + key: 'companies_id', + title: '选择机构', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.number }, + }), + Selects?.AssetProjects({ + key: 'projects_id', + title: '选择项目', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.number }, + }), + Selects?.CompanyAccounts({ + key: 'receipt_accounts_id', + title: '选择收款账户', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.number }, + }), + ]} + /> + ); +} diff --git a/src/pages/asset/components/modals/AssetAccountsSelect.tsx b/src/pages/asset/accounts/modals/AccountsSelect.tsx similarity index 98% rename from src/pages/asset/components/modals/AssetAccountsSelect.tsx rename to src/pages/asset/accounts/modals/AccountsSelect.tsx index dba2dfc..650b4e4 100644 --- a/src/pages/asset/components/modals/AssetAccountsSelect.tsx +++ b/src/pages/asset/accounts/modals/AccountsSelect.tsx @@ -68,7 +68,7 @@ export default function Index(props: MyBetaModalFormProps) { onShowContactPhone()} /> ); diff --git a/src/pages/announcement/index.tsx b/src/pages/asset/announcement/index.tsx similarity index 89% rename from src/pages/announcement/index.tsx rename to src/pages/asset/announcement/index.tsx index d3d6327..f14af81 100644 --- a/src/pages/announcement/index.tsx +++ b/src/pages/asset/announcement/index.tsx @@ -13,12 +13,12 @@ import AnnouncementCreate from './modals/AnnouncementCreate'; import AnnouncementShow from './modals/AnnouncementShow'; import AnnouncementUpdate from './modals/AnnouncementUpdate'; -export default function Index({ title = '公告管理' }) { +export default function Index({ title = '项目公告' }) { const navigate = useNavigate(); // 注册当前页面为标签页 usePageTabs({ - tabKey: 'Msg', + tabKey: 'msg-property-announcements', tabLabel: title, }); @@ -26,7 +26,7 @@ export default function Index({ title = '公告管理' }) { [ , ]} columns={[ MyColumns.ID(), - { - title: '标题', + title: '关联项目', + dataIndex: ['asset_project', 'name'], + search: false, + render: (_, record) => { + return record?.asset_project?.name; + }, + }, + { + title: '公告标题', dataIndex: 'title', width: 120, // 关键:固定列宽(若父容器过窄,可设 minWidth: 200 优先保证列宽) render: (text) => ( @@ -69,7 +76,7 @@ export default function Index({ title = '公告管理' }) { ), }, { - title: '内容', + title: '公告内容', dataIndex: 'content', valueType: 'textarea', // 仅影响表单编辑时的输入类型,不影响表格展示 search: false, @@ -97,12 +104,10 @@ export default function Index({ title = '公告管理' }) { search: false, }, { - title: '项目', - dataIndex: ['asset_project', 'name'], + title: '是否发布小程序', + dataIndex: 'is_publish', + render: (text) => (text ? '是' : '否'), search: false, - render: (_, record) => { - return record?.asset_project?.name; - }, }, MyColumns.SoftDelete({ title: '启/禁用', @@ -116,9 +121,6 @@ export default function Index({ title = '公告管理' }) { dataIndex: 'created_at', valueType: 'date', search: false, - // render: (_, record) => { - // return record?.created_at?.substring(0, 10); - // }, }, MyColumns.Option({ render: (_, item: any, index, action) => ( @@ -127,7 +129,7 @@ export default function Index({ title = '公告管理' }) { diff --git a/src/pages/asset/components/modals/AnnouncementCreate.tsx b/src/pages/asset/announcement/modals/AnnouncementCreate.tsx similarity index 86% rename from src/pages/asset/components/modals/AnnouncementCreate.tsx rename to src/pages/asset/announcement/modals/AnnouncementCreate.tsx index f261c00..03a4cda 100644 --- a/src/pages/asset/components/modals/AnnouncementCreate.tsx +++ b/src/pages/asset/announcement/modals/AnnouncementCreate.tsx @@ -4,6 +4,7 @@ import { 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'; @@ -27,7 +28,7 @@ export default function Create(props: MyBetaModalFormProps) { onFinish={async (values) => Apis.Msg.MsgPropertyAnnouncements.Store({ ...values, - asset_projects_id: props.item?.id, + asset_projects_id: values?.asset_projects_id || props.item?.id, }) .then(() => { props.reload?.(); @@ -37,6 +38,16 @@ export default function Create(props: MyBetaModalFormProps) { .catch(() => false) } columns={[ + ...(props?.item?.id + ? [] + : [ + Selects?.AssetProjects({ + key: 'asset_projects_id', + title: '关联项目', + colProps: { span: 24 }, + required: true, + }), + ]), { key: 'title', title: '公告标题', diff --git a/src/pages/asset/components/modals/AnnouncementShow.tsx b/src/pages/asset/announcement/modals/AnnouncementShow.tsx similarity index 100% rename from src/pages/asset/components/modals/AnnouncementShow.tsx rename to src/pages/asset/announcement/modals/AnnouncementShow.tsx diff --git a/src/pages/asset/components/modals/AnnouncementUpdate.tsx b/src/pages/asset/announcement/modals/AnnouncementUpdate.tsx similarity index 100% rename from src/pages/asset/components/modals/AnnouncementUpdate.tsx rename to src/pages/asset/announcement/modals/AnnouncementUpdate.tsx diff --git a/src/pages/asset/components/modals/GridCreate.tsx b/src/pages/asset/components/modals/GridCreate.tsx deleted file mode 100644 index bdcfb20..0000000 --- a/src/pages/asset/components/modals/GridCreate.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import { - MyBetaModalFormProps, - MyButtons, - MyModalFormProps, - rulesHelper, -} from '@/common'; -import { Selects } from '@/components/Select'; -import { Apis } from '@/gen/Apis'; -import { BetaSchemaForm, ProCard } from '@ant-design/pro-components'; -import { Form, message } from 'antd'; - -export default function Create(props: MyBetaModalFormProps) { - const [form] = Form.useForm(); - console.log(props?.item, 'item'); - return ( - - {...MyModalFormProps.props} - title={`划分范围`} - // 基本表单 - width="700px" - layout="horizontal" - labelCol={{ span: 4 }} - wrapperCol={{ span: 24 }} - labelAlign="right" - trigger={} - form={form} - key={new Date().getTime()} - onOpenChange={(open: any) => { - if (open) { - form.resetFields(); // 清空表单数据 - } - }} - onFinish={async (values: any) => { - values?.grid_ranges?.forEach((res: { asset_projects_id: string }) => { - res.asset_projects_id = props?.item?.id; - }); - return Apis.Grid.Grids.Store({ - ...values, - asset_projects_id: props?.item?.id, - }) - .then(() => { - props.reload?.(); - message.success('范围划分成功'); - return true; - }) - .catch(() => false); - }} - columns={[ - Selects?.GetGridMark({ - key: 'grid_mark', - title: '范围标识', - params: { - asset_projects_id: props?.item?.id, - }, - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.text }, - }), - { - valueType: 'formList', - dataIndex: 'grid_ranges', - colProps: { span: 24 }, - initialValue: [''], - formItemProps: { ...rulesHelper.array }, - fieldProps: { - copyIconProps: false, - creatorButtonProps: { - creatorButtonText: '添加楼栋单元', - }, - itemRender: ( - { listDom, action }: any, - { index }: { index: number }, - ) => { - return ( - - {listDom} - - ); - }, - }, - columns: [ - { - valueType: 'dependency', - name: ['asset_buildings_id', 'asset_units_id'], - columns: ({ asset_buildings_id }) => { - return [ - { - valueType: 'group', - columns: [ - Selects?.AssetBuildings({ - key: 'asset_buildings_id', - title: '选择楼栋', - params: { - asset_projects_id: props?.item?.id, - }, - colProps: { span: 12 }, - formItemProps: { ...rulesHelper.number }, - fieldProps: { - showSearch: true, - onChange: (value: any) => { - // 获取当前表单的所有值 - const formValues = form.getFieldsValue(); - const gridRanges = formValues.grid_ranges || []; - - // 清空所有行的asset_units_id,因为楼栋变化会影响所有单元选择 - const updatedGridRanges = gridRanges.map( - (item: any, index: number) => { - if (item.asset_buildings_id === value) { - return { ...item, asset_units_id: undefined }; - } - return item; - }, - ); - - // 更新表单值 - form.setFieldsValue({ - grid_ranges: updatedGridRanges, - }); - }, - }, - }), - ...(asset_buildings_id - ? [ - Selects?.GridUnits({ - key: 'asset_units_id', - title: '选择单元', - params: { - asset_projects_id: props?.item?.id, - asset_buildings_id: asset_buildings_id, - }, - colProps: { span: 12 }, - formItemProps: { ...rulesHelper.text }, - fieldProps: { - showSearch: true, - }, - }), - ] - : []), - ], - }, - ]; - }, - }, - ], - }, - ]} - /> - ); -} diff --git a/src/pages/asset/convenience_services/index.tsx b/src/pages/asset/convenience_services/index.tsx new file mode 100644 index 0000000..649570c --- /dev/null +++ b/src/pages/asset/convenience_services/index.tsx @@ -0,0 +1,111 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { ConvenienceServicesTypeEnum } from '@/gen/Enums'; +import { ProTable } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { Space } from 'antd'; +import ServiceCreate from './modals/ServiceCreate'; +import ServiceUpdate from './modals/ServiceUpdate'; + +export default function Index({ title = '便民服务' }) { + const navigate = useNavigate(); + + // 注册当前页面为标签页 + usePageTabs({ + tabKey: 'convenience-services', + tabLabel: title, + }); + + return ( + + + MyProTableProps.request( + params, + sort, + Apis.Common.ConvenienceServices.List, + ) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + MyColumns.ID(), + { + title: '关联项目', + dataIndex: ['asset_project', 'name'], + search: { + transform: (value) => { + return { project_name: value }; + }, + }, + }, + MyColumns.EnumTag({ + title: '类型', + dataIndex: 'type', + valueEnum: ConvenienceServicesTypeEnum, + search: false, + }), + { + title: '服务名称', + dataIndex: 'name', + }, + + { + title: '联系方式', + render(_, record) { + const content = record?.content || []; + + // 过滤有效数据 + const validItems = content.filter( + (item: any) => item?.name && item?.phone, + ); + + return ( +
+ {validItems.length > 0 ? ( + validItems.map((item: any, index: number) => ( + // 每个客户信息单独一行 +
+ {item.name}: {item.phone} +
+ )) + ) : ( + 暂无客户信息 + )} +
+ ); + }, + search: false, + }, + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + Apis.Common.ConvenienceServices.Delete({ + id: item.id, + }).then(() => action?.reload()) + } + /> + + ), + }), + ]} + /> +
+ ); +} diff --git a/src/pages/asset/components/modals/ServiceCreate.tsx b/src/pages/asset/convenience_services/modals/ServiceCreate.tsx similarity index 92% rename from src/pages/asset/components/modals/ServiceCreate.tsx rename to src/pages/asset/convenience_services/modals/ServiceCreate.tsx index 82cc80c..10eb07c 100644 --- a/src/pages/asset/components/modals/ServiceCreate.tsx +++ b/src/pages/asset/convenience_services/modals/ServiceCreate.tsx @@ -5,6 +5,7 @@ import { MyModalFormProps, rulesHelper, } from '@/common'; +import { Selects } from '@/components/Select'; import { Apis } from '@/gen/Apis'; import { ConvenienceServicesTypeEnum } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; @@ -37,7 +38,7 @@ export default function Create(props: MyBetaModalFormProps) { type: values.type, name: service.name, content: service.content, - asset_projects_id: props.item?.id, + asset_projects_id: values.asset_projects_id || props.item?.id, } as any); } props.reload?.(); @@ -49,6 +50,16 @@ export default function Create(props: MyBetaModalFormProps) { } }} columns={[ + ...(props?.item?.id + ? [] + : [ + Selects?.AssetProjects({ + key: 'asset_projects_id', + title: '关联项目', + colProps: { span: 24 }, + required: true, + }), + ]), MyFormItems.EnumRadio({ key: 'type', title: '类型', diff --git a/src/pages/asset/components/modals/ServiceUpdate.tsx b/src/pages/asset/convenience_services/modals/ServiceUpdate.tsx similarity index 100% rename from src/pages/asset/components/modals/ServiceUpdate.tsx rename to src/pages/asset/convenience_services/modals/ServiceUpdate.tsx diff --git a/src/pages/asset/grids/index.tsx b/src/pages/asset/grids/index.tsx new file mode 100644 index 0000000..5210c0d --- /dev/null +++ b/src/pages/asset/grids/index.tsx @@ -0,0 +1,91 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { ProTable } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { Space } from 'antd'; +import GridCreate from './modals/GridCreate'; +import GridMannger from './modals/GridMannger'; +import GridUpdate from './modals/GridUpdate'; + +export default function Index({ title = '楼栋范围' }) { + const navigate = useNavigate(); + + // 注册当前页面为标签页 + usePageTabs({ + tabKey: 'grids', + tabLabel: title, + }); + + return ( + + + MyProTableProps.request(params, sort, Apis.Grid.Grids.List) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + { + title: '关联项目', + dataIndex: ['asset_project', 'name'], + search: { + transform: (value) => { + return { project_name: value }; + }, + }, + }, + { + title: 'ID', + dataIndex: 'id', + }, + { + title: '板块名称', + dataIndex: 'name', + }, + { + title: '标识', + dataIndex: 'grid_mark', + }, + { + title: '楼栋管家', + dataIndex: ['company_employee', 'name'], + render: (_, item: any) => + `${item?.company_employee?.name || ''}-${ + item?.company_employee?.phone || '' + }`, + }, + // MyColumns.CreatedAt(), + MyColumns.UpdatedAt(), + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + + Apis.Grid.Grids.Delete({ id: item.id }).then(() => + action?.reload(), + ) + } + /> + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/asset/grids/modals/GridCreate copy 2.tsx b/src/pages/asset/grids/modals/GridCreate copy 2.tsx new file mode 100644 index 0000000..c5cf04d --- /dev/null +++ b/src/pages/asset/grids/modals/GridCreate copy 2.tsx @@ -0,0 +1,216 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { BetaSchemaForm, ProCard } from '@ant-design/pro-components'; +import { Form, message } from 'antd'; +import { useState } from 'react'; + +export default function Create(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + const [transferData, setTransferData] = useState([]); + const [targetKeys, setTargetKeys] = useState([]); + + // 获取Transfer数据源 + // useEffect(() => { + // const asset_projects_id = props?.item?.id || 0; + // if (asset_projects_id) { + // Apis.Asset.AssetUnits.GridSelect({ asset_projects_id }) + // .then((res) => { + // const data = + // res.data?.map((item: any) => ({ + // key: item.value?.toString(), + // title: item.label, + // description: item.label, + // })) || []; + // setTransferData(data); + // }) + // .catch(() => { + // setTransferData([]); + // }); + // } + // }, [props?.item?.id]); + + return ( + + {...MyModalFormProps.props} + title={`范围添加`} + width="700px" + layout="horizontal" + labelCol={{ span: 4 }} + wrapperCol={{ span: 24 }} + labelAlign="right" + trigger={ + + } + form={form} + key={new Date().getTime()} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + form.setFieldsValue({ + asset_projects_id: props?.item?.id, + }); + } + }} + onFinish={async (values: any) => { + (values.asset_projects_id = + values?.asset_projects_id || props?.item?.id), + values?.grid_ranges?.map((res: { asset_projects_id: string }) => { + res.asset_projects_id = props?.item?.id; + }); + return Apis.Grid.Grids.Store({ + ...values, + }) + .then(() => { + props.reload?.(); + message.success('网格添加成功'); + return true; + }) + .catch(() => false); + }} + columns={[ + ...(props?.item?.id + ? [] + : [ + Selects?.AssetProjects({ + key: 'asset_projects_id', + title: '选择项目', + colProps: { span: 24 }, + required: true, + }), + ]), + + { + valueType: 'dependency', + name: ['asset_projects_id'], + columns: ({ asset_projects_id }) => { + return [ + { + valueType: 'group', + columns: [ + Selects?.GetGridMark({ + key: 'grid_mark', + title: '范围标识', + params: { + asset_projects_id: + asset_projects_id || props?.item?.id || 0, + }, + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }), + { + valueType: 'formList', + dataIndex: 'grid_ranges', + colProps: { span: 24 }, + initialValue: [''], + formItemProps: { ...rulesHelper.array }, + fieldProps: { + copyIconProps: false, + creatorButtonProps: { + creatorButtonText: '添加楼栋单元', + }, + itemRender: ( + { listDom, action }: any, + { index }: { index: number }, + ) => { + return ( + + {listDom} + + ); + }, + }, + columns: [ + { + valueType: 'dependency', + name: ['asset_buildings_id', 'asset_units_id'], + columns: ({ asset_buildings_id }) => { + return [ + { + valueType: 'group', + columns: [ + Selects?.AssetBuildings({ + key: 'asset_buildings_id', + title: '选择楼栋', + params: { + asset_projects_id: props?.item?.id, + }, + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.number }, + fieldProps: { + showSearch: true, + onChange: (value: any) => { + // 获取当前表单的所有值 + const formValues = form.getFieldsValue(); + const gridRanges = + formValues.grid_ranges || []; + + // 清空所有行的asset_units_id,因为楼栋变化会影响所有单元选择 + const updatedGridRanges = gridRanges.map( + (item: any, index: number) => { + if ( + item.asset_buildings_id === value + ) { + return { + ...item, + asset_units_id: undefined, + }; + } + return item; + }, + ); + // 更新表单值 + form.setFieldsValue({ + grid_ranges: updatedGridRanges, + }); + }, + }, + }), + ...(asset_buildings_id + ? [ + Selects?.GridUnits({ + key: 'asset_units_id', + title: '选择单元', + params: { + asset_projects_id: props?.item?.id, + asset_buildings_id: + asset_buildings_id, + }, + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + fieldProps: { + showSearch: true, + }, + }), + ] + : []), + ], + }, + ]; + }, + }, + ], + }, + ], + }, + ]; + }, + }, + ]} + /> + ); +} diff --git a/src/pages/asset/grids/modals/GridCreate copy.tsx b/src/pages/asset/grids/modals/GridCreate copy.tsx new file mode 100644 index 0000000..17ed601 --- /dev/null +++ b/src/pages/asset/grids/modals/GridCreate copy.tsx @@ -0,0 +1,157 @@ +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'; +import { useEffect, useState } from 'react'; + +export default function Create(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + const [transferData, setTransferData] = useState([]); + const [targetKeys, setTargetKeys] = useState([]); + + // 获取Transfer数据源 + useEffect(() => { + const asset_projects_id = props?.item?.id || 0; + if (asset_projects_id) { + Apis.Asset.AssetUnits.GridSelect({ asset_projects_id }) + .then((res) => { + const data = + res.data?.map((item: any) => ({ + key: item.value?.toString(), + title: item.label, + description: item.label, + })) || []; + setTransferData(data); + }) + .catch(() => { + setTransferData([]); + }); + } + }, [props?.item?.id]); + + console.log(props.item, 'pppp'); + return ( + + {...MyModalFormProps.props} + title={`范围添加`} + width="700px" + layout="horizontal" + labelCol={{ span: 4 }} + wrapperCol={{ span: 24 }} + labelAlign="right" + trigger={ + + } + form={form} + key={new Date().getTime()} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + form.setFieldsValue({ + asset_projects_id: props?.item?.id, + }); + } + }} + onFinish={async (values: any) => { + values?.grid_ranges?.map((res: { asset_projects_id: string }) => { + res.asset_projects_id = props?.item?.id; + }); + return Apis.Grid.Grids.Store({ + ...values, + }) + .then(() => { + props.reload?.(); + message.success('网格添加成功'); + return true; + }) + .catch(() => false); + }} + columns={[ + ...(props?.item?.id + ? [] + : [ + Selects?.AssetProjects({ + key: 'asset_projects_id', + title: '选择项目', + colProps: { span: 24 }, + required: true, + }), + ]), + + { + valueType: 'dependency', + name: ['asset_projects_id'], + columns: ({ asset_projects_id }) => { + return [ + { + valueType: 'group', + columns: [ + Selects?.GetGridMark({ + key: 'grid_mark', + title: '范围标识', + params: { + asset_projects_id: + asset_projects_id || props?.item?.id || 0, + }, + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }), + Selects?.GridUnits({ + key: 'grid_units_id', + title: '选择单元', + params: { + asset_projects_id: + asset_projects_id || props?.item?.id || 0, + }, + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }), + // { + // valueType: 'formItem', + // dataIndex: 'grid_units_id', + // title: '选择单元', + // colProps: { span: 24 }, + // formItemProps: { ...rulesHelper.text }, + // renderFormItem: () => ( + // { + // setTargetKeys(nextTargetKeys as string[]); + // form.setFieldValue('grid_units_id', nextTargetKeys); + // }} + // render={(item) => item.title} + // titles={['可选单元', '已选单元']} + // showSearch + // listStyle={{ + // width: 250, + // height: 300, + // }} + // operations={['选择', '移除']} + // locale={{ + // itemUnit: '项', + // itemsUnit: '项', + // searchPlaceholder: '请输入搜索内容', + // notFoundContent: '列表为空', + // }} + // /> + // ), + // }, + ], + }, + ]; + }, + }, + ]} + /> + ); +} diff --git a/src/pages/asset/grids/modals/GridCreate.tsx b/src/pages/asset/grids/modals/GridCreate.tsx new file mode 100644 index 0000000..f1a4fbc --- /dev/null +++ b/src/pages/asset/grids/modals/GridCreate.tsx @@ -0,0 +1,159 @@ +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, Transfer } from 'antd'; +import { useEffect, useState } from 'react'; + +export default function Create(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + const [transferData, setTransferData] = useState([]); + const [targetKeys, setTargetKeys] = useState([]); + + // 获取Transfer数据源 + useEffect(() => { + const asset_projects_id = props?.item?.id || 0; + if (asset_projects_id) { + Apis.Asset.AssetUnits.GridSelect({ asset_projects_id }) + .then((res) => { + const data = + res.data?.map((item: any) => ({ + key: item.value?.toString(), + title: item?.asset_building?.name + item.label, + })) || []; + setTransferData(data); + }) + .catch(() => { + setTransferData([]); + }); + } + }, [props?.item?.id]); + + console.log(props.item, 'pppp'); + return ( + + {...MyModalFormProps.props} + title={`范围添加`} + width="700px" + layout="horizontal" + labelCol={{ span: 4 }} + wrapperCol={{ span: 24 }} + labelAlign="right" + trigger={ + + } + form={form} + key={new Date().getTime()} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + form.setFieldsValue({ + asset_projects_id: props?.item?.id, + }); + } + }} + onFinish={async (values: any) => { + (values.asset_projects_id = + values?.asset_projects_id || props?.item?.id), + values?.grid_ranges?.map((res: { asset_projects_id: string }) => { + res.asset_projects_id = props?.item?.id; + }); + return Apis.Grid.Grids.Store({ + ...values, + }) + .then(() => { + props.reload?.(); + message.success('网格添加成功'); + return true; + }) + .catch(() => false); + }} + submitter={false} + footer={[]} + columns={[ + ...(props?.item?.id + ? [] + : [ + Selects?.AssetProjects({ + key: 'asset_projects_id', + title: '选择项目', + colProps: { span: 24 }, + required: true, + }), + ]), + { + valueType: 'dependency', + name: ['asset_projects_id'], + columns: ({ asset_projects_id }) => { + return [ + { + valueType: 'group', + columns: [ + Selects?.GetGridMark({ + key: 'grid_mark', + title: '范围标识', + params: { + asset_projects_id: + asset_projects_id || props?.item?.id || 0, + }, + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }), + + { + valueType: 'formItem', + dataIndex: 'grid_units_id', + title: '选择单元', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + renderFormItem: () => ( +
e.stopPropagation()}> + { + setTargetKeys(nextTargetKeys as string[]); + form.setFieldValue('grid_units_id', nextTargetKeys); + }} + render={(item) => item.title} + titles={['可选单元', '已选单元']} + showSearch + listStyle={{ + width: 250, + height: 300, + }} + operations={['选择', '移除']} + operationStyle={{ marginTop: 20 }} + locale={{ + itemUnit: '项', + itemsUnit: '项', + searchPlaceholder: '请输入搜索内容', + notFoundContent: '列表为空', + }} + onSelectChange={( + sourceSelectedKeys, + targetSelectedKeys, + ) => { + // 处理选择变化,但不触发表单提交 + }} + /> +
+ ), + }, + ], + }, + ]; + }, + }, + ]} + /> + ); +} diff --git a/src/pages/asset/components/modals/GridMannger.tsx b/src/pages/asset/grids/modals/GridMannger.tsx similarity index 100% rename from src/pages/asset/components/modals/GridMannger.tsx rename to src/pages/asset/grids/modals/GridMannger.tsx diff --git a/src/pages/asset/components/modals/GridUpdate.tsx b/src/pages/asset/grids/modals/GridUpdate.tsx similarity index 100% rename from src/pages/asset/components/modals/GridUpdate.tsx rename to src/pages/asset/grids/modals/GridUpdate.tsx diff --git a/src/pages/asset/houses/index.tsx b/src/pages/asset/houses/index.tsx new file mode 100644 index 0000000..e478a9a --- /dev/null +++ b/src/pages/asset/houses/index.tsx @@ -0,0 +1,539 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { + AssetHousesOwnershipTypeEnum, + AssetHousesUsageEnum, +} from '@/gen/Enums'; +import { ProCard, ProTable } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { message, Space, Typography } from 'antd'; +import { useCallback, useMemo, useRef, useState } from 'react'; +import BuildingsCreate from './modals/BuildingsCreate'; +import AssetBuildingsUpdate from './modals/BuildingsUpdate'; +import HousesCreate from './modals/HousesCreate'; +import HousesUpdate from './modals/HousesUpdate'; +import UnitsCreate from './modals/UnitsCreate'; +import AssetUnitsUpdate from './modals/UnitsUpdate'; + +const { Title } = Typography; +interface SelectedAsset { + id: number; + name: string; +} + +interface SelectedBuilding { + id: number; + name: string; +} + +interface SelectedUnit { + id: number; + name: string; +} + +export default function Index({ title = '项目列表' }) { + usePageTabs({ + tabKey: 'asset-buildings', + tabLabel: title, + }); + + const actionAssetRef: any = useRef(); + const actionBuildingsRef: any = useRef(); + const actionUnitsRef: any = useRef(); + const actionHousesRef: any = useRef(); + const navigate = useNavigate(); + + const [selectedAsset, setSelectedAsset] = useState( + null, + ); + const [selectedBuilding, setSelectedBuilding] = + useState(null); + const [selectedUnit, setSelectedUnit] = useState(null); + const [loading, setLoading] = useState({ + buildings: false, + units: false, + houses: false, + }); + + // 选择项目的回调函数 + const handleAssetSelect = useCallback( + (asset: SelectedAsset) => { + if (selectedAsset?.id === asset.id) return; // 避免重复选择 + + setSelectedAsset(asset); + setSelectedBuilding(null); // 重置楼栋选择 + setSelectedUnit(null); // 重置单元选择 + + // 刷新楼栋和单元列表 + actionBuildingsRef?.current?.reload(); + actionUnitsRef?.current?.reload(); + actionHousesRef?.current?.reload(); + }, + [selectedAsset?.id], + ); + + // 选择楼栋的回调函数 + const handleBuildingSelect = useCallback( + (building: SelectedBuilding) => { + if (selectedBuilding?.id === building.id) return; // 避免重复选择 + + setSelectedBuilding(building); + setSelectedUnit(null); // 重置单元选择 + + // 刷新单元和房屋列表 + actionUnitsRef?.current?.reload(); + actionHousesRef?.current?.reload(); + }, + [selectedBuilding?.id], + ); + + // 选择单元的回调函数 + const handleUnitSelect = useCallback( + (unit: SelectedUnit) => { + if (selectedUnit?.id === unit.id) return; // 避免重复选择 + + setSelectedUnit(unit); + // 刷新房屋列表 + actionHousesRef?.current?.reload(); + }, + [selectedUnit?.id], + ); + + // 删除操作的通用处理 + const handleDelete = useCallback( + async (deleteApi: any, id: number, reloadAction: any, itemName: string) => { + try { + await deleteApi({ id }); + message.success(`${itemName}删除成功`); + reloadAction(); + + // 如果删除的是当前选中项,清空选择 + if (itemName === '项目' && selectedAsset?.id === id) { + setSelectedAsset(null); + setSelectedBuilding(null); + setSelectedUnit(null); + } else if (itemName === '楼栋' && selectedBuilding?.id === id) { + setSelectedBuilding(null); + setSelectedUnit(null); + } else if (itemName === '单元' && selectedUnit?.id === id) { + setSelectedUnit(null); + } + } catch (error) { + message.error(`${itemName}删除失败`); + console.error(`删除${itemName}失败:`, error); + } + }, + [selectedAsset?.id, selectedBuilding?.id, selectedUnit?.id], + ); + + // 通用表格配置 + const getTableConfig = useMemo( + () => ({ + ...MyProTableProps.props, + search: false as const, + size: 'middle' as const, + options: false as const, + pagination: { + pageSize: 10, + showSizeChanger: false, + }, + }), + [], + ); + + // 项目表格列配置 + const projectColumns = useMemo( + () => [ + { + title: '项目', + dataIndex: 'name', + ellipsis: true, + search: { + transform: (value: string) => ({ name: value }), + }, + }, + MyColumns.Option({ + width: 120, + render: (_, item: any, index, action) => ( + + { + navigate(`/asset/id/${item.id}`); + }} + /> + + ), + }), + ], + [handleDelete], + ); + + // 楼栋表格列配置 + const buildingColumns = useMemo( + () => [ + { + title: '楼栋', + dataIndex: 'name', + ellipsis: true, + }, + MyColumns.Option({ + width: 120, + render: (_, item: any, index, action) => ( + + + {/* + handleDelete( + Apis.Asset.AssetBuildings.Delete, + item.id, + action?.reload, + '楼栋', + ) + } + /> */} + + ), + }), + ], + [handleDelete], + ); + + // 单元表格列配置 + const unitColumns = useMemo( + () => [ + { + title: '单元', + dataIndex: 'name', + ellipsis: true, + }, + MyColumns.Option({ + width: 120, + render: (_, item: any, index, action) => ( + + + {/* + handleDelete( + Apis.Asset.AssetUnits.Delete, + item.id, + action?.reload, + '单元', + ) + } + /> */} + + ), + }), + ], + [handleDelete], + ); + + // 房屋表格列配置 + const houseColumns = useMemo( + () => [ + MyColumns.EnumTag({ + title: '用途', + dataIndex: 'usage', + valueEnum: AssetHousesUsageEnum, + }), + { + title: '房屋名称', + dataIndex: 'full_name', + }, + { + title: '楼层', + dataIndex: 'floor', + render(_, record) { + return `${record?.floor}层`; + }, + }, + { + title: '房号', + dataIndex: 'name', + }, + { + title: '计费面积', + dataIndex: 'chargeable_area', + render(_, record) { + return `${ + record?.chargeable_area ? record?.chargeable_area + ' m²' : '-' + } `; + }, + }, + + MyColumns.EnumTag({ + title: '房屋属性', + dataIndex: 'ownership_type', + valueEnum: AssetHousesOwnershipTypeEnum, + }), + MyColumns.Option({ + width: 120, + render: (_, item: any, index, action) => ( + + + {/* + handleDelete( + Apis.Asset.AssetHouses.Delete, + item.id, + action?.reload, + '房屋', + ) + } + /> */} + + ), + }), + ], + [handleDelete], + ); + + return ( + + + // } + > + +
+ + <Space + style={{ display: 'flex', justifyContent: 'space-between' }} + > + 项目信息 + </Space> + + { + return selectedBuilding?.id === record?.id + ? 'ant-table-row-selected' + : ''; + }} + onRow={(record: any) => { + return { + onClick: () => { + handleAssetSelect(record); + }, + style: { + cursor: 'pointer', + }, + }; + }} + request={async (params, sort) => + MyProTableProps.request( + { ...params }, + sort, + Apis.Asset.AssetProjects.List, + ) + } + columns={projectColumns} + /> +
+ + {/* 楼栋列表 */} + {selectedAsset ? ( +
+ + <Space + style={{ display: 'flex', justifyContent: 'space-between' }} + > + <span>{selectedAsset?.name}</span> + <BuildingsCreate + key="BuildingsCreate" + item={{ ...selectedAsset, size: 'small' }} + reload={() => actionBuildingsRef?.current?.reload()} + title="楼栋" + /> + </Space> + + { + return selectedBuilding?.id === record?.id + ? 'ant-table-row-selected' + : ''; + }} + onRow={(record: any) => { + return { + onClick: () => { + handleBuildingSelect(record); + }, + style: { + cursor: 'pointer', + }, + }; + }} + request={async (params, sort) => + MyProTableProps.request( + { ...params, asset_projects_id: selectedAsset?.id }, + sort, + Apis.Asset.AssetBuildings.List, + ) + } + columns={buildingColumns} + /> +
+ ) : ( +
+ 请先选择项目 +
+ )} + {/* 单元列表 */} + {selectedBuilding ? ( +
+ + <Space + style={{ display: 'flex', justifyContent: 'space-between' }} + > + <span>{selectedBuilding.name}</span> + <UnitsCreate + key="UnitsCreate" + item={{ + ...selectedBuilding, + asset_buildings_id: selectedBuilding?.id, + size: 'small', + }} + reload={() => actionUnitsRef?.current?.reload()} + title="单元" + /> + </Space> + + + MyProTableProps.request( + { + ...params, + asset_projects_id: selectedAsset?.id, + asset_buildings_id: selectedBuilding?.id, + }, + sort, + Apis.Asset.AssetUnits.List, + ) + } + rowClassName={(record: any) => { + return selectedUnit?.id === record?.id + ? 'ant-table-row-selected' + : ''; + }} + onRow={(record: any) => { + return { + onClick: () => { + handleUnitSelect(record); + }, + style: { + cursor: 'pointer', + }, + }; + }} + columns={unitColumns} + /> +
+ ) : ( +
+ 请先选择楼栋 +
+ )} + + {/* 房屋列表 */} + {selectedUnit ? ( +
+ + <Space + style={{ display: 'flex', justifyContent: 'space-between' }} + > + <span>{selectedUnit.name}</span> + <HousesCreate + key="HousesCreate" + item={{ + ...selectedUnit, + asset_projects_id: selectedAsset?.id, + asset_buildings_id: selectedBuilding?.id, + asset_units_id: selectedUnit?.id, + size: 'small', + }} + reload={() => actionHousesRef?.current?.reload()} + title="房屋" + /> + </Space> + + + MyProTableProps.request( + { + ...params, + asset_projects_id: selectedAsset?.id, + asset_buildings_id: selectedBuilding?.id, + asset_units_id: selectedUnit?.id, + }, + sort, + Apis.Asset.AssetHouses.List, + ) + } + columns={houseColumns} + /> +
+ ) : ( +
+ {selectedBuilding ? '请先选择单元' : '请先选择楼栋'} +
+ )} +
+
+
+ ); +} diff --git a/src/pages/asset/components/modals/BuildingsCreate.tsx b/src/pages/asset/houses/modals/BuildingsCreate.tsx similarity index 90% rename from src/pages/asset/components/modals/BuildingsCreate.tsx rename to src/pages/asset/houses/modals/BuildingsCreate.tsx index f048745..a45dc6e 100644 --- a/src/pages/asset/components/modals/BuildingsCreate.tsx +++ b/src/pages/asset/houses/modals/BuildingsCreate.tsx @@ -18,7 +18,12 @@ export default function Create(props: MyBetaModalFormProps) { title={`${props.title}`} wrapperCol={{ span: 24 }} width="500px" - trigger={} + trigger={ + + } onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 diff --git a/src/pages/asset/components/modals/BuildingsUpdate.tsx b/src/pages/asset/houses/modals/BuildingsUpdate.tsx similarity index 100% rename from src/pages/asset/components/modals/BuildingsUpdate.tsx rename to src/pages/asset/houses/modals/BuildingsUpdate.tsx diff --git a/src/pages/asset/components/modals/HousesCreate.tsx b/src/pages/asset/houses/modals/HousesCreate.tsx similarity index 97% rename from src/pages/asset/components/modals/HousesCreate.tsx rename to src/pages/asset/houses/modals/HousesCreate.tsx index 31443e7..9e0f3fe 100644 --- a/src/pages/asset/components/modals/HousesCreate.tsx +++ b/src/pages/asset/houses/modals/HousesCreate.tsx @@ -23,7 +23,12 @@ export default function Create(props: MyBetaModalFormProps) { title={`添加${props.title}`} wrapperCol={{ span: 24 }} width="800px" - trigger={} + trigger={ + + } form={form} key={new Date().getTime()} onOpenChange={(open: any) => { diff --git a/src/pages/asset/components/modals/HousesShow.tsx b/src/pages/asset/houses/modals/HousesShow.tsx similarity index 100% rename from src/pages/asset/components/modals/HousesShow.tsx rename to src/pages/asset/houses/modals/HousesShow.tsx diff --git a/src/pages/asset/components/modals/HousesUpdate.tsx b/src/pages/asset/houses/modals/HousesUpdate.tsx similarity index 99% rename from src/pages/asset/components/modals/HousesUpdate.tsx rename to src/pages/asset/houses/modals/HousesUpdate.tsx index 8584567..950e9c8 100644 --- a/src/pages/asset/components/modals/HousesUpdate.tsx +++ b/src/pages/asset/houses/modals/HousesUpdate.tsx @@ -24,7 +24,7 @@ export default function Update(props: MyBetaModalFormProps) { wrapperCol={{ span: 24 }} width="800px" trigger={ - + } form={form} key={new Date().getTime()} diff --git a/src/pages/asset/components/modals/UnitsCreate.tsx b/src/pages/asset/houses/modals/UnitsCreate.tsx similarity index 94% rename from src/pages/asset/components/modals/UnitsCreate.tsx rename to src/pages/asset/houses/modals/UnitsCreate.tsx index 27d1d95..9cf4fb5 100644 --- a/src/pages/asset/components/modals/UnitsCreate.tsx +++ b/src/pages/asset/houses/modals/UnitsCreate.tsx @@ -21,7 +21,12 @@ export default function Create(props: MyBetaModalFormProps) { title={`添加${props.title}`} wrapperCol={{ span: 24 }} width="700px" - trigger={} + trigger={ + + } form={form} key={new Date().getTime()} onOpenChange={(open: any) => { diff --git a/src/pages/asset/components/modals/UnitsUpdate.tsx b/src/pages/asset/houses/modals/UnitsUpdate.tsx similarity index 100% rename from src/pages/asset/components/modals/UnitsUpdate.tsx rename to src/pages/asset/houses/modals/UnitsUpdate.tsx diff --git a/src/pages/asset/components/Announcement.tsx b/src/pages/asset/list/components/Announcement.tsx similarity index 94% rename from src/pages/asset/components/Announcement.tsx rename to src/pages/asset/list/components/Announcement.tsx index 3310037..4a1b8ca 100644 --- a/src/pages/asset/components/Announcement.tsx +++ b/src/pages/asset/list/components/Announcement.tsx @@ -3,9 +3,9 @@ import { Apis } from '@/gen/Apis'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; import { useEffect, useRef } from 'react'; -import AnnouncementCreate from './modals/AnnouncementCreate'; -import AnnouncementShow from './modals/AnnouncementShow'; -import AnnouncementUpdate from './modals/AnnouncementUpdate'; +import AnnouncementCreate from '../../announcement/modals/AnnouncementCreate'; +import AnnouncementShow from '../../announcement/modals/AnnouncementShow'; +import AnnouncementUpdate from '../../announcement/modals/AnnouncementUpdate'; export default function Index({ ...rest }) { const actionLooks = useRef(); @@ -35,7 +35,6 @@ export default function Index({ ...rest }) { search={false} columns={[ MyColumns.ID(), - { title: '公告标题', dataIndex: 'title', diff --git a/src/pages/asset/components/AssetAccounts.tsx b/src/pages/asset/list/components/AssetAccounts.tsx similarity index 96% rename from src/pages/asset/components/AssetAccounts.tsx rename to src/pages/asset/list/components/AssetAccounts.tsx index 3ab4e2f..1ec330d 100644 --- a/src/pages/asset/components/AssetAccounts.tsx +++ b/src/pages/asset/list/components/AssetAccounts.tsx @@ -7,7 +7,7 @@ import { import { Apis } from '@/gen/Apis'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; -import AssetAccountsSelect from './modals/AssetAccountsSelect'; +import AccountsSelect from '../../accounts/modals/AccountsSelect'; export default function ReceiptAccounts(props: MyBetaModalFormProps) { return ( @@ -27,7 +27,7 @@ export default function ReceiptAccounts(props: MyBetaModalFormProps) { ) } toolBarRender={(action) => [ - (); @@ -26,7 +26,12 @@ export default function Index({ ...rest }) { ) } toolBarRender={(action) => [ - , + , ]} search={false} columns={[ diff --git a/src/pages/asset/components/AssetInfo.tsx b/src/pages/asset/list/components/AssetInfo.tsx similarity index 98% rename from src/pages/asset/components/AssetInfo.tsx rename to src/pages/asset/list/components/AssetInfo.tsx index 7f49348..65b917b 100644 --- a/src/pages/asset/components/AssetInfo.tsx +++ b/src/pages/asset/list/components/AssetInfo.tsx @@ -29,7 +29,7 @@ export default function AssetInfo(props: MyBetaModalFormProps) { - +
{props?.item?.company?.name}
diff --git a/src/pages/asset/components/ChargeStandard.tsx b/src/pages/asset/list/components/ChargeStandard.tsx similarity index 100% rename from src/pages/asset/components/ChargeStandard.tsx rename to src/pages/asset/list/components/ChargeStandard.tsx diff --git a/src/pages/asset/components/ConvenienceServices.tsx b/src/pages/asset/list/components/ConvenienceServices.tsx similarity index 95% rename from src/pages/asset/components/ConvenienceServices.tsx rename to src/pages/asset/list/components/ConvenienceServices.tsx index 3155a6b..d1d48a0 100644 --- a/src/pages/asset/components/ConvenienceServices.tsx +++ b/src/pages/asset/list/components/ConvenienceServices.tsx @@ -4,8 +4,8 @@ import { ConvenienceServicesTypeEnum } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; import { useEffect, useRef } from 'react'; -import ServiceCreate from './modals/ServiceCreate'; -import ServiceUpdate from './modals/ServiceUpdate'; +import ServiceCreate from '../../convenience_services/modals/ServiceCreate'; +import ServiceUpdate from '../../convenience_services/modals/ServiceUpdate'; export default function Index({ ...rest }) { const actionLooks = useRef(); diff --git a/src/pages/asset/components/modals/BindCompany.tsx b/src/pages/asset/list/components/modals/BindCompany.tsx similarity index 100% rename from src/pages/asset/components/modals/BindCompany.tsx rename to src/pages/asset/list/components/modals/BindCompany.tsx diff --git a/src/pages/asset/components/modals/ChargeStandardCreate.tsx b/src/pages/asset/list/components/modals/ChargeStandardCreate.tsx similarity index 100% rename from src/pages/asset/components/modals/ChargeStandardCreate.tsx rename to src/pages/asset/list/components/modals/ChargeStandardCreate.tsx diff --git a/src/pages/asset/components/modals/ChargeStandardHasHouse.tsx b/src/pages/asset/list/components/modals/ChargeStandardHasHouse.tsx similarity index 100% rename from src/pages/asset/components/modals/ChargeStandardHasHouse.tsx rename to src/pages/asset/list/components/modals/ChargeStandardHasHouse.tsx diff --git a/src/pages/asset/components/modals/ChargeStandardUpdate.tsx b/src/pages/asset/list/components/modals/ChargeStandardUpdate.tsx similarity index 100% rename from src/pages/asset/components/modals/ChargeStandardUpdate.tsx rename to src/pages/asset/list/components/modals/ChargeStandardUpdate.tsx diff --git a/src/pages/asset/index.tsx b/src/pages/asset/list/index.tsx similarity index 97% rename from src/pages/asset/index.tsx rename to src/pages/asset/list/index.tsx index 54d8d53..7d94b71 100644 --- a/src/pages/asset/index.tsx +++ b/src/pages/asset/list/index.tsx @@ -89,7 +89,7 @@ export default function Index({ title = '项目列表' }) { search: false, }, { - title: '绑定机构', + title: '关联机构', dataIndex: ['company', 'name'], search: { transform: (value) => { @@ -116,7 +116,7 @@ export default function Index({ title = '项目列表' }) { { - navigate(`/asset/${item.id}`); + navigate(`/asset/list/show/${item.id}`); }} /> (); diff --git a/src/pages/asset_houses/index.tsx b/src/pages/asset_houses/index.tsx index bb6fc6c..0d4422d 100644 --- a/src/pages/asset_houses/index.tsx +++ b/src/pages/asset_houses/index.tsx @@ -15,8 +15,8 @@ import { ProTable } from '@ant-design/pro-components'; import { useNavigate } from '@umijs/max'; import { Space } from 'antd'; import { useState } from 'react'; -import HousesShow from '../asset/components/modals/HousesShow'; -import HousesUpdate from '../asset/components/modals/HousesUpdate'; +import HousesShow from '../asset/houses/modals/HousesShow'; +import HousesUpdate from '../asset/houses/modals/HousesUpdate'; export default function Index({ title = '房屋列表' }) { const [getParams, setParams] = useState({}); @@ -128,7 +128,7 @@ export default function Index({ title = '房屋列表' }) { // search: false, // }), MyColumns.EnumTag({ - title: '产权性质', + title: '房屋属性', dataIndex: 'ownership_type', valueEnum: AssetHousesOwnershipTypeEnum, search: false, diff --git a/src/pages/asset_houses_bill/index.tsx b/src/pages/asset_houses_bill/index.tsx index 2def0c0..87572f8 100644 --- a/src/pages/asset_houses_bill/index.tsx +++ b/src/pages/asset_houses_bill/index.tsx @@ -12,8 +12,8 @@ import { ProTable } from '@ant-design/pro-components'; import { useNavigate } from '@umijs/max'; import { Space } from 'antd'; import { useState } from 'react'; -import HousesShow from '../asset/components/modals/HousesShow'; -import HousesUpdate from '../asset/components/modals/HousesUpdate'; +import HousesShow from '../asset/houses/modals/HousesShow'; +import HousesUpdate from '../asset/houses/modals/HousesUpdate'; export default function Index({ title = '房屋列表' }) { const [getParams, setParams] = useState({}); diff --git a/src/pages/company/company_apps/index.tsx b/src/pages/company/apps/index.tsx similarity index 55% rename from src/pages/company/company_apps/index.tsx rename to src/pages/company/apps/index.tsx index 022a2f4..e6d4814 100644 --- a/src/pages/company/company_apps/index.tsx +++ b/src/pages/company/apps/index.tsx @@ -6,18 +6,19 @@ import { usePageTabs, } from '@/common'; import { Apis } from '@/gen/Apis'; +import { CompanyAppsAppTypeEnum, CompanyAppsModuleEnum } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { useNavigate } from '@umijs/max'; -import { Image, Space } from 'antd'; +import { Space } from 'antd'; import AppCreate from './modals/AppCreate'; import AppUpdate from './modals/AppUpdate'; -export default function Index({ title = '品牌管理' }) { +export default function Index({ title = '应用管理' }) { const navigate = useNavigate(); // 注册当前页面为标签页 usePageTabs({ - tabKey: 'company-brands', + tabKey: 'company-apps', tabLabel: title, }); @@ -25,17 +26,13 @@ export default function Index({ title = '品牌管理' }) { - MyProTableProps.request( - params, - sort, - Apis.Company.CompanyPropertyBrands.List, - ) + MyProTableProps.request(params, sort, Apis.Company.CompanyApps.List) } toolBarRender={(action) => [ , @@ -45,39 +42,45 @@ export default function Index({ title = '品牌管理' }) { { title: '机构', dataIndex: ['company', 'name'], + }, + MyColumns.EnumTag({ + title: '应用类型', + dataIndex: 'app_type', + valueEnum: CompanyAppsAppTypeEnum, + }), + MyColumns.EnumTag({ + title: '模块', + dataIndex: 'module', + valueEnum: CompanyAppsModuleEnum, search: false, - }, + }), { - title: '物业名称', - dataIndex: 'name', - }, - { - title: 'logo', - render: (_, item) => { - return ( - - {item?.logo?.[0] && ( - - )} - - ); - }, + title: '应用ID', + dataIndex: 'app_id', + search: false, + ellipsis: true, }, + // { + // title: '应用密钥', + // dataIndex: 'app_secret', + // search: false, + // ellipsis: true, + // render: (text) => '***' + String(text).slice(-4), + // }, + + MyColumns.UpdatedAt(), + // MyColumns.CreatedAt(), MyColumns.Option({ render: (_, item: any, index, action) => ( - Apis.Company.CompanyPropertyBrands.Delete({ + Apis.Company.CompanyApps.Delete({ id: item.id, }).then(() => action?.reload()) } diff --git a/src/pages/company/company_apps/modals/AppCreate.tsx b/src/pages/company/apps/modals/AppCreate.tsx similarity index 100% rename from src/pages/company/company_apps/modals/AppCreate.tsx rename to src/pages/company/apps/modals/AppCreate.tsx diff --git a/src/pages/company/company_apps/modals/AppUpdate.tsx b/src/pages/company/apps/modals/AppUpdate.tsx similarity index 100% rename from src/pages/company/company_apps/modals/AppUpdate.tsx rename to src/pages/company/apps/modals/AppUpdate.tsx diff --git a/src/pages/company/brand/index.tsx b/src/pages/company/brand/index.tsx index 050c5d2..2379d1f 100644 --- a/src/pages/company/brand/index.tsx +++ b/src/pages/company/brand/index.tsx @@ -45,14 +45,14 @@ export default function Index({ title = '品牌管理' }) { { title: '机构', dataIndex: ['company', 'name'], - search: false, }, { - title: '物业名称', + title: '品牌名称', dataIndex: 'name', }, { title: 'logo', + search: false, render: (_, item) => { return ( diff --git a/src/pages/company/brand/modals/BrandUpdate.tsx b/src/pages/company/brand/modals/BrandUpdate.tsx index 22f3474..8d77ecf 100644 --- a/src/pages/company/brand/modals/BrandUpdate.tsx +++ b/src/pages/company/brand/modals/BrandUpdate.tsx @@ -17,7 +17,7 @@ export default function Update(props: MyBetaModalFormProps) { title={`编辑${props.title}`} trigger={} wrapperCol={{ span: 24 }} - width="300px" + width="360px" form={form} key={new Date().getTime()} onOpenChange={(open: any) => { diff --git a/src/pages/company/brand/modals/BrandsCreate.tsx b/src/pages/company/brand/modals/BrandsCreate.tsx index 027d4af..f6eb76b 100644 --- a/src/pages/company/brand/modals/BrandsCreate.tsx +++ b/src/pages/company/brand/modals/BrandsCreate.tsx @@ -18,7 +18,7 @@ export default function Create(props: MyBetaModalFormProps) { {...MyModalFormProps.props} title={`添加品牌`} wrapperCol={{ span: 24 }} - width="300px" + width="360px" trigger={} form={form} onOpenChange={(open: any) => { diff --git a/src/pages/company/auto/index.tsx b/src/pages/company/list/index.tsx similarity index 97% rename from src/pages/company/auto/index.tsx rename to src/pages/company/list/index.tsx index 42190a8..f26c344 100644 --- a/src/pages/company/auto/index.tsx +++ b/src/pages/company/list/index.tsx @@ -77,7 +77,7 @@ export default function Index({ title = '机构列表' }) { title="配置" data-tooltip-position="top" onClick={() => { - navigate(`/company/auto/${item.id}`); + navigate(`/company/list/show/${item.id}`); }} /> {...MyModalFormProps.props} @@ -18,6 +20,12 @@ export default function Create(props: MyBetaModalFormProps) { wrapperCol={{ span: 24 }} width="600px" trigger={} + form={form} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + } + }} onFinish={async (values) => Apis.Company.Companies.Store({ ...values, diff --git a/src/pages/company/auto/modals/CompanyUpdate.tsx b/src/pages/company/list/modals/CompanyUpdate.tsx similarity index 100% rename from src/pages/company/auto/modals/CompanyUpdate.tsx rename to src/pages/company/list/modals/CompanyUpdate.tsx diff --git a/src/pages/company/auto/$id.tsx b/src/pages/company/list/show/$id.tsx similarity index 86% rename from src/pages/company/auto/$id.tsx rename to src/pages/company/list/show/$id.tsx index e1791b5..2e4d94e 100644 --- a/src/pages/company/auto/$id.tsx +++ b/src/pages/company/list/show/$id.tsx @@ -5,15 +5,15 @@ import { useParams } from '@umijs/max'; import { Space, Tabs } from 'antd'; import { useEffect, useState } from 'react'; -import CompanyUpdate from './modals/CompanyUpdate'; -import CompanyApps from './table/Apps'; -import Assets from './table/Assets'; -import Brands from './table/Brands'; -import ComponentsInfo from './table/ComponentsInfo'; -import Employees from './table/Employees'; -import Organizations from './table/Organizations'; -import Positions from './table/Positions'; -import ReceiptAccounts from './table/ReceiptAccounts'; +import CompanyUpdate from '../modals/CompanyUpdate'; +import CompanyApps from '../table/Apps'; +import Assets from '../table/Assets'; +import Brands from '../table/Brands'; +import ComponentsInfo from '../table/ComponentsInfo'; +import Employees from '../table/Employees'; +import Organizations from '../table/Organizations'; +import Positions from '../table/Positions'; +import ReceiptAccounts from '../table/ReceiptAccounts'; export default function Show({ title }: { title?: string } = {}) { const { id } = useParams<{ id: string }>(); diff --git a/src/pages/company/auto/table/Apps.tsx b/src/pages/company/list/table/Apps.tsx similarity index 91% rename from src/pages/company/auto/table/Apps.tsx rename to src/pages/company/list/table/Apps.tsx index d604717..e4b474a 100644 --- a/src/pages/company/auto/table/Apps.tsx +++ b/src/pages/company/list/table/Apps.tsx @@ -8,8 +8,8 @@ import { Apis } from '@/gen/Apis'; import { CompanyAppsAppTypeEnum, CompanyAppsModuleEnum } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; -import AppCreate from '../../company_apps/modals/AppCreate'; -import AppUpdate from '../../company_apps/modals/AppUpdate'; +import AppCreate from '../../apps/modals/AppCreate'; +import AppUpdate from '../../apps/modals/AppUpdate'; export default function CompanyApps(props: MyBetaModalFormProps) { return ( @@ -35,7 +35,10 @@ export default function CompanyApps(props: MyBetaModalFormProps) { // options={false} columns={[ MyColumns.ID(), - + { + title: '机构', + dataIndex: ['company', 'name'], + }, MyColumns.EnumTag({ title: '应用类型', dataIndex: 'app_type', diff --git a/src/pages/company/auto/table/Assets.tsx b/src/pages/company/list/table/Assets.tsx similarity index 97% rename from src/pages/company/auto/table/Assets.tsx rename to src/pages/company/list/table/Assets.tsx index e20111a..09b74de 100644 --- a/src/pages/company/auto/table/Assets.tsx +++ b/src/pages/company/list/table/Assets.tsx @@ -9,7 +9,7 @@ import { AssetProjectsPropertyTypeEnum, AssetProjectsStatusEnum, } from '@/gen/Enums'; -import AssetCreate from '@/pages/asset/modals/AssetCreate'; +import AssetCreate from '@/pages/asset/list/modals/AssetCreate'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; import { useNavigate } from 'react-router-dom'; diff --git a/src/pages/company/auto/table/Brands.tsx b/src/pages/company/list/table/Brands.tsx similarity index 95% rename from src/pages/company/auto/table/Brands.tsx rename to src/pages/company/list/table/Brands.tsx index c0b85f4..4fbe860 100644 --- a/src/pages/company/auto/table/Brands.tsx +++ b/src/pages/company/list/table/Brands.tsx @@ -7,7 +7,7 @@ import { import { Apis } from '@/gen/Apis'; import { ProTable } from '@ant-design/pro-components'; import { Image, Space } from 'antd'; -import PropertyBrandsCreate from '../../brand/modals/BrandsCreate'; +import BrandsCreate from '../../brand/modals/BrandsCreate'; import PropertyBrandUpdate from '../../brand/modals/BrandUpdate'; export default function PropertyBrands(props: MyBetaModalFormProps) { @@ -23,7 +23,7 @@ export default function PropertyBrands(props: MyBetaModalFormProps) { ) } toolBarRender={(action) => [ -
- +
{props?.item?.company?.name}
diff --git a/src/pages/house_charge_standard/components/HasHouse.tsx b/src/pages/house_charge_standard/components/HasHouse.tsx index 7c7c7dd..c278ff1 100644 --- a/src/pages/house_charge_standard/components/HasHouse.tsx +++ b/src/pages/house_charge_standard/components/HasHouse.tsx @@ -1,6 +1,6 @@ import { MyButtons, MyColumns, MyProTableProps } from '@/common'; import { Apis } from '@/gen/Apis'; -import ChargeStandardHasHouse from '@/pages/asset/components/modals/ChargeStandardHasHouse'; +import ChargeStandardHasHouse from '@/pages/asset/list/components/modals/ChargeStandardHasHouse'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; import { useEffect, useRef } from 'react'; diff --git a/src/pages/house_charge_standard/index.tsx b/src/pages/house_charge_standard/index.tsx index 86edfa2..f53cc2e 100644 --- a/src/pages/house_charge_standard/index.tsx +++ b/src/pages/house_charge_standard/index.tsx @@ -15,8 +15,8 @@ import { import { ProTable } from '@ant-design/pro-components'; import { useNavigate } from '@umijs/max'; import { Space } from 'antd'; -import ChargeStandardHasHouse from '../asset/components/modals/ChargeStandardHasHouse'; -import ChargeStandardUpdate from '../asset/components/modals/ChargeStandardUpdate'; +import ChargeStandardHasHouse from '../asset/list/components/modals/ChargeStandardHasHouse'; +import ChargeStandardUpdate from '../asset/list/components/modals/ChargeStandardUpdate'; import ChargeCreate from './modals/ChargeCreate'; export default function Index({ title = '收费标准' }) {