Browse Source

refactor: import biome and check all files (#11496)

pull/11499/head
afc163 1 year ago
committed by GitHub
parent
commit
0256b12956
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      .eslintignore
  2. 7
      .eslintrc.js
  3. 3
      .github/workflows/ci.yml
  4. 22
      .github/workflows/coverage.yml
  5. 2
      .github/workflows/preview-build.yml
  6. 1
      .gitignore
  7. 5
      .lintstagedrc
  8. 22
      .prettierignore
  9. 21
      .prettierrc.js
  10. 6
      README.ar-DZ.md
  11. 6
      README.es-ES.md
  12. 6
      README.fr-FR.md
  13. 6
      README.ja-JP.md
  14. 6
      README.md
  15. 6
      README.pt-BR.md
  16. 6
      README.ru-RU.md
  17. 6
      README.tr-TR.md
  18. 8
      README.zh-CN.md
  19. 43
      biome.json
  20. 6
      config/config.ts
  21. 11
      jsconfig.json
  22. 49
      mock/listTableList.ts
  23. 10
      mock/notices.ts
  24. 63
      mock/requestRecord.mock.js
  25. 24
      mock/user.ts
  26. 16
      package.json
  27. 2
      public/scripts/loading.js
  28. 4
      src/access.ts
  29. 24
      src/app.tsx
  30. 22
      src/components/HeaderDropdown/index.tsx
  31. 15
      src/components/RightContent/AvatarDropdown.tsx
  32. 20
      src/components/RightContent/index.tsx
  33. 6
      src/global.tsx
  34. 9
      src/locales/bn-BD/pages.ts
  35. 3
      src/locales/bn-BD/settingDrawer.ts
  36. 3
      src/locales/bn-BD/settings.ts
  37. 3
      src/locales/en-US.ts
  38. 3
      src/locales/en-US/globalHeader.ts
  39. 18
      src/locales/en-US/pages.ts
  40. 3
      src/locales/en-US/pwa.ts
  41. 3
      src/locales/en-US/settingDrawer.ts
  42. 3
      src/locales/en-US/settings.ts
  43. 3
      src/locales/fa-IR.ts
  44. 3
      src/locales/fa-IR/globalHeader.ts
  45. 18
      src/locales/fa-IR/pages.ts
  46. 12
      src/locales/fa-IR/settings.ts
  47. 3
      src/locales/id-ID/globalHeader.ts
  48. 3
      src/locales/id-ID/menu.ts
  49. 9
      src/locales/id-ID/pages.ts
  50. 3
      src/locales/id-ID/settingDrawer.ts
  51. 12
      src/locales/id-ID/settings.ts
  52. 3
      src/locales/ja-JP.ts
  53. 24
      src/locales/ja-JP/pages.ts
  54. 6
      src/locales/ja-JP/settingDrawer.ts
  55. 12
      src/locales/ja-JP/settings.ts
  56. 3
      src/locales/pt-BR/globalHeader.ts
  57. 6
      src/locales/pt-BR/menu.ts
  58. 15
      src/locales/pt-BR/pages.ts
  59. 3
      src/locales/pt-BR/settingDrawer.ts
  60. 18
      src/locales/pt-BR/settings.ts
  61. 12
      src/locales/zh-CN/pages.ts
  62. 3
      src/locales/zh-CN/settingDrawer.ts
  63. 12
      src/locales/zh-CN/settings.ts
  64. 12
      src/locales/zh-TW/pages.ts
  65. 3
      src/locales/zh-TW/settingDrawer.ts
  66. 12
      src/locales/zh-TW/settings.ts
  67. 12
      src/pages/Admin.tsx
  68. 78
      src/pages/TableList/index.tsx
  69. 9
      src/pages/User/Login/__snapshots__/login.test.tsx.snap
  70. 50
      src/pages/User/Login/index.tsx
  71. 20
      src/pages/User/Login/login.test.tsx
  72. 7
      src/service-worker.js
  73. 7
      tests/setupTests.jsx
  74. 2
      tsconfig.json
  75. 63
      types/cache/mock/login.mock.cache.js

8
.eslintignore

@ -1,8 +0,0 @@
/lambda/
/scripts
/config
.history
public
dist
.umi
mock

7
.eslintrc.js

@ -1,7 +0,0 @@
module.exports = {
extends: [require.resolve('@umijs/lint/dist/config/eslint')],
globals: {
page: true,
REACT_APP_ENV: true,
},
};

3
.github/workflows/ci.yml

@ -10,7 +10,7 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
node_version: [20, 16] node_version: [20]
os: [ubuntu-latest, windows-latest, macOS-latest] os: [ubuntu-latest, windows-latest, macOS-latest]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -22,7 +22,6 @@ jobs:
- uses: oven-sh/setup-bun@v2 - uses: oven-sh/setup-bun@v2
- run: bun install - run: bun install
- run: bun run lint - run: bun run lint
- run: bun run tsc
- run: bun run build - run: bun run build
env: env:
CI: true CI: true

22
.github/workflows/coverage.yml

@ -9,19 +9,13 @@ jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v4
- name: Use Node.js 16.x - name: Use Node.js 20
uses: actions/setup-node@v1 uses: actions/setup-node@v4
with: with:
node-version: 16.x node-version: 20
- run: echo ${{github.ref}} - run: echo ${{github.ref}}
- run: curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@7 - uses: oven-sh/setup-bun@v2
- run: pnpm config set store-dir ~/.pnpm-store - run: bun install
- run: pnpm install --strict-peer-dependencies=false - run: bun run test:coverage
- run: yarn run test:coverage - uses: codecov/codecov-action@v5
env:
CI: true
PROGRESS: none
NODE_ENV: test
NODE_OPTIONS: --max_old_space_size=4096
- run: bash <(curl -s https://codecov.io/bash)

2
.github/workflows/preview-build.yml

@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
with: with:
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}

1
.gitignore

@ -36,6 +36,5 @@ functions/*
# screenshot # screenshot
screenshot screenshot
.firebase .firebase
.eslintcache
build build

5
.lintstagedrc

@ -1,6 +1,5 @@
{ {
"**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js", "**/*.{js,jsx,tsx,ts,md,css,less,json,yml}": [
"**/*.{js,jsx,tsx,ts,less,md,json,yml}": [ "npx @biomejs/biome check --write"
"prettier --write"
] ]
} }

22
.prettierignore

@ -1,22 +0,0 @@
**/*.svg
.umi
.umi-production
/dist
.dockerignore
.DS_Store
.eslintignore
*.png
*.toml
docker
.editorconfig
Dockerfile*
.gitignore
.prettierignore
LICENSE
.eslintcache
*.lock
yarn-error.log
.history
CNAME
/build
/public

21
.prettierrc.js

@ -1,21 +0,0 @@
module.exports = {
singleQuote: true,
trailingComma: 'all',
printWidth: 100,
proseWrap: 'never',
endOfLine: 'lf',
overrides: [
{
files: '.prettierrc',
options: {
parser: 'json',
},
},
{
files: 'document.ejs',
options: {
parser: 'html',
},
},
],
};

6
README.ar-DZ.md

@ -7,7 +7,11 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
حل UI جاهز لتطبيقات المؤسسات كنموذج معياري لـ React. حل UI جاهز لتطبيقات المؤسسات كنموذج معياري لـ React.
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)

6
README.es-ES.md

@ -6,7 +6,11 @@ Idioma: 🇺🇸 | [🇨🇳](./README.zh-CN.md) | [🇷🇺](./README.ru-RU.md)
Una solución de IU listo para usar para aplicaciones empresariales como plantilla de React. Una solución de IU listo para usar para aplicaciones empresariales como plantilla de React.
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)

6
README.fr-FR.md

@ -6,7 +6,11 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
Une solution UI prête à l'emploi pour des applications d'entreprise en tant que modèle React. Une solution UI prête à l'emploi pour des applications d'entreprise en tant que modèle React.
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)

6
README.ja-JP.md

@ -6,7 +6,11 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
独創的な業務システムの UI を解決するための React ボイラープレート。 独創的な業務システムの UI を解決するための React ボイラープレート。
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)

6
README.md

@ -6,7 +6,11 @@ Language : 🇺🇸 | [🇨🇳](./README.zh-CN.md) | [🇷🇺](./README.ru-RU.
An out-of-box UI solution for enterprise applications as a React boilerplate. An out-of-box UI solution for enterprise applications as a React boilerplate.
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)

6
README.pt-BR.md

@ -6,7 +6,11 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
Uma solução de UI pronta para aplicações corporativos na forma de um boilerplate React. Uma solução de UI pronta para aplicações corporativos na forma de um boilerplate React.
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)

6
README.ru-RU.md

@ -6,7 +6,11 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | 🇷🇺 |
UI-решение "из коробки" для корпоративных приложений как React boilerplate UI-решение "из коробки" для корпоративных приложений как React boilerplate
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)

6
README.tr-TR.md

@ -6,7 +6,11 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
React ile kurumsal uygulamalar için taslak olarak geliştirilmiş kullanıma hazır bir UI çözümü. React ile kurumsal uygulamalar için taslak olarak geliştirilmiş kullanıma hazır bir UI çözümü.
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)

8
README.zh-CN.md

@ -6,7 +6,11 @@ Language : [🇺🇸](./README.md) | 🇨🇳 | [🇷🇺](./README.ru-RU.md) |
开箱即用的中台前端/设计解决方案。 开箱即用的中台前端/设计解决方案。
[![Node CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml) [![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml) [![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) [![CI](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/ci.yml)
[![Preview Deploy](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml/badge.svg)](https://github.com/ant-design/ant-design-pro/actions/workflows/preview-deploy.yml)
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/)
[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label)
![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
@ -20,7 +24,7 @@ Language : [🇺🇸](./README.md) | 🇨🇳 | [🇷🇺](./README.ru-RU.md) |
## 5.0 已经发布! 🎉🎉🎉 ## 5.0 已经发布! 🎉🎉🎉
[Ant Design Pro 5.0.0](https://github.com/ant-design/ant-design-pro/issues/8656) [Ant Design Pro 5.0](https://github.com/ant-design/ant-design-pro/issues/8656)
## 特性 ## 特性

43
biome.json

@ -0,0 +1,43 @@
{
"$schema": "https://biomejs.dev/schemas/2.0.6/schema.json",
"files": {
"ignoreUnknown": true,
"includes": [
"**/*",
"!**/.umi/**",
"**/*.md",
"!**/.umi-production/**",
"!**/.umi-test/**",
"!**/.umi-test-production/**",
"!**/src/services/**",
"!**/mock/**",
"!**/dist/**",
"!**/server/**",
"!**/public/**",
"!biome.json"
]
},
"formatter": {
"enabled": true,
"indentStyle": "space"
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "off"
},
"a11y": {
"noStaticElementInteractions": "off",
"useValidAnchor": "off"
}
}
},
"javascript": {
"jsxRuntime": "reactClassic",
"formatter": {
"quoteStyle": "single"
}
}
}

6
config/config.ts

@ -1,6 +1,7 @@
// https://umijs.org/config/ // https://umijs.org/config/
import { join } from 'node:path';
import { defineConfig } from '@umijs/max'; import { defineConfig } from '@umijs/max';
import { join } from 'path';
import defaultSettings from './defaultSettings'; import defaultSettings from './defaultSettings';
import proxy from './proxy'; import proxy from './proxy';
import routes from './routes'; import routes from './routes';
@ -157,7 +158,8 @@ export default defineConfig({
}, },
{ {
requestLibPath: "import { request } from '@umijs/max'", requestLibPath: "import { request } from '@umijs/max'",
schemaPath: 'https://gw.alipayobjects.com/os/antfincdn/CA1dOm%2631B/openapi.json', schemaPath:
'https://gw.alipayobjects.com/os/antfincdn/CA1dOm%2631B/openapi.json',
projectName: 'swagger', projectName: 'swagger',
}, },
], ],

11
jsconfig.json

@ -1,11 +0,0 @@
{
"compilerOptions": {
"jsx": "react-jsx",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}

49
mock/listTableList.ts

@ -1,6 +1,6 @@
import { parse } from 'node:url';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { Request, Response } from 'express'; import type { Request, Response } from 'express';
import { parse } from 'url';
// mock tableListDataSource // mock tableListDataSource
const genList = (current: number, pageSize: number) => { const genList = (current: number, pageSize: number) => {
@ -34,7 +34,10 @@ let tableListDataSource = genList(1, 100);
function getRule(req: Request, res: Response, u: string) { function getRule(req: Request, res: Response, u: string) {
let realUrl = u; let realUrl = u;
if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') { if (
!realUrl ||
Object.prototype.toString.call(realUrl) !== '[object String]'
) {
realUrl = req.url; realUrl = req.url;
} }
const { current = 1, pageSize = 10 } = req.query; const { current = 1, pageSize = 10 } = req.query;
@ -53,8 +56,8 @@ function getRule(req: Request, res: Response, u: string) {
dataSource = dataSource.sort((prev, next) => { dataSource = dataSource.sort((prev, next) => {
let sortNumber = 0; let sortNumber = 0;
(Object.keys(sorter) as Array<keyof API.RuleListItem>).forEach((key) => { (Object.keys(sorter) as Array<keyof API.RuleListItem>).forEach((key) => {
let nextSort = next?.[key] as number; const nextSort = next?.[key] as number;
let preSort = prev?.[key] as number; const preSort = prev?.[key] as number;
if (sorter[key] === 'descend') { if (sorter[key] === 'descend') {
if (preSort - nextSort > 0) { if (preSort - nextSort > 0) {
sortNumber += -1; sortNumber += -1;
@ -78,21 +81,25 @@ function getRule(req: Request, res: Response, u: string) {
}; };
if (Object.keys(filter).length > 0) { if (Object.keys(filter).length > 0) {
dataSource = dataSource.filter((item) => { dataSource = dataSource.filter((item) => {
return (Object.keys(filter) as Array<keyof API.RuleListItem>).some((key) => { return (Object.keys(filter) as Array<keyof API.RuleListItem>).some(
if (!filter[key]) { (key) => {
return true; if (!filter[key]) {
} return true;
if (filter[key].includes(`${item[key]}`)) { }
return true; if (filter[key].includes(`${item[key]}`)) {
} return true;
return false; }
}); return false;
},
);
}); });
} }
} }
if (params.name) { if (params.name) {
dataSource = dataSource.filter((data) => data?.name?.includes(params.name || '')); dataSource = dataSource.filter((data) =>
data?.name?.includes(params.name || ''),
);
} }
const result = { const result = {
data: dataSource, data: dataSource,
@ -107,17 +114,21 @@ function getRule(req: Request, res: Response, u: string) {
function postRule(req: Request, res: Response, u: string, b: Request) { function postRule(req: Request, res: Response, u: string, b: Request) {
let realUrl = u; let realUrl = u;
if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') { if (
!realUrl ||
Object.prototype.toString.call(realUrl) !== '[object String]'
) {
realUrl = req.url; realUrl = req.url;
} }
const body = (b && b.body) || req.body; const body = b?.body || req.body;
const { method, name, desc, key } = body; const { method, name, desc, key } = body;
switch (method) { switch (method) {
/* eslint no-case-declarations:0 */
case 'delete': case 'delete':
tableListDataSource = tableListDataSource.filter((item) => key.indexOf(item.key) === -1); tableListDataSource = tableListDataSource.filter(
(item) => key.indexOf(item.key) === -1,
);
break; break;
case 'post': case 'post':
(() => { (() => {

10
mock/notices.ts

@ -1,6 +1,6 @@
import { Request, Response } from 'express'; import type { Request, Response } from 'express';
const getNotices = (req: Request, res: Response) => { const getNotices = (_req: Request, res: Response) => {
res.json({ res.json({
data: [ data: [
{ {
@ -85,7 +85,8 @@ const getNotices = (req: Request, res: Response) => {
{ {
id: '000000010', id: '000000010',
title: '第三方紧急代码变更', title: '第三方紧急代码变更',
description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务', description:
'冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
extra: '马上到期', extra: '马上到期',
status: 'urgent', status: 'urgent',
type: 'event', type: 'event',
@ -101,7 +102,8 @@ const getNotices = (req: Request, res: Response) => {
{ {
id: '000000012', id: '000000012',
title: 'ABCD 版本发布', title: 'ABCD 版本发布',
description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务', description:
'冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
extra: '进行中', extra: '进行中',
status: 'processing', status: 'processing',
type: 'event', type: 'event',

63
mock/requestRecord.mock.js

@ -2,7 +2,8 @@ module.exports = {
'GET /api/currentUser': { 'GET /api/currentUser': {
data: { data: {
name: 'Serati Ma', name: 'Serati Ma',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',
userid: '00000001', userid: '00000001',
email: 'antdesign@alipay.com', email: 'antdesign@alipay.com',
signature: '海纳百川,有容乃大', signature: '海纳百川,有容乃大',
@ -33,7 +34,8 @@ module.exports = {
key: 99, key: 99,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 99', name: 'TradeCode 99',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -47,7 +49,8 @@ module.exports = {
key: 98, key: 98,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 98', name: 'TradeCode 98',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -61,7 +64,8 @@ module.exports = {
key: 97, key: 97,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 97', name: 'TradeCode 97',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -75,7 +79,8 @@ module.exports = {
key: 96, key: 96,
disabled: true, disabled: true,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 96', name: 'TradeCode 96',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -89,7 +94,8 @@ module.exports = {
key: 95, key: 95,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 95', name: 'TradeCode 95',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -103,7 +109,8 @@ module.exports = {
key: 94, key: 94,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 94', name: 'TradeCode 94',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -117,7 +124,8 @@ module.exports = {
key: 93, key: 93,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 93', name: 'TradeCode 93',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -131,7 +139,8 @@ module.exports = {
key: 92, key: 92,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 92', name: 'TradeCode 92',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -145,7 +154,8 @@ module.exports = {
key: 91, key: 91,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 91', name: 'TradeCode 91',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -159,7 +169,8 @@ module.exports = {
key: 90, key: 90,
disabled: true, disabled: true,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 90', name: 'TradeCode 90',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -173,7 +184,8 @@ module.exports = {
key: 89, key: 89,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 89', name: 'TradeCode 89',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -187,7 +199,8 @@ module.exports = {
key: 88, key: 88,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 88', name: 'TradeCode 88',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -201,7 +214,8 @@ module.exports = {
key: 87, key: 87,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 87', name: 'TradeCode 87',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -215,7 +229,8 @@ module.exports = {
key: 86, key: 86,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 86', name: 'TradeCode 86',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -229,7 +244,8 @@ module.exports = {
key: 85, key: 85,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 85', name: 'TradeCode 85',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -243,7 +259,8 @@ module.exports = {
key: 84, key: 84,
disabled: true, disabled: true,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 84', name: 'TradeCode 84',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -257,7 +274,8 @@ module.exports = {
key: 83, key: 83,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 83', name: 'TradeCode 83',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -271,7 +289,8 @@ module.exports = {
key: 82, key: 82,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 82', name: 'TradeCode 82',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -285,7 +304,8 @@ module.exports = {
key: 81, key: 81,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 81', name: 'TradeCode 81',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -299,7 +319,8 @@ module.exports = {
key: 80, key: 80,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 80', name: 'TradeCode 80',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',

24
mock/user.ts

@ -1,4 +1,4 @@
import { Request, Response } from 'express'; import type { Request, Response } from 'express';
const waitTime = (time: number = 100) => { const waitTime = (time: number = 100) => {
return new Promise((resolve) => { return new Promise((resolve) => {
@ -8,7 +8,7 @@ const waitTime = (time: number = 100) => {
}); });
}; };
async function getFakeCaptcha(req: Request, res: Response) { async function getFakeCaptcha(_req: Request, res: Response) {
await waitTime(2000); await waitTime(2000);
return res.json('captcha-xxx'); return res.json('captcha-xxx');
} }
@ -20,7 +20,8 @@ const { ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION } = process.env;
* current user access, if is '', user need login * current user access, if is '', user need login
* 如果是 pro 的预览,默认是有权限的 * 如果是 pro 的预览,默认是有权限的
*/ */
let access = ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site' ? 'admin' : ''; let access =
ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site' ? 'admin' : '';
const getAccess = () => { const getAccess = () => {
return access; return access;
@ -29,7 +30,7 @@ const getAccess = () => {
// 代码中会兼容本地 service mock 以及部署站点的静态数据 // 代码中会兼容本地 service mock 以及部署站点的静态数据
export default { export default {
// 支持值为 Object 和 Array // 支持值为 Object 和 Array
'GET /api/currentUser': (req: Request, res: Response) => { 'GET /api/currentUser': (_req: Request, res: Response) => {
if (!getAccess()) { if (!getAccess()) {
res.status(401).send({ res.status(401).send({
data: { data: {
@ -45,7 +46,8 @@ export default {
success: true, success: true,
data: { data: {
name: 'Serati Ma', name: 'Serati Ma',
avatar: 'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png', avatar:
'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
userid: '00000001', userid: '00000001',
email: 'antdesign@alipay.com', email: 'antdesign@alipay.com',
signature: '海纳百川,有容乃大', signature: '海纳百川,有容乃大',
@ -155,14 +157,14 @@ export default {
}); });
access = 'guest'; access = 'guest';
}, },
'POST /api/login/outLogin': (req: Request, res: Response) => { 'POST /api/login/outLogin': (_req: Request, res: Response) => {
access = ''; access = '';
res.send({ data: {}, success: true }); res.send({ data: {}, success: true });
}, },
'POST /api/register': (req: Request, res: Response) => { 'POST /api/register': (_req: Request, res: Response) => {
res.send({ status: 'ok', currentAuthority: 'user', success: true }); res.send({ status: 'ok', currentAuthority: 'user', success: true });
}, },
'GET /api/500': (req: Request, res: Response) => { 'GET /api/500': (_req: Request, res: Response) => {
res.status(500).send({ res.status(500).send({
timestamp: 1513932555104, timestamp: 1513932555104,
status: 500, status: 500,
@ -171,7 +173,7 @@ export default {
path: '/base/category/list', path: '/base/category/list',
}); });
}, },
'GET /api/404': (req: Request, res: Response) => { 'GET /api/404': (_req: Request, res: Response) => {
res.status(404).send({ res.status(404).send({
timestamp: 1513932643431, timestamp: 1513932643431,
status: 404, status: 404,
@ -180,7 +182,7 @@ export default {
path: '/base/category/list/2121212', path: '/base/category/list/2121212',
}); });
}, },
'GET /api/403': (req: Request, res: Response) => { 'GET /api/403': (_req: Request, res: Response) => {
res.status(403).send({ res.status(403).send({
timestamp: 1513932555104, timestamp: 1513932555104,
status: 403, status: 403,
@ -189,7 +191,7 @@ export default {
path: '/base/category/list', path: '/base/category/list',
}); });
}, },
'GET /api/401': (req: Request, res: Response) => { 'GET /api/401': (_req: Request, res: Response) => {
res.status(401).send({ res.status(401).send({
timestamp: 1513932555104, timestamp: 1513932555104,
status: 401, status: 401,

16
package.json

@ -13,15 +13,11 @@
"i18n-remove": "pro i18n-remove --locale=zh-CN --write", "i18n-remove": "pro i18n-remove --locale=zh-CN --write",
"postinstall": "max setup", "postinstall": "max setup",
"jest": "jest", "jest": "jest",
"lint": "npm run lint:js && npm run lint:prettier && npm run tsc", "lint": "npm run biome:lint && npm run tsc",
"lint-staged": "lint-staged", "lint-staged": "lint-staged",
"lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx ", "biome:lint": "npx @biomejs/biome lint",
"lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src ",
"lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
"lint:prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto",
"openapi": "max openapi", "openapi": "max openapi",
"prepare": "husky", "prepare": "husky",
"prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"",
"preview": "npm run build && max preview --port 8000", "preview": "npm run build && max preview --port 8000",
"record": "cross-env NODE_ENV=development REACT_APP_ENV=test max record --scene=login", "record": "cross-env NODE_ENV=development REACT_APP_ENV=test max record --scene=login",
"serve": "umi-serve", "serve": "umi-serve",
@ -61,10 +57,8 @@
"@types/react": "^19.1.5", "@types/react": "^19.1.5",
"@types/react-dom": "^19.1.5", "@types/react-dom": "^19.1.5",
"@types/react-helmet": "^6.1.11", "@types/react-helmet": "^6.1.11",
"@umijs/lint": "^4.3.24",
"@umijs/max": "^4.3.24", "@umijs/max": "^4.3.24",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"eslint": "^8.57.1",
"express": "^4.21.1", "express": "^4.21.1",
"gh-pages": "^6.1.1", "gh-pages": "^6.1.1",
"husky": "^9.1.6", "husky": "^9.1.6",
@ -72,14 +66,14 @@
"jest-environment-jsdom": "^29.7.0", "jest-environment-jsdom": "^29.7.0",
"lint-staged": "^16.1.2", "lint-staged": "^16.1.2",
"mockjs": "^1.1.0", "mockjs": "^1.1.0",
"prettier": "^3.3.3",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^5.6.3", "typescript": "^5.6.3",
"umi-presets-pro": "^2.0.3", "umi-presets-pro": "^2.0.3",
"umi-serve": "^1.9.11" "umi-serve": "^1.9.11",
"@biomejs/biome": "^2.0.6"
}, },
"engines": { "engines": {
"node": ">=12.0.0" "node": ">=20.0.0"
}, },
"create-umi": { "create-umi": {
"ignoreScript": [ "ignoreScript": [

2
public/scripts/loading.js

@ -2,7 +2,7 @@
* loading 占位 * loading 占位
* 解决首次加载时白屏的问题 * 解决首次加载时白屏的问题
*/ */
(function () { (function () {
const _root = document.querySelector('#root'); const _root = document.querySelector('#root');
if (_root && _root.innerHTML === '') { if (_root && _root.innerHTML === '') {
_root.innerHTML = ` _root.innerHTML = `

4
src/access.ts

@ -1,7 +1,9 @@
/** /**
* @see https://umijs.org/docs/max/access#access * @see https://umijs.org/docs/max/access#access
* */ * */
export default function access(initialState: { currentUser?: API.CurrentUser } | undefined) { export default function access(
initialState: { currentUser?: API.CurrentUser } | undefined,
) {
const { currentUser } = initialState ?? {}; const { currentUser } = initialState ?? {};
return { return {
canAdmin: currentUser && currentUser.access === 'admin', canAdmin: currentUser && currentUser.access === 'admin',

24
src/app.tsx

@ -1,12 +1,18 @@
import { AvatarDropdown, AvatarName, Footer, Question, SelectLang } from '@/components';
import { currentUser as queryCurrentUser } from '@/services/ant-design-pro/api';
import { LinkOutlined } from '@ant-design/icons'; import { LinkOutlined } from '@ant-design/icons';
import type { Settings as LayoutSettings } from '@ant-design/pro-components'; import type { Settings as LayoutSettings } from '@ant-design/pro-components';
import { App } from 'antd';
import { SettingDrawer } from '@ant-design/pro-components'; import { SettingDrawer } from '@ant-design/pro-components';
import type { RunTimeLayoutConfig } from '@umijs/max'; import type { RunTimeLayoutConfig } from '@umijs/max';
import { history, Link } from '@umijs/max'; import { history, Link } from '@umijs/max';
import { App } from 'antd';
import React from 'react'; import React from 'react';
import {
AvatarDropdown,
AvatarName,
Footer,
Question,
SelectLang,
} from '@/components';
import { currentUser as queryCurrentUser } from '@/services/ant-design-pro/api';
import defaultSettings from '../config/defaultSettings'; import defaultSettings from '../config/defaultSettings';
import { errorConfig } from './requestErrorConfig'; import { errorConfig } from './requestErrorConfig';
import '@ant-design/v5-patch-for-react-19'; import '@ant-design/v5-patch-for-react-19';
@ -29,7 +35,7 @@ export async function getInitialState(): Promise<{
skipErrorHandler: true, skipErrorHandler: true,
}); });
return msg.data; return msg.data;
} catch (error) { } catch (_error) {
history.push(loginPath); history.push(loginPath);
} }
return undefined; return undefined;
@ -51,9 +57,15 @@ export async function getInitialState(): Promise<{
} }
// ProLayout 支持的api https://procomponents.ant.design/components/layout // ProLayout 支持的api https://procomponents.ant.design/components/layout
export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => { export const layout: RunTimeLayoutConfig = ({
initialState,
setInitialState,
}) => {
return { return {
actionsRender: () => [<Question key="doc" />, <SelectLang key="SelectLang" />], actionsRender: () => [
<Question key="doc" />,
<SelectLang key="SelectLang" />,
],
avatarProps: { avatarProps: {
src: initialState?.currentUser?.avatar, src: initialState?.currentUser?.avatar,
title: <AvatarName />, title: <AvatarName />,

22
src/components/HeaderDropdown/index.tsx

@ -1,6 +1,6 @@
import { Dropdown } from 'antd'; import { Dropdown } from 'antd';
import { createStyles } from 'antd-style';
import type { DropDownProps } from 'antd/es/dropdown'; import type { DropDownProps } from 'antd/es/dropdown';
import { createStyles } from 'antd-style';
import classNames from 'classnames'; import classNames from 'classnames';
import React from 'react'; import React from 'react';
@ -16,12 +16,26 @@ const useStyles = createStyles(({ token }) => {
export type HeaderDropdownProps = { export type HeaderDropdownProps = {
overlayClassName?: string; overlayClassName?: string;
placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight' | 'bottomCenter'; placement?:
| 'bottomLeft'
| 'bottomRight'
| 'topLeft'
| 'topCenter'
| 'topRight'
| 'bottomCenter';
} & Omit<DropDownProps, 'overlay'>; } & Omit<DropDownProps, 'overlay'>;
const HeaderDropdown: React.FC<HeaderDropdownProps> = ({ overlayClassName: cls, ...restProps }) => { const HeaderDropdown: React.FC<HeaderDropdownProps> = ({
overlayClassName: cls,
...restProps
}) => {
const { styles } = useStyles(); const { styles } = useStyles();
return <Dropdown overlayClassName={classNames(styles.dropdown, cls)} {...restProps} />; return (
<Dropdown
overlayClassName={classNames(styles.dropdown, cls)}
{...restProps}
/>
);
}; };
export default HeaderDropdown; export default HeaderDropdown;

15
src/components/RightContent/AvatarDropdown.tsx

@ -1,11 +1,15 @@
import { outLogin } from '@/services/ant-design-pro/api'; import {
import { LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons'; LogoutOutlined,
SettingOutlined,
UserOutlined,
} from '@ant-design/icons';
import { history, useModel } from '@umijs/max'; import { history, useModel } from '@umijs/max';
import { Spin } from 'antd';
import type { MenuProps } from 'antd'; import type { MenuProps } from 'antd';
import { Spin } from 'antd';
import { createStyles } from 'antd-style'; import { createStyles } from 'antd-style';
import React from 'react'; import React from 'react';
import { flushSync } from 'react-dom'; import { flushSync } from 'react-dom';
import { outLogin } from '@/services/ant-design-pro/api';
import HeaderDropdown from '../HeaderDropdown'; import HeaderDropdown from '../HeaderDropdown';
export type GlobalHeaderRightProps = { export type GlobalHeaderRightProps = {
@ -37,7 +41,10 @@ const useStyles = createStyles(({ token }) => {
}; };
}); });
export const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu, children }) => { export const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({
menu,
children,
}) => {
/** /**
* 退出登录,并且将当前的 url 保存 * 退出登录,并且将当前的 url 保存
*/ */

20
src/components/RightContent/index.tsx

@ -4,7 +4,7 @@ import React from 'react';
export type SiderTheme = 'light' | 'dark'; export type SiderTheme = 'light' | 'dark';
export const SelectLang = () => { export const SelectLang: React.FC = () => {
return ( return (
<UmiSelectLang <UmiSelectLang
style={{ style={{
@ -14,18 +14,20 @@ export const SelectLang = () => {
); );
}; };
export const Question = () => { export const Question: React.FC = () => {
return ( return (
<div <a
href="https://pro.ant.design/docs/getting-started"
target="_blank"
rel="noreferrer"
style={{ style={{
display: 'flex', display: 'inline-flex',
height: 26, padding: '4px',
}} fontSize: '18px',
onClick={() => { color: 'inherit',
window.open('https://pro.ant.design/docs/getting-started');
}} }}
> >
<QuestionCircleOutlined /> <QuestionCircleOutlined />
</div> </a>
); );
}; };

6
src/global.tsx

@ -32,7 +32,7 @@ if (pwa) {
const reloadSW = async () => { const reloadSW = async () => {
// Check if there is sw whose state is waiting in ServiceWorkerRegistration // Check if there is sw whose state is waiting in ServiceWorkerRegistration
// https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
const worker = e.detail && e.detail.waiting; const worker = e.detail?.waiting;
if (!worker) { if (!worker) {
return true; return true;
} }
@ -67,7 +67,9 @@ if (pwa) {
); );
notification.open({ notification.open({
message: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated' }), message: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated' }),
description: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.hint' }), description: useIntl().formatMessage({
id: 'app.pwa.serviceworker.updated.hint',
}),
btn, btn,
key, key,
onClose: async () => null, onClose: async () => null,

9
src/locales/bn-BD/pages.ts

@ -2,7 +2,8 @@ export default {
'pages.layouts.userLayout.title': 'pages.layouts.userLayout.title':
'পিঁপড়া ডিজাইন হচ্ছে সিহু জেলার সবচেয়ে প্রভাবশালী ওয়েব ডিজাইনের স্পেসিফিকেশন', 'পিঁপড়া ডিজাইন হচ্ছে সিহু জেলার সবচেয়ে প্রভাবশালী ওয়েব ডিজাইনের স্পেসিফিকেশন',
'pages.login.accountLogin.tab': 'অ্যাকাউন্টে লগইন', 'pages.login.accountLogin.tab': 'অ্যাকাউন্টে লগইন',
'pages.login.accountLogin.errorMessage': 'ভুল ব্যবহারকারীর নাম/পাসওয়ার্ড(admin/ant.design)', 'pages.login.accountLogin.errorMessage':
'ভুল ব্যবহারকারীর নাম/পাসওয়ার্ড(admin/ant.design)',
'pages.login.failure': 'লগইন ব্যর্থ হয়েছে। আবার চেষ্টা করুন!', 'pages.login.failure': 'লগইন ব্যর্থ হয়েছে। আবার চেষ্টা করুন!',
'pages.login.success': 'সফল লগইন!', 'pages.login.success': 'সফল লগইন!',
'pages.login.username.placeholder': 'ব্যবহারকারীর নাম: admin or user', 'pages.login.username.placeholder': 'ব্যবহারকারীর নাম: admin or user',
@ -36,7 +37,8 @@ export default {
'pages.searchTable.updateForm.ruleName.nameLabel': 'বিধি নাম', 'pages.searchTable.updateForm.ruleName.nameLabel': 'বিধি নাম',
'pages.searchTable.updateForm.ruleName.nameRules': 'বিধির নাম লিখুন!', 'pages.searchTable.updateForm.ruleName.nameRules': 'বিধির নাম লিখুন!',
'pages.searchTable.updateForm.ruleDesc.descLabel': 'বিধির বিবরণ', 'pages.searchTable.updateForm.ruleDesc.descLabel': 'বিধির বিবরণ',
'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'কমপক্ষে পাঁচটি অক্ষর লিখুন', 'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
'কমপক্ষে পাঁচটি অক্ষর লিখুন',
'pages.searchTable.updateForm.ruleDesc.descRules': 'pages.searchTable.updateForm.ruleDesc.descRules':
'কমপক্ষে পাঁচটি অক্ষরের একটি বিধান বিবরণ লিখুন!', 'কমপক্ষে পাঁচটি অক্ষরের একটি বিধান বিবরণ লিখুন!',
'pages.searchTable.updateForm.ruleProps.title': 'বৈশিষ্ট্য কনফিগার করুন', 'pages.searchTable.updateForm.ruleProps.title': 'বৈশিষ্ট্য কনফিগার করুন',
@ -45,7 +47,8 @@ export default {
'pages.searchTable.updateForm.ruleProps.typeLabel': 'বিধি প্রকার', 'pages.searchTable.updateForm.ruleProps.typeLabel': 'বিধি প্রকার',
'pages.searchTable.updateForm.schedulingPeriod.title': 'সময়সূচী নির্ধারণ করুন', 'pages.searchTable.updateForm.schedulingPeriod.title': 'সময়সূচী নির্ধারণ করুন',
'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'শুরুর সময়', 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'শুরুর সময়',
'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'একটি শুরুর সময় চয়ন করুন!', 'pages.searchTable.updateForm.schedulingPeriod.timeRules':
'একটি শুরুর সময় চয়ন করুন!',
'pages.searchTable.titleDesc': 'বর্ণনা', 'pages.searchTable.titleDesc': 'বর্ণনা',
'pages.searchTable.ruleName': 'বিধি নাম প্রয়োজন', 'pages.searchTable.ruleName': 'বিধি নাম প্রয়োজন',
'pages.searchTable.titleCallNo': 'পরিষেবা কল সংখ্যা', 'pages.searchTable.titleCallNo': 'পরিষেবা কল সংখ্যা',

3
src/locales/bn-BD/settingDrawer.ts

@ -25,7 +25,8 @@ export default {
'app.setting.othersettings': 'অন্যান্য সেটিংস্', 'app.setting.othersettings': 'অন্যান্য সেটিংস্',
'app.setting.weakmode': 'দুর্বল মোড', 'app.setting.weakmode': 'দুর্বল মোড',
'app.setting.copy': 'সেটিং কপি করুন', 'app.setting.copy': 'সেটিং কপি করুন',
'app.setting.copyinfo': 'সাফল্যের অনুলিপি করুন - প্রতিস্থাপন করুন: src/models/setting.js', 'app.setting.copyinfo':
'সাফল্যের অনুলিপি করুন - প্রতিস্থাপন করুন: src/models/setting.js',
'app.setting.production.hint': 'app.setting.production.hint':
'কেবল বিকাশের পরিবেশে প্যানেল শো সেট করা হচ্ছে, দয়া করে ম্যানুয়ালি সংশোধন করুন', 'কেবল বিকাশের পরিবেশে প্যানেল শো সেট করা হচ্ছে, দয়া করে ম্যানুয়ালি সংশোধন করুন',
}; };

3
src/locales/bn-BD/settings.ts

@ -53,7 +53,8 @@ export default {
'app.settings.notification.messages-description': 'app.settings.notification.messages-description':
'সিস্টেম বার্তাগুলি স্টেশন চিঠির আকারে জানানো হবে', 'সিস্টেম বার্তাগুলি স্টেশন চিঠির আকারে জানানো হবে',
'app.settings.notification.todo': 'করণীয় বিজ্ঞপ্তি', 'app.settings.notification.todo': 'করণীয় বিজ্ঞপ্তি',
'app.settings.notification.todo-description': 'করণীয় তালিকাটি স্টেশন থেকে চিঠি আকারে জানানো হবে', 'app.settings.notification.todo-description':
'করণীয় তালিকাটি স্টেশন থেকে চিঠি আকারে জানানো হবে',
'app.settings.open': 'খোলা', 'app.settings.open': 'খোলা',
'app.settings.close': 'বন্ধ', 'app.settings.close': 'বন্ধ',
}; };

3
src/locales/en-US.ts

@ -13,7 +13,8 @@ export default {
'layout.user.link.terms': 'Terms', 'layout.user.link.terms': 'Terms',
'app.preview.down.block': 'Download this page to your local project', 'app.preview.down.block': 'Download this page to your local project',
'app.welcome.link.fetch-blocks': 'Get all block', 'app.welcome.link.fetch-blocks': 'Get all block',
'app.welcome.link.block-list': 'Quickly build standard, pages based on `block` development', 'app.welcome.link.block-list':
'Quickly build standard, pages based on `block` development',
...globalHeader, ...globalHeader,
...menu, ...menu,
...settingDrawer, ...settingDrawer,

3
src/locales/en-US/globalHeader.ts

@ -5,7 +5,8 @@ export default {
'component.globalHeader.search.example3': 'Search example 3', 'component.globalHeader.search.example3': 'Search example 3',
'component.globalHeader.help': 'Help', 'component.globalHeader.help': 'Help',
'component.globalHeader.notification': 'Notification', 'component.globalHeader.notification': 'Notification',
'component.globalHeader.notification.empty': 'You have viewed all notifications.', 'component.globalHeader.notification.empty':
'You have viewed all notifications.',
'component.globalHeader.message': 'Message', 'component.globalHeader.message': 'Message',
'component.globalHeader.message.empty': 'You have viewed all messsages.', 'component.globalHeader.message.empty': 'You have viewed all messsages.',
'component.globalHeader.event': 'Event', 'component.globalHeader.event': 'Event',

18
src/locales/en-US/pages.ts

@ -2,7 +2,8 @@ export default {
'pages.layouts.userLayout.title': 'pages.layouts.userLayout.title':
'Ant Design is the most influential web design specification in Xihu district', 'Ant Design is the most influential web design specification in Xihu district',
'pages.login.accountLogin.tab': 'Account Login', 'pages.login.accountLogin.tab': 'Account Login',
'pages.login.accountLogin.errorMessage': 'Incorrect username/password(admin/ant.design)', 'pages.login.accountLogin.errorMessage':
'Incorrect username/password(admin/ant.design)',
'pages.login.failure': 'Login failed, please try again!', 'pages.login.failure': 'Login failed, please try again!',
'pages.login.success': 'Login successful!', 'pages.login.success': 'Login successful!',
'pages.login.username.placeholder': 'Username: admin or user', 'pages.login.username.placeholder': 'Username: admin or user',
@ -24,7 +25,8 @@ export default {
'pages.login.loginWith': 'Login with :', 'pages.login.loginWith': 'Login with :',
'pages.login.registerAccount': 'Register Account', 'pages.login.registerAccount': 'Register Account',
'pages.welcome.link': 'Welcome', 'pages.welcome.link': 'Welcome',
'pages.welcome.alertMessage': 'Faster and stronger heavy-duty components have been released.', 'pages.welcome.alertMessage':
'Faster and stronger heavy-duty components have been released.',
'pages.404.subTitle': 'Sorry, the page you visited does not exist.', 'pages.404.subTitle': 'Sorry, the page you visited does not exist.',
'pages.404.buttonText': 'Back Home', 'pages.404.buttonText': 'Back Home',
'pages.admin.subPage.title': 'This page can only be viewed by Admin', 'pages.admin.subPage.title': 'This page can only be viewed by Admin',
@ -34,18 +36,22 @@ export default {
'pages.searchTable.updateForm.ruleConfig': 'Rule configuration', 'pages.searchTable.updateForm.ruleConfig': 'Rule configuration',
'pages.searchTable.updateForm.basicConfig': 'Basic Information', 'pages.searchTable.updateForm.basicConfig': 'Basic Information',
'pages.searchTable.updateForm.ruleName.nameLabel': 'Rule Name', 'pages.searchTable.updateForm.ruleName.nameLabel': 'Rule Name',
'pages.searchTable.updateForm.ruleName.nameRules': 'Please enter the rule name!', 'pages.searchTable.updateForm.ruleName.nameRules':
'Please enter the rule name!',
'pages.searchTable.updateForm.ruleDesc.descLabel': 'Rule Description', 'pages.searchTable.updateForm.ruleDesc.descLabel': 'Rule Description',
'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'Please enter at least five characters', 'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
'Please enter at least five characters',
'pages.searchTable.updateForm.ruleDesc.descRules': 'pages.searchTable.updateForm.ruleDesc.descRules':
'Please enter a rule description of at least five characters!', 'Please enter a rule description of at least five characters!',
'pages.searchTable.updateForm.ruleProps.title': 'Configure Properties', 'pages.searchTable.updateForm.ruleProps.title': 'Configure Properties',
'pages.searchTable.updateForm.object': 'Monitoring Object', 'pages.searchTable.updateForm.object': 'Monitoring Object',
'pages.searchTable.updateForm.ruleProps.templateLabel': 'Rule Template', 'pages.searchTable.updateForm.ruleProps.templateLabel': 'Rule Template',
'pages.searchTable.updateForm.ruleProps.typeLabel': 'Rule Type', 'pages.searchTable.updateForm.ruleProps.typeLabel': 'Rule Type',
'pages.searchTable.updateForm.schedulingPeriod.title': 'Set Scheduling Period', 'pages.searchTable.updateForm.schedulingPeriod.title':
'Set Scheduling Period',
'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Starting Time', 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Starting Time',
'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'Please choose a start time!', 'pages.searchTable.updateForm.schedulingPeriod.timeRules':
'Please choose a start time!',
'pages.searchTable.titleDesc': 'Description', 'pages.searchTable.titleDesc': 'Description',
'pages.searchTable.ruleName': 'Rule name is required', 'pages.searchTable.ruleName': 'Rule name is required',
'pages.searchTable.titleCallNo': 'Number of Service Calls', 'pages.searchTable.titleCallNo': 'Number of Service Calls',

3
src/locales/en-US/pwa.ts

@ -1,6 +1,7 @@
export default { export default {
'app.pwa.offline': 'You are offline now', 'app.pwa.offline': 'You are offline now',
'app.pwa.serviceworker.updated': 'New content is available', 'app.pwa.serviceworker.updated': 'New content is available',
'app.pwa.serviceworker.updated.hint': 'Please press the "Refresh" button to reload current page', 'app.pwa.serviceworker.updated.hint':
'Please press the "Refresh" button to reload current page',
'app.pwa.serviceworker.updated.ok': 'Refresh', 'app.pwa.serviceworker.updated.ok': 'Refresh',
}; };

3
src/locales/en-US/settingDrawer.ts

@ -25,7 +25,8 @@ export default {
'app.setting.othersettings': 'Other Settings', 'app.setting.othersettings': 'Other Settings',
'app.setting.weakmode': 'Color Blind Friendly Mode', 'app.setting.weakmode': 'Color Blind Friendly Mode',
'app.setting.copy': 'Copy Setting', 'app.setting.copy': 'Copy Setting',
'app.setting.copyinfo': 'copy success, please replace defaultSettings in src/models/setting.js', 'app.setting.copyinfo':
'copy success, please replace defaultSettings in src/models/setting.js',
'app.setting.production.hint': 'app.setting.production.hint':
'Setting panel shows in development environment only, please manually modify', 'Setting panel shows in development environment only, please manually modify',
}; };

3
src/locales/en-US/settings.ts

@ -44,7 +44,8 @@ export default {
'app.settings.binding.alipay': 'Binding Alipay', 'app.settings.binding.alipay': 'Binding Alipay',
'app.settings.binding.alipay-description': 'Currently unbound Alipay account', 'app.settings.binding.alipay-description': 'Currently unbound Alipay account',
'app.settings.binding.dingding': 'Binding DingTalk', 'app.settings.binding.dingding': 'Binding DingTalk',
'app.settings.binding.dingding-description': 'Currently unbound DingTalk account', 'app.settings.binding.dingding-description':
'Currently unbound DingTalk account',
'app.settings.binding.bind': 'Bind', 'app.settings.binding.bind': 'Bind',
'app.settings.notification.password': 'Account Password', 'app.settings.notification.password': 'Account Password',
'app.settings.notification.password-description': 'app.settings.notification.password-description':

3
src/locales/fa-IR.ts

@ -13,7 +13,8 @@ export default {
'layout.user.link.terms': 'مقررات', 'layout.user.link.terms': 'مقررات',
'app.preview.down.block': 'این صفحه را در پروژه محلی خود بارگیری کنید', 'app.preview.down.block': 'این صفحه را در پروژه محلی خود بارگیری کنید',
'app.welcome.link.fetch-blocks': 'دریافت تمام بلوک', 'app.welcome.link.fetch-blocks': 'دریافت تمام بلوک',
'app.welcome.link.block-list': 'به سرعت صفحات استاندارد مبتنی بر توسعه "بلوک" را بسازید', 'app.welcome.link.block-list':
'به سرعت صفحات استاندارد مبتنی بر توسعه "بلوک" را بسازید',
...globalHeader, ...globalHeader,
...menu, ...menu,
...settingDrawer, ...settingDrawer,

3
src/locales/fa-IR/globalHeader.ts

@ -5,7 +5,8 @@ export default {
'component.globalHeader.search.example3': 'مثال 3 را جستجو کنید', 'component.globalHeader.search.example3': 'مثال 3 را جستجو کنید',
'component.globalHeader.help': 'کمک', 'component.globalHeader.help': 'کمک',
'component.globalHeader.notification': 'اعلان', 'component.globalHeader.notification': 'اعلان',
'component.globalHeader.notification.empty': 'شما همه اعلان ها را مشاهده کرده اید.', 'component.globalHeader.notification.empty':
'شما همه اعلان ها را مشاهده کرده اید.',
'component.globalHeader.message': 'پیام', 'component.globalHeader.message': 'پیام',
'component.globalHeader.message.empty': 'شما همه پیام ها را مشاهده کرده اید.', 'component.globalHeader.message.empty': 'شما همه پیام ها را مشاهده کرده اید.',
'component.globalHeader.event': 'رویداد', 'component.globalHeader.event': 'رویداد',

18
src/locales/fa-IR/pages.ts

@ -1,8 +1,11 @@
export default { export default {
'pages.layouts.userLayout.title': 'طراحی مورچه تأثیرگذارترین مشخصات طراحی وب در منطقه Xihu است', 'pages.layouts.userLayout.title':
'طراحی مورچه تأثیرگذارترین مشخصات طراحی وب در منطقه Xihu است',
'pages.login.accountLogin.tab': 'ورود به حساب کاربری', 'pages.login.accountLogin.tab': 'ورود به حساب کاربری',
'pages.login.accountLogin.errorMessage': 'نام کاربری / رمزعبور نادرست (مدیر / ant.design)', 'pages.login.accountLogin.errorMessage':
'pages.login.failure': 'ورود به سیستم با شکست مواجه شد، لطفا دوباره سعی کنید!', 'نام کاربری / رمزعبور نادرست (مدیر / ant.design)',
'pages.login.failure':
'ورود به سیستم با شکست مواجه شد، لطفا دوباره سعی کنید!',
'pages.login.success': 'ورود موفق!', 'pages.login.success': 'ورود موفق!',
'pages.login.username.placeholder': 'نام کاربری: مدیر یا کاربر', 'pages.login.username.placeholder': 'نام کاربری: مدیر یا کاربر',
'pages.login.username.required': 'لطفا نام کاربری خود را وارد کنید!', 'pages.login.username.required': 'لطفا نام کاربری خود را وارد کنید!',
@ -33,9 +36,11 @@ export default {
'pages.searchTable.updateForm.ruleConfig': 'پیکربندی قانون', 'pages.searchTable.updateForm.ruleConfig': 'پیکربندی قانون',
'pages.searchTable.updateForm.basicConfig': 'اطلاعات اولیه', 'pages.searchTable.updateForm.basicConfig': 'اطلاعات اولیه',
'pages.searchTable.updateForm.ruleName.nameLabel': ' نام قانون', 'pages.searchTable.updateForm.ruleName.nameLabel': ' نام قانون',
'pages.searchTable.updateForm.ruleName.nameRules': 'لطفاً نام قانون را وارد کنید!', 'pages.searchTable.updateForm.ruleName.nameRules':
'لطفاً نام قانون را وارد کنید!',
'pages.searchTable.updateForm.ruleDesc.descLabel': 'شرح قانون', 'pages.searchTable.updateForm.ruleDesc.descLabel': 'شرح قانون',
'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'لطفاً حداقل پنج حرف وارد کنید', 'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
'لطفاً حداقل پنج حرف وارد کنید',
'pages.searchTable.updateForm.ruleDesc.descRules': 'pages.searchTable.updateForm.ruleDesc.descRules':
'لطفاً حداقل یک قانون حاوی پنج کاراکتر شرح دهید!', 'لطفاً حداقل یک قانون حاوی پنج کاراکتر شرح دهید!',
'pages.searchTable.updateForm.ruleProps.title': 'پیکربندی خصوصیات', 'pages.searchTable.updateForm.ruleProps.title': 'پیکربندی خصوصیات',
@ -44,7 +49,8 @@ export default {
'pages.searchTable.updateForm.ruleProps.typeLabel': 'نوع قانون', 'pages.searchTable.updateForm.ruleProps.typeLabel': 'نوع قانون',
'pages.searchTable.updateForm.schedulingPeriod.title': 'تنظیم دوره زمان بندی', 'pages.searchTable.updateForm.schedulingPeriod.title': 'تنظیم دوره زمان بندی',
'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'زمان شروع', 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'زمان شروع',
'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'لطفاً زمان شروع را انتخاب کنید!', 'pages.searchTable.updateForm.schedulingPeriod.timeRules':
'لطفاً زمان شروع را انتخاب کنید!',
'pages.searchTable.titleDesc': 'شرح', 'pages.searchTable.titleDesc': 'شرح',
'pages.searchTable.ruleName': 'نام قانون لازم است', 'pages.searchTable.ruleName': 'نام قانون لازم است',
'pages.searchTable.titleCallNo': 'تعداد تماس های خدماتی', 'pages.searchTable.titleCallNo': 'تعداد تماس های خدماتی',

12
src/locales/fa-IR/settings.ts

@ -15,7 +15,8 @@ export default {
'app.settings.basic.country': 'کشور / منطقه', 'app.settings.basic.country': 'کشور / منطقه',
'app.settings.basic.country-message': 'لطفاً کشور خود را وارد کنید!', 'app.settings.basic.country-message': 'لطفاً کشور خود را وارد کنید!',
'app.settings.basic.geographic': 'استان یا شهر', 'app.settings.basic.geographic': 'استان یا شهر',
'app.settings.basic.geographic-message': 'لطفاً اطلاعات جغرافیایی خود را وارد کنید!', 'app.settings.basic.geographic-message':
'لطفاً اطلاعات جغرافیایی خود را وارد کنید!',
'app.settings.basic.address': 'آدرس خیابان', 'app.settings.basic.address': 'آدرس خیابان',
'app.settings.basic.address-message': 'لطفا آدرس خود را وارد کنید!', 'app.settings.basic.address-message': 'لطفا آدرس خود را وارد کنید!',
'app.settings.basic.phone': 'شماره تلفن', 'app.settings.basic.phone': 'شماره تلفن',
@ -40,11 +41,14 @@ export default {
'app.settings.security.set': 'تنظیم', 'app.settings.security.set': 'تنظیم',
'app.settings.security.bind': 'بستن', 'app.settings.security.bind': 'بستن',
'app.settings.binding.taobao': 'اتصال Taobao', 'app.settings.binding.taobao': 'اتصال Taobao',
'app.settings.binding.taobao-description': 'حساب Taobao در حال حاضر بسته نشده است', 'app.settings.binding.taobao-description':
'حساب Taobao در حال حاضر بسته نشده است',
'app.settings.binding.alipay': 'اتصال Alipay', 'app.settings.binding.alipay': 'اتصال Alipay',
'app.settings.binding.alipay-description': 'حساب Alipay در حال حاضر بسته نشده است', 'app.settings.binding.alipay-description':
'حساب Alipay در حال حاضر بسته نشده است',
'app.settings.binding.dingding': 'اتصال DingTalk', 'app.settings.binding.dingding': 'اتصال DingTalk',
'app.settings.binding.dingding-description': 'حساب DingTalk در حال حاضر محدود نشده است', 'app.settings.binding.dingding-description':
'حساب DingTalk در حال حاضر محدود نشده است',
'app.settings.binding.bind': 'بستن', 'app.settings.binding.bind': 'بستن',
'app.settings.notification.password': 'رمز عبور حساب کاربری', 'app.settings.notification.password': 'رمز عبور حساب کاربری',
'app.settings.notification.password-description': 'app.settings.notification.password-description':

3
src/locales/id-ID/globalHeader.ts

@ -5,7 +5,8 @@ export default {
'component.globalHeader.search.example3': 'Contoh 3 Pencarian', 'component.globalHeader.search.example3': 'Contoh 3 Pencarian',
'component.globalHeader.help': 'Bantuan', 'component.globalHeader.help': 'Bantuan',
'component.globalHeader.notification': 'Notifikasi', 'component.globalHeader.notification': 'Notifikasi',
'component.globalHeader.notification.empty': 'Anda telah membaca semua notifikasi', 'component.globalHeader.notification.empty':
'Anda telah membaca semua notifikasi',
'component.globalHeader.message': 'Pesan', 'component.globalHeader.message': 'Pesan',
'component.globalHeader.message.empty': 'Anda telah membaca semua pesan.', 'component.globalHeader.message.empty': 'Anda telah membaca semua pesan.',
'component.globalHeader.event': 'Acara', 'component.globalHeader.event': 'Acara',

3
src/locales/id-ID/menu.ts

@ -18,7 +18,8 @@ export default {
'menu.form.basic-form': 'Form Dasar', 'menu.form.basic-form': 'Form Dasar',
'menu.form.step-form': 'Form Bertahap', 'menu.form.step-form': 'Form Bertahap',
'menu.form.step-form.info': 'Form Bertahap(menulis informasi yang dibagikan)', 'menu.form.step-form.info': 'Form Bertahap(menulis informasi yang dibagikan)',
'menu.form.step-form.confirm': 'Form Bertahap(konfirmasi informasi yang dibagikan)', 'menu.form.step-form.confirm':
'Form Bertahap(konfirmasi informasi yang dibagikan)',
'menu.form.step-form.result': 'Form Bertahap(selesai)', 'menu.form.step-form.result': 'Form Bertahap(selesai)',
'menu.form.advanced-form': 'Form Lanjutan', 'menu.form.advanced-form': 'Form Lanjutan',
'menu.list': 'Daftar', 'menu.list': 'Daftar',

9
src/locales/id-ID/pages.ts

@ -2,7 +2,8 @@ export default {
'pages.layouts.userLayout.title': 'pages.layouts.userLayout.title':
'Ant Design adalah spesifikasi desain Web yang paling berpengaruh di Kabupaten Xihu', 'Ant Design adalah spesifikasi desain Web yang paling berpengaruh di Kabupaten Xihu',
'pages.login.accountLogin.tab': 'Login dengan akun', 'pages.login.accountLogin.tab': 'Login dengan akun',
'pages.login.accountLogin.errorMessage': 'Nama pengguna dan kata sandi salah(admin/ant.design)', 'pages.login.accountLogin.errorMessage':
'Nama pengguna dan kata sandi salah(admin/ant.design)',
'pages.login.failure': 'Log masuk gagal, silakan coba lagi!', 'pages.login.failure': 'Log masuk gagal, silakan coba lagi!',
'pages.login.success': 'Login berhasil!', 'pages.login.success': 'Login berhasil!',
'pages.login.username.placeholder': 'nama pengguna: admin atau user', 'pages.login.username.placeholder': 'nama pengguna: admin atau user',
@ -35,7 +36,8 @@ export default {
'pages.searchTable.updateForm.ruleConfig': 'Konfigurasi aturan', 'pages.searchTable.updateForm.ruleConfig': 'Konfigurasi aturan',
'pages.searchTable.updateForm.basicConfig': 'Informasi dasar', 'pages.searchTable.updateForm.basicConfig': 'Informasi dasar',
'pages.searchTable.updateForm.ruleName.nameLabel': 'Nama aturan', 'pages.searchTable.updateForm.ruleName.nameLabel': 'Nama aturan',
'pages.searchTable.updateForm.ruleName.nameRules': 'Harap masukkan nama aturan!', 'pages.searchTable.updateForm.ruleName.nameRules':
'Harap masukkan nama aturan!',
'pages.searchTable.updateForm.ruleDesc.descLabel': 'Deskripsi aturan', 'pages.searchTable.updateForm.ruleDesc.descLabel': 'Deskripsi aturan',
'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
'Harap masukkan setidaknya lima karakter', 'Harap masukkan setidaknya lima karakter',
@ -47,7 +49,8 @@ export default {
'pages.searchTable.updateForm.ruleProps.typeLabel': 'Jenis aturan', 'pages.searchTable.updateForm.ruleProps.typeLabel': 'Jenis aturan',
'pages.searchTable.updateForm.schedulingPeriod.title': 'Periode penjadwalan', 'pages.searchTable.updateForm.schedulingPeriod.title': 'Periode penjadwalan',
'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Waktu mulai', 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Waktu mulai',
'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'Pilih waktu mulai!', 'pages.searchTable.updateForm.schedulingPeriod.timeRules':
'Pilih waktu mulai!',
'pages.searchTable.titleDesc': 'deskripsi', 'pages.searchTable.titleDesc': 'deskripsi',
'pages.searchTable.ruleName': 'Nama aturan wajib diisi', 'pages.searchTable.ruleName': 'Nama aturan wajib diisi',
'pages.searchTable.titleCallNo': 'Jumlah panggilan', 'pages.searchTable.titleCallNo': 'Jumlah panggilan',

3
src/locales/id-ID/settingDrawer.ts

@ -21,7 +21,8 @@ export default {
'app.setting.fixedsidebar': 'Sidebar Tetap', 'app.setting.fixedsidebar': 'Sidebar Tetap',
'app.setting.fixedsidebar.hint': 'Berjalan pada Susunan Menu Samping', 'app.setting.fixedsidebar.hint': 'Berjalan pada Susunan Menu Samping',
'app.setting.hideheader': 'Sembunyikan Header ketika gulir ke bawah', 'app.setting.hideheader': 'Sembunyikan Header ketika gulir ke bawah',
'app.setting.hideheader.hint': 'Bekerja ketika Header tersembunyi dimunculkan', 'app.setting.hideheader.hint':
'Bekerja ketika Header tersembunyi dimunculkan',
'app.setting.othersettings': 'Pengaturan Lainnya', 'app.setting.othersettings': 'Pengaturan Lainnya',
'app.setting.weakmode': 'Mode Lemah', 'app.setting.weakmode': 'Mode Lemah',
'app.setting.copy': 'Salin Pengaturan', 'app.setting.copy': 'Salin Pengaturan',

12
src/locales/id-ID/settings.ts

@ -11,11 +11,13 @@ export default {
'app.settings.basic.nickname-message': 'Tolong masukkan Nickname!', 'app.settings.basic.nickname-message': 'Tolong masukkan Nickname!',
'app.settings.basic.profile': 'Profil Personal', 'app.settings.basic.profile': 'Profil Personal',
'app.settings.basic.profile-message': 'Tolong masukkan profil personal!', 'app.settings.basic.profile-message': 'Tolong masukkan profil personal!',
'app.settings.basic.profile-placeholder': 'Perkenalan Singkat tentang Diri Anda', 'app.settings.basic.profile-placeholder':
'Perkenalan Singkat tentang Diri Anda',
'app.settings.basic.country': 'Negara/Wilayah', 'app.settings.basic.country': 'Negara/Wilayah',
'app.settings.basic.country-message': 'Tolong masukkan negara anda!', 'app.settings.basic.country-message': 'Tolong masukkan negara anda!',
'app.settings.basic.geographic': 'Provinsi atau kota', 'app.settings.basic.geographic': 'Provinsi atau kota',
'app.settings.basic.geographic-message': 'Tolong masukkan info geografis anda!', 'app.settings.basic.geographic-message':
'Tolong masukkan info geografis anda!',
'app.settings.basic.address': 'Alamat Jalan', 'app.settings.basic.address': 'Alamat Jalan',
'app.settings.basic.address-message': 'Tolong masukkan Alamat Jalan anda!', 'app.settings.basic.address-message': 'Tolong masukkan Alamat Jalan anda!',
'app.settings.basic.phone': 'Nomor Ponsel', 'app.settings.basic.phone': 'Nomor Ponsel',
@ -40,9 +42,11 @@ export default {
'app.settings.security.set': 'Setel', 'app.settings.security.set': 'Setel',
'app.settings.security.bind': 'Ikat', 'app.settings.security.bind': 'Ikat',
'app.settings.binding.taobao': 'Mengikat Taobao', 'app.settings.binding.taobao': 'Mengikat Taobao',
'app.settings.binding.taobao-description': 'Tidak mengikat akun Taobao saat ini', 'app.settings.binding.taobao-description':
'Tidak mengikat akun Taobao saat ini',
'app.settings.binding.alipay': 'Mengikat Alipay', 'app.settings.binding.alipay': 'Mengikat Alipay',
'app.settings.binding.alipay-description': 'Tidak mengikat akun Alipay saat ini', 'app.settings.binding.alipay-description':
'Tidak mengikat akun Alipay saat ini',
'app.settings.binding.dingding': 'Mengikat DingTalk', 'app.settings.binding.dingding': 'Mengikat DingTalk',
'app.settings.binding.dingding-description': 'Tidak mengikat akun DingTalk', 'app.settings.binding.dingding-description': 'Tidak mengikat akun DingTalk',
'app.settings.binding.bind': 'Ikat', 'app.settings.binding.bind': 'Ikat',

3
src/locales/ja-JP.ts

@ -11,7 +11,8 @@ export default {
'layout.user.link.help': 'ヘルプ', 'layout.user.link.help': 'ヘルプ',
'layout.user.link.privacy': 'プライバシー', 'layout.user.link.privacy': 'プライバシー',
'layout.user.link.terms': '利用規約', 'layout.user.link.terms': '利用規約',
'app.preview.down.block': 'このページをローカルプロジェクトにダウンロードしてください', 'app.preview.down.block':
'このページをローカルプロジェクトにダウンロードしてください',
'app.welcome.link.fetch-blocks': '', 'app.welcome.link.fetch-blocks': '',
'app.welcome.link.block-list': '', 'app.welcome.link.block-list': '',
...globalHeader, ...globalHeader,

24
src/locales/ja-JP/pages.ts

@ -1,5 +1,6 @@
export default { export default {
'pages.layouts.userLayout.title': 'Ant Designは、西湖区で最も影響力のあるWebデザイン仕様です。', 'pages.layouts.userLayout.title':
'Ant Designは、西湖区で最も影響力のあるWebデザイン仕様です。',
'pages.login.accountLogin.tab': 'アカウントログイン', 'pages.login.accountLogin.tab': 'アカウントログイン',
'pages.login.accountLogin.errorMessage': 'pages.login.accountLogin.errorMessage':
'ユーザー名/パスワードが正しくありません(admin/ant.design)', 'ユーザー名/パスワードが正しくありません(admin/ant.design)',
@ -24,8 +25,10 @@ export default {
'pages.login.loginWith': 'その他のログイン方法:', 'pages.login.loginWith': 'その他のログイン方法:',
'pages.login.registerAccount': 'アカウント登録', 'pages.login.registerAccount': 'アカウント登録',
'pages.welcome.link': 'ようこそ', 'pages.welcome.link': 'ようこそ',
'pages.welcome.alertMessage': 'より高速で強力な頑丈なコンポーネントがリリースされました。', 'pages.welcome.alertMessage':
'pages.404.subTitle': '申し訳ありませんが、アクセスしたページは存在しません。', 'より高速で強力な頑丈なコンポーネントがリリースされました。',
'pages.404.subTitle':
'申し訳ありませんが、アクセスしたページは存在しません。',
'pages.404.buttonText': 'ホームに戻る', 'pages.404.buttonText': 'ホームに戻る',
'pages.admin.subPage.title': 'このページは管理者のみが表示できます', 'pages.admin.subPage.title': 'このページは管理者のみが表示できます',
'pages.admin.subPage.alertMessage': 'pages.admin.subPage.alertMessage':
@ -34,17 +37,22 @@ export default {
'pages.searchTable.updateForm.ruleConfig': 'ルール構成', 'pages.searchTable.updateForm.ruleConfig': 'ルール構成',
'pages.searchTable.updateForm.basicConfig': '基本情報', 'pages.searchTable.updateForm.basicConfig': '基本情報',
'pages.searchTable.updateForm.ruleName.nameLabel': 'ルール名', 'pages.searchTable.updateForm.ruleName.nameLabel': 'ルール名',
'pages.searchTable.updateForm.ruleName.nameRules': 'ルール名を入力してください!', 'pages.searchTable.updateForm.ruleName.nameRules':
'ルール名を入力してください!',
'pages.searchTable.updateForm.ruleDesc.descLabel': 'ルールの説明', 'pages.searchTable.updateForm.ruleDesc.descLabel': 'ルールの説明',
'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '5文字以上入力してください', 'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
'pages.searchTable.updateForm.ruleDesc.descRules': '5文字以上のルールの説明を入力してください!', '5文字以上入力してください',
'pages.searchTable.updateForm.ruleDesc.descRules':
'5文字以上のルールの説明を入力してください!',
'pages.searchTable.updateForm.ruleProps.title': 'プロパティの構成', 'pages.searchTable.updateForm.ruleProps.title': 'プロパティの構成',
'pages.searchTable.updateForm.object': '監視対象', 'pages.searchTable.updateForm.object': '監視対象',
'pages.searchTable.updateForm.ruleProps.templateLabel': 'ルールテンプレート', 'pages.searchTable.updateForm.ruleProps.templateLabel': 'ルールテンプレート',
'pages.searchTable.updateForm.ruleProps.typeLabel': 'ルールタイプ', 'pages.searchTable.updateForm.ruleProps.typeLabel': 'ルールタイプ',
'pages.searchTable.updateForm.schedulingPeriod.title': 'スケジュール期間の設定', 'pages.searchTable.updateForm.schedulingPeriod.title':
'スケジュール期間の設定',
'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '開始時間', 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '開始時間',
'pages.searchTable.updateForm.schedulingPeriod.timeRules': '開始時間を選択してください!', 'pages.searchTable.updateForm.schedulingPeriod.timeRules':
'開始時間を選択してください!',
'pages.searchTable.titleDesc': '説明', 'pages.searchTable.titleDesc': '説明',
'pages.searchTable.ruleName': 'ルール名が必要です', 'pages.searchTable.ruleName': 'ルール名が必要です',
'pages.searchTable.titleCallNo': 'サービスコール数', 'pages.searchTable.titleCallNo': 'サービスコール数',

6
src/locales/ja-JP/settingDrawer.ts

@ -21,11 +21,13 @@ export default {
'app.setting.fixedsidebar': '固定サイドバー', 'app.setting.fixedsidebar': '固定サイドバー',
'app.setting.fixedsidebar.hint': 'サイドメニューのレイアウトで動作します', 'app.setting.fixedsidebar.hint': 'サイドメニューのレイアウトで動作します',
'app.setting.hideheader': 'スクロール時の非表示ヘッダー', 'app.setting.hideheader': 'スクロール時の非表示ヘッダー',
'app.setting.hideheader.hint': '非表示ヘッダーが有効になっている場合に機能します', 'app.setting.hideheader.hint':
'非表示ヘッダーが有効になっている場合に機能します',
'app.setting.othersettings': 'その他の設定', 'app.setting.othersettings': 'その他の設定',
'app.setting.weakmode': 'ウィークモード', 'app.setting.weakmode': 'ウィークモード',
'app.setting.copy': 'コピー設定', 'app.setting.copy': 'コピー設定',
'app.setting.copyinfo': 'app.setting.copyinfo':
'コピーが成功しました。src/models/setting.jsのdefaultSettingsを置き換えてください', 'コピーが成功しました。src/models/setting.jsのdefaultSettingsを置き換えてください',
'app.setting.production.hint': '設定パネルは開発環境でのみ表示されます。手動で変更してください', 'app.setting.production.hint':
'設定パネルは開発環境でのみ表示されます。手動で変更してください',
}; };

12
src/locales/ja-JP/settings.ts

@ -40,11 +40,14 @@ export default {
'app.settings.security.set': 'セットする', 'app.settings.security.set': 'セットする',
'app.settings.security.bind': 'バインド', 'app.settings.security.bind': 'バインド',
'app.settings.binding.taobao': 'タオバオをバインドする', 'app.settings.binding.taobao': 'タオバオをバインドする',
'app.settings.binding.taobao-description': '現在バインドされていないタオバオアカウント', 'app.settings.binding.taobao-description':
'現在バインドされていないタオバオアカウント',
'app.settings.binding.alipay': 'アリペイをバインドする', 'app.settings.binding.alipay': 'アリペイをバインドする',
'app.settings.binding.alipay-description': '現在バインドされていないアリペイアカウント', 'app.settings.binding.alipay-description':
'現在バインドされていないアリペイアカウント',
'app.settings.binding.dingding': 'ディントークをバインドする', 'app.settings.binding.dingding': 'ディントークをバインドする',
'app.settings.binding.dingding-description': '現在バインドされていないディントークアカウント', 'app.settings.binding.dingding-description':
'現在バインドされていないディントークアカウント',
'app.settings.binding.bind': 'バインド', 'app.settings.binding.bind': 'バインド',
'app.settings.notification.password': 'アカウントパスワード', 'app.settings.notification.password': 'アカウントパスワード',
'app.settings.notification.password-description': 'app.settings.notification.password-description':
@ -53,7 +56,8 @@ export default {
'app.settings.notification.messages-description': 'app.settings.notification.messages-description':
'システムメッセージは、ステーションレターの形式で通知されます', 'システムメッセージは、ステーションレターの形式で通知されます',
'app.settings.notification.todo': 'To Do(用事) 通知', 'app.settings.notification.todo': 'To Do(用事) 通知',
'app.settings.notification.todo-description': 'To Doタスクは、内部レターの形式で通知されます', 'app.settings.notification.todo-description':
'To Doタスクは、内部レターの形式で通知されます',
'app.settings.open': '開く', 'app.settings.open': '開く',
'app.settings.close': '閉じる', 'app.settings.close': '閉じる',
}; };

3
src/locales/pt-BR/globalHeader.ts

@ -5,7 +5,8 @@ export default {
'component.globalHeader.search.example3': 'Exemplo de busca 3', 'component.globalHeader.search.example3': 'Exemplo de busca 3',
'component.globalHeader.help': 'Ajuda', 'component.globalHeader.help': 'Ajuda',
'component.globalHeader.notification': 'Notificação', 'component.globalHeader.notification': 'Notificação',
'component.globalHeader.notification.empty': 'Você visualizou todas as notificações.', 'component.globalHeader.notification.empty':
'Você visualizou todas as notificações.',
'component.globalHeader.message': 'Mensagem', 'component.globalHeader.message': 'Mensagem',
'component.globalHeader.message.empty': 'Você visualizou todas as mensagens.', 'component.globalHeader.message.empty': 'Você visualizou todas as mensagens.',
'component.globalHeader.event': 'Evento', 'component.globalHeader.event': 'Evento',

6
src/locales/pt-BR/menu.ts

@ -17,8 +17,10 @@ export default {
'menu.form': 'Formulário', 'menu.form': 'Formulário',
'menu.form.basic-form': 'Formulário Básico', 'menu.form.basic-form': 'Formulário Básico',
'menu.form.step-form': 'Formulário Assistido', 'menu.form.step-form': 'Formulário Assistido',
'menu.form.step-form.info': 'Formulário Assistido(gravar informações de transferência)', 'menu.form.step-form.info':
'menu.form.step-form.confirm': 'Formulário Assistido(confirmar informações de transferência)', 'Formulário Assistido(gravar informações de transferência)',
'menu.form.step-form.confirm':
'Formulário Assistido(confirmar informações de transferência)',
'menu.form.step-form.result': 'Formulário Assistido(finalizado)', 'menu.form.step-form.result': 'Formulário Assistido(finalizado)',
'menu.form.advanced-form': 'Formulário Avançado', 'menu.form.advanced-form': 'Formulário Avançado',
'menu.list': 'Lista', 'menu.list': 'Lista',

15
src/locales/pt-BR/pages.ts

@ -2,7 +2,8 @@ export default {
'pages.layouts.userLayout.title': 'pages.layouts.userLayout.title':
'Ant Design é a especificação de web design mais influente no distrito de Xihu', 'Ant Design é a especificação de web design mais influente no distrito de Xihu',
'pages.login.accountLogin.tab': 'Login da conta', 'pages.login.accountLogin.tab': 'Login da conta',
'pages.login.accountLogin.errorMessage': 'usuário/senha incorreto(admin/ant.design)', 'pages.login.accountLogin.errorMessage':
'usuário/senha incorreto(admin/ant.design)',
'pages.login.failure': 'Login falhou, por favor tente novamente!', 'pages.login.failure': 'Login falhou, por favor tente novamente!',
'pages.login.success': 'Login efetuado com sucesso!', 'pages.login.success': 'Login efetuado com sucesso!',
'pages.login.username.placeholder': 'Usuário: admin or user', 'pages.login.username.placeholder': 'Usuário: admin or user',
@ -15,7 +16,8 @@ export default {
'pages.login.phoneNumber.required': 'Por favor entre com seu telefone!', 'pages.login.phoneNumber.required': 'Por favor entre com seu telefone!',
'pages.login.phoneNumber.invalid': 'Telefone é inválido!', 'pages.login.phoneNumber.invalid': 'Telefone é inválido!',
'pages.login.captcha.placeholder': 'Código de Verificação', 'pages.login.captcha.placeholder': 'Código de Verificação',
'pages.login.captcha.required': 'Por favor entre com o código de verificação!', 'pages.login.captcha.required':
'Por favor entre com o código de verificação!',
'pages.login.phoneLogin.getVerificationCode': 'Obter Código', 'pages.login.phoneLogin.getVerificationCode': 'Obter Código',
'pages.getCaptchaSecondText': 'seg(s)', 'pages.getCaptchaSecondText': 'seg(s)',
'pages.login.rememberMe': 'Lembre-me', 'pages.login.rememberMe': 'Lembre-me',
@ -24,7 +26,8 @@ export default {
'pages.login.loginWith': 'Login com :', 'pages.login.loginWith': 'Login com :',
'pages.login.registerAccount': 'Registra Conta', 'pages.login.registerAccount': 'Registra Conta',
'pages.welcome.link': 'Bem-vindo', 'pages.welcome.link': 'Bem-vindo',
'pages.welcome.alertMessage': 'Componentes pesados mais rápidos e mais fortes foram lançados.', 'pages.welcome.alertMessage':
'Componentes pesados mais rápidos e mais fortes foram lançados.',
'pages.404.subTitle': 'Desculpe, a página que você visitou não existe. ', 'pages.404.subTitle': 'Desculpe, a página que você visitou não existe. ',
'pages.404.buttonText': 'Voltar à página inicial', 'pages.404.buttonText': 'Voltar à página inicial',
'pages.admin.subPage.title': 'Esta página só pode ser vista pelo Admin', 'pages.admin.subPage.title': 'Esta página só pode ser vista pelo Admin',
@ -34,7 +37,8 @@ export default {
'pages.searchTable.updateForm.ruleConfig': 'Configuração de Regra', 'pages.searchTable.updateForm.ruleConfig': 'Configuração de Regra',
'pages.searchTable.updateForm.basicConfig': 'Informação básica', 'pages.searchTable.updateForm.basicConfig': 'Informação básica',
'pages.searchTable.updateForm.ruleName.nameLabel': 'Nome da Regra', 'pages.searchTable.updateForm.ruleName.nameLabel': 'Nome da Regra',
'pages.searchTable.updateForm.ruleName.nameRules': 'Por favor entre com o nome da regra!', 'pages.searchTable.updateForm.ruleName.nameRules':
'Por favor entre com o nome da regra!',
'pages.searchTable.updateForm.ruleDesc.descLabel': 'Descrição da Regra', 'pages.searchTable.updateForm.ruleDesc.descLabel': 'Descrição da Regra',
'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
'Por favor insira ao menos cinco caracteres', 'Por favor insira ao menos cinco caracteres',
@ -44,7 +48,8 @@ export default {
'pages.searchTable.updateForm.object': 'Objeto de Monitoramento', 'pages.searchTable.updateForm.object': 'Objeto de Monitoramento',
'pages.searchTable.updateForm.ruleProps.templateLabel': 'Modelo de Regra', 'pages.searchTable.updateForm.ruleProps.templateLabel': 'Modelo de Regra',
'pages.searchTable.updateForm.ruleProps.typeLabel': 'Tipo de Regra', 'pages.searchTable.updateForm.ruleProps.typeLabel': 'Tipo de Regra',
'pages.searchTable.updateForm.schedulingPeriod.title': 'Definir Período de Agendamento', 'pages.searchTable.updateForm.schedulingPeriod.title':
'Definir Período de Agendamento',
'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Hora de Início', 'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Hora de Início',
'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'pages.searchTable.updateForm.schedulingPeriod.timeRules':
'Por favor selecione um horáriod e início!', 'Por favor selecione um horáriod e início!',

3
src/locales/pt-BR/settingDrawer.ts

@ -21,7 +21,8 @@ export default {
'app.setting.fixedsidebar': 'Barra lateral fixa', 'app.setting.fixedsidebar': 'Barra lateral fixa',
'app.setting.fixedsidebar.hint': 'Funciona no layout do menu lateral', 'app.setting.fixedsidebar.hint': 'Funciona no layout do menu lateral',
'app.setting.hideheader': 'Esconder o cabeçalho quando rolar', 'app.setting.hideheader': 'Esconder o cabeçalho quando rolar',
'app.setting.hideheader.hint': 'Funciona quando o esconder cabeçalho está abilitado', 'app.setting.hideheader.hint':
'Funciona quando o esconder cabeçalho está abilitado',
'app.setting.othersettings': 'Outras configurações', 'app.setting.othersettings': 'Outras configurações',
'app.setting.weakmode': 'Weak Mode', 'app.setting.weakmode': 'Weak Mode',
'app.setting.copy': 'Copiar Configuração', 'app.setting.copy': 'Copiar Configuração',

18
src/locales/pt-BR/settings.ts

@ -8,18 +8,21 @@ export default {
'app.settings.basic.email': 'Email', 'app.settings.basic.email': 'Email',
'app.settings.basic.email-message': 'Por favor insira seu email!', 'app.settings.basic.email-message': 'Por favor insira seu email!',
'app.settings.basic.nickname': 'Nome de usuário', 'app.settings.basic.nickname': 'Nome de usuário',
'app.settings.basic.nickname-message': 'Por favor insira seu nome de usuário!', 'app.settings.basic.nickname-message':
'Por favor insira seu nome de usuário!',
'app.settings.basic.profile': 'Perfil pessoal', 'app.settings.basic.profile': 'Perfil pessoal',
'app.settings.basic.profile-message': 'Por favor insira seu perfil pessoal!', 'app.settings.basic.profile-message': 'Por favor insira seu perfil pessoal!',
'app.settings.basic.profile-placeholder': 'Breve introdução sua', 'app.settings.basic.profile-placeholder': 'Breve introdução sua',
'app.settings.basic.country': 'País/Região', 'app.settings.basic.country': 'País/Região',
'app.settings.basic.country-message': 'Por favor insira país!', 'app.settings.basic.country-message': 'Por favor insira país!',
'app.settings.basic.geographic': 'Província, estado ou cidade', 'app.settings.basic.geographic': 'Província, estado ou cidade',
'app.settings.basic.geographic-message': 'Por favor insira suas informações geográficas!', 'app.settings.basic.geographic-message':
'Por favor insira suas informações geográficas!',
'app.settings.basic.address': 'Endereço', 'app.settings.basic.address': 'Endereço',
'app.settings.basic.address-message': 'Por favor insira seu endereço!', 'app.settings.basic.address-message': 'Por favor insira seu endereço!',
'app.settings.basic.phone': 'Número de telefone', 'app.settings.basic.phone': 'Número de telefone',
'app.settings.basic.phone-message': 'Por favor insira seu número de telefone!', 'app.settings.basic.phone-message':
'Por favor insira seu número de telefone!',
'app.settings.basic.update': 'Atualizar Informações', 'app.settings.basic.update': 'Atualizar Informações',
'app.settings.security.strong': 'Forte', 'app.settings.security.strong': 'Forte',
'app.settings.security.medium': 'Média', 'app.settings.security.medium': 'Média',
@ -40,11 +43,14 @@ export default {
'app.settings.security.set': 'Atribuir', 'app.settings.security.set': 'Atribuir',
'app.settings.security.bind': 'Vincular', 'app.settings.security.bind': 'Vincular',
'app.settings.binding.taobao': 'Vincular Taobao', 'app.settings.binding.taobao': 'Vincular Taobao',
'app.settings.binding.taobao-description': 'Atualmente não vinculado à conta Taobao', 'app.settings.binding.taobao-description':
'Atualmente não vinculado à conta Taobao',
'app.settings.binding.alipay': 'Vincular Alipay', 'app.settings.binding.alipay': 'Vincular Alipay',
'app.settings.binding.alipay-description': 'Atualmente não vinculado à conta Alipay', 'app.settings.binding.alipay-description':
'Atualmente não vinculado à conta Alipay',
'app.settings.binding.dingding': 'Vincular DingTalk', 'app.settings.binding.dingding': 'Vincular DingTalk',
'app.settings.binding.dingding-description': 'Atualmente não vinculado à conta DingTalk', 'app.settings.binding.dingding-description':
'Atualmente não vinculado à conta DingTalk',
'app.settings.binding.bind': 'Vincular', 'app.settings.binding.bind': 'Vincular',
'app.settings.notification.password': 'Senha da Conta', 'app.settings.notification.password': 'Senha da Conta',
'app.settings.notification.password-description': 'app.settings.notification.password-description':

12
src/locales/zh-CN/pages.ts

@ -1,7 +1,9 @@
export default { export default {
'pages.layouts.userLayout.title': 'Ant Design 是西湖区最具影响力的 Web 设计规范', 'pages.layouts.userLayout.title':
'Ant Design 是西湖区最具影响力的 Web 设计规范',
'pages.login.accountLogin.tab': '账户密码登录', 'pages.login.accountLogin.tab': '账户密码登录',
'pages.login.accountLogin.errorMessage': '错误的用户名和密码(admin/ant.design)', 'pages.login.accountLogin.errorMessage':
'错误的用户名和密码(admin/ant.design)',
'pages.login.failure': '登录失败,请重试!', 'pages.login.failure': '登录失败,请重试!',
'pages.login.success': '登录成功!', 'pages.login.success': '登录成功!',
'pages.login.username.placeholder': '用户名: admin or user', 'pages.login.username.placeholder': '用户名: admin or user',
@ -27,7 +29,8 @@ export default {
'pages.404.subTitle': '抱歉,您访问的页面不存在。', 'pages.404.subTitle': '抱歉,您访问的页面不存在。',
'pages.404.buttonText': '返回首页', 'pages.404.buttonText': '返回首页',
'pages.admin.subPage.title': ' 这个页面只有 admin 权限才能查看', 'pages.admin.subPage.title': ' 这个页面只有 admin 权限才能查看',
'pages.admin.subPage.alertMessage': 'umi ui 现已发布,欢迎使用 npm run ui 启动体验。', 'pages.admin.subPage.alertMessage':
'umi ui 现已发布,欢迎使用 npm run ui 启动体验。',
'pages.searchTable.createForm.newRule': '新建规则', 'pages.searchTable.createForm.newRule': '新建规则',
'pages.searchTable.updateForm.ruleConfig': '规则配置', 'pages.searchTable.updateForm.ruleConfig': '规则配置',
'pages.searchTable.updateForm.basicConfig': '基本信息', 'pages.searchTable.updateForm.basicConfig': '基本信息',
@ -35,7 +38,8 @@ export default {
'pages.searchTable.updateForm.ruleName.nameRules': '请输入规则名称!', 'pages.searchTable.updateForm.ruleName.nameRules': '请输入规则名称!',
'pages.searchTable.updateForm.ruleDesc.descLabel': '规则描述', 'pages.searchTable.updateForm.ruleDesc.descLabel': '规则描述',
'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '请输入至少五个字符', 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '请输入至少五个字符',
'pages.searchTable.updateForm.ruleDesc.descRules': '请输入至少五个字符的规则描述!', 'pages.searchTable.updateForm.ruleDesc.descRules':
'请输入至少五个字符的规则描述!',
'pages.searchTable.updateForm.ruleProps.title': '配置规则属性', 'pages.searchTable.updateForm.ruleProps.title': '配置规则属性',
'pages.searchTable.updateForm.object': '监控对象', 'pages.searchTable.updateForm.object': '监控对象',
'pages.searchTable.updateForm.ruleProps.templateLabel': '规则模板', 'pages.searchTable.updateForm.ruleProps.templateLabel': '规则模板',

3
src/locales/zh-CN/settingDrawer.ts

@ -25,7 +25,8 @@ export default {
'app.setting.othersettings': '其他设置', 'app.setting.othersettings': '其他设置',
'app.setting.weakmode': '色弱模式', 'app.setting.weakmode': '色弱模式',
'app.setting.copy': '拷贝设置', 'app.setting.copy': '拷贝设置',
'app.setting.copyinfo': '拷贝成功,请到 config/defaultSettings.js 中替换默认配置', 'app.setting.copyinfo':
'拷贝成功,请到 config/defaultSettings.js 中替换默认配置',
'app.setting.production.hint': 'app.setting.production.hint':
'配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件', '配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件',
}; };

12
src/locales/zh-CN/settings.ts

@ -29,11 +29,13 @@ export default {
'app.settings.security.phone': '密保手机', 'app.settings.security.phone': '密保手机',
'app.settings.security.phone-description': '已绑定手机', 'app.settings.security.phone-description': '已绑定手机',
'app.settings.security.question': '密保问题', 'app.settings.security.question': '密保问题',
'app.settings.security.question-description': '未设置密保问题,密保问题可有效保护账户安全', 'app.settings.security.question-description':
'未设置密保问题,密保问题可有效保护账户安全',
'app.settings.security.email': '备用邮箱', 'app.settings.security.email': '备用邮箱',
'app.settings.security.email-description': '已绑定邮箱', 'app.settings.security.email-description': '已绑定邮箱',
'app.settings.security.mfa': 'MFA 设备', 'app.settings.security.mfa': 'MFA 设备',
'app.settings.security.mfa-description': '未绑定 MFA 设备,绑定后,可以进行二次确认', 'app.settings.security.mfa-description':
'未绑定 MFA 设备,绑定后,可以进行二次确认',
'app.settings.security.modify': '修改', 'app.settings.security.modify': '修改',
'app.settings.security.set': '设置', 'app.settings.security.set': '设置',
'app.settings.security.bind': '绑定', 'app.settings.security.bind': '绑定',
@ -45,9 +47,11 @@ export default {
'app.settings.binding.dingding-description': '当前未绑定钉钉账号', 'app.settings.binding.dingding-description': '当前未绑定钉钉账号',
'app.settings.binding.bind': '绑定', 'app.settings.binding.bind': '绑定',
'app.settings.notification.password': '账户密码', 'app.settings.notification.password': '账户密码',
'app.settings.notification.password-description': '其他用户的消息将以站内信的形式通知', 'app.settings.notification.password-description':
'其他用户的消息将以站内信的形式通知',
'app.settings.notification.messages': '系统消息', 'app.settings.notification.messages': '系统消息',
'app.settings.notification.messages-description': '系统消息将以站内信的形式通知', 'app.settings.notification.messages-description':
'系统消息将以站内信的形式通知',
'app.settings.notification.todo': '待办任务', 'app.settings.notification.todo': '待办任务',
'app.settings.notification.todo-description': '待办任务将以站内信的形式通知', 'app.settings.notification.todo-description': '待办任务将以站内信的形式通知',
'app.settings.open': '开', 'app.settings.open': '开',

12
src/locales/zh-TW/pages.ts

@ -1,7 +1,9 @@
export default { export default {
'pages.layouts.userLayout.title': 'Ant Design 是西湖區最具影響力的 Web 設計規範', 'pages.layouts.userLayout.title':
'Ant Design 是西湖區最具影響力的 Web 設計規範',
'pages.login.accountLogin.tab': '賬戶密碼登錄', 'pages.login.accountLogin.tab': '賬戶密碼登錄',
'pages.login.accountLogin.errorMessage': '錯誤的用戶名和密碼(admin/ant.design)', 'pages.login.accountLogin.errorMessage':
'錯誤的用戶名和密碼(admin/ant.design)',
'pages.login.failure': '登錄失敗,請重試!', 'pages.login.failure': '登錄失敗,請重試!',
'pages.login.success': '登錄成功!', 'pages.login.success': '登錄成功!',
'pages.login.username.placeholder': '用戶名: admin or user', 'pages.login.username.placeholder': '用戶名: admin or user',
@ -27,7 +29,8 @@ export default {
'pages.404.subTitle': '抱歉,您訪問的頁面不存在。', 'pages.404.subTitle': '抱歉,您訪問的頁面不存在。',
'pages.404.buttonText': '返回首頁', 'pages.404.buttonText': '返回首頁',
'pages.admin.subPage.title': '這個頁面只有 admin 權限才能查看', 'pages.admin.subPage.title': '這個頁面只有 admin 權限才能查看',
'pages.admin.subPage.alertMessage': 'umi ui 現已發佈,歡迎使用 npm run ui 啓動體驗。', 'pages.admin.subPage.alertMessage':
'umi ui 現已發佈,歡迎使用 npm run ui 啓動體驗。',
'pages.searchTable.createForm.newRule': '新建規則', 'pages.searchTable.createForm.newRule': '新建規則',
'pages.searchTable.updateForm.ruleConfig': '規則配置', 'pages.searchTable.updateForm.ruleConfig': '規則配置',
'pages.searchTable.updateForm.basicConfig': '基本信息', 'pages.searchTable.updateForm.basicConfig': '基本信息',
@ -35,7 +38,8 @@ export default {
'pages.searchTable.updateForm.ruleName.nameRules': '請輸入規則名稱!', 'pages.searchTable.updateForm.ruleName.nameRules': '請輸入規則名稱!',
'pages.searchTable.updateForm.ruleDesc.descLabel': '規則描述', 'pages.searchTable.updateForm.ruleDesc.descLabel': '規則描述',
'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '請輸入至少五個字符', 'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '請輸入至少五個字符',
'pages.searchTable.updateForm.ruleDesc.descRules': '請輸入至少五個字符的規則描述!', 'pages.searchTable.updateForm.ruleDesc.descRules':
'請輸入至少五個字符的規則描述!',
'pages.searchTable.updateForm.ruleProps.title': '配置規則屬性', 'pages.searchTable.updateForm.ruleProps.title': '配置規則屬性',
'pages.searchTable.updateForm.object': '監控對象', 'pages.searchTable.updateForm.object': '監控對象',
'pages.searchTable.updateForm.ruleProps.templateLabel': '規則模板', 'pages.searchTable.updateForm.ruleProps.templateLabel': '規則模板',

3
src/locales/zh-TW/settingDrawer.ts

@ -25,7 +25,8 @@ export default {
'app.setting.othersettings': '其他設置', 'app.setting.othersettings': '其他設置',
'app.setting.weakmode': '色弱模式', 'app.setting.weakmode': '色弱模式',
'app.setting.copy': '拷貝設置', 'app.setting.copy': '拷貝設置',
'app.setting.copyinfo': '拷貝成功,請到 config/defaultSettings.js 中替換默認配置', 'app.setting.copyinfo':
'拷貝成功,請到 config/defaultSettings.js 中替換默認配置',
'app.setting.production.hint': 'app.setting.production.hint':
'配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件', '配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件',
}; };

12
src/locales/zh-TW/settings.ts

@ -29,11 +29,13 @@ export default {
'app.settings.security.phone': '密保手機', 'app.settings.security.phone': '密保手機',
'app.settings.security.phone-description': '已綁定手機', 'app.settings.security.phone-description': '已綁定手機',
'app.settings.security.question': '密保問題', 'app.settings.security.question': '密保問題',
'app.settings.security.question-description': '未設置密保問題,密保問題可有效保護賬戶安全', 'app.settings.security.question-description':
'未設置密保問題,密保問題可有效保護賬戶安全',
'app.settings.security.email': '備用郵箱', 'app.settings.security.email': '備用郵箱',
'app.settings.security.email-description': '已綁定郵箱', 'app.settings.security.email-description': '已綁定郵箱',
'app.settings.security.mfa': 'MFA 設備', 'app.settings.security.mfa': 'MFA 設備',
'app.settings.security.mfa-description': '未綁定 MFA 設備,綁定後,可以進行二次確認', 'app.settings.security.mfa-description':
'未綁定 MFA 設備,綁定後,可以進行二次確認',
'app.settings.security.modify': '修改', 'app.settings.security.modify': '修改',
'app.settings.security.set': '設置', 'app.settings.security.set': '設置',
'app.settings.security.bind': '綁定', 'app.settings.security.bind': '綁定',
@ -45,9 +47,11 @@ export default {
'app.settings.binding.dingding-description': '當前未綁定釘釘賬號', 'app.settings.binding.dingding-description': '當前未綁定釘釘賬號',
'app.settings.binding.bind': '綁定', 'app.settings.binding.bind': '綁定',
'app.settings.notification.password': '賬戶密碼', 'app.settings.notification.password': '賬戶密碼',
'app.settings.notification.password-description': '其他用戶的消息將以站內信的形式通知', 'app.settings.notification.password-description':
'其他用戶的消息將以站內信的形式通知',
'app.settings.notification.messages': '系統消息', 'app.settings.notification.messages': '系統消息',
'app.settings.notification.messages-description': '系統消息將以站內信的形式通知', 'app.settings.notification.messages-description':
'系統消息將以站內信的形式通知',
'app.settings.notification.todo': '待辦任務', 'app.settings.notification.todo': '待辦任務',
'app.settings.notification.todo-description': '待辦任務將以站內信的形式通知', 'app.settings.notification.todo-description': '待辦任務將以站內信的形式通知',
'app.settings.open': '開', 'app.settings.open': '開',

12
src/pages/Admin.tsx

@ -17,7 +17,8 @@ const Admin: React.FC = () => {
<Alert <Alert
message={intl.formatMessage({ message={intl.formatMessage({
id: 'pages.welcome.alertMessage', id: 'pages.welcome.alertMessage',
defaultMessage: 'Faster and stronger heavy-duty components have been released.', defaultMessage:
'Faster and stronger heavy-duty components have been released.',
})} })}
type="success" type="success"
showIcon showIcon
@ -28,12 +29,17 @@ const Admin: React.FC = () => {
}} }}
/> />
<Typography.Title level={2} style={{ textAlign: 'center' }}> <Typography.Title level={2} style={{ textAlign: 'center' }}>
<SmileTwoTone /> Ant Design Pro <HeartTwoTone twoToneColor="#eb2f96" /> You <SmileTwoTone /> Ant Design Pro{' '}
<HeartTwoTone twoToneColor="#eb2f96" /> You
</Typography.Title> </Typography.Title>
</Card> </Card>
<p style={{ textAlign: 'center', marginTop: 24 }}> <p style={{ textAlign: 'center', marginTop: 24 }}>
Want to add more pages? Please refer to{' '} Want to add more pages? Please refer to{' '}
<a href="https://pro.ant.design/docs/block-cn" target="_blank" rel="noopener noreferrer"> <a
href="https://pro.ant.design/docs/block-cn"
target="_blank"
rel="noopener noreferrer"
>
use block use block
</a> </a>
。 。

78
src/pages/TableList/index.tsx

@ -1,6 +1,9 @@
import { addRule, removeRule, rule, updateRule } from '@/services/ant-design-pro/api';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import type { ActionType, ProColumns, ProDescriptionsItemProps } from '@ant-design/pro-components'; import type {
ActionType,
ProColumns,
ProDescriptionsItemProps,
} from '@ant-design/pro-components';
import { import {
FooterToolbar, FooterToolbar,
ModalForm, ModalForm,
@ -13,6 +16,12 @@ import {
import { FormattedMessage, useIntl } from '@umijs/max'; import { FormattedMessage, useIntl } from '@umijs/max';
import { Button, Drawer, Input, message } from 'antd'; import { Button, Drawer, Input, message } from 'antd';
import React, { useRef, useState } from 'react'; import React, { useRef, useState } from 'react';
import {
addRule,
removeRule,
rule,
updateRule,
} from '@/services/ant-design-pro/api';
import type { FormValueType } from './components/UpdateForm'; import type { FormValueType } from './components/UpdateForm';
import UpdateForm from './components/UpdateForm'; import UpdateForm from './components/UpdateForm';
@ -28,7 +37,7 @@ const handleAdd = async (fields: API.RuleListItem) => {
hide(); hide();
message.success('Added successfully'); message.success('Added successfully');
return true; return true;
} catch (error) { } catch (_error) {
hide(); hide();
message.error('Adding failed, please try again!'); message.error('Adding failed, please try again!');
return false; return false;
@ -53,7 +62,7 @@ const handleUpdate = async (fields: FormValueType) => {
message.success('Configuration is successful'); message.success('Configuration is successful');
return true; return true;
} catch (error) { } catch (_error) {
hide(); hide();
message.error('Configuration failed, please try again!'); message.error('Configuration failed, please try again!');
return false; return false;
@ -76,7 +85,7 @@ const handleRemove = async (selectedRows: API.RuleListItem[]) => {
hide(); hide();
message.success('Deleted successfully and will refresh soon'); message.success('Deleted successfully and will refresh soon');
return true; return true;
} catch (error) { } catch (_error) {
hide(); hide();
message.error('Delete failed, please try again'); message.error('Delete failed, please try again');
return false; return false;
@ -130,7 +139,12 @@ const TableList: React.FC = () => {
}, },
}, },
{ {
title: <FormattedMessage id="pages.searchTable.titleDesc" defaultMessage="Description" />, title: (
<FormattedMessage
id="pages.searchTable.titleDesc"
defaultMessage="Description"
/>
),
dataIndex: 'desc', dataIndex: 'desc',
valueType: 'textarea', valueType: 'textarea',
}, },
@ -151,7 +165,12 @@ const TableList: React.FC = () => {
})}`, })}`,
}, },
{ {
title: <FormattedMessage id="pages.searchTable.titleStatus" defaultMessage="Status" />, title: (
<FormattedMessage
id="pages.searchTable.titleStatus"
defaultMessage="Status"
/>
),
dataIndex: 'status', dataIndex: 'status',
hideInForm: true, hideInForm: true,
valueEnum: { valueEnum: {
@ -166,13 +185,19 @@ const TableList: React.FC = () => {
}, },
1: { 1: {
text: ( text: (
<FormattedMessage id="pages.searchTable.nameStatus.running" defaultMessage="Running" /> <FormattedMessage
id="pages.searchTable.nameStatus.running"
defaultMessage="Running"
/>
), ),
status: 'Processing', status: 'Processing',
}, },
2: { 2: {
text: ( text: (
<FormattedMessage id="pages.searchTable.nameStatus.online" defaultMessage="Online" /> <FormattedMessage
id="pages.searchTable.nameStatus.online"
defaultMessage="Online"
/>
), ),
status: 'Success', status: 'Success',
}, },
@ -217,7 +242,12 @@ const TableList: React.FC = () => {
}, },
}, },
{ {
title: <FormattedMessage id="pages.searchTable.titleOption" defaultMessage="Operating" />, title: (
<FormattedMessage
id="pages.searchTable.titleOption"
defaultMessage="Operating"
/>
),
dataIndex: 'option', dataIndex: 'option',
valueType: 'option', valueType: 'option',
render: (_, record) => [ render: (_, record) => [
@ -228,7 +258,10 @@ const TableList: React.FC = () => {
setCurrentRow(record); setCurrentRow(record);
}} }}
> >
<FormattedMessage id="pages.searchTable.config" defaultMessage="Configuration" /> <FormattedMessage
id="pages.searchTable.config"
defaultMessage="Configuration"
/>
</a>, </a>,
<a key="subscribeAlert" href="https://procomponents.ant.design/"> <a key="subscribeAlert" href="https://procomponents.ant.design/">
<FormattedMessage <FormattedMessage
@ -260,7 +293,8 @@ const TableList: React.FC = () => {
handleModalOpen(true); handleModalOpen(true);
}} }}
> >
<PlusOutlined /> <FormattedMessage id="pages.searchTable.new" defaultMessage="New" /> <PlusOutlined />{' '}
<FormattedMessage id="pages.searchTable.new" defaultMessage="New" />
</Button>, </Button>,
]} ]}
request={rule} request={rule}
@ -275,17 +309,29 @@ const TableList: React.FC = () => {
<FooterToolbar <FooterToolbar
extra={ extra={
<div> <div>
<FormattedMessage id="pages.searchTable.chosen" defaultMessage="Chosen" />{' '} <FormattedMessage
id="pages.searchTable.chosen"
defaultMessage="Chosen"
/>{' '}
<a style={{ fontWeight: 600 }}>{selectedRowsState.length}</a>{' '} <a style={{ fontWeight: 600 }}>{selectedRowsState.length}</a>{' '}
<FormattedMessage id="pages.searchTable.item" defaultMessage="项" /> <FormattedMessage
id="pages.searchTable.item"
defaultMessage="项"
/>
&nbsp;&nbsp; &nbsp;&nbsp;
<span> <span>
<FormattedMessage <FormattedMessage
id="pages.searchTable.totalServiceCalls" id="pages.searchTable.totalServiceCalls"
defaultMessage="Total number of service calls" defaultMessage="Total number of service calls"
/>{' '} />{' '}
{selectedRowsState.reduce((pre, item) => pre + item.callNo!, 0)}{' '} {selectedRowsState.reduce(
<FormattedMessage id="pages.searchTable.tenThousand" defaultMessage="万" /> (pre, item) => pre + (item.callNo ?? 0),
0,
)}{' '}
<FormattedMessage
id="pages.searchTable.tenThousand"
defaultMessage="万"
/>
</span> </span>
</div> </div>
} }

9
src/pages/User/Login/__snapshots__/login.test.tsx.snap

@ -229,8 +229,11 @@ exports[`Login Page should login success 1`] = `
<div <div
class="ant-pro-global-header-header-actions-item ant-pro-global-header-header-actions-hover" class="ant-pro-global-header-header-actions-item ant-pro-global-header-header-actions-hover"
> >
<div <a
style="display: flex; height: 26px;" href="https://pro.ant.design/docs/getting-started"
rel="noreferrer"
style="display: inline-flex; padding: 4px; font-size: 18px;"
target="_blank"
> >
<span <span
aria-label="question-circle" aria-label="question-circle"
@ -254,7 +257,7 @@ exports[`Login Page should login success 1`] = `
/> />
</svg> </svg>
</span> </span>
</div> </a>
</div> </div>
<div <div
class="ant-pro-global-header-header-actions-item ant-pro-global-header-header-actions-hover" class="ant-pro-global-header-header-actions-item ant-pro-global-header-header-actions-hover"

50
src/pages/User/Login/index.tsx

@ -1,6 +1,3 @@
import { Footer } from '@/components';
import { login } from '@/services/ant-design-pro/api';
import { getFakeCaptcha } from '@/services/ant-design-pro/login';
import { import {
AlipayCircleOutlined, AlipayCircleOutlined,
LockOutlined, LockOutlined,
@ -15,11 +12,21 @@ import {
ProFormCheckbox, ProFormCheckbox,
ProFormText, ProFormText,
} from '@ant-design/pro-components'; } from '@ant-design/pro-components';
import { FormattedMessage, Helmet, history, SelectLang, useIntl, useModel } from '@umijs/max'; import {
import { App, Alert, Tabs } from 'antd'; FormattedMessage,
Helmet,
history,
SelectLang,
useIntl,
useModel,
} from '@umijs/max';
import { Alert, App, Tabs } from 'antd';
import { createStyles } from 'antd-style'; import { createStyles } from 'antd-style';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { flushSync } from 'react-dom'; import { flushSync } from 'react-dom';
import { Footer } from '@/components';
import { login } from '@/services/ant-design-pro/api';
import { getFakeCaptcha } from '@/services/ant-design-pro/login';
import Settings from '../../../../config/defaultSettings'; import Settings from '../../../../config/defaultSettings';
const useStyles = createStyles(({ token }) => { const useStyles = createStyles(({ token }) => {
@ -63,9 +70,18 @@ const ActionIcons = () => {
return ( return (
<> <>
<AlipayCircleOutlined key="AlipayCircleOutlined" className={styles.action} /> <AlipayCircleOutlined
<TaobaoCircleOutlined key="TaobaoCircleOutlined" className={styles.action} /> key="AlipayCircleOutlined"
<WeiboCircleOutlined key="WeiboCircleOutlined" className={styles.action} /> className={styles.action}
/>
<TaobaoCircleOutlined
key="TaobaoCircleOutlined"
className={styles.action}
/>
<WeiboCircleOutlined
key="WeiboCircleOutlined"
className={styles.action}
/>
</> </>
); );
}; };
@ -169,7 +185,9 @@ const Login: React.FC = () => {
}} }}
logo={<img alt="logo" src="/logo.svg" />} logo={<img alt="logo" src="/logo.svg" />}
title="Ant Design" title="Ant Design"
subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })} subTitle={intl.formatMessage({
id: 'pages.layouts.userLayout.title',
})}
initialValues={{ initialValues={{
autoLogin: true, autoLogin: true,
}} }}
@ -264,7 +282,9 @@ const Login: React.FC = () => {
</> </>
)} )}
{status === 'error' && loginType === 'mobile' && <LoginMessage content="验证码错误" />} {status === 'error' && loginType === 'mobile' && (
<LoginMessage content="验证码错误" />
)}
{type === 'mobile' && ( {type === 'mobile' && (
<> <>
<ProFormText <ProFormText
@ -352,14 +372,20 @@ const Login: React.FC = () => {
}} }}
> >
<ProFormCheckbox noStyle name="autoLogin"> <ProFormCheckbox noStyle name="autoLogin">
<FormattedMessage id="pages.login.rememberMe" defaultMessage="自动登录" /> <FormattedMessage
id="pages.login.rememberMe"
defaultMessage="自动登录"
/>
</ProFormCheckbox> </ProFormCheckbox>
<a <a
style={{ style={{
float: 'right', float: 'right',
}} }}
> >
<FormattedMessage id="pages.login.forgotPassword" defaultMessage="忘记密码" /> <FormattedMessage
id="pages.login.forgotPassword"
defaultMessage="忘记密码"
/>
</a> </a>
</div> </div>
</LoginForm> </LoginForm>

20
src/pages/User/Login/login.test.tsx

@ -1,10 +1,9 @@
import { TestBrowser } from '@@/testBrowser'; // @ts-ignore
import { startMock } from '@@/requestRecordMock';
import { TestBrowser } from '@@/testBrowser';
import { fireEvent, render } from '@testing-library/react'; import { fireEvent, render } from '@testing-library/react';
import React, { act } from 'react'; import React, { act } from 'react';
// @ts-ignore
import { startMock } from '@@/requestRecordMock';
const waitTime = (time: number = 100) => { const waitTime = (time: number = 100) => {
return new Promise((resolve) => { return new Promise((resolve) => {
setTimeout(() => { setTimeout(() => {
@ -46,7 +45,10 @@ describe('Login Page', () => {
historyRef.current?.push('/user/login'); historyRef.current?.push('/user/login');
}); });
expect(rootContainer.baseElement?.querySelector('.ant-pro-form-login-desc')?.textContent).toBe( expect(
rootContainer.baseElement?.querySelector('.ant-pro-form-login-desc')
?.textContent,
).toBe(
'Ant Design is the most influential web design specification in Xihu district', 'Ant Design is the most influential web design specification in Xihu district',
); );
@ -68,13 +70,17 @@ describe('Login Page', () => {
await rootContainer.findAllByText('Ant Design'); await rootContainer.findAllByText('Ant Design');
const userNameInput = await rootContainer.findByPlaceholderText('Username: admin or user'); const userNameInput = await rootContainer.findByPlaceholderText(
'Username: admin or user',
);
act(() => { act(() => {
fireEvent.change(userNameInput, { target: { value: 'admin' } }); fireEvent.change(userNameInput, { target: { value: 'admin' } });
}); });
const passwordInput = await rootContainer.findByPlaceholderText('Password: ant.design'); const passwordInput = await rootContainer.findByPlaceholderText(
'Password: ant.design',
);
act(() => { act(() => {
fireEvent.change(passwordInput, { target: { value: 'ant.design' } }); fireEvent.change(passwordInput, { target: { value: 'ant.design' } });

7
src/service-worker.js

@ -1,5 +1,3 @@
/* eslint-disable no-restricted-globals */
/* eslint-disable no-underscore-dangle */
/* globals workbox */ /* globals workbox */
workbox.core.setCacheNameDetails({ workbox.core.setCacheNameDetails({
prefix: 'antd-pro', prefix: 'antd-pro',
@ -40,7 +38,10 @@ workbox.routing.registerRoute(
/^https:\/\/cdnjs\.cloudflare\.com\//, /^https:\/\/cdnjs\.cloudflare\.com\//,
workbox.strategies.networkFirst(), workbox.strategies.networkFirst(),
); );
workbox.routing.registerRoute(/\/color.less/, workbox.strategies.networkFirst()); workbox.routing.registerRoute(
/\/color.less/,
workbox.strategies.networkFirst(),
);
/** Response to client after skipping waiting with MessageChannel */ /** Response to client after skipping waiting with MessageChannel */
addEventListener('message', (event) => { addEventListener('message', (event) => {

7
tests/setupTests.jsx

@ -28,7 +28,6 @@ class Worker {
} }
window.Worker = Worker; window.Worker = Worker;
/* eslint-disable global-require */
if (typeof window !== 'undefined') { if (typeof window !== 'undefined') {
// ref: https://github.com/ant-design/ant-design/issues/18774 // ref: https://github.com/ant-design/ant-design/issues/18774
if (!window.matchMedia) { if (!window.matchMedia) {
@ -60,7 +59,11 @@ Object.defineProperty(global.window.console, 'error', {
configurable: true, configurable: true,
value: (...rest) => { value: (...rest) => {
const logStr = rest.join(''); const logStr = rest.join('');
if (logStr.includes('Warning: An update to %s inside a test was not wrapped in act(...)')) { if (
logStr.includes(
'Warning: An update to %s inside a test was not wrapped in act(...)',
)
) {
return; return;
} }
errorLog(...rest); errorLog(...rest);

2
tsconfig.json

@ -4,7 +4,7 @@
"module": "esnext", "module": "esnext",
"moduleResolution": "node", "moduleResolution": "node",
"importHelpers": true, "importHelpers": true,
"jsx": "preserve", "jsx": "react-jsx",
"esModuleInterop": true, "esModuleInterop": true,
"sourceMap": true, "sourceMap": true,
"baseUrl": "./", "baseUrl": "./",

63
types/cache/mock/login.mock.cache.js

@ -2,7 +2,8 @@ module.exports = {
'GET /api/currentUser': { 'GET /api/currentUser': {
data: { data: {
name: 'Serati Ma', name: 'Serati Ma',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',
userid: '00000001', userid: '00000001',
email: 'antdesign@alipay.com', email: 'antdesign@alipay.com',
signature: '海纳百川,有容乃大', signature: '海纳百川,有容乃大',
@ -33,7 +34,8 @@ module.exports = {
key: 99, key: 99,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 99', name: 'TradeCode 99',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -47,7 +49,8 @@ module.exports = {
key: 98, key: 98,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 98', name: 'TradeCode 98',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -61,7 +64,8 @@ module.exports = {
key: 97, key: 97,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 97', name: 'TradeCode 97',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -75,7 +79,8 @@ module.exports = {
key: 96, key: 96,
disabled: true, disabled: true,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 96', name: 'TradeCode 96',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -89,7 +94,8 @@ module.exports = {
key: 95, key: 95,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 95', name: 'TradeCode 95',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -103,7 +109,8 @@ module.exports = {
key: 94, key: 94,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 94', name: 'TradeCode 94',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -117,7 +124,8 @@ module.exports = {
key: 93, key: 93,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 93', name: 'TradeCode 93',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -131,7 +139,8 @@ module.exports = {
key: 92, key: 92,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 92', name: 'TradeCode 92',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -145,7 +154,8 @@ module.exports = {
key: 91, key: 91,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 91', name: 'TradeCode 91',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -159,7 +169,8 @@ module.exports = {
key: 90, key: 90,
disabled: true, disabled: true,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 90', name: 'TradeCode 90',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -173,7 +184,8 @@ module.exports = {
key: 89, key: 89,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 89', name: 'TradeCode 89',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -187,7 +199,8 @@ module.exports = {
key: 88, key: 88,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 88', name: 'TradeCode 88',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -201,7 +214,8 @@ module.exports = {
key: 87, key: 87,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 87', name: 'TradeCode 87',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -215,7 +229,8 @@ module.exports = {
key: 86, key: 86,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 86', name: 'TradeCode 86',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -229,7 +244,8 @@ module.exports = {
key: 85, key: 85,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 85', name: 'TradeCode 85',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -243,7 +259,8 @@ module.exports = {
key: 84, key: 84,
disabled: true, disabled: true,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 84', name: 'TradeCode 84',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -257,7 +274,8 @@ module.exports = {
key: 83, key: 83,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 83', name: 'TradeCode 83',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -271,7 +289,8 @@ module.exports = {
key: 82, key: 82,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 82', name: 'TradeCode 82',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -285,7 +304,8 @@ module.exports = {
key: 81, key: 81,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
name: 'TradeCode 81', name: 'TradeCode 81',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',
@ -299,7 +319,8 @@ module.exports = {
key: 80, key: 80,
disabled: false, disabled: false,
href: 'https://ant.design', href: 'https://ant.design',
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', avatar:
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
name: 'TradeCode 80', name: 'TradeCode 80',
owner: '曲丽丽', owner: '曲丽丽',
desc: '这是一段描述', desc: '这是一段描述',

Loading…
Cancel
Save