From 4f51ec4aa85af2dc024683365405d6239aacae1a Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Wed, 11 Jan 2023 22:03:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 并增加文件存储体积计算字段 --- pnpm-lock.yaml | 4 ++ server/admin/app/entry.client.tsx | 1 + server/admin/app/ra/App.tsx | 5 +- .../admin/app/ra/components/FilesizeField.tsx | 47 +++++++++++++++++++ server/admin/app/ra/resources/chat.tsx | 11 ++++- server/admin/app/ra/resources/file.tsx | 28 +++++++++++ server/admin/app/ra/resources/user.tsx | 12 ++++- server/admin/app/ra/theme.ts | 22 +++++++++ server/admin/package.json | 2 + server/admin/server.ts | 2 +- 10 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 server/admin/app/ra/components/FilesizeField.tsx create mode 100644 server/admin/app/ra/resources/file.tsx create mode 100644 server/admin/app/ra/theme.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33179e0f..7e2d3c44 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -911,7 +911,9 @@ importers: dotenv: ^16.0.3 express: ^4.18.2 express-mongoose-ra-json-server: ^0.1.0 + filesize: ^8.0.7 isbot: ^3.6.5 + lodash: ^4.17.21 morgan: ^1.10.0 nodemon: ^2.0.20 npm-run-all: ^4.1.5 @@ -931,7 +933,9 @@ importers: compression: 1.7.4 express: 4.18.2 express-mongoose-ra-json-server: 0.1.0_express@4.18.2 + filesize: 8.0.7 isbot: 3.6.5 + lodash: 4.17.21 morgan: 1.10.0 ra-data-json-server: 4.6.3_biqbaboplfbrettd7655fr4n2y react: 18.2.0 diff --git a/server/admin/app/entry.client.tsx b/server/admin/app/entry.client.tsx index b839631d..634d7515 100644 --- a/server/admin/app/entry.client.tsx +++ b/server/admin/app/entry.client.tsx @@ -1,4 +1,5 @@ import { RemixBrowser } from '@remix-run/react'; +import React from 'react'; import { startTransition, StrictMode } from 'react'; import { hydrateRoot } from 'react-dom/client'; diff --git a/server/admin/app/ra/App.tsx b/server/admin/app/ra/App.tsx index a9a68ff6..78aa81db 100644 --- a/server/admin/app/ra/App.tsx +++ b/server/admin/app/ra/App.tsx @@ -12,10 +12,12 @@ import { UserList } from './resources/user'; import React from 'react'; import { GroupList } from './resources/group'; import { MessageList } from './resources/chat'; +import { FileList } from './resources/file'; import PersonIcon from '@mui/icons-material/Person'; import MessageIcon from '@mui/icons-material/Message'; import GroupIcon from '@mui/icons-material/Group'; import AttachFileIcon from '@mui/icons-material/AttachFile'; +import { theme } from './theme'; const httpClient: typeof fetchUtils.fetchJson = (url, options = {}) => { try { @@ -40,6 +42,7 @@ const dataProvider = jsonServerProvider( export const App = () => ( @@ -68,7 +71,7 @@ export const App = () => ( icon={AttachFileIcon} name="file" options={{ label: '文件' }} - list={ListGuesser} + list={FileList} show={ShowGuesser} /> diff --git a/server/admin/app/ra/components/FilesizeField.tsx b/server/admin/app/ra/components/FilesizeField.tsx new file mode 100644 index 00000000..dca9c845 --- /dev/null +++ b/server/admin/app/ra/components/FilesizeField.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import filesize from 'filesize'; +import { + NumberFieldProps, + sanitizeFieldRestProps, + useRecordContext, + useTranslate, +} from 'react-admin'; +import get from 'lodash/get'; +import { Typography } from '@mui/material'; + +export const FilesizeField: React.FC = React.memo((props) => { + const { className, emptyText, source, locales, options, textAlign, ...rest } = + props; + const record = useRecordContext(props); + const translate = useTranslate(); + + if (!record) { + return null; + } + const value = get(record, source!); + + if (value == null) { + return emptyText ? ( + + {emptyText && translate(emptyText, { _: emptyText })} + + ) : null; + } + + return ( + + {filesize(value)} + + ); +}); +FilesizeField.displayName = 'FilesizeField'; diff --git a/server/admin/app/ra/resources/chat.tsx b/server/admin/app/ra/resources/chat.tsx index 1c01488a..5616a413 100644 --- a/server/admin/app/ra/resources/chat.tsx +++ b/server/admin/app/ra/resources/chat.tsx @@ -10,7 +10,16 @@ import { } from 'react-admin'; export const MessageList: React.FC = () => ( - ]}> + , + ]} + > diff --git a/server/admin/app/ra/resources/file.tsx b/server/admin/app/ra/resources/file.tsx new file mode 100644 index 00000000..3a2f143d --- /dev/null +++ b/server/admin/app/ra/resources/file.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { + Datagrid, + DateField, + List, + NumberField, + ReferenceField, + TextField, + UrlField, +} from 'react-admin'; +import { FilesizeField } from '../components/FilesizeField'; + +export const FileList: React.FC = () => ( + + + + + + + + + + () + + + + +); diff --git a/server/admin/app/ra/resources/user.tsx b/server/admin/app/ra/resources/user.tsx index cc2e751c..951ea8b1 100644 --- a/server/admin/app/ra/resources/user.tsx +++ b/server/admin/app/ra/resources/user.tsx @@ -17,7 +17,16 @@ const PostListActionToolbar = ({ children, ...props }) => ( ); export const UserList: React.FC = () => ( - ]}> + , + ]} + > @@ -26,7 +35,6 @@ export const UserList: React.FC = () => ( - diff --git a/server/admin/app/ra/theme.ts b/server/admin/app/ra/theme.ts new file mode 100644 index 00000000..151c8047 --- /dev/null +++ b/server/admin/app/ra/theme.ts @@ -0,0 +1,22 @@ +import { defaultTheme } from 'react-admin'; +import { ThemeOptions } from '@mui/material'; + +const customRaComponents = { + RaDatagrid: { + styleOverrides: { + root: { + '& .RaDatagrid-headerCell': { + whiteSpace: 'nowrap', + }, + }, + }, + }, +}; + +export const theme: ThemeOptions = { + ...defaultTheme, + components: { + ...defaultTheme.components, + ...customRaComponents, + }, +}; diff --git a/server/admin/package.json b/server/admin/package.json index 0597ecef..1795efed 100644 --- a/server/admin/package.json +++ b/server/admin/package.json @@ -20,7 +20,9 @@ "compression": "^1.7.4", "express": "^4.18.2", "express-mongoose-ra-json-server": "^0.1.0", + "filesize": "^8.0.7", "isbot": "^3.6.5", + "lodash": "^4.17.21", "morgan": "^1.10.0", "ra-data-json-server": "^4.6.3", "react": "^18.2.0", diff --git a/server/admin/server.ts b/server/admin/server.ts index 7ffae300..c485e713 100644 --- a/server/admin/server.ts +++ b/server/admin/server.ts @@ -6,7 +6,7 @@ import { createRequestHandler } from '@remix-run/express'; import mongoose from 'mongoose'; import dotenv from 'dotenv'; import { router } from './app/server/index'; -dotenv.config(); +dotenv.config({ path: path.resolve(__dirname, '../.env') }); // 链接数据库 mongoose.connect(process.env.MONGO_URL!, (error: any) => {