diff --git a/.umirc.ts b/.umirc.ts index 90dc80e..4edb548 100644 --- a/.umirc.ts +++ b/.umirc.ts @@ -15,7 +15,7 @@ export default defineConfig({ proxy: { '/api/': { // target: 'http://yt:8003', - target: 'http://10.39.13.80:8006', + target: 'http://10.39.13.80:8001', // target: 'http://we6f9c65.natappfree.cc', // target: 'https://loanos-test.nchl.net/', changeOrigin: true, diff --git a/gencode.json b/gencode.json index 6dbabab..5c1814c 100644 --- a/gencode.json +++ b/gencode.json @@ -1,4 +1,4 @@ { - "url": "http://10.39.13.80:8006/api/docs/openapi", + "url": "http://10.39.13.80:8001/api/docs/openapi", "module": "Admin" } diff --git a/src/common/components/MyButtons.tsx b/src/common/components/MyButtons.tsx index 49a343c..951028a 100644 --- a/src/common/components/MyButtons.tsx +++ b/src/common/components/MyButtons.tsx @@ -1,7 +1,6 @@ import { DeleteOutlined, EditOutlined, - EyeOutlined, PlusOutlined, RollbackOutlined, SaveFilled, @@ -23,7 +22,7 @@ export const MyButtons = { onConfirm, isConfirm, title, - description = '确定要取消?', + description = '是否确定取消?', ...rest }: { onConfirm?: () => void; @@ -50,7 +49,7 @@ export const MyButtons = { }, View({ title, ...rest }: MyButtonsType): JSX.Element { return ( - ); @@ -77,7 +76,7 @@ export const MyButtons = { return ( , @@ -62,32 +270,122 @@ export const MyIcons = { BankOutlined: , UserOutlined: , CreditCardOutlined: , - AndroidFilled: , - AppleFilled: , - WindowsFilled: , - ChromeFilled: , - AliwangwangFilled: , - OpenAIFilled: , - TwitchFilled: , - YoutubeFilled: , - HeartFilled: , - IeSquareFilled: , - TruckFilled: , - UnlockFilled: , - AppstoreFilled: , - BellFilled: , - CustomerServiceFilled: , - WalletFilled: , - StarFilled: , - SafetyCertificateFilled: , - FolderOpenFilled: , - ScheduleFilled: , - HourglassFilled: , - BankFilled: , - ShopFilled: , - HomeFilled: , - SettingFilled: , - ReadFilled: , - RocketFilled: , - NotificationFilled: , + // 常用系统图标 + HomeOutlined: , + DashboardOutlined: , + FileOutlined: , + EditOutlined: , + DeleteOutlined: , + SearchOutlined: , + PlusOutlined: , + CloseOutlined: , + CheckOutlined: , + ExclamationCircleOutlined: , + InfoCircleOutlined: , + QuestionCircleOutlined: , + // 导航图标 + MenuOutlined: , + LeftOutlined: , + RightOutlined: , + UpOutlined: , + DownOutlined: , + // 操作图标 + SaveOutlined: , + CopyOutlined: , + // PrintOutlined: , // 不存在,使用 PrinterOutlined 替代 + DownloadOutlined: , + UploadOutlined: , + ShareAltOutlined: , + // 状态图标 + LoadingOutlined: , + SyncOutlined: , + ReloadOutlined: , + LockOutlined: , + UnlockOutlined: , + EyeOutlined: , + EyeInvisibleOutlined: , + // 通信图标 + MailOutlined: , + PhoneOutlined: , + MessageOutlined: , + NotificationOutlined: , + BellOutlined: , + // 文档图标 + FolderOutlined: , + FileTextOutlined: , + FilePdfOutlined: , + FileExcelOutlined: , + FileWordOutlined: , + FileImageOutlined: , + // 媒体图标 + PictureOutlined: , + VideoCameraOutlined: , + AudioOutlined: , + PlayCircleOutlined: , + PauseCircleOutlined: , + // 工具图标 + ToolOutlined: , + BugOutlined: , + CodeOutlined: , + ApiOutlined: , + DatabaseOutlined: , + CloudOutlined: , + // 商业图标 + ShoppingCartOutlined: , + GiftOutlined: , + TrophyOutlined: , + StarOutlined: , + HeartOutlined: , + LikeOutlined: , + // 时间图标 + CalendarOutlined: , + ClockCircleOutlined: , + HistoryOutlined: , + // 地图图标 + EnvironmentOutlined: , + GlobalOutlined: , + CompassOutlined: , + // 设备图标 + MobileOutlined: , + TabletOutlined: , + LaptopOutlined: , + DesktopOutlined: , + PrinterOutlined: , + CameraOutlined: , + // 安全图标 + SafetyOutlined: , + SecurityScanOutlined: , + KeyOutlined: , + TeamOutlined: , + IdcardOutlined: , + // 财务图标 + DollarOutlined: , + EuroOutlined: , + PoundOutlined: , + PayCircleOutlined: , + WalletOutlined: , + // 图表图标 + PieChartOutlined: , + LineChartOutlined: , + AreaChartOutlined: , + FundOutlined: , + StockOutlined: , + // 网络图标 + WifiOutlined: , + DisconnectOutlined: , + LinkOutlined: , + // 其他常用图标 + FireOutlined: , + ThunderboltOutlined: , + BulbOutlined: , + RocketOutlined: , + CrownOutlined: , + FlagOutlined: , + TagOutlined: , + TagsOutlined: , + BookOutlined: , + ReadOutlined: , + ExperimentOutlined: , + BuildOutlined: , + CarOutlined: , }; diff --git a/src/common/components/formFields/MyUploadImages.scss b/src/common/components/formFields/MyUploadImages.scss new file mode 100644 index 0000000..ec352be --- /dev/null +++ b/src/common/components/formFields/MyUploadImages.scss @@ -0,0 +1,37 @@ +.my-upload-images { + .ant-upload-list { + display: flex !important; + flex-direction: row !important; + flex-wrap: wrap !important; + gap: 8px !important; + align-items: flex-start !important; + } + + .ant-upload-list-item { + margin: 0 !important; + margin-bottom: 0 !important; + margin-right: 0 !important; + } + + .ant-upload-select { + margin: 0 !important; + margin-right: 0 !important; + } + + // 针对文件类型的特殊样式 + &.ant-upload-list-text { + .ant-upload-list-item { + display: inline-block; + width: auto; + margin-right: 8px; + } + } + + // 针对图片类型的特殊样式 + &.ant-upload-list-picture-card { + .ant-upload-list-item { + width: 104px; + height: 104px; + } + } +} diff --git a/src/common/components/formFields/MyUploadImages.tsx b/src/common/components/formFields/MyUploadImages.tsx index 937948b..9eaa355 100644 --- a/src/common/components/formFields/MyUploadImages.tsx +++ b/src/common/components/formFields/MyUploadImages.tsx @@ -5,6 +5,7 @@ import { Button, Modal, Upload, UploadFile, UploadProps } from 'antd'; import { RcFile } from 'antd/es/upload'; import axios from 'axios'; import { useSetState } from 'react-use'; +import './MyUploadImages.scss'; type MyType = { uploadType?: 'image' | 'video' | 'audio' | 'file'; @@ -120,6 +121,7 @@ export function MyUploadImages({ onPreview={handlePreview} onChange={handleChange} customRequest={customRequest} + className="my-upload-images" {...rest} > {!value?.length || (value && value.length < max) ? uploadButton : null} diff --git a/src/common/components/layout/MyPageContainer.tsx b/src/common/components/layout/MyPageContainer.tsx index e072d20..6341496 100644 --- a/src/common/components/layout/MyPageContainer.tsx +++ b/src/common/components/layout/MyPageContainer.tsx @@ -46,14 +46,54 @@ class TabsManager { addTab(tab: TabItem) { const existingIndex = this.tabs.findIndex((t) => t.key === tab.key); if (existingIndex === -1) { - this.tabs.push(tab); + // 如果是新标签页,插入到当前激活标签页的右边 + const currentActiveIndex = this.tabs.findIndex( + (t) => t.key === this.activeKey, + ); + if (currentActiveIndex !== -1) { + // 在当前激活标签页的右边插入新标签页 + this.tabs.splice(currentActiveIndex + 1, 0, tab); + } else { + // 如果没有当前激活标签页,添加到末尾 + this.tabs.push(tab); + } } else { + // 如果标签页已存在,更新其信息 this.tabs[existingIndex] = { ...this.tabs[existingIndex], ...tab }; } this.activeKey = tab.key; this.notify(); } + addTabNext(tab: TabItem) { + const existingIndex = this.tabs.findIndex((t) => t.key === tab.key); + if (existingIndex === -1) { + // 强制在当前激活标签页的右边插入新标签页 + const currentActiveIndex = this.tabs.findIndex( + (t) => t.key === this.activeKey, + ); + if (currentActiveIndex !== -1) { + this.tabs.splice(currentActiveIndex + 1, 0, tab); + } else { + this.tabs.push(tab); + } + } else { + // 如果标签页已存在,移动到当前激活标签页的右边 + const existingTab = this.tabs[existingIndex]; + this.tabs.splice(existingIndex, 1); // 先移除原位置的标签页 + const currentActiveIndex = this.tabs.findIndex( + (t) => t.key === this.activeKey, + ); + if (currentActiveIndex !== -1) { + this.tabs.splice(currentActiveIndex + 1, 0, { ...existingTab, ...tab }); + } else { + this.tabs.push({ ...existingTab, ...tab }); + } + } + this.activeKey = tab.key; + this.notify(); + } + removeTab(targetKey: string) { const targetIndex = this.tabs.findIndex((tab) => tab.key === targetKey); if (targetIndex === -1) return; diff --git a/src/common/components/layout/TabsExample.tsx b/src/common/components/layout/TabsExample.tsx index a48a00f..f1eaa68 100644 --- a/src/common/components/layout/TabsExample.tsx +++ b/src/common/components/layout/TabsExample.tsx @@ -24,6 +24,16 @@ export function TabsExample() { history.push(path); }; + const handleAddTabNext = (key: string, label: string, path: string) => { + tabsApi.addTabNext({ + key, + label, + path, + closable: true, + }); + history.push(path); + }; + return ( + 在当前标签右侧打开新标签 + + + + + + + + + @@ -78,6 +122,10 @@ export function TabsExample() {
  • 多标签页支持:支持同时打开多个页面标签
  • +
  • + 智能标签插入 + :新标签页默认在当前激活标签页的右边插入 +
  • 右键菜单:右键点击标签页显示操作菜单
  • diff --git a/src/common/components/layout/usePageTabs.ts b/src/common/components/layout/usePageTabs.ts index 6745925..fc68dfa 100644 --- a/src/common/components/layout/usePageTabs.ts +++ b/src/common/components/layout/usePageTabs.ts @@ -1,5 +1,5 @@ -import { useEffect } from 'react'; import { useLocation } from '@umijs/max'; +import { useEffect } from 'react'; import { tabsManager } from './MyPageContainer'; export interface UsePageTabsOptions { @@ -16,6 +16,12 @@ export interface UsePageTabsOptions { /** * 页面标签页Hook * 用于简化页面标签页的管理 + * + * 功能特性: + * - 自动添加当前页面为标签页 + * - 新标签页默认在当前激活标签页的右边插入 + * - 支持标签页的增删改查操作 + * - 支持标签页位置管理(关闭左侧/右侧/其他标签页) */ export function usePageTabs(options: UsePageTabsOptions) { const location = useLocation(); @@ -27,56 +33,75 @@ export function usePageTabs(options: UsePageTabsOptions) { key: tabKey, label: tabLabel, path: location.pathname + location.search, - closable + closable, }); } }, [tabKey, tabLabel, closable, autoAdd, location.pathname, location.search]); return { /** 添加新标签页 */ - addTab: (tab: { key: string; label: string; path?: string; closable?: boolean }) => { + addTab: (tab: { + key: string; + label: string; + path?: string; + closable?: boolean; + }) => { tabsManager.addTab({ ...tab, path: tab.path || location.pathname + location.search, - closable: tab.closable ?? true + closable: tab.closable ?? true, }); }, - + + /** 在当前标签页右边添加新标签页 */ + addTabNext: (tab: { + key: string; + label: string; + path?: string; + closable?: boolean; + }) => { + tabsManager.addTabNext({ + ...tab, + path: tab.path || location.pathname + location.search, + closable: tab.closable ?? true, + }); + }, + /** 关闭指定标签页 */ removeTab: (key: string) => { tabsManager.removeTab(key); }, - + /** 切换到指定标签页 */ switchTab: (key: string) => { tabsManager.setActiveKey(key); }, - + /** 关闭其他标签页 */ closeOtherTabs: (currentKey?: string) => { tabsManager.closeOtherTabs(currentKey || tabKey); }, - + /** 关闭左侧标签页 */ closeLeftTabs: (currentKey?: string) => { tabsManager.closeLeftTabs(currentKey || tabKey); }, - + /** 关闭右侧标签页 */ closeRightTabs: (currentKey?: string) => { tabsManager.closeRightTabs(currentKey || tabKey); }, - + /** 刷新标签页 */ refreshTab: (key?: string) => { tabsManager.refreshTab(key || tabKey); }, - + /** 获取当前所有标签页 */ getTabs: () => tabsManager.getTabs(), - + /** 获取当前激活的标签页key */ - getActiveKey: () => tabsManager.getActiveKey() + getActiveKey: () => tabsManager.getActiveKey(), }; } @@ -88,6 +113,7 @@ export function useTabsManager() { return { tabsManager, addTab: tabsManager.addTab.bind(tabsManager), + addTabNext: tabsManager.addTabNext.bind(tabsManager), removeTab: tabsManager.removeTab.bind(tabsManager), setActiveKey: tabsManager.setActiveKey.bind(tabsManager), closeOtherTabs: tabsManager.closeOtherTabs.bind(tabsManager), @@ -95,6 +121,6 @@ export function useTabsManager() { closeRightTabs: tabsManager.closeRightTabs.bind(tabsManager), refreshTab: tabsManager.refreshTab.bind(tabsManager), getTabs: tabsManager.getTabs.bind(tabsManager), - getActiveKey: tabsManager.getActiveKey.bind(tabsManager) + getActiveKey: tabsManager.getActiveKey.bind(tabsManager), }; -} \ No newline at end of file +} diff --git a/src/common/components/schema/MyColumns.tsx b/src/common/components/schema/MyColumns.tsx index f7bdbb7..f667992 100644 --- a/src/common/components/schema/MyColumns.tsx +++ b/src/common/components/schema/MyColumns.tsx @@ -1,5 +1,4 @@ import { MyResponseType, renderTextHelper } from '@/common'; -import { Apis } from '@/gen/Apis'; import { ProColumns } from '@ant-design/pro-components'; import { Image, Popconfirm, Tag } from 'antd'; @@ -175,17 +174,7 @@ export const MyColumns = { ...rest, }; }, - Companies(props?: ReturnType): ReturnType { - return { - title: '选择机构', - valueType: 'select', - hideInTable: true, - key: 'companies_id', - dataIndex: 'companies_id', - request: async () => (await Apis.Company.Companies.Select()).data, - ...props, - }; - }, + Token({ ...rest }) { return { title: 'Token', @@ -204,4 +193,39 @@ export const MyColumns = { ...rest, }; }, + Ffdefault({ + Ffdefault, + dataIndex, + ...rest + }: { + Ffdefault: (data: any) => Promise; + dataIndex: any; + } & ReturnType): ReturnType { + return { + title: '是否默认', + renderText(text: boolean, record: any, index, action: any) { + let form: any = { id: record.id }; + form[dataIndex] = record[dataIndex] ? 0 : 1; + return ( + { + Ffdefault?.(form).then(() => action?.reload()); + }} + okText="是" + cancelText="否" + > + + {record[dataIndex] ? '是' : '否'} + + + ); + }, + ...rest, + }; + }, }; diff --git a/src/common/components/schema/MyFormItems.tsx b/src/common/components/schema/MyFormItems.tsx index a3b3d0d..3260899 100644 --- a/src/common/components/schema/MyFormItems.tsx +++ b/src/common/components/schema/MyFormItems.tsx @@ -58,11 +58,16 @@ export const MyFormItems = { UploadImages({ max = 1, help, + uploadType = 'image', ...rest - }: { max?: number; help?: string } & PropsType): ReturnType { + }: { + max?: number; + help?: string; + uploadType?: 'image' | 'file' | 'video' | 'audio' | undefined; + } & PropsType): ReturnType { return { renderFormItem() { - return ; + return ; }, formItemProps: { help, diff --git a/src/components/Select.tsx b/src/components/Select.tsx index 5ff8d05..ad16268 100644 --- a/src/components/Select.tsx +++ b/src/components/Select.tsx @@ -422,4 +422,39 @@ export const Selects = { }, }; }, + + //获取广告位 + GetBannerSpace(props?: PropsType): ReturnType { + const { + title = '广告位', + key = 'banner_spaces_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.Banner.BannerSpaces.Select({ + keywords: params?.KeyWords, + ...params, + }) + ).data, + ...rest, + fieldProps: { + showSearch: true, + fieldNames: { + label: 'label', + value: 'value', + }, + ...rest?.fieldProps, + }, + }; + }, }; diff --git a/src/gen/ApiTypes.d.ts b/src/gen/ApiTypes.d.ts index 3cc3ae7..4358a08 100644 --- a/src/gen/ApiTypes.d.ts +++ b/src/gen/ApiTypes.d.ts @@ -61,6 +61,11 @@ declare namespace ApiTypes { "move_out_date"?: Date; // 搬离时间 "apply_reason"?: string; // 搬离原因 }; + type MoveIn = { + "house_occupants_id": number; // 房客id + "move_in_date"?: Date; // 搬入时间 + "apply_reason"?: string; // 搬入原因 + }; type RemoveOwner = { "house_occupants_id": number; // 房客id }; @@ -291,6 +296,70 @@ declare namespace ApiTypes { }; } } + namespace Banner { + namespace BannerSpaces { + type List = { + "name"?: string; // 模糊搜索:名称 + }; + type Store = { + "name": string; // 名称 + "remark"?: string; // 备注 + "type": string; // 类型,[enum:BannerSpacesTypeEnum] + }; + type Update = { + "id": number; // id + "name": string; // 名称 + "remark"?: string; // 备注 + "type": string; // 类型,[enum:BannerSpacesTypeEnum] + }; + type Show = { + "id": number; // id + }; + type Delete = { + "id": number; // id + }; + type Select = { + "keywords"?: string; // 关键词 + }; + } + namespace Banners { + type List = { + "banner_spaces_id"?: number; // 广告位id,[ref:banner_spaces] + "name"?: string; // 模糊搜索:名称 + }; + type Store = { + "banner_spaces_id": number; // 广告位id,[ref:banner_spaces] + "name": string; // 名称 + "sort"?: number; // 排序:越大越靠前 + "type": string; // 类型,[enum:BannersTypeEnum] + "source": string[]; // 广告资源 + "start_time"?: Date; // 开始时间 + "end_time"?: Date; // 结束时间 + "redirect_type"?: string; // 跳转类型,[enum:BannersRedirectTypeEnum] + "redirect_path"?: string; // 跳转链接 + "app_id"?: string; // 小程序app_id + }; + type Update = { + "id": number; // id + "banner_spaces_id": number; // 广告位id,[ref:banner_spaces] + "name": string; // 名称 + "sort"?: number; // 排序:越大越靠前 + "type": string; // 类型,[enum:BannersTypeEnum] + "source": string[]; // 广告资源 + "start_time"?: Date; // 开始时间 + "end_time"?: Date; // 结束时间 + "redirect_type"?: string; // 跳转类型,[enum:BannersRedirectTypeEnum] + "redirect_path"?: string; // 跳转链接 + "app_id"?: string; // 小程序app_id + }; + type Show = { + "id": number; // id + }; + type Delete = { + "id": number; // id + }; + } + } namespace Bill { namespace HouseBills { type List = { @@ -366,6 +435,8 @@ declare namespace ApiTypes { type Login = { "username": string; // 用户名 "password": string; // 密码 + "captcha": string; // 验证码 + "captcha_key": string; // 验证码key }; type ChangePassword = { "old_password": string; // 老密码 diff --git a/src/gen/Apis.ts b/src/gen/Apis.ts index c5816da..ea877c0 100644 --- a/src/gen/Apis.ts +++ b/src/gen/Apis.ts @@ -30,6 +30,9 @@ export const Apis = { MoveOut(data: ApiTypes.Archive.HouseRegisters.MoveOut): Promise { return request('admin/archive/house_registers/move_out', { data }); }, + MoveIn(data: ApiTypes.Archive.HouseRegisters.MoveIn): Promise { + return request('admin/archive/house_registers/move_in', { data }); + }, RemoveOwner(data: ApiTypes.Archive.HouseRegisters.RemoveOwner): Promise { return request('admin/archive/house_registers/remove_owner', { data }); }, @@ -144,6 +147,45 @@ export const Apis = { }, }, }, + Banner: { + BannerSpaces: { + List(data?: ApiTypes.Banner.BannerSpaces.List): Promise { + return request('admin/banner/banner_spaces/list', { data }); + }, + Store(data: ApiTypes.Banner.BannerSpaces.Store): Promise { + return request('admin/banner/banner_spaces/store', { data }); + }, + Update(data: ApiTypes.Banner.BannerSpaces.Update): Promise { + return request('admin/banner/banner_spaces/update', { data }); + }, + Show(data: ApiTypes.Banner.BannerSpaces.Show): Promise { + return request('admin/banner/banner_spaces/show', { data }); + }, + Delete(data: ApiTypes.Banner.BannerSpaces.Delete): Promise { + return request('admin/banner/banner_spaces/delete', { data }); + }, + Select(data?: ApiTypes.Banner.BannerSpaces.Select): Promise { + return request('admin/banner/banner_spaces/select', { data }); + }, + }, + Banners: { + List(data?: ApiTypes.Banner.Banners.List): Promise { + return request('admin/banner/banners/list', { data }); + }, + Store(data: ApiTypes.Banner.Banners.Store): Promise { + return request('admin/banner/banners/store', { data }); + }, + Update(data: ApiTypes.Banner.Banners.Update): Promise { + return request('admin/banner/banners/update', { data }); + }, + Show(data: ApiTypes.Banner.Banners.Show): Promise { + return request('admin/banner/banners/show', { data }); + }, + Delete(data: ApiTypes.Banner.Banners.Delete): Promise { + return request('admin/banner/banners/delete', { data }); + }, + }, + }, Bill: { HouseBills: { List(data?: ApiTypes.Bill.HouseBills.List): Promise { diff --git a/src/gen/Enums.ts b/src/gen/Enums.ts index 121c34f..271f3dc 100644 --- a/src/gen/Enums.ts +++ b/src/gen/Enums.ts @@ -1,398 +1,321 @@ // AssetHousesOrientationEnum -export const AssetHousesOrientationEnum = { - East: { text: '东', color: '#007bff', value: 'East' }, - South: { text: '南', color: '#28a745', value: 'South' }, - West: { text: '西', color: '#ffc107', value: 'West' }, - North: { text: '北', color: '#dc3545', value: 'North' }, - Southeast: { text: '东南', color: '#20c997', value: 'Southeast' }, - Northeast: { text: '东北', color: '#6f42c1', value: 'Northeast' }, - Southwest: { text: '西南', color: '#fd7e14', value: 'Southwest' }, - Northwest: { text: '西北', color: '#17a2b8', value: 'Northwest' }, - EastWest: { text: '东西', color: '#6610f2', value: 'EastWest' }, - SouthNorth: { text: '南北', color: '#e83e8c', value: 'SouthNorth' }, +export const AssetHousesOrientationEnum= { + 'East': {"text":"东","color":"#007bff","value":"East"}, + 'South': {"text":"南","color":"#28a745","value":"South"}, + 'West': {"text":"西","color":"#ffc107","value":"West"}, + 'North': {"text":"北","color":"#dc3545","value":"North"}, + 'Southeast': {"text":"东南","color":"#20c997","value":"Southeast"}, + 'Northeast': {"text":"东北","color":"#6f42c1","value":"Northeast"}, + 'Southwest': {"text":"西南","color":"#fd7e14","value":"Southwest"}, + 'Northwest': {"text":"西北","color":"#17a2b8","value":"Northwest"}, + 'EastWest': {"text":"东西","color":"#6610f2","value":"EastWest"}, + 'SouthNorth': {"text":"南北","color":"#e83e8c","value":"SouthNorth"}, }; // AssetHousesOwnershipTypeEnum -export const AssetHousesOwnershipTypeEnum = { - CommodityHousing: { - text: '商品房', - color: '#007bff', - value: 'CommodityHousing', - }, - FundedHousing: { text: '集资房', color: '#28a745', value: 'FundedHousing' }, - MilitaryHousing: { - text: '军产房', - color: '#17a2b8', - value: 'MilitaryHousing', - }, - AffordableHousing: { - text: '保障房', - color: '#ffc107', - value: 'AffordableHousing', - }, - RuralHousing: { text: '农民房', color: '#6f42c1', value: 'RuralHousing' }, - CommercialOffice: { - text: '商业写字楼', - color: '#fd7e14', - value: 'CommercialOffice', - }, - CommercialComplex: { - text: '商业综合体', - color: '#dc3545', - value: 'CommercialComplex', - }, - ResettlementHousing: { - text: '回迁房', - color: '#20c997', - value: 'ResettlementHousing', - }, +export const AssetHousesOwnershipTypeEnum= { + 'CommodityHousing': {"text":"商品房","color":"#007bff","value":"CommodityHousing"}, + 'FundedHousing': {"text":"集资房","color":"#28a745","value":"FundedHousing"}, + 'MilitaryHousing': {"text":"军产房","color":"#17a2b8","value":"MilitaryHousing"}, + 'AffordableHousing': {"text":"保障房","color":"#ffc107","value":"AffordableHousing"}, + 'RuralHousing': {"text":"农民房","color":"#6f42c1","value":"RuralHousing"}, + 'CommercialOffice': {"text":"商业写字楼","color":"#fd7e14","value":"CommercialOffice"}, + 'CommercialComplex': {"text":"商业综合体","color":"#dc3545","value":"CommercialComplex"}, + 'ResettlementHousing': {"text":"回迁房","color":"#20c997","value":"ResettlementHousing"}, +}; + +// AssetHousesPropertyOwnershipEnum +export const AssetHousesPropertyOwnershipEnum= { + 'Individual': {"text":"个人","color":"#2db7f5","value":"Individual"}, + 'Enterprise': {"text":"企业","color":"#87d068","value":"Enterprise"}, + 'Developer': {"text":"开发商","color":"#fa8c16","value":"Developer"}, + 'Government': {"text":"政府","color":"#f5222d","value":"Government"}, }; // AssetHousesStatusEnum -export const AssetHousesStatusEnum = { - Unsold: { text: '未售', color: '#6c757d', value: 'Unsold' }, - SoldNotDelivered: { - text: '已售未交房', - color: '#ffc107', - value: 'SoldNotDelivered', - }, - SelfOccupied: { text: '自住', color: '#28a745', value: 'SelfOccupied' }, - Rented: { text: '出租', color: '#007bff', value: 'Rented' }, - Vacant: { text: '空置', color: '#dc3545', value: 'Vacant' }, +export const AssetHousesStatusEnum= { + 'Unsold': {"text":"未售","color":"#6c757d","value":"Unsold"}, + 'SoldNotDelivered': {"text":"已售未交房","color":"#ffc107","value":"SoldNotDelivered"}, + 'SelfOccupied': {"text":"自住","color":"#28a745","value":"SelfOccupied"}, + 'Rented': {"text":"出租","color":"#007bff","value":"Rented"}, + 'Vacant': {"text":"空置","color":"#dc3545","value":"Vacant"}, }; // AssetHousesUsageEnum -export const AssetHousesUsageEnum = { - Residence: { text: '住宅', color: '#007bff', value: 'Residence' }, - Apartment: { text: '公寓', color: '#28a745', value: 'Apartment' }, - Villa: { text: '别墅', color: '#17a2b8', value: 'Villa' }, - Shop: { text: '商铺', color: '#ffc107', value: 'Shop' }, - ParkingSpace: { text: '车位', color: '#6c757d', value: 'ParkingSpace' }, - Office: { text: '写字楼', color: '#6610f2', value: 'Office' }, - Clubhouse: { text: '会所', color: '#fd7e14', value: 'Clubhouse' }, - PropertyRoom: { text: '物业用房', color: '#dc3545', value: 'PropertyRoom' }, +export const AssetHousesUsageEnum= { + 'Residence': {"text":"住宅","color":"#007bff","value":"Residence"}, + 'Apartment': {"text":"公寓","color":"#28a745","value":"Apartment"}, + 'Villa': {"text":"别墅","color":"#17a2b8","value":"Villa"}, + 'Shop': {"text":"商铺","color":"#ffc107","value":"Shop"}, + 'ParkingSpace': {"text":"车位","color":"#6c757d","value":"ParkingSpace"}, + 'Office': {"text":"写字楼","color":"#6610f2","value":"Office"}, + 'Clubhouse': {"text":"会所","color":"#fd7e14","value":"Clubhouse"}, + 'PropertyRoom': {"text":"物业用房","color":"#dc3545","value":"PropertyRoom"}, }; // AssetProjectsChargeEnum -export const AssetProjectsChargeEnum = { - Contract: { text: '包干制', color: '#007bff', value: 'Contract' }, - Commission: { text: '酬金制', color: '#28a745', value: 'Commission' }, +export const AssetProjectsChargeEnum= { + 'Contract': {"text":"包干制","color":"#007bff","value":"Contract"}, + 'Commission': {"text":"酬金制","color":"#28a745","value":"Commission"}, }; // AssetProjectsEntrustTypeEnum -export const AssetProjectsEntrustTypeEnum = { - DeveloperJointEntrust: { - text: '开发商全委', - color: '#007bff', - value: 'DeveloperJointEntrust', - }, - OwnersFullEntrust: { - text: '业委会全委', - color: '#28a745', - value: 'OwnersFullEntrust', - }, - GovernmentFullEntrust: { - text: '政府类全委', - color: '#ffc107', - value: 'GovernmentFullEntrust', - }, +export const AssetProjectsEntrustTypeEnum= { + 'DeveloperJointEntrust': {"text":"开发商全委","color":"#007bff","value":"DeveloperJointEntrust"}, + 'OwnersFullEntrust': {"text":"业委会全委","color":"#28a745","value":"OwnersFullEntrust"}, + 'GovernmentFullEntrust': {"text":"政府类全委","color":"#ffc107","value":"GovernmentFullEntrust"}, }; // AssetProjectsPropertyTypeEnum -export const AssetProjectsPropertyTypeEnum = { - Residence: { text: '住宅', color: '#ff0000', value: 'Residence' }, - Commercial: { text: '商业', color: '#ff6600', value: 'Commercial' }, - Office: { text: '办公', color: '#ffcc00', value: 'Office' }, - IndustrialPark: { text: '产业园', color: '#00cc66', value: 'IndustrialPark' }, - Complex: { text: '综合体', color: '#0099ff', value: 'Complex' }, - Municipal: { text: '市政设施', color: '#6633cc', value: 'Municipal' }, - Venue: { text: '场馆', color: '#9966ff', value: 'Venue' }, - Education: { text: '教育', color: '#339999', value: 'Education' }, - Medical: { text: '医疗', color: '#cc3366', value: 'Medical' }, +export const AssetProjectsPropertyTypeEnum= { + 'Residence': {"text":"住宅","color":"#ff0000","value":"Residence"}, + 'Commercial': {"text":"商业","color":"#ff6600","value":"Commercial"}, + 'Office': {"text":"办公","color":"#ffcc00","value":"Office"}, + 'IndustrialPark': {"text":"产业园","color":"#00cc66","value":"IndustrialPark"}, + 'Complex': {"text":"综合体","color":"#0099ff","value":"Complex"}, + 'Municipal': {"text":"市政设施","color":"#6633cc","value":"Municipal"}, + 'Venue': {"text":"场馆","color":"#9966ff","value":"Venue"}, + 'Education': {"text":"教育","color":"#339999","value":"Education"}, + 'Medical': {"text":"医疗","color":"#cc3366","value":"Medical"}, }; // AssetProjectsStatusEnum -export const AssetProjectsStatusEnum = { - SignedNotDelivered: { - text: '签约未交付', - color: '#6c757d', - value: 'SignedNotDelivered', - }, - RollingDevelopment: { - text: '滚动开发', - color: '#007bff', - value: 'RollingDevelopment', - }, - ManagedAndClosed: { - text: '在管封园', - color: '#ffc107', - value: 'ManagedAndClosed', - }, - Exited: { text: '退出', color: '#dc3545', value: 'Exited' }, +export const AssetProjectsStatusEnum= { + 'SignedNotDelivered': {"text":"签约未交付","color":"#6c757d","value":"SignedNotDelivered"}, + 'RollingDevelopment': {"text":"滚动开发","color":"#007bff","value":"RollingDevelopment"}, + 'ManagedAndClosed': {"text":"在管封园","color":"#ffc107","value":"ManagedAndClosed"}, + 'Exited': {"text":"退出","color":"#dc3545","value":"Exited"}, }; // AssetUnitsBuildingStructureEnum -export const AssetUnitsBuildingStructureEnum = { - SteelConcrete: { text: '钢混', color: '#007bff', value: 'SteelConcrete' }, - SteelStructure: { text: '钢结构', color: '#28a745', value: 'SteelStructure' }, - BrickConcrete: { text: '砖混', color: '#ffc107', value: 'BrickConcrete' }, - BrickWood: { text: '砖木', color: '#dc3545', value: 'BrickWood' }, +export const AssetUnitsBuildingStructureEnum= { + 'SteelConcrete': {"text":"钢混","color":"#007bff","value":"SteelConcrete"}, + 'SteelStructure': {"text":"钢结构","color":"#28a745","value":"SteelStructure"}, + 'BrickConcrete': {"text":"砖混","color":"#ffc107","value":"BrickConcrete"}, + 'BrickWood': {"text":"砖木","color":"#dc3545","value":"BrickWood"}, }; // AssetUnitsBuildingTypeEnum -export const AssetUnitsBuildingTypeEnum = { - SlabAndTower: { text: '板塔结合', color: '#007bff', value: 'SlabAndTower' }, - Slab: { text: '板楼', color: '#28a745', value: 'Slab' }, - Tower: { text: '塔楼', color: '#ffc107', value: 'Tower' }, +export const AssetUnitsBuildingTypeEnum= { + 'SlabAndTower': {"text":"板塔结合","color":"#007bff","value":"SlabAndTower"}, + 'Slab': {"text":"板楼","color":"#28a745","value":"Slab"}, + 'Tower': {"text":"塔楼","color":"#ffc107","value":"Tower"}, +}; + +// BannerSpacesTypeEnum +export const BannerSpacesTypeEnum= { + 'Popup': {"text":"弹窗","color":"#ff0000","value":"Popup"}, + 'Banner': {"text":"横幅广告","color":"#00ff00","value":"Banner"}, + 'FloatingButton': {"text":"悬浮按钮","color":"#0000ff","value":"FloatingButton"}, +}; + +// BannersRedirectTypeEnum +export const BannersRedirectTypeEnum= { + 'InnerPage': {"text":"跳内页","color":"#ff0000","value":"InnerPage"}, + 'H5': {"text":"跳H5","color":"#00ff00","value":"H5"}, + 'MiniProgramHome': {"text":"跳小程序首屏","color":"#0000ff","value":"MiniProgramHome"}, + 'AnotherMiniProgram': {"text":"跳另一个小程序","color":"#ffa500","value":"AnotherMiniProgram"}, +}; + +// BannersTypeEnum +export const BannersTypeEnum= { + 'Image': {"text":"图片","color":"#ff0000","value":"Image"}, + 'Video': {"text":"视频","color":"#00ff00","value":"Video"}, + 'Text': {"text":"文本","color":"#0000ff","value":"Text"}, }; // 缓存类型 -export const CacheTypeEnum = { - MobilePhoneVerificationCode: { - text: '手机验证码', - color: '#012ab0', - value: 'MobilePhoneVerificationCode', - }, +export const CacheTypeEnum= { + 'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#581810","value":"MobilePhoneVerificationCode"}, }; // CompaniesMerchantTypeEnum -export const CompaniesMerchantTypeEnum = { - PropertyManagement: { - text: '物业公司', - color: '#007bff', - value: 'PropertyManagement', - }, - ServiceProvider: { - text: '服务商', - color: '#28a745', - value: 'ServiceProvider', - }, +export const CompaniesMerchantTypeEnum= { + 'PropertyManagement': {"text":"物业公司","color":"#007bff","value":"PropertyManagement"}, + 'ServiceProvider': {"text":"服务商","color":"#28a745","value":"ServiceProvider"}, }; // CompanyAppsAppTypeEnum -export const CompanyAppsAppTypeEnum = { - MiniProgram: { text: '微信小程序', color: '#3b82f6', value: 'MiniProgram' }, - MpOfficial: { text: '微信公众号', color: '#22c55e', value: 'MpOfficial' }, - WorkWechat: { text: '企业微信', color: '#6366f1', value: 'WorkWechat' }, +export const CompanyAppsAppTypeEnum= { + 'MiniProgram': {"text":"微信小程序","color":"#3b82f6","value":"MiniProgram"}, + 'MpOfficial': {"text":"微信公众号","color":"#22c55e","value":"MpOfficial"}, + 'WorkWechat': {"text":"企业微信","color":"#6366f1","value":"WorkWechat"}, }; // CompanyAppsModuleEnum -export const CompanyAppsModuleEnum = { - Employee: { text: '员工端', color: '#3b82f6', value: 'Employee' }, - Customer: { text: '客户端', color: '#10b981', value: 'Customer' }, +export const CompanyAppsModuleEnum= { + 'Employee': {"text":"员工端","color":"#3b82f6","value":"Employee"}, + 'Customer': {"text":"客户端","color":"#10b981","value":"Customer"}, }; // CompanyReceiptAccountsPayChannelEnum -export const CompanyReceiptAccountsPayChannelEnum = { - WeChat: { text: '微信', color: '#07c160', value: 'WeChat' }, - Alipay: { text: '支付宝', color: '#1677ff', value: 'Alipay' }, - BankTransfer: { text: '银行转账', color: '#6c757d', value: 'BankTransfer' }, - TongLian: { text: '通联支付', color: '#ff9f0a', value: 'TongLian' }, +export const CompanyReceiptAccountsPayChannelEnum= { + 'WeChat': {"text":"微信","color":"#07c160","value":"WeChat"}, + 'Alipay': {"text":"支付宝","color":"#1677ff","value":"Alipay"}, + 'BankTransfer': {"text":"银行转账","color":"#6c757d","value":"BankTransfer"}, + 'TongLian': {"text":"通联支付","color":"#ff9f0a","value":"TongLian"}, }; // CustomerBacklogsStatusEnum -export const CustomerBacklogsStatusEnum = { - Pending: { text: '待办', color: '#faad14', value: 'Pending' }, - Done: { text: '已办', color: '#52c41a', value: 'Done' }, +export const CustomerBacklogsStatusEnum= { + 'Pending': {"text":"待办","color":"#faad14","value":"Pending"}, + 'Done': {"text":"已办","color":"#52c41a","value":"Done"}, }; // CustomerBacklogsTypeEnum -export const CustomerBacklogsTypeEnum = { - RegisterApply: { text: '登记申请', color: '#2db7f5', value: 'RegisterApply' }, - PaymentPending: { - text: '费用待缴', - color: '#faad14', - value: 'PaymentPending', - }, - ContractTodo: { text: '合同待办', color: '#722ed1', value: 'ContractTodo' }, +export const CustomerBacklogsTypeEnum= { + 'RegisterApply': {"text":"登记申请","color":"#2db7f5","value":"RegisterApply"}, + 'PaymentPending': {"text":"费用待缴","color":"#faad14","value":"PaymentPending"}, + 'ContractTodo': {"text":"合同待办","color":"#722ed1","value":"ContractTodo"}, }; // 账单状态枚举 -export const HouseBillsBillStatusEnum = { - PendingPayment: { text: '待支付', color: '#facc15', value: 'PendingPayment' }, - PartiallyPaid: { text: '部分支付', color: '#60a5fa', value: 'PartiallyPaid' }, - Paid: { text: '已支付', color: '#10b981', value: 'Paid' }, - Overdue: { text: '已逾期', color: '#ef4444', value: 'Overdue' }, - Cancelled: { text: '已取消', color: '#9ca3af', value: 'Cancelled' }, +export const HouseBillsBillStatusEnum= { + 'PendingPayment': {"text":"待支付","color":"#facc15","value":"PendingPayment"}, + 'PartiallyPaid': {"text":"部分支付","color":"#60a5fa","value":"PartiallyPaid"}, + 'Paid': {"text":"已支付","color":"#10b981","value":"Paid"}, + 'Overdue': {"text":"已逾期","color":"#ef4444","value":"Overdue"}, + 'Cancelled': {"text":"已取消","color":"#9ca3af","value":"Cancelled"}, }; // 房屋账单类型枚举 -export const HouseBillsTypeEnum = { - PropertyFee: { text: '物业费', color: '#3b82f6', value: 'PropertyFee' }, - MaintenanceFund: { - text: '维修基金', - color: '#10b981', - value: 'MaintenanceFund', - }, - WaterFee: { text: '水费', color: '#06b6d4', value: 'WaterFee' }, - ElectricityFee: { text: '电费', color: '#f59e0b', value: 'ElectricityFee' }, - SharedWaterFee: { - text: '公摊水费', - color: '#8b5cf6', - value: 'SharedWaterFee', - }, - SharedElectricityFee: { - text: '公摊电费', - color: '#ec4899', - value: 'SharedElectricityFee', - }, +export const HouseBillsTypeEnum= { + 'PropertyFee': {"text":"物业费","color":"#3b82f6","value":"PropertyFee"}, + 'MaintenanceFund': {"text":"维修基金","color":"#10b981","value":"MaintenanceFund"}, + 'WaterFee': {"text":"水费","color":"#06b6d4","value":"WaterFee"}, + 'ElectricityFee': {"text":"电费","color":"#f59e0b","value":"ElectricityFee"}, + 'SharedWaterFee': {"text":"公摊水费","color":"#8b5cf6","value":"SharedWaterFee"}, + 'SharedElectricityFee': {"text":"公摊电费","color":"#ec4899","value":"SharedElectricityFee"}, }; // HouseOccupantsCardTypeEnum -export const HouseOccupantsCardTypeEnum = { - MainlandID: { - text: '中国大陆居民身份证', - color: '#2db7f5', - value: 'MainlandID', - }, - HKPermit: { - text: '香港来往大陆通行证(回乡证)', - color: '#fa8c16', - value: 'HKPermit', - }, - MOPermit: { - text: '澳门来往大陆通行证(回乡证)', - color: '#faad14', - value: 'MOPermit', - }, - TWPermit: { - text: '台湾来往大陆通行证(台胞证)', - color: '#87d068', - value: 'TWPermit', - }, - Passport: { text: '护照', color: '#108ee9', value: 'Passport' }, - BusinessLicense: { - text: '营业执照', - color: '#f5222d', - value: 'BusinessLicense', - }, +export const HouseOccupantsCardTypeEnum= { + 'MainlandID': {"text":"中国大陆居民身份证","color":"#2db7f5","value":"MainlandID"}, + 'HKPermit': {"text":"香港来往大陆通行证(回乡证)","color":"#fa8c16","value":"HKPermit"}, + 'MOPermit': {"text":"澳门来往大陆通行证(回乡证)","color":"#faad14","value":"MOPermit"}, + 'TWPermit': {"text":"台湾来往大陆通行证(台胞证)","color":"#87d068","value":"TWPermit"}, + 'Passport': {"text":"护照","color":"#108ee9","value":"Passport"}, + 'BusinessLicense': {"text":"营业执照","color":"#f5222d","value":"BusinessLicense"}, }; // HouseOccupantsHouseRelationEnum -export const HouseOccupantsHouseRelationEnum = { - Owner: { text: '产权人', color: '#2db7f5', value: 'Owner' }, - Resident: { text: '住户', color: '#87d068', value: 'Resident' }, - Tenant: { text: '租客', color: '#fa8c16', value: 'Tenant' }, +export const HouseOccupantsHouseRelationEnum= { + 'Owner': {"text":"产权人","color":"#2db7f5","value":"Owner"}, + 'Resident': {"text":"住户","color":"#87d068","value":"Resident"}, + 'Tenant': {"text":"租客","color":"#fa8c16","value":"Tenant"}, }; // HouseOccupantsRelationWithOwnerEnum -export const HouseOccupantsRelationWithOwnerEnum = { - Self: { text: '本人', color: '#52c41a', value: 'Self' }, - Spouse: { text: '夫妻', color: '#2db7f5', value: 'Spouse' }, - FatherSon: { text: '父子', color: '#faad14', value: 'FatherSon' }, - MotherSon: { text: '母子', color: '#fa8c16', value: 'MotherSon' }, - Children: { text: '子女', color: '#87d068', value: 'Children' }, - ContactPerson: { - text: '指定联系人', - color: '#f5222d', - value: 'ContactPerson', - }, +export const HouseOccupantsRelationWithOwnerEnum= { + 'Self': {"text":"本人","color":"#52c41a","value":"Self"}, + 'Spouse': {"text":"夫妻","color":"#2db7f5","value":"Spouse"}, + 'FatherSon': {"text":"父子","color":"#faad14","value":"FatherSon"}, + 'MotherSon': {"text":"母子","color":"#fa8c16","value":"MotherSon"}, + 'Children': {"text":"子女","color":"#87d068","value":"Children"}, + 'ContactPerson': {"text":"指定联系人","color":"#f5222d","value":"ContactPerson"}, }; // HouseOccupantsStatusEnum -export const HouseOccupantsStatusEnum = { - Normal: { text: '正常', color: '#52c41a', value: 'Normal' }, - Unbound: { text: '已解除', color: '#f5222d', value: 'Unbound' }, +export const HouseOccupantsStatusEnum= { + 'Normal': {"text":"正常","color":"#52c41a","value":"Normal"}, + 'Unbound': {"text":"已解除","color":"#f5222d","value":"Unbound"}, }; // 订单状态枚举 -export const HouseOrdersOrderStatusEnum = { - Pending: { text: '待支付', color: '#facc15', value: 'Pending' }, - Paid: { text: '已支付', color: '#10b981', value: 'Paid' }, - Refunded: { text: '已退款', color: '#60a5fa', value: 'Refunded' }, - Cancelled: { text: '已取消', color: '#9ca3af', value: 'Cancelled' }, - Failed: { text: '支付失败', color: '#ef4444', value: 'Failed' }, +export const HouseOrdersOrderStatusEnum= { + 'Pending': {"text":"待支付","color":"#facc15","value":"Pending"}, + 'Paid': {"text":"已支付","color":"#10b981","value":"Paid"}, + 'Refunded': {"text":"已退款","color":"#60a5fa","value":"Refunded"}, + 'Cancelled': {"text":"已取消","color":"#9ca3af","value":"Cancelled"}, + 'Failed': {"text":"支付失败","color":"#ef4444","value":"Failed"}, }; // HouseOrdersPaymentMethodEnum -export const HouseOrdersPaymentMethodEnum = { - WeChat: { text: '微信', color: '#07c160', value: 'WeChat' }, - Alipay: { text: '支付宝', color: '#1677ff', value: 'Alipay' }, - BankTransfer: { text: '银行转账', color: '#6c757d', value: 'BankTransfer' }, - TongLian: { text: '通联支付', color: '#ff9f0a', value: 'TongLian' }, +export const HouseOrdersPaymentMethodEnum= { + 'WeChat': {"text":"微信","color":"#07c160","value":"WeChat"}, + 'Alipay': {"text":"支付宝","color":"#1677ff","value":"Alipay"}, + 'BankTransfer': {"text":"银行转账","color":"#6c757d","value":"BankTransfer"}, + 'TongLian': {"text":"通联支付","color":"#ff9f0a","value":"TongLian"}, }; // HouseRegistersCustomerTypeEnum -export const HouseRegistersCustomerTypeEnum = { - Individual: { text: '个人客户', color: '#2db7f5', value: 'Individual' }, - Enterprise: { text: '普通企业', color: '#87d068', value: 'Enterprise' }, - Developer: { text: '开发企业', color: '#fa8c16', value: 'Developer' }, - Government: { text: '政府组织', color: '#f5222d', value: 'Government' }, +export const HouseRegistersCustomerTypeEnum= { + 'Individual': {"text":"个人客户","color":"#2db7f5","value":"Individual"}, + 'Enterprise': {"text":"普通企业","color":"#87d068","value":"Enterprise"}, + 'Developer': {"text":"开发企业","color":"#fa8c16","value":"Developer"}, + 'Government': {"text":"政府组织","color":"#f5222d","value":"Government"}, }; // HouseRegistersHouseStatusEnum -export const HouseRegistersHouseStatusEnum = { - SelfOccupied: { text: '自住', color: '#28a745', value: 'SelfOccupied' }, - Rented: { text: '出租', color: '#007bff', value: 'Rented' }, - Vacant: { text: '空置', color: '#dc3545', value: 'Vacant' }, +export const HouseRegistersHouseStatusEnum= { + 'SelfOccupied': {"text":"自住","color":"#28a745","value":"SelfOccupied"}, + 'Rented': {"text":"出租","color":"#007bff","value":"Rented"}, + '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' }, +export const HouseRegistersIdentityTypeEnum= { + 'Owner': {"text":"产权人","color":"#2db7f5","value":"Owner"}, + 'Tenant': {"text":"租客","color":"#87d068","value":"Tenant"}, + 'CoResident': {"text":"同住人(亲属)","color":"#108ee9","value":"CoResident"}, }; // HouseRegistersStatusEnum -export const HouseRegistersStatusEnum = { - Pending: { text: '待审', color: '#faad14', value: 'Pending' }, - Approved: { text: '已审', color: '#52c41a', value: 'Approved' }, - Rejected: { text: '驳回', color: '#f5222d', value: 'Rejected' }, +export const HouseRegistersStatusEnum= { + 'Pending': {"text":"待审","color":"#faad14","value":"Pending"}, + 'Approved': {"text":"已审","color":"#52c41a","value":"Approved"}, + 'Rejected': {"text":"驳回","color":"#f5222d","value":"Rejected"}, }; // HouseRegistersTypeEnum -export const HouseRegistersTypeEnum = { - Delivery: { text: '入户登记', color: '#2db7f5', value: 'Delivery' }, - Transfer: { text: '过户登记', color: '#87d068', value: 'Transfer' }, - AddOccupant: { text: '添加住户', color: '#108ee9', value: 'AddOccupant' }, - MoveOut: { text: '搬离登记', color: '#f50', value: 'MoveOut' }, - MoveIn: { text: '搬入登记', color: '#ffc53d', value: 'MoveIn' }, - RemoveOwner: { text: '减少产权人', color: '#d9363e', value: 'RemoveOwner' }, +export const HouseRegistersTypeEnum= { + 'Delivery': {"text":"入户登记","color":"#2db7f5","value":"Delivery"}, + 'Transfer': {"text":"过户登记","color":"#87d068","value":"Transfer"}, + 'AddOccupant': {"text":"添加住户","color":"#108ee9","value":"AddOccupant"}, + 'MoveOut': {"text":"搬离登记","color":"#f50","value":"MoveOut"}, + 'MoveIn': {"text":"搬入登记","color":"#ffc53d","value":"MoveIn"}, + 'RemoveOwner': {"text":"减少产权人","color":"#d9363e","value":"RemoveOwner"}, }; // HouseRegistersUsagePlanEnum -export const HouseRegistersUsagePlanEnum = { - Permanent: { text: '常住', color: '#52c41a', value: 'Permanent' }, - Vacation: { text: '度假', color: '#faad14', value: 'Vacation' }, - Rental: { text: '出租', color: '#2db7f5', value: 'Rental' }, - Commercial: { text: '商用', color: '#f5222d', value: 'Commercial' }, +export const HouseRegistersUsagePlanEnum= { + 'Permanent': {"text":"常住","color":"#52c41a","value":"Permanent"}, + 'Vacation': {"text":"度假","color":"#faad14","value":"Vacation"}, + 'Rental': {"text":"出租","color":"#2db7f5","value":"Rental"}, + 'Commercial': {"text":"商用","color":"#f5222d","value":"Commercial"}, }; // OrganizationsTypeEnum -export const OrganizationsTypeEnum = { - Group: { text: '集团', color: '#007bff', value: 'Group' }, - Company: { text: '公司', color: '#28a745', value: 'Company' }, - ManagementOffice: { - text: '管理处', - color: '#ffc107', - value: 'ManagementOffice', - }, - Department: { text: '部门', color: '#dc3545', value: 'Department' }, +export const OrganizationsTypeEnum= { + 'Group': {"text":"集团","color":"#007bff","value":"Group"}, + 'Company': {"text":"公司","color":"#28a745","value":"Company"}, + 'ManagementOffice': {"text":"管理处","color":"#ffc107","value":"ManagementOffice"}, + 'Department': {"text":"部门","color":"#dc3545","value":"Department"}, }; // 性别 -export const SexEnum = { - Male: { text: '男', color: '#0000ff', value: 'Male' }, - FeMale: { text: '女', color: '#ff0000', value: 'FeMale' }, +export const SexEnum= { + 'Male': {"text":"男","color":"#0000ff","value":"Male"}, + 'FeMale': {"text":"女","color":"#ff0000","value":"FeMale"}, }; // SysModuleEnum -export const SysModuleEnum = { - Admin: { text: '管理员', color: '#cf1322', value: 'Admin' }, - Customer: { text: '客户', color: '#d4b106', value: 'Customer' }, +export const SysModuleEnum= { + 'Admin': {"text":"管理员","color":"#cf1322","value":"Admin"}, + 'Customer': {"text":"客户","color":"#d4b106","value":"Customer"}, }; // SysPermissionsTypeEnum -export const SysPermissionsTypeEnum = { - Directory: { text: '目录', color: '#6d7e14', value: 'Directory' }, - Page: { text: '页面', color: '#4d9a13', value: 'Page' }, - Button: { text: '按钮', color: '#97224f', value: 'Button' }, +export const SysPermissionsTypeEnum= { + 'Directory': {"text":"目录","color":"#6d7e14","value":"Directory"}, + 'Page': {"text":"页面","color":"#4d9a13","value":"Page"}, + 'Button': {"text":"按钮","color":"#97224f","value":"Button"}, }; // WechatAuthsPlatformEnum -export const WechatAuthsPlatformEnum = { - MiniProgram: { text: '微信小程序', color: '#3b82f6', value: 'MiniProgram' }, - MpOfficial: { text: '微信公众号', color: '#22c55e', value: 'MpOfficial' }, - WorkWechat: { text: '企业微信', color: '#6366f1', value: 'WorkWechat' }, +export const WechatAuthsPlatformEnum= { + 'MiniProgram': {"text":"微信小程序","color":"#3b82f6","value":"MiniProgram"}, + 'MpOfficial': {"text":"微信公众号","color":"#22c55e","value":"MpOfficial"}, + 'WorkWechat': {"text":"企业微信","color":"#6366f1","value":"WorkWechat"}, }; + diff --git a/src/pages/archive/asset_house/$id.tsx b/src/pages/archive/$id.tsx similarity index 59% rename from src/pages/archive/asset_house/$id.tsx rename to src/pages/archive/$id.tsx index b453ef2..3b64adb 100644 --- a/src/pages/archive/asset_house/$id.tsx +++ b/src/pages/archive/$id.tsx @@ -1,23 +1,39 @@ -import { MyPageContainer } from '@/common'; +import { MyPageContainer, usePageTabs } from '@/common'; import { Apis } from '@/gen/Apis'; import { ProCard } from '@ant-design/pro-components'; import { useParams } from '@umijs/max'; import { Tabs } from 'antd'; import { useEffect, useState } from 'react'; import HouseInfo from './components/HouseInfo'; -import OccupantsHistory from './table/OccupantsHistory'; -import OccupantsNow from './table/OccupantsNow'; -import RegistersList from './table/RegistersList'; +import OccupantsHistory from './components/OccupantsHistory'; +import OccupantsNow from './components/OccupantsNow'; +import RegistersList from './components/RegistersList'; -export default function Show({ title = '房屋详情' }) { +export default function Show({ title = '房屋档案' }) { const { id } = useParams<{ id: string }>(); const [data, setShow] = useState({}); + + // 注册标签页 + const { addTab } = usePageTabs({ + tabKey: `asset-house-detail-${id}`, + tabLabel: `${data?.name}档案` || title, + }); + const loadShow = () => { let paramsId: any = { id: id ?? 0 }; Apis.Asset.AssetHouses.Show(paramsId).then((res) => { setShow(res?.data); + // 更新标签页标题 + if (res?.data?.full_name) { + addTab({ + key: `asset-house-detail-${id}`, + label: title, + path: `/archive/${id}`, + }); + } }); }; + useEffect(() => { loadShow(); }, [id]); @@ -27,13 +43,11 @@ export default function Show({ title = '房屋详情' }) { label: '当前客户', key: '1', closable: false, - children: data?.id ? ( + children: ( loadShow()} /> - ) : ( - '' ), }, { @@ -52,9 +66,9 @@ export default function Show({ title = '房屋详情' }) { return ( - - - + + + ); diff --git a/src/pages/archive/asset_house/modals/Transfer.tsx b/src/pages/archive/asset_house/modals/Transfer.tsx deleted file mode 100644 index 27d7ffd..0000000 --- a/src/pages/archive/asset_house/modals/Transfer.tsx +++ /dev/null @@ -1,179 +0,0 @@ -import { - MyBetaModalFormProps, - MyButtons, - MyFormItems, - MyModalFormProps, - rulesHelper, -} from '@/common'; -import { Apis } from '@/gen/Apis'; -import { - HouseOccupantsCardTypeEnum, - HouseRegistersCustomerTypeEnum, - HouseRegistersHouseStatusEnum, - HouseRegistersUsagePlanEnum, -} 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 ( - - {...MyModalFormProps.props} - title={`${props.title}`} - wrapperCol={{ span: 24 }} - width="900px" - form={form} - trigger={ - - } - onOpenChange={(open: any) => { - if (open) { - form.resetFields(); // 清空表单数据 - } - }} - onFinish={async (values) => - Apis.Archive.HouseRegisters.Store({ - ...values, - asset_houses_id: props?.item?.id, - type: 'Transfer', - }) - .then(() => { - props.reload?.(); - message.success(props.title + '成功'); - return true; - }) - .catch(() => false) - } - columns={[ - MyFormItems.EnumRadio({ - key: 'customer_type', - title: '客户类型', - colProps: { span: 12 }, - valueEnum: HouseRegistersCustomerTypeEnum, - }), - MyFormItems.EnumRadio({ - key: 'house_status', - title: '房屋状态', - colProps: { span: 6 }, - valueEnum: HouseRegistersHouseStatusEnum, - formItemProps: { ...rulesHelper.text }, - }), - MyFormItems.EnumSelect({ - key: 'usage_plan', - title: '使用计划', - colProps: { span: 6 }, - valueEnum: HouseRegistersUsagePlanEnum, - }), - { - valueType: 'formList', - dataIndex: 'customer_info', - colProps: { span: 24 }, - fieldProps: { - copyIconProps: false, - creatorButtonProps: { - creatorButtonText: '增加产权人', - style: { color: 'red' }, - danger: true, - }, - itemRender: ( - { listDom, action }: any, - { index }: { index: number }, - ) => { - return ( - - {listDom} - - ); - }, - }, - columns: [ - { - valueType: 'group', - columns: [ - { - title: '姓名', - dataIndex: 'name', - colProps: { span: 12 }, - formItemProps: { ...rulesHelper.text }, - }, - { - title: '手机号', - dataIndex: 'phone', - colProps: { span: 6 }, - fieldProps: { - maxLength: 11, - }, - formItemProps: { ...rulesHelper.text }, - }, - { - title: '备用手机号', - dataIndex: 'reserve_phone', - colProps: { span: 6 }, - fieldProps: { - maxLength: 11, - }, - }, - MyFormItems.EnumSelect({ - key: 'card_type', - title: '证件类型', - colProps: { span: 12 }, - valueEnum: HouseOccupantsCardTypeEnum, - required: true, - }), - { - title: '证件号码', - dataIndex: 'id_card', - colProps: { span: 12 }, - fieldProps: { - maxLength: 18, - }, - formItemProps: { ...rulesHelper.text }, - }, - - // { - // title: '是否在居住中', - // dataIndex: 'is_live_in', - // colProps: { span: 8 }, - // valueType: 'switch', - // }, - { - valueType: 'group', - columns: [ - MyFormItems.UploadImages({ - key: 'card_front_image', - title: '证件正面', - max: 1, - colProps: { span: 4 }, - formItemProps: { ...rulesHelper.text }, - }), - MyFormItems.UploadImages({ - key: 'card_back_image', - title: '证件反面', - max: 1, - colProps: { span: 4 }, - formItemProps: { ...rulesHelper.text }, - }), - ], - }, - ], - }, - ], - }, - MyFormItems.UploadImages({ - key: 'ownership_info', - title: '产权文件', - max: 100, - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.array }, - }), - ]} - /> - ); -} diff --git a/src/pages/archive/asset_house/components/HouseInfo.tsx b/src/pages/archive/components/HouseInfo.tsx similarity index 57% rename from src/pages/archive/asset_house/components/HouseInfo.tsx rename to src/pages/archive/components/HouseInfo.tsx index 001e3ff..5ef33a2 100644 --- a/src/pages/archive/asset_house/components/HouseInfo.tsx +++ b/src/pages/archive/components/HouseInfo.tsx @@ -7,60 +7,77 @@ import { } from '@/gen/Enums'; import { ProCard, ProDescriptions } from '@ant-design/pro-components'; import { Space } from 'antd'; +import ChangeStatus from './modals/ChangeStatus'; export default function info(props: MyBetaModalFormProps) { + const { item } = props; + return ( - + - {props?.item?.full_name} +
    {item?.full_name}
    - - {props?.item?.name} + + + + + + - {props?.item?.floor}层 + {item?.floor}层 + - {props?.item?.built_area}m² + + {item?.built_area}m² + - {props?.item?.inside_area}m² + + {item?.inside_area}m² + - {props?.item?.chargeable_area}m² - - - + + {item?.chargeable_area}m² + + - {props?.item?.room || ''}房{props?.item?.hall || ''}厅 - {props?.item?.bathroom || ''}卫{props?.item?.kitchen || ''}厨 - {props?.item?.balcony || ''}阳台 +
    + {item?.room || 0}房{item?.hall || 0}厅{item?.bathroom || 0}卫 + {item?.kitchen || 0}厨{item?.balcony ? `${item.balcony}阳台` : ''} +
    diff --git a/src/pages/archive/asset_house/table/OccupantsHistory.tsx b/src/pages/archive/components/OccupantsHistory.tsx similarity index 97% rename from src/pages/archive/asset_house/table/OccupantsHistory.tsx rename to src/pages/archive/components/OccupantsHistory.tsx index a98eef3..be63e91 100644 --- a/src/pages/archive/asset_house/table/OccupantsHistory.tsx +++ b/src/pages/archive/components/OccupantsHistory.tsx @@ -8,7 +8,7 @@ import { import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; import { useEffect, useRef } from 'react'; -import OccupantsUpdate from '../modals/OccupantsUpdate'; +import OccupantsUpdate from './modals/OccupantsUpdate'; export default function Index({ ...rest }) { const actionLooks = useRef(); diff --git a/src/pages/archive/asset_house/table/OccupantsNow.tsx b/src/pages/archive/components/OccupantsNow.tsx similarity index 73% rename from src/pages/archive/asset_house/table/OccupantsNow.tsx rename to src/pages/archive/components/OccupantsNow.tsx index ffad891..6d32d0a 100644 --- a/src/pages/archive/asset_house/table/OccupantsNow.tsx +++ b/src/pages/archive/components/OccupantsNow.tsx @@ -8,13 +8,14 @@ import { import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; import { useEffect, useRef } from 'react'; -import AddOccupant from '../modals/AddOccupant'; -import AddOwner from '../modals/AddOwner'; -import MoveIn from '../modals/MoveIn00'; -import MoveOut from '../modals/MoveOut'; -import OccupantShow from '../modals/OccupantShow'; -import OccupantsUpdate from '../modals/OccupantsUpdate'; -import Transfer from '../modals/Transfer'; +import AddOccupant from './modals/AddOccupant'; +import AddRent from './modals/AddRent'; +import MoveIn from './modals/MoveIn'; +import MoveOut from './modals/MoveOut'; +import OccupantShow from './modals/OccupantShow'; +import OccupantsUpdate from './modals/OccupantsUpdate'; +import RemoveOwner from './modals/RemoveOwner'; +import Transfer from './modals/Transfer'; export default function Index({ ...rest }) { const actionLooks = useRef(); @@ -39,11 +40,17 @@ export default function Index({ ...rest }) { ) } toolBarRender={(action) => [ - , + , , - , ]} search={false} columns={[ @@ -81,19 +82,18 @@ export default function Index({ ...rest }) { title: '电话', dataIndex: 'phone', }, - - { - title: '是否入住', - dataIndex: 'is_live_in', - render(_, record) { - return `${record?.is_live_in ? '是' : '-'} `; - }, - }, + // { + // title: '是否入住', + // dataIndex: 'is_live_in', + // render(_, record) { + // return `${record?.is_live_in ? '是' : '-'} `; + // }, + // }, { title: '入住日期', dataIndex: 'is_live_in', render(_, record) { - return `${record?.move_in_date || '-'}`; + return `${record?.move_in_date || '未入住'}`; }, }, MyColumns.EnumTag({ @@ -107,22 +107,14 @@ export default function Index({ ...rest }) { render: (_, item: any, index, action) => ( - {item?.house_relation !== 'Owner' && ( - - )} + {!item?.is_live_in && ( )} {item?.move_in_date && ( )} - {/* - Apis.Archive.HouseOccupants.Delete({ id: item.id }).then( - () => action?.reload(), - ) - } - /> */} + ), }), diff --git a/src/pages/archive/asset_house/table/RegistersList.tsx b/src/pages/archive/components/RegistersList.tsx similarity index 71% rename from src/pages/archive/asset_house/table/RegistersList.tsx rename to src/pages/archive/components/RegistersList.tsx index 4aeca5b..8aa8e35 100644 --- a/src/pages/archive/asset_house/table/RegistersList.tsx +++ b/src/pages/archive/components/RegistersList.tsx @@ -4,7 +4,7 @@ import { HouseRegistersStatusEnum, HouseRegistersTypeEnum } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; import { useEffect, useRef } from 'react'; -import RegistersShow from '../modals/RegistersShow'; +import RegistersShow from './modals/RegistersShow'; export default function Index({ ...rest }) { const actionLooks = useRef(); @@ -22,38 +22,19 @@ export default function Index({ ...rest }) { { ...params, asset_houses_id: rest.item?.asset_houses_id, - // status: 'Approved', }, sort, Apis.Archive.HouseRegisters.List, ) } - // toolBarRender={(action) => [ - // , - // ]} search={false} columns={[ MyColumns.ID(), - - // { - // title: '房屋', - // dataIndex: ['asset_house', 'full_name'], - // }, - MyColumns.EnumTag({ - title: '类型', - dataIndex: 'type', - valueEnum: HouseRegistersTypeEnum, - }), { title: '客户信息', render(_, record) { return ( - record?.customer_info.map((res: any) => res?.name).join(';') || + record?.customer_info?.map((res: any) => res?.name).join(';') || '-' ); // 无数据时显示 - }, @@ -61,15 +42,36 @@ export default function Index({ ...rest }) { width: 200, }, MyColumns.EnumTag({ - title: '登记状态', + title: '类型', + dataIndex: 'type', + valueEnum: HouseRegistersTypeEnum, + }), + MyColumns.EnumTag({ + title: '状态', dataIndex: 'status', valueEnum: HouseRegistersStatusEnum, }), - MyColumns.UpdatedAt(), + + { + title: '登记时间', + dataIndex: 'created_at', + valueType: 'dateTime', + search: false, + }, + { + title: '更新时间', + dataIndex: 'updated_at', + valueType: 'dateTime', + search: false, + }, MyColumns.Option({ render: (_, item: any, index, action) => ( - + ), }), diff --git a/src/pages/archive/asset_house/modals/AddOccupant.tsx b/src/pages/archive/components/modals/AddOccupant.tsx similarity index 70% rename from src/pages/archive/asset_house/modals/AddOccupant.tsx rename to src/pages/archive/components/modals/AddOccupant.tsx index a9c1198..8f5c430 100644 --- a/src/pages/archive/asset_house/modals/AddOccupant.tsx +++ b/src/pages/archive/components/modals/AddOccupant.tsx @@ -21,11 +21,12 @@ export default function Create(props: MyBetaModalFormProps) { {...MyModalFormProps.props} title={`${props.title}`} wrapperCol={{ span: 24 }} - width="900px" - form={form} + width="800px" trigger={ } + key={new Date().getTime()} + form={form} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 @@ -53,8 +54,6 @@ export default function Create(props: MyBetaModalFormProps) { copyIconProps: false, creatorButtonProps: { creatorButtonText: '添加住户', - style: { color: 'red' }, - danger: true, }, itemRender: ( { listDom, action }: any, @@ -63,7 +62,7 @@ export default function Create(props: MyBetaModalFormProps) { return ( { - 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; - delete obj.ContactPerson; - return obj; - }, - required: true, - }), - ] - : [ - MyFormItems.EnumRadio({ - key: 'relation_with_owner', - title: '关系标记', - colProps: { span: 18 }, - // valueEnum: HouseOccupantsRelationWithOwnerEnum, - valueEnum: () => { - let obj: any = JSON.parse( - JSON.stringify( - HouseOccupantsRelationWithOwnerEnum, - ), - ); - delete obj.ContactPerson; - return obj; - }, - required: true, - }), - ]; - }, - }, + MyFormItems.EnumRadio({ + key: 'relation_with_owner', + title: '关系标记', + valueEnum: HouseOccupantsRelationWithOwnerEnum, + colProps: { span: 18 }, + // valueEnum: () => { + // let obj: any = JSON.parse( + // JSON.stringify(HouseOccupantsRelationWithOwnerEnum), + // ); + // delete obj.Self; + // return obj; + // }, + required: true, + }), { title: '姓名', @@ -147,7 +117,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { maxLength: 11, }, - formItemProps: { ...rulesHelper.text }, + formItemProps: { ...rulesHelper.phone }, }, MyFormItems.EnumSelect({ key: 'card_type', @@ -172,15 +142,17 @@ export default function Create(props: MyBetaModalFormProps) { MyFormItems.UploadImages({ key: 'card_front_image', title: '证件正面', + uploadType: 'file', max: 1, - colProps: { span: 4 }, + colProps: { span: 6 }, formItemProps: { ...rulesHelper.text }, }), MyFormItems.UploadImages({ key: 'card_back_image', title: '证件反面', + uploadType: 'file', max: 1, - colProps: { span: 8 }, + colProps: { span: 6 }, formItemProps: { ...rulesHelper.text }, }), { diff --git a/src/pages/archive/asset_house/modals/AddOwner.tsx b/src/pages/archive/components/modals/AddRent.tsx similarity index 76% rename from src/pages/archive/asset_house/modals/AddOwner.tsx rename to src/pages/archive/components/modals/AddRent.tsx index 685c14f..65a87df 100644 --- a/src/pages/archive/asset_house/modals/AddOwner.tsx +++ b/src/pages/archive/components/modals/AddRent.tsx @@ -9,6 +9,7 @@ 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'; @@ -21,28 +22,22 @@ export default function Create(props: MyBetaModalFormProps) { title={`${props.title}`} wrapperCol={{ span: 24 }} width="900px" - form={form} trigger={ - + } + key={new Date().getTime()} + form={form} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 } }} - onFinish={async (values: any) => + onFinish={async (values) => Apis.Archive.HouseRegisters.Store({ ...values, - asset_houses_id: props?.item?.asset_houses_id, - type: 'Delivery', - house_status: props?.item?.status, - customer_info: values.customer_info?.map((res: any) => { - return { - ...res, - house_relation: 'Owner', - relation_with_owner: 'Self', - }; - }), + asset_houses_id: props?.item?.id, + house_status: 'Rented', + type: 'AddOccupant', }) .then(() => { props.reload?.(); @@ -59,9 +54,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { copyIconProps: false, creatorButtonProps: { - creatorButtonText: '增加产权人', - style: { color: 'red' }, - danger: true, + creatorButtonText: '添加租客', }, itemRender: ( { listDom, action }: any, @@ -70,8 +63,8 @@ export default function Create(props: MyBetaModalFormProps) { return ( @@ -84,20 +77,42 @@ export default function Create(props: MyBetaModalFormProps) { { 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: 5 }, + colProps: { span: 6 }, formItemProps: { ...rulesHelper.text }, }, { title: '手机号', dataIndex: 'phone', - colProps: { span: 5 }, + colProps: { span: 6 }, fieldProps: { maxLength: 11, }, - formItemProps: { ...rulesHelper.phone }, + formItemProps: { ...rulesHelper.text }, }, MyFormItems.EnumSelect({ key: 'card_type', @@ -109,37 +124,30 @@ export default function Create(props: MyBetaModalFormProps) { { title: '证件号码', dataIndex: 'id_card', - colProps: { span: 8 }, + colProps: { span: 6 }, fieldProps: { maxLength: 18, }, formItemProps: { ...rulesHelper.text }, }, - MyFormItems.EnumRadio({ - key: 'house_relation', - title: '住户类型', - colProps: { span: 6 }, - valueEnum: HouseOccupantsHouseRelationEnum, - fieldProps: { - defaultValue: 'Owner', - }, - hideInForm: true, - }), + { valueType: 'group', columns: [ MyFormItems.UploadImages({ key: 'card_front_image', title: '证件正面', + uploadType: 'file', max: 1, - colProps: { span: 4 }, + colProps: { span: 6 }, formItemProps: { ...rulesHelper.text }, }), MyFormItems.UploadImages({ key: 'card_back_image', title: '证件反面', + uploadType: 'file', max: 1, - colProps: { span: 8 }, + colProps: { span: 6 }, formItemProps: { ...rulesHelper.text }, }), { diff --git a/src/pages/archive/components/modals/ChangeStatus.tsx b/src/pages/archive/components/modals/ChangeStatus.tsx new file mode 100644 index 0000000..6002b53 --- /dev/null +++ b/src/pages/archive/components/modals/ChangeStatus.tsx @@ -0,0 +1,76 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { AssetHousesStatusEnum } 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 ( + + {...MyModalFormProps.props} + title={props.title} + wrapperCol={{ span: 24 }} + width="380px" + trigger={ + + } + form={form} + key={new Date().getTime()} + onOpenChange={(open: any) => { + if (open) { + form.setFieldsValue(props?.item); // 编辑赋值 + } + }} + onFinish={async (values) => + Apis.Asset.AssetHouses.Update({ + ...values, + id: props?.item?.id, + asset_projects_id: props?.item?.asset_projects_id, + asset_buildings_id: props?.item?.asset_buildings_id, + asset_units_id: props?.item?.asset_units_id, + name: props?.item?.name, + }) + .then(() => { + props.reload?.(); + message.success('房屋编辑成功'); + return true; + }) + .catch(() => false) + } + columns={[ + // MyFormItems.EnumRadio({ + // key: 'status', + // title: '房屋状态', + // colProps: { span: 6 }, + // // valueEnum: AssetHousesStatusEnum, + // // required: true, + // valueEnum: () => { + // let obj: any = JSON.parse(JSON.stringify(AssetHousesStatusEnum)); + // delete obj.SelfOccupied; + // delete obj.Rented; + // delete obj.Vacant; + // return obj; + // }, + // }), + MyFormItems.EnumRadio({ + key: 'status', + title: '请选择新的房屋状态', + colProps: { span: 24 }, + // 删除当前状态 + valueEnum: () => { + let obj: any = JSON.parse(JSON.stringify(AssetHousesStatusEnum)); + delete obj[props.item?.status]; + return obj; + }, + required: true, + }), + ]} + /> + ); +} diff --git a/src/pages/archive/asset_house/modals/MoveIn00.tsx b/src/pages/archive/components/modals/MoveIn.tsx similarity index 68% rename from src/pages/archive/asset_house/modals/MoveIn00.tsx rename to src/pages/archive/components/modals/MoveIn.tsx index 3f5f66f..6a053d1 100644 --- a/src/pages/archive/asset_house/modals/MoveIn00.tsx +++ b/src/pages/archive/components/modals/MoveIn.tsx @@ -8,30 +8,23 @@ import { Apis } from '@/gen/Apis'; import { BetaSchemaForm } from '@ant-design/pro-components'; import { Form, message } from 'antd'; -export default function MoveIn(props: MyBetaModalFormProps) { +export default function MoveOut(props: MyBetaModalFormProps) { const [form] = Form.useForm(); return ( - + {...MyModalFormProps.props} - title={`添加${props.title}`} + title={`设置${props.title}`} wrapperCol={{ span: 24 }} width="500px" - form={form} - onOpenChange={(open: any) => { - if (open && props.item) { - form.setFieldsValue(props.item); - } - }} trigger={ } + key={new Date().getTime()} + form={form} onFinish={async (values) => - Apis.Archive.HouseOccupants.Update({ + Apis.Archive.HouseRegisters.MoveIn({ ...values, - id: props?.item?.id ?? 0, - is_live_in: 1, - name: props?.item?.name, - phone: props?.item?.phone, + house_occupants_id: props?.item?.id, }) .then(() => { props.reload?.(); @@ -47,13 +40,19 @@ export default function MoveIn(props: MyBetaModalFormProps) { dataIndex: 'move_in_date', colProps: { span: 24 }, fieldProps: { - maxLength: 11, style: { width: '100%', }, }, formItemProps: { ...rulesHelper.text }, }, + { + title: '入住原因', + valueType: 'textarea', + dataIndex: 'unbound_reason', + colProps: { span: 24 }, + // formItemProps: { ...rulesHelper.text }, + }, ]} /> ); diff --git a/src/pages/archive/asset_house/modals/MoveOut.tsx b/src/pages/archive/components/modals/MoveOut.tsx similarity index 100% rename from src/pages/archive/asset_house/modals/MoveOut.tsx rename to src/pages/archive/components/modals/MoveOut.tsx diff --git a/src/pages/archive/asset_house/modals/OccupantShow.tsx b/src/pages/archive/components/modals/OccupantShow.tsx similarity index 95% rename from src/pages/archive/asset_house/modals/OccupantShow.tsx rename to src/pages/archive/components/modals/OccupantShow.tsx index 39592fa..ce07550 100644 --- a/src/pages/archive/asset_house/modals/OccupantShow.tsx +++ b/src/pages/archive/components/modals/OccupantShow.tsx @@ -13,7 +13,7 @@ export default function OccupantShow(props: MyBetaModalFormProps) { return ( @@ -65,8 +65,8 @@ export default function OccupantShow(props: MyBetaModalFormProps) { (res: any, index: number) => { return ( @@ -79,8 +79,8 @@ export default function OccupantShow(props: MyBetaModalFormProps) { (res: any, index: number) => { return ( diff --git a/src/pages/archive/asset_house/modals/OccupantsUpdate.tsx b/src/pages/archive/components/modals/OccupantsUpdate.tsx similarity index 99% rename from src/pages/archive/asset_house/modals/OccupantsUpdate.tsx rename to src/pages/archive/components/modals/OccupantsUpdate.tsx index 88d8bcc..4d0bfda 100644 --- a/src/pages/archive/asset_house/modals/OccupantsUpdate.tsx +++ b/src/pages/archive/components/modals/OccupantsUpdate.tsx @@ -19,11 +19,12 @@ export default function Update(props: MyBetaModalFormProps) { return ( {...MyModalFormProps.props} - form={form} title={`编辑`} wrapperCol={{ span: 24 }} width="600px" trigger={} + key={new Date().getTime()} + form={form} onOpenChange={(open: any) => { if (open) { form.setFieldsValue(props?.item); // 编辑赋值 diff --git a/src/pages/archive/asset_house/modals/RegistersShow.tsx b/src/pages/archive/components/modals/RegistersShow.tsx similarity index 100% rename from src/pages/archive/asset_house/modals/RegistersShow.tsx rename to src/pages/archive/components/modals/RegistersShow.tsx diff --git a/src/pages/archive/components/modals/RemoveOwner.tsx b/src/pages/archive/components/modals/RemoveOwner.tsx new file mode 100644 index 0000000..b48b272 --- /dev/null +++ b/src/pages/archive/components/modals/RemoveOwner.tsx @@ -0,0 +1,36 @@ +import { MyBetaModalFormProps, MyButtons } from '@/common'; +import { Apis } from '@/gen/Apis'; +import { message, Modal } from 'antd'; + +export default function MoveOut(props: MyBetaModalFormProps) { + const handleRemoveClick = () => { + Modal.confirm({ + title: '确认移除', + content: '确定要提交移除申请吗?', + okText: '确定', + cancelText: '取消', + // centered: true, + onOk: async () => { + try { + await Apis.Archive.HouseRegisters.RemoveOwner({ + house_occupants_id: props?.item?.id, + }); + props.reload?.(); + message.success(props.title + '成功'); + } catch (error) { + message.error('操作失败'); + } + }, + }); + }; + + return ( + + ); +} diff --git a/src/pages/archive/asset_house/modals/MoveIn.tsx b/src/pages/archive/components/modals/Transfer.tsx similarity index 74% rename from src/pages/archive/asset_house/modals/MoveIn.tsx rename to src/pages/archive/components/modals/Transfer.tsx index 685c14f..43e2d0e 100644 --- a/src/pages/archive/asset_house/modals/MoveIn.tsx +++ b/src/pages/archive/components/modals/Transfer.tsx @@ -9,6 +9,7 @@ import { Apis } from '@/gen/Apis'; import { HouseOccupantsCardTypeEnum, HouseOccupantsHouseRelationEnum, + HouseRegistersCustomerTypeEnum, } from '@/gen/Enums'; import { BetaSchemaForm, ProCard } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -21,28 +22,21 @@ export default function Create(props: MyBetaModalFormProps) { title={`${props.title}`} wrapperCol={{ span: 24 }} width="900px" - form={form} trigger={ - + } + key={new Date().getTime()} + form={form} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 } }} - onFinish={async (values: any) => + onFinish={async (values) => Apis.Archive.HouseRegisters.Store({ ...values, - asset_houses_id: props?.item?.asset_houses_id, - type: 'Delivery', - house_status: props?.item?.status, - customer_info: values.customer_info?.map((res: any) => { - return { - ...res, - house_relation: 'Owner', - relation_with_owner: 'Self', - }; - }), + asset_houses_id: props?.item?.id, + type: 'Transfer', }) .then(() => { props.reload?.(); @@ -52,6 +46,35 @@ export default function Create(props: MyBetaModalFormProps) { .catch(() => false) } columns={[ + // MyFormItems.EnumRadio({ + // key: 'house_status', + // title: '房屋状态', + // colProps: { span: 12 }, + // valueEnum: HouseRegistersHouseStatusEnum, + // formItemProps: { ...rulesHelper.text }, + // }), + // MyFormItems.EnumRadio({ + // key: 'house_status', + // title: '使用计划', + // colProps: { span: 8 }, + // valueEnum: HouseRegistersUsagePlanEnum, + // formItemProps: { ...rulesHelper.text }, + // }), + MyFormItems.EnumSelect({ + key: 'customer_type', + title: '产权归属', + colProps: { span: 6 }, + valueEnum: HouseRegistersCustomerTypeEnum, + }), + MyFormItems.UploadImages({ + key: 'ownership_info', + title: '产权文件', + tooltip: '上限3张', + uploadType: 'file', + max: 3, + colProps: { span: 18 }, + formItemProps: { ...rulesHelper.array }, + }), { valueType: 'formList', dataIndex: 'customer_info', @@ -59,9 +82,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { copyIconProps: false, creatorButtonProps: { - creatorButtonText: '增加产权人', - style: { color: 'red' }, - danger: true, + creatorButtonText: '添加产权人', }, itemRender: ( { listDom, action }: any, @@ -70,8 +91,8 @@ export default function Create(props: MyBetaModalFormProps) { return ( @@ -85,7 +106,7 @@ export default function Create(props: MyBetaModalFormProps) { valueType: 'group', columns: [ { - title: '姓名', + title: '名称', dataIndex: 'name', colProps: { span: 5 }, formItemProps: { ...rulesHelper.text }, @@ -131,19 +152,19 @@ export default function Create(props: MyBetaModalFormProps) { MyFormItems.UploadImages({ key: 'card_front_image', title: '证件正面', + uploadType: 'file', max: 1, - colProps: { span: 4 }, - formItemProps: { ...rulesHelper.text }, + colProps: { span: 6 }, }), MyFormItems.UploadImages({ key: 'card_back_image', title: '证件反面', + uploadType: 'file', max: 1, - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, + colProps: { span: 6 }, }), { - title: '是否入住', + title: '是否办理入住', dataIndex: 'is_live_in', colProps: { span: 6 }, valueType: 'switch', diff --git a/src/pages/archive/house_registers/$id.tsx b/src/pages/archive/house_registers/$id.tsx deleted file mode 100644 index 7971ec1..0000000 --- a/src/pages/archive/house_registers/$id.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { MyPageContainer } from '@/common'; -import { Apis } from '@/gen/Apis'; -import { ProCard } from '@ant-design/pro-components'; -import { useParams } from '@umijs/max'; -import { Tabs } from 'antd'; -import { useEffect, useState } from 'react'; -import HouseOccupants from './components/HouseOccupants'; -export default function Show({ title = '机构详情' }) { - const { id } = useParams<{ id: string }>(); - const [data, setShow] = useState({}); - - const loadShow = () => { - let paramsId: any = { id: id ?? 0 }; - Apis.Archive.HouseRegisters.Show(paramsId).then((res) => { - setShow(res?.data); - }); - }; - useEffect(() => { - loadShow(); - }, [id]); - - let items = [ - { - label: '入住人', - key: '1', - closable: false, - children: , - }, - ]; - return ( - - - - - - ); -} diff --git a/src/pages/archive/house_registers/components/HouseOccupants.tsx b/src/pages/archive/house_registers/components/HouseOccupants.tsx deleted file mode 100644 index fb23ff0..0000000 --- a/src/pages/archive/house_registers/components/HouseOccupants.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { MyBetaModalFormProps, MyColumns, MyProTableProps } from '@/common'; -import { Apis } from '@/gen/Apis'; -import { - HouseOccupantsCardTypeEnum, - HouseOccupantsHouseRelationEnum, - HouseOccupantsRelationWithOwnerEnum, - HouseOccupantsStatusEnum, -} from '@/gen/Enums'; -import { ProTable } from '@ant-design/pro-components'; - -export default function Index(props: MyBetaModalFormProps) { - return ( - - MyProTableProps.request( - { ...params, asset_houses_id: props.item?.asset_house?.id }, - sort, - Apis.Archive.HouseOccupants.List, - ) - } - columns={[ - MyColumns.ID(), - { - title: '姓名', - dataIndex: 'name', - }, - { - title: '手机号', - dataIndex: 'phone', - }, - MyColumns.EnumTag({ - title: '状态', - dataIndex: 'status', - valueEnum: HouseOccupantsStatusEnum, - search: false, - }), - MyColumns.EnumTag({ - title: '与产权人关系', - dataIndex: 'relation_with_owner', - valueEnum: HouseOccupantsRelationWithOwnerEnum, - search: false, - }), - MyColumns.EnumTag({ - title: '房客关系', - dataIndex: 'house_relation', - valueEnum: HouseOccupantsHouseRelationEnum, - search: false, - }), - MyColumns.EnumTag({ - title: '证件类型', - dataIndex: 'card_type', - valueEnum: HouseOccupantsCardTypeEnum, - search: false, - }), - MyColumns?.Image({ - title: '身份证正面', - dataIndex: 'card_front_image', - }), - MyColumns?.Image({ - title: '身份证正面', - dataIndex: 'card_back_image', - }), - MyColumns.CreatedAt(), - ]} - /> - ); -} diff --git a/src/pages/archive/house_registers/index.tsx b/src/pages/archive/house_registers/index.tsx deleted file mode 100644 index d5371e1..0000000 --- a/src/pages/archive/house_registers/index.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { - MyButtons, - MyColumns, - MyPageContainer, - MyProTableProps, - usePageTabs, -} from '@/common'; -import { Apis } from '@/gen/Apis'; -import { - HouseRegistersCustomerTypeEnum, - HouseRegistersHouseStatusEnum, - HouseRegistersStatusEnum, - HouseRegistersTypeEnum, - HouseRegistersUsagePlanEnum, -} from '@/gen/Enums'; -import { ProTable } from '@ant-design/pro-components'; -import { useNavigate } from '@umijs/max'; -import { Space } from 'antd'; -import OccupantsCreate from './modals/OccupantsCreate'; - -export default function Index({ title = '房屋登记' }) { - const navigate = useNavigate(); - - // 注册当前页面为标签页 - usePageTabs({ - tabKey: 'archive-house-registers', - tabLabel: title, - }); - - return ( - - - MyProTableProps.request( - params, - sort, - Apis.Archive.HouseRegisters.List, - ) - } - toolBarRender={(action) => [ - , - ]} - columns={[ - MyColumns.ID(), - { - title: '房屋', - dataIndex: ['asset_house', 'full_name'], - }, - MyColumns.EnumTag({ - title: '类型', - dataIndex: 'type', - valueEnum: HouseRegistersTypeEnum, - }), - MyColumns.EnumTag({ - title: '状态', - dataIndex: 'status', - valueEnum: HouseRegistersStatusEnum, - }), - MyColumns.EnumTag({ - title: '房屋状态', - dataIndex: 'house_status', - valueEnum: HouseRegistersHouseStatusEnum, - search: false, - }), - MyColumns.EnumTag({ - title: '使用计划', - dataIndex: 'usage_plan', - valueEnum: HouseRegistersUsagePlanEnum, - search: false, - }), - MyColumns.EnumTag({ - title: '客户类型', - dataIndex: 'customer_type', - valueEnum: HouseRegistersCustomerTypeEnum, - search: false, - }), - MyColumns.CreatedAt(), - MyColumns.Option({ - render: (_, item: any, index, action) => ( - - { - navigate(`/archive/house_registers/${item.id}`); - }} - /> - - Apis.Archive.HouseRegisters.Delete({ id: item.id }).then( - () => action?.reload(), - ) - } - /> - - ), - }), - ]} - /> - - ); -} diff --git a/src/pages/archive/house_registers/modals/OccupantsCreate.tsx b/src/pages/archive/house_registers/modals/OccupantsCreate.tsx deleted file mode 100644 index 0d43791..0000000 --- a/src/pages/archive/house_registers/modals/OccupantsCreate.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import { - MyBetaModalFormProps, - MyButtons, - MyFormItems, - MyModalFormProps, - rulesHelper, -} from '@/common'; -import { Selects } from '@/components/Select'; -import { Apis } from '@/gen/Apis'; -import { - HouseOccupantsCardTypeEnum, - HouseOccupantsHouseRelationEnum, - HouseOccupantsRelationWithOwnerEnum, - HouseRegistersCustomerTypeEnum, - HouseRegistersHouseStatusEnum, - HouseRegistersTypeEnum, - HouseRegistersUsagePlanEnum, -} 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 ( - - {...MyModalFormProps.props} - title={`添加${props.title}`} - wrapperCol={{ span: 24 }} - width="900px" - form={form} - trigger={} - onOpenChange={(open: any) => { - if (open) { - form.resetFields(); // 清空表单数据 - } - }} - onFinish={async (values) => - Apis.Archive.HouseRegisters.Store(values) - .then(() => { - props.reload?.(); - message.success(props.title + '成功'); - return true; - }) - .catch(() => false) - } - columns={[ - Selects?.AssetProjects({ - title: '选择项目', - key: 'asset_projects_id', - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }), - { - valueType: 'dependency', - name: ['asset_projects_id'], - columns: ({ asset_projects_id }) => [ - Selects?.AssetHouses({ - title: '选择房屋', - key: 'asset_houses_id', - params: { asset_projects_id: asset_projects_id }, - formItemProps: { ...rulesHelper.text }, - colProps: { span: 8 }, - }), - ], - }, - MyFormItems.EnumRadio({ - key: 'type', - title: '类型', - colProps: { span: 8 }, - valueEnum: HouseRegistersTypeEnum, - required: true, - }), - { - valueType: 'formList', - dataIndex: 'customer_info', - colProps: { span: 24 }, - fieldProps: { - copyIconProps: false, - creatorButtonProps: { - creatorButtonText: '添加客户', - }, - itemRender: ( - { listDom, action }: any, - { index }: { index: number }, - ) => { - return ( - - {listDom} - - ); - }, - }, - columns: [ - { - valueType: 'group', - columns: [ - { - title: '姓名', - dataIndex: 'name', - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }, - { - title: '手机号', - dataIndex: 'phone', - colProps: { span: 8 }, - fieldProps: { - maxLength: 11, - }, - formItemProps: { ...rulesHelper.text }, - }, - MyFormItems.EnumSelect({ - key: 'house_relation', - title: '房客关系', - colProps: { span: 8 }, - valueEnum: HouseOccupantsHouseRelationEnum, - required: true, - }), - - { - title: '客户地址', - dataIndex: 'address', - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }, - { - title: '解除时间', - dataIndex: 'unbound_time', - colProps: { span: 8 }, - valueType: 'date', - fieldProps: { - style: { width: '100%' }, - }, - formItemProps: { ...rulesHelper.text }, - }, - MyFormItems.EnumSelect({ - key: 'relation_with_owner', - title: '与产权人关系', - colProps: { span: 8 }, - valueEnum: HouseOccupantsRelationWithOwnerEnum, - required: true, - }), - MyFormItems.EnumSelect({ - key: 'card_type', - title: '证件类型', - colProps: { span: 8 }, - valueEnum: HouseOccupantsCardTypeEnum, - required: true, - }), - { - title: '证件号码', - dataIndex: 'id_card', - colProps: { span: 8 }, - fieldProps: { - maxLength: 18, - }, - formItemProps: { ...rulesHelper.text }, - }, - { - title: '是否在居住中', - dataIndex: 'is_live_in', - colProps: { span: 8 }, - valueType: 'switch', - }, - { - valueType: 'group', - columns: [ - MyFormItems.UploadImages({ - key: 'card_front_image', - title: '身份证正面', - max: 1, - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }), - MyFormItems.UploadImages({ - key: 'card_back_image', - title: '身份证反面', - max: 1, - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }), - ], - }, - MyFormItems.UploadImages({ - key: 'ownership_info', - title: '产权信息', - max: 100, - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.array }, - }), - ], - }, - ], - }, - - MyFormItems.EnumRadio({ - key: 'customer_type', - title: '客户类型', - colProps: { span: 24 }, - valueEnum: HouseRegistersCustomerTypeEnum, - }), - MyFormItems.EnumRadio({ - key: 'usage_plan', - title: '使用计划', - colProps: { span: 24 }, - valueEnum: HouseRegistersUsagePlanEnum, - }), - // MyFormItems.EnumRadio({ - // key: 'status', - // title: '状态', - // colProps: { span: 24 }, - // valueEnum: HouseRegistersStatusEnum, - // }), - MyFormItems.EnumRadio({ - key: 'house_status', - title: '房屋状态', - colProps: { span: 24 }, - valueEnum: HouseRegistersHouseStatusEnum, - }), - ]} - /> - ); -} diff --git a/src/pages/archive/house_registers/modals/OccupantsUpdate.tsx b/src/pages/archive/house_registers/modals/OccupantsUpdate.tsx deleted file mode 100644 index f109fe1..0000000 --- a/src/pages/archive/house_registers/modals/OccupantsUpdate.tsx +++ /dev/null @@ -1,236 +0,0 @@ -import { - MyBetaModalFormProps, - MyButtons, - MyFormItems, - MyModalFormProps, - rulesHelper, -} from '@/common'; - -import { Selects } from '@/components/Select'; -import { Apis } from '@/gen/Apis'; -import { - HouseOccupantsCardTypeEnum, - HouseOccupantsHouseRelationEnum, - HouseOccupantsRelationWithOwnerEnum, - HouseRegistersCustomerTypeEnum, - HouseRegistersHouseStatusEnum, - HouseRegistersTypeEnum, - HouseRegistersUsagePlanEnum, -} from '@/gen/Enums'; -import { BetaSchemaForm, ProCard } from '@ant-design/pro-components'; -import { Form, message } from 'antd'; -export default function Update(props: MyBetaModalFormProps) { - const [form] = Form.useForm(); - return ( - - {...MyModalFormProps.props} - title={`编辑${props.title}`} - trigger={} - wrapperCol={{ span: 24 }} - width="900px" - form={form} - onOpenChange={(open: any) => { - if (open && props.item) { - form.setFieldsValue({ - ...props.item, - asset_houses_id: props.item?.asset_house?.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={[ - Selects?.AssetProjects({ - title: '选择项目', - key: 'asset_projects_id', - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }), - - { - valueType: 'dependency', - name: ['asset_projects_id'], - columns: ({ asset_projects_id }) => [ - Selects?.AssetHouses({ - title: '选择房屋', - key: 'asset_houses_id', - params: { asset_projects_id: asset_projects_id }, - formItemProps: { ...rulesHelper.text }, - colProps: { span: 8 }, - }), - ], - }, - MyFormItems.EnumRadio({ - key: 'type', - title: '类型', - colProps: { span: 8 }, - valueEnum: HouseRegistersTypeEnum, - required: true, - }), - { - valueType: 'formList', - dataIndex: 'customer_info', - colProps: { span: 24 }, - fieldProps: { - copyIconProps: false, - creatorButtonProps: { - creatorButtonText: '添加客户', - }, - itemRender: ( - { listDom, action }: any, - { index }: { index: number }, - ) => { - return ( - - {listDom} - - ); - }, - }, - columns: [ - { - valueType: 'group', - columns: [ - { - title: '姓名', - dataIndex: 'name', - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }, - { - title: '手机号', - dataIndex: 'phone', - colProps: { span: 8 }, - fieldProps: { - maxLength: 11, - }, - formItemProps: { ...rulesHelper.text }, - }, - MyFormItems.EnumSelect({ - key: 'house_relation', - title: '房客关系', - colProps: { span: 8 }, - valueEnum: HouseOccupantsHouseRelationEnum, - required: true, - }), - - { - title: '客户地址', - dataIndex: 'address', - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }, - { - title: '解除时间', - dataIndex: 'unbound_time', - colProps: { span: 8 }, - valueType: 'date', - fieldProps: { - style: { width: '100%' }, - }, - formItemProps: { ...rulesHelper.text }, - }, - MyFormItems.EnumSelect({ - key: 'relation_with_owner', - title: '与产权人关系', - colProps: { span: 8 }, - valueEnum: HouseOccupantsRelationWithOwnerEnum, - required: true, - }), - MyFormItems.EnumSelect({ - key: 'card_type', - title: '证件类型', - colProps: { span: 8 }, - valueEnum: HouseOccupantsCardTypeEnum, - required: true, - }), - { - title: '证件号码', - dataIndex: 'id_card', - colProps: { span: 8 }, - fieldProps: { - maxLength: 18, - }, - formItemProps: { ...rulesHelper.text }, - }, - { - title: '是否在居住中', - dataIndex: 'is_live_in', - colProps: { span: 8 }, - valueType: 'switch', - }, - { - valueType: 'group', - columns: [ - MyFormItems.UploadImages({ - key: 'card_front_image', - title: '身份证正面', - max: 1, - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }), - MyFormItems.UploadImages({ - key: 'card_back_image', - title: '身份证反面', - max: 1, - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, - }), - ], - }, - MyFormItems.UploadImages({ - key: 'ownership_info', - title: '产权信息', - max: 100, - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.array }, - }), - ], - }, - ], - }, - - MyFormItems.EnumRadio({ - key: 'customer_type', - title: '客户类型', - colProps: { span: 24 }, - valueEnum: HouseRegistersCustomerTypeEnum, - }), - MyFormItems.EnumRadio({ - key: 'usage_plan', - title: '使用计划', - colProps: { span: 24 }, - valueEnum: HouseRegistersUsagePlanEnum, - }), - // MyFormItems.EnumRadio({ - // key: 'status', - // title: '状态', - // colProps: { span: 24 }, - // valueEnum: HouseRegistersStatusEnum, - // }), - MyFormItems.EnumRadio({ - key: 'house_status', - title: '房屋状态', - colProps: { span: 24 }, - valueEnum: HouseRegistersHouseStatusEnum, - }), - ]} - /> - ); -} diff --git a/src/pages/archive/asset_house/index.tsx b/src/pages/archive/index.tsx similarity index 57% rename from src/pages/archive/asset_house/index.tsx rename to src/pages/archive/index.tsx index df71181..b98a51d 100644 --- a/src/pages/archive/asset_house/index.tsx +++ b/src/pages/archive/index.tsx @@ -13,7 +13,7 @@ import { } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { useNavigate } from '@umijs/max'; -import { Space } from 'antd'; +import { Space, Tag } from 'antd'; import Delivery from './modals/Delivery'; export default function Index({ title = '房屋档案' }) { @@ -27,76 +27,15 @@ export default function Index({ title = '房屋档案' }) { MyProTableProps.request(params, sort, Apis.Asset.AssetHouses.List) } columns={[ MyColumns.ID(), - MyColumns.EnumTag({ - title: '产权性质', - dataIndex: 'ownership_type', - valueEnum: AssetHousesOwnershipTypeEnum, - search: false, - }), - MyColumns.EnumTag({ - title: '用途', - dataIndex: 'usage', - valueEnum: AssetHousesUsageEnum, - search: false, - }), { title: '房屋名称', dataIndex: 'full_name', - }, - // { - // title: '楼层', - // dataIndex: 'floor', - // render(_, record) { - // return `${record?.floor}层`; - // }, - // search: false, - // width: 60, - // }, - { - title: '建筑面积', - dataIndex: 'built_area', - render(_, record) { - return `${record?.built_area} m²`; - }, - search: false, - width: 80, - }, - // { - // title: '套内面积', - // dataIndex: 'inside_area', - // render(_, record) { - // return `${record?.inside_area} m²`; - // }, - // search: false, - // width: 80, - // }, - { - title: '计费面积', - dataIndex: 'chargeable_area', - render(_, record) { - return `${record?.chargeable_area} m²`; - }, - search: false, - width: 80, - }, - { - title: '产权人', - render(_, record) { - return ( - record?.house_occupants - ?.filter((res: any) => res?.house_relation !== 'Resident') // 过滤掉 Resident - .map((res: any) => res?.name) - .join(';') || '-' - ); // 无数据时显示 - - }, - search: false, - width: 200, + ellipsis: true, }, MyColumns.EnumTag({ title: '房屋状态', @@ -104,23 +43,94 @@ export default function Index({ title = '房屋档案' }) { valueEnum: AssetHousesStatusEnum, search: false, }), + + MyColumns.EnumTag({ + title: '产权性质', + dataIndex: 'ownership_type', + valueEnum: AssetHousesOwnershipTypeEnum, + }), + MyColumns.EnumTag({ + title: '用途', + dataIndex: 'usage', + valueEnum: AssetHousesUsageEnum, + }), + { + title: '楼层', + dataIndex: 'floor', + render(_, record) { + return `${record?.floor}层`; + }, + search: false, + }, + { + title: '建筑面积', + dataIndex: 'built_area', + render(_, record) { + return `${record?.built_area || ''} m²`; + }, + search: false, + }, + { + title: '产权人/住户', + render(_, record) { + const owners = + record?.house_occupants?.filter( + (res: any) => res?.house_relation === 'Owner', + ) || []; + const residents = + record?.house_occupants?.filter( + (res: any) => res?.house_relation === 'Resident', + ) || []; + + return ( +
    + {owners.length > 0 && ( +
    + 产权人 + {owners.map((owner: any) => owner?.name).join('、')} +
    + )} + {residents.length > 0 && ( +
    + 住户 + {residents + .map((resident: any) => resident?.name) + .join('、')} +
    + )} + {owners.length === 0 && residents.length === 0 && ( + 暂无 + )} +
    + ); + }, + search: false, + }, + MyColumns.Option({ render: (_, item: any, index, action) => ( - {item?.house_occupants?.length !== 0 && ( - { - navigate(`/archive/asset_house/${item.id}`); - }} - /> - )} - {!item?.house_occupants?.length && ( + { + navigate(`/archive/${item.id}`); + }} + /> + {!item?.house_occupants?.length ? ( + ) : ( + { + navigate(`/archive/asset_house/${item.id}`); + }} + /> )} ), diff --git a/src/pages/archive/asset_house/modals/Delivery.tsx b/src/pages/archive/modals/Delivery.tsx similarity index 82% rename from src/pages/archive/asset_house/modals/Delivery.tsx rename to src/pages/archive/modals/Delivery.tsx index 926a648..edcaecc 100644 --- a/src/pages/archive/asset_house/modals/Delivery.tsx +++ b/src/pages/archive/modals/Delivery.tsx @@ -10,7 +10,6 @@ import { HouseOccupantsCardTypeEnum, HouseOccupantsHouseRelationEnum, HouseRegistersCustomerTypeEnum, - HouseRegistersHouseStatusEnum, } from '@/gen/Enums'; import { BetaSchemaForm, ProCard } from '@ant-design/pro-components'; import { Form, message } from 'antd'; @@ -22,11 +21,11 @@ export default function Create(props: MyBetaModalFormProps) { {...MyModalFormProps.props} title={`添加${props.title}`} wrapperCol={{ span: 24 }} - width="900px" - form={form} + width="800px" trigger={ } + form={form} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 @@ -41,6 +40,7 @@ export default function Create(props: MyBetaModalFormProps) { return { ...res, house_relation: 'Owner', + house_status: 'SelfOccupied', relation_with_owner: 'Self', }; }), @@ -53,18 +53,34 @@ export default function Create(props: MyBetaModalFormProps) { .catch(() => false) } columns={[ - MyFormItems.EnumRadio({ + // MyFormItems.EnumRadio({ + // key: 'house_status', + // title: '房屋状态', + // colProps: { span: 12 }, + // valueEnum: HouseRegistersHouseStatusEnum, + // formItemProps: { ...rulesHelper.text }, + // }), + // MyFormItems.EnumRadio({ + // key: 'house_status', + // title: '使用计划', + // colProps: { span: 8 }, + // valueEnum: HouseRegistersUsagePlanEnum, + // formItemProps: { ...rulesHelper.text }, + // }), + MyFormItems.EnumSelect({ key: 'customer_type', - title: '客户类型', - colProps: { span: 12 }, + title: '产权归属', + colProps: { span: 6 }, valueEnum: HouseRegistersCustomerTypeEnum, }), - MyFormItems.EnumRadio({ - key: 'house_status', - title: '房屋状态', - colProps: { span: 6 }, - valueEnum: HouseRegistersHouseStatusEnum, - formItemProps: { ...rulesHelper.text }, + MyFormItems.UploadImages({ + key: 'ownership_info', + title: '产权文件', + tooltip: '上限3张', + uploadType: 'file', + max: 3, + colProps: { span: 18 }, + formItemProps: { ...rulesHelper.array }, }), { valueType: 'formList', @@ -73,9 +89,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { copyIconProps: false, creatorButtonProps: { - creatorButtonText: '增加产权人', - style: { color: 'red' }, - danger: true, + creatorButtonText: '添加产权人', }, itemRender: ( { listDom, action }: any, @@ -84,8 +98,8 @@ export default function Create(props: MyBetaModalFormProps) { return ( @@ -99,7 +113,7 @@ export default function Create(props: MyBetaModalFormProps) { valueType: 'group', columns: [ { - title: '姓名', + title: '名称', dataIndex: 'name', colProps: { span: 5 }, formItemProps: { ...rulesHelper.text }, @@ -145,19 +159,19 @@ export default function Create(props: MyBetaModalFormProps) { MyFormItems.UploadImages({ key: 'card_front_image', title: '证件正面', + uploadType: 'file', max: 1, - colProps: { span: 4 }, - formItemProps: { ...rulesHelper.text }, + colProps: { span: 6 }, }), MyFormItems.UploadImages({ key: 'card_back_image', title: '证件反面', + uploadType: 'file', max: 1, - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, + colProps: { span: 6 }, }), { - title: '是否入住', + title: '是否办理入住', dataIndex: 'is_live_in', colProps: { span: 6 }, valueType: 'switch', @@ -188,13 +202,6 @@ export default function Create(props: MyBetaModalFormProps) { }, ], }, - MyFormItems.UploadImages({ - key: 'ownership_info', - title: '产权文件', - max: 100, - colProps: { span: 24 }, - formItemProps: { ...rulesHelper.array }, - }), ]} /> ); diff --git a/src/pages/asset/asset_projects/$id.tsx b/src/pages/asset/$id.tsx similarity index 70% rename from src/pages/asset/asset_projects/$id.tsx rename to src/pages/asset/$id.tsx index 6649f4a..3b5dc9b 100644 --- a/src/pages/asset/asset_projects/$id.tsx +++ b/src/pages/asset/$id.tsx @@ -1,4 +1,4 @@ -import { MyPageContainer } from '@/common'; +import { MyPageContainer, usePageTabs } from '@/common'; import { Apis } from '@/gen/Apis'; import { ProCard } from '@ant-design/pro-components'; import { useParams } from '@umijs/max'; @@ -8,15 +8,30 @@ import AssetAccounts from './components/AssetAccounts'; import MyAssetBuildings from './components/AssetBuildings'; import AssetGrid from './components/AssetGrid'; import AssetInfo from './components/AssetInfo'; +import Basic from './components/Basic'; -export default function Show({ title = '项目详情' }) { +export default function Show({ title }: { title?: string } = {}) { const { id } = useParams<{ id: string }>(); const [data, setShow] = useState({}); + // 注册当前页面为标签页 + const { addTab } = usePageTabs({ + tabKey: `asset-show-${id}`, + tabLabel: data?.name || title || '资产详情', + }); + const loadShow = () => { let paramsId: any = { id: id ?? 0 }; Apis.Asset.AssetProjects.Show(paramsId).then((res) => { setShow(res?.data); + // 更新标签页名称为API返回的name + if (res?.data?.name) { + addTab({ + key: `asset-show-${id}`, + label: res.data.name, + path: `/asset/${id}`, + }); + } }); }; useEffect(() => { @@ -56,11 +71,8 @@ export default function Show({ title = '项目详情' }) { // }, ]; return ( - - {/* loadShow()} title="项目" />} - /> */} + + loadShow()} /> diff --git a/src/pages/asset/asset_projects/components/AssetBuildings.tsx b/src/pages/asset/asset_projects/components/AssetBuildings.tsx deleted file mode 100644 index 4adb324..0000000 --- a/src/pages/asset/asset_projects/components/AssetBuildings.tsx +++ /dev/null @@ -1,242 +0,0 @@ -import { - MyBetaModalFormProps, - MyButtons, - MyColumns, - MyProTableProps, -} from '@/common'; -import { Apis } from '@/gen/Apis'; -import { AssetHousesUsageEnum } from '@/gen/Enums'; -import { ProCard, ProTable } from '@ant-design/pro-components'; -import { Space } from 'antd'; -import { useRef, useState } from 'react'; -import BuildingsCreate from '../modals/BuildingsCreate'; -import AssetBuildingsUpdate from '../modals/BuildingsUpdate'; -import AssetHousesCreate from '../modals/HousesCreate'; -import HousesShow from '../modals/HousesShow'; -import HousesUpdate from '../modals/HousesUpdate'; -import AssetUnitsCreate from '../modals/UnitsCreate'; -import AssetUnitsUpdate from '../modals/UnitsUpdate'; - -export default function AssetBuildings(props: MyBetaModalFormProps) { - const actionBuildingsRef: any = useRef(); - const actionUnitsRef: any = useRef(); - const actionHousesRef: any = useRef(); - const [selectKey, setSelectkey] = useState({}); - const [selectKeyUnits, setSelectKeyUnits] = useState({}); - return ( - - actionBuildingsRef?.current?.reload()} - title="楼栋" - /> - actionUnitsRef?.current?.reload()} - title="单元" - /> - actionHousesRef?.current?.reload()} - title="房屋" - /> -
    - } - > - - { - console.log(selectKey?.id, 'key', record?.id); - return selectKey?.id === record?.id ? 'ant-table-row-selected' : ''; - }} - onRow={(record: any) => { - return { - onClick: () => { - setSelectkey(record); - setSelectKeyUnits({}); - actionUnitsRef?.current?.reload(); - actionHousesRef?.current?.reload(); - }, - style: { - cursor: 'pointer', - }, - }; - }} - request={async (params, sort) => - MyProTableProps.request( - { ...params, asset_projects_id: props?.item?.id }, - sort, - Apis.Asset.AssetBuildings.List, - ) - } - options={false} - columns={[ - // MyColumns.ID(), - { - title: '楼栋名称', - dataIndex: 'name', - }, - MyColumns.Option({ - render: (_, item: any, index, action) => ( - - - - Apis.Asset.AssetBuildings.Delete({ id: item.id }).then( - () => action?.reload(), - ) - } - /> - - ), - }), - ]} - /> - - {selectKey?.id && ( - - MyProTableProps.request( - { - ...params, - asset_projects_id: props?.item?.id, - asset_buildings_id: selectKey?.id, - }, - sort, - Apis.Asset.AssetUnits.List, - ) - } - rowClassName={(record: any) => { - return selectKeyUnits?.id === record?.id - ? 'ant-table-row-selected' - : ''; - }} - onRow={(record: any) => { - return { - onClick: () => { - setSelectKeyUnits(record); - actionHousesRef?.current?.reload(); - }, - style: { - cursor: 'pointer', - }, - }; - }} - options={false} - columns={[ - // MyColumns.ID(), - { - title: '单元名称', - dataIndex: 'name', - }, - MyColumns.Option({ - render: (_, item: any, index, action) => ( - - - - Apis.Asset.AssetUnits.Delete({ id: item.id }).then(() => - action?.reload(), - ) - } - /> - - ), - }), - ]} - /> - )} - - {selectKeyUnits?.id && ( - - MyProTableProps.request( - { - ...params, - asset_projects_id: props?.item?.id, - asset_buildings_id: selectKey?.id, - asset_units_id: selectKeyUnits?.id, - }, - sort, - Apis.Asset.AssetHouses.List, - ) - } - options={false} - columns={[ - MyColumns.ID(), - MyColumns.EnumTag({ - title: '用途', - dataIndex: 'usage', - valueEnum: AssetHousesUsageEnum, - }), - { - title: '房号', - dataIndex: 'name', - }, - { - title: '楼层', - dataIndex: 'floor', - render(_, record) { - return `${record?.floor}层`; - }, - }, - // MyColumns.EnumTag({ - // title: '产权性质', - // dataIndex: 'ownership_type', - // valueEnum: AssetHousesOwnershipTypeEnum, - // }), - // MyColumns.EnumTag({ - // title: '房屋状态', - // dataIndex: 'status', - // valueEnum: AssetHousesStatusEnum, - // }), - MyColumns.Option({ - render: (_, item: any, index, action) => ( - - - - - - Apis.Asset.AssetBuildings.Delete({ id: item.id }).then( - () => action?.reload(), - ) - } - /> - - ), - }), - ]} - /> - )} - - - ); -} diff --git a/src/pages/asset/asset_projects/components/AssetAccounts.tsx b/src/pages/asset/components/AssetAccounts.tsx similarity index 97% rename from src/pages/asset/asset_projects/components/AssetAccounts.tsx rename to src/pages/asset/components/AssetAccounts.tsx index 0ec99af..4d29893 100644 --- a/src/pages/asset/asset_projects/components/AssetAccounts.tsx +++ b/src/pages/asset/components/AssetAccounts.tsx @@ -7,7 +7,7 @@ import { import { Apis } from '@/gen/Apis'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; -import AssetAccountsSelect from '../modals/AssetAccountsSelect'; +import AssetAccountsSelect from './modals/AssetAccountsSelect'; export default function ReceiptAccounts(props: MyBetaModalFormProps) { return ( diff --git a/src/pages/asset/components/AssetBuildings.tsx b/src/pages/asset/components/AssetBuildings.tsx new file mode 100644 index 0000000..0f6a0d0 --- /dev/null +++ b/src/pages/asset/components/AssetBuildings.tsx @@ -0,0 +1,337 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyColumns, + MyProTableProps, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { AssetHousesUsageEnum } from '@/gen/Enums'; +import { ProCard, ProTable } from '@ant-design/pro-components'; +import { Alert, message, Space, Typography } from 'antd'; +import { useCallback, useRef, useState } from 'react'; +import BuildingsCreate from './modals/BuildingsCreate'; +import AssetBuildingsUpdate from './modals/BuildingsUpdate'; +import HousesCreate from './modals/HousesCreate'; +import HousesShow from './modals/HousesShow'; +import HousesUpdate from './modals/HousesUpdate'; +import AssetUnitsCreate from './modals/UnitsCreate'; +import AssetUnitsUpdate from './modals/UnitsUpdate'; + +const { Title } = Typography; + +interface SelectedBuilding { + id: number; + name: string; +} + +interface SelectedUnit { + id: number; + name: string; +} + +export default function AssetBuildings(props: MyBetaModalFormProps) { + const actionBuildingsRef: any = useRef(); + const actionUnitsRef: any = useRef(); + const actionHousesRef: any = useRef(); + const [selectedBuilding, setSelectedBuilding] = + useState(null); + const [selectedUnit, setSelectedUnit] = useState(null); + + // 选择楼栋的回调函数 + const handleBuildingSelect = useCallback((building: SelectedBuilding) => { + setSelectedBuilding(building); + setSelectedUnit(null); // 重置单元选择 + // 刷新单元和房屋列表 + actionUnitsRef?.current?.reload(); + actionHousesRef?.current?.reload(); + }, []); + + // 选择单元的回调函数 + const handleUnitSelect = useCallback((unit: SelectedUnit) => { + setSelectedUnit(unit); + // 刷新房屋列表 + actionHousesRef?.current?.reload(); + }, []); + + // 删除操作的通用处理 + const handleDelete = useCallback( + async (deleteApi: any, id: number, reloadAction: any, itemName: string) => { + try { + await deleteApi({ id }); + message.success(`${itemName}删除成功`); + reloadAction(); + } catch (error) { + message.error(`${itemName}删除失败`); + } + }, + [], + ); + return ( + + } + > + + {/* 楼栋列表 */} +
    + + <Space style={{ display: 'flex', justifyContent: 'space-between' }}> + 楼栋信息 + <BuildingsCreate + key="BuildingsCreate" + item={props?.item} + reload={() => actionBuildingsRef?.current?.reload()} + title="楼栋" + /> + </Space> + + { + return selectedBuilding?.id === record?.id + ? 'ant-table-row-selected' + : ''; + }} + onRow={(record: any) => { + return { + onClick: () => { + handleBuildingSelect(record); + }, + style: { + cursor: 'pointer', + }, + }; + }} + request={async (params, sort) => + MyProTableProps.request( + { ...params, asset_projects_id: props?.item?.id }, + sort, + Apis.Asset.AssetBuildings.List, + ) + } + options={false} + pagination={{ + pageSize: 10, + showSizeChanger: false, + }} + columns={[ + { + title: '楼栋', + dataIndex: 'name', + ellipsis: true, + }, + MyColumns.Option({ + width: 120, + render: (_, item: any, index, action) => ( + + + + handleDelete( + Apis.Asset.AssetBuildings.Delete, + item.id, + action?.reload, + '楼栋', + ) + } + /> + + ), + }), + ]} + /> +
    + + {/* 单元列表 */} + {selectedBuilding && ( +
    + + <Space + style={{ display: 'flex', justifyContent: 'space-between' }} + > + {selectedBuilding.name} + {selectedBuilding && ( + <AssetUnitsCreate + key="UnitsCreate" + item={{ + ...props?.item, + asset_buildings_id: selectedBuilding?.id, + }} + reload={() => actionUnitsRef?.current?.reload()} + title={`${selectedBuilding.name}单元`} + /> + )} + </Space> + + + MyProTableProps.request( + { + ...params, + asset_projects_id: props?.item?.id, + asset_buildings_id: selectedBuilding?.id, + }, + sort, + Apis.Asset.AssetUnits.List, + ) + } + rowClassName={(record: any) => { + return selectedUnit?.id === record?.id + ? 'ant-table-row-selected' + : ''; + }} + onRow={(record: any) => { + return { + onClick: () => { + handleUnitSelect(record); + }, + style: { + cursor: 'pointer', + }, + }; + }} + options={false} + pagination={{ + pageSize: 10, + showSizeChanger: false, + }} + columns={[ + { + title: '单元', + dataIndex: 'name', + ellipsis: true, + }, + MyColumns.Option({ + width: 120, + render: (_, item: any, index, action) => ( + + + + handleDelete( + Apis.Asset.AssetUnits.Delete, + item.id, + action?.reload, + '单元', + ) + } + /> + + ), + }), + ]} + /> +
    + )} + + {/* 房屋列表 */} + {selectedUnit && ( +
    + + <Space + style={{ display: 'flex', justifyContent: 'space-between' }} + > + {selectedUnit.name} + {selectedUnit && ( + <HousesCreate + key="HousesCreate" + item={{ + ...props?.item, + asset_buildings_id: selectedBuilding?.id, + asset_units_id: selectedUnit?.id, + }} + reload={() => actionHousesRef?.current?.reload()} + title={`${selectedUnit.name}房屋`} + /> + )} + </Space> + + + MyProTableProps.request( + { + ...params, + asset_projects_id: props?.item?.id, + asset_buildings_id: selectedBuilding?.id, + asset_units_id: selectedUnit?.id, + }, + sort, + Apis.Asset.AssetHouses.List, + ) + } + options={false} + pagination={{ + pageSize: 10, + showSizeChanger: false, + }} + columns={[ + { + title: '房号', + dataIndex: 'name', + width: 80, + }, + { + title: '楼层', + dataIndex: 'floor', + width: 80, + render(_, record) { + return `${record?.floor}层`; + }, + }, + MyColumns.EnumTag({ + title: '用途', + dataIndex: 'usage', + valueEnum: AssetHousesUsageEnum, + width: 100, + }), + MyColumns.Option({ + width: 150, + render: (_, item: any, index, action) => ( + + + + + handleDelete( + Apis.Asset.AssetHouses.Delete, + item.id, + action?.reload, + '房屋', + ) + } + /> + + ), + }), + ]} + /> +
    + )} +
    +
    + ); +} diff --git a/src/pages/asset/asset_projects/components/AssetGrid.tsx b/src/pages/asset/components/AssetGrid.tsx similarity index 93% rename from src/pages/asset/asset_projects/components/AssetGrid.tsx rename to src/pages/asset/components/AssetGrid.tsx index 7dab76b..3f02020 100644 --- a/src/pages/asset/asset_projects/components/AssetGrid.tsx +++ b/src/pages/asset/components/AssetGrid.tsx @@ -3,9 +3,9 @@ import { Apis } from '@/gen/Apis'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; import { useEffect, useRef } from 'react'; -import GridCreate from '../modals/GridCreate'; -import GridMannger from '../modals/GridMannger'; -import GridCreateUpdate from '../modals/GridUpdate'; +import GridCreate from './modals/GridCreate'; +import GridMannger from './modals/GridMannger'; +import GridCreateUpdate from './modals/GridUpdate'; export default function Index({ ...rest }) { const actionLooks = useRef(); diff --git a/src/pages/asset/asset_projects/components/AssetInfo.tsx b/src/pages/asset/components/AssetInfo.tsx similarity index 64% rename from src/pages/asset/asset_projects/components/AssetInfo.tsx rename to src/pages/asset/components/AssetInfo.tsx index 8283d44..0609bf5 100644 --- a/src/pages/asset/asset_projects/components/AssetInfo.tsx +++ b/src/pages/asset/components/AssetInfo.tsx @@ -7,38 +7,20 @@ import { } from '@/gen/Enums'; import { ProCard, ProDescriptions } from '@ant-design/pro-components'; import { Space } from 'antd'; -import AssetUpdate from '../modals/AssetUpdate'; -import BindCompany from '../modals/BindCompany'; export default function info(props: MyBetaModalFormProps) { return ( - - -
    - 【{props?.item?.id}】{props?.item?.name} -
    - -
    -
    {props?.item?.alias_name} - {/* - {props?.item?.code} - */} - - + + {props?.item?.province || ''} + {props?.item?.city || ''} + {props?.item?.district || ''} + {props?.item?.address || ''} - + @@ -61,42 +43,29 @@ export default function info(props: MyBetaModalFormProps) { key="entrust_type" /> + + + + {props?.item?.takeover_date} {props?.item?.closure_date} - - {props?.item?.province || ''} - {props?.item?.city || ''} - {props?.item?.district || ''} - {props?.item?.address || ''} - - + + {props?.item?.created_at} - + {props?.item?.updated_at}
    - - - - -
    - 【{props?.item?.company?.id}】{props?.item?.company?.name} -
    - -
    -
    -
    -
    ); } diff --git a/src/pages/asset/components/Basic.tsx b/src/pages/asset/components/Basic.tsx new file mode 100644 index 0000000..701c760 --- /dev/null +++ b/src/pages/asset/components/Basic.tsx @@ -0,0 +1,36 @@ +import { MyBetaModalFormProps } from '@/common'; +import { ProCard, ProDescriptions } from '@ant-design/pro-components'; +import { Space } from 'antd'; +import AssetUpdate from '../modals/AssetUpdate'; +import BindCompany from './modals/BindCompany'; + +export default function info(props: MyBetaModalFormProps) { + return ( + + + + + +
    {props?.item?.name}
    + +
    +
    + + +
    {props?.item?.company?.name}
    + +
    +
    +
    +
    +
    + ); +} diff --git a/src/pages/asset/asset_projects/modals/AssetAccountsSelect.tsx b/src/pages/asset/components/modals/AssetAccountsSelect.tsx similarity index 92% rename from src/pages/asset/asset_projects/modals/AssetAccountsSelect.tsx rename to src/pages/asset/components/modals/AssetAccountsSelect.tsx index c07204b..dba2dfc 100644 --- a/src/pages/asset/asset_projects/modals/AssetAccountsSelect.tsx +++ b/src/pages/asset/components/modals/AssetAccountsSelect.tsx @@ -11,10 +11,10 @@ import { message } from 'antd'; import { useRef, useState } from 'react'; export default function Index(props: MyBetaModalFormProps) { - const modalRef:any = useRef(null); + const modalRef: any = useRef(null); const [selectedProjectsIds, setSelectedProjectsIds] = useState([]); const onShowContactPhone = () => { - console.log(selectedProjectsIds,'selectedProjectsIds') + console.log(selectedProjectsIds, 'selectedProjectsIds'); Apis.Company.CompanyProjectReceiptAccounts.Store({ companies_id: props?.item?.companies_id ?? 0, projects_id: props?.item?.id, @@ -23,7 +23,7 @@ export default function Index(props: MyBetaModalFormProps) { .then(() => { props.reload?.(); message.success('收款账号添加成功!'); - console.log(modalRef,'modalRef.current') + console.log(modalRef, 'modalRef.current'); modalRef.current?.close(); // todo 关闭页面 }) @@ -59,7 +59,7 @@ export default function Index(props: MyBetaModalFormProps) { rowSelection={{ type: 'radio', onChange: (selectedRowKeys) => { - console.log(selectedRowKeys,'selectedRowKeys') + console.log(selectedRowKeys, 'selectedRowKeys'); setSelectedProjectsIds(selectedRowKeys); }, }} diff --git a/src/pages/asset/asset_projects/modals/BindCompany.tsx b/src/pages/asset/components/modals/BindCompany.tsx similarity index 67% rename from src/pages/asset/asset_projects/modals/BindCompany.tsx rename to src/pages/asset/components/modals/BindCompany.tsx index c823ed6..ec4023c 100644 --- a/src/pages/asset/asset_projects/modals/BindCompany.tsx +++ b/src/pages/asset/components/modals/BindCompany.tsx @@ -7,20 +7,15 @@ import { import { Selects } from '@/components/Select'; import { Apis } from '@/gen/Apis'; import { BetaSchemaForm } from '@ant-design/pro-components'; -import { message } from 'antd'; +import { Form, message } from 'antd'; export default function Update(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); return ( {...MyModalFormProps.props} - title={`编辑${props.title}`} - trigger={ - - } + title={`调整${props.title}`} + trigger={} wrapperCol={{ span: 24 }} width="500px" request={() => @@ -28,8 +23,18 @@ export default function Update(props: MyBetaModalFormProps) { ...props.item, }) } + key={new Date().getTime()} + form={form} + onOpenChange={(open: any) => { + if (open && props.item) { + form.setFieldsValue(props.item); + } + }} onFinish={async (values) => - Apis.Asset.AssetProjects.BindCompany({ ...values, projects_id: props.item?.id ?? 0 }) + Apis.Asset.AssetProjects.BindCompany({ + ...values, + projects_id: props.item?.id ?? 0, + }) .then(() => { props.reload?.(); message.success(props.title + '关联机构修改成功'); @@ -38,7 +43,6 @@ export default function Update(props: MyBetaModalFormProps) { .catch(() => false) } columns={[ - Selects?.Companies({ key: 'companies_id', title: '所属机构', diff --git a/src/pages/asset/asset_projects/modals/BuildingsCreate.tsx b/src/pages/asset/components/modals/BuildingsCreate.tsx similarity index 91% rename from src/pages/asset/asset_projects/modals/BuildingsCreate.tsx rename to src/pages/asset/components/modals/BuildingsCreate.tsx index 488cbd5..f048745 100644 --- a/src/pages/asset/asset_projects/modals/BuildingsCreate.tsx +++ b/src/pages/asset/components/modals/BuildingsCreate.tsx @@ -8,7 +8,6 @@ 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(); @@ -16,15 +15,16 @@ export default function Create(props: MyBetaModalFormProps) { {...MyModalFormProps.props} form={form} - title={`添加${props.title}`} + title={`${props.title}`} wrapperCol={{ span: 24 }} width="500px" - trigger={} + trigger={} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 } }} + key={new Date().getTime()} onFinish={async (values) => Apis.Asset.AssetBuildings.Store({ ...values, diff --git a/src/pages/asset/asset_projects/modals/BuildingsUpdate.tsx b/src/pages/asset/components/modals/BuildingsUpdate.tsx similarity index 92% rename from src/pages/asset/asset_projects/modals/BuildingsUpdate.tsx rename to src/pages/asset/components/modals/BuildingsUpdate.tsx index 5586456..d65c900 100644 --- a/src/pages/asset/asset_projects/modals/BuildingsUpdate.tsx +++ b/src/pages/asset/components/modals/BuildingsUpdate.tsx @@ -8,7 +8,6 @@ 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(); @@ -19,11 +18,8 @@ export default function Update(props: MyBetaModalFormProps) { title={`编辑`} wrapperCol={{ span: 24 }} width="500px" - trigger={ - - } + trigger={} + key={new Date().getTime()} onOpenChange={(open: any) => { if (open) { form.setFieldsValue(props?.item); // 编辑赋值 diff --git a/src/pages/asset/asset_projects/modals/GridCreate.tsx b/src/pages/asset/components/modals/GridCreate.tsx similarity index 98% rename from src/pages/asset/asset_projects/modals/GridCreate.tsx rename to src/pages/asset/components/modals/GridCreate.tsx index 68ae3b5..7d16696 100644 --- a/src/pages/asset/asset_projects/modals/GridCreate.tsx +++ b/src/pages/asset/components/modals/GridCreate.tsx @@ -20,6 +20,7 @@ export default function Create(props: MyBetaModalFormProps) { width="700px" trigger={} form={form} + key={new Date().getTime()} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 @@ -68,7 +69,7 @@ export default function Create(props: MyBetaModalFormProps) { return ( } request={() => Promise.resolve(props.item)} onOpenChange={(open: any) => { diff --git a/src/pages/asset/asset_projects/modals/GridUpdate.tsx b/src/pages/asset/components/modals/GridUpdate.tsx similarity index 98% rename from src/pages/asset/asset_projects/modals/GridUpdate.tsx rename to src/pages/asset/components/modals/GridUpdate.tsx index 46a569a..d6e734c 100644 --- a/src/pages/asset/asset_projects/modals/GridUpdate.tsx +++ b/src/pages/asset/components/modals/GridUpdate.tsx @@ -20,6 +20,7 @@ export default function Update(props: MyBetaModalFormProps) { width="700px" trigger={} form={form} + key={new Date().getTime()} onOpenChange={(open: any) => { if (open) { Apis.Grid.Grids.Show({ id: props?.item?.id }).then((res) => { @@ -70,7 +71,7 @@ export default function Update(props: MyBetaModalFormProps) { return ( } form={form} + key={new Date().getTime()} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 @@ -36,6 +36,8 @@ export default function Create(props: MyBetaModalFormProps) { Apis.Asset.AssetHouses.Store({ ...values, asset_projects_id: props?.item?.id, + asset_buildings_id: props?.item?.asset_buildings_id, + asset_units_id: props?.item?.asset_units_id, }) .then(() => { props.reload?.(); @@ -46,64 +48,11 @@ export default function Create(props: MyBetaModalFormProps) { } columns={[ { - valueType: 'dependency', - name: ['asset_buildings_id', 'asset_units_id'], - columns: ({ asset_buildings_id }) => { - return [ - { - valueType: 'group', - columns: [ - Selects?.AssetBuildings({ - key: 'asset_buildings_id', - title: '选择楼栋', - params: { - asset_projects_id: props?.item?.id, - }, - colProps: { span: 6 }, - formItemProps: { ...rulesHelper.number }, - fieldProps: { - showSearch: true, - onChange: () => { - form.setFieldsValue({ - asset_units_id: undefined, - asset_floors_id: undefined, - }); - }, - }, - }), - Selects?.AssetUnits({ - key: 'asset_units_id', - title: '选择单元', - params: { - asset_projects_id: props?.item?.id, - asset_buildings_id: asset_buildings_id, - }, - colProps: { span: 6 }, - formItemProps: { ...rulesHelper.number }, - }), - { - key: 'name', - title: '房号', - colProps: { span: 6 }, - formItemProps: { ...rulesHelper.text }, - }, - { - key: 'floor', - title: '楼层', - valueType: 'digit', - fieldProps: { - addonAfter: '楼', - max: 99, - }, - colProps: { span: 6 }, - formItemProps: { ...rulesHelper.number }, - }, - ], - }, - ]; - }, + key: 'name', + title: '房号', + colProps: { span: 6 }, + formItemProps: { ...rulesHelper.text }, }, - MyFormItems.EnumRadio({ key: 'usage', title: '用途', @@ -111,22 +60,18 @@ export default function Create(props: MyBetaModalFormProps) { valueEnum: AssetHousesUsageEnum, required: true, }), - MyFormItems.EnumSelect({ - key: 'ownership_type', - title: '产权性质', - colProps: { span: 6 }, - valueEnum: AssetHousesOwnershipTypeEnum, - // required: true, - }), - // { - // key: 'ownership_term', - // title: '产权年限', - // fieldProps: { - // addonAfter: '年', - // }, - // colProps: { span: 8 }, - // }, + { + key: 'floor', + title: '楼层', + valueType: 'digit', + fieldProps: { + addonAfter: '楼', + max: 99, + }, + colProps: { span: 6 }, + formItemProps: { ...rulesHelper.number }, + }, { key: 'built_area', title: '建筑面积', @@ -136,6 +81,7 @@ export default function Create(props: MyBetaModalFormProps) { max: 99999, }, colProps: { span: 6 }, + formItemProps: { ...rulesHelper.number }, }, { key: 'inside_area', @@ -146,6 +92,7 @@ export default function Create(props: MyBetaModalFormProps) { max: 99999, }, colProps: { span: 6 }, + formItemProps: { ...rulesHelper.number }, }, { key: 'chargeable_area', @@ -156,33 +103,8 @@ export default function Create(props: MyBetaModalFormProps) { max: 99999, }, colProps: { span: 6 }, + formItemProps: { ...rulesHelper.number }, }, - MyFormItems.EnumRadio({ - key: 'status', - title: '房屋状态', - colProps: { span: 6 }, - // valueEnum: AssetHousesStatusEnum, - // required: true, - valueEnum: () => { - let obj: any = JSON.parse(JSON.stringify(AssetHousesStatusEnum)); - delete obj.SelfOccupied; - delete obj.Rented; - delete obj.Vacant; - return obj; - }, - }), - // { - // key: 'full_name', - // title: '房屋全称', - // colProps: { span: 12 }, - // }, - MyFormItems.EnumRadio({ - key: 'orientation', - title: '房屋朝向', - colProps: { span: 24 }, - valueEnum: AssetHousesOrientationEnum, - // required: true, - }), { valueType: 'group', columns: [ @@ -193,7 +115,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { addonAfter: '房', }, - colProps: { span: 4 }, + colProps: { span: 5 }, }, { key: 'hall', @@ -202,7 +124,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { addonAfter: '厅', }, - colProps: { span: 4 }, + colProps: { span: 5 }, }, { key: 'bathroom', @@ -211,7 +133,7 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { addonAfter: '卫', }, - colProps: { span: 4 }, + colProps: { span: 5 }, }, { key: 'kitchen', @@ -229,10 +151,46 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { addonAfter: '阳台', }, - colProps: { span: 4 }, + colProps: { span: 5 }, }, ], }, + MyFormItems.EnumRadio({ + key: 'orientation', + title: '房屋朝向', + colProps: { span: 24 }, + valueEnum: AssetHousesOrientationEnum, + // required: true, + }), + MyFormItems.EnumRadio({ + key: 'status', + title: '房屋状态', + colProps: { span: 6 }, + // valueEnum: AssetHousesStatusEnum, + // required: true, + valueEnum: () => { + let obj: any = JSON.parse(JSON.stringify(AssetHousesStatusEnum)); + delete obj.SelfOccupied; + delete obj.Rented; + delete obj.Vacant; + return obj; + }, + }), + MyFormItems.EnumSelect({ + key: 'ownership_type', + title: '产权性质', + colProps: { span: 6 }, + valueEnum: AssetHousesOwnershipTypeEnum, + // required: true, + }), + { + key: 'ownership_term', + title: '产权年限', + fieldProps: { + addonAfter: '年', + }, + colProps: { span: 6 }, + }, ]} /> ); diff --git a/src/pages/asset/asset_projects/modals/HousesShow.tsx b/src/pages/asset/components/modals/HousesShow.tsx similarity index 100% rename from src/pages/asset/asset_projects/modals/HousesShow.tsx rename to src/pages/asset/components/modals/HousesShow.tsx diff --git a/src/pages/asset/asset_projects/modals/HousesUpdate.tsx b/src/pages/asset/components/modals/HousesUpdate.tsx similarity index 81% rename from src/pages/asset/asset_projects/modals/HousesUpdate.tsx rename to src/pages/asset/components/modals/HousesUpdate.tsx index c3e6061..d78e434 100644 --- a/src/pages/asset/asset_projects/modals/HousesUpdate.tsx +++ b/src/pages/asset/components/modals/HousesUpdate.tsx @@ -23,11 +23,12 @@ export default function Update(props: MyBetaModalFormProps) { {...MyModalFormProps.props} title={props.title} wrapperCol={{ span: 24 }} - width="900px" + width="800px" trigger={ } form={form} + key={new Date().getTime()} onOpenChange={(open: any) => { if (open) { form.setFieldsValue(props?.item); // 编辑赋值 @@ -62,7 +63,7 @@ export default function Update(props: MyBetaModalFormProps) { key: 'asset_buildings_id', title: '选择楼栋', params: { - asset_projects_id: props?.item?.id, + asset_projects_id: props?.item?.asset_projects_id, }, colProps: { span: 6 }, formItemProps: { ...rulesHelper.number }, @@ -80,58 +81,42 @@ export default function Update(props: MyBetaModalFormProps) { key: 'asset_units_id', title: '选择单元', params: { - asset_projects_id: props?.item?.id, + asset_projects_id: props?.item?.asset_projects_id, asset_buildings_id: asset_buildings_id, }, colProps: { span: 6 }, formItemProps: { ...rulesHelper.number }, }), - { - key: 'name', - title: '房号', - colProps: { span: 6 }, - formItemProps: { ...rulesHelper.text }, - }, - { - key: 'floor', - title: '楼层', - valueType: 'digit', - fieldProps: { - addonAfter: '楼', - max: 99, - }, - colProps: { span: 6 }, - formItemProps: { ...rulesHelper.number }, - }, ], }, ]; }, }, - + { + key: 'name', + title: '房号', + colProps: { span: 6 }, + formItemProps: { ...rulesHelper.text }, + }, MyFormItems.EnumRadio({ key: 'usage', - title: '房屋用途', + title: '用途', colProps: { span: 18 }, valueEnum: AssetHousesUsageEnum, required: true, }), - MyFormItems.EnumSelect({ - key: 'ownership_type', - title: '产权性质', - colProps: { span: 6 }, - valueEnum: AssetHousesOwnershipTypeEnum, - // required: true, - }), - // { - // key: 'ownership_term', - // title: '产权年限', - // fieldProps: { - // addonAfter: '年', - // }, - // colProps: { span: 8 }, - // }, + { + key: 'floor', + title: '楼层', + valueType: 'digit', + fieldProps: { + addonAfter: '楼', + max: 99, + }, + colProps: { span: 6 }, + formItemProps: { ...rulesHelper.number }, + }, { key: 'built_area', title: '建筑面积', @@ -141,6 +126,7 @@ export default function Update(props: MyBetaModalFormProps) { max: 99999, }, colProps: { span: 6 }, + formItemProps: { ...rulesHelper.number }, }, { key: 'inside_area', @@ -151,6 +137,7 @@ export default function Update(props: MyBetaModalFormProps) { max: 99999, }, colProps: { span: 6 }, + formItemProps: { ...rulesHelper.number }, }, { key: 'chargeable_area', @@ -161,27 +148,8 @@ export default function Update(props: MyBetaModalFormProps) { max: 99999, }, colProps: { span: 6 }, + formItemProps: { ...rulesHelper.number }, }, - MyFormItems.EnumRadio({ - key: 'status', - title: '房屋状态', - colProps: { span: 6 }, - // valueEnum: AssetHousesStatusEnum, - // required: true, - valueEnum: () => { - let obj: any = JSON.parse(JSON.stringify(AssetHousesStatusEnum)); - delete obj.SelfOccupied; - delete obj.Rented; - delete obj.Vacant; - return obj; - }, - }), - // { - // key: 'full_name', - // title: '房屋全称', - // colProps: { span: 12 }, - // }, - { valueType: 'group', columns: [ @@ -192,7 +160,7 @@ export default function Update(props: MyBetaModalFormProps) { fieldProps: { addonAfter: '房', }, - colProps: { span: 4 }, + colProps: { span: 5 }, }, { key: 'hall', @@ -201,7 +169,7 @@ export default function Update(props: MyBetaModalFormProps) { fieldProps: { addonAfter: '厅', }, - colProps: { span: 4 }, + colProps: { span: 5 }, }, { key: 'bathroom', @@ -210,7 +178,7 @@ export default function Update(props: MyBetaModalFormProps) { fieldProps: { addonAfter: '卫', }, - colProps: { span: 4 }, + colProps: { span: 5 }, }, { key: 'kitchen', @@ -228,17 +196,46 @@ export default function Update(props: MyBetaModalFormProps) { fieldProps: { addonAfter: '阳台', }, - colProps: { span: 4 }, + colProps: { span: 5 }, }, ], }, MyFormItems.EnumRadio({ key: 'orientation', - title: '朝向', + title: '房屋朝向', colProps: { span: 24 }, valueEnum: AssetHousesOrientationEnum, // required: true, }), + MyFormItems.EnumRadio({ + key: 'status', + title: '房屋状态', + colProps: { span: 6 }, + // valueEnum: AssetHousesStatusEnum, + // required: true, + valueEnum: () => { + let obj: any = JSON.parse(JSON.stringify(AssetHousesStatusEnum)); + delete obj.SelfOccupied; + delete obj.Rented; + delete obj.Vacant; + return obj; + }, + }), + MyFormItems.EnumSelect({ + key: 'ownership_type', + title: '产权性质', + colProps: { span: 6 }, + valueEnum: AssetHousesOwnershipTypeEnum, + // required: true, + }), + { + key: 'ownership_term', + title: '产权年限', + fieldProps: { + addonAfter: '年', + }, + colProps: { span: 6 }, + }, ]} /> ); diff --git a/src/pages/asset/asset_projects/modals/UnitsCreate.tsx b/src/pages/asset/components/modals/UnitsCreate.tsx similarity index 82% rename from src/pages/asset/asset_projects/modals/UnitsCreate.tsx rename to src/pages/asset/components/modals/UnitsCreate.tsx index 5f73667..b333039 100644 --- a/src/pages/asset/asset_projects/modals/UnitsCreate.tsx +++ b/src/pages/asset/components/modals/UnitsCreate.tsx @@ -5,7 +5,6 @@ import { MyModalFormProps, rulesHelper, } from '@/common'; -import { Selects } from '@/components/Select'; import { Apis } from '@/gen/Apis'; import { AssetUnitsBuildingStructureEnum, @@ -22,13 +21,9 @@ export default function Create(props: MyBetaModalFormProps) { title={`添加${props.title}`} wrapperCol={{ span: 24 }} width="700px" - trigger={ - - } + trigger={} form={form} + key={new Date().getTime()} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 @@ -38,6 +33,7 @@ export default function Create(props: MyBetaModalFormProps) { Apis.Asset.AssetUnits.Store({ ...values, asset_projects_id: props?.item?.id, + asset_buildings_id: props?.item?.asset_buildings_id, }) .then(() => { props.reload?.(); @@ -47,15 +43,6 @@ export default function Create(props: MyBetaModalFormProps) { .catch(() => false) } columns={[ - Selects?.AssetBuildings({ - key: 'asset_buildings_id', - title: '选择楼栋', - params:{ - asset_projects_id: props?.item?.id, - }, - colProps: { span:24 }, - formItemProps: { ...rulesHelper.number }, - }), { key: 'name', title: '单元名称', diff --git a/src/pages/asset/asset_projects/modals/UnitsUpdate.tsx b/src/pages/asset/components/modals/UnitsUpdate.tsx similarity index 96% rename from src/pages/asset/asset_projects/modals/UnitsUpdate.tsx rename to src/pages/asset/components/modals/UnitsUpdate.tsx index 7ecfb4f..765c6b8 100644 --- a/src/pages/asset/asset_projects/modals/UnitsUpdate.tsx +++ b/src/pages/asset/components/modals/UnitsUpdate.tsx @@ -23,6 +23,7 @@ export default function Update(props: MyBetaModalFormProps) { wrapperCol={{ span: 24 }} width="700px" trigger={} + key={new Date().getTime()} form={form} onOpenChange={(open: any) => { if (open) { @@ -47,7 +48,7 @@ export default function Update(props: MyBetaModalFormProps) { key: 'asset_buildings_id', title: '选择楼栋', params: { - asset_projects_id: props?.item?.id, + asset_projects_id: props?.item?.asset_projects_id, }, colProps: { span: 24 }, formItemProps: { ...rulesHelper.number }, diff --git a/src/pages/asset/asset_projects/index.tsx b/src/pages/asset/index.tsx similarity index 98% rename from src/pages/asset/asset_projects/index.tsx rename to src/pages/asset/index.tsx index 921b1cd..915de63 100644 --- a/src/pages/asset/asset_projects/index.tsx +++ b/src/pages/asset/index.tsx @@ -98,7 +98,7 @@ export default function Index({ title = '项目管理' }) { { - navigate(`/asset/asset_projects/${item.id}`); + navigate(`/asset/${item.id}`); }} /> {...MyModalFormProps.props} title={`添加${props.title}`} wrapperCol={{ span: 24 }} - width="800px" + width="600px" trigger={} + form={form} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + } + }} onFinish={async (values) => Apis.Asset.AssetProjects.Store(values) .then(() => { @@ -44,68 +52,53 @@ export default function Create(props: MyBetaModalFormProps) { { key: 'alias_name', title: '项目别名', - colProps: { span: 6 }, + colProps: { span: 12 }, }, Selects?.Companies({ key: 'companies_id', title: '所属机构', - colProps: { span: 6 }, - // formItemProps: { ...rulesHelper.number }, + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.number }, }), - // { - // key: 'code', - // title: '项目编码', - // colProps: { span: 8 }, - // // formItemProps: { ...rulesHelper.text }, - // }, Address.Cascader({ key: 'casacader', title: '选择地址', - colProps: { span: 12 }, + colProps: { span: 16 }, keys: ['province', 'city', 'area', 'street'], required: true, }), { key: 'address', title: '详细地址', - colProps: { span: 6 }, + colProps: { span: 8 }, formItemProps: { ...rulesHelper.text }, }, - { - key: 'longitude', - title: '经度', - colProps: { span: 3 }, - }, - { - key: 'latitude', - title: '纬度', - colProps: { span: 3 }, - }, + MyFormItems.EnumSelect({ key: 'property_type', title: '项目类型', - colProps: { span: 6 }, + colProps: { span: 8 }, valueEnum: AssetProjectsPropertyTypeEnum, // required: true, }), MyFormItems.EnumSelect({ key: 'status', title: '项目状态', - colProps: { span: 6 }, + colProps: { span: 8 }, valueEnum: AssetProjectsStatusEnum, // required: true, }), MyFormItems.EnumSelect({ key: 'entrust_type', title: '委托类型', - colProps: { span: 6 }, + colProps: { span: 8 }, valueEnum: AssetProjectsEntrustTypeEnum, // required: true, }), MyFormItems.EnumRadio({ key: 'charge', title: '收费方式', - colProps: { span: 6 }, + colProps: { span: 8 }, valueEnum: AssetProjectsChargeEnum, // required: true, }), @@ -118,7 +111,7 @@ export default function Create(props: MyBetaModalFormProps) { width: '100%', }, }, - colProps: { span: 6 }, + colProps: { span: 8 }, }, { key: 'closure_date', @@ -129,7 +122,7 @@ export default function Create(props: MyBetaModalFormProps) { width: '100%', }, }, - colProps: { span: 6 }, + colProps: { span: 8 }, }, ]} /> diff --git a/src/pages/asset/asset_projects/modals/AssetUpdate.tsx b/src/pages/asset/modals/AssetUpdate.tsx similarity index 81% rename from src/pages/asset/asset_projects/modals/AssetUpdate.tsx rename to src/pages/asset/modals/AssetUpdate.tsx index 4e8a41e..542ad78 100644 --- a/src/pages/asset/asset_projects/modals/AssetUpdate.tsx +++ b/src/pages/asset/modals/AssetUpdate.tsx @@ -15,16 +15,25 @@ import { AssetProjectsStatusEnum, } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; -import { message } from 'antd'; +import { Form, message } from 'antd'; export default function Update(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + return ( {...MyModalFormProps.props} title={`编辑${props.title}`} trigger={} wrapperCol={{ span: 24 }} - width="800px" + width="600px" + key={new Date().getTime()} + form={form} + onOpenChange={(open: any) => { + if (open && props.item) { + form.setFieldsValue(props.item); + } + }} request={() => Promise.resolve({ ...props.item, @@ -55,68 +64,53 @@ export default function Update(props: MyBetaModalFormProps) { { key: 'alias_name', title: '项目别名', - colProps: { span: 6 }, + colProps: { span: 12 }, }, Selects?.Companies({ key: 'companies_id', title: '所属机构', - colProps: { span: 6 }, + colProps: { span: 24 }, formItemProps: { ...rulesHelper.number }, }), - // { - // key: 'code', - // title: '项目编码', - // colProps: { span: 8 }, - // formItemProps: { ...rulesHelper.text }, - // }, Address.Cascader({ key: 'casacader', title: '选择地址', - colProps: { span: 12 }, + colProps: { span: 16 }, keys: ['province', 'city', 'area', 'street'], required: true, }), { key: 'address', title: '详细地址', - colProps: { span: 6 }, + colProps: { span: 8 }, formItemProps: { ...rulesHelper.text }, }, - { - key: 'longitude', - title: '经度', - colProps: { span: 3 }, - }, - { - key: 'latitude', - title: '纬度', - colProps: { span: 3 }, - }, + MyFormItems.EnumSelect({ key: 'property_type', title: '项目类型', - colProps: { span: 6 }, + colProps: { span: 8 }, valueEnum: AssetProjectsPropertyTypeEnum, // required: true, }), MyFormItems.EnumSelect({ key: 'status', title: '项目状态', - colProps: { span: 6 }, + colProps: { span: 8 }, valueEnum: AssetProjectsStatusEnum, // required: true, }), MyFormItems.EnumSelect({ key: 'entrust_type', title: '委托类型', - colProps: { span: 6 }, + colProps: { span: 8 }, valueEnum: AssetProjectsEntrustTypeEnum, // required: true, }), MyFormItems.EnumRadio({ key: 'charge', title: '收费方式', - colProps: { span: 6 }, + colProps: { span: 8 }, valueEnum: AssetProjectsChargeEnum, // required: true, }), @@ -129,7 +123,7 @@ export default function Update(props: MyBetaModalFormProps) { width: '100%', }, }, - colProps: { span: 6 }, + colProps: { span: 8 }, }, { key: 'closure_date', @@ -140,7 +134,7 @@ export default function Update(props: MyBetaModalFormProps) { width: '100%', }, }, - colProps: { span: 6 }, + colProps: { span: 8 }, }, ]} /> diff --git a/src/pages/asset_houses/index.tsx b/src/pages/asset_houses/index.tsx new file mode 100644 index 0000000..a61ccd2 --- /dev/null +++ b/src/pages/asset_houses/index.tsx @@ -0,0 +1,132 @@ +import { + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { + AssetHousesOrientationEnum, + AssetHousesOwnershipTypeEnum, + AssetHousesStatusEnum, + AssetHousesUsageEnum, +} from '@/gen/Enums'; +import { ProTable } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { Space } from 'antd'; +import HousesShow from '../asset/components/modals/HousesShow'; +import HousesUpdate from '../asset/components/modals/HousesUpdate'; + +export default function Index({ title = '房屋列表' }) { + const navigate = useNavigate(); + // 注册当前页面为标签页 + usePageTabs({ + tabKey: 'asset-houses', + tabLabel: title, + }); + return ( + + + MyProTableProps.request(params, sort, Apis.Asset.AssetHouses.List) + } + columns={[ + MyColumns.ID(), + { + title: '房屋名称', + dataIndex: 'full_name', + ellipsis: true, + }, + + MyColumns.EnumTag({ + title: '用途', + dataIndex: 'usage', + valueEnum: AssetHousesUsageEnum, + }), + { + title: '楼层', + dataIndex: 'floor', + render(_, record) { + return `${record?.floor}层`; + }, + search: false, + }, + + { + title: '建筑面积', + dataIndex: 'built_area', + render(_, record) { + return `${record?.built_area || ''} m²`; + }, + search: false, + }, + { + title: '套内面积', + dataIndex: 'inside_area', + render(_, record) { + return `${record?.inside_area || ''} m²`; + }, + search: false, + }, + { + title: '计费面积', + dataIndex: 'chargeable_area', + render(_, record) { + return `${record?.chargeable_area || ''} m²`; + }, + search: false, + }, + { + title: '户型', + render(_, record) { + return `${record?.room || ''}室${record?.hall || ''}厅${ + record?.bathroom || '' + }卫${record?.kitchen || ''}厨${record?.balcony || ''}阳台`; + }, + search: false, + }, + MyColumns.EnumTag({ + title: '朝向', + dataIndex: 'orientation', + valueEnum: AssetHousesOrientationEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '房屋状态', + dataIndex: 'status', + valueEnum: AssetHousesStatusEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '产权性质', + dataIndex: 'ownership_type', + valueEnum: AssetHousesOwnershipTypeEnum, + search: false, + }), + + { + title: '产权年限', + dataIndex: 'ownership_term', + render(_, record) { + return `${record?.ownership_term || '-'} 年`; + }, + search: false, + }, + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/banner/index.tsx b/src/pages/banner/index.tsx new file mode 100644 index 0000000..21ba552 --- /dev/null +++ b/src/pages/banner/index.tsx @@ -0,0 +1,113 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { BannersRedirectTypeEnum, BannersTypeEnum } from '@/gen/Enums'; +import { ProTable } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { Space } from 'antd'; +import BannerCreate from './modals/BannerCreate'; +import BannerShow from './modals/BannerShow'; +import BannerUpdate from './modals/BannerUpdate'; + +export default function Index({ title = '广告内容' }) { + const navigate = useNavigate(); + + // 注册当前页面为标签页 + usePageTabs({ + tabKey: 'banners', + tabLabel: title, + }); + + return ( + + + MyProTableProps.request(params, sort, Apis.Banner.Banners.List) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + MyColumns.ID(), + + { + title: '广告名称', + dataIndex: 'name', + }, + MyColumns.EnumTag({ + title: '类型', + dataIndex: 'type', + valueEnum: BannersTypeEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '跳转类型', + dataIndex: 'redirect_type', + valueEnum: BannersRedirectTypeEnum, + search: false, + }), + { + title: '开始时间', + dataIndex: 'start_time', + valueType: 'dateTime', + search: false, + }, + { + title: '结束时间', + dataIndex: 'end_time', + valueType: 'dateTime', + search: false, + }, + { + title: '广告位', + dataIndex: ['banner_space', 'name'], + search: false, + render: (_, record) => { + return record?.banner_space?.name; + }, + }, + { + //创建日期 + title: '创建日期', + dataIndex: 'created_at', + valueType: 'dateTime', + search: false, + render: (_, record) => { + return record?.created_at?.substring(0, 10); + }, + }, + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + + Apis.Banner.Banners.Delete({ id: item.id }).then(() => + action?.reload(), + ) + } + /> + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/banner/modals/BannerCreate.tsx b/src/pages/banner/modals/BannerCreate.tsx new file mode 100644 index 0000000..f606a9d --- /dev/null +++ b/src/pages/banner/modals/BannerCreate.tsx @@ -0,0 +1,160 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { BannersRedirectTypeEnum, BannersTypeEnum } from '@/gen/Enums'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { Form, message } from 'antd'; + +export default function Create(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + return ( + + {...MyModalFormProps.props} + title={`添加广告`} + wrapperCol={{ span: 24 }} + width="600px" + trigger={} + form={form} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + } + }} + onFinish={async (values) => + Apis.Banner.Banners.Store(values) + .then(() => { + props.reload?.(); + message.success('添加广告内容成功'); + return true; + }) + .catch(() => false) + } + columns={[ + Selects?.GetBannerSpace({ + key: 'banner_spaces_id', + title: '选择广告位', + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }), + { + key: 'name', + title: '内容名称', + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }, + { + valueType: 'group', + columns: [ + MyFormItems.EnumRadio({ + key: 'type', + title: '展示类型', + colProps: { span: 12 }, + valueEnum: BannersTypeEnum, + required: true, + }), + { + name: ['type'], + valueType: 'dependency', + columns: ({ type }: any) => { + return type === 'Text' + ? [ + { + title: '文本内容', + key: ['source', 0, 'text'], + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }, + ] + : type === 'Image' + ? [ + MyFormItems.UploadImages({ + key: 'source', + title: '广告图片', + uploadType: 'file', + max: 1, + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }), + ] + : type === 'Video' + ? [ + MyFormItems.UploadImages({ + key: 'source', + title: '广告视频', + uploadType: 'file', + max: 1, + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }), + ] + : []; + }, + }, + ], + }, + MyFormItems.EnumRadio({ + key: 'redirect_type', + title: '跳转类型', + colProps: { span: 24 }, + valueEnum: BannersRedirectTypeEnum, + required: false, + }), + { + key: 'redirect_path', + title: '跳转链接', + colProps: { span: 24 }, + fieldProps: { + placeholder: '请输入跳转链接', + }, + }, + { + name: ['redirect_type'], + valueType: 'dependency', + columns: ({ redirect_type }: any) => { + return redirect_type === 'AnotherMiniProgram' + ? [ + { + title: '小程序AppID', + dataIndex: 'app_id', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }, + ] + : []; + }, + }, + + { + key: 'start_time', + title: '开始时间', + valueType: 'dateTime', + colProps: { span: 8 }, + }, + { + key: 'end_time', + title: '结束时间', + valueType: 'dateTime', + colProps: { span: 8 }, + }, + { + key: 'sort', + title: '排序', + valueType: 'digit', + colProps: { span: 8 }, + fieldProps: { + placeholder: '数值越大越靠前', + min: 0, + style: { width: '100%' }, + }, + initialValue: 0, + }, + ]} + /> + ); +} diff --git a/src/pages/banner/modals/BannerShow.tsx b/src/pages/banner/modals/BannerShow.tsx new file mode 100644 index 0000000..862397e --- /dev/null +++ b/src/pages/banner/modals/BannerShow.tsx @@ -0,0 +1,150 @@ +import { MyBetaModalFormProps, renderTextHelper } from '@/common'; +import { MyModal } from '@/components/MyModal'; +import { BannersRedirectTypeEnum, BannersTypeEnum } from '@/gen/Enums'; +import { ProCard, ProDescriptions } from '@ant-design/pro-components'; +import { Image, Space, Typography } from 'antd'; + +const { Text } = Typography; + +export default function info(props: MyBetaModalFormProps) { + // 根据类型渲染内容 + const renderContent = () => { + const { type, source } = props?.item || {}; + if (!source || !Array.isArray(source) || source.length === 0) { + return 暂无内容; + } + + switch (type) { + case 'Text': + return ( +
    + {source?.[0]?.text} +
    + ); + + case 'Image': + return ( + + {source.map((res: any, index: number) => ( + + + + ))} + + ); + + case 'Video': + return ( +
    + {source.map((res: any, index: number) => ( + + ))} +
    + ); + default: + return 未知内容类型; + } + }; + + return ( + + + + + {props?.item?.name || '-'} + + + + + + + {props?.item?.start_time || '-'} + + + {props?.item?.end_time || '-'} + + + {props?.item?.sort || '-'} + + + {props?.item?.create_at || '-'} + + + {props?.item?.updated_at || '-'} + + + + + + + + + + {props?.item?.redirect_type === 'AnotherMiniProgram' && ( + + {props?.item?.app_id || '-'} + + )} + + {props?.item?.redirect_path || '-'} + + + + + +
    {renderContent()}
    +
    +
    + } + /> + ); +} diff --git a/src/pages/banner/modals/BannerUpdate.tsx b/src/pages/banner/modals/BannerUpdate.tsx new file mode 100644 index 0000000..e4a1d33 --- /dev/null +++ b/src/pages/banner/modals/BannerUpdate.tsx @@ -0,0 +1,161 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { Selects } from '@/components/Select'; +import { Apis } from '@/gen/Apis'; +import { BannersRedirectTypeEnum, BannersTypeEnum } 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 ( + + {...MyModalFormProps.props} + title={`编辑广告内容`} + trigger={} + wrapperCol={{ span: 24 }} + width="600px" + key={new Date().getTime()} + form={form} + onOpenChange={(open: any) => { + if (open && props.item) { + form.setFieldsValue(props.item); + } + }} + onFinish={async (values) => + Apis.Banner.Banners.Update({ ...values, id: props.item?.id ?? 0 }) + .then(() => { + props.reload?.(); + message.success('编辑广告内容成功'); + return true; + }) + .catch(() => false) + } + columns={[ + Selects?.GetBannerSpace({ + key: 'banner_spaces_id', + title: '选择广告位', + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }), + { + key: 'name', + title: '内容名称', + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }, + { + valueType: 'group', + columns: [ + MyFormItems.EnumRadio({ + key: 'type', + title: '展示类型', + colProps: { span: 12 }, + valueEnum: BannersTypeEnum, + required: true, + }), + { + name: ['type'], + valueType: 'dependency', + columns: ({ type }: any) => { + return type === 'Text' + ? [ + { + key: ['source', 0, 'text'], + title: '文本内容', + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }, + ] + : type === 'Image' + ? [ + MyFormItems.UploadImages({ + key: 'source', + title: '广告图片', + uploadType: 'file', + max: 1, + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }), + ] + : type === 'Video' + ? [ + MyFormItems.UploadImages({ + key: 'source', + title: '广告视频', + uploadType: 'file', + max: 1, + colProps: { span: 12 }, + formItemProps: { ...rulesHelper.text }, + }), + ] + : []; + }, + }, + ], + }, + MyFormItems.EnumRadio({ + key: 'redirect_type', + title: '跳转类型', + colProps: { span: 24 }, + valueEnum: BannersRedirectTypeEnum, + required: false, + }), + { + key: 'redirect_path', + title: '跳转链接', + colProps: { span: 24 }, + fieldProps: { + placeholder: '请输入跳转链接', + }, + }, + { + name: ['redirect_type'], + valueType: 'dependency', + columns: ({ redirect_type }: any) => { + return redirect_type === 'AnotherMiniProgram' + ? [ + { + title: '小程序AppID', + dataIndex: 'app_id', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }, + ] + : []; + }, + }, + + { + key: 'start_time', + title: '开始时间', + valueType: 'dateTime', + colProps: { span: 8 }, + }, + { + key: 'end_time', + title: '结束时间', + valueType: 'dateTime', + colProps: { span: 8 }, + }, + { + key: 'sort', + title: '排序', + valueType: 'digit', + colProps: { span: 8 }, + fieldProps: { + placeholder: '数值越大越靠前', + min: 0, + style: { width: '100%' }, + }, + initialValue: 0, + }, + ]} + /> + ); +} diff --git a/src/pages/banner_space/$id.tsx b/src/pages/banner_space/$id.tsx new file mode 100644 index 0000000..dd5c623 --- /dev/null +++ b/src/pages/banner_space/$id.tsx @@ -0,0 +1,52 @@ +import { MyPageContainer, usePageTabs } from '@/common'; +import { Apis } from '@/gen/Apis'; +import { ProCard } from '@ant-design/pro-components'; +import { useParams } from '@umijs/max'; +import { Tabs } from 'antd'; +import { useEffect, useState } from 'react'; +import BannerList from './components/BannerList'; +import BannerSpaceInfo from './components/BannerSpaceInfo'; + +export default function Show({ title }: { title?: string } = {}) { + const { id } = useParams<{ id: string }>(); + const [data, setShow] = useState({}); + + // 注册当前页面为标签页 + const { addTab } = usePageTabs({ + tabKey: `banner-space-${id}`, + tabLabel: data?.name || title || '广告位详情', + }); + + const loadShow = () => { + let paramsId: any = { id: id ?? 0 }; + Apis.Banner.BannerSpaces.Show(paramsId).then((res) => { + setShow(res?.data); + }); + }; + + useEffect(() => { + loadShow(); + }, [id]); + + let items = [ + { + label: '广告投放', + key: '1', + closable: false, + children: ( + loadShow()} + /> + ), + }, + ]; + return ( + + + + + + + ); +} diff --git a/src/pages/banner_space/components/BannerList.tsx b/src/pages/banner_space/components/BannerList.tsx new file mode 100644 index 0000000..c64e740 --- /dev/null +++ b/src/pages/banner_space/components/BannerList.tsx @@ -0,0 +1,83 @@ +import { MyColumns, MyProTableProps } from '@/common'; +import { Apis } from '@/gen/Apis'; +import { BannersRedirectTypeEnum, BannersTypeEnum } from '@/gen/Enums'; +import BannerCreate from '@/pages/banner/modals/BannerCreate'; +import BannerShow from '@/pages/banner/modals/BannerShow'; +import BannerUpdate from '@/pages/banner/modals/BannerUpdate'; +import { ProTable } from '@ant-design/pro-components'; +import { Space } from 'antd'; +import { useEffect, useRef } from 'react'; + +export default function Index({ ...rest }) { + const actionLooks = useRef(); + useEffect(() => { + actionLooks?.current.reloadAndRest(); + }, [rest.loadmore]); + + return ( + <> + > + {...MyProTableProps.props} + actionRef={actionLooks} + request={async (params, sort) => + MyProTableProps.request( + { + ...params, + banner_spaces_id: rest.item?.banner_spaces_id, + }, + sort, + Apis.Banner.Banners.List, + ) + } + toolBarRender={(action) => [ + , + ]} + search={false} + columns={[ + MyColumns.ID(), + { + title: '广告名称', + dataIndex: 'name', + }, + MyColumns.EnumTag({ + title: '类型', + dataIndex: 'type', + valueEnum: BannersTypeEnum, + search: false, + }), + MyColumns.EnumTag({ + title: '跳转类型', + dataIndex: 'redirect_type', + valueEnum: BannersRedirectTypeEnum, + search: false, + }), + { + title: '开始时间', + dataIndex: 'start_time', + valueType: 'dateTime', + search: false, + }, + { + title: '结束时间', + dataIndex: 'end_time', + valueType: 'dateTime', + search: false, + }, + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + + + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/banner_space/components/BannerSpaceInfo.tsx b/src/pages/banner_space/components/BannerSpaceInfo.tsx new file mode 100644 index 0000000..2d9297e --- /dev/null +++ b/src/pages/banner_space/components/BannerSpaceInfo.tsx @@ -0,0 +1,31 @@ +import { MyBetaModalFormProps, renderTextHelper } from '@/common'; +import { BannerSpacesTypeEnum } from '@/gen/Enums'; +import { ProCard, ProDescriptions } from '@ant-design/pro-components'; +import { Space } from 'antd'; + +export default function info(props: MyBetaModalFormProps) { + const { item } = props; + + return ( + + + + + {item?.name} + + + + + + + {item?.remark} + + + + + ); +} diff --git a/src/pages/banner_space/index.tsx b/src/pages/banner_space/index.tsx new file mode 100644 index 0000000..f225963 --- /dev/null +++ b/src/pages/banner_space/index.tsx @@ -0,0 +1,91 @@ +import { + MyButtons, + MyColumns, + MyPageContainer, + MyProTableProps, + usePageTabs, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { BannerSpacesTypeEnum } from '@/gen/Enums'; +import { ProTable } from '@ant-design/pro-components'; +import { useNavigate } from '@umijs/max'; +import { Space } from 'antd'; +import BannerSpaceCreate from './modals/BannerSpaceCreate'; +import BannerSpaceUpdate from './modals/BannerSpaceUpdate'; + +export default function Index({ title = '广告位' }) { + const navigate = useNavigate(); + + // 注册当前页面为标签页 + usePageTabs({ + tabKey: 'banner-spaces', + tabLabel: title, + }); + + return ( + + + MyProTableProps.request(params, sort, Apis.Banner.BannerSpaces.List) + } + toolBarRender={(action) => [ + , + ]} + columns={[ + MyColumns.ID(), + { + title: '广告位名称', + dataIndex: 'name', + }, + MyColumns.EnumTag({ + title: '类型', + dataIndex: 'type', + valueEnum: BannerSpacesTypeEnum, + search: false, + }), + { + title: '备注', + dataIndex: 'remark', + search: false, + ellipsis: true, + }, + MyColumns.CreatedAt(), + MyColumns.Option({ + render: (_, item: any, index, action) => ( + + { + navigate(`/banner_space/${item.id}`); + }} + /> + + + Apis.Banner.BannerSpaces.Delete({ id: item.id }).then(() => + action?.reload(), + ) + } + /> + + ), + }), + ]} + /> + + ); +} diff --git a/src/pages/banner_space/modals/BannerSpaceCreate.tsx b/src/pages/banner_space/modals/BannerSpaceCreate.tsx new file mode 100644 index 0000000..def0cfe --- /dev/null +++ b/src/pages/banner_space/modals/BannerSpaceCreate.tsx @@ -0,0 +1,58 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { BannerSpacesTypeEnum } from '@/gen/Enums'; +import { BetaSchemaForm } from '@ant-design/pro-components'; +import { message } from 'antd'; + +export default function Create(props: MyBetaModalFormProps) { + return ( + + {...MyModalFormProps.props} + title={`添加广告位`} + wrapperCol={{ span: 24 }} + width="500px" + trigger={} + onFinish={async (values) => + Apis.Banner.BannerSpaces.Store(values) + .then(() => { + props.reload?.(); + message.success('添加广告位成功'); + return true; + }) + .catch(() => false) + } + columns={[ + { + key: 'name', + title: '广告位名称', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }, + MyFormItems.EnumRadio({ + key: 'type', + title: '类型', + colProps: { span: 24 }, + valueEnum: BannerSpacesTypeEnum, + required: true, + }), + { + key: 'remark', + title: '备注', + valueType: 'textarea', + colProps: { span: 24 }, + fieldProps: { + rows: 4, + maxLength: 500, + showCount: true, + }, + }, + ]} + /> + ); +} diff --git a/src/pages/banner_space/modals/BannerSpaceUpdate.tsx b/src/pages/banner_space/modals/BannerSpaceUpdate.tsx new file mode 100644 index 0000000..eb86cfd --- /dev/null +++ b/src/pages/banner_space/modals/BannerSpaceUpdate.tsx @@ -0,0 +1,66 @@ +import { + MyBetaModalFormProps, + MyButtons, + MyFormItems, + MyModalFormProps, + rulesHelper, +} from '@/common'; +import { Apis } from '@/gen/Apis'; +import { BannerSpacesTypeEnum } 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 ( + + {...MyModalFormProps.props} + title={`编辑广告位`} + trigger={} + wrapperCol={{ span: 24 }} + width="600px" + key={new Date().getTime()} + form={form} + onOpenChange={(open: any) => { + if (open && props.item) { + form.setFieldsValue(props.item); + } + }} + onFinish={async (values) => + Apis.Banner.BannerSpaces.Update({ ...values, id: props.item?.id ?? 0 }) + .then(() => { + props.reload?.(); + message.success('编辑广告位成功'); + return true; + }) + .catch(() => false) + } + columns={[ + { + key: 'name', + title: '广告位名称', + colProps: { span: 24 }, + formItemProps: { ...rulesHelper.text }, + }, + MyFormItems.EnumRadio({ + key: 'type', + title: '类型', + colProps: { span: 24 }, + valueEnum: BannerSpacesTypeEnum, + required: true, + }), + { + key: 'remark', + title: '备注', + valueType: 'textarea', + colProps: { span: 24 }, + fieldProps: { + rows: 4, + maxLength: 500, + showCount: true, + }, + }, + ]} + /> + ); +} \ No newline at end of file diff --git a/src/pages/house_bills/index.tsx b/src/pages/bills/index.tsx similarity index 64% rename from src/pages/house_bills/index.tsx rename to src/pages/bills/index.tsx index 5c76bc0..865e4b6 100644 --- a/src/pages/house_bills/index.tsx +++ b/src/pages/bills/index.tsx @@ -9,21 +9,21 @@ import { Apis } from '@/gen/Apis'; import { HouseBillsTypeEnum } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; -import Create from './modals/Create'; -import Update from './modals/Update'; +import BillCreate from './modals/BillCreate'; +import BillUpdate from './modals/BillUpdate'; export default function Index({ title = '账单' }) { // 注册当前页面为标签页 usePageTabs({ - tabKey: 'house-bills', + tabKey: 'bills', tabLabel: title, }); - + return ( - [ - , + , ]} columns={[ MyColumns.ID(), @@ -52,61 +52,46 @@ export default function Index({ title = '账单' }) { }, { title: '账单月份', - dataIndex: 'month', - width: 100, + render: (_, record) => { + return `${record.year}-${String(record.month).padStart(2, '0')}`; + }, }, { title: '账单金额', dataIndex: 'amount', search: false, - width: 100, }, { title: '优惠金额', dataIndex: 'discount_amount', search: false, - width: 100, }, { title: '滞纳金', dataIndex: 'late_fee', search: false, - width: 100, }, - // { - // title: '计费开始日期', - // dataIndex: 'start_date', - // search: false, - // width: 120, - // }, - // { - // title: '计费结束日期', - // dataIndex: 'end_date', - // search: false, - // width: 120, - // }, - // { - // title: '滞纳金起算日期', - // dataIndex: 'late_start_date', - // search: false, - // }, - // { - // title: '已收滞纳金天数', - // dataIndex: 'collected_late_fee_days', - // search: false, - // // }, - // { + { + title: '计费开始日期', + dataIndex: 'start_date', + search: false, + }, + { + title: '计费结束日期', + dataIndex: 'end_date', + search: false, + }, + // title: '备注', // dataIndex: 'remark', // search: false, // }, - // MyColumns.CreatedAt(), - MyColumns.UpdatedAt(), + MyColumns.CreatedAt(), MyColumns.Option({ render: (_, item: any, index, action) => ( - + Apis.Common.Admins.Delete({ id: item.id }).then(() => diff --git a/src/pages/house_bills/modals/Create.tsx b/src/pages/bills/modals/BillCreate.tsx similarity index 91% rename from src/pages/house_bills/modals/Create.tsx rename to src/pages/bills/modals/BillCreate.tsx index a16e9af..d2343a2 100644 --- a/src/pages/house_bills/modals/Create.tsx +++ b/src/pages/bills/modals/BillCreate.tsx @@ -20,6 +20,8 @@ export default function Create(props: MyBetaModalFormProps) { wrapperCol={{ span: 24 }} width="600px" trigger={} + key={new Date().getTime()} + form={form} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 @@ -97,6 +99,13 @@ export default function Create(props: MyBetaModalFormProps) { ]; }, }, + MyFormItems.EnumRadio({ + key: 'type', + title: '收费项目', + colProps: { span: 24 }, + valueEnum: HouseBillsTypeEnum, + required: true, + }), { key: 'amount', title: '账单金额', @@ -134,28 +143,7 @@ export default function Create(props: MyBetaModalFormProps) { }, colProps: { span: 8 }, }, - MyFormItems.EnumRadio({ - key: 'type', - title: '收费项目', - colProps: { span: 24 }, - valueEnum: HouseBillsTypeEnum, - required: true, - }), - { - key: 'month', - title: '账单月份', - valueType: 'date', - colProps: { span: 8 }, - fieldProps: { - picker: 'month', - format: 'YYYY-MM', - valueFormat: 'YYYY-MM-01', - style: { - width: '100%', - }, - }, - formItemProps: { ...rulesHelper.text }, - }, + { key: 'start_date', title: '计费开始日期', @@ -180,6 +168,21 @@ export default function Create(props: MyBetaModalFormProps) { }, formItemProps: { ...rulesHelper.text }, }, + { + key: 'month', + title: '账单月份', + valueType: 'date', + colProps: { span: 8 }, + fieldProps: { + picker: 'month', + format: 'YYYY-MM', + valueFormat: 'YYYY-MM', + style: { + width: '100%', + }, + }, + formItemProps: { ...rulesHelper.text }, + }, { valueType: 'dependency', name: ['asset_projects_id'], @@ -211,30 +214,6 @@ export default function Create(props: MyBetaModalFormProps) { ]; }, }, - - { - key: 'late_start_date', - title: '滞纳金起算日期', - valueType: 'date', - fieldProps: { - style: { - width: '100%', - }, - }, - colProps: { span: 8 }, - }, - { - key: 'collected_late_fee_days', - title: '已收滞纳金天数', - valueType: 'digit', - fieldProps: { - addonAfter: '天', - style: { - width: '100%', - }, - }, - colProps: { span: 8 }, - }, { title: '备注', key: 'remark', diff --git a/src/pages/house_bills/modals/Update.tsx b/src/pages/bills/modals/BillUpdate.tsx similarity index 68% rename from src/pages/house_bills/modals/Update.tsx rename to src/pages/bills/modals/BillUpdate.tsx index 5a7adfd..f018b93 100644 --- a/src/pages/house_bills/modals/Update.tsx +++ b/src/pages/bills/modals/BillUpdate.tsx @@ -5,6 +5,7 @@ import { MyModalFormProps, rulesHelper, } from '@/common'; +import { Selects } from '@/components/Select'; import { Apis } from '@/gen/Apis'; import { HouseBillsTypeEnum } from '@/gen/Enums'; import { BetaSchemaForm } from '@ant-design/pro-components'; @@ -19,10 +20,21 @@ export default function Update(props: MyBetaModalFormProps) { trigger={} wrapperCol={{ span: 24 }} width="600px" + key={new Date().getTime()} form={form} onOpenChange={(open: any) => { if (open && props.item) { - form.setFieldsValue(props.item); + const formValues = { + ...props.item, + month: + props.item.year && props.item.month + ? `${props.item.year}-${String(props.item.month).padStart( + 2, + '0', + )}` + : props.item.month, + }; + form.setFieldsValue(formValues); } }} onFinish={async (values) => @@ -78,21 +90,6 @@ export default function Update(props: MyBetaModalFormProps) { colProps: { span: 8 }, }, - { - key: 'month', - title: '账单月份', - valueType: 'date', - colProps: { span: 8 }, - fieldProps: { - picker: 'month', - format: 'YYYY-MM', - valueFormat: 'YYYY-MM', - style: { - width: '100%', - }, - }, - formItemProps: { ...rulesHelper.text }, - }, { key: 'start_date', title: '计费开始日期', @@ -118,27 +115,50 @@ export default function Update(props: MyBetaModalFormProps) { formItemProps: { ...rulesHelper.text }, }, { - key: 'late_start_date', - title: '滞纳金起算日期', + key: 'month', + title: '账单月份', valueType: 'date', + colProps: { span: 8 }, fieldProps: { + picker: 'month', + format: 'YYYY-MM', + valueFormat: 'YYYY-MM', style: { width: '100%', }, }, - colProps: { span: 8 }, + formItemProps: { ...rulesHelper.text }, }, { - key: 'collected_late_fee_days', - title: '已收滞纳金天数', - valueType: 'digit', - fieldProps: { - addonAfter: '天', - style: { - width: '100%', - }, + 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, + }); + }, + }, + }), + ], + }, + ]; }, - colProps: { span: 8 }, }, { title: '备注', diff --git a/src/pages/company/companies/$id.tsx b/src/pages/company/$id.tsx similarity index 74% rename from src/pages/company/companies/$id.tsx rename to src/pages/company/$id.tsx index 63841a2..3fb5783 100644 --- a/src/pages/company/companies/$id.tsx +++ b/src/pages/company/$id.tsx @@ -1,4 +1,4 @@ -import { MyPageContainer } from '@/common'; +import { MyPageContainer, usePageTabs } from '@/common'; import { Apis } from '@/gen/Apis'; import { ProCard } from '@ant-design/pro-components'; import { useParams } from '@umijs/max'; @@ -10,14 +10,28 @@ import Organizations from './components/Organizations'; import Positions from './components/Positions'; import Projects from './components/Projects'; import ReceiptAccounts from './components/ReceiptAccounts'; -export default function Show({ title = '机构详情' }) { + +export default function Show({ title }: { title?: string } = {}) { const { id } = useParams<{ id: string }>(); const [data, setShow] = useState({}); + // 注册当前页面为标签页 + const { addTab } = usePageTabs({ + tabKey: `company-show-${id}`, + tabLabel: data?.short_name || title || '资产详情', + }); const loadShow = () => { let paramsId: any = { id: id ?? 0 }; Apis.Company.Companies.Show(paramsId).then((res) => { setShow(res?.data); + // 更新标签页名称为API返回的name + if (res?.data?.short_name) { + addTab({ + key: `company-show-${id}`, + label: res.data.short_name, + path: `/company/${id}`, + }); + } }); }; useEffect(() => { @@ -25,45 +39,40 @@ export default function Show({ title = '机构详情' }) { }, [id]); let items = [ - { - label: '基本信息', - key: '1', - closable: false, - children: loadShow()} />, - }, { label: '项目管理', - key: '2', + key: '1', closable: false, children: , }, { label: '组织管理', - key: '3', + key: '2', closable: false, children: , }, + { + label: '岗位管理', + key: '3', + closable: false, + children: , + }, { label: '员工管理', key: '4', closable: false, children: , }, - { - label: '岗位管理', - key: '5', - closable: false, - children: , - }, { label: '收款账号', - key: '6', + key: '5', closable: false, children: , }, ]; return ( + diff --git a/src/pages/company/companies/components/ComponentsInfo.tsx b/src/pages/company/components/ComponentsInfo.tsx similarity index 78% rename from src/pages/company/companies/components/ComponentsInfo.tsx rename to src/pages/company/components/ComponentsInfo.tsx index 1f8363c..109270c 100644 --- a/src/pages/company/companies/components/ComponentsInfo.tsx +++ b/src/pages/company/components/ComponentsInfo.tsx @@ -2,17 +2,24 @@ import { MyBetaModalFormProps, renderTextHelper } from '@/common'; import { CompaniesMerchantTypeEnum } from '@/gen/Enums'; import { ProCard, ProDescriptions } from '@ant-design/pro-components'; import { Space } from 'antd'; -import Update from '../modals/Update'; +import CompanyUpdate from '../modals/CompanyUpdate'; export default function info(props: MyBetaModalFormProps) { return ( - + + {props?.item?.short_name} + + {props?.item?.name} - + @@ -22,13 +29,11 @@ export default function info(props: MyBetaModalFormProps) { key="merchant_type" /> - - {props?.item?.short_name} - - + + {props?.item?.business_license_number} - + {props?.item?.contact_name} @@ -38,16 +43,16 @@ export default function info(props: MyBetaModalFormProps) { {props?.item?.contact_email} - + {props?.item?.province || ''} {props?.item?.city || ''} {props?.item?.district || ''} {props?.item?.address || ''} - + {props?.item?.created_at} - + {props?.item?.updated_at} diff --git a/src/pages/company/companies/components/Employees.tsx b/src/pages/company/components/Employees.tsx similarity index 90% rename from src/pages/company/companies/components/Employees.tsx rename to src/pages/company/components/Employees.tsx index 02c8f94..0551abb 100644 --- a/src/pages/company/companies/components/Employees.tsx +++ b/src/pages/company/components/Employees.tsx @@ -7,8 +7,8 @@ import { import { Apis } from '@/gen/Apis'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; -import EmployeesCreate from '../modals/EmployeesCreate'; -import EmployeesUpdate from '../modals/EmployeesUpdate'; +import EmployeeCreate from './modals/EmployeeCreate'; +import EmployeeUpdate from './modals/EmployeeUpdate'; export default function Index(props: MyBetaModalFormProps) { return ( @@ -23,7 +23,7 @@ export default function Index(props: MyBetaModalFormProps) { ) } toolBarRender={(action) => [ - ( - MyProTableProps.request( { ...params, companies_id: props?.item?.id }, @@ -26,13 +25,14 @@ export default function Organizations(props: MyBetaModalFormProps) { ) } toolBarRender={(action) => [ - , ]} + // search={false} options={false} columns={[ MyColumns.EnumTag({ @@ -55,30 +55,15 @@ export default function Organizations(props: MyBetaModalFormProps) { dataIndex: ['organization_parent', 'name'], search: false, }, - { - title: '上级组织ID', - dataIndex: ['organization_parent', 'id'], - search: false, - }, - - // { - // title: '负责人', - // dataIndex: ['manager', 'name'], - // }, - // { - // title: '联系电话', - // dataIndex: 'manager_phone', - // }, - MyColumns.Option({ render: (_, item: any, index, action) => ( - - [ - ( - MyProTableProps.request( { ...params, companies_id: props?.item?.id }, @@ -33,25 +35,26 @@ export default function Index(props: MyBetaModalFormProps) { // title="组织" // />, // ]} - // options={false} + // search={false} + options={false} columns={[ MyColumns.ID(), + { + title: '项目名称', + dataIndex: 'name', + }, MyColumns.EnumTag({ title: '项目类型', dataIndex: 'property_type', valueEnum: AssetProjectsPropertyTypeEnum, search: false, }), - { - title: '项目名称', - dataIndex: 'name', - }, - - // { - // title: '项目编码', - // dataIndex: 'code', - // search: false, - // }, + MyColumns.EnumTag({ + title: '项目状态', + dataIndex: 'status', + valueEnum: AssetProjectsStatusEnum, + search: false, + }), { title: '地址', render: (_, i: any) => { @@ -61,39 +64,19 @@ export default function Index(props: MyBetaModalFormProps) { }, search: false, }, - // MyColumns.EnumTag({ - // title: '项目状态', - // dataIndex: 'status', - // valueEnum: AssetProjectsStatusEnum, - // search: false, - // }), - - // MyColumns.EnumTag({ - // title: '委托类型', - // dataIndex: 'entrust_type', - // valueEnum: AssetProjectsEntrustTypeEnum, - // search: false, - // }), - // MyColumns.EnumTag({ - // title: '收费方式', - // dataIndex: 'charge', - // valueEnum: AssetProjectsChargeEnum, - // search: false, - // }), MyColumns.SoftDelete({ title: '启/禁用', onRestore: Apis.Asset.AssetProjects.Restore, onSoftDelete: Apis.Asset.AssetProjects.SoftDelete, search: false, }), - // MyColumns.CreatedAt(), MyColumns.Option({ render: (_, item: any, index, action) => ( { - navigate(`/asset/asset_projects/${item.id}`); + navigate(`/asset/${item.id}`); }} /> diff --git a/src/pages/company/companies/components/ReceiptAccounts.tsx b/src/pages/company/components/ReceiptAccounts.tsx similarity index 81% rename from src/pages/company/companies/components/ReceiptAccounts.tsx rename to src/pages/company/components/ReceiptAccounts.tsx index 2b34ccf..f09857c 100644 --- a/src/pages/company/companies/components/ReceiptAccounts.tsx +++ b/src/pages/company/components/ReceiptAccounts.tsx @@ -7,8 +7,8 @@ import { import { Apis } from '@/gen/Apis'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; -import ReceiptAccountsCreate from '../modals/ReceiptAccountsCreate'; -import ReceiptAccountsUpdate from '../modals/ReceiptAccountsUpdate'; +import ReceiptAccountCreate from './modals/ReceiptAccountCreate'; +import ReceiptAccountUpdate from './modals/ReceiptAccountUpdate'; export default function ReceiptAccounts(props: MyBetaModalFormProps) { return ( @@ -24,7 +24,7 @@ export default function ReceiptAccounts(props: MyBetaModalFormProps) { ) } toolBarRender={(action) => [ - ( - } wrapperCol={{ span: 24 }} width="500px" + key={new Date().getTime()} form={form} onOpenChange={(open: any) => { if (open && props.item) { @@ -52,7 +53,7 @@ export default function Update(props: MyBetaModalFormProps) { // formItemProps: { ...rulesHelper.text }, // }), Selects?.OrganizationsTree({ - title: '选择新的上级组织', + title: '选择组织', key: 'organizations_id', params: { companies_id: props?.item?.companies_id }, colProps: { span: 24 }, @@ -63,7 +64,7 @@ export default function Update(props: MyBetaModalFormProps) { { key: 'name', title: '姓名', - colProps: { span: 6 }, + colProps: { span: 8 }, formItemProps: { ...rulesHelper.text }, }, { @@ -73,7 +74,7 @@ export default function Update(props: MyBetaModalFormProps) { fieldProps: { maxLength: 11, }, - colProps: { span: 12 }, + colProps: { span: 10 }, formItemProps: { ...rulesHelper.phone }, }, MyFormItems.EnumRadio({ diff --git a/src/pages/company/companies/modals/OrganizationsChange.tsx b/src/pages/company/components/modals/OrganizationChange.tsx similarity index 94% rename from src/pages/company/companies/modals/OrganizationsChange.tsx rename to src/pages/company/components/modals/OrganizationChange.tsx index 8ddd9ec..556e401 100644 --- a/src/pages/company/companies/modals/OrganizationsChange.tsx +++ b/src/pages/company/components/modals/OrganizationChange.tsx @@ -9,7 +9,7 @@ export default function Update(props: MyBetaModalFormProps) { return ( {...MyModalFormProps.props} - title={`选择新的上级${props.title}`} + title={`${props.title}调整`} form={form} trigger={} wrapperCol={{ span: 24 }} @@ -38,7 +38,7 @@ export default function Update(props: MyBetaModalFormProps) { } columns={[ Selects?.OrganizationsTree({ - title: '选择新的上级组织', + title: '请选择新的上级组织', key: 'parent_id', params: { companies_id: props?.item?.companies_id }, colProps: { span: 24 }, diff --git a/src/pages/company/companies/modals/OrganizationsCreate.tsx b/src/pages/company/components/modals/OrganizationCreate.tsx similarity index 100% rename from src/pages/company/companies/modals/OrganizationsCreate.tsx rename to src/pages/company/components/modals/OrganizationCreate.tsx diff --git a/src/pages/company/companies/modals/OrganizationsUpdate.tsx b/src/pages/company/components/modals/OrganizationUpdate.tsx similarity index 98% rename from src/pages/company/companies/modals/OrganizationsUpdate.tsx rename to src/pages/company/components/modals/OrganizationUpdate.tsx index bd88e5c..482ddcc 100644 --- a/src/pages/company/companies/modals/OrganizationsUpdate.tsx +++ b/src/pages/company/components/modals/OrganizationUpdate.tsx @@ -16,10 +16,11 @@ export default function Update(props: MyBetaModalFormProps) { {...MyModalFormProps.props} title={`编辑${props.title}`} - form={form} trigger={} wrapperCol={{ span: 24 }} width="500px" + key={new Date().getTime()} + form={form} onOpenChange={(open: any) => { if (open && props.item) { form.setFieldsValue(props.item); diff --git a/src/pages/company/companies/modals/PositionsCreate.tsx b/src/pages/company/components/modals/PositionCreate.tsx similarity index 100% rename from src/pages/company/companies/modals/PositionsCreate.tsx rename to src/pages/company/components/modals/PositionCreate.tsx index 1f29172..3a5e53d 100644 --- a/src/pages/company/companies/modals/PositionsCreate.tsx +++ b/src/pages/company/components/modals/PositionCreate.tsx @@ -16,8 +16,8 @@ export default function Create(props: MyBetaModalFormProps) { title={`添加岗位`} wrapperCol={{ span: 24 }} width="500px" - form={form} trigger={} + form={form} onOpenChange={(open: any) => { if (open) { form.resetFields(); // 清空表单数据 diff --git a/src/pages/company/companies/modals/PositionsUpdate.tsx b/src/pages/company/components/modals/PositionUpdate.tsx similarity index 98% rename from src/pages/company/companies/modals/PositionsUpdate.tsx rename to src/pages/company/components/modals/PositionUpdate.tsx index 59d1ca6..85d5ab5 100644 --- a/src/pages/company/companies/modals/PositionsUpdate.tsx +++ b/src/pages/company/components/modals/PositionUpdate.tsx @@ -18,6 +18,7 @@ export default function Update(props: MyBetaModalFormProps) { wrapperCol={{ span: 24 }} width="500px" form={form} + key={new Date().getTime()} onOpenChange={(open: any) => { if (open && props.item) { form.setFieldsValue(props.item); diff --git a/src/pages/company/companies/modals/ReceiptAccountsCreate.tsx b/src/pages/company/components/modals/ReceiptAccountCreate.tsx similarity index 91% rename from src/pages/company/companies/modals/ReceiptAccountsCreate.tsx rename to src/pages/company/components/modals/ReceiptAccountCreate.tsx index df70dcd..4952433 100644 --- a/src/pages/company/companies/modals/ReceiptAccountsCreate.tsx +++ b/src/pages/company/components/modals/ReceiptAccountCreate.tsx @@ -65,12 +65,12 @@ export default function Create(props: MyBetaModalFormProps) { valueEnum: CompanyReceiptAccountsPayChannelEnum, required: true, }), - { - key: 'is_default', - title: '是否设为默认账号', - valueType: 'switch', - colProps: { span: 24 }, - }, + // { + // key: 'is_default', + // title: '是否设为默认账号', + // valueType: 'switch', + // colProps: { span: 24 }, + // }, ]} /> ); diff --git a/src/pages/company/companies/modals/ReceiptAccountsUpdate.tsx b/src/pages/company/components/modals/ReceiptAccountUpdate.tsx similarity index 90% rename from src/pages/company/companies/modals/ReceiptAccountsUpdate.tsx rename to src/pages/company/components/modals/ReceiptAccountUpdate.tsx index fdd0498..316ded2 100644 --- a/src/pages/company/companies/modals/ReceiptAccountsUpdate.tsx +++ b/src/pages/company/components/modals/ReceiptAccountUpdate.tsx @@ -20,6 +20,7 @@ export default function Update(props: MyBetaModalFormProps) { wrapperCol={{ span: 24 }} width="500px" form={form} + key={new Date().getTime()} onOpenChange={(open: any) => { if (open && props.item) { form.setFieldsValue(props.item); @@ -64,12 +65,12 @@ export default function Update(props: MyBetaModalFormProps) { valueEnum: CompanyReceiptAccountsPayChannelEnum, required: true, }), - { - key: 'is_default', - title: '是否设为默认账号', - valueType: 'switch', - colProps: { span: 24 }, - }, + // { + // key: 'is_default', + // title: '是否设为默认账号', + // valueType: 'switch', + // colProps: { span: 24 }, + // }, ]} /> ); diff --git a/src/pages/company/companies/index.tsx b/src/pages/company/index.tsx similarity index 76% rename from src/pages/company/companies/index.tsx rename to src/pages/company/index.tsx index 32d88c1..47d2690 100644 --- a/src/pages/company/companies/index.tsx +++ b/src/pages/company/index.tsx @@ -10,19 +10,19 @@ import { CompaniesMerchantTypeEnum } from '@/gen/Enums'; import { ProTable } from '@ant-design/pro-components'; import { useNavigate } from '@umijs/max'; import { Space } from 'antd'; -import Create from './modals/Create'; +import CompanyCreate from './modals/CompanyCreate'; -export default function Index({ title = '机构管理' }) { +export default function Index({ title = '机构列表' }) { const navigate = useNavigate(); - + // 注册当前页面为标签页 usePageTabs({ tabKey: 'company-companies', tabLabel: title, }); - + return ( - [ - , + , ]} columns={[ MyColumns.ID(), + { + title: '组织简称', + dataIndex: 'short_name', + }, + { + title: '企业名称', + dataIndex: 'name', + }, MyColumns.EnumTag({ title: '类型', dataIndex: 'merchant_type', valueEnum: CompaniesMerchantTypeEnum, + search: false, }), - { - title: '机构名称', - dataIndex: 'name', - }, - { - title: '组织简称', - dataIndex: 'short_name', + MyColumns.SoftDelete({ + onRestore: Apis.Company.Companies.Restore, + onSoftDelete: Apis.Company.Companies.SoftDelete, search: false, - }, - - { - title: '营业执照号', - dataIndex: 'business_license_number', - search: false, - }, - MyColumns.UpdatedAt(), - // MyColumns.CreatedAt(), + }), + MyColumns.CreatedAt(), MyColumns.Option({ render: (_, item: any, index, action) => ( - {/* */} { - navigate(`/company/companies/${item.id}`); + navigate(`/company/${item.id}`); }} /> } onFinish={async (values) => Apis.Company.Companies.Store({ @@ -31,37 +32,31 @@ export default function Create(props: MyBetaModalFormProps) { } columns={[ { - key: 'name', - title: '机构名称', - colProps: { span: 8 }, + key: 'short_name', + title: '机构简称', + colProps: { span: 6 }, formItemProps: { ...rulesHelper.text }, }, { - key: 'short_name', - title: '机构简称', - colProps: { span: 8 }, + key: 'name', + title: '企业名称', + colProps: { span: 18 }, + formItemProps: { ...rulesHelper.text }, }, { key: 'business_license_number', title: '营业执照号', - colProps: { span: 8 }, + colProps: { span: 24 }, formItemProps: { ...rulesHelper.text }, fieldProps: { maxLength: 18, }, }, - // MyFormItems.EnumRadio({ - // key: 'merchant_type', - // title: '商户类型', - // colProps: { span: 8 }, - // valueEnum: CompaniesMerchantTypeEnum, - // required: true, - // }), { key: 'contact_name', title: '联系人姓名', - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, + colProps: { span: 6 }, + // formItemProps: { ...rulesHelper.text }, }, { key: 'contact_phone', @@ -71,37 +66,43 @@ export default function Create(props: MyBetaModalFormProps) { fieldProps: { maxLength: 11, }, - formItemProps: { ...rulesHelper.phone }, + // formItemProps: { ...rulesHelper.phone }, }, { key: 'contact_email', title: '联系人邮箱', - colProps: { span: 8 }, + valueType: 'text', + colProps: { span: 10 }, + fieldProps: { + placeholder: '139@mail.com', + type: 'email', + }, + formItemProps: { + rules: [ + { + pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, + message: '请输入正确的邮箱,如 139@email.com 格式输入', + }, + ], + }, }, - // { - // key: 'contact_address', - // title: '联系人地址', - // colProps: { span: 24 }, - // }, - Address.Cascader({ key: 'casacader', title: '联系地址', - colProps: { span: 16 }, + colProps: { span: 14 }, keys: ['province', 'city', 'area', 'street'], required: true, }), { key: 'address', title: '详细地址', - colProps: { span: 8 }, + colProps: { span: 10 }, }, - // MyFormItems.UploadImages({ - // key: 'business_license_image', - // title: '营业执照', - // max: 1, - // colProps: { span: 6 }, - // }), + MyFormItems.UploadImages({ + key: 'business_license_image', + title: '营业执照', + max: 1, + }), ]} /> ); diff --git a/src/pages/company/companies/modals/Update.tsx b/src/pages/company/modals/CompanyUpdate.tsx similarity index 68% rename from src/pages/company/companies/modals/Update.tsx rename to src/pages/company/modals/CompanyUpdate.tsx index a233c0c..7b72009 100644 --- a/src/pages/company/companies/modals/Update.tsx +++ b/src/pages/company/modals/CompanyUpdate.tsx @@ -1,6 +1,7 @@ import { MyBetaModalFormProps, MyButtons, + MyFormItems, MyModalFormProps, rulesHelper, } from '@/common'; @@ -15,10 +16,11 @@ export default function Update(props: MyBetaModalFormProps) { {...MyModalFormProps.props} title={`编辑${props.title}`} - form={form} trigger={} wrapperCol={{ span: 24 }} - width="800px" + width="600px" + key={new Date().getTime()} + form={form} onOpenChange={(open: any) => { if (open && props.item) { form.setFieldsValue({ @@ -43,28 +45,31 @@ export default function Update(props: MyBetaModalFormProps) { } columns={[ { - key: 'name', - title: '机构名称', - colProps: { span: 8 }, + key: 'short_name', + title: '机构简称', + colProps: { span: 6 }, formItemProps: { ...rulesHelper.text }, }, { - key: 'short_name', - title: '机构简称', - colProps: { span: 8 }, + key: 'name', + title: '企业名称', + colProps: { span: 18 }, + formItemProps: { ...rulesHelper.text }, }, { key: 'business_license_number', title: '营业执照号', - colProps: { span: 8 }, + colProps: { span: 24 }, formItemProps: { ...rulesHelper.text }, + fieldProps: { + maxLength: 18, + }, }, - { key: 'contact_name', title: '联系人姓名', - colProps: { span: 8 }, - formItemProps: { ...rulesHelper.text }, + colProps: { span: 6 }, + // formItemProps: { ...rulesHelper.text }, }, { key: 'contact_phone', @@ -74,37 +79,43 @@ export default function Update(props: MyBetaModalFormProps) { fieldProps: { maxLength: 11, }, - formItemProps: { ...rulesHelper.number }, + // formItemProps: { ...rulesHelper.phone }, }, { key: 'contact_email', title: '联系人邮箱', - colProps: { span: 8 }, + valueType: 'text', + colProps: { span: 10 }, + fieldProps: { + placeholder: '139@mail.com', + type: 'email', + }, + formItemProps: { + rules: [ + { + pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, + message: '请输入正确的邮箱,如 139@email.com 格式输入', + }, + ], + }, }, - // { - // key: 'contact_address', - // title: '联系人地址', - // colProps: { span: 16 }, - // }, - // MyFormItems.EnumRadio({ - // key: 'merchant_type', - // title: '商户类型', - // colProps: { span: 24 }, - // valueEnum: CompaniesMerchantTypeEnum, - // required: true, - // }), Address.Cascader({ key: 'casacader', - title: '选择地址', - colProps: { span: 16 }, + title: '联系地址', + colProps: { span: 14 }, keys: ['province', 'city', 'area', 'street'], required: true, }), { key: 'address', title: '详细地址', - colProps: { span: 8 }, + colProps: { span: 10 }, }, + MyFormItems.UploadImages({ + key: 'business_license_image', + title: '营业执照', + max: 1, + }), ]} /> ); diff --git a/src/pages/employees/index.tsx b/src/pages/employees/index.tsx index a81b043..a4b61f5 100644 --- a/src/pages/employees/index.tsx +++ b/src/pages/employees/index.tsx @@ -8,19 +8,18 @@ import { import { Apis } from '@/gen/Apis'; import { ProTable } from '@ant-design/pro-components'; import { Space } from 'antd'; -import EmployeesCreate from '../company/companies/modals/EmployeesCreate'; -import EmployeesUpdate from '../company/companies/modals/EmployeesUpdate'; +import EmployeeUpdate from '../company/components/modals/EmployeeUpdate'; export default function Index({ title = '员工管理' }) { // 使用多标签页功能 usePageTabs({ tabKey: 'employees-list', tabLabel: title, - closable: true + closable: true, }); return ( - [ - , - ]} + // toolBarRender={(action) => [ + // , + // ]} columns={[ MyColumns.ID(), - MyColumns.Companies({ - title: '选择机构', - }), { title: '机构', dataIndex: ['company', 'name'], @@ -69,13 +65,14 @@ export default function Index({ title = '员工管理' }) { { title: '岗位', dataIndex: ['position', 'name'], + search: false, }, MyColumns.UpdatedAt(), // MyColumns.CreatedAt(), MyColumns.Option({ render: (_, item: any, index, action) => ( - - + /> */} {...MyModalFormProps.props} title={`添加${props.title}`} - form={form} wrapperCol={{ span: 24 }} width="600px" trigger={ } + // 确保正确弹窗,使用动态的时间参数 + key={new Date().getTime()} + form={form} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + } + }} onFinish={async (values) => { return Apis.Permission.SysPermissions.Store({ ...values, @@ -40,14 +47,6 @@ export default function Create( }) .catch(() => false); }} - onOpenChange={(open: boolean) => { - if (open && props.item) { - form.setFieldsValue({ - parent_id: props.item.id || undefined, - icon: undefined, - }); - } - }} columns={[ SysSelects.SysPermissionsTree({ guard_name: props.guardName }), { diff --git a/src/pages/system/sys_permissions/modals/Update.tsx b/src/pages/system/sys_permissions/modals/Update.tsx index 8b9bc61..7f8af08 100644 --- a/src/pages/system/sys_permissions/modals/Update.tsx +++ b/src/pages/system/sys_permissions/modals/Update.tsx @@ -20,9 +20,16 @@ export default function Update( {...MyModalFormProps.props} title={`编辑${props.title}`} - form={form} 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) => { return Apis.Permission.SysPermissions.Update({ ...values, @@ -36,11 +43,6 @@ export default function Update( }) .catch(() => false); }} - onOpenChange={(open: any) => { - if (open && props.item) { - form.setFieldsValue(props.item); - } - }} trigger={} columns={[ SysSelects.SysPermissionsTree({ guard_name: props.guardName }), diff --git a/src/pages/system/sys_roles/index.tsx b/src/pages/system/sys_roles/index.tsx index da09bf3..9a3cfd7 100644 --- a/src/pages/system/sys_roles/index.tsx +++ b/src/pages/system/sys_roles/index.tsx @@ -18,9 +18,9 @@ export default function Index({ title = '角色' }) { tabKey: 'system-roles', tabLabel: title, }); - + return ( - {...MyModalFormProps.props} + form={form} title={`添加${props.title}`} wrapperCol={{ span: 24 }} width="500px" trigger={} + onOpenChange={(open: any) => { + if (open) { + form.resetFields(); // 清空表单数据 + } + }} onFinish={async (values) => Apis.Permission.SysRoles.Store(values) .then(() => { diff --git a/src/pages/system/sys_roles/modals/Update.tsx b/src/pages/system/sys_roles/modals/Update.tsx index 2661286..c9ec293 100644 --- a/src/pages/system/sys_roles/modals/Update.tsx +++ b/src/pages/system/sys_roles/modals/Update.tsx @@ -7,17 +7,24 @@ import { } from '@/common'; import { Apis } from '@/gen/Apis'; import { BetaSchemaForm } from '@ant-design/pro-components'; -import { message } from 'antd'; +import { Form, message } from 'antd'; export default function Update(props: MyBetaModalFormProps) { + const [form] = Form.useForm(); + return ( {...MyModalFormProps.props} + form={form} title={`编辑${props.title}`} wrapperCol={{ span: 24 }} width="500px" trigger={} - request={async () => props.item} + onOpenChange={(open: any) => { + if (open && props.item) { + form.setFieldsValue(props.item); + } + }} onFinish={async (values) => { return Apis.Permission.SysRoles.Update({ ...values,