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) => {