frat:批量导入;公告;客户流程调整;页面调整;
All checks were successful
Build and Push Docker Image / build (push) Successful in 3m7s

This commit is contained in:
uiuJun 2025-08-29 13:56:53 +08:00
parent 1a1a9be825
commit 0e49b5cf60
42 changed files with 1066 additions and 692 deletions

View File

@ -14,14 +14,9 @@ export default defineConfig({
}, },
proxy: { proxy: {
'/api/': { '/api/': {
<<<<<<< HEAD
// target: 'http://yt:8003', // target: 'http://yt:8003',
target: 'http://10.39.13.80:8001', target: 'http://10.39.13.80:8001',
// target: 'https://weapp-api.linyikj.com.cn/', // target: 'https://weapp-api.linyikj.com.cn/',
=======
target: 'http://yt:8001',
// target: 'http://10.39.13.80:8001',
>>>>>>> 1275c157f58b27d4d2b966e91a73bab4f3360be2
// target: 'http://we6f9c65.natappfree.cc', // target: 'http://we6f9c65.natappfree.cc',
// target: 'https://loanos-test.nchl.net/', // target: 'https://loanos-test.nchl.net/',
changeOrigin: true, changeOrigin: true,

View File

@ -83,27 +83,44 @@ export function MyUploadImages({
Apis.Common.Auth.PreUpload({ Apis.Common.Auth.PreUpload({
filename: file.name, filename: file.name,
alc: 'public-read', alc: 'public-read',
}).then(async (res) => { })
axios .then(async (res) => {
.put(res.data.url, file, { try {
headers: res.data.headers, axios
onUploadProgress: ({ total, loaded }) => { .put(res.data.url, file, {
if (total) headers: res.data.headers,
onProgress( onUploadProgress: ({ total, loaded }) => {
{ percent: Math.round((loaded / total) * 100).toFixed(2) }, if (total)
file, onProgress(
); { percent: Math.round((loaded / total) * 100).toFixed(2) },
}, file,
}) );
.then(({ data: response }) => { },
console.log('response', response); })
if (response.errorMessage) { .then(({ data: response }) => {
onError(response, file); console.log('response', response);
} else { if (response && response.errorMessage) {
onSuccess(res.data.url.split('?')[0], file); onError(response, file);
} } else {
}); // 确保URL正确处理
}); const fileUrl = res.data.url.split('?')[0];
console.log('文件上传成功URL:', fileUrl);
onSuccess(fileUrl, file);
}
})
.catch((error) => {
console.error('上传文件时出错:', error);
onError(error, file);
});
} catch (error) {
console.error('处理上传请求时出错:', error);
onError(error, file);
}
})
.catch((error) => {
console.error('获取预上传URL时出错:', error);
onError(error, file);
});
return { return {
abort() { abort() {

View File

@ -7,6 +7,7 @@ type MyImportModalType = {
title?: string; title?: string;
type?: any; type?: any;
params?: Record<string, any>; params?: Record<string, any>;
size?: 'small' | 'middle' | 'large';
templateApi?: () => Promise<MyResponseType>; templateApi?: () => Promise<MyResponseType>;
importApi: (data: any) => Promise<MyResponseType>; importApi: (data: any) => Promise<MyResponseType>;
reload?: () => void; reload?: () => void;
@ -17,17 +18,22 @@ export function MyImportModal(props: MyImportModalType) {
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [formData, setFormData] = useState<FormData | undefined>(undefined); const [formData, setFormData] = useState<FormData | undefined>(undefined);
const { title = '批量导入', params = {}, type = 'primary' } = props; const {
title = '批量导入',
params = {},
type = 'primary',
size = 'middle',
} = props;
return ( return (
<> <>
{type === 'danger' ? ( {type === 'danger' ? (
<Button onClick={() => setOpen(true)} type="primary" danger> <Button onClick={() => setOpen(true)} type="primary" danger size={size}>
<ImportOutlined /> <ImportOutlined />
{title} {title}
</Button> </Button>
) : ( ) : (
<Button onClick={() => setOpen(true)} type="primary"> <Button onClick={() => setOpen(true)} type="primary" size={size}>
<ImportOutlined /> <ImportOutlined />
{title} {title}
</Button> </Button>

View File

@ -364,7 +364,8 @@ export function MyPageContainer({
onChange={handleTabChange} onChange={handleTabChange}
onEdit={handleTabEdit} onEdit={handleTabEdit}
hideAdd hideAdd
size="small" size="middle"
// 标签size
renderTabBar={renderTabBar} renderTabBar={renderTabBar}
items={tabs.map((tab) => ({ items={tabs.map((tab) => ({
key: tab.key, key: tab.key,
@ -372,6 +373,7 @@ export function MyPageContainer({
closable: tab.closable, closable: tab.closable,
}))} }))}
style={{ style={{
marginTop: 6,
marginBottom: 0, marginBottom: 0,
}} }}
className="tabs-header-only" className="tabs-header-only"

View File

@ -1,191 +0,0 @@
import { PlusOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons';
import { history } from '@umijs/max';
import { Button, Card, Divider, Space } from 'antd';
import { MyPageContainer } from './MyPageContainer';
import { usePageTabs } from './usePageTabs';
/**
* 使
* 使MyPageContainer的多标签页功能
*/
export function TabsExample() {
const tabsApi = usePageTabs({
tabKey: 'tabs-example',
tabLabel: '标签页示例',
});
const handleAddTab = (key: string, label: string, path: string) => {
tabsApi.addTab({
key,
label,
path,
closable: true,
});
history.push(path);
};
const handleAddTabNext = (key: string, label: string, path: string) => {
tabsApi.addTabNext({
key,
label,
path,
closable: true,
});
history.push(path);
};
return (
<MyPageContainer
enableTabs
tabKey="tabs-example"
tabLabel="标签页示例"
title="多标签页功能演示"
>
<Card title="标签页操作示例" style={{ marginBottom: 16 }}>
<Space wrap>
<Button
type="primary"
icon={<PlusOutlined />}
onClick={() => handleAddTab('user-list', '用户列表', '/users')}
>
</Button>
<Button
icon={<UserOutlined />}
onClick={() =>
handleAddTab('user-profile', '用户详情', '/users/profile')
}
>
</Button>
<Button
icon={<SettingOutlined />}
onClick={() => handleAddTab('settings', '系统设置', '/settings')}
>
</Button>
</Space>
<Divider orientation="left"></Divider>
<Space wrap>
<Button
type="dashed"
icon={<PlusOutlined />}
onClick={() =>
handleAddTabNext('company-1', '机构详情-1', '/company/1')
}
>
-1
</Button>
<Button
type="dashed"
icon={<UserOutlined />}
onClick={() =>
handleAddTabNext('employee-1', '员工详情-1', '/employee/1')
}
>
-1
</Button>
<Button
type="dashed"
icon={<SettingOutlined />}
onClick={() =>
handleAddTabNext('project-1', '项目详情-1', '/project/1')
}
>
-1
</Button>
</Space>
<Divider />
<Space wrap>
<Button onClick={() => tabsApi.closeOtherTabs()}></Button>
<Button onClick={() => tabsApi.closeLeftTabs()}></Button>
<Button onClick={() => tabsApi.closeRightTabs()}></Button>
<Button onClick={() => tabsApi.refreshTab()}></Button>
</Space>
</Card>
<Card title="功能说明">
<div style={{ lineHeight: '1.8' }}>
<h4>🎯 </h4>
<ul>
<li>
<strong></strong>
</li>
<li>
<strong></strong>
</li>
<li>
<strong></strong>
</li>
<li>
<strong></strong>
</li>
<li>
<strong></strong>
</li>
</ul>
<h4>🖱 </h4>
<ul>
<li>
<strong></strong>
</li>
<li>
<strong></strong>
</li>
<li>
<strong></strong>
</li>
<li>
<strong></strong>
</li>
<li>
<strong></strong>
</li>
</ul>
<h4>💻 使</h4>
<pre
style={{
background: '#f5f5f5',
padding: '12px',
borderRadius: '4px',
}}
>
{`// 1. 在页面组件中使用
import { MyPageContainer, usePageTabs } from '@/common';
function YourPage() {
usePageTabs({
tabKey: 'your-page',
tabLabel: '页面标题'
});
return (
<MyPageContainer
enableTabs
tabKey="your-page"
tabLabel="页面标题"
>
{/* 页面内容 */}
</MyPageContainer>
);
}`}
</pre>
</div>
</Card>
</MyPageContainer>
);
}

View File

@ -46,15 +46,7 @@ export const MyFormItems = {
...props, ...props,
}; };
}, },
// RichText(props: PropsType): ReturnType {
// return {
// renderFormItem: () => <MyRichText />,
// formItemProps: {
// ...(props?.required ? rulesHelper.richtext : {}),
// },
// ...props,
// };
// },
UploadImages({ UploadImages({
max = 1, max = 1,
help, help,

View File

@ -10,7 +10,7 @@ export * from './components/layout/MyCommonModal';
export * from './components/layout/MyImportModal'; export * from './components/layout/MyImportModal';
export * from './components/layout/MyPageContainer'; export * from './components/layout/MyPageContainer';
export * from './components/layout/MyRootContainer'; export * from './components/layout/MyRootContainer';
export * from './components/layout/TabsExample';
export * from './components/layout/usePageTabs'; export * from './components/layout/usePageTabs';
export * from './components/props/MyDrawerProps'; export * from './components/props/MyDrawerProps';

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

@ -121,6 +121,7 @@ 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; // 模糊搜索:全称
}; };
type Store = { type Store = {
"asset_projects_id": number; // 所属项目id,[ref:asset_projects] "asset_projects_id": number; // 所属项目id,[ref:asset_projects]
@ -179,6 +180,15 @@ declare namespace ApiTypes {
"asset_projects_id"?: number; // 所属项目id,[ref:asset_projects] "asset_projects_id"?: number; // 所属项目id,[ref:asset_projects]
"upload_file"?: mimes:xlsx,xls; // 上传的时候必填文件 "upload_file"?: mimes:xlsx,xls; // 上传的时候必填文件
}; };
type Export = {
"asset_projects_id"?: number; // 所属项目id,[ref:asset_projects]
"asset_buildings_id"?: number; // 所属楼栋id,[ref:asset_buildings]
"asset_units_id"?: number; // 所属单元id,[ref:asset_units]
"name"?: string; // 模糊搜索:名称
"full_name"?: string; // 模糊搜索:全称
"current"?: number; // 页码
"download_type": string; // 下载类型page 当前页(含查询条件)query 所有页(含查询条件)all所有记录
};
} }
namespace AssetProjects { namespace AssetProjects {
type List = { type List = {
@ -409,6 +419,9 @@ declare namespace ApiTypes {
type Delete = { type Delete = {
"id": number; // id "id": number; // id
}; };
type Import = {
"upload_file"?: mimes:xlsx,xls; // 上传的时候必填文件
};
} }
} }
namespace Collcetion { namespace Collcetion {
@ -589,6 +602,7 @@ declare namespace ApiTypes {
type List = { type List = {
"companies_id"?: number; // 机构ID "companies_id"?: number; // 机构ID
"organizations_id"?: number; // 组织机构ID "organizations_id"?: number; // 组织机构ID
"organization_name"?: string; // 组织机构名称
"name"?: string; // 模糊搜索:名称 "name"?: string; // 模糊搜索:名称
"phone"?: string; // 模糊搜索:手机号 "phone"?: string; // 模糊搜索:手机号
}; };
@ -729,6 +743,12 @@ declare namespace ApiTypes {
"name"?: string; // 模糊搜索:名称 "name"?: string; // 模糊搜索:名称
"companies_id"?: number; // 机构ID[ref:companies] "companies_id"?: number; // 机构ID[ref:companies]
"parent_id"?: number; // 父级ID "parent_id"?: number; // 父级ID
"company_name"?: string; // 机构名称
};
type TreeList = {
"name"?: string; // 模糊搜索:名称
"companies_id"?: number; // 机构ID[ref:companies]
"parent_id"?: number; // 父级ID
}; };
type Store = { type Store = {
"companies_id": number; // 所属机构id,[ref:companies] "companies_id": number; // 所属机构id,[ref:companies]
@ -852,6 +872,50 @@ declare namespace ApiTypes {
}; };
} }
} }
namespace Msg {
namespace MsgPropertyAnnouncements {
type List = {
"title"?: string; // 模糊搜索:标题
"asset_projects_id"?: number; // 项目id,[ref:asset_projects]
"project_name"?: string; // 模糊搜索:项目名称
"is_publish"?: number; // 是否发布
};
type Store = {
"asset_projects_id": number; // 项目id,[ref:asset_projects]
"title": string; // 标题
"content": string; // 内容
"is_publish"?: number; // 是否发布
"publish_at"?: Date; // 发布时间
"sort"?: number; // 排序
};
type Update = {
"id": number; // id
"asset_projects_id": number; // 项目id,[ref:asset_projects]
"companies_id": number; // 公司id,[ref:companies]
"title": string; // 标题
"content": string; // 内容
"is_publish"?: number; // 是否发布
"publish_at"?: mixed; // 发布时间
"sort"?: number; // 排序
"admins_id"?: number; // 创建人id,[ref:admins]
"company_employees_id"?: number; // 创建员工id,[ref:company_employees]
"last_update_admins_id"?: number; // 最后修改人id,[ref:admins]
"last_update_company_employees"?: number; // 最后修改员工id,[ref:company_employees]
};
type Show = {
"id": number; // id
};
type SoftDelete = {
"id": number; // id
};
type Restore = {
"id": number; // id
};
type Delete = {
"id": number; // id
};
}
}
namespace Permission { namespace Permission {
namespace SysPermissions { namespace SysPermissions {
type List = { type List = {

View File

@ -102,6 +102,9 @@ export const Apis = {
DownloadTemplate(): Promise<MyResponseType> { DownloadTemplate(): Promise<MyResponseType> {
return request('admin/asset/asset_houses/download_template', {responseType: 'blob',}); return request('admin/asset/asset_houses/download_template', {responseType: 'blob',});
}, },
Export(data: ApiTypes.Asset.AssetHouses.Export): Promise<MyResponseType> {
return request('admin/asset/asset_houses/export', { responseType: 'blob',data });
},
}, },
AssetProjects: { AssetProjects: {
List(data?: ApiTypes.Asset.AssetProjects.List): Promise<MyResponseType> { List(data?: ApiTypes.Asset.AssetProjects.List): Promise<MyResponseType> {
@ -218,6 +221,12 @@ export const Apis = {
Delete(data: ApiTypes.Bill.HouseBills.Delete): Promise<MyResponseType> { Delete(data: ApiTypes.Bill.HouseBills.Delete): Promise<MyResponseType> {
return request('admin/bill/house_bills/delete', { data }); return request('admin/bill/house_bills/delete', { data });
}, },
Import(data?: ApiTypes.Bill.HouseBills.Import): Promise<MyResponseType> {
return request('admin/bill/house_bills/import', { data });
},
DownloadTemplate(): Promise<MyResponseType> {
return request('admin/bill/house_bills/download_template', {responseType: 'blob',});
},
}, },
}, },
Collcetion: { Collcetion: {
@ -429,6 +438,9 @@ export const Apis = {
List(data?: ApiTypes.Company.Organizations.List): Promise<MyResponseType> { List(data?: ApiTypes.Company.Organizations.List): Promise<MyResponseType> {
return request('admin/company/organizations/list', { data }); return request('admin/company/organizations/list', { data });
}, },
TreeList(data?: ApiTypes.Company.Organizations.TreeList): Promise<MyResponseType> {
return request('admin/company/organizations/tree_list', { data });
},
Store(data: ApiTypes.Company.Organizations.Store): Promise<MyResponseType> { Store(data: ApiTypes.Company.Organizations.Store): Promise<MyResponseType> {
return request('admin/company/organizations/store', { data }); return request('admin/company/organizations/store', { data });
}, },
@ -513,6 +525,31 @@ export const Apis = {
}, },
}, },
}, },
Msg: {
MsgPropertyAnnouncements: {
List(data?: ApiTypes.Msg.MsgPropertyAnnouncements.List): Promise<MyResponseType> {
return request('admin/msg/msg_property_announcements/list', { data });
},
Store(data: ApiTypes.Msg.MsgPropertyAnnouncements.Store): Promise<MyResponseType> {
return request('admin/msg/msg_property_announcements/store', { data });
},
Update(data: ApiTypes.Msg.MsgPropertyAnnouncements.Update): Promise<MyResponseType> {
return request('admin/msg/msg_property_announcements/update', { data });
},
Show(data: ApiTypes.Msg.MsgPropertyAnnouncements.Show): Promise<MyResponseType> {
return request('admin/msg/msg_property_announcements/show', { data });
},
SoftDelete(data: ApiTypes.Msg.MsgPropertyAnnouncements.SoftDelete): Promise<MyResponseType> {
return request('admin/msg/msg_property_announcements/soft_delete', { data });
},
Restore(data: ApiTypes.Msg.MsgPropertyAnnouncements.Restore): Promise<MyResponseType> {
return request('admin/msg/msg_property_announcements/restore', { data });
},
Delete(data: ApiTypes.Msg.MsgPropertyAnnouncements.Delete): Promise<MyResponseType> {
return request('admin/msg/msg_property_announcements/delete', { data });
},
},
},
Permission: { Permission: {
SysPermissions: { SysPermissions: {
List(data: ApiTypes.Permission.SysPermissions.List): Promise<MyResponseType> { List(data: ApiTypes.Permission.SysPermissions.List): Promise<MyResponseType> {

View File

@ -126,7 +126,7 @@ export const BannersTypeEnum= {
// 缓存类型 // 缓存类型
export const CacheTypeEnum= { export const CacheTypeEnum= {
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#2f067d","value":"MobilePhoneVerificationCode"}, 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#f002cf","value":"MobilePhoneVerificationCode"},
}; };
// CompaniesMerchantTypeEnum // CompaniesMerchantTypeEnum

View File

@ -0,0 +1,146 @@
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 AnnouncementCreate from './modals/AnnouncementCreate';
import AnnouncementShow from './modals/AnnouncementShow';
import AnnouncementUpdate from './modals/AnnouncementUpdate';
export default function Index({ title = '内容管理' }) {
const navigate = useNavigate();
// 注册当前页面为标签页
usePageTabs({
tabKey: 'banners',
tabLabel: title,
});
return (
<MyPageContainer
title={title}
enableTabs={true}
tabKey="banners"
tabLabel={title}
>
<ProTable
{...MyProTableProps.props}
request={async (params, sort) =>
MyProTableProps.request(
params,
sort,
Apis.Msg.MsgPropertyAnnouncements.List,
)
}
toolBarRender={(action) => [
<AnnouncementCreate
key="Create"
reload={action?.reload}
title={title}
/>,
]}
columns={[
MyColumns.ID(),
{
title: '标题',
dataIndex: 'title',
width: 120, // 关键:固定列宽(若父容器过窄,可设 minWidth: 200 优先保证列宽)
render: (text) => (
<div
style={{
width: '100%', // 继承列宽
// height: '60px', // 设置固定高度约显示3行文本
overflow: 'hidden', // 超出隐藏
textOverflow: 'ellipsis', // 省略号
display: '-webkit-box',
WebkitBoxOrient: 'vertical',
WebkitLineClamp: 1, // 显示3行
}}
>
{text}
</div>
),
},
{
title: '内容',
dataIndex: 'content',
valueType: 'textarea', // 仅影响表单编辑时的输入类型,不影响表格展示
search: false,
width: 200, // 关键:固定列宽(若父容器过窄,可设 minWidth: 200 优先保证列宽)
render: (text) => (
<div
style={{
width: '100%', // 继承列宽
// height: '60px', // 设置固定高度约显示3行文本
overflow: 'hidden', // 超出隐藏
textOverflow: 'ellipsis', // 省略号
display: '-webkit-box',
WebkitBoxOrient: 'vertical',
WebkitLineClamp: 2, // 显示3行
}}
>
{text}
</div>
),
},
{
title: '发布日期',
dataIndex: 'publish_at',
valueType: 'date',
search: false,
},
{
title: '项目',
dataIndex: ['asset_project', 'name'],
search: false,
render: (_, record) => {
return record?.asset_project?.name;
},
},
MyColumns.SoftDelete({
title: '启/禁用',
onRestore: Apis.Msg.MsgPropertyAnnouncements.Restore,
onSoftDelete: Apis.Msg.MsgPropertyAnnouncements.SoftDelete,
search: false,
}),
{
//创建日期
title: '创建日期',
dataIndex: 'created_at',
valueType: 'date',
search: false,
// render: (_, record) => {
// return record?.created_at?.substring(0, 10);
// },
},
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>
<AnnouncementShow item={item} />
<AnnouncementUpdate
item={item}
reload={action?.reload}
title={title}
/>
<MyButtons.Delete
onConfirm={() =>
Apis.Banner.Banners.Delete({ id: item.id }).then(() =>
action?.reload(),
)
}
/>
</Space>
),
}),
]}
/>
</MyPageContainer>
);
}

View File

@ -0,0 +1,92 @@
import {
MyBetaModalFormProps,
MyButtons,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { Selects } from '@/components/Select';
import { Apis } from '@/gen/Apis';
import { BetaSchemaForm } from '@ant-design/pro-components';
import { Form, message } from 'antd';
export default function Create(props: MyBetaModalFormProps) {
const [form] = Form.useForm();
return (
<BetaSchemaForm<ApiTypes.Msg.MsgPropertyAnnouncements.Store>
{...MyModalFormProps.props}
title={`添加公告`}
wrapperCol={{ span: 24 }}
width="600px"
trigger={<MyButtons.Create title={`添加公告`} />}
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: '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,
},
]}
/>
);
}

View File

@ -0,0 +1,53 @@
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 (
<MyModal
title={props.title || '查看'}
// width="40vw"
width={600}
// style={{ maxWidth: '650px' }}
node={
<ProCard>
<ProDescriptions
// bordered
// column={{ xs: 1, sm: 2, md: 3 }}
column={1}
size="small"
>
<ProDescriptions.Item label="公告标题">
{props?.item?.title || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="公告内容">
<div
style={{
whiteSpace: 'pre-wrap',
maxHeight: '300px',
overflow: 'auto',
}}
>
{props?.item?.content || '-'}
</div>
</ProDescriptions.Item>
<ProDescriptions.Item label="发布日期">
{props?.item?.publish_at || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label=" 关联项目">
{props?.item?.asset_project?.name || '-'}
</ProDescriptions.Item>
<ProDescriptions.Item label="创建时间">
{props?.item?.created_at || '-'}
</ProDescriptions.Item>
</ProDescriptions>
</ProCard>
}
/>
);
}

View File

@ -0,0 +1,95 @@
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 (
<BetaSchemaForm<ApiTypes.Msg.MsgPropertyAnnouncements.Update>
{...MyModalFormProps.props}
title={`编辑公告内容`}
trigger={<MyButtons.Edit />}
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,
},
]}
/>
);
}

View File

@ -79,9 +79,9 @@ export default function Index({ ...rest }) {
search: false, search: false,
}), }),
MyColumns.EnumTag({ MyColumns.EnumTag({
// title: title:
// rest?.item?.status === 'Rented' ? '与租客关系' : '与业主关系', rest?.item?.status === 'Rented' ? '与主租人关系' : '与产权人关系',
title: '关系说明', // title: '关系说明',
dataIndex: 'relation_with_owner', dataIndex: 'relation_with_owner',
valueEnum: HouseOccupantsRelationWithOwnerEnum, valueEnum: HouseOccupantsRelationWithOwnerEnum,
search: false, search: false,

View File

@ -59,7 +59,6 @@ export default function AddOccupant(props: MyBetaModalFormProps) {
dataIndex: 'customer_info', dataIndex: 'customer_info',
colProps: { span: 24 }, colProps: { span: 24 },
initialValue: [''], initialValue: [''],
fieldProps: { fieldProps: {
copyIconProps: false, copyIconProps: false,
creatorButtonProps: { creatorButtonProps: {
@ -86,27 +85,47 @@ export default function AddOccupant(props: MyBetaModalFormProps) {
{ {
valueType: 'group', valueType: 'group',
columns: [ columns: [
MyFormItems.EnumRadio({ {
key: 'residential_relation', valueType: 'group',
title: '居住关系', columns: [
colProps: { span: 12 }, MyFormItems.EnumRadio({
valueEnum: HouseOccupantsResidentialRelationEnum, key: 'residential_relation',
// valueEnum: () => { title: '居住关系',
// let obj: any = JSON.parse( colProps: { span: 8 },
// JSON.stringify(HouseOccupantsResidentialRelationEnum), valueEnum: HouseOccupantsResidentialRelationEnum,
// ); // valueEnum: () => {
// delete obj.Tenant; // let obj: any = JSON.parse(
// return obj; // JSON.stringify(HouseOccupantsResidentialRelationEnum),
// }, // );
required: true, // delete obj.Tenant;
}), // return obj;
MyFormItems.EnumRadio({ // },
key: 'relation_with_owner', required: true,
title: '关系标记', }),
valueEnum: HouseOccupantsRelationWithOwnerEnum, {
colProps: { span: 18 }, name: ['residential_relation'],
required: true, valueType: 'dependency',
}), columns: ({ residential_relation }: any) => {
return residential_relation !==
HouseOccupantsResidentialRelationEnum.PrimaryTenant
.value
? [
MyFormItems.EnumRadio({
key: 'relation_with_owner',
title:
residential_relation === 'Resident'
? '与产权人关系'
: '与主租人关系',
valueEnum: HouseOccupantsRelationWithOwnerEnum,
colProps: { span: 16 },
required: true,
}),
]
: [];
},
},
],
},
{ {
title: '姓名', title: '姓名',
dataIndex: 'name', dataIndex: 'name',
@ -122,69 +141,130 @@ export default function AddOccupant(props: MyBetaModalFormProps) {
}, },
formItemProps: { ...rulesHelper.phone }, formItemProps: { ...rulesHelper.phone },
}, },
MyFormItems.EnumSelect({
key: 'card_type',
title: '证件类型',
colProps: { span: 6 },
valueEnum: HouseOccupantsCardTypeEnum,
required: true,
}),
{
title: '证件号码',
dataIndex: 'id_card',
colProps: { span: 6 },
fieldProps: {
maxLength: 18,
},
formItemProps: { ...rulesHelper.text },
},
{ {
valueType: 'group', name: ['residential_relation'],
columns: [ valueType: 'dependency',
MyFormItems.UploadImages({ columns: ({ residential_relation }: any) => {
key: 'card_front_image', return residential_relation ===
title: '证件正面', HouseOccupantsResidentialRelationEnum.PrimaryTenant.value
uploadType: 'file', ? [
max: 1, MyFormItems.EnumSelect({
colProps: { span: 6 }, key: 'card_type',
formItemProps: { ...rulesHelper.text }, title: '证件类型',
}), colProps: { span: 6 },
MyFormItems.UploadImages({ valueEnum: HouseOccupantsCardTypeEnum,
key: 'card_back_image', required: true,
title: '证件反面', }),
uploadType: 'file', {
max: 1, title: '证件号码',
colProps: { span: 6 }, dataIndex: 'id_card',
formItemProps: { ...rulesHelper.text }, colProps: { span: 6 },
}), required: true,
{ fieldProps: {
title: '是否入住', maxLength: 18,
dataIndex: 'is_live_in', },
colProps: { span: 6 }, },
valueType: 'switch', MyFormItems.UploadImages({
}, key: 'card_front_image',
{ title: '证件正面',
name: ['is_live_in'], // uploadType: 'file',
valueType: 'dependency', max: 1,
columns: ({ is_live_in }: any) => { colProps: { span: 6 },
return is_live_in formItemProps: { ...rulesHelper.text },
? [ }),
{ MyFormItems.UploadImages({
title: '入住日期', key: 'card_back_image',
dataIndex: 'move_in_date', title: '证件反面',
valueType: 'date', // uploadType: 'file',
colProps: { span: 6 }, max: 1,
fieldProps: { colProps: { span: 6 },
style: { width: '100%' }, formItemProps: { ...rulesHelper.text },
}, }),
formItemProps: { ...rulesHelper.text }, {
}, title: '是否入住',
] dataIndex: 'is_live_in',
: []; colProps: { span: 6 },
}, 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: 6 },
fieldProps: {
style: { width: '100%' },
},
formItemProps: { ...rulesHelper.text },
},
]
: [];
},
},
]
: [
MyFormItems.EnumSelect({
key: 'card_type',
title: '证件类型',
colProps: { span: 6 },
valueEnum: HouseOccupantsCardTypeEnum,
}),
{
title: '证件号码',
dataIndex: 'id_card',
colProps: { span: 6 },
fieldProps: {
maxLength: 18,
},
},
MyFormItems.UploadImages({
key: 'card_front_image',
title: '证件正面',
// uploadType: 'file',
max: 1,
colProps: { span: 6 },
}),
MyFormItems.UploadImages({
key: 'card_back_image',
title: '证件反面',
// uploadType: 'file',
max: 1,
colProps: { span: 6 },
}),
{
title: '是否入住',
dataIndex: 'is_live_in',
colProps: { span: 6 },
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: 6 },
fieldProps: {
style: { width: '100%' },
},
formItemProps: { ...rulesHelper.text },
},
]
: [];
},
},
];
},
}, },
], ],
}, },

View File

@ -1,188 +0,0 @@
import {
MyBetaModalFormProps,
MyButtons,
MyFormItems,
MyModalFormProps,
rulesHelper,
} from '@/common';
import { Apis } from '@/gen/Apis';
import {
HouseOccupantsCardTypeEnum,
HouseOccupantsHouseRelationEnum,
HouseOccupantsRelationWithOwnerEnum,
} from '@/gen/Enums';
import { BetaSchemaForm, ProCard } from '@ant-design/pro-components';
import { Form, message } from 'antd';
export default function Create(props: MyBetaModalFormProps) {
const [form] = Form.useForm();
return (
<BetaSchemaForm<ApiTypes.Archive.HouseRegisters.Store>
{...MyModalFormProps.props}
title={`${props.title}`}
wrapperCol={{ span: 24 }}
width="900px"
trigger={
<MyButtons.Default title={props.title} size="middle" type="primary" />
}
key={new Date().getTime()}
form={form}
onOpenChange={(open: any) => {
if (open) {
form.resetFields(); // 清空表单数据
}
}}
onFinish={async (values) =>
Apis.Archive.HouseRegisters.Store({
...values,
asset_houses_id: props?.item?.id,
house_status: 'Rented',
type: 'AddOccupant',
})
.then(() => {
props.reload?.();
message.success(props.title + '成功');
return true;
})
.catch(() => false)
}
columns={[
{
valueType: 'formList',
dataIndex: 'customer_info',
colProps: { span: 24 },
fieldProps: {
copyIconProps: false,
creatorButtonProps: {
creatorButtonText: '添加租客',
},
itemRender: (
{ listDom, action }: any,
{ index }: { index: number },
) => {
return (
<ProCard
bordered
style={{ marginBlockEnd: 0 }}
title={`租客${index + 1}`}
extra={action}
bodyStyle={{ paddingBlockEnd: 0 }}
>
{listDom}
</ProCard>
);
},
},
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;
delete obj.Resident;
return obj;
},
required: true,
}),
MyFormItems.EnumRadio({
key: 'relation_with_owner',
title: '关系标记',
colProps: { span: 18 },
valueEnum: HouseOccupantsRelationWithOwnerEnum,
required: true,
}),
{
title: '姓名',
dataIndex: 'name',
colProps: { span: 6 },
formItemProps: { ...rulesHelper.text },
},
{
title: '手机号',
dataIndex: 'phone',
colProps: { span: 6 },
fieldProps: {
maxLength: 11,
},
formItemProps: { ...rulesHelper.text },
},
MyFormItems.EnumSelect({
key: 'card_type',
title: '证件类型',
colProps: { span: 6 },
valueEnum: HouseOccupantsCardTypeEnum,
required: true,
}),
{
title: '证件号码',
dataIndex: 'id_card',
colProps: { span: 6 },
fieldProps: {
maxLength: 18,
},
formItemProps: { ...rulesHelper.text },
},
{
valueType: 'group',
columns: [
MyFormItems.UploadImages({
key: 'card_front_image',
title: '证件正面',
uploadType: 'file',
max: 1,
colProps: { span: 6 },
formItemProps: { ...rulesHelper.text },
}),
MyFormItems.UploadImages({
key: 'card_back_image',
title: '证件反面',
uploadType: 'file',
max: 1,
colProps: { span: 6 },
formItemProps: { ...rulesHelper.text },
}),
{
title: '是否入住',
dataIndex: 'is_live_in',
colProps: { span: 6 },
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: 6 },
fieldProps: {
style: { width: '100%' },
},
formItemProps: { ...rulesHelper.text },
},
]
: [];
},
},
],
},
],
},
],
},
]}
/>
);
}

View File

@ -2,13 +2,14 @@ import { MyPageContainer, usePageTabs } from '@/common';
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { ProCard } from '@ant-design/pro-components'; import { ProCard } from '@ant-design/pro-components';
import { useParams } from '@umijs/max'; import { useParams } from '@umijs/max';
import { Tabs } from 'antd'; import { Space, Tabs } from 'antd';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import AssetAccounts from './components/AssetAccounts'; import AssetAccounts from './components/AssetAccounts';
import MyAssetBuildings from './components/AssetBuildings'; import MyAssetBuildings from './components/AssetBuildings';
import AssetGrid from './components/AssetGrid'; import AssetGrid from './components/AssetGrid';
import AssetInfo from './components/AssetInfo'; import AssetInfo from './components/AssetInfo';
import Basic from './components/Basic'; import BindCompany from './components/modals/BindCompany';
import AssetUpdate from './modals/AssetUpdate';
export default function Show({ title }: { title?: string } = {}) { export default function Show({ title }: { title?: string } = {}) {
const { id } = useParams<{ id: string }>(); const { id } = useParams<{ id: string }>();
@ -39,12 +40,12 @@ export default function Show({ title }: { title?: string } = {}) {
}, [id]); }, [id]);
let items = [ let items = [
{ // {
label: '基本信息', // label: '基本信息',
key: 'info', // key: 'info',
closable: false, // closable: false,
children: <AssetInfo item={data} reload={() => loadShow()} />, // children: <AssetInfo item={data} reload={() => loadShow()} />,
}, // },
{ {
label: '楼栋管理', label: '楼栋管理',
key: 'asset_buildings', key: 'asset_buildings',
@ -52,7 +53,7 @@ export default function Show({ title }: { title?: string } = {}) {
children: <MyAssetBuildings item={data} />, children: <MyAssetBuildings item={data} />,
}, },
{ {
label: '网格管理', label: '楼栋划分',
key: 'grid', key: 'grid',
closable: false, closable: false,
children: <AssetGrid item={data} />, children: <AssetGrid item={data} />,
@ -72,7 +73,22 @@ export default function Show({ title }: { title?: string } = {}) {
]; ];
return ( return (
<MyPageContainer title={data?.name || title || '项目详情'}> <MyPageContainer title={data?.name || title || '项目详情'}>
<Basic item={data} reload={() => loadShow()} /> <ProCard
title={`${data?.name} (${data?.alias_name})`}
extra={
<Space>
<AssetInfo
item={{ ...data, type: 'primary' }}
title="查看"
reload={loadShow}
/>
<AssetUpdate item={data} title="项目" reload={loadShow} />
<BindCompany item={data} title="机构" reload={loadShow} />
</Space>
}
>
<div>* </div>
</ProCard>
<ProCard> <ProCard>
<Tabs type="card" items={data?.id ? items : []} /> <Tabs type="card" items={data?.id ? items : []} />
</ProCard> </ProCard>

View File

@ -2,17 +2,20 @@ import {
MyBetaModalFormProps, MyBetaModalFormProps,
MyButtons, MyButtons,
MyColumns, MyColumns,
MyImportModal,
MyProTableProps, MyProTableProps,
} from '@/common'; } from '@/common';
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { AssetHousesUsageEnum } from '@/gen/Enums'; import {
AssetHousesOwnershipTypeEnum,
AssetHousesUsageEnum,
} from '@/gen/Enums';
import { ProCard, ProTable } from '@ant-design/pro-components'; import { ProCard, ProTable } from '@ant-design/pro-components';
import { Alert, message, Space, Typography } from 'antd'; import { Alert, message, Space, Typography } from 'antd';
import { useCallback, useRef, useState } from 'react'; import { useCallback, useRef, useState } from 'react';
import BuildingsCreate from './modals/BuildingsCreate'; import BuildingsCreate from './modals/BuildingsCreate';
import AssetBuildingsUpdate from './modals/BuildingsUpdate'; import AssetBuildingsUpdate from './modals/BuildingsUpdate';
import HousesCreate from './modals/HousesCreate'; import HousesCreate from './modals/HousesCreate';
import HousesShow from './modals/HousesShow';
import HousesUpdate from './modals/HousesUpdate'; import HousesUpdate from './modals/HousesUpdate';
import AssetUnitsCreate from './modals/UnitsCreate'; import AssetUnitsCreate from './modals/UnitsCreate';
import AssetUnitsUpdate from './modals/UnitsUpdate'; import AssetUnitsUpdate from './modals/UnitsUpdate';
@ -70,7 +73,7 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
<ProCard <ProCard
title={ title={
<Alert <Alert
message="操作提示:单元/房屋添加,请先选择已有楼栋/单元" message="操作提示:在楼栋下添加单元,在单元下添加房屋!"
type="info" type="info"
showIcon showIcon
style={{ margin: 0 }} style={{ margin: 0 }}
@ -83,6 +86,16 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
<Title level={5} style={{ marginBottom: 16 }}> <Title level={5} style={{ marginBottom: 16 }}>
<Space style={{ display: 'flex', justifyContent: 'space-between' }}> <Space style={{ display: 'flex', justifyContent: 'space-between' }}>
<MyImportModal
key="ImportHouse"
params={{ asset_projects_id: props?.item?.id }}
title="批量导入"
type="danger"
size="middle"
templateApi={Apis.Asset.AssetHouses.DownloadTemplate}
importApi={Apis.Asset.AssetHouses.Import}
reload={props?.reload}
/>
<BuildingsCreate <BuildingsCreate
key="BuildingsCreate" key="BuildingsCreate"
item={props?.item} item={props?.item}
@ -168,7 +181,8 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
asset_buildings_id: selectedBuilding?.id, asset_buildings_id: selectedBuilding?.id,
}} }}
reload={() => actionUnitsRef?.current?.reload()} reload={() => actionUnitsRef?.current?.reload()}
title={`${selectedBuilding.name}单元`} title="单元"
// title={`添加${selectedBuilding.name}单元`}
/> />
)} )}
</Space> </Space>
@ -256,7 +270,8 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
asset_units_id: selectedUnit?.id, asset_units_id: selectedUnit?.id,
}} }}
reload={() => actionHousesRef?.current?.reload()} reload={() => actionHousesRef?.current?.reload()}
title={`${selectedUnit.name}房屋`} title="房屋"
// title={`${selectedUnit.name}房屋`}
/> />
)} )}
</Space> </Space>
@ -284,11 +299,6 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
showSizeChanger: false, showSizeChanger: false,
}} }}
columns={[ columns={[
{
title: '房号',
dataIndex: 'name',
width: 80,
},
{ {
title: '楼层', title: '楼层',
dataIndex: 'floor', dataIndex: 'floor',
@ -297,17 +307,28 @@ export default function AssetBuildings(props: MyBetaModalFormProps) {
return `${record?.floor}`; return `${record?.floor}`;
}, },
}, },
{
title: '房号',
dataIndex: 'name',
width: 80,
},
MyColumns.EnumTag({ MyColumns.EnumTag({
title: '用途', title: '用途',
dataIndex: 'usage', dataIndex: 'usage',
valueEnum: AssetHousesUsageEnum, valueEnum: AssetHousesUsageEnum,
width: 100, width: 100,
}), }),
MyColumns.EnumTag({
title: '房屋属性',
dataIndex: 'ownership_type',
valueEnum: AssetHousesOwnershipTypeEnum,
width: 100,
}),
MyColumns.Option({ MyColumns.Option({
width: 150, width: 150,
render: (_, item: any, index, action) => ( render: (_, item: any, index, action) => (
<Space key={index} size="small"> <Space key={index} size="small">
<HousesShow item={item} reload={action?.reload} /> {/* <HousesShow item={item} reload={action?.reload} /> */}
<HousesUpdate <HousesUpdate
item={item} item={item}
reload={action?.reload} reload={action?.reload}

View File

@ -31,19 +31,19 @@ export default function Index({ ...rest }) {
search={false} search={false}
columns={[ columns={[
{ {
title: '网格ID', title: 'ID',
dataIndex: 'id', dataIndex: 'id',
}, },
{ {
title: '网格名称', title: '板块名称',
dataIndex: 'name', dataIndex: 'name',
}, },
{ {
title: '网格标识', title: '板块标识',
dataIndex: 'grid_mark', dataIndex: 'grid_mark',
}, },
{ {
title: '网格员', title: '管理员',
dataIndex: ['company_employee', 'name'], dataIndex: ['company_employee', 'name'],
render: (_, item: any) => render: (_, item: any) =>
`${item?.company_employee?.name || ''}-${ `${item?.company_employee?.name || ''}-${

View File

@ -1,4 +1,5 @@
import { MyBetaModalFormProps, renderTextHelper } from '@/common'; import { MyBetaModalFormProps, renderTextHelper } from '@/common';
import { MyModal } from '@/components/MyModal';
import { import {
AssetProjectsChargeEnum, AssetProjectsChargeEnum,
AssetProjectsEntrustTypeEnum, AssetProjectsEntrustTypeEnum,
@ -10,62 +11,82 @@ import { Space } from 'antd';
export default function AssetInfo(props: MyBetaModalFormProps) { export default function AssetInfo(props: MyBetaModalFormProps) {
return ( return (
<Space direction="vertical" style={{ width: '100%' }}> <MyModal
<ProCard extra={props.extra}> title={props.title || '查看'}
<ProDescriptions bordered> type={props.item?.type || 'primary'}
<ProDescriptions.Item label="项目别名"> width="920px"
{props?.item?.alias_name} node={
</ProDescriptions.Item> <Space direction="vertical" style={{ width: '100%' }}>
<ProDescriptions.Item label="项目地址" span={2}> <ProCard extra={props.extra}>
{props?.item?.province || ''} <ProDescriptions bordered>
{props?.item?.city || ''} <ProDescriptions.Item label="项目名称" span={2}>
{props?.item?.district || ''} <Space size="large">
{props?.item?.address || ''} <div>
</ProDescriptions.Item> {props?.item?.name}
<ProDescriptions.Item label="项目类型"> {props?.item?.alias_name
<renderTextHelper.Tag ? `${props?.item?.alias_name}`
Enums={AssetProjectsPropertyTypeEnum} : ''}
value={props?.item?.property_type} </div>
key="property_type" </Space>
/> </ProDescriptions.Item>
</ProDescriptions.Item> <ProDescriptions.Item label="绑定机构">
<ProDescriptions.Item label="项目状态"> <Space size="large">
<renderTextHelper.Tag <div>{props?.item?.company?.name}</div>
Enums={AssetProjectsStatusEnum} </Space>
value={props?.item?.status} </ProDescriptions.Item>
key="status"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="委托类型">
<renderTextHelper.Tag
Enums={AssetProjectsEntrustTypeEnum}
value={props?.item?.entrust_type}
key="entrust_type"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="收费方式">
<renderTextHelper.Tag
Enums={AssetProjectsChargeEnum}
value={props?.item?.charge}
key="charge"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="接管日期"> <ProDescriptions.Item label="项目地址" span={2}>
{props?.item?.takeover_date} {props?.item?.province || ''}
</ProDescriptions.Item> {props?.item?.city || ''}
<ProDescriptions.Item label="封园日期"> {props?.item?.district || ''}
{props?.item?.closure_date} {props?.item?.address || ''}
</ProDescriptions.Item> </ProDescriptions.Item>
<ProDescriptions.Item label="项目类型">
<renderTextHelper.Tag
Enums={AssetProjectsPropertyTypeEnum}
value={props?.item?.property_type}
key="property_type"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="项目状态">
<renderTextHelper.Tag
Enums={AssetProjectsStatusEnum}
value={props?.item?.status}
key="status"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="委托类型">
<renderTextHelper.Tag
Enums={AssetProjectsEntrustTypeEnum}
value={props?.item?.entrust_type}
key="entrust_type"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="收费方式">
<renderTextHelper.Tag
Enums={AssetProjectsChargeEnum}
value={props?.item?.charge}
key="charge"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="创建日期"> <ProDescriptions.Item label="接管日期">
{props?.item?.takeover_date}
</ProDescriptions.Item>
<ProDescriptions.Item label="封园日期">
{props?.item?.closure_date}
</ProDescriptions.Item>
{/* <ProDescriptions.Item label="">
{props?.item?.created_at} {props?.item?.created_at}
</ProDescriptions.Item> </ProDescriptions.Item> */}
<ProDescriptions.Item label="最近修改"> <ProDescriptions.Item label="最近修改">
{props?.item?.updated_at} {props?.item?.updated_at}
</ProDescriptions.Item> </ProDescriptions.Item>
</ProDescriptions> </ProDescriptions>
</ProCard> </ProCard>
</Space> </Space>
}
/>
); );
} }

View File

@ -1,4 +1,10 @@
import { MyBetaModalFormProps } from '@/common'; import { MyBetaModalFormProps, renderTextHelper } from '@/common';
import {
AssetProjectsChargeEnum,
AssetProjectsEntrustTypeEnum,
AssetProjectsPropertyTypeEnum,
AssetProjectsStatusEnum,
} from '@/gen/Enums';
import { ProCard, ProDescriptions } from '@ant-design/pro-components'; import { ProCard, ProDescriptions } from '@ant-design/pro-components';
import { Space } from 'antd'; import { Space } from 'antd';
import AssetUpdate from '../modals/AssetUpdate'; import AssetUpdate from '../modals/AssetUpdate';
@ -11,7 +17,12 @@ export default function info(props: MyBetaModalFormProps) {
<ProDescriptions bordered> <ProDescriptions bordered>
<ProDescriptions.Item label="项目名称" span={2}> <ProDescriptions.Item label="项目名称" span={2}>
<Space size="large"> <Space size="large">
<div>{props?.item?.name}</div> <div>
{props?.item?.name}
{props?.item?.alias_name
? `${props?.item?.alias_name}`
: ''}
</div>
<AssetUpdate <AssetUpdate
item={props?.item} item={props?.item}
title="项目" title="项目"
@ -19,7 +30,7 @@ export default function info(props: MyBetaModalFormProps) {
/> />
</Space> </Space>
</ProDescriptions.Item> </ProDescriptions.Item>
<ProDescriptions.Item label="关联机构" span={3}> <ProDescriptions.Item label="绑定机构">
<Space size="large"> <Space size="large">
<div>{props?.item?.company?.name}</div> <div>{props?.item?.company?.name}</div>
<BindCompany <BindCompany
@ -29,6 +40,55 @@ export default function info(props: MyBetaModalFormProps) {
/> />
</Space> </Space>
</ProDescriptions.Item> </ProDescriptions.Item>
<ProDescriptions.Item label="项目地址" span={2}>
{props?.item?.province || ''}
{props?.item?.city || ''}
{props?.item?.district || ''}
{props?.item?.address || ''}
</ProDescriptions.Item>
<ProDescriptions.Item label="项目类型">
<renderTextHelper.Tag
Enums={AssetProjectsPropertyTypeEnum}
value={props?.item?.property_type}
key="property_type"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="项目状态">
<renderTextHelper.Tag
Enums={AssetProjectsStatusEnum}
value={props?.item?.status}
key="status"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="委托类型">
<renderTextHelper.Tag
Enums={AssetProjectsEntrustTypeEnum}
value={props?.item?.entrust_type}
key="entrust_type"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="收费方式">
<renderTextHelper.Tag
Enums={AssetProjectsChargeEnum}
value={props?.item?.charge}
key="charge"
/>
</ProDescriptions.Item>
<ProDescriptions.Item label="接管日期">
{props?.item?.takeover_date}
</ProDescriptions.Item>
<ProDescriptions.Item label="封园日期">
{props?.item?.closure_date}
</ProDescriptions.Item>
{/* <ProDescriptions.Item label="">
{props?.item?.created_at}
</ProDescriptions.Item> */}
<ProDescriptions.Item label="最近修改">
{props?.item?.updated_at}
</ProDescriptions.Item>
</ProDescriptions> </ProDescriptions>
</ProCard> </ProCard>
</Space> </Space>

View File

@ -14,8 +14,8 @@ export default function Update(props: MyBetaModalFormProps) {
return ( return (
<BetaSchemaForm<ApiTypes.Asset.AssetProjects.BindCompany> <BetaSchemaForm<ApiTypes.Asset.AssetProjects.BindCompany>
{...MyModalFormProps.props} {...MyModalFormProps.props}
title={`调整${props.title}`} title={`换绑${props.title}`}
trigger={<MyButtons.Default title="调整" type="primary" size="small" />} trigger={<MyButtons.Default title="换绑" type="primary" size="small" />}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="500px" width="500px"
request={() => request={() =>

View File

@ -15,10 +15,10 @@ export default function Create(props: MyBetaModalFormProps) {
return ( return (
<BetaSchemaForm<ApiTypes.Grid.Grids.Store> <BetaSchemaForm<ApiTypes.Grid.Grids.Store>
{...MyModalFormProps.props} {...MyModalFormProps.props}
title={`创建网格`} title={`创建板块`}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="700px" width="700px"
trigger={<MyButtons.Create title={`创建网格`} />} trigger={<MyButtons.Create title={`创建板块`} />}
form={form} form={form}
key={new Date().getTime()} key={new Date().getTime()}
onOpenChange={(open: any) => { onOpenChange={(open: any) => {
@ -70,7 +70,7 @@ export default function Create(props: MyBetaModalFormProps) {
<ProCard <ProCard
bordered bordered
style={{ marginBlockEnd: 0 }} style={{ marginBlockEnd: 0 }}
title={`添加单元${index + 1}`} title={`创建板块${index + 1}`}
extra={action} extra={action}
bodyStyle={{ paddingBlockEnd: 0 }} bodyStyle={{ paddingBlockEnd: 0 }}
> >

View File

@ -16,12 +16,12 @@ export default function Create(
return ( return (
<BetaSchemaForm<ApiTypes.Grid.Grids.AddManager> <BetaSchemaForm<ApiTypes.Grid.Grids.AddManager>
{...MyModalFormProps.props} {...MyModalFormProps.props}
title={`设置网格`} title={`设置管理`}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="500px" width="500px"
form={form} form={form}
key={new Date().getTime()} key={new Date().getTime()}
trigger={<MyButtons.Default title="网格员" type="link" />} trigger={<MyButtons.Default title="管理员" type="link" />}
request={() => Promise.resolve(props.item)} request={() => Promise.resolve(props.item)}
onOpenChange={(open: any) => { onOpenChange={(open: any) => {
if (open && props.item) { if (open && props.item) {

View File

@ -23,7 +23,7 @@ export default function Create(props: MyBetaModalFormProps) {
title={`添加${props.title}`} title={`添加${props.title}`}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="800px" width="800px"
trigger={<MyButtons.Create title={`添加${props.title}`} />} trigger={<MyButtons.Create title={`${props.title}`} />}
form={form} form={form}
key={new Date().getTime()} key={new Date().getTime()}
onOpenChange={(open: any) => { onOpenChange={(open: any) => {

View File

@ -59,14 +59,14 @@ export default function Create(props: MyBetaModalFormProps) {
title: '建筑结构', title: '建筑结构',
colProps: { span: 12 }, colProps: { span: 12 },
valueEnum: AssetUnitsBuildingStructureEnum, valueEnum: AssetUnitsBuildingStructureEnum,
required: true, // required: true,
}), }),
MyFormItems.EnumRadio({ MyFormItems.EnumRadio({
key: 'building_type', key: 'building_type',
title: '建筑类型', title: '建筑类型',
colProps: { span: 12 }, colProps: { span: 12 },
valueEnum: AssetUnitsBuildingTypeEnum, valueEnum: AssetUnitsBuildingTypeEnum,
required: true, // required: true,
}), }),
{ {
key: 'elevator_count', key: 'elevator_count',

View File

@ -69,14 +69,14 @@ export default function Update(props: MyBetaModalFormProps) {
title: '建筑结构', title: '建筑结构',
colProps: { span: 12 }, colProps: { span: 12 },
valueEnum: AssetUnitsBuildingStructureEnum, valueEnum: AssetUnitsBuildingStructureEnum,
required: true, // required: true,
}), }),
MyFormItems.EnumRadio({ MyFormItems.EnumRadio({
key: 'building_type', key: 'building_type',
title: '建筑类型', title: '建筑类型',
colProps: { span: 12 }, colProps: { span: 12 },
valueEnum: AssetUnitsBuildingTypeEnum, valueEnum: AssetUnitsBuildingTypeEnum,
required: true, // required: true,
}), }),
{ {
key: 'elevator_count', key: 'elevator_count',

View File

@ -1,7 +1,6 @@
import { import {
MyButtons, MyButtons,
MyColumns, MyColumns,
MyImportModal,
MyPageContainer, MyPageContainer,
MyProTableProps, MyProTableProps,
usePageTabs, usePageTabs,
@ -11,9 +10,11 @@ import { AssetProjectsPropertyTypeEnum } 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';
import AssetInfo from './components/AssetInfo';
import AssetCreate from './modals/AssetCreate'; import AssetCreate from './modals/AssetCreate';
import AssetUpdate from './modals/AssetUpdate';
export default function Index({ title = '项目管理' }) { export default function Index({ title = '项目列表' }) {
const navigate = useNavigate(); const navigate = useNavigate();
// 注册当前页面为标签页 // 注册当前页面为标签页
@ -36,7 +37,7 @@ export default function Index({ title = '项目管理' }) {
columns={[ columns={[
MyColumns.ID(), MyColumns.ID(),
MyColumns.EnumTag({ MyColumns.EnumTag({
title: '项目类型', title: '类型',
dataIndex: 'property_type', dataIndex: 'property_type',
valueEnum: AssetProjectsPropertyTypeEnum, valueEnum: AssetProjectsPropertyTypeEnum,
search: false, search: false,
@ -82,6 +83,15 @@ export default function Index({ title = '项目管理' }) {
onSoftDelete: Apis.Asset.AssetProjects.SoftDelete, onSoftDelete: Apis.Asset.AssetProjects.SoftDelete,
search: false, search: false,
}), }),
{
title: '绑定机构',
dataIndex: ['company', 'name'],
search: {
transform: (value) => {
return { company_name: value };
},
},
},
// { // {
// title: '接管日期', // title: '接管日期',
// dataIndex: 'takeover_date', // dataIndex: 'takeover_date',
@ -96,20 +106,14 @@ 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}>
<AssetInfo item={item} title="查看" reload={action?.reload} />
<AssetUpdate item={item} title="项目" reload={action?.reload} />
<MyButtons.View <MyButtons.View
title="详情" title="楼栋管理"
onClick={() => { onClick={() => {
navigate(`/asset/${item.id}`); navigate(`/asset/${item.id}`);
}} }}
/> />
<MyImportModal
key="ImportHouse"
params={{ asset_projects_id: item?.id }}
title="批量导入"
templateApi={Apis.Asset.AssetHouses.DownloadTemplate}
importApi={Apis.Asset.AssetHouses.Import}
reload={action?.reload}
/>
<MyButtons.Delete <MyButtons.Delete
onConfirm={() => onConfirm={() =>
Apis.Common.Admins.Delete({ id: item.id }).then(() => Apis.Common.Admins.Delete({ id: item.id }).then(() =>

View File

@ -35,7 +35,6 @@ export default function Index({ title = '房屋列表' }) {
{ {
title: '房屋名称', title: '房屋名称',
dataIndex: 'full_name', dataIndex: 'full_name',
ellipsis: true,
}, },
MyColumns.EnumTag({ MyColumns.EnumTag({

View File

@ -1,6 +1,7 @@
import { import {
MyButtons, MyButtons,
MyColumns, MyColumns,
MyImportModal,
MyPageContainer, MyPageContainer,
MyProTableProps, MyProTableProps,
usePageTabs, usePageTabs,
@ -32,6 +33,15 @@ export default function Index({ title = '账单' }) {
MyProTableProps.request(params, sort, Apis.Bill.HouseBills.List) MyProTableProps.request(params, sort, Apis.Bill.HouseBills.List)
} }
toolBarRender={(action) => [ toolBarRender={(action) => [
<MyImportModal
key="ImportHouse"
title="批量导入"
type="danger"
size="middle"
templateApi={Apis.Bill.HouseBills.DownloadTemplate}
importApi={Apis.Bill.HouseBills.Import}
reload={action?.reload}
/>,
<BillCreate key="Create" reload={action?.reload} title={title} />, <BillCreate key="Create" reload={action?.reload} title={title} />,
]} ]}
columns={[ columns={[

View File

@ -36,8 +36,12 @@ export default function Index(props: MyBetaModalFormProps) {
//to-do 按层级选择 //to-do 按层级选择
{ {
title: '所在组织', title: '所在组织',
dataIndex: ['organization', 'name'], dataIndex: 'organization_path',
search: false, search: {
transform: (value) => {
return { organization_name: value };
},
},
}, },
{ {
title: '姓名', title: '姓名',

View File

@ -21,7 +21,7 @@ export default function Organizations(props: MyBetaModalFormProps) {
MyProTableProps.request( MyProTableProps.request(
{ ...params, companies_id: props?.item?.id }, { ...params, companies_id: props?.item?.id },
sort, sort,
Apis.Company.Organizations.List, Apis.Company.Organizations.TreeList,
) )
} }
toolBarRender={(action) => [ toolBarRender={(action) => [
@ -35,12 +35,6 @@ export default function Organizations(props: MyBetaModalFormProps) {
// search={false} // search={false}
// options={false} // options={false}
columns={[ columns={[
MyColumns.EnumTag({
title: '组织类型',
dataIndex: 'type',
valueEnum: OrganizationsTypeEnum,
search: false,
}),
{ {
title: '组织名称', title: '组织名称',
dataIndex: 'name', dataIndex: 'name',
@ -50,6 +44,13 @@ export default function Organizations(props: MyBetaModalFormProps) {
dataIndex: 'id', dataIndex: 'id',
search: false, search: false,
}, },
MyColumns.EnumTag({
title: '组织类型',
dataIndex: 'type',
valueEnum: OrganizationsTypeEnum,
search: false,
}),
{ {
title: '上级组织', title: '上级组织',
dataIndex: ['organization_parent', 'name'], dataIndex: ['organization_parent', 'name'],
@ -58,12 +59,12 @@ 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}>
<OrganizationChange <OrganizationUpdate
item={{ ...item, companies_id: props?.item?.id }} item={{ ...item, companies_id: props?.item?.id }}
reload={action?.reload} reload={action?.reload}
title="组织" title="组织"
/> />
<OrganizationUpdate <OrganizationChange
item={{ ...item, companies_id: props?.item?.id }} item={{ ...item, companies_id: props?.item?.id }}
reload={action?.reload} reload={action?.reload}
title="组织" title="组织"

View File

@ -11,7 +11,9 @@ export default function Update(props: MyBetaModalFormProps) {
{...MyModalFormProps.props} {...MyModalFormProps.props}
title={`${props.title}调整`} title={`${props.title}调整`}
form={form} form={form}
trigger={<MyButtons.Edit title="组织调整" type="link" size="middle" />} trigger={
<MyButtons.Default title="组织调整" type="primary" size="small" />
}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="500px" width="500px"
onOpenChange={(open: any) => { onOpenChange={(open: any) => {

View File

@ -41,18 +41,6 @@ export default function Create(props: MyBetaModalFormProps) {
.catch(() => false) .catch(() => false)
} }
columns={[ columns={[
Selects?.OrganizationsTree({
title: '上级组织',
key: 'parent_id',
params: { companies_id: props?.item?.id },
colProps: { span: 24 },
}),
{
key: 'name',
title: '组织名称',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
MyFormItems.EnumRadio({ MyFormItems.EnumRadio({
key: 'type', key: 'type',
title: '组织类型', title: '组织类型',
@ -60,24 +48,32 @@ export default function Create(props: MyBetaModalFormProps) {
valueEnum: OrganizationsTypeEnum, valueEnum: OrganizationsTypeEnum,
required: true, required: true,
}), }),
// Selects?.Employees({ {
// title: '负责人', key: 'name',
// colProps: { span: 8 }, title: '组织名称',
// }), colProps: { span: 24 },
// { formItemProps: { ...rulesHelper.text },
// key: 'manager_phone', },
// title: '负责人手机', {
// colProps: { span: 8 }, name: ['type'],
// valueType: 'number', valueType: 'dependency',
// fieldProps: { columns: ({ type }: any) => {
// maxLength: 11, return type !== OrganizationsTypeEnum.Group.value
// }, ? [
// }, Selects?.OrganizationsTree({
// { title: '请设置上级组织',
// key: 'manager_email', key: 'parent_id',
// title: '负责人邮箱', params: { companies_id: props?.item?.id },
// colProps: { span: 8 }, colProps: { span: 24 },
// }, fieldProps: {
placeholder: '可搜索或手动选择上级组织',
},
formItemProps: { ...rulesHelper.text },
}),
]
: [];
},
},
]} ]}
/> />
); );

View File

@ -40,12 +40,6 @@ export default function Update(props: MyBetaModalFormProps) {
.catch(() => false) .catch(() => false)
} }
columns={[ columns={[
{
key: 'name',
title: '组织名称',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
MyFormItems.EnumRadio({ MyFormItems.EnumRadio({
key: 'type', key: 'type',
title: '类型', title: '类型',
@ -53,12 +47,12 @@ export default function Update(props: MyBetaModalFormProps) {
valueEnum: OrganizationsTypeEnum, valueEnum: OrganizationsTypeEnum,
required: true, required: true,
}), }),
// Selects?.OrganizationsTree({ {
// title: '上级组织', key: 'name',
// key: 'parent_id', title: '组织名称',
// params: { companies_id: props?.item?.companies_id }, colProps: { span: 24 },
// colProps: { span: 24 }, formItemProps: { ...rulesHelper.text },
// }), },
]} ]}
/> />
); );

View File

@ -65,6 +65,23 @@ export default function Create(props: MyBetaModalFormProps) {
valueEnum: CompanyReceiptAccountsPayChannelEnum, valueEnum: CompanyReceiptAccountsPayChannelEnum,
required: true, required: true,
}), }),
{
name: ['pay_channel'],
valueType: 'dependency',
columns: ({ pay_channel }: any) => {
return pay_channel ===
CompanyReceiptAccountsPayChannelEnum.TongLian.value
? [
{
key: 'merchant_id',
title: '商户ID',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
]
: [];
},
},
// { // {
// key: 'is_default', // key: 'is_default',
// title: '是否设为默认账号', // title: '是否设为默认账号',

View File

@ -65,6 +65,23 @@ export default function Update(props: MyBetaModalFormProps) {
valueEnum: CompanyReceiptAccountsPayChannelEnum, valueEnum: CompanyReceiptAccountsPayChannelEnum,
required: true, required: true,
}), }),
{
name: ['pay_channel'],
valueType: 'dependency',
columns: ({ pay_channel }: any) => {
return pay_channel ===
CompanyReceiptAccountsPayChannelEnum.TongLian.value
? [
{
key: 'merchant_id',
title: '商户ID',
colProps: { span: 24 },
formItemProps: { ...rulesHelper.text },
},
]
: [];
},
},
// { // {
// key: 'is_default', // key: 'is_default',
// title: '是否设为默认账号', // title: '是否设为默认账号',

View File

@ -6,7 +6,6 @@ import {
usePageTabs, usePageTabs,
} from '@/common'; } from '@/common';
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
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 { useNavigate } from '@umijs/max';
import { Space } from 'antd'; import { Space } from 'antd';
@ -41,19 +40,21 @@ export default function Index({ title = '机构列表' }) {
columns={[ columns={[
MyColumns.ID(), MyColumns.ID(),
{ {
title: '组织简称', title: '机构简称',
dataIndex: 'short_name', dataIndex: 'short_name',
search: false,
}, },
{ {
title: '企业名称', title: '企业名称',
dataIndex: 'name', dataIndex: 'name',
}, },
MyColumns.EnumTag({
title: '类型', // MyColumns.EnumTag({
dataIndex: 'merchant_type', // title: '类型',
valueEnum: CompaniesMerchantTypeEnum, // dataIndex: 'merchant_type',
search: false, // valueEnum: CompaniesMerchantTypeEnum,
}), // search: false,
// }),
MyColumns.SoftDelete({ MyColumns.SoftDelete({
onRestore: Apis.Company.Companies.Restore, onRestore: Apis.Company.Companies.Restore,
onSoftDelete: Apis.Company.Companies.SoftDelete, onSoftDelete: Apis.Company.Companies.SoftDelete,
@ -81,7 +82,7 @@ export default function Index({ title = '机构列表' }) {
/> />
<MyButtons.Delete <MyButtons.Delete
onConfirm={() => onConfirm={() =>
Apis.Common.Admins.Delete({ id: item.id }).then(() => Apis.Company.Companies.Delete({ id: item.id }).then(() =>
action?.reload(), action?.reload(),
) )
} }

View File

@ -47,11 +47,13 @@ export default function Create(props: MyBetaModalFormProps) {
key: 'business_license_number', key: 'business_license_number',
title: '营业执照号', title: '营业执照号',
colProps: { span: 24 }, colProps: { span: 24 },
tooltip: '限制20位',
formItemProps: { ...rulesHelper.text }, formItemProps: { ...rulesHelper.text },
fieldProps: { fieldProps: {
maxLength: 18, maxLength: 18,
}, },
}, },
{ {
key: 'contact_name', key: 'contact_name',
title: '联系人姓名', title: '联系人姓名',

View File

@ -50,9 +50,13 @@ export default function Index({ title = '员工管理' }) {
search: false, search: false,
}, },
{ {
title: '组织', title: '所在组织',
dataIndex: ['organization', 'name'], dataIndex: 'organization_path',
search: false, search: {
transform: (value) => {
return { organization_name: value };
},
},
}, },
{ {
title: '姓名', title: '姓名',

View File

@ -12,7 +12,7 @@ import {
import { Apis } from '@/gen/Apis'; import { Apis } from '@/gen/Apis';
import { import {
HouseOccupantsCardTypeEnum, HouseOccupantsCardTypeEnum,
HouseOccupantsHouseRelationEnum, HouseOccupantsRelationWithOwnerEnum,
HouseRegistersStatusEnum, HouseRegistersStatusEnum,
HouseRegistersTypeEnum, HouseRegistersTypeEnum,
} from '@/gen/Enums'; } from '@/gen/Enums';
@ -31,7 +31,7 @@ export default function Update(props: MyBetaModalFormProps) {
title={props.title} title={props.title}
trigger={<MyButtons.Default title="审核" type="primary" />} trigger={<MyButtons.Default title="审核" type="primary" />}
wrapperCol={{ span: 24 }} wrapperCol={{ span: 24 }}
width="1000px" width="800px"
modalProps={{ modalProps={{
bodyStyle: { maxHeight: '70vh', overflowY: 'auto' }, bodyStyle: { maxHeight: '70vh', overflowY: 'auto' },
}} }}
@ -81,7 +81,7 @@ export default function Update(props: MyBetaModalFormProps) {
{props?.item?.customer_info && {props?.item?.customer_info &&
props?.item?.customer_info?.length > 0 && ( props?.item?.customer_info?.length > 0 && (
<ProCard title="客户信息" size="small"> <ProCard size="small">
<ProTable <ProTable
{...MyProTableProps.props} {...MyProTableProps.props}
search={false} search={false}
@ -91,36 +91,41 @@ export default function Update(props: MyBetaModalFormProps) {
rowKey={(record, index) => record?.id_card || index} rowKey={(record, index) => record?.id_card || index}
size="small" size="small"
columns={[ columns={[
// MyColumns.EnumTag({
// title: '房客关系',
// dataIndex: 'house_relation',
// valueEnum: HouseOccupantsHouseRelationEnum,
// width: 100,
// }),
MyColumns.EnumTag({ MyColumns.EnumTag({
title: '房客关系', title:
dataIndex: 'house_relation', props?.item?.status === 'Rented'
valueEnum: HouseOccupantsHouseRelationEnum, ? '与主租人关系'
width: 100, : '与产权人关系',
// title: '关系说明',
dataIndex: 'relation_with_owner',
valueEnum: HouseOccupantsRelationWithOwnerEnum,
search: false,
}), }),
{ {
title: '姓名', title: '姓名',
dataIndex: 'name', dataIndex: 'name',
width: 100,
}, },
{ {
title: '手机号', title: '手机号',
dataIndex: 'phone', dataIndex: 'phone',
width: 120,
}, },
MyColumns.EnumTag({ MyColumns.EnumTag({
title: '证件类型', title: '证件类型',
dataIndex: 'card_type', dataIndex: 'card_type',
valueEnum: HouseOccupantsCardTypeEnum, valueEnum: HouseOccupantsCardTypeEnum,
width: 120,
}), }),
{ {
title: '证件号码', title: '证件号码',
dataIndex: 'id_card', dataIndex: 'id_card',
width: 180,
}, },
{ {
title: '证件资料', title: '证件资料',
width: 120,
render: (_, item) => { render: (_, item) => {
return ( return (
<Space> <Space>
@ -147,7 +152,7 @@ export default function Update(props: MyBetaModalFormProps) {
</ProCard> </ProCard>
)} )}
{props?.item?.type === 'Delivery' && {props?.item?.type === 'AddOwner' &&
props?.item?.ownership_info && props?.item?.ownership_info &&
props?.item?.ownership_info?.length > 0 && ( props?.item?.ownership_info?.length > 0 && (
<ProCard title="产证信息" size="small"> <ProCard title="产证信息" size="small">