#
luxiaotao1123
2024-02-06 e9293e07cd386b1cdca525f7c80683f146caa96d
#
134个文件已添加
1 文件已重命名
1 文件已复制
18个文件已删除
5个文件已修改
39496 ■■■■ 已修改文件
zy-asrs-flow/.editorconfig 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/.env 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/.eslintignore 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/.eslintrc.cjs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/.eslintrc.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/.gitignore 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/.prettierignore 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/.prettierrc.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/README.md 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/config/config.ts 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/config/defaultSettings.ts 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/config/oneapi.json 593 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/config/proxy.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/config/routes.ts 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/index.html 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/jest.config.ts 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/jsconfig.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/mock/listTableList.ts 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/mock/notices.ts 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/mock/requestRecord.mock.js 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/mock/route.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/mock/user.ts 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/package-lock.json 7390 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/package.json 101 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/pnpm-lock.yaml 21929 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/public/CNAME 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/public/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/public/icons/icon-128x128.png 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/public/icons/icon-192x192.png 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/public/icons/icon-512x512.png 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/public/logo.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/public/pro_icon.svg 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/public/scripts/loading.js 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/App.jsx 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/access.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/api/meun/index.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/assets/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/Footer/index.tsx 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/HeaderDropdown/index.tsx 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/RightContent/AvatarDropdown.tsx 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/RightContent/index.tsx 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/components/index.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/config/setting.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/config/setting.ts 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/global.less 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/global.tsx 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/bn-BD.ts 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/bn-BD/component.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/bn-BD/globalHeader.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/bn-BD/menu.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/bn-BD/pages.ts 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/bn-BD/pwa.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/bn-BD/settingDrawer.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/bn-BD/settings.ts 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/en-US.ts 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/en-US/component.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/en-US/globalHeader.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/en-US/menu.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/en-US/pages.ts 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/en-US/pwa.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/en-US/settingDrawer.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/en-US/settings.ts 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/fa-IR.ts 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/fa-IR/component.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/fa-IR/globalHeader.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/fa-IR/menu.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/fa-IR/pages.ts 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/fa-IR/pwa.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/fa-IR/settingDrawer.ts 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/fa-IR/settings.ts 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/id-ID.ts 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/id-ID/component.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/id-ID/globalHeader.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/id-ID/menu.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/id-ID/pages.ts 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/id-ID/pwa.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/id-ID/settingDrawer.ts 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/id-ID/settings.ts 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/ja-JP.ts 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/ja-JP/component.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/ja-JP/globalHeader.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/ja-JP/menu.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/ja-JP/pages.ts 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/ja-JP/pwa.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/ja-JP/settingDrawer.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/ja-JP/settings.ts 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/pt-BR.ts 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/pt-BR/component.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/pt-BR/globalHeader.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/pt-BR/menu.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/pt-BR/pages.ts 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/pt-BR/pwa.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/pt-BR/settingDrawer.ts 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/pt-BR/settings.ts 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-CN.ts 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-CN/component.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-CN/globalHeader.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-CN/menu.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-CN/pages.ts 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-CN/pwa.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-CN/settingDrawer.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-CN/settings.ts 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-TW.ts 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-TW/component.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-TW/globalHeader.ts 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-TW/menu.ts 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-TW/pages.ts 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-TW/pwa.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-TW/settingDrawer.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/locales/zh-TW/settings.ts 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/main.jsx 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/manifest.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/404.tsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/Admin.jsx 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/Admin.tsx 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/G6.jsx 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/Hello.jsx 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/NotFound.jsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/TableList/components/UpdateForm.tsx 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/TableList/index.tsx 397 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/User/Login/__snapshots__/login.test.tsx.snap 1108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/User/Login/index.tsx 371 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/User/Login/login.test.tsx 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/Welcome.tsx 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/_defaultProps.jsx 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/host/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/menu/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/role/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/user-login/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/pages/system/user/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/requestErrorConfig.ts 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/router/index.jsx 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/service-worker.js 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/ant-design-pro/api.ts 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/ant-design-pro/index.ts 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/ant-design-pro/login.ts 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/ant-design-pro/typings.d.ts 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/route.js 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/swagger/index.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/swagger/pet.ts 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/swagger/store.ts 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/swagger/typings.d.ts 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/swagger/user.ts 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/services/system/auth.js 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/styles/index.css 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/typings.d.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/utils/icon-util.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/utils/request.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/utils/token-util.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/src/utils/token-util.ts 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/tests/setupTests.jsx 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/tsconfig.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/types/cache/cache.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/types/cache/login.cache.json 386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/types/cache/mock/login.mock.cache.js 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/types/cache/mock/mock.cache.js 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/types/index.d.ts 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/vite.config.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/resources/mapper/sys/RoleMenuMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-flow/.editorconfig
New file
@@ -0,0 +1,16 @@
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
zy-asrs-flow/.env
File was deleted
zy-asrs-flow/.eslintignore
New file
@@ -0,0 +1,8 @@
/lambda/
/scripts
/config
.history
public
dist
.umi
mock
zy-asrs-flow/.eslintrc.cjs
File was deleted
zy-asrs-flow/.eslintrc.js
New file
@@ -0,0 +1,7 @@
module.exports = {
  extends: [require.resolve('@umijs/lint/dist/config/eslint')],
  globals: {
    page: true,
    REACT_APP_ENV: true,
  },
};
zy-asrs-flow/.gitignore
@@ -1,24 +1,41 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
node_modules
dist
dist-ssr
*.local
# dependencies
**/node_modules
# roadhog-api-doc ignore
/src/utils/request-temp.js
_roadhog-api-doc
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
# production
/dist
# misc
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
npm-debug.log*
yarn-error.log
/coverage
.idea
yarn.lock
package-lock.json
*bak
.vscode
# visual studio code
.history
*.log
functions/*
.temp/**
# umi
.umi
.umi-production
.umi-test
# screenshot
screenshot
.firebase
.eslintcache
build
zy-asrs-flow/.prettierignore
New file
@@ -0,0 +1,22 @@
**/*.svg
.umi
.umi-production
/dist
.dockerignore
.DS_Store
.eslintignore
*.png
*.toml
docker
.editorconfig
Dockerfile*
.gitignore
.prettierignore
LICENSE
.eslintcache
*.lock
yarn-error.log
.history
CNAME
/build
/public
zy-asrs-flow/.prettierrc.js
New file
@@ -0,0 +1,21 @@
module.exports = {
  singleQuote: true,
  trailingComma: 'all',
  printWidth: 100,
  proseWrap: 'never',
  endOfLine: 'lf',
  overrides: [
    {
      files: '.prettierrc',
      options: {
        parser: 'json',
      },
    },
    {
      files: 'document.ejs',
      options: {
        parser: 'html',
      },
    },
  ],
};
zy-asrs-flow/README.md
@@ -1,8 +1,57 @@
# React + Vite
# Ant Design Pro
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
This project is initialized with [Ant Design Pro](https://pro.ant.design). Follow is the quick guide for how to use.
Currently, two official plugins are available:
## Environment Prepare
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
Install `node_modules`:
```bash
npm install
```
or
```bash
yarn
```
## Provided Scripts
Ant Design Pro provides some useful script to help you quick start and build with web project, code style check and test.
Scripts provided in `package.json`. It's safe to modify or add additional script:
### Start project
```bash
npm start
```
### Build project
```bash
npm run build
```
### Check code style
```bash
npm run lint
```
You can also use script to auto fix some lint error:
```bash
npm run lint:fix
```
### Test code
```bash
npm test
```
## More
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).
zy-asrs-flow/config/config.ts
New file
@@ -0,0 +1,156 @@
// https://umijs.org/config/
import { defineConfig } from '@umijs/max';
import { join } from 'path';
import defaultSettings from './defaultSettings';
import proxy from './proxy';
import routes from './routes';
const { REACT_APP_ENV = 'dev' } = process.env;
export default defineConfig({
  /**
   * @name 开启 hash 模式
   * @description 让 build 之后的产物包含 hash 后缀。通常用于增量发布和避免浏览器加载缓存。
   * @doc https://umijs.org/docs/api/config#hash
   */
  hash: true,
  /**
   * @name 兼容性设置
   * @description 设置 ie11 不一定完美兼容,需要检查自己使用的所有依赖
   * @doc https://umijs.org/docs/api/config#targets
   */
  // targets: {
  //   ie: 11,
  // },
  /**
   * @name 路由的配置,不在路由中引入的文件不会编译
   * @description 只支持 path,component,routes,redirect,wrappers,title 的配置
   * @doc https://umijs.org/docs/guides/routes
   */
  // umi routes: https://umijs.org/docs/routing
  routes,
  /**
   * @name 主题的配置
   * @description 虽然叫主题,但是其实只是 less 的变量设置
   * @doc antd的主题设置 https://ant.design/docs/react/customize-theme-cn
   * @doc umi 的theme 配置 https://umijs.org/docs/api/config#theme
   */
  theme: {
    // 如果不想要 configProvide 动态设置主题需要把这个设置为 default
    // 只有设置为 variable, 才能使用 configProvide 动态设置主色调
    'root-entry-name': 'variable',
  },
  /**
   * @name moment 的国际化配置
   * @description 如果对国际化没有要求,打开之后能减少js的包大小
   * @doc https://umijs.org/docs/api/config#ignoremomentlocale
   */
  ignoreMomentLocale: true,
  /**
   * @name 代理配置
   * @description 可以让你的本地服务器代理到你的服务器上,这样你就可以访问服务器的数据了
   * @see 要注意以下 代理只能在本地开发时使用,build 之后就无法使用了。
   * @doc 代理介绍 https://umijs.org/docs/guides/proxy
   * @doc 代理配置 https://umijs.org/docs/api/config#proxy
   */
  proxy: proxy[REACT_APP_ENV as keyof typeof proxy],
  /**
   * @name 快速热更新配置
   * @description 一个不错的热更新组件,更新时可以保留 state
   */
  fastRefresh: true,
  //============== 以下都是max的插件配置 ===============
  /**
   * @name 数据流插件
   * @@doc https://umijs.org/docs/max/data-flow
   */
  model: {},
  /**
   * 一个全局的初始数据流,可以用它在插件之间共享数据
   * @description 可以用来存放一些全局的数据,比如用户信息,或者一些全局的状态,全局初始状态在整个 Umi 项目的最开始创建。
   * @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
   */
  initialState: {},
  /**
   * @name layout 插件
   * @doc https://umijs.org/docs/max/layout-menu
   */
  title: 'Ant Design Pro',
  layout: {
    locale: true,
    ...defaultSettings,
  },
  /**
   * @name moment2dayjs 插件
   * @description 将项目中的 moment 替换为 dayjs
   * @doc https://umijs.org/docs/max/moment2dayjs
   */
  moment2dayjs: {
    preset: 'antd',
    plugins: ['duration'],
  },
  /**
   * @name 国际化插件
   * @doc https://umijs.org/docs/max/i18n
   */
  locale: {
    // default zh-CN
    default: 'zh-CN',
    antd: true,
    // default true, when it is true, will use `navigator.language` overwrite default
    baseNavigator: true,
  },
  /**
   * @name antd 插件
   * @description 内置了 babel import 插件
   * @doc https://umijs.org/docs/max/antd#antd
   */
  antd: {},
  /**
   * @name 网络请求配置
   * @description 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。
   * @doc https://umijs.org/docs/max/request
   */
  request: {},
  /**
   * @name 权限插件
   * @description 基于 initialState 的权限插件,必须先打开 initialState
   * @doc https://umijs.org/docs/max/access
   */
  access: {},
  /**
   * @name <head> 中额外的 script
   * @description 配置 <head> 中额外的 script
   */
  headScripts: [
    // 解决首次加载时白屏的问题
    { src: '/scripts/loading.js', async: true },
  ],
  //================ pro 插件配置 =================
  presets: ['umi-presets-pro'],
  /**
   * @name openAPI 插件的配置
   * @description 基于 openapi 的规范生成serve 和mock,能减少很多样板代码
   * @doc https://pro.ant.design/zh-cn/docs/openapi/
   */
  openAPI: [
    {
      requestLibPath: "import { request } from '@umijs/max'",
      // 或者使用在线的版本
      // schemaPath: "https://gw.alipayobjects.com/os/antfincdn/M%24jrzTTYJN/oneapi.json"
      schemaPath: join(__dirname, 'oneapi.json'),
      mock: false,
    },
    {
      requestLibPath: "import { request } from '@umijs/max'",
      schemaPath: 'https://gw.alipayobjects.com/os/antfincdn/CA1dOm%2631B/openapi.json',
      projectName: 'swagger',
    },
  ],
  mfsu: {
    strategy: 'normal',
  },
  esbuildMinifyIIFE: true,
  requestRecord: {},
});
zy-asrs-flow/config/defaultSettings.ts
New file
@@ -0,0 +1,28 @@
import { ProLayoutProps } from '@ant-design/pro-components';
/**
 * @name
 */
const Settings: ProLayoutProps & {
  pwa?: boolean;
  logo?: string;
} = {
  navTheme: 'light',
  // 拂晓蓝
  colorPrimary: '#1890ff',
  layout: 'mix',
  contentWidth: 'Fluid',
  fixedHeader: false,
  fixSiderbar: true,
  colorWeak: false,
  title: 'Ant Design Pro',
  pwa: true,
  logo: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg',
  iconfontUrl: '',
  token: {
    // 参见ts声明,demo 见文档,通过token 修改样式
    //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
  },
};
export default Settings;
zy-asrs-flow/config/oneapi.json
New file
@@ -0,0 +1,593 @@
{
  "openapi": "3.0.1",
  "info": {
    "title": "Ant Design Pro",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "http://localhost:8000/"
    },
    {
      "url": "https://localhost:8000/"
    }
  ],
  "paths": {
    "/api/currentUser": {
      "get": {
        "tags": ["api"],
        "description": "获取当前的用户",
        "operationId": "currentUser",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CurrentUser"
                }
              }
            }
          },
          "401": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "x-swagger-router-controller": "api"
    },
    "/api/login/captcha": {
      "post": {
        "description": "发送验证码",
        "operationId": "getFakeCaptcha",
        "tags": ["login"],
        "parameters": [
          {
            "name": "phone",
            "in": "query",
            "description": "手机号",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FakeCaptcha"
                }
              }
            }
          }
        }
      }
    },
    "/api/login/outLogin": {
      "post": {
        "description": "登录接口",
        "operationId": "outLogin",
        "tags": ["login"],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "x-swagger-router-controller": "api"
    },
    "/api/login/account": {
      "post": {
        "tags": ["login"],
        "description": "登录接口",
        "operationId": "login",
        "requestBody": {
          "description": "登录系统",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginParams"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginResult"
                }
              }
            }
          },
          "401": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-codegen-request-body-name": "body"
      },
      "x-swagger-router-controller": "api"
    },
    "/api/notices": {
      "summary": "getNotices",
      "description": "NoticeIconItem",
      "get": {
        "tags": ["api"],
        "operationId": "getNotices",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoticeIconList"
                }
              }
            }
          }
        }
      }
    },
    "/api/rule": {
      "get": {
        "tags": ["rule"],
        "description": "获取规则列表",
        "operationId": "rule",
        "parameters": [
          {
            "name": "current",
            "in": "query",
            "description": "当前的页码",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "页面的容量",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleList"
                }
              }
            }
          },
          "401": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": ["rule"],
        "description": "新建规则",
        "operationId": "addRule",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleListItem"
                }
              }
            }
          },
          "401": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": ["rule"],
        "description": "新建规则",
        "operationId": "updateRule",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleListItem"
                }
              }
            }
          },
          "401": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": ["rule"],
        "description": "删除规则",
        "operationId": "removeRule",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "x-swagger-router-controller": "api"
    },
    "/swagger": {
      "x-swagger-pipe": "swagger_raw"
    }
  },
  "components": {
    "schemas": {
      "CurrentUser": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "avatar": {
            "type": "string"
          },
          "userid": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "signature": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "group": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                }
              }
            }
          },
          "notifyCount": {
            "type": "integer",
            "format": "int32"
          },
          "unreadCount": {
            "type": "integer",
            "format": "int32"
          },
          "country": {
            "type": "string"
          },
          "access": {
            "type": "string"
          },
          "geographic": {
            "type": "object",
            "properties": {
              "province": {
                "type": "object",
                "properties": {
                  "label": {
                    "type": "string"
                  },
                  "key": {
                    "type": "string"
                  }
                }
              },
              "city": {
                "type": "object",
                "properties": {
                  "label": {
                    "type": "string"
                  },
                  "key": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "address": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          }
        }
      },
      "LoginResult": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "currentAuthority": {
            "type": "string"
          }
        }
      },
      "PageParams": {
        "type": "object",
        "properties": {
          "current": {
            "type": "number"
          },
          "pageSize": {
            "type": "number"
          }
        }
      },
      "RuleListItem": {
        "type": "object",
        "properties": {
          "key": {
            "type": "integer",
            "format": "int32"
          },
          "disabled": {
            "type": "boolean"
          },
          "href": {
            "type": "string"
          },
          "avatar": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "desc": {
            "type": "string"
          },
          "callNo": {
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "type": "integer",
            "format": "int32"
          },
          "updatedAt": {
            "type": "string",
            "format": "datetime"
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "progress": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "RuleList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RuleListItem"
            }
          },
          "total": {
            "type": "integer",
            "description": "列表的内容总数",
            "format": "int32"
          },
          "success": {
            "type": "boolean"
          }
        }
      },
      "FakeCaptcha": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "type": "string"
          }
        }
      },
      "LoginParams": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "autoLogin": {
            "type": "boolean"
          },
          "type": {
            "type": "string"
          }
        }
      },
      "ErrorResponse": {
        "required": ["errorCode"],
        "type": "object",
        "properties": {
          "errorCode": {
            "type": "string",
            "description": "业务约定的错误码"
          },
          "errorMessage": {
            "type": "string",
            "description": "业务上的错误信息"
          },
          "success": {
            "type": "boolean",
            "description": "业务上的请求是否成功"
          }
        }
      },
      "NoticeIconList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NoticeIconItem"
            }
          },
          "total": {
            "type": "integer",
            "description": "列表的内容总数",
            "format": "int32"
          },
          "success": {
            "type": "boolean"
          }
        }
      },
      "NoticeIconItemType": {
        "title": "NoticeIconItemType",
        "description": "已读未读列表的枚举",
        "type": "string",
        "properties": {},
        "enum": ["notification", "message", "event"]
      },
      "NoticeIconItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "extra": {
            "type": "string",
            "format": "any"
          },
          "key": { "type": "string" },
          "read": {
            "type": "boolean"
          },
          "avatar": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "datetime": {
            "type": "string",
            "format": "date"
          },
          "description": {
            "type": "string"
          },
          "type": {
            "extensions": {
              "x-is-enum": true
            },
            "$ref": "#/components/schemas/NoticeIconItemType"
          }
        }
      }
    }
  }
}
zy-asrs-flow/config/proxy.ts
New file
@@ -0,0 +1,44 @@
/**
 * @name 代理的配置
 * @see 在生产环境 代理是无法生效的,所以这里没有生产环境的配置
 * -------------------------------
 * The agent cannot take effect in the production environment
 * so there is no configuration of the production environment
 * For details, please see
 * https://pro.ant.design/docs/deploy
 *
 * @doc https://umijs.org/docs/guides/proxy
 */
export default {
  // 如果需要自定义本地开发服务器  请取消注释按需调整
  // dev: {
  //   // localhost:8000/api/** -> https://preview.pro.ant.design/api/**
  //   '/api/': {
  //     // 要代理的地址
  //     target: 'https://preview.pro.ant.design',
  //     // 配置了这个可以从 http 代理到 https
  //     // 依赖 origin 的功能可能需要这个,比如 cookie
  //     changeOrigin: true,
  //   },
  // },
  /**
   * @name 详细的代理配置
   * @doc https://github.com/chimurai/http-proxy-middleware
   */
  test: {
    // localhost:8000/api/** -> https://preview.pro.ant.design/api/**
    '/api/': {
      target: 'https://proapi.azurewebsites.net',
      changeOrigin: true,
      pathRewrite: { '^': '' },
    },
  },
  pre: {
    '/api/': {
      target: 'your pre url',
      changeOrigin: true,
      pathRewrite: { '^': '' },
    },
  },
};
zy-asrs-flow/config/routes.ts
New file
@@ -0,0 +1,63 @@
/**
 * @name umi 的路由配置
 * @description 只支持 path,component,routes,redirect,wrappers,name,icon 的配置
 * @param path  path 只支持两种占位符配置,第一种是动态参数 :id 的形式,第二种是 * 通配符,通配符只能出现路由字符串的最后。
 * @param component 配置 location 和 path 匹配后用于渲染的 React 组件路径。可以是绝对路径,也可以是相对路径,如果是相对路径,会从 src/pages 开始找起。
 * @param routes 配置子路由,通常在需要为多个路径增加 layout 组件时使用。
 * @param redirect 配置路由跳转
 * @param wrappers 配置路由组件的包装组件,通过包装组件可以为当前的路由组件组合进更多的功能。 比如,可以用于路由级别的权限校验
 * @param name 配置路由的标题,默认读取国际化文件 menu.ts 中 menu.xxxx 的值,如配置 name 为 login,则读取 menu.ts 中 menu.login 的取值作为标题
 * @param icon 配置路由的图标,取值参考 https://ant.design/components/icon-cn, 注意去除风格后缀和大小写,如想要配置图标为 <StepBackwardOutlined /> 则取值应为 stepBackward 或 StepBackward,如想要配置图标为 <UserOutlined /> 则取值应为 user 或者 User
 * @doc https://umijs.org/docs/guides/routes
 */
export default [
  {
    path: '/user',
    layout: false,
    routes: [
      {
        name: 'login',
        path: '/user/login',
        component: './User/Login',
      },
    ],
  },
  {
    path: '/welcome',
    name: 'welcome',
    icon: 'smile',
    component: './Welcome',
  },
  {
    path: '/admin',
    name: 'admin',
    icon: 'crown',
    access: 'canAdmin',
    routes: [
      {
        path: '/admin',
        redirect: '/admin/sub-page',
      },
      {
        path: '/admin/sub-page',
        name: 'sub-page',
        component: './Admin',
      },
    ],
  },
  {
    name: 'list.table-list',
    icon: 'table',
    path: '/list',
    component: './TableList',
  },
  {
    path: '/',
    redirect: '/welcome',
  },
  {
    path: '*',
    layout: false,
    component: './404',
  },
];
zy-asrs-flow/index.html
File was deleted
zy-asrs-flow/jest.config.ts
New file
@@ -0,0 +1,23 @@
import { configUmiAlias, createConfig } from '@umijs/max/test';
export default async () => {
  const config = await configUmiAlias({
    ...createConfig({
      target: 'browser',
    }),
  });
  console.log(JSON.stringify(config));
  return {
    ...config,
    testEnvironmentOptions: {
      ...(config?.testEnvironmentOptions || {}),
      url: 'http://localhost:8000',
    },
    setupFiles: [...(config.setupFiles || []), './tests/setupTests.jsx'],
    globals: {
      ...config.globals,
      localStorage: null,
    },
  };
};
zy-asrs-flow/jsconfig.json
New file
@@ -0,0 +1,11 @@
{
  "compilerOptions": {
    "jsx": "react-jsx",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  }
}
zy-asrs-flow/mock/listTableList.ts
New file
@@ -0,0 +1,176 @@
import { Request, Response } from 'express';
import moment from 'moment';
import { parse } from 'url';
// mock tableListDataSource
const genList = (current: number, pageSize: number) => {
  const tableListDataSource: API.RuleListItem[] = [];
  for (let i = 0; i < pageSize; i += 1) {
    const index = (current - 1) * 10 + i;
    tableListDataSource.push({
      key: index,
      disabled: i % 6 === 0,
      href: 'https://ant.design',
      avatar: [
        'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
      ][i % 2],
      name: `TradeCode ${index}`,
      owner: '曲丽丽',
      desc: '这是一段描述',
      callNo: Math.floor(Math.random() * 1000),
      status: Math.floor(Math.random() * 10) % 4,
      updatedAt: moment().format('YYYY-MM-DD'),
      createdAt: moment().format('YYYY-MM-DD'),
      progress: Math.ceil(Math.random() * 100),
    });
  }
  tableListDataSource.reverse();
  return tableListDataSource;
};
let tableListDataSource = genList(1, 100);
function getRule(req: Request, res: Response, u: string) {
  let realUrl = u;
  if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') {
    realUrl = req.url;
  }
  const { current = 1, pageSize = 10 } = req.query;
  const params = parse(realUrl, true).query as unknown as API.PageParams &
    API.RuleListItem & {
      sorter: any;
      filter: any;
    };
  let dataSource = [...tableListDataSource].slice(
    ((current as number) - 1) * (pageSize as number),
    (current as number) * (pageSize as number),
  );
  if (params.sorter) {
    const sorter = JSON.parse(params.sorter);
    dataSource = dataSource.sort((prev, next) => {
      let sortNumber = 0;
      (Object.keys(sorter) as Array<keyof API.RuleListItem>).forEach((key) => {
        let nextSort = next?.[key] as number;
        let preSort = prev?.[key] as number;
        if (sorter[key] === 'descend') {
          if (preSort - nextSort > 0) {
            sortNumber += -1;
          } else {
            sortNumber += 1;
          }
          return;
        }
        if (preSort - nextSort > 0) {
          sortNumber += 1;
        } else {
          sortNumber += -1;
        }
      });
      return sortNumber;
    });
  }
  if (params.filter) {
    const filter = JSON.parse(params.filter as any) as {
      [key: string]: string[];
    };
    if (Object.keys(filter).length > 0) {
      dataSource = dataSource.filter((item) => {
        return (Object.keys(filter) as Array<keyof API.RuleListItem>).some((key) => {
          if (!filter[key]) {
            return true;
          }
          if (filter[key].includes(`${item[key]}`)) {
            return true;
          }
          return false;
        });
      });
    }
  }
  if (params.name) {
    dataSource = dataSource.filter((data) => data?.name?.includes(params.name || ''));
  }
  const result = {
    data: dataSource,
    total: tableListDataSource.length,
    success: true,
    pageSize,
    current: parseInt(`${params.current}`, 10) || 1,
  };
  return res.json(result);
}
function postRule(req: Request, res: Response, u: string, b: Request) {
  let realUrl = u;
  if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') {
    realUrl = req.url;
  }
  const body = (b && b.body) || req.body;
  const { method, name, desc, key } = body;
  switch (method) {
    /* eslint no-case-declarations:0 */
    case 'delete':
      tableListDataSource = tableListDataSource.filter((item) => key.indexOf(item.key) === -1);
      break;
    case 'post':
      (() => {
        const i = Math.ceil(Math.random() * 10000);
        const newRule: API.RuleListItem = {
          key: tableListDataSource.length,
          href: 'https://ant.design',
          avatar: [
            'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
            'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
          ][i % 2],
          name,
          owner: '曲丽丽',
          desc,
          callNo: Math.floor(Math.random() * 1000),
          status: Math.floor(Math.random() * 10) % 2,
          updatedAt: moment().format('YYYY-MM-DD'),
          createdAt: moment().format('YYYY-MM-DD'),
          progress: Math.ceil(Math.random() * 100),
        };
        tableListDataSource.unshift(newRule);
        return res.json(newRule);
      })();
      return;
    case 'update':
      (() => {
        let newRule = {};
        tableListDataSource = tableListDataSource.map((item) => {
          if (item.key === key) {
            newRule = { ...item, desc, name };
            return { ...item, desc, name };
          }
          return item;
        });
        return res.json(newRule);
      })();
      return;
    default:
      break;
  }
  const result = {
    list: tableListDataSource,
    pagination: {
      total: tableListDataSource.length,
    },
  };
  res.json(result);
}
export default {
  'GET /api/rule': getRule,
  'POST /api/rule': postRule,
};
zy-asrs-flow/mock/notices.ts
New file
@@ -0,0 +1,115 @@
import { Request, Response } from 'express';
const getNotices = (req: Request, res: Response) => {
  res.json({
    data: [
      {
        id: '000000001',
        avatar:
          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/MSbDR4FR2MUAAAAAAAAAAAAAFl94AQBr',
        title: '你收到了 14 份新周报',
        datetime: '2017-08-09',
        type: 'notification',
      },
      {
        id: '000000002',
        avatar:
          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/hX-PTavYIq4AAAAAAAAAAAAAFl94AQBr',
        title: '你推荐的 曲妮妮 已通过第三轮面试',
        datetime: '2017-08-08',
        type: 'notification',
      },
      {
        id: '000000003',
        avatar:
          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/jHX5R5l3QjQAAAAAAAAAAAAAFl94AQBr',
        title: '这种模板可以区分多种通知类型',
        datetime: '2017-08-07',
        read: true,
        type: 'notification',
      },
      {
        id: '000000004',
        avatar:
          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/Wr4mQqx6jfwAAAAAAAAAAAAAFl94AQBr',
        title: '左侧图标用于区分不同的类型',
        datetime: '2017-08-07',
        type: 'notification',
      },
      {
        id: '000000005',
        avatar:
          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/Mzj_TbcWUj4AAAAAAAAAAAAAFl94AQBr',
        title: '内容不要超过两行字,超出时自动截断',
        datetime: '2017-08-07',
        type: 'notification',
      },
      {
        id: '000000006',
        avatar:
          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/eXLzRbPqQE4AAAAAAAAAAAAAFl94AQBr',
        title: '曲丽丽 评论了你',
        description: '描述信息描述信息描述信息',
        datetime: '2017-08-07',
        type: 'message',
        clickClose: true,
      },
      {
        id: '000000007',
        avatar:
          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/w5mRQY2AmEEAAAAAAAAAAAAAFl94AQBr',
        title: '朱偏右 回复了你',
        description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
        datetime: '2017-08-07',
        type: 'message',
        clickClose: true,
      },
      {
        id: '000000008',
        avatar:
          'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/wPadR5M9918AAAAAAAAAAAAAFl94AQBr',
        title: '标题',
        description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
        datetime: '2017-08-07',
        type: 'message',
        clickClose: true,
      },
      {
        id: '000000009',
        title: '任务名称',
        description: '任务需要在 2017-01-12 20:00 前启动',
        extra: '未开始',
        status: 'todo',
        type: 'event',
      },
      {
        id: '000000010',
        title: '第三方紧急代码变更',
        description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
        extra: '马上到期',
        status: 'urgent',
        type: 'event',
      },
      {
        id: '000000011',
        title: '信息安全考试',
        description: '指派竹尔于 2017-01-09 前完成更新并发布',
        extra: '已耗时 8 天',
        status: 'doing',
        type: 'event',
      },
      {
        id: '000000012',
        title: 'ABCD 版本发布',
        description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
        extra: '进行中',
        status: 'processing',
        type: 'event',
      },
    ],
  });
};
export default {
  'GET /api/notices': getNotices,
};
zy-asrs-flow/mock/requestRecord.mock.js
New file
@@ -0,0 +1,324 @@
module.exports = {
  'GET /api/currentUser': {
    data: {
      name: 'Serati Ma',
      avatar: 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',
      userid: '00000001',
      email: 'antdesign@alipay.com',
      signature: '海纳百川,有容乃大',
      title: '交互专家',
      group: '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
      tags: [
        { key: '0', label: '很有想法的' },
        { key: '1', label: '专注设计' },
        { key: '2', label: '辣~' },
        { key: '3', label: '大长腿' },
        { key: '4', label: '川妹子' },
        { key: '5', label: '海纳百川' },
      ],
      notifyCount: 12,
      unreadCount: 11,
      country: 'China',
      geographic: {
        province: { label: '浙江省', key: '330000' },
        city: { label: '杭州市', key: '330100' },
      },
      address: '西湖区工专路 77 号',
      phone: '0752-268888888',
    },
  },
  'GET /api/rule': {
    data: [
      {
        key: 99,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 99',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 503,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 81,
      },
      {
        key: 98,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 98',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 164,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 12,
      },
      {
        key: 97,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 97',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 174,
        status: '1',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 81,
      },
      {
        key: 96,
        disabled: true,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 96',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 914,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 7,
      },
      {
        key: 95,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 95',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 698,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 82,
      },
      {
        key: 94,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 94',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 488,
        status: '1',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 14,
      },
      {
        key: 93,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 93',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 580,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 77,
      },
      {
        key: 92,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 92',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 244,
        status: '3',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 58,
      },
      {
        key: 91,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 91',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 959,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 66,
      },
      {
        key: 90,
        disabled: true,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 90',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 958,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 72,
      },
      {
        key: 89,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 89',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 301,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 2,
      },
      {
        key: 88,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 88',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 277,
        status: '1',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 12,
      },
      {
        key: 87,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 87',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 810,
        status: '1',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 82,
      },
      {
        key: 86,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 86',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 780,
        status: '3',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 22,
      },
      {
        key: 85,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 85',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 705,
        status: '3',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 12,
      },
      {
        key: 84,
        disabled: true,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 84',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 203,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 79,
      },
      {
        key: 83,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 83',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 491,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 59,
      },
      {
        key: 82,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 82',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 73,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 100,
      },
      {
        key: 81,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 81',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 406,
        status: '3',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 61,
      },
      {
        key: 80,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 80',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 112,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 20,
      },
    ],
    total: 100,
    success: true,
    pageSize: 20,
    current: 1,
  },
  'POST /api/login/outLogin': { data: {}, success: true },
  'POST /api/login/account': {
    status: 'ok',
    type: 'account',
    currentAuthority: 'admin',
  },
};
zy-asrs-flow/mock/route.ts
New file
@@ -0,0 +1,5 @@
export default {
  '/api/auth_routes': {
    '/form/advanced-form': { authority: ['admin', 'user'] },
  },
};
zy-asrs-flow/mock/user.ts
New file
@@ -0,0 +1,203 @@
import { Request, Response } from 'express';
const waitTime = (time: number = 100) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(true);
    }, time);
  });
};
async function getFakeCaptcha(req: Request, res: Response) {
  await waitTime(2000);
  return res.json('captcha-xxx');
}
const { ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION } = process.env;
/**
 * 当前用户的权限,如果为空代表没登录
 * current user access, if is '', user need login
 * 如果是 pro 的预览,默认是有权限的
 */
let access = ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site' ? 'admin' : '';
const getAccess = () => {
  return access;
};
// 代码中会兼容本地 service mock 以及部署站点的静态数据
export default {
  // 支持值为 Object 和 Array
  'GET /api/currentUser': (req: Request, res: Response) => {
    if (!getAccess()) {
      res.status(401).send({
        data: {
          isLogin: false,
        },
        errorCode: '401',
        errorMessage: '请先登录!',
        success: true,
      });
      return;
    }
    res.send({
      success: true,
      data: {
        name: 'Serati Ma',
        avatar: 'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
        userid: '00000001',
        email: 'antdesign@alipay.com',
        signature: '海纳百川,有容乃大',
        title: '交互专家',
        group: '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
        tags: [
          {
            key: '0',
            label: '很有想法的',
          },
          {
            key: '1',
            label: '专注设计',
          },
          {
            key: '2',
            label: '辣~',
          },
          {
            key: '3',
            label: '大长腿',
          },
          {
            key: '4',
            label: '川妹子',
          },
          {
            key: '5',
            label: '海纳百川',
          },
        ],
        notifyCount: 12,
        unreadCount: 11,
        country: 'China',
        access: getAccess(),
        geographic: {
          province: {
            label: '浙江省',
            key: '330000',
          },
          city: {
            label: '杭州市',
            key: '330100',
          },
        },
        address: '西湖区工专路 77 号',
        phone: '0752-268888888',
      },
    });
  },
  // GET POST 可省略
  'GET /api/users': [
    {
      key: '1',
      name: 'John Brown',
      age: 32,
      address: 'New York No. 1 Lake Park',
    },
    {
      key: '2',
      name: 'Jim Green',
      age: 42,
      address: 'London No. 1 Lake Park',
    },
    {
      key: '3',
      name: 'Joe Black',
      age: 32,
      address: 'Sidney No. 1 Lake Park',
    },
  ],
  'POST /api/login/account': async (req: Request, res: Response) => {
    const { password, username, type } = req.body;
    await waitTime(2000);
    if (password === 'ant.design' && username === 'admin') {
      res.send({
        status: 'ok',
        type,
        currentAuthority: 'admin',
      });
      access = 'admin';
      return;
    }
    if (password === 'ant.design' && username === 'user') {
      res.send({
        status: 'ok',
        type,
        currentAuthority: 'user',
      });
      access = 'user';
      return;
    }
    if (type === 'mobile') {
      res.send({
        status: 'ok',
        type,
        currentAuthority: 'admin',
      });
      access = 'admin';
      return;
    }
    res.send({
      status: 'error',
      type,
      currentAuthority: 'guest',
    });
    access = 'guest';
  },
  'POST /api/login/outLogin': (req: Request, res: Response) => {
    access = '';
    res.send({ data: {}, success: true });
  },
  'POST /api/register': (req: Request, res: Response) => {
    res.send({ status: 'ok', currentAuthority: 'user', success: true });
  },
  'GET /api/500': (req: Request, res: Response) => {
    res.status(500).send({
      timestamp: 1513932555104,
      status: 500,
      error: 'error',
      message: 'error',
      path: '/base/category/list',
    });
  },
  'GET /api/404': (req: Request, res: Response) => {
    res.status(404).send({
      timestamp: 1513932643431,
      status: 404,
      error: 'Not Found',
      message: 'No message available',
      path: '/base/category/list/2121212',
    });
  },
  'GET /api/403': (req: Request, res: Response) => {
    res.status(403).send({
      timestamp: 1513932555104,
      status: 403,
      error: 'Forbidden',
      message: 'Forbidden',
      path: '/base/category/list',
    });
  },
  'GET /api/401': (req: Request, res: Response) => {
    res.status(401).send({
      timestamp: 1513932555104,
      status: 401,
      error: 'Unauthorized',
      message: 'Unauthorized',
      path: '/base/category/list',
    });
  },
  'GET  /api/login/captcha': getFakeCaptcha,
};
zy-asrs-flow/package-lock.json
File was deleted
zy-asrs-flow/package.json
@@ -1,34 +1,91 @@
{
  "name": "zy-asrs-flow",
  "name": "ant-design-pro",
  "version": "6.0.0",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "description": "An out-of-box UI solution for enterprise applications",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
    "preview": "vite preview"
    "analyze": "cross-env ANALYZE=1 max build",
    "build": "max build",
    "deploy": "npm run build && npm run gh-pages",
    "dev": "npm run start:dev",
    "gh-pages": "gh-pages -d dist",
    "i18n-remove": "pro i18n-remove --locale=zh-CN --write",
    "postinstall": "max setup",
    "jest": "jest",
    "lint": "npm run lint:js && npm run lint:prettier && npm run tsc",
    "lint-staged": "lint-staged",
    "lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx ",
    "lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src ",
    "lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
    "lint:prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto",
    "openapi": "max openapi",
    "prepare": "husky install",
    "prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"",
    "preview": "npm run build && max preview --port 8000",
    "record": "cross-env NODE_ENV=development REACT_APP_ENV=test max record --scene=login",
    "serve": "umi-serve",
    "start": "cross-env UMI_ENV=dev max dev",
    "start:dev": "cross-env REACT_APP_ENV=dev MOCK=none UMI_ENV=dev max dev",
    "start:no-mock": "cross-env MOCK=none UMI_ENV=dev max dev",
    "start:pre": "cross-env REACT_APP_ENV=pre UMI_ENV=dev max dev",
    "start:test": "cross-env REACT_APP_ENV=test MOCK=none UMI_ENV=dev max dev",
    "test": "jest",
    "test:coverage": "npm run jest -- --coverage",
    "test:update": "npm run jest -- -u",
    "tsc": "tsc --noEmit"
  },
  "lint-staged": {
    "**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js",
    "**/*.{js,jsx,tsx,ts,less,md,json}": ["prettier --write"]
  },
  "browserslist": ["> 1%", "last 2 versions", "not ie <= 10"],
  "dependencies": {
    "@ant-design/icons": "^5.2.6",
    "@ant-design/icons": "^4.8.1",
    "@ant-design/pro-components": "^2.6.48",
    "@antv/g6": "^5.0.0-beta.28",
    "@umijs/route-utils": "^2.2.2",
    "antd": "^5.13.2",
    "axios": "^1.6.5",
    "pixi.js": "^7.3.3",
    "antd-style": "^3.6.1",
    "classnames": "^2.5.1",
    "lodash": "^4.17.21",
    "moment": "^2.30.1",
    "omit.js": "^2.0.2",
    "querystring": "^0.2.1",
    "rc-menu": "^9.12.4",
    "rc-util": "^5.38.1",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^6.15.0",
    "valtio": "^1.13.0"
    "react-helmet-async": "^1.3.0"
  },
  "devDependencies": {
    "@types/react": "^18.2.43",
    "@types/react-dom": "^18.2.17",
    "@vitejs/plugin-react": "^4.2.1",
    "eslint": "^8.55.0",
    "eslint-plugin-react": "^7.33.2",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-react-refresh": "^0.4.5",
    "vite": "^5.0.8"
  }
    "@ant-design/pro-cli": "^3.3.0",
    "@testing-library/react": "^13.4.0",
    "@types/classnames": "^2.3.1",
    "@types/express": "^4.17.21",
    "@types/history": "^4.7.11",
    "@types/jest": "^29.5.11",
    "@types/lodash": "^4.14.202",
    "@types/react": "^18.2.48",
    "@types/react-dom": "^18.2.18",
    "@types/react-helmet": "^6.1.11",
    "@umijs/fabric": "^2.14.1",
    "@umijs/lint": "^4.1.1",
    "@umijs/max": "^4.1.1",
    "cross-env": "^7.0.3",
    "eslint": "^8.56.0",
    "express": "^4.18.2",
    "gh-pages": "^3.2.3",
    "husky": "^7.0.4",
    "jest": "^29.7.0",
    "jest-environment-jsdom": "^29.7.0",
    "lint-staged": "^10.5.4",
    "mockjs": "^1.1.0",
    "prettier": "^2.8.8",
    "react-dev-inspector": "^1.9.0",
    "swagger-ui-dist": "^4.19.1",
    "ts-node": "^10.9.2",
    "typescript": "^5.3.3",
    "umi-presets-pro": "^2.0.3",
    "umi-serve": "^1.9.11"
  },
  "engines": { "node": ">=12.0.0" }
}
zy-asrs-flow/pnpm-lock.yaml
New file
Diff too large
zy-asrs-flow/public/CNAME
New file
@@ -0,0 +1 @@
preview.pro.ant.design
zy-asrs-flow/public/favicon.ico
zy-asrs-flow/public/icons/icon-128x128.png
zy-asrs-flow/public/icons/icon-192x192.png
zy-asrs-flow/public/icons/icon-512x512.png
zy-asrs-flow/public/logo.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" version="1.1" viewBox="0 0 200 200"><title>Group 28 Copy 5</title><desc>Created with Sketch.</desc><defs><linearGradient id="linearGradient-1" x1="62.102%" x2="108.197%" y1="0%" y2="37.864%"><stop offset="0%" stop-color="#4285EB"/><stop offset="100%" stop-color="#2EC7FF"/></linearGradient><linearGradient id="linearGradient-2" x1="69.644%" x2="54.043%" y1="0%" y2="108.457%"><stop offset="0%" stop-color="#29CDFF"/><stop offset="37.86%" stop-color="#148EFF"/><stop offset="100%" stop-color="#0A60FF"/></linearGradient><linearGradient id="linearGradient-3" x1="69.691%" x2="16.723%" y1="-12.974%" y2="117.391%"><stop offset="0%" stop-color="#FA816E"/><stop offset="41.473%" stop-color="#F74A5C"/><stop offset="100%" stop-color="#F51D2C"/></linearGradient><linearGradient id="linearGradient-4" x1="68.128%" x2="30.44%" y1="-35.691%" y2="114.943%"><stop offset="0%" stop-color="#FA8E7D"/><stop offset="51.264%" stop-color="#F74A5C"/><stop offset="100%" stop-color="#F51D2C"/></linearGradient></defs><g id="Page-1" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><g id="logo" transform="translate(-20.000000, -20.000000)"><g id="Group-28-Copy-5" transform="translate(20.000000, 20.000000)"><g id="Group-27-Copy-3"><g id="Group-25" fill-rule="nonzero"><g id="2"><path id="Shape" fill="url(#linearGradient-1)" d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C99.2571609,26.9692191 101.032305,26.9692191 102.20193,28.1378823 L129.985225,55.8983314 C134.193707,60.1033528 141.017005,60.1033528 145.225487,55.8983314 C149.433969,51.69331 149.433969,44.8756232 145.225487,40.6706018 L108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z"/><path id="Shape" fill="url(#linearGradient-2)" d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C100.999864,25.6271836 105.751642,20.541824 112.729652,19.3524487 C117.915585,18.4685261 123.585219,20.4140239 129.738554,25.1889424 C125.624663,21.0784292 118.571995,14.0340304 108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z"/></g><path id="Shape" fill="url(#linearGradient-3)" d="M153.685633,135.854579 C157.894115,140.0596 164.717412,140.0596 168.925894,135.854579 L195.959977,108.842726 C200.659183,104.147384 200.659183,96.5636133 195.960527,91.8688194 L168.690777,64.7181159 C164.472332,60.5180858 157.646868,60.5241425 153.435895,64.7316526 C149.227413,68.936674 149.227413,75.7543607 153.435895,79.9593821 L171.854035,98.3623765 C173.02366,99.5310396 173.02366,101.304724 171.854035,102.473387 L153.685633,120.626849 C149.47715,124.83187 149.47715,131.649557 153.685633,135.854579 Z"/></g><ellipse id="Combined-Shape" cx="100.519" cy="100.437" fill="url(#linearGradient-4)" rx="23.6" ry="23.581"/></g></g></g></g></svg>
zy-asrs-flow/public/pro_icon.svg
New file
@@ -0,0 +1,5 @@
<svg width="42" height="42" xmlns="http://www.w3.org/2000/svg">
 <g>
  <path fill="#070707" d="m6.717392,13.773912l5.6,0c2.8,0 4.7,1.9 4.7,4.7c0,2.8 -2,4.7 -4.9,4.7l-2.5,0l0,4.3l-2.9,0l0,-13.7zm2.9,2.2l0,4.9l1.9,0c1.6,0 2.6,-0.9 2.6,-2.4c0,-1.6 -0.9,-2.4 -2.6,-2.4l-1.9,0l0,-0.1zm8.9,11.5l2.7,0l0,-5.7c0,-1.4 0.8,-2.3 2.2,-2.3c0.4,0 0.8,0.1 1,0.2l0,-2.4c-0.2,-0.1 -0.5,-0.1 -0.8,-0.1c-1.2,0 -2.1,0.7 -2.4,2l-0.1,0l0,-1.9l-2.7,0l0,10.2l0.1,0zm11.7,0.1c-3.1,0 -5,-2 -5,-5.3c0,-3.3 2,-5.3 5,-5.3s5,2 5,5.3c0,3.4 -1.9,5.3 -5,5.3zm0,-2.1c1.4,0 2.2,-1.1 2.2,-3.2c0,-2 -0.8,-3.2 -2.2,-3.2c-1.4,0 -2.2,1.2 -2.2,3.2c0,2.1 0.8,3.2 2.2,3.2z" class="st0" id="Ant-Design-Pro"/>
 </g>
</svg>
zy-asrs-flow/public/scripts/loading.js
New file
@@ -0,0 +1,202 @@
/**
 * loading 占位
 * 解决首次加载时白屏的问题
 */
 (function () {
  const _root = document.querySelector('#root');
  if (_root && _root.innerHTML === '') {
    _root.innerHTML = `
      <style>
        html,
        body,
        #root {
          height: 100%;
          margin: 0;
          padding: 0;
        }
        #root {
          background-repeat: no-repeat;
          background-size: 100% auto;
        }
        .loading-title {
          font-size: 1.1rem;
        }
        .loading-sub-title {
          margin-top: 20px;
          font-size: 1rem;
          color: #888;
        }
        .page-loading-warp {
          display: flex;
          align-items: center;
          justify-content: center;
          padding: 26px;
        }
        .ant-spin {
          position: absolute;
          display: none;
          -webkit-box-sizing: border-box;
          box-sizing: border-box;
          margin: 0;
          padding: 0;
          color: rgba(0, 0, 0, 0.65);
          color: #1890ff;
          font-size: 14px;
          font-variant: tabular-nums;
          line-height: 1.5;
          text-align: center;
          list-style: none;
          opacity: 0;
          -webkit-transition: -webkit-transform 0.3s
            cubic-bezier(0.78, 0.14, 0.15, 0.86);
          transition: -webkit-transform 0.3s
            cubic-bezier(0.78, 0.14, 0.15, 0.86);
          transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);
          transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86),
            -webkit-transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);
          -webkit-font-feature-settings: "tnum";
          font-feature-settings: "tnum";
        }
        .ant-spin-spinning {
          position: static;
          display: inline-block;
          opacity: 1;
        }
        .ant-spin-dot {
          position: relative;
          display: inline-block;
          width: 20px;
          height: 20px;
          font-size: 20px;
        }
        .ant-spin-dot-item {
          position: absolute;
          display: block;
          width: 9px;
          height: 9px;
          background-color: #1890ff;
          border-radius: 100%;
          -webkit-transform: scale(0.75);
          -ms-transform: scale(0.75);
          transform: scale(0.75);
          -webkit-transform-origin: 50% 50%;
          -ms-transform-origin: 50% 50%;
          transform-origin: 50% 50%;
          opacity: 0.3;
          -webkit-animation: antspinmove 1s infinite linear alternate;
          animation: antSpinMove 1s infinite linear alternate;
        }
        .ant-spin-dot-item:nth-child(1) {
          top: 0;
          left: 0;
        }
        .ant-spin-dot-item:nth-child(2) {
          top: 0;
          right: 0;
          -webkit-animation-delay: 0.4s;
          animation-delay: 0.4s;
        }
        .ant-spin-dot-item:nth-child(3) {
          right: 0;
          bottom: 0;
          -webkit-animation-delay: 0.8s;
          animation-delay: 0.8s;
        }
        .ant-spin-dot-item:nth-child(4) {
          bottom: 0;
          left: 0;
          -webkit-animation-delay: 1.2s;
          animation-delay: 1.2s;
        }
        .ant-spin-dot-spin {
          -webkit-transform: rotate(45deg);
          -ms-transform: rotate(45deg);
          transform: rotate(45deg);
          -webkit-animation: antrotate 1.2s infinite linear;
          animation: antRotate 1.2s infinite linear;
        }
        .ant-spin-lg .ant-spin-dot {
          width: 32px;
          height: 32px;
          font-size: 32px;
        }
        .ant-spin-lg .ant-spin-dot i {
          width: 14px;
          height: 14px;
        }
        @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
          .ant-spin-blur {
            background: #fff;
            opacity: 0.5;
          }
        }
        @-webkit-keyframes antSpinMove {
          to {
            opacity: 1;
          }
        }
        @keyframes antSpinMove {
          to {
            opacity: 1;
          }
        }
        @-webkit-keyframes antRotate {
          to {
            -webkit-transform: rotate(405deg);
            transform: rotate(405deg);
          }
        }
        @keyframes antRotate {
          to {
            -webkit-transform: rotate(405deg);
            transform: rotate(405deg);
          }
        }
      </style>
      <div style="
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        height: 100%;
        min-height: 362px;
      ">
        <div class="page-loading-warp">
          <div class="ant-spin ant-spin-lg ant-spin-spinning">
            <span class="ant-spin-dot ant-spin-dot-spin">
              <i class="ant-spin-dot-item"></i>
              <i class="ant-spin-dot-item"></i>
              <i class="ant-spin-dot-item"></i>
              <i class="ant-spin-dot-item"></i>
            </span>
          </div>
        </div>
        <div class="loading-title">
          正在加载资源
        </div>
        <div class="loading-sub-title">
          初次加载资源可能需要较多时间 请耐心等待
        </div>
      </div>
    `;
  }
})();
zy-asrs-flow/src/App.jsx
@@ -1,11 +1,200 @@
import React from 'react';
import { Footer, Question, SelectLang, AvatarDropdown, AvatarName } from '@/components';
import { LinkOutlined } from '@ant-design/icons';
import { SettingDrawer } from '@ant-design/pro-components';
import { history, Link } from '@umijs/max';
import defaultSettings from '../config/defaultSettings';
import { errorConfig } from './requestErrorConfig';
import { currentUser as queryCurrentUser } from '@/services/ant-design-pro/api';
import { getRemoteMenu, getRoutersInfo, getUserInfo, setRemoteMenu, patchRouteWithRemoteMenus } from './services/route';
import { getToken } from '@/utils/token-util'
import { TOKEN_HEADER_NAME, TOKEN_STORE_NAME } from '@/config/setting';
function App() {
const isDev = process.env.NODE_ENV === 'development';
const loginPath = '/user/login';
const defaultAvatar = 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png'
  return (
    <>
      <h1>Hello Flow</h1>
    </>
  )
export function render(oldRender) {
  console.log("1");
  const token = getToken();
  if (!token || token?.length === 0) {
    oldRender();
    return;
  }
  getRoutersInfo().then(res => {
    setRemoteMenu(res);
    oldRender();
  });
}
export default App
export async function patchClientRoutes({ routes }) {
  console.log("2");
  patchRouteWithRemoteMenus(routes);
};
/**
 * @see  https://umijs.org/zh-CN/plugins/plugin-initial-state
 * */
export async function getInitialState() {
  console.log("3");
  const fetchUserInfo = async () => {
    try {
      // const userInfo = await getUserInfo({
      //   skipErrorHandler: true,
      // });
      // if (userInfo?.user.avatar === '') {
      //   response.user.avatar = defaultAvatar;
      // }
      // return {
      //   ...userInfo
      // };
      const userInfo = await queryCurrentUser({
        skipErrorHandler: true,
      });
      return userInfo.data;
    } catch (error) {
      console.log(error);
      history.push(loginPath);
    }
    return undefined;
  };
  // 如果不是登录页面,执行
  const { location } = history;
  if (location.pathname !== loginPath) {
    const currentUser = await fetchUserInfo();
    return {
      fetchUserInfo,
      currentUser,
      settings: defaultSettings,
    };
  }
  return {
    fetchUserInfo,
    settings: defaultSettings,
  };
}
// ProLayout 支持的api https://procomponents.ant.design/components/layout
export const layout = ({ initialState, setInitialState }) => {
  console.log("4");
  return {
    actionsRender: () => [<Question key="doc" />, <SelectLang key="SelectLang" />],
    avatarProps: {
      src: initialState?.currentUser?.avatar,
      title: <AvatarName />,
      render: (_, avatarChildren) => {
        return <AvatarDropdown>{avatarChildren}</AvatarDropdown>;
      },
    },
    menu: {
      locale: false,
      // 每当 initialState?.currentUser?.userid 发生修改时重新执行 request
      params: {
        userId: initialState?.currentUser?.userId,
      },
      request: async () => {
        // console.log(initialState?.currentUser?.userId);
        // if (!initialState?.currentUser?.userId) {
        //   return [];
        // }
        return getRemoteMenu();
      },
    },
    waterMarkProps: {
      content: initialState?.currentUser?.name,
    },
    footerRender: () => <Footer />,
    onPageChange: () => {
      const { location } = history;
      // 如果没有登录,重定向到 login
      if (!initialState?.currentUser && location.pathname !== loginPath) {
        history.push(loginPath);
      }
    },
    bgLayoutImgList: [
      {
        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/D2LWSqNny4sAAAAAAAAAAAAAFl94AQBr',
        left: 85,
        bottom: 100,
        height: '303px',
      },
      {
        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/C2TWRpJpiC0AAAAAAAAAAAAAFl94AQBr',
        bottom: -68,
        right: -45,
        height: '303px',
      },
      {
        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/F6vSTbj8KpYAAAAAAAAAAAAAFl94AQBr',
        bottom: 0,
        left: 0,
        width: '331px',
      },
    ],
    links: isDev
      ? [
        <Link key="openapi" to="/umi/plugin/openapi" target="_blank">
          <LinkOutlined />
          <span>OpenAPI 文档</span>
        </Link>,
      ]
      : [],
    menuHeaderRender: undefined,
    // 自定义 403 页面
    // unAccessible: <div>unAccessible</div>,
    // 增加一个 loading 的状态
    childrenRender: (children) => {
      // if (initialState?.loading) return <PageLoading />;
      return (
        <>
          {children}
          {isDev && (
            <SettingDrawer
              disableUrlParams
              enableDarkTheme
              settings={initialState?.settings}
              onSettingChange={(settings) => {
                setInitialState((preInitialState) => ({
                  ...preInitialState,
                  settings,
                }));
              }}
            />
          )}
        </>
      );
    },
    ...initialState?.settings,
  };
};
/**
 * @name request 配置,可以配置错误处理
 * 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。
 * @doc https://umijs.org/docs/max/request#配置
 */
export const request = {
  // baseURL: 'http://localhost:9999',
  ...errorConfig,
  timeout: 10000,
  // 前置守卫
  requestInterceptors: [
    (url, options) => {
      console.log('request ====>:', url);
      const token = getToken();
      if (token && options.headers) {
        options.headers[TOKEN_HEADER_NAME] = token;
      }
      return { url, options };
    }
  ],
  // 后置守卫
  responseInterceptors: [
    (response) => {
      return response;
    }
  ]
};
zy-asrs-flow/src/access.ts
New file
@@ -0,0 +1,9 @@
/**
 * @see https://umijs.org/docs/max/access#access
 * */
export default function access(initialState: { currentUser?: API.CurrentUser } | undefined) {
  const { currentUser } = initialState ?? {};
  return {
    canAdmin: currentUser && currentUser.access === 'admin',
  };
}
zy-asrs-flow/src/api/meun/index.js
File was deleted
zy-asrs-flow/src/assets/logo.png
Binary files differ
zy-asrs-flow/src/components/Footer/index.tsx
New file
@@ -0,0 +1,35 @@
import { GithubOutlined } from '@ant-design/icons';
import { DefaultFooter } from '@ant-design/pro-components';
import React from 'react';
const Footer: React.FC = () => {
  return (
    <DefaultFooter
      style={{
        background: 'none',
      }}
      links={[
        {
          key: 'Ant Design Pro',
          title: 'Ant Design Pro',
          href: 'https://pro.ant.design',
          blankTarget: true,
        },
        {
          key: 'github',
          title: <GithubOutlined />,
          href: 'https://github.com/ant-design/ant-design-pro',
          blankTarget: true,
        },
        {
          key: 'Ant Design',
          title: 'Ant Design',
          href: 'https://ant.design',
          blankTarget: true,
        },
      ]}
    />
  );
};
export default Footer;
zy-asrs-flow/src/components/HeaderDropdown/index.tsx
New file
@@ -0,0 +1,27 @@
import { Dropdown } from 'antd';
import type { DropDownProps } from 'antd/es/dropdown';
import React from 'react';
import { createStyles } from 'antd-style';
import classNames from 'classnames';
const useStyles = createStyles(({ token }) => {
  return {
    dropdown: {
      [`@media screen and (max-width: ${token.screenXS}px)`]: {
        width: '100%',
      },
    },
  };
});
export type HeaderDropdownProps = {
  overlayClassName?: string;
  placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight' | 'bottomCenter';
} & Omit<DropDownProps, 'overlay'>;
const HeaderDropdown: React.FC<HeaderDropdownProps> = ({ overlayClassName: cls, ...restProps }) => {
  const { styles } = useStyles();
  return <Dropdown overlayClassName={classNames(styles.dropdown, cls)} {...restProps} />;
};
export default HeaderDropdown;
zy-asrs-flow/src/components/RightContent/AvatarDropdown.tsx
New file
@@ -0,0 +1,138 @@
import { outLogin } from '@/services/ant-design-pro/api';
import { LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons';
import { history, useModel } from '@umijs/max';
import { Spin } from 'antd';
import { createStyles } from 'antd-style';
import { stringify } from 'querystring';
import type { MenuInfo } from 'rc-menu/lib/interface';
import React, { useCallback } from 'react';
import { flushSync } from 'react-dom';
import HeaderDropdown from '../HeaderDropdown';
export type GlobalHeaderRightProps = {
  menu?: boolean;
  children?: React.ReactNode;
};
export const AvatarName = () => {
  const { initialState } = useModel('@@initialState');
  const { currentUser } = initialState || {};
  return <span className="anticon">{currentUser?.name}</span>;
};
const useStyles = createStyles(({ token }) => {
  return {
    action: {
      display: 'flex',
      height: '48px',
      marginLeft: 'auto',
      overflow: 'hidden',
      alignItems: 'center',
      padding: '0 8px',
      cursor: 'pointer',
      borderRadius: token.borderRadius,
      '&:hover': {
        backgroundColor: token.colorBgTextHover,
      },
    },
  };
});
export const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu, children }) => {
  /**
   * 退出登录,并且将当前的 url 保存
   */
  const loginOut = async () => {
    await outLogin();
    const { search, pathname } = window.location;
    const urlParams = new URL(window.location.href).searchParams;
    /** 此方法会跳转到 redirect 参数所在的位置 */
    const redirect = urlParams.get('redirect');
    // Note: There may be security issues, please note
    if (window.location.pathname !== '/user/login' && !redirect) {
      history.replace({
        pathname: '/user/login',
        search: stringify({
          redirect: pathname + search,
        }),
      });
    }
  };
  const { styles } = useStyles();
  const { initialState, setInitialState } = useModel('@@initialState');
  const onMenuClick = useCallback(
    (event: MenuInfo) => {
      const { key } = event;
      if (key === 'logout') {
        flushSync(() => {
          setInitialState((s) => ({ ...s, currentUser: undefined }));
        });
        loginOut();
        return;
      }
      history.push(`/account/${key}`);
    },
    [setInitialState],
  );
  const loading = (
    <span className={styles.action}>
      <Spin
        size="small"
        style={{
          marginLeft: 8,
          marginRight: 8,
        }}
      />
    </span>
  );
  if (!initialState) {
    return loading;
  }
  const { currentUser } = initialState;
  if (!currentUser || !currentUser.name) {
    return loading;
  }
  const menuItems = [
    ...(menu
      ? [
          {
            key: 'center',
            icon: <UserOutlined />,
            label: '个人中心',
          },
          {
            key: 'settings',
            icon: <SettingOutlined />,
            label: '个人设置',
          },
          {
            type: 'divider' as const,
          },
        ]
      : []),
    {
      key: 'logout',
      icon: <LogoutOutlined />,
      label: '退出登录',
    },
  ];
  return (
    <HeaderDropdown
      menu={{
        selectedKeys: [],
        onClick: onMenuClick,
        items: menuItems,
      }}
    >
      {children}
    </HeaderDropdown>
  );
};
zy-asrs-flow/src/components/RightContent/index.tsx
New file
@@ -0,0 +1,31 @@
import { QuestionCircleOutlined } from '@ant-design/icons';
import { SelectLang as UmiSelectLang } from '@umijs/max';
import React from 'react';
export type SiderTheme = 'light' | 'dark';
export const SelectLang = () => {
  return (
    <UmiSelectLang
      style={{
        padding: 4,
      }}
    />
  );
};
export const Question = () => {
  return (
    <div
      style={{
        display: 'flex',
        height: 26,
      }}
      onClick={() => {
        window.open('https://pro.ant.design/docs/getting-started');
      }}
    >
      <QuestionCircleOutlined />
    </div>
  );
};
zy-asrs-flow/src/components/index.ts
New file
@@ -0,0 +1,12 @@
/**
 * 这个文件作为组件的目录
 * 目的是统一管理对外输出的组件,方便分类
 */
/**
 * 布局组件
 */
import Footer from './Footer';
import { Question, SelectLang } from './RightContent';
import { AvatarDropdown, AvatarName } from './RightContent/AvatarDropdown';
export { Footer, Question, SelectLang, AvatarDropdown, AvatarName };
zy-asrs-flow/src/config/setting.js
File was deleted
zy-asrs-flow/src/config/setting.ts
New file
@@ -0,0 +1,55 @@
// 接口地址
export const API_BASE_URL: string = '';
// 项目名称
export const PROJECT_NAME: string = '';
// 页签同路由不同参数可重复打开的路由
export const REPEATABLE_TABS: string[] = [];
// 不需要登录的路由
export const WHITE_LIST: string[] = ['/login', '/forget'];
// 开启 KeepAlive 后仍然不需要缓存的路由地址
export const KEEP_ALIVE_EXCLUDES: string[] = [];
// 直接指定菜单数据
export const USER_MENUS: Array<any> | undefined = undefined;
// 首页名称, 为空则取第一个菜单的名称
export const HOME_TITLE: string | undefined = undefined;
// 首页路径, 为空则取第一个菜单的地址
export const HOME_PATH: string | undefined = undefined;
// 外层布局的路由地址
export const LAYOUT_PATH = '/';
// 刷新路由的路由地址
export const REDIRECT_PATH = '/redirect';
// 开启页签栏是否缓存组件
//export const TAB_KEEP_ALIVE = !import.meta.env.DEV;
export const TAB_KEEP_ALIVE = true;
// token 传递的 header 名称
export const TOKEN_HEADER_NAME = 'Authorization';
// token 存储的名称
export const TOKEN_STORE_NAME = 'access_token';
// 主题配置存储的名称
export const THEME_STORE_NAME = 'theme';
// i18n 缓存的名称
export const I18N_CACHE_NAME = 'i18n-lang';
// 是否开启国际化功能
export const I18N_ENABLE = true;
// 高德地图 key , 自带的只能用于测试, 正式项目请自行到高德地图官网申请 key
export const MAP_KEY = '006d995d433058322319fa797f2876f5';
// EleAdminPro 授权码, 自带的只能用于演示, 正式项目请更换为自己的授权码
export const LICENSE_CODE =
  'dk9mcwJyetRWQlxWRiojIzJCLi8mcQ5Wa2ojI0NWZqJWd6ICZpJCLxkDM1NmVZpEZldjIvl2cyVmdiwiIiATMuEjI6IibQf0NW==';
zy-asrs-flow/src/global.less
New file
@@ -0,0 +1,53 @@
html,
body,
#root {
  height: 100%;
  margin: 0;
  padding: 0;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
    'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
    'Noto Color Emoji';
}
.colorWeak {
  filter: invert(80%);
}
.ant-layout {
  min-height: 100vh;
}
.ant-pro-sider.ant-layout-sider.ant-pro-sider-fixed {
  left: unset;
}
canvas {
  display: block;
}
body {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
ul,
ol {
  list-style: none;
}
@media (max-width: 768px) {
  .ant-table {
    width: 100%;
    overflow-x: auto;
    &-thead > tr,
    &-tbody > tr {
      > th,
      > td {
        white-space: pre;
        > span {
          display: block;
        }
      }
    }
  }
}
zy-asrs-flow/src/global.tsx
New file
@@ -0,0 +1,91 @@
import { useIntl } from '@umijs/max';
import { Button, message, notification } from 'antd';
import defaultSettings from '../config/defaultSettings';
const { pwa } = defaultSettings;
const isHttps = document.location.protocol === 'https:';
const clearCache = () => {
  // remove all caches
  if (window.caches) {
    caches
      .keys()
      .then((keys) => {
        keys.forEach((key) => {
          caches.delete(key);
        });
      })
      .catch((e) => console.log(e));
  }
};
// if pwa is true
if (pwa) {
  // Notify user if offline now
  window.addEventListener('sw.offline', () => {
    message.warning(useIntl().formatMessage({ id: 'app.pwa.offline' }));
  });
  // Pop up a prompt on the page asking the user if they want to use the latest version
  window.addEventListener('sw.updated', (event: Event) => {
    const e = event as CustomEvent;
    const reloadSW = async () => {
      // Check if there is sw whose state is waiting in ServiceWorkerRegistration
      // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
      const worker = e.detail && e.detail.waiting;
      if (!worker) {
        return true;
      }
      // Send skip-waiting event to waiting SW with MessageChannel
      await new Promise((resolve, reject) => {
        const channel = new MessageChannel();
        channel.port1.onmessage = (msgEvent) => {
          if (msgEvent.data.error) {
            reject(msgEvent.data.error);
          } else {
            resolve(msgEvent.data);
          }
        };
        worker.postMessage({ type: 'skip-waiting' }, [channel.port2]);
      });
      clearCache();
      window.location.reload();
      return true;
    };
    const key = `open${Date.now()}`;
    const btn = (
      <Button
        type="primary"
        onClick={() => {
          notification.destroy(key);
          reloadSW();
        }}
      >
        {useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.ok' })}
      </Button>
    );
    notification.open({
      message: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated' }),
      description: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.hint' }),
      btn,
      key,
      onClose: async () => null,
    });
  });
} else if ('serviceWorker' in navigator && isHttps) {
  // unregister service worker
  const { serviceWorker } = navigator;
  if (serviceWorker.getRegistrations) {
    serviceWorker.getRegistrations().then((sws) => {
      sws.forEach((sw) => {
        sw.unregister();
      });
    });
  }
  serviceWorker.getRegistration().then((sw) => {
    if (sw) sw.unregister();
  });
  clearCache();
}
zy-asrs-flow/src/locales/bn-BD.ts
New file
@@ -0,0 +1,25 @@
import component from './bn-BD/component';
import globalHeader from './bn-BD/globalHeader';
import menu from './bn-BD/menu';
import pages from './bn-BD/pages';
import pwa from './bn-BD/pwa';
import settingDrawer from './bn-BD/settingDrawer';
import settings from './bn-BD/settings';
export default {
  'navBar.lang': 'ভাষা',
  'layout.user.link.help': 'সহায়তা',
  'layout.user.link.privacy': 'গোপনীয়তা',
  'layout.user.link.terms': 'শর্তাদি',
  'app.preview.down.block': 'আপনার স্থানীয় প্রকল্পে এই পৃষ্ঠাটি ডাউনলোড করুন',
  'app.welcome.link.fetch-blocks': 'সমস্ত ব্লক পান',
  'app.welcome.link.block-list':
    '`block` ডেভেলপমেন্ট এর উপর ভিত্তি করে দ্রুত স্ট্যান্ডার্ড, পৃষ্ঠাসমূহ তৈরি করুন।',
  ...globalHeader,
  ...menu,
  ...settingDrawer,
  ...settings,
  ...pwa,
  ...component,
  ...pages,
};
zy-asrs-flow/src/locales/bn-BD/component.ts
New file
@@ -0,0 +1,5 @@
export default {
  'component.tagSelect.expand': 'বিস্তৃত',
  'component.tagSelect.collapse': 'সঙ্কুচিত',
  'component.tagSelect.all': 'সব',
};
zy-asrs-flow/src/locales/bn-BD/globalHeader.ts
New file
@@ -0,0 +1,17 @@
export default {
  'component.globalHeader.search': 'অনুসন্ধান করুন',
  'component.globalHeader.search.example1': 'অনুসন্ধান উদাহরণ ১',
  'component.globalHeader.search.example2': 'অনুসন্ধান উদাহরণ ২',
  'component.globalHeader.search.example3': 'অনুসন্ধান উদাহরণ ৩',
  'component.globalHeader.help': 'সহায়তা',
  'component.globalHeader.notification': 'বিজ্ঞপ্তি',
  'component.globalHeader.notification.empty': 'আপনি সমস্ত বিজ্ঞপ্তি দেখেছেন।',
  'component.globalHeader.message': 'বার্তা',
  'component.globalHeader.message.empty': 'আপনি সমস্ত বার্তা দেখেছেন।',
  'component.globalHeader.event': 'ঘটনা',
  'component.globalHeader.event.empty': 'আপনি সমস্ত ইভেন্ট দেখেছেন।',
  'component.noticeIcon.clear': 'সাফ',
  'component.noticeIcon.cleared': 'সাফ করা হয়েছে',
  'component.noticeIcon.empty': 'বিজ্ঞপ্তি নেই',
  'component.noticeIcon.view-more': 'আরো দেখুন',
};
zy-asrs-flow/src/locales/bn-BD/menu.ts
New file
@@ -0,0 +1,52 @@
export default {
  'menu.welcome': 'স্বাগতম',
  'menu.more-blocks': 'আরও ব্লক',
  'menu.home': 'নীড়',
  'menu.admin': 'অ্যাডমিন',
  'menu.admin.sub-page': 'উপ-পৃষ্ঠা',
  'menu.login': 'প্রবেশ',
  'menu.register': 'নিবন্ধন',
  'menu.register-result': 'নিবন্ধনে ফলাফল',
  'menu.dashboard': 'ড্যাশবোর্ড',
  'menu.dashboard.analysis': 'বিশ্লেষণ',
  'menu.dashboard.monitor': 'নিরীক্ষণ',
  'menu.dashboard.workplace': 'কর্মক্ষেত্র',
  'menu.exception.403': '403',
  'menu.exception.404': '404',
  'menu.exception.500': '500',
  'menu.form': 'ফর্ম',
  'menu.form.basic-form': 'বেসিক ফর্ম',
  'menu.form.step-form': 'পদক্ষেপ ফর্ম',
  'menu.form.step-form.info': 'পদক্ষেপ ফর্ম (স্থানান্তর তথ্য লিখুন)',
  'menu.form.step-form.confirm': 'পদক্ষেপ ফর্ম (স্থানান্তর তথ্য নিশ্চিত করুন)',
  'menu.form.step-form.result': 'পদক্ষেপ ফর্ম (সমাপ্ত)',
  'menu.form.advanced-form': 'উন্নত ফর্ম',
  'menu.list': 'তালিকা',
  'menu.list.table-list': 'অনুসন্ধানের টেবিল',
  'menu.list.basic-list': 'বেসিক তালিকা',
  'menu.list.card-list': 'কার্ডের তালিকা',
  'menu.list.search-list': 'অনুসন্ধানের তালিকা',
  'menu.list.search-list.articles': 'অনুসন্ধানের তালিকা (নিবন্ধসমূহ)',
  'menu.list.search-list.projects': 'অনুসন্ধানের তালিকা (প্রকল্পগুলি)',
  'menu.list.search-list.applications': 'অনুসন্ধানের তালিকা (অ্যাপ্লিকেশন)',
  'menu.profile': 'প্রোফাইল',
  'menu.profile.basic': 'বেসিক প্রোফাইল',
  'menu.profile.advanced': 'উন্নত প্রোফাইল',
  'menu.result': 'ফলাফল',
  'menu.result.success': 'সাফল্য',
  'menu.result.fail': 'ব্যর্থ',
  'menu.exception': 'ব্যতিক্রম',
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': 'ট্রিগার',
  'menu.account': 'হিসাব',
  'menu.account.center': 'অ্যাকাউন্ট কেন্দ্র',
  'menu.account.settings': 'অ্যাকাউন্ট সেটিংস',
  'menu.account.trigger': 'ট্রিগার ত্রুটি',
  'menu.account.logout': 'প্রস্থান',
  'menu.editor': 'গ্রাফিক সম্পাদক',
  'menu.editor.flow': 'ফ্লো এডিটর',
  'menu.editor.mind': 'মাইন্ড এডিটর',
  'menu.editor.koni': 'কোনি সম্পাদক',
};
zy-asrs-flow/src/locales/bn-BD/pages.ts
New file
@@ -0,0 +1,70 @@
export default {
  'pages.layouts.userLayout.title':
    'পিঁপড়া ডিজাইন হচ্ছে সিহু জেলার সবচেয়ে প্রভাবশালী ওয়েব ডিজাইনের স্পেসিফিকেশন',
  'pages.login.accountLogin.tab': 'অ্যাকাউন্টে লগইন',
  'pages.login.accountLogin.errorMessage': 'ভুল ব্যবহারকারীর নাম/পাসওয়ার্ড(admin/ant.design)',
  'pages.login.failure': 'লগইন ব্যর্থ হয়েছে। আবার চেষ্টা করুন!',
  'pages.login.success': 'সফল লগইন!',
  'pages.login.username.placeholder': 'ব্যবহারকারীর নাম: admin or user',
  'pages.login.username.required': 'আপনার ব্যবহারকারীর নাম ইনপুট করুন!',
  'pages.login.password.placeholder': 'পাসওয়ার্ড: ant.design',
  'pages.login.password.required': 'আপনার পাসওয়ার্ড ইনপুট করুন!',
  'pages.login.phoneLogin.tab': 'ফোন লগইন',
  'pages.login.phoneLogin.errorMessage': 'যাচাইকরণ কোড ত্রুটি',
  'pages.login.phoneNumber.placeholder': 'ফোন নম্বর',
  'pages.login.phoneNumber.required': 'আপনার ফোন নম্বর ইনপুট করুন!',
  'pages.login.phoneNumber.invalid': 'ফোন নম্বরটি সঠিক নয়!',
  'pages.login.captcha.placeholder': 'যাচাইকরণের কোড',
  'pages.login.captcha.required': 'দয়া করে ভেরিফিকেশন কোডটি ইনপুট করুন!',
  'pages.login.phoneLogin.getVerificationCode': 'কোড পান',
  'pages.getCaptchaSecondText': 'সেকেন্ড',
  'pages.login.rememberMe': 'আমাকে মনে রাখুন',
  'pages.login.forgotPassword': 'পাসওয়ার্ড ভুলে গেছেন?',
  'pages.login.submit': 'প্রবেশ করুন',
  'pages.login.loginWith': 'লগইন করতে পারেন:',
  'pages.login.registerAccount': 'অ্যাকাউন্ট নিবন্ধন করুন',
  'pages.welcome.link': 'স্বাগতম',
  'pages.welcome.alertMessage': 'দ্রুত এবং শক্তিশালী ভারী শুল্ক উপাদান প্রকাশ করা হয়েছে।',
  'pages.404.subTitle': 'দুঃখিত, আপনি যে পৃষ্ঠাটি দেখতে চান তা বিদ্যমান নেই।',
  'pages.404.buttonText': 'প্রধান পাতায় ফিরে যান',
  'pages.admin.subPage.title': 'এই পৃষ্ঠাটি কেবল অ্যাডমিন দ্বারা দেখা যাবে',
  'pages.admin.subPage.alertMessage':
    'UMI UI এখন প্রকাশিত হয়েছে, অভিজ্ঞতা শুরু করতে npm run ui ব্যবহার করতে স্বাগতম।',
  'pages.searchTable.createForm.newRule': 'নতুন বিধি',
  'pages.searchTable.updateForm.ruleConfig': 'বিধি কনফিগারেশন',
  'pages.searchTable.updateForm.basicConfig': 'মৌলিক তথ্য',
  'pages.searchTable.updateForm.ruleName.nameLabel': 'বিধি নাম',
  'pages.searchTable.updateForm.ruleName.nameRules': 'বিধির নাম লিখুন!',
  'pages.searchTable.updateForm.ruleDesc.descLabel': 'বিধির বিবরণ',
  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'কমপক্ষে পাঁচটি অক্ষর লিখুন',
  'pages.searchTable.updateForm.ruleDesc.descRules':
    'কমপক্ষে পাঁচটি অক্ষরের একটি বিধান বিবরণ লিখুন!',
  'pages.searchTable.updateForm.ruleProps.title': 'বৈশিষ্ট্য কনফিগার করুন',
  'pages.searchTable.updateForm.object': 'নিরীক্ষণ অবজেক্ট',
  'pages.searchTable.updateForm.ruleProps.templateLabel': 'বিধি টেম্পলেট',
  'pages.searchTable.updateForm.ruleProps.typeLabel': 'বিধি প্রকার',
  'pages.searchTable.updateForm.schedulingPeriod.title': 'সময়সূচী নির্ধারণ করুন',
  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'শুরুর সময়',
  'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'একটি শুরুর সময় চয়ন করুন!',
  'pages.searchTable.titleDesc': 'বর্ণনা',
  'pages.searchTable.ruleName': 'বিধি নাম প্রয়োজন',
  'pages.searchTable.titleCallNo': 'পরিষেবা কল সংখ্যা',
  'pages.searchTable.titleStatus': 'অবস্থা',
  'pages.searchTable.nameStatus.default': 'ডিফল্ট',
  'pages.searchTable.nameStatus.running': 'চলমান',
  'pages.searchTable.nameStatus.online': 'অনলাইন',
  'pages.searchTable.nameStatus.abnormal': 'অস্বাভাবিক',
  'pages.searchTable.titleUpdatedAt': 'সর্বশেষ নির্ধারিত',
  'pages.searchTable.exception': 'ব্যতিক্রম জন্য কারণ লিখুন!',
  'pages.searchTable.titleOption': 'অপশন',
  'pages.searchTable.config': 'কনফিগারেশন',
  'pages.searchTable.subscribeAlert': 'সতর্কতা সাবস্ক্রাইব করুন',
  'pages.searchTable.title': 'ইনকয়েরি ফরম',
  'pages.searchTable.new': 'নতুন',
  'pages.searchTable.chosen': 'নির্বাচিত',
  'pages.searchTable.item': 'আইটেম',
  'pages.searchTable.totalServiceCalls': 'পরিষেবা কলগুলির মোট সংখ্যা',
  'pages.searchTable.tenThousand': '000',
  'pages.searchTable.batchDeletion': 'একসাখে ডিলিট',
  'pages.searchTable.batchApproval': 'একসাখে অনুমোদন',
};
zy-asrs-flow/src/locales/bn-BD/pwa.ts
New file
@@ -0,0 +1,7 @@
export default {
  'app.pwa.offline': 'আপনি এখন অফলাইন',
  'app.pwa.serviceworker.updated': 'নতুন সামগ্রী উপলব্ধ',
  'app.pwa.serviceworker.updated.hint':
    'বর্তমান পৃষ্ঠাটি পুনরায় লোড করতে দয়া করে "রিফ্রেশ" বোতাম টিপুন',
  'app.pwa.serviceworker.updated.ok': 'রিফ্রেশ',
};
zy-asrs-flow/src/locales/bn-BD/settingDrawer.ts
New file
@@ -0,0 +1,31 @@
export default {
  'app.setting.pagestyle': 'পৃষ্ঠা স্টাইল সেটিং',
  'app.setting.pagestyle.dark': 'ডার্ক স্টাইল',
  'app.setting.pagestyle.light': 'লাইট স্টাইল',
  'app.setting.content-width': 'সামগ্রীর প্রস্থ',
  'app.setting.content-width.fixed': 'স্থির',
  'app.setting.content-width.fluid': 'প্রবাহী',
  'app.setting.themecolor': 'থিম রঙ',
  'app.setting.themecolor.dust': 'ডাস্ট রেড',
  'app.setting.themecolor.volcano': 'আগ্নেয়গিরি',
  'app.setting.themecolor.sunset': 'সানসেট কমলা',
  'app.setting.themecolor.cyan': 'সবুজাভ নীল',
  'app.setting.themecolor.green': 'পোলার সবুজ',
  'app.setting.themecolor.daybreak': 'দিবস ব্রেক ব্লু (ডিফল্ট)',
  'app.setting.themecolor.geekblue': 'গিক আঠালো',
  'app.setting.themecolor.purple': 'গোল্ডেন বেগুনি',
  'app.setting.navigationmode': 'নেভিগেশন মোড',
  'app.setting.sidemenu': 'সাইড মেনু লেআউট',
  'app.setting.topmenu': 'টপ মেনু লেআউট',
  'app.setting.fixedheader': 'স্থির হেডার',
  'app.setting.fixedsidebar': 'স্থির সাইডবার',
  'app.setting.fixedsidebar.hint': 'সাইড মেনু বিন্যাসে কাজ করে',
  'app.setting.hideheader': 'স্ক্রোল করার সময় হেডার লুকানো',
  'app.setting.hideheader.hint': 'লুকানো হেডার সক্ষম থাকলে কাজ করে',
  'app.setting.othersettings': 'অন্যান্য সেটিংস্',
  'app.setting.weakmode': 'দুর্বল মোড',
  'app.setting.copy': 'সেটিং কপি করুন',
  'app.setting.copyinfo': 'সাফল্যের অনুলিপি করুন - প্রতিস্থাপন করুন: src/models/setting.js',
  'app.setting.production.hint':
    'কেবল বিকাশের পরিবেশে প্যানেল শো সেট করা হচ্ছে, দয়া করে ম্যানুয়ালি সংশোধন করুন',
};
zy-asrs-flow/src/locales/bn-BD/settings.ts
New file
@@ -0,0 +1,59 @@
export default {
  'app.settings.menuMap.basic': 'মৌলিক বৈশিষ্ট্যসহ',
  'app.settings.menuMap.security': 'নিরাপত্তা বিন্যাস',
  'app.settings.menuMap.binding': 'অ্যাকাউন্ট বাঁধাই',
  'app.settings.menuMap.notification': 'নতুন বার্তা বিজ্ঞপ্তি',
  'app.settings.basic.avatar': 'অবতার',
  'app.settings.basic.change-avatar': 'অবতার পরিবর্তন করুন',
  'app.settings.basic.email': 'ইমেইল',
  'app.settings.basic.email-message': 'আপনার ইমেইল ইনপুট করুন!',
  'app.settings.basic.nickname': 'ডাক নাম',
  'app.settings.basic.nickname-message': 'আপনার ডাকনামটি ইনপুট করুন!',
  'app.settings.basic.profile': 'ব্যক্তিগত প্রোফাইল',
  'app.settings.basic.profile-message': 'আপনার ব্যক্তিগত প্রোফাইল ইনপুট করুন!',
  'app.settings.basic.profile-placeholder': 'নিজের সাথে সংক্ষিপ্ত পরিচয়',
  'app.settings.basic.country': 'দেশ/অঞ্চল',
  'app.settings.basic.country-message': 'আপনার দেশ ইনপুট করুন!',
  'app.settings.basic.geographic': 'প্রদেশ বা শহর',
  'app.settings.basic.geographic-message': 'আপনার ভৌগলিক তথ্য ইনপুট করুন!',
  'app.settings.basic.address': 'রাস্তার ঠিকানা',
  'app.settings.basic.address-message': 'দয়া করে আপনার ঠিকানা ইনপুট করুন!',
  'app.settings.basic.phone': 'ফোন নম্বর',
  'app.settings.basic.phone-message': 'আপনার ফোন ইনপুট করুন!',
  'app.settings.basic.update': 'তথ্য হালনাগাদ',
  'app.settings.security.strong': 'শক্তিশালী',
  'app.settings.security.medium': 'মধ্যম',
  'app.settings.security.weak': 'দুর্বল',
  'app.settings.security.password': 'অ্যাকাউন্টের পাসওয়ার্ড',
  'app.settings.security.password-description': 'বর্তমান পাসওয়ার্ড শক্তি',
  'app.settings.security.phone': 'সুরক্ষা ফোন',
  'app.settings.security.phone-description': 'আবদ্ধ ফোন',
  'app.settings.security.question': 'নিরাপত্তা প্রশ্ন',
  'app.settings.security.question-description':
    'সুরক্ষা প্রশ্ন সেট করা নেই, এবং সুরক্ষা নীতি কার্যকরভাবে অ্যাকাউন্ট সুরক্ষা রক্ষা করতে পারে',
  'app.settings.security.email': 'ব্যাকআপ ইমেইল',
  'app.settings.security.email-description': 'বাউন্ড ইমেইল',
  'app.settings.security.mfa': 'MFA ডিভাইস',
  'app.settings.security.mfa-description':
    "আনবাউন্ড এমএফএ ডিভাইস, বাঁধাইয়ের পরে, দু'বার নিশ্চিত করা যায়",
  'app.settings.security.modify': 'পরিবর্তন করুন',
  'app.settings.security.set': 'সেট',
  'app.settings.security.bind': 'বাঁধাই',
  'app.settings.binding.taobao': 'বাঁধাই তাওবাও',
  'app.settings.binding.taobao-description': 'বর্তমানে আনবাউন্ড তাওবাও অ্যাকাউন্ট',
  'app.settings.binding.alipay': 'বাইন্ডিং আলিপে',
  'app.settings.binding.alipay-description': 'বর্তমানে আনবাউন্ড আলিপে অ্যাকাউন্ট',
  'app.settings.binding.dingding': 'বাঁধাই ডিঙ্গটালক',
  'app.settings.binding.dingding-description': 'বর্তমানে আনবাউন্ড ডিঙ্গটাল অ্যাকাউন্ট',
  'app.settings.binding.bind': 'বাঁধাই',
  'app.settings.notification.password': 'অ্যাকাউন্টের পাসওয়ার্ড',
  'app.settings.notification.password-description':
    'অন্যান্য ব্যবহারকারীর বার্তাগুলি স্টেশন চিঠি আকারে জানানো হবে',
  'app.settings.notification.messages': 'সিস্টেম বার্তা',
  'app.settings.notification.messages-description':
    'সিস্টেম বার্তাগুলি স্টেশন চিঠির আকারে জানানো হবে',
  'app.settings.notification.todo': 'করণীয় বিজ্ঞপ্তি',
  'app.settings.notification.todo-description': 'করণীয় তালিকাটি স্টেশন থেকে চিঠি আকারে জানানো হবে',
  'app.settings.open': 'খোলা',
  'app.settings.close': 'বন্ধ',
};
zy-asrs-flow/src/locales/en-US.ts
New file
@@ -0,0 +1,24 @@
import component from './en-US/component';
import globalHeader from './en-US/globalHeader';
import menu from './en-US/menu';
import pages from './en-US/pages';
import pwa from './en-US/pwa';
import settingDrawer from './en-US/settingDrawer';
import settings from './en-US/settings';
export default {
  'navBar.lang': 'Languages',
  'layout.user.link.help': 'Help',
  'layout.user.link.privacy': 'Privacy',
  'layout.user.link.terms': 'Terms',
  'app.preview.down.block': 'Download this page to your local project',
  'app.welcome.link.fetch-blocks': 'Get all block',
  'app.welcome.link.block-list': 'Quickly build standard, pages based on `block` development',
  ...globalHeader,
  ...menu,
  ...settingDrawer,
  ...settings,
  ...pwa,
  ...component,
  ...pages,
};
zy-asrs-flow/src/locales/en-US/component.ts
New file
@@ -0,0 +1,5 @@
export default {
  'component.tagSelect.expand': 'Expand',
  'component.tagSelect.collapse': 'Collapse',
  'component.tagSelect.all': 'All',
};
zy-asrs-flow/src/locales/en-US/globalHeader.ts
New file
@@ -0,0 +1,17 @@
export default {
  'component.globalHeader.search': 'Search',
  'component.globalHeader.search.example1': 'Search example 1',
  'component.globalHeader.search.example2': 'Search example 2',
  'component.globalHeader.search.example3': 'Search example 3',
  'component.globalHeader.help': 'Help',
  'component.globalHeader.notification': 'Notification',
  'component.globalHeader.notification.empty': 'You have viewed all notifications.',
  'component.globalHeader.message': 'Message',
  'component.globalHeader.message.empty': 'You have viewed all messsages.',
  'component.globalHeader.event': 'Event',
  'component.globalHeader.event.empty': 'You have viewed all events.',
  'component.noticeIcon.clear': 'Clear',
  'component.noticeIcon.cleared': 'Cleared',
  'component.noticeIcon.empty': 'No notifications',
  'component.noticeIcon.view-more': 'View more',
};
zy-asrs-flow/src/locales/en-US/menu.ts
New file
@@ -0,0 +1,52 @@
export default {
  'menu.welcome': 'Welcome',
  'menu.more-blocks': 'More Blocks',
  'menu.home': 'Home',
  'menu.admin': 'Admin',
  'menu.admin.sub-page': 'Sub-Page',
  'menu.login': 'Login',
  'menu.register': 'Register',
  'menu.register-result': 'Register Result',
  'menu.dashboard': 'Dashboard',
  'menu.dashboard.analysis': 'Analysis',
  'menu.dashboard.monitor': 'Monitor',
  'menu.dashboard.workplace': 'Workplace',
  'menu.exception.403': '403',
  'menu.exception.404': '404',
  'menu.exception.500': '500',
  'menu.form': 'Form',
  'menu.form.basic-form': 'Basic Form',
  'menu.form.step-form': 'Step Form',
  'menu.form.step-form.info': 'Step Form(write transfer information)',
  'menu.form.step-form.confirm': 'Step Form(confirm transfer information)',
  'menu.form.step-form.result': 'Step Form(finished)',
  'menu.form.advanced-form': 'Advanced Form',
  'menu.list': 'List',
  'menu.list.table-list': 'Search Table',
  'menu.list.basic-list': 'Basic List',
  'menu.list.card-list': 'Card List',
  'menu.list.search-list': 'Search List',
  'menu.list.search-list.articles': 'Search List(articles)',
  'menu.list.search-list.projects': 'Search List(projects)',
  'menu.list.search-list.applications': 'Search List(applications)',
  'menu.profile': 'Profile',
  'menu.profile.basic': 'Basic Profile',
  'menu.profile.advanced': 'Advanced Profile',
  'menu.result': 'Result',
  'menu.result.success': 'Success',
  'menu.result.fail': 'Fail',
  'menu.exception': 'Exception',
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': 'Trigger',
  'menu.account': 'Account',
  'menu.account.center': 'Account Center',
  'menu.account.settings': 'Account Settings',
  'menu.account.trigger': 'Trigger Error',
  'menu.account.logout': 'Logout',
  'menu.editor': 'Graphic Editor',
  'menu.editor.flow': 'Flow Editor',
  'menu.editor.mind': 'Mind Editor',
  'menu.editor.koni': 'Koni Editor',
};
zy-asrs-flow/src/locales/en-US/pages.ts
New file
@@ -0,0 +1,70 @@
export default {
  'pages.layouts.userLayout.title':
    'Ant Design is the most influential web design specification in Xihu district',
  'pages.login.accountLogin.tab': 'Account Login',
  'pages.login.accountLogin.errorMessage': 'Incorrect username/password(admin/ant.design)',
  'pages.login.failure': 'Login failed, please try again!',
  'pages.login.success': 'Login successful!',
  'pages.login.username.placeholder': 'Username: admin or user',
  'pages.login.username.required': 'Please input your username!',
  'pages.login.password.placeholder': 'Password: ant.design',
  'pages.login.password.required': 'Please input your password!',
  'pages.login.phoneLogin.tab': 'Phone Login',
  'pages.login.phoneLogin.errorMessage': 'Verification Code Error',
  'pages.login.phoneNumber.placeholder': 'Phone Number',
  'pages.login.phoneNumber.required': 'Please input your phone number!',
  'pages.login.phoneNumber.invalid': 'Phone number is invalid!',
  'pages.login.captcha.placeholder': 'Verification Code',
  'pages.login.captcha.required': 'Please input verification code!',
  'pages.login.phoneLogin.getVerificationCode': 'Get Code',
  'pages.getCaptchaSecondText': 'sec(s)',
  'pages.login.rememberMe': 'Remember me',
  'pages.login.forgotPassword': 'Forgot Password ?',
  'pages.login.submit': 'Login',
  'pages.login.loginWith': 'Login with :',
  'pages.login.registerAccount': 'Register Account',
  'pages.welcome.link': 'Welcome',
  'pages.welcome.alertMessage': 'Faster and stronger heavy-duty components have been released.',
  'pages.404.subTitle': 'Sorry, the page you visited does not exist.',
  'pages.404.buttonText': 'Back Home',
  'pages.admin.subPage.title': 'This page can only be viewed by Admin',
  'pages.admin.subPage.alertMessage':
    'Umi ui is now released, welcome to use npm run ui to start the experience.',
  'pages.searchTable.createForm.newRule': 'New Rule',
  'pages.searchTable.updateForm.ruleConfig': 'Rule configuration',
  'pages.searchTable.updateForm.basicConfig': 'Basic Information',
  'pages.searchTable.updateForm.ruleName.nameLabel': 'Rule Name',
  'pages.searchTable.updateForm.ruleName.nameRules': 'Please enter the rule name!',
  'pages.searchTable.updateForm.ruleDesc.descLabel': 'Rule Description',
  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'Please enter at least five characters',
  'pages.searchTable.updateForm.ruleDesc.descRules':
    'Please enter a rule description of at least five characters!',
  'pages.searchTable.updateForm.ruleProps.title': 'Configure Properties',
  'pages.searchTable.updateForm.object': 'Monitoring Object',
  'pages.searchTable.updateForm.ruleProps.templateLabel': 'Rule Template',
  'pages.searchTable.updateForm.ruleProps.typeLabel': 'Rule Type',
  'pages.searchTable.updateForm.schedulingPeriod.title': 'Set Scheduling Period',
  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Starting Time',
  'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'Please choose a start time!',
  'pages.searchTable.titleDesc': 'Description',
  'pages.searchTable.ruleName': 'Rule name is required',
  'pages.searchTable.titleCallNo': 'Number of Service Calls',
  'pages.searchTable.titleStatus': 'Status',
  'pages.searchTable.nameStatus.default': 'default',
  'pages.searchTable.nameStatus.running': 'running',
  'pages.searchTable.nameStatus.online': 'online',
  'pages.searchTable.nameStatus.abnormal': 'abnormal',
  'pages.searchTable.titleUpdatedAt': 'Last Scheduled at',
  'pages.searchTable.exception': 'Please enter the reason for the exception!',
  'pages.searchTable.titleOption': 'Option',
  'pages.searchTable.config': 'Configuration',
  'pages.searchTable.subscribeAlert': 'Subscribe to alerts',
  'pages.searchTable.title': 'Enquiry Form',
  'pages.searchTable.new': 'New',
  'pages.searchTable.chosen': 'chosen',
  'pages.searchTable.item': 'item',
  'pages.searchTable.totalServiceCalls': 'Total Number of Service Calls',
  'pages.searchTable.tenThousand': '0000',
  'pages.searchTable.batchDeletion': 'batch deletion',
  'pages.searchTable.batchApproval': 'batch approval',
};
zy-asrs-flow/src/locales/en-US/pwa.ts
New file
@@ -0,0 +1,6 @@
export default {
  'app.pwa.offline': 'You are offline now',
  'app.pwa.serviceworker.updated': 'New content is available',
  'app.pwa.serviceworker.updated.hint': 'Please press the "Refresh" button to reload current page',
  'app.pwa.serviceworker.updated.ok': 'Refresh',
};
zy-asrs-flow/src/locales/en-US/settingDrawer.ts
New file
@@ -0,0 +1,31 @@
export default {
  'app.setting.pagestyle': 'Page style setting',
  'app.setting.pagestyle.dark': 'Dark style',
  'app.setting.pagestyle.light': 'Light style',
  'app.setting.content-width': 'Content Width',
  'app.setting.content-width.fixed': 'Fixed',
  'app.setting.content-width.fluid': 'Fluid',
  'app.setting.themecolor': 'Theme Color',
  'app.setting.themecolor.dust': 'Dust Red',
  'app.setting.themecolor.volcano': 'Volcano',
  'app.setting.themecolor.sunset': 'Sunset Orange',
  'app.setting.themecolor.cyan': 'Cyan',
  'app.setting.themecolor.green': 'Polar Green',
  'app.setting.themecolor.daybreak': 'Daybreak Blue (default)',
  'app.setting.themecolor.geekblue': 'Geek Glue',
  'app.setting.themecolor.purple': 'Golden Purple',
  'app.setting.navigationmode': 'Navigation Mode',
  'app.setting.sidemenu': 'Side Menu Layout',
  'app.setting.topmenu': 'Top Menu Layout',
  'app.setting.fixedheader': 'Fixed Header',
  'app.setting.fixedsidebar': 'Fixed Sidebar',
  'app.setting.fixedsidebar.hint': 'Works on Side Menu Layout',
  'app.setting.hideheader': 'Hidden Header when scrolling',
  'app.setting.hideheader.hint': 'Works when Hidden Header is enabled',
  'app.setting.othersettings': 'Other Settings',
  'app.setting.weakmode': 'Color Blind Friendly Mode',
  'app.setting.copy': 'Copy Setting',
  'app.setting.copyinfo': 'copy success, please replace defaultSettings in src/models/setting.js',
  'app.setting.production.hint':
    'Setting panel shows in development environment only, please manually modify',
};
zy-asrs-flow/src/locales/en-US/settings.ts
New file
@@ -0,0 +1,60 @@
export default {
  'app.settings.menuMap.basic': 'Basic Settings',
  'app.settings.menuMap.security': 'Security Settings',
  'app.settings.menuMap.binding': 'Account Binding',
  'app.settings.menuMap.notification': 'New Message Notification',
  'app.settings.basic.avatar': 'Avatar',
  'app.settings.basic.change-avatar': 'Change avatar',
  'app.settings.basic.email': 'Email',
  'app.settings.basic.email-message': 'Please input your email!',
  'app.settings.basic.nickname': 'Nickname',
  'app.settings.basic.nickname-message': 'Please input your Nickname!',
  'app.settings.basic.profile': 'Personal profile',
  'app.settings.basic.profile-message': 'Please input your personal profile!',
  'app.settings.basic.profile-placeholder': 'Brief introduction to yourself',
  'app.settings.basic.country': 'Country/Region',
  'app.settings.basic.country-message': 'Please input your country!',
  'app.settings.basic.geographic': 'Province or city',
  'app.settings.basic.geographic-message': 'Please input your geographic info!',
  'app.settings.basic.address': 'Street Address',
  'app.settings.basic.address-message': 'Please input your address!',
  'app.settings.basic.phone': 'Phone Number',
  'app.settings.basic.phone-message': 'Please input your phone!',
  'app.settings.basic.update': 'Update Information',
  'app.settings.security.strong': 'Strong',
  'app.settings.security.medium': 'Medium',
  'app.settings.security.weak': 'Weak',
  'app.settings.security.password': 'Account Password',
  'app.settings.security.password-description': 'Current password strength',
  'app.settings.security.phone': 'Security Phone',
  'app.settings.security.phone-description': 'Bound phone',
  'app.settings.security.question': 'Security Question',
  'app.settings.security.question-description':
    'The security question is not set, and the security policy can effectively protect the account security',
  'app.settings.security.email': 'Backup Email',
  'app.settings.security.email-description': 'Bound Email',
  'app.settings.security.mfa': 'MFA Device',
  'app.settings.security.mfa-description':
    'Unbound MFA device, after binding, can be confirmed twice',
  'app.settings.security.modify': 'Modify',
  'app.settings.security.set': 'Set',
  'app.settings.security.bind': 'Bind',
  'app.settings.binding.taobao': 'Binding Taobao',
  'app.settings.binding.taobao-description': 'Currently unbound Taobao account',
  'app.settings.binding.alipay': 'Binding Alipay',
  'app.settings.binding.alipay-description': 'Currently unbound Alipay account',
  'app.settings.binding.dingding': 'Binding DingTalk',
  'app.settings.binding.dingding-description': 'Currently unbound DingTalk account',
  'app.settings.binding.bind': 'Bind',
  'app.settings.notification.password': 'Account Password',
  'app.settings.notification.password-description':
    'Messages from other users will be notified in the form of a station letter',
  'app.settings.notification.messages': 'System Messages',
  'app.settings.notification.messages-description':
    'System messages will be notified in the form of a station letter',
  'app.settings.notification.todo': 'To-do Notification',
  'app.settings.notification.todo-description':
    'The to-do list will be notified in the form of a letter from the station',
  'app.settings.open': 'Open',
  'app.settings.close': 'Close',
};
zy-asrs-flow/src/locales/fa-IR.ts
New file
@@ -0,0 +1,24 @@
import component from './fa-IR/component';
import globalHeader from './fa-IR/globalHeader';
import menu from './fa-IR/menu';
import pages from './fa-IR/pages';
import pwa from './fa-IR/pwa';
import settingDrawer from './fa-IR/settingDrawer';
import settings from './fa-IR/settings';
export default {
  'navBar.lang': 'زبان ها  ',
  'layout.user.link.help': 'کمک',
  'layout.user.link.privacy': 'حریم خصوصی',
  'layout.user.link.terms': 'مقررات',
  'app.preview.down.block': 'این صفحه را در پروژه محلی خود بارگیری کنید',
  'app.welcome.link.fetch-blocks': 'دریافت تمام بلوک',
  'app.welcome.link.block-list': 'به سرعت صفحات استاندارد مبتنی بر توسعه "بلوک" را بسازید',
  ...globalHeader,
  ...menu,
  ...settingDrawer,
  ...settings,
  ...pwa,
  ...component,
  ...pages,
};
zy-asrs-flow/src/locales/fa-IR/component.ts
New file
@@ -0,0 +1,5 @@
export default {
  'component.tagSelect.expand': 'باز',
  'component.tagSelect.collapse': 'بسته ',
  'component.tagSelect.all': 'همه',
};
zy-asrs-flow/src/locales/fa-IR/globalHeader.ts
New file
@@ -0,0 +1,17 @@
export default {
  'component.globalHeader.search': 'جستجو ',
  'component.globalHeader.search.example1': 'مثال 1 را جستجو کنید',
  'component.globalHeader.search.example2': 'مثال 2 را جستجو کنید',
  'component.globalHeader.search.example3': 'مثال 3 را جستجو کنید',
  'component.globalHeader.help': 'کمک',
  'component.globalHeader.notification': 'اعلان',
  'component.globalHeader.notification.empty': 'شما همه اعلان ها را مشاهده کرده اید.',
  'component.globalHeader.message': 'پیام',
  'component.globalHeader.message.empty': 'شما همه پیام ها را مشاهده کرده اید.',
  'component.globalHeader.event': 'رویداد',
  'component.globalHeader.event.empty': 'شما همه رویدادها را مشاهده کرده اید.',
  'component.noticeIcon.clear': 'پاک کردن',
  'component.noticeIcon.cleared': 'پاک شد',
  'component.noticeIcon.empty': 'بدون اعلان',
  'component.noticeIcon.view-more': 'نمایش بیشتر',
};
zy-asrs-flow/src/locales/fa-IR/menu.ts
New file
@@ -0,0 +1,52 @@
export default {
  'menu.welcome': 'خوش آمدید',
  'menu.more-blocks': 'بلوک های بیشتر',
  'menu.home': 'خانه',
  'menu.admin': 'مدیر',
  'menu.admin.sub-page': 'زیر صفحه',
  'menu.login': 'ورود',
  'menu.register': 'ثبت نام',
  'menu.register-result': 'ثبت نام نتیجه',
  'menu.dashboard': 'داشبورد',
  'menu.dashboard.analysis': 'تحلیل و بررسی',
  'menu.dashboard.monitor': 'نظارت',
  'menu.dashboard.workplace': 'محل کار',
  'menu.exception.403': '403',
  'menu.exception.404': '404',
  'menu.exception.500': '500',
  'menu.form': 'فرم',
  'menu.form.basic-form': 'فرم اساسی',
  'menu.form.step-form': 'فرم مرحله',
  'menu.form.step-form.info': 'فرم مرحله (نوشتن اطلاعات انتقال)',
  'menu.form.step-form.confirm': 'فرم مرحله (تأیید اطلاعات انتقال)',
  'menu.form.step-form.result': 'فرم مرحله (تمام شده)',
  'menu.form.advanced-form': 'فرم پیشرفته',
  'menu.list': 'لیست',
  'menu.list.table-list': 'جدول جستجو',
  'menu.list.basic-list': 'لیست اصلی',
  'menu.list.card-list': 'لیست کارت',
  'menu.list.search-list': 'لیست جستجو',
  'menu.list.search-list.articles': 'لیست جستجو (مقالات)',
  'menu.list.search-list.projects': 'لیست جستجو (پروژه ها)',
  'menu.list.search-list.applications': 'لیست جستجو (برنامه ها)',
  'menu.profile': 'مشخصات',
  'menu.profile.basic': 'مشخصات عمومی',
  'menu.profile.advanced': 'مشخصات پیشرفته',
  'menu.result': 'نتیجه',
  'menu.result.success': 'موفق',
  'menu.result.fail': 'ناموفق',
  'menu.exception': 'استثنا',
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': 'راه اندازی',
  'menu.account': 'حساب',
  'menu.account.center': 'مرکز حساب',
  'menu.account.settings': 'تنظیمات حساب',
  'menu.account.trigger': 'خطای راه اندازی',
  'menu.account.logout': 'خروج',
  'menu.editor': 'ویرایشگر گرافیک',
  'menu.editor.flow': 'ویرایشگر جریان',
  'menu.editor.mind': 'ویرایشگر ذهن',
  'menu.editor.koni': 'ویرایشگر Koni',
};
zy-asrs-flow/src/locales/fa-IR/pages.ts
New file
@@ -0,0 +1,69 @@
export default {
  'pages.layouts.userLayout.title': 'طراحی مورچه تأثیرگذارترین مشخصات طراحی وب در منطقه Xihu است',
  'pages.login.accountLogin.tab': 'ورود به حساب کاربری',
  'pages.login.accountLogin.errorMessage': 'نام کاربری / رمزعبور نادرست (مدیر / ant.design)',
  'pages.login.failure': 'ورود به سیستم با شکست مواجه شد، لطفا دوباره سعی کنید!',
  'pages.login.success': 'ورود موفق!',
  'pages.login.username.placeholder': 'نام کاربری: مدیر یا کاربر',
  'pages.login.username.required': 'لطفا نام کاربری خود را وارد کنید!',
  'pages.login.password.placeholder': 'رمز عبور: ant.design',
  'pages.login.password.required': 'لطفاً رمز ورود خود را وارد کنید!',
  'pages.login.phoneLogin.tab': 'ورود به سیستم تلفن',
  'pages.login.phoneLogin.errorMessage': 'خطای کد تأیید',
  'pages.login.phoneNumber.placeholder': 'شماره تلفن',
  'pages.login.phoneNumber.required': 'لطفاً شماره تلفن خود را وارد کنید!',
  'pages.login.phoneNumber.invalid': 'شماره تلفن نامعتبر است!',
  'pages.login.captcha.placeholder': 'کد تایید',
  'pages.login.captcha.required': 'لطفا کد تأیید را وارد کنید!',
  'pages.login.phoneLogin.getVerificationCode': 'دریافت کد',
  'pages.getCaptchaSecondText': 'ثانیه',
  'pages.login.rememberMe': 'مرا به خاطر بسپار',
  'pages.login.forgotPassword': 'رمز عبور را فراموش کرده اید ?',
  'pages.login.submit': 'ارسال',
  'pages.login.loginWith': 'وارد شوید با :',
  'pages.login.registerAccount': 'ثبت نام',
  'pages.welcome.link': 'خوش آمدید',
  'pages.welcome.alertMessage': 'اجزای سنگین تر سریعتر و قوی تر آزاد شده اند.',
  'pages.404.subTitle': 'ببخشيد، صفحه اي که ديديد وجود نداره',
  'pages.404.buttonText': 'بازگشت به صفحه اصلی',
  'pages.admin.subPage.title': 'این صفحه فقط توسط مدیر قابل مشاهده است',
  'pages.admin.subPage.alertMessage':
    'رابط کاربری Umi اکنون منتشر شده است ، برای شروع تجربه استفاده از npm run ui خوش آمدید.',
  'pages.searchTable.createForm.newRule': 'قانون جدید',
  'pages.searchTable.updateForm.ruleConfig': 'پیکربندی قانون',
  'pages.searchTable.updateForm.basicConfig': 'اطلاعات اولیه',
  'pages.searchTable.updateForm.ruleName.nameLabel': ' نام قانون',
  'pages.searchTable.updateForm.ruleName.nameRules': 'لطفاً نام قانون را وارد کنید!',
  'pages.searchTable.updateForm.ruleDesc.descLabel': 'شرح قانون',
  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': 'لطفاً حداقل پنج حرف وارد کنید',
  'pages.searchTable.updateForm.ruleDesc.descRules':
    'لطفاً حداقل یک قانون حاوی پنج کاراکتر شرح دهید!',
  'pages.searchTable.updateForm.ruleProps.title': 'پیکربندی خصوصیات',
  'pages.searchTable.updateForm.object': 'نظارت بر شی',
  'pages.searchTable.updateForm.ruleProps.templateLabel': 'الگوی قانون',
  'pages.searchTable.updateForm.ruleProps.typeLabel': 'نوع قانون',
  'pages.searchTable.updateForm.schedulingPeriod.title': 'تنظیم دوره زمان بندی',
  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'زمان شروع',
  'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'لطفاً زمان شروع را انتخاب کنید!',
  'pages.searchTable.titleDesc': 'شرح',
  'pages.searchTable.ruleName': 'نام قانون لازم است',
  'pages.searchTable.titleCallNo': 'تعداد تماس های خدماتی',
  'pages.searchTable.titleStatus': 'وضعیت',
  'pages.searchTable.nameStatus.default': 'پیش فرض',
  'pages.searchTable.nameStatus.running': 'در حال دویدن',
  'pages.searchTable.nameStatus.online': 'برخط',
  'pages.searchTable.nameStatus.abnormal': 'غیرطبیعی',
  'pages.searchTable.titleUpdatedAt': 'آخرین برنامه ریزی در',
  'pages.searchTable.exception': 'لطفا دلیل استثنا را وارد کنید!',
  'pages.searchTable.titleOption': 'گزینه',
  'pages.searchTable.config': 'پیکربندی',
  'pages.searchTable.subscribeAlert': 'مشترک شدن در هشدارها',
  'pages.searchTable.title': 'فرم درخواست',
  'pages.searchTable.new': 'جدید',
  'pages.searchTable.chosen': 'انتخاب شده',
  'pages.searchTable.item': 'مورد',
  'pages.searchTable.totalServiceCalls': 'تعداد کل تماس های خدماتی',
  'pages.searchTable.tenThousand': '0000',
  'pages.searchTable.batchDeletion': 'حذف دسته ای',
  'pages.searchTable.batchApproval': 'تصویب دسته ای',
};
zy-asrs-flow/src/locales/fa-IR/pwa.ts
New file
@@ -0,0 +1,7 @@
export default {
  'app.pwa.offline': 'شما اکنون آفلاین هستید',
  'app.pwa.serviceworker.updated': 'مطالب جدید در دسترس است',
  'app.pwa.serviceworker.updated.hint':
    'لطفاً برای بارگیری مجدد صفحه فعلی ، دکمه "تازه سازی" را فشار دهید',
  'app.pwa.serviceworker.updated.ok': 'تازه سازی',
};
zy-asrs-flow/src/locales/fa-IR/settingDrawer.ts
New file
@@ -0,0 +1,32 @@
export default {
  'app.setting.pagestyle': 'تنظیم نوع صفحه',
  'app.setting.pagestyle.dark': 'سبک تیره',
  'app.setting.pagestyle.light': 'سبک سبک',
  'app.setting.content-width': 'عرض محتوا',
  'app.setting.content-width.fixed': 'ثابت',
  'app.setting.content-width.fluid': 'شناور',
  'app.setting.themecolor': 'رنگ تم',
  'app.setting.themecolor.dust': 'گرد و غبار قرمز',
  'app.setting.themecolor.volcano': 'آتشفشان',
  'app.setting.themecolor.sunset': 'غروب نارنجی',
  'app.setting.themecolor.cyan': 'فیروزه ای',
  'app.setting.themecolor.green': 'سبز قطبی',
  'app.setting.themecolor.daybreak': 'آبی روشن(پیشفرض)',
  'app.setting.themecolor.geekblue': 'چسب گیک',
  'app.setting.themecolor.purple': 'بنفش طلایی',
  'app.setting.navigationmode': 'حالت پیمایش',
  'app.setting.sidemenu': 'طرح منوی کناری',
  'app.setting.topmenu': 'طرح منوی بالایی',
  'app.setting.fixedheader': 'سرصفحه ثابت',
  'app.setting.fixedsidebar': 'نوار کناری ثابت',
  'app.setting.fixedsidebar.hint': 'کار بر روی منوی کناری',
  'app.setting.hideheader': 'هدر پنهان هنگام پیمایش',
  'app.setting.hideheader.hint': 'وقتی Hidden Header فعال باشد کار می کند',
  'app.setting.othersettings': 'تنظیمات دیگر',
  'app.setting.weakmode': 'حالت ضعیف',
  'app.setting.copy': 'تنظیمات کپی',
  'app.setting.copyinfo':
    'موفقیت در کپی کردن , لطفا defaultSettings را در src / models / setting.js جایگزین کنید',
  'app.setting.production.hint':
    'صفحه تنظیم فقط در محیط توسعه نمایش داده می شود ، لطفاً دستی تغییر دهید',
};
zy-asrs-flow/src/locales/fa-IR/settings.ts
New file
@@ -0,0 +1,60 @@
export default {
  'app.settings.menuMap.basic': 'تنظیمات پایه ',
  'app.settings.menuMap.security': 'تنظیمات امنیتی',
  'app.settings.menuMap.binding': 'صحافی حساب',
  'app.settings.menuMap.notification': 'اعلان پیام جدید',
  'app.settings.basic.avatar': 'آواتار',
  'app.settings.basic.change-avatar': 'آواتار را تغییر دهید',
  'app.settings.basic.email': 'ایمیل',
  'app.settings.basic.email-message': 'لطفا ایمیل خود را وارد کنید!',
  'app.settings.basic.nickname': 'نام مستعار',
  'app.settings.basic.nickname-message': 'لطفاً نام مستعار خود را وارد کنید!',
  'app.settings.basic.profile': 'پروفایل شخصی',
  'app.settings.basic.profile-message': 'لطفاً مشخصات شخصی خود را وارد کنید!',
  'app.settings.basic.profile-placeholder': 'معرفی مختصر خودتان',
  'app.settings.basic.country': 'کشور / منطقه',
  'app.settings.basic.country-message': 'لطفاً کشور خود را وارد کنید!',
  'app.settings.basic.geographic': 'استان یا شهر',
  'app.settings.basic.geographic-message': 'لطفاً اطلاعات جغرافیایی خود را وارد کنید!',
  'app.settings.basic.address': 'آدرس خیابان',
  'app.settings.basic.address-message': 'لطفا آدرس خود را وارد کنید!',
  'app.settings.basic.phone': 'شماره تلفن',
  'app.settings.basic.phone-message': 'لطفاً تلفن خود را وارد کنید!',
  'app.settings.basic.update': 'به روز رسانی اطلاعات',
  'app.settings.security.strong': 'قوی',
  'app.settings.security.medium': 'متوسط',
  'app.settings.security.weak': 'ضعیف',
  'app.settings.security.password': 'رمز عبور حساب کاربری',
  'app.settings.security.password-description': 'قدرت رمز عبور فعلی',
  'app.settings.security.phone': 'تلفن امنیتی',
  'app.settings.security.phone-description': 'تلفن مقید',
  'app.settings.security.question': 'سوال امنیتی',
  'app.settings.security.question-description':
    'سوال امنیتی تنظیم نشده است و سیاست امنیتی می تواند به طور موثر از امنیت حساب محافظت کند',
  'app.settings.security.email': 'ایمیل پشتیبان',
  'app.settings.security.email-description': 'ایمیل مقید',
  'app.settings.security.mfa': 'دستگاه MFA',
  'app.settings.security.mfa-description':
    'دستگاه MFA بسته نشده ، پس از اتصال ، می تواند دو بار تأیید شود',
  'app.settings.security.modify': 'تغییر',
  'app.settings.security.set': 'تنظیم',
  'app.settings.security.bind': 'بستن',
  'app.settings.binding.taobao': 'اتصال Taobao',
  'app.settings.binding.taobao-description': 'حساب Taobao در حال حاضر بسته نشده است',
  'app.settings.binding.alipay': 'اتصال Alipay',
  'app.settings.binding.alipay-description': 'حساب Alipay در حال حاضر بسته نشده است',
  'app.settings.binding.dingding': 'اتصال DingTalk',
  'app.settings.binding.dingding-description': 'حساب DingTalk در حال حاضر محدود نشده است',
  'app.settings.binding.bind': 'بستن',
  'app.settings.notification.password': 'رمز عبور حساب کاربری',
  'app.settings.notification.password-description':
    'پیام های سایر کاربران در قالب یک نامه ایستگاهی اعلام خواهد شد',
  'app.settings.notification.messages': 'پیام های سیستم',
  'app.settings.notification.messages-description':
    'پیام های سیستم به صورت نامه ایستگاه مطلع می شوند',
  'app.settings.notification.todo': 'اعلان کارها',
  'app.settings.notification.todo-description':
    'لیست کارها به صورت نامه ای از ایستگاه اطلاع داده می شود',
  'app.settings.open': 'باز کن',
  'app.settings.close': 'بستن',
};
zy-asrs-flow/src/locales/id-ID.ts
New file
@@ -0,0 +1,25 @@
import component from './id-ID/component';
import globalHeader from './id-ID/globalHeader';
import menu from './id-ID/menu';
import pages from './id-ID/pages';
import pwa from './id-ID/pwa';
import settingDrawer from './id-ID/settingDrawer';
import settings from './id-ID/settings';
export default {
  'navbar.lang': 'Bahasa',
  'layout.user.link.help': 'Bantuan',
  'layout.user.link.privacy': 'Privasi',
  'layout.user.link.terms': 'Ketentuan',
  'app.preview.down.block': 'Unduh halaman ini dalam projek lokal anda',
  'app.welcome.link.fetch-blocks': 'Dapatkan semua blok',
  'app.welcome.link.block-list':
    'Buat standar dengan cepat, halaman-halaman berdasarkan pengembangan `block`',
  ...globalHeader,
  ...menu,
  ...settingDrawer,
  ...settings,
  ...pwa,
  ...component,
  ...pages,
};
zy-asrs-flow/src/locales/id-ID/component.ts
New file
@@ -0,0 +1,5 @@
export default {
  'component.tagSelect.expand': 'Perluas',
  'component.tagSelect.collapse': 'Lipat',
  'component.tagSelect.all': 'Semua',
};
zy-asrs-flow/src/locales/id-ID/globalHeader.ts
New file
@@ -0,0 +1,17 @@
export default {
  'component.globalHeader.search': 'Pencarian',
  'component.globalHeader.search.example1': 'Contoh 1 Pencarian',
  'component.globalHeader.search.example2': 'Contoh 2 Pencarian',
  'component.globalHeader.search.example3': 'Contoh 3 Pencarian',
  'component.globalHeader.help': 'Bantuan',
  'component.globalHeader.notification': 'Notifikasi',
  'component.globalHeader.notification.empty': 'Anda telah membaca semua notifikasi',
  'component.globalHeader.message': 'Pesan',
  'component.globalHeader.message.empty': 'Anda telah membaca semua pesan.',
  'component.globalHeader.event': 'Acara',
  'component.globalHeader.event.empty': 'Anda telah melihat semua acara.',
  'component.noticeIcon.clear': 'Kosongkan',
  'component.noticeIcon.cleared': 'Berhasil dikosongkan',
  'component.noticeIcon.empty': 'Tidak ada pemberitahuan',
  'component.noticeIcon.view-more': 'Melihat lebih',
};
zy-asrs-flow/src/locales/id-ID/menu.ts
New file
@@ -0,0 +1,52 @@
export default {
  'menu.welcome': 'Selamat Datang',
  'menu.more-blocks': 'Blocks Lainnya',
  'menu.home': 'Halaman Awal',
  'menu.admin': 'Admin',
  'menu.admin.sub-page': 'Sub-Halaman',
  'menu.login': 'Masuk',
  'menu.register': 'Pendaftaran',
  'menu.register-result': 'Hasil Pendaftaran',
  'menu.dashboard': 'Dasbor',
  'menu.dashboard.analysis': 'Analisis',
  'menu.dashboard.monitor': 'Monitor',
  'menu.dashboard.workplace': 'Workplace',
  'menu.exception.403': '403',
  'menu.exception.404': '404',
  'menu.exception.500': '500',
  'menu.form': 'Form',
  'menu.form.basic-form': 'Form Dasar',
  'menu.form.step-form': 'Form Bertahap',
  'menu.form.step-form.info': 'Form Bertahap(menulis informasi yang dibagikan)',
  'menu.form.step-form.confirm': 'Form Bertahap(konfirmasi informasi yang dibagikan)',
  'menu.form.step-form.result': 'Form Bertahap(selesai)',
  'menu.form.advanced-form': 'Form Lanjutan',
  'menu.list': 'Daftar',
  'menu.list.table-list': 'Tabel Pencarian',
  'menu.list.basic-list': 'Daftar Dasar',
  'menu.list.card-list': 'Daftar Kartu',
  'menu.list.search-list': 'Daftar Pencarian',
  'menu.list.search-list.articles': 'Daftar Pencarian(artikel)',
  'menu.list.search-list.projects': 'Daftar Pencarian(projek)',
  'menu.list.search-list.applications': 'Daftar Pencarian(aplikasi)',
  'menu.profile': 'Profil',
  'menu.profile.basic': 'Profil Dasar',
  'menu.profile.advanced': 'Profile Lanjutan',
  'menu.result': 'Hasil',
  'menu.result.success': 'Sukses',
  'menu.result.fail': 'Gagal',
  'menu.exception': 'Pengecualian',
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': 'Jalankan',
  'menu.account': 'Akun',
  'menu.account.center': 'Detail Akun',
  'menu.account.settings': 'Pengaturan Akun',
  'menu.account.trigger': 'Mengaktivasi Error',
  'menu.account.logout': 'Keluar',
  'menu.editor': 'Penyusun Grafis',
  'menu.editor.flow': 'Penyusun Alur',
  'menu.editor.mind': 'Penyusun Mind',
  'menu.editor.koni': 'Penyusun Koni',
};
zy-asrs-flow/src/locales/id-ID/pages.ts
New file
@@ -0,0 +1,72 @@
export default {
  'pages.layouts.userLayout.title':
    'Ant Design adalah spesifikasi desain Web yang paling berpengaruh di Kabupaten Xihu',
  'pages.login.accountLogin.tab': 'Login dengan akun',
  'pages.login.accountLogin.errorMessage': 'Nama pengguna dan kata sandi salah(admin/ant.design)',
  'pages.login.failure': 'Log masuk gagal, silakan coba lagi!',
  'pages.login.success': 'Login berhasil!',
  'pages.login.username.placeholder': 'nama pengguna: admin atau user',
  'pages.login.username.required': 'Nama pengguna harus diisi!',
  'pages.login.password.placeholder': 'kata sandi: ant.design',
  'pages.login.password.required': 'Kata sandi harus diisi!',
  'pages.login.phoneLogin.tab': 'Login dengan ponsel',
  'pages.login.phoneLogin.errorMessage': 'Kesalahan kode verifikasi',
  'pages.login.phoneNumber.placeholder': 'masukkan nomor telepon',
  'pages.login.phoneNumber.required': 'Nomor ponsel harus diisi!',
  'pages.login.phoneNumber.invalid': 'Nomor ponsel tidak valid!',
  'pages.login.captcha.placeholder': 'kode verifikasi',
  'pages.login.captcha.required': 'Kode verifikasi diperlukan!',
  'pages.login.phoneLogin.getVerificationCode': 'Dapatkan kode',
  'pages.getCaptchaSecondText': 'detik tersisa',
  'pages.login.rememberMe': 'Ingat saya',
  'pages.login.forgotPassword': 'Lupa Kata Sandi?',
  'pages.login.submit': 'Masuk',
  'pages.login.loginWith': 'Masuk dengan :',
  'pages.login.registerAccount': 'Daftar Akun',
  'pages.welcome.link': 'Selamat datang',
  'pages.welcome.alertMessage':
    'Komponen heavy-duty yang lebih cepat dan lebih kuat telah dirilis.',
  'pages.404.subTitle': 'Maaf, halaman yang Anda kunjungi tidak ada. ',
  'pages.404.buttonText': 'Kembali ke halaman utama',
  'pages.admin.subPage.title': 'Halaman ini hanya dapat dilihat oleh admin',
  'pages.admin.subPage.alertMessage':
    'umi ui telah dirilis, silahkan gunakan npm run ui untuk memulai pengalaman.',
  'pages.searchTable.createForm.newRule': 'Aturan baru',
  'pages.searchTable.updateForm.ruleConfig': 'Konfigurasi aturan',
  'pages.searchTable.updateForm.basicConfig': 'Informasi dasar',
  'pages.searchTable.updateForm.ruleName.nameLabel': 'Nama aturan',
  'pages.searchTable.updateForm.ruleName.nameRules': 'Harap masukkan nama aturan!',
  'pages.searchTable.updateForm.ruleDesc.descLabel': 'Deskripsi aturan',
  'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
    'Harap masukkan setidaknya lima karakter',
  'pages.searchTable.updateForm.ruleDesc.descRules':
    'Harap masukkan deskripsi aturan setidaknya lima karakter!',
  'pages.searchTable.updateForm.ruleProps.title': 'Properti aturan',
  'pages.searchTable.updateForm.object': 'Objek pemantauan',
  'pages.searchTable.updateForm.ruleProps.templateLabel': 'Template aturan',
  'pages.searchTable.updateForm.ruleProps.typeLabel': 'Jenis aturan',
  'pages.searchTable.updateForm.schedulingPeriod.title': 'Periode penjadwalan',
  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Waktu mulai',
  'pages.searchTable.updateForm.schedulingPeriod.timeRules': 'Pilih waktu mulai!',
  'pages.searchTable.titleDesc': 'deskripsi',
  'pages.searchTable.ruleName': 'Nama aturan wajib diisi',
  'pages.searchTable.titleCallNo': 'Jumlah panggilan',
  'pages.searchTable.titleStatus': 'Status',
  'pages.searchTable.nameStatus.default': 'default',
  'pages.searchTable.nameStatus.running': 'menyala',
  'pages.searchTable.nameStatus.online': 'online',
  'pages.searchTable.nameStatus.abnormal': 'abnormal',
  'pages.searchTable.titleUpdatedAt': 'Waktu terjadwal',
  'pages.searchTable.exception': 'Harap masukkan alasan pengecualian!',
  'pages.searchTable.titleOption': 'Pengoperasian',
  'pages.searchTable.config': 'Konfigurasi',
  'pages.searchTable.subscribeAlert': 'Berlangganan notifikasi',
  'pages.searchTable.title': 'Formulir pertanyaan',
  'pages.searchTable.new': 'Baru',
  'pages.searchTable.chosen': 'Terpilih',
  'pages.searchTable.item': 'item',
  'pages.searchTable.totalServiceCalls': 'Jumlah total panggilan layanan',
  'pages.searchTable.tenThousand': '0000',
  'pages.searchTable.batchDeletion': 'Penghapusan batch',
  'pages.searchTable.batchApproval': 'Persetujuan batch',
};
zy-asrs-flow/src/locales/id-ID/pwa.ts
New file
@@ -0,0 +1,7 @@
export default {
  'app.pwa.offline': 'Koneksi anda terputus',
  'app.pwa.serviceworker.updated': 'Konten baru sudah tersedia',
  'app.pwa.serviceworker.updated.hint':
    'Silahkan klik tombol "Refresh" untuk memuat ulang halaman ini',
  'app.pwa.serviceworker.updated.ok': 'Memuat ulang',
};
zy-asrs-flow/src/locales/id-ID/settingDrawer.ts
New file
@@ -0,0 +1,32 @@
export default {
  'app.setting.pagestyle': 'Pengaturan style Halaman',
  'app.setting.pagestyle.dark': 'Style Gelap',
  'app.setting.pagestyle.light': 'Style Cerah',
  'app.setting.content-width': 'Lebar Konten',
  'app.setting.content-width.fixed': 'Tetap',
  'app.setting.content-width.fluid': 'Fluid',
  'app.setting.themecolor': 'Theme Color',
  'app.setting.themecolor.dust': 'Dust Red',
  'app.setting.themecolor.volcano': 'Volcano',
  'app.setting.themecolor.sunset': 'Sunset Orange',
  'app.setting.themecolor.cyan': 'Cyan',
  'app.setting.themecolor.green': 'Polar Green',
  'app.setting.themecolor.daybreak': 'Daybreak Blue (bawaan)',
  'app.setting.themecolor.geekblue': 'Geek Glue',
  'app.setting.themecolor.purple': 'Golden Purple',
  'app.setting.navigationmode': 'Mode Navigasi',
  'app.setting.sidemenu': 'Susunan Menu Samping',
  'app.setting.topmenu': 'Susunan Menu Atas',
  'app.setting.fixedheader': 'Header Tetap',
  'app.setting.fixedsidebar': 'Sidebar Tetap',
  'app.setting.fixedsidebar.hint': 'Berjalan pada Susunan Menu Samping',
  'app.setting.hideheader': 'Sembunyikan Header ketika gulir ke bawah',
  'app.setting.hideheader.hint': 'Bekerja ketika Header tersembunyi dimunculkan',
  'app.setting.othersettings': 'Pengaturan Lainnya',
  'app.setting.weakmode': 'Mode Lemah',
  'app.setting.copy': 'Salin Pengaturan',
  'app.setting.copyinfo':
    'Berhasil disalin, tolong ubah defaultSettings pada src/models/setting.js',
  'app.setting.production.hint':
    'Panel pengaturan hanya muncul pada lingkungan pengembangan, silahkan modifikasi secara menual',
};
zy-asrs-flow/src/locales/id-ID/settings.ts
New file
@@ -0,0 +1,60 @@
export default {
  'app.settings.menuMap.basic': 'Pengaturan Dasar',
  'app.settings.menuMap.security': 'Pengaturan Keamanan',
  'app.settings.menuMap.binding': 'Pengikatan Akun',
  'app.settings.menuMap.notification': 'Notifikasi Pesan Baru',
  'app.settings.basic.avatar': 'Avatar',
  'app.settings.basic.change-avatar': 'Ubah avatar',
  'app.settings.basic.email': 'Email',
  'app.settings.basic.email-message': 'Tolong masukkan email!',
  'app.settings.basic.nickname': 'Nickname',
  'app.settings.basic.nickname-message': 'Tolong masukkan Nickname!',
  'app.settings.basic.profile': 'Profil Personal',
  'app.settings.basic.profile-message': 'Tolong masukkan profil personal!',
  'app.settings.basic.profile-placeholder': 'Perkenalan Singkat tentang Diri Anda',
  'app.settings.basic.country': 'Negara/Wilayah',
  'app.settings.basic.country-message': 'Tolong masukkan negara anda!',
  'app.settings.basic.geographic': 'Provinsi atau kota',
  'app.settings.basic.geographic-message': 'Tolong masukkan info geografis anda!',
  'app.settings.basic.address': 'Alamat Jalan',
  'app.settings.basic.address-message': 'Tolong masukkan Alamat Jalan anda!',
  'app.settings.basic.phone': 'Nomor Ponsel',
  'app.settings.basic.phone-message': 'Tolong masukkan Nomor Ponsel anda!',
  'app.settings.basic.update': 'Perbarui Informasi',
  'app.settings.security.strong': 'Kuat',
  'app.settings.security.medium': 'Sedang',
  'app.settings.security.weak': 'Lemah',
  'app.settings.security.password': 'Kata Sandi Akun',
  'app.settings.security.password-description': 'Kekuatan Kata Sandi saat ini',
  'app.settings.security.phone': 'Keamanan Ponsel',
  'app.settings.security.phone-description': 'Mengikat Ponsel',
  'app.settings.security.question': 'Pertanyaan Keamanan',
  'app.settings.security.question-description':
    'Pertanyaan Keamanan belum diatur, dan kebijakan keamanan dapat melindungi akun secara efektif',
  'app.settings.security.email': 'Email Cadangan',
  'app.settings.security.email-description': 'Mengikat Email',
  'app.settings.security.mfa': 'Perangka MFA',
  'app.settings.security.mfa-description':
    'Tidak mengikat Perangkat MFA, setelah diikat, dapat dikonfirmasi dua kali',
  'app.settings.security.modify': 'Modifikasi',
  'app.settings.security.set': 'Setel',
  'app.settings.security.bind': 'Ikat',
  'app.settings.binding.taobao': 'Mengikat Taobao',
  'app.settings.binding.taobao-description': 'Tidak mengikat akun Taobao saat ini',
  'app.settings.binding.alipay': 'Mengikat Alipay',
  'app.settings.binding.alipay-description': 'Tidak mengikat akun Alipay saat ini',
  'app.settings.binding.dingding': 'Mengikat DingTalk',
  'app.settings.binding.dingding-description': 'Tidak mengikat akun DingTalk',
  'app.settings.binding.bind': 'Ikat',
  'app.settings.notification.password': 'Kata Sandi Akun',
  'app.settings.notification.password-description':
    'Pesan dari pengguna lain akan diberitahu dalam bentuk surat',
  'app.settings.notification.messages': 'Pesan Sistem',
  'app.settings.notification.messages-description':
    'Pesan sistem akan diberitahu dalam bentuk surat',
  'app.settings.notification.todo': 'Notifikasi daftar To-do',
  'app.settings.notification.todo-description':
    'Daftar to-do akan diberitahukan dalam bentuk surat dari stasiun',
  'app.settings.open': 'Buka',
  'app.settings.close': 'Tutup',
};
zy-asrs-flow/src/locales/ja-JP.ts
New file
@@ -0,0 +1,24 @@
import component from './ja-JP/component';
import globalHeader from './ja-JP/globalHeader';
import menu from './ja-JP/menu';
import pages from './ja-JP/pages';
import pwa from './ja-JP/pwa';
import settingDrawer from './ja-JP/settingDrawer';
import settings from './ja-JP/settings';
export default {
  'navBar.lang': '言語',
  'layout.user.link.help': 'ヘルプ',
  'layout.user.link.privacy': 'プライバシー',
  'layout.user.link.terms': '利用規約',
  'app.preview.down.block': 'このページをローカルプロジェクトにダウンロードしてください',
  'app.welcome.link.fetch-blocks': '',
  'app.welcome.link.block-list': '',
  ...globalHeader,
  ...menu,
  ...settingDrawer,
  ...settings,
  ...pwa,
  ...component,
  ...pages,
};
zy-asrs-flow/src/locales/ja-JP/component.ts
New file
@@ -0,0 +1,5 @@
export default {
  'component.tagSelect.expand': '展開',
  'component.tagSelect.collapse': '折りたたむ',
  'component.tagSelect.all': 'すべて',
};
zy-asrs-flow/src/locales/ja-JP/globalHeader.ts
New file
@@ -0,0 +1,17 @@
export default {
  'component.globalHeader.search': '検索',
  'component.globalHeader.search.example1': '検索例1',
  'component.globalHeader.search.example2': '検索例2',
  'component.globalHeader.search.example3': '検索例3',
  'component.globalHeader.help': 'ヘルプ',
  'component.globalHeader.notification': '通知',
  'component.globalHeader.notification.empty': 'すべての通知を表示しました。',
  'component.globalHeader.message': 'メッセージ',
  'component.globalHeader.message.empty': 'すべてのメッセージを表示しました。',
  'component.globalHeader.event': 'イベント',
  'component.globalHeader.event.empty': 'すべてのイベントを表示しました。',
  'component.noticeIcon.clear': 'クリア',
  'component.noticeIcon.cleared': 'クリア済み',
  'component.noticeIcon.empty': '通知なし',
  'component.noticeIcon.view-more': 'もっと見る',
};
zy-asrs-flow/src/locales/ja-JP/menu.ts
New file
@@ -0,0 +1,52 @@
export default {
  'menu.welcome': 'ようこそ',
  'menu.more-blocks': 'その他のブロック',
  'menu.home': 'ホーム',
  'menu.admin': '管理者',
  'menu.admin.sub-page': 'サブページ',
  'menu.login': 'ログイン',
  'menu.register': '登録',
  'menu.register-result': '登録結果',
  'menu.dashboard': 'ダッシュボード',
  'menu.dashboard.analysis': '分析',
  'menu.dashboard.monitor': 'モニター',
  'menu.dashboard.workplace': '職場',
  'menu.exception.403': '403',
  'menu.exception.404': '404',
  'menu.exception.500': '500',
  'menu.form': 'フォーム',
  'menu.form.basic-form': '基本フォーム',
  'menu.form.step-form': 'ステップフォーム',
  'menu.form.step-form.info': 'ステップフォーム(転送情報の書き込み)',
  'menu.form.step-form.confirm': 'ステップフォーム(転送情報の確認)',
  'menu.form.step-form.result': 'ステップフォーム(完成)',
  'menu.form.advanced-form': '高度なフォーム',
  'menu.list': 'リスト',
  'menu.list.table-list': '検索テーブル',
  'menu.list.basic-list': '基本リスト',
  'menu.list.card-list': 'カードリスト',
  'menu.list.search-list': '検索リスト',
  'menu.list.search-list.articles': '検索リスト(記事)',
  'menu.list.search-list.projects': '検索リスト(プロジェクト)',
  'menu.list.search-list.applications': '検索リスト(アプリ)',
  'menu.profile': 'プロフィール',
  'menu.profile.basic': '基本プロフィール',
  'menu.profile.advanced': '高度なプロフィール',
  'menu.result': '結果',
  'menu.result.success': '成功',
  'menu.result.fail': '失敗',
  'menu.exception': '例外',
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': 'トリガー',
  'menu.account': 'アカウント',
  'menu.account.center': 'アカウントセンター',
  'menu.account.settings': 'アカウント設定',
  'menu.account.trigger': 'トリガーエラー',
  'menu.account.logout': 'ログアウト',
  'menu.editor': 'グラフィックエディタ',
  'menu.editor.flow': 'フローエディタ',
  'menu.editor.mind': 'マインドエディター',
  'menu.editor.koni': 'コニエディター',
};
zy-asrs-flow/src/locales/ja-JP/pages.ts
New file
@@ -0,0 +1,69 @@
export default {
  'pages.layouts.userLayout.title': 'Ant Designは、西湖区で最も影響力のあるWebデザイン仕様です。',
  'pages.login.accountLogin.tab': 'アカウントログイン',
  'pages.login.accountLogin.errorMessage':
    'ユーザー名/パスワードが正しくありません(admin/ant.design)',
  'pages.login.failure': 'ログインに失敗したら、もう一度試してください!',
  'pages.login.success': 'ログイン成功!',
  'pages.login.username.placeholder': 'ユーザー名:adminまたはuser',
  'pages.login.username.required': 'ユーザー名を入力してください!',
  'pages.login.password.placeholder': 'パスワード:ant.design',
  'pages.login.password.required': 'パスワードを入力してください!',
  'pages.login.phoneLogin.tab': '電話ログイン',
  'pages.login.phoneLogin.errorMessage': '検証コードエラー',
  'pages.login.phoneNumber.placeholder': '電話番号',
  'pages.login.phoneNumber.required': '電話番号を入力してください!',
  'pages.login.phoneNumber.invalid': '電話番号が無効です!',
  'pages.login.captcha.placeholder': '確認コード',
  'pages.login.captcha.required': '確認コードを入力してください!',
  'pages.login.phoneLogin.getVerificationCode': '確認コードを取得',
  'pages.getCaptchaSecondText': '秒',
  'pages.login.rememberMe': 'Remember me',
  'pages.login.forgotPassword': 'パスワードをお忘れですか?',
  'pages.login.submit': 'ログイン',
  'pages.login.loginWith': 'その他のログイン方法:',
  'pages.login.registerAccount': 'アカウント登録',
  'pages.welcome.link': 'ようこそ',
  'pages.welcome.alertMessage': 'より高速で強力な頑丈なコンポーネントがリリースされました。',
  'pages.404.subTitle': '申し訳ありませんが、アクセスしたページは存在しません。',
  'pages.404.buttonText': 'ホームに戻る',
  'pages.admin.subPage.title': 'このページは管理者のみが表示できます',
  'pages.admin.subPage.alertMessage':
    'Umi uiがリリースされました。npm run uiを使用して体験してください。',
  'pages.searchTable.createForm.newRule': '新しいルール',
  'pages.searchTable.updateForm.ruleConfig': 'ルール構成',
  'pages.searchTable.updateForm.basicConfig': '基本情報',
  'pages.searchTable.updateForm.ruleName.nameLabel': 'ルール名',
  'pages.searchTable.updateForm.ruleName.nameRules': 'ルール名を入力してください!',
  'pages.searchTable.updateForm.ruleDesc.descLabel': 'ルールの説明',
  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '5文字以上入力してください',
  'pages.searchTable.updateForm.ruleDesc.descRules': '5文字以上のルールの説明を入力してください!',
  'pages.searchTable.updateForm.ruleProps.title': 'プロパティの構成',
  'pages.searchTable.updateForm.object': '監視対象',
  'pages.searchTable.updateForm.ruleProps.templateLabel': 'ルールテンプレート',
  'pages.searchTable.updateForm.ruleProps.typeLabel': 'ルールタイプ',
  'pages.searchTable.updateForm.schedulingPeriod.title': 'スケジュール期間の設定',
  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '開始時間',
  'pages.searchTable.updateForm.schedulingPeriod.timeRules': '開始時間を選択してください!',
  'pages.searchTable.titleDesc': '説明',
  'pages.searchTable.ruleName': 'ルール名が必要です',
  'pages.searchTable.titleCallNo': 'サービスコール数',
  'pages.searchTable.titleStatus': 'ステータス',
  'pages.searchTable.nameStatus.default': 'デフォルト',
  'pages.searchTable.nameStatus.running': '起動中',
  'pages.searchTable.nameStatus.online': 'オンライン',
  'pages.searchTable.nameStatus.abnormal': '異常',
  'pages.searchTable.titleUpdatedAt': '最終スケジュール',
  'pages.searchTable.exception': '例外の理由を入力してください!',
  'pages.searchTable.titleOption': 'オプション',
  'pages.searchTable.config': '構成',
  'pages.searchTable.subscribeAlert': 'アラートを購読する',
  'pages.searchTable.title': 'お問い合わせフォーム',
  'pages.searchTable.new': '新しい',
  'pages.searchTable.chosen': '選んだ項目',
  'pages.searchTable.item': '項目',
  'pages.searchTable.totalServiceCalls': 'サービスコールの総数',
  'pages.searchTable.tenThousand': '万',
  'pages.searchTable.batchDeletion': 'バッチ削除',
  'pages.searchTable.batchApproval': 'バッチ承認',
};
zy-asrs-flow/src/locales/ja-JP/pwa.ts
New file
@@ -0,0 +1,7 @@
export default {
  'app.pwa.offline': 'あなたは今オフラインです',
  'app.pwa.serviceworker.updated': '新しいコンテンツが利用可能です',
  'app.pwa.serviceworker.updated.hint':
    '現在のページをリロードするには、「更新」ボタンを押してください',
  'app.pwa.serviceworker.updated.ok': 'リフレッシュ',
};
zy-asrs-flow/src/locales/ja-JP/settingDrawer.ts
New file
@@ -0,0 +1,31 @@
export default {
  'app.setting.pagestyle': 'ページスタイル設定',
  'app.setting.pagestyle.dark': 'ダークスタイル',
  'app.setting.pagestyle.light': 'ライトスタイル',
  'app.setting.content-width': 'コンテンツの幅',
  'app.setting.content-width.fixed': '固定',
  'app.setting.content-width.fluid': '流体',
  'app.setting.themecolor': 'テーマカラー',
  'app.setting.themecolor.dust': 'ダストレッド',
  'app.setting.themecolor.volcano': 'ボルケ-ノ',
  'app.setting.themecolor.sunset': 'サンセットオレンジ',
  'app.setting.themecolor.cyan': 'シアン',
  'app.setting.themecolor.green': 'ポーラーグリーン',
  'app.setting.themecolor.daybreak': '夜明けの青(デフォルト)',
  'app.setting.themecolor.geekblue': 'ギーク ブルー',
  'app.setting.themecolor.purple': 'ゴールデンパープル',
  'app.setting.navigationmode': 'ナビゲーションモード',
  'app.setting.sidemenu': 'サイドメニューのレイアウト',
  'app.setting.topmenu': 'トップメニューのレイアウト',
  'app.setting.fixedheader': '固定ヘッダー',
  'app.setting.fixedsidebar': '固定サイドバー',
  'app.setting.fixedsidebar.hint': 'サイドメニューのレイアウトで動作します',
  'app.setting.hideheader': 'スクロール時の非表示ヘッダー',
  'app.setting.hideheader.hint': '非表示ヘッダーが有効になっている場合に機能します',
  'app.setting.othersettings': 'その他の設定',
  'app.setting.weakmode': 'ウィークモード',
  'app.setting.copy': 'コピー設定',
  'app.setting.copyinfo':
    'コピーが成功しました。src/models/setting.jsのdefaultSettingsを置き換えてください',
  'app.setting.production.hint': '設定パネルは開発環境でのみ表示されます。手動で変更してください',
};
zy-asrs-flow/src/locales/ja-JP/settings.ts
New file
@@ -0,0 +1,59 @@
export default {
  'app.settings.menuMap.basic': '基本設定',
  'app.settings.menuMap.security': 'セキュリティ設定',
  'app.settings.menuMap.binding': 'アカウントのバインド',
  'app.settings.menuMap.notification': '新しいメッセージの通知',
  'app.settings.basic.avatar': 'アバター',
  'app.settings.basic.change-avatar': 'アバターを変更する',
  'app.settings.basic.email': 'メール',
  'app.settings.basic.email-message': 'メールアドレスを入力してください!',
  'app.settings.basic.nickname': 'ニックネーム',
  'app.settings.basic.nickname-message': 'ニックネームを入力してください!',
  'app.settings.basic.profile': '個人プロフィール',
  'app.settings.basic.profile-message': '個人プロフィールを入力してください!',
  'app.settings.basic.profile-placeholder': '自己紹介',
  'app.settings.basic.country': '国/地域',
  'app.settings.basic.country-message': 'あなたの国を入力してください!',
  'app.settings.basic.geographic': '州または市',
  'app.settings.basic.geographic-message': '地理情報を入力してください!',
  'app.settings.basic.address': '住所',
  'app.settings.basic.address-message': '住所を入力してください!',
  'app.settings.basic.phone': '電話番号',
  'app.settings.basic.phone-message': '電話番号を入力してください!',
  'app.settings.basic.update': '更新情報',
  'app.settings.security.strong': '強い',
  'app.settings.security.medium': 'ミディアム',
  'app.settings.security.weak': '弱い',
  'app.settings.security.password': 'アカウントパスワード',
  'app.settings.security.password-description': '現在のパスワードの強度',
  'app.settings.security.phone': 'セキュリティ電話番号',
  'app.settings.security.phone-description': 'バインドされた電話番号',
  'app.settings.security.question': '秘密の質問',
  'app.settings.security.question-description':
    'セキュリティの質問が設定されてません。セキュリティポリシーはアカウントのセキュリティを効果的に保護できます',
  'app.settings.security.email': 'バックアップメール',
  'app.settings.security.email-description': 'バインドされたメール',
  'app.settings.security.mfa': '多要素認証デバイス',
  'app.settings.security.mfa-description':
    'バインドされていない多要素認証デバイスは、バインド後、2回確認できます',
  'app.settings.security.modify': '変更する',
  'app.settings.security.set': 'セットする',
  'app.settings.security.bind': 'バインド',
  'app.settings.binding.taobao': 'タオバオをバインドする',
  'app.settings.binding.taobao-description': '現在バインドされていないタオバオアカウント',
  'app.settings.binding.alipay': 'アリペイをバインドする',
  'app.settings.binding.alipay-description': '現在バインドされていないアリペイアカウント',
  'app.settings.binding.dingding': 'ディントークをバインドする',
  'app.settings.binding.dingding-description': '現在バインドされていないディントークアカウント',
  'app.settings.binding.bind': 'バインド',
  'app.settings.notification.password': 'アカウントパスワード',
  'app.settings.notification.password-description':
    '他のユーザーからのメッセージは、ステーションレターの形式で通知されます',
  'app.settings.notification.messages': 'システムメッセージ',
  'app.settings.notification.messages-description':
    'システムメッセージは、ステーションレターの形式で通知されます',
  'app.settings.notification.todo': 'To Do(用事) 通知',
  'app.settings.notification.todo-description': 'To Doタスクは、内部レターの形式で通知されます',
  'app.settings.open': '開く',
  'app.settings.close': '閉じる',
};
zy-asrs-flow/src/locales/pt-BR.ts
New file
@@ -0,0 +1,22 @@
import component from './pt-BR/component';
import globalHeader from './pt-BR/globalHeader';
import menu from './pt-BR/menu';
import pages from './pt-BR/pages';
import pwa from './pt-BR/pwa';
import settingDrawer from './pt-BR/settingDrawer';
import settings from './pt-BR/settings';
export default {
  'navBar.lang': 'Idiomas',
  'layout.user.link.help': 'ajuda',
  'layout.user.link.privacy': 'política de privacidade',
  'layout.user.link.terms': 'termos de serviços',
  'app.preview.down.block': 'Download this page to your local project',
  ...globalHeader,
  ...menu,
  ...settingDrawer,
  ...settings,
  ...pwa,
  ...component,
  ...pages,
};
zy-asrs-flow/src/locales/pt-BR/component.ts
New file
@@ -0,0 +1,5 @@
export default {
  'component.tagSelect.expand': 'Expandir',
  'component.tagSelect.collapse': 'Diminuir',
  'component.tagSelect.all': 'Todas',
};
zy-asrs-flow/src/locales/pt-BR/globalHeader.ts
New file
@@ -0,0 +1,17 @@
export default {
  'component.globalHeader.search': 'Busca',
  'component.globalHeader.search.example1': 'Exemplo de busca 1',
  'component.globalHeader.search.example2': 'Exemplo de busca 2',
  'component.globalHeader.search.example3': 'Exemplo de busca 3',
  'component.globalHeader.help': 'Ajuda',
  'component.globalHeader.notification': 'Notificação',
  'component.globalHeader.notification.empty': 'Você visualizou todas as notificações.',
  'component.globalHeader.message': 'Mensagem',
  'component.globalHeader.message.empty': 'Você visualizou todas as mensagens.',
  'component.globalHeader.event': 'Evento',
  'component.globalHeader.event.empty': 'Você visualizou todos os eventos.',
  'component.noticeIcon.clear': 'Limpar',
  'component.noticeIcon.cleared': 'Limpo',
  'component.noticeIcon.empty': 'Sem notificações',
  'component.noticeIcon.view-more': 'Veja mais',
};
zy-asrs-flow/src/locales/pt-BR/menu.ts
New file
@@ -0,0 +1,52 @@
export default {
  'menu.welcome': 'Welcome',
  'menu.more-blocks': 'More Blocks',
  'menu.home': 'Início',
  'menu.admin': 'Admin',
  'menu.admin.sub-page': 'Sub-Page',
  'menu.login': 'Login',
  'menu.register': 'Registro',
  'menu.register-result': 'Resultado de registro',
  'menu.dashboard': 'Dashboard',
  'menu.dashboard.analysis': 'Análise',
  'menu.dashboard.monitor': 'Monitor',
  'menu.dashboard.workplace': 'Ambiente de Trabalho',
  'menu.exception.403': '403',
  'menu.exception.404': '404',
  'menu.exception.500': '500',
  'menu.form': 'Formulário',
  'menu.form.basic-form': 'Formulário Básico',
  'menu.form.step-form': 'Formulário Assistido',
  'menu.form.step-form.info': 'Formulário Assistido(gravar informações de transferência)',
  'menu.form.step-form.confirm': 'Formulário Assistido(confirmar informações de transferência)',
  'menu.form.step-form.result': 'Formulário Assistido(finalizado)',
  'menu.form.advanced-form': 'Formulário Avançado',
  'menu.list': 'Lista',
  'menu.list.table-list': 'Tabela de Busca',
  'menu.list.basic-list': 'Lista Básica',
  'menu.list.card-list': 'Lista de Card',
  'menu.list.search-list': 'Lista de Busca',
  'menu.list.search-list.articles': 'Lista de Busca(artigos)',
  'menu.list.search-list.projects': 'Lista de Busca(projetos)',
  'menu.list.search-list.applications': 'Lista de Busca(aplicações)',
  'menu.profile': 'Perfil',
  'menu.profile.basic': 'Perfil Básico',
  'menu.profile.advanced': 'Perfil Avançado',
  'menu.result': 'Resultado',
  'menu.result.success': 'Sucesso',
  'menu.result.fail': 'Falha',
  'menu.exception': 'Exceção',
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': 'Disparar',
  'menu.account': 'Conta',
  'menu.account.center': 'Central da Conta',
  'menu.account.settings': 'Configurar Conta',
  'menu.account.trigger': 'Disparar Erro',
  'menu.account.logout': 'Sair',
  'menu.editor': 'Graphic Editor',
  'menu.editor.flow': 'Flow Editor',
  'menu.editor.mind': 'Mind Editor',
  'menu.editor.koni': 'Koni Editor',
};
zy-asrs-flow/src/locales/pt-BR/pages.ts
New file
@@ -0,0 +1,72 @@
export default {
  'pages.layouts.userLayout.title':
    'Ant Design é a especificação de web design mais influente no distrito de Xihu',
  'pages.login.accountLogin.tab': 'Login da conta',
  'pages.login.accountLogin.errorMessage': 'usuário/senha incorreto(admin/ant.design)',
  'pages.login.failure': 'Login falhou, por favor tente novamente!',
  'pages.login.success': 'Login efetuado com sucesso!',
  'pages.login.username.placeholder': 'Usuário: admin or user',
  'pages.login.username.required': 'Por favor insira seu usuário!',
  'pages.login.password.placeholder': 'Senha: ant.design',
  'pages.login.password.required': 'Por favor insira sua senha!',
  'pages.login.phoneLogin.tab': 'Login com Telefone',
  'pages.login.phoneLogin.errorMessage': 'Erro de Código de Verificação',
  'pages.login.phoneNumber.placeholder': 'Telefone',
  'pages.login.phoneNumber.required': 'Por favor entre com seu telefone!',
  'pages.login.phoneNumber.invalid': 'Telefone é inválido!',
  'pages.login.captcha.placeholder': 'Código de Verificação',
  'pages.login.captcha.required': 'Por favor entre com o código de verificação!',
  'pages.login.phoneLogin.getVerificationCode': 'Obter Código',
  'pages.getCaptchaSecondText': 'seg(s)',
  'pages.login.rememberMe': 'Lembre-me',
  'pages.login.forgotPassword': 'Perdeu a Senha ?',
  'pages.login.submit': 'Enviar',
  'pages.login.loginWith': 'Login com :',
  'pages.login.registerAccount': 'Registra Conta',
  'pages.welcome.link': 'Bem-vindo',
  'pages.welcome.alertMessage': 'Componentes pesados mais rápidos e mais fortes foram lançados.',
  'pages.404.subTitle': 'Desculpe, a página que você visitou não existe. ',
  'pages.404.buttonText': 'Voltar à página inicial',
  'pages.admin.subPage.title': 'Esta página só pode ser vista pelo Admin',
  'pages.admin.subPage.alertMessage':
    'O Umi ui foi lançado, bem-vindo ao usar o npm run ui para iniciar a experiência.',
  'pages.searchTable.createForm.newRule': 'Neva Regra',
  'pages.searchTable.updateForm.ruleConfig': 'Configuração de Regra',
  'pages.searchTable.updateForm.basicConfig': 'Informação básica',
  'pages.searchTable.updateForm.ruleName.nameLabel': 'Nome da Regra',
  'pages.searchTable.updateForm.ruleName.nameRules': 'Por favor entre com o nome da regra!',
  'pages.searchTable.updateForm.ruleDesc.descLabel': 'Descrição da Regra',
  'pages.searchTable.updateForm.ruleDesc.descPlaceholder':
    'Por favor insira ao menos cinco caracteres',
  'pages.searchTable.updateForm.ruleDesc.descRules':
    'Insira uma descrição de regra de pelo menos cinco caracteres!',
  'pages.searchTable.updateForm.ruleProps.title': 'Configurar Propriedades',
  'pages.searchTable.updateForm.object': 'Objeto de Monitoramento',
  'pages.searchTable.updateForm.ruleProps.templateLabel': 'Modelo de Regra',
  'pages.searchTable.updateForm.ruleProps.typeLabel': 'Tipo de Regra',
  'pages.searchTable.updateForm.schedulingPeriod.title': 'Definir Período de Agendamento',
  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': 'Hora de Início',
  'pages.searchTable.updateForm.schedulingPeriod.timeRules':
    'Por favor selecione um horáriod e início!',
  'pages.searchTable.titleDesc': 'Descrição',
  'pages.searchTable.ruleName': 'O nome da regra é obrigatório',
  'pages.searchTable.titleCallNo': 'Número de chamadas de serviço',
  'pages.searchTable.titleStatus': 'Status',
  'pages.searchTable.nameStatus.default': 'padrão',
  'pages.searchTable.nameStatus.running': 'executando',
  'pages.searchTable.nameStatus.online': 'online',
  'pages.searchTable.nameStatus.abnormal': 'anormal',
  'pages.searchTable.titleUpdatedAt': 'Última programação em',
  'pages.searchTable.exception': 'Por favor, indique o motivo da exceção!',
  'pages.searchTable.titleOption': 'Opção',
  'pages.searchTable.config': 'Configuração',
  'pages.searchTable.subscribeAlert': 'Inscreva-se para receber alertas',
  'pages.searchTable.title': 'Formulário de Consulta',
  'pages.searchTable.new': 'Novo',
  'pages.searchTable.chosen': 'selecionado',
  'pages.searchTable.item': 'item',
  'pages.searchTable.totalServiceCalls': 'Número total de chamadas de serviço',
  'pages.searchTable.tenThousand': '0000',
  'pages.searchTable.batchDeletion': 'deleção em lote',
  'pages.searchTable.batchApproval': 'aprovação em lote',
};
zy-asrs-flow/src/locales/pt-BR/pwa.ts
New file
@@ -0,0 +1,7 @@
export default {
  'app.pwa.offline': 'Você está offline agora',
  'app.pwa.serviceworker.updated': 'Novo conteúdo está disponível',
  'app.pwa.serviceworker.updated.hint':
    'Por favor, pressione o botão "Atualizar" para recarregar a página atual',
  'app.pwa.serviceworker.updated.ok': 'Atualizar',
};
zy-asrs-flow/src/locales/pt-BR/settingDrawer.ts
New file
@@ -0,0 +1,32 @@
export default {
  'app.setting.pagestyle': 'Configuração de estilo da página',
  'app.setting.pagestyle.dark': 'Dark style',
  'app.setting.pagestyle.light': 'Light style',
  'app.setting.content-width': 'Largura do conteúdo',
  'app.setting.content-width.fixed': 'Fixo',
  'app.setting.content-width.fluid': 'Fluido',
  'app.setting.themecolor': 'Cor do Tema',
  'app.setting.themecolor.dust': 'Dust Red',
  'app.setting.themecolor.volcano': 'Volcano',
  'app.setting.themecolor.sunset': 'Sunset Orange',
  'app.setting.themecolor.cyan': 'Cyan',
  'app.setting.themecolor.green': 'Polar Green',
  'app.setting.themecolor.daybreak': 'Daybreak Blue (default)',
  'app.setting.themecolor.geekblue': 'Geek Glue',
  'app.setting.themecolor.purple': 'Golden Purple',
  'app.setting.navigationmode': 'Modo de Navegação',
  'app.setting.sidemenu': 'Layout do Menu Lateral',
  'app.setting.topmenu': 'Layout do Menu Superior',
  'app.setting.fixedheader': 'Cabeçalho fixo',
  'app.setting.fixedsidebar': 'Barra lateral fixa',
  'app.setting.fixedsidebar.hint': 'Funciona no layout do menu lateral',
  'app.setting.hideheader': 'Esconder o cabeçalho quando rolar',
  'app.setting.hideheader.hint': 'Funciona quando o esconder cabeçalho está abilitado',
  'app.setting.othersettings': 'Outras configurações',
  'app.setting.weakmode': 'Weak Mode',
  'app.setting.copy': 'Copiar Configuração',
  'app.setting.copyinfo':
    'copiado com sucesso, por favor trocar o defaultSettings em src/models/setting.js',
  'app.setting.production.hint':
    'O painel de configuração apenas é exibido no ambiente de desenvolvimento, por favor modifique manualmente o',
};
zy-asrs-flow/src/locales/pt-BR/settings.ts
New file
@@ -0,0 +1,60 @@
export default {
  'app.settings.menuMap.basic': 'Configurações Básicas',
  'app.settings.menuMap.security': 'Configurações de Segurança',
  'app.settings.menuMap.binding': 'Vinculação de Conta',
  'app.settings.menuMap.notification': 'Mensagens de Notificação',
  'app.settings.basic.avatar': 'Avatar',
  'app.settings.basic.change-avatar': 'Alterar avatar',
  'app.settings.basic.email': 'Email',
  'app.settings.basic.email-message': 'Por favor insira seu email!',
  'app.settings.basic.nickname': 'Nome de usuário',
  'app.settings.basic.nickname-message': 'Por favor insira seu nome de usuário!',
  'app.settings.basic.profile': 'Perfil pessoal',
  'app.settings.basic.profile-message': 'Por favor insira seu perfil pessoal!',
  'app.settings.basic.profile-placeholder': 'Breve introdução sua',
  'app.settings.basic.country': 'País/Região',
  'app.settings.basic.country-message': 'Por favor insira país!',
  'app.settings.basic.geographic': 'Província, estado ou cidade',
  'app.settings.basic.geographic-message': 'Por favor insira suas informações geográficas!',
  'app.settings.basic.address': 'Endereço',
  'app.settings.basic.address-message': 'Por favor insira seu endereço!',
  'app.settings.basic.phone': 'Número de telefone',
  'app.settings.basic.phone-message': 'Por favor insira seu número de telefone!',
  'app.settings.basic.update': 'Atualizar Informações',
  'app.settings.security.strong': 'Forte',
  'app.settings.security.medium': 'Média',
  'app.settings.security.weak': 'Fraca',
  'app.settings.security.password': 'Senha da Conta',
  'app.settings.security.password-description': 'Força da senha',
  'app.settings.security.phone': 'Telefone de Seguraça',
  'app.settings.security.phone-description': 'Telefone vinculado',
  'app.settings.security.question': 'Pergunta de Segurança',
  'app.settings.security.question-description':
    'A pergunta de segurança não está definida e a política de segurança pode proteger efetivamente a segurança da conta',
  'app.settings.security.email': 'Email de Backup',
  'app.settings.security.email-description': 'Email vinculado',
  'app.settings.security.mfa': 'Dispositivo MFA',
  'app.settings.security.mfa-description':
    'O dispositivo MFA não vinculado, após a vinculação, pode ser confirmado duas vezes',
  'app.settings.security.modify': 'Modificar',
  'app.settings.security.set': 'Atribuir',
  'app.settings.security.bind': 'Vincular',
  'app.settings.binding.taobao': 'Vincular Taobao',
  'app.settings.binding.taobao-description': 'Atualmente não vinculado à conta Taobao',
  'app.settings.binding.alipay': 'Vincular Alipay',
  'app.settings.binding.alipay-description': 'Atualmente não vinculado à conta Alipay',
  'app.settings.binding.dingding': 'Vincular DingTalk',
  'app.settings.binding.dingding-description': 'Atualmente não vinculado à conta DingTalk',
  'app.settings.binding.bind': 'Vincular',
  'app.settings.notification.password': 'Senha da Conta',
  'app.settings.notification.password-description':
    'Mensagens de outros usuários serão notificadas na forma de uma estação de letra',
  'app.settings.notification.messages': 'Mensagens de Sistema',
  'app.settings.notification.messages-description':
    'Mensagens de sistema serão notificadas na forma de uma estação de letra',
  'app.settings.notification.todo': 'Notificação de To-do',
  'app.settings.notification.todo-description':
    'A lista de to-do será notificada na forma de uma estação de letra',
  'app.settings.open': 'Aberto',
  'app.settings.close': 'Fechado',
};
zy-asrs-flow/src/locales/zh-CN.ts
New file
@@ -0,0 +1,24 @@
import component from './zh-CN/component';
import globalHeader from './zh-CN/globalHeader';
import menu from './zh-CN/menu';
import pages from './zh-CN/pages';
import pwa from './zh-CN/pwa';
import settingDrawer from './zh-CN/settingDrawer';
import settings from './zh-CN/settings';
export default {
  'navBar.lang': '语言',
  'layout.user.link.help': '帮助',
  'layout.user.link.privacy': '隐私',
  'layout.user.link.terms': '条款',
  'app.preview.down.block': '下载此页面到本地项目',
  'app.welcome.link.fetch-blocks': '获取全部区块',
  'app.welcome.link.block-list': '基于 block 开发,快速构建标准页面',
  ...pages,
  ...globalHeader,
  ...menu,
  ...settingDrawer,
  ...settings,
  ...pwa,
  ...component,
};
zy-asrs-flow/src/locales/zh-CN/component.ts
New file
@@ -0,0 +1,5 @@
export default {
  'component.tagSelect.expand': '展开',
  'component.tagSelect.collapse': '收起',
  'component.tagSelect.all': '全部',
};
zy-asrs-flow/src/locales/zh-CN/globalHeader.ts
New file
@@ -0,0 +1,17 @@
export default {
  'component.globalHeader.search': '站内搜索',
  'component.globalHeader.search.example1': '搜索提示一',
  'component.globalHeader.search.example2': '搜索提示二',
  'component.globalHeader.search.example3': '搜索提示三',
  'component.globalHeader.help': '使用文档',
  'component.globalHeader.notification': '通知',
  'component.globalHeader.notification.empty': '你已查看所有通知',
  'component.globalHeader.message': '消息',
  'component.globalHeader.message.empty': '您已读完所有消息',
  'component.globalHeader.event': '待办',
  'component.globalHeader.event.empty': '你已完成所有待办',
  'component.noticeIcon.clear': '清空',
  'component.noticeIcon.cleared': '清空了',
  'component.noticeIcon.empty': '暂无数据',
  'component.noticeIcon.view-more': '查看更多',
};
zy-asrs-flow/src/locales/zh-CN/menu.ts
New file
@@ -0,0 +1,52 @@
export default {
  'menu.welcome': '欢迎',
  'menu.more-blocks': '更多区块',
  'menu.home': '首页',
  'menu.admin': '管理页',
  'menu.admin.sub-page': '二级管理页',
  'menu.login': '登录',
  'menu.register': '注册',
  'menu.register-result': '注册结果',
  'menu.dashboard': 'Dashboard',
  'menu.dashboard.analysis': '分析页',
  'menu.dashboard.monitor': '监控页',
  'menu.dashboard.workplace': '工作台',
  'menu.exception.403': '403',
  'menu.exception.404': '404',
  'menu.exception.500': '500',
  'menu.form': '表单页',
  'menu.form.basic-form': '基础表单',
  'menu.form.step-form': '分步表单',
  'menu.form.step-form.info': '分步表单(填写转账信息)',
  'menu.form.step-form.confirm': '分步表单(确认转账信息)',
  'menu.form.step-form.result': '分步表单(完成)',
  'menu.form.advanced-form': '高级表单',
  'menu.list': '列表页',
  'menu.list.table-list': '查询表格',
  'menu.list.basic-list': '标准列表',
  'menu.list.card-list': '卡片列表',
  'menu.list.search-list': '搜索列表',
  'menu.list.search-list.articles': '搜索列表(文章)',
  'menu.list.search-list.projects': '搜索列表(项目)',
  'menu.list.search-list.applications': '搜索列表(应用)',
  'menu.profile': '详情页',
  'menu.profile.basic': '基础详情页',
  'menu.profile.advanced': '高级详情页',
  'menu.result': '结果页',
  'menu.result.success': '成功页',
  'menu.result.fail': '失败页',
  'menu.exception': '异常页',
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': '触发错误',
  'menu.account': '个人页',
  'menu.account.center': '个人中心',
  'menu.account.settings': '个人设置',
  'menu.account.trigger': '触发报错',
  'menu.account.logout': '退出登录',
  'menu.editor': '图形编辑器',
  'menu.editor.flow': '流程编辑器',
  'menu.editor.mind': '脑图编辑器',
  'menu.editor.koni': '拓扑编辑器',
};
zy-asrs-flow/src/locales/zh-CN/pages.ts
New file
@@ -0,0 +1,67 @@
export default {
  'pages.layouts.userLayout.title': 'Ant Design 是西湖区最具影响力的 Web 设计规范',
  'pages.login.accountLogin.tab': '账户密码登录',
  'pages.login.accountLogin.errorMessage': '错误的用户名和密码(admin/ant.design)',
  'pages.login.failure': '登录失败,请重试!',
  'pages.login.success': '登录成功!',
  'pages.login.username.placeholder': '用户名: admin or user',
  'pages.login.username.required': '用户名是必填项!',
  'pages.login.password.placeholder': '密码: ant.design',
  'pages.login.password.required': '密码是必填项!',
  'pages.login.phoneLogin.tab': '手机号登录',
  'pages.login.phoneLogin.errorMessage': '验证码错误',
  'pages.login.phoneNumber.placeholder': '请输入手机号!',
  'pages.login.phoneNumber.required': '手机号是必填项!',
  'pages.login.phoneNumber.invalid': '不合法的手机号!',
  'pages.login.captcha.placeholder': '请输入验证码!',
  'pages.login.captcha.required': '验证码是必填项!',
  'pages.login.phoneLogin.getVerificationCode': '获取验证码',
  'pages.getCaptchaSecondText': '秒后重新获取',
  'pages.login.rememberMe': '自动登录',
  'pages.login.forgotPassword': '忘记密码 ?',
  'pages.login.submit': '登录',
  'pages.login.loginWith': '其他登录方式 :',
  'pages.login.registerAccount': '注册账户',
  'pages.welcome.link': '欢迎使用',
  'pages.welcome.alertMessage': '更快更强的重型组件,已经发布。',
  'pages.404.subTitle': '抱歉,您访问的页面不存在。',
  'pages.404.buttonText': '返回首页',
  'pages.admin.subPage.title': ' 这个页面只有 admin 权限才能查看',
  'pages.admin.subPage.alertMessage': 'umi ui 现已发布,欢迎使用 npm run ui 启动体验。',
  'pages.searchTable.createForm.newRule': '新建规则',
  'pages.searchTable.updateForm.ruleConfig': '规则配置',
  'pages.searchTable.updateForm.basicConfig': '基本信息',
  'pages.searchTable.updateForm.ruleName.nameLabel': '规则名称',
  'pages.searchTable.updateForm.ruleName.nameRules': '请输入规则名称!',
  'pages.searchTable.updateForm.ruleDesc.descLabel': '规则描述',
  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '请输入至少五个字符',
  'pages.searchTable.updateForm.ruleDesc.descRules': '请输入至少五个字符的规则描述!',
  'pages.searchTable.updateForm.ruleProps.title': '配置规则属性',
  'pages.searchTable.updateForm.object': '监控对象',
  'pages.searchTable.updateForm.ruleProps.templateLabel': '规则模板',
  'pages.searchTable.updateForm.ruleProps.typeLabel': '规则类型',
  'pages.searchTable.updateForm.schedulingPeriod.title': '设定调度周期',
  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '开始时间',
  'pages.searchTable.updateForm.schedulingPeriod.timeRules': '请选择开始时间!',
  'pages.searchTable.titleDesc': '描述',
  'pages.searchTable.ruleName': '规则名称为必填项',
  'pages.searchTable.titleCallNo': '服务调用次数',
  'pages.searchTable.titleStatus': '状态',
  'pages.searchTable.nameStatus.default': '关闭',
  'pages.searchTable.nameStatus.running': '运行中',
  'pages.searchTable.nameStatus.online': '已上线',
  'pages.searchTable.nameStatus.abnormal': '异常',
  'pages.searchTable.titleUpdatedAt': '上次调度时间',
  'pages.searchTable.exception': '请输入异常原因!',
  'pages.searchTable.titleOption': '操作',
  'pages.searchTable.config': '配置',
  'pages.searchTable.subscribeAlert': '订阅警报',
  'pages.searchTable.title': '查询表格',
  'pages.searchTable.new': '新建',
  'pages.searchTable.chosen': '已选择',
  'pages.searchTable.item': '项',
  'pages.searchTable.totalServiceCalls': '服务调用次数总计',
  'pages.searchTable.tenThousand': '万',
  'pages.searchTable.batchDeletion': '批量删除',
  'pages.searchTable.batchApproval': '批量审批',
};
zy-asrs-flow/src/locales/zh-CN/pwa.ts
New file
@@ -0,0 +1,6 @@
export default {
  'app.pwa.offline': '当前处于离线状态',
  'app.pwa.serviceworker.updated': '有新内容',
  'app.pwa.serviceworker.updated.hint': '请点击“刷新”按钮或者手动刷新页面',
  'app.pwa.serviceworker.updated.ok': '刷新',
};
zy-asrs-flow/src/locales/zh-CN/settingDrawer.ts
New file
@@ -0,0 +1,31 @@
export default {
  'app.setting.pagestyle': '整体风格设置',
  'app.setting.pagestyle.dark': '暗色菜单风格',
  'app.setting.pagestyle.light': '亮色菜单风格',
  'app.setting.content-width': '内容区域宽度',
  'app.setting.content-width.fixed': '定宽',
  'app.setting.content-width.fluid': '流式',
  'app.setting.themecolor': '主题色',
  'app.setting.themecolor.dust': '薄暮',
  'app.setting.themecolor.volcano': '火山',
  'app.setting.themecolor.sunset': '日暮',
  'app.setting.themecolor.cyan': '明青',
  'app.setting.themecolor.green': '极光绿',
  'app.setting.themecolor.daybreak': '拂晓蓝(默认)',
  'app.setting.themecolor.geekblue': '极客蓝',
  'app.setting.themecolor.purple': '酱紫',
  'app.setting.navigationmode': '导航模式',
  'app.setting.sidemenu': '侧边菜单布局',
  'app.setting.topmenu': '顶部菜单布局',
  'app.setting.fixedheader': '固定 Header',
  'app.setting.fixedsidebar': '固定侧边菜单',
  'app.setting.fixedsidebar.hint': '侧边菜单布局时可配置',
  'app.setting.hideheader': '下滑时隐藏 Header',
  'app.setting.hideheader.hint': '固定 Header 时可配置',
  'app.setting.othersettings': '其他设置',
  'app.setting.weakmode': '色弱模式',
  'app.setting.copy': '拷贝设置',
  'app.setting.copyinfo': '拷贝成功,请到 config/defaultSettings.js 中替换默认配置',
  'app.setting.production.hint':
    '配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件',
};
zy-asrs-flow/src/locales/zh-CN/settings.ts
New file
@@ -0,0 +1,55 @@
export default {
  'app.settings.menuMap.basic': '基本设置',
  'app.settings.menuMap.security': '安全设置',
  'app.settings.menuMap.binding': '账号绑定',
  'app.settings.menuMap.notification': '新消息通知',
  'app.settings.basic.avatar': '头像',
  'app.settings.basic.change-avatar': '更换头像',
  'app.settings.basic.email': '邮箱',
  'app.settings.basic.email-message': '请输入您的邮箱!',
  'app.settings.basic.nickname': '昵称',
  'app.settings.basic.nickname-message': '请输入您的昵称!',
  'app.settings.basic.profile': '个人简介',
  'app.settings.basic.profile-message': '请输入个人简介!',
  'app.settings.basic.profile-placeholder': '个人简介',
  'app.settings.basic.country': '国家/地区',
  'app.settings.basic.country-message': '请输入您的国家或地区!',
  'app.settings.basic.geographic': '所在省市',
  'app.settings.basic.geographic-message': '请输入您的所在省市!',
  'app.settings.basic.address': '街道地址',
  'app.settings.basic.address-message': '请输入您的街道地址!',
  'app.settings.basic.phone': '联系电话',
  'app.settings.basic.phone-message': '请输入您的联系电话!',
  'app.settings.basic.update': '更新基本信息',
  'app.settings.security.strong': '强',
  'app.settings.security.medium': '中',
  'app.settings.security.weak': '弱',
  'app.settings.security.password': '账户密码',
  'app.settings.security.password-description': '当前密码强度',
  'app.settings.security.phone': '密保手机',
  'app.settings.security.phone-description': '已绑定手机',
  'app.settings.security.question': '密保问题',
  'app.settings.security.question-description': '未设置密保问题,密保问题可有效保护账户安全',
  'app.settings.security.email': '备用邮箱',
  'app.settings.security.email-description': '已绑定邮箱',
  'app.settings.security.mfa': 'MFA 设备',
  'app.settings.security.mfa-description': '未绑定 MFA 设备,绑定后,可以进行二次确认',
  'app.settings.security.modify': '修改',
  'app.settings.security.set': '设置',
  'app.settings.security.bind': '绑定',
  'app.settings.binding.taobao': '绑定淘宝',
  'app.settings.binding.taobao-description': '当前未绑定淘宝账号',
  'app.settings.binding.alipay': '绑定支付宝',
  'app.settings.binding.alipay-description': '当前未绑定支付宝账号',
  'app.settings.binding.dingding': '绑定钉钉',
  'app.settings.binding.dingding-description': '当前未绑定钉钉账号',
  'app.settings.binding.bind': '绑定',
  'app.settings.notification.password': '账户密码',
  'app.settings.notification.password-description': '其他用户的消息将以站内信的形式通知',
  'app.settings.notification.messages': '系统消息',
  'app.settings.notification.messages-description': '系统消息将以站内信的形式通知',
  'app.settings.notification.todo': '待办任务',
  'app.settings.notification.todo-description': '待办任务将以站内信的形式通知',
  'app.settings.open': '开',
  'app.settings.close': '关',
};
zy-asrs-flow/src/locales/zh-TW.ts
New file
@@ -0,0 +1,22 @@
import component from './zh-TW/component';
import globalHeader from './zh-TW/globalHeader';
import menu from './zh-TW/menu';
import pages from './zh-TW/pages';
import pwa from './zh-TW/pwa';
import settingDrawer from './zh-TW/settingDrawer';
import settings from './zh-TW/settings';
export default {
  'navBar.lang': '語言',
  'layout.user.link.help': '幫助',
  'layout.user.link.privacy': '隱私',
  'layout.user.link.terms': '條款',
  'app.preview.down.block': '下載此頁面到本地項目',
  ...pages,
  ...globalHeader,
  ...menu,
  ...settingDrawer,
  ...settings,
  ...pwa,
  ...component,
};
zy-asrs-flow/src/locales/zh-TW/component.ts
New file
@@ -0,0 +1,5 @@
export default {
  'component.tagSelect.expand': '展開',
  'component.tagSelect.collapse': '收起',
  'component.tagSelect.all': '全部',
};
zy-asrs-flow/src/locales/zh-TW/globalHeader.ts
New file
@@ -0,0 +1,17 @@
export default {
  'component.globalHeader.search': '站內搜索',
  'component.globalHeader.search.example1': '搜索提示壹',
  'component.globalHeader.search.example2': '搜索提示二',
  'component.globalHeader.search.example3': '搜索提示三',
  'component.globalHeader.help': '使用手冊',
  'component.globalHeader.notification': '通知',
  'component.globalHeader.notification.empty': '妳已查看所有通知',
  'component.globalHeader.message': '消息',
  'component.globalHeader.message.empty': '您已讀完所有消息',
  'component.globalHeader.event': '待辦',
  'component.globalHeader.event.empty': '妳已完成所有待辦',
  'component.noticeIcon.clear': '清空',
  'component.noticeIcon.cleared': '清空了',
  'component.noticeIcon.empty': '暫無資料',
  'component.noticeIcon.view-more': '查看更多',
};
zy-asrs-flow/src/locales/zh-TW/menu.ts
New file
@@ -0,0 +1,52 @@
export default {
  'menu.welcome': '歡迎',
  'menu.more-blocks': '更多區塊',
  'menu.home': '首頁',
  'menu.admin': '权限',
  'menu.admin.sub-page': '二级管理页',
  'menu.login': '登錄',
  'menu.register': '註冊',
  'menu.register-result': '註冊結果',
  'menu.dashboard': 'Dashboard',
  'menu.dashboard.analysis': '分析頁',
  'menu.dashboard.monitor': '監控頁',
  'menu.dashboard.workplace': '工作臺',
  'menu.exception.403': '403',
  'menu.exception.404': '404',
  'menu.exception.500': '500',
  'menu.form': '表單頁',
  'menu.form.basic-form': '基礎表單',
  'menu.form.step-form': '分步表單',
  'menu.form.step-form.info': '分步表單(填寫轉賬信息)',
  'menu.form.step-form.confirm': '分步表單(確認轉賬信息)',
  'menu.form.step-form.result': '分步表單(完成)',
  'menu.form.advanced-form': '高級表單',
  'menu.list': '列表頁',
  'menu.list.table-list': '查詢表格',
  'menu.list.basic-list': '標淮列表',
  'menu.list.card-list': '卡片列表',
  'menu.list.search-list': '搜索列表',
  'menu.list.search-list.articles': '搜索列表(文章)',
  'menu.list.search-list.projects': '搜索列表(項目)',
  'menu.list.search-list.applications': '搜索列表(應用)',
  'menu.profile': '詳情頁',
  'menu.profile.basic': '基礎詳情頁',
  'menu.profile.advanced': '高級詳情頁',
  'menu.result': '結果頁',
  'menu.result.success': '成功頁',
  'menu.result.fail': '失敗頁',
  'menu.exception': '异常页',
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': '触发错误',
  'menu.account': '個人頁',
  'menu.account.center': '個人中心',
  'menu.account.settings': '個人設置',
  'menu.account.trigger': '觸發報錯',
  'menu.account.logout': '退出登錄',
  'menu.editor': '圖形編輯器',
  'menu.editor.flow': '流程編輯器',
  'menu.editor.mind': '腦圖編輯器',
  'menu.editor.koni': '拓撲編輯器',
};
zy-asrs-flow/src/locales/zh-TW/pages.ts
New file
@@ -0,0 +1,67 @@
export default {
  'pages.layouts.userLayout.title': 'Ant Design 是西湖區最具影響力的 Web 設計規範',
  'pages.login.accountLogin.tab': '賬戶密碼登錄',
  'pages.login.accountLogin.errorMessage': '錯誤的用戶名和密碼(admin/ant.design)',
  'pages.login.failure': '登錄失敗,請重試!',
  'pages.login.success': '登錄成功!',
  'pages.login.username.placeholder': '用戶名: admin or user',
  'pages.login.username.required': '用戶名是必填項!',
  'pages.login.password.placeholder': '密碼: ant.design',
  'pages.login.password.required': '密碼是必填項!',
  'pages.login.phoneLogin.tab': '手機號登錄',
  'pages.login.phoneLogin.errorMessage': '驗證碼錯誤',
  'pages.login.phoneNumber.placeholder': '請輸入手機號!',
  'pages.login.phoneNumber.required': '手機號是必填項!',
  'pages.login.phoneNumber.invalid': '不合法的手機號!',
  'pages.login.captcha.placeholder': '請輸入驗證碼!',
  'pages.login.captcha.required': '驗證碼是必填項!',
  'pages.login.phoneLogin.getVerificationCode': '獲取驗證碼',
  'pages.getCaptchaSecondText': '秒後重新獲取',
  'pages.login.rememberMe': '自動登錄',
  'pages.login.forgotPassword': '忘記密碼 ?',
  'pages.login.submit': '登錄',
  'pages.login.loginWith': '其他登錄方式 :',
  'pages.login.registerAccount': '註冊賬戶',
  'pages.welcome.link': '歡迎使用',
  'pages.welcome.alertMessage': '更快更強的重型組件,已經發布。',
  'pages.404.subTitle': '抱歉,您訪問的頁面不存在。',
  'pages.404.buttonText': '返回首頁',
  'pages.admin.subPage.title': '這個頁面只有 admin 權限才能查看',
  'pages.admin.subPage.alertMessage': 'umi ui 現已發佈,歡迎使用 npm run ui 啓動體驗。',
  'pages.searchTable.createForm.newRule': '新建規則',
  'pages.searchTable.updateForm.ruleConfig': '規則配置',
  'pages.searchTable.updateForm.basicConfig': '基本信息',
  'pages.searchTable.updateForm.ruleName.nameLabel': '規則名稱',
  'pages.searchTable.updateForm.ruleName.nameRules': '請輸入規則名稱!',
  'pages.searchTable.updateForm.ruleDesc.descLabel': '規則描述',
  'pages.searchTable.updateForm.ruleDesc.descPlaceholder': '請輸入至少五個字符',
  'pages.searchTable.updateForm.ruleDesc.descRules': '請輸入至少五個字符的規則描述!',
  'pages.searchTable.updateForm.ruleProps.title': '配置規則屬性',
  'pages.searchTable.updateForm.object': '監控對象',
  'pages.searchTable.updateForm.ruleProps.templateLabel': '規則模板',
  'pages.searchTable.updateForm.ruleProps.typeLabel': '規則類型',
  'pages.searchTable.updateForm.schedulingPeriod.title': '設定調度週期',
  'pages.searchTable.updateForm.schedulingPeriod.timeLabel': '開始時間',
  'pages.searchTable.updateForm.schedulingPeriod.timeRules': '請選擇開始時間!',
  'pages.searchTable.titleDesc': '描述',
  'pages.searchTable.ruleName': '規則名稱爲必填項',
  'pages.searchTable.titleCallNo': '服務調用次數',
  'pages.searchTable.titleStatus': '狀態',
  'pages.searchTable.nameStatus.default': '關閉',
  'pages.searchTable.nameStatus.running': '運行中',
  'pages.searchTable.nameStatus.online': '已上線',
  'pages.searchTable.nameStatus.abnormal': '異常',
  'pages.searchTable.titleUpdatedAt': '上次調度時間',
  'pages.searchTable.exception': '請輸入異常原因!',
  'pages.searchTable.titleOption': '操作',
  'pages.searchTable.config': '配置',
  'pages.searchTable.subscribeAlert': '訂閱警報',
  'pages.searchTable.title': '查詢表格',
  'pages.searchTable.new': '新建',
  'pages.searchTable.chosen': '已選擇',
  'pages.searchTable.item': '項',
  'pages.searchTable.totalServiceCalls': '服務調用次數總計',
  'pages.searchTable.tenThousand': '萬',
  'pages.searchTable.batchDeletion': '批量刪除',
  'pages.searchTable.batchApproval': '批量審批',
};
zy-asrs-flow/src/locales/zh-TW/pwa.ts
New file
@@ -0,0 +1,6 @@
export default {
  'app.pwa.offline': '當前處於離線狀態',
  'app.pwa.serviceworker.updated': '有新內容',
  'app.pwa.serviceworker.updated.hint': '請點擊“刷新”按鈕或者手動刷新頁面',
  'app.pwa.serviceworker.updated.ok': '刷新',
};
zy-asrs-flow/src/locales/zh-TW/settingDrawer.ts
New file
@@ -0,0 +1,31 @@
export default {
  'app.setting.pagestyle': '整體風格設置',
  'app.setting.pagestyle.dark': '暗色菜單風格',
  'app.setting.pagestyle.light': '亮色菜單風格',
  'app.setting.content-width': '內容區域寬度',
  'app.setting.content-width.fixed': '定寬',
  'app.setting.content-width.fluid': '流式',
  'app.setting.themecolor': '主題色',
  'app.setting.themecolor.dust': '薄暮',
  'app.setting.themecolor.volcano': '火山',
  'app.setting.themecolor.sunset': '日暮',
  'app.setting.themecolor.cyan': '明青',
  'app.setting.themecolor.green': '極光綠',
  'app.setting.themecolor.daybreak': '拂曉藍(默認)',
  'app.setting.themecolor.geekblue': '極客藍',
  'app.setting.themecolor.purple': '醬紫',
  'app.setting.navigationmode': '導航模式',
  'app.setting.sidemenu': '側邊菜單布局',
  'app.setting.topmenu': '頂部菜單布局',
  'app.setting.fixedheader': '固定 Header',
  'app.setting.fixedsidebar': '固定側邊菜單',
  'app.setting.fixedsidebar.hint': '側邊菜單布局時可配置',
  'app.setting.hideheader': '下滑時隱藏 Header',
  'app.setting.hideheader.hint': '固定 Header 時可配置',
  'app.setting.othersettings': '其他設置',
  'app.setting.weakmode': '色弱模式',
  'app.setting.copy': '拷貝設置',
  'app.setting.copyinfo': '拷貝成功,請到 config/defaultSettings.js 中替換默認配置',
  'app.setting.production.hint':
    '配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件',
};
zy-asrs-flow/src/locales/zh-TW/settings.ts
New file
@@ -0,0 +1,55 @@
export default {
  'app.settings.menuMap.basic': '基本設置',
  'app.settings.menuMap.security': '安全設置',
  'app.settings.menuMap.binding': '賬號綁定',
  'app.settings.menuMap.notification': '新消息通知',
  'app.settings.basic.avatar': '頭像',
  'app.settings.basic.change-avatar': '更換頭像',
  'app.settings.basic.email': '郵箱',
  'app.settings.basic.email-message': '請輸入您的郵箱!',
  'app.settings.basic.nickname': '昵稱',
  'app.settings.basic.nickname-message': '請輸入您的昵稱!',
  'app.settings.basic.profile': '個人簡介',
  'app.settings.basic.profile-message': '請輸入個人簡介!',
  'app.settings.basic.profile-placeholder': '個人簡介',
  'app.settings.basic.country': '國家/地區',
  'app.settings.basic.country-message': '請輸入您的國家或地區!',
  'app.settings.basic.geographic': '所在省市',
  'app.settings.basic.geographic-message': '請輸入您的所在省市!',
  'app.settings.basic.address': '街道地址',
  'app.settings.basic.address-message': '請輸入您的街道地址!',
  'app.settings.basic.phone': '聯系電話',
  'app.settings.basic.phone-message': '請輸入您的聯系電話!',
  'app.settings.basic.update': '更新基本信息',
  'app.settings.security.strong': '強',
  'app.settings.security.medium': '中',
  'app.settings.security.weak': '弱',
  'app.settings.security.password': '賬戶密碼',
  'app.settings.security.password-description': '當前密碼強度',
  'app.settings.security.phone': '密保手機',
  'app.settings.security.phone-description': '已綁定手機',
  'app.settings.security.question': '密保問題',
  'app.settings.security.question-description': '未設置密保問題,密保問題可有效保護賬戶安全',
  'app.settings.security.email': '備用郵箱',
  'app.settings.security.email-description': '已綁定郵箱',
  'app.settings.security.mfa': 'MFA 設備',
  'app.settings.security.mfa-description': '未綁定 MFA 設備,綁定後,可以進行二次確認',
  'app.settings.security.modify': '修改',
  'app.settings.security.set': '設置',
  'app.settings.security.bind': '綁定',
  'app.settings.binding.taobao': '綁定淘寶',
  'app.settings.binding.taobao-description': '當前未綁定淘寶賬號',
  'app.settings.binding.alipay': '綁定支付寶',
  'app.settings.binding.alipay-description': '當前未綁定支付寶賬號',
  'app.settings.binding.dingding': '綁定釘釘',
  'app.settings.binding.dingding-description': '當前未綁定釘釘賬號',
  'app.settings.binding.bind': '綁定',
  'app.settings.notification.password': '賬戶密碼',
  'app.settings.notification.password-description': '其他用戶的消息將以站內信的形式通知',
  'app.settings.notification.messages': '系統消息',
  'app.settings.notification.messages-description': '系統消息將以站內信的形式通知',
  'app.settings.notification.todo': '待辦任務',
  'app.settings.notification.todo-description': '待辦任務將以站內信的形式通知',
  'app.settings.open': '開',
  'app.settings.close': '關',
};
zy-asrs-flow/src/main.jsx
File was deleted
zy-asrs-flow/src/manifest.json
New file
@@ -0,0 +1,22 @@
{
  "name": "Ant Design Pro",
  "short_name": "Ant Design Pro",
  "display": "standalone",
  "start_url": "./?utm_source=homescreen",
  "theme_color": "#002140",
  "background_color": "#001529",
  "icons": [
    {
      "src": "icons/icon-192x192.png",
      "sizes": "192x192"
    },
    {
      "src": "icons/icon-128x128.png",
      "sizes": "128x128"
    },
    {
      "src": "icons/icon-512x512.png",
      "sizes": "512x512"
    }
  ]
}
zy-asrs-flow/src/pages/404.tsx
New file
@@ -0,0 +1,18 @@
import { history, useIntl } from '@umijs/max';
import { Button, Result } from 'antd';
import React from 'react';
const NoFoundPage: React.FC = () => (
  <Result
    status="404"
    title="404"
    subTitle={useIntl().formatMessage({ id: 'pages.404.subTitle' })}
    extra={
      <Button type="primary" onClick={() => history.push('/')}>
        {useIntl().formatMessage({ id: 'pages.404.buttonText' })}
      </Button>
    }
  />
);
export default NoFoundPage;
zy-asrs-flow/src/pages/Admin.jsx
File was deleted
zy-asrs-flow/src/pages/Admin.tsx
New file
@@ -0,0 +1,45 @@
import { HeartTwoTone, SmileTwoTone } from '@ant-design/icons';
import { PageContainer } from '@ant-design/pro-components';
import { useIntl } from '@umijs/max';
import { Alert, Card, Typography } from 'antd';
import React from 'react';
const Admin: React.FC = () => {
  const intl = useIntl();
  return (
    <PageContainer
      content={intl.formatMessage({
        id: 'pages.admin.subPage.title',
        defaultMessage: 'This page can only be viewed by admin',
      })}
    >
      <Card>
        <Alert
          message={intl.formatMessage({
            id: 'pages.welcome.alertMessage',
            defaultMessage: 'Faster and stronger heavy-duty components have been released.',
          })}
          type="success"
          showIcon
          banner
          style={{
            margin: -12,
            marginBottom: 48,
          }}
        />
        <Typography.Title level={2} style={{ textAlign: 'center' }}>
          <SmileTwoTone /> Ant Design Pro <HeartTwoTone twoToneColor="#eb2f96" /> You
        </Typography.Title>
      </Card>
      <p style={{ textAlign: 'center', marginTop: 24 }}>
        Want to add more pages? Please refer to{' '}
        <a href="https://pro.ant.design/docs/block-cn" target="_blank" rel="noopener noreferrer">
          use block
        </a>
        。
      </p>
    </PageContainer>
  );
};
export default Admin;
zy-asrs-flow/src/pages/G6.jsx
File was deleted
zy-asrs-flow/src/pages/Hello.jsx
File was deleted
zy-asrs-flow/src/pages/NotFound.jsx
File was deleted
zy-asrs-flow/src/pages/TableList/components/UpdateForm.tsx
New file
@@ -0,0 +1,209 @@
import {
  ProFormDateTimePicker,
  ProFormRadio,
  ProFormSelect,
  ProFormText,
  ProFormTextArea,
  StepsForm,
} from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Modal } from 'antd';
import React from 'react';
export type FormValueType = {
  target?: string;
  template?: string;
  type?: string;
  time?: string;
  frequency?: string;
} & Partial<API.RuleListItem>;
export type UpdateFormProps = {
  onCancel: (flag?: boolean, formVals?: FormValueType) => void;
  onSubmit: (values: FormValueType) => Promise<void>;
  updateModalOpen: boolean;
  values: Partial<API.RuleListItem>;
};
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
  const intl = useIntl();
  return (
    <StepsForm
      stepsProps={{
        size: 'small',
      }}
      stepsFormRender={(dom, submitter) => {
        return (
          <Modal
            width={640}
            bodyStyle={{ padding: '32px 40px 48px' }}
            destroyOnClose
            title={intl.formatMessage({
              id: 'pages.searchTable.updateForm.ruleConfig',
              defaultMessage: '规则配置',
            })}
            open={props.updateModalOpen}
            footer={submitter}
            onCancel={() => {
              props.onCancel();
            }}
          >
            {dom}
          </Modal>
        );
      }}
      onFinish={props.onSubmit}
    >
      <StepsForm.StepForm
        initialValues={{
          name: props.values.name,
          desc: props.values.desc,
        }}
        title={intl.formatMessage({
          id: 'pages.searchTable.updateForm.basicConfig',
          defaultMessage: '基本信息',
        })}
      >
        <ProFormText
          name="name"
          label={intl.formatMessage({
            id: 'pages.searchTable.updateForm.ruleName.nameLabel',
            defaultMessage: '规则名称',
          })}
          width="md"
          rules={[
            {
              required: true,
              message: (
                <FormattedMessage
                  id="pages.searchTable.updateForm.ruleName.nameRules"
                  defaultMessage="请输入规则名称!"
                />
              ),
            },
          ]}
        />
        <ProFormTextArea
          name="desc"
          width="md"
          label={intl.formatMessage({
            id: 'pages.searchTable.updateForm.ruleDesc.descLabel',
            defaultMessage: '规则描述',
          })}
          placeholder={intl.formatMessage({
            id: 'pages.searchTable.updateForm.ruleDesc.descPlaceholder',
            defaultMessage: '请输入至少五个字符',
          })}
          rules={[
            {
              required: true,
              message: (
                <FormattedMessage
                  id="pages.searchTable.updateForm.ruleDesc.descRules"
                  defaultMessage="请输入至少五个字符的规则描述!"
                />
              ),
              min: 5,
            },
          ]}
        />
      </StepsForm.StepForm>
      <StepsForm.StepForm
        initialValues={{
          target: '0',
          template: '0',
        }}
        title={intl.formatMessage({
          id: 'pages.searchTable.updateForm.ruleProps.title',
          defaultMessage: '配置规则属性',
        })}
      >
        <ProFormSelect
          name="target"
          width="md"
          label={intl.formatMessage({
            id: 'pages.searchTable.updateForm.object',
            defaultMessage: '监控对象',
          })}
          valueEnum={{
            0: '表一',
            1: '表二',
          }}
        />
        <ProFormSelect
          name="template"
          width="md"
          label={intl.formatMessage({
            id: 'pages.searchTable.updateForm.ruleProps.templateLabel',
            defaultMessage: '规则模板',
          })}
          valueEnum={{
            0: '规则模板一',
            1: '规则模板二',
          }}
        />
        <ProFormRadio.Group
          name="type"
          label={intl.formatMessage({
            id: 'pages.searchTable.updateForm.ruleProps.typeLabel',
            defaultMessage: '规则类型',
          })}
          options={[
            {
              value: '0',
              label: '强',
            },
            {
              value: '1',
              label: '弱',
            },
          ]}
        />
      </StepsForm.StepForm>
      <StepsForm.StepForm
        initialValues={{
          type: '1',
          frequency: 'month',
        }}
        title={intl.formatMessage({
          id: 'pages.searchTable.updateForm.schedulingPeriod.title',
          defaultMessage: '设定调度周期',
        })}
      >
        <ProFormDateTimePicker
          name="time"
          width="md"
          label={intl.formatMessage({
            id: 'pages.searchTable.updateForm.schedulingPeriod.timeLabel',
            defaultMessage: '开始时间',
          })}
          rules={[
            {
              required: true,
              message: (
                <FormattedMessage
                  id="pages.searchTable.updateForm.schedulingPeriod.timeRules"
                  defaultMessage="请选择开始时间!"
                />
              ),
            },
          ]}
        />
        <ProFormSelect
          name="frequency"
          label={intl.formatMessage({
            id: 'pages.searchTable.updateForm.object',
            defaultMessage: '监控对象',
          })}
          width="md"
          valueEnum={{
            month: '月',
            week: '周',
          }}
        />
      </StepsForm.StepForm>
    </StepsForm>
  );
};
export default UpdateForm;
zy-asrs-flow/src/pages/TableList/index.tsx
New file
@@ -0,0 +1,397 @@
import { addRule, removeRule, rule, updateRule } from '@/services/ant-design-pro/api';
import { PlusOutlined } from '@ant-design/icons';
import type { ActionType, ProColumns, ProDescriptionsItemProps } from '@ant-design/pro-components';
import {
  FooterToolbar,
  ModalForm,
  PageContainer,
  ProDescriptions,
  ProFormText,
  ProFormTextArea,
  ProTable,
} from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Button, Drawer, Input, message } from 'antd';
import React, { useRef, useState } from 'react';
import type { FormValueType } from './components/UpdateForm';
import UpdateForm from './components/UpdateForm';
/**
 * @en-US Add node
 * @zh-CN 添加节点
 * @param fields
 */
const handleAdd = async (fields: API.RuleListItem) => {
  const hide = message.loading('正在添加');
  try {
    await addRule({ ...fields });
    hide();
    message.success('Added successfully');
    return true;
  } catch (error) {
    hide();
    message.error('Adding failed, please try again!');
    return false;
  }
};
/**
 * @en-US Update node
 * @zh-CN 更新节点
 *
 * @param fields
 */
const handleUpdate = async (fields: FormValueType) => {
  const hide = message.loading('Configuring');
  try {
    await updateRule({
      name: fields.name,
      desc: fields.desc,
      key: fields.key,
    });
    hide();
    message.success('Configuration is successful');
    return true;
  } catch (error) {
    hide();
    message.error('Configuration failed, please try again!');
    return false;
  }
};
/**
 *  Delete node
 * @zh-CN 删除节点
 *
 * @param selectedRows
 */
const handleRemove = async (selectedRows: API.RuleListItem[]) => {
  const hide = message.loading('正在删除');
  if (!selectedRows) return true;
  try {
    await removeRule({
      key: selectedRows.map((row) => row.key),
    });
    hide();
    message.success('Deleted successfully and will refresh soon');
    return true;
  } catch (error) {
    hide();
    message.error('Delete failed, please try again');
    return false;
  }
};
const TableList: React.FC = () => {
  /**
   * @en-US Pop-up window of new window
   * @zh-CN 新建窗口的弹窗
   *  */
  const [createModalOpen, handleModalOpen] = useState<boolean>(false);
  /**
   * @en-US The pop-up window of the distribution update window
   * @zh-CN 分布更新窗口的弹窗
   * */
  const [updateModalOpen, handleUpdateModalOpen] = useState<boolean>(false);
  const [showDetail, setShowDetail] = useState<boolean>(false);
  const actionRef = useRef<ActionType>();
  const [currentRow, setCurrentRow] = useState<API.RuleListItem>();
  const [selectedRowsState, setSelectedRows] = useState<API.RuleListItem[]>([]);
  /**
   * @en-US International configuration
   * @zh-CN 国际化配置
   * */
  const intl = useIntl();
  const columns: ProColumns<API.RuleListItem>[] = [
    {
      title: (
        <FormattedMessage
          id="pages.searchTable.updateForm.ruleName.nameLabel"
          defaultMessage="Rule name"
        />
      ),
      dataIndex: 'name',
      tip: 'The rule name is the unique key',
      render: (dom, entity) => {
        return (
          <a
            onClick={() => {
              setCurrentRow(entity);
              setShowDetail(true);
            }}
          >
            {dom}
          </a>
        );
      },
    },
    {
      title: <FormattedMessage id="pages.searchTable.titleDesc" defaultMessage="Description" />,
      dataIndex: 'desc',
      valueType: 'textarea',
    },
    {
      title: (
        <FormattedMessage
          id="pages.searchTable.titleCallNo"
          defaultMessage="Number of service calls"
        />
      ),
      dataIndex: 'callNo',
      sorter: true,
      hideInForm: true,
      renderText: (val: string) =>
        `${val}${intl.formatMessage({
          id: 'pages.searchTable.tenThousand',
          defaultMessage: ' 万 ',
        })}`,
    },
    {
      title: <FormattedMessage id="pages.searchTable.titleStatus" defaultMessage="Status" />,
      dataIndex: 'status',
      hideInForm: true,
      valueEnum: {
        0: {
          text: (
            <FormattedMessage
              id="pages.searchTable.nameStatus.default"
              defaultMessage="Shut down"
            />
          ),
          status: 'Default',
        },
        1: {
          text: (
            <FormattedMessage id="pages.searchTable.nameStatus.running" defaultMessage="Running" />
          ),
          status: 'Processing',
        },
        2: {
          text: (
            <FormattedMessage id="pages.searchTable.nameStatus.online" defaultMessage="Online" />
          ),
          status: 'Success',
        },
        3: {
          text: (
            <FormattedMessage
              id="pages.searchTable.nameStatus.abnormal"
              defaultMessage="Abnormal"
            />
          ),
          status: 'Error',
        },
      },
    },
    {
      title: (
        <FormattedMessage
          id="pages.searchTable.titleUpdatedAt"
          defaultMessage="Last scheduled time"
        />
      ),
      sorter: true,
      dataIndex: 'updatedAt',
      valueType: 'dateTime',
      renderFormItem: (item, { defaultRender, ...rest }, form) => {
        const status = form.getFieldValue('status');
        if (`${status}` === '0') {
          return false;
        }
        if (`${status}` === '3') {
          return (
            <Input
              {...rest}
              placeholder={intl.formatMessage({
                id: 'pages.searchTable.exception',
                defaultMessage: 'Please enter the reason for the exception!',
              })}
            />
          );
        }
        return defaultRender(item);
      },
    },
    {
      title: <FormattedMessage id="pages.searchTable.titleOption" defaultMessage="Operating" />,
      dataIndex: 'option',
      valueType: 'option',
      render: (_, record) => [
        <a
          key="config"
          onClick={() => {
            handleUpdateModalOpen(true);
            setCurrentRow(record);
          }}
        >
          <FormattedMessage id="pages.searchTable.config" defaultMessage="Configuration" />
        </a>,
        <a key="subscribeAlert" href="https://procomponents.ant.design/">
          <FormattedMessage
            id="pages.searchTable.subscribeAlert"
            defaultMessage="Subscribe to alerts"
          />
        </a>,
      ],
    },
  ];
  return (
    <PageContainer>
      <ProTable<API.RuleListItem, API.PageParams>
        headerTitle={intl.formatMessage({
          id: 'pages.searchTable.title',
          defaultMessage: 'Enquiry form',
        })}
        actionRef={actionRef}
        rowKey="key"
        search={{
          labelWidth: 120,
        }}
        toolBarRender={() => [
          <Button
            type="primary"
            key="primary"
            onClick={() => {
              handleModalOpen(true);
            }}
          >
            <PlusOutlined /> <FormattedMessage id="pages.searchTable.new" defaultMessage="New" />
          </Button>,
        ]}
        request={rule}
        columns={columns}
        rowSelection={{
          onChange: (_, selectedRows) => {
            setSelectedRows(selectedRows);
          },
        }}
      />
      {selectedRowsState?.length > 0 && (
        <FooterToolbar
          extra={
            <div>
              <FormattedMessage id="pages.searchTable.chosen" defaultMessage="Chosen" />{' '}
              <a style={{ fontWeight: 600 }}>{selectedRowsState.length}</a>{' '}
              <FormattedMessage id="pages.searchTable.item" defaultMessage="项" />
              &nbsp;&nbsp;
              <span>
                <FormattedMessage
                  id="pages.searchTable.totalServiceCalls"
                  defaultMessage="Total number of service calls"
                />{' '}
                {selectedRowsState.reduce((pre, item) => pre + item.callNo!, 0)}{' '}
                <FormattedMessage id="pages.searchTable.tenThousand" defaultMessage="万" />
              </span>
            </div>
          }
        >
          <Button
            onClick={async () => {
              await handleRemove(selectedRowsState);
              setSelectedRows([]);
              actionRef.current?.reloadAndRest?.();
            }}
          >
            <FormattedMessage
              id="pages.searchTable.batchDeletion"
              defaultMessage="Batch deletion"
            />
          </Button>
          <Button type="primary">
            <FormattedMessage
              id="pages.searchTable.batchApproval"
              defaultMessage="Batch approval"
            />
          </Button>
        </FooterToolbar>
      )}
      <ModalForm
        title={intl.formatMessage({
          id: 'pages.searchTable.createForm.newRule',
          defaultMessage: 'New rule',
        })}
        width="400px"
        open={createModalOpen}
        onOpenChange={handleModalOpen}
        onFinish={async (value) => {
          const success = await handleAdd(value as API.RuleListItem);
          if (success) {
            handleModalOpen(false);
            if (actionRef.current) {
              actionRef.current.reload();
            }
          }
        }}
      >
        <ProFormText
          rules={[
            {
              required: true,
              message: (
                <FormattedMessage
                  id="pages.searchTable.ruleName"
                  defaultMessage="Rule name is required"
                />
              ),
            },
          ]}
          width="md"
          name="name"
        />
        <ProFormTextArea width="md" name="desc" />
      </ModalForm>
      <UpdateForm
        onSubmit={async (value) => {
          const success = await handleUpdate(value);
          if (success) {
            handleUpdateModalOpen(false);
            setCurrentRow(undefined);
            if (actionRef.current) {
              actionRef.current.reload();
            }
          }
        }}
        onCancel={() => {
          handleUpdateModalOpen(false);
          if (!showDetail) {
            setCurrentRow(undefined);
          }
        }}
        updateModalOpen={updateModalOpen}
        values={currentRow || {}}
      />
      <Drawer
        width={600}
        open={showDetail}
        onClose={() => {
          setCurrentRow(undefined);
          setShowDetail(false);
        }}
        closable={false}
      >
        {currentRow?.name && (
          <ProDescriptions<API.RuleListItem>
            column={2}
            title={currentRow?.name}
            request={async () => ({
              data: currentRow || {},
            })}
            params={{
              id: currentRow?.name,
            }}
            columns={columns as ProDescriptionsItemProps<API.RuleListItem>[]}
          />
        )}
      </Drawer>
    </PageContainer>
  );
};
export default TableList;
zy-asrs-flow/src/pages/User/Login/__snapshots__/login.test.tsx.snap
New file
@@ -0,0 +1,1108 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Login Page should login success 1`] = `
<DocumentFragment>
  <div
    class="ant-design-pro ant-pro-layout screen-md ant-pro-layout-fix-siderbar ant-pro-layout-mix"
  >
    <div
      class="ant-pro-layout-bg-list"
    >
      <img
        src="https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/D2LWSqNny4sAAAAAAAAAAAAAFl94AQBr"
        style="position: absolute; src: https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/D2LWSqNny4sAAAAAAAAAAAAAFl94AQBr; left: 85px; bottom: 100px; height: 303px;"
      />
      <img
        src="https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/C2TWRpJpiC0AAAAAAAAAAAAAFl94AQBr"
        style="position: absolute; src: https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/C2TWRpJpiC0AAAAAAAAAAAAAFl94AQBr; bottom: -68px; right: -45px; height: 303px;"
      />
      <img
        src="https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/F6vSTbj8KpYAAAAAAAAAAAAAFl94AQBr"
        style="position: absolute; src: https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/F6vSTbj8KpYAAAAAAAAAAAAAFl94AQBr; bottom: 0px; left: 0px; width: 331px;"
      />
    </div>
    <div
      class="ant-layout ant-layout-has-sider"
      style="min-height: 100%; flex-direction: row;"
    >
      <div
        style="width: 256px; overflow: hidden; max-width: 256px; min-width: 256px; transition: all 0.2s ease 0s; flex: 0 0 256px;"
      />
      <aside
        class="ant-layout-sider ant-layout-sider-dark ant-pro-sider ant-pro-sider-fixed ant-pro-sider-fixed-mix ant-pro-sider-layout-mix ant-pro-sider-light ant-pro-sider-mix"
        style="max-width: 256px; min-width: 256px; width: 256px; flex: 0 0 256px;"
      >
        <div
          class="ant-layout-sider-children"
        >
          <div
            style="flex: 1; overflow-y: auto; overflow-x: hidden;"
          >
            <ul
              class="ant-menu ant-menu-root ant-menu-inline ant-menu-light ant-pro-sider-menu ant-pro-base-menu-inline"
              data-menu-list="true"
              dir="ltr"
              role="menu"
              style="background-color: transparent; width: 100%;"
              tabindex="0"
            >
              <li
                class="ant-menu-item ant-menu-item-selected ant-menu-item-only-child ant-pro-base-menu-inline-menu-item"
                data-menu-id="rc-menu-uuid-test-/welcome"
                role="menuitem"
                style="padding-left: 16px;"
                tabindex="-1"
              >
                <span
                  class="ant-menu-title-content"
                >
                  <div
                    class="ant-pro-base-menu-inline-item-title"
                  >
                    <span
                      class="ant-pro-base-menu-inline-item-icon "
                    >
                      <span
                        aria-label="smile"
                        class="anticon anticon-smile"
                        role="img"
                      >
                        <svg
                          aria-hidden="true"
                          data-icon="smile"
                          fill="currentColor"
                          focusable="false"
                          height="1em"
                          viewBox="64 64 896 896"
                          width="1em"
                        >
                          <path
                            d="M288 421a48 48 0 1096 0 48 48 0 10-96 0zm352 0a48 48 0 1096 0 48 48 0 10-96 0zM512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm263 711c-34.2 34.2-74 61-118.3 79.8C611 874.2 562.3 884 512 884c-50.3 0-99-9.8-144.8-29.2A370.4 370.4 0 01248.9 775c-34.2-34.2-61-74-79.8-118.3C149.8 611 140 562.3 140 512s9.8-99 29.2-144.8A370.4 370.4 0 01249 248.9c34.2-34.2 74-61 118.3-79.8C413 149.8 461.7 140 512 140c50.3 0 99 9.8 144.8 29.2A370.4 370.4 0 01775.1 249c34.2 34.2 61 74 79.8 118.3C874.2 413 884 461.7 884 512s-9.8 99-29.2 144.8A368.89 368.89 0 01775 775zM664 533h-48.1c-4.2 0-7.8 3.2-8.1 7.4C604 589.9 562.5 629 512 629s-92.1-39.1-95.8-88.6c-.3-4.2-3.9-7.4-8.1-7.4H360a8 8 0 00-8 8.4c4.4 84.3 74.5 151.6 160 151.6s155.6-67.3 160-151.6a8 8 0 00-8-8.4z"
                          />
                        </svg>
                      </span>
                    </span>
                    <span
                      class="ant-pro-base-menu-inline-item-text ant-pro-base-menu-inline-item-text-has-icon"
                    >
                      Welcome
                    </span>
                  </div>
                </span>
              </li>
              <li
                class="ant-menu-item ant-menu-item-only-child ant-pro-base-menu-inline-menu-item"
                data-menu-id="rc-menu-uuid-test-/list"
                role="menuitem"
                style="padding-left: 16px;"
                tabindex="-1"
              >
                <span
                  class="ant-menu-title-content"
                >
                  <a
                    href="/list"
                  >
                    <div
                      class="ant-pro-base-menu-inline-item-title"
                    >
                      <span
                        class="ant-pro-base-menu-inline-item-icon "
                      >
                        <span
                          aria-label="table"
                          class="anticon anticon-table"
                          role="img"
                        >
                          <svg
                            aria-hidden="true"
                            data-icon="table"
                            fill="currentColor"
                            focusable="false"
                            height="1em"
                            viewBox="64 64 896 896"
                            width="1em"
                          >
                            <path
                              d="M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 208H676V232h212v136zm0 224H676V432h212v160zM412 432h200v160H412V432zm200-64H412V232h200v136zm-476 64h212v160H136V432zm0-200h212v136H136V232zm0 424h212v136H136V656zm276 0h200v136H412V656zm476 136H676V656h212v136z"
                            />
                          </svg>
                        </span>
                      </span>
                      <span
                        class="ant-pro-base-menu-inline-item-text ant-pro-base-menu-inline-item-text-has-icon"
                      >
                        Search Table
                      </span>
                    </div>
                  </a>
                </span>
              </li>
            </ul>
            <div
              aria-hidden="true"
              style="display: none;"
            />
          </div>
          <div
            class="ant-pro-sider-links"
          >
            <ul
              class="ant-menu ant-menu-root ant-menu-inline ant-menu-light ant-pro-sider-link-menu"
              data-menu-list="true"
              dir="ltr"
              role="menu"
              tabindex="0"
            />
            <div
              aria-hidden="true"
              style="display: none;"
            />
          </div>
          <div
            class="ant-pro-sider-collapsed-button"
          >
            <svg
              aria-hidden="true"
              fill="currentColor"
              height="1em"
              viewBox="0 0 12 12"
              width="1em"
            >
              <path
                d="M6.432 7.967a.448.448 0 01-.318.133h-.228a.46.46 0 01-.318-.133L2.488 4.85a.305.305 0 010-.43l.427-.43a.293.293 0 01.42 0L6 6.687l2.665-2.699a.299.299 0 01.426 0l.42.431a.305.305 0 010 .43L6.432 7.967z"
              />
            </svg>
          </div>
        </div>
      </aside>
      <div
        class="ant-pro-layout-container"
        style="position: relative;"
      >
        <header
          class="ant-layout-header"
          style="height: 56px; line-height: 56px; background-color: transparent; z-index: 19;"
        />
        <header
          class="ant-layout-header ant-pro-layout-header ant-pro-layout-header-fixed-header ant-pro-layout-header-mix ant-pro-layout-header-fixed-header-action ant-pro-layout-header-header"
        >
          <div
            class="ant-pro-global-header"
          >
            <div
              class="ant-pro-global-header-logo ant-pro-global-header-logo-mix"
            >
              <a>
                <img
                  alt="logo"
                  height="22"
                  src="https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg"
                  width="auto"
                />
                <h1>
                  Ant Design Pro
                </h1>
              </a>
            </div>
            <div
              style="flex: 1;"
            />
            <div
              class="ant-pro-global-header-right-content"
              style="min-width: auto; height: 100%;"
            >
              <div
                style="height: 100%;"
              >
                <div
                  style="display: flex; align-items: center; height: 100%; justify-content: flex-end;"
                >
                  <div
                    class="ant-pro-global-header-header-actions"
                  >
                    <div
                      class="ant-pro-global-header-header-actions-item  ant-pro-global-header-header-actions-hover"
                    >
                      <div
                        style="display: flex; height: 26px;"
                      >
                        <span
                          aria-label="question-circle"
                          class="anticon anticon-question-circle"
                          role="img"
                        >
                          <svg
                            aria-hidden="true"
                            data-icon="question-circle"
                            fill="currentColor"
                            focusable="false"
                            height="1em"
                            viewBox="64 64 896 896"
                            width="1em"
                          >
                            <path
                              d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"
                            />
                            <path
                              d="M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z"
                            />
                          </svg>
                        </span>
                      </div>
                    </div>
                    <div
                      class="ant-pro-global-header-header-actions-item  ant-pro-global-header-header-actions-hover"
                    >
                      <span
                        class="ant-dropdown-trigger"
                        style="cursor: pointer; padding: 4px; display: inline-flex; align-items: center; justify-content: center; font-size: 18px; vertical-align: middle;"
                      >
                        <i
                          class="anticon"
                        >
                          <svg
                            aria-hidden="true"
                            fill="currentColor"
                            focusable="false"
                            height="1em"
                            viewBox="0 0 24 24"
                            width="1em"
                          >
                            <path
                              d="M0 0h24v24H0z"
                              fill="none"
                            />
                            <path
                              class="css-c4d79v"
                              d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z "
                            />
                          </svg>
                        </i>
                      </span>
                    </div>
                    <span
                      class="ant-pro-global-header-header-actions-avatar"
                    >
                      <div
                        class="ant-dropdown-trigger"
                      >
                        <span
                          class="ant-avatar ant-avatar-circle ant-avatar-image"
                          style="width: 28px; height: 28px; line-height: 28px; font-size: 18px;"
                        >
                          <img
                            src="https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png"
                          />
                        </span>
                        <span
                          style="margin-inline-start: 8px;"
                        >
                          <span
                            class="anticon"
                          >
                            Serati Ma
                          </span>
                        </span>
                      </div>
                    </span>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </header>
        <main
          class="ant-layout-content ant-pro-layout-content ant-pro-layout-has-header ant-pro-layout-content-has-page-container"
        >
          <div
            class="ant-pro-page-container"
          >
            <div
              class="ant-page-header ant-pro-page-container-warp-page-header ant-page-header-ghost"
            >
              <div
                class="ant-page-header-heading "
              >
                <div
                  class="ant-page-header-heading-left"
                >
                  <span
                    class="ant-page-header-heading-title"
                    title="Welcome"
                  >
                    Welcome
                  </span>
                </div>
              </div>
            </div>
            <div
              class="ant-pro-grid-content"
            >
              <div
                class="ant-pro-grid-content-children"
              >
                <div
                  class="ant-pro-layout-watermark-wrapper"
                  style="position: relative;"
                >
                  <div
                    class="ant-pro-page-container-children-container"
                  >
                    <div
                      class="ant-card ant-card-bordered"
                      style="border-radius: 8px;"
                    >
                      <div
                        class="ant-card-body"
                      >
                        <div
                          style="background-position: 100% -30%; background-repeat: no-repeat; background-size: 274px auto; background-image: url(https://gw.alipayobjects.com/mdn/rms_a9745b/afts/img/A*BuFmQqsB2iAAAAAAAAAAAAAAARQnAQ);"
                        >
                          <div
                            style="font-size: 20px; color: rgba(0, 0, 0, 0.88);"
                          >
                            欢迎使用 Ant Design Pro
                          </div>
                          <p
                            style="font-size: 14px; color: rgba(0, 0, 0, 0.65); line-height: 22px; margin-top: 16px; margin-bottom: 32px; width: 65%;"
                          >
                            Ant Design Pro 是一个整合了 umi,Ant Design 和 ProComponents 的脚手架方案。致力于在设计规范和基础组件的基础上,继续向上构建,提炼出典型模板/业务组件/配套设计资源,进一步提升企业级中后台产品设计研发过程中的『用户』和『设计者』的体验。
                          </p>
                          <div
                            style="display: flex; flex-wrap: wrap; gap: 16px;"
                          >
                            <div
                              style="background-color: rgb(255, 255, 255); box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),
      0 3px 6px -4px rgba(0, 0, 0, 0.12),
      0 9px 28px 8px rgba(0, 0, 0, 0.05); border-radius: 8px; font-size: 14px; color: rgba(0, 0, 0, 0.65); line-height: 22px; padding: 16px 19px; min-width: 220px; flex: 1;"
                            >
                              <div
                                style="display: flex; gap: 4px; align-items: center;"
                              >
                                <div
                                  style="width: 48px; height: 48px; line-height: 22px; background-size: 100%; text-align: center; padding: 8px 16px 16px 12px; color: rgb(255, 255, 255); font-weight: bold; background-image: url(https://gw.alipayobjects.com/zos/bmw-prod/daaf8d50-8e6d-4251-905d-676a24ddfa12.svg);"
                                >
                                  1
                                </div>
                                <div
                                  style="font-size: 16px; color: rgba(0, 0, 0, 0.88); padding-bottom: 8px;"
                                >
                                  了解 umi
                                </div>
                              </div>
                              <div
                                style="font-size: 14px; color: rgba(0, 0, 0, 0.65); text-align: justify; line-height: 22px; margin-bottom: 8px;"
                              >
                                umi 是一个可扩展的企业级前端应用框架,umi 以路由为基础的,同时支持配置式路由和约定式路由,保证路由的功能完备,并以此进行功能扩展。
                              </div>
                              <a
                                href="https://umijs.org/docs/introduce/introduce"
                                rel="noreferrer"
                                target="_blank"
                              >
                                了解更多 &gt;
                              </a>
                            </div>
                            <div
                              style="background-color: rgb(255, 255, 255); box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),
      0 3px 6px -4px rgba(0, 0, 0, 0.12),
      0 9px 28px 8px rgba(0, 0, 0, 0.05); border-radius: 8px; font-size: 14px; color: rgba(0, 0, 0, 0.65); line-height: 22px; padding: 16px 19px; min-width: 220px; flex: 1;"
                            >
                              <div
                                style="display: flex; gap: 4px; align-items: center;"
                              >
                                <div
                                  style="width: 48px; height: 48px; line-height: 22px; background-size: 100%; text-align: center; padding: 8px 16px 16px 12px; color: rgb(255, 255, 255); font-weight: bold; background-image: url(https://gw.alipayobjects.com/zos/bmw-prod/daaf8d50-8e6d-4251-905d-676a24ddfa12.svg);"
                                >
                                  2
                                </div>
                                <div
                                  style="font-size: 16px; color: rgba(0, 0, 0, 0.88); padding-bottom: 8px;"
                                >
                                  了解 ant design
                                </div>
                              </div>
                              <div
                                style="font-size: 14px; color: rgba(0, 0, 0, 0.65); text-align: justify; line-height: 22px; margin-bottom: 8px;"
                              >
                                antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。
                              </div>
                              <a
                                href="https://ant.design"
                                rel="noreferrer"
                                target="_blank"
                              >
                                了解更多 &gt;
                              </a>
                            </div>
                            <div
                              style="background-color: rgb(255, 255, 255); box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),
      0 3px 6px -4px rgba(0, 0, 0, 0.12),
      0 9px 28px 8px rgba(0, 0, 0, 0.05); border-radius: 8px; font-size: 14px; color: rgba(0, 0, 0, 0.65); line-height: 22px; padding: 16px 19px; min-width: 220px; flex: 1;"
                            >
                              <div
                                style="display: flex; gap: 4px; align-items: center;"
                              >
                                <div
                                  style="width: 48px; height: 48px; line-height: 22px; background-size: 100%; text-align: center; padding: 8px 16px 16px 12px; color: rgb(255, 255, 255); font-weight: bold; background-image: url(https://gw.alipayobjects.com/zos/bmw-prod/daaf8d50-8e6d-4251-905d-676a24ddfa12.svg);"
                                >
                                  3
                                </div>
                                <div
                                  style="font-size: 16px; color: rgba(0, 0, 0, 0.88); padding-bottom: 8px;"
                                >
                                  了解 Pro Components
                                </div>
                              </div>
                              <div
                                style="font-size: 14px; color: rgba(0, 0, 0, 0.65); text-align: justify; line-height: 22px; margin-bottom: 8px;"
                              >
                                ProComponents 是一个基于 Ant Design 做了更高抽象的模板组件,以 一个组件就是一个页面为开发理念,为中后台开发带来更好的体验。
                              </div>
                              <a
                                href="https://procomponents.ant.design"
                                rel="noreferrer"
                                target="_blank"
                              >
                                了解更多 &gt;
                              </a>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                  <div
                    class="ant-pro-layout-watermark"
                    style="z-index: 9; position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; background-size: 332px; pointer-events: none; background-repeat: repeat;"
                  />
                </div>
              </div>
            </div>
          </div>
        </main>
        <footer
          class="ant-layout-footer"
          style="padding: 0px; background: none;"
        >
          <div
            class="ant-pro-global-footer"
          >
            <div
              class="ant-pro-global-footer-list"
            >
              <a
                class="ant-pro-global-footer-list-link"
                href="https://pro.ant.design"
                rel="noreferrer"
                target="_blank"
                title="Ant Design Pro"
              >
                Ant Design Pro
              </a>
              <a
                class="ant-pro-global-footer-list-link"
                href="https://github.com/ant-design/ant-design-pro"
                rel="noreferrer"
                target="_blank"
                title="github"
              >
                <span
                  aria-label="github"
                  class="anticon anticon-github"
                  role="img"
                >
                  <svg
                    aria-hidden="true"
                    data-icon="github"
                    fill="currentColor"
                    focusable="false"
                    height="1em"
                    viewBox="64 64 896 896"
                    width="1em"
                  >
                    <path
                      d="M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9a127.5 127.5 0 0138.1 91v112.5c.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z"
                    />
                  </svg>
                </span>
              </a>
              <a
                class="ant-pro-global-footer-list-link"
                href="https://ant.design"
                rel="noreferrer"
                target="_blank"
                title="Ant Design"
              >
                Ant Design
              </a>
            </div>
            <div
              class="ant-pro-global-footer-copyright"
            >
              <span
                aria-label="copyright"
                class="anticon anticon-copyright"
                role="img"
              >
                <svg
                  aria-hidden="true"
                  data-icon="copyright"
                  fill="currentColor"
                  focusable="false"
                  height="1em"
                  viewBox="64 64 896 896"
                  width="1em"
                >
                  <path
                    d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm5.6-532.7c53 0 89 33.8 93 83.4.3 4.2 3.8 7.4 8 7.4h56.7c2.6 0 4.7-2.1 4.7-4.7 0-86.7-68.4-147.4-162.7-147.4C407.4 290 344 364.2 344 486.8v52.3C344 660.8 407.4 734 517.3 734c94 0 162.7-58.8 162.7-141.4 0-2.6-2.1-4.7-4.7-4.7h-56.8c-4.2 0-7.6 3.2-8 7.3-4.2 46.1-40.1 77.8-93 77.8-65.3 0-102.1-47.9-102.1-133.6v-52.6c.1-87 37-135.5 102.2-135.5z"
                  />
                </svg>
              </span>
               2023 Produced by Ant Financial Experience Department
            </div>
          </div>
        </footer>
      </div>
    </div>
  </div>
</DocumentFragment>
`;
exports[`Login Page should show login form 1`] = `
<DocumentFragment>
  <div
    class="css-trkbkn"
  >
    <div
      class="css-15lsw8v"
      data-lang="true"
    >
      <span
        class="ant-dropdown-trigger"
        style="cursor: pointer; padding: 12px; display: inline-flex; align-items: center; justify-content: center; font-size: 18px; vertical-align: middle;"
      >
        <i
          class="anticon"
        >
          <svg
            aria-hidden="true"
            fill="currentColor"
            focusable="false"
            height="1em"
            viewBox="0 0 24 24"
            width="1em"
          >
            <path
              d="M0 0h24v24H0z"
              fill="none"
            />
            <path
              class="css-c4d79v"
              d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z "
            />
          </svg>
        </i>
      </span>
    </div>
    <div
      style="flex: 1; padding: 32px 0px;"
    >
      <div
        class="ant-pro-form-login-container "
      >
        <div
          class="ant-pro-form-login-top"
        >
          <div
            class="ant-pro-form-login-header "
          >
            <span
              class="ant-pro-form-login-logo "
            >
              <img
                alt="logo"
                src="/logo.svg"
              />
            </span>
            <span
              class="ant-pro-form-login-title "
            >
              Ant Design
            </span>
          </div>
          <div
            class="ant-pro-form-login-desc "
          >
            Ant Design is the most influential web design specification in Xihu district
          </div>
        </div>
        <div
          class="ant-pro-form-login-main "
          style="width: 328px; min-width: 280px; max-width: 75vw;"
        >
          <form
            autocomplete="off"
            class="ant-form ant-form-vertical ant-pro-form"
          >
            <input
              style="display: none;"
              type="text"
            />
            <div
              class="ant-tabs ant-tabs-top ant-tabs-centered"
            >
              <div
                class="ant-tabs-nav"
                role="tablist"
              >
                <div
                  class="ant-tabs-nav-wrap"
                >
                  <div
                    class="ant-tabs-nav-list"
                    style="transform: translate(0px, 0px);"
                  >
                    <div
                      class="ant-tabs-tab ant-tabs-tab-active"
                      data-node-key="account"
                    >
                      <div
                        aria-controls="rc-tabs-test-panel-account"
                        aria-selected="true"
                        class="ant-tabs-tab-btn"
                        id="rc-tabs-test-tab-account"
                        role="tab"
                        tabindex="0"
                      >
                        Account Login
                      </div>
                    </div>
                    <div
                      class="ant-tabs-tab"
                      data-node-key="mobile"
                    >
                      <div
                        aria-controls="rc-tabs-test-panel-mobile"
                        aria-selected="false"
                        class="ant-tabs-tab-btn"
                        id="rc-tabs-test-tab-mobile"
                        role="tab"
                        tabindex="0"
                      >
                        Phone Login
                      </div>
                    </div>
                    <div
                      class="ant-tabs-ink-bar ant-tabs-ink-bar-animated"
                    />
                  </div>
                </div>
                <div
                  class="ant-tabs-nav-operations ant-tabs-nav-operations-hidden"
                >
                  <button
                    aria-controls="rc-tabs-test-more-popup"
                    aria-expanded="false"
                    aria-haspopup="listbox"
                    aria-hidden="true"
                    class="ant-tabs-nav-more"
                    id="rc-tabs-test-more"
                    style="visibility: hidden; order: 1;"
                    tabindex="-1"
                    type="button"
                  >
                    <span
                      aria-label="ellipsis"
                      class="anticon anticon-ellipsis"
                      role="img"
                    >
                      <svg
                        aria-hidden="true"
                        data-icon="ellipsis"
                        fill="currentColor"
                        focusable="false"
                        height="1em"
                        viewBox="64 64 896 896"
                        width="1em"
                      >
                        <path
                          d="M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"
                        />
                      </svg>
                    </span>
                  </button>
                </div>
              </div>
              <div
                class="ant-tabs-content-holder"
              >
                <div
                  class="ant-tabs-content ant-tabs-content-top"
                >
                  <div
                    aria-hidden="false"
                    aria-labelledby="rc-tabs-test-tab-account"
                    class="ant-tabs-tabpane ant-tabs-tabpane-active"
                    id="rc-tabs-test-panel-account"
                    role="tabpanel"
                    tabindex="0"
                  />
                </div>
              </div>
            </div>
            <div
              class="ant-form-item"
            >
              <div
                class="ant-row ant-form-item-row"
              >
                <div
                  class="ant-col ant-form-item-control"
                >
                  <div
                    class="ant-form-item-control-input"
                  >
                    <div
                      class="ant-form-item-control-input-content"
                    >
                      <span
                        class="ant-input-affix-wrapper ant-input-affix-wrapper-lg"
                      >
                        <span
                          class="ant-input-prefix"
                        >
                          <span
                            aria-label="user"
                            class="anticon anticon-user"
                            role="img"
                          >
                            <svg
                              aria-hidden="true"
                              data-icon="user"
                              fill="currentColor"
                              focusable="false"
                              height="1em"
                              viewBox="64 64 896 896"
                              width="1em"
                            >
                              <path
                                d="M858.5 763.6a374 374 0 00-80.6-119.5 375.63 375.63 0 00-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 00-80.6 119.5A371.7 371.7 0 00136 901.8a8 8 0 008 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 008-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
                              />
                            </svg>
                          </span>
                        </span>
                        <input
                          class="ant-input ant-input-lg"
                          id="username"
                          placeholder="Username: admin or user"
                          type="text"
                          value=""
                        />
                        <span
                          class="ant-input-suffix"
                        >
                          <span
                            class="ant-input-clear-icon ant-input-clear-icon-hidden"
                            role="button"
                            tabindex="-1"
                          >
                            <span
                              aria-label="close-circle"
                              class="anticon anticon-close-circle"
                              role="img"
                            >
                              <svg
                                aria-hidden="true"
                                data-icon="close-circle"
                                fill="currentColor"
                                fill-rule="evenodd"
                                focusable="false"
                                height="1em"
                                viewBox="64 64 896 896"
                                width="1em"
                              >
                                <path
                                  d="M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"
                                />
                              </svg>
                            </span>
                          </span>
                        </span>
                      </span>
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <div
              class="ant-form-item"
            >
              <div
                class="ant-row ant-form-item-row"
              >
                <div
                  class="ant-col ant-form-item-control"
                >
                  <div
                    class="ant-form-item-control-input"
                  >
                    <div
                      class="ant-form-item-control-input-content"
                    >
                      <span
                        class="ant-input-affix-wrapper ant-input-password ant-input-password-large ant-input-affix-wrapper-lg"
                      >
                        <span
                          class="ant-input-prefix"
                        >
                          <span
                            aria-label="lock"
                            class="anticon anticon-lock"
                            role="img"
                          >
                            <svg
                              aria-hidden="true"
                              data-icon="lock"
                              fill="currentColor"
                              focusable="false"
                              height="1em"
                              viewBox="64 64 896 896"
                              width="1em"
                            >
                              <path
                                d="M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 10-56 0z"
                              />
                            </svg>
                          </span>
                        </span>
                        <input
                          class="ant-input ant-input-lg"
                          id="password"
                          placeholder="Password: ant.design"
                          type="password"
                          value=""
                        />
                        <span
                          class="ant-input-suffix"
                        >
                          <span
                            aria-label="eye-invisible"
                            class="anticon anticon-eye-invisible ant-input-password-icon"
                            role="img"
                            tabindex="-1"
                          >
                            <svg
                              aria-hidden="true"
                              data-icon="eye-invisible"
                              fill="currentColor"
                              focusable="false"
                              height="1em"
                              viewBox="64 64 896 896"
                              width="1em"
                            >
                              <path
                                d="M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z"
                              />
                              <path
                                d="M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z"
                              />
                            </svg>
                          </span>
                        </span>
                      </span>
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <div
              style="margin-bottom: 24px;"
            >
              <label
                class="ant-checkbox-wrapper ant-checkbox-wrapper-checked"
              >
                <span
                  class="ant-checkbox ant-wave-target ant-checkbox-checked"
                >
                  <input
                    checked=""
                    class="ant-checkbox-input"
                    id="autoLogin"
                    type="checkbox"
                  />
                  <span
                    class="ant-checkbox-inner"
                  />
                </span>
                <span>
                  Remember me
                </span>
              </label>
              <a
                style="float: right;"
              >
                Forgot Password ?
              </a>
            </div>
            <button
              class="ant-btn ant-btn-primary ant-btn-lg"
              style="width: 100%;"
              type="button"
            >
              <span>
                Login
              </span>
            </button>
          </form>
          <div
            class="ant-pro-form-login-main-other "
          >
            Login with :
            <span
              aria-label="alipay-circle"
              class="anticon anticon-alipay-circle css-18yqg2u"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="alipay-circle"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="64 64 896 896"
                width="1em"
              >
                <path
                  d="M308.6 545.7c-19.8 2-57.1 10.7-77.4 28.6-61 53-24.5 150 99 150 71.8 0 143.5-45.7 199.8-119-80.2-38.9-148.1-66.8-221.4-59.6zm460.5 67c100.1 33.4 154.7 43 166.7 44.8A445.9 445.9 0 00960 512c0-247.4-200.6-448-448-448S64 264.6 64 512s200.6 448 448 448c155.9 0 293.2-79.7 373.5-200.5-75.6-29.8-213.6-85-286.8-120.1-69.9 85.7-160.1 137.8-253.7 137.8-158.4 0-212.1-138.1-137.2-229 16.3-19.8 44.2-38.7 87.3-49.4 67.5-16.5 175 10.3 275.7 43.4 18.1-33.3 33.4-69.9 44.7-108.9H305.1V402h160v-56.2H271.3v-31.3h193.8v-80.1s0-13.5 13.7-13.5H557v93.6h191.7v31.3H557.1V402h156.4c-15 61.1-37.7 117.4-66.2 166.8 47.5 17.1 90.1 33.3 121.8 43.9z"
                />
              </svg>
            </span>
            <span
              aria-label="taobao-circle"
              class="anticon anticon-taobao-circle css-18yqg2u"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="taobao-circle"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="64 64 896 896"
                width="1em"
              >
                <path
                  d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zM315.7 291.5c27.3 0 49.5 22.1 49.5 49.4s-22.1 49.4-49.5 49.4a49.4 49.4 0 110-98.8zM366.9 578c-13.6 42.3-10.2 26.7-64.4 144.5l-78.5-49s87.7-79.8 105.6-116.2c19.2-38.4-21.1-58.9-21.1-58.9l-60.2-37.5 32.7-50.2c45.4 33.7 48.7 36.6 79.2 67.2 23.8 23.9 20.7 56.8 6.7 100.1zm427.2 55c-15.3 143.8-202.4 90.3-202.4 90.3l10.2-41.1 43.3 9.3c80 5 72.3-64.9 72.3-64.9V423c.6-77.3-72.6-85.4-204.2-38.3l30.6 8.3c-2.5 9-12.5 23.2-25.2 38.6h176v35.6h-99.1v44.5h98.7v35.7h-98.7V622c14.9-4.8 28.6-11.5 40.5-20.5l-8.7-32.5 46.5-14.4 38.8 94.9-57.3 23.9-10.2-37.8c-25.6 19.5-78.8 48-171.8 45.4-99.2 2.6-73.7-112-73.7-112l2.5-1.3H472c-.5 14.7-6.6 38.7 1.7 51.8 6.8 10.8 24.2 12.6 35.3 13.1 1.3.1 2.6.1 3.9.1v-85.3h-101v-35.7h101v-44.5H487c-22.7 24.1-43.5 44.1-43.5 44.1l-30.6-26.7c21.7-22.9 43.3-59.1 56.8-83.2-10.9 4.4-22 9.2-33.6 14.2-11.2 14.3-24.2 29-38.7 43.5.5.8-50-28.4-50-28.4 52.2-44.4 81.4-139.9 81.4-139.9l72.5 20.4s-5.9 14-18.4 35.6c290.3-82.3 307.4 50.5 307.4 50.5s19.1 91.8 3.8 235.7z"
                />
              </svg>
            </span>
            <span
              aria-label="weibo-circle"
              class="anticon anticon-weibo-circle css-18yqg2u"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="weibo-circle"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="64 64 896 896"
                width="1em"
              >
                <path
                  d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-44.4 672C353.1 736 236 680.4 236 588.9c0-47.8 30.2-103.1 82.3-155.3 69.5-69.6 150.6-101.4 181.1-70.8 13.5 13.5 14.8 36.8 6.1 64.6-4.5 14 13.1 6.3 13.1 6.3 56.2-23.6 105.2-25 123.1.7 9.6 13.7 8.6 32.8-.2 55.1-4.1 10.2 1.3 11.8 9 14.1 31.7 9.8 66.9 33.6 66.9 75.5.2 69.5-99.7 156.9-249.8 156.9zm207.3-290.8a34.9 34.9 0 00-7.2-34.1 34.68 34.68 0 00-33.1-10.7 18.24 18.24 0 01-7.6-35.7c24.1-5.1 50.1 2.3 67.7 21.9 17.7 19.6 22.4 46.3 14.9 69.8a18.13 18.13 0 01-22.9 11.7 18.18 18.18 0 01-11.8-22.9zm106 34.3s0 .1 0 0a21.1 21.1 0 01-26.6 13.7 21.19 21.19 0 01-13.6-26.7c11-34.2 4-73.2-21.7-101.8a104.04 104.04 0 00-98.9-32.1 21.14 21.14 0 01-25.1-16.3 21.07 21.07 0 0116.2-25.1c49.4-10.5 102.8 4.8 139.1 45.1 36.3 40.2 46.1 95.1 30.6 143.2zm-334.5 6.1c-91.4 9-160.7 65.1-154.7 125.2 5.9 60.1 84.8 101.5 176.2 92.5 91.4-9.1 160.7-65.1 154.7-125.3-5.9-60.1-84.8-101.5-176.2-92.4zm80.2 141.7c-18.7 42.3-72.3 64.8-117.8 50.1-43.9-14.2-62.5-57.7-43.3-96.8 18.9-38.4 68-60.1 111.5-48.8 45 11.7 68 54.2 49.6 95.5zm-93-32.2c-14.2-5.9-32.4.2-41.2 13.9-8.8 13.8-4.7 30.2 9.3 36.6 14.3 6.5 33.2.3 42-13.8 8.8-14.3 4.2-30.6-10.1-36.7zm34.9-14.5c-5.4-2.2-12.2.5-15.4 5.8-3.1 5.4-1.4 11.5 4.1 13.8 5.5 2.3 12.6-.3 15.8-5.8 3-5.6 1-11.8-4.5-13.8z"
                />
              </svg>
            </span>
          </div>
        </div>
      </div>
    </div>
    <footer
      class="ant-layout-footer css-dev-only-do-not-override-17a39f8"
      style="padding: 0px; background: none;"
    >
      <div
        class="ant-pro-global-footer"
      >
        <div
          class="ant-pro-global-footer-list"
        >
          <a
            class="ant-pro-global-footer-list-link"
            href="https://pro.ant.design"
            rel="noreferrer"
            target="_blank"
            title="Ant Design Pro"
          >
            Ant Design Pro
          </a>
          <a
            class="ant-pro-global-footer-list-link"
            href="https://github.com/ant-design/ant-design-pro"
            rel="noreferrer"
            target="_blank"
            title="github"
          >
            <span
              aria-label="github"
              class="anticon anticon-github"
              role="img"
            >
              <svg
                aria-hidden="true"
                data-icon="github"
                fill="currentColor"
                focusable="false"
                height="1em"
                viewBox="64 64 896 896"
                width="1em"
              >
                <path
                  d="M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9a127.5 127.5 0 0138.1 91v112.5c.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z"
                />
              </svg>
            </span>
          </a>
          <a
            class="ant-pro-global-footer-list-link"
            href="https://ant.design"
            rel="noreferrer"
            target="_blank"
            title="Ant Design"
          >
            Ant Design
          </a>
        </div>
        <div
          class="ant-pro-global-footer-copyright"
        >
          <span
            aria-label="copyright"
            class="anticon anticon-copyright"
            role="img"
          >
            <svg
              aria-hidden="true"
              data-icon="copyright"
              fill="currentColor"
              focusable="false"
              height="1em"
              viewBox="64 64 896 896"
              width="1em"
            >
              <path
                d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm5.6-532.7c53 0 89 33.8 93 83.4.3 4.2 3.8 7.4 8 7.4h56.7c2.6 0 4.7-2.1 4.7-4.7 0-86.7-68.4-147.4-162.7-147.4C407.4 290 344 364.2 344 486.8v52.3C344 660.8 407.4 734 517.3 734c94 0 162.7-58.8 162.7-141.4 0-2.6-2.1-4.7-4.7-4.7h-56.8c-4.2 0-7.6 3.2-8 7.3-4.2 46.1-40.1 77.8-93 77.8-65.3 0-102.1-47.9-102.1-133.6v-52.6c.1-87 37-135.5 102.2-135.5z"
              />
            </svg>
          </span>
           2023 Produced by Ant Financial Experience Department
        </div>
      </div>
    </footer>
  </div>
</DocumentFragment>
`;
zy-asrs-flow/src/pages/User/Login/index.tsx
New file
@@ -0,0 +1,371 @@
import { Footer } from '@/components';
import { login } from '@/services/ant-design-pro/api';
import { getFakeCaptcha } from '@/services/ant-design-pro/login';
import {
  AlipayCircleOutlined,
  LockOutlined,
  MobileOutlined,
  TaobaoCircleOutlined,
  UserOutlined,
  WeiboCircleOutlined,
} from '@ant-design/icons';
import {
  LoginForm,
  ProFormCaptcha,
  ProFormCheckbox,
  ProFormText,
} from '@ant-design/pro-components';
import { FormattedMessage, history, SelectLang, useIntl, useModel, Helmet } from '@umijs/max';
import { Alert, message, Tabs } from 'antd';
import Settings from '../../../../config/defaultSettings';
import React, { useState } from 'react';
import { flushSync } from 'react-dom';
import { createStyles } from 'antd-style';
const useStyles = createStyles(({ token }) => {
  return {
    action: {
      marginLeft: '8px',
      color: 'rgba(0, 0, 0, 0.2)',
      fontSize: '24px',
      verticalAlign: 'middle',
      cursor: 'pointer',
      transition: 'color 0.3s',
      '&:hover': {
        color: token.colorPrimaryActive,
      },
    },
    lang: {
      width: 42,
      height: 42,
      lineHeight: '42px',
      position: 'fixed',
      right: 16,
      borderRadius: token.borderRadius,
      ':hover': {
        backgroundColor: token.colorBgTextHover,
      },
    },
    container: {
      display: 'flex',
      flexDirection: 'column',
      height: '100vh',
      overflow: 'auto',
      backgroundImage:
        "url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr')",
      backgroundSize: '100% 100%',
    },
  };
});
const ActionIcons = () => {
  const { styles } = useStyles();
  return (
    <>
      <AlipayCircleOutlined key="AlipayCircleOutlined" className={styles.action} />
      <TaobaoCircleOutlined key="TaobaoCircleOutlined" className={styles.action} />
      <WeiboCircleOutlined key="WeiboCircleOutlined" className={styles.action} />
    </>
  );
};
const Lang = () => {
  const { styles } = useStyles();
  return (
    <div className={styles.lang} data-lang>
      {SelectLang && <SelectLang />}
    </div>
  );
};
const LoginMessage: React.FC<{
  content: string;
}> = ({ content }) => {
  return (
    <Alert
      style={{
        marginBottom: 24,
      }}
      message={content}
      type="error"
      showIcon
    />
  );
};
const Login: React.FC = () => {
  const [userLoginState, setUserLoginState] = useState<API.LoginResult>({});
  const [type, setType] = useState<string>('account');
  const { initialState, setInitialState } = useModel('@@initialState');
  const { styles } = useStyles();
  const intl = useIntl();
  const fetchUserInfo = async () => {
    const userInfo = await initialState?.fetchUserInfo?.();
    if (userInfo) {
      flushSync(() => {
        setInitialState((s) => ({
          ...s,
          currentUser: userInfo,
        }));
      });
    }
  };
  const handleSubmit = async (values: API.LoginParams) => {
    try {
      // 登录
      const msg = await login({ ...values, type });
      if (msg.status === 'ok') {
        const defaultLoginSuccessMessage = intl.formatMessage({
          id: 'pages.login.success',
          defaultMessage: '登录成功!',
        });
        message.success(defaultLoginSuccessMessage);
        await fetchUserInfo();
        const urlParams = new URL(window.location.href).searchParams;
        history.push(urlParams.get('redirect') || '/');
        return;
      }
      console.log(msg);
      // 如果失败去设置用户错误信息
      setUserLoginState(msg);
    } catch (error) {
      const defaultLoginFailureMessage = intl.formatMessage({
        id: 'pages.login.failure',
        defaultMessage: '登录失败,请重试!',
      });
      console.log(error);
      message.error(defaultLoginFailureMessage);
    }
  };
  const { status, type: loginType } = userLoginState;
  return (
    <div className={styles.container}>
      <Helmet>
        <title>
          {intl.formatMessage({
            id: 'menu.login',
            defaultMessage: '登录页',
          })}
          - {Settings.title}
        </title>
      </Helmet>
      <Lang />
      <div
        style={{
          flex: '1',
          padding: '32px 0',
        }}
      >
        <LoginForm
          contentStyle={{
            minWidth: 280,
            maxWidth: '75vw',
          }}
          logo={<img alt="logo" src="/logo.svg" />}
          title="Ant Design"
          subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })}
          initialValues={{
            autoLogin: true,
          }}
          actions={[
            <FormattedMessage
              key="loginWith"
              id="pages.login.loginWith"
              defaultMessage="其他登录方式"
            />,
            <ActionIcons key="icons" />,
          ]}
          onFinish={async (values) => {
            await handleSubmit(values as API.LoginParams);
          }}
        >
          <Tabs
            activeKey={type}
            onChange={setType}
            centered
            items={[
              {
                key: 'account',
                label: intl.formatMessage({
                  id: 'pages.login.accountLogin.tab',
                  defaultMessage: '账户密码登录',
                }),
              },
              {
                key: 'mobile',
                label: intl.formatMessage({
                  id: 'pages.login.phoneLogin.tab',
                  defaultMessage: '手机号登录',
                }),
              },
            ]}
          />
          {status === 'error' && loginType === 'account' && (
            <LoginMessage
              content={intl.formatMessage({
                id: 'pages.login.accountLogin.errorMessage',
                defaultMessage: '账户或密码错误(admin/ant.design)',
              })}
            />
          )}
          {type === 'account' && (
            <>
              <ProFormText
                name="username"
                fieldProps={{
                  size: 'large',
                  prefix: <UserOutlined />,
                }}
                placeholder={intl.formatMessage({
                  id: 'pages.login.username.placeholder',
                  defaultMessage: '用户名: admin or user',
                })}
                rules={[
                  {
                    required: true,
                    message: (
                      <FormattedMessage
                        id="pages.login.username.required"
                        defaultMessage="请输入用户名!"
                      />
                    ),
                  },
                ]}
              />
              <ProFormText.Password
                name="password"
                fieldProps={{
                  size: 'large',
                  prefix: <LockOutlined />,
                }}
                placeholder={intl.formatMessage({
                  id: 'pages.login.password.placeholder',
                  defaultMessage: '密码: ant.design',
                })}
                rules={[
                  {
                    required: true,
                    message: (
                      <FormattedMessage
                        id="pages.login.password.required"
                        defaultMessage="请输入密码!"
                      />
                    ),
                  },
                ]}
              />
            </>
          )}
          {status === 'error' && loginType === 'mobile' && <LoginMessage content="验证码错误" />}
          {type === 'mobile' && (
            <>
              <ProFormText
                fieldProps={{
                  size: 'large',
                  prefix: <MobileOutlined />,
                }}
                name="mobile"
                placeholder={intl.formatMessage({
                  id: 'pages.login.phoneNumber.placeholder',
                  defaultMessage: '手机号',
                })}
                rules={[
                  {
                    required: true,
                    message: (
                      <FormattedMessage
                        id="pages.login.phoneNumber.required"
                        defaultMessage="请输入手机号!"
                      />
                    ),
                  },
                  {
                    pattern: /^1\d{10}$/,
                    message: (
                      <FormattedMessage
                        id="pages.login.phoneNumber.invalid"
                        defaultMessage="手机号格式错误!"
                      />
                    ),
                  },
                ]}
              />
              <ProFormCaptcha
                fieldProps={{
                  size: 'large',
                  prefix: <LockOutlined />,
                }}
                captchaProps={{
                  size: 'large',
                }}
                placeholder={intl.formatMessage({
                  id: 'pages.login.captcha.placeholder',
                  defaultMessage: '请输入验证码',
                })}
                captchaTextRender={(timing, count) => {
                  if (timing) {
                    return `${count} ${intl.formatMessage({
                      id: 'pages.getCaptchaSecondText',
                      defaultMessage: '获取验证码',
                    })}`;
                  }
                  return intl.formatMessage({
                    id: 'pages.login.phoneLogin.getVerificationCode',
                    defaultMessage: '获取验证码',
                  });
                }}
                name="captcha"
                rules={[
                  {
                    required: true,
                    message: (
                      <FormattedMessage
                        id="pages.login.captcha.required"
                        defaultMessage="请输入验证码!"
                      />
                    ),
                  },
                ]}
                onGetCaptcha={async (phone) => {
                  const result = await getFakeCaptcha({
                    phone,
                  });
                  if (!result) {
                    return;
                  }
                  message.success('获取验证码成功!验证码为:1234');
                }}
              />
            </>
          )}
          <div
            style={{
              marginBottom: 24,
            }}
          >
            <ProFormCheckbox noStyle name="autoLogin">
              <FormattedMessage id="pages.login.rememberMe" defaultMessage="自动登录" />
            </ProFormCheckbox>
            <a
              style={{
                float: 'right',
              }}
            >
              <FormattedMessage id="pages.login.forgotPassword" defaultMessage="忘记密码" />
            </a>
          </div>
        </LoginForm>
      </div>
      <Footer />
    </div>
  );
};
export default Login;
zy-asrs-flow/src/pages/User/Login/login.test.tsx
New file
@@ -0,0 +1,96 @@
import { render, fireEvent, act } from '@testing-library/react';
import React from 'react';
import { TestBrowser } from '@@/testBrowser';
// @ts-ignore
import { startMock } from '@@/requestRecordMock';
const waitTime = (time: number = 100) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(true);
    }, time);
  });
};
let server: {
  close: () => void;
};
describe('Login Page', () => {
  beforeAll(async () => {
    server = await startMock({
      port: 8000,
      scene: 'login',
    });
  });
  afterAll(() => {
    server?.close();
  });
  it('should show login form', async () => {
    const historyRef = React.createRef<any>();
    const rootContainer = render(
      <TestBrowser
        historyRef={historyRef}
        location={{
          pathname: '/user/login',
        }}
      />,
    );
    await rootContainer.findAllByText('Ant Design');
    act(() => {
      historyRef.current?.push('/user/login');
    });
    expect(rootContainer.baseElement?.querySelector('.ant-pro-form-login-desc')?.textContent).toBe(
      'Ant Design is the most influential web design specification in Xihu district',
    );
    expect(rootContainer.asFragment()).toMatchSnapshot();
    rootContainer.unmount();
  });
  it('should login success', async () => {
    const historyRef = React.createRef<any>();
    const rootContainer = render(
      <TestBrowser
        historyRef={historyRef}
        location={{
          pathname: '/user/login',
        }}
      />,
    );
    await rootContainer.findAllByText('Ant Design');
    const userNameInput = await rootContainer.findByPlaceholderText('Username: admin or user');
    act(() => {
      fireEvent.change(userNameInput, { target: { value: 'admin' } });
    });
    const passwordInput = await rootContainer.findByPlaceholderText('Password: ant.design');
    act(() => {
      fireEvent.change(passwordInput, { target: { value: 'ant.design' } });
    });
    await (await rootContainer.findByText('Login')).click();
    // 等待接口返回结果
    await waitTime(5000);
    await rootContainer.findAllByText('Ant Design Pro');
    expect(rootContainer.asFragment()).toMatchSnapshot();
    await waitTime(2000);
    rootContainer.unmount();
  });
});
zy-asrs-flow/src/pages/Welcome.tsx
New file
@@ -0,0 +1,164 @@
import { PageContainer } from '@ant-design/pro-components';
import { useModel } from '@umijs/max';
import { Card, theme } from 'antd';
import React from 'react';
/**
 * 每个单独的卡片,为了复用样式抽成了组件
 * @param param0
 * @returns
 */
const InfoCard: React.FC<{
  title: string;
  index: number;
  desc: string;
  href: string;
}> = ({ title, href, index, desc }) => {
  const { useToken } = theme;
  const { token } = useToken();
  return (
    <div
      style={{
        backgroundColor: token.colorBgContainer,
        boxShadow: token.boxShadow,
        borderRadius: '8px',
        fontSize: '14px',
        color: token.colorTextSecondary,
        lineHeight: '22px',
        padding: '16px 19px',
        minWidth: '220px',
        flex: 1,
      }}
    >
      <div
        style={{
          display: 'flex',
          gap: '4px',
          alignItems: 'center',
        }}
      >
        <div
          style={{
            width: 48,
            height: 48,
            lineHeight: '22px',
            backgroundSize: '100%',
            textAlign: 'center',
            padding: '8px 16px 16px 12px',
            color: '#FFF',
            fontWeight: 'bold',
            backgroundImage:
              "url('https://gw.alipayobjects.com/zos/bmw-prod/daaf8d50-8e6d-4251-905d-676a24ddfa12.svg')",
          }}
        >
          {index}
        </div>
        <div
          style={{
            fontSize: '16px',
            color: token.colorText,
            paddingBottom: 8,
          }}
        >
          {title}
        </div>
      </div>
      <div
        style={{
          fontSize: '14px',
          color: token.colorTextSecondary,
          textAlign: 'justify',
          lineHeight: '22px',
          marginBottom: 8,
        }}
      >
        {desc}
      </div>
      <a href={href} target="_blank" rel="noreferrer">
        了解更多 {'>'}
      </a>
    </div>
  );
};
const Welcome: React.FC = () => {
  const { token } = theme.useToken();
  const { initialState } = useModel('@@initialState');
  return (
    <PageContainer>
      <Card
        style={{
          borderRadius: 8,
        }}
        bodyStyle={{
          backgroundImage:
            initialState?.settings?.navTheme === 'realDark'
              ? 'background-image: linear-gradient(75deg, #1A1B1F 0%, #191C1F 100%)'
              : 'background-image: linear-gradient(75deg, #FBFDFF 0%, #F5F7FF 100%)',
        }}
      >
        <div
          style={{
            backgroundPosition: '100% -30%',
            backgroundRepeat: 'no-repeat',
            backgroundSize: '274px auto',
            backgroundImage:
              "url('https://gw.alipayobjects.com/mdn/rms_a9745b/afts/img/A*BuFmQqsB2iAAAAAAAAAAAAAAARQnAQ')",
          }}
        >
          <div
            style={{
              fontSize: '20px',
              color: token.colorTextHeading,
            }}
          >
            欢迎使用 Ant Design Pro
          </div>
          <p
            style={{
              fontSize: '14px',
              color: token.colorTextSecondary,
              lineHeight: '22px',
              marginTop: 16,
              marginBottom: 32,
              width: '65%',
            }}
          >
            Ant Design Pro 是一个整合了 umi,Ant Design 和 ProComponents
            的脚手架方案。致力于在设计规范和基础组件的基础上,继续向上构建,提炼出典型模板/业务组件/配套设计资源,进一步提升企业级中后台产品设计研发过程中的『用户』和『设计者』的体验。
          </p>
          <div
            style={{
              display: 'flex',
              flexWrap: 'wrap',
              gap: 16,
            }}
          >
            <InfoCard
              index={1}
              href="https://umijs.org/docs/introduce/introduce"
              title="了解 umi"
              desc="umi 是一个可扩展的企业级前端应用框架,umi 以路由为基础的,同时支持配置式路由和约定式路由,保证路由的功能完备,并以此进行功能扩展。"
            />
            <InfoCard
              index={2}
              title="了解 ant design"
              href="https://ant.design"
              desc="antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。"
            />
            <InfoCard
              index={3}
              title="了解 Pro Components"
              href="https://procomponents.ant.design"
              desc="ProComponents 是一个基于 Ant Design 做了更高抽象的模板组件,以 一个组件就是一个页面为开发理念,为中后台开发带来更好的体验。"
            />
          </div>
        </div>
      </Card>
    </PageContainer>
  );
};
export default Welcome;
zy-asrs-flow/src/pages/_defaultProps.jsx
File was deleted
zy-asrs-flow/src/pages/system/host/index.jsx
New file
@@ -0,0 +1,16 @@
import React from 'react';
import {
    PageContainer,
} from '@ant-design/pro-components';
const User = () => {
    return (
        <>
            <PageContainer>
                <h1>Hello world</h1>
            </PageContainer>
        </>
    )
}
export default User;
zy-asrs-flow/src/pages/system/menu/index.jsx
New file
@@ -0,0 +1,16 @@
import React from 'react';
import {
    PageContainer,
} from '@ant-design/pro-components';
const User = () => {
    return (
        <>
            <PageContainer>
                <h1>Hello world</h1>
            </PageContainer>
        </>
    )
}
export default User;
zy-asrs-flow/src/pages/system/role/index.jsx
New file
@@ -0,0 +1,16 @@
import React from 'react';
import {
    PageContainer,
} from '@ant-design/pro-components';
const User = () => {
    return (
        <>
            <PageContainer>
                <h1>Hello world</h1>
            </PageContainer>
        </>
    )
}
export default User;
zy-asrs-flow/src/pages/system/user-login/index.jsx
New file
@@ -0,0 +1,16 @@
import React from 'react';
import {
    PageContainer,
} from '@ant-design/pro-components';
const User = () => {
    return (
        <>
            <PageContainer>
                <h1>Hello world</h1>
            </PageContainer>
        </>
    )
}
export default User;
zy-asrs-flow/src/pages/system/user/index.jsx
New file
@@ -0,0 +1,16 @@
import React from 'react';
import {
    PageContainer,
} from '@ant-design/pro-components';
const User = () => {
    return (
        <>
            <PageContainer>
                <h1>User Hello world</h1>
            </PageContainer>
        </>
    )
}
export default User;
zy-asrs-flow/src/requestErrorConfig.ts
New file
@@ -0,0 +1,109 @@
import type { RequestOptions } from '@@/plugin-request/request';
import type { RequestConfig } from '@umijs/max';
import { message, notification } from 'antd';
// 错误处理方案: 错误类型
enum ErrorShowType {
  SILENT = 0,
  WARN_MESSAGE = 1,
  ERROR_MESSAGE = 2,
  NOTIFICATION = 3,
  REDIRECT = 9,
}
// 与后端约定的响应数据格式
interface ResponseStructure {
  success: boolean;
  data: any;
  errorCode?: number;
  errorMessage?: string;
  showType?: ErrorShowType;
}
/**
 * @name 错误处理
 * pro 自带的错误处理, 可以在这里做自己的改动
 * @doc https://umijs.org/docs/max/request#配置
 */
export const errorConfig: RequestConfig = {
  // 错误处理: umi@3 的错误处理方案。
  errorConfig: {
    // 错误抛出
    errorThrower: (res) => {
      const { success, data, errorCode, errorMessage, showType } =
        res as unknown as ResponseStructure;
      if (!success) {
        const error: any = new Error(errorMessage);
        error.name = 'BizError';
        error.info = { errorCode, errorMessage, showType, data };
        throw error; // 抛出自制的错误
      }
    },
    // 错误接收及处理
    errorHandler: (error: any, opts: any) => {
      if (opts?.skipErrorHandler) throw error;
      // 我们的 errorThrower 抛出的错误。
      if (error.name === 'BizError') {
        const errorInfo: ResponseStructure | undefined = error.info;
        if (errorInfo) {
          const { errorMessage, errorCode } = errorInfo;
          switch (errorInfo.showType) {
            case ErrorShowType.SILENT:
              // do nothing
              break;
            case ErrorShowType.WARN_MESSAGE:
              message.warning(errorMessage);
              break;
            case ErrorShowType.ERROR_MESSAGE:
              message.error(errorMessage);
              break;
            case ErrorShowType.NOTIFICATION:
              notification.open({
                description: errorMessage,
                message: errorCode,
              });
              break;
            case ErrorShowType.REDIRECT:
              // TODO: redirect
              break;
            default:
              message.error(errorMessage);
          }
        }
      } else if (error.response) {
        // Axios 的错误
        // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围
        message.error(`Response status:${error.response.status}`);
      } else if (error.request) {
        // 请求已经成功发起,但没有收到响应
        // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例,
        // 而在node.js中是 http.ClientRequest 的实例
        message.error('None response! Please retry.');
      } else {
        // 发送请求时出了点问题
        message.error('Request error, please retry.');
      }
    },
  },
  // 请求拦截器
  requestInterceptors: [
    (config: RequestOptions) => {
      // 拦截请求配置,进行个性化处理。
      const url = config?.url?.concat('?token = 123');
      return { ...config, url };
    },
  ],
  // 响应拦截器
  responseInterceptors: [
    (response) => {
      // 拦截响应数据,进行个性化处理
      const { data } = response as unknown as ResponseStructure;
      if (data?.success === false) {
        message.error('请求失败!');
      }
      return response;
    },
  ],
};
zy-asrs-flow/src/router/index.jsx
File was deleted
zy-asrs-flow/src/service-worker.js
New file
@@ -0,0 +1,65 @@
/* eslint-disable no-restricted-globals */
/* eslint-disable no-underscore-dangle */
/* globals workbox */
workbox.core.setCacheNameDetails({
  prefix: 'antd-pro',
  suffix: 'v5',
});
// Control all opened tabs ASAP
workbox.clientsClaim();
/**
 * Use precaching list generated by workbox in build process.
 * https://developers.google.com/web/tools/workbox/reference-docs/latest/workbox.precaching
 */
workbox.precaching.precacheAndRoute(self.__precacheManifest || []);
/**
 * Register a navigation route.
 * https://developers.google.com/web/tools/workbox/modules/workbox-routing#how_to_register_a_navigation_route
 */
workbox.routing.registerNavigationRoute('/index.html');
/**
 * Use runtime cache:
 * https://developers.google.com/web/tools/workbox/reference-docs/latest/workbox.routing#.registerRoute
 *
 * Workbox provides all common caching strategies including CacheFirst, NetworkFirst etc.
 * https://developers.google.com/web/tools/workbox/reference-docs/latest/workbox.strategies
 */
/** Handle API requests */
workbox.routing.registerRoute(/\/api\//, workbox.strategies.networkFirst());
/** Handle third party requests */
workbox.routing.registerRoute(
  /^https:\/\/gw\.alipayobjects\.com\//,
  workbox.strategies.networkFirst(),
);
workbox.routing.registerRoute(
  /^https:\/\/cdnjs\.cloudflare\.com\//,
  workbox.strategies.networkFirst(),
);
workbox.routing.registerRoute(/\/color.less/, workbox.strategies.networkFirst());
/** Response to client after skipping waiting with MessageChannel */
addEventListener('message', (event) => {
  const replyPort = event.ports[0];
  const message = event.data;
  if (replyPort && message && message.type === 'skip-waiting') {
    event.waitUntil(
      self.skipWaiting().then(
        () => {
          replyPort.postMessage({
            error: null,
          });
        },
        (error) => {
          replyPort.postMessage({
            error,
          });
        },
      ),
    );
  }
});
zy-asrs-flow/src/services/ant-design-pro/api.ts
New file
@@ -0,0 +1,94 @@
// @ts-ignore
/* eslint-disable */
import { request } from '@umijs/max';
/** 获取当前的用户 GET /api/currentUser */
export async function currentUser(options?: { [key: string]: any }) {
  return request<{
    data: API.CurrentUser;
  }>('/api/currentUser', {
    method: 'GET',
    ...(options || {}),
  });
}
/** 退出登录接口 POST /api/login/outLogin */
export async function outLogin(options?: { [key: string]: any }) {
  return request<Record<string, any>>('/api/login/outLogin', {
    method: 'POST',
    ...(options || {}),
  });
}
/** 登录接口 POST /api/login/account */
export async function login(body: API.LoginParams, options?: { [key: string]: any }) {
  return request<API.LoginResult>('/api/login/account', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 此处后端没有提供注释 GET /api/notices */
export async function getNotices(options?: { [key: string]: any }) {
  return request<API.NoticeIconList>('/api/notices', {
    method: 'GET',
    ...(options || {}),
  });
}
/** 获取规则列表 GET /api/rule */
export async function rule(
  params: {
    // query
    /** 当前的页码 */
    current?: number;
    /** 页面的容量 */
    pageSize?: number;
  },
  options?: { [key: string]: any },
) {
  return request<API.RuleList>('/api/rule', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 更新规则 PUT /api/rule */
export async function updateRule(options?: { [key: string]: any }) {
  return request<API.RuleListItem>('/api/rule', {
    method: 'POST',
    data:{
      method: 'update',
      ...(options || {}),
    }
  });
}
/** 新建规则 POST /api/rule */
export async function addRule(options?: { [key: string]: any }) {
  return request<API.RuleListItem>('/api/rule', {
    method: 'POST',
    data:{
      method: 'post',
      ...(options || {}),
    }
  });
}
/** 删除规则 DELETE /api/rule */
export async function removeRule(options?: { [key: string]: any }) {
  return request<Record<string, any>>('/api/rule', {
    method: 'POST',
    data:{
      method: 'delete',
      ...(options || {}),
    }
  });
}
zy-asrs-flow/src/services/ant-design-pro/index.ts
New file
@@ -0,0 +1,10 @@
// @ts-ignore
/* eslint-disable */
// API 更新时间:
// API 唯一标识:
import * as api from './api';
import * as login from './login';
export default {
  api,
  login,
};
zy-asrs-flow/src/services/ant-design-pro/login.ts
New file
@@ -0,0 +1,21 @@
// @ts-ignore
/* eslint-disable */
import { request } from '@umijs/max';
/** 发送验证码 POST /api/login/captcha */
export async function getFakeCaptcha(
  params: {
    // query
    /** 手机号 */
    phone?: string;
  },
  options?: { [key: string]: any },
) {
  return request<API.FakeCaptcha>('/api/login/captcha', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
zy-asrs-flow/src/services/ant-design-pro/typings.d.ts
New file
@@ -0,0 +1,101 @@
// @ts-ignore
/* eslint-disable */
declare namespace API {
  type CurrentUser = {
    name?: string;
    avatar?: string;
    userid?: string;
    email?: string;
    signature?: string;
    title?: string;
    group?: string;
    tags?: { key?: string; label?: string }[];
    notifyCount?: number;
    unreadCount?: number;
    country?: string;
    access?: string;
    geographic?: {
      province?: { label?: string; key?: string };
      city?: { label?: string; key?: string };
    };
    address?: string;
    phone?: string;
  };
  type LoginResult = {
    status?: string;
    type?: string;
    currentAuthority?: string;
  };
  type PageParams = {
    current?: number;
    pageSize?: number;
  };
  type RuleListItem = {
    key?: number;
    disabled?: boolean;
    href?: string;
    avatar?: string;
    name?: string;
    owner?: string;
    desc?: string;
    callNo?: number;
    status?: number;
    updatedAt?: string;
    createdAt?: string;
    progress?: number;
  };
  type RuleList = {
    data?: RuleListItem[];
    /** 列表的内容总数 */
    total?: number;
    success?: boolean;
  };
  type FakeCaptcha = {
    code?: number;
    status?: string;
  };
  type LoginParams = {
    username?: string;
    password?: string;
    autoLogin?: boolean;
    type?: string;
  };
  type ErrorResponse = {
    /** 业务约定的错误码 */
    errorCode: string;
    /** 业务上的错误信息 */
    errorMessage?: string;
    /** 业务上的请求是否成功 */
    success?: boolean;
  };
  type NoticeIconList = {
    data?: NoticeIconItem[];
    /** 列表的内容总数 */
    total?: number;
    success?: boolean;
  };
  type NoticeIconItemType = 'notification' | 'message' | 'event';
  type NoticeIconItem = {
    id?: string;
    extra?: string;
    key?: string;
    read?: boolean;
    avatar?: string;
    title?: string;
    status?: string;
    datetime?: string;
    description?: string;
    type?: NoticeIconItemType;
  };
}
zy-asrs-flow/src/services/route.js
New file
@@ -0,0 +1,99 @@
import { request } from '@umijs/max';
import React from 'react';
import { createIcon } from '@/utils/icon-util';
let remoteMenu = null;
export function getRemoteMenu() {
    return remoteMenu;
}
export function setRemoteMenu(data) {
    remoteMenu = data;
}
// export async function getUserInfo(options) {
//     return request('/api/system/user/getInfo', {
//         method: 'GET',
//         ...(options || {}),
//     });
// }
export async function getRouters() {
    return request('/api/auth/menu', {
        baseURL: 'http://localhost:9090/wcs'
    });
}
export async function getRoutersInfo() {
    return getRouters().then((res) => {
        if (res.code === 200) {
            // return res.data;
            const routersInfo = convertCompatRouters(res.data);
            return routersInfo;
        } else {
            return [];
        }
    });
}
export function convertCompatRouters(childrens) {
    const result = childrens.map((item) => {
        return {
            name: item.name,
            path: item.route,
            component: item.component ? '.' + item.component : null,
            icon: createIcon(item.icon),
            // icon: item.icon,
            // hideChildrenInMenu: item.hidden,
            // hideInMenu: item.hidden,
            // authority: item.perms,
            routes: item.children ? convertCompatRouters(item.children) : undefined,
        };
    });
    return result;
}
export function patchRouteWithRemoteMenus(routes) {
    if (remoteMenu === null) { return; }
    let proLayout = null;
    for (const routeItem of routes) {
        if (routeItem.id === 'ant-design-pro-layout') {
            proLayout = routeItem;
            break;
        }
    }
    patchRouteItems(proLayout, remoteMenu);
}
function patchRouteItems(parent, children) {
    for (const menu of children) {
        if (menu.component !== null) {
            // children
            const Component = require(`@/pages${menu.path}/index.jsx`).default
            const newRoute = {
                name: menu.name,
                path: menu.path,
                element: <Component />,
            }
            parent.children.push(newRoute);
            parent.routes.push(newRoute);
        } else {
            // parent
            const newRoute = {
                name: menu.name,
                path: menu.path,
                routes: [],
                children: [],
            }
            parent.routes.push(newRoute);
            if (menu.routes && menu.routes.length > 0) {
                for (const route of menu.routes) {
                    patchRouteItems(newRoute, [route]);
                };
            }
        }
    }
}
zy-asrs-flow/src/services/swagger/index.ts
New file
@@ -0,0 +1,12 @@
// @ts-ignore
/* eslint-disable */
// API 更新时间:
// API 唯一标识:
import * as pet from './pet';
import * as store from './store';
import * as user from './user';
export default {
  pet,
  store,
  user,
};
zy-asrs-flow/src/services/swagger/pet.ts
New file
@@ -0,0 +1,153 @@
// @ts-ignore
/* eslint-disable */
import { request } from '@umijs/max';
/** Update an existing pet PUT /pet */
export async function updatePet(body: API.Pet, options?: { [key: string]: any }) {
  return request<any>('/pet', {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** Add a new pet to the store POST /pet */
export async function addPet(body: API.Pet, options?: { [key: string]: any }) {
  return request<any>('/pet', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** Find pet by ID Returns a single pet GET /pet/${param0} */
export async function getPetById(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.getPetByIdParams,
  options?: { [key: string]: any },
) {
  const { petId: param0, ...queryParams } = params;
  return request<API.Pet>(`/pet/${param0}`, {
    method: 'GET',
    params: { ...queryParams },
    ...(options || {}),
  });
}
/** Updates a pet in the store with form data POST /pet/${param0} */
export async function updatePetWithForm(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.updatePetWithFormParams,
  body: { name?: string; status?: string },
  options?: { [key: string]: any },
) {
  const { petId: param0, ...queryParams } = params;
  const formData = new FormData();
  Object.keys(body).forEach((ele) => {
    const item = (body as any)[ele];
    if (item !== undefined && item !== null) {
      formData.append(
        ele,
        typeof item === 'object' && !(item instanceof File) ? JSON.stringify(item) : item,
      );
    }
  });
  return request<any>(`/pet/${param0}`, {
    method: 'POST',
    params: { ...queryParams },
    data: formData,
    ...(options || {}),
  });
}
/** Deletes a pet DELETE /pet/${param0} */
export async function deletePet(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.deletePetParams & {
    // header
    api_key?: string;
  },
  options?: { [key: string]: any },
) {
  const { petId: param0, ...queryParams } = params;
  return request<any>(`/pet/${param0}`, {
    method: 'DELETE',
    headers: {},
    params: { ...queryParams },
    ...(options || {}),
  });
}
/** uploads an image POST /pet/${param0}/uploadImage */
export async function uploadFile(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.uploadFileParams,
  body: { additionalMetadata?: string; file?: string },
  file?: File,
  options?: { [key: string]: any },
) {
  const { petId: param0, ...queryParams } = params;
  const formData = new FormData();
  if (file) {
    formData.append('file', file);
  }
  Object.keys(body).forEach((ele) => {
    const item = (body as any)[ele];
    if (item !== undefined && item !== null) {
      formData.append(
        ele,
        typeof item === 'object' && !(item instanceof File) ? JSON.stringify(item) : item,
      );
    }
  });
  return request<API.ApiResponse>(`/pet/${param0}/uploadImage`, {
    method: 'POST',
    params: { ...queryParams },
    data: formData,
    requestType: 'form',
    ...(options || {}),
  });
}
/** Finds Pets by status Multiple status values can be provided with comma separated strings GET /pet/findByStatus */
export async function findPetsByStatus(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.findPetsByStatusParams,
  options?: { [key: string]: any },
) {
  return request<API.Pet[]>('/pet/findByStatus', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** Finds Pets by tags Muliple tags can be provided with comma separated strings. Use         tag1, tag2, tag3 for testing. GET /pet/findByTags */
export async function findPetsByTags(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.findPetsByTagsParams,
  options?: { [key: string]: any },
) {
  return request<API.Pet[]>('/pet/findByTags', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
zy-asrs-flow/src/services/swagger/store.ts
New file
@@ -0,0 +1,48 @@
// @ts-ignore
/* eslint-disable */
import { request } from '@umijs/max';
/** Returns pet inventories by status Returns a map of status codes to quantities GET /store/inventory */
export async function getInventory(options?: { [key: string]: any }) {
  return request<Record<string, any>>('/store/inventory', {
    method: 'GET',
    ...(options || {}),
  });
}
/** Place an order for a pet POST /store/order */
export async function placeOrder(body: API.Order, options?: { [key: string]: any }) {
  return request<API.Order>('/store/order', {
    method: 'POST',
    data: body,
    ...(options || {}),
  });
}
/** Find purchase order by ID For valid response try integer IDs with value >= 1 and <= 10.         Other values will generated exceptions GET /store/order/${param0} */
export async function getOrderById(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.getOrderByIdParams,
  options?: { [key: string]: any },
) {
  const { orderId: param0, ...queryParams } = params;
  return request<API.Order>(`/store/order/${param0}`, {
    method: 'GET',
    params: { ...queryParams },
    ...(options || {}),
  });
}
/** Delete purchase order by ID For valid response try integer IDs with positive integer value.         Negative or non-integer values will generate API errors DELETE /store/order/${param0} */
export async function deleteOrder(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.deleteOrderParams,
  options?: { [key: string]: any },
) {
  const { orderId: param0, ...queryParams } = params;
  return request<any>(`/store/order/${param0}`, {
    method: 'DELETE',
    params: { ...queryParams },
    ...(options || {}),
  });
}
zy-asrs-flow/src/services/swagger/typings.d.ts
New file
@@ -0,0 +1,112 @@
declare namespace API {
  type ApiResponse = {
    code?: number;
    type?: string;
    message?: string;
  };
  type Category = {
    id?: number;
    name?: string;
  };
  type deleteOrderParams = {
    /** ID of the order that needs to be deleted */
    orderId: number;
  };
  type deletePetParams = {
    api_key?: string;
    /** Pet id to delete */
    petId: number;
  };
  type deleteUserParams = {
    /** The name that needs to be deleted */
    username: string;
  };
  type findPetsByStatusParams = {
    /** Status values that need to be considered for filter */
    status: ('available' | 'pending' | 'sold')[];
  };
  type findPetsByTagsParams = {
    /** Tags to filter by */
    tags: string[];
  };
  type getOrderByIdParams = {
    /** ID of pet that needs to be fetched */
    orderId: number;
  };
  type getPetByIdParams = {
    /** ID of pet to return */
    petId: number;
  };
  type getUserByNameParams = {
    /** The name that needs to be fetched. Use user1 for testing.  */
    username: string;
  };
  type loginUserParams = {
    /** The user name for login */
    username: string;
    /** The password for login in clear text */
    password: string;
  };
  type Order = {
    id?: number;
    petId?: number;
    quantity?: number;
    shipDate?: string;
    /** Order Status */
    status?: 'placed' | 'approved' | 'delivered';
    complete?: boolean;
  };
  type Pet = {
    id?: number;
    category?: Category;
    name: string;
    photoUrls: string[];
    tags?: Tag[];
    /** pet status in the store */
    status?: 'available' | 'pending' | 'sold';
  };
  type Tag = {
    id?: number;
    name?: string;
  };
  type updatePetWithFormParams = {
    /** ID of pet that needs to be updated */
    petId: number;
  };
  type updateUserParams = {
    /** name that need to be updated */
    username: string;
  };
  type uploadFileParams = {
    /** ID of pet to update */
    petId: number;
  };
  type User = {
    id?: number;
    username?: string;
    firstName?: string;
    lastName?: string;
    email?: string;
    password?: string;
    phone?: string;
    /** User Status */
    userStatus?: number;
  };
}
zy-asrs-flow/src/services/swagger/user.ts
New file
@@ -0,0 +1,100 @@
// @ts-ignore
/* eslint-disable */
import { request } from '@umijs/max';
/** Create user This can only be done by the logged in user. POST /user */
export async function createUser(body: API.User, options?: { [key: string]: any }) {
  return request<any>('/user', {
    method: 'POST',
    data: body,
    ...(options || {}),
  });
}
/** Get user by user name GET /user/${param0} */
export async function getUserByName(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.getUserByNameParams,
  options?: { [key: string]: any },
) {
  const { username: param0, ...queryParams } = params;
  return request<API.User>(`/user/${param0}`, {
    method: 'GET',
    params: { ...queryParams },
    ...(options || {}),
  });
}
/** Updated user This can only be done by the logged in user. PUT /user/${param0} */
export async function updateUser(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.updateUserParams,
  body: API.User,
  options?: { [key: string]: any },
) {
  const { username: param0, ...queryParams } = params;
  return request<any>(`/user/${param0}`, {
    method: 'PUT',
    params: { ...queryParams },
    data: body,
    ...(options || {}),
  });
}
/** Delete user This can only be done by the logged in user. DELETE /user/${param0} */
export async function deleteUser(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.deleteUserParams,
  options?: { [key: string]: any },
) {
  const { username: param0, ...queryParams } = params;
  return request<any>(`/user/${param0}`, {
    method: 'DELETE',
    params: { ...queryParams },
    ...(options || {}),
  });
}
/** Creates list of users with given input array POST /user/createWithArray */
export async function createUsersWithArrayInput(
  body: API.User[],
  options?: { [key: string]: any },
) {
  return request<any>('/user/createWithArray', {
    method: 'POST',
    data: body,
    ...(options || {}),
  });
}
/** Creates list of users with given input array POST /user/createWithList */
export async function createUsersWithListInput(body: API.User[], options?: { [key: string]: any }) {
  return request<any>('/user/createWithList', {
    method: 'POST',
    data: body,
    ...(options || {}),
  });
}
/** Logs user into the system GET /user/login */
export async function loginUser(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.loginUserParams,
  options?: { [key: string]: any },
) {
  return request<string>('/user/login', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** Logs out current logged in user session GET /user/logout */
export async function logoutUser(options?: { [key: string]: any }) {
  return request<any>('/user/logout', {
    method: 'GET',
    ...(options || {}),
  });
}
zy-asrs-flow/src/services/system/auth.js
zy-asrs-flow/src/styles/index.css
File was deleted
zy-asrs-flow/src/typings.d.ts
New file
@@ -0,0 +1,20 @@
declare module 'slash2';
declare module '*.css';
declare module '*.less';
declare module '*.scss';
declare module '*.sass';
declare module '*.svg';
declare module '*.png';
declare module '*.jpg';
declare module '*.jpeg';
declare module '*.gif';
declare module '*.bmp';
declare module '*.tiff';
declare module 'omit.js';
declare module 'numeral';
declare module '@antv/data-set';
declare module 'mockjs';
declare module 'react-fittext';
declare module 'bizcharts-plugin-slider';
declare const REACT_APP_ENV: 'test' | 'dev' | 'pre' | false;
zy-asrs-flow/src/utils/icon-util.js
New file
@@ -0,0 +1,20 @@
import * as AntdIcons from '@ant-design/icons';
import React from 'react';
const allIcons = AntdIcons;
export function getIcon(name) {
  const icon = allIcons[name];
  return icon || '';
}
export function createIcon(icon) {
  if (typeof icon === 'object') {
    return icon;
  }
  const ele = allIcons[icon];
  if (ele) {
    return React.createElement(allIcons[icon]);
  }
  return '';
}
zy-asrs-flow/src/utils/request.js
File was deleted
zy-asrs-flow/src/utils/token-util.js
File was deleted
zy-asrs-flow/src/utils/token-util.ts
New file
@@ -0,0 +1,39 @@
/**
 * token 操作封装
 */
import { TOKEN_STORE_NAME } from '@/config/setting';
/**
 * 获取缓存的 token
 */
export function getToken(): string | null {
  const token = localStorage.getItem(TOKEN_STORE_NAME);
  if (!token) {
    return sessionStorage.getItem(TOKEN_STORE_NAME);
  }
  return token;
}
/**
 * 缓存 token
 * @param token token
 * @param remember 是否永久存储
 */
export function setToken(token?: string, remember?: boolean) {
  removeToken();
  if (token) {
    if (remember) {
      localStorage.setItem(TOKEN_STORE_NAME, token);
    } else {
      sessionStorage.setItem(TOKEN_STORE_NAME, token);
    }
  }
}
/**
 * 移除 token
 */
export function removeToken() {
  localStorage.removeItem(TOKEN_STORE_NAME);
  sessionStorage.removeItem(TOKEN_STORE_NAME);
}
zy-asrs-flow/tests/setupTests.jsx
New file
@@ -0,0 +1,64 @@
const localStorageMock = {
  getItem: jest.fn(),
  setItem: jest.fn(),
  removeItem: jest.fn(),
  clear: jest.fn(),
};
global.localStorage = localStorageMock;
Object.defineProperty(URL, 'createObjectURL', {
  writable: true,
  value: jest.fn(),
});
class Worker {
  constructor(stringUrl) {
    this.url = stringUrl;
    this.onmessage = () => {};
  }
  postMessage(msg) {
    this.onmessage(msg);
  }
}
window.Worker = Worker;
/* eslint-disable global-require */
if (typeof window !== 'undefined') {
  // ref: https://github.com/ant-design/ant-design/issues/18774
  if (!window.matchMedia) {
    Object.defineProperty(global.window, 'matchMedia', {
      writable: true,
      configurable: true,
      value: jest.fn(() => ({
        matches: false,
        addListener: jest.fn(),
        removeListener: jest.fn(),
      })),
    });
  }
  if (!window.matchMedia) {
    Object.defineProperty(global.window, 'matchMedia', {
      writable: true,
      configurable: true,
      value: jest.fn((query) => ({
        matches: query.includes('max-width'),
        addListener: jest.fn(),
        removeListener: jest.fn(),
      })),
    });
  }
}
const errorLog = console.error;
Object.defineProperty(global.window.console, 'error', {
  writable: true,
  configurable: true,
  value: (...rest) => {
    const logStr = rest.join('');
    if (logStr.includes('Warning: An update to %s inside a test was not wrapped in act(...)')) {
      return;
    }
    errorLog(...rest);
  },
});
zy-asrs-flow/tsconfig.json
New file
@@ -0,0 +1,23 @@
{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "jsx": "preserve",
    "esModuleInterop": true,
    "sourceMap": true,
    "baseUrl": "./",
    "skipLibCheck": true,
    "experimentalDecorators": true,
    "strict": true,
    "resolveJsonModule": true,
    "allowSyntheticDefaultImports": true,
    "paths": {
      "@/*": ["./src/*"],
      "@@/*": ["./src/.umi/*"],
      "@@test/*": ["./src/.umi-test/*"]
    }
  },
  "include": ["./**/*.d.ts", "./**/*.ts", "./**/*.tsx", "src/app.tsx", "src/utils/icon-util.js"]
}
zy-asrs-flow/types/cache/cache.json
New file
@@ -0,0 +1 @@
{}
zy-asrs-flow/types/cache/login.cache.json
New file
@@ -0,0 +1,386 @@
{
  "GET /api/currentUser": {
    "res": {
      "data": {
        "name": "Serati Ma",
        "avatar": "https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png",
        "userid": "00000001",
        "email": "antdesign@alipay.com",
        "signature": "海纳百川,有容乃大",
        "title": "交互专家",
        "group": "蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED",
        "tags": [
          {
            "key": "0",
            "label": "很有想法的"
          },
          {
            "key": "1",
            "label": "专注设计"
          },
          {
            "key": "2",
            "label": "辣~"
          },
          {
            "key": "3",
            "label": "大长腿"
          },
          {
            "key": "4",
            "label": "川妹子"
          },
          {
            "key": "5",
            "label": "海纳百川"
          }
        ],
        "notifyCount": 12,
        "unreadCount": 11,
        "country": "China",
        "geographic": {
          "province": {
            "label": "浙江省",
            "key": "330000"
          },
          "city": {
            "label": "杭州市",
            "key": "330100"
          }
        },
        "address": "西湖区工专路 77 号",
        "phone": "0752-268888888"
      }
    },
    "query": {
      "token ": " 123"
    },
    "payload": {},
    "types": "/** GET /api/currentUser */\nexport type GET_API_CURRENT_USER_QUERY = {\n  /** example:  123 */\n        token : string\n}\n  \n\nexport type GET_API_CURRENT_USER_PAYLOAD = {\n  \n}\n  \n\nexport type GET_API_CURRENT_USER_RES = {\n  /** example: {\"name\": \"Serati Ma\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png\", \"userid\": \"00000001\", \"email\": \"antdesign@alipay.com\", \"signature\": \"海纳百川,有容乃大\", \"title\": \"交互专家\", \"group\": \"蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED\", \"tags\": [{\"key\": \"0\", \"label\": \"很有想法的\"}, {\"key\": \"1\", \"label\": \"专注设计\"}, {\"key\": \"2\", \"label\": \"辣~\"}, {\"key\": \"3\", \"label\": \"大长腿\"}, {\"key\": \"4\", \"label\": \"川妹子\"}, {\"key\": \"5\", \"label\": \"海纳百川\"}], \"notifyCount\": 12, \"unreadCount\": 11, \"country\": \"China\", \"geographic\": {\"province\": {\"label\": \"浙江省\", \"key\": \"330000\"}, \"city\": {\"label\": \"杭州市\", \"key\": \"330100\"}}, \"address\": \"西湖区工专路 77 号\", \"phone\": \"0752-268888888\"} */\n        data: {\n      name: string,\navatar: string,\nuserid: string,\nemail: string,\nsignature: string,\ntitle: string,\ngroup: string,\ntags: {\n      key: string,\nlabel: string\n      }[],\nnotifyCount: number,\nunreadCount: number,\ncountry: string,\ngeographic: {\n      province: {\n      label: string,\nkey: string\n      },\ncity: {\n      label: string,\nkey: string\n      }\n      },\naddress: string,\nphone: string\n      }\n}\n  "
  },
  "GET /api/rule": {
    "res": {
      "data": [
        {
          "key": 99,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 99",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 503,
          "status": "0",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 81
        },
        {
          "key": 98,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 98",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 164,
          "status": "0",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 12
        },
        {
          "key": 97,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 97",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 174,
          "status": "1",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 81
        },
        {
          "key": 96,
          "disabled": true,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 96",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 914,
          "status": "0",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 7
        },
        {
          "key": 95,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 95",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 698,
          "status": "2",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 82
        },
        {
          "key": 94,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 94",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 488,
          "status": "1",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 14
        },
        {
          "key": 93,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 93",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 580,
          "status": "2",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 77
        },
        {
          "key": 92,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 92",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 244,
          "status": "3",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 58
        },
        {
          "key": 91,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 91",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 959,
          "status": "0",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 66
        },
        {
          "key": 90,
          "disabled": true,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 90",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 958,
          "status": "0",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 72
        },
        {
          "key": 89,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 89",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 301,
          "status": "2",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 2
        },
        {
          "key": 88,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 88",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 277,
          "status": "1",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 12
        },
        {
          "key": 87,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 87",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 810,
          "status": "1",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 82
        },
        {
          "key": 86,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 86",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 780,
          "status": "3",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 22
        },
        {
          "key": 85,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 85",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 705,
          "status": "3",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 12
        },
        {
          "key": 84,
          "disabled": true,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 84",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 203,
          "status": "0",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 79
        },
        {
          "key": 83,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 83",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 491,
          "status": "2",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 59
        },
        {
          "key": 82,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 82",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 73,
          "status": "0",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 100
        },
        {
          "key": 81,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png",
          "name": "TradeCode 81",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 406,
          "status": "3",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 61
        },
        {
          "key": 80,
          "disabled": false,
          "href": "https://ant.design",
          "avatar": "https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png",
          "name": "TradeCode 80",
          "owner": "曲丽丽",
          "desc": "这是一段描述",
          "callNo": 112,
          "status": "2",
          "updatedAt": "2022-12-06T05:00:57.040Z",
          "createdAt": "2022-12-06T05:00:57.040Z",
          "progress": 20
        }
      ],
      "total": 100,
      "success": true,
      "pageSize": 20,
      "current": 1
    },
    "query": {
      "token ": " 123",
      "current": "1",
      "pageSize": "20"
    },
    "payload": {},
    "types": "/** GET /api/rule */\nexport type GET_API_RULE_QUERY = {\n  /** example:  123 */\n        token : string;\n  /** example: 1 */\n        current: string;\n  /** example: 20 */\n        pageSize: string\n}\n  \n\nexport type GET_API_RULE_PAYLOAD = {\n  \n}\n  \n\nexport type GET_API_RULE_RES = {\n  /** example: [{\"key\": 99, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 99\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 503, \"status\": \"0\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 81}, {\"key\": 98, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 98\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 164, \"status\": \"0\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 12}, {\"key\": 97, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 97\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 174, \"status\": \"1\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 81}, {\"key\": 96, \"disabled\": true, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 96\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 914, \"status\": \"0\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 7}, {\"key\": 95, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 95\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 698, \"status\": \"2\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 82}, {\"key\": 94, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 94\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 488, \"status\": \"1\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 14}, {\"key\": 93, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 93\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 580, \"status\": \"2\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 77}, {\"key\": 92, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 92\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 244, \"status\": \"3\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 58}, {\"key\": 91, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 91\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 959, \"status\": \"0\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 66}, {\"key\": 90, \"disabled\": true, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 90\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 958, \"status\": \"0\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 72}, {\"key\": 89, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 89\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 301, \"status\": \"2\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 2}, {\"key\": 88, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 88\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 277, \"status\": \"1\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 12}, {\"key\": 87, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 87\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 810, \"status\": \"1\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 82}, {\"key\": 86, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 86\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 780, \"status\": \"3\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 22}, {\"key\": 85, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 85\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 705, \"status\": \"3\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 12}, {\"key\": 84, \"disabled\": true, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 84\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 203, \"status\": \"0\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 79}, {\"key\": 83, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 83\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 491, \"status\": \"2\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 59}, {\"key\": 82, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 82\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 73, \"status\": \"0\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 100}, {\"key\": 81, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png\", \"name\": \"TradeCode 81\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 406, \"status\": \"3\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 61}, {\"key\": 80, \"disabled\": false, \"href\": \"https: //ant.design\", \"avatar\": \"https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png\", \"name\": \"TradeCode 80\", \"owner\": \"曲丽丽\", \"desc\": \"这是一段描述\", \"callNo\": 112, \"status\": \"2\", \"updatedAt\": \"2022-12-06T05: 00: 57.040Z\", \"createdAt\": \"2022-12-06T05: 00: 57.040Z\", \"progress\": 20}] */\n        data: {\n      key: number,\ndisabled: boolean,\nhref: string,\navatar: string,\nname: string,\nowner: string,\ndesc: string,\ncallNo: number,\nstatus: string,\nupdatedAt: string,\ncreatedAt: string,\nprogress: number\n      }[];\n  /** example: 100 */\n        total: number;\n  /** example: true */\n        success: boolean;\n  /** example: 20 */\n        pageSize: number;\n  /** example: 1 */\n        current: number\n}\n  "
  },
  "POST /api/login/outLogin": {
    "res": {
      "data": {},
      "success": true
    },
    "query": {
      "token ": " 123"
    },
    "payload": {},
    "types": "/** POST /api/login/outLogin */\nexport type POST_API_LOGIN_OUT_LOGIN_QUERY = {\n  /** example:  123 */\n        token : string\n}\n  \n\nexport type POST_API_LOGIN_OUT_LOGIN_PAYLOAD = {\n  \n}\n  \n\nexport type POST_API_LOGIN_OUT_LOGIN_RES = {\n  /** example: {} */\n        data: {\n      \n      };\n  /** example: true */\n        success: boolean\n}\n  "
  },
  "POST /api/login/account": {
    "res": {
      "status": "ok",
      "type": "account",
      "currentAuthority": "admin"
    },
    "query": {
      "token ": " 123"
    },
    "payload": {
      "username": "admin",
      "password": "ant.design",
      "autoLogin": true,
      "type": "account"
    },
    "types": "/** POST /api/login/account */\nexport type POST_API_LOGIN_ACCOUNT_QUERY = {\n  /** example:  123 */\n        token : string\n}\n  \n\nexport type POST_API_LOGIN_ACCOUNT_PAYLOAD = {\n  /** example: admin */\n        username: string;\n  /** example: ant.design */\n        password: string;\n  /** example: true */\n        autoLogin: boolean;\n  /** example: account */\n        type: string\n}\n  \n\nexport type POST_API_LOGIN_ACCOUNT_RES = {\n  /** example: ok */\n        status: string;\n  /** example: account */\n        type: string;\n  /** example: admin */\n        currentAuthority: string\n}\n  "
  }
}
zy-asrs-flow/types/cache/mock/login.mock.cache.js
New file
@@ -0,0 +1,324 @@
module.exports = {
  'GET /api/currentUser': {
    data: {
      name: 'Serati Ma',
      avatar: 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',
      userid: '00000001',
      email: 'antdesign@alipay.com',
      signature: '海纳百川,有容乃大',
      title: '交互专家',
      group: '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
      tags: [
        { key: '0', label: '很有想法的' },
        { key: '1', label: '专注设计' },
        { key: '2', label: '辣~' },
        { key: '3', label: '大长腿' },
        { key: '4', label: '川妹子' },
        { key: '5', label: '海纳百川' },
      ],
      notifyCount: 12,
      unreadCount: 11,
      country: 'China',
      geographic: {
        province: { label: '浙江省', key: '330000' },
        city: { label: '杭州市', key: '330100' },
      },
      address: '西湖区工专路 77 号',
      phone: '0752-268888888',
    },
  },
  'GET /api/rule': {
    data: [
      {
        key: 99,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 99',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 503,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 81,
      },
      {
        key: 98,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 98',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 164,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 12,
      },
      {
        key: 97,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 97',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 174,
        status: '1',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 81,
      },
      {
        key: 96,
        disabled: true,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 96',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 914,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 7,
      },
      {
        key: 95,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 95',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 698,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 82,
      },
      {
        key: 94,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 94',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 488,
        status: '1',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 14,
      },
      {
        key: 93,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 93',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 580,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 77,
      },
      {
        key: 92,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 92',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 244,
        status: '3',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 58,
      },
      {
        key: 91,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 91',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 959,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 66,
      },
      {
        key: 90,
        disabled: true,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 90',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 958,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 72,
      },
      {
        key: 89,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 89',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 301,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 2,
      },
      {
        key: 88,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 88',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 277,
        status: '1',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 12,
      },
      {
        key: 87,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 87',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 810,
        status: '1',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 82,
      },
      {
        key: 86,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 86',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 780,
        status: '3',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 22,
      },
      {
        key: 85,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 85',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 705,
        status: '3',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 12,
      },
      {
        key: 84,
        disabled: true,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 84',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 203,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 79,
      },
      {
        key: 83,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 83',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 491,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 59,
      },
      {
        key: 82,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 82',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 73,
        status: '0',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 100,
      },
      {
        key: 81,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
        name: 'TradeCode 81',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 406,
        status: '3',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 61,
      },
      {
        key: 80,
        disabled: false,
        href: 'https://ant.design',
        avatar: 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
        name: 'TradeCode 80',
        owner: '曲丽丽',
        desc: '这是一段描述',
        callNo: 112,
        status: '2',
        updatedAt: '2022-12-06T05:00:57.040Z',
        createdAt: '2022-12-06T05:00:57.040Z',
        progress: 20,
      },
    ],
    total: 100,
    success: true,
    pageSize: 20,
    current: 1,
  },
  'POST /api/login/outLogin': { data: {}, success: true },
  'POST /api/login/account': {
    status: 'ok',
    type: 'account',
    currentAuthority: 'admin',
  },
};
zy-asrs-flow/types/cache/mock/mock.cache.js
copy from zy-asrs-flow/src/pages/layout/index.jsx copy to zy-asrs-flow/types/cache/mock/mock.cache.js
zy-asrs-flow/types/index.d.ts
New file
@@ -0,0 +1,120 @@
export namespace API {
  /** GET /api/currentUser */
  export type GET_API_CURRENT_USER_QUERY = {
    /** example:  123 */
    token: string;
  };
  export type GET_API_CURRENT_USER_PAYLOAD = Record<string, any>;
  export type GET_API_CURRENT_USER_RES = {
    /** example: {"name": "Serati Ma", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png", "userid": "00000001", "email": "antdesign@alipay.com", "signature": "海纳百川,有容乃大", "title": "交互专家", "group": "蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED", "tags": [{"key": "0", "label": "很有想法的"}, {"key": "1", "label": "专注设计"}, {"key": "2", "label": "辣~"}, {"key": "3", "label": "大长腿"}, {"key": "4", "label": "川妹子"}, {"key": "5", "label": "海纳百川"}], "notifyCount": 12, "unreadCount": 11, "country": "China", "geographic": {"province": {"label": "浙江省", "key": "330000"}, "city": {"label": "杭州市", "key": "330100"}}, "address": "西湖区工专路 77 号", "phone": "0752-268888888"} */
    data: {
      name: string;
      avatar: string;
      userid: string;
      email: string;
      signature: string;
      title: string;
      group: string;
      tags: {
        key: string;
        label: string;
      }[];
      notifyCount: number;
      unreadCount: number;
      country: string;
      geographic: {
        province: {
          label: string;
          key: string;
        };
        city: {
          label: string;
          key: string;
        };
      };
      address: string;
      phone: string;
    };
  };
  /** GET /api/rule */
  export type GET_API_RULE_QUERY = {
    /** example:  123 */
    token: string;
    /** example: 1 */
    current: string;
    /** example: 20 */
    pageSize: string;
  };
  export type GET_API_RULE_PAYLOAD = Record<string, any>;
  export type GET_API_RULE_RES = {
    /** example: [{"key": 99, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 99", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 503, "status": "0", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 81}, {"key": 98, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 98", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 164, "status": "0", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 12}, {"key": 97, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 97", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 174, "status": "1", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 81}, {"key": 96, "disabled": true, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 96", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 914, "status": "0", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 7}, {"key": 95, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 95", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 698, "status": "2", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 82}, {"key": 94, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 94", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 488, "status": "1", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 14}, {"key": 93, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 93", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 580, "status": "2", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 77}, {"key": 92, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 92", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 244, "status": "3", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 58}, {"key": 91, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 91", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 959, "status": "0", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 66}, {"key": 90, "disabled": true, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 90", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 958, "status": "0", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 72}, {"key": 89, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 89", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 301, "status": "2", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 2}, {"key": 88, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 88", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 277, "status": "1", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 12}, {"key": 87, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 87", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 810, "status": "1", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 82}, {"key": 86, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 86", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 780, "status": "3", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 22}, {"key": 85, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 85", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 705, "status": "3", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 12}, {"key": 84, "disabled": true, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 84", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 203, "status": "0", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 79}, {"key": 83, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 83", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 491, "status": "2", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 59}, {"key": 82, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 82", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 73, "status": "0", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 100}, {"key": 81, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png", "name": "TradeCode 81", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 406, "status": "3", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 61}, {"key": 80, "disabled": false, "href": "https: //ant.design", "avatar": "https: //gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png", "name": "TradeCode 80", "owner": "曲丽丽", "desc": "这是一段描述", "callNo": 112, "status": "2", "updatedAt": "2022-12-06T05: 00: 57.040Z", "createdAt": "2022-12-06T05: 00: 57.040Z", "progress": 20}] */
    data: {
      key: number;
      disabled: boolean;
      href: string;
      avatar: string;
      name: string;
      owner: string;
      desc: string;
      callNo: number;
      status: string;
      updatedAt: string;
      createdAt: string;
      progress: number;
    }[];
    /** example: 100 */
    total: number;
    /** example: true */
    success: boolean;
    /** example: 20 */
    pageSize: number;
    /** example: 1 */
    current: number;
  };
  /** POST /api/login/outLogin */
  export type POST_API_LOGIN_OUT_LOGIN_QUERY = {
    /** example:  123 */
    token: string;
  };
  export type POST_API_LOGIN_OUT_LOGIN_PAYLOAD = Record<string, any>;
  export type POST_API_LOGIN_OUT_LOGIN_RES = {
    /** example: {} */
    data: Record<string, any>;
    /** example: true */
    success: boolean;
  };
  /** POST /api/login/account */
  export type POST_API_LOGIN_ACCOUNT_QUERY = {
    /** example:  123 */
    token: string;
  };
  export type POST_API_LOGIN_ACCOUNT_PAYLOAD = {
    /** example: admin */
    username: string;
    /** example: ant.design */
    password: string;
    /** example: true */
    autoLogin: boolean;
    /** example: account */
    type: string;
  };
  export type POST_API_LOGIN_ACCOUNT_RES = {
    /** example: ok */
    status: string;
    /** example: account */
    type: string;
    /** example: admin */
    currentAuthority: string;
  };
}
zy-asrs-flow/vite.config.js
File was deleted
zy-asrs-wcs/src/main/resources/mapper/sys/RoleMenuMapper.xml
@@ -8,6 +8,7 @@
        <if test="type != null">
            AND type = #{type}
        </if>
        and deleted = 0
        and id in (
            select menu_id from sys_role_menu
            where role_id in (