Browse Source

chore: merge master

pull/11501/head
afc163 9 months ago
parent
commit
fb92e03659
  1. 1
      .commitlintrc.js
  2. 8
      .eslintignore
  3. 7
      .eslintrc.js
  4. 2
      .github/FUNDING.yml
  5. 11
      .github/dependabot.yml
  6. 16
      .github/workflows/ci.yml
  7. 41
      .github/workflows/codeql.yml
  8. 22
      .github/workflows/coverage.yml
  9. 33
      .github/workflows/pnpm.yml
  10. 7
      .github/workflows/preview-build.yml
  11. 6
      .github/workflows/preview-deploy.yml
  12. 1
      .gitignore
  13. 5
      .lintstagedrc
  14. 22
      .prettierignore
  15. 26
      .prettierrc.js
  16. 11
      README.ar-DZ.md
  17. 11
      README.es-ES.md
  18. 9
      README.fr-FR.md
  19. 9
      README.ja-JP.md
  20. 11
      README.md
  21. 9
      README.pt-BR.md
  22. 9
      README.ru-RU.md
  23. 11
      README.tr-TR.md
  24. 11
      README.zh-CN.md
  25. 43
      biome.json
  26. 38
      config/config.ts
  27. 2
      config/defaultSettings.ts
  28. 1
      config/proxy.ts
  29. 2
      jest.config.ts
  30. 11
      jsconfig.json
  31. 49
      mock/listTableList.ts
  32. 10
      mock/notices.ts
  33. 63
      mock/requestRecord.mock.js
  34. 24
      mock/user.ts
  35. 56
      package.json
  36. 23847
      pnpm-lock.yaml
  37. 2
      public/scripts/loading.js
  38. 6
      src/access.ts
  39. 27
      src/app.tsx
  40. 20
      src/components/HeaderDropdown/index.tsx
  41. 49
      src/components/RightContent/AvatarDropdown.tsx
  42. 28
      src/components/RightContent/index.tsx
  43. 2
      src/components/index.ts
  44. 52
      src/global.less
  45. 6
      src/global.tsx
  46. 9
      src/locales/bn-BD/pages.ts
  47. 3
      src/locales/bn-BD/settingDrawer.ts
  48. 3
      src/locales/bn-BD/settings.ts
  49. 3
      src/locales/en-US.ts
  50. 3
      src/locales/en-US/globalHeader.ts
  51. 18
      src/locales/en-US/pages.ts
  52. 3
      src/locales/en-US/pwa.ts
  53. 3
      src/locales/en-US/settingDrawer.ts
  54. 3
      src/locales/en-US/settings.ts
  55. 3
      src/locales/fa-IR.ts
  56. 3
      src/locales/fa-IR/globalHeader.ts
  57. 18
      src/locales/fa-IR/pages.ts
  58. 12
      src/locales/fa-IR/settings.ts
  59. 3
      src/locales/id-ID/globalHeader.ts
  60. 3
      src/locales/id-ID/menu.ts
  61. 9
      src/locales/id-ID/pages.ts
  62. 3
      src/locales/id-ID/settingDrawer.ts
  63. 12
      src/locales/id-ID/settings.ts
  64. 3
      src/locales/ja-JP.ts
  65. 24
      src/locales/ja-JP/pages.ts
  66. 6
      src/locales/ja-JP/settingDrawer.ts
  67. 12
      src/locales/ja-JP/settings.ts
  68. 3
      src/locales/pt-BR/globalHeader.ts
  69. 6
      src/locales/pt-BR/menu.ts
  70. 15
      src/locales/pt-BR/pages.ts
  71. 3
      src/locales/pt-BR/settingDrawer.ts
  72. 18
      src/locales/pt-BR/settings.ts
  73. 12
      src/locales/zh-CN/pages.ts
  74. 3
      src/locales/zh-CN/settingDrawer.ts
  75. 12
      src/locales/zh-CN/settings.ts
  76. 2
      src/locales/zh-TW.ts
  77. 12
      src/locales/zh-TW/pages.ts
  78. 3
      src/locales/zh-TW/settingDrawer.ts
  79. 12
      src/locales/zh-TW/settings.ts
  80. 12
      src/pages/Admin.tsx
  81. 12
      src/pages/Welcome.tsx
  82. 54
      src/pages/table-list/index.tsx
  83. 52
      src/pages/user/login/index.tsx
  84. 22
      src/pages/user/login/login.test.tsx
  85. 2
      src/requestErrorConfig.ts
  86. 7
      src/service-worker.js
  87. 13
      tests/setupTests.jsx
  88. 63
      types/cache/mock/login.mock.cache.js

1
.commitlintrc.js

@ -0,0 +1 @@
module.exports = { extends: ['@commitlint/config-conventional'] };

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,
},
};

2
.github/FUNDING.yml

@ -1,6 +1,6 @@
# These are supported funding model platforms # These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] github: ant-design # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username patreon: # Replace with a single Patreon username
open_collective: ant-design open_collective: ant-design
ko_fi: # Replace with a single Ko-fi username ko_fi: # Replace with a single Ko-fi username

11
.github/dependabot.yml

@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: 'npm' # See documentation for possible values
directory: '/' # Location of package manifests
schedule:
interval: 'weekly'

16
.github/workflows/ci.yml

@ -1,4 +1,4 @@
name: Node CI name: CI
on: [push, pull_request] on: [push, pull_request]
@ -10,19 +10,19 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
node_version: [16.x, 14.x] node_version: [20]
os: [ubuntu-latest, windows-latest, macOS-latest] os: [ubuntu-latest, windows-latest, macOS-latest]
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node_version }} - name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1 uses: actions/setup-node@v4
with: with:
node-version: ${{ matrix.node_version }} node-version: ${{ matrix.node_version }}
- run: echo ${{github.ref}} - run: echo ${{github.ref}}
- run: npm install --legacy-peer-deps - uses: oven-sh/setup-bun@v2
- run: yarn run lint - run: bun install
- run: yarn run tsc - run: bun run lint
- run: yarn run build - run: bun run build
env: env:
CI: true CI: true
PROGRESS: none PROGRESS: none

41
.github/workflows/codeql.yml

@ -1,41 +0,0 @@
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
schedule:
- cron: "48 12 * * 2"
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ javascript ]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
queries: +security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{ matrix.language }}"

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)

33
.github/workflows/pnpm.yml

@ -1,33 +0,0 @@
name: Node pnpm CI
on: [push, pull_request]
permissions:
contents: read
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
node_version: [16.x]
os: [ubuntu-latest, windows-latest, macOS-latest]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node_version }}
- run: echo ${{github.ref}}
- run: curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@7
- run: pnpm config set store-dir ~/.pnpm-store
- run: pnpm install --strict-peer-dependencies=false
- run: pnpm run lint
- run: pnpm run tsc
- run: pnpm run build
- run: pnpm run test
env:
CI: true
PROGRESS: none
NODE_ENV: test
NODE_OPTIONS: --max_old_space_size=4096

7
.github/workflows/preview-build.yml

@ -12,18 +12,17 @@ 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 }}
- name: build - name: build
run: | run: |
yarn yarn
yarn add umi-plugin-pro --save
yarn build yarn build
- name: upload dist artifact - name: upload dist artifact
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v4
with: with:
name: dist name: dist
path: dist/ path: dist/
@ -35,7 +34,7 @@ jobs:
- name: Upload PR number - name: Upload PR number
if: ${{ always() }} if: ${{ always() }}
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v4
with: with:
name: pr name: pr
path: ./pr-id.txt path: ./pr-id.txt

6
.github/workflows/preview-deploy.yml

@ -19,7 +19,7 @@ jobs:
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
steps: steps:
- name: download pr artifact - name: download pr artifact
uses: dawidd6/action-download-artifact@v2 uses: dawidd6/action-download-artifact@v4
with: with:
workflow: ${{ github.event.workflow_run.workflow_id }} workflow: ${{ github.event.workflow_run.workflow_id }}
name: pr name: pr
@ -29,7 +29,7 @@ jobs:
run: echo "::set-output name=id::$(<pr-id.txt)" run: echo "::set-output name=id::$(<pr-id.txt)"
- name: download dist artifact - name: download dist artifact
uses: dawidd6/action-download-artifact@v2 uses: dawidd6/action-download-artifact@v4
with: with:
workflow: ${{ github.event.workflow_run.workflow_id }} workflow: ${{ github.event.workflow_run.workflow_id }}
workflow_conclusion: success workflow_conclusion: success
@ -77,7 +77,7 @@ jobs:
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'failure' if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'failure'
steps: steps:
- name: download pr artifact - name: download pr artifact
uses: dawidd6/action-download-artifact@v2 uses: dawidd6/action-download-artifact@v4
with: with:
workflow: ${{ github.event.workflow_run.workflow_id }} workflow: ${{ github.event.workflow_run.workflow_id }}
name: pr name: pr

1
.gitignore

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

5
.lintstagedrc

@ -0,0 +1,5 @@
{
"**/*.{js,jsx,tsx,ts,md,css,less,json,yml}": [
"npx @biomejs/biome check --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

26
.prettierrc.js

@ -1,26 +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',
},
},
],
plugins: [
'prettier-plugin-organize-imports',
'prettier-plugin-packagejson',
'prettier-plugin-two-style-order',
],
};

11
README.ar-DZ.md

@ -7,11 +7,13 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
حل UI جاهز لتطبيقات المؤسسات كنموذج معياري لـ React. حل UI جاهز لتطبيقات المؤسسات كنموذج معياري لـ React.
[![Build Status](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) ![Github Action](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) ![Deploy](https://github.com/ant-design/ant-design-pro/workflows/Deploy%20CI/badge.svg) [![Dependencies](https://img.shields.io/david/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro) [![DevDependencies](https://img.shields.io/david/dev/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro?type=dev) [![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)
[![Gitter](https://img.shields.io/gitter/room/ant-design/pro-english.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyMzUiIGhlaWdodD0iNjUwIiB2aWV3Qm94PSIwIDAgNzQxMCAzOTAwIj4NCjxyZWN0IHdpZHRoPSI3NDEwIiBoZWlnaHQ9IjM5MDAiIGZpbGw9IiNiMjIyMzQiLz4NCjxwYXRoIGQ9Ik0wLDQ1MEg3NDEwbTAsNjAwSDBtMCw2MDBINzQxMG0wLDYwMEgwbTAsNjAwSDc0MTBtMCw2MDBIMCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjMwMCIvPg0KPHJlY3Qgd2lkdGg9IjI5NjQiIGhlaWdodD0iMjEwMCIgZmlsbD0iIzNjM2I2ZSIvPg0KPGcgZmlsbD0iI2ZmZiI%2BDQo8ZyBpZD0iczE4Ij4NCjxnIGlkPSJzOSI%2BDQo8ZyBpZD0iczUiPg0KPGcgaWQ9InM0Ij4NCjxwYXRoIGlkPSJzIiBkPSJNMjQ3LDkwIDMxNy41MzQyMzAsMzA3LjA4MjAzOSAxMzIuODczMjE4LDE3Mi45MTc5NjFIMzYxLjEyNjc4MkwxNzYuNDY1NzcwLDMwNy4wODIwMzl6Ii8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHk9Ijg0MCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTI2MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTY4MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjczQiIHg9IjI0NyIgeT0iMjEwIi8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzOSIgeD0iNDk0Ii8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzMTgiIHg9Ijk4OCIvPg0KPHVzZSB4bGluazpocmVmPSIjczkiIHg9IjE5NzYiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3M1IiB4PSIyNDcwIi8%2BDQo8L2c%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/pro-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Join the chat at https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMiw3KSByb3RhdGUoNjkuOTQ1Mzk2KSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsOSkgcm90YXRlKDIwLjY1OTgwOCkiLz4NCjwvc3ZnPg%3D%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![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) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
![](https://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png)
</div> </div>
@ -20,7 +22,6 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
- توثيق: http://pro.ant.design/docs/getting-started - توثيق: http://pro.ant.design/docs/getting-started
- سجل التغيير: http://pro.ant.design/docs/changelog - سجل التغيير: http://pro.ant.design/docs/changelog
- الأسئلة الشائعة: http://pro.ant.design/docs/faq - الأسئلة الشائعة: http://pro.ant.design/docs/faq
- مرآة الموقع بالصينية: http://ant-design-pro.gitee.io
## 4.0 صدر الآن! 🎉🎉🎉 ## 4.0 صدر الآن! 🎉🎉🎉

11
README.es-ES.md

@ -6,11 +6,13 @@ 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.
[![Estado de construcción](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) ![Acción de Github](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) ![Desplegar](https://github.com/ant-design/ant-design-pro/workflows/Deploy%20CI/badge.svg) [![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)
[![Gitter](https://img.shields.io/gitter/room/ant-design/pro-english.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0dHA6Ly93d3cudzMub3JnLzE5OTkveGxluayIgd2lkdGg9IjEyMzUiIGhlaWdodD0iNjUwIiB2aWV3Qm94PSIwIDAgNzQxMCAzOTAwIj4NCjxyZWN0IHdpZHRoPSI3NDEwIiBoZWlnaHQ9IjM5MDAiIGZpbGw9IiNiMjIyMzQiLz4NCjxwYXRoIGQ9Ik0wLDQ1MEg3NDEwbTAsNjAwSDBtMCw2MDBINzQxMG0wLDYwMEgwbTAsNjAwSDc0MTBtMCw2MDBIMCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjMwMCIvPg0KPHJlY3Qgd2lkdGg9IjI5NjQiIGhlaWdodD0iMjEwMCIgZmlsbD0iIzNjM2I2ZSIvPg0KPGcgZmlsbD0iI2ZmZiI%2BDQo8ZyBpZD0iczE4Ij4NCjxnIGlkPSJzOSI%2BDQo8ZyBpZD0iczUiPg0KPGcgaWQ9InM0Ij4NCjxwYXRoIGlkPSJzIiBkPSJNMjQ3LDkwIDMxNy41MzQyMzAsMzA3LjA4MjAzOSAxMzIuODczMjE4LDE3Mi45MTc5NjFIMzYxLjEyNjc4MkwxNzYuNDY1NzcwLDMwNy4wODIwMzl6Ii8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHk9Ijg0MCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTI2MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTY4MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjczQiIHg9IjI0NyIgeT0iMjEwIi8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzOSIgeD0iNDk0Ii8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzMTgiIHg9Ijk4OCIvPg0KPHVzZSB4bGluazpocmVmPSIjczkiIHg9IjE5NzYiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3M1IiB4PSIyNDcwIi8%2BDQo8L2c%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/pro-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Únete al chat en https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0dHA6Ly93d3cudzMub3JnLzE5OTkveGxluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwLDkpIHJvdGF0ZSgyMC42NTk4MDgpIi8%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Construido con 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) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
![](https://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png)
</div> </div>
@ -19,7 +21,6 @@ Una solución de IU listo para usar para aplicaciones empresariales como plantil
- Documentación: http://pro.ant.design/docs/getting-started - Documentación: http://pro.ant.design/docs/getting-started
- Registro de cambios: http://pro.ant.design/docs/changelog - Registro de cambios: http://pro.ant.design/docs/changelog
- Preguntas frecuentes: http://pro.ant.design/docs/faq - Preguntas frecuentes: http://pro.ant.design/docs/faq
- Sitio espejo en China: http://ant-design-pro.gitee.io
## ¡La versión 5.0 ya está disponible! 🎉🎉🎉 ## ¡La versión 5.0 ya está disponible! 🎉🎉🎉

9
README.fr-FR.md

@ -6,9 +6,13 @@ 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.
[![Construit avec Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) [![Status de la construction](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) [![Dépendences](https://img.shields.io/david/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro) [![Dépendences de développement](https://img.shields.io/david/dev/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro?type=dev) [![Gitter](https://img.shields.io/gitter/room/ant-design/pro-english.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyMzUiIGhlaWdodD0iNjUwIiB2aWV3Qm94PSIwIDAgNzQxMCAzOTAwIj4NCjxyZWN0IHdpZHRoPSI3NDEwIiBoZWlnaHQ9IjM5MDAiIGZpbGw9IiNiMjIyMzQiLz4NCjxwYXRoIGQ9Ik0wLDQ1MEg3NDEwbTAsNjAwSDBtMCw2MDBINzQxMG0wLDYwMEgwbTAsNjAwSDc0MTBtMCw2MDBIMCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjMwMCIvPg0KPHJlY3Qgd2lkdGg9IjI5NjQiIGhlaWdodD0iMjEwMCIgZmlsbD0iIzNjM2I2ZSIvPg0KPGcgZmlsbD0iI2ZmZiI%2BDQo8ZyBpZD0iczE4Ij4NCjxnIGlkPSJzOSI%2BDQo8ZyBpZD0iczUiPg0KPGcgaWQ9InM0Ij4NCjxwYXRoIGlkPSJzIiBkPSJNMjQ3LDkwIDMxNy41MzQyMzAsMzA3LjA4MjAzOSAxMzIuODczMjE4LDE3Mi45MTc5NjFIMzYxLjEyNjc4MkwxNzYuNDY1NzcwLDMwNy4wODIwMzl6Ii8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHk9Ijg0MCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTI2MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTY4MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjczQiIHg9IjI0NyIgeT0iMjEwIi8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzOSIgeD0iNDk0Ii8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzMTgiIHg9Ijk4OCIvPg0KPHVzZSB4bGluazpocmVmPSIjczkiIHg9IjE5NzYiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3M1IiB4PSIyNDcwIi8%2BDQo8L2c%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/pro-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Rejoignez la discussion dans https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMiw3KSByb3RhdGUoNjkuOTQ1Mzk2KSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsOSkgcm90YXRlKDIwLjY1OTgwOCkiLz4NCjwvc3ZnPg%3D%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) ![Github Action](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) [![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://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
</div> </div>
@ -17,7 +21,6 @@ Une solution UI prête à l'emploi pour des applications d'entreprise en tant qu
- Documentation: http://pro.ant.design/docs/getting-started - Documentation: http://pro.ant.design/docs/getting-started
- ChangeLog: http://pro.ant.design/docs/changelog - ChangeLog: http://pro.ant.design/docs/changelog
- FAQ: http://pro.ant.design/docs/faq - FAQ: http://pro.ant.design/docs/faq
- Site mirroir en Chine: http://ant-design-pro.gitee.io
## 2.0 Sorti maintenant! 🎉🎉🎉 ## 2.0 Sorti maintenant! 🎉🎉🎉

9
README.ja-JP.md

@ -6,9 +6,13 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
独創的な業務システムの UI を解決するための React ボイラープレート。 独創的な業務システムの UI を解決するための React ボイラープレート。
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) [![Build Status](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) [![Dependencies](https://img.shields.io/david/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro) [![DevDependencies](https://img.shields.io/david/dev/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro?type=dev) [![Gitter](https://img.shields.io/gitter/room/ant-design/pro-english.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyMzUiIGhlaWdodD0iNjUwIiB2aWV3Qm94PSIwIDAgNzQxMCAzOTAwIj4NCjxyZWN0IHdpZHRoPSI3NDEwIiBoZWlnaHQ9IjM5MDAiIGZpbGw9IiNiMjIyMzQiLz4NCjxwYXRoIGQ9Ik0wLDQ1MEg3NDEwbTAsNjAwSDBtMCw2MDBINzQxMG0wLDYwMEgwbTAsNjAwSDc0MTBtMCw2MDBIMCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjMwMCIvPg0KPHJlY3Qgd2lkdGg9IjI5NjQiIGhlaWdodD0iMjEwMCIgZmlsbD0iIzNjM2I2ZSIvPg0KPGcgZmlsbD0iI2ZmZiI%2BDQo8ZyBpZD0iczE4Ij4NCjxnIGlkPSJzOSI%2BDQo8ZyBpZD0iczUiPg0KPGcgaWQ9InM0Ij4NCjxwYXRoIGlkPSJzIiBkPSJNMjQ3LDkwIDMxNy41MzQyMzAsMzA3LjA4MjAzOSAxMzIuODczMjE4LDE3Mi45MTc5NjFIMzYxLjEyNjc4MkwxNzYuNDY1NzcwLDMwNy4wODIwMzl6Ii8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHk9Ijg0MCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTI2MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTY4MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjczQiIHg9IjI0NyIgeT0iMjEwIi8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzOSIgeD0iNDk0Ii8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzMTgiIHg9Ijk4OCIvPg0KPHVzZSB4bGluazpocmVmPSIjczkiIHg9IjE5NzYiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3M1IiB4PSIyNDcwIi8%2BDQo8L2c%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/pro-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Join the chat at https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMiw3KSByb3RhdGUoNjkuOTQ1Mzk2KSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsOSkgcm90YXRlKDIwLjY1OTgwOCkiLz4NCjwvc3ZnPg%3D%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) ![Github Action](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) [![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://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
</div> </div>
@ -17,7 +21,6 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | [🇷🇺](
- ドキュメント: http://pro.ant.design/docs/getting-started - ドキュメント: http://pro.ant.design/docs/getting-started
- 変更ログ: http://pro.ant.design/docs/changelog - 変更ログ: http://pro.ant.design/docs/changelog
- FAQ: http://pro.ant.design/docs/faq - FAQ: http://pro.ant.design/docs/faq
- 中国のミラーサイト: http://ant-design-pro.gitee.io
## 2.0 がリリースされました 🎉🎉🎉 ## 2.0 がリリースされました 🎉🎉🎉

11
README.md

@ -6,11 +6,13 @@ 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.
[![Build Status](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) ![Github Action](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) [![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) [![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://ant.design/)
[![Gitter](https://img.shields.io/gitter/room/ant-design/pro-english.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyMzUiIGhlaWdodD0iNjUwIiB2aWV3Qm94PSIwIDAgNzQxMCAzOTAwIj4NCjxyZWN0IHdpZHRoPSI3NDEwIiBoZWlnaHQ9IjM5MDAiIGZpbGw9IiNiMjIyMzQiLz4NCjxwYXRoIGQ9Ik0wLDQ1MEg3NDEwbTAsNjAwSDBtMCw2MDBINzQxMG0wLDYwMEgwbTAsNjAwSDc0MTBtMCw2MDBIMCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjMwMCIvPg0KPHJlY3Qgd2lkdGg9IjI5NjQiIGhlaWdodD0iMjEwMCIgZmlsbD0iIzNjM2I2ZSIvPg0KPGcgZmlsbD0iI2ZmZiI%2BDQo8ZyBpZD0iczE4Ij4NCjxnIGlkPSJzOSI%2BDQo8ZyBpZD0iczUiPg0KPGcgaWQ9InM0Ij4NCjxwYXRoIGlkPSJzIiBkPSJNMjQ3LDkwIDMxNy41MzQyMzAsMzA3LjA4MjAzOSAxMzIuODczMjE4LDE3Mi45MTc5NjFIMzYxLjEyNjc4MkwxNzYuNDY1NzcwLDMwNy4wODIwMzl6Ii8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHk9Ijg0MCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTI2MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTY4MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjczQiIHg9IjI0NyIgeT0iMjEwIi8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzOSIgeD0iNDk0Ii8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzMTgiIHg9Ijk4OCIvPg0KPHVzZSB4bGluazpocmVmPSIjczkiIHg9IjE5NzYiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3M1IiB4PSIyNDcwIi8%2BDQo8L2c%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/pro-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Join the chat at https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMiw3KSByb3RhdGUoNjkuOTQ1Mzk2KSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsOSkgcm90YXRlKDIwLjY1OTgwOCkiLz4NCjwvc3ZnPg%3D%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![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) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
![](https://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png)
</div> </div>
@ -19,7 +21,6 @@ An out-of-box UI solution for enterprise applications as a React boilerplate.
- Documentation: http://pro.ant.design/docs/getting-started - Documentation: http://pro.ant.design/docs/getting-started
- ChangeLog: http://pro.ant.design/docs/changelog - ChangeLog: http://pro.ant.design/docs/changelog
- FAQ: http://pro.ant.design/docs/faq - FAQ: http://pro.ant.design/docs/faq
- Mirror Site in China: http://ant-design-pro.gitee.io
## 5.0 is out! 🎉🎉🎉 ## 5.0 is out! 🎉🎉🎉

9
README.pt-BR.md

@ -6,9 +6,13 @@ 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.
[![Feito Com Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) [![Status de Build](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) [![Dependeências](https://img.shields.io/david/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro) [![Dependências de Desenvolvimento](https://img.shields.io/david/dev/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro?type=dev) [![Gitter](https://img.shields.io/gitter/room/ant-design/pro-english.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyMzUiIGhlaWdodD0iNjUwIiB2aWV3Qm94PSIwIDAgNzQxMCAzOTAwIj4NCjxyZWN0IHdpZHRoPSI3NDEwIiBoZWlnaHQ9IjM5MDAiIGZpbGw9IiNiMjIyMzQiLz4NCjxwYXRoIGQ9Ik0wLDQ1MEg3NDEwbTAsNjAwSDBtMCw2MDBINzQxMG0wLDYwMEgwbTAsNjAwSDc0MTBtMCw2MDBIMCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjMwMCIvPg0KPHJlY3Qgd2lkdGg9IjI5NjQiIGhlaWdodD0iMjEwMCIgZmlsbD0iIzNjM2I2ZSIvPg0KPGcgZmlsbD0iI2ZmZiI%2BDQo8ZyBpZD0iczE4Ij4NCjxnIGlkPSJzOSI%2BDQo8ZyBpZD0iczUiPg0KPGcgaWQ9InM0Ij4NCjxwYXRoIGlkPSJzIiBkPSJNMjQ3LDkwIDMxNy41MzQyMzAsMzA3LjA4MjAzOSAxMzIuODczMjE4LDE3Mi45MTc5NjFIMzYxLjEyNjc4MkwxNzYuNDY1NzcwLDMwNy4wODIwMzl6Ii8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHk9Ijg0MCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTI2MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTY4MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjczQiIHg9IjI0NyIgeT0iMjEwIi8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzOSIgeD0iNDk0Ii8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzMTgiIHg9Ijk4OCIvPg0KPHVzZSB4bGluazpocmVmPSIjczkiIHg9IjE5NzYiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3M1IiB4PSIyNDcwIi8%2BDQo8L2c%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/pro-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Junte-se ao chat em https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMiw3KSByb3RhdGUoNjkuOTQ1Mzk2KSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsOSkgcm90YXRlKDIwLjY1OTgwOCkiLz4NCjwvc3ZnPg%3D%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) ![Github Action](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) [![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://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
</div> </div>
@ -17,7 +21,6 @@ Uma solução de UI pronta para aplicações corporativos na forma de um boilerp
- Documentação: http://pro.ant.design/docs/getting-started - Documentação: http://pro.ant.design/docs/getting-started
- Mudanças: http://pro.ant.design/docs/changelog - Mudanças: http://pro.ant.design/docs/changelog
- FAQ: http://pro.ant.design/docs/faq - FAQ: http://pro.ant.design/docs/faq
- Site Alternativo na China: http://ant-design-pro.gitee.io
## 4.0 Lançado! 🎉🎉🎉 ## 4.0 Lançado! 🎉🎉🎉

9
README.ru-RU.md

@ -6,9 +6,13 @@ Language : [🇺🇸](./README.md) | [🇨🇳](./README.zh-CN.md) | 🇷🇺 |
UI-решение "из коробки" для корпоративных приложений как React boilerplate UI-решение "из коробки" для корпоративных приложений как React boilerplate
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) [![Build Status](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) [![Dependencies](https://img.shields.io/david/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro) [![DevDependencies](https://img.shields.io/david/dev/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro?type=dev) [![Gitter](https://img.shields.io/gitter/room/ant-design/pro-english.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyMzUiIGhlaWdodD0iNjUwIiB2aWV3Qm94PSIwIDAgNzQxMCAzOTAwIj4NCjxyZWN0IHdpZHRoPSI3NDEwIiBoZWlnaHQ9IjM5MDAiIGZpbGw9IiNiMjIyMzQiLz4NCjxwYXRoIGQ9Ik0wLDQ1MEg3NDEwbTAsNjAwSDBtMCw2MDBINzQxMG0wLDYwMEgwbTAsNjAwSDc0MTBtMCw2MDBIMCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjMwMCIvPg0KPHJlY3Qgd2lkdGg9IjI5NjQiIGhlaWdodD0iMjEwMCIgZmlsbD0iIzNjM2I2ZSIvPg0KPGcgZmlsbD0iI2ZmZiI%2BDQo8ZyBpZD0iczE4Ij4NCjxnIGlkPSJzOSI%2BDQo8ZyBpZD0iczUiPg0KPGcgaWQ9InM0Ij4NCjxwYXRoIGlkPSJzIiBkPSJNMjQ3LDkwIDMxNy41MzQyMzAsMzA3LjA4MjAzOSAxMzIuODczMjE4LDE3Mi45MTc5NjFIMzYxLjEyNjc4MkwxNzYuNDY1NzcwLDMwNy4wODIwMzl6Ii8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHk9Ijg0MCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTI2MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTY4MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjczQiIHg9IjI0NyIgeT0iMjEwIi8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzOSIgeD0iNDk0Ii8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzMTgiIHg9Ijk4OCIvPg0KPHVzZSB4bGluazpocmVmPSIjczkiIHg9IjE5NzYiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3M1IiB4PSIyNDcwIi8%2BDQo8L2c%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/pro-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Join the chat at https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMiw3KSByb3RhdGUoNjkuOTQ1Mzk2KSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsOSkgcm90YXRlKDIwLjY1OTgwOCkiLz4NCjwvc3ZnPg%3D%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) ![Github Action](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) [![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://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
</div> </div>
@ -17,7 +21,6 @@ UI-решение "из коробки" для корпоративных при
- Документация: http://pro.ant.design/docs/getting-started - Документация: http://pro.ant.design/docs/getting-started
- История изменений: http://pro.ant.design/docs/changelog - История изменений: http://pro.ant.design/docs/changelog
- FAQ: http://pro.ant.design/docs/faq - FAQ: http://pro.ant.design/docs/faq
- Китайское зеркало сайта: http://ant-design-pro.gitee.io
## Поиск переводчиков :loudspeaker: ## Поиск переводчиков :loudspeaker:

11
README.tr-TR.md

@ -6,11 +6,13 @@ 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ü.
[![Build Status](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) ![Github Action](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) ![Deploy](https://github.com/ant-design/ant-design-pro/workflows/Deploy%20CI/badge.svg) [![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)
[![Gitter](https://img.shields.io/gitter/room/ant-design/pro-english.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyMzUiIGhlaWdodD0iNjUwIiB2aWV3Qm94PSIwIDAgNzQxMCAzOTAwIj4NCjxyZWN0IHdpZHRoPSI3NDEwIiBoZWlnaHQ9IjM5MDAiIGZpbGw9IiNiMjIyMzQiLz4NCjxwYXRoIGQ9Ik0wLDQ1MEg3NDEwbTAsNjAwSDBtMCw2MDBINzQxMG0wLDYwMEgwbTAsNjAwSDc0MTBtMCw2MDBIMCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjMwMCIvPg0KPHJlY3Qgd2lkdGg9IjI5NjQiIGhlaWdodD0iMjEwMCIgZmlsbD0iIzNjM2I2ZSIvPg0KPGcgZmlsbD0iI2ZmZiI%2BDQo8ZyBpZD0iczE4Ij4NCjxnIGlkPSJzOSI%2BDQo8ZyBpZD0iczUiPg0KPGcgaWQ9InM0Ij4NCjxwYXRoIGlkPSJzIiBkPSJNMjQ3LDkwIDMxNy41MzQyMzAsMzA3LjA4MjAzOSAxMzIuODczMjE4LDE3Mi45MTc5NjFIMzYxLjEyNjc4MkwxNzYuNDY1NzcwLDMwNy4wODIwMzl6Ii8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB5PSI0MjAiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHk9Ijg0MCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTI2MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjcyIgeT0iMTY4MCIvPg0KPC9nPg0KPHVzZSB4bGluazpocmVmPSIjczQiIHg9IjI0NyIgeT0iMjEwIi8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzOSIgeD0iNDk0Ii8%2BDQo8L2c%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzMTgiIHg9Ijk4OCIvPg0KPHVzZSB4bGluazpocmVmPSIjczkiIHg9IjE5NzYiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3M1IiB4PSIyNDcwIi8%2BDQo8L2c%2BDQo8L3N2Zz4%3D)](https://gitter.im/ant-design/pro-english?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Join the chat at https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMiw3KSByb3RhdGUoNjkuOTQ1Mzk2KSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsOSkgcm90YXRlKDIwLjY1OTgwOCkiLz4NCjwvc3ZnPg%3D%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![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) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
![](https://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png)
</div> </div>
@ -19,7 +21,6 @@ React ile kurumsal uygulamalar için taslak olarak geliştirilmiş kullanıma ha
- Dokümantasyon: http://pro.ant.design/docs/getting-started - Dokümantasyon: http://pro.ant.design/docs/getting-started
- ChangeLog: http://pro.ant.design/docs/changelog - ChangeLog: http://pro.ant.design/docs/changelog
- SSS: http://pro.ant.design/docs/faq - SSS: http://pro.ant.design/docs/faq
- Çinde barındırılan site: http://ant-design-pro.gitee.io
## 5.0 Versiyonu Şimdi Yayında! 🎉🎉🎉 ## 5.0 Versiyonu Şimdi Yayında! 🎉🎉🎉

11
README.zh-CN.md

@ -6,9 +6,13 @@ Language : [🇺🇸](./README.md) | 🇨🇳 | [🇷🇺](./README.ru-RU.md) |
开箱即用的中台前端/设计解决方案。 开箱即用的中台前端/设计解决方案。
[![Build With Umi](https://img.shields.io/badge/build%20with-umi-028fe4.svg?style=flat-square)](http://umijs.org/) [![Build Status](https://dev.azure.com/ant-design/ant-design-pro/_apis/build/status/ant-design.ant-design-pro?branchName=master)](https://dev.azure.com/ant-design/ant-design-pro/_build/latest?definitionId=1?branchName=master) [![Dependencies](https://img.shields.io/david/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro) [![DevDependencies](https://img.shields.io/david/dev/ant-design/ant-design-pro.svg)](https://david-dm.org/ant-design/ant-design-pro?type=dev) [![Join the chat at https://gitter.im/ant-design/ant-design-pro](https://img.shields.io/gitter/room/ant-design/ant-design-pro.svg?style=flat-square&logoWidth=20&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjkwMCIgaGVpZ2h0PSI2MDAiIHZpZXdCb3g9IjAgMCAzMCAyMCI%2BDQo8ZGVmcz4NCjxwYXRoIGlkPSJzIiBkPSJNMCwtMSAwLjU4Nzc4NSwwLjgwOTAxNyAtMC45NTEwNTcsLTAuMzA5MDE3SDAuOTUxMDU3TC0wLjU4Nzc4NSwwLjgwOTAxN3oiIGZpbGw9IiNmZmRlMDAiLz4NCjwvZGVmcz4NCjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIyMCIgZmlsbD0iI2RlMjkxMCIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSw1KSBzY2FsZSgzKSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsMikgcm90YXRlKDIzLjAzNjI0MykiLz4NCjx1c2UgeGxpbms6aHJlZj0iI3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyLDQpIHJvdGF0ZSg0NS44Njk4OTgpIi8%2BDQo8dXNlIHhsaW5rOmhyZWY9IiNzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMiw3KSByb3RhdGUoNjkuOTQ1Mzk2KSIvPg0KPHVzZSB4bGluazpocmVmPSIjcyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsOSkgcm90YXRlKDIwLjY1OTgwOCkiLz4NCjwvc3ZnPg%3D%3D)](https://gitter.im/ant-design/ant-design-pro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ![](https://badgen.net/badge/icon/Ant%20Design?icon=https://gw.alipayobjects.com/zos/antfincdn/Pp4WPgVDB3/KDpgvguMpGfqaHPjicRK.svg&label) ![Github Action](https://github.com/ant-design/ant-design-pro/workflows/Node%20CI/badge.svg) [![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://user-images.githubusercontent.com/8186664/44953195-581e3d80-aec4-11e8-8dcb-54b9db38ec11.png) ![](https://github.com/user-attachments/assets/fde29061-3d9a-4397-8ac2-397b0e033ef5)
</div> </div>
@ -17,11 +21,10 @@ Language : [🇺🇸](./README.md) | 🇨🇳 | [🇷🇺](./README.ru-RU.md) |
- 使用文档:http://pro.ant.design/docs/getting-started-cn - 使用文档:http://pro.ant.design/docs/getting-started-cn
- 更新日志: http://pro.ant.design/docs/changelog-cn - 更新日志: http://pro.ant.design/docs/changelog-cn
- 常见问题:http://pro.ant.design/docs/faq-cn - 常见问题:http://pro.ant.design/docs/faq-cn
- 国内镜像:http://ant-design-pro.gitee.io
## 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"
}
}
}

38
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';
@ -8,6 +9,13 @@ import routes from './routes';
const { REACT_APP_ENV = 'dev' } = process.env; const { REACT_APP_ENV = 'dev' } = process.env;
/**
* @name 使
* @description
* @doc https://umijs.org/docs/api/config#publicpath
*/
const PUBLIC_PATH: string = '/';
export default defineConfig({ export default defineConfig({
/** /**
* @name hash * @name hash
@ -16,6 +24,8 @@ export default defineConfig({
*/ */
hash: true, hash: true,
publicPath: PUBLIC_PATH,
/** /**
* @name * @name
* @description ie11 使 * @description ie11 使
@ -107,7 +117,17 @@ export default defineConfig({
* @description babel import * @description babel import
* @doc https://umijs.org/docs/max/antd#antd * @doc https://umijs.org/docs/max/antd#antd
*/ */
antd: {}, antd: {
appConfig: {},
configProvider: {
theme: {
cssVar: true,
token: {
fontFamily: 'AlibabaSans, sans-serif',
},
},
},
},
/** /**
* @name * @name
* @description axios ahooks useRequest * @description axios ahooks useRequest
@ -126,7 +146,7 @@ export default defineConfig({
*/ */
headScripts: [ headScripts: [
// 解决首次加载时白屏的问题 // 解决首次加载时白屏的问题
{ src: '/scripts/loading.js', async: true }, { src: join(PUBLIC_PATH, 'scripts/loading.js'), async: true },
], ],
//================ pro 插件配置 ================= //================ pro 插件配置 =================
presets: ['umi-presets-pro'], presets: ['umi-presets-pro'],
@ -145,16 +165,20 @@ 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',
}, },
], ],
mock: { mock: {
include: ['mock/**/*', 'src/pages/**/_mock.ts'], include: ['mock/**/*', 'src/pages/**/_mock.ts'],
}, },
mfsu: { /**
strategy: 'normal', * @name mako
}, * @description 使 mako
* @doc https://umijs.org/docs/api/config#mako
*/
mako: {},
esbuildMinifyIIFE: true, esbuildMinifyIIFE: true,
requestRecord: {}, requestRecord: {},
}); });

2
config/defaultSettings.ts

@ -1,4 +1,4 @@
import { ProLayoutProps } from '@ant-design/pro-components'; import type { ProLayoutProps } from '@ant-design/pro-components';
/** /**
* @name * @name

1
config/proxy.ts

@ -21,7 +21,6 @@ export default {
// changeOrigin: true, // changeOrigin: true,
// }, // },
// }, // },
/** /**
* @name * @name
* @doc https://github.com/chimurai/http-proxy-middleware * @doc https://github.com/chimurai/http-proxy-middleware

2
jest.config.ts

@ -6,8 +6,6 @@ export default async () => {
target: 'browser', target: 'browser',
}), }),
}); });
console.log(JSON.stringify(config));
return { return {
...config, ...config,
testEnvironmentOptions: { testEnvironmentOptions: {

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,

56
package.json

@ -3,6 +3,7 @@
"version": "6.0.0", "version": "6.0.0",
"private": true, "private": true,
"description": "An out-of-box UI solution for enterprise applications", "description": "An out-of-box UI solution for enterprise applications",
"repository": "git@github.com:ant-design/ant-design-pro.git",
"scripts": { "scripts": {
"analyze": "cross-env ANALYZE=1 max build", "analyze": "cross-env ANALYZE=1 max build",
"build": "max build", "build": "max build",
@ -12,13 +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", "lint": "npm run biome:lint && npm run tsc",
"lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src ", "lint-staged": "lint-staged",
"lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src", "biome:lint": "npx @biomejs/biome lint",
"lint:prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto",
"openapi": "max openapi", "openapi": "max openapi",
"prepare": "husky install", "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",
@ -33,11 +32,10 @@
"tsc": "tsc --noEmit" "tsc": "tsc --noEmit"
}, },
"browserslist": [ "browserslist": [
"> 1%", "defaults"
"last 2 versions",
"not ie <= 10"
], ],
"dependencies": { "dependencies": {
<<<<<<< HEAD
"@ant-design/icons": "^4.8.1", "@ant-design/icons": "^4.8.1",
"@ant-design/plots": "^2.1.1", "@ant-design/plots": "^2.1.1",
"@ant-design/pro-components": "^2.6.44", "@ant-design/pro-components": "^2.6.44",
@ -90,9 +88,47 @@
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^4.9.5", "typescript": "^4.9.5",
"umi-presets-pro": "^2.0.3" "umi-presets-pro": "^2.0.3"
=======
"@ant-design/icons": "^5.6.1",
"@ant-design/pro-components": "^2.7.19",
"antd": "^5.25.4",
"@ant-design/v5-patch-for-react-19": "^1.0.3",
"antd-style": "^3.7.0",
"classnames": "^2.5.1",
"dayjs": "^1.11.13",
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@ant-design/pro-cli": "^3.3.0",
"@commitlint/cli": "^19.5.0",
"@commitlint/config-conventional": "^19.5.0",
"@testing-library/dom": "^10.4.0",
"@testing-library/react": "^16.0.1",
"@types/express": "^5.0.3",
"@types/jest": "^29.5.13",
"@types/lodash": "^4.17.10",
"@types/react": "^19.1.5",
"@types/react-dom": "^19.1.5",
"@types/react-helmet": "^6.1.11",
"@umijs/max": "^4.3.24",
"cross-env": "^7.0.3",
"express": "^4.21.1",
"gh-pages": "^6.1.1",
"husky": "^9.1.6",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"lint-staged": "^16.1.2",
"mockjs": "^1.1.0",
"ts-node": "^10.9.2",
"typescript": "^5.6.3",
"umi-presets-pro": "^2.0.3",
"umi-serve": "^1.9.11",
"@biomejs/biome": "^2.0.6"
>>>>>>> master
}, },
"engines": { "engines": {
"node": ">=12.0.0" "node": ">=20.0.0"
}, },
"create-umi": { "create-umi": {
"ignoreScript": [ "ignoreScript": [

23847
pnpm-lock.yaml

File diff suppressed because it is too large

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 = `

6
src/access.ts

@ -1,7 +1,9 @@
/** /**
* @see https://umijs.org/zh-CN/plugins/plugin-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',

27
src/app.tsx

@ -1,17 +1,26 @@
import { AvatarDropdown, AvatarName, Footer, Question, SelectLang } from '@/components';
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 { SettingDrawer } from '@ant-design/pro-components'; import { SettingDrawer } from '@ant-design/pro-components';
import type { RequestConfig, RunTimeLayoutConfig } from '@umijs/max'; import type { RequestConfig, RunTimeLayoutConfig } from '@umijs/max';
import { history, Link } from '@umijs/max'; import { history, Link } from '@umijs/max';
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 { currentUser as queryCurrentUser } from './services/ant-design-pro/api'; import '@ant-design/v5-patch-for-react-19';
const isDev = process.env.NODE_ENV === 'development'; const isDev = process.env.NODE_ENV === 'development';
const loginPath = '/user/login'; const loginPath = '/user/login';
/** /**
* @see https://umijs.org/zh-CN/plugins/plugin-initial-state * @see https://umijs.org/docs/api/runtime-config#getinitialstate
* */ * */
export async function getInitialState(): Promise<{ export async function getInitialState(): Promise<{
settings?: Partial<LayoutSettings>; settings?: Partial<LayoutSettings>;
@ -25,7 +34,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;
@ -47,9 +56,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 />,

20
src/components/HeaderDropdown/index.tsx

@ -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;

49
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 type { MenuProps } from 'antd';
import { Spin } from 'antd'; import { Spin } from 'antd';
import { createStyles } from 'antd-style'; import { createStyles } from 'antd-style';
import { stringify } from 'querystring'; import React from 'react';
import React, { useCallback } 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
*/ */
@ -45,15 +52,16 @@ export const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu, childre
await outLogin(); await outLogin();
const { search, pathname } = window.location; const { search, pathname } = window.location;
const urlParams = new URL(window.location.href).searchParams; const urlParams = new URL(window.location.href).searchParams;
const searchParams = new URLSearchParams({
redirect: pathname + search,
});
/** 此方法会跳转到 redirect 参数所在的位置 */ /** 此方法会跳转到 redirect 参数所在的位置 */
const redirect = urlParams.get('redirect'); const redirect = urlParams.get('redirect');
// Note: There may be security issues, please note // Note: There may be security issues, please note
if (window.location.pathname !== '/user/login' && !redirect) { if (window.location.pathname !== '/user/login' && !redirect) {
history.replace({ history.replace({
pathname: '/user/login', pathname: '/user/login',
search: stringify({ search: searchParams.toString(),
redirect: pathname + search,
}),
}); });
} }
}; };
@ -61,20 +69,17 @@ export const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu, childre
const { initialState, setInitialState } = useModel('@@initialState'); const { initialState, setInitialState } = useModel('@@initialState');
const onMenuClick = useCallback( const onMenuClick: MenuProps['onClick'] = (event) => {
(event: any) => { const { key } = event;
const { key } = event; if (key === 'logout') {
if (key === 'logout') { flushSync(() => {
flushSync(() => { setInitialState((s) => ({ ...s, currentUser: undefined }));
setInitialState((s) => ({ ...s, currentUser: undefined })); });
}); loginOut();
loginOut(); return;
return; }
} history.push(`/account/${key}`);
history.push(`/account/${key}`); };
},
[setInitialState],
);
const loading = ( const loading = (
<span className={styles.action}> <span className={styles.action}>

28
src/components/RightContent/index.tsx

@ -3,22 +3,30 @@ import { SelectLang as UmiSelectLang } from '@umijs/max';
export type SiderTheme = 'light' | 'dark'; export type SiderTheme = 'light' | 'dark';
export const SelectLang = () => { export const SelectLang: React.FC = () => {
return <UmiSelectLang />; return (
<UmiSelectLang
style={{
padding: 4,
}}
/>
);
}; };
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>
); );
}; };

2
src/components/index.ts

@ -9,4 +9,4 @@ import Footer from './Footer';
import { Question, SelectLang } from './RightContent'; import { Question, SelectLang } from './RightContent';
import { AvatarDropdown, AvatarName } from './RightContent/AvatarDropdown'; import { AvatarDropdown, AvatarName } from './RightContent/AvatarDropdown';
export { Footer, Question, SelectLang, AvatarDropdown, AvatarName }; export { AvatarDropdown, AvatarName, Footer, Question, SelectLang };

52
src/global.less

@ -1,3 +1,55 @@
@font-face {
font-family: "AlibabaSans";
font-style: normal;
font-weight: 300;
font-display: swap;
src: url("//mdn.alipayobjects.com/huamei_iwk9zp/afts/file/A*1GSgSYDD_aIAAAAAQsAAAAgAegCCAQ/AlibabaSans-Light.woff2")
format("woff2");
}
@font-face {
font-family: "AlibabaSans";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("//mdn.alipayobjects.com/huamei_iwk9zp/afts/file/A*2zEUQqnPNesAAAAAQtAAAAgAegCCAQ/AlibabaSans-Regular.woff2")
format("woff2");
}
@font-face {
font-family: "AlibabaSans";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("//mdn.alipayobjects.com/huamei_iwk9zp/afts/file/A*E_cxRbMlZqUAAAAAQuAAAAgAegCCAQ/AlibabaSans-Medium.woff2")
format("woff2");
}
@font-face {
font-family: "AlibabaSans";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("//mdn.alipayobjects.com/huamei_iwk9zp/afts/file/A*E_cxRbMlZqUAAAAAQuAAAAgAegCCAQ/AlibabaSans-Bold.woff2")
format("woff2");
}
@font-face {
font-family: "AlibabaSans";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("//mdn.alipayobjects.com/huamei_iwk9zp/afts/file/A*E_cxRbMlZqUAAAAAQuAAAAgAegCCAQ/AlibabaSans-Heavy.woff2")
format("woff2");
}
html,
body,
#root {
height: 100%;
margin: 0;
padding: 0;
font-family:
AlibabaSans, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans',
sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
}
.colorWeak { .colorWeak {
filter: invert(80%); filter: invert(80%);
} }

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': '开',

2
src/locales/zh-TW.ts

@ -1,6 +1,7 @@
import component from './zh-TW/component'; import component from './zh-TW/component';
import globalHeader from './zh-TW/globalHeader'; import globalHeader from './zh-TW/globalHeader';
import menu from './zh-TW/menu'; import menu from './zh-TW/menu';
import pages from './zh-TW/pages';
import pwa from './zh-TW/pwa'; import pwa from './zh-TW/pwa';
import settingDrawer from './zh-TW/settingDrawer'; import settingDrawer from './zh-TW/settingDrawer';
import settings from './zh-TW/settings'; import settings from './zh-TW/settings';
@ -11,6 +12,7 @@ export default {
'layout.user.link.privacy': '隱私', 'layout.user.link.privacy': '隱私',
'layout.user.link.terms': '條款', 'layout.user.link.terms': '條款',
'app.preview.down.block': '下載此頁面到本地項目', 'app.preview.down.block': '下載此頁面到本地項目',
...pages,
...globalHeader, ...globalHeader,
...menu, ...menu,
...settingDrawer, ...settingDrawer,

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>

12
src/pages/Welcome.tsx

@ -92,11 +92,13 @@ const Welcome: React.FC = () => {
style={{ style={{
borderRadius: 8, borderRadius: 8,
}} }}
bodyStyle={{ styles={{
backgroundImage: body: {
initialState?.settings?.navTheme === 'realDark' backgroundImage:
? 'background-image: linear-gradient(75deg, #1A1B1F 0%, #191C1F 100%)' initialState?.settings?.navTheme === 'realDark'
: 'background-image: linear-gradient(75deg, #FBFDFF 0%, #F5F7FF 100%)', ? 'background-image: linear-gradient(75deg, #1A1B1F 0%, #191C1F 100%)'
: 'background-image: linear-gradient(75deg, #FBFDFF 0%, #F5F7FF 100%)',
},
}} }}
> >
<div <div

54
src/pages/table-list/index.tsx

@ -13,7 +13,7 @@ import CreateForm from './components/CreateForm';
import UpdateForm from './components/UpdateForm'; import UpdateForm from './components/UpdateForm';
const TableList: React.FC = () => { const TableList: React.FC = () => {
const actionRef = useRef<ActionType>(); const actionRef = useRef<ActionType | null>(null);
const [showDetail, setShowDetail] = useState<boolean>(false); const [showDetail, setShowDetail] = useState<boolean>(false);
const [currentRow, setCurrentRow] = useState<API.RuleListItem>(); const [currentRow, setCurrentRow] = useState<API.RuleListItem>();
@ -49,7 +49,6 @@ const TableList: React.FC = () => {
/> />
), ),
dataIndex: 'name', dataIndex: 'name',
tip: 'The rule name is the unique key',
render: (dom, entity) => { render: (dom, entity) => {
return ( return (
<a <a
@ -64,7 +63,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',
}, },
@ -85,7 +89,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: {
@ -100,13 +109,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',
}, },
@ -151,7 +166,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) => [
@ -224,17 +244,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>
} }

52
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,20 @@ import {
ProFormCheckbox, ProFormCheckbox,
ProFormText, ProFormText,
} from '@ant-design/pro-components'; } from '@ant-design/pro-components';
import { FormattedMessage, Helmet, SelectLang, useIntl, useModel } from '@umijs/max'; import {
import { Alert, message, Tabs } from 'antd'; FormattedMessage,
Helmet,
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 +69,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}
/>
</> </>
); );
}; };
@ -100,6 +115,7 @@ const Login: React.FC = () => {
const [type, setType] = useState<string>('account'); const [type, setType] = useState<string>('account');
const { initialState, setInitialState } = useModel('@@initialState'); const { initialState, setInitialState } = useModel('@@initialState');
const { styles } = useStyles(); const { styles } = useStyles();
const { message } = App.useApp();
const intl = useIntl(); const intl = useIntl();
const fetchUserInfo = async () => { const fetchUserInfo = async () => {
@ -151,7 +167,7 @@ const Login: React.FC = () => {
id: 'menu.login', id: 'menu.login',
defaultMessage: '登录页', defaultMessage: '登录页',
})} })}
- {Settings.title} {Settings.title && ` - ${Settings.title}`}
</title> </title>
</Helmet> </Helmet>
<Lang /> <Lang />
@ -168,7 +184,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,
}} }}
@ -263,7 +281,9 @@ const Login: React.FC = () => {
</> </>
)} )}
{status === 'error' && loginType === 'mobile' && <LoginMessage content="验证码错误" />} {status === 'error' && loginType === 'mobile' && (
<LoginMessage content="验证码错误" />
)}
{type === 'mobile' && ( {type === 'mobile' && (
<> <>
<ProFormText <ProFormText
@ -351,14 +371,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>

22
src/pages/user/login/login.test.tsx

@ -1,9 +1,8 @@
import { TestBrowser } from '@@/testBrowser'; // @ts-ignore
import { act, fireEvent, render } from '@testing-library/react';
import React from 'react';
// @ts-ignore
import { startMock } from '@@/requestRecordMock'; import { startMock } from '@@/requestRecordMock';
import { TestBrowser } from '@@/testBrowser';
import { fireEvent, render } from '@testing-library/react';
import React, { act } from 'react';
const waitTime = (time: number = 100) => { const waitTime = (time: number = 100) => {
return new Promise((resolve) => { return new Promise((resolve) => {
@ -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' } });

2
src/requestErrorConfig.ts

@ -89,7 +89,7 @@ export const errorConfig: RequestConfig = {
requestInterceptors: [ requestInterceptors: [
(config: RequestOptions) => { (config: RequestOptions) => {
// 拦截请求配置,进行个性化处理。 // 拦截请求配置,进行个性化处理。
const url = config?.url?.concat('?token = 123'); const url = config?.url?.concat('?token=123');
return { ...config, url }; return { ...config, url };
}, },
], ],

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

13
tests/setupTests.jsx

@ -1,4 +1,8 @@
const localStorageMock = { import { defaultConfig } from 'antd/lib/theme/internal';
defaultConfig.hashed = false;
const localStorageMock = {
getItem: jest.fn(), getItem: jest.fn(),
setItem: jest.fn(), setItem: jest.fn(),
removeItem: jest.fn(), removeItem: jest.fn(),
@ -24,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) {
@ -56,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);

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