suomingxiang пре 6 месеци
родитељ
комит
22533696ad
100 измењених фајлова са 26548 додато и 2 уклоњено
  1. 16
    0
      .editorconfig
  2. 8
    0
      .eslintignore
  3. 7
    0
      .eslintrc.js
  4. 41
    0
      .gitignore
  5. 7
    0
      .husky/commit-msg
  6. 4
    0
      .husky/pre-commit
  7. 22
    0
      .prettierignore
  8. 21
    0
      .prettierrc.js
  9. 56
    2
      README.md
  10. 157
    0
      config/config.ts
  11. 28
    0
      config/defaultSettings.ts
  12. 593
    0
      config/oneapi.json
  13. 44
    0
      config/proxy.ts
  14. 36
    0
      config/routes.ts
  15. 23
    0
      jest.config.ts
  16. 11
    0
      jsconfig.json
  17. 121
    0
      mock/chartApi.ts
  18. 176
    0
      mock/listTableList.ts
  19. 115
    0
      mock/notices.ts
  20. 324
    0
      mock/requestRecord.mock.js
  21. 5
    0
      mock/route.ts
  22. 203
    0
      mock/user.ts
  23. 101
    0
      package.json
  24. 21929
    0
      pnpm-lock.yaml
  25. BIN
      public/favicon.ico
  26. BIN
      public/images/bj.jpg
  27. BIN
      public/images/frame.png
  28. BIN
      public/images/logo.png
  29. BIN
      public/images/magnifier.png
  30. BIN
      public/images/occupation.jpg
  31. BIN
      public/images/popbj.png
  32. BIN
      public/images/title.png
  33. BIN
      public/images/videoMask.png
  34. 202
    0
      public/scripts/loading.js
  35. BIN
      public/video/animation.mp4
  36. BIN
      public/video/maps.mp4
  37. BIN
      public/video/mapxl.mp4
  38. 9
    0
      src/access.ts
  39. 138
    0
      src/app.tsx
  40. 35
    0
      src/components/Footer/index.tsx
  41. 27
    0
      src/components/HeaderDropdown/index.tsx
  42. 138
    0
      src/components/RightContent/AvatarDropdown.tsx
  43. 31
    0
      src/components/RightContent/index.tsx
  44. 12
    0
      src/components/index.ts
  45. 54
    0
      src/global.less
  46. 91
    0
      src/global.tsx
  47. 25
    0
      src/locales/bn-BD.ts
  48. 5
    0
      src/locales/bn-BD/component.ts
  49. 17
    0
      src/locales/bn-BD/globalHeader.ts
  50. 52
    0
      src/locales/bn-BD/menu.ts
  51. 70
    0
      src/locales/bn-BD/pages.ts
  52. 7
    0
      src/locales/bn-BD/pwa.ts
  53. 31
    0
      src/locales/bn-BD/settingDrawer.ts
  54. 59
    0
      src/locales/bn-BD/settings.ts
  55. 24
    0
      src/locales/en-US.ts
  56. 5
    0
      src/locales/en-US/component.ts
  57. 17
    0
      src/locales/en-US/globalHeader.ts
  58. 52
    0
      src/locales/en-US/menu.ts
  59. 70
    0
      src/locales/en-US/pages.ts
  60. 6
    0
      src/locales/en-US/pwa.ts
  61. 31
    0
      src/locales/en-US/settingDrawer.ts
  62. 60
    0
      src/locales/en-US/settings.ts
  63. 24
    0
      src/locales/fa-IR.ts
  64. 5
    0
      src/locales/fa-IR/component.ts
  65. 17
    0
      src/locales/fa-IR/globalHeader.ts
  66. 52
    0
      src/locales/fa-IR/menu.ts
  67. 69
    0
      src/locales/fa-IR/pages.ts
  68. 7
    0
      src/locales/fa-IR/pwa.ts
  69. 32
    0
      src/locales/fa-IR/settingDrawer.ts
  70. 60
    0
      src/locales/fa-IR/settings.ts
  71. 25
    0
      src/locales/id-ID.ts
  72. 5
    0
      src/locales/id-ID/component.ts
  73. 17
    0
      src/locales/id-ID/globalHeader.ts
  74. 52
    0
      src/locales/id-ID/menu.ts
  75. 72
    0
      src/locales/id-ID/pages.ts
  76. 7
    0
      src/locales/id-ID/pwa.ts
  77. 32
    0
      src/locales/id-ID/settingDrawer.ts
  78. 60
    0
      src/locales/id-ID/settings.ts
  79. 24
    0
      src/locales/ja-JP.ts
  80. 5
    0
      src/locales/ja-JP/component.ts
  81. 17
    0
      src/locales/ja-JP/globalHeader.ts
  82. 52
    0
      src/locales/ja-JP/menu.ts
  83. 69
    0
      src/locales/ja-JP/pages.ts
  84. 7
    0
      src/locales/ja-JP/pwa.ts
  85. 31
    0
      src/locales/ja-JP/settingDrawer.ts
  86. 59
    0
      src/locales/ja-JP/settings.ts
  87. 22
    0
      src/locales/pt-BR.ts
  88. 5
    0
      src/locales/pt-BR/component.ts
  89. 17
    0
      src/locales/pt-BR/globalHeader.ts
  90. 52
    0
      src/locales/pt-BR/menu.ts
  91. 72
    0
      src/locales/pt-BR/pages.ts
  92. 7
    0
      src/locales/pt-BR/pwa.ts
  93. 32
    0
      src/locales/pt-BR/settingDrawer.ts
  94. 60
    0
      src/locales/pt-BR/settings.ts
  95. 24
    0
      src/locales/zh-CN.ts
  96. 5
    0
      src/locales/zh-CN/component.ts
  97. 17
    0
      src/locales/zh-CN/globalHeader.ts
  98. 52
    0
      src/locales/zh-CN/menu.ts
  99. 67
    0
      src/locales/zh-CN/pages.ts
  100. 0
    0
      src/locales/zh-CN/pwa.ts

+ 16
- 0
.editorconfig Прегледај датотеку

@@ -0,0 +1,16 @@
1
+# http://editorconfig.org
2
+root = true
3
+
4
+[*]
5
+indent_style = space
6
+indent_size = 2
7
+end_of_line = lf
8
+charset = utf-8
9
+trim_trailing_whitespace = true
10
+insert_final_newline = true
11
+
12
+[*.md]
13
+trim_trailing_whitespace = false
14
+
15
+[Makefile]
16
+indent_style = tab

+ 8
- 0
.eslintignore Прегледај датотеку

@@ -0,0 +1,8 @@
1
+/lambda/
2
+/scripts
3
+/config
4
+.history
5
+public
6
+dist
7
+.umi
8
+mock

+ 7
- 0
.eslintrc.js Прегледај датотеку

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

+ 41
- 0
.gitignore Прегледај датотеку

@@ -0,0 +1,41 @@
1
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+# dependencies
4
+**/node_modules
5
+# roadhog-api-doc ignore
6
+/src/utils/request-temp.js
7
+_roadhog-api-doc
8
+
9
+# production
10
+/dist
11
+
12
+# misc
13
+.DS_Store
14
+npm-debug.log*
15
+yarn-error.log
16
+
17
+/coverage
18
+.idea
19
+yarn.lock
20
+package-lock.json
21
+*bak
22
+.vscode
23
+
24
+
25
+# visual studio code
26
+.history
27
+*.log
28
+functions/*
29
+.temp/**
30
+
31
+# umi
32
+.umi
33
+.umi-production
34
+.umi-test
35
+
36
+# screenshot
37
+screenshot
38
+.firebase
39
+.eslintcache
40
+
41
+build

+ 7
- 0
.husky/commit-msg Прегледај датотеку

@@ -0,0 +1,7 @@
1
+#!/bin/sh
2
+. "$(dirname "$0")/_/husky.sh"
3
+
4
+# Export Git hook params
5
+export GIT_PARAMS=$*
6
+
7
+npx --no-install fabric verify-commit

+ 4
- 0
.husky/pre-commit Прегледај датотеку

@@ -0,0 +1,4 @@
1
+#!/bin/sh
2
+. "$(dirname "$0")/_/husky.sh"
3
+
4
+npx --no-install lint-staged

+ 22
- 0
.prettierignore Прегледај датотеку

@@ -0,0 +1,22 @@
1
+**/*.svg
2
+.umi
3
+.umi-production
4
+/dist
5
+.dockerignore
6
+.DS_Store
7
+.eslintignore
8
+*.png
9
+*.toml
10
+docker
11
+.editorconfig
12
+Dockerfile*
13
+.gitignore
14
+.prettierignore
15
+LICENSE
16
+.eslintcache
17
+*.lock
18
+yarn-error.log
19
+.history
20
+CNAME
21
+/build
22
+/public

+ 21
- 0
.prettierrc.js Прегледај датотеку

@@ -0,0 +1,21 @@
1
+module.exports = {
2
+  singleQuote: true,
3
+  trailingComma: 'all',
4
+  printWidth: 100,
5
+  proseWrap: 'never',
6
+  endOfLine: 'lf',
7
+  overrides: [
8
+    {
9
+      files: '.prettierrc',
10
+      options: {
11
+        parser: 'json',
12
+      },
13
+    },
14
+    {
15
+      files: 'document.ejs',
16
+      options: {
17
+        parser: 'html',
18
+      },
19
+    },
20
+  ],
21
+};

+ 56
- 2
README.md Прегледај датотеку

@@ -1,3 +1,57 @@
1
-# dp
1
+# Ant Design Pro
2 2
 
3
-云上文旅可视化
3
+This project is initialized with [Ant Design Pro](https://pro.ant.design). Follow is the quick guide for how to use.
4
+
5
+## Environment Prepare
6
+
7
+Install `node_modules`:
8
+
9
+```bash
10
+npm install
11
+```
12
+
13
+or
14
+
15
+```bash
16
+yarn
17
+```
18
+
19
+## Provided Scripts
20
+
21
+Ant Design Pro provides some useful script to help you quick start and build with web project, code style check and test.
22
+
23
+Scripts provided in `package.json`. It's safe to modify or add additional script:
24
+
25
+### Start project
26
+
27
+```bash
28
+npm start
29
+```
30
+
31
+### Build project
32
+
33
+```bash
34
+npm run build
35
+```
36
+
37
+### Check code style
38
+
39
+```bash
40
+npm run lint
41
+```
42
+
43
+You can also use script to auto fix some lint error:
44
+
45
+```bash
46
+npm run lint:fix
47
+```
48
+
49
+### Test code
50
+
51
+```bash
52
+npm test
53
+```
54
+
55
+## More
56
+
57
+You can view full document on our [official website](https://pro.ant.design). And welcome any feedback in our [github](https://github.com/ant-design/ant-design-pro).

+ 157
- 0
config/config.ts Прегледај датотеку

@@ -0,0 +1,157 @@
1
+// https://umijs.org/config/
2
+import { defineConfig } from '@umijs/max';
3
+import { join } from 'path';
4
+import defaultSettings from './defaultSettings';
5
+import proxy from './proxy';
6
+import routes from './routes';
7
+
8
+const { REACT_APP_ENV = 'dev' } = process.env;
9
+console.log(process.env)
10
+export default defineConfig({
11
+  publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
12
+  /**
13
+   * @name 开启 hash 模式
14
+   * @description 让 build 之后的产物包含 hash 后缀。通常用于增量发布和避免浏览器加载缓存。
15
+   * @doc https://umijs.org/docs/api/config#hash
16
+   */
17
+  hash: true,
18
+
19
+  /**
20
+   * @name 兼容性设置
21
+   * @description 设置 ie11 不一定完美兼容,需要检查自己使用的所有依赖
22
+   * @doc https://umijs.org/docs/api/config#targets
23
+   */
24
+  // targets: {
25
+  //   ie: 11,
26
+  // },
27
+  /**
28
+   * @name 路由的配置,不在路由中引入的文件不会编译
29
+   * @description 只支持 path,component,routes,redirect,wrappers,title 的配置
30
+   * @doc https://umijs.org/docs/guides/routes
31
+   */
32
+  // umi routes: https://umijs.org/docs/routing
33
+  routes,
34
+  /**
35
+   * @name 主题的配置
36
+   * @description 虽然叫主题,但是其实只是 less 的变量设置
37
+   * @doc antd的主题设置 https://ant.design/docs/react/customize-theme-cn
38
+   * @doc umi 的theme 配置 https://umijs.org/docs/api/config#theme
39
+   */
40
+  theme: {
41
+    // 如果不想要 configProvide 动态设置主题需要把这个设置为 default
42
+    // 只有设置为 variable, 才能使用 configProvide 动态设置主色调
43
+    'root-entry-name': 'variable',
44
+  },
45
+  /**
46
+   * @name moment 的国际化配置
47
+   * @description 如果对国际化没有要求,打开之后能减少js的包大小
48
+   * @doc https://umijs.org/docs/api/config#ignoremomentlocale
49
+   */
50
+  ignoreMomentLocale: true,
51
+  /**
52
+   * @name 代理配置
53
+   * @description 可以让你的本地服务器代理到你的服务器上,这样你就可以访问服务器的数据了
54
+   * @see 要注意以下 代理只能在本地开发时使用,build 之后就无法使用了。
55
+   * @doc 代理介绍 https://umijs.org/docs/guides/proxy
56
+   * @doc 代理配置 https://umijs.org/docs/api/config#proxy
57
+   */
58
+  proxy: proxy[REACT_APP_ENV as keyof typeof proxy],
59
+  /**
60
+   * @name 快速热更新配置
61
+   * @description 一个不错的热更新组件,更新时可以保留 state
62
+   */
63
+  fastRefresh: true,
64
+  //============== 以下都是max的插件配置 ===============
65
+  /**
66
+   * @name 数据流插件
67
+   * @@doc https://umijs.org/docs/max/data-flow
68
+   */
69
+  model: {},
70
+  /**
71
+   * 一个全局的初始数据流,可以用它在插件之间共享数据
72
+   * @description 可以用来存放一些全局的数据,比如用户信息,或者一些全局的状态,全局初始状态在整个 Umi 项目的最开始创建。
73
+   * @doc https://umijs.org/docs/max/data-flow#%E5%85%A8%E5%B1%80%E5%88%9D%E5%A7%8B%E7%8A%B6%E6%80%81
74
+   */
75
+  initialState: {},
76
+  /**
77
+   * @name layout 插件
78
+   * @doc https://umijs.org/docs/max/layout-menu
79
+   */
80
+  title:'云上文旅',
81
+  layout: {
82
+    locale: true,
83
+    ...defaultSettings,
84
+  },
85
+  /**
86
+   * @name moment2dayjs 插件
87
+   * @description 将项目中的 moment 替换为 dayjs
88
+   * @doc https://umijs.org/docs/max/moment2dayjs
89
+   */
90
+  moment2dayjs: {
91
+    preset: 'antd',
92
+    plugins: ['duration'],
93
+  },
94
+  /**
95
+   * @name 国际化插件
96
+   * @doc https://umijs.org/docs/max/i18n
97
+   */
98
+  locale: {
99
+    // default zh-CN
100
+    default: 'zh-CN',
101
+    antd: true,
102
+    // default true, when it is true, will use `navigator.language` overwrite default
103
+    baseNavigator: true,
104
+  },
105
+  /**
106
+   * @name antd 插件
107
+   * @description 内置了 babel import 插件
108
+   * @doc https://umijs.org/docs/max/antd#antd
109
+   */
110
+  antd: {},
111
+  /**
112
+   * @name 网络请求配置
113
+   * @description 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。
114
+   * @doc https://umijs.org/docs/max/request
115
+   */
116
+  request: {},
117
+  /**
118
+   * @name 权限插件
119
+   * @description 基于 initialState 的权限插件,必须先打开 initialState
120
+   * @doc https://umijs.org/docs/max/access
121
+   */
122
+  access: {},
123
+  /**
124
+   * @name <head> 中额外的 script
125
+   * @description 配置 <head> 中额外的 script
126
+   */
127
+  headScripts: [
128
+    // 解决首次加载时白屏的问题
129
+    { src: './scripts/loading.js', async: true },
130
+  ],
131
+  //================ pro 插件配置 =================
132
+  presets: ['umi-presets-pro'],
133
+  /**
134
+   * @name openAPI 插件的配置
135
+   * @description 基于 openapi 的规范生成serve 和mock,能减少很多样板代码
136
+   * @doc https://pro.ant.design/zh-cn/docs/openapi/
137
+   */
138
+  openAPI: [
139
+    {
140
+      requestLibPath: "import { request } from '@umijs/max'",
141
+      // 或者使用在线的版本
142
+      // schemaPath: "https://gw.alipayobjects.com/os/antfincdn/M%24jrzTTYJN/oneapi.json"
143
+      schemaPath: join(__dirname, 'oneapi.json'),
144
+      mock: false,
145
+    },
146
+    {
147
+      requestLibPath: "import { request } from '@umijs/max'",
148
+      schemaPath: 'https://gw.alipayobjects.com/os/antfincdn/CA1dOm%2631B/openapi.json',
149
+      projectName: 'swagger',
150
+    },
151
+  ],
152
+  mfsu: {
153
+    strategy: 'normal',
154
+  },
155
+  esbuildMinifyIIFE: true,
156
+  requestRecord: {},
157
+});

+ 28
- 0
config/defaultSettings.ts Прегледај датотеку

@@ -0,0 +1,28 @@
1
+import { ProLayoutProps } from '@ant-design/pro-components';
2
+
3
+/**
4
+ * @name
5
+ */
6
+const Settings: ProLayoutProps & {
7
+  pwa?: boolean;
8
+  logo?: string;
9
+} = {
10
+  navTheme: 'light',
11
+  // 拂晓蓝
12
+  colorPrimary: '#1890ff',
13
+  layout: 'mix',
14
+  contentWidth: 'Fluid',
15
+  fixedHeader: false,
16
+  fixSiderbar: true,
17
+  colorWeak: false,
18
+  title: '云上文旅',
19
+  pwa: true,
20
+  logo: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg',
21
+  iconfontUrl: '',
22
+  token: {
23
+    // 参见ts声明,demo 见文档,通过token 修改样式
24
+    //https://procomponents.ant.design/components/layout#%E9%80%9A%E8%BF%87-token-%E4%BF%AE%E6%94%B9%E6%A0%B7%E5%BC%8F
25
+  },
26
+};
27
+
28
+export default Settings;

+ 593
- 0
config/oneapi.json Прегледај датотеку

@@ -0,0 +1,593 @@
1
+{
2
+  "openapi": "3.0.1",
3
+  "info": {
4
+    "title": "云上文旅",
5
+    "version": "1.0.0"
6
+  },
7
+  "servers": [
8
+    {
9
+      "url": "http://localhost:8000/"
10
+    },
11
+    {
12
+      "url": "https://localhost:8000/"
13
+    }
14
+  ],
15
+  "paths": {
16
+    "/api/currentUser": {
17
+      "get": {
18
+        "tags": ["api"],
19
+        "description": "获取当前的用户",
20
+        "operationId": "currentUser",
21
+        "responses": {
22
+          "200": {
23
+            "description": "Success",
24
+            "content": {
25
+              "application/json": {
26
+                "schema": {
27
+                  "$ref": "#/components/schemas/CurrentUser"
28
+                }
29
+              }
30
+            }
31
+          },
32
+          "401": {
33
+            "description": "Error",
34
+            "content": {
35
+              "application/json": {
36
+                "schema": {
37
+                  "$ref": "#/components/schemas/ErrorResponse"
38
+                }
39
+              }
40
+            }
41
+          }
42
+        }
43
+      },
44
+      "x-swagger-router-controller": "api"
45
+    },
46
+    "/api/login/captcha": {
47
+      "post": {
48
+        "description": "发送验证码",
49
+        "operationId": "getFakeCaptcha",
50
+        "tags": ["login"],
51
+        "parameters": [
52
+          {
53
+            "name": "phone",
54
+            "in": "query",
55
+            "description": "手机号",
56
+            "schema": {
57
+              "type": "string"
58
+            }
59
+          }
60
+        ],
61
+        "responses": {
62
+          "200": {
63
+            "description": "Success",
64
+            "content": {
65
+              "application/json": {
66
+                "schema": {
67
+                  "$ref": "#/components/schemas/FakeCaptcha"
68
+                }
69
+              }
70
+            }
71
+          }
72
+        }
73
+      }
74
+    },
75
+    "/api/login/outLogin": {
76
+      "post": {
77
+        "description": "登录接口",
78
+        "operationId": "outLogin",
79
+        "tags": ["login"],
80
+        "responses": {
81
+          "200": {
82
+            "description": "Success",
83
+            "content": {
84
+              "application/json": {
85
+                "schema": {
86
+                  "type": "object"
87
+                }
88
+              }
89
+            }
90
+          },
91
+          "401": {
92
+            "description": "Error",
93
+            "content": {
94
+              "application/json": {
95
+                "schema": {
96
+                  "$ref": "#/components/schemas/ErrorResponse"
97
+                }
98
+              }
99
+            }
100
+          }
101
+        }
102
+      },
103
+      "x-swagger-router-controller": "api"
104
+    },
105
+    "/api/login/account": {
106
+      "post": {
107
+        "tags": ["login"],
108
+        "description": "登录接口",
109
+        "operationId": "login",
110
+        "requestBody": {
111
+          "description": "登录系统",
112
+          "content": {
113
+            "application/json": {
114
+              "schema": {
115
+                "$ref": "#/components/schemas/LoginParams"
116
+              }
117
+            }
118
+          },
119
+          "required": true
120
+        },
121
+        "responses": {
122
+          "200": {
123
+            "description": "Success",
124
+            "content": {
125
+              "application/json": {
126
+                "schema": {
127
+                  "$ref": "#/components/schemas/LoginResult"
128
+                }
129
+              }
130
+            }
131
+          },
132
+          "401": {
133
+            "description": "Error",
134
+            "content": {
135
+              "application/json": {
136
+                "schema": {
137
+                  "$ref": "#/components/schemas/ErrorResponse"
138
+                }
139
+              }
140
+            }
141
+          }
142
+        },
143
+        "x-codegen-request-body-name": "body"
144
+      },
145
+      "x-swagger-router-controller": "api"
146
+    },
147
+    "/api/notices": {
148
+      "summary": "getNotices",
149
+      "description": "NoticeIconItem",
150
+      "get": {
151
+        "tags": ["api"],
152
+        "operationId": "getNotices",
153
+        "responses": {
154
+          "200": {
155
+            "description": "Success",
156
+            "content": {
157
+              "application/json": {
158
+                "schema": {
159
+                  "$ref": "#/components/schemas/NoticeIconList"
160
+                }
161
+              }
162
+            }
163
+          }
164
+        }
165
+      }
166
+    },
167
+    "/api/rule": {
168
+      "get": {
169
+        "tags": ["rule"],
170
+        "description": "获取规则列表",
171
+        "operationId": "rule",
172
+        "parameters": [
173
+          {
174
+            "name": "current",
175
+            "in": "query",
176
+            "description": "当前的页码",
177
+            "schema": {
178
+              "type": "number"
179
+            }
180
+          },
181
+          {
182
+            "name": "pageSize",
183
+            "in": "query",
184
+            "description": "页面的容量",
185
+            "schema": {
186
+              "type": "number"
187
+            }
188
+          }
189
+        ],
190
+        "responses": {
191
+          "200": {
192
+            "description": "Success",
193
+            "content": {
194
+              "application/json": {
195
+                "schema": {
196
+                  "$ref": "#/components/schemas/RuleList"
197
+                }
198
+              }
199
+            }
200
+          },
201
+          "401": {
202
+            "description": "Error",
203
+            "content": {
204
+              "application/json": {
205
+                "schema": {
206
+                  "$ref": "#/components/schemas/ErrorResponse"
207
+                }
208
+              }
209
+            }
210
+          }
211
+        }
212
+      },
213
+      "post": {
214
+        "tags": ["rule"],
215
+        "description": "新建规则",
216
+        "operationId": "addRule",
217
+        "responses": {
218
+          "200": {
219
+            "description": "Success",
220
+            "content": {
221
+              "application/json": {
222
+                "schema": {
223
+                  "$ref": "#/components/schemas/RuleListItem"
224
+                }
225
+              }
226
+            }
227
+          },
228
+          "401": {
229
+            "description": "Error",
230
+            "content": {
231
+              "application/json": {
232
+                "schema": {
233
+                  "$ref": "#/components/schemas/ErrorResponse"
234
+                }
235
+              }
236
+            }
237
+          }
238
+        }
239
+      },
240
+      "put": {
241
+        "tags": ["rule"],
242
+        "description": "新建规则",
243
+        "operationId": "updateRule",
244
+        "responses": {
245
+          "200": {
246
+            "description": "Success",
247
+            "content": {
248
+              "application/json": {
249
+                "schema": {
250
+                  "$ref": "#/components/schemas/RuleListItem"
251
+                }
252
+              }
253
+            }
254
+          },
255
+          "401": {
256
+            "description": "Error",
257
+            "content": {
258
+              "application/json": {
259
+                "schema": {
260
+                  "$ref": "#/components/schemas/ErrorResponse"
261
+                }
262
+              }
263
+            }
264
+          }
265
+        }
266
+      },
267
+      "delete": {
268
+        "tags": ["rule"],
269
+        "description": "删除规则",
270
+        "operationId": "removeRule",
271
+        "responses": {
272
+          "200": {
273
+            "description": "Success",
274
+            "content": {
275
+              "application/json": {
276
+                "schema": {
277
+                  "type": "object"
278
+                }
279
+              }
280
+            }
281
+          },
282
+          "401": {
283
+            "description": "Error",
284
+            "content": {
285
+              "application/json": {
286
+                "schema": {
287
+                  "$ref": "#/components/schemas/ErrorResponse"
288
+                }
289
+              }
290
+            }
291
+          }
292
+        }
293
+      },
294
+      "x-swagger-router-controller": "api"
295
+    },
296
+    "/swagger": {
297
+      "x-swagger-pipe": "swagger_raw"
298
+    }
299
+  },
300
+  "components": {
301
+    "schemas": {
302
+      "CurrentUser": {
303
+        "type": "object",
304
+        "properties": {
305
+          "name": {
306
+            "type": "string"
307
+          },
308
+          "avatar": {
309
+            "type": "string"
310
+          },
311
+          "userid": {
312
+            "type": "string"
313
+          },
314
+          "email": {
315
+            "type": "string"
316
+          },
317
+          "signature": {
318
+            "type": "string"
319
+          },
320
+          "title": {
321
+            "type": "string"
322
+          },
323
+          "group": {
324
+            "type": "string"
325
+          },
326
+          "tags": {
327
+            "type": "array",
328
+            "items": {
329
+              "type": "object",
330
+              "properties": {
331
+                "key": {
332
+                  "type": "string"
333
+                },
334
+                "label": {
335
+                  "type": "string"
336
+                }
337
+              }
338
+            }
339
+          },
340
+          "notifyCount": {
341
+            "type": "integer",
342
+            "format": "int32"
343
+          },
344
+          "unreadCount": {
345
+            "type": "integer",
346
+            "format": "int32"
347
+          },
348
+          "country": {
349
+            "type": "string"
350
+          },
351
+          "access": {
352
+            "type": "string"
353
+          },
354
+          "geographic": {
355
+            "type": "object",
356
+            "properties": {
357
+              "province": {
358
+                "type": "object",
359
+                "properties": {
360
+                  "label": {
361
+                    "type": "string"
362
+                  },
363
+                  "key": {
364
+                    "type": "string"
365
+                  }
366
+                }
367
+              },
368
+              "city": {
369
+                "type": "object",
370
+                "properties": {
371
+                  "label": {
372
+                    "type": "string"
373
+                  },
374
+                  "key": {
375
+                    "type": "string"
376
+                  }
377
+                }
378
+              }
379
+            }
380
+          },
381
+          "address": {
382
+            "type": "string"
383
+          },
384
+          "phone": {
385
+            "type": "string"
386
+          }
387
+        }
388
+      },
389
+      "LoginResult": {
390
+        "type": "object",
391
+        "properties": {
392
+          "status": {
393
+            "type": "string"
394
+          },
395
+          "type": {
396
+            "type": "string"
397
+          },
398
+          "currentAuthority": {
399
+            "type": "string"
400
+          }
401
+        }
402
+      },
403
+      "PageParams": {
404
+        "type": "object",
405
+        "properties": {
406
+          "current": {
407
+            "type": "number"
408
+          },
409
+          "pageSize": {
410
+            "type": "number"
411
+          }
412
+        }
413
+      },
414
+      "RuleListItem": {
415
+        "type": "object",
416
+        "properties": {
417
+          "key": {
418
+            "type": "integer",
419
+            "format": "int32"
420
+          },
421
+          "disabled": {
422
+            "type": "boolean"
423
+          },
424
+          "href": {
425
+            "type": "string"
426
+          },
427
+          "avatar": {
428
+            "type": "string"
429
+          },
430
+          "name": {
431
+            "type": "string"
432
+          },
433
+          "owner": {
434
+            "type": "string"
435
+          },
436
+          "desc": {
437
+            "type": "string"
438
+          },
439
+          "callNo": {
440
+            "type": "integer",
441
+            "format": "int32"
442
+          },
443
+          "status": {
444
+            "type": "integer",
445
+            "format": "int32"
446
+          },
447
+          "updatedAt": {
448
+            "type": "string",
449
+            "format": "datetime"
450
+          },
451
+          "createdAt": {
452
+            "type": "string",
453
+            "format": "datetime"
454
+          },
455
+          "progress": {
456
+            "type": "integer",
457
+            "format": "int32"
458
+          }
459
+        }
460
+      },
461
+      "RuleList": {
462
+        "type": "object",
463
+        "properties": {
464
+          "data": {
465
+            "type": "array",
466
+            "items": {
467
+              "$ref": "#/components/schemas/RuleListItem"
468
+            }
469
+          },
470
+          "total": {
471
+            "type": "integer",
472
+            "description": "列表的内容总数",
473
+            "format": "int32"
474
+          },
475
+          "success": {
476
+            "type": "boolean"
477
+          }
478
+        }
479
+      },
480
+      "FakeCaptcha": {
481
+        "type": "object",
482
+        "properties": {
483
+          "code": {
484
+            "type": "integer",
485
+            "format": "int32"
486
+          },
487
+          "status": {
488
+            "type": "string"
489
+          }
490
+        }
491
+      },
492
+      "LoginParams": {
493
+        "type": "object",
494
+        "properties": {
495
+          "username": {
496
+            "type": "string"
497
+          },
498
+          "password": {
499
+            "type": "string"
500
+          },
501
+          "autoLogin": {
502
+            "type": "boolean"
503
+          },
504
+          "type": {
505
+            "type": "string"
506
+          }
507
+        }
508
+      },
509
+      "ErrorResponse": {
510
+        "required": ["errorCode"],
511
+        "type": "object",
512
+        "properties": {
513
+          "errorCode": {
514
+            "type": "string",
515
+            "description": "业务约定的错误码"
516
+          },
517
+          "errorMessage": {
518
+            "type": "string",
519
+            "description": "业务上的错误信息"
520
+          },
521
+          "success": {
522
+            "type": "boolean",
523
+            "description": "业务上的请求是否成功"
524
+          }
525
+        }
526
+      },
527
+      "NoticeIconList": {
528
+        "type": "object",
529
+        "properties": {
530
+          "data": {
531
+            "type": "array",
532
+            "items": {
533
+              "$ref": "#/components/schemas/NoticeIconItem"
534
+            }
535
+          },
536
+          "total": {
537
+            "type": "integer",
538
+            "description": "列表的内容总数",
539
+            "format": "int32"
540
+          },
541
+          "success": {
542
+            "type": "boolean"
543
+          }
544
+        }
545
+      },
546
+      "NoticeIconItemType": {
547
+        "title": "NoticeIconItemType",
548
+        "description": "已读未读列表的枚举",
549
+        "type": "string",
550
+        "properties": {},
551
+        "enum": ["notification", "message", "event"]
552
+      },
553
+      "NoticeIconItem": {
554
+        "type": "object",
555
+        "properties": {
556
+          "id": {
557
+            "type": "string"
558
+          },
559
+          "extra": {
560
+            "type": "string",
561
+            "format": "any"
562
+          },
563
+          "key": { "type": "string" },
564
+          "read": {
565
+            "type": "boolean"
566
+          },
567
+          "avatar": {
568
+            "type": "string"
569
+          },
570
+          "title": {
571
+            "type": "string"
572
+          },
573
+          "status": {
574
+            "type": "string"
575
+          },
576
+          "datetime": {
577
+            "type": "string",
578
+            "format": "date"
579
+          },
580
+          "description": {
581
+            "type": "string"
582
+          },
583
+          "type": {
584
+            "extensions": {
585
+              "x-is-enum": true
586
+            },
587
+            "$ref": "#/components/schemas/NoticeIconItemType"
588
+          }
589
+        }
590
+      }
591
+    }
592
+  }
593
+}

+ 44
- 0
config/proxy.ts Прегледај датотеку

@@ -0,0 +1,44 @@
1
+/**
2
+ * @name 代理的配置
3
+ * @see 在生产环境 代理是无法生效的,所以这里没有生产环境的配置
4
+ * -------------------------------
5
+ * The agent cannot take effect in the production environment
6
+ * so there is no configuration of the production environment
7
+ * For details, please see
8
+ * https://pro.ant.design/docs/deploy
9
+ *
10
+ * @doc https://umijs.org/docs/guides/proxy
11
+ */
12
+export default {
13
+  // 如果需要自定义本地开发服务器  请取消注释按需调整
14
+  // dev: {
15
+  //   // localhost:8000/api/** -> https://preview.pro.ant.design/api/**
16
+  //   '/api/': {
17
+  //     // 要代理的地址
18
+  //     target: 'https://preview.pro.ant.design',
19
+  //     // 配置了这个可以从 http 代理到 https
20
+  //     // 依赖 origin 的功能可能需要这个,比如 cookie
21
+  //     changeOrigin: true,
22
+  //   },
23
+  // },
24
+
25
+  /**
26
+   * @name 详细的代理配置
27
+   * @doc https://github.com/chimurai/http-proxy-middleware
28
+   */
29
+  test: {
30
+    // localhost:8000/api/** -> https://preview.pro.ant.design/api/**
31
+    '/api/': {
32
+      target: 'https://proapi.azurewebsites.net',
33
+      changeOrigin: true,
34
+      pathRewrite: { '^': '' },
35
+    },
36
+  },
37
+  pre: {
38
+    '/api/': {
39
+      target: 'your pre url',
40
+      changeOrigin: true,
41
+      pathRewrite: { '^': '' },
42
+    },
43
+  },
44
+};

+ 36
- 0
config/routes.ts Прегледај датотеку

@@ -0,0 +1,36 @@
1
+/**
2
+ * @name umi 的路由配置
3
+ * @description 只支持 path,component,routes,redirect,wrappers,name,icon 的配置
4
+ * @param path  path 只支持两种占位符配置,第一种是动态参数 :id 的形式,第二种是 * 通配符,通配符只能出现路由字符串的最后。
5
+ * @param component 配置 location 和 path 匹配后用于渲染的 React 组件路径。可以是绝对路径,也可以是相对路径,如果是相对路径,会从 src/pages 开始找起。
6
+ * @param routes 配置子路由,通常在需要为多个路径增加 layout 组件时使用。
7
+ * @param redirect 配置路由跳转
8
+ * @param wrappers 配置路由组件的包装组件,通过包装组件可以为当前的路由组件组合进更多的功能。 比如,可以用于路由级别的权限校验
9
+ * @param name 配置路由的标题,默认读取国际化文件 menu.ts 中 menu.xxxx 的值,如配置 name 为 login,则读取 menu.ts 中 menu.login 的取值作为标题
10
+ * @param icon 配置路由的图标,取值参考 https://ant.design/components/icon-cn, 注意去除风格后缀和大小写,如想要配置图标为 <StepBackwardOutlined /> 则取值应为 stepBackward 或 StepBackward,如想要配置图标为 <UserOutlined /> 则取值应为 user 或者 User
11
+ * @doc https://umijs.org/docs/guides/routes
12
+ */
13
+export default [
14
+  {
15
+    path: '/index',
16
+    name: 'index',
17
+    icon: 'smile',
18
+    layout: false,
19
+    component: './index',
20
+  },
21
+
22
+  {
23
+    path: '/',
24
+    redirect: '/index',
25
+  },
26
+   {
27
+      path: '*',
28
+      layout: false,
29
+      component: './index',
30
+    },
31
+  // {
32
+  //   path: '*',
33
+  //   layout: false,
34
+  //   component: './404',
35
+  // },
36
+];

+ 23
- 0
jest.config.ts Прегледај датотеку

@@ -0,0 +1,23 @@
1
+import { configUmiAlias, createConfig } from '@umijs/max/test';
2
+
3
+export default async () => {
4
+  const config = await configUmiAlias({
5
+    ...createConfig({
6
+      target: 'browser',
7
+    }),
8
+  });
9
+  console.log(JSON.stringify(config));
10
+
11
+  return {
12
+    ...config,
13
+    testEnvironmentOptions: {
14
+      ...(config?.testEnvironmentOptions || {}),
15
+      url: 'http://localhost:8000',
16
+    },
17
+    setupFiles: [...(config.setupFiles || []), './tests/setupTests.jsx'],
18
+    globals: {
19
+      ...config.globals,
20
+      localStorage: null,
21
+    },
22
+  };
23
+};

+ 11
- 0
jsconfig.json Прегледај датотеку

@@ -0,0 +1,11 @@
1
+{
2
+  "compilerOptions": {
3
+    "jsx": "react-jsx",
4
+    "emitDecoratorMetadata": true,
5
+    "experimentalDecorators": true,
6
+    "baseUrl": ".",
7
+    "paths": {
8
+      "@/*": ["./src/*"]
9
+    }
10
+  }
11
+}

+ 121
- 0
mock/chartApi.ts Прегледај датотеку

@@ -0,0 +1,121 @@
1
+import { Request, Response } from 'express';
2
+
3
+const mouthList = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
4
+// chart1 销售额趋势
5
+const getSalesVolume = (req: Request, res: Response)=>{
6
+    res.json({
7
+        mouthList: mouthList,
8
+        mouthData:[820, 932, 901, 934, 1290, 1330, 1320,820, 932, 1290, 1330, 1320]
9
+      });
10
+}
11
+
12
+// chart2 国外销售额占比
13
+const getSalesRatio = (req: Request, res: Response)=>{
14
+    res.json({
15
+        data:[
16
+            { value: 1048, name: '国内' },
17
+            { value: 735, name: '国外' },
18
+          ]
19
+      });
20
+}
21
+
22
+// chart3 航司销售额统计(万/年)
23
+const getSalesStatistics = (req: Request, res: Response)=>{
24
+    res.json({
25
+        nameList: ['厦门航空','西藏航空', '四川航空','吉祥航空','东方航空'].reverse(),  // 国内航空名称数据
26
+        nameListAbroad: ['厦门航空','西藏航空', '四川航空','吉祥航空','东方航空'].reverse(),  // 国外航空名称数据 
27
+        data: [2256, 1223, 1052, 656,456].reverse(),   // 航空名称所对应的国内数据
28
+        dataAbroad:[2056, 1023, 852, 456,256].reverse(), // 航空名称所对应的国外数据
29
+      });
30
+}
31
+
32
+// chart4 客单价趋势
33
+const getUnitPriceTrend = (req: Request, res: Response)=>{
34
+    res.json({
35
+        mouthList: mouthList,    // 月份名称数据
36
+        data:[
37
+            {name:'今年',data:[60, 60, 60, 70, 60, 100, 80, 80, 90, 120, 110, 100]},
38
+            {name:'去年',data:[120, 120, 120, 120, 70, 120, 100, 110, 100, 120, 110, 110]},
39
+        ]
40
+    });
41
+}
42
+
43
+// chart5 国内外订单对比
44
+const getOrderComparison = (req: Request, res: Response)=>{
45
+    res.json({
46
+        data: [
47
+            { value: 40, name: '国际' },
48
+            { value: 60, name: '国内' },
49
+        ]
50
+    });
51
+}
52
+
53
+// chart6 机场排名(国内)
54
+const getAirportRankingDomestic = (req: Request, res: Response)=>{
55
+    res.json({
56
+        nameList:[ '双流机场', '萧山机场', '虹桥机场', '高崎机场','江北机场'],
57
+        data: [456, 656, 1025, 1223,2256 ]
58
+    });
59
+}
60
+
61
+// chart7 机场排名(国外)
62
+const getAirportRankingAbroad = (req: Request, res: Response)=>{
63
+    res.json({
64
+        nameList:[ '双流机场', '萧山机场', '虹桥机场', '高崎机场','江北机场'],
65
+        data: [456, 656, 1025, 1223,2256 ]
66
+    });
67
+}
68
+
69
+// chart8 服务类型
70
+const getServiceTypeData = (req: Request, res: Response)=>{
71
+    res.json({
72
+        data: [
73
+            { value: 31282, name: '机票服务' },
74
+            { value: 23236, name: '酒店服务' },
75
+            { value: 12432, name: '火车票服务' },
76
+            { value: 2645, name: '其他服务' },
77
+        ]
78
+    });
79
+}
80
+
81
+// chart9 用户画像
82
+const getUserProfile = (req: Request, res: Response)=>{
83
+    res.json({
84
+        mouthList:mouthList,
85
+        data: [
86
+            { data: [100, 302, 301, 334, 390, 330, 320,334, 390, 330, 320, 320], name: '青年' },
87
+            { data: [320, 132, 101, 134, 90, 230, 210, 132, 101, 134, 90, 230, 210], name: '中年' },
88
+            { data: [220, 182, 191, 234, 290, 330, 310, 182, 191, 234, 290, 330, 310], name: '老年' },
89
+        ]
90
+    });
91
+}
92
+
93
+// 大屏数值数据
94
+const getNumericalData = (req: Request, res: Response)=>{
95
+    res.json({
96
+        totalSalesAmount:24894,
97
+        totalOrder:4404824,
98
+        numberServicePersonnel:2583955,
99
+        numberAirborneCustomers:658879,
100
+        todaySalesVolume :1423253,
101
+        yearSalesVolume :122342,
102
+        todayOrder :1282,
103
+        yearOrder :410240,
104
+    });
105
+}
106
+
107
+
108
+
109
+export default {
110
+    'GET /api/getSalesVolume': getSalesVolume,
111
+    'GET /api/getSalesRatio': getSalesRatio,
112
+    'GET /api/getSalesStatistics': getSalesStatistics,
113
+    'GET /api/getUnitPriceTrend': getUnitPriceTrend,
114
+    'GET /api/getOrderComparison': getOrderComparison,
115
+    'GET /api/getAirportRankingDomestic': getAirportRankingDomestic,
116
+    'GET /api/getAirportRankingAbroad': getAirportRankingAbroad,
117
+    'GET /api/getServiceTypeData': getServiceTypeData,
118
+    'GET /api/getUserProfile': getUserProfile,
119
+    'GET /api/getNumericalData': getNumericalData,
120
+  };
121
+  

+ 176
- 0
mock/listTableList.ts Прегледај датотеку

@@ -0,0 +1,176 @@
1
+import { Request, Response } from 'express';
2
+import moment from 'moment';
3
+import { parse } from 'url';
4
+
5
+// mock tableListDataSource
6
+const genList = (current: number, pageSize: number) => {
7
+  const tableListDataSource: API.RuleListItem[] = [];
8
+
9
+  for (let i = 0; i < pageSize; i += 1) {
10
+    const index = (current - 1) * 10 + i;
11
+    tableListDataSource.push({
12
+      key: index,
13
+      disabled: i % 6 === 0,
14
+      href: 'https://ant.design',
15
+      avatar: [
16
+        'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
17
+        'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
18
+      ][i % 2],
19
+      name: `TradeCode ${index}`,
20
+      owner: '曲丽丽',
21
+      desc: '这是一段描述',
22
+      callNo: Math.floor(Math.random() * 1000),
23
+      status: Math.floor(Math.random() * 10) % 4,
24
+      updatedAt: moment().format('YYYY-MM-DD'),
25
+      createdAt: moment().format('YYYY-MM-DD'),
26
+      progress: Math.ceil(Math.random() * 100),
27
+    });
28
+  }
29
+  tableListDataSource.reverse();
30
+  return tableListDataSource;
31
+};
32
+
33
+let tableListDataSource = genList(1, 100);
34
+
35
+function getRule(req: Request, res: Response, u: string) {
36
+  let realUrl = u;
37
+  if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') {
38
+    realUrl = req.url;
39
+  }
40
+  const { current = 1, pageSize = 10 } = req.query;
41
+  const params = parse(realUrl, true).query as unknown as API.PageParams &
42
+    API.RuleListItem & {
43
+      sorter: any;
44
+      filter: any;
45
+    };
46
+
47
+  let dataSource = [...tableListDataSource].slice(
48
+    ((current as number) - 1) * (pageSize as number),
49
+    (current as number) * (pageSize as number),
50
+  );
51
+  if (params.sorter) {
52
+    const sorter = JSON.parse(params.sorter);
53
+    dataSource = dataSource.sort((prev, next) => {
54
+      let sortNumber = 0;
55
+      (Object.keys(sorter) as Array<keyof API.RuleListItem>).forEach((key) => {
56
+        let nextSort = next?.[key] as number;
57
+        let preSort = prev?.[key] as number;
58
+        if (sorter[key] === 'descend') {
59
+          if (preSort - nextSort > 0) {
60
+            sortNumber += -1;
61
+          } else {
62
+            sortNumber += 1;
63
+          }
64
+          return;
65
+        }
66
+        if (preSort - nextSort > 0) {
67
+          sortNumber += 1;
68
+        } else {
69
+          sortNumber += -1;
70
+        }
71
+      });
72
+      return sortNumber;
73
+    });
74
+  }
75
+  if (params.filter) {
76
+    const filter = JSON.parse(params.filter as any) as {
77
+      [key: string]: string[];
78
+    };
79
+    if (Object.keys(filter).length > 0) {
80
+      dataSource = dataSource.filter((item) => {
81
+        return (Object.keys(filter) as Array<keyof API.RuleListItem>).some((key) => {
82
+          if (!filter[key]) {
83
+            return true;
84
+          }
85
+          if (filter[key].includes(`${item[key]}`)) {
86
+            return true;
87
+          }
88
+          return false;
89
+        });
90
+      });
91
+    }
92
+  }
93
+
94
+  if (params.name) {
95
+    dataSource = dataSource.filter((data) => data?.name?.includes(params.name || ''));
96
+  }
97
+  const result = {
98
+    data: dataSource,
99
+    total: tableListDataSource.length,
100
+    success: true,
101
+    pageSize,
102
+    current: parseInt(`${params.current}`, 10) || 1,
103
+  };
104
+
105
+  return res.json(result);
106
+}
107
+
108
+function postRule(req: Request, res: Response, u: string, b: Request) {
109
+  let realUrl = u;
110
+  if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') {
111
+    realUrl = req.url;
112
+  }
113
+
114
+  const body = (b && b.body) || req.body;
115
+  const { method, name, desc, key } = body;
116
+
117
+  switch (method) {
118
+    /* eslint no-case-declarations:0 */
119
+    case 'delete':
120
+      tableListDataSource = tableListDataSource.filter((item) => key.indexOf(item.key) === -1);
121
+      break;
122
+    case 'post':
123
+      (() => {
124
+        const i = Math.ceil(Math.random() * 10000);
125
+        const newRule: API.RuleListItem = {
126
+          key: tableListDataSource.length,
127
+          href: 'https://ant.design',
128
+          avatar: [
129
+            'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
130
+            'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
131
+          ][i % 2],
132
+          name,
133
+          owner: '曲丽丽',
134
+          desc,
135
+          callNo: Math.floor(Math.random() * 1000),
136
+          status: Math.floor(Math.random() * 10) % 2,
137
+          updatedAt: moment().format('YYYY-MM-DD'),
138
+          createdAt: moment().format('YYYY-MM-DD'),
139
+          progress: Math.ceil(Math.random() * 100),
140
+        };
141
+        tableListDataSource.unshift(newRule);
142
+        return res.json(newRule);
143
+      })();
144
+      return;
145
+
146
+    case 'update':
147
+      (() => {
148
+        let newRule = {};
149
+        tableListDataSource = tableListDataSource.map((item) => {
150
+          if (item.key === key) {
151
+            newRule = { ...item, desc, name };
152
+            return { ...item, desc, name };
153
+          }
154
+          return item;
155
+        });
156
+        return res.json(newRule);
157
+      })();
158
+      return;
159
+    default:
160
+      break;
161
+  }
162
+
163
+  const result = {
164
+    list: tableListDataSource,
165
+    pagination: {
166
+      total: tableListDataSource.length,
167
+    },
168
+  };
169
+
170
+  res.json(result);
171
+}
172
+
173
+export default {
174
+  'GET /api/rule': getRule,
175
+  'POST /api/rule': postRule,
176
+};

+ 115
- 0
mock/notices.ts Прегледај датотеку

@@ -0,0 +1,115 @@
1
+import { Request, Response } from 'express';
2
+
3
+const getNotices = (req: Request, res: Response) => {
4
+  res.json({
5
+    data: [
6
+      {
7
+        id: '000000001',
8
+        avatar:
9
+          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/MSbDR4FR2MUAAAAAAAAAAAAAFl94AQBr',
10
+        title: '你收到了 14 份新周报',
11
+        datetime: '2017-08-09',
12
+        type: 'notification',
13
+      },
14
+      {
15
+        id: '000000002',
16
+        avatar:
17
+          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/hX-PTavYIq4AAAAAAAAAAAAAFl94AQBr',
18
+        title: '你推荐的 曲妮妮 已通过第三轮面试',
19
+        datetime: '2017-08-08',
20
+        type: 'notification',
21
+      },
22
+      {
23
+        id: '000000003',
24
+        avatar:
25
+          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/jHX5R5l3QjQAAAAAAAAAAAAAFl94AQBr',
26
+        title: '这种模板可以区分多种通知类型',
27
+        datetime: '2017-08-07',
28
+        read: true,
29
+        type: 'notification',
30
+      },
31
+      {
32
+        id: '000000004',
33
+        avatar:
34
+          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/Wr4mQqx6jfwAAAAAAAAAAAAAFl94AQBr',
35
+        title: '左侧图标用于区分不同的类型',
36
+        datetime: '2017-08-07',
37
+        type: 'notification',
38
+      },
39
+      {
40
+        id: '000000005',
41
+        avatar:
42
+          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/Mzj_TbcWUj4AAAAAAAAAAAAAFl94AQBr',
43
+        title: '内容不要超过两行字,超出时自动截断',
44
+        datetime: '2017-08-07',
45
+        type: 'notification',
46
+      },
47
+      {
48
+        id: '000000006',
49
+        avatar:
50
+          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/eXLzRbPqQE4AAAAAAAAAAAAAFl94AQBr',
51
+        title: '曲丽丽 评论了你',
52
+        description: '描述信息描述信息描述信息',
53
+        datetime: '2017-08-07',
54
+        type: 'message',
55
+        clickClose: true,
56
+      },
57
+      {
58
+        id: '000000007',
59
+        avatar:
60
+          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/w5mRQY2AmEEAAAAAAAAAAAAAFl94AQBr',
61
+        title: '朱偏右 回复了你',
62
+        description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
63
+        datetime: '2017-08-07',
64
+        type: 'message',
65
+        clickClose: true,
66
+      },
67
+      {
68
+        id: '000000008',
69
+        avatar:
70
+          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/wPadR5M9918AAAAAAAAAAAAAFl94AQBr',
71
+        title: '标题',
72
+        description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
73
+        datetime: '2017-08-07',
74
+        type: 'message',
75
+        clickClose: true,
76
+      },
77
+      {
78
+        id: '000000009',
79
+        title: '任务名称',
80
+        description: '任务需要在 2017-01-12 20:00 前启动',
81
+        extra: '未开始',
82
+        status: 'todo',
83
+        type: 'event',
84
+      },
85
+      {
86
+        id: '000000010',
87
+        title: '第三方紧急代码变更',
88
+        description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
89
+        extra: '马上到期',
90
+        status: 'urgent',
91
+        type: 'event',
92
+      },
93
+      {
94
+        id: '000000011',
95
+        title: '信息安全考试',
96
+        description: '指派竹尔于 2017-01-09 前完成更新并发布',
97
+        extra: '已耗时 8 天',
98
+        status: 'doing',
99
+        type: 'event',
100
+      },
101
+      {
102
+        id: '000000012',
103
+        title: 'ABCD 版本发布',
104
+        description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
105
+        extra: '进行中',
106
+        status: 'processing',
107
+        type: 'event',
108
+      },
109
+    ],
110
+  });
111
+};
112
+
113
+export default {
114
+  'GET /api/notices': getNotices,
115
+};

+ 324
- 0
mock/requestRecord.mock.js Прегледај датотеку

@@ -0,0 +1,324 @@
1
+module.exports = {
2
+  'GET /api/currentUser': {
3
+    data: {
4
+      name: 'Serati Ma',
5
+      avatar: 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',
6
+      userid: '00000001',
7
+      email: 'antdesign@alipay.com',
8
+      signature: '海纳百川,有容乃大',
9
+      title: '交互专家',
10
+      group: '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
11
+      tags: [
12
+        { key: '0', label: '很有想法的' },
13
+        { key: '1', label: '专注设计' },
14
+        { key: '2', label: '辣~' },
15
+        { key: '3', label: '大长腿' },
16
+        { key: '4', label: '川妹子' },
17
+        { key: '5', label: '海纳百川' },
18
+      ],
19
+      notifyCount: 12,
20
+      unreadCount: 11,
21
+      country: 'China',
22
+      geographic: {
23
+        province: { label: '浙江省', key: '330000' },
24
+        city: { label: '杭州市', key: '330100' },
25
+      },
26
+      address: '西湖区工专路 77 号',
27
+      phone: '0752-268888888',
28
+    },
29
+  },
30
+  'GET /api/rule': {
31
+    data: [
32
+      {
33
+        key: 99,
34
+        disabled: false,
35
+        href: 'https://ant.design',
36
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
37
+        name: 'TradeCode 99',
38
+        owner: '曲丽丽',
39
+        desc: '这是一段描述',
40
+        callNo: 503,
41
+        status: '0',
42
+        updatedAt: '2022-12-06T05:00:57.040Z',
43
+        createdAt: '2022-12-06T05:00:57.040Z',
44
+        progress: 81,
45
+      },
46
+      {
47
+        key: 98,
48
+        disabled: false,
49
+        href: 'https://ant.design',
50
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
51
+        name: 'TradeCode 98',
52
+        owner: '曲丽丽',
53
+        desc: '这是一段描述',
54
+        callNo: 164,
55
+        status: '0',
56
+        updatedAt: '2022-12-06T05:00:57.040Z',
57
+        createdAt: '2022-12-06T05:00:57.040Z',
58
+        progress: 12,
59
+      },
60
+      {
61
+        key: 97,
62
+        disabled: false,
63
+        href: 'https://ant.design',
64
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
65
+        name: 'TradeCode 97',
66
+        owner: '曲丽丽',
67
+        desc: '这是一段描述',
68
+        callNo: 174,
69
+        status: '1',
70
+        updatedAt: '2022-12-06T05:00:57.040Z',
71
+        createdAt: '2022-12-06T05:00:57.040Z',
72
+        progress: 81,
73
+      },
74
+      {
75
+        key: 96,
76
+        disabled: true,
77
+        href: 'https://ant.design',
78
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
79
+        name: 'TradeCode 96',
80
+        owner: '曲丽丽',
81
+        desc: '这是一段描述',
82
+        callNo: 914,
83
+        status: '0',
84
+        updatedAt: '2022-12-06T05:00:57.040Z',
85
+        createdAt: '2022-12-06T05:00:57.040Z',
86
+        progress: 7,
87
+      },
88
+      {
89
+        key: 95,
90
+        disabled: false,
91
+        href: 'https://ant.design',
92
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
93
+        name: 'TradeCode 95',
94
+        owner: '曲丽丽',
95
+        desc: '这是一段描述',
96
+        callNo: 698,
97
+        status: '2',
98
+        updatedAt: '2022-12-06T05:00:57.040Z',
99
+        createdAt: '2022-12-06T05:00:57.040Z',
100
+        progress: 82,
101
+      },
102
+      {
103
+        key: 94,
104
+        disabled: false,
105
+        href: 'https://ant.design',
106
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
107
+        name: 'TradeCode 94',
108
+        owner: '曲丽丽',
109
+        desc: '这是一段描述',
110
+        callNo: 488,
111
+        status: '1',
112
+        updatedAt: '2022-12-06T05:00:57.040Z',
113
+        createdAt: '2022-12-06T05:00:57.040Z',
114
+        progress: 14,
115
+      },
116
+      {
117
+        key: 93,
118
+        disabled: false,
119
+        href: 'https://ant.design',
120
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
121
+        name: 'TradeCode 93',
122
+        owner: '曲丽丽',
123
+        desc: '这是一段描述',
124
+        callNo: 580,
125
+        status: '2',
126
+        updatedAt: '2022-12-06T05:00:57.040Z',
127
+        createdAt: '2022-12-06T05:00:57.040Z',
128
+        progress: 77,
129
+      },
130
+      {
131
+        key: 92,
132
+        disabled: false,
133
+        href: 'https://ant.design',
134
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
135
+        name: 'TradeCode 92',
136
+        owner: '曲丽丽',
137
+        desc: '这是一段描述',
138
+        callNo: 244,
139
+        status: '3',
140
+        updatedAt: '2022-12-06T05:00:57.040Z',
141
+        createdAt: '2022-12-06T05:00:57.040Z',
142
+        progress: 58,
143
+      },
144
+      {
145
+        key: 91,
146
+        disabled: false,
147
+        href: 'https://ant.design',
148
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
149
+        name: 'TradeCode 91',
150
+        owner: '曲丽丽',
151
+        desc: '这是一段描述',
152
+        callNo: 959,
153
+        status: '0',
154
+        updatedAt: '2022-12-06T05:00:57.040Z',
155
+        createdAt: '2022-12-06T05:00:57.040Z',
156
+        progress: 66,
157
+      },
158
+      {
159
+        key: 90,
160
+        disabled: true,
161
+        href: 'https://ant.design',
162
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
163
+        name: 'TradeCode 90',
164
+        owner: '曲丽丽',
165
+        desc: '这是一段描述',
166
+        callNo: 958,
167
+        status: '0',
168
+        updatedAt: '2022-12-06T05:00:57.040Z',
169
+        createdAt: '2022-12-06T05:00:57.040Z',
170
+        progress: 72,
171
+      },
172
+      {
173
+        key: 89,
174
+        disabled: false,
175
+        href: 'https://ant.design',
176
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
177
+        name: 'TradeCode 89',
178
+        owner: '曲丽丽',
179
+        desc: '这是一段描述',
180
+        callNo: 301,
181
+        status: '2',
182
+        updatedAt: '2022-12-06T05:00:57.040Z',
183
+        createdAt: '2022-12-06T05:00:57.040Z',
184
+        progress: 2,
185
+      },
186
+      {
187
+        key: 88,
188
+        disabled: false,
189
+        href: 'https://ant.design',
190
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
191
+        name: 'TradeCode 88',
192
+        owner: '曲丽丽',
193
+        desc: '这是一段描述',
194
+        callNo: 277,
195
+        status: '1',
196
+        updatedAt: '2022-12-06T05:00:57.040Z',
197
+        createdAt: '2022-12-06T05:00:57.040Z',
198
+        progress: 12,
199
+      },
200
+      {
201
+        key: 87,
202
+        disabled: false,
203
+        href: 'https://ant.design',
204
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
205
+        name: 'TradeCode 87',
206
+        owner: '曲丽丽',
207
+        desc: '这是一段描述',
208
+        callNo: 810,
209
+        status: '1',
210
+        updatedAt: '2022-12-06T05:00:57.040Z',
211
+        createdAt: '2022-12-06T05:00:57.040Z',
212
+        progress: 82,
213
+      },
214
+      {
215
+        key: 86,
216
+        disabled: false,
217
+        href: 'https://ant.design',
218
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
219
+        name: 'TradeCode 86',
220
+        owner: '曲丽丽',
221
+        desc: '这是一段描述',
222
+        callNo: 780,
223
+        status: '3',
224
+        updatedAt: '2022-12-06T05:00:57.040Z',
225
+        createdAt: '2022-12-06T05:00:57.040Z',
226
+        progress: 22,
227
+      },
228
+      {
229
+        key: 85,
230
+        disabled: false,
231
+        href: 'https://ant.design',
232
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
233
+        name: 'TradeCode 85',
234
+        owner: '曲丽丽',
235
+        desc: '这是一段描述',
236
+        callNo: 705,
237
+        status: '3',
238
+        updatedAt: '2022-12-06T05:00:57.040Z',
239
+        createdAt: '2022-12-06T05:00:57.040Z',
240
+        progress: 12,
241
+      },
242
+      {
243
+        key: 84,
244
+        disabled: true,
245
+        href: 'https://ant.design',
246
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
247
+        name: 'TradeCode 84',
248
+        owner: '曲丽丽',
249
+        desc: '这是一段描述',
250
+        callNo: 203,
251
+        status: '0',
252
+        updatedAt: '2022-12-06T05:00:57.040Z',
253
+        createdAt: '2022-12-06T05:00:57.040Z',
254
+        progress: 79,
255
+      },
256
+      {
257
+        key: 83,
258
+        disabled: false,
259
+        href: 'https://ant.design',
260
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
261
+        name: 'TradeCode 83',
262
+        owner: '曲丽丽',
263
+        desc: '这是一段描述',
264
+        callNo: 491,
265
+        status: '2',
266
+        updatedAt: '2022-12-06T05:00:57.040Z',
267
+        createdAt: '2022-12-06T05:00:57.040Z',
268
+        progress: 59,
269
+      },
270
+      {
271
+        key: 82,
272
+        disabled: false,
273
+        href: 'https://ant.design',
274
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
275
+        name: 'TradeCode 82',
276
+        owner: '曲丽丽',
277
+        desc: '这是一段描述',
278
+        callNo: 73,
279
+        status: '0',
280
+        updatedAt: '2022-12-06T05:00:57.040Z',
281
+        createdAt: '2022-12-06T05:00:57.040Z',
282
+        progress: 100,
283
+      },
284
+      {
285
+        key: 81,
286
+        disabled: false,
287
+        href: 'https://ant.design',
288
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
289
+        name: 'TradeCode 81',
290
+        owner: '曲丽丽',
291
+        desc: '这是一段描述',
292
+        callNo: 406,
293
+        status: '3',
294
+        updatedAt: '2022-12-06T05:00:57.040Z',
295
+        createdAt: '2022-12-06T05:00:57.040Z',
296
+        progress: 61,
297
+      },
298
+      {
299
+        key: 80,
300
+        disabled: false,
301
+        href: 'https://ant.design',
302
+        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
303
+        name: 'TradeCode 80',
304
+        owner: '曲丽丽',
305
+        desc: '这是一段描述',
306
+        callNo: 112,
307
+        status: '2',
308
+        updatedAt: '2022-12-06T05:00:57.040Z',
309
+        createdAt: '2022-12-06T05:00:57.040Z',
310
+        progress: 20,
311
+      },
312
+    ],
313
+    total: 100,
314
+    success: true,
315
+    pageSize: 20,
316
+    current: 1,
317
+  },
318
+  'POST /api/login/outLogin': { data: {}, success: true },
319
+  'POST /api/login/account': {
320
+    status: 'ok',
321
+    type: 'account',
322
+    currentAuthority: 'admin',
323
+  },
324
+};

+ 5
- 0
mock/route.ts Прегледај датотеку

@@ -0,0 +1,5 @@
1
+export default {
2
+  '/api/auth_routes': {
3
+    '/form/advanced-form': { authority: ['admin', 'user'] },
4
+  },
5
+};

+ 203
- 0
mock/user.ts Прегледај датотеку

@@ -0,0 +1,203 @@
1
+import { Request, Response } from 'express';
2
+
3
+const waitTime = (time: number = 100) => {
4
+  return new Promise((resolve) => {
5
+    setTimeout(() => {
6
+      resolve(true);
7
+    }, time);
8
+  });
9
+};
10
+
11
+async function getFakeCaptcha(req: Request, res: Response) {
12
+  await waitTime(2000);
13
+  return res.json('captcha-xxx');
14
+}
15
+
16
+const { ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION } = process.env;
17
+
18
+/**
19
+ * 当前用户的权限,如果为空代表没登录
20
+ * current user access, if is '', user need login
21
+ * 如果是 pro 的预览,默认是有权限的
22
+ */
23
+let access = ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site' ? 'admin' : '';
24
+
25
+const getAccess = () => {
26
+  return access;
27
+};
28
+
29
+// 代码中会兼容本地 service mock 以及部署站点的静态数据
30
+export default {
31
+  // 支持值为 Object 和 Array
32
+  'GET /api/currentUser': (req: Request, res: Response) => {
33
+    if (!getAccess()) {
34
+      res.status(401).send({
35
+        data: {
36
+          isLogin: false,
37
+        },
38
+        errorCode: '401',
39
+        errorMessage: '请先登录!',
40
+        success: true,
41
+      });
42
+      return;
43
+    }
44
+    res.send({
45
+      success: true,
46
+      data: {
47
+        name: 'Serati Ma',
48
+        avatar: 'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
49
+        userid: '00000001',
50
+        email: 'antdesign@alipay.com',
51
+        signature: '海纳百川,有容乃大',
52
+        title: '交互专家',
53
+        group: '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
54
+        tags: [
55
+          {
56
+            key: '0',
57
+            label: '很有想法的',
58
+          },
59
+          {
60
+            key: '1',
61
+            label: '专注设计',
62
+          },
63
+          {
64
+            key: '2',
65
+            label: '辣~',
66
+          },
67
+          {
68
+            key: '3',
69
+            label: '大长腿',
70
+          },
71
+          {
72
+            key: '4',
73
+            label: '川妹子',
74
+          },
75
+          {
76
+            key: '5',
77
+            label: '海纳百川',
78
+          },
79
+        ],
80
+        notifyCount: 12,
81
+        unreadCount: 11,
82
+        country: 'China',
83
+        access: getAccess(),
84
+        geographic: {
85
+          province: {
86
+            label: '浙江省',
87
+            key: '330000',
88
+          },
89
+          city: {
90
+            label: '杭州市',
91
+            key: '330100',
92
+          },
93
+        },
94
+        address: '西湖区工专路 77 号',
95
+        phone: '0752-268888888',
96
+      },
97
+    });
98
+  },
99
+  // GET POST 可省略
100
+  'GET /api/users': [
101
+    {
102
+      key: '1',
103
+      name: 'John Brown',
104
+      age: 32,
105
+      address: 'New York No. 1 Lake Park',
106
+    },
107
+    {
108
+      key: '2',
109
+      name: 'Jim Green',
110
+      age: 42,
111
+      address: 'London No. 1 Lake Park',
112
+    },
113
+    {
114
+      key: '3',
115
+      name: 'Joe Black',
116
+      age: 32,
117
+      address: 'Sidney No. 1 Lake Park',
118
+    },
119
+  ],
120
+  'POST /api/login/account': async (req: Request, res: Response) => {
121
+    const { password, username, type } = req.body;
122
+    await waitTime(2000);
123
+    if (password === 'ant.design' && username === 'admin') {
124
+      res.send({
125
+        status: 'ok',
126
+        type,
127
+        currentAuthority: 'admin',
128
+      });
129
+      access = 'admin';
130
+      return;
131
+    }
132
+    if (password === 'ant.design' && username === 'user') {
133
+      res.send({
134
+        status: 'ok',
135
+        type,
136
+        currentAuthority: 'user',
137
+      });
138
+      access = 'user';
139
+      return;
140
+    }
141
+    if (type === 'mobile') {
142
+      res.send({
143
+        status: 'ok',
144
+        type,
145
+        currentAuthority: 'admin',
146
+      });
147
+      access = 'admin';
148
+      return;
149
+    }
150
+
151
+    res.send({
152
+      status: 'error',
153
+      type,
154
+      currentAuthority: 'guest',
155
+    });
156
+    access = 'guest';
157
+  },
158
+  'POST /api/login/outLogin': (req: Request, res: Response) => {
159
+    access = '';
160
+    res.send({ data: {}, success: true });
161
+  },
162
+  'POST /api/register': (req: Request, res: Response) => {
163
+    res.send({ status: 'ok', currentAuthority: 'user', success: true });
164
+  },
165
+  'GET /api/500': (req: Request, res: Response) => {
166
+    res.status(500).send({
167
+      timestamp: 1513932555104,
168
+      status: 500,
169
+      error: 'error',
170
+      message: 'error',
171
+      path: '/base/category/list',
172
+    });
173
+  },
174
+  'GET /api/404': (req: Request, res: Response) => {
175
+    res.status(404).send({
176
+      timestamp: 1513932643431,
177
+      status: 404,
178
+      error: 'Not Found',
179
+      message: 'No message available',
180
+      path: '/base/category/list/2121212',
181
+    });
182
+  },
183
+  'GET /api/403': (req: Request, res: Response) => {
184
+    res.status(403).send({
185
+      timestamp: 1513932555104,
186
+      status: 403,
187
+      error: 'Forbidden',
188
+      message: 'Forbidden',
189
+      path: '/base/category/list',
190
+    });
191
+  },
192
+  'GET /api/401': (req: Request, res: Response) => {
193
+    res.status(401).send({
194
+      timestamp: 1513932555104,
195
+      status: 401,
196
+      error: 'Unauthorized',
197
+      message: 'Unauthorized',
198
+      path: '/base/category/list',
199
+    });
200
+  },
201
+
202
+  'GET  /api/login/captcha': getFakeCaptcha,
203
+};

+ 101
- 0
package.json Прегледај датотеку

@@ -0,0 +1,101 @@
1
+{
2
+  "name": "ant-design-pro",
3
+  "version": "6.0.0",
4
+  "private": true,
5
+  "description": "An out-of-box UI solution for enterprise applications",
6
+  "scripts": {
7
+    "analyze": "cross-env ANALYZE=1 max build",
8
+    "build": "max build",
9
+    "deploy": "npm run build && npm run gh-pages",
10
+    "dev": "npm run start:dev",
11
+    "gh-pages": "gh-pages -d dist",
12
+    "i18n-remove": "pro i18n-remove --locale=zh-CN --write",
13
+    "postinstall": "max setup",
14
+    "jest": "jest",
15
+    "lint": "npm run lint:js && npm run lint:prettier && npm run tsc",
16
+    "lint-staged": "lint-staged",
17
+    "lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx ",
18
+    "lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src ",
19
+    "lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
20
+    "lint:prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto",
21
+    "openapi": "max openapi",
22
+    "prepare": "husky install",
23
+    "prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"",
24
+    "preview": "npm run build && max preview --port 8000",
25
+    "record": "cross-env NODE_ENV=development REACT_APP_ENV=test max record --scene=login",
26
+    "serve": "umi-serve",
27
+    "start": "cross-env UMI_ENV=dev max dev",
28
+    "start:dev": "cross-env REACT_APP_ENV=dev MOCK=none UMI_ENV=dev max dev",
29
+    "start:no-mock": "cross-env MOCK=none UMI_ENV=dev max dev",
30
+    "start:pre": "cross-env REACT_APP_ENV=pre UMI_ENV=dev max dev",
31
+    "start:test": "cross-env REACT_APP_ENV=test MOCK=none UMI_ENV=dev max dev",
32
+    "test": "jest",
33
+    "test:coverage": "npm run jest -- --coverage",
34
+    "test:update": "npm run jest -- -u",
35
+    "tsc": "tsc --noEmit"
36
+  },
37
+  "lint-staged": {
38
+    "**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js",
39
+    "**/*.{js,jsx,tsx,ts,less,md,json}": [
40
+      "prettier --write"
41
+    ]
42
+  },
43
+  "browserslist": [
44
+    "> 1%",
45
+    "last 2 versions",
46
+    "not ie <= 10"
47
+  ],
48
+  "dependencies": {
49
+    "@ant-design/icons": "^4.8.1",
50
+    "@ant-design/pro-components": "^2.6.48",
51
+    "@umijs/route-utils": "^2.2.2",
52
+    "antd": "^5.13.2",
53
+    "antd-style": "^3.6.1",
54
+    "classnames": "^2.5.1",
55
+    "echarts": "^5.5.1",
56
+    "echarts-for-react": "^3.0.2",
57
+    "lodash": "^4.17.21",
58
+    "moment": "^2.30.1",
59
+    "omit.js": "^2.0.2",
60
+    "querystring": "^0.2.1",
61
+    "rc-menu": "^9.12.4",
62
+    "rc-util": "^5.38.1",
63
+    "react": "^18.2.0",
64
+    "react-dom": "^18.2.0",
65
+    "react-helmet-async": "^1.3.0"
66
+  },
67
+  "devDependencies": {
68
+    "@ant-design/pro-cli": "^3.3.0",
69
+    "@testing-library/react": "^13.4.0",
70
+    "@types/classnames": "^2.3.1",
71
+    "@types/express": "^4.17.21",
72
+    "@types/history": "^4.7.11",
73
+    "@types/jest": "^29.5.11",
74
+    "@types/lodash": "^4.14.202",
75
+    "@types/react": "^18.2.48",
76
+    "@types/react-dom": "^18.2.18",
77
+    "@types/react-helmet": "^6.1.11",
78
+    "@umijs/fabric": "^2.14.1",
79
+    "@umijs/lint": "^4.1.1",
80
+    "@umijs/max": "^4.1.1",
81
+    "cross-env": "^7.0.3",
82
+    "eslint": "^8.56.0",
83
+    "express": "^4.18.2",
84
+    "gh-pages": "^3.2.3",
85
+    "husky": "^7.0.4",
86
+    "jest": "^29.7.0",
87
+    "jest-environment-jsdom": "^29.7.0",
88
+    "lint-staged": "^10.5.4",
89
+    "mockjs": "^1.1.0",
90
+    "prettier": "^2.8.8",
91
+    "react-dev-inspector": "^1.9.0",
92
+    "swagger-ui-dist": "^4.19.1",
93
+    "ts-node": "^10.9.2",
94
+    "typescript": "^5.3.3",
95
+    "umi-presets-pro": "^2.0.3",
96
+    "umi-serve": "^1.9.11"
97
+  },
98
+  "engines": {
99
+    "node": ">=12.0.0"
100
+  }
101
+}

+ 21929
- 0
pnpm-lock.yaml
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


BIN
public/favicon.ico Прегледај датотеку


BIN
public/images/bj.jpg Прегледај датотеку


BIN
public/images/frame.png Прегледај датотеку


BIN
public/images/logo.png Прегледај датотеку


BIN
public/images/magnifier.png Прегледај датотеку


BIN
public/images/occupation.jpg Прегледај датотеку


BIN
public/images/popbj.png Прегледај датотеку


BIN
public/images/title.png Прегледај датотеку


BIN
public/images/videoMask.png Прегледај датотеку


+ 202
- 0
public/scripts/loading.js Прегледај датотеку

@@ -0,0 +1,202 @@
1
+/**
2
+ * loading 占位
3
+ * 解决首次加载时白屏的问题
4
+ */
5
+ (function () {
6
+  const _root = document.querySelector('#root');
7
+  if (_root && _root.innerHTML === '') {
8
+    _root.innerHTML = `
9
+      <style>
10
+        html,
11
+        body,
12
+        #root {
13
+          height: 100%;
14
+          margin: 0;
15
+          padding: 0;
16
+        }
17
+        #root {
18
+          background-repeat: no-repeat;
19
+          background-size: 100% auto;
20
+        }
21
+
22
+        .loading-title {
23
+          font-size: 1.1rem;
24
+        }
25
+
26
+        .loading-sub-title {
27
+          margin-top: 20px;
28
+          font-size: 1rem;
29
+          color: #888;
30
+        }
31
+
32
+        .page-loading-warp {
33
+          display: flex;
34
+          align-items: center;
35
+          justify-content: center;
36
+          padding: 26px;
37
+        }
38
+        .ant-spin {
39
+          position: absolute;
40
+          display: none;
41
+          -webkit-box-sizing: border-box;
42
+          box-sizing: border-box;
43
+          margin: 0;
44
+          padding: 0;
45
+          color: rgba(0, 0, 0, 0.65);
46
+          color: #1890ff;
47
+          font-size: 14px;
48
+          font-variant: tabular-nums;
49
+          line-height: 1.5;
50
+          text-align: center;
51
+          list-style: none;
52
+          opacity: 0;
53
+          -webkit-transition: -webkit-transform 0.3s
54
+            cubic-bezier(0.78, 0.14, 0.15, 0.86);
55
+          transition: -webkit-transform 0.3s
56
+            cubic-bezier(0.78, 0.14, 0.15, 0.86);
57
+          transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);
58
+          transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86),
59
+            -webkit-transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);
60
+          -webkit-font-feature-settings: "tnum";
61
+          font-feature-settings: "tnum";
62
+        }
63
+
64
+        .ant-spin-spinning {
65
+          position: static;
66
+          display: inline-block;
67
+          opacity: 1;
68
+        }
69
+
70
+        .ant-spin-dot {
71
+          position: relative;
72
+          display: inline-block;
73
+          width: 20px;
74
+          height: 20px;
75
+          font-size: 20px;
76
+        }
77
+
78
+        .ant-spin-dot-item {
79
+          position: absolute;
80
+          display: block;
81
+          width: 9px;
82
+          height: 9px;
83
+          background-color: #1890ff;
84
+          border-radius: 100%;
85
+          -webkit-transform: scale(0.75);
86
+          -ms-transform: scale(0.75);
87
+          transform: scale(0.75);
88
+          -webkit-transform-origin: 50% 50%;
89
+          -ms-transform-origin: 50% 50%;
90
+          transform-origin: 50% 50%;
91
+          opacity: 0.3;
92
+          -webkit-animation: antspinmove 1s infinite linear alternate;
93
+          animation: antSpinMove 1s infinite linear alternate;
94
+        }
95
+
96
+        .ant-spin-dot-item:nth-child(1) {
97
+          top: 0;
98
+          left: 0;
99
+        }
100
+
101
+        .ant-spin-dot-item:nth-child(2) {
102
+          top: 0;
103
+          right: 0;
104
+          -webkit-animation-delay: 0.4s;
105
+          animation-delay: 0.4s;
106
+        }
107
+
108
+        .ant-spin-dot-item:nth-child(3) {
109
+          right: 0;
110
+          bottom: 0;
111
+          -webkit-animation-delay: 0.8s;
112
+          animation-delay: 0.8s;
113
+        }
114
+
115
+        .ant-spin-dot-item:nth-child(4) {
116
+          bottom: 0;
117
+          left: 0;
118
+          -webkit-animation-delay: 1.2s;
119
+          animation-delay: 1.2s;
120
+        }
121
+
122
+        .ant-spin-dot-spin {
123
+          -webkit-transform: rotate(45deg);
124
+          -ms-transform: rotate(45deg);
125
+          transform: rotate(45deg);
126
+          -webkit-animation: antrotate 1.2s infinite linear;
127
+          animation: antRotate 1.2s infinite linear;
128
+        }
129
+
130
+        .ant-spin-lg .ant-spin-dot {
131
+          width: 32px;
132
+          height: 32px;
133
+          font-size: 32px;
134
+        }
135
+
136
+        .ant-spin-lg .ant-spin-dot i {
137
+          width: 14px;
138
+          height: 14px;
139
+        }
140
+
141
+        @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
142
+          .ant-spin-blur {
143
+            background: #fff;
144
+            opacity: 0.5;
145
+          }
146
+        }
147
+
148
+        @-webkit-keyframes antSpinMove {
149
+          to {
150
+            opacity: 1;
151
+          }
152
+        }
153
+
154
+        @keyframes antSpinMove {
155
+          to {
156
+            opacity: 1;
157
+          }
158
+        }
159
+
160
+        @-webkit-keyframes antRotate {
161
+          to {
162
+            -webkit-transform: rotate(405deg);
163
+            transform: rotate(405deg);
164
+          }
165
+        }
166
+
167
+        @keyframes antRotate {
168
+          to {
169
+            -webkit-transform: rotate(405deg);
170
+            transform: rotate(405deg);
171
+          }
172
+        }
173
+      </style>
174
+
175
+      <div style="
176
+        display: flex;
177
+        flex-direction: column;
178
+        align-items: center;
179
+        justify-content: center;
180
+        height: 100%;
181
+        min-height: 362px;
182
+      ">
183
+        <div class="page-loading-warp">
184
+          <div class="ant-spin ant-spin-lg ant-spin-spinning">
185
+            <span class="ant-spin-dot ant-spin-dot-spin">
186
+              <i class="ant-spin-dot-item"></i>
187
+              <i class="ant-spin-dot-item"></i>
188
+              <i class="ant-spin-dot-item"></i>
189
+              <i class="ant-spin-dot-item"></i>
190
+            </span>
191
+          </div>
192
+        </div>
193
+        <div class="loading-title">
194
+          正在加载资源
195
+        </div>
196
+        <div class="loading-sub-title">
197
+          初次加载资源可能需要较多时间 请耐心等待
198
+        </div>
199
+      </div>
200
+    `;
201
+  }
202
+})();

BIN
public/video/animation.mp4 Прегледај датотеку


BIN
public/video/maps.mp4 Прегледај датотеку


BIN
public/video/mapxl.mp4 Прегледај датотеку


+ 9
- 0
src/access.ts Прегледај датотеку

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

+ 138
- 0
src/app.tsx Прегледај датотеку

@@ -0,0 +1,138 @@
1
+import { Footer, Question, SelectLang, AvatarDropdown, AvatarName } from '@/components';
2
+import { LinkOutlined } from '@ant-design/icons';
3
+import type { Settings as LayoutSettings } from '@ant-design/pro-components';
4
+import { SettingDrawer } from '@ant-design/pro-components';
5
+import type { RequestConfig, RunTimeLayoutConfig } from '@umijs/max';
6
+import { history, Link } from '@umijs/max';
7
+import defaultSettings from '../config/defaultSettings';
8
+import { errorConfig } from './requestErrorConfig';
9
+import { currentUser as queryCurrentUser } from '@/services/ant-design-pro/api';
10
+import React from 'react';
11
+const isDev = process.env.NODE_ENV === 'development';
12
+const loginPath = '/user/login';
13
+
14
+/**
15
+ * @see  https://umijs.org/zh-CN/plugins/plugin-initial-state
16
+ * */
17
+export async function getInitialState(): Promise<{
18
+  settings?: Partial<LayoutSettings>;
19
+  currentUser?: API.CurrentUser;
20
+  loading?: boolean;
21
+  fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;
22
+}> {
23
+  const fetchUserInfo = async () => {
24
+    // try {
25
+    //   const msg = await queryCurrentUser({
26
+    //     skipErrorHandler: true,
27
+    //   });
28
+    //   return msg.data;
29
+    // } catch (error) {
30
+    //   history.push(loginPath);
31
+    // }
32
+    return undefined;
33
+  };
34
+  // 如果不是登录页面,执行
35
+  const { location } = history;
36
+  // if (location.pathname !== loginPath) {
37
+  //   const currentUser = await fetchUserInfo();
38
+  //   return {
39
+  //     fetchUserInfo,
40
+  //     currentUser,
41
+  //     settings: defaultSettings as Partial<LayoutSettings>,
42
+  //   };
43
+  // }
44
+  return {
45
+    fetchUserInfo,
46
+    settings: defaultSettings as Partial<LayoutSettings>,
47
+  };
48
+}
49
+
50
+// ProLayout 支持的api https://procomponents.ant.design/components/layout
51
+export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
52
+  return {
53
+    actionsRender: () => [<Question key="doc" />, <SelectLang key="SelectLang" />],
54
+    avatarProps: {
55
+      src: initialState?.currentUser?.avatar,
56
+      title: <AvatarName />,
57
+      render: (_, avatarChildren) => {
58
+        return <AvatarDropdown>{avatarChildren}</AvatarDropdown>;
59
+      },
60
+    },
61
+    waterMarkProps: {
62
+      content: initialState?.currentUser?.name,
63
+    },
64
+    footerRender: () => <Footer />,
65
+    onPageChange: () => {
66
+      const { location } = history;
67
+      // 如果没有登录,重定向到 login
68
+      // if (!initialState?.currentUser && location.pathname !== loginPath) {
69
+      //   history.push(loginPath);
70
+      // }
71
+    },
72
+    bgLayoutImgList: [
73
+      {
74
+        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/D2LWSqNny4sAAAAAAAAAAAAAFl94AQBr',
75
+        left: 85,
76
+        bottom: 100,
77
+        height: '303px',
78
+      },
79
+      {
80
+        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/C2TWRpJpiC0AAAAAAAAAAAAAFl94AQBr',
81
+        bottom: -68,
82
+        right: -45,
83
+        height: '303px',
84
+      },
85
+      {
86
+        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/F6vSTbj8KpYAAAAAAAAAAAAAFl94AQBr',
87
+        bottom: 0,
88
+        left: 0,
89
+        width: '331px',
90
+      },
91
+    ],
92
+    links: isDev
93
+      ? [
94
+          <Link key="openapi" to="/umi/plugin/openapi" target="_blank">
95
+            <LinkOutlined />
96
+            <span>OpenAPI 文档</span>
97
+          </Link>,
98
+        ]
99
+      : [],
100
+    menuHeaderRender: undefined,
101
+    // 自定义 403 页面
102
+    // unAccessible: <div>unAccessible</div>,
103
+    // 增加一个 loading 的状态
104
+    childrenRender: (children) => {
105
+      // if (initialState?.loading) return <PageLoading />;
106
+      return (
107
+        <>
108
+          {children}
109
+          {isDev && (
110
+            <SettingDrawer
111
+              disableUrlParams
112
+              enableDarkTheme
113
+              settings={initialState?.settings}
114
+              onSettingChange={(settings) => {
115
+                setInitialState((preInitialState) => ({
116
+                  ...preInitialState,
117
+                  settings,
118
+                }));
119
+              }}
120
+            />
121
+          )}
122
+        </>
123
+      );
124
+    },
125
+    ...initialState?.settings,
126
+  };
127
+};
128
+
129
+
130
+/**
131
+ * @name request 配置,可以配置错误处理
132
+ * 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。
133
+ * @doc https://umijs.org/docs/max/request#配置
134
+ */
135
+export const request:RequestConfig  = {
136
+
137
+  ...errorConfig,
138
+};

+ 35
- 0
src/components/Footer/index.tsx Прегледај датотеку

@@ -0,0 +1,35 @@
1
+import { GithubOutlined } from '@ant-design/icons';
2
+import { DefaultFooter } from '@ant-design/pro-components';
3
+import React from 'react';
4
+
5
+const Footer: React.FC = () => {
6
+  return (
7
+    <DefaultFooter
8
+      style={{
9
+        background: 'none',
10
+      }}
11
+      links={[
12
+        {
13
+          key: 'Ant Design Pro',
14
+          title: 'Ant Design Pro',
15
+          href: 'https://pro.ant.design',
16
+          blankTarget: true,
17
+        },
18
+        {
19
+          key: 'github',
20
+          title: <GithubOutlined />,
21
+          href: 'https://github.com/ant-design/ant-design-pro',
22
+          blankTarget: true,
23
+        },
24
+        {
25
+          key: 'Ant Design',
26
+          title: 'Ant Design',
27
+          href: 'https://ant.design',
28
+          blankTarget: true,
29
+        },
30
+      ]}
31
+    />
32
+  );
33
+};
34
+
35
+export default Footer;

+ 27
- 0
src/components/HeaderDropdown/index.tsx Прегледај датотеку

@@ -0,0 +1,27 @@
1
+import { Dropdown } from 'antd';
2
+import type { DropDownProps } from 'antd/es/dropdown';
3
+import React from 'react';
4
+import { createStyles } from 'antd-style';
5
+import classNames from 'classnames';
6
+
7
+const useStyles = createStyles(({ token }) => {
8
+  return {
9
+    dropdown: {
10
+      [`@media screen and (max-width: ${token.screenXS}px)`]: {
11
+        width: '100%',
12
+      },
13
+    },
14
+  };
15
+});
16
+
17
+export type HeaderDropdownProps = {
18
+  overlayClassName?: string;
19
+  placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight' | 'bottomCenter';
20
+} & Omit<DropDownProps, 'overlay'>;
21
+
22
+const HeaderDropdown: React.FC<HeaderDropdownProps> = ({ overlayClassName: cls, ...restProps }) => {
23
+  const { styles } = useStyles();
24
+  return <Dropdown overlayClassName={classNames(styles.dropdown, cls)} {...restProps} />;
25
+};
26
+
27
+export default HeaderDropdown;

+ 138
- 0
src/components/RightContent/AvatarDropdown.tsx Прегледај датотеку

@@ -0,0 +1,138 @@
1
+import { outLogin } from '@/services/ant-design-pro/api';
2
+import { LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons';
3
+import { history, useModel } from '@umijs/max';
4
+import { Spin } from 'antd';
5
+import { createStyles } from 'antd-style';
6
+import { stringify } from 'querystring';
7
+import type { MenuInfo } from 'rc-menu/lib/interface';
8
+import React, { useCallback } from 'react';
9
+import { flushSync } from 'react-dom';
10
+import HeaderDropdown from '../HeaderDropdown';
11
+
12
+export type GlobalHeaderRightProps = {
13
+  menu?: boolean;
14
+  children?: React.ReactNode;
15
+};
16
+
17
+export const AvatarName = () => {
18
+  const { initialState } = useModel('@@initialState');
19
+  const { currentUser } = initialState || {};
20
+  return <span className="anticon">{currentUser?.name}</span>;
21
+};
22
+
23
+const useStyles = createStyles(({ token }) => {
24
+  return {
25
+    action: {
26
+      display: 'flex',
27
+      height: '48px',
28
+      marginLeft: 'auto',
29
+      overflow: 'hidden',
30
+      alignItems: 'center',
31
+      padding: '0 8px',
32
+      cursor: 'pointer',
33
+      borderRadius: token.borderRadius,
34
+      '&:hover': {
35
+        backgroundColor: token.colorBgTextHover,
36
+      },
37
+    },
38
+  };
39
+});
40
+
41
+export const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu, children }) => {
42
+  /**
43
+   * 退出登录,并且将当前的 url 保存
44
+   */
45
+  const loginOut = async () => {
46
+    await outLogin();
47
+    const { search, pathname } = window.location;
48
+    const urlParams = new URL(window.location.href).searchParams;
49
+    /** 此方法会跳转到 redirect 参数所在的位置 */
50
+    const redirect = urlParams.get('redirect');
51
+    // Note: There may be security issues, please note
52
+    if (window.location.pathname !== '/user/login' && !redirect) {
53
+      history.replace({
54
+        pathname: '/user/login',
55
+        search: stringify({
56
+          redirect: pathname + search,
57
+        }),
58
+      });
59
+    }
60
+  };
61
+  const { styles } = useStyles();
62
+
63
+  const { initialState, setInitialState } = useModel('@@initialState');
64
+
65
+  const onMenuClick = useCallback(
66
+    (event: MenuInfo) => {
67
+      const { key } = event;
68
+      if (key === 'logout') {
69
+        flushSync(() => {
70
+          setInitialState((s) => ({ ...s, currentUser: undefined }));
71
+        });
72
+        loginOut();
73
+        return;
74
+      }
75
+      history.push(`/account/${key}`);
76
+    },
77
+    [setInitialState],
78
+  );
79
+
80
+  const loading = (
81
+    <span className={styles.action}>
82
+      <Spin
83
+        size="small"
84
+        style={{
85
+          marginLeft: 8,
86
+          marginRight: 8,
87
+        }}
88
+      />
89
+    </span>
90
+  );
91
+
92
+  if (!initialState) {
93
+    return loading;
94
+  }
95
+
96
+  const { currentUser } = initialState;
97
+
98
+  if (!currentUser || !currentUser.name) {
99
+    return loading;
100
+  }
101
+
102
+  const menuItems = [
103
+    ...(menu
104
+      ? [
105
+          {
106
+            key: 'center',
107
+            icon: <UserOutlined />,
108
+            label: '个人中心',
109
+          },
110
+          {
111
+            key: 'settings',
112
+            icon: <SettingOutlined />,
113
+            label: '个人设置',
114
+          },
115
+          {
116
+            type: 'divider' as const,
117
+          },
118
+        ]
119
+      : []),
120
+    {
121
+      key: 'logout',
122
+      icon: <LogoutOutlined />,
123
+      label: '退出登录',
124
+    },
125
+  ];
126
+
127
+  return (
128
+    <HeaderDropdown
129
+      menu={{
130
+        selectedKeys: [],
131
+        onClick: onMenuClick,
132
+        items: menuItems,
133
+      }}
134
+    >
135
+      {children}
136
+    </HeaderDropdown>
137
+  );
138
+};

+ 31
- 0
src/components/RightContent/index.tsx Прегледај датотеку

@@ -0,0 +1,31 @@
1
+import { QuestionCircleOutlined } from '@ant-design/icons';
2
+import { SelectLang as UmiSelectLang } from '@umijs/max';
3
+import React from 'react';
4
+
5
+export type SiderTheme = 'light' | 'dark';
6
+
7
+export const SelectLang = () => {
8
+  return (
9
+    <UmiSelectLang
10
+      style={{
11
+        padding: 4,
12
+      }}
13
+    />
14
+  );
15
+};
16
+
17
+export const Question = () => {
18
+  return (
19
+    <div
20
+      style={{
21
+        display: 'flex',
22
+        height: 26,
23
+      }}
24
+      onClick={() => {
25
+        window.open('https://pro.ant.design/docs/getting-started');
26
+      }}
27
+    >
28
+      <QuestionCircleOutlined />
29
+    </div>
30
+  );
31
+};

+ 12
- 0
src/components/index.ts Прегледај датотеку

@@ -0,0 +1,12 @@
1
+/**
2
+ * 这个文件作为组件的目录
3
+ * 目的是统一管理对外输出的组件,方便分类
4
+ */
5
+/**
6
+ * 布局组件
7
+ */
8
+import Footer from './Footer';
9
+import { Question, SelectLang } from './RightContent';
10
+import { AvatarDropdown, AvatarName } from './RightContent/AvatarDropdown';
11
+
12
+export { Footer, Question, SelectLang, AvatarDropdown, AvatarName };

+ 54
- 0
src/global.less Прегледај датотеку

@@ -0,0 +1,54 @@
1
+html,
2
+body,
3
+#root {
4
+  height: 100%;
5
+  margin: 0;
6
+  padding: 0;
7
+  // font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
8
+  //   'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
9
+  //   'Noto Color Emoji';
10
+    background-color: #e4e4ec;
11
+}
12
+
13
+.colorWeak {
14
+  filter: invert(80%);
15
+}
16
+
17
+.ant-layout {
18
+  min-height: 100vh;
19
+}
20
+.ant-pro-sider.ant-layout-sider.ant-pro-sider-fixed {
21
+  left: unset;
22
+}
23
+
24
+canvas {
25
+  display: block;
26
+}
27
+
28
+body {
29
+  text-rendering: optimizeLegibility;
30
+  -webkit-font-smoothing: antialiased;
31
+  -moz-osx-font-smoothing: grayscale;
32
+}
33
+
34
+ul,
35
+ol {
36
+  list-style: none;
37
+}
38
+
39
+@media (max-width: 768px) {
40
+  .ant-table {
41
+    width: 100%;
42
+    overflow-x: auto;
43
+    &-thead > tr,
44
+    &-tbody > tr {
45
+      > th,
46
+      > td {
47
+        white-space: pre;
48
+        > span {
49
+          display: block;
50
+        }
51
+      }
52
+    }
53
+  }
54
+}

+ 91
- 0
src/global.tsx Прегледај датотеку

@@ -0,0 +1,91 @@
1
+import { useIntl } from '@umijs/max';
2
+import { Button, message, notification } from 'antd';
3
+import defaultSettings from '../config/defaultSettings';
4
+
5
+const { pwa } = defaultSettings;
6
+const isHttps = document.location.protocol === 'https:';
7
+
8
+const clearCache = () => {
9
+  // remove all caches
10
+  if (window.caches) {
11
+    caches
12
+      .keys()
13
+      .then((keys) => {
14
+        keys.forEach((key) => {
15
+          caches.delete(key);
16
+        });
17
+      })
18
+      .catch((e) => console.log(e));
19
+  }
20
+};
21
+
22
+// if pwa is true
23
+if (pwa) {
24
+  // Notify user if offline now
25
+  window.addEventListener('sw.offline', () => {
26
+    message.warning(useIntl().formatMessage({ id: 'app.pwa.offline' }));
27
+  });
28
+
29
+  // Pop up a prompt on the page asking the user if they want to use the latest version
30
+  window.addEventListener('sw.updated', (event: Event) => {
31
+    const e = event as CustomEvent;
32
+    const reloadSW = async () => {
33
+      // Check if there is sw whose state is waiting in ServiceWorkerRegistration
34
+      // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
35
+      const worker = e.detail && e.detail.waiting;
36
+      if (!worker) {
37
+        return true;
38
+      }
39
+      // Send skip-waiting event to waiting SW with MessageChannel
40
+      await new Promise((resolve, reject) => {
41
+        const channel = new MessageChannel();
42
+        channel.port1.onmessage = (msgEvent) => {
43
+          if (msgEvent.data.error) {
44
+            reject(msgEvent.data.error);
45
+          } else {
46
+            resolve(msgEvent.data);
47
+          }
48
+        };
49
+        worker.postMessage({ type: 'skip-waiting' }, [channel.port2]);
50
+      });
51
+
52
+      clearCache();
53
+      window.location.reload();
54
+      return true;
55
+    };
56
+    const key = `open${Date.now()}`;
57
+    const btn = (
58
+      <Button
59
+        type="primary"
60
+        onClick={() => {
61
+          notification.destroy(key);
62
+          reloadSW();
63
+        }}
64
+      >
65
+        {useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.ok' })}
66
+      </Button>
67
+    );
68
+    notification.open({
69
+      message: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated' }),
70
+      description: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.hint' }),
71
+      btn,
72
+      key,
73
+      onClose: async () => null,
74
+    });
75
+  });
76
+} else if ('serviceWorker' in navigator && isHttps) {
77
+  // unregister service worker
78
+  const { serviceWorker } = navigator;
79
+  if (serviceWorker.getRegistrations) {
80
+    serviceWorker.getRegistrations().then((sws) => {
81
+      sws.forEach((sw) => {
82
+        sw.unregister();
83
+      });
84
+    });
85
+  }
86
+  serviceWorker.getRegistration().then((sw) => {
87
+    if (sw) sw.unregister();
88
+  });
89
+
90
+  clearCache();
91
+}

+ 25
- 0
src/locales/bn-BD.ts Прегледај датотеку

@@ -0,0 +1,25 @@
1
+import component from './bn-BD/component';
2
+import globalHeader from './bn-BD/globalHeader';
3
+import menu from './bn-BD/menu';
4
+import pages from './bn-BD/pages';
5
+import pwa from './bn-BD/pwa';
6
+import settingDrawer from './bn-BD/settingDrawer';
7
+import settings from './bn-BD/settings';
8
+
9
+export default {
10
+  'navBar.lang': 'ভাষা',
11
+  'layout.user.link.help': 'সহায়তা',
12
+  'layout.user.link.privacy': 'গোপনীয়তা',
13
+  'layout.user.link.terms': 'শর্তাদি',
14
+  'app.preview.down.block': 'আপনার স্থানীয় প্রকল্পে এই পৃষ্ঠাটি ডাউনলোড করুন',
15
+  'app.welcome.link.fetch-blocks': 'সমস্ত ব্লক পান',
16
+  'app.welcome.link.block-list':
17
+    '`block` ডেভেলপমেন্ট এর উপর ভিত্তি করে দ্রুত স্ট্যান্ডার্ড, পৃষ্ঠাসমূহ তৈরি করুন।',
18
+  ...globalHeader,
19
+  ...menu,
20
+  ...settingDrawer,
21
+  ...settings,
22
+  ...pwa,
23
+  ...component,
24
+  ...pages,
25
+};

+ 5
- 0
src/locales/bn-BD/component.ts Прегледај датотеку

@@ -0,0 +1,5 @@
1
+export default {
2
+  'component.tagSelect.expand': 'বিস্তৃত',
3
+  'component.tagSelect.collapse': 'সঙ্কুচিত',
4
+  'component.tagSelect.all': 'সব',
5
+};

+ 17
- 0
src/locales/bn-BD/globalHeader.ts Прегледај датотеку

@@ -0,0 +1,17 @@
1
+export default {
2
+  'component.globalHeader.search': 'অনুসন্ধান করুন',
3
+  'component.globalHeader.search.example1': 'অনুসন্ধান উদাহরণ ১',
4
+  'component.globalHeader.search.example2': 'অনুসন্ধান উদাহরণ ২',
5
+  'component.globalHeader.search.example3': 'অনুসন্ধান উদাহরণ ৩',
6
+  'component.globalHeader.help': 'সহায়তা',
7
+  'component.globalHeader.notification': 'বিজ্ঞপ্তি',
8
+  'component.globalHeader.notification.empty': 'আপনি সমস্ত বিজ্ঞপ্তি দেখেছেন।',
9
+  'component.globalHeader.message': 'বার্তা',
10
+  'component.globalHeader.message.empty': 'আপনি সমস্ত বার্তা দেখেছেন।',
11
+  'component.globalHeader.event': 'ঘটনা',
12
+  'component.globalHeader.event.empty': 'আপনি সমস্ত ইভেন্ট দেখেছেন।',
13
+  'component.noticeIcon.clear': 'সাফ',
14
+  'component.noticeIcon.cleared': 'সাফ করা হয়েছে',
15
+  'component.noticeIcon.empty': 'বিজ্ঞপ্তি নেই',
16
+  'component.noticeIcon.view-more': 'আরো দেখুন',
17
+};

+ 52
- 0
src/locales/bn-BD/menu.ts Прегледај датотеку

@@ -0,0 +1,52 @@
1
+export default {
2
+  'menu.welcome': 'স্বাগতম',
3
+  'menu.more-blocks': 'আরও ব্লক',
4
+  'menu.home': 'নীড়',
5
+  'menu.admin': 'অ্যাডমিন',
6
+  'menu.admin.sub-page': 'উপ-পৃষ্ঠা',
7
+  'menu.login': 'প্রবেশ',
8
+  'menu.register': 'নিবন্ধন',
9
+  'menu.register-result': 'নিবন্ধনে ফলাফল',
10
+  'menu.dashboard': 'ড্যাশবোর্ড',
11
+  'menu.dashboard.analysis': 'বিশ্লেষণ',
12
+  'menu.dashboard.monitor': 'নিরীক্ষণ',
13
+  'menu.dashboard.workplace': 'কর্মক্ষেত্র',
14
+  'menu.exception.403': '403',
15
+  'menu.exception.404': '404',
16
+  'menu.exception.500': '500',
17
+  'menu.form': 'ফর্ম',
18
+  'menu.form.basic-form': 'বেসিক ফর্ম',
19
+  'menu.form.step-form': 'পদক্ষেপ ফর্ম',
20
+  'menu.form.step-form.info': 'পদক্ষেপ ফর্ম (স্থানান্তর তথ্য লিখুন)',
21
+  'menu.form.step-form.confirm': 'পদক্ষেপ ফর্ম (স্থানান্তর তথ্য নিশ্চিত করুন)',
22
+  'menu.form.step-form.result': 'পদক্ষেপ ফর্ম (সমাপ্ত)',
23
+  'menu.form.advanced-form': 'উন্নত ফর্ম',
24
+  'menu.list': 'তালিকা',
25
+  'menu.list.table-list': 'অনুসন্ধানের টেবিল',
26
+  'menu.list.basic-list': 'বেসিক তালিকা',
27
+  'menu.list.card-list': 'কার্ডের তালিকা',
28
+  'menu.list.search-list': 'অনুসন্ধানের তালিকা',
29
+  'menu.list.search-list.articles': 'অনুসন্ধানের তালিকা (নিবন্ধসমূহ)',
30
+  'menu.list.search-list.projects': 'অনুসন্ধানের তালিকা (প্রকল্পগুলি)',
31
+  'menu.list.search-list.applications': 'অনুসন্ধানের তালিকা (অ্যাপ্লিকেশন)',
32
+  'menu.profile': 'প্রোফাইল',
33
+  'menu.profile.basic': 'বেসিক প্রোফাইল',
34
+  'menu.profile.advanced': 'উন্নত প্রোফাইল',
35
+  'menu.result': 'ফলাফল',
36
+  'menu.result.success': 'সাফল্য',
37
+  'menu.result.fail': 'ব্যর্থ',
38
+  'menu.exception': 'ব্যতিক্রম',
39
+  'menu.exception.not-permission': '403',
40
+  'menu.exception.not-find': '404',
41
+  'menu.exception.server-error': '500',
42
+  'menu.exception.trigger': 'ট্রিগার',
43
+  'menu.account': 'হিসাব',
44
+  'menu.account.center': 'অ্যাকাউন্ট কেন্দ্র',
45
+  'menu.account.settings': 'অ্যাকাউন্ট সেটিংস',
46
+  'menu.account.trigger': 'ট্রিগার ত্রুটি',
47
+  'menu.account.logout': 'প্রস্থান',
48
+  'menu.editor': 'গ্রাফিক সম্পাদক',
49
+  'menu.editor.flow': 'ফ্লো এডিটর',
50
+  'menu.editor.mind': 'মাইন্ড এডিটর',
51
+  'menu.editor.koni': 'কোনি সম্পাদক',
52
+};

+ 70
- 0
src/locales/bn-BD/pages.ts Прегледај датотеку

@@ -0,0 +1,70 @@
1
+export default {
2
+  'pages.layouts.userLayout.title':
3
+    'পিঁপড়া ডিজাইন হচ্ছে সিহু জেলার সবচেয়ে প্রভাবশালী ওয়েব ডিজাইনের স্পেসিফিকেশন',
4
+  'pages.login.accountLogin.tab': 'অ্যাকাউন্টে লগইন',
5
+  'pages.login.accountLogin.errorMessage': 'ভুল ব্যবহারকারীর নাম/পাসওয়ার্ড(admin/ant.design)',
6
+  'pages.login.failure': 'লগইন ব্যর্থ হয়েছে। আবার চেষ্টা করুন!',
7
+  'pages.login.success': 'সফল লগইন!',
8
+  'pages.login.username.placeholder': 'ব্যবহারকারীর নাম: admin or user',
9
+  'pages.login.username.required': 'আপনার ব্যবহারকারীর নাম ইনপুট করুন!',
10
+  'pages.login.password.placeholder': 'পাসওয়ার্ড: ant.design',
11
+  'pages.login.password.required': 'আপনার পাসওয়ার্ড ইনপুট করুন!',
12
+  'pages.login.phoneLogin.tab': 'ফোন লগইন',
13
+  'pages.login.phoneLogin.errorMessage': 'যাচাইকরণ কোড ত্রুটি',
14
+  'pages.login.phoneNumber.placeholder': 'ফোন নম্বর',
15
+  'pages.login.phoneNumber.required': 'আপনার ফোন নম্বর ইনপুট করুন!',
16
+  'pages.login.phoneNumber.invalid': 'ফোন নম্বরটি সঠিক নয়!',
17
+  'pages.login.captcha.placeholder': 'যাচাইকরণের কোড',
18
+  'pages.login.captcha.required': 'দয়া করে ভেরিফিকেশন কোডটি ইনপুট করুন!',
19
+  'pages.login.phoneLogin.getVerificationCode': 'কোড পান',
20
+  'pages.getCaptchaSecondText': 'সেকেন্ড',
21
+  'pages.login.rememberMe': 'আমাকে মনে রাখুন',
22
+  'pages.login.forgotPassword': 'পাসওয়ার্ড ভুলে গেছেন?',
23
+  'pages.login.submit': 'প্রবেশ করুন',
24
+  'pages.login.loginWith': 'লগইন করতে পারেন:',
25
+  'pages.login.registerAccount': 'অ্যাকাউন্ট নিবন্ধন করুন',
26
+  'pages.welcome.link': 'স্বাগতম',
27
+  'pages.welcome.alertMessage': 'দ্রুত এবং শক্তিশালী ভারী শুল্ক উপাদান প্রকাশ করা হয়েছে।',
28
+  'pages.404.subTitle': 'দুঃখিত, আপনি যে পৃষ্ঠাটি দেখতে চান তা বিদ্যমান নেই।',
29
+  'pages.404.buttonText': 'প্রধান পাতায় ফিরে যান',
30
+  'pages.admin.subPage.title': 'এই পৃষ্ঠাটি কেবল অ্যাডমিন দ্বারা দেখা যাবে',
31
+  'pages.admin.subPage.alertMessage':
32
+    'UMI UI এখন প্রকাশিত হয়েছে, অভিজ্ঞতা শুরু করতে npm run ui ব্যবহার করতে স্বাগতম।',
33
+  'pages.searchTable.createForm.newRule': 'নতুন বিধি',
34
+  'pages.searchTable.updateForm.ruleConfig': 'বিধি কনফিগারেশন',
35
+  'pages.searchTable.updateForm.basicConfig': 'মৌলিক তথ্য',
36
+  'pages.searchTable.updateForm.ruleName.nameLabel': 'বিধি নাম',
37
+  'pages.searchTable.updateForm.ruleName.nameRules': 'বিধির নাম লিখুন!',
38
+  'pages.searchTable.updateForm.ruleDesc.descLabel': 'বিধির বিবরণ',
39
+  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'কমপক্ষে পাঁচটি অক্ষর লিখুন',
40
+  'pages.searchTable.updateForm.ruleDesc.descRules':
41
+    'কমপক্ষে পাঁচটি অক্ষরের একটি বিধান বিবরণ লিখুন!',
42
+  'pages.searchTable.updateForm.ruleProps.title': 'বৈশিষ্ট্য কনফিগার করুন',
43
+  'pages.searchTable.updateForm.object': 'নিরীক্ষণ অবজেক্ট',
44
+  'pages.searchTable.updateForm.ruleProps.templateLabel': 'বিধি টেম্পলেট',
45
+  'pages.searchTable.updateForm.ruleProps.typeLabel': 'বিধি প্রকার',
46
+  'pages.searchTable.updateForm.schedulingPeriod.title': 'সময়সূচী নির্ধারণ করুন',
47
+  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'শুরুর সময়',
48
+  'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'একটি শুরুর সময় চয়ন করুন!',
49
+  'pages.searchTable.titleDesc': 'বর্ণনা',
50
+  'pages.searchTable.ruleName': 'বিধি নাম প্রয়োজন',
51
+  'pages.searchTable.titleCallNo': 'পরিষেবা কল সংখ্যা',
52
+  'pages.searchTable.titleStatus': 'অবস্থা',
53
+  'pages.searchTable.nameStatus.default': 'ডিফল্ট',
54
+  'pages.searchTable.nameStatus.running': 'চলমান',
55
+  'pages.searchTable.nameStatus.online': 'অনলাইন',
56
+  'pages.searchTable.nameStatus.abnormal': 'অস্বাভাবিক',
57
+  'pages.searchTable.titleUpdatedAt': 'সর্বশেষ নির্ধারিত',
58
+  'pages.searchTable.exception': 'ব্যতিক্রম জন্য কারণ লিখুন!',
59
+  'pages.searchTable.titleOption': 'অপশন',
60
+  'pages.searchTable.config': 'কনফিগারেশন',
61
+  'pages.searchTable.subscribeAlert': 'সতর্কতা সাবস্ক্রাইব করুন',
62
+  'pages.searchTable.title': 'ইনকয়েরি ফরম',
63
+  'pages.searchTable.new': 'নতুন',
64
+  'pages.searchTable.chosen': 'নির্বাচিত',
65
+  'pages.searchTable.item': 'আইটেম',
66
+  'pages.searchTable.totalServiceCalls': 'পরিষেবা কলগুলির মোট সংখ্যা',
67
+  'pages.searchTable.tenThousand': '000',
68
+  'pages.searchTable.batchDeletion': 'একসাখে ডিলিট',
69
+  'pages.searchTable.batchApproval': 'একসাখে অনুমোদন',
70
+};

+ 7
- 0
src/locales/bn-BD/pwa.ts Прегледај датотеку

@@ -0,0 +1,7 @@
1
+export default {
2
+  'app.pwa.offline': 'আপনি এখন অফলাইন',
3
+  'app.pwa.serviceworker.updated': 'নতুন সামগ্রী উপলব্ধ',
4
+  'app.pwa.serviceworker.updated.hint':
5
+    'বর্তমান পৃষ্ঠাটি পুনরায় লোড করতে দয়া করে "রিফ্রেশ" বোতাম টিপুন',
6
+  'app.pwa.serviceworker.updated.ok': 'রিফ্রেশ',
7
+};

+ 31
- 0
src/locales/bn-BD/settingDrawer.ts Прегледај датотеку

@@ -0,0 +1,31 @@
1
+export default {
2
+  'app.setting.pagestyle': 'পৃষ্ঠা স্টাইল সেটিং',
3
+  'app.setting.pagestyle.dark': 'ডার্ক স্টাইল',
4
+  'app.setting.pagestyle.light': 'লাইট স্টাইল',
5
+  'app.setting.content-width': 'সামগ্রীর প্রস্থ',
6
+  'app.setting.content-width.fixed': 'স্থির',
7
+  'app.setting.content-width.fluid': 'প্রবাহী',
8
+  'app.setting.themecolor': 'থিম রঙ',
9
+  'app.setting.themecolor.dust': 'ডাস্ট রেড',
10
+  'app.setting.themecolor.volcano': 'আগ্নেয়গিরি',
11
+  'app.setting.themecolor.sunset': 'সানসেট কমলা',
12
+  'app.setting.themecolor.cyan': 'সবুজাভ নীল',
13
+  'app.setting.themecolor.green': 'পোলার সবুজ',
14
+  'app.setting.themecolor.daybreak': 'দিবস ব্রেক ব্লু (ডিফল্ট)',
15
+  'app.setting.themecolor.geekblue': 'গিক আঠালো',
16
+  'app.setting.themecolor.purple': 'গোল্ডেন বেগুনি',
17
+  'app.setting.navigationmode': 'নেভিগেশন মোড',
18
+  'app.setting.sidemenu': 'সাইড মেনু লেআউট',
19
+  'app.setting.topmenu': 'টপ মেনু লেআউট',
20
+  'app.setting.fixedheader': 'স্থির হেডার',
21
+  'app.setting.fixedsidebar': 'স্থির সাইডবার',
22
+  'app.setting.fixedsidebar.hint': 'সাইড মেনু বিন্যাসে কাজ করে',
23
+  'app.setting.hideheader': 'স্ক্রোল করার সময় হেডার লুকানো',
24
+  'app.setting.hideheader.hint': 'লুকানো হেডার সক্ষম থাকলে কাজ করে',
25
+  'app.setting.othersettings': 'অন্যান্য সেটিংস্',
26
+  'app.setting.weakmode': 'দুর্বল মোড',
27
+  'app.setting.copy': 'সেটিং কপি করুন',
28
+  'app.setting.copyinfo': 'সাফল্যের অনুলিপি করুন - প্রতিস্থাপন করুন: src/models/setting.js',
29
+  'app.setting.production.hint':
30
+    'কেবল বিকাশের পরিবেশে প্যানেল শো সেট করা হচ্ছে, দয়া করে ম্যানুয়ালি সংশোধন করুন',
31
+};

+ 59
- 0
src/locales/bn-BD/settings.ts Прегледај датотеку

@@ -0,0 +1,59 @@
1
+export default {
2
+  'app.settings.menuMap.basic': 'মৌলিক বৈশিষ্ট্যসহ',
3
+  'app.settings.menuMap.security': 'নিরাপত্তা বিন্যাস',
4
+  'app.settings.menuMap.binding': 'অ্যাকাউন্ট বাঁধাই',
5
+  'app.settings.menuMap.notification': 'নতুন বার্তা বিজ্ঞপ্তি',
6
+  'app.settings.basic.avatar': 'অবতার',
7
+  'app.settings.basic.change-avatar': 'অবতার পরিবর্তন করুন',
8
+  'app.settings.basic.email': 'ইমেইল',
9
+  'app.settings.basic.email-message': 'আপনার ইমেইল ইনপুট করুন!',
10
+  'app.settings.basic.nickname': 'ডাক নাম',
11
+  'app.settings.basic.nickname-message': 'আপনার ডাকনামটি ইনপুট করুন!',
12
+  'app.settings.basic.profile': 'ব্যক্তিগত প্রোফাইল',
13
+  'app.settings.basic.profile-message': 'আপনার ব্যক্তিগত প্রোফাইল ইনপুট করুন!',
14
+  'app.settings.basic.profile-placeholder': 'নিজের সাথে সংক্ষিপ্ত পরিচয়',
15
+  'app.settings.basic.country': 'দেশ/অঞ্চল',
16
+  'app.settings.basic.country-message': 'আপনার দেশ ইনপুট করুন!',
17
+  'app.settings.basic.geographic': 'প্রদেশ বা শহর',
18
+  'app.settings.basic.geographic-message': 'আপনার ভৌগলিক তথ্য ইনপুট করুন!',
19
+  'app.settings.basic.address': 'রাস্তার ঠিকানা',
20
+  'app.settings.basic.address-message': 'দয়া করে আপনার ঠিকানা ইনপুট করুন!',
21
+  'app.settings.basic.phone': 'ফোন নম্বর',
22
+  'app.settings.basic.phone-message': 'আপনার ফোন ইনপুট করুন!',
23
+  'app.settings.basic.update': 'তথ্য হালনাগাদ',
24
+  'app.settings.security.strong': 'শক্তিশালী',
25
+  'app.settings.security.medium': 'মধ্যম',
26
+  'app.settings.security.weak': 'দুর্বল',
27
+  'app.settings.security.password': 'অ্যাকাউন্টের পাসওয়ার্ড',
28
+  'app.settings.security.password-description': 'বর্তমান পাসওয়ার্ড শক্তি',
29
+  'app.settings.security.phone': 'সুরক্ষা ফোন',
30
+  'app.settings.security.phone-description': 'আবদ্ধ ফোন',
31
+  'app.settings.security.question': 'নিরাপত্তা প্রশ্ন',
32
+  'app.settings.security.question-description':
33
+    'সুরক্ষা প্রশ্ন সেট করা নেই, এবং সুরক্ষা নীতি কার্যকরভাবে অ্যাকাউন্ট সুরক্ষা রক্ষা করতে পারে',
34
+  'app.settings.security.email': 'ব্যাকআপ ইমেইল',
35
+  'app.settings.security.email-description': 'বাউন্ড ইমেইল',
36
+  'app.settings.security.mfa': 'MFA ডিভাইস',
37
+  'app.settings.security.mfa-description':
38
+    "আনবাউন্ড এমএফএ ডিভাইস, বাঁধাইয়ের পরে, দু'বার নিশ্চিত করা যায়",
39
+  'app.settings.security.modify': 'পরিবর্তন করুন',
40
+  'app.settings.security.set': 'সেট',
41
+  'app.settings.security.bind': 'বাঁধাই',
42
+  'app.settings.binding.taobao': 'বাঁধাই তাওবাও',
43
+  'app.settings.binding.taobao-description': 'বর্তমানে আনবাউন্ড তাওবাও অ্যাকাউন্ট',
44
+  'app.settings.binding.alipay': 'বাইন্ডিং আলিপে',
45
+  'app.settings.binding.alipay-description': 'বর্তমানে আনবাউন্ড আলিপে অ্যাকাউন্ট',
46
+  'app.settings.binding.dingding': 'বাঁধাই ডিঙ্গটালক',
47
+  'app.settings.binding.dingding-description': 'বর্তমানে আনবাউন্ড ডিঙ্গটাল অ্যাকাউন্ট',
48
+  'app.settings.binding.bind': 'বাঁধাই',
49
+  'app.settings.notification.password': 'অ্যাকাউন্টের পাসওয়ার্ড',
50
+  'app.settings.notification.password-description':
51
+    'অন্যান্য ব্যবহারকারীর বার্তাগুলি স্টেশন চিঠি আকারে জানানো হবে',
52
+  'app.settings.notification.messages': 'সিস্টেম বার্তা',
53
+  'app.settings.notification.messages-description':
54
+    'সিস্টেম বার্তাগুলি স্টেশন চিঠির আকারে জানানো হবে',
55
+  'app.settings.notification.todo': 'করণীয় বিজ্ঞপ্তি',
56
+  'app.settings.notification.todo-description': 'করণীয় তালিকাটি স্টেশন থেকে চিঠি আকারে জানানো হবে',
57
+  'app.settings.open': 'খোলা',
58
+  'app.settings.close': 'বন্ধ',
59
+};

+ 24
- 0
src/locales/en-US.ts Прегледај датотеку

@@ -0,0 +1,24 @@
1
+import component from './en-US/component';
2
+import globalHeader from './en-US/globalHeader';
3
+import menu from './en-US/menu';
4
+import pages from './en-US/pages';
5
+import pwa from './en-US/pwa';
6
+import settingDrawer from './en-US/settingDrawer';
7
+import settings from './en-US/settings';
8
+
9
+export default {
10
+  'navBar.lang': 'Languages',
11
+  'layout.user.link.help': 'Help',
12
+  'layout.user.link.privacy': 'Privacy',
13
+  'layout.user.link.terms': 'Terms',
14
+  'app.preview.down.block': 'Download this page to your local project',
15
+  'app.welcome.link.fetch-blocks': 'Get all block',
16
+  'app.welcome.link.block-list': 'Quickly build standard, pages based on `block` development',
17
+  ...globalHeader,
18
+  ...menu,
19
+  ...settingDrawer,
20
+  ...settings,
21
+  ...pwa,
22
+  ...component,
23
+  ...pages,
24
+};

+ 5
- 0
src/locales/en-US/component.ts Прегледај датотеку

@@ -0,0 +1,5 @@
1
+export default {
2
+  'component.tagSelect.expand': 'Expand',
3
+  'component.tagSelect.collapse': 'Collapse',
4
+  'component.tagSelect.all': 'All',
5
+};

+ 17
- 0
src/locales/en-US/globalHeader.ts Прегледај датотеку

@@ -0,0 +1,17 @@
1
+export default {
2
+  'component.globalHeader.search': 'Search',
3
+  'component.globalHeader.search.example1': 'Search example 1',
4
+  'component.globalHeader.search.example2': 'Search example 2',
5
+  'component.globalHeader.search.example3': 'Search example 3',
6
+  'component.globalHeader.help': 'Help',
7
+  'component.globalHeader.notification': 'Notification',
8
+  'component.globalHeader.notification.empty': 'You have viewed all notifications.',
9
+  'component.globalHeader.message': 'Message',
10
+  'component.globalHeader.message.empty': 'You have viewed all messsages.',
11
+  'component.globalHeader.event': 'Event',
12
+  'component.globalHeader.event.empty': 'You have viewed all events.',
13
+  'component.noticeIcon.clear': 'Clear',
14
+  'component.noticeIcon.cleared': 'Cleared',
15
+  'component.noticeIcon.empty': 'No notifications',
16
+  'component.noticeIcon.view-more': 'View more',
17
+};

+ 52
- 0
src/locales/en-US/menu.ts Прегледај датотеку

@@ -0,0 +1,52 @@
1
+export default {
2
+  'menu.welcome': 'Welcome',
3
+  'menu.more-blocks': 'More Blocks',
4
+  'menu.home': 'Home',
5
+  'menu.admin': 'Admin',
6
+  'menu.admin.sub-page': 'Sub-Page',
7
+  'menu.login': 'Login',
8
+  'menu.register': 'Register',
9
+  'menu.register-result': 'Register Result',
10
+  'menu.dashboard': 'Dashboard',
11
+  'menu.dashboard.analysis': 'Analysis',
12
+  'menu.dashboard.monitor': 'Monitor',
13
+  'menu.dashboard.workplace': 'Workplace',
14
+  'menu.exception.403': '403',
15
+  'menu.exception.404': '404',
16
+  'menu.exception.500': '500',
17
+  'menu.form': 'Form',
18
+  'menu.form.basic-form': 'Basic Form',
19
+  'menu.form.step-form': 'Step Form',
20
+  'menu.form.step-form.info': 'Step Form(write transfer information)',
21
+  'menu.form.step-form.confirm': 'Step Form(confirm transfer information)',
22
+  'menu.form.step-form.result': 'Step Form(finished)',
23
+  'menu.form.advanced-form': 'Advanced Form',
24
+  'menu.list': 'List',
25
+  'menu.list.table-list': 'Search Table',
26
+  'menu.list.basic-list': 'Basic List',
27
+  'menu.list.card-list': 'Card List',
28
+  'menu.list.search-list': 'Search List',
29
+  'menu.list.search-list.articles': 'Search List(articles)',
30
+  'menu.list.search-list.projects': 'Search List(projects)',
31
+  'menu.list.search-list.applications': 'Search List(applications)',
32
+  'menu.profile': 'Profile',
33
+  'menu.profile.basic': 'Basic Profile',
34
+  'menu.profile.advanced': 'Advanced Profile',
35
+  'menu.result': 'Result',
36
+  'menu.result.success': 'Success',
37
+  'menu.result.fail': 'Fail',
38
+  'menu.exception': 'Exception',
39
+  'menu.exception.not-permission': '403',
40
+  'menu.exception.not-find': '404',
41
+  'menu.exception.server-error': '500',
42
+  'menu.exception.trigger': 'Trigger',
43
+  'menu.account': 'Account',
44
+  'menu.account.center': 'Account Center',
45
+  'menu.account.settings': 'Account Settings',
46
+  'menu.account.trigger': 'Trigger Error',
47
+  'menu.account.logout': 'Logout',
48
+  'menu.editor': 'Graphic Editor',
49
+  'menu.editor.flow': 'Flow Editor',
50
+  'menu.editor.mind': 'Mind Editor',
51
+  'menu.editor.koni': 'Koni Editor',
52
+};

+ 70
- 0
src/locales/en-US/pages.ts Прегледај датотеку

@@ -0,0 +1,70 @@
1
+export default {
2
+  'pages.layouts.userLayout.title':
3
+    'Ant Design is the most influential web design specification in Xihu district',
4
+  'pages.login.accountLogin.tab': 'Account Login',
5
+  'pages.login.accountLogin.errorMessage': 'Incorrect username/password(admin/ant.design)',
6
+  'pages.login.failure': 'Login failed, please try again!',
7
+  'pages.login.success': 'Login successful!',
8
+  'pages.login.username.placeholder': 'Username: admin or user',
9
+  'pages.login.username.required': 'Please input your username!',
10
+  'pages.login.password.placeholder': 'Password: ant.design',
11
+  'pages.login.password.required': 'Please input your password!',
12
+  'pages.login.phoneLogin.tab': 'Phone Login',
13
+  'pages.login.phoneLogin.errorMessage': 'Verification Code Error',
14
+  'pages.login.phoneNumber.placeholder': 'Phone Number',
15
+  'pages.login.phoneNumber.required': 'Please input your phone number!',
16
+  'pages.login.phoneNumber.invalid': 'Phone number is invalid!',
17
+  'pages.login.captcha.placeholder': 'Verification Code',
18
+  'pages.login.captcha.required': 'Please input verification code!',
19
+  'pages.login.phoneLogin.getVerificationCode': 'Get Code',
20
+  'pages.getCaptchaSecondText': 'sec(s)',
21
+  'pages.login.rememberMe': 'Remember me',
22
+  'pages.login.forgotPassword': 'Forgot Password ?',
23
+  'pages.login.submit': 'Login',
24
+  'pages.login.loginWith': 'Login with :',
25
+  'pages.login.registerAccount': 'Register Account',
26
+  'pages.welcome.link': 'Welcome',
27
+  'pages.welcome.alertMessage': 'Faster and stronger heavy-duty components have been released.',
28
+  'pages.404.subTitle': 'Sorry, the page you visited does not exist.',
29
+  'pages.404.buttonText': 'Back Home',
30
+  'pages.admin.subPage.title': 'This page can only be viewed by Admin',
31
+  'pages.admin.subPage.alertMessage':
32
+    'Umi ui is now released, welcome to use npm run ui to start the experience.',
33
+  'pages.searchTable.createForm.newRule': 'New Rule',
34
+  'pages.searchTable.updateForm.ruleConfig': 'Rule configuration',
35
+  'pages.searchTable.updateForm.basicConfig': 'Basic Information',
36
+  'pages.searchTable.updateForm.ruleName.nameLabel': 'Rule Name',
37
+  'pages.searchTable.updateForm.ruleName.nameRules': 'Please enter the rule name!',
38
+  'pages.searchTable.updateForm.ruleDesc.descLabel': 'Rule Description',
39
+  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'Please enter at least five characters',
40
+  'pages.searchTable.updateForm.ruleDesc.descRules':
41
+    'Please enter a rule description of at least five characters!',
42
+  'pages.searchTable.updateForm.ruleProps.title': 'Configure Properties',
43
+  'pages.searchTable.updateForm.object': 'Monitoring Object',
44
+  'pages.searchTable.updateForm.ruleProps.templateLabel': 'Rule Template',
45
+  'pages.searchTable.updateForm.ruleProps.typeLabel': 'Rule Type',
46
+  'pages.searchTable.updateForm.schedulingPeriod.title': 'Set Scheduling Period',
47
+  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Starting Time',
48
+  'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'Please choose a start time!',
49
+  'pages.searchTable.titleDesc': 'Description',
50
+  'pages.searchTable.ruleName': 'Rule name is required',
51
+  'pages.searchTable.titleCallNo': 'Number of Service Calls',
52
+  'pages.searchTable.titleStatus': 'Status',
53
+  'pages.searchTable.nameStatus.default': 'default',
54
+  'pages.searchTable.nameStatus.running': 'running',
55
+  'pages.searchTable.nameStatus.online': 'online',
56
+  'pages.searchTable.nameStatus.abnormal': 'abnormal',
57
+  'pages.searchTable.titleUpdatedAt': 'Last Scheduled at',
58
+  'pages.searchTable.exception': 'Please enter the reason for the exception!',
59
+  'pages.searchTable.titleOption': 'Option',
60
+  'pages.searchTable.config': 'Configuration',
61
+  'pages.searchTable.subscribeAlert': 'Subscribe to alerts',
62
+  'pages.searchTable.title': 'Enquiry Form',
63
+  'pages.searchTable.new': 'New',
64
+  'pages.searchTable.chosen': 'chosen',
65
+  'pages.searchTable.item': 'item',
66
+  'pages.searchTable.totalServiceCalls': 'Total Number of Service Calls',
67
+  'pages.searchTable.tenThousand': '0000',
68
+  'pages.searchTable.batchDeletion': 'batch deletion',
69
+  'pages.searchTable.batchApproval': 'batch approval',
70
+};

+ 6
- 0
src/locales/en-US/pwa.ts Прегледај датотеку

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

+ 31
- 0
src/locales/en-US/settingDrawer.ts Прегледај датотеку

@@ -0,0 +1,31 @@
1
+export default {
2
+  'app.setting.pagestyle': 'Page style setting',
3
+  'app.setting.pagestyle.dark': 'Dark style',
4
+  'app.setting.pagestyle.light': 'Light style',
5
+  'app.setting.content-width': 'Content Width',
6
+  'app.setting.content-width.fixed': 'Fixed',
7
+  'app.setting.content-width.fluid': 'Fluid',
8
+  'app.setting.themecolor': 'Theme Color',
9
+  'app.setting.themecolor.dust': 'Dust Red',
10
+  'app.setting.themecolor.volcano': 'Volcano',
11
+  'app.setting.themecolor.sunset': 'Sunset Orange',
12
+  'app.setting.themecolor.cyan': 'Cyan',
13
+  'app.setting.themecolor.green': 'Polar Green',
14
+  'app.setting.themecolor.daybreak': 'Daybreak Blue (default)',
15
+  'app.setting.themecolor.geekblue': 'Geek Glue',
16
+  'app.setting.themecolor.purple': 'Golden Purple',
17
+  'app.setting.navigationmode': 'Navigation Mode',
18
+  'app.setting.sidemenu': 'Side Menu Layout',
19
+  'app.setting.topmenu': 'Top Menu Layout',
20
+  'app.setting.fixedheader': 'Fixed Header',
21
+  'app.setting.fixedsidebar': 'Fixed Sidebar',
22
+  'app.setting.fixedsidebar.hint': 'Works on Side Menu Layout',
23
+  'app.setting.hideheader': 'Hidden Header when scrolling',
24
+  'app.setting.hideheader.hint': 'Works when Hidden Header is enabled',
25
+  'app.setting.othersettings': 'Other Settings',
26
+  'app.setting.weakmode': 'Color Blind Friendly Mode',
27
+  'app.setting.copy': 'Copy Setting',
28
+  'app.setting.copyinfo': 'copy success, please replace defaultSettings in src/models/setting.js',
29
+  'app.setting.production.hint':
30
+    'Setting panel shows in development environment only, please manually modify',
31
+};

+ 60
- 0
src/locales/en-US/settings.ts Прегледај датотеку

@@ -0,0 +1,60 @@
1
+export default {
2
+  'app.settings.menuMap.basic': 'Basic Settings',
3
+  'app.settings.menuMap.security': 'Security Settings',
4
+  'app.settings.menuMap.binding': 'Account Binding',
5
+  'app.settings.menuMap.notification': 'New Message Notification',
6
+  'app.settings.basic.avatar': 'Avatar',
7
+  'app.settings.basic.change-avatar': 'Change avatar',
8
+  'app.settings.basic.email': 'Email',
9
+  'app.settings.basic.email-message': 'Please input your email!',
10
+  'app.settings.basic.nickname': 'Nickname',
11
+  'app.settings.basic.nickname-message': 'Please input your Nickname!',
12
+  'app.settings.basic.profile': 'Personal profile',
13
+  'app.settings.basic.profile-message': 'Please input your personal profile!',
14
+  'app.settings.basic.profile-placeholder': 'Brief introduction to yourself',
15
+  'app.settings.basic.country': 'Country/Region',
16
+  'app.settings.basic.country-message': 'Please input your country!',
17
+  'app.settings.basic.geographic': 'Province or city',
18
+  'app.settings.basic.geographic-message': 'Please input your geographic info!',
19
+  'app.settings.basic.address': 'Street Address',
20
+  'app.settings.basic.address-message': 'Please input your address!',
21
+  'app.settings.basic.phone': 'Phone Number',
22
+  'app.settings.basic.phone-message': 'Please input your phone!',
23
+  'app.settings.basic.update': 'Update Information',
24
+  'app.settings.security.strong': 'Strong',
25
+  'app.settings.security.medium': 'Medium',
26
+  'app.settings.security.weak': 'Weak',
27
+  'app.settings.security.password': 'Account Password',
28
+  'app.settings.security.password-description': 'Current password strength',
29
+  'app.settings.security.phone': 'Security Phone',
30
+  'app.settings.security.phone-description': 'Bound phone',
31
+  'app.settings.security.question': 'Security Question',
32
+  'app.settings.security.question-description':
33
+    'The security question is not set, and the security policy can effectively protect the account security',
34
+  'app.settings.security.email': 'Backup Email',
35
+  'app.settings.security.email-description': 'Bound Email',
36
+  'app.settings.security.mfa': 'MFA Device',
37
+  'app.settings.security.mfa-description':
38
+    'Unbound MFA device, after binding, can be confirmed twice',
39
+  'app.settings.security.modify': 'Modify',
40
+  'app.settings.security.set': 'Set',
41
+  'app.settings.security.bind': 'Bind',
42
+  'app.settings.binding.taobao': 'Binding Taobao',
43
+  'app.settings.binding.taobao-description': 'Currently unbound Taobao account',
44
+  'app.settings.binding.alipay': 'Binding Alipay',
45
+  'app.settings.binding.alipay-description': 'Currently unbound Alipay account',
46
+  'app.settings.binding.dingding': 'Binding DingTalk',
47
+  'app.settings.binding.dingding-description': 'Currently unbound DingTalk account',
48
+  'app.settings.binding.bind': 'Bind',
49
+  'app.settings.notification.password': 'Account Password',
50
+  'app.settings.notification.password-description':
51
+    'Messages from other users will be notified in the form of a station letter',
52
+  'app.settings.notification.messages': 'System Messages',
53
+  'app.settings.notification.messages-description':
54
+    'System messages will be notified in the form of a station letter',
55
+  'app.settings.notification.todo': 'To-do Notification',
56
+  'app.settings.notification.todo-description':
57
+    'The to-do list will be notified in the form of a letter from the station',
58
+  'app.settings.open': 'Open',
59
+  'app.settings.close': 'Close',
60
+};

+ 24
- 0
src/locales/fa-IR.ts Прегледај датотеку

@@ -0,0 +1,24 @@
1
+import component from './fa-IR/component';
2
+import globalHeader from './fa-IR/globalHeader';
3
+import menu from './fa-IR/menu';
4
+import pages from './fa-IR/pages';
5
+import pwa from './fa-IR/pwa';
6
+import settingDrawer from './fa-IR/settingDrawer';
7
+import settings from './fa-IR/settings';
8
+
9
+export default {
10
+  'navBar.lang': 'زبان ها  ',
11
+  'layout.user.link.help': 'کمک',
12
+  'layout.user.link.privacy': 'حریم خصوصی',
13
+  'layout.user.link.terms': 'مقررات',
14
+  'app.preview.down.block': 'این صفحه را در پروژه محلی خود بارگیری کنید',
15
+  'app.welcome.link.fetch-blocks': 'دریافت تمام بلوک',
16
+  'app.welcome.link.block-list': 'به سرعت صفحات استاندارد مبتنی بر توسعه "بلوک" را بسازید',
17
+  ...globalHeader,
18
+  ...menu,
19
+  ...settingDrawer,
20
+  ...settings,
21
+  ...pwa,
22
+  ...component,
23
+  ...pages,
24
+};

+ 5
- 0
src/locales/fa-IR/component.ts Прегледај датотеку

@@ -0,0 +1,5 @@
1
+export default {
2
+  'component.tagSelect.expand': 'باز',
3
+  'component.tagSelect.collapse': 'بسته ',
4
+  'component.tagSelect.all': 'همه',
5
+};

+ 17
- 0
src/locales/fa-IR/globalHeader.ts Прегледај датотеку

@@ -0,0 +1,17 @@
1
+export default {
2
+  'component.globalHeader.search': 'جستجو ',
3
+  'component.globalHeader.search.example1': 'مثال 1 را جستجو کنید',
4
+  'component.globalHeader.search.example2': 'مثال 2 را جستجو کنید',
5
+  'component.globalHeader.search.example3': 'مثال 3 را جستجو کنید',
6
+  'component.globalHeader.help': 'کمک',
7
+  'component.globalHeader.notification': 'اعلان',
8
+  'component.globalHeader.notification.empty': 'شما همه اعلان ها را مشاهده کرده اید.',
9
+  'component.globalHeader.message': 'پیام',
10
+  'component.globalHeader.message.empty': 'شما همه پیام ها را مشاهده کرده اید.',
11
+  'component.globalHeader.event': 'رویداد',
12
+  'component.globalHeader.event.empty': 'شما همه رویدادها را مشاهده کرده اید.',
13
+  'component.noticeIcon.clear': 'پاک کردن',
14
+  'component.noticeIcon.cleared': 'پاک شد',
15
+  'component.noticeIcon.empty': 'بدون اعلان',
16
+  'component.noticeIcon.view-more': 'نمایش بیشتر',
17
+};

+ 52
- 0
src/locales/fa-IR/menu.ts Прегледај датотеку

@@ -0,0 +1,52 @@
1
+export default {
2
+  'menu.welcome': 'خوش آمدید',
3
+  'menu.more-blocks': 'بلوک های بیشتر',
4
+  'menu.home': 'خانه',
5
+  'menu.admin': 'مدیر',
6
+  'menu.admin.sub-page': 'زیر صفحه',
7
+  'menu.login': 'ورود',
8
+  'menu.register': 'ثبت نام',
9
+  'menu.register-result': 'ثبت نام نتیجه',
10
+  'menu.dashboard': 'داشبورد',
11
+  'menu.dashboard.analysis': 'تحلیل و بررسی',
12
+  'menu.dashboard.monitor': 'نظارت',
13
+  'menu.dashboard.workplace': 'محل کار',
14
+  'menu.exception.403': '403',
15
+  'menu.exception.404': '404',
16
+  'menu.exception.500': '500',
17
+  'menu.form': 'فرم',
18
+  'menu.form.basic-form': 'فرم اساسی',
19
+  'menu.form.step-form': 'فرم مرحله',
20
+  'menu.form.step-form.info': 'فرم مرحله (نوشتن اطلاعات انتقال)',
21
+  'menu.form.step-form.confirm': 'فرم مرحله (تأیید اطلاعات انتقال)',
22
+  'menu.form.step-form.result': 'فرم مرحله (تمام شده)',
23
+  'menu.form.advanced-form': 'فرم پیشرفته',
24
+  'menu.list': 'لیست',
25
+  'menu.list.table-list': 'جدول جستجو',
26
+  'menu.list.basic-list': 'لیست اصلی',
27
+  'menu.list.card-list': 'لیست کارت',
28
+  'menu.list.search-list': 'لیست جستجو',
29
+  'menu.list.search-list.articles': 'لیست جستجو (مقالات)',
30
+  'menu.list.search-list.projects': 'لیست جستجو (پروژه ها)',
31
+  'menu.list.search-list.applications': 'لیست جستجو (برنامه ها)',
32
+  'menu.profile': 'مشخصات',
33
+  'menu.profile.basic': 'مشخصات عمومی',
34
+  'menu.profile.advanced': 'مشخصات پیشرفته',
35
+  'menu.result': 'نتیجه',
36
+  'menu.result.success': 'موفق',
37
+  'menu.result.fail': 'ناموفق',
38
+  'menu.exception': 'استثنا',
39
+  'menu.exception.not-permission': '403',
40
+  'menu.exception.not-find': '404',
41
+  'menu.exception.server-error': '500',
42
+  'menu.exception.trigger': 'راه اندازی',
43
+  'menu.account': 'حساب',
44
+  'menu.account.center': 'مرکز حساب',
45
+  'menu.account.settings': 'تنظیمات حساب',
46
+  'menu.account.trigger': 'خطای راه اندازی',
47
+  'menu.account.logout': 'خروج',
48
+  'menu.editor': 'ویرایشگر گرافیک',
49
+  'menu.editor.flow': 'ویرایشگر جریان',
50
+  'menu.editor.mind': 'ویرایشگر ذهن',
51
+  'menu.editor.koni': 'ویرایشگر Koni',
52
+};

+ 69
- 0
src/locales/fa-IR/pages.ts Прегледај датотеку

@@ -0,0 +1,69 @@
1
+export default {
2
+  'pages.layouts.userLayout.title': 'طراحی مورچه تأثیرگذارترین مشخصات طراحی وب در منطقه Xihu است',
3
+  'pages.login.accountLogin.tab': 'ورود به حساب کاربری',
4
+  'pages.login.accountLogin.errorMessage': 'نام کاربری / رمزعبور نادرست (مدیر / ant.design)',
5
+  'pages.login.failure': 'ورود به سیستم با شکست مواجه شد، لطفا دوباره سعی کنید!',
6
+  'pages.login.success': 'ورود موفق!',
7
+  'pages.login.username.placeholder': 'نام کاربری: مدیر یا کاربر',
8
+  'pages.login.username.required': 'لطفا نام کاربری خود را وارد کنید!',
9
+  'pages.login.password.placeholder': 'رمز عبور: ant.design',
10
+  'pages.login.password.required': 'لطفاً رمز ورود خود را وارد کنید!',
11
+  'pages.login.phoneLogin.tab': 'ورود به سیستم تلفن',
12
+  'pages.login.phoneLogin.errorMessage': 'خطای کد تأیید',
13
+  'pages.login.phoneNumber.placeholder': 'شماره تلفن',
14
+  'pages.login.phoneNumber.required': 'لطفاً شماره تلفن خود را وارد کنید!',
15
+  'pages.login.phoneNumber.invalid': 'شماره تلفن نامعتبر است!',
16
+  'pages.login.captcha.placeholder': 'کد تایید',
17
+  'pages.login.captcha.required': 'لطفا کد تأیید را وارد کنید!',
18
+  'pages.login.phoneLogin.getVerificationCode': 'دریافت کد',
19
+  'pages.getCaptchaSecondText': 'ثانیه',
20
+  'pages.login.rememberMe': 'مرا به خاطر بسپار',
21
+  'pages.login.forgotPassword': 'رمز عبور را فراموش کرده اید ?',
22
+  'pages.login.submit': 'ارسال',
23
+  'pages.login.loginWith': 'وارد شوید با :',
24
+  'pages.login.registerAccount': 'ثبت نام',
25
+  'pages.welcome.link': 'خوش آمدید',
26
+  'pages.welcome.alertMessage': 'اجزای سنگین تر سریعتر و قوی تر آزاد شده اند.',
27
+  'pages.404.subTitle': 'ببخشيد، صفحه اي که ديديد وجود نداره',
28
+  'pages.404.buttonText': 'بازگشت به صفحه اصلی',
29
+  'pages.admin.subPage.title': 'این صفحه فقط توسط مدیر قابل مشاهده است',
30
+  'pages.admin.subPage.alertMessage':
31
+    'رابط کاربری Umi اکنون منتشر شده است ، برای شروع تجربه استفاده از npm run ui خوش آمدید.',
32
+  'pages.searchTable.createForm.newRule': 'قانون جدید',
33
+  'pages.searchTable.updateForm.ruleConfig': 'پیکربندی قانون',
34
+  'pages.searchTable.updateForm.basicConfig': 'اطلاعات اولیه',
35
+  'pages.searchTable.updateForm.ruleName.nameLabel': ' نام قانون',
36
+  'pages.searchTable.updateForm.ruleName.nameRules': 'لطفاً نام قانون را وارد کنید!',
37
+  'pages.searchTable.updateForm.ruleDesc.descLabel': 'شرح قانون',
38
+  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'لطفاً حداقل پنج حرف وارد کنید',
39
+  'pages.searchTable.updateForm.ruleDesc.descRules':
40
+    'لطفاً حداقل یک قانون حاوی پنج کاراکتر شرح دهید!',
41
+  'pages.searchTable.updateForm.ruleProps.title': 'پیکربندی خصوصیات',
42
+  'pages.searchTable.updateForm.object': 'نظارت بر شی',
43
+  'pages.searchTable.updateForm.ruleProps.templateLabel': 'الگوی قانون',
44
+  'pages.searchTable.updateForm.ruleProps.typeLabel': 'نوع قانون',
45
+  'pages.searchTable.updateForm.schedulingPeriod.title': 'تنظیم دوره زمان بندی',
46
+  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'زمان شروع',
47
+  'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'لطفاً زمان شروع را انتخاب کنید!',
48
+  'pages.searchTable.titleDesc': 'شرح',
49
+  'pages.searchTable.ruleName': 'نام قانون لازم است',
50
+  'pages.searchTable.titleCallNo': 'تعداد تماس های خدماتی',
51
+  'pages.searchTable.titleStatus': 'وضعیت',
52
+  'pages.searchTable.nameStatus.default': 'پیش فرض',
53
+  'pages.searchTable.nameStatus.running': 'در حال دویدن',
54
+  'pages.searchTable.nameStatus.online': 'برخط',
55
+  'pages.searchTable.nameStatus.abnormal': 'غیرطبیعی',
56
+  'pages.searchTable.titleUpdatedAt': 'آخرین برنامه ریزی در',
57
+  'pages.searchTable.exception': 'لطفا دلیل استثنا را وارد کنید!',
58
+  'pages.searchTable.titleOption': 'گزینه',
59
+  'pages.searchTable.config': 'پیکربندی',
60
+  'pages.searchTable.subscribeAlert': 'مشترک شدن در هشدارها',
61
+  'pages.searchTable.title': 'فرم درخواست',
62
+  'pages.searchTable.new': 'جدید',
63
+  'pages.searchTable.chosen': 'انتخاب شده',
64
+  'pages.searchTable.item': 'مورد',
65
+  'pages.searchTable.totalServiceCalls': 'تعداد کل تماس های خدماتی',
66
+  'pages.searchTable.tenThousand': '0000',
67
+  'pages.searchTable.batchDeletion': 'حذف دسته ای',
68
+  'pages.searchTable.batchApproval': 'تصویب دسته ای',
69
+};

+ 7
- 0
src/locales/fa-IR/pwa.ts Прегледај датотеку

@@ -0,0 +1,7 @@
1
+export default {
2
+  'app.pwa.offline': 'شما اکنون آفلاین هستید',
3
+  'app.pwa.serviceworker.updated': 'مطالب جدید در دسترس است',
4
+  'app.pwa.serviceworker.updated.hint':
5
+    'لطفاً برای بارگیری مجدد صفحه فعلی ، دکمه "تازه سازی" را فشار دهید',
6
+  'app.pwa.serviceworker.updated.ok': 'تازه سازی',
7
+};

+ 32
- 0
src/locales/fa-IR/settingDrawer.ts Прегледај датотеку

@@ -0,0 +1,32 @@
1
+export default {
2
+  'app.setting.pagestyle': 'تنظیم نوع صفحه',
3
+  'app.setting.pagestyle.dark': 'سبک تیره',
4
+  'app.setting.pagestyle.light': 'سبک سبک',
5
+  'app.setting.content-width': 'عرض محتوا',
6
+  'app.setting.content-width.fixed': 'ثابت',
7
+  'app.setting.content-width.fluid': 'شناور',
8
+  'app.setting.themecolor': 'رنگ تم',
9
+  'app.setting.themecolor.dust': 'گرد و غبار قرمز',
10
+  'app.setting.themecolor.volcano': 'آتشفشان',
11
+  'app.setting.themecolor.sunset': 'غروب نارنجی',
12
+  'app.setting.themecolor.cyan': 'فیروزه ای',
13
+  'app.setting.themecolor.green': 'سبز قطبی',
14
+  'app.setting.themecolor.daybreak': 'آبی روشن(پیشفرض)',
15
+  'app.setting.themecolor.geekblue': 'چسب گیک',
16
+  'app.setting.themecolor.purple': 'بنفش طلایی',
17
+  'app.setting.navigationmode': 'حالت پیمایش',
18
+  'app.setting.sidemenu': 'طرح منوی کناری',
19
+  'app.setting.topmenu': 'طرح منوی بالایی',
20
+  'app.setting.fixedheader': 'سرصفحه ثابت',
21
+  'app.setting.fixedsidebar': 'نوار کناری ثابت',
22
+  'app.setting.fixedsidebar.hint': 'کار بر روی منوی کناری',
23
+  'app.setting.hideheader': 'هدر پنهان هنگام پیمایش',
24
+  'app.setting.hideheader.hint': 'وقتی Hidden Header فعال باشد کار می کند',
25
+  'app.setting.othersettings': 'تنظیمات دیگر',
26
+  'app.setting.weakmode': 'حالت ضعیف',
27
+  'app.setting.copy': 'تنظیمات کپی',
28
+  'app.setting.copyinfo':
29
+    'موفقیت در کپی کردن , لطفا defaultSettings را در src / models / setting.js جایگزین کنید',
30
+  'app.setting.production.hint':
31
+    'صفحه تنظیم فقط در محیط توسعه نمایش داده می شود ، لطفاً دستی تغییر دهید',
32
+};

+ 60
- 0
src/locales/fa-IR/settings.ts Прегледај датотеку

@@ -0,0 +1,60 @@
1
+export default {
2
+  'app.settings.menuMap.basic': 'تنظیمات پایه ',
3
+  'app.settings.menuMap.security': 'تنظیمات امنیتی',
4
+  'app.settings.menuMap.binding': 'صحافی حساب',
5
+  'app.settings.menuMap.notification': 'اعلان پیام جدید',
6
+  'app.settings.basic.avatar': 'آواتار',
7
+  'app.settings.basic.change-avatar': 'آواتار را تغییر دهید',
8
+  'app.settings.basic.email': 'ایمیل',
9
+  'app.settings.basic.email-message': 'لطفا ایمیل خود را وارد کنید!',
10
+  'app.settings.basic.nickname': 'نام مستعار',
11
+  'app.settings.basic.nickname-message': 'لطفاً نام مستعار خود را وارد کنید!',
12
+  'app.settings.basic.profile': 'پروفایل شخصی',
13
+  'app.settings.basic.profile-message': 'لطفاً مشخصات شخصی خود را وارد کنید!',
14
+  'app.settings.basic.profile-placeholder': 'معرفی مختصر خودتان',
15
+  'app.settings.basic.country': 'کشور / منطقه',
16
+  'app.settings.basic.country-message': 'لطفاً کشور خود را وارد کنید!',
17
+  'app.settings.basic.geographic': 'استان یا شهر',
18
+  'app.settings.basic.geographic-message': 'لطفاً اطلاعات جغرافیایی خود را وارد کنید!',
19
+  'app.settings.basic.address': 'آدرس خیابان',
20
+  'app.settings.basic.address-message': 'لطفا آدرس خود را وارد کنید!',
21
+  'app.settings.basic.phone': 'شماره تلفن',
22
+  'app.settings.basic.phone-message': 'لطفاً تلفن خود را وارد کنید!',
23
+  'app.settings.basic.update': 'به روز رسانی اطلاعات',
24
+  'app.settings.security.strong': 'قوی',
25
+  'app.settings.security.medium': 'متوسط',
26
+  'app.settings.security.weak': 'ضعیف',
27
+  'app.settings.security.password': 'رمز عبور حساب کاربری',
28
+  'app.settings.security.password-description': 'قدرت رمز عبور فعلی',
29
+  'app.settings.security.phone': 'تلفن امنیتی',
30
+  'app.settings.security.phone-description': 'تلفن مقید',
31
+  'app.settings.security.question': 'سوال امنیتی',
32
+  'app.settings.security.question-description':
33
+    'سوال امنیتی تنظیم نشده است و سیاست امنیتی می تواند به طور موثر از امنیت حساب محافظت کند',
34
+  'app.settings.security.email': 'ایمیل پشتیبان',
35
+  'app.settings.security.email-description': 'ایمیل مقید',
36
+  'app.settings.security.mfa': 'دستگاه MFA',
37
+  'app.settings.security.mfa-description':
38
+    'دستگاه MFA بسته نشده ، پس از اتصال ، می تواند دو بار تأیید شود',
39
+  'app.settings.security.modify': 'تغییر',
40
+  'app.settings.security.set': 'تنظیم',
41
+  'app.settings.security.bind': 'بستن',
42
+  'app.settings.binding.taobao': 'اتصال Taobao',
43
+  'app.settings.binding.taobao-description': 'حساب Taobao در حال حاضر بسته نشده است',
44
+  'app.settings.binding.alipay': 'اتصال Alipay',
45
+  'app.settings.binding.alipay-description': 'حساب Alipay در حال حاضر بسته نشده است',
46
+  'app.settings.binding.dingding': 'اتصال DingTalk',
47
+  'app.settings.binding.dingding-description': 'حساب DingTalk در حال حاضر محدود نشده است',
48
+  'app.settings.binding.bind': 'بستن',
49
+  'app.settings.notification.password': 'رمز عبور حساب کاربری',
50
+  'app.settings.notification.password-description':
51
+    'پیام های سایر کاربران در قالب یک نامه ایستگاهی اعلام خواهد شد',
52
+  'app.settings.notification.messages': 'پیام های سیستم',
53
+  'app.settings.notification.messages-description':
54
+    'پیام های سیستم به صورت نامه ایستگاه مطلع می شوند',
55
+  'app.settings.notification.todo': 'اعلان کارها',
56
+  'app.settings.notification.todo-description':
57
+    'لیست کارها به صورت نامه ای از ایستگاه اطلاع داده می شود',
58
+  'app.settings.open': 'باز کن',
59
+  'app.settings.close': 'بستن',
60
+};

+ 25
- 0
src/locales/id-ID.ts Прегледај датотеку

@@ -0,0 +1,25 @@
1
+import component from './id-ID/component';
2
+import globalHeader from './id-ID/globalHeader';
3
+import menu from './id-ID/menu';
4
+import pages from './id-ID/pages';
5
+import pwa from './id-ID/pwa';
6
+import settingDrawer from './id-ID/settingDrawer';
7
+import settings from './id-ID/settings';
8
+
9
+export default {
10
+  'navbar.lang': 'Bahasa',
11
+  'layout.user.link.help': 'Bantuan',
12
+  'layout.user.link.privacy': 'Privasi',
13
+  'layout.user.link.terms': 'Ketentuan',
14
+  'app.preview.down.block': 'Unduh halaman ini dalam projek lokal anda',
15
+  'app.welcome.link.fetch-blocks': 'Dapatkan semua blok',
16
+  'app.welcome.link.block-list':
17
+    'Buat standar dengan cepat, halaman-halaman berdasarkan pengembangan `block`',
18
+  ...globalHeader,
19
+  ...menu,
20
+  ...settingDrawer,
21
+  ...settings,
22
+  ...pwa,
23
+  ...component,
24
+  ...pages,
25
+};

+ 5
- 0
src/locales/id-ID/component.ts Прегледај датотеку

@@ -0,0 +1,5 @@
1
+export default {
2
+  'component.tagSelect.expand': 'Perluas',
3
+  'component.tagSelect.collapse': 'Lipat',
4
+  'component.tagSelect.all': 'Semua',
5
+};

+ 17
- 0
src/locales/id-ID/globalHeader.ts Прегледај датотеку

@@ -0,0 +1,17 @@
1
+export default {
2
+  'component.globalHeader.search': 'Pencarian',
3
+  'component.globalHeader.search.example1': 'Contoh 1 Pencarian',
4
+  'component.globalHeader.search.example2': 'Contoh 2 Pencarian',
5
+  'component.globalHeader.search.example3': 'Contoh 3 Pencarian',
6
+  'component.globalHeader.help': 'Bantuan',
7
+  'component.globalHeader.notification': 'Notifikasi',
8
+  'component.globalHeader.notification.empty': 'Anda telah membaca semua notifikasi',
9
+  'component.globalHeader.message': 'Pesan',
10
+  'component.globalHeader.message.empty': 'Anda telah membaca semua pesan.',
11
+  'component.globalHeader.event': 'Acara',
12
+  'component.globalHeader.event.empty': 'Anda telah melihat semua acara.',
13
+  'component.noticeIcon.clear': 'Kosongkan',
14
+  'component.noticeIcon.cleared': 'Berhasil dikosongkan',
15
+  'component.noticeIcon.empty': 'Tidak ada pemberitahuan',
16
+  'component.noticeIcon.view-more': 'Melihat lebih',
17
+};

+ 52
- 0
src/locales/id-ID/menu.ts Прегледај датотеку

@@ -0,0 +1,52 @@
1
+export default {
2
+  'menu.welcome': 'Selamat Datang',
3
+  'menu.more-blocks': 'Blocks Lainnya',
4
+  'menu.home': 'Halaman Awal',
5
+  'menu.admin': 'Admin',
6
+  'menu.admin.sub-page': 'Sub-Halaman',
7
+  'menu.login': 'Masuk',
8
+  'menu.register': 'Pendaftaran',
9
+  'menu.register-result': 'Hasil Pendaftaran',
10
+  'menu.dashboard': 'Dasbor',
11
+  'menu.dashboard.analysis': 'Analisis',
12
+  'menu.dashboard.monitor': 'Monitor',
13
+  'menu.dashboard.workplace': 'Workplace',
14
+  'menu.exception.403': '403',
15
+  'menu.exception.404': '404',
16
+  'menu.exception.500': '500',
17
+  'menu.form': 'Form',
18
+  'menu.form.basic-form': 'Form Dasar',
19
+  'menu.form.step-form': 'Form Bertahap',
20
+  'menu.form.step-form.info': 'Form Bertahap(menulis informasi yang dibagikan)',
21
+  'menu.form.step-form.confirm': 'Form Bertahap(konfirmasi informasi yang dibagikan)',
22
+  'menu.form.step-form.result': 'Form Bertahap(selesai)',
23
+  'menu.form.advanced-form': 'Form Lanjutan',
24
+  'menu.list': 'Daftar',
25
+  'menu.list.table-list': 'Tabel Pencarian',
26
+  'menu.list.basic-list': 'Daftar Dasar',
27
+  'menu.list.card-list': 'Daftar Kartu',
28
+  'menu.list.search-list': 'Daftar Pencarian',
29
+  'menu.list.search-list.articles': 'Daftar Pencarian(artikel)',
30
+  'menu.list.search-list.projects': 'Daftar Pencarian(projek)',
31
+  'menu.list.search-list.applications': 'Daftar Pencarian(aplikasi)',
32
+  'menu.profile': 'Profil',
33
+  'menu.profile.basic': 'Profil Dasar',
34
+  'menu.profile.advanced': 'Profile Lanjutan',
35
+  'menu.result': 'Hasil',
36
+  'menu.result.success': 'Sukses',
37
+  'menu.result.fail': 'Gagal',
38
+  'menu.exception': 'Pengecualian',
39
+  'menu.exception.not-permission': '403',
40
+  'menu.exception.not-find': '404',
41
+  'menu.exception.server-error': '500',
42
+  'menu.exception.trigger': 'Jalankan',
43
+  'menu.account': 'Akun',
44
+  'menu.account.center': 'Detail Akun',
45
+  'menu.account.settings': 'Pengaturan Akun',
46
+  'menu.account.trigger': 'Mengaktivasi Error',
47
+  'menu.account.logout': 'Keluar',
48
+  'menu.editor': 'Penyusun Grafis',
49
+  'menu.editor.flow': 'Penyusun Alur',
50
+  'menu.editor.mind': 'Penyusun Mind',
51
+  'menu.editor.koni': 'Penyusun Koni',
52
+};

+ 72
- 0
src/locales/id-ID/pages.ts Прегледај датотеку

@@ -0,0 +1,72 @@
1
+export default {
2
+  'pages.layouts.userLayout.title':
3
+    'Ant Design adalah spesifikasi desain Web yang paling berpengaruh di Kabupaten Xihu',
4
+  'pages.login.accountLogin.tab': 'Login dengan akun',
5
+  'pages.login.accountLogin.errorMessage': 'Nama pengguna dan kata sandi salah(admin/ant.design)',
6
+  'pages.login.failure': 'Log masuk gagal, silakan coba lagi!',
7
+  'pages.login.success': 'Login berhasil!',
8
+  'pages.login.username.placeholder': 'nama pengguna: admin atau user',
9
+  'pages.login.username.required': 'Nama pengguna harus diisi!',
10
+  'pages.login.password.placeholder': 'kata sandi: ant.design',
11
+  'pages.login.password.required': 'Kata sandi harus diisi!',
12
+  'pages.login.phoneLogin.tab': 'Login dengan ponsel',
13
+  'pages.login.phoneLogin.errorMessage': 'Kesalahan kode verifikasi',
14
+  'pages.login.phoneNumber.placeholder': 'masukkan nomor telepon',
15
+  'pages.login.phoneNumber.required': 'Nomor ponsel harus diisi!',
16
+  'pages.login.phoneNumber.invalid': 'Nomor ponsel tidak valid!',
17
+  'pages.login.captcha.placeholder': 'kode verifikasi',
18
+  'pages.login.captcha.required': 'Kode verifikasi diperlukan!',
19
+  'pages.login.phoneLogin.getVerificationCode': 'Dapatkan kode',
20
+  'pages.getCaptchaSecondText': 'detik tersisa',
21
+  'pages.login.rememberMe': 'Ingat saya',
22
+  'pages.login.forgotPassword': 'Lupa Kata Sandi?',
23
+  'pages.login.submit': 'Masuk',
24
+  'pages.login.loginWith': 'Masuk dengan :',
25
+  'pages.login.registerAccount': 'Daftar Akun',
26
+  'pages.welcome.link': 'Selamat datang',
27
+  'pages.welcome.alertMessage':
28
+    'Komponen heavy-duty yang lebih cepat dan lebih kuat telah dirilis.',
29
+  'pages.404.subTitle': 'Maaf, halaman yang Anda kunjungi tidak ada. ',
30
+  'pages.404.buttonText': 'Kembali ke halaman utama',
31
+  'pages.admin.subPage.title': 'Halaman ini hanya dapat dilihat oleh admin',
32
+  'pages.admin.subPage.alertMessage':
33
+    'umi ui telah dirilis, silahkan gunakan npm run ui untuk memulai pengalaman.',
34
+  'pages.searchTable.createForm.newRule': 'Aturan baru',
35
+  'pages.searchTable.updateForm.ruleConfig': 'Konfigurasi aturan',
36
+  'pages.searchTable.updateForm.basicConfig': 'Informasi dasar',
37
+  'pages.searchTable.updateForm.ruleName.nameLabel': 'Nama aturan',
38
+  'pages.searchTable.updateForm.ruleName.nameRules': 'Harap masukkan nama aturan!',
39
+  'pages.searchTable.updateForm.ruleDesc.descLabel': 'Deskripsi aturan',
40
+  'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
41
+    'Harap masukkan setidaknya lima karakter',
42
+  'pages.searchTable.updateForm.ruleDesc.descRules':
43
+    'Harap masukkan deskripsi aturan setidaknya lima karakter!',
44
+  'pages.searchTable.updateForm.ruleProps.title': 'Properti aturan',
45
+  'pages.searchTable.updateForm.object': 'Objek pemantauan',
46
+  'pages.searchTable.updateForm.ruleProps.templateLabel': 'Template aturan',
47
+  'pages.searchTable.updateForm.ruleProps.typeLabel': 'Jenis aturan',
48
+  'pages.searchTable.updateForm.schedulingPeriod.title': 'Periode penjadwalan',
49
+  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Waktu mulai',
50
+  'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'Pilih waktu mulai!',
51
+  'pages.searchTable.titleDesc': 'deskripsi',
52
+  'pages.searchTable.ruleName': 'Nama aturan wajib diisi',
53
+  'pages.searchTable.titleCallNo': 'Jumlah panggilan',
54
+  'pages.searchTable.titleStatus': 'Status',
55
+  'pages.searchTable.nameStatus.default': 'default',
56
+  'pages.searchTable.nameStatus.running': 'menyala',
57
+  'pages.searchTable.nameStatus.online': 'online',
58
+  'pages.searchTable.nameStatus.abnormal': 'abnormal',
59
+  'pages.searchTable.titleUpdatedAt': 'Waktu terjadwal',
60
+  'pages.searchTable.exception': 'Harap masukkan alasan pengecualian!',
61
+  'pages.searchTable.titleOption': 'Pengoperasian',
62
+  'pages.searchTable.config': 'Konfigurasi',
63
+  'pages.searchTable.subscribeAlert': 'Berlangganan notifikasi',
64
+  'pages.searchTable.title': 'Formulir pertanyaan',
65
+  'pages.searchTable.new': 'Baru',
66
+  'pages.searchTable.chosen': 'Terpilih',
67
+  'pages.searchTable.item': 'item',
68
+  'pages.searchTable.totalServiceCalls': 'Jumlah total panggilan layanan',
69
+  'pages.searchTable.tenThousand': '0000',
70
+  'pages.searchTable.batchDeletion': 'Penghapusan batch',
71
+  'pages.searchTable.batchApproval': 'Persetujuan batch',
72
+};

+ 7
- 0
src/locales/id-ID/pwa.ts Прегледај датотеку

@@ -0,0 +1,7 @@
1
+export default {
2
+  'app.pwa.offline': 'Koneksi anda terputus',
3
+  'app.pwa.serviceworker.updated': 'Konten baru sudah tersedia',
4
+  'app.pwa.serviceworker.updated.hint':
5
+    'Silahkan klik tombol "Refresh" untuk memuat ulang halaman ini',
6
+  'app.pwa.serviceworker.updated.ok': 'Memuat ulang',
7
+};

+ 32
- 0
src/locales/id-ID/settingDrawer.ts Прегледај датотеку

@@ -0,0 +1,32 @@
1
+export default {
2
+  'app.setting.pagestyle': 'Pengaturan style Halaman',
3
+  'app.setting.pagestyle.dark': 'Style Gelap',
4
+  'app.setting.pagestyle.light': 'Style Cerah',
5
+  'app.setting.content-width': 'Lebar Konten',
6
+  'app.setting.content-width.fixed': 'Tetap',
7
+  'app.setting.content-width.fluid': 'Fluid',
8
+  'app.setting.themecolor': 'Theme Color',
9
+  'app.setting.themecolor.dust': 'Dust Red',
10
+  'app.setting.themecolor.volcano': 'Volcano',
11
+  'app.setting.themecolor.sunset': 'Sunset Orange',
12
+  'app.setting.themecolor.cyan': 'Cyan',
13
+  'app.setting.themecolor.green': 'Polar Green',
14
+  'app.setting.themecolor.daybreak': 'Daybreak Blue (bawaan)',
15
+  'app.setting.themecolor.geekblue': 'Geek Glue',
16
+  'app.setting.themecolor.purple': 'Golden Purple',
17
+  'app.setting.navigationmode': 'Mode Navigasi',
18
+  'app.setting.sidemenu': 'Susunan Menu Samping',
19
+  'app.setting.topmenu': 'Susunan Menu Atas',
20
+  'app.setting.fixedheader': 'Header Tetap',
21
+  'app.setting.fixedsidebar': 'Sidebar Tetap',
22
+  'app.setting.fixedsidebar.hint': 'Berjalan pada Susunan Menu Samping',
23
+  'app.setting.hideheader': 'Sembunyikan Header ketika gulir ke bawah',
24
+  'app.setting.hideheader.hint': 'Bekerja ketika Header tersembunyi dimunculkan',
25
+  'app.setting.othersettings': 'Pengaturan Lainnya',
26
+  'app.setting.weakmode': 'Mode Lemah',
27
+  'app.setting.copy': 'Salin Pengaturan',
28
+  'app.setting.copyinfo':
29
+    'Berhasil disalin, tolong ubah defaultSettings pada src/models/setting.js',
30
+  'app.setting.production.hint':
31
+    'Panel pengaturan hanya muncul pada lingkungan pengembangan, silahkan modifikasi secara menual',
32
+};

+ 60
- 0
src/locales/id-ID/settings.ts Прегледај датотеку

@@ -0,0 +1,60 @@
1
+export default {
2
+  'app.settings.menuMap.basic': 'Pengaturan Dasar',
3
+  'app.settings.menuMap.security': 'Pengaturan Keamanan',
4
+  'app.settings.menuMap.binding': 'Pengikatan Akun',
5
+  'app.settings.menuMap.notification': 'Notifikasi Pesan Baru',
6
+  'app.settings.basic.avatar': 'Avatar',
7
+  'app.settings.basic.change-avatar': 'Ubah avatar',
8
+  'app.settings.basic.email': 'Email',
9
+  'app.settings.basic.email-message': 'Tolong masukkan email!',
10
+  'app.settings.basic.nickname': 'Nickname',
11
+  'app.settings.basic.nickname-message': 'Tolong masukkan Nickname!',
12
+  'app.settings.basic.profile': 'Profil Personal',
13
+  'app.settings.basic.profile-message': 'Tolong masukkan profil personal!',
14
+  'app.settings.basic.profile-placeholder': 'Perkenalan Singkat tentang Diri Anda',
15
+  'app.settings.basic.country': 'Negara/Wilayah',
16
+  'app.settings.basic.country-message': 'Tolong masukkan negara anda!',
17
+  'app.settings.basic.geographic': 'Provinsi atau kota',
18
+  'app.settings.basic.geographic-message': 'Tolong masukkan info geografis anda!',
19
+  'app.settings.basic.address': 'Alamat Jalan',
20
+  'app.settings.basic.address-message': 'Tolong masukkan Alamat Jalan anda!',
21
+  'app.settings.basic.phone': 'Nomor Ponsel',
22
+  'app.settings.basic.phone-message': 'Tolong masukkan Nomor Ponsel anda!',
23
+  'app.settings.basic.update': 'Perbarui Informasi',
24
+  'app.settings.security.strong': 'Kuat',
25
+  'app.settings.security.medium': 'Sedang',
26
+  'app.settings.security.weak': 'Lemah',
27
+  'app.settings.security.password': 'Kata Sandi Akun',
28
+  'app.settings.security.password-description': 'Kekuatan Kata Sandi saat ini',
29
+  'app.settings.security.phone': 'Keamanan Ponsel',
30
+  'app.settings.security.phone-description': 'Mengikat Ponsel',
31
+  'app.settings.security.question': 'Pertanyaan Keamanan',
32
+  'app.settings.security.question-description':
33
+    'Pertanyaan Keamanan belum diatur, dan kebijakan keamanan dapat melindungi akun secara efektif',
34
+  'app.settings.security.email': 'Email Cadangan',
35
+  'app.settings.security.email-description': 'Mengikat Email',
36
+  'app.settings.security.mfa': 'Perangka MFA',
37
+  'app.settings.security.mfa-description':
38
+    'Tidak mengikat Perangkat MFA, setelah diikat, dapat dikonfirmasi dua kali',
39
+  'app.settings.security.modify': 'Modifikasi',
40
+  'app.settings.security.set': 'Setel',
41
+  'app.settings.security.bind': 'Ikat',
42
+  'app.settings.binding.taobao': 'Mengikat Taobao',
43
+  'app.settings.binding.taobao-description': 'Tidak mengikat akun Taobao saat ini',
44
+  'app.settings.binding.alipay': 'Mengikat Alipay',
45
+  'app.settings.binding.alipay-description': 'Tidak mengikat akun Alipay saat ini',
46
+  'app.settings.binding.dingding': 'Mengikat DingTalk',
47
+  'app.settings.binding.dingding-description': 'Tidak mengikat akun DingTalk',
48
+  'app.settings.binding.bind': 'Ikat',
49
+  'app.settings.notification.password': 'Kata Sandi Akun',
50
+  'app.settings.notification.password-description':
51
+    'Pesan dari pengguna lain akan diberitahu dalam bentuk surat',
52
+  'app.settings.notification.messages': 'Pesan Sistem',
53
+  'app.settings.notification.messages-description':
54
+    'Pesan sistem akan diberitahu dalam bentuk surat',
55
+  'app.settings.notification.todo': 'Notifikasi daftar To-do',
56
+  'app.settings.notification.todo-description':
57
+    'Daftar to-do akan diberitahukan dalam bentuk surat dari stasiun',
58
+  'app.settings.open': 'Buka',
59
+  'app.settings.close': 'Tutup',
60
+};

+ 24
- 0
src/locales/ja-JP.ts Прегледај датотеку

@@ -0,0 +1,24 @@
1
+import component from './ja-JP/component';
2
+import globalHeader from './ja-JP/globalHeader';
3
+import menu from './ja-JP/menu';
4
+import pages from './ja-JP/pages';
5
+import pwa from './ja-JP/pwa';
6
+import settingDrawer from './ja-JP/settingDrawer';
7
+import settings from './ja-JP/settings';
8
+
9
+export default {
10
+  'navBar.lang': '言語',
11
+  'layout.user.link.help': 'ヘルプ',
12
+  'layout.user.link.privacy': 'プライバシー',
13
+  'layout.user.link.terms': '利用規約',
14
+  'app.preview.down.block': 'このページをローカルプロジェクトにダウンロードしてください',
15
+  'app.welcome.link.fetch-blocks': '',
16
+  'app.welcome.link.block-list': '',
17
+  ...globalHeader,
18
+  ...menu,
19
+  ...settingDrawer,
20
+  ...settings,
21
+  ...pwa,
22
+  ...component,
23
+  ...pages,
24
+};

+ 5
- 0
src/locales/ja-JP/component.ts Прегледај датотеку

@@ -0,0 +1,5 @@
1
+export default {
2
+  'component.tagSelect.expand': '展開',
3
+  'component.tagSelect.collapse': '折りたたむ',
4
+  'component.tagSelect.all': 'すべて',
5
+};

+ 17
- 0
src/locales/ja-JP/globalHeader.ts Прегледај датотеку

@@ -0,0 +1,17 @@
1
+export default {
2
+  'component.globalHeader.search': '検索',
3
+  'component.globalHeader.search.example1': '検索例1',
4
+  'component.globalHeader.search.example2': '検索例2',
5
+  'component.globalHeader.search.example3': '検索例3',
6
+  'component.globalHeader.help': 'ヘルプ',
7
+  'component.globalHeader.notification': '通知',
8
+  'component.globalHeader.notification.empty': 'すべての通知を表示しました。',
9
+  'component.globalHeader.message': 'メッセージ',
10
+  'component.globalHeader.message.empty': 'すべてのメッセージを表示しました。',
11
+  'component.globalHeader.event': 'イベント',
12
+  'component.globalHeader.event.empty': 'すべてのイベントを表示しました。',
13
+  'component.noticeIcon.clear': 'クリア',
14
+  'component.noticeIcon.cleared': 'クリア済み',
15
+  'component.noticeIcon.empty': '通知なし',
16
+  'component.noticeIcon.view-more': 'もっと見る',
17
+};

+ 52
- 0
src/locales/ja-JP/menu.ts Прегледај датотеку

@@ -0,0 +1,52 @@
1
+export default {
2
+  'menu.welcome': 'ようこそ',
3
+  'menu.more-blocks': 'その他のブロック',
4
+  'menu.home': 'ホーム',
5
+  'menu.admin': '管理者',
6
+  'menu.admin.sub-page': 'サブページ',
7
+  'menu.login': 'ログイン',
8
+  'menu.register': '登録',
9
+  'menu.register-result': '登録結果',
10
+  'menu.dashboard': 'ダッシュボード',
11
+  'menu.dashboard.analysis': '分析',
12
+  'menu.dashboard.monitor': 'モニター',
13
+  'menu.dashboard.workplace': '職場',
14
+  'menu.exception.403': '403',
15
+  'menu.exception.404': '404',
16
+  'menu.exception.500': '500',
17
+  'menu.form': 'フォーム',
18
+  'menu.form.basic-form': '基本フォーム',
19
+  'menu.form.step-form': 'ステップフォーム',
20
+  'menu.form.step-form.info': 'ステップフォーム(転送情報の書き込み)',
21
+  'menu.form.step-form.confirm': 'ステップフォーム(転送情報の確認)',
22
+  'menu.form.step-form.result': 'ステップフォーム(完成)',
23
+  'menu.form.advanced-form': '高度なフォーム',
24
+  'menu.list': 'リスト',
25
+  'menu.list.table-list': '検索テーブル',
26
+  'menu.list.basic-list': '基本リスト',
27
+  'menu.list.card-list': 'カードリスト',
28
+  'menu.list.search-list': '検索リスト',
29
+  'menu.list.search-list.articles': '検索リスト(記事)',
30
+  'menu.list.search-list.projects': '検索リスト(プロジェクト)',
31
+  'menu.list.search-list.applications': '検索リスト(アプリ)',
32
+  'menu.profile': 'プロフィール',
33
+  'menu.profile.basic': '基本プロフィール',
34
+  'menu.profile.advanced': '高度なプロフィール',
35
+  'menu.result': '結果',
36
+  'menu.result.success': '成功',
37
+  'menu.result.fail': '失敗',
38
+  'menu.exception': '例外',
39
+  'menu.exception.not-permission': '403',
40
+  'menu.exception.not-find': '404',
41
+  'menu.exception.server-error': '500',
42
+  'menu.exception.trigger': 'トリガー',
43
+  'menu.account': 'アカウント',
44
+  'menu.account.center': 'アカウントセンター',
45
+  'menu.account.settings': 'アカウント設定',
46
+  'menu.account.trigger': 'トリガーエラー',
47
+  'menu.account.logout': 'ログアウト',
48
+  'menu.editor': 'グラフィックエディタ',
49
+  'menu.editor.flow': 'フローエディタ',
50
+  'menu.editor.mind': 'マインドエディター',
51
+  'menu.editor.koni': 'コニエディター',
52
+};

+ 69
- 0
src/locales/ja-JP/pages.ts Прегледај датотеку

@@ -0,0 +1,69 @@
1
+export default {
2
+  'pages.layouts.userLayout.title': 'Ant Designは、西湖区で最も影響力のあるWebデザイン仕様です。',
3
+  'pages.login.accountLogin.tab': 'アカウントログイン',
4
+  'pages.login.accountLogin.errorMessage':
5
+    'ユーザー名/パスワードが正しくありません(admin/ant.design)',
6
+  'pages.login.failure': 'ログインに失敗したら、もう一度試してください!',
7
+  'pages.login.success': 'ログイン成功!',
8
+  'pages.login.username.placeholder': 'ユーザー名:adminまたはuser',
9
+  'pages.login.username.required': 'ユーザー名を入力してください!',
10
+  'pages.login.password.placeholder': 'パスワード:ant.design',
11
+  'pages.login.password.required': 'パスワードを入力してください!',
12
+  'pages.login.phoneLogin.tab': '電話ログイン',
13
+  'pages.login.phoneLogin.errorMessage': '検証コードエラー',
14
+  'pages.login.phoneNumber.placeholder': '電話番号',
15
+  'pages.login.phoneNumber.required': '電話番号を入力してください!',
16
+  'pages.login.phoneNumber.invalid': '電話番号が無効です!',
17
+  'pages.login.captcha.placeholder': '確認コード',
18
+  'pages.login.captcha.required': '確認コードを入力してください!',
19
+  'pages.login.phoneLogin.getVerificationCode': '確認コードを取得',
20
+  'pages.getCaptchaSecondText': '秒',
21
+  'pages.login.rememberMe': 'Remember me',
22
+  'pages.login.forgotPassword': 'パスワードをお忘れですか?',
23
+  'pages.login.submit': 'ログイン',
24
+  'pages.login.loginWith': 'その他のログイン方法:',
25
+  'pages.login.registerAccount': 'アカウント登録',
26
+  'pages.welcome.link': 'ようこそ',
27
+  'pages.welcome.alertMessage': 'より高速で強力な頑丈なコンポーネントがリリースされました。',
28
+  'pages.404.subTitle': '申し訳ありませんが、アクセスしたページは存在しません。',
29
+  'pages.404.buttonText': 'ホームに戻る',
30
+  'pages.admin.subPage.title': 'このページは管理者のみが表示できます',
31
+  'pages.admin.subPage.alertMessage':
32
+    'Umi uiがリリースされました。npm run uiを使用して体験してください。',
33
+  'pages.searchTable.createForm.newRule': '新しいルール',
34
+  'pages.searchTable.updateForm.ruleConfig': 'ルール構成',
35
+  'pages.searchTable.updateForm.basicConfig': '基本情報',
36
+  'pages.searchTable.updateForm.ruleName.nameLabel': 'ルール名',
37
+  'pages.searchTable.updateForm.ruleName.nameRules': 'ルール名を入力してください!',
38
+  'pages.searchTable.updateForm.ruleDesc.descLabel': 'ルールの説明',
39
+  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '5文字以上入力してください',
40
+  'pages.searchTable.updateForm.ruleDesc.descRules': '5文字以上のルールの説明を入力してください!',
41
+  'pages.searchTable.updateForm.ruleProps.title': 'プロパティの構成',
42
+  'pages.searchTable.updateForm.object': '監視対象',
43
+  'pages.searchTable.updateForm.ruleProps.templateLabel': 'ルールテンプレート',
44
+  'pages.searchTable.updateForm.ruleProps.typeLabel': 'ルールタイプ',
45
+  'pages.searchTable.updateForm.schedulingPeriod.title': 'スケジュール期間の設定',
46
+  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '開始時間',
47
+  'pages.searchTable.updateForm.schedulingPeriod.timeRules': '開始時間を選択してください!',
48
+  'pages.searchTable.titleDesc': '説明',
49
+  'pages.searchTable.ruleName': 'ルール名が必要です',
50
+  'pages.searchTable.titleCallNo': 'サービスコール数',
51
+  'pages.searchTable.titleStatus': 'ステータス',
52
+  'pages.searchTable.nameStatus.default': 'デフォルト',
53
+  'pages.searchTable.nameStatus.running': '起動中',
54
+  'pages.searchTable.nameStatus.online': 'オンライン',
55
+  'pages.searchTable.nameStatus.abnormal': '異常',
56
+  'pages.searchTable.titleUpdatedAt': '最終スケジュール',
57
+  'pages.searchTable.exception': '例外の理由を入力してください!',
58
+  'pages.searchTable.titleOption': 'オプション',
59
+  'pages.searchTable.config': '構成',
60
+  'pages.searchTable.subscribeAlert': 'アラートを購読する',
61
+  'pages.searchTable.title': 'お問い合わせフォーム',
62
+  'pages.searchTable.new': '新しい',
63
+  'pages.searchTable.chosen': '選んだ項目',
64
+  'pages.searchTable.item': '項目',
65
+  'pages.searchTable.totalServiceCalls': 'サービスコールの総数',
66
+  'pages.searchTable.tenThousand': '万',
67
+  'pages.searchTable.batchDeletion': 'バッチ削除',
68
+  'pages.searchTable.batchApproval': 'バッチ承認',
69
+};

+ 7
- 0
src/locales/ja-JP/pwa.ts Прегледај датотеку

@@ -0,0 +1,7 @@
1
+export default {
2
+  'app.pwa.offline': 'あなたは今オフラインです',
3
+  'app.pwa.serviceworker.updated': '新しいコンテンツが利用可能です',
4
+  'app.pwa.serviceworker.updated.hint':
5
+    '現在のページをリロードするには、「更新」ボタンを押してください',
6
+  'app.pwa.serviceworker.updated.ok': 'リフレッシュ',
7
+};

+ 31
- 0
src/locales/ja-JP/settingDrawer.ts Прегледај датотеку

@@ -0,0 +1,31 @@
1
+export default {
2
+  'app.setting.pagestyle': 'ページスタイル設定',
3
+  'app.setting.pagestyle.dark': 'ダークスタイル',
4
+  'app.setting.pagestyle.light': 'ライトスタイル',
5
+  'app.setting.content-width': 'コンテンツの幅',
6
+  'app.setting.content-width.fixed': '固定',
7
+  'app.setting.content-width.fluid': '流体',
8
+  'app.setting.themecolor': 'テーマカラー',
9
+  'app.setting.themecolor.dust': 'ダストレッド',
10
+  'app.setting.themecolor.volcano': 'ボルケ-ノ',
11
+  'app.setting.themecolor.sunset': 'サンセットオレンジ',
12
+  'app.setting.themecolor.cyan': 'シアン',
13
+  'app.setting.themecolor.green': 'ポーラーグリーン',
14
+  'app.setting.themecolor.daybreak': '夜明けの青(デフォルト)',
15
+  'app.setting.themecolor.geekblue': 'ギーク ブルー',
16
+  'app.setting.themecolor.purple': 'ゴールデンパープル',
17
+  'app.setting.navigationmode': 'ナビゲーションモード',
18
+  'app.setting.sidemenu': 'サイドメニューのレイアウト',
19
+  'app.setting.topmenu': 'トップメニューのレイアウト',
20
+  'app.setting.fixedheader': '固定ヘッダー',
21
+  'app.setting.fixedsidebar': '固定サイドバー',
22
+  'app.setting.fixedsidebar.hint': 'サイドメニューのレイアウトで動作します',
23
+  'app.setting.hideheader': 'スクロール時の非表示ヘッダー',
24
+  'app.setting.hideheader.hint': '非表示ヘッダーが有効になっている場合に機能します',
25
+  'app.setting.othersettings': 'その他の設定',
26
+  'app.setting.weakmode': 'ウィークモード',
27
+  'app.setting.copy': 'コピー設定',
28
+  'app.setting.copyinfo':
29
+    'コピーが成功しました。src/models/setting.jsのdefaultSettingsを置き換えてください',
30
+  'app.setting.production.hint': '設定パネルは開発環境でのみ表示されます。手動で変更してください',
31
+};

+ 59
- 0
src/locales/ja-JP/settings.ts Прегледај датотеку

@@ -0,0 +1,59 @@
1
+export default {
2
+  'app.settings.menuMap.basic': '基本設定',
3
+  'app.settings.menuMap.security': 'セキュリティ設定',
4
+  'app.settings.menuMap.binding': 'アカウントのバインド',
5
+  'app.settings.menuMap.notification': '新しいメッセージの通知',
6
+  'app.settings.basic.avatar': 'アバター',
7
+  'app.settings.basic.change-avatar': 'アバターを変更する',
8
+  'app.settings.basic.email': 'メール',
9
+  'app.settings.basic.email-message': 'メールアドレスを入力してください!',
10
+  'app.settings.basic.nickname': 'ニックネーム',
11
+  'app.settings.basic.nickname-message': 'ニックネームを入力してください!',
12
+  'app.settings.basic.profile': '個人プロフィール',
13
+  'app.settings.basic.profile-message': '個人プロフィールを入力してください!',
14
+  'app.settings.basic.profile-placeholder': '自己紹介',
15
+  'app.settings.basic.country': '国/地域',
16
+  'app.settings.basic.country-message': 'あなたの国を入力してください!',
17
+  'app.settings.basic.geographic': '州または市',
18
+  'app.settings.basic.geographic-message': '地理情報を入力してください!',
19
+  'app.settings.basic.address': '住所',
20
+  'app.settings.basic.address-message': '住所を入力してください!',
21
+  'app.settings.basic.phone': '電話番号',
22
+  'app.settings.basic.phone-message': '電話番号を入力してください!',
23
+  'app.settings.basic.update': '更新情報',
24
+  'app.settings.security.strong': '強い',
25
+  'app.settings.security.medium': 'ミディアム',
26
+  'app.settings.security.weak': '弱い',
27
+  'app.settings.security.password': 'アカウントパスワード',
28
+  'app.settings.security.password-description': '現在のパスワードの強度',
29
+  'app.settings.security.phone': 'セキュリティ電話番号',
30
+  'app.settings.security.phone-description': 'バインドされた電話番号',
31
+  'app.settings.security.question': '秘密の質問',
32
+  'app.settings.security.question-description':
33
+    'セキュリティの質問が設定されてません。セキュリティポリシーはアカウントのセキュリティを効果的に保護できます',
34
+  'app.settings.security.email': 'バックアップメール',
35
+  'app.settings.security.email-description': 'バインドされたメール',
36
+  'app.settings.security.mfa': '多要素認証デバイス',
37
+  'app.settings.security.mfa-description':
38
+    'バインドされていない多要素認証デバイスは、バインド後、2回確認できます',
39
+  'app.settings.security.modify': '変更する',
40
+  'app.settings.security.set': 'セットする',
41
+  'app.settings.security.bind': 'バインド',
42
+  'app.settings.binding.taobao': 'タオバオをバインドする',
43
+  'app.settings.binding.taobao-description': '現在バインドされていないタオバオアカウント',
44
+  'app.settings.binding.alipay': 'アリペイをバインドする',
45
+  'app.settings.binding.alipay-description': '現在バインドされていないアリペイアカウント',
46
+  'app.settings.binding.dingding': 'ディントークをバインドする',
47
+  'app.settings.binding.dingding-description': '現在バインドされていないディントークアカウント',
48
+  'app.settings.binding.bind': 'バインド',
49
+  'app.settings.notification.password': 'アカウントパスワード',
50
+  'app.settings.notification.password-description':
51
+    '他のユーザーからのメッセージは、ステーションレターの形式で通知されます',
52
+  'app.settings.notification.messages': 'システムメッセージ',
53
+  'app.settings.notification.messages-description':
54
+    'システムメッセージは、ステーションレターの形式で通知されます',
55
+  'app.settings.notification.todo': 'To Do(用事) 通知',
56
+  'app.settings.notification.todo-description': 'To Doタスクは、内部レターの形式で通知されます',
57
+  'app.settings.open': '開く',
58
+  'app.settings.close': '閉じる',
59
+};

+ 22
- 0
src/locales/pt-BR.ts Прегледај датотеку

@@ -0,0 +1,22 @@
1
+import component from './pt-BR/component';
2
+import globalHeader from './pt-BR/globalHeader';
3
+import menu from './pt-BR/menu';
4
+import pages from './pt-BR/pages';
5
+import pwa from './pt-BR/pwa';
6
+import settingDrawer from './pt-BR/settingDrawer';
7
+import settings from './pt-BR/settings';
8
+
9
+export default {
10
+  'navBar.lang': 'Idiomas',
11
+  'layout.user.link.help': 'ajuda',
12
+  'layout.user.link.privacy': 'política de privacidade',
13
+  'layout.user.link.terms': 'termos de serviços',
14
+  'app.preview.down.block': 'Download this page to your local project',
15
+  ...globalHeader,
16
+  ...menu,
17
+  ...settingDrawer,
18
+  ...settings,
19
+  ...pwa,
20
+  ...component,
21
+  ...pages,
22
+};

+ 5
- 0
src/locales/pt-BR/component.ts Прегледај датотеку

@@ -0,0 +1,5 @@
1
+export default {
2
+  'component.tagSelect.expand': 'Expandir',
3
+  'component.tagSelect.collapse': 'Diminuir',
4
+  'component.tagSelect.all': 'Todas',
5
+};

+ 17
- 0
src/locales/pt-BR/globalHeader.ts Прегледај датотеку

@@ -0,0 +1,17 @@
1
+export default {
2
+  'component.globalHeader.search': 'Busca',
3
+  'component.globalHeader.search.example1': 'Exemplo de busca 1',
4
+  'component.globalHeader.search.example2': 'Exemplo de busca 2',
5
+  'component.globalHeader.search.example3': 'Exemplo de busca 3',
6
+  'component.globalHeader.help': 'Ajuda',
7
+  'component.globalHeader.notification': 'Notificação',
8
+  'component.globalHeader.notification.empty': 'Você visualizou todas as notificações.',
9
+  'component.globalHeader.message': 'Mensagem',
10
+  'component.globalHeader.message.empty': 'Você visualizou todas as mensagens.',
11
+  'component.globalHeader.event': 'Evento',
12
+  'component.globalHeader.event.empty': 'Você visualizou todos os eventos.',
13
+  'component.noticeIcon.clear': 'Limpar',
14
+  'component.noticeIcon.cleared': 'Limpo',
15
+  'component.noticeIcon.empty': 'Sem notificações',
16
+  'component.noticeIcon.view-more': 'Veja mais',
17
+};

+ 52
- 0
src/locales/pt-BR/menu.ts Прегледај датотеку

@@ -0,0 +1,52 @@
1
+export default {
2
+  'menu.welcome': 'Welcome',
3
+  'menu.more-blocks': 'More Blocks',
4
+  'menu.home': 'Início',
5
+  'menu.admin': 'Admin',
6
+  'menu.admin.sub-page': 'Sub-Page',
7
+  'menu.login': 'Login',
8
+  'menu.register': 'Registro',
9
+  'menu.register-result': 'Resultado de registro',
10
+  'menu.dashboard': 'Dashboard',
11
+  'menu.dashboard.analysis': 'Análise',
12
+  'menu.dashboard.monitor': 'Monitor',
13
+  'menu.dashboard.workplace': 'Ambiente de Trabalho',
14
+  'menu.exception.403': '403',
15
+  'menu.exception.404': '404',
16
+  'menu.exception.500': '500',
17
+  'menu.form': 'Formulário',
18
+  'menu.form.basic-form': 'Formulário Básico',
19
+  'menu.form.step-form': 'Formulário Assistido',
20
+  'menu.form.step-form.info': 'Formulário Assistido(gravar informações de transferência)',
21
+  'menu.form.step-form.confirm': 'Formulário Assistido(confirmar informações de transferência)',
22
+  'menu.form.step-form.result': 'Formulário Assistido(finalizado)',
23
+  'menu.form.advanced-form': 'Formulário Avançado',
24
+  'menu.list': 'Lista',
25
+  'menu.list.table-list': 'Tabela de Busca',
26
+  'menu.list.basic-list': 'Lista Básica',
27
+  'menu.list.card-list': 'Lista de Card',
28
+  'menu.list.search-list': 'Lista de Busca',
29
+  'menu.list.search-list.articles': 'Lista de Busca(artigos)',
30
+  'menu.list.search-list.projects': 'Lista de Busca(projetos)',
31
+  'menu.list.search-list.applications': 'Lista de Busca(aplicações)',
32
+  'menu.profile': 'Perfil',
33
+  'menu.profile.basic': 'Perfil Básico',
34
+  'menu.profile.advanced': 'Perfil Avançado',
35
+  'menu.result': 'Resultado',
36
+  'menu.result.success': 'Sucesso',
37
+  'menu.result.fail': 'Falha',
38
+  'menu.exception': 'Exceção',
39
+  'menu.exception.not-permission': '403',
40
+  'menu.exception.not-find': '404',
41
+  'menu.exception.server-error': '500',
42
+  'menu.exception.trigger': 'Disparar',
43
+  'menu.account': 'Conta',
44
+  'menu.account.center': 'Central da Conta',
45
+  'menu.account.settings': 'Configurar Conta',
46
+  'menu.account.trigger': 'Disparar Erro',
47
+  'menu.account.logout': 'Sair',
48
+  'menu.editor': 'Graphic Editor',
49
+  'menu.editor.flow': 'Flow Editor',
50
+  'menu.editor.mind': 'Mind Editor',
51
+  'menu.editor.koni': 'Koni Editor',
52
+};

+ 72
- 0
src/locales/pt-BR/pages.ts Прегледај датотеку

@@ -0,0 +1,72 @@
1
+export default {
2
+  'pages.layouts.userLayout.title':
3
+    'Ant Design é a especificação de web design mais influente no distrito de Xihu',
4
+  'pages.login.accountLogin.tab': 'Login da conta',
5
+  'pages.login.accountLogin.errorMessage': 'usuário/senha incorreto(admin/ant.design)',
6
+  'pages.login.failure': 'Login falhou, por favor tente novamente!',
7
+  'pages.login.success': 'Login efetuado com sucesso!',
8
+  'pages.login.username.placeholder': 'Usuário: admin or user',
9
+  'pages.login.username.required': 'Por favor insira seu usuário!',
10
+  'pages.login.password.placeholder': 'Senha: ant.design',
11
+  'pages.login.password.required': 'Por favor insira sua senha!',
12
+  'pages.login.phoneLogin.tab': 'Login com Telefone',
13
+  'pages.login.phoneLogin.errorMessage': 'Erro de Código de Verificação',
14
+  'pages.login.phoneNumber.placeholder': 'Telefone',
15
+  'pages.login.phoneNumber.required': 'Por favor entre com seu telefone!',
16
+  'pages.login.phoneNumber.invalid': 'Telefone é inválido!',
17
+  'pages.login.captcha.placeholder': 'Código de Verificação',
18
+  'pages.login.captcha.required': 'Por favor entre com o código de verificação!',
19
+  'pages.login.phoneLogin.getVerificationCode': 'Obter Código',
20
+  'pages.getCaptchaSecondText': 'seg(s)',
21
+  'pages.login.rememberMe': 'Lembre-me',
22
+  'pages.login.forgotPassword': 'Perdeu a Senha ?',
23
+  'pages.login.submit': 'Enviar',
24
+  'pages.login.loginWith': 'Login com :',
25
+  'pages.login.registerAccount': 'Registra Conta',
26
+  'pages.welcome.link': 'Bem-vindo',
27
+  'pages.welcome.alertMessage': 'Componentes pesados mais rápidos e mais fortes foram lançados.',
28
+  'pages.404.subTitle': 'Desculpe, a página que você visitou não existe. ',
29
+  'pages.404.buttonText': 'Voltar à página inicial',
30
+  'pages.admin.subPage.title': 'Esta página só pode ser vista pelo Admin',
31
+  'pages.admin.subPage.alertMessage':
32
+    'O Umi ui foi lançado, bem-vindo ao usar o npm run ui para iniciar a experiência.',
33
+  'pages.searchTable.createForm.newRule': 'Neva Regra',
34
+  'pages.searchTable.updateForm.ruleConfig': 'Configuração de Regra',
35
+  'pages.searchTable.updateForm.basicConfig': 'Informação básica',
36
+  'pages.searchTable.updateForm.ruleName.nameLabel': 'Nome da Regra',
37
+  'pages.searchTable.updateForm.ruleName.nameRules': 'Por favor entre com o nome da regra!',
38
+  'pages.searchTable.updateForm.ruleDesc.descLabel': 'Descrição da Regra',
39
+  'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
40
+    'Por favor insira ao menos cinco caracteres',
41
+  'pages.searchTable.updateForm.ruleDesc.descRules':
42
+    'Insira uma descrição de regra de pelo menos cinco caracteres!',
43
+  'pages.searchTable.updateForm.ruleProps.title': 'Configurar Propriedades',
44
+  'pages.searchTable.updateForm.object': 'Objeto de Monitoramento',
45
+  'pages.searchTable.updateForm.ruleProps.templateLabel': 'Modelo de Regra',
46
+  'pages.searchTable.updateForm.ruleProps.typeLabel': 'Tipo de Regra',
47
+  'pages.searchTable.updateForm.schedulingPeriod.title': 'Definir Período de Agendamento',
48
+  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Hora de Início',
49
+  'pages.searchTable.updateForm.schedulingPeriod.timeRules':
50
+    'Por favor selecione um horáriod e início!',
51
+  'pages.searchTable.titleDesc': 'Descrição',
52
+  'pages.searchTable.ruleName': 'O nome da regra é obrigatório',
53
+  'pages.searchTable.titleCallNo': 'Número de chamadas de serviço',
54
+  'pages.searchTable.titleStatus': 'Status',
55
+  'pages.searchTable.nameStatus.default': 'padrão',
56
+  'pages.searchTable.nameStatus.running': 'executando',
57
+  'pages.searchTable.nameStatus.online': 'online',
58
+  'pages.searchTable.nameStatus.abnormal': 'anormal',
59
+  'pages.searchTable.titleUpdatedAt': 'Última programação em',
60
+  'pages.searchTable.exception': 'Por favor, indique o motivo da exceção!',
61
+  'pages.searchTable.titleOption': 'Opção',
62
+  'pages.searchTable.config': 'Configuração',
63
+  'pages.searchTable.subscribeAlert': 'Inscreva-se para receber alertas',
64
+  'pages.searchTable.title': 'Formulário de Consulta',
65
+  'pages.searchTable.new': 'Novo',
66
+  'pages.searchTable.chosen': 'selecionado',
67
+  'pages.searchTable.item': 'item',
68
+  'pages.searchTable.totalServiceCalls': 'Número total de chamadas de serviço',
69
+  'pages.searchTable.tenThousand': '0000',
70
+  'pages.searchTable.batchDeletion': 'deleção em lote',
71
+  'pages.searchTable.batchApproval': 'aprovação em lote',
72
+};

+ 7
- 0
src/locales/pt-BR/pwa.ts Прегледај датотеку

@@ -0,0 +1,7 @@
1
+export default {
2
+  'app.pwa.offline': 'Você está offline agora',
3
+  'app.pwa.serviceworker.updated': 'Novo conteúdo está disponível',
4
+  'app.pwa.serviceworker.updated.hint':
5
+    'Por favor, pressione o botão "Atualizar" para recarregar a página atual',
6
+  'app.pwa.serviceworker.updated.ok': 'Atualizar',
7
+};

+ 32
- 0
src/locales/pt-BR/settingDrawer.ts Прегледај датотеку

@@ -0,0 +1,32 @@
1
+export default {
2
+  'app.setting.pagestyle': 'Configuração de estilo da página',
3
+  'app.setting.pagestyle.dark': 'Dark style',
4
+  'app.setting.pagestyle.light': 'Light style',
5
+  'app.setting.content-width': 'Largura do conteúdo',
6
+  'app.setting.content-width.fixed': 'Fixo',
7
+  'app.setting.content-width.fluid': 'Fluido',
8
+  'app.setting.themecolor': 'Cor do Tema',
9
+  'app.setting.themecolor.dust': 'Dust Red',
10
+  'app.setting.themecolor.volcano': 'Volcano',
11
+  'app.setting.themecolor.sunset': 'Sunset Orange',
12
+  'app.setting.themecolor.cyan': 'Cyan',
13
+  'app.setting.themecolor.green': 'Polar Green',
14
+  'app.setting.themecolor.daybreak': 'Daybreak Blue (default)',
15
+  'app.setting.themecolor.geekblue': 'Geek Glue',
16
+  'app.setting.themecolor.purple': 'Golden Purple',
17
+  'app.setting.navigationmode': 'Modo de Navegação',
18
+  'app.setting.sidemenu': 'Layout do Menu Lateral',
19
+  'app.setting.topmenu': 'Layout do Menu Superior',
20
+  'app.setting.fixedheader': 'Cabeçalho fixo',
21
+  'app.setting.fixedsidebar': 'Barra lateral fixa',
22
+  'app.setting.fixedsidebar.hint': 'Funciona no layout do menu lateral',
23
+  'app.setting.hideheader': 'Esconder o cabeçalho quando rolar',
24
+  'app.setting.hideheader.hint': 'Funciona quando o esconder cabeçalho está abilitado',
25
+  'app.setting.othersettings': 'Outras configurações',
26
+  'app.setting.weakmode': 'Weak Mode',
27
+  'app.setting.copy': 'Copiar Configuração',
28
+  'app.setting.copyinfo':
29
+    'copiado com sucesso, por favor trocar o defaultSettings em src/models/setting.js',
30
+  'app.setting.production.hint':
31
+    'O painel de configuração apenas é exibido no ambiente de desenvolvimento, por favor modifique manualmente o',
32
+};

+ 60
- 0
src/locales/pt-BR/settings.ts Прегледај датотеку

@@ -0,0 +1,60 @@
1
+export default {
2
+  'app.settings.menuMap.basic': 'Configurações Básicas',
3
+  'app.settings.menuMap.security': 'Configurações de Segurança',
4
+  'app.settings.menuMap.binding': 'Vinculação de Conta',
5
+  'app.settings.menuMap.notification': 'Mensagens de Notificação',
6
+  'app.settings.basic.avatar': 'Avatar',
7
+  'app.settings.basic.change-avatar': 'Alterar avatar',
8
+  'app.settings.basic.email': 'Email',
9
+  'app.settings.basic.email-message': 'Por favor insira seu email!',
10
+  'app.settings.basic.nickname': 'Nome de usuário',
11
+  'app.settings.basic.nickname-message': 'Por favor insira seu nome de usuário!',
12
+  'app.settings.basic.profile': 'Perfil pessoal',
13
+  'app.settings.basic.profile-message': 'Por favor insira seu perfil pessoal!',
14
+  'app.settings.basic.profile-placeholder': 'Breve introdução sua',
15
+  'app.settings.basic.country': 'País/Região',
16
+  'app.settings.basic.country-message': 'Por favor insira país!',
17
+  'app.settings.basic.geographic': 'Província, estado ou cidade',
18
+  'app.settings.basic.geographic-message': 'Por favor insira suas informações geográficas!',
19
+  'app.settings.basic.address': 'Endereço',
20
+  'app.settings.basic.address-message': 'Por favor insira seu endereço!',
21
+  'app.settings.basic.phone': 'Número de telefone',
22
+  'app.settings.basic.phone-message': 'Por favor insira seu número de telefone!',
23
+  'app.settings.basic.update': 'Atualizar Informações',
24
+  'app.settings.security.strong': 'Forte',
25
+  'app.settings.security.medium': 'Média',
26
+  'app.settings.security.weak': 'Fraca',
27
+  'app.settings.security.password': 'Senha da Conta',
28
+  'app.settings.security.password-description': 'Força da senha',
29
+  'app.settings.security.phone': 'Telefone de Seguraça',
30
+  'app.settings.security.phone-description': 'Telefone vinculado',
31
+  'app.settings.security.question': 'Pergunta de Segurança',
32
+  'app.settings.security.question-description':
33
+    'A pergunta de segurança não está definida e a política de segurança pode proteger efetivamente a segurança da conta',
34
+  'app.settings.security.email': 'Email de Backup',
35
+  'app.settings.security.email-description': 'Email vinculado',
36
+  'app.settings.security.mfa': 'Dispositivo MFA',
37
+  'app.settings.security.mfa-description':
38
+    'O dispositivo MFA não vinculado, após a vinculação, pode ser confirmado duas vezes',
39
+  'app.settings.security.modify': 'Modificar',
40
+  'app.settings.security.set': 'Atribuir',
41
+  'app.settings.security.bind': 'Vincular',
42
+  'app.settings.binding.taobao': 'Vincular Taobao',
43
+  'app.settings.binding.taobao-description': 'Atualmente não vinculado à conta Taobao',
44
+  'app.settings.binding.alipay': 'Vincular Alipay',
45
+  'app.settings.binding.alipay-description': 'Atualmente não vinculado à conta Alipay',
46
+  'app.settings.binding.dingding': 'Vincular DingTalk',
47
+  'app.settings.binding.dingding-description': 'Atualmente não vinculado à conta DingTalk',
48
+  'app.settings.binding.bind': 'Vincular',
49
+  'app.settings.notification.password': 'Senha da Conta',
50
+  'app.settings.notification.password-description':
51
+    'Mensagens de outros usuários serão notificadas na forma de uma estação de letra',
52
+  'app.settings.notification.messages': 'Mensagens de Sistema',
53
+  'app.settings.notification.messages-description':
54
+    'Mensagens de sistema serão notificadas na forma de uma estação de letra',
55
+  'app.settings.notification.todo': 'Notificação de To-do',
56
+  'app.settings.notification.todo-description':
57
+    'A lista de to-do será notificada na forma de uma estação de letra',
58
+  'app.settings.open': 'Aberto',
59
+  'app.settings.close': 'Fechado',
60
+};

+ 24
- 0
src/locales/zh-CN.ts Прегледај датотеку

@@ -0,0 +1,24 @@
1
+import component from './zh-CN/component';
2
+import globalHeader from './zh-CN/globalHeader';
3
+import menu from './zh-CN/menu';
4
+import pages from './zh-CN/pages';
5
+import pwa from './zh-CN/pwa';
6
+import settingDrawer from './zh-CN/settingDrawer';
7
+import settings from './zh-CN/settings';
8
+
9
+export default {
10
+  'navBar.lang': '语言',
11
+  'layout.user.link.help': '帮助',
12
+  'layout.user.link.privacy': '隐私',
13
+  'layout.user.link.terms': '条款',
14
+  'app.preview.down.block': '下载此页面到本地项目',
15
+  'app.welcome.link.fetch-blocks': '获取全部区块',
16
+  'app.welcome.link.block-list': '基于 block 开发,快速构建标准页面',
17
+  ...pages,
18
+  ...globalHeader,
19
+  ...menu,
20
+  ...settingDrawer,
21
+  ...settings,
22
+  ...pwa,
23
+  ...component,
24
+};

+ 5
- 0
src/locales/zh-CN/component.ts Прегледај датотеку

@@ -0,0 +1,5 @@
1
+export default {
2
+  'component.tagSelect.expand': '展开',
3
+  'component.tagSelect.collapse': '收起',
4
+  'component.tagSelect.all': '全部',
5
+};

+ 17
- 0
src/locales/zh-CN/globalHeader.ts Прегледај датотеку

@@ -0,0 +1,17 @@
1
+export default {
2
+  'component.globalHeader.search': '站内搜索',
3
+  'component.globalHeader.search.example1': '搜索提示一',
4
+  'component.globalHeader.search.example2': '搜索提示二',
5
+  'component.globalHeader.search.example3': '搜索提示三',
6
+  'component.globalHeader.help': '使用文档',
7
+  'component.globalHeader.notification': '通知',
8
+  'component.globalHeader.notification.empty': '你已查看所有通知',
9
+  'component.globalHeader.message': '消息',
10
+  'component.globalHeader.message.empty': '您已读完所有消息',
11
+  'component.globalHeader.event': '待办',
12
+  'component.globalHeader.event.empty': '你已完成所有待办',
13
+  'component.noticeIcon.clear': '清空',
14
+  'component.noticeIcon.cleared': '清空了',
15
+  'component.noticeIcon.empty': '暂无数据',
16
+  'component.noticeIcon.view-more': '查看更多',
17
+};

+ 52
- 0
src/locales/zh-CN/menu.ts Прегледај датотеку

@@ -0,0 +1,52 @@
1
+export default {
2
+  'menu.welcome': '欢迎',
3
+  'menu.more-blocks': '更多区块',
4
+  'menu.home': '首页',
5
+  'menu.admin': '管理页',
6
+  'menu.admin.sub-page': '二级管理页',
7
+  'menu.login': '登录',
8
+  'menu.register': '注册',
9
+  'menu.register-result': '注册结果',
10
+  'menu.dashboard': 'Dashboard',
11
+  'menu.dashboard.analysis': '分析页',
12
+  'menu.dashboard.monitor': '监控页',
13
+  'menu.dashboard.workplace': '工作台',
14
+  'menu.exception.403': '403',
15
+  'menu.exception.404': '404',
16
+  'menu.exception.500': '500',
17
+  'menu.form': '表单页',
18
+  'menu.form.basic-form': '基础表单',
19
+  'menu.form.step-form': '分步表单',
20
+  'menu.form.step-form.info': '分步表单(填写转账信息)',
21
+  'menu.form.step-form.confirm': '分步表单(确认转账信息)',
22
+  'menu.form.step-form.result': '分步表单(完成)',
23
+  'menu.form.advanced-form': '高级表单',
24
+  'menu.list': '列表页',
25
+  'menu.list.table-list': '查询表格',
26
+  'menu.list.basic-list': '标准列表',
27
+  'menu.list.card-list': '卡片列表',
28
+  'menu.list.search-list': '搜索列表',
29
+  'menu.list.search-list.articles': '搜索列表(文章)',
30
+  'menu.list.search-list.projects': '搜索列表(项目)',
31
+  'menu.list.search-list.applications': '搜索列表(应用)',
32
+  'menu.profile': '详情页',
33
+  'menu.profile.basic': '基础详情页',
34
+  'menu.profile.advanced': '高级详情页',
35
+  'menu.result': '结果页',
36
+  'menu.result.success': '成功页',
37
+  'menu.result.fail': '失败页',
38
+  'menu.exception': '异常页',
39
+  'menu.exception.not-permission': '403',
40
+  'menu.exception.not-find': '404',
41
+  'menu.exception.server-error': '500',
42
+  'menu.exception.trigger': '触发错误',
43
+  'menu.account': '个人页',
44
+  'menu.account.center': '个人中心',
45
+  'menu.account.settings': '个人设置',
46
+  'menu.account.trigger': '触发报错',
47
+  'menu.account.logout': '退出登录',
48
+  'menu.editor': '图形编辑器',
49
+  'menu.editor.flow': '流程编辑器',
50
+  'menu.editor.mind': '脑图编辑器',
51
+  'menu.editor.koni': '拓扑编辑器',
52
+};

+ 67
- 0
src/locales/zh-CN/pages.ts Прегледај датотеку

@@ -0,0 +1,67 @@
1
+export default {
2
+  'pages.layouts.userLayout.title': 'Ant Design 是西湖区最具影响力的 Web 设计规范',
3
+  'pages.login.accountLogin.tab': '账户密码登录',
4
+  'pages.login.accountLogin.errorMessage': '错误的用户名和密码(admin/ant.design)',
5
+  'pages.login.failure': '登录失败,请重试!',
6
+  'pages.login.success': '登录成功!',
7
+  'pages.login.username.placeholder': '用户名: admin or user',
8
+  'pages.login.username.required': '用户名是必填项!',
9
+  'pages.login.password.placeholder': '密码: ant.design',
10
+  'pages.login.password.required': '密码是必填项!',
11
+  'pages.login.phoneLogin.tab': '手机号登录',
12
+  'pages.login.phoneLogin.errorMessage': '验证码错误',
13
+  'pages.login.phoneNumber.placeholder': '请输入手机号!',
14
+  'pages.login.phoneNumber.required': '手机号是必填项!',
15
+  'pages.login.phoneNumber.invalid': '不合法的手机号!',
16
+  'pages.login.captcha.placeholder': '请输入验证码!',
17
+  'pages.login.captcha.required': '验证码是必填项!',
18
+  'pages.login.phoneLogin.getVerificationCode': '获取验证码',
19
+  'pages.getCaptchaSecondText': '秒后重新获取',
20
+  'pages.login.rememberMe': '自动登录',
21
+  'pages.login.forgotPassword': '忘记密码 ?',
22
+  'pages.login.submit': '登录',
23
+  'pages.login.loginWith': '其他登录方式 :',
24
+  'pages.login.registerAccount': '注册账户',
25
+  'pages.welcome.link': '欢迎使用',
26
+  'pages.welcome.alertMessage': '更快更强的重型组件,已经发布。',
27
+  'pages.404.subTitle': '抱歉,您访问的页面不存在。',
28
+  'pages.404.buttonText': '返回首页',
29
+  'pages.admin.subPage.title': ' 这个页面只有 admin 权限才能查看',
30
+  'pages.admin.subPage.alertMessage': 'umi ui 现已发布,欢迎使用 npm run ui 启动体验。',
31
+  'pages.searchTable.createForm.newRule': '新建规则',
32
+  'pages.searchTable.updateForm.ruleConfig': '规则配置',
33
+  'pages.searchTable.updateForm.basicConfig': '基本信息',
34
+  'pages.searchTable.updateForm.ruleName.nameLabel': '规则名称',
35
+  'pages.searchTable.updateForm.ruleName.nameRules': '请输入规则名称!',
36
+  'pages.searchTable.updateForm.ruleDesc.descLabel': '规则描述',
37
+  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '请输入至少五个字符',
38
+  'pages.searchTable.updateForm.ruleDesc.descRules': '请输入至少五个字符的规则描述!',
39
+  'pages.searchTable.updateForm.ruleProps.title': '配置规则属性',
40
+  'pages.searchTable.updateForm.object': '监控对象',
41
+  'pages.searchTable.updateForm.ruleProps.templateLabel': '规则模板',
42
+  'pages.searchTable.updateForm.ruleProps.typeLabel': '规则类型',
43
+  'pages.searchTable.updateForm.schedulingPeriod.title': '设定调度周期',
44
+  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '开始时间',
45
+  'pages.searchTable.updateForm.schedulingPeriod.timeRules': '请选择开始时间!',
46
+  'pages.searchTable.titleDesc': '描述',
47
+  'pages.searchTable.ruleName': '规则名称为必填项',
48
+  'pages.searchTable.titleCallNo': '服务调用次数',
49
+  'pages.searchTable.titleStatus': '状态',
50
+  'pages.searchTable.nameStatus.default': '关闭',
51
+  'pages.searchTable.nameStatus.running': '运行中',
52
+  'pages.searchTable.nameStatus.online': '已上线',
53
+  'pages.searchTable.nameStatus.abnormal': '异常',
54
+  'pages.searchTable.titleUpdatedAt': '上次调度时间',
55
+  'pages.searchTable.exception': '请输入异常原因!',
56
+  'pages.searchTable.titleOption': '操作',
57
+  'pages.searchTable.config': '配置',
58
+  'pages.searchTable.subscribeAlert': '订阅警报',
59
+  'pages.searchTable.title': '查询表格',
60
+  'pages.searchTable.new': '新建',
61
+  'pages.searchTable.chosen': '已选择',
62
+  'pages.searchTable.item': '项',
63
+  'pages.searchTable.totalServiceCalls': '服务调用次数总计',
64
+  'pages.searchTable.tenThousand': '万',
65
+  'pages.searchTable.batchDeletion': '批量删除',
66
+  'pages.searchTable.batchApproval': '批量审批',
67
+};

+ 0
- 0
src/locales/zh-CN/pwa.ts Прегледај датотеку


Неке датотеке нису приказане због велике количине промена

Loading…
Откажи
Сачувај