Просмотр исходного кода

Merge pull request #427 from QuentinHsu/fix-log-pagination

fix log pagination
Calcium-Ion 1 год назад
Родитель
Сommit
59d06a5576
3 измененных файлов с 99 добавлено и 140 удалено
  1. 1 1
      web/package.json
  2. 52 52
      web/pnpm-lock.yaml
  3. 46 87
      web/src/components/LogsTable.js

+ 1 - 1
web/package.json

@@ -50,7 +50,7 @@
     ]
     ]
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "@so1ve/prettier-config": "^2.0.0",
+    "@so1ve/prettier-config": "^3.1.0",
     "@vitejs/plugin-react": "^4.2.1",
     "@vitejs/plugin-react": "^4.2.1",
     "prettier": "^3.0.0",
     "prettier": "^3.0.0",
     "typescript": "4.4.2",
     "typescript": "4.4.2",

+ 52 - 52
web/pnpm-lock.yaml

@@ -13,10 +13,10 @@ importers:
         version: 2.53.2(react@18.2.0)
         version: 2.53.2(react@18.2.0)
       '@douyinfe/semi-ui':
       '@douyinfe/semi-ui':
         specifier: ^2.55.3
         specifier: ^2.55.3
-        version: 2.55.3(react-dom@18.2.0)(react@18.2.0)
+        version: 2.55.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       '@visactor/react-vchart':
       '@visactor/react-vchart':
         specifier: ~1.8.8
         specifier: ~1.8.8
-        version: 1.8.11(react-dom@18.2.0)(react@18.2.0)
+        version: 1.8.11(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       '@visactor/vchart':
       '@visactor/vchart':
         specifier: ~1.8.8
         specifier: ~1.8.8
         version: 1.8.11
         version: 1.8.11
@@ -49,26 +49,26 @@ importers:
         version: 1.0.4
         version: 1.0.4
       react-router-dom:
       react-router-dom:
         specifier: ^6.3.0
         specifier: ^6.3.0
-        version: 6.22.2(react-dom@18.2.0)(react@18.2.0)
+        version: 6.22.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       react-telegram-login:
       react-telegram-login:
         specifier: ^1.1.2
         specifier: ^1.1.2
         version: 1.1.2(react@18.2.0)
         version: 1.1.2(react@18.2.0)
       react-toastify:
       react-toastify:
         specifier: ^9.0.8
         specifier: ^9.0.8
-        version: 9.1.3(react-dom@18.2.0)(react@18.2.0)
+        version: 9.1.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       react-turnstile:
       react-turnstile:
         specifier: ^1.0.5
         specifier: ^1.0.5
-        version: 1.1.3(react-dom@18.2.0)(react@18.2.0)
+        version: 1.1.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       semantic-ui-offline:
       semantic-ui-offline:
         specifier: ^2.5.0
         specifier: ^2.5.0
         version: 2.5.0
         version: 2.5.0
       semantic-ui-react:
       semantic-ui-react:
         specifier: ^2.1.3
         specifier: ^2.1.3
-        version: 2.1.5(react-dom@18.2.0)(react@18.2.0)
+        version: 2.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
     devDependencies:
     devDependencies:
       '@so1ve/prettier-config':
       '@so1ve/prettier-config':
-        specifier: ^2.0.0
-        version: 2.0.0(prettier@3.2.5)
+        specifier: ^3.1.0
+        version: 3.1.0(prettier@3.2.5)
       '@vitejs/plugin-react':
       '@vitejs/plugin-react':
         specifier: ^4.2.1
         specifier: ^4.2.1
         version: 4.2.1(vite@5.2.5)
         version: 4.2.1(vite@5.2.5)
@@ -88,8 +88,8 @@ packages:
     resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
     resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
     engines: {node: '>=6.0.0'}
     engines: {node: '>=6.0.0'}
 
 
-  '@astrojs/compiler@1.8.2':
-    resolution: {integrity: sha512-o/ObKgtMzl8SlpIdzaxFnt7SATKPxu4oIP/1NL+HDJRzxfJcAkOTAb/ZKMRyULbz4q+1t2/DAebs2Z1QairkZw==}
+  '@astrojs/compiler@2.10.2':
+    resolution: {integrity: sha512-bvH+v8AirwpRWCkYJEyWYdc5Cs/BjG2ZTxIJzttHilXgfKJAdW2496KsUQKzf5j2tOHtaHXKKn9hb9WZiBGpEg==}
 
 
   '@babel/code-frame@7.23.5':
   '@babel/code-frame@7.23.5':
     resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
     resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
@@ -578,13 +578,13 @@ packages:
       react: ^16.0.0 || ^17.0.0 || ^18.0.0
       react: ^16.0.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0
       react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0
 
 
-  '@so1ve/prettier-config@2.0.0':
-    resolution: {integrity: sha512-s6qsH5Rf4Bl+J0LU9rKmSWe/rYRdsYw0ELyXhDDDqEaTWtah4NpHKJuVWARuKqj0TWLBeWmyWUoIH/Bkp/DHaw==}
+  '@so1ve/prettier-config@3.1.0':
+    resolution: {integrity: sha512-9GJ1yXKBC4DzqCTTaZoBf8zw7WWkVuXcccZt1Aqk4lj6ab/GiNUnjPGajUVYLjaqAEOKqM7jUSUfTjk2JTjCAg==}
     peerDependencies:
     peerDependencies:
       prettier: ^3.0.0
       prettier: ^3.0.0
 
 
-  '@so1ve/prettier-plugin-toml@2.0.0':
-    resolution: {integrity: sha512-GvuFdTqhs3qxbhKTiCXWMXITmNLSdndUp7ql1yJbzzWaGqAdb3UH+R+0ZhtAEctBSx90MWAWW3kkW/Iba02tCg==}
+  '@so1ve/prettier-plugin-toml@3.1.0':
+    resolution: {integrity: sha512-8WZAGjAVNIJlkfWL6wHKxlUuEBY45fdd5qY5bR/Z6r/txgzKXk/r9qi1DTwc17gi/WcNuRrcRugecRT+mWbIYg==}
     peerDependencies:
     peerDependencies:
       prettier: ^3.0.0
       prettier: ^3.0.0
 
 
@@ -1127,12 +1127,12 @@ packages:
     resolution: {integrity: sha512-WxtodH/wWavfw3MR7yK/GrS4pASEQ+iSTkdtSxPJWvqzG55ir5nvbLt9rw5AOiEcqqPCRM92WCtR1rk3TG3JSQ==}
     resolution: {integrity: sha512-WxtodH/wWavfw3MR7yK/GrS4pASEQ+iSTkdtSxPJWvqzG55ir5nvbLt9rw5AOiEcqqPCRM92WCtR1rk3TG3JSQ==}
     hasBin: true
     hasBin: true
 
 
-  prettier-plugin-astro@0.13.0:
-    resolution: {integrity: sha512-5HrJNnPmZqTUNoA97zn4gNQv9BgVhv+et03314WpQ9H9N8m2L9OSV798olwmG2YLXPl1iSstlJCR1zB3x5xG4g==}
+  prettier-plugin-astro@0.14.1:
+    resolution: {integrity: sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==}
     engines: {node: ^14.15.0 || >=16.0.0}
     engines: {node: ^14.15.0 || >=16.0.0}
 
 
-  prettier-plugin-curly-and-jsdoc@2.0.0:
-    resolution: {integrity: sha512-uSjWOWmX8+yrCrfhJSI58ODqtX7lXx07M8JYeOC1hfRv+vCttfiDlZoM27mNChGitJNKI+pCBvMMBYh8JiV0HQ==}
+  prettier-plugin-curly-and-jsdoc@3.1.0:
+    resolution: {integrity: sha512-4QMOHnLlkP2jTRWS0MFH6j+cuOiXLvXOqCLKbtwwVd8PPyq8NenW5AAwfwqiTNHBQG/DmzViPphRrwgN0XkUVQ==}
     peerDependencies:
     peerDependencies:
       prettier: ^3.0.0
       prettier: ^3.0.0
 
 
@@ -1442,7 +1442,7 @@ snapshots:
       '@jridgewell/gen-mapping': 0.3.5
       '@jridgewell/gen-mapping': 0.3.5
       '@jridgewell/trace-mapping': 0.3.24
       '@jridgewell/trace-mapping': 0.3.24
 
 
-  '@astrojs/compiler@1.8.2': {}
+  '@astrojs/compiler@2.10.2': {}
 
 
   '@babel/code-frame@7.23.5':
   '@babel/code-frame@7.23.5':
     dependencies:
     dependencies:
@@ -1590,7 +1590,7 @@ snapshots:
       react: 18.2.0
       react: 18.2.0
       tslib: 2.6.2
       tslib: 2.6.2
 
 
-  '@dnd-kit/core@6.1.0(react-dom@18.2.0)(react@18.2.0)':
+  '@dnd-kit/core@6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
     dependencies:
     dependencies:
       '@dnd-kit/accessibility': 3.1.0(react@18.2.0)
       '@dnd-kit/accessibility': 3.1.0(react@18.2.0)
       '@dnd-kit/utilities': 3.2.2(react@18.2.0)
       '@dnd-kit/utilities': 3.2.2(react@18.2.0)
@@ -1598,9 +1598,9 @@ snapshots:
       react-dom: 18.2.0(react@18.2.0)
       react-dom: 18.2.0(react@18.2.0)
       tslib: 2.6.2
       tslib: 2.6.2
 
 
-  '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.1.0)(react@18.2.0)':
+  '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0)':
     dependencies:
     dependencies:
-      '@dnd-kit/core': 6.1.0(react-dom@18.2.0)(react@18.2.0)
+      '@dnd-kit/core': 6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       '@dnd-kit/utilities': 3.2.2(react@18.2.0)
       '@dnd-kit/utilities': 3.2.2(react@18.2.0)
       react: 18.2.0
       react: 18.2.0
       tslib: 2.6.2
       tslib: 2.6.2
@@ -1652,10 +1652,10 @@ snapshots:
     dependencies:
     dependencies:
       glob: 7.2.3
       glob: 7.2.3
 
 
-  '@douyinfe/semi-ui@2.55.3(react-dom@18.2.0)(react@18.2.0)':
+  '@douyinfe/semi-ui@2.55.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
     dependencies:
     dependencies:
-      '@dnd-kit/core': 6.1.0(react-dom@18.2.0)(react@18.2.0)
-      '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.1.0)(react@18.2.0)
+      '@dnd-kit/core': 6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+      '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0)
       '@dnd-kit/utilities': 3.2.2(react@18.2.0)
       '@dnd-kit/utilities': 3.2.2(react@18.2.0)
       '@douyinfe/semi-animation': 2.55.3
       '@douyinfe/semi-animation': 2.55.3
       '@douyinfe/semi-animation-react': 2.55.3
       '@douyinfe/semi-animation-react': 2.55.3
@@ -1673,8 +1673,8 @@ snapshots:
       prop-types: 15.8.1
       prop-types: 15.8.1
       react: 18.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       react-dom: 18.2.0(react@18.2.0)
-      react-resizable: 3.0.5(react-dom@18.2.0)(react@18.2.0)
-      react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0)
+      react-resizable: 3.0.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+      react-window: 1.8.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       scroll-into-view-if-needed: 2.2.31
       scroll-into-view-if-needed: 2.2.31
       utility-types: 3.11.0
       utility-types: 3.11.0
 
 
@@ -1747,13 +1747,13 @@ snapshots:
   '@esbuild/win32-x64@0.20.2':
   '@esbuild/win32-x64@0.20.2':
     optional: true
     optional: true
 
 
-  '@fluentui/react-component-event-listener@0.63.1(react-dom@18.2.0)(react@18.2.0)':
+  '@fluentui/react-component-event-listener@0.63.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
     dependencies:
     dependencies:
       '@babel/runtime': 7.24.0
       '@babel/runtime': 7.24.0
       react: 18.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       react-dom: 18.2.0(react@18.2.0)
 
 
-  '@fluentui/react-component-ref@0.63.1(react-dom@18.2.0)(react@18.2.0)':
+  '@fluentui/react-component-ref@0.63.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
     dependencies:
     dependencies:
       '@babel/runtime': 7.24.0
       '@babel/runtime': 7.24.0
       react: 18.2.0
       react: 18.2.0
@@ -1871,22 +1871,22 @@ snapshots:
   '@rollup/rollup-win32-x64-msvc@4.13.0':
   '@rollup/rollup-win32-x64-msvc@4.13.0':
     optional: true
     optional: true
 
 
-  '@semantic-ui-react/event-stack@3.1.3(react-dom@18.2.0)(react@18.2.0)':
+  '@semantic-ui-react/event-stack@3.1.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
     dependencies:
     dependencies:
       exenv: 1.2.2
       exenv: 1.2.2
       prop-types: 15.8.1
       prop-types: 15.8.1
       react: 18.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       react-dom: 18.2.0(react@18.2.0)
 
 
-  '@so1ve/prettier-config@2.0.0(prettier@3.2.5)':
+  '@so1ve/prettier-config@3.1.0(prettier@3.2.5)':
     dependencies:
     dependencies:
-      '@so1ve/prettier-plugin-toml': 2.0.0(prettier@3.2.5)
+      '@so1ve/prettier-plugin-toml': 3.1.0(prettier@3.2.5)
       prettier: 3.2.5
       prettier: 3.2.5
-      prettier-plugin-astro: 0.13.0
-      prettier-plugin-curly-and-jsdoc: 2.0.0(prettier@3.2.5)
+      prettier-plugin-astro: 0.14.1
+      prettier-plugin-curly-and-jsdoc: 3.1.0(prettier@3.2.5)
       prettier-plugin-pkgsort: 0.2.1(prettier@3.2.5)
       prettier-plugin-pkgsort: 0.2.1(prettier@3.2.5)
 
 
-  '@so1ve/prettier-plugin-toml@2.0.0(prettier@3.2.5)':
+  '@so1ve/prettier-plugin-toml@3.1.0(prettier@3.2.5)':
     dependencies:
     dependencies:
       prettier: 3.2.5
       prettier: 3.2.5
 
 
@@ -1951,7 +1951,7 @@ snapshots:
 
 
   '@types/parse-json@4.0.2': {}
   '@types/parse-json@4.0.2': {}
 
 
-  '@visactor/react-vchart@1.8.11(react-dom@18.2.0)(react@18.2.0)':
+  '@visactor/react-vchart@1.8.11(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
     dependencies:
     dependencies:
       '@visactor/vchart': 1.8.11
       '@visactor/vchart': 1.8.11
       '@visactor/vgrammar-core': 0.10.11
       '@visactor/vgrammar-core': 0.10.11
@@ -2528,13 +2528,13 @@ snapshots:
       sort-object-keys: 1.1.3
       sort-object-keys: 1.1.3
       sort-order: 1.1.2
       sort-order: 1.1.2
 
 
-  prettier-plugin-astro@0.13.0:
+  prettier-plugin-astro@0.14.1:
     dependencies:
     dependencies:
-      '@astrojs/compiler': 1.8.2
+      '@astrojs/compiler': 2.10.2
       prettier: 3.2.5
       prettier: 3.2.5
       sass-formatter: 0.7.9
       sass-formatter: 0.7.9
 
 
-  prettier-plugin-curly-and-jsdoc@2.0.0(prettier@3.2.5):
+  prettier-plugin-curly-and-jsdoc@3.1.0(prettier@3.2.5):
     dependencies:
     dependencies:
       prettier: 3.2.5
       prettier: 3.2.5
 
 
@@ -2559,7 +2559,7 @@ snapshots:
       react: 18.2.0
       react: 18.2.0
       scheduler: 0.23.0
       scheduler: 0.23.0
 
 
-  react-draggable@4.4.6(react-dom@18.2.0)(react@18.2.0):
+  react-draggable@4.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
     dependencies:
     dependencies:
       clsx: 1.2.1
       clsx: 1.2.1
       prop-types: 15.8.1
       prop-types: 15.8.1
@@ -2581,7 +2581,7 @@ snapshots:
 
 
   react-is@18.2.0: {}
   react-is@18.2.0: {}
 
 
-  react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react@18.2.0):
+  react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
     dependencies:
     dependencies:
       '@popperjs/core': 2.11.8
       '@popperjs/core': 2.11.8
       react: 18.2.0
       react: 18.2.0
@@ -2591,15 +2591,15 @@ snapshots:
 
 
   react-refresh@0.14.0: {}
   react-refresh@0.14.0: {}
 
 
-  react-resizable@3.0.5(react-dom@18.2.0)(react@18.2.0):
+  react-resizable@3.0.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
     dependencies:
     dependencies:
       prop-types: 15.8.1
       prop-types: 15.8.1
       react: 18.2.0
       react: 18.2.0
-      react-draggable: 4.4.6(react-dom@18.2.0)(react@18.2.0)
+      react-draggable: 4.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
     transitivePeerDependencies:
     transitivePeerDependencies:
       - react-dom
       - react-dom
 
 
-  react-router-dom@6.22.2(react-dom@18.2.0)(react@18.2.0):
+  react-router-dom@6.22.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
     dependencies:
     dependencies:
       '@remix-run/router': 1.15.2
       '@remix-run/router': 1.15.2
       react: 18.2.0
       react: 18.2.0
@@ -2615,18 +2615,18 @@ snapshots:
     dependencies:
     dependencies:
       react: 18.2.0
       react: 18.2.0
 
 
-  react-toastify@9.1.3(react-dom@18.2.0)(react@18.2.0):
+  react-toastify@9.1.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
     dependencies:
     dependencies:
       clsx: 1.2.1
       clsx: 1.2.1
       react: 18.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       react-dom: 18.2.0(react@18.2.0)
 
 
-  react-turnstile@1.1.3(react-dom@18.2.0)(react@18.2.0):
+  react-turnstile@1.1.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
     dependencies:
     dependencies:
       react: 18.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       react-dom: 18.2.0(react@18.2.0)
 
 
-  react-window@1.8.10(react-dom@18.2.0)(react@18.2.0):
+  react-window@1.8.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
     dependencies:
     dependencies:
       '@babel/runtime': 7.24.0
       '@babel/runtime': 7.24.0
       memoize-one: 5.2.1
       memoize-one: 5.2.1
@@ -2708,13 +2708,13 @@ snapshots:
       fs-extra: 4.0.3
       fs-extra: 4.0.3
       jquery: 3.7.1
       jquery: 3.7.1
 
 
-  semantic-ui-react@2.1.5(react-dom@18.2.0)(react@18.2.0):
+  semantic-ui-react@2.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
     dependencies:
     dependencies:
       '@babel/runtime': 7.24.0
       '@babel/runtime': 7.24.0
-      '@fluentui/react-component-event-listener': 0.63.1(react-dom@18.2.0)(react@18.2.0)
-      '@fluentui/react-component-ref': 0.63.1(react-dom@18.2.0)(react@18.2.0)
+      '@fluentui/react-component-event-listener': 0.63.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+      '@fluentui/react-component-ref': 0.63.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       '@popperjs/core': 2.11.8
       '@popperjs/core': 2.11.8
-      '@semantic-ui-react/event-stack': 3.1.3(react-dom@18.2.0)(react@18.2.0)
+      '@semantic-ui-react/event-stack': 3.1.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       clsx: 1.2.1
       clsx: 1.2.1
       keyboard-key: 1.1.0
       keyboard-key: 1.1.0
       lodash: 4.17.21
       lodash: 4.17.21
@@ -2723,7 +2723,7 @@ snapshots:
       react: 18.2.0
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
       react-dom: 18.2.0(react@18.2.0)
       react-is: 18.2.0
       react-is: 18.2.0
-      react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react@18.2.0)
+      react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       shallowequal: 1.1.0
       shallowequal: 1.1.0
 
 
   semver@6.3.1: {}
   semver@6.3.1: {}

+ 46 - 87
web/src/components/LogsTable.js

@@ -1,11 +1,12 @@
 import React, { useEffect, useState } from 'react';
 import React, { useEffect, useState } from 'react';
 import {
 import {
   API,
   API,
-  copy, getTodayStartTimestamp,
+  copy,
+  getTodayStartTimestamp,
   isAdmin,
   isAdmin,
   showError,
   showError,
   showSuccess,
   showSuccess,
-  timestamp2string
+  timestamp2string,
 } from '../helpers';
 } from '../helpers';
 
 
 import {
 import {
@@ -29,7 +30,7 @@ import {
   stringToColor,
   stringToColor,
 } from '../helpers/render';
 } from '../helpers/render';
 import Paragraph from '@douyinfe/semi-ui/lib/es/typography/paragraph';
 import Paragraph from '@douyinfe/semi-ui/lib/es/typography/paragraph';
-import {getLogOther} from "../helpers/other.js";
+import { getLogOther } from '../helpers/other.js';
 
 
 const { Header } = Layout;
 const { Header } = Layout;
 
 
@@ -144,27 +145,27 @@ function renderUseTime(type) {
 
 
 function renderFirstUseTime(type) {
 function renderFirstUseTime(type) {
   let time = parseFloat(type) / 1000.0;
   let time = parseFloat(type) / 1000.0;
-  time = time.toFixed(1)
+  time = time.toFixed(1);
   if (time < 3) {
   if (time < 3) {
     return (
     return (
-        <Tag color='green' size='large'>
-          {' '}
-          {time} s{' '}
-        </Tag>
+      <Tag color='green' size='large'>
+        {' '}
+        {time} s{' '}
+      </Tag>
     );
     );
   } else if (time < 10) {
   } else if (time < 10) {
     return (
     return (
-        <Tag color='orange' size='large'>
-          {' '}
-          {time} s{' '}
-        </Tag>
+      <Tag color='orange' size='large'>
+        {' '}
+        {time} s{' '}
+      </Tag>
     );
     );
   } else {
   } else {
     return (
     return (
-        <Tag color='red' size='large'>
-          {' '}
-          {time} s{' '}
-        </Tag>
+      <Tag color='red' size='large'>
+        {' '}
+        {time} s{' '}
+      </Tag>
     );
     );
   }
   }
 }
 }
@@ -281,22 +282,22 @@ const LogsTable = () => {
         if (record.is_stream) {
         if (record.is_stream) {
           let other = getLogOther(record.other);
           let other = getLogOther(record.other);
           return (
           return (
-              <div>
-                <Space>
-                  {renderUseTime(text)}
-                  {renderFirstUseTime(other.frt)}
-                  {renderIsStream(record.is_stream)}
-                </Space>
-              </div>
+            <div>
+              <Space>
+                {renderUseTime(text)}
+                {renderFirstUseTime(other.frt)}
+                {renderIsStream(record.is_stream)}
+              </Space>
+            </div>
           );
           );
         } else {
         } else {
           return (
           return (
-              <div>
-                <Space>
-                  {renderUseTime(text)}
-                  {renderIsStream(record.is_stream)}
-                </Space>
-              </div>
+            <div>
+              <Space>
+                {renderUseTime(text)}
+                {renderIsStream(record.is_stream)}
+              </Space>
+            </div>
           );
           );
         }
         }
       },
       },
@@ -344,7 +345,7 @@ const LogsTable = () => {
         if (record.other !== '') {
         if (record.other !== '') {
           let other = JSON.parse(record.other);
           let other = JSON.parse(record.other);
           if (other === null) {
           if (other === null) {
-            return <></>
+            return <></>;
           }
           }
           if (other.admin_info !== undefined) {
           if (other.admin_info !== undefined) {
             if (
             if (
@@ -414,8 +415,6 @@ const LogsTable = () => {
   const [activePage, setActivePage] = useState(1);
   const [activePage, setActivePage] = useState(1);
   const [logCount, setLogCount] = useState(ITEMS_PER_PAGE);
   const [logCount, setLogCount] = useState(ITEMS_PER_PAGE);
   const [pageSize, setPageSize] = useState(ITEMS_PER_PAGE);
   const [pageSize, setPageSize] = useState(ITEMS_PER_PAGE);
-  const [searchKeyword, setSearchKeyword] = useState('');
-  const [searching, setSearching] = useState(false);
   const [logType, setLogType] = useState(0);
   const [logType, setLogType] = useState(0);
   const isAdminUser = isAdmin();
   const isAdminUser = isAdmin();
   let now = new Date();
   let now = new Date();
@@ -451,9 +450,7 @@ const LogsTable = () => {
     let localEndTimestamp = Date.parse(end_timestamp) / 1000;
     let localEndTimestamp = Date.parse(end_timestamp) / 1000;
     let url = `/api/log/self/stat?type=${logType}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`;
     let url = `/api/log/self/stat?type=${logType}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`;
     url = encodeURI(url);
     url = encodeURI(url);
-    let res = await API.get(
-      url,
-    );
+    let res = await API.get(url);
     const { success, message, data } = res.data;
     const { success, message, data } = res.data;
     if (success) {
     if (success) {
       setStat(data);
       setStat(data);
@@ -467,9 +464,7 @@ const LogsTable = () => {
     let localEndTimestamp = Date.parse(end_timestamp) / 1000;
     let localEndTimestamp = Date.parse(end_timestamp) / 1000;
     let url = `/api/log/stat?type=${logType}&username=${username}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}&channel=${channel}`;
     let url = `/api/log/stat?type=${logType}&username=${username}&token_name=${token_name}&model_name=${model_name}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}&channel=${channel}`;
     url = encodeURI(url);
     url = encodeURI(url);
-    let res = await API.get(
-      url,
-    );
+    let res = await API.get(url);
     const { success, message, data } = res.data;
     const { success, message, data } = res.data;
     if (success) {
     if (success) {
       setStat(data);
       setStat(data);
@@ -521,10 +516,7 @@ const LogsTable = () => {
       logs[i].timestamp2string = timestamp2string(logs[i].created_at);
       logs[i].timestamp2string = timestamp2string(logs[i].created_at);
       logs[i].key = '' + logs[i].id;
       logs[i].key = '' + logs[i].id;
     }
     }
-    // data.key = '' + data.id
     setLogs(logs);
     setLogs(logs);
-    setLogCount(logs.length + ITEMS_PER_PAGE);
-    // console.log(logCount);
   };
   };
 
 
   const loadLogs = async (startIdx, pageSize, logType = 0) => {
   const loadLogs = async (startIdx, pageSize, logType = 0) => {
@@ -542,37 +534,28 @@ const LogsTable = () => {
     const res = await API.get(url);
     const res = await API.get(url);
     const { success, message, data } = res.data;
     const { success, message, data } = res.data;
     if (success) {
     if (success) {
-      if (startIdx === 0) {
-        setLogsFormat(data);
-      } else {
-        let newLogs = [...logs];
-        newLogs.splice(startIdx * pageSize, data.length, ...data);
-        setLogsFormat(newLogs);
-      }
+      const newPageData = data.items;
+      setActivePage(data.page);
+      setPageSize(data.page_size);
+      setLogCount(data.total);
+
+      setLogsFormat(newPageData);
     } else {
     } else {
       showError(message);
       showError(message);
     }
     }
     setLoading(false);
     setLoading(false);
   };
   };
 
 
-  const pageData = logs.slice(
-    (activePage - 1) * pageSize,
-    activePage * pageSize,
-  );
-
   const handlePageChange = (page) => {
   const handlePageChange = (page) => {
     setActivePage(page);
     setActivePage(page);
-    if (page === Math.ceil(logs.length / pageSize) + 1) {
-      // In this case we have to load more data and then append them.
-      loadLogs(page - 1, pageSize, logType).then((r) => {});
-    }
+    loadLogs(page, pageSize, logType).then((r) => {});
   };
   };
 
 
   const handlePageSizeChange = async (size) => {
   const handlePageSizeChange = async (size) => {
     localStorage.setItem('page-size', size + '');
     localStorage.setItem('page-size', size + '');
     setPageSize(size);
     setPageSize(size);
     setActivePage(1);
     setActivePage(1);
-    loadLogs(0, size)
+    loadLogs(activePage, size)
       .then()
       .then()
       .catch((reason) => {
       .catch((reason) => {
         showError(reason);
         showError(reason);
@@ -580,27 +563,24 @@ const LogsTable = () => {
   };
   };
 
 
   const refresh = async () => {
   const refresh = async () => {
-    // setLoading(true);
     setActivePage(1);
     setActivePage(1);
     handleEyeClick();
     handleEyeClick();
-    await loadLogs(0, pageSize, logType);
+    await loadLogs(activePage, pageSize, logType);
   };
   };
 
 
   const copyText = async (text) => {
   const copyText = async (text) => {
     if (await copy(text)) {
     if (await copy(text)) {
       showSuccess('已复制:' + text);
       showSuccess('已复制:' + text);
     } else {
     } else {
-      // setSearchKeyword(text);
       Modal.error({ title: '无法复制到剪贴板,请手动复制', content: text });
       Modal.error({ title: '无法复制到剪贴板,请手动复制', content: text });
     }
     }
   };
   };
 
 
   useEffect(() => {
   useEffect(() => {
-    // console.log('default effect')
     const localPageSize =
     const localPageSize =
       parseInt(localStorage.getItem('page-size')) || ITEMS_PER_PAGE;
       parseInt(localStorage.getItem('page-size')) || ITEMS_PER_PAGE;
     setPageSize(localPageSize);
     setPageSize(localPageSize);
-    loadLogs(0, localPageSize)
+    loadLogs(activePage, localPageSize)
       .then()
       .then()
       .catch((reason) => {
       .catch((reason) => {
         showError(reason);
         showError(reason);
@@ -608,25 +588,6 @@ const LogsTable = () => {
     handleEyeClick();
     handleEyeClick();
   }, []);
   }, []);
 
 
-  const searchLogs = async () => {
-    if (searchKeyword === '') {
-      // if keyword is blank, load files instead.
-      await loadLogs(0, pageSize);
-      setActivePage(1);
-      return;
-    }
-    setSearching(true);
-    const res = await API.get(`/api/log/self/search?keyword=${searchKeyword}`);
-    const { success, message, data } = res.data;
-    if (success) {
-      setLogs(data);
-      setActivePage(1);
-    } else {
-      showError(message);
-    }
-    setSearching(false);
-  };
-
   return (
   return (
     <>
     <>
       <Layout>
       <Layout>
@@ -719,15 +680,13 @@ const LogsTable = () => {
             >
             >
               查询
               查询
             </Button>
             </Button>
-            <Form.Section>
-
-            </Form.Section>
+            <Form.Section></Form.Section>
           </>
           </>
         </Form>
         </Form>
         <Table
         <Table
           style={{ marginTop: 5 }}
           style={{ marginTop: 5 }}
           columns={columns}
           columns={columns}
-          dataSource={pageData}
+          dataSource={logs}
           pagination={{
           pagination={{
             currentPage: activePage,
             currentPage: activePage,
             pageSize: pageSize,
             pageSize: pageSize,
@@ -735,7 +694,7 @@ const LogsTable = () => {
             pageSizeOpts: [10, 20, 50, 100],
             pageSizeOpts: [10, 20, 50, 100],
             showSizeChanger: true,
             showSizeChanger: true,
             onPageSizeChange: (size) => {
             onPageSizeChange: (size) => {
-              handlePageSizeChange(size).then();
+              handlePageSizeChange(size);
             },
             },
             onPageChange: handlePageChange,
             onPageChange: handlePageChange,
           }}
           }}