From 1f120407d792c37cc09a822c0dd110fc5ce49866 Mon Sep 17 00:00:00 2001 From: seaheart Date: Sat, 8 Jul 2023 14:59:37 +0800 Subject: [PATCH] add user space edit change --- src/common/model/space/Space.ts | 20 +++++++++++ src/common/model/user/User.ts | 44 +++++++++++++++++++---- src/common/model/user/UserRole.ts | 6 ---- src/pages/layout/widget/Capacity.tsx | 10 +++--- src/pages/matter/List.tsx | 6 ++-- src/pages/matter/widget/MatterImage.tsx | 7 ++-- src/pages/preference/Edit.tsx | 2 -- src/pages/space/List.tsx | 10 +++--- src/pages/user/Detail.tsx | 6 ++-- src/pages/user/Edit.tsx | 29 ++++++++------- src/pages/user/List.tsx | 9 ++--- src/pages/user/widget/MobileUserPanel.tsx | 6 ++-- 12 files changed, 100 insertions(+), 55 deletions(-) diff --git a/src/common/model/space/Space.ts b/src/common/model/space/Space.ts index 9e53f21..e1d327c 100644 --- a/src/common/model/space/Space.ts +++ b/src/common/model/space/Space.ts @@ -1,5 +1,6 @@ import BaseEntity from '../base/BaseEntity'; import User from '../user/User'; +import FileUtil from '../../util/FileUtil'; export interface SpaceFormValues { name: string; @@ -33,4 +34,23 @@ export default class Space extends BaseEntity { uuid: this.uuid ? this.uuid : null, }; } + + getHumanizeTotalSize() { + return FileUtil.humanFileSize(this.totalSize); + } + + getHumanizeSizeLimit() { + return FileUtil.humanFileSize(this.sizeLimit); + } + + getHumanizeTotalSizeLimit() { + return FileUtil.humanFileSize(this.totalSizeLimit); + } + + getUsedPercent() { + if (this.totalSizeLimit === 0) { + return 0; + } + return (this.totalSize / this.totalSizeLimit) * 100; + } } diff --git a/src/common/model/user/User.ts b/src/common/model/user/User.ts index 56fe55e..f7e110d 100644 --- a/src/common/model/user/User.ts +++ b/src/common/model/user/User.ts @@ -8,6 +8,7 @@ import Filter from '../base/filter/Filter'; import SortFilter from '../base/filter/SortFilter'; import InputFilter from '../base/filter/InputFilter'; import SelectionFilter from '../base/filter/SelectionFilter'; +import Space from '../space/Space'; export default class User extends BaseEntity { //获取当前登录者的信息 @@ -28,12 +29,9 @@ export default class User extends BaseEntity { avatarUrl: string | null = null; lastIp: string | null = null; lastTime: Date = new Date(); - //默认大小限制100Mb. - sizeLimit: number = 104857600; - totalSize: number = 0; - totalSizeLimit: number = -1; status: UserStatus = UserStatus.OK; spaceUuid: string | null = null; + space: Space | null = null; constructor(reactComponent?: React.Component) { super(reactComponent); @@ -43,6 +41,7 @@ export default class User extends BaseEntity { super.assign(obj); this.assignEntity('lastTime', Date); + this.assignEntity('space', Space); } getTAG(): string { @@ -64,8 +63,6 @@ export default class User extends BaseEntity { password: this.password, role: this.role, avatarUrl: this.avatarUrl, - sizeLimit: this.sizeLimit, - totalSizeLimit: this.totalSizeLimit, uuid: this.uuid ? this.uuid : null, }; } @@ -161,6 +158,41 @@ export default class User extends BaseEntity { } } + httpSave( + limit: { + sizeLimit: number; + totalSizeLimit: number; + }, + successCallback?: any, + errorCallback?: any, + finallyCallback?: any + ) { + let that = this; + + let url = this.getUrlCreate(); + if (this.uuid) { + url = this.getUrlEdit(); + } + + this.errorMessage = this.validate(); + if (this.errorMessage) { + that.defaultErrorHandler(this.errorMessage, errorCallback); + return; + } + + this.httpPost( + url, + { ...this.getForm(), ...limit }, + function (response: any) { + that.assign(response.data.data); + + SafeUtil.safeCallback(successCallback)(response); + }, + errorCallback, + finallyCallback + ); + } + //退出登录 httpLogout(successCallback?: any, errorCallback?: any, finalCallback?: any) { let that = this; diff --git a/src/common/model/user/UserRole.ts b/src/common/model/user/UserRole.ts index 679d446..33412f8 100644 --- a/src/common/model/user/UserRole.ts +++ b/src/common/model/user/UserRole.ts @@ -5,7 +5,6 @@ import Lang from '../global/Lang'; enum UserRole { GUEST = 'GUEST', USER = 'USER', - SPACE = 'SPACE', ADMINISTRATOR = 'ADMINISTRATOR', } @@ -22,11 +21,6 @@ let UserRoleMap: { [key in keyof typeof UserRole]: ColorSelectionOption } = { value: 'USER', color: Color.PRIMARY, }, - SPACE: { - name: Lang.t('user.roleUserRoleSpace'), - value: UserRole.SPACE, - color: Color.SUCCESS, - }, ADMINISTRATOR: { name: Lang.t('user.roleAdministrator'), value: 'ADMINISTRATOR', diff --git a/src/pages/layout/widget/Capacity.tsx b/src/pages/layout/widget/Capacity.tsx index 977c54f..e0db11c 100644 --- a/src/pages/layout/widget/Capacity.tsx +++ b/src/pages/layout/widget/Capacity.tsx @@ -27,20 +27,20 @@ export default class Capacity extends TankComponent { render() { const { user } = this; + if (!user.space) return null; + return (
- {user.totalSizeLimit !== -1 && ( + {user.space!.totalSizeLimit !== -1 && ( )}
- {`${FileUtil.humanFileSize( - user.totalSize - )} / ${FileUtil.humanFileSize(user.totalSizeLimit)}`} + {`${user.space.getHumanizeTotalSize()} / ${user.space.getHumanizeTotalSizeLimit()}`}
); diff --git a/src/pages/matter/List.tsx b/src/pages/matter/List.tsx index 6b1697b..82a073e 100644 --- a/src/pages/matter/List.tsx +++ b/src/pages/matter/List.tsx @@ -373,13 +373,13 @@ export default class List extends TankComponent { m.spaceUuid = this.getSpaceUuid(); //判断文件大小。 - if (this.user.sizeLimit >= 0) { - if (file.size > this.user.sizeLimit) { + if (this.user.space!.sizeLimit >= 0) { + if (file.size > this.user.space!.sizeLimit) { MessageBoxUtil.error( Lang.t( 'matter.sizeExceedLimit', StringUtil.humanFileSize(file.size), - StringUtil.humanFileSize(this.user.sizeLimit) + this.user.space?.getHumanizeSizeLimit() ) ); return; diff --git a/src/pages/matter/widget/MatterImage.tsx b/src/pages/matter/widget/MatterImage.tsx index a3d0659..0e978f2 100644 --- a/src/pages/matter/widget/MatterImage.tsx +++ b/src/pages/matter/widget/MatterImage.tsx @@ -42,9 +42,12 @@ export default class MatterImage extends TankComponent { if (file) { let fileSize = (file as any).size; - if (this.user.sizeLimit >= 0 && fileSize > this.user.sizeLimit) { + if ( + this.user.space!.sizeLimit >= 0 && + fileSize > this.user.space!.sizeLimit + ) { MessageBoxUtil.error( - Lang.t('matter.sizeExceedLimit', fileSize, this.user.sizeLimit) + Lang.t('matter.sizeExceedLimit', fileSize, this.user.space!.sizeLimit) ); return; } diff --git a/src/pages/preference/Edit.tsx b/src/pages/preference/Edit.tsx index 90d633d..339cede 100644 --- a/src/pages/preference/Edit.tsx +++ b/src/pages/preference/Edit.tsx @@ -9,13 +9,11 @@ import { Button, Form, Input, InputNumber, Switch } from 'antd'; import { SaveOutlined } from '@ant-design/icons'; import TankContentCard from '../widget/TankContentCard'; import Preference from '../../common/model/preference/Preference'; -import FileUtil from '../../common/util/FileUtil'; import { FormInstance } from 'antd/lib/form'; import MessageBoxUtil from '../../common/util/MessageBoxUtil'; import Sun from '../../common/model/global/Sun'; import Lang from '../../common/model/global/Lang'; import MatterImage from '../matter/widget/MatterImage'; -import { UserRole } from '../../common/model/user/UserRole'; import InputSize from '../widget/form/InputSize'; interface IProps extends RouteComponentProps {} diff --git a/src/pages/space/List.tsx b/src/pages/space/List.tsx index 2bb4cd2..4266e8d 100644 --- a/src/pages/space/List.tsx +++ b/src/pages/space/List.tsx @@ -132,8 +132,6 @@ export default class List extends TankComponent { {pager.data.map((space) => { - const percent = space.totalSize! / space.totalSizeLimit!; - return ( { <>
{Lang.t('space.sizeLimit')}: - {FileUtil.humanFileSize(space.sizeLimit!)} + {space.getHumanizeSizeLimit()}
{Lang.t('space.totalSize')}: - {FileUtil.humanFileSize(space.totalSize!)} + {space.getHumanizeTotalSize()}
{Lang.t('space.totalSizeLimit')}: - {FileUtil.humanFileSize(space.totalSizeLimit!)} + {space.getHumanizeTotalSizeLimit()}
} > - +
diff --git a/src/pages/user/Detail.tsx b/src/pages/user/Detail.tsx index 98cb611..07e1dfe 100644 --- a/src/pages/user/Detail.tsx +++ b/src/pages/user/Detail.tsx @@ -213,15 +213,15 @@ export default class Detail extends TankComponent { - {FileUtil.humanFileSize(currentUser.sizeLimit)} + {currentUser.space?.getHumanizeSizeLimit()} - {FileUtil.humanFileSize(currentUser.totalSizeLimit)} + {currentUser.space?.getHumanizeTotalSizeLimit()} - {FileUtil.humanFileSize(currentUser.totalSize)} + {currentUser.space?.getHumanizeTotalSize()} diff --git a/src/pages/user/Edit.tsx b/src/pages/user/Edit.tsx index 52047af..7223853 100644 --- a/src/pages/user/Edit.tsx +++ b/src/pages/user/Edit.tsx @@ -65,20 +65,24 @@ export default class Edit extends TankComponent { currentUser.assign(values); - currentUser.httpSave(function () { - MessageBoxUtil.success(Lang.t('operationSuccess')); + currentUser.httpSave( + { + sizeLimit: values.sizeLimit, + totalSizeLimit: values.totalSizeLimit, + }, + function () { + MessageBoxUtil.success(Lang.t('operationSuccess')); - //如果是自己的资料修改成功,更新一下本地。 - if (user.uuid === currentUser.uuid) { - user.assign(currentUser); + //如果是自己的资料修改成功,更新一下本地。 + if (user.uuid === currentUser.uuid) { + user.assign(currentUser); + } + + Sun.navigateBack(); } - - Sun.navigateBack(); - }); + ); } - onFinishFailed(errorInfo: any) {} - render() { let that = this; @@ -121,7 +125,6 @@ export default class Edit extends TankComponent { name="basic" ref={this.formRef} onFinish={this.onFinish.bind(this)} - onFinishFailed={this.onFinishFailed.bind(this)} onValuesChange={() => { that.updateUI(); }} @@ -208,7 +211,7 @@ export default class Edit extends TankComponent { required name="sizeLimit" rules={[{ required: true, message: Lang.t('inputRequired') }]} - initialValue={currentUser.sizeLimit} + initialValue={currentUser.space?.sizeLimit} > { required name="totalSizeLimit" rules={[{ required: true, message: Lang.t('inputRequired') }]} - initialValue={currentUser.totalSizeLimit} + initialValue={currentUser.space?.totalSizeLimit} > { }, { title: Lang.t('user.singleFileSizeLimit'), - dataIndex: 'sizeLimit', render: (text: any, record: User, index: number): React.ReactNode => ( - {FileUtil.humanFileSize(record.sizeLimit)} + {record.space?.getHumanizeSizeLimit()} ), }, { title: Lang.t('user.totalFileSize'), - dataIndex: 'totalSize', render: (text: any, record: User, index: number): React.ReactNode => ( - {FileUtil.humanFileSize(record.totalSize)} + {record.space?.getHumanizeTotalSize()} ), }, { title: Lang.t('user.totalFileSizeLimit'), - dataIndex: 'totalSizeLimit', render: (text: any, record: User, index: number): React.ReactNode => ( - {FileUtil.humanFileSize(record.totalSizeLimit)} + {record.space?.getHumanizeTotalSizeLimit()} ), }, { diff --git a/src/pages/user/widget/MobileUserPanel.tsx b/src/pages/user/widget/MobileUserPanel.tsx index d26beaa..ecc433c 100644 --- a/src/pages/user/widget/MobileUserPanel.tsx +++ b/src/pages/user/widget/MobileUserPanel.tsx @@ -77,13 +77,13 @@ export default class MobileUserPanel extends TankComponent { {this.showMore ? (
- {FileUtil.humanFileSize(user.sizeLimit)} + {user.space?.getHumanizeSizeLimit()} - {FileUtil.humanFileSize(user.totalSize)} + {user.space?.getHumanizeTotalSize()} - {FileUtil.humanFileSize(user.totalSizeLimit)} + {user.space?.getHumanizeTotalSizeLimit()}