This commit is contained in:
uiuJun 2025-07-17 13:58:54 +08:00
parent 9022d9dc90
commit b1e639e2a8
27 changed files with 462 additions and 241 deletions

View File

@ -1,4 +1,3 @@
import { rulesHelper } from '@/common';
import { import {
ProColumns, ProColumns,
ProFormCascader, ProFormCascader,
@ -46,9 +45,9 @@ export const Address = {
return accumulator; return accumulator;
}, {} as Record<string, string>); }, {} as Record<string, string>);
}, },
formItemProps: { // formItemProps: {
...(required ? rulesHelper.array : {}), // ...(required ? rulesHelper.array : {}),
}, // },
fieldProps: { fieldProps: {
showSearch: true, showSearch: true,
changeOnSelect: true, changeOnSelect: true,

View File

@ -110,7 +110,42 @@ export const Selects = {
}, },
}; };
}, },
// 单元下拉框
GridUnits(props?: PropsType): ReturnType {
const {
title = '单元',
key = 'asset_buildings_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.Asset.AssetUnits.GridSelect({
keywords: params?.KeyWords,
asset_projects_id: params?.asset_projects_id,
asset_buildings_id: params?.asset_buildings_id,
...params,
})
).data,
...rest,
fieldProps: {
showSearch: true,
fieldNames: {
label: 'label',
value: 'value',
},
...rest?.fieldProps,
},
};
},
//网格标识 //网格标识
GetGridMark(props?: PropsType): ReturnType { GetGridMark(props?: PropsType): ReturnType {
const { const {
@ -194,7 +229,7 @@ export const Selects = {
return { return {
title: title, title: title,
key: key, key: key,
valueType: 'treeSelect', valueType: 'cascader',
hideInTable: hideInTable, hideInTable: hideInTable,
formItemProps: { ...(required ? rulesHelper.number : {}) }, formItemProps: { ...(required ? rulesHelper.number : {}) },
request: async (params) => request: async (params) =>
@ -208,6 +243,7 @@ export const Selects = {
...rest, ...rest,
fieldProps: { fieldProps: {
showSearch: true, showSearch: true,
changeOnSelect: true,
fieldNames: { fieldNames: {
label: 'name', label: 'name',
value: 'id', value: 'id',
@ -319,6 +355,39 @@ export const Selects = {
}, },
}; };
}, },
ProjectAccounts(props?: PropsType): ReturnType {
const {
title = '收款账户',
key = 'company_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.CompanyProjectReceiptAccounts.Select({
keywords: params?.KeyWords,
...params,
})
).data,
...rest,
fieldProps: {
showSearch: true,
fieldNames: {
label: 'label',
value: 'value',
},
...rest?.fieldProps,
},
};
},
//房屋 //房屋
AssetHouses(props?: PropsType): ReturnType { AssetHouses(props?: PropsType): ReturnType {
const { const {

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

@ -5,9 +5,30 @@ declare namespace ApiTypes {
"asset_houses_id"?: number; // 资产房屋ID "asset_houses_id"?: number; // 资产房屋ID
"status"?: string; // 状态,[enum:HouseOccupantsStatusEnum] "status"?: string; // 状态,[enum:HouseOccupantsStatusEnum]
}; };
type Update = {
"id": number; // id
"name": string; // 客户姓名
"phone": string; // 客户手机号
"reserve_phone"?: string; // 备用电话
"card_type"?: string; // 证件类型,[enum:HouseOccupantsCardTypeEnum]
"id_card"?: string; // 客户身份证号
"card_front_image"?: string[]; // 身份证正面图片
"card_back_image"?: string[]; // 身份证反面图片
"address"?: string; // 客户地址
"ownership_info"?: string[]; // 产权信息
"house_relation"?: string; // 房客关系,[enum:HouseOccupantsHouseRelationEnum]
"relation_with_owner"?: string; // 与产权人关系,[enum:HouseOccupantsRelationWithOwnerEnum]
"is_live_in"?: number; // 是否在居住中
"move_in_date"?: Date; // 入住时间
"status"?: string; // 状态,[enum:HouseOccupantsStatusEnum]
"unbound_time"?: Date; // 解绑时间
};
type Show = { type Show = {
"id": number; // id "id": number; // id
}; };
type Delete = {
"id": number; // id
};
} }
namespace HouseRegisters { namespace HouseRegisters {
type List = { type List = {
@ -28,13 +49,18 @@ declare namespace ApiTypes {
type Update = { type Update = {
"id": number; // id "id": number; // id
"type": string; // 类型,[enum:HouseRegistersTypeEnum] "type": string; // 类型,[enum:HouseRegistersTypeEnum]
"status"?: string; // 状态,[enum:HouseRegistersStatusEnum]
"house_status"?: string; // 房屋状态,[enum:HouseRegistersHouseStatusEnum] "house_status"?: string; // 房屋状态,[enum:HouseRegistersHouseStatusEnum]
"usage_plan"?: string; // 使用计划,[enum:HouseRegistersUsagePlanEnum] "usage_plan"?: string; // 使用计划,[enum:HouseRegistersUsagePlanEnum]
"customer_type"?: string; // 客户类型,[enum:HouseRegistersCustomerTypeEnum] "customer_type"?: string; // 客户类型,[enum:HouseRegistersCustomerTypeEnum]
"customer_info"?: string[]; // 客户信息 "customer_info"?: string[]; // 客户信息
"ownership_info"?: string[]; // 产权信息 "ownership_info"?: string[]; // 产权信息
}; };
type MoveOut = {
"house_occupants_id": number; // 房客id
};
type RemoveOwner = {
"house_occupants_id": number; // 房客id
};
type Show = { type Show = {
"id": number; // id "id": number; // id
}; };
@ -255,6 +281,11 @@ declare namespace ApiTypes {
"asset_buildings_id"?: number; // 所属楼栋id,[ref:asset_buildings] "asset_buildings_id"?: number; // 所属楼栋id,[ref:asset_buildings]
"keywords"?: string; // 关键词 "keywords"?: string; // 关键词
}; };
type GridSelect = {
"asset_projects_id"?: number; // 所属项目id,[ref:asset_projects]
"asset_buildings_id"?: number; // 所属楼栋id,[ref:asset_buildings]
"keywords"?: string; // 关键词
};
} }
} }
namespace Bill { namespace Bill {
@ -513,6 +544,10 @@ declare namespace ApiTypes {
type Delete = { type Delete = {
"id": number; // id "id": number; // id
}; };
type Select = {
"companies_id"?: number; // 所属机构id,[ref:companies]
"projects_id"?: number; // 所属项目id,[ref:asset_projects]
};
} }
namespace CompanyReceiptAccounts { namespace CompanyReceiptAccounts {
type List = { type List = {

View File

@ -7,9 +7,15 @@ export const Apis = {
List(data?: ApiTypes.Archive.HouseOccupants.List): Promise<MyResponseType> { List(data?: ApiTypes.Archive.HouseOccupants.List): Promise<MyResponseType> {
return request('admin/archive/house_occupants/list', { data }); return request('admin/archive/house_occupants/list', { data });
}, },
Update(data: ApiTypes.Archive.HouseOccupants.Update): Promise<MyResponseType> {
return request('admin/archive/house_occupants/update', { data });
},
Show(data: ApiTypes.Archive.HouseOccupants.Show): Promise<MyResponseType> { Show(data: ApiTypes.Archive.HouseOccupants.Show): Promise<MyResponseType> {
return request('admin/archive/house_occupants/show', { data }); return request('admin/archive/house_occupants/show', { data });
}, },
Delete(data: ApiTypes.Archive.HouseOccupants.Delete): Promise<MyResponseType> {
return request('admin/archive/house_occupants/delete', { data });
},
}, },
HouseRegisters: { HouseRegisters: {
List(data?: ApiTypes.Archive.HouseRegisters.List): Promise<MyResponseType> { List(data?: ApiTypes.Archive.HouseRegisters.List): Promise<MyResponseType> {
@ -21,6 +27,12 @@ export const Apis = {
Update(data: ApiTypes.Archive.HouseRegisters.Update): Promise<MyResponseType> { Update(data: ApiTypes.Archive.HouseRegisters.Update): Promise<MyResponseType> {
return request('admin/archive/house_registers/update', { data }); return request('admin/archive/house_registers/update', { data });
}, },
MoveOut(data: ApiTypes.Archive.HouseRegisters.MoveOut): Promise<MyResponseType> {
return request('admin/archive/house_registers/move_out', { data });
},
RemoveOwner(data: ApiTypes.Archive.HouseRegisters.RemoveOwner): Promise<MyResponseType> {
return request('admin/archive/house_registers/remove_owner', { data });
},
Show(data: ApiTypes.Archive.HouseRegisters.Show): Promise<MyResponseType> { Show(data: ApiTypes.Archive.HouseRegisters.Show): Promise<MyResponseType> {
return request('admin/archive/house_registers/show', { data }); return request('admin/archive/house_registers/show', { data });
}, },
@ -127,6 +139,9 @@ export const Apis = {
Select(data?: ApiTypes.Asset.AssetUnits.Select): Promise<MyResponseType> { Select(data?: ApiTypes.Asset.AssetUnits.Select): Promise<MyResponseType> {
return request('admin/asset/asset_units/select', { data }); return request('admin/asset/asset_units/select', { data });
}, },
GridSelect(data?: ApiTypes.Asset.AssetUnits.GridSelect): Promise<MyResponseType> {
return request('admin/asset/asset_units/grid_select', { data });
},
}, },
}, },
Bill: { Bill: {
@ -285,6 +300,9 @@ export const Apis = {
Delete(data: ApiTypes.Company.CompanyProjectReceiptAccounts.Delete): Promise<MyResponseType> { Delete(data: ApiTypes.Company.CompanyProjectReceiptAccounts.Delete): Promise<MyResponseType> {
return request('admin/company/company_project_receipt_accounts/delete', { data }); return request('admin/company/company_project_receipt_accounts/delete', { data });
}, },
Select(data?: ApiTypes.Company.CompanyProjectReceiptAccounts.Select): Promise<MyResponseType> {
return request('admin/company/company_project_receipt_accounts/select', { data });
},
}, },
CompanyReceiptAccounts: { CompanyReceiptAccounts: {
List(data?: ApiTypes.Company.CompanyReceiptAccounts.List): Promise<MyResponseType> { List(data?: ApiTypes.Company.CompanyReceiptAccounts.List): Promise<MyResponseType> {

View File

@ -96,7 +96,7 @@ export const AssetUnitsBuildingTypeEnum= {
// 缓存类型 // 缓存类型
export const CacheTypeEnum= { export const CacheTypeEnum= {
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#50ae15","value":"MobilePhoneVerificationCode"}, 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#6c905c","value":"MobilePhoneVerificationCode"},
}; };
// CompaniesMerchantTypeEnum // CompaniesMerchantTypeEnum
@ -223,6 +223,13 @@ export const HouseRegistersHouseStatusEnum= {
'Vacant': {"text":"空置","color":"#dc3545","value":"Vacant"}, 'Vacant': {"text":"空置","color":"#dc3545","value":"Vacant"},
}; };
// 房屋登记身份类型
export const HouseRegistersIdentityTypeEnum= {
'Owner': {"text":"产权人","color":"#2db7f5","value":"Owner"},
'Tenant': {"text":"租客","color":"#87d068","value":"Tenant"},
'CoResident': {"text":"同住人(亲属)","color":"#108ee9","value":"CoResident"},
};
// HouseRegistersStatusEnum // HouseRegistersStatusEnum
export const HouseRegistersStatusEnum= { export const HouseRegistersStatusEnum= {
'Pending': {"text":"待审","color":"#faad14","value":"Pending"}, 'Pending': {"text":"待审","color":"#faad14","value":"Pending"},

View File

@ -79,7 +79,7 @@ export default function Create(props: MyBetaModalFormProps) {
columns: [ columns: [
MyFormItems.EnumRadio({ MyFormItems.EnumRadio({
key: 'house_relation', key: 'house_relation',
title: '住户类型', title: '房客关系',
colProps: { span: 4 }, colProps: { span: 4 },
valueEnum: () => { valueEnum: () => {
let obj: any = JSON.parse( let obj: any = JSON.parse(

View File

@ -8,6 +8,7 @@ import {
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { import {
HouseOccupantsCardTypeEnum, HouseOccupantsCardTypeEnum,
HouseOccupantsHouseRelationEnum,
HouseRegistersCustomerTypeEnum, HouseRegistersCustomerTypeEnum,
} from '@/gen/Enums'; } from '@/gen/Enums';
import { BetaSchemaForm, ProCard } from '@ant-design/pro-components'; import { BetaSchemaForm, ProCard } from '@ant-design/pro-components';
@ -44,6 +45,20 @@ export default function Create(props: MyBetaModalFormProps) {
.catch(() => false) .catch(() => false)
} }
columns={[ columns={[
MyFormItems.EnumRadio({
key: 'house_relation',
title: '住户类型',
colProps: { span: 6 },
valueEnum: () => {
let obj: any = JSON.parse(
JSON.stringify(HouseOccupantsHouseRelationEnum),
);
delete obj.Resident;
delete obj.Tenant;
return obj;
},
required: true,
}),
MyFormItems.EnumRadio({ MyFormItems.EnumRadio({
key: 'customer_type', key: 'customer_type',
title: '客户类型', title: '客户类型',

View File

@ -0,0 +1,145 @@
import {
MyBetaModalFormProps,
MyButtons,
MyFormItems,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { Apis } from '@/gen/Apis';
import {
HouseOccupantsHouseRelationEnum,
HouseOccupantsRelationWithOwnerEnum,
} from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components';
import { Form, message } from 'antd';
export default function Update(props: MyBetaModalFormProps) {
const [form] = Form.useForm();
return (
<BetaSchemaForm<ApiTypes.Archive.HouseOccupants.Update>
{...MyModalFormProps.props}
form={form}
title={`编辑`}
wrapperCol={{ span: 24 }}
width="600px"
trigger={<MyButtons.Default title={`编辑`} size="small" type="link" />}
onOpenChange={(open: any) => {
if (open) {
form.setFieldsValue(props?.item); // 编辑赋值
}
}}
onFinish={async (values) =>
Apis.Archive.HouseOccupants.Update({
...values,
id: props?.item?.id,
})
.then(() => {
props.reload?.();
message.success('楼栋编辑成功');
return true;
})
.catch(() => false)
}
columns={[
{
valueType: 'group',
columns: [
MyFormItems.EnumRadio({
key: 'house_relation',
title: '住户类型',
colProps: { span: 6 },
valueEnum: () => {
let obj: any = JSON.parse(
JSON.stringify(HouseOccupantsHouseRelationEnum),
);
delete obj.Owner;
return obj;
},
required: true,
}),
{
name: ['house_relation'],
valueType: 'dependency',
columns: ({ house_relation }: any) => {
return house_relation === 'Resident'
? [
MyFormItems.EnumRadio({
key: 'relation_with_owner',
title: '与产权人关系',
colProps: { span: 18 },
valueEnum: () => {
let obj: any = JSON.parse(
JSON.stringify(HouseOccupantsRelationWithOwnerEnum),
);
delete obj.Self;
return obj;
},
required: true,
}),
]
: [
MyFormItems.EnumRadio({
key: 'relation_with_owner',
title: '与租客关系',
colProps: { span: 18 },
valueEnum: () => {
let obj: any = JSON.parse(
JSON.stringify(HouseOccupantsRelationWithOwnerEnum),
);
delete obj.ContactPerson;
return obj;
},
required: true,
}),
];
},
},
{
title: '姓名',
dataIndex: 'name',
colProps: { span: 12 },
formItemProps: { ...rulesHelper.text },
},
{
title: '手机号',
dataIndex: 'phone',
colProps: { span: 12 },
fieldProps: {
maxLength: 11,
},
formItemProps: { ...rulesHelper.phone },
},
{
title: '是否入住',
dataIndex: 'is_live_in',
colProps: { span: 12 },
valueType: 'switch',
},
{
name: ['is_live_in'],
valueType: 'dependency',
columns: ({ is_live_in }: any) => {
return is_live_in
? [
{
title: '入住日期',
dataIndex: 'move_in_date',
valueType: 'date',
colProps: { span: 12 },
fieldProps: {
style: { width: '100%' },
},
formItemProps: { ...rulesHelper.text },
},
]
: [,];
},
},
],
},
]}
/>
);
}

View File

@ -1,151 +0,0 @@
import {
MyBetaModalFormProps,
MyButtons,
MyFormItems,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { Address } from '@/components/Address';
import { Selects } from '@/components/Select';
import { Apis } from '@/gen/Apis';
import {
AssetProjectsChargeEnum,
AssetProjectsEntrustTypeEnum,
AssetProjectsPropertyTypeEnum,
AssetProjectsStatusEnum,
} from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components';
import { message } from 'antd';
export default function Update(props: MyBetaModalFormProps) {
return (
<BetaSchemaForm<ApiTypes.Archive.HouseRegisters.Update>
{...MyModalFormProps.props}
title={`编辑${props.title}`}
trigger={<MyButtons.Default title="编辑" type="primary" size="small" />}
wrapperCol={{ span: 24 }}
width="800px"
request={() =>
Promise.resolve({
...props.item,
casacader: [
props.item?.province_id || '',
props.item?.city_id || '',
props.item?.area_id || '',
props.item?.street_id || '',
],
})
}
onFinish={async (values) =>
Apis.Archive.HouseRegisters.Update({
...values,
id: props.item?.id ?? 0,
})
.then(() => {
props.reload?.();
message.success(props.title + '成功');
return true;
})
.catch(() => false)
}
columns={[
{
key: 'name',
title: '项目名称',
colProps: { span: 12 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'alias_name',
title: '项目别名',
colProps: { span: 6 },
},
Selects?.Companies({
key: 'companies_id',
title: '所属机构',
colProps: { span: 6 },
formItemProps: { ...rulesHelper.number },
}),
// {
// key: 'code',
// title: '项目编码',
// colProps: { span: 8 },
// formItemProps: { ...rulesHelper.text },
// },
Address.Cascader({
key: 'casacader',
title: '选择地址',
colProps: { span: 12 },
keys: ['province', 'city', 'area', 'street'],
required: true,
}),
{
key: 'address',
title: '详细地址',
colProps: { span: 6 },
formItemProps: { ...rulesHelper.text },
},
{
key: 'longitude',
title: '经度',
colProps: { span: 3 },
},
{
key: 'latitude',
title: '纬度',
colProps: { span: 3 },
},
MyFormItems.EnumSelect({
key: 'property_type',
title: '项目类型',
colProps: { span: 6 },
valueEnum: AssetProjectsPropertyTypeEnum,
// required: true,
}),
MyFormItems.EnumSelect({
key: 'status',
title: '项目状态',
colProps: { span: 6 },
valueEnum: AssetProjectsStatusEnum,
// required: true,
}),
MyFormItems.EnumSelect({
key: 'entrust_type',
title: '委托类型',
colProps: { span: 6 },
valueEnum: AssetProjectsEntrustTypeEnum,
// required: true,
}),
MyFormItems.EnumRadio({
key: 'charge',
title: '收费方式',
colProps: { span: 6 },
valueEnum: AssetProjectsChargeEnum,
// required: true,
}),
{
key: 'takeover_date',
title: '接管日期',
valueType: 'date',
fieldProps: {
style: {
width: '100%',
},
},
colProps: { span: 6 },
},
{
key: 'closure_date',
title: '封园日期',
valueType: 'date',
fieldProps: {
style: {
width: '100%',
},
},
colProps: { span: 6 },
},
]}
/>
);
}

View File

@ -8,10 +8,11 @@ import {
import { ProTable } from '@ant-design/pro-components'; import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd'; import { Space } from 'antd';
import { useEffect, useRef } from 'react'; import { useEffect, useRef } from 'react';
import Add from '../modals/Add';
import AddOccupant from '../modals/AddOccupant'; import AddOccupant from '../modals/AddOccupant';
import AddOwner from '../modals/AddOwner';
import MoveIn from '../modals/MoveIn'; import MoveIn from '../modals/MoveIn';
import MoveOut from '../modals/MoveOut'; import MoveOut from '../modals/MoveOut';
import OccupantsUpdate from '../modals/OccupantsUpdate';
import Transfer from '../modals/Transfer'; import Transfer from '../modals/Transfer';
export default function Index({ ...rest }) { export default function Index({ ...rest }) {
@ -37,7 +38,7 @@ export default function Index({ ...rest }) {
) )
} }
toolBarRender={(action) => [ toolBarRender={(action) => [
<Add <AddOwner
key="add" key="add"
item={rest.item} item={rest.item}
reload={action?.reload} reload={action?.reload}
@ -65,7 +66,7 @@ export default function Index({ ...rest }) {
search: false, search: false,
}), }),
MyColumns.EnumTag({ MyColumns.EnumTag({
title: '与产权人关系', title: '关系说明',
dataIndex: 'relation_with_owner', dataIndex: 'relation_with_owner',
valueEnum: HouseOccupantsRelationWithOwnerEnum, valueEnum: HouseOccupantsRelationWithOwnerEnum,
search: false, search: false,
@ -103,7 +104,9 @@ export default function Index({ ...rest }) {
MyColumns.Option({ MyColumns.Option({
render: (_, item: any, index, action) => ( render: (_, item: any, index, action) => (
<Space key={index}> <Space key={index}>
{/* <GridCreateUpdate item={item} reload={action?.reload} /> */} {item?.house_relation !== 'Owner' && (
<OccupantsUpdate item={item} reload={action?.reload} />
)}
{item?.is_live_in && ( {item?.is_live_in && (
<MoveIn item={item} reload={action?.reload} title="入住" /> <MoveIn item={item} reload={action?.reload} title="入住" />
)} )}

View File

@ -36,8 +36,11 @@ export default function ReceiptAccounts(props: MyBetaModalFormProps) {
]} ]}
// options={false} // options={false}
columns={[ columns={[
MyColumns.ID(), {
title: '配置id',
dataIndex: 'id',
// width: 360,
},
{ {
title: '收款账号名称', title: '收款账号名称',
dataIndex: ['receipt_account', 'company_name'], dataIndex: ['receipt_account', 'company_name'],

View File

@ -59,7 +59,7 @@ export default function Index({ ...rest }) {
<GridMannger item={item} reload={action?.reload} /> <GridMannger item={item} reload={action?.reload} />
<MyButtons.Delete <MyButtons.Delete
onConfirm={() => onConfirm={() =>
Apis.Asset.AssetBuildings.Delete({ id: item.id }).then(() => Apis.Grid.Grids.Delete({ id: item.id }).then(() =>
action?.reload(), action?.reload(),
) )
} }

View File

@ -5,12 +5,7 @@ import {
MyProTableProps, MyProTableProps,
} from '@/common'; } from '@/common';
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { import { AssetProjectsPropertyTypeEnum } from '@/gen/Enums';
AssetProjectsChargeEnum,
AssetProjectsEntrustTypeEnum,
AssetProjectsPropertyTypeEnum,
AssetProjectsStatusEnum,
} from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components'; import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd'; import { Space } from 'antd';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
@ -41,14 +36,9 @@ export default function Index({ title = '项目管理' }) {
title: '项目名称', title: '项目名称',
dataIndex: 'name', dataIndex: 'name',
}, },
{
title: '项目别名',
dataIndex: 'alias_name',
},
// { // {
// title: '项目编码', // title: '项目别名',
// dataIndex: 'code', // dataIndex: 'alias_name',
// search: false,
// }, // },
{ {
title: '地址', title: '地址',
@ -59,25 +49,24 @@ export default function Index({ title = '项目管理' }) {
}, },
search: false, search: false,
}, },
MyColumns.EnumTag({ // MyColumns.EnumTag({
title: '项目状态', // title: '项目状态',
dataIndex: 'status', // dataIndex: 'status',
valueEnum: AssetProjectsStatusEnum, // valueEnum: AssetProjectsStatusEnum,
search: false, // search: false,
}), // }),
// MyColumns.EnumTag({
MyColumns.EnumTag({ // title: '委托类型',
title: '委托类型', // dataIndex: 'entrust_type',
dataIndex: 'entrust_type', // valueEnum: AssetProjectsEntrustTypeEnum,
valueEnum: AssetProjectsEntrustTypeEnum, // search: false,
search: false, // }),
}), // MyColumns.EnumTag({
MyColumns.EnumTag({ // title: '收费方式',
title: '收费方式', // dataIndex: 'charge',
dataIndex: 'charge', // valueEnum: AssetProjectsChargeEnum,
valueEnum: AssetProjectsChargeEnum, // search: false,
search: false, // }),
}),
MyColumns.SoftDelete({ MyColumns.SoftDelete({
title: '启/禁用', title: '启/禁用',
onRestore: Apis.Asset.AssetProjects.Restore, onRestore: Apis.Asset.AssetProjects.Restore,

View File

@ -14,17 +14,18 @@ export default function Index(props: MyBetaModalFormProps) {
const [selectedProjectsIds, setSelectedProjectsIds] = useState<any>([]); const [selectedProjectsIds, setSelectedProjectsIds] = useState<any>([]);
const onShowContactPhone = () => { const onShowContactPhone = () => {
Apis.Company.CompanyProjectReceiptAccounts.Store({ Apis.Company.CompanyProjectReceiptAccounts.Store({
companies_id: props?.item?.id ?? 0, companies_id: props?.item?.companies_id ?? 0,
projects_id: props?.item?.id, projects_id: props?.item?.id,
receipt_accounts_id: selectedProjectsIds[0], receipt_accounts_id: selectedProjectsIds[0],
}) })
.then(() => { .then(() => {
props.reload?.(); props.reload?.();
message.success('添加成功!'); message.success('收款账号添加成功!');
// todo 关闭页面
}) })
.catch(() => false); .catch(() => false);
}; };
console.log(props?.item, '0000');
return ( return (
<MyModal <MyModal
title={props.title || '查看'} title={props.title || '查看'}
@ -44,6 +45,7 @@ export default function Index(props: MyBetaModalFormProps) {
{ {
...params, ...params,
companies_id: props?.item?.companies_id, companies_id: props?.item?.companies_id,
projects_id: props?.item?.id,
}, },
sort, sort,
Apis.Company.CompanyReceiptAccounts.List, Apis.Company.CompanyReceiptAccounts.List,

View File

@ -35,7 +35,7 @@ export default function Create(props: MyBetaModalFormProps) {
}) })
.then(() => { .then(() => {
props.reload?.(); props.reload?.();
message.success(props.title + '成功'); message.success('网格创建成功');
return true; return true;
}) })
.catch(() => false); .catch(() => false);
@ -105,7 +105,7 @@ export default function Create(props: MyBetaModalFormProps) {
}, },
}, },
}), }),
Selects?.AssetUnits({ Selects?.GridUnits({
key: 'asset_units_id', key: 'asset_units_id',
title: '选择单元', title: '选择单元',
params: { params: {

View File

@ -13,7 +13,6 @@ export default function Create(
props: { buttonProps?: ButtonProps } & MyBetaModalFormProps, props: { buttonProps?: ButtonProps } & MyBetaModalFormProps,
) { ) {
const [form] = Form.useForm(); const [form] = Form.useForm();
return ( return (
<BetaSchemaForm<ApiTypes.Grid.Grids.AddManager> <BetaSchemaForm<ApiTypes.Grid.Grids.AddManager>
{...MyModalFormProps.props} {...MyModalFormProps.props}
@ -27,13 +26,10 @@ export default function Create(
if (open && props.item) { if (open && props.item) {
// 获取详情数据 // 获取详情数据
Apis.Grid.Grids.Show({ Apis.Grid.Grids.Show({
id: props?.item?.companies_id, id: props?.item?.id,
}).then((res) => { }).then((res) => {
form.setFieldsValue({ form.setFieldsValue({
...res.data, ...res.data,
company_employees_id: res.data.company_has_managements?.map(
(item: any) => item.company_employees_id,
),
}); });
}); });
} }

View File

@ -11,11 +11,11 @@ import { Form, message } from 'antd';
export default function Update(props: MyBetaModalFormProps) { export default function Update(props: MyBetaModalFormProps) {
const [form] = Form.useForm(); const [form] = Form.useForm();
console.log(props.item, 'pppp');
return ( return (
<BetaSchemaForm<ApiTypes.Grid.Grids.Update> <BetaSchemaForm<ApiTypes.Grid.Grids.Update>
{...MyModalFormProps.props} {...MyModalFormProps.props}
title={`编辑`} title={`网格编辑`}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="700px" width="700px"
trigger={<MyButtons.Default title={`编辑`} size="small" type="link" />} trigger={<MyButtons.Default title={`编辑`} size="small" type="link" />}
@ -37,7 +37,7 @@ export default function Update(props: MyBetaModalFormProps) {
}) })
.then(() => { .then(() => {
props.reload?.(); props.reload?.();
message.success('单元编辑成功'); message.success('网格编辑成功');
return true; return true;
}) })
.catch(() => false); .catch(() => false);
@ -93,7 +93,7 @@ export default function Update(props: MyBetaModalFormProps) {
key: 'asset_buildings_id', key: 'asset_buildings_id',
title: '选择楼栋', title: '选择楼栋',
params: { params: {
asset_projects_id: props?.item?.id, asset_projects_id: props?.item?.asset_projects_id,
}, },
colProps: { span: 12 }, colProps: { span: 12 },
formItemProps: { ...rulesHelper.number }, formItemProps: { ...rulesHelper.number },
@ -107,11 +107,11 @@ export default function Update(props: MyBetaModalFormProps) {
}, },
}, },
}), }),
Selects?.AssetUnits({ Selects?.GridUnits({
key: 'asset_units_id', key: 'asset_units_id',
title: '选择单元', title: '选择单元',
params: { params: {
asset_projects_id: props?.item?.id, asset_projects_id: props?.item?.asset_projects_id,
asset_buildings_id: asset_buildings_id, asset_buildings_id: asset_buildings_id,
}, },
colProps: { span: 12 }, colProps: { span: 12 },

View File

@ -8,6 +8,7 @@ import { Apis } from '@/gen/Apis';
import { OrganizationsTypeEnum } from '@/gen/Enums'; import { OrganizationsTypeEnum } from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components'; import { ProTable } from '@ant-design/pro-components';
import { Space } from 'antd'; import { Space } from 'antd';
import OrganizationsChange from '../modals/OrganizationsChange';
import OrganizationsCreate from '../modals/OrganizationsCreate'; import OrganizationsCreate from '../modals/OrganizationsCreate';
import OrganizationsUpdate from '../modals/OrganizationsUpdate'; import OrganizationsUpdate from '../modals/OrganizationsUpdate';
@ -72,11 +73,17 @@ export default function Organizations(props: MyBetaModalFormProps) {
MyColumns.Option({ MyColumns.Option({
render: (_, item: any, index, action) => ( render: (_, item: any, index, action) => (
<Space key={index}> <Space key={index}>
<OrganizationsChange
item={{ ...item, companies_id: props?.item?.id }}
reload={action?.reload}
title="组织"
/>
<OrganizationsUpdate <OrganizationsUpdate
item={{ ...item, companies_id: props?.item?.id }} item={{ ...item, companies_id: props?.item?.id }}
reload={action?.reload} reload={action?.reload}
title="组织" title="组织"
/> />
<MyButtons.Delete <MyButtons.Delete
onConfirm={() => onConfirm={() =>
Apis.Company.Organizations.Delete({ id: item.id }).then( Apis.Company.Organizations.Delete({ id: item.id }).then(

View File

@ -71,7 +71,7 @@ export default function Create(props: MyBetaModalFormProps) {
fieldProps: { fieldProps: {
maxLength: 11, maxLength: 11,
}, },
formItemProps: { ...rulesHelper.number }, formItemProps: { ...rulesHelper.phone },
}, },
{ {
key: 'contact_email', key: 'contact_email',

View File

@ -76,6 +76,9 @@ export default function Update(props: MyBetaModalFormProps) {
params: { companies_id: props?.item?.companies_id }, params: { companies_id: props?.item?.companies_id },
key: 'positions_id', key: 'positions_id',
formItemProps: { ...rulesHelper.text }, formItemProps: { ...rulesHelper.text },
fieldProps: {
showSearch: true,
},
}), }),
// { // {
// key: 'password', // key: 'password',

View File

@ -0,0 +1,49 @@
import { MyBetaModalFormProps, MyButtons, MyModalFormProps } 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 (
<BetaSchemaForm<ApiTypes.Company.Organizations.Update>
{...MyModalFormProps.props}
title={`调整上级${props.title}`}
form={form}
trigger={
<MyButtons.Default title="组织调整" type="primary" size="small" />
}
wrapperCol={{ span: 24 }}
width="500px"
onOpenChange={(open: any) => {
if (open && props.item) {
form.setFieldsValue(props.item);
}
}}
onFinish={async (values: any) =>
Apis.Company.Organizations.Update({
...values,
id: props.item?.id ?? 0,
name: props.item?.name,
type: props.item?.type,
parent_id: values?.parent_id?.[values.parent_id.length - 1],
})
.then(() => {
props.reload?.();
message.success(props.title + '成功');
return true;
})
.catch(() => false)
}
columns={[
Selects?.OrganizationsTree({
title: '选择新的上级组织',
key: 'parent_id',
params: { companies_id: props?.item?.companies_id },
colProps: { span: 24 },
}),
]}
/>
);
}

View File

@ -27,10 +27,11 @@ export default function Create(props: MyBetaModalFormProps) {
form.resetFields(); // 清空表单数据 form.resetFields(); // 清空表单数据
} }
}} }}
onFinish={async (values) => onFinish={async (values: any) =>
Apis.Company.Organizations.Store({ Apis.Company.Organizations.Store({
...values, ...values,
companies_id: props?.item?.id, companies_id: props?.item?.id,
parent_id: values?.parent_id?.[values.parent_id.length - 1],
}) })
.then(() => { .then(() => {
props.reload?.(); props.reload?.();

View File

@ -5,7 +5,6 @@ import {
MyModalFormProps, MyModalFormProps,
rulesHelper, rulesHelper,
} from '@/common'; } from '@/common';
import { Selects } from '@/components/Select';
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { OrganizationsTypeEnum } from '@/gen/Enums'; import { OrganizationsTypeEnum } from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components'; import { BetaSchemaForm } from '@ant-design/pro-components';
@ -30,7 +29,7 @@ export default function Update(props: MyBetaModalFormProps) {
Apis.Company.Organizations.Update({ Apis.Company.Organizations.Update({
...values, ...values,
id: props.item?.id ?? 0, id: props.item?.id ?? 0,
parent_id: values?.parent_id ?? 0, // parent_id: values?.parent_id ?? 0,
}) })
.then(() => { .then(() => {
props.reload?.(); props.reload?.();
@ -53,12 +52,12 @@ export default function Update(props: MyBetaModalFormProps) {
valueEnum: OrganizationsTypeEnum, valueEnum: OrganizationsTypeEnum,
required: true, required: true,
}), }),
Selects?.OrganizationsTree({ // Selects?.OrganizationsTree({
title: '上级组织', // title: '上级组织',
key: 'parent_id', // key: 'parent_id',
params: { companies_id: props?.item?.companies_id }, // params: { companies_id: props?.item?.companies_id },
colProps: { span: 24 }, // colProps: { span: 24 },
}), // }),
]} ]}
/> />
); );

View File

@ -6,16 +6,23 @@ import {
} from '@/common'; } from '@/common';
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { BetaSchemaForm } from '@ant-design/pro-components'; import { BetaSchemaForm } from '@ant-design/pro-components';
import { message } from 'antd'; import { Form, message } from 'antd';
export default function Create(props: MyBetaModalFormProps) { export default function Create(props: MyBetaModalFormProps) {
const [form] = Form.useForm();
return ( return (
<BetaSchemaForm<ApiTypes.Company.CompanyPositions.Store> <BetaSchemaForm<ApiTypes.Company.CompanyPositions.Store>
{...MyModalFormProps.props} {...MyModalFormProps.props}
title={`添加岗位`} title={`添加岗位`}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="500px" width="500px"
form={form}
trigger={<MyButtons.Create title={`添加岗位`} />} trigger={<MyButtons.Create title={`添加岗位`} />}
onOpenChange={(open: any) => {
if (open) {
form.resetFields(); // 清空表单数据
}
}}
onFinish={async (values) => onFinish={async (values) =>
Apis.Company.CompanyPositions.Store({ Apis.Company.CompanyPositions.Store({
...values, ...values,
@ -37,13 +44,13 @@ export default function Create(props: MyBetaModalFormProps) {
{ {
key: 'name', key: 'name',
title: '岗位名称', title: '岗位名称',
colProps: { span: 12 }, colProps: { span: 24 },
formItemProps: { ...rulesHelper.text }, formItemProps: { ...rulesHelper.text },
}, },
{ {
key: 'code', key: 'code',
title: '岗位编号', title: '岗位编号',
colProps: { span: 12 }, colProps: { span: 24 },
// formItemProps: { ...rulesHelper.text }, // formItemProps: { ...rulesHelper.text },
}, },
// { // {

View File

@ -40,13 +40,13 @@ export default function Update(props: MyBetaModalFormProps) {
{ {
key: 'name', key: 'name',
title: '岗位名称', title: '岗位名称',
colProps: { span: 12 }, colProps: { span: 24 },
formItemProps: { ...rulesHelper.text }, formItemProps: { ...rulesHelper.text },
}, },
{ {
key: 'code', key: 'code',
title: '岗位编号', title: '岗位编号',
colProps: { span: 12 }, colProps: { span: 24 },
// formItemProps: { ...rulesHelper.text }, // formItemProps: { ...rulesHelper.text },
}, },
// { // {

View File

@ -1,13 +1,11 @@
import { import {
MyBetaModalFormProps, MyBetaModalFormProps,
MyButtons, MyButtons,
MyFormItems,
MyModalFormProps, MyModalFormProps,
rulesHelper, rulesHelper,
} from '@/common'; } from '@/common';
import { Address } from '@/components/Address'; import { Address } from '@/components/Address';
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { CompaniesMerchantTypeEnum } from '@/gen/Enums';
import { BetaSchemaForm } from '@ant-design/pro-components'; import { BetaSchemaForm } from '@ant-design/pro-components';
import { Form, message } from 'antd'; import { Form, message } from 'antd';
@ -18,13 +16,7 @@ export default function Update(props: MyBetaModalFormProps) {
{...MyModalFormProps.props} {...MyModalFormProps.props}
title={`编辑${props.title}`} title={`编辑${props.title}`}
form={form} form={form}
trigger={ trigger={<MyButtons.Default title="编辑" type="primary" size="small" />}
<MyButtons.Default
title="编辑"
type="primary"
size="small"
/>
}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="800px" width="800px"
onOpenChange={(open: any) => { onOpenChange={(open: any) => {

View File

@ -149,7 +149,7 @@ export default function Create(props: MyBetaModalFormProps) {
fieldProps: { fieldProps: {
picker: 'month', picker: 'month',
format: 'YYYY-MM', format: 'YYYY-MM',
valueFormat: 'YYYY-MM', valueFormat: 'YYYY-MM-01',
style: { style: {
width: '100%', width: '100%',
}, },
@ -178,7 +178,40 @@ export default function Create(props: MyBetaModalFormProps) {
width: '100%', width: '100%',
}, },
}, },
formItemProps: { ...rulesHelper.text },
}, },
{
valueType: 'dependency',
name: ['asset_projects_id'],
columns: ({ asset_projects_id }) => {
return [
{
valueType: 'group',
columns: [
Selects?.ProjectAccounts({
key: 'company_receipt_accounts_id',
title: '选择收款账户',
params: {
projects_id: asset_projects_id,
},
colProps: { span: 24 },
formItemProps: { ...rulesHelper.number },
fieldProps: {
showSearch: true,
onChange: () => {
form.setFieldsValue({
asset_units_id: undefined,
asset_floors_id: undefined,
});
},
},
}),
],
},
];
},
},
{ {
key: 'late_start_date', key: 'late_start_date',
title: '滞纳金起算日期', title: '滞纳金起算日期',