fix:更新机构

This commit is contained in:
zsqtony 2025-06-30 14:24:39 +08:00
parent 5c244d1a72
commit ede8af0d1f
8 changed files with 358 additions and 21 deletions

View File

@ -1,5 +1,4 @@
{ {
"url": "http://10.39.13.80:8003/api/docs/openapi", "url": "http://10.39.13.80:8003/api/docs/openapi",
// "url": "http://we6f9c65.natappfree.cc/api/docs/openapi",
"module": "Admin" "module": "Admin"
} }

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

@ -22,6 +22,10 @@ declare namespace ApiTypes {
type Delete = { type Delete = {
"id": number; // id "id": number; // id
}; };
type Select = {
"asset_projects_id"?: number; // 所属项目id,[ref:asset_projects]
"keywords"?: string; // 关键词
};
} }
namespace AssetHouses { namespace AssetHouses {
type List = { type List = {
@ -35,7 +39,6 @@ declare namespace ApiTypes {
"asset_buildings_id": number; // 所属楼栋id,[ref:asset_buildings] "asset_buildings_id": number; // 所属楼栋id,[ref:asset_buildings]
"asset_units_id": number; // 所属单元id,[ref:asset_units] "asset_units_id": number; // 所属单元id,[ref:asset_units]
"name": string; // 房屋名称 "name": string; // 房屋名称
"full_name": string; // 房屋全称
"floor"?: number; // 楼层 "floor"?: number; // 楼层
"built_area"?: number; // 建筑面积 "built_area"?: number; // 建筑面积
"inside_area"?: number; // 套内面积 "inside_area"?: number; // 套内面积
@ -81,13 +84,14 @@ declare namespace ApiTypes {
} }
namespace AssetProjects { namespace AssetProjects {
type List = { type List = {
"companies_id"?: number; // 所属机构id,[ref:companies]
"name"?: string; // 模糊搜索:名称 "name"?: string; // 模糊搜索:名称
}; };
type Store = { type Store = {
"name": string; // 项目名称 "name": string; // 项目名称
"alias_name"?: string; // 项目别名 "alias_name"?: string; // 项目别名
"code"?: string; // 项目编码 "code"?: string; // 项目编码
"companies_id": number; // 所属机构id,[ref:companies] "companies_id"?: number; // 所属机构id,[ref:companies]
"province"?: string; // 省 "province"?: string; // 省
"city"?: string; // 市 "city"?: string; // 市
"area"?: string; // 区 "area"?: string; // 区
@ -111,7 +115,7 @@ declare namespace ApiTypes {
"name": string; // 项目名称 "name": string; // 项目名称
"alias_name"?: string; // 项目别名 "alias_name"?: string; // 项目别名
"code"?: string; // 项目编码 "code"?: string; // 项目编码
"companies_id": number; // 所属机构id,[ref:companies] "companies_id"?: number; // 所属机构id,[ref:companies]
"province"?: string; // 省 "province"?: string; // 省
"city"?: string; // 市 "city"?: string; // 市
"area"?: string; // 区 "area"?: string; // 区
@ -142,6 +146,9 @@ declare namespace ApiTypes {
type Delete = { type Delete = {
"id": number; // id "id": number; // id
}; };
type Select = {
"keywords"?: string; // 关键词
};
} }
namespace AssetUnits { namespace AssetUnits {
type List = { type List = {
@ -178,6 +185,11 @@ declare namespace ApiTypes {
type Delete = { type Delete = {
"id": number; // id "id": number; // id
}; };
type Select = {
"asset_projects_id"?: number; // 所属项目id,[ref:asset_projects]
"asset_buildings_id"?: number; // 所属楼栋id,[ref:asset_buildings]
"keywords"?: string; // 关键词
};
} }
} }
namespace Common { namespace Common {
@ -249,7 +261,7 @@ declare namespace ApiTypes {
"business_license_image"?: string[]; // 营业执照图片 "business_license_image"?: string[]; // 营业执照图片
"_lft"?: number; // "_lft"?: number; //
"_rgt"?: number; // "_rgt"?: number; //
"parent_id"?: number; // "parent_id"?: number; // 上级 ID
}; };
type Update = { type Update = {
"id": number; // id "id": number; // id
@ -273,11 +285,7 @@ declare namespace ApiTypes {
"business_license_image"?: string[]; // 营业执照图片 "business_license_image"?: string[]; // 营业执照图片
"_lft"?: number; // "_lft"?: number; //
"_rgt"?: number; // "_rgt"?: number; //
"parent_id"?: number; // "parent_id"?: number; // 上级 ID
};
type Move = {
"id": number; // ID
"type": string; // 类型up 升级down 降级
}; };
type Show = { type Show = {
"id": number; // id "id": number; // id
@ -294,9 +302,90 @@ declare namespace ApiTypes {
type Select = { type Select = {
"keywords"?: string; // 关键词 "keywords"?: string; // 关键词
}; };
type SelectTree = { }
"keywords"?: string; // - namespace CompanyReceiptAccounts {
"parent_id"?: number; // - type List = {
"name"?: string; // 模糊搜索:名称
};
type Store = {
"companies_id": number; // 所属机构id,[ref:companies]
"company_name": string; // 企业名称
"company_bank": string; // 企业开户行
"company_account": string; // 企业账户
"pay_channel": string; // 收款渠道,[enum:CompanyReceiptAccountsPayChannelEnum]
"merchant_id"?: string; // 第三方支付的商户ID
"is_default"?: number; // 是否默认收款账号
};
type Update = {
"id": number; // id
"companies_id": number; // 所属机构id,[ref:companies]
"company_name": string; // 企业名称
"company_bank": string; // 企业开户行
"company_account": string; // 企业账户
"pay_channel": string; // 收款渠道,[enum:CompanyReceiptAccountsPayChannelEnum]
"merchant_id"?: string; // 第三方支付的商户ID
"is_default"?: number; // 是否默认收款账号
};
type Show = {
"id": number; // id
};
type SoftDelete = {
"id": number; // id
};
type Restore = {
"id": number; // id
};
type Delete = {
"id": number; // id
};
}
namespace Organizations {
type List = {
"name"?: string; // 模糊搜索:名称
"companies_id"?: number; // 机构ID[ref:companies]
};
type Store = {
"companies_id": number; // 所属机构id,[ref:companies]
"type": string; // 类型,[enum:OrganizationsTypeEnum]
"name": string; // 名称
"managers_id": number; // 负责人IDid,[ref:company_employees]
"manager_phone"?: string; // 负责人电话
"manager_email"?: string; // 负责人邮箱
"status"?: number; // 状态
"sort"?: number; // 排序
"_lft"?: number; //
"_rgt"?: number; //
"parent_id"?: number; //
};
type Update = {
"id": number; // id
"companies_id": number; // 所属机构id,[ref:companies]
"type": string; // 类型,[enum:OrganizationsTypeEnum]
"name": string; // 名称
"managers_id": number; // 负责人IDid,[ref:company_employees]
"manager_phone"?: string; // 负责人电话
"manager_email"?: string; // 负责人邮箱
"status"?: number; // 状态
"sort"?: number; // 排序
"_lft"?: number; //
"_rgt"?: number; //
"parent_id"?: number; // 上级 ID
};
type Move = {
"id": number; // ID
"type": string; // 类型up 升级down 降级
};
type Show = {
"id": number; // id
};
type SoftDelete = {
"id": number; // id
};
type Restore = {
"id": number; // id
};
type Delete = {
"id": number; // id
}; };
} }
} }

View File

@ -19,6 +19,9 @@ export const Apis = {
Delete(data: ApiTypes.Asset.AssetBuildings.Delete): Promise<MyResponseType> { Delete(data: ApiTypes.Asset.AssetBuildings.Delete): Promise<MyResponseType> {
return request('admin/asset/asset_buildings/delete', { data }); return request('admin/asset/asset_buildings/delete', { data });
}, },
Select(data?: ApiTypes.Asset.AssetBuildings.Select): Promise<MyResponseType> {
return request('admin/asset/asset_buildings/select', { data });
},
}, },
AssetHouses: { AssetHouses: {
List(data?: ApiTypes.Asset.AssetHouses.List): Promise<MyResponseType> { List(data?: ApiTypes.Asset.AssetHouses.List): Promise<MyResponseType> {
@ -59,6 +62,9 @@ export const Apis = {
Delete(data: ApiTypes.Asset.AssetProjects.Delete): Promise<MyResponseType> { Delete(data: ApiTypes.Asset.AssetProjects.Delete): Promise<MyResponseType> {
return request('admin/asset/asset_projects/delete', { data }); return request('admin/asset/asset_projects/delete', { data });
}, },
Select(data?: ApiTypes.Asset.AssetProjects.Select): Promise<MyResponseType> {
return request('admin/asset/asset_projects/select', { data });
},
}, },
AssetUnits: { AssetUnits: {
List(data?: ApiTypes.Asset.AssetUnits.List): Promise<MyResponseType> { List(data?: ApiTypes.Asset.AssetUnits.List): Promise<MyResponseType> {
@ -76,6 +82,9 @@ export const Apis = {
Delete(data: ApiTypes.Asset.AssetUnits.Delete): Promise<MyResponseType> { Delete(data: ApiTypes.Asset.AssetUnits.Delete): Promise<MyResponseType> {
return request('admin/asset/asset_units/delete', { data }); return request('admin/asset/asset_units/delete', { data });
}, },
Select(data?: ApiTypes.Asset.AssetUnits.Select): Promise<MyResponseType> {
return request('admin/asset/asset_units/select', { data });
},
}, },
}, },
Common: { Common: {
@ -131,9 +140,6 @@ export const Apis = {
Update(data: ApiTypes.Company.Companies.Update): Promise<MyResponseType> { Update(data: ApiTypes.Company.Companies.Update): Promise<MyResponseType> {
return request('admin/company/companies/update', { data }); return request('admin/company/companies/update', { data });
}, },
Move(data: ApiTypes.Company.Companies.Move): Promise<MyResponseType> {
return request('admin/company/companies/move', { data });
},
Show(data: ApiTypes.Company.Companies.Show): Promise<MyResponseType> { Show(data: ApiTypes.Company.Companies.Show): Promise<MyResponseType> {
return request('admin/company/companies/show', { data }); return request('admin/company/companies/show', { data });
}, },
@ -149,8 +155,54 @@ export const Apis = {
Select(data?: ApiTypes.Company.Companies.Select): Promise<MyResponseType> { Select(data?: ApiTypes.Company.Companies.Select): Promise<MyResponseType> {
return request('admin/company/companies/select', { data }); return request('admin/company/companies/select', { data });
}, },
SelectTree(data?: ApiTypes.Company.Companies.SelectTree): Promise<MyResponseType> { },
return request('admin/company/companies/select_tree', { data }); CompanyReceiptAccounts: {
List(data?: ApiTypes.Company.CompanyReceiptAccounts.List): Promise<MyResponseType> {
return request('admin/company/company_receipt_accounts/list', { data });
},
Store(data: ApiTypes.Company.CompanyReceiptAccounts.Store): Promise<MyResponseType> {
return request('admin/company/company_receipt_accounts/store', { data });
},
Update(data: ApiTypes.Company.CompanyReceiptAccounts.Update): Promise<MyResponseType> {
return request('admin/company/company_receipt_accounts/update', { data });
},
Show(data: ApiTypes.Company.CompanyReceiptAccounts.Show): Promise<MyResponseType> {
return request('admin/company/company_receipt_accounts/show', { data });
},
SoftDelete(data: ApiTypes.Company.CompanyReceiptAccounts.SoftDelete): Promise<MyResponseType> {
return request('admin/company/company_receipt_accounts/soft_delete', { data });
},
Restore(data: ApiTypes.Company.CompanyReceiptAccounts.Restore): Promise<MyResponseType> {
return request('admin/company/company_receipt_accounts/restore', { data });
},
Delete(data: ApiTypes.Company.CompanyReceiptAccounts.Delete): Promise<MyResponseType> {
return request('admin/company/company_receipt_accounts/delete', { data });
},
},
Organizations: {
List(data?: ApiTypes.Company.Organizations.List): Promise<MyResponseType> {
return request('admin/company/organizations/list', { data });
},
Store(data: ApiTypes.Company.Organizations.Store): Promise<MyResponseType> {
return request('admin/company/organizations/store', { data });
},
Update(data: ApiTypes.Company.Organizations.Update): Promise<MyResponseType> {
return request('admin/company/organizations/update', { data });
},
Move(data: ApiTypes.Company.Organizations.Move): Promise<MyResponseType> {
return request('admin/company/organizations/move', { data });
},
Show(data: ApiTypes.Company.Organizations.Show): Promise<MyResponseType> {
return request('admin/company/organizations/show', { data });
},
SoftDelete(data: ApiTypes.Company.Organizations.SoftDelete): Promise<MyResponseType> {
return request('admin/company/organizations/soft_delete', { data });
},
Restore(data: ApiTypes.Company.Organizations.Restore): Promise<MyResponseType> {
return request('admin/company/organizations/restore', { data });
},
Delete(data: ApiTypes.Company.Organizations.Delete): Promise<MyResponseType> {
return request('admin/company/organizations/delete', { data });
}, },
}, },
}, },

View File

@ -53,7 +53,7 @@ export const AssetProjectsChargeEnum= {
// AssetProjectsEntrustTypeEnum // AssetProjectsEntrustTypeEnum
export const AssetProjectsEntrustTypeEnum= { export const AssetProjectsEntrustTypeEnum= {
'DeveloperJointEntrust': {"text":"开发商委","color":"#007bff","value":"DeveloperJointEntrust"}, 'DeveloperJointEntrust': {"text":"开发商委","color":"#007bff","value":"DeveloperJointEntrust"},
'OwnersFullEntrust': {"text":"业委会全委","color":"#28a745","value":"OwnersFullEntrust"}, 'OwnersFullEntrust': {"text":"业委会全委","color":"#28a745","value":"OwnersFullEntrust"},
'GovernmentFullEntrust': {"text":"政府类全委","color":"#ffc107","value":"GovernmentFullEntrust"}, 'GovernmentFullEntrust': {"text":"政府类全委","color":"#ffc107","value":"GovernmentFullEntrust"},
}; };
@ -100,6 +100,22 @@ export const CompaniesMerchantTypeEnum= {
'ServiceProvider': {"text":"服务商","color":"#28a745","value":"ServiceProvider"}, 'ServiceProvider': {"text":"服务商","color":"#28a745","value":"ServiceProvider"},
}; };
// CompanyReceiptAccountsPayChannelEnum
export const CompanyReceiptAccountsPayChannelEnum= {
'WeChat': {"text":"微信","color":"#07c160","value":"WeChat"},
'Alipay': {"text":"支付宝","color":"#1677ff","value":"Alipay"},
'BankTransfer': {"text":"银行转账","color":"#6c757d","value":"BankTransfer"},
'TongLian': {"text":"通联支付","color":"#ff9f0a","value":"TongLian"},
};
// OrganizationsTypeEnum
export const OrganizationsTypeEnum= {
'Group': {"text":"集团","color":"#007bff","value":"Group"},
'Company': {"text":"公司","color":"#28a745","value":"Company"},
'ManagementOffice': {"text":"管理处","color":"#ffc107","value":"ManagementOffice"},
'Department': {"text":"部门","color":"#dc3545","value":"Department"},
};
// SysModuleEnum // SysModuleEnum
export const SysModuleEnum= { export const SysModuleEnum= {
'Admin': {"text":"管理员","color":"#cf1322","value":"Admin"}, 'Admin': {"text":"管理员","color":"#cf1322","value":"Admin"},

View File

@ -0,0 +1,38 @@
import { MyPageContainer } 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 Organizations from './components/Organizations';
export default function Show({ title = '机构详情' }) {
const { id } = useParams<{ id: string }>();
const [data, setShow] = useState<any>({});
const loadShow = () => {
let paramsId: any = { id: id ?? 0 };
Apis.Company.Companies.Show(paramsId).then((res) => {
setShow(res?.data);
});
};
useEffect(() => {
loadShow();
}, [id]);
let items = [
{
label: '组织',
key: '1',
closable: false,
children: <Organizations item={data} />,
},
];
return (
<MyPageContainer title={title}>
<ProCard>
<Tabs type="card" items={data?.id ? items : []} />
</ProCard>
</MyPageContainer>
);
}

View File

@ -0,0 +1,38 @@
import { MyBetaModalFormProps, MyColumns, MyProTableProps } from '@/common';
import { Apis } from '@/gen/Apis';
import { ProTable } from '@ant-design/pro-components';
import OrganizationsCreate from '../modals/OrganizationsCreate';
export default function Organizations(props: MyBetaModalFormProps) {
return (
<>
<ProTable
{...MyProTableProps.props}
search={false}
request={async (params, sort) =>
MyProTableProps.request(
{ ...params, companies_id: props?.item?.id },
sort,
Apis.Company.Organizations.List,
)
}
toolBarRender={(action) => [
<OrganizationsCreate
key="Create"
reload={action?.reload}
title="组织"
/>,
]}
options={false}
columns={[
MyColumns.ID(),
{
title: '楼栋',
width: '250px',
dataIndex: 'name',
},
]}
/>
</>
);
}

View File

@ -7,11 +7,12 @@ import {
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { CompaniesMerchantTypeEnum } from '@/gen/Enums'; import { CompaniesMerchantTypeEnum } from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components'; import { ProTable } from '@ant-design/pro-components';
import { useNavigate } from '@umijs/max';
import { Space } from 'antd'; import { Space } from 'antd';
import Create from './modals/Create'; import Create from './modals/Create';
import Update from './modals/Update';
export default function Index({ title = '机构管理' }) { export default function Index({ title = '机构管理' }) {
const navigate = useNavigate();
return ( return (
<MyPageContainer title={title}> <MyPageContainer title={title}>
<ProTable <ProTable
@ -59,7 +60,13 @@ export default function Index({ title = '机构管理' }) {
MyColumns.Option({ MyColumns.Option({
render: (_, item: any, index, action) => ( render: (_, item: any, index, action) => (
<Space key={index}> <Space key={index}>
<Update item={item} reload={action?.reload} title={title} /> {/* <Update item={item} reload={action?.reload} title={title} /> */}
<MyButtons.View
title="详情"
onClick={() => {
navigate(`/company/companies/${item.id}`);
}}
/>
<MyButtons.Delete <MyButtons.Delete
onConfirm={() => onConfirm={() =>
Apis.Common.Admins.Delete({ id: item.id }).then(() => Apis.Common.Admins.Delete({ id: item.id }).then(() =>

View File

@ -0,0 +1,98 @@
import {
MyBetaModalFormProps,
MyButtons,
MyFormItems,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { Address } from '@/components/Address';
import { Apis } from '@/gen/Apis';
import { CompaniesMerchantTypeEnum } from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components';
import { message } from 'antd';
export default function Create(props: MyBetaModalFormProps) {
return (
<BetaSchemaForm<ApiTypes.Company.Companies.Store>
{...MyModalFormProps.props}
title={`添加${props.title}`}
wrapperCol={{ span: 24 }}
width="800px"
trigger={<MyButtons.Create title={`添加${props.title}`} />}
onFinish={async (values) =>
Apis.Company.Companies.Store(values)
.then(() => {
props.reload?.();
message.success(props.title + '成功');
return true;
})
.catch(() => false)
}
columns={[
{
key: 'name',
title: '机构名称',
colProps: { span: 8 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'short_name',
title: '机构简称',
colProps: { span: 8 },
},
{
key: 'business_license_number',
title: '营业执照号',
colProps: { span: 8 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'contact_name',
title: '联系人姓名',
colProps: { span: 8 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'contact_phone',
title: '联系人手机',
colProps: { span: 8 },
valueType: 'number',
fieldProps: {
maxLength: 11,
},
formItemProps: { ...rulesHelper.number },
},
{
key: 'contact_email',
title: '联系人邮箱',
colProps: { span: 8 },
},
{
key: 'contact_address',
title: '联系人地址',
colProps: { span: 24 },
},
MyFormItems.EnumRadio({
key: 'merchant_type',
title: '商户类型',
colProps: { span: 24 },
valueEnum: CompaniesMerchantTypeEnum,
required: true,
}),
Address.Cascader({
key: 'casacader',
title: '选择地址',
colProps: { span: 24 },
keys: ['province', 'city', 'area', 'street'],
required: true,
}),
{
key: 'address',
title: '详细地址',
colProps: { span: 24 },
},
]}
/>
);
}