From d05cefed3db917b975b8798ec02cfb1d0d391d7f Mon Sep 17 00:00:00 2001 From: Eleven Date: Sun, 1 Nov 2020 19:37:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E5=89=8D=E7=AB=AF=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=20=20reat=20=3D>=20vue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web-vue/.editorconfig | 16 - web-vue/.eslintignore | 4 - web-vue/.eslintrc.js | 8 - web-vue/.gitignore | 23 ++ web-vue/.prettierignore | 23 -- web-vue/.prettierrc.js | 5 - web-vue/.stylelintrc.js | 5 - web-vue/README.md | 63 +--- web-vue/babel.config.js | 5 + web-vue/config/config.js | 109 ------- web-vue/config/defaultSettings.js | 17 - web-vue/config/proxy.js | 36 --- web-vue/jest.config.js | 9 - web-vue/jsconfig.json | 10 - web-vue/mock/listTableList.js | 178 ----------- web-vue/mock/notices.js | 103 ------ web-vue/mock/route.js | 7 - web-vue/mock/user.js | 157 ---------- web-vue/package.json | 126 ++------ web-vue/public/CNAME | 1 - web-vue/public/favicon.ico | Bin 4286 -> 4286 bytes web-vue/public/home_bg.png | Bin 203330 -> 0 bytes web-vue/public/icons/icon-128x128.png | Bin 1329 -> 0 bytes web-vue/public/icons/icon-192x192.png | Bin 1856 -> 0 bytes web-vue/public/icons/icon-512x512.png | Bin 5082 -> 0 bytes web-vue/public/index.html | 17 + web-vue/public/pro_icon.svg | 5 - web-vue/src/App.vue | 28 ++ web-vue/src/assets/logo.png | Bin 0 -> 6849 bytes web-vue/src/assets/logo.svg | 1 - .../src/components/Authorized/Authorized.jsx | 21 -- .../components/Authorized/AuthorizedRoute.jsx | 25 -- .../Authorized/CheckPermissions.jsx | 72 ----- .../components/Authorized/PromiseRender.jsx | 78 ----- web-vue/src/components/Authorized/Secured.jsx | 70 ----- web-vue/src/components/Authorized/index.jsx | 8 - .../components/Authorized/renderAuthorize.js | 30 -- .../GlobalHeader/AvatarDropdown.jsx | 80 ----- .../GlobalHeader/NoticeIconView.jsx | 153 --------- .../components/GlobalHeader/RightContent.jsx | 76 ----- .../src/components/GlobalHeader/index.less | 82 ----- .../src/components/HeaderDropdown/index.jsx | 10 - .../src/components/HeaderDropdown/index.less | 16 - web-vue/src/components/HeaderSearch/index.jsx | 86 ------ .../src/components/HeaderSearch/index.less | 30 -- web-vue/src/components/HelloWorld.vue | 58 ++++ .../src/components/NoticeIcon/NoticeList.jsx | 95 ------ .../src/components/NoticeIcon/NoticeList.less | 103 ------ web-vue/src/components/NoticeIcon/index.jsx | 112 ------- web-vue/src/components/NoticeIcon/index.less | 35 --- web-vue/src/components/PageLoading/index.jsx | 4 - .../src/e2e/__mocks__/antd-pro-merge-less.js | 1 - web-vue/src/e2e/baseLayout.e2e.js | 57 ---- web-vue/src/global.jsx | 102 ------ web-vue/src/global.less | 54 ---- web-vue/src/layouts/BasicLayout.jsx | 154 --------- web-vue/src/layouts/BlankLayout.jsx | 5 - web-vue/src/layouts/SecurityLayout.jsx | 49 --- web-vue/src/layouts/UserLayout.jsx | 58 ---- web-vue/src/layouts/UserLayout.less | 71 ----- web-vue/src/locales/en-US.js | 21 -- web-vue/src/locales/en-US/component.js | 5 - web-vue/src/locales/en-US/globalHeader.js | 17 - web-vue/src/locales/en-US/menu.js | 52 ---- web-vue/src/locales/en-US/pwa.js | 6 - web-vue/src/locales/en-US/settingDrawer.js | 31 -- web-vue/src/locales/en-US/settings.js | 60 ---- web-vue/src/locales/pt-BR.js | 19 -- web-vue/src/locales/pt-BR/component.js | 5 - web-vue/src/locales/pt-BR/globalHeader.js | 18 -- web-vue/src/locales/pt-BR/menu.js | 52 ---- web-vue/src/locales/pt-BR/pwa.js | 7 - web-vue/src/locales/pt-BR/settingDrawer.js | 32 -- web-vue/src/locales/pt-BR/settings.js | 60 ---- web-vue/src/locales/zh-CN.js | 21 -- web-vue/src/locales/zh-CN/component.js | 5 - web-vue/src/locales/zh-CN/globalHeader.js | 17 - web-vue/src/locales/zh-CN/menu.js | 52 ---- web-vue/src/locales/zh-CN/pwa.js | 6 - web-vue/src/locales/zh-CN/settingDrawer.js | 31 -- web-vue/src/locales/zh-CN/settings.js | 55 ---- web-vue/src/locales/zh-TW.js | 19 -- web-vue/src/locales/zh-TW/component.js | 5 - web-vue/src/locales/zh-TW/globalHeader.js | 17 - web-vue/src/locales/zh-TW/menu.js | 52 ---- web-vue/src/locales/zh-TW/pwa.js | 6 - web-vue/src/locales/zh-TW/settingDrawer.js | 31 -- web-vue/src/locales/zh-TW/settings.js | 55 ---- web-vue/src/main.js | 8 + web-vue/src/manifest.json | 22 -- web-vue/src/models/global.js | 104 ------- web-vue/src/models/login.js | 63 ---- web-vue/src/models/setting.js | 27 -- web-vue/src/models/user.js | 46 --- web-vue/src/pages/404.jsx | 18 -- web-vue/src/pages/Admin.jsx | 40 --- .../ListTableList/components/CreateForm.jsx | 19 -- .../ListTableList/components/UpdateForm.jsx | 134 -------- web-vue/src/pages/ListTableList/index.jsx | 292 ------------------ web-vue/src/pages/ListTableList/service.js | 24 -- web-vue/src/pages/Welcome.jsx | 48 --- web-vue/src/pages/Welcome.less | 8 - web-vue/src/pages/document.ejs | 214 ------------- .../login/components/Login/LoginContext.jsx | 3 - .../user/login/components/Login/LoginItem.jsx | 138 --------- .../login/components/Login/LoginSubmit.jsx | 16 - .../user/login/components/Login/LoginTab.jsx | 34 -- .../user/login/components/Login/index.jsx | 95 ------ .../user/login/components/Login/index.less | 49 --- .../pages/user/login/components/Login/map.jsx | 71 ----- web-vue/src/pages/user/login/index.jsx | 125 -------- web-vue/src/pages/user/login/style.less | 39 --- web-vue/src/service-worker.js | 70 ----- web-vue/src/services/login.js | 10 - web-vue/src/services/user.js | 10 - web-vue/src/utils/Authorized.js | 19 -- web-vue/src/utils/authority.js | 33 -- web-vue/src/utils/request.js | 56 ---- web-vue/src/utils/utils.js | 23 -- web-vue/src/utils/utils.less | 16 - web-vue/src/utils/utils.test.js | 34 -- web-vue/tests/PuppeteerEnvironment.js | 41 --- web-vue/tests/beforeTest.js | 39 --- web-vue/tests/getBrowser.js | 45 --- web-vue/tests/run-tests.js | 52 ---- web-vue/vue.config.js | 5 + 126 files changed, 192 insertions(+), 5406 deletions(-) delete mode 100644 web-vue/.editorconfig delete mode 100644 web-vue/.eslintignore delete mode 100644 web-vue/.eslintrc.js create mode 100644 web-vue/.gitignore delete mode 100644 web-vue/.prettierignore delete mode 100644 web-vue/.prettierrc.js delete mode 100644 web-vue/.stylelintrc.js create mode 100644 web-vue/babel.config.js delete mode 100644 web-vue/config/config.js delete mode 100644 web-vue/config/defaultSettings.js delete mode 100644 web-vue/config/proxy.js delete mode 100644 web-vue/jest.config.js delete mode 100644 web-vue/jsconfig.json delete mode 100644 web-vue/mock/listTableList.js delete mode 100644 web-vue/mock/notices.js delete mode 100644 web-vue/mock/route.js delete mode 100644 web-vue/mock/user.js delete mode 100644 web-vue/public/CNAME delete mode 100644 web-vue/public/home_bg.png delete mode 100644 web-vue/public/icons/icon-128x128.png delete mode 100644 web-vue/public/icons/icon-192x192.png delete mode 100644 web-vue/public/icons/icon-512x512.png create mode 100644 web-vue/public/index.html delete mode 100644 web-vue/public/pro_icon.svg create mode 100644 web-vue/src/App.vue create mode 100644 web-vue/src/assets/logo.png delete mode 100644 web-vue/src/assets/logo.svg delete mode 100644 web-vue/src/components/Authorized/Authorized.jsx delete mode 100644 web-vue/src/components/Authorized/AuthorizedRoute.jsx delete mode 100644 web-vue/src/components/Authorized/CheckPermissions.jsx delete mode 100644 web-vue/src/components/Authorized/PromiseRender.jsx delete mode 100644 web-vue/src/components/Authorized/Secured.jsx delete mode 100644 web-vue/src/components/Authorized/index.jsx delete mode 100644 web-vue/src/components/Authorized/renderAuthorize.js delete mode 100644 web-vue/src/components/GlobalHeader/AvatarDropdown.jsx delete mode 100644 web-vue/src/components/GlobalHeader/NoticeIconView.jsx delete mode 100644 web-vue/src/components/GlobalHeader/RightContent.jsx delete mode 100644 web-vue/src/components/GlobalHeader/index.less delete mode 100644 web-vue/src/components/HeaderDropdown/index.jsx delete mode 100644 web-vue/src/components/HeaderDropdown/index.less delete mode 100644 web-vue/src/components/HeaderSearch/index.jsx delete mode 100644 web-vue/src/components/HeaderSearch/index.less create mode 100644 web-vue/src/components/HelloWorld.vue delete mode 100644 web-vue/src/components/NoticeIcon/NoticeList.jsx delete mode 100755 web-vue/src/components/NoticeIcon/NoticeList.less delete mode 100644 web-vue/src/components/NoticeIcon/index.jsx delete mode 100644 web-vue/src/components/NoticeIcon/index.less delete mode 100644 web-vue/src/components/PageLoading/index.jsx delete mode 100644 web-vue/src/e2e/__mocks__/antd-pro-merge-less.js delete mode 100644 web-vue/src/e2e/baseLayout.e2e.js delete mode 100644 web-vue/src/global.jsx delete mode 100644 web-vue/src/global.less delete mode 100644 web-vue/src/layouts/BasicLayout.jsx delete mode 100644 web-vue/src/layouts/BlankLayout.jsx delete mode 100644 web-vue/src/layouts/SecurityLayout.jsx delete mode 100644 web-vue/src/layouts/UserLayout.jsx delete mode 100755 web-vue/src/layouts/UserLayout.less delete mode 100644 web-vue/src/locales/en-US.js delete mode 100644 web-vue/src/locales/en-US/component.js delete mode 100644 web-vue/src/locales/en-US/globalHeader.js delete mode 100644 web-vue/src/locales/en-US/menu.js delete mode 100644 web-vue/src/locales/en-US/pwa.js delete mode 100644 web-vue/src/locales/en-US/settingDrawer.js delete mode 100644 web-vue/src/locales/en-US/settings.js delete mode 100644 web-vue/src/locales/pt-BR.js delete mode 100644 web-vue/src/locales/pt-BR/component.js delete mode 100644 web-vue/src/locales/pt-BR/globalHeader.js delete mode 100644 web-vue/src/locales/pt-BR/menu.js delete mode 100644 web-vue/src/locales/pt-BR/pwa.js delete mode 100644 web-vue/src/locales/pt-BR/settingDrawer.js delete mode 100644 web-vue/src/locales/pt-BR/settings.js delete mode 100644 web-vue/src/locales/zh-CN.js delete mode 100644 web-vue/src/locales/zh-CN/component.js delete mode 100644 web-vue/src/locales/zh-CN/globalHeader.js delete mode 100644 web-vue/src/locales/zh-CN/menu.js delete mode 100644 web-vue/src/locales/zh-CN/pwa.js delete mode 100644 web-vue/src/locales/zh-CN/settingDrawer.js delete mode 100644 web-vue/src/locales/zh-CN/settings.js delete mode 100644 web-vue/src/locales/zh-TW.js delete mode 100644 web-vue/src/locales/zh-TW/component.js delete mode 100644 web-vue/src/locales/zh-TW/globalHeader.js delete mode 100644 web-vue/src/locales/zh-TW/menu.js delete mode 100644 web-vue/src/locales/zh-TW/pwa.js delete mode 100644 web-vue/src/locales/zh-TW/settingDrawer.js delete mode 100644 web-vue/src/locales/zh-TW/settings.js create mode 100644 web-vue/src/main.js delete mode 100644 web-vue/src/manifest.json delete mode 100644 web-vue/src/models/global.js delete mode 100644 web-vue/src/models/login.js delete mode 100644 web-vue/src/models/setting.js delete mode 100644 web-vue/src/models/user.js delete mode 100644 web-vue/src/pages/404.jsx delete mode 100644 web-vue/src/pages/Admin.jsx delete mode 100644 web-vue/src/pages/ListTableList/components/CreateForm.jsx delete mode 100644 web-vue/src/pages/ListTableList/components/UpdateForm.jsx delete mode 100644 web-vue/src/pages/ListTableList/index.jsx delete mode 100644 web-vue/src/pages/ListTableList/service.js delete mode 100644 web-vue/src/pages/Welcome.jsx delete mode 100644 web-vue/src/pages/Welcome.less delete mode 100644 web-vue/src/pages/document.ejs delete mode 100644 web-vue/src/pages/user/login/components/Login/LoginContext.jsx delete mode 100644 web-vue/src/pages/user/login/components/Login/LoginItem.jsx delete mode 100644 web-vue/src/pages/user/login/components/Login/LoginSubmit.jsx delete mode 100644 web-vue/src/pages/user/login/components/Login/LoginTab.jsx delete mode 100644 web-vue/src/pages/user/login/components/Login/index.jsx delete mode 100644 web-vue/src/pages/user/login/components/Login/index.less delete mode 100644 web-vue/src/pages/user/login/components/Login/map.jsx delete mode 100644 web-vue/src/pages/user/login/index.jsx delete mode 100644 web-vue/src/pages/user/login/style.less delete mode 100644 web-vue/src/service-worker.js delete mode 100644 web-vue/src/services/login.js delete mode 100644 web-vue/src/services/user.js delete mode 100644 web-vue/src/utils/Authorized.js delete mode 100644 web-vue/src/utils/authority.js delete mode 100644 web-vue/src/utils/request.js delete mode 100644 web-vue/src/utils/utils.js delete mode 100644 web-vue/src/utils/utils.less delete mode 100644 web-vue/src/utils/utils.test.js delete mode 100644 web-vue/tests/PuppeteerEnvironment.js delete mode 100644 web-vue/tests/beforeTest.js delete mode 100644 web-vue/tests/getBrowser.js delete mode 100644 web-vue/tests/run-tests.js create mode 100644 web-vue/vue.config.js diff --git a/web-vue/.editorconfig b/web-vue/.editorconfig deleted file mode 100644 index 7e3649acc..000000000 --- a/web-vue/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# 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 diff --git a/web-vue/.eslintignore b/web-vue/.eslintignore deleted file mode 100644 index 16116a2b4..000000000 --- a/web-vue/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -/lambda/ -/scripts -/config -.history \ No newline at end of file diff --git a/web-vue/.eslintrc.js b/web-vue/.eslintrc.js deleted file mode 100644 index b882c20e8..000000000 --- a/web-vue/.eslintrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - extends: [require.resolve('@umijs/fabric/dist/eslint')], - globals: { - ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: true, - page: true, - REACT_APP_ENV: true, - }, -}; diff --git a/web-vue/.gitignore b/web-vue/.gitignore new file mode 100644 index 000000000..403adbc1e --- /dev/null +++ b/web-vue/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web-vue/.prettierignore b/web-vue/.prettierignore deleted file mode 100644 index d17efb442..000000000 --- a/web-vue/.prettierignore +++ /dev/null @@ -1,23 +0,0 @@ -**/*.svg -package.json -.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 \ No newline at end of file diff --git a/web-vue/.prettierrc.js b/web-vue/.prettierrc.js deleted file mode 100644 index 7b597d789..000000000 --- a/web-vue/.prettierrc.js +++ /dev/null @@ -1,5 +0,0 @@ -const fabric = require('@umijs/fabric'); - -module.exports = { - ...fabric.prettier, -}; diff --git a/web-vue/.stylelintrc.js b/web-vue/.stylelintrc.js deleted file mode 100644 index c2030787d..000000000 --- a/web-vue/.stylelintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -const fabric = require('@umijs/fabric'); - -module.exports = { - ...fabric.stylelint, -}; diff --git a/web-vue/README.md b/web-vue/README.md index 4c89a727c..05273d347 100644 --- a/web-vue/README.md +++ b/web-vue/README.md @@ -1,57 +1,24 @@ -# Ant Design Pro +# web-vue -This project is initialized with [Ant Design Pro](https://pro.ant.design). Follow is the quick guide for how to use. - -## Environment Prepare - -Install `node_modules`: - -```bash -npm install +## Project setup +``` +yarn install ``` -or - -```bash -yarn +### Compiles and hot-reloads for development +``` +yarn serve ``` -## 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 +### Compiles and minifies for production +``` +yarn build ``` -### Build project - -```bash -npm run build +### Lints and fixes files +``` +yarn lint ``` -### 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). +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/web-vue/babel.config.js b/web-vue/babel.config.js new file mode 100644 index 000000000..e9558405f --- /dev/null +++ b/web-vue/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/web-vue/config/config.js b/web-vue/config/config.js deleted file mode 100644 index 64b90640f..000000000 --- a/web-vue/config/config.js +++ /dev/null @@ -1,109 +0,0 @@ -// https://umijs.org/config/ -import { defineConfig } from 'umi'; -import defaultSettings from './defaultSettings'; -import proxy from './proxy'; -const { REACT_APP_ENV } = process.env; -export default defineConfig({ - history: { - type: 'hash' - }, - hash: true, - antd: {}, - dva: { - hmr: true, - }, - locale: { - // default zh-CN - default: 'zh-CN', - antd: true, - // default true, when it is true, will use `navigator.language` overwrite default - baseNavigator: true, - }, - dynamicImport: { - loading: '@/components/PageLoading/index', - }, - targets: { - ie: 11, - }, - // umi routes: https://umijs.org/docs/routing - routes: [ - { - path: '/user', - component: '../layouts/UserLayout', - routes: [ - { - name: 'login', - path: '/user/login', - component: './user/login', - }, - ], - }, - { - path: '/', - component: '../layouts/SecurityLayout', - routes: [ - { - path: '/', - component: '../layouts/BasicLayout', - authority: ['admin', 'user'], - routes: [ - { - path: '/', - redirect: '/welcome', - }, - { - path: '/welcome', - name: 'welcome', - icon: 'smile', - component: './Welcome', - }, - { - path: '/admin', - name: 'admin', - icon: 'crown', - component: './Admin', - authority: ['admin'], - routes: [ - { - path: '/admin/sub-page', - name: 'sub-page', - icon: 'smile', - component: './Welcome', - authority: ['admin'], - }, - ], - }, - { - name: 'list.table-list', - icon: 'table', - path: '/list', - component: './ListTableList', - }, - { - component: './404', - }, - ], - }, - { - component: './404', - }, - ], - }, - { - component: './404', - }, - ], - // Theme for antd: https://ant.design/docs/react/customize-theme-cn - theme: { - // ...darkTheme, - 'primary-color': defaultSettings.primaryColor, - }, - // @ts-ignore - title: false, - ignoreMomentLocale: true, - proxy: proxy[REACT_APP_ENV || 'dev'], - manifest: { - basePath: '/', - }, - outputPath: '../modules/server/src/main/resources/dist/' -}); diff --git a/web-vue/config/defaultSettings.js b/web-vue/config/defaultSettings.js deleted file mode 100644 index b4073f08a..000000000 --- a/web-vue/config/defaultSettings.js +++ /dev/null @@ -1,17 +0,0 @@ -const proSettings = { - navTheme: 'dark', - // 拂晓蓝 - primaryColor: '#1890ff', - layout: 'side', - contentWidth: 'Fluid', - fixedHeader: false, - fixSiderbar: true, - colorWeak: false, - menu: { - locale: true, - }, - title: 'Ant Design Pro', - pwa: false, - iconfontUrl: '', -}; -export default proSettings; diff --git a/web-vue/config/proxy.js b/web-vue/config/proxy.js deleted file mode 100644 index 9a8bd35d6..000000000 --- a/web-vue/config/proxy.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 在生产环境 代理是无法生效的,所以这里没有生产环境的配置 - * 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 - */ -export default { - dev: { - '/api/': { - target: 'https://preview.pro.ant.design', - changeOrigin: true, - pathRewrite: { - '^': '', - }, - }, - }, - test: { - '/api/': { - target: 'https://preview.pro.ant.design', - changeOrigin: true, - pathRewrite: { - '^': '', - }, - }, - }, - pre: { - '/api/': { - target: 'your pre url', - changeOrigin: true, - pathRewrite: { - '^': '', - }, - }, - }, -}; diff --git a/web-vue/jest.config.js b/web-vue/jest.config.js deleted file mode 100644 index 4c4eeaf7c..000000000 --- a/web-vue/jest.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - testURL: 'http://localhost:8000', - testEnvironment: './tests/PuppeteerEnvironment', - verbose: false, - globals: { - ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: false, - localStorage: null, - }, -}; diff --git a/web-vue/jsconfig.json b/web-vue/jsconfig.json deleted file mode 100644 index f87334d48..000000000 --- a/web-vue/jsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - } - } -} diff --git a/web-vue/mock/listTableList.js b/web-vue/mock/listTableList.js deleted file mode 100644 index 4b4dddb87..000000000 --- a/web-vue/mock/listTableList.js +++ /dev/null @@ -1,178 +0,0 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import { parse } from 'url'; - -// mock tableListDataSource -const genList = (current, pageSize) => { - const tableListDataSource = []; - - 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: new Date(), - createdAt: new Date(), - progress: Math.ceil(Math.random() * 100), - }); - } - - tableListDataSource.reverse(); - return tableListDataSource; -}; - -let tableListDataSource = genList(1, 100); - -function getRule(req, res, u) { - 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; - let dataSource = [...tableListDataSource].slice((current - 1) * pageSize, current * pageSize); - const sorter = JSON.parse(params.sorter); - - if (sorter) { - dataSource = dataSource.sort((prev, next) => { - let sortNumber = 0; - Object.keys(sorter).forEach((key) => { - if (sorter[key] === 'descend') { - if (prev[key] - next[key] > 0) { - sortNumber += -1; - } else { - sortNumber += 1; - } - - return; - } - - if (prev[key] - next[key] > 0) { - sortNumber += 1; - } else { - sortNumber += -1; - } - }); - return sortNumber; - }); - } - - if (params.filter) { - const filter = JSON.parse(params.filter); - - if (Object.keys(filter).length > 0) { - dataSource = dataSource.filter((item) => { - return Object.keys(filter).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.currentPage}`, 10) || 1, - }; - return res.json(result); -} - -function postRule(req, res, u, b) { - 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 = { - 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: new Date(), - createdAt: new Date(), - 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, -}; diff --git a/web-vue/mock/notices.js b/web-vue/mock/notices.js deleted file mode 100644 index 5fa5fca75..000000000 --- a/web-vue/mock/notices.js +++ /dev/null @@ -1,103 +0,0 @@ -const getNotices = (req, res) => { - res.json([ - { - id: '000000001', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', - title: '你收到了 14 份新周报', - datetime: '2017-08-09', - type: 'notification', - }, - { - id: '000000002', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png', - title: '你推荐的 曲妮妮 已通过第三轮面试', - datetime: '2017-08-08', - type: 'notification', - }, - { - id: '000000003', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png', - title: '这种模板可以区分多种通知类型', - datetime: '2017-08-07', - read: true, - type: 'notification', - }, - { - id: '000000004', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', - title: '左侧图标用于区分不同的类型', - datetime: '2017-08-07', - type: 'notification', - }, - { - id: '000000005', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', - title: '内容不要超过两行字,超出时自动截断', - datetime: '2017-08-07', - type: 'notification', - }, - { - id: '000000006', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg', - title: '曲丽丽 评论了你', - description: '描述信息描述信息描述信息', - datetime: '2017-08-07', - type: 'message', - clickClose: true, - }, - { - id: '000000007', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg', - title: '朱偏右 回复了你', - description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像', - datetime: '2017-08-07', - type: 'message', - clickClose: true, - }, - { - id: '000000008', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg', - 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, -}; diff --git a/web-vue/mock/route.js b/web-vue/mock/route.js deleted file mode 100644 index a6deca813..000000000 --- a/web-vue/mock/route.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - '/api/auth_routes': { - '/form/advanced-form': { - authority: ['admin', 'user'], - }, - }, -}; diff --git a/web-vue/mock/user.js b/web-vue/mock/user.js deleted file mode 100644 index 8e69b3f71..000000000 --- a/web-vue/mock/user.js +++ /dev/null @@ -1,157 +0,0 @@ -function getFakeCaptcha(req, res) { - return res.json('captcha-xxx'); -} // 代码中会兼容本地 service mock 以及部署站点的静态数据 - -export default { - // 支持值为 Object 和 Array - 'GET /api/currentUser': { - 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', - 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': (req, res) => { - const { password, userName, type } = req.body; - - if (password === 'ant.design' && userName === 'admin') { - res.send({ - status: 'ok', - type, - currentAuthority: 'admin', - }); - return; - } - - if (password === 'ant.design' && userName === 'user') { - res.send({ - status: 'ok', - type, - currentAuthority: 'user', - }); - return; - } - - if (type === 'mobile') { - res.send({ - status: 'ok', - type, - currentAuthority: 'admin', - }); - return; - } - - res.send({ - status: 'error', - type, - currentAuthority: 'guest', - }); - }, - 'POST /api/register': (req, res) => { - res.send({ - status: 'ok', - currentAuthority: 'user', - }); - }, - 'GET /api/500': (req, res) => { - res.status(500).send({ - timestamp: 1513932555104, - status: 500, - error: 'error', - message: 'error', - path: '/base/category/list', - }); - }, - 'GET /api/404': (req, res) => { - res.status(404).send({ - timestamp: 1513932643431, - status: 404, - error: 'Not Found', - message: 'No message available', - path: '/base/category/list/2121212', - }); - }, - 'GET /api/403': (req, res) => { - res.status(403).send({ - timestamp: 1513932555104, - status: 403, - error: 'Unauthorized', - message: 'Unauthorized', - path: '/base/category/list', - }); - }, - 'GET /api/401': (req, res) => { - res.status(401).send({ - timestamp: 1513932555104, - status: 401, - error: 'Unauthorized', - message: 'Unauthorized', - path: '/base/category/list', - }); - }, - 'GET /api/login/captcha': getFakeCaptcha, -}; diff --git a/web-vue/package.json b/web-vue/package.json index a82f69276..87a7e180d 100644 --- a/web-vue/package.json +++ b/web-vue/package.json @@ -1,103 +1,43 @@ { - "name": "ant-design-pro", - "version": "4.2.2", + "name": "web-vue", + "version": "0.1.0", "private": true, - "description": "An out-of-box UI solution for enterprise applications", "scripts": { - "analyze": "cross-env ANALYZE=1 umi build", - "build": "umi build", - "deploy": "npm run site && npm run gh-pages", - "dev": "npm run start:dev", - "fetch:blocks": "pro fetch-blocks && npm run prettier", - "gh-pages": "gh-pages -d dist", - "i18n-remove": "pro i18n-remove --locale=zh-CN --write", - "postinstall": "umi g tmp", - "lint": "umi g tmp && npm run lint:js && npm run lint:style && npm run lint:prettier", - "lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx ", - "lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src && npm run lint:style", - "lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src", - "lint:prettier": "prettier --check \"src/**/*\" --end-of-line auto", - "lint:style": "stylelint --fix \"src/**/*.less\" --syntax less", - "precommit": "lint-staged", - "prettier": "prettier -c --write \"src/**/*\"", - "start": "umi dev", - "start:dev": "cross-env REACT_APP_ENV=dev MOCK=none umi dev", - "start:no-mock": "cross-env MOCK=none umi dev", - "start:no-ui": "cross-env UMI_UI=none umi dev", - "start:pre": "cross-env REACT_APP_ENV=pre umi dev", - "start:test": "cross-env REACT_APP_ENV=test MOCK=none umi dev", - "pretest": "node ./tests/beforeTest", - "test": "umi test", - "test:all": "node ./tests/run-tests.js", - "test:component": "umi test ./src/components", - "tsc": "tsc --noEmit" + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" }, - "lint-staged": { - "**/*.less": "stylelint --syntax less", - "**/*.{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": "^4.0.0", - "@ant-design/pro-descriptions": "^1.0.19", - "@ant-design/pro-form": "^1.0.2", - "@ant-design/pro-layout": "^6.4.19", - "@ant-design/pro-table": "^2.9.5", - "@umijs/route-utils": "^1.0.33", - "antd": "^4.7.0", - "classnames": "^2.2.6", - "lodash": "^4.17.11", - "moment": "^2.25.3", - "omit.js": "^2.0.2", - "qs": "^6.9.0", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-helmet-async": "^1.0.4", - "umi": "^3.2.14", - "umi-request": "^1.0.8", - "use-merge-value": "^1.0.1" + "ant-design-vue": "^1.7.1", + "core-js": "^3.6.5", + "vue": "^2.6.11" }, "devDependencies": { - "@ant-design/pro-cli": "^1.0.18", - "@types/classnames": "^2.2.7", - "@types/express": "^4.17.0", - "@types/history": "^4.7.2", - "@types/jest": "^26.0.0", - "@types/lodash": "^4.14.144", - "@types/qs": "^6.5.3", - "@types/react": "^16.9.17", - "@types/react-dom": "^16.8.4", - "@types/react-helmet": "^6.1.0", - "@umijs/fabric": "^2.3.0", - "@umijs/plugin-blocks": "^2.0.5", - "@umijs/preset-ant-design-pro": "^1.2.0", - "@umijs/preset-react": "^1.4.8", - "@umijs/yorkie": "^2.0.3", - "carlo": "^0.9.46", - "chalk": "^4.0.0", - "cross-env": "^7.0.0", - "cross-port-killer": "^1.1.1", - "detect-installer": "^1.0.1", - "enzyme": "^3.11.0", - "eslint": "^7.1.0", - "express": "^4.17.1", - "gh-pages": "^3.0.0", - "jsdom-global": "^3.0.2", - "lint-staged": "^10.0.0", - "mockjs": "^1.0.1-beta3", - "prettier": "^2.0.1", - "pro-download": "1.0.1", - "puppeteer-core": "^5.0.0", - "stylelint": "^13.0.0", - "typescript": "^4.0.3" + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "babel-eslint": "^10.1.0", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "vue-template-compiler": "^2.6.11" }, - "engines": { "node": ">=10.0.0" }, - "checkFiles": [ - "src/**/*.js*", - "src/**/*.ts*", - "src/**/*.less", - "config/**/*.js*", - "scripts/**/*.js" + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "eslint:recommended" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": {} + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" ] } diff --git a/web-vue/public/CNAME b/web-vue/public/CNAME deleted file mode 100644 index 30c2d4d36..000000000 --- a/web-vue/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -preview.pro.ant.design \ No newline at end of file diff --git a/web-vue/public/favicon.ico b/web-vue/public/favicon.ico index e2e93252988b5bed120ddeb168eb577bf0caa881..df36fcfb72584e00488330b560ebcf34a41c64c2 100644 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 4286 zcmeHLO(?8k6#ga#Gs=ufvobTd=q@y~nOLdYlqL%nQY4WqC`)z}3y~cqOAAF4VkQd~ z^3$wrC}~D1l%!eMp!|gA&U5sN?~b{2>)yNg-s#Lc-+9k_p7Y<=XqqYcDJs(Vt%dBG z=F~Lpdy*pd!Y zozZT}udJ-#| zqiAVq0sT@kAMMobbULxOw+F6{j*egO8CQ?TgTuo^+}_@zrlv;l$*-)e#PRVl?(Xgo zi9`?zg>ZFsh0DuJ)Ya9!von7LPN@OfP9IfH_4tet&&I~a#O{TK1<3*LO-xJ( zZ*Fc5%v&m4#Z&mZySs8{XJ-fV^Yh@{p`ju8d_J)w6+U%`!(qAC+uJK~qg_o+O|QC` zTVg0Y{jSHqzP^^&G0t4^cwF+$`egj?@9$AtTMLuPB>7!lUKY8&zP?xd=H_PM(U;HS ztNi!(_oJes0<5X6tu4{BxVR{FO)_x3UauFkv$I%RTSHe@7dAIHF+4mhc?|>t(!XbCXVQZk z8yje7Xh2R*&WCwdw&?N4$H!4$Uyq)i9_;V$3;y)^-LKhmkv{Z#(CP^-7Wn# zI5-H>z`y`nTU%u=f7Tbh-mg5fPT0G8`Wx6^vD1(>-r0;AFlyjWYC!!D@UQlt)%}4^ diff --git a/web-vue/public/home_bg.png b/web-vue/public/home_bg.png deleted file mode 100644 index 7c92a4bef248fd9a6cba50e72c5a641ee4cdca2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203330 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¬4*_ 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 z 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 g>MQXTm2T=TNap`^ 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%0DM!Hp}{;&%I4T^x7n$3v;!}60cbAOLzGYwk(SO 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 diff --git a/web-vue/public/icons/icon-128x128.png b/web-vue/public/icons/icon-128x128.png deleted file mode 100644 index 48d0e2339a60a637b94319c65e8654289b4f4b6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1329 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

*C7T$?5!b= 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 + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +

+ + + diff --git a/web-vue/public/pro_icon.svg b/web-vue/public/pro_icon.svg deleted file mode 100644 index e075b78d7..000000000 --- a/web-vue/public/pro_icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/web-vue/src/App.vue b/web-vue/src/App.vue new file mode 100644 index 000000000..55df31532 --- /dev/null +++ b/web-vue/src/App.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/web-vue/src/assets/logo.png b/web-vue/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43 GIT binary patch literal 6849 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 28 Copy 5Created with Sketch. \ No newline at end of file diff --git a/web-vue/src/components/Authorized/Authorized.jsx b/web-vue/src/components/Authorized/Authorized.jsx deleted file mode 100644 index 530edc925..000000000 --- a/web-vue/src/components/Authorized/Authorized.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { Result } from 'antd'; -import check from './CheckPermissions'; - -const Authorized = ({ - children, - authority, - noMatch = ( - - ), -}) => { - const childrenRender = typeof children === 'undefined' ? null : children; - const dom = check(authority, childrenRender, noMatch); - return <>{dom}; -}; - -export default Authorized; diff --git a/web-vue/src/components/Authorized/AuthorizedRoute.jsx b/web-vue/src/components/Authorized/AuthorizedRoute.jsx deleted file mode 100644 index abc5b9d29..000000000 --- a/web-vue/src/components/Authorized/AuthorizedRoute.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Redirect, Route } from 'umi'; -import React from 'react'; -import Authorized from './Authorized'; - -const AuthorizedRoute = ({ component: Component, render, authority, redirectPath, ...rest }) => ( - ( - - )} - /> - } - > - (Component ? : render(props))} /> - -); - -export default AuthorizedRoute; diff --git a/web-vue/src/components/Authorized/CheckPermissions.jsx b/web-vue/src/components/Authorized/CheckPermissions.jsx deleted file mode 100644 index e9ac507d2..000000000 --- a/web-vue/src/components/Authorized/CheckPermissions.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react'; -import { CURRENT } from './renderAuthorize'; // eslint-disable-next-line import/no-cycle - -import PromiseRender from './PromiseRender'; - -/** - * 通用权限检查方法 - * Common check permissions method - * @param { 权限判定 | Permission judgment } authority - * @param { 你的权限 | Your permission description } currentAuthority - * @param { 通过的组件 | Passing components } target - * @param { 未通过的组件 | no pass components } Exception - */ -const checkPermissions = (authority, currentAuthority, target, Exception) => { - // 没有判定权限.默认查看所有 - // Retirement authority, return target; - if (!authority) { - return target; - } // 数组处理 - - if (Array.isArray(authority)) { - if (Array.isArray(currentAuthority)) { - if (currentAuthority.some((item) => authority.includes(item))) { - return target; - } - } else if (authority.includes(currentAuthority)) { - return target; - } - - return Exception; - } // string 处理 - - if (typeof authority === 'string') { - if (Array.isArray(currentAuthority)) { - if (currentAuthority.some((item) => authority === item)) { - return target; - } - } else if (authority === currentAuthority) { - return target; - } - - return Exception; - } // Promise 处理 - - if (authority instanceof Promise) { - return ; - } // Function 处理 - - if (typeof authority === 'function') { - const bool = authority(currentAuthority); // 函数执行后返回值是 Promise - - if (bool instanceof Promise) { - return ; - } - - if (bool) { - return target; - } - - return Exception; - } - - throw new Error('unsupported parameters'); -}; - -export { checkPermissions }; - -function check(authority, target, Exception) { - return checkPermissions(authority, CURRENT, target, Exception); -} - -export default check; diff --git a/web-vue/src/components/Authorized/PromiseRender.jsx b/web-vue/src/components/Authorized/PromiseRender.jsx deleted file mode 100644 index acb331db1..000000000 --- a/web-vue/src/components/Authorized/PromiseRender.jsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import { Spin } from 'antd'; -import isEqual from 'lodash/isEqual'; -import { isComponentClass } from './Secured'; // eslint-disable-next-line import/no-cycle - -export default class PromiseRender extends React.Component { - state = { - component: () => null, - }; - - componentDidMount() { - this.setRenderComponent(this.props); - } - - shouldComponentUpdate = (nextProps, nextState) => { - const { component } = this.state; - - if (!isEqual(nextProps, this.props)) { - this.setRenderComponent(nextProps); - } - - if (nextState.component !== component) return true; - return false; - }; // set render Component : ok or error - - setRenderComponent(props) { - const ok = this.checkIsInstantiation(props.ok); - const error = this.checkIsInstantiation(props.error); - props.promise - .then(() => { - this.setState({ - component: ok, - }); - return true; - }) - .catch(() => { - this.setState({ - component: error, - }); - }); - } // Determine whether the incoming component has been instantiated - // AuthorizedRoute is already instantiated - // Authorized render is already instantiated, children is no instantiated - // Secured is not instantiated - - checkIsInstantiation = (target) => { - if (isComponentClass(target)) { - const Target = target; - return (props) => ; - } - - if (React.isValidElement(target)) { - return (props) => React.cloneElement(target, props); - } - - return () => target; - }; - - render() { - const { component: Component } = this.state; - const { ok, error, promise, ...rest } = this.props; - return Component ? ( - - ) : ( -
- -
- ); - } -} diff --git a/web-vue/src/components/Authorized/Secured.jsx b/web-vue/src/components/Authorized/Secured.jsx deleted file mode 100644 index e97c37a91..000000000 --- a/web-vue/src/components/Authorized/Secured.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import CheckPermissions from './CheckPermissions'; -/** - * 默认不能访问任何页面 - * default is "NULL" - */ - -const Exception403 = () => 403; - -export const isComponentClass = (component) => { - if (!component) return false; - const proto = Object.getPrototypeOf(component); - if (proto === React.Component || proto === Function.prototype) return true; - return isComponentClass(proto); -}; // Determine whether the incoming component has been instantiated -// AuthorizedRoute is already instantiated -// Authorized render is already instantiated, children is no instantiated -// Secured is not instantiated - -const checkIsInstantiation = (target) => { - if (isComponentClass(target)) { - const Target = target; - return (props) => ; - } - - if (React.isValidElement(target)) { - return (props) => React.cloneElement(target, props); - } - - return () => target; -}; -/** - * 用于判断是否拥有权限访问此 view 权限 - * authority 支持传入 string, () => boolean | Promise - * e.g. 'user' 只有 user 用户能访问 - * e.g. 'user,admin' user 和 admin 都能访问 - * e.g. ()=>boolean 返回true能访问,返回false不能访问 - * e.g. Promise then 能访问 catch不能访问 - * e.g. authority support incoming string, () => boolean | Promise - * e.g. 'user' only user user can access - * e.g. 'user, admin' user and admin can access - * e.g. () => boolean true to be able to visit, return false can not be accessed - * e.g. Promise then can not access the visit to catch - * @param {string | function | Promise} authority - * @param {ReactNode} error 非必需参数 - */ - -const authorize = (authority, error) => { - /** - * conversion into a class - * 防止传入字符串时找不到staticContext造成报错 - * String parameters can cause staticContext not found error - */ - let classError = false; - - if (error) { - classError = () => error; - } - - if (!authority) { - throw new Error('authority is required'); - } - - return function decideAuthority(target) { - const component = CheckPermissions(authority, target, classError || Exception403); - return checkIsInstantiation(component); - }; -}; - -export default authorize; diff --git a/web-vue/src/components/Authorized/index.jsx b/web-vue/src/components/Authorized/index.jsx deleted file mode 100644 index bd652582c..000000000 --- a/web-vue/src/components/Authorized/index.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import Authorized from './Authorized'; -import Secured from './Secured'; -import check from './CheckPermissions'; -import renderAuthorize from './renderAuthorize'; -Authorized.Secured = Secured; -Authorized.check = check; -const RenderAuthorize = renderAuthorize(Authorized); -export default RenderAuthorize; diff --git a/web-vue/src/components/Authorized/renderAuthorize.js b/web-vue/src/components/Authorized/renderAuthorize.js deleted file mode 100644 index 0169168b3..000000000 --- a/web-vue/src/components/Authorized/renderAuthorize.js +++ /dev/null @@ -1,30 +0,0 @@ -/* eslint-disable eslint-comments/disable-enable-pair */ - -/* eslint-disable import/no-mutable-exports */ -let CURRENT = 'NULL'; - -/** - * use authority or getAuthority - * @param {string|()=>String} currentAuthority - */ -const renderAuthorize = (Authorized) => (currentAuthority) => { - if (currentAuthority) { - if (typeof currentAuthority === 'function') { - CURRENT = currentAuthority(); - } - - if ( - Object.prototype.toString.call(currentAuthority) === '[object String]' || - Array.isArray(currentAuthority) - ) { - CURRENT = currentAuthority; - } - } else { - CURRENT = 'NULL'; - } - - return Authorized; -}; - -export { CURRENT }; -export default (Authorized) => renderAuthorize(Authorized); diff --git a/web-vue/src/components/GlobalHeader/AvatarDropdown.jsx b/web-vue/src/components/GlobalHeader/AvatarDropdown.jsx deleted file mode 100644 index 061a08b85..000000000 --- a/web-vue/src/components/GlobalHeader/AvatarDropdown.jsx +++ /dev/null @@ -1,80 +0,0 @@ -import { LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons'; -import { Avatar, Menu, Spin } from 'antd'; -import React from 'react'; -import { history, connect } from 'umi'; -import HeaderDropdown from '../HeaderDropdown'; -import styles from './index.less'; - -class AvatarDropdown extends React.Component { - onMenuClick = (event) => { - const { key } = event; - - if (key === 'logout') { - const { dispatch } = this.props; - - if (dispatch) { - dispatch({ - type: 'login/logout', - }); - } - - return; - } - - history.push(`/account/${key}`); - }; - - render() { - const { - currentUser = { - avatar: '', - name: '', - }, - menu, - } = this.props; - const menuHeaderDropdown = ( - - {menu && ( - - - 个人中心 - - )} - {menu && ( - - - 个人设置 - - )} - {menu && } - - - - 退出登录 - - - ); - return currentUser && currentUser.name ? ( - - - - {currentUser.name} - - - ) : ( - - - - ); - } -} - -export default connect(({ user }) => ({ - currentUser: user.currentUser, -}))(AvatarDropdown); diff --git a/web-vue/src/components/GlobalHeader/NoticeIconView.jsx b/web-vue/src/components/GlobalHeader/NoticeIconView.jsx deleted file mode 100644 index 705b6d2e9..000000000 --- a/web-vue/src/components/GlobalHeader/NoticeIconView.jsx +++ /dev/null @@ -1,153 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'umi'; -import { Tag, message } from 'antd'; -import groupBy from 'lodash/groupBy'; -import moment from 'moment'; -import NoticeIcon from '../NoticeIcon'; -import styles from './index.less'; - -class GlobalHeaderRight extends Component { - componentDidMount() { - const { dispatch } = this.props; - - if (dispatch) { - dispatch({ - type: 'global/fetchNotices', - }); - } - } - - changeReadState = (clickedItem) => { - const { id } = clickedItem; - const { dispatch } = this.props; - - if (dispatch) { - dispatch({ - type: 'global/changeNoticeReadState', - payload: id, - }); - } - }; - handleNoticeClear = (title, key) => { - const { dispatch } = this.props; - message.success(`${'清空了'} ${title}`); - - if (dispatch) { - dispatch({ - type: 'global/clearNotices', - payload: key, - }); - } - }; - getNoticeData = () => { - const { notices = [] } = this.props; - - if (!notices || notices.length === 0 || !Array.isArray(notices)) { - return {}; - } - - const newNotices = notices.map((notice) => { - const newNotice = { ...notice }; - - if (newNotice.datetime) { - newNotice.datetime = moment(notice.datetime).fromNow(); - } - - if (newNotice.id) { - newNotice.key = newNotice.id; - } - - if (newNotice.extra && newNotice.status) { - const color = { - todo: '', - processing: 'blue', - urgent: 'red', - doing: 'gold', - }[newNotice.status]; - newNotice.extra = ( - - {newNotice.extra} - - ); - } - - return newNotice; - }); - return groupBy(newNotices, 'type'); - }; - getUnreadData = (noticeData) => { - const unreadMsg = {}; - Object.keys(noticeData).forEach((key) => { - const value = noticeData[key]; - - if (!unreadMsg[key]) { - unreadMsg[key] = 0; - } - - if (Array.isArray(value)) { - unreadMsg[key] = value.filter((item) => !item.read).length; - } - }); - return unreadMsg; - }; - - render() { - const { currentUser, fetchingNotices, onNoticeVisibleChange } = this.props; - const noticeData = this.getNoticeData(); - const unreadMsg = this.getUnreadData(noticeData); - return ( - { - this.changeReadState(item); - }} - loading={fetchingNotices} - clearText="清空" - viewMoreText="查看更多" - onClear={this.handleNoticeClear} - onPopupVisibleChange={onNoticeVisibleChange} - onViewMore={() => message.info('Click on view more')} - clearClose - > - - - - - ); - } -} - -export default connect(({ user, global, loading }) => ({ - currentUser: user.currentUser, - collapsed: global.collapsed, - fetchingMoreNotices: loading.effects['global/fetchMoreNotices'], - fetchingNotices: loading.effects['global/fetchNotices'], - notices: global.notices, -}))(GlobalHeaderRight); diff --git a/web-vue/src/components/GlobalHeader/RightContent.jsx b/web-vue/src/components/GlobalHeader/RightContent.jsx deleted file mode 100644 index b25f33266..000000000 --- a/web-vue/src/components/GlobalHeader/RightContent.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import { Tooltip, Tag } from 'antd'; -import { QuestionCircleOutlined } from '@ant-design/icons'; -import React from 'react'; -import { connect, SelectLang } from 'umi'; -import Avatar from './AvatarDropdown'; -import HeaderSearch from '../HeaderSearch'; -import styles from './index.less'; -const ENVTagColor = { - dev: 'orange', - test: 'green', - pre: '#87d068', -}; - -const GlobalHeaderRight = (props) => { - const { theme, layout } = props; - let className = styles.right; - - if (theme === 'dark' && layout === 'top') { - className = `${styles.right} ${styles.dark}`; - } - - return ( -
- umi ui, - value: 'umi ui', - }, - { - label: Ant Design, - value: 'Ant Design', - }, - { - label: Pro Table, - value: 'Pro Table', - }, - { - label: Pro Layout, - value: 'Pro Layout', - }, - ]} // onSearch={value => { - // //console.log('input', value); - // }} - /> - - - - - - - {REACT_APP_ENV && ( - - {REACT_APP_ENV} - - )} - -
- ); -}; - -export default connect(({ settings }) => ({ - theme: settings.navTheme, - layout: settings.layout, -}))(GlobalHeaderRight); diff --git a/web-vue/src/components/GlobalHeader/index.less b/web-vue/src/components/GlobalHeader/index.less deleted file mode 100644 index a7fa9bff3..000000000 --- a/web-vue/src/components/GlobalHeader/index.less +++ /dev/null @@ -1,82 +0,0 @@ -@import '~antd/es/style/themes/default.less'; - -@pro-header-hover-bg: rgba(0, 0, 0, 0.025); - -.menu { - :global(.anticon) { - margin-right: 8px; - } - :global(.ant-dropdown-menu-item) { - min-width: 160px; - } -} - -.right { - display: flex; - float: right; - height: 48px; - margin-left: auto; - overflow: hidden; - .action { - display: flex; - align-items: center; - height: 100%; - padding: 0 12px; - cursor: pointer; - transition: all 0.3s; - > span { - vertical-align: middle; - } - &:hover { - background: @pro-header-hover-bg; - } - &:global(.opened) { - background: @pro-header-hover-bg; - } - } - .search { - padding: 0 12px; - &:hover { - background: transparent; - } - } - .account { - .avatar { - margin: ~'calc((@{layout-header-height} - 24px) / 2)' 0; - margin-right: 8px; - color: @primary-color; - vertical-align: top; - background: rgba(255, 255, 255, 0.85); - } - } -} - -.dark { - .action { - color: rgba(255, 255, 255, 0.85); - > span { - color: rgba(255, 255, 255, 0.85); - } - &:hover, - &:global(.opened) { - background: @primary-color; - } - } -} - -:global(.ant-pro-global-header) { - .dark { - .action { - color: @text-color; - > span { - color: @text-color; - } - &:hover { - color: rgba(255, 255, 255, 0.85); - > span { - color: rgba(255, 255, 255, 0.85); - } - } - } - } -} diff --git a/web-vue/src/components/HeaderDropdown/index.jsx b/web-vue/src/components/HeaderDropdown/index.jsx deleted file mode 100644 index c857c0d73..000000000 --- a/web-vue/src/components/HeaderDropdown/index.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Dropdown } from 'antd'; -import React from 'react'; -import classNames from 'classnames'; -import styles from './index.less'; - -const HeaderDropdown = ({ overlayClassName: cls, ...restProps }) => ( - -); - -export default HeaderDropdown; diff --git a/web-vue/src/components/HeaderDropdown/index.less b/web-vue/src/components/HeaderDropdown/index.less deleted file mode 100644 index 004b53ebd..000000000 --- a/web-vue/src/components/HeaderDropdown/index.less +++ /dev/null @@ -1,16 +0,0 @@ -@import '~antd/es/style/themes/default.less'; - -.container > * { - background-color: @popover-bg; - border-radius: 4px; - box-shadow: @shadow-1-down; -} - -@media screen and (max-width: @screen-xs) { - .container { - width: 100% !important; - } - .container > * { - border-radius: 0 !important; - } -} diff --git a/web-vue/src/components/HeaderSearch/index.jsx b/web-vue/src/components/HeaderSearch/index.jsx deleted file mode 100644 index 70fe004ba..000000000 --- a/web-vue/src/components/HeaderSearch/index.jsx +++ /dev/null @@ -1,86 +0,0 @@ -import { SearchOutlined } from '@ant-design/icons'; -import { AutoComplete, Input } from 'antd'; -import useMergeValue from 'use-merge-value'; -import React, { useRef } from 'react'; -import classNames from 'classnames'; -import styles from './index.less'; - -const HeaderSearch = (props) => { - const { - className, - defaultValue, - onVisibleChange, - placeholder, - open, - defaultOpen, - ...restProps - } = props; - const inputRef = useRef(null); - const [value, setValue] = useMergeValue(defaultValue, { - value: props.value, - onChange: props.onChange, - }); - const [searchMode, setSearchMode] = useMergeValue(defaultOpen || false, { - value: props.open, - onChange: onVisibleChange, - }); - const inputClass = classNames(styles.input, { - [styles.show]: searchMode, - }); - return ( -
{ - setSearchMode(true); - - if (searchMode && inputRef.current) { - inputRef.current.focus(); - } - }} - onTransitionEnd={({ propertyName }) => { - if (propertyName === 'width' && !searchMode) { - if (onVisibleChange) { - onVisibleChange(searchMode); - } - } - }} - > - - - { - if (e.key === 'Enter') { - if (restProps.onSearch) { - restProps.onSearch(value); - } - } - }} - onBlur={() => { - setSearchMode(false); - }} - /> - -
- ); -}; - -export default HeaderSearch; diff --git a/web-vue/src/components/HeaderSearch/index.less b/web-vue/src/components/HeaderSearch/index.less deleted file mode 100644 index 9af69d5ff..000000000 --- a/web-vue/src/components/HeaderSearch/index.less +++ /dev/null @@ -1,30 +0,0 @@ -@import '~antd/es/style/themes/default.less'; - -.headerSearch { - .input { - width: 0; - min-width: 0; - overflow: hidden; - background: transparent; - border-radius: 0; - transition: width 0.3s, margin-left 0.3s; - :global(.ant-select-selection) { - background: transparent; - } - input { - padding-right: 0; - padding-left: 0; - border: 0; - box-shadow: none !important; - } - &, - &:hover, - &:focus { - border-bottom: 1px solid @border-color-base; - } - &.show { - width: 210px; - margin-left: 8px; - } - } -} diff --git a/web-vue/src/components/HelloWorld.vue b/web-vue/src/components/HelloWorld.vue new file mode 100644 index 000000000..879051a29 --- /dev/null +++ b/web-vue/src/components/HelloWorld.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/web-vue/src/components/NoticeIcon/NoticeList.jsx b/web-vue/src/components/NoticeIcon/NoticeList.jsx deleted file mode 100644 index 0baab24ea..000000000 --- a/web-vue/src/components/NoticeIcon/NoticeList.jsx +++ /dev/null @@ -1,95 +0,0 @@ -import { Avatar, List } from 'antd'; -import React from 'react'; -import classNames from 'classnames'; -import styles from './NoticeList.less'; - -const NoticeList = ({ - data = [], - onClick, - onClear, - title, - onViewMore, - emptyText, - showClear = true, - clearText, - viewMoreText, - showViewMore = false, -}) => { - if (!data || data.length === 0) { - return ( -
- not found -
{emptyText}
-
- ); - } - - return ( -
- { - const itemCls = classNames(styles.item, { - [styles.read]: item.read, - }); // eslint-disable-next-line no-nested-ternary - - const leftIcon = item.avatar ? ( - typeof item.avatar === 'string' ? ( - - ) : ( - {item.avatar} - ) - ) : null; - return ( - onClick && onClick(item)} - > - - {item.title} -
{item.extra}
-
- } - description={ -
-
{item.description}
-
{item.datetime}
-
- } - /> - - ); - }} - /> -
- {showClear ? ( -
- {clearText} {title} -
- ) : null} - {showViewMore ? ( -
{ - if (onViewMore) { - onViewMore(e); - } - }} - > - {viewMoreText} -
- ) : null} -
- - ); -}; - -export default NoticeList; diff --git a/web-vue/src/components/NoticeIcon/NoticeList.less b/web-vue/src/components/NoticeIcon/NoticeList.less deleted file mode 100755 index 65e0c407b..000000000 --- a/web-vue/src/components/NoticeIcon/NoticeList.less +++ /dev/null @@ -1,103 +0,0 @@ -@import '~antd/es/style/themes/default.less'; - -.list { - max-height: 400px; - overflow: auto; - &::-webkit-scrollbar { - display: none; - } - .item { - padding-right: 24px; - padding-left: 24px; - overflow: hidden; - cursor: pointer; - transition: all 0.3s; - - .meta { - width: 100%; - } - - .avatar { - margin-top: 4px; - background: @component-background; - } - .iconElement { - font-size: 32px; - } - - &.read { - opacity: 0.4; - } - &:last-child { - border-bottom: 0; - } - &:hover { - background: @primary-1; - } - .title { - margin-bottom: 8px; - font-weight: normal; - } - .description { - font-size: 12px; - line-height: @line-height-base; - } - .datetime { - margin-top: 4px; - font-size: 12px; - line-height: @line-height-base; - } - .extra { - float: right; - margin-top: -1.5px; - margin-right: 0; - color: @text-color-secondary; - font-weight: normal; - } - } - .loadMore { - padding: 8px 0; - color: @primary-6; - text-align: center; - cursor: pointer; - &.loadedAll { - color: rgba(0, 0, 0, 0.25); - cursor: unset; - } - } -} - -.notFound { - padding: 73px 0 88px; - color: @text-color-secondary; - text-align: center; - img { - display: inline-block; - height: 76px; - margin-bottom: 16px; - } -} - -.bottomBar { - height: 46px; - color: @text-color; - line-height: 46px; - text-align: center; - border-top: 1px solid @border-color-split; - border-radius: 0 0 @border-radius-base @border-radius-base; - transition: all 0.3s; - div { - display: inline-block; - width: 50%; - cursor: pointer; - transition: all 0.3s; - user-select: none; - - &:only-child { - width: 100%; - } - &:not(:only-child):last-child { - border-left: 1px solid @border-color-split; - } - } -} diff --git a/web-vue/src/components/NoticeIcon/index.jsx b/web-vue/src/components/NoticeIcon/index.jsx deleted file mode 100644 index bc773f990..000000000 --- a/web-vue/src/components/NoticeIcon/index.jsx +++ /dev/null @@ -1,112 +0,0 @@ -import { BellOutlined } from '@ant-design/icons'; -import { Badge, Spin, Tabs } from 'antd'; -import useMergeValue from 'use-merge-value'; -import React from 'react'; -import classNames from 'classnames'; -import NoticeList from './NoticeList'; -import HeaderDropdown from '../HeaderDropdown'; -import styles from './index.less'; -const { TabPane } = Tabs; - -const NoticeIcon = (props) => { - const getNotificationBox = () => { - const { - children, - loading, - onClear, - onTabChange, - onItemClick, - onViewMore, - clearText, - viewMoreText, - } = props; - - if (!children) { - return null; - } - - const panes = []; - React.Children.forEach(children, (child) => { - if (!child) { - return; - } - - const { list, title, count, tabKey, showClear, showViewMore } = child.props; - const len = list && list.length ? list.length : 0; - const msgCount = count || count === 0 ? count : len; - const tabTitle = msgCount > 0 ? `${title} (${msgCount})` : title; - panes.push( - - onClear && onClear(title, tabKey)} - onClick={(item) => onItemClick && onItemClick(item, child.props)} - onViewMore={(event) => onViewMore && onViewMore(child.props, event)} - showClear={showClear} - showViewMore={showViewMore} - title={title} - /> - , - ); - }); - return ( - - - {panes} - - - ); - }; - - const { className, count, bell } = props; - const [visible, setVisible] = useMergeValue(false, { - value: props.popupVisible, - onChange: props.onPopupVisibleChange, - }); - const noticeButtonClass = classNames(className, styles.noticeButton); - const notificationBox = getNotificationBox(); - const NoticeBellIcon = bell || ; - const trigger = ( - - - {NoticeBellIcon} - - - ); - - if (!notificationBox) { - return trigger; - } - - return ( - - {trigger} - - ); -}; - -NoticeIcon.defaultProps = { - emptyImage: 'https://gw.alipayobjects.com/zos/rmsportal/wAhyIChODzsoKIOBHcBk.svg', -}; -NoticeIcon.Tab = NoticeList; -export default NoticeIcon; diff --git a/web-vue/src/components/NoticeIcon/index.less b/web-vue/src/components/NoticeIcon/index.less deleted file mode 100644 index 45251cdd9..000000000 --- a/web-vue/src/components/NoticeIcon/index.less +++ /dev/null @@ -1,35 +0,0 @@ -@import '~antd/es/style/themes/default.less'; - -.popover { - position: relative; - width: 336px; -} - -.noticeButton { - display: inline-block; - cursor: pointer; - transition: all 0.3s; -} -.icon { - padding: 4px; - vertical-align: middle; -} - -.badge { - font-size: 16px; -} - -.tabs { - :global { - .ant-tabs-nav-list { - margin: auto; - } - - .ant-tabs-nav-scroll { - text-align: center; - } - .ant-tabs-bar { - margin-bottom: 0; - } - } -} diff --git a/web-vue/src/components/PageLoading/index.jsx b/web-vue/src/components/PageLoading/index.jsx deleted file mode 100644 index 090940271..000000000 --- a/web-vue/src/components/PageLoading/index.jsx +++ /dev/null @@ -1,4 +0,0 @@ -import { PageLoading } from '@ant-design/pro-layout'; // loading components from code split -// https://umijs.org/plugin/umi-plugin-react.html#dynamicimport - -export default PageLoading; diff --git a/web-vue/src/e2e/__mocks__/antd-pro-merge-less.js b/web-vue/src/e2e/__mocks__/antd-pro-merge-less.js deleted file mode 100644 index f237ddf58..000000000 --- a/web-vue/src/e2e/__mocks__/antd-pro-merge-less.js +++ /dev/null @@ -1 +0,0 @@ -export default undefined; diff --git a/web-vue/src/e2e/baseLayout.e2e.js b/web-vue/src/e2e/baseLayout.e2e.js deleted file mode 100644 index f328adac1..000000000 --- a/web-vue/src/e2e/baseLayout.e2e.js +++ /dev/null @@ -1,57 +0,0 @@ -const { uniq } = require('lodash'); -const RouterConfig = require('../../config/config').default.routes; - -const BASE_URL = `http://localhost:${process.env.PORT || 8000}`; - -function formatter(routes, parentPath = '') { - const fixedParentPath = parentPath.replace(/\/{1,}/g, '/'); - let result = []; - routes.forEach((item) => { - if (item.path) { - result.push(`${fixedParentPath}/${item.path}`.replace(/\/{1,}/g, '/')); - } - if (item.routes) { - result = result.concat( - formatter(item.routes, item.path ? `${fixedParentPath}/${item.path}` : parentPath), - ); - } - }); - return uniq(result.filter((item) => !!item)); -} - -beforeEach(async () => { - await page.goto(`${BASE_URL}`); - await page.evaluate(() => { - localStorage.setItem('antd-pro-authority', '["admin"]'); - }); -}); - -describe('Ant Design Pro E2E test', () => { - const testPage = (path) => async () => { - await page.goto(`${BASE_URL}${path}`); - await page.waitForSelector('footer', { - timeout: 2000, - }); - const haveFooter = await page.evaluate( - () => document.getElementsByTagName('footer').length > 0, - ); - expect(haveFooter).toBeTruthy(); - }; - - const routers = formatter(RouterConfig); - routers.forEach((route) => { - it(`test pages ${route}`, testPage(route)); - }); - - it('topmenu should have footer', async () => { - const params = '?navTheme=light&layout=topmenu'; - await page.goto(`${BASE_URL}${params}`); - await page.waitForSelector('footer', { - timeout: 2000, - }); - const haveFooter = await page.evaluate( - () => document.getElementsByTagName('footer').length > 0, - ); - expect(haveFooter).toBeTruthy(); - }); -}); diff --git a/web-vue/src/global.jsx b/web-vue/src/global.jsx deleted file mode 100644 index 559bfd529..000000000 --- a/web-vue/src/global.jsx +++ /dev/null @@ -1,102 +0,0 @@ -import { Button, message, notification } from 'antd'; -import React from 'react'; -import { useIntl } from 'umi'; -import defaultSettings from '../config/defaultSettings'; -const { pwa } = defaultSettings; -const isHttps = document.location.protocol === 'https:'; // 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) => { - const e = event; - - 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], - ); - }); // Refresh current page to use the updated HTML and other assets after SW has skiped waiting - - window.location.reload(true); - return true; - }; - - const key = `open${Date.now()}`; - const btn = ( - - ); - notification.open({ - message: useIntl().formatMessage({ - id: 'app.pwa.serviceworker.updated', - }), - description: useIntl().formatMessage({ - id: 'app.pwa.serviceworker.updated.hint', - }), - btn, - key, - onClose: async () => {}, - }); - }); -} 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(); - }); // remove all caches - - if (window.caches && window.caches.keys) { - caches.keys().then((keys) => { - keys.forEach((key) => { - caches.delete(key); - }); - }); - } -} diff --git a/web-vue/src/global.less b/web-vue/src/global.less deleted file mode 100644 index 1b5140123..000000000 --- a/web-vue/src/global.less +++ /dev/null @@ -1,54 +0,0 @@ -@import '~antd/es/style/themes/default.less'; - -html, -body, -#root { - height: 100%; -} - -.colorWeak { - filter: invert(80%); -} - -.ant-layout { - min-height: 100vh; -} - -canvas { - display: block; -} - -body { - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -ul, -ol { - list-style: none; -} - -@media (max-width: @screen-xs) { - .ant-table { - width: 100%; - overflow-x: auto; - &-thead > tr, - &-tbody > tr { - > th, - > td { - white-space: pre; - > span { - display: block; - } - } - } - } -} - -// 兼容IE11 -@media screen and(-ms-high-contrast: active), (-ms-high-contrast: none) { - body .ant-design-pro > .ant-layout { - min-height: 100vh; - } -} diff --git a/web-vue/src/layouts/BasicLayout.jsx b/web-vue/src/layouts/BasicLayout.jsx deleted file mode 100644 index 2593dbbbb..000000000 --- a/web-vue/src/layouts/BasicLayout.jsx +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Ant Design Pro v4 use `@ant-design/pro-layout` to handle Layout. - * You can view component api by: - * https://github.com/ant-design/ant-design-pro-layout - */ -import ProLayout, { DefaultFooter } from '@ant-design/pro-layout'; -import React, { useEffect, useMemo, useRef } from 'react'; -import { Link, useIntl, connect, history } from 'umi'; -import { GithubOutlined } from '@ant-design/icons'; -import { Result, Button } from 'antd'; -import Authorized from '@/utils/Authorized'; -import RightContent from '@/components/GlobalHeader/RightContent'; -import { getMatchMenu } from '@umijs/route-utils'; -import logo from '../assets/logo.svg'; -const noMatch = ( - - Go Login - - } - /> -); - -/** - * use Authorized check all menu item - */ -const menuDataRender = (menuList) => - menuList.map((item) => { - const localItem = { - ...item, - children: item.children ? menuDataRender(item.children) : undefined, - }; - return Authorized.check(item.authority, localItem, null); - }); - -const defaultFooterDom = ( - , - href: 'https://github.com/ant-design/ant-design-pro', - blankTarget: true, - }, - { - key: 'Ant Design', - title: 'Ant Design', - href: 'https://ant.design', - blankTarget: true, - }, - ]} - /> -); - -const BasicLayout = (props) => { - const { - dispatch, - children, - settings, - location = { - pathname: '/', - }, - } = props; - const menuDataRef = useRef([]); - useEffect(() => { - if (dispatch) { - dispatch({ - type: 'user/fetchCurrent', - }); - } - }, []); - /** - * init variables - */ - - const handleMenuCollapse = (payload) => { - if (dispatch) { - dispatch({ - type: 'global/changeLayoutCollapsed', - payload, - }); - } - }; // get children authority - - const authorized = useMemo( - () => - getMatchMenu(location.pathname || '/', menuDataRef.current).pop() || { - authority: undefined, - }, - [location.pathname], - ); - const { formatMessage } = useIntl(); - return ( - history.push('/')} - menuItemRender={(menuItemProps, defaultDom) => { - if (menuItemProps.isUrl || !menuItemProps.path) { - return defaultDom; - } - - return {defaultDom}; - }} - breadcrumbRender={(routers = []) => [ - { - path: '/', - breadcrumbName: formatMessage({ - id: 'menu.home', - }), - }, - ...routers, - ]} - itemRender={(route, params, routes, paths) => { - const first = routes.indexOf(route) === 0; - return first ? ( - {route.breadcrumbName} - ) : ( - {route.breadcrumbName} - ); - }} - footerRender={() => defaultFooterDom} - menuDataRender={menuDataRender} - rightContentRender={() => } - postMenuData={(menuData) => { - menuDataRef.current = menuData || []; - return menuData || []; - }} - {...props} - {...settings} - > - - {children} - - - ); -}; - -export default connect(({ global, settings }) => ({ - collapsed: global.collapsed, - settings, -}))(BasicLayout); diff --git a/web-vue/src/layouts/BlankLayout.jsx b/web-vue/src/layouts/BlankLayout.jsx deleted file mode 100644 index e3ee5ff03..000000000 --- a/web-vue/src/layouts/BlankLayout.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; - -const Layout = ({ children }) => <>{children}; - -export default Layout; diff --git a/web-vue/src/layouts/SecurityLayout.jsx b/web-vue/src/layouts/SecurityLayout.jsx deleted file mode 100644 index 33633e8e5..000000000 --- a/web-vue/src/layouts/SecurityLayout.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import { PageLoading } from '@ant-design/pro-layout'; -import { Redirect, connect } from 'umi'; -import { stringify } from 'querystring'; - -class SecurityLayout extends React.Component { - state = { - isReady: false, - }; - - componentDidMount() { - this.setState({ - isReady: true, - }); - const { dispatch } = this.props; - - if (dispatch) { - dispatch({ - type: 'user/fetchCurrent', - }); - } - } - - render() { - const { isReady } = this.state; - const { children, loading, currentUser } = this.props; // You can replace it to your authentication rule (such as check token exists) - // 你可以把它替换成你自己的登录认证规则(比如判断 token 是否存在) - - const isLogin = currentUser && currentUser.userid; - const queryString = stringify({ - redirect: window.location.href, - }); - - if ((!isLogin && loading) || !isReady) { - return ; - } - - if (!isLogin && window.location.pathname !== '/user/login') { - return ; - } - - return children; - } -} - -export default connect(({ user, loading }) => ({ - currentUser: user.currentUser, - loading: loading.models.user, -}))(SecurityLayout); diff --git a/web-vue/src/layouts/UserLayout.jsx b/web-vue/src/layouts/UserLayout.jsx deleted file mode 100644 index a238e5496..000000000 --- a/web-vue/src/layouts/UserLayout.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import { DefaultFooter, getMenuData, getPageTitle } from '@ant-design/pro-layout'; -import { Helmet, HelmetProvider } from 'react-helmet-async'; -import { Link, SelectLang, useIntl, connect } from 'umi'; -import React from 'react'; -import logo from '../assets/logo.svg'; -import styles from './UserLayout.less'; - -const UserLayout = (props) => { - const { - route = { - routes: [], - }, - } = props; - const { routes = [] } = route; - const { - children, - location = { - pathname: '', - }, - } = props; - const { formatMessage } = useIntl(); - const { breadcrumb } = getMenuData(routes); - const title = getPageTitle({ - pathname: location.pathname, - formatMessage, - breadcrumb, - ...props, - }); - return ( - - - {title} - - - -
-
- -
-
-
-
- - logo - Ant Design - -
-
Ant Design 是西湖区最具影响力的 Web 设计规范
-
- {children} -
- -
-
- ); -}; - -export default connect(({ settings }) => ({ ...settings }))(UserLayout); diff --git a/web-vue/src/layouts/UserLayout.less b/web-vue/src/layouts/UserLayout.less deleted file mode 100755 index cdc207ef6..000000000 --- a/web-vue/src/layouts/UserLayout.less +++ /dev/null @@ -1,71 +0,0 @@ -@import '~antd/es/style/themes/default.less'; - -.container { - display: flex; - flex-direction: column; - height: 100vh; - overflow: auto; - background: @layout-body-background; -} - -.lang { - width: 100%; - height: 40px; - line-height: 44px; - text-align: right; - :global(.ant-dropdown-trigger) { - margin-right: 24px; - } -} - -.content { - flex: 1; - padding: 32px 0; -} - -@media (min-width: @screen-md-min) { - .container { - background-image: url('https://gw.alipayobjects.com/zos/rmsportal/TVYTbAXWheQpRcWDaDMu.svg'); - background-repeat: no-repeat; - background-position: center 110px; - background-size: 100%; - } - - .content { - padding: 32px 0 24px; - } -} - -.top { - text-align: center; -} - -.header { - height: 44px; - line-height: 44px; - a { - text-decoration: none; - } -} - -.logo { - height: 44px; - margin-right: 16px; - vertical-align: top; -} - -.title { - position: relative; - top: 2px; - color: @heading-color; - font-weight: 600; - font-size: 33px; - font-family: Avenir, 'Helvetica Neue', Arial, Helvetica, sans-serif; -} - -.desc { - margin-top: 12px; - margin-bottom: 40px; - color: @text-color-secondary; - font-size: @font-size-base; -} diff --git a/web-vue/src/locales/en-US.js b/web-vue/src/locales/en-US.js deleted file mode 100644 index 80afd23a7..000000000 --- a/web-vue/src/locales/en-US.js +++ /dev/null @@ -1,21 +0,0 @@ -import component from './en-US/component'; -import globalHeader from './en-US/globalHeader'; -import menu from './en-US/menu'; -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, -}; diff --git a/web-vue/src/locales/en-US/component.js b/web-vue/src/locales/en-US/component.js deleted file mode 100644 index 3ba7eeda6..000000000 --- a/web-vue/src/locales/en-US/component.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - 'component.tagSelect.expand': 'Expand', - 'component.tagSelect.collapse': 'Collapse', - 'component.tagSelect.all': 'All', -}; diff --git a/web-vue/src/locales/en-US/globalHeader.js b/web-vue/src/locales/en-US/globalHeader.js deleted file mode 100644 index 60b6d4ec2..000000000 --- a/web-vue/src/locales/en-US/globalHeader.js +++ /dev/null @@ -1,17 +0,0 @@ -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', -}; diff --git a/web-vue/src/locales/en-US/menu.js b/web-vue/src/locales/en-US/menu.js deleted file mode 100644 index a737e6977..000000000 --- a/web-vue/src/locales/en-US/menu.js +++ /dev/null @@ -1,52 +0,0 @@ -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', -}; diff --git a/web-vue/src/locales/en-US/pwa.js b/web-vue/src/locales/en-US/pwa.js deleted file mode 100644 index ed8d199ea..000000000 --- a/web-vue/src/locales/en-US/pwa.js +++ /dev/null @@ -1,6 +0,0 @@ -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', -}; diff --git a/web-vue/src/locales/en-US/settingDrawer.js b/web-vue/src/locales/en-US/settingDrawer.js deleted file mode 100644 index a644905e7..000000000 --- a/web-vue/src/locales/en-US/settingDrawer.js +++ /dev/null @@ -1,31 +0,0 @@ -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': 'Weak 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', -}; diff --git a/web-vue/src/locales/en-US/settings.js b/web-vue/src/locales/en-US/settings.js deleted file mode 100644 index 822dd003c..000000000 --- a/web-vue/src/locales/en-US/settings.js +++ /dev/null @@ -1,60 +0,0 @@ -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', -}; diff --git a/web-vue/src/locales/pt-BR.js b/web-vue/src/locales/pt-BR.js deleted file mode 100644 index da00ad92a..000000000 --- a/web-vue/src/locales/pt-BR.js +++ /dev/null @@ -1,19 +0,0 @@ -import component from './pt-BR/component'; -import globalHeader from './pt-BR/globalHeader'; -import menu from './pt-BR/menu'; -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, -}; diff --git a/web-vue/src/locales/pt-BR/component.js b/web-vue/src/locales/pt-BR/component.js deleted file mode 100644 index 7cf9999c3..000000000 --- a/web-vue/src/locales/pt-BR/component.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - 'component.tagSelect.expand': 'Expandir', - 'component.tagSelect.collapse': 'Diminuir', - 'component.tagSelect.all': 'Todas', -}; diff --git a/web-vue/src/locales/pt-BR/globalHeader.js b/web-vue/src/locales/pt-BR/globalHeader.js deleted file mode 100644 index c92739919..000000000 --- a/web-vue/src/locales/pt-BR/globalHeader.js +++ /dev/null @@ -1,18 +0,0 @@ -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.loaded': 'Carregado', - 'component.noticeIcon.view-more': 'Veja mais', -}; diff --git a/web-vue/src/locales/pt-BR/menu.js b/web-vue/src/locales/pt-BR/menu.js deleted file mode 100644 index b87ebbbaa..000000000 --- a/web-vue/src/locales/pt-BR/menu.js +++ /dev/null @@ -1,52 +0,0 @@ -export default { - 'menu.welcome': 'Welcome', - 'menu.more-blocks': 'More Blocks', - 'menu.home': 'Início', - 'menu.login': 'Login', - 'menu.admin': 'Admin', - 'menu.admin.sub-page': 'Sub-Page', - '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', -}; diff --git a/web-vue/src/locales/pt-BR/pwa.js b/web-vue/src/locales/pt-BR/pwa.js deleted file mode 100644 index 05cc79784..000000000 --- a/web-vue/src/locales/pt-BR/pwa.js +++ /dev/null @@ -1,7 +0,0 @@ -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', -}; diff --git a/web-vue/src/locales/pt-BR/settingDrawer.js b/web-vue/src/locales/pt-BR/settingDrawer.js deleted file mode 100644 index 8a10b57e2..000000000 --- a/web-vue/src/locales/pt-BR/settingDrawer.js +++ /dev/null @@ -1,32 +0,0 @@ -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', -}; diff --git a/web-vue/src/locales/pt-BR/settings.js b/web-vue/src/locales/pt-BR/settings.js deleted file mode 100644 index aad2e3877..000000000 --- a/web-vue/src/locales/pt-BR/settings.js +++ /dev/null @@ -1,60 +0,0 @@ -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', -}; diff --git a/web-vue/src/locales/zh-CN.js b/web-vue/src/locales/zh-CN.js deleted file mode 100644 index aad5e8b79..000000000 --- a/web-vue/src/locales/zh-CN.js +++ /dev/null @@ -1,21 +0,0 @@ -import component from './zh-CN/component'; -import globalHeader from './zh-CN/globalHeader'; -import menu from './zh-CN/menu'; -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 开发,快速构建标准页面', - ...globalHeader, - ...menu, - ...settingDrawer, - ...settings, - ...pwa, - ...component, -}; diff --git a/web-vue/src/locales/zh-CN/component.js b/web-vue/src/locales/zh-CN/component.js deleted file mode 100644 index 1f1feadbf..000000000 --- a/web-vue/src/locales/zh-CN/component.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - 'component.tagSelect.expand': '展开', - 'component.tagSelect.collapse': '收起', - 'component.tagSelect.all': '全部', -}; diff --git a/web-vue/src/locales/zh-CN/globalHeader.js b/web-vue/src/locales/zh-CN/globalHeader.js deleted file mode 100644 index 9fd66a587..000000000 --- a/web-vue/src/locales/zh-CN/globalHeader.js +++ /dev/null @@ -1,17 +0,0 @@ -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': '查看更多', -}; diff --git a/web-vue/src/locales/zh-CN/menu.js b/web-vue/src/locales/zh-CN/menu.js deleted file mode 100644 index 985b516c7..000000000 --- a/web-vue/src/locales/zh-CN/menu.js +++ /dev/null @@ -1,52 +0,0 @@ -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': '拓扑编辑器', -}; diff --git a/web-vue/src/locales/zh-CN/pwa.js b/web-vue/src/locales/zh-CN/pwa.js deleted file mode 100644 index e9504849e..000000000 --- a/web-vue/src/locales/zh-CN/pwa.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - 'app.pwa.offline': '当前处于离线状态', - 'app.pwa.serviceworker.updated': '有新内容', - 'app.pwa.serviceworker.updated.hint': '请点击“刷新”按钮或者手动刷新页面', - 'app.pwa.serviceworker.updated.ok': '刷新', -}; diff --git a/web-vue/src/locales/zh-CN/settingDrawer.js b/web-vue/src/locales/zh-CN/settingDrawer.js deleted file mode 100644 index 15685a405..000000000 --- a/web-vue/src/locales/zh-CN/settingDrawer.js +++ /dev/null @@ -1,31 +0,0 @@ -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': '拷贝成功,请到 src/defaultSettings.js 中替换默认配置', - 'app.setting.production.hint': - '配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件', -}; diff --git a/web-vue/src/locales/zh-CN/settings.js b/web-vue/src/locales/zh-CN/settings.js deleted file mode 100644 index df8af4346..000000000 --- a/web-vue/src/locales/zh-CN/settings.js +++ /dev/null @@ -1,55 +0,0 @@ -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': '关', -}; diff --git a/web-vue/src/locales/zh-TW.js b/web-vue/src/locales/zh-TW.js deleted file mode 100644 index c55a88149..000000000 --- a/web-vue/src/locales/zh-TW.js +++ /dev/null @@ -1,19 +0,0 @@ -import component from './zh-TW/component'; -import globalHeader from './zh-TW/globalHeader'; -import menu from './zh-TW/menu'; -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': '下載此頁面到本地項目', - ...globalHeader, - ...menu, - ...settingDrawer, - ...settings, - ...pwa, - ...component, -}; diff --git a/web-vue/src/locales/zh-TW/component.js b/web-vue/src/locales/zh-TW/component.js deleted file mode 100644 index ba48e299a..000000000 --- a/web-vue/src/locales/zh-TW/component.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - 'component.tagSelect.expand': '展開', - 'component.tagSelect.collapse': '收起', - 'component.tagSelect.all': '全部', -}; diff --git a/web-vue/src/locales/zh-TW/globalHeader.js b/web-vue/src/locales/zh-TW/globalHeader.js deleted file mode 100644 index ed5845185..000000000 --- a/web-vue/src/locales/zh-TW/globalHeader.js +++ /dev/null @@ -1,17 +0,0 @@ -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': '查看更多', -}; diff --git a/web-vue/src/locales/zh-TW/menu.js b/web-vue/src/locales/zh-TW/menu.js deleted file mode 100644 index d724459d1..000000000 --- a/web-vue/src/locales/zh-TW/menu.js +++ /dev/null @@ -1,52 +0,0 @@ -export default { - 'menu.welcome': '歡迎', - 'menu.more-blocks': '更多區塊', - 'menu.home': '首頁', - 'menu.login': '登錄', - 'menu.admin': '权限', - 'menu.admin.sub-page': '二级管理页', - 'menu.exception.403': '403', - 'menu.exception.404': '404', - 'menu.exception.500': '500', - 'menu.register': '註冊', - 'menu.register.result': '註冊結果', - 'menu.dashboard': 'Dashboard', - 'menu.dashboard.analysis': '分析頁', - 'menu.dashboard.monitor': '監控頁', - 'menu.dashboard.workplace': '工作臺', - '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.account': '個人頁', - 'menu.account.center': '個人中心', - 'menu.account.settings': '個人設置', - 'menu.account.trigger': '觸發報錯', - 'menu.account.logout': '退出登錄', - 'menu.exception': '异常页', - 'menu.exception.not-permission': '403', - 'menu.exception.not-find': '404', - 'menu.exception.server-error': '500', - 'menu.exception.trigger': '触发错误', - 'menu.editor': '圖形編輯器', - 'menu.editor.flow': '流程編輯器', - 'menu.editor.mind': '腦圖編輯器', - 'menu.editor.koni': '拓撲編輯器', -}; diff --git a/web-vue/src/locales/zh-TW/pwa.js b/web-vue/src/locales/zh-TW/pwa.js deleted file mode 100644 index 108a6e489..000000000 --- a/web-vue/src/locales/zh-TW/pwa.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - 'app.pwa.offline': '當前處於離線狀態', - 'app.pwa.serviceworker.updated': '有新內容', - 'app.pwa.serviceworker.updated.hint': '請點擊“刷新”按鈕或者手動刷新頁面', - 'app.pwa.serviceworker.updated.ok': '刷新', -}; diff --git a/web-vue/src/locales/zh-TW/settingDrawer.js b/web-vue/src/locales/zh-TW/settingDrawer.js deleted file mode 100644 index 24dc281fa..000000000 --- a/web-vue/src/locales/zh-TW/settingDrawer.js +++ /dev/null @@ -1,31 +0,0 @@ -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': '拷貝成功,請到 src/defaultSettings.js 中替換默認配置', - 'app.setting.production.hint': - '配置欄只在開發環境用於預覽,生產環境不會展現,請拷貝後手動修改配置文件', -}; diff --git a/web-vue/src/locales/zh-TW/settings.js b/web-vue/src/locales/zh-TW/settings.js deleted file mode 100644 index dd45151a8..000000000 --- a/web-vue/src/locales/zh-TW/settings.js +++ /dev/null @@ -1,55 +0,0 @@ -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': '關', -}; diff --git a/web-vue/src/main.js b/web-vue/src/main.js new file mode 100644 index 000000000..63eb05f71 --- /dev/null +++ b/web-vue/src/main.js @@ -0,0 +1,8 @@ +import Vue from 'vue' +import App from './App.vue' + +Vue.config.productionTip = false + +new Vue({ + render: h => h(App), +}).$mount('#app') diff --git a/web-vue/src/manifest.json b/web-vue/src/manifest.json deleted file mode 100644 index 839bc5b5e..000000000 --- a/web-vue/src/manifest.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "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" - } - ] -} diff --git a/web-vue/src/models/global.js b/web-vue/src/models/global.js deleted file mode 100644 index e6c237d21..000000000 --- a/web-vue/src/models/global.js +++ /dev/null @@ -1,104 +0,0 @@ -import { queryNotices } from '@/services/user'; -const GlobalModel = { - namespace: 'global', - state: { - collapsed: false, - notices: [], - }, - effects: { - *fetchNotices(_, { call, put, select }) { - const data = yield call(queryNotices); - yield put({ - type: 'saveNotices', - payload: data, - }); - const unreadCount = yield select( - (state) => state.global.notices.filter((item) => !item.read).length, - ); - yield put({ - type: 'user/changeNotifyCount', - payload: { - totalCount: data.length, - unreadCount, - }, - }); - }, - - *clearNotices({ payload }, { put, select }) { - yield put({ - type: 'saveClearedNotices', - payload, - }); - const count = yield select((state) => state.global.notices.length); - const unreadCount = yield select( - (state) => state.global.notices.filter((item) => !item.read).length, - ); - yield put({ - type: 'user/changeNotifyCount', - payload: { - totalCount: count, - unreadCount, - }, - }); - }, - - *changeNoticeReadState({ payload }, { put, select }) { - const notices = yield select((state) => - state.global.notices.map((item) => { - const notice = { ...item }; - - if (notice.id === payload) { - notice.read = true; - } - - return notice; - }), - ); - yield put({ - type: 'saveNotices', - payload: notices, - }); - yield put({ - type: 'user/changeNotifyCount', - payload: { - totalCount: notices.length, - unreadCount: notices.filter((item) => !item.read).length, - }, - }); - }, - }, - reducers: { - changeLayoutCollapsed( - state = { - notices: [], - collapsed: true, - }, - { payload }, - ) { - return { ...state, collapsed: payload }; - }, - - saveNotices(state, { payload }) { - return { - collapsed: false, - ...state, - notices: payload, - }; - }, - - saveClearedNotices( - state = { - notices: [], - collapsed: true, - }, - { payload }, - ) { - return { - ...state, - collapsed: false, - notices: state.notices.filter((item) => item.type !== payload), - }; - }, - }, -}; -export default GlobalModel; diff --git a/web-vue/src/models/login.js b/web-vue/src/models/login.js deleted file mode 100644 index 1d210884d..000000000 --- a/web-vue/src/models/login.js +++ /dev/null @@ -1,63 +0,0 @@ -import { stringify } from 'querystring'; -import { history } from 'umi'; -import { fakeAccountLogin } from '@/services/login'; -import { setAuthority } from '@/utils/authority'; -import { getPageQuery } from '@/utils/utils'; -const Model = { - namespace: 'login', - state: { - status: undefined, - }, - effects: { - *login({ payload }, { call, put }) { - const response = yield call(fakeAccountLogin, payload); - yield put({ - type: 'changeLoginStatus', - payload: response, - }); // Login successfully - - if (response.status === 'ok') { - const urlParams = new URL(window.location.href); - const params = getPageQuery(); - let { redirect } = params; - - if (redirect) { - const redirectUrlParams = new URL(redirect); - - if (redirectUrlParams.origin === urlParams.origin) { - redirect = redirect.substr(urlParams.origin.length); - - if (redirect.match(/^\/.*#/)) { - redirect = redirect.substr(redirect.indexOf('#') + 1); - } - } else { - window.location.href = '/'; - return; - } - } - - history.replace(redirect || '/'); - } - }, - - logout() { - const { redirect } = getPageQuery(); // Note: There may be security issues, please note - - if (window.location.pathname !== '/user/login' && !redirect) { - history.replace({ - pathname: '/user/login', - search: stringify({ - redirect: window.location.href, - }), - }); - } - }, - }, - reducers: { - changeLoginStatus(state, { payload }) { - setAuthority(payload.currentAuthority); - return { ...state, status: payload.status, type: payload.type }; - }, - }, -}; -export default Model; diff --git a/web-vue/src/models/setting.js b/web-vue/src/models/setting.js deleted file mode 100644 index 7d35fd34b..000000000 --- a/web-vue/src/models/setting.js +++ /dev/null @@ -1,27 +0,0 @@ -import defaultSettings from '../../config/defaultSettings'; - -const updateColorWeak = (colorWeak) => { - const root = document.getElementById('root'); - - if (root) { - root.className = colorWeak ? 'colorWeak' : ''; - } -}; - -const SettingModel = { - namespace: 'settings', - state: defaultSettings, - reducers: { - changeSetting(state = defaultSettings, { payload }) { - const { colorWeak, contentWidth } = payload; - - if (state.contentWidth !== contentWidth && window.dispatchEvent) { - window.dispatchEvent(new Event('resize')); - } - - updateColorWeak(!!colorWeak); - return { ...state, ...payload }; - }, - }, -}; -export default SettingModel; diff --git a/web-vue/src/models/user.js b/web-vue/src/models/user.js deleted file mode 100644 index ce3a36173..000000000 --- a/web-vue/src/models/user.js +++ /dev/null @@ -1,46 +0,0 @@ -import { queryCurrent, query as queryUsers } from '@/services/user'; -const UserModel = { - namespace: 'user', - state: { - currentUser: {}, - }, - effects: { - *fetch(_, { call, put }) { - const response = yield call(queryUsers); - yield put({ - type: 'save', - payload: response, - }); - }, - - *fetchCurrent(_, { call, put }) { - const response = yield call(queryCurrent); - yield put({ - type: 'saveCurrentUser', - payload: response, - }); - }, - }, - reducers: { - saveCurrentUser(state, action) { - return { ...state, currentUser: action.payload || {} }; - }, - - changeNotifyCount( - state = { - currentUser: {}, - }, - action, - ) { - return { - ...state, - currentUser: { - ...state.currentUser, - notifyCount: action.payload.totalCount, - unreadCount: action.payload.unreadCount, - }, - }; - }, - }, -}; -export default UserModel; diff --git a/web-vue/src/pages/404.jsx b/web-vue/src/pages/404.jsx deleted file mode 100644 index 99dd95a94..000000000 --- a/web-vue/src/pages/404.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Button, Result } from 'antd'; -import React from 'react'; -import { history } from 'umi'; - -const NoFoundPage = () => ( - history.push('/')}> - Back Home - - } - /> -); - -export default NoFoundPage; diff --git a/web-vue/src/pages/Admin.jsx b/web-vue/src/pages/Admin.jsx deleted file mode 100644 index 0c7fd49c3..000000000 --- a/web-vue/src/pages/Admin.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { HeartTwoTone, SmileTwoTone } from '@ant-design/icons'; -import { Card, Typography, Alert } from 'antd'; -import { PageHeaderWrapper } from '@ant-design/pro-layout'; -export default () => ( - - - - - Ant Design Pro You - - -

- Want to add more pages? Please refer to{' '} - - use block - - 。 -

-
-); diff --git a/web-vue/src/pages/ListTableList/components/CreateForm.jsx b/web-vue/src/pages/ListTableList/components/CreateForm.jsx deleted file mode 100644 index 020c8afca..000000000 --- a/web-vue/src/pages/ListTableList/components/CreateForm.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import { Modal } from 'antd'; - -const CreateForm = (props) => { - const { modalVisible, onCancel } = props; - return ( - onCancel()} - footer={null} - > - {props.children} - - ); -}; - -export default CreateForm; diff --git a/web-vue/src/pages/ListTableList/components/UpdateForm.jsx b/web-vue/src/pages/ListTableList/components/UpdateForm.jsx deleted file mode 100644 index 79b66ae78..000000000 --- a/web-vue/src/pages/ListTableList/components/UpdateForm.jsx +++ /dev/null @@ -1,134 +0,0 @@ -import React from 'react'; -import { Modal } from 'antd'; -import { - ProFormSelect, - ProFormText, - ProFormTextArea, - StepsForm, - ProFormRadio, - ProFormDateTimePicker, -} from '@ant-design/pro-form'; - -const UpdateForm = (props) => ( - { - return ( - props.onCancel()} - > - {dom} - - ); - }} - onFinish={props.onSubmit} - > - - - - - - - - - - - - - - -); - -export default UpdateForm; diff --git a/web-vue/src/pages/ListTableList/index.jsx b/web-vue/src/pages/ListTableList/index.jsx deleted file mode 100644 index 9ffbe474d..000000000 --- a/web-vue/src/pages/ListTableList/index.jsx +++ /dev/null @@ -1,292 +0,0 @@ -import { PlusOutlined } from '@ant-design/icons'; -import { Button, Divider, message, Input, Drawer } from 'antd'; -import React, { useState, useRef } from 'react'; -import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; -import ProTable from '@ant-design/pro-table'; -import ProDescriptions from '@ant-design/pro-descriptions'; -import CreateForm from './components/CreateForm'; -import UpdateForm from './components/UpdateForm'; -import { queryRule, updateRule, addRule, removeRule } from './service'; -/** - * 添加节点 - * @param fields - */ - -const handleAdd = async (fields) => { - const hide = message.loading('正在添加'); - - try { - await addRule({ ...fields }); - hide(); - message.success('添加成功'); - return true; - } catch (error) { - hide(); - message.error('添加失败请重试!'); - return false; - } -}; -/** - * 更新节点 - * @param fields - */ - -const handleUpdate = async (fields) => { - const hide = message.loading('正在配置'); - - try { - await updateRule({ - name: fields.name, - desc: fields.desc, - key: fields.key, - }); - hide(); - message.success('配置成功'); - return true; - } catch (error) { - hide(); - message.error('配置失败请重试!'); - return false; - } -}; -/** - * 删除节点 - * @param selectedRows - */ - -const handleRemove = async (selectedRows) => { - const hide = message.loading('正在删除'); - if (!selectedRows) return true; - - try { - await removeRule({ - key: selectedRows.map((row) => row.key), - }); - hide(); - message.success('删除成功,即将刷新'); - return true; - } catch (error) { - hide(); - message.error('删除失败,请重试'); - return false; - } -}; - -const TableList = () => { - const [createModalVisible, handleModalVisible] = useState(false); - const [updateModalVisible, handleUpdateModalVisible] = useState(false); - const [stepFormValues, setStepFormValues] = useState({}); - const actionRef = useRef(); - const [row, setRow] = useState(); - const [selectedRowsState, setSelectedRows] = useState([]); - const columns = [ - { - title: '规则名称', - dataIndex: 'name', - tip: '规则名称是唯一的 key', - formItemProps: { - rules: [ - { - required: true, - message: '规则名称为必填项', - }, - ], - }, - render: (dom, entity) => { - return setRow(entity)}>{dom}; - }, - }, - { - title: '描述', - dataIndex: 'desc', - valueType: 'textarea', - }, - { - title: '服务调用次数', - dataIndex: 'callNo', - sorter: true, - hideInForm: true, - renderText: (val) => `${val} 万`, - }, - { - title: '状态', - dataIndex: 'status', - hideInForm: true, - valueEnum: { - 0: { - text: '关闭', - status: 'Default', - }, - 1: { - text: '运行中', - status: 'Processing', - }, - 2: { - text: '已上线', - status: 'Success', - }, - 3: { - text: '异常', - status: 'Error', - }, - }, - }, - { - title: '上次调度时间', - dataIndex: 'updatedAt', - sorter: true, - valueType: 'dateTime', - hideInForm: true, - renderFormItem: (item, { defaultRender, ...rest }, form) => { - const status = form.getFieldValue('status'); - - if (`${status}` === '0') { - return false; - } - - if (`${status}` === '3') { - return ; - } - - return defaultRender(item); - }, - }, - { - title: '操作', - dataIndex: 'option', - valueType: 'option', - render: (_, record) => ( - <> - { - handleUpdateModalVisible(true); - setStepFormValues(record); - }} - > - 配置 - - - 订阅警报 - - ), - }, - ]; - return ( - - [ - , - ]} - request={(params, sorter, filter) => queryRule({ ...params, sorter, filter })} - columns={columns} - rowSelection={{ - onChange: (_, selectedRows) => setSelectedRows(selectedRows), - }} - /> - {selectedRowsState?.length > 0 && ( - - 已选择{' '} - - {selectedRowsState.length} - {' '} - 项   - - 服务调用次数总计 {selectedRowsState.reduce((pre, item) => pre + item.callNo, 0)} 万 - - - } - > - - - - )} - handleModalVisible(false)} modalVisible={createModalVisible}> - { - const success = await handleAdd(value); - - if (success) { - handleModalVisible(false); - - if (actionRef.current) { - actionRef.current.reload(); - } - } - }} - rowKey="key" - type="form" - columns={columns} - /> - - {stepFormValues && Object.keys(stepFormValues).length ? ( - { - const success = await handleUpdate(value); - - if (success) { - handleUpdateModalVisible(false); - setStepFormValues({}); - - if (actionRef.current) { - actionRef.current.reload(); - } - } - }} - onCancel={() => { - handleUpdateModalVisible(false); - setStepFormValues({}); - }} - updateModalVisible={updateModalVisible} - values={stepFormValues} - /> - ) : null} - - { - setRow(undefined); - }} - closable={false} - > - {row?.name && ( - ({ - data: row || {}, - })} - params={{ - id: row?.name, - }} - columns={columns} - /> - )} - - - ); -}; - -export default TableList; diff --git a/web-vue/src/pages/ListTableList/service.js b/web-vue/src/pages/ListTableList/service.js deleted file mode 100644 index b8e34af70..000000000 --- a/web-vue/src/pages/ListTableList/service.js +++ /dev/null @@ -1,24 +0,0 @@ -import request from '@/utils/request'; -export async function queryRule(params) { - return request('/api/rule', { - params, - }); -} -export async function removeRule(params) { - return request('/api/rule', { - method: 'POST', - data: { ...params, method: 'delete' }, - }); -} -export async function addRule(params) { - return request('/api/rule', { - method: 'POST', - data: { ...params, method: 'post' }, - }); -} -export async function updateRule(params) { - return request('/api/rule', { - method: 'POST', - data: { ...params, method: 'update' }, - }); -} diff --git a/web-vue/src/pages/Welcome.jsx b/web-vue/src/pages/Welcome.jsx deleted file mode 100644 index 5c377c04b..000000000 --- a/web-vue/src/pages/Welcome.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import { PageContainer } from '@ant-design/pro-layout'; -import { Card, Alert, Typography } from 'antd'; -import styles from './Welcome.less'; - -const CodePreview = ({ children }) => ( -
-    
-      {children}
-    
-  
-); - -export default () => ( - - - - - 高级表格{' '} - - 欢迎使用 - - - yarn add @ant-design/pro-table - - 高级布局{' '} - - 欢迎使用 - - - yarn add @ant-design/pro-layout - - -); diff --git a/web-vue/src/pages/Welcome.less b/web-vue/src/pages/Welcome.less deleted file mode 100644 index 914c40d8e..000000000 --- a/web-vue/src/pages/Welcome.less +++ /dev/null @@ -1,8 +0,0 @@ -@import '~antd/lib/style/themes/default.less'; - -.pre { - margin: 12px 0; - padding: 12px 20px; - background: @input-bg; - box-shadow: @card-shadow; -} diff --git a/web-vue/src/pages/document.ejs b/web-vue/src/pages/document.ejs deleted file mode 100644 index 4baffa4fc..000000000 --- a/web-vue/src/pages/document.ejs +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - - - Ant Design Pro - - - - -
- -
- logo -
-
- -
-
-
- - Ant Design -
-
-
- - diff --git a/web-vue/src/pages/user/login/components/Login/LoginContext.jsx b/web-vue/src/pages/user/login/components/Login/LoginContext.jsx deleted file mode 100644 index ee60f6fd5..000000000 --- a/web-vue/src/pages/user/login/components/Login/LoginContext.jsx +++ /dev/null @@ -1,3 +0,0 @@ -import { createContext } from 'react'; -const LoginContext = createContext({}); -export default LoginContext; diff --git a/web-vue/src/pages/user/login/components/Login/LoginItem.jsx b/web-vue/src/pages/user/login/components/Login/LoginItem.jsx deleted file mode 100644 index 30cf40c75..000000000 --- a/web-vue/src/pages/user/login/components/Login/LoginItem.jsx +++ /dev/null @@ -1,138 +0,0 @@ -import { Button, Col, Input, Row, Form, message } from 'antd'; -import React, { useState, useCallback, useEffect } from 'react'; -import omit from 'omit.js'; -import { getFakeCaptcha } from '@/services/login'; -import ItemMap from './map'; -import LoginContext from './LoginContext'; -import styles from './index.less'; -const FormItem = Form.Item; - -const getFormItemOptions = ({ onChange, defaultValue, customProps = {}, rules }) => { - const options = { - rules: rules || customProps.rules, - }; - - if (onChange) { - options.onChange = onChange; - } - - if (defaultValue) { - options.initialValue = defaultValue; - } - - return options; -}; - -const LoginItem = (props) => { - const [count, setCount] = useState(props.countDown || 0); - const [timing, setTiming] = useState(false); // 这么写是为了防止restProps中 带入 onChange, defaultValue, rules props tabUtil - - const { - onChange, - customProps, - defaultValue, - rules, - name, - getCaptchaButtonText, - getCaptchaSecondText, - updateActive, - type, - tabUtil, - ...restProps - } = props; - const onGetCaptcha = useCallback(async (mobile) => { - const result = await getFakeCaptcha(mobile); - - if (result === false) { - return; - } - - message.success('获取验证码成功!验证码为:1234'); - setTiming(true); - }, []); - useEffect(() => { - let interval = 0; - const { countDown } = props; - - if (timing) { - interval = window.setInterval(() => { - setCount((preSecond) => { - if (preSecond <= 1) { - setTiming(false); - clearInterval(interval); // 重置秒数 - - return countDown || 60; - } - - return preSecond - 1; - }); - }, 1000); - } - - return () => clearInterval(interval); - }, [timing]); - - if (!name) { - return null; - } // get getFieldDecorator props - - const options = getFormItemOptions(props); - const otherProps = restProps || {}; - - if (type === 'Captcha') { - const inputProps = omit(otherProps, ['onGetCaptcha', 'countDown']); - return ( - - {({ getFieldValue }) => ( - - - - - - - - - - - )} - - ); - } - - return ( - - - - ); -}; - -const LoginItems = {}; -Object.keys(ItemMap).forEach((key) => { - const item = ItemMap[key]; - - LoginItems[key] = (props) => ( - - {(context) => ( - - )} - - ); -}); -export default LoginItems; diff --git a/web-vue/src/pages/user/login/components/Login/LoginSubmit.jsx b/web-vue/src/pages/user/login/components/Login/LoginSubmit.jsx deleted file mode 100644 index 479b39f96..000000000 --- a/web-vue/src/pages/user/login/components/Login/LoginSubmit.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Button, Form } from 'antd'; -import React from 'react'; -import classNames from 'classnames'; -import styles from './index.less'; -const FormItem = Form.Item; - -const LoginSubmit = ({ className, ...rest }) => { - const clsString = classNames(styles.submit, className); - return ( - -