This commit is contained in:
Jane 2023-12-26 11:21:51 +08:00
commit 284713ed44
830 changed files with 158238 additions and 0 deletions

16
.editorconfig Normal file
View File

@ -0,0 +1,16 @@
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab

8
.eslintignore Normal file
View File

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

8
.eslintrc.js Normal file
View File

@ -0,0 +1,8 @@
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,
},
};

23
.prettierignore Normal file
View File

@ -0,0 +1,23 @@
**/*.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

5
.prettierrc.js Normal file
View File

@ -0,0 +1,5 @@
const fabric = require('@umijs/fabric');
module.exports = {
...fabric.prettier,
};

5
.stylelintrc.js Normal file
View File

@ -0,0 +1,5 @@
const fabric = require('@umijs/fabric');
module.exports = {
...fabric.stylelint,
};

0
README.md Normal file
View File

60
README1.md Normal file
View File

@ -0,0 +1,60 @@
# Ant Design Pro
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
```
or
```bash
yarn
```
## Provided Scripts
Ant Design Pro provides some useful script to help you quick start and build with web project, code style check and test.
Scripts provided in `package.json`. It's safe to modify or add additional script:
### Start project
正常启动请运行
npm start:dev
Mock测试模式请运行
npm start
```
### Build project
```bash
npm run build
```
### Check code style
```bash
npm run lint
```
You can also use script to auto fix some lint error:
```bash
npm run lint:fix
```
### Test code
```bash
npm test
```
## More
You can view full document on our [official website](https://pro.ant.design). And welcome any feedback in our [github](https://github.com/ant-design/ant-design-pro).

15
config/config.dev.ts Normal file
View File

@ -0,0 +1,15 @@
// https://umijs.org/config/
import { defineConfig } from 'umi';
export default defineConfig({
plugins: [
// https://github.com/zthxxx/react-dev-inspector
'react-dev-inspector/plugins/umi/react-inspector',
],
// https://github.com/zthxxx/react-dev-inspector#inspector-loader-props
inspectorConfig: {
exclude: [],
babelPlugins: [],
babelOptions: {},
},
});

76
config/config.ts Normal file
View File

@ -0,0 +1,76 @@
// https://umijs.org/config/
import { defineConfig } from 'umi';
import { join } from 'path';
import defaultSettings from './defaultSettings';
import routes from './routes';
import proxy from './proxy';
const { REACT_APP_ENV } = process.env;
export default defineConfig({
hash: true,
antd: {},
dva: {
hmr: true,
},
layout: {
// https://umijs.org/zh-CN/plugins/plugin-layout
locale: false,
siderWidth: 208,
...defaultSettings,
},
// https://umijs.org/zh-CN/plugins/plugin-locale
locale: {
default: 'zh-CN',
antd: false,
// default true, when it is true, will use `navigator.language` overwrite default
baseNavigator: true,
},
dynamicImport: {
loading: '@ant-design/pro-layout/es/PageLoading',
},
targets: {
ie: 11,
},
// umi routes: https://umijs.org/docs/routing
routes,
// Theme for antd: https://ant.design/docs/react/customize-theme-cn
theme: {
'primary-color': defaultSettings.primaryColor,
// 'root-entry-name': 'variable',
},
// esbuild is father build tools
// https://umijs.org/plugins/plugin-esbuild
esbuild: {},
title: false,
ignoreMomentLocale: true,
proxy: proxy[REACT_APP_ENV || 'dev'],
manifest: {
basePath: '/',
},
// Fast Refresh 热更新
fastRefresh: {},
openAPI: [
{
requestLibPath: "import { request } from 'umi'",
// 或者使用在线的版本
// schemaPath: "https://gw.alipayobjects.com/os/antfincdn/M%24jrzTTYJN/oneapi.json"
schemaPath: join(__dirname, 'oneapi.json'),
mock: false,
},
{
requestLibPath: "import { request } from 'umi'",
schemaPath: 'https://gw.alipayobjects.com/os/antfincdn/CA1dOm%2631B/openapi.json',
projectName: 'swagger',
},
],
nodeModulesTransform: {
type: 'none',
},
mfsu: {},
webpack5: {},
exportStatic: {},
externals: {
}
});

24
config/defaultSettings.ts Normal file
View File

@ -0,0 +1,24 @@
import { Settings as LayoutSettings } from '@ant-design/pro-layout';
const Settings: LayoutSettings & {
pwa?: boolean;
logo?: string;
tabsLayout?: boolean;
} = {
navTheme: 'light',
headerTheme: 'light',
primaryColor: '#722ED1',
layout: 'top',
splitMenus: true,
contentWidth: 'Fluid',
fixedHeader: true,
fixSiderbar: true,
colorWeak: false,
title: 'Salpa',
pwa: false,
logo: 'https://gw.alipayobjects.com/zos/rmsportal/樽海鞘_图案.svg',
iconfontUrl: '',
tabsLayout: true,
};
export default Settings;

593
config/oneapi.json Normal file
View File

@ -0,0 +1,593 @@
{
"openapi": "3.0.1",
"info": {
"title": "Ant Design Pro",
"version": "1.0.0"
},
"servers": [
{
"url": "http://localhost:8000/"
},
{
"url": "https://localhost:8000/"
}
],
"paths": {
"/api/currentUser": {
"get": {
"tags": ["api"],
"description": "获取当前的用户",
"operationId": "currentUser",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CurrentUser"
}
}
}
},
"401": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"x-swagger-router-controller": "api"
},
"/api/login/captcha": {
"post": {
"description": "发送验证码",
"operationId": "getFakeCaptcha",
"tags": ["login"],
"parameters": [
{
"name": "phone",
"in": "query",
"description": "手机号",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FakeCaptcha"
}
}
}
}
}
}
},
"/api/login/outLogin": {
"post": {
"description": "登录接口",
"operationId": "outLogin",
"tags": ["login"],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"401": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"x-swagger-router-controller": "api"
},
"/api/login/account": {
"post": {
"tags": ["login"],
"description": "登录接口",
"operationId": "login",
"requestBody": {
"description": "登录系统",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoginParams"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoginResult"
}
}
}
},
"401": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"x-codegen-request-body-name": "body"
},
"x-swagger-router-controller": "api"
},
"/api/notices": {
"summary": "getNotices",
"description": "NoticeIconItem",
"get": {
"tags": ["api"],
"operationId": "getNotices",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NoticeIconList"
}
}
}
}
}
}
},
"/api/rule": {
"get": {
"tags": ["rule"],
"description": "获取规则列表",
"operationId": "rule",
"parameters": [
{
"name": "current",
"in": "query",
"description": "当前的页码",
"schema": {
"type": "number"
}
},
{
"name": "pageSize",
"in": "query",
"description": "页面的容量",
"schema": {
"type": "number"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RuleList"
}
}
}
},
"401": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"post": {
"tags": ["rule"],
"description": "新建规则",
"operationId": "addRule",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RuleListItem"
}
}
}
},
"401": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"put": {
"tags": ["rule"],
"description": "新建规则",
"operationId": "updateRule",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RuleListItem"
}
}
}
},
"401": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"delete": {
"tags": ["rule"],
"description": "删除规则",
"operationId": "removeRule",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"401": {
"description": "Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
},
"x-swagger-router-controller": "api"
},
"/swagger": {
"x-swagger-pipe": "swagger_raw"
}
},
"components": {
"schemas": {
"CurrentUser": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"avatar": {
"type": "string"
},
"userid": {
"type": "string"
},
"email": {
"type": "string"
},
"signature": {
"type": "string"
},
"title": {
"type": "string"
},
"group": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
}
}
}
},
"notifyCount": {
"type": "integer",
"format": "int32"
},
"unreadCount": {
"type": "integer",
"format": "int32"
},
"country": {
"type": "string"
},
"access": {
"type": "string"
},
"geographic": {
"type": "object",
"properties": {
"province": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"key": {
"type": "string"
}
}
},
"city": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"key": {
"type": "string"
}
}
}
}
},
"address": {
"type": "string"
},
"phone": {
"type": "string"
}
}
},
"LoginResult": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"type": {
"type": "string"
},
"currentAuthority": {
"type": "string"
}
}
},
"PageParams": {
"type": "object",
"properties": {
"current": {
"type": "number"
},
"pageSize": {
"type": "number"
}
}
},
"RuleListItem": {
"type": "object",
"properties": {
"key": {
"type": "integer",
"format": "int32"
},
"disabled": {
"type": "boolean"
},
"href": {
"type": "string"
},
"avatar": {
"type": "string"
},
"name": {
"type": "string"
},
"owner": {
"type": "string"
},
"desc": {
"type": "string"
},
"callNo": {
"type": "integer",
"format": "int32"
},
"status": {
"type": "integer",
"format": "int32"
},
"updatedAt": {
"type": "string",
"format": "datetime"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"progress": {
"type": "integer",
"format": "int32"
}
}
},
"RuleList": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/RuleListItem"
}
},
"total": {
"type": "integer",
"description": "列表的内容总数",
"format": "int32"
},
"success": {
"type": "boolean"
}
}
},
"FakeCaptcha": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32"
},
"status": {
"type": "string"
}
}
},
"LoginParams": {
"type": "object",
"properties": {
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"autoLogin": {
"type": "boolean"
},
"type": {
"type": "string"
}
}
},
"ErrorResponse": {
"required": ["errorCode"],
"type": "object",
"properties": {
"errorCode": {
"type": "string",
"description": "业务约定的错误码"
},
"errorMessage": {
"type": "string",
"description": "业务上的错误信息"
},
"success": {
"type": "boolean",
"description": "业务上的请求是否成功"
}
}
},
"NoticeIconList": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/NoticeIconItem"
}
},
"total": {
"type": "integer",
"description": "列表的内容总数",
"format": "int32"
},
"success": {
"type": "boolean"
}
}
},
"NoticeIconItemType": {
"title": "NoticeIconItemType",
"description": "已读未读列表的枚举",
"type": "string",
"properties": {},
"enum": ["notification", "message", "event"]
},
"NoticeIconItem": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"extra": {
"type": "string",
"format": "any"
},
"key": { "type": "string" },
"read": {
"type": "boolean"
},
"avatar": {
"type": "string"
},
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"datetime": {
"type": "string",
"format": "date"
},
"description": {
"type": "string"
},
"type": {
"extensions": {
"x-is-enum": true
},
"$ref": "#/components/schemas/NoticeIconItemType"
}
}
}
}
}
}

38
config/proxy.ts Normal file
View File

@ -0,0 +1,38 @@
/**
*
* -------------------------------
* 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: 'http://192.168.103.172:8080',
target: 'http://192.168.2.58:8080',
changeOrigin: true,
pathRewrite: { '^/api': '' },
},
'/profile/avatar/': {
// target: 'http://192.168.103.172:8080',
target: 'http://192.168.113.251:8080',
changeOrigin: true,
}
},
test: {
'/api/': {
target: 'http://192.168.1.217:8080',
changeOrigin: true,
pathRewrite: { '^/api': '' },
},
},
pre: {
'/api/': {
target: 'your pre url',
changeOrigin: true,
pathRewrite: { '^': '' },
},
},
};

317
config/routes.ts Normal file
View File

@ -0,0 +1,317 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2022/02/22
*
* */
export default [
{
path: '/user',
layout: false,
routes: [
{
path: '/user/login',
layout: false,
name: 'login',
component: './User/login'
},
{
path: '/user',
redirect: '/user/login'
},
{
name: 'register-result',
icon: 'smile',
path: '/user/register-result',
component: './User/register-result'
},
{
name: 'register',
icon: 'smile',
path: '/user/register',
component: './User/register'
},
{
component: '404'
}
]
},
{
name: 'account',
icon: 'user',
path: '/account',
component: '@/layouts/TabsLayout',
routes: [
{
path: '/account',
redirect: '/account/center'
},
{
name: 'center',
icon: 'smile',
path: '/account/center',
component: './account/center',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.account.center'
},
{
name: 'settings',
icon: 'smile',
path: '/account/settings',
component: './account/settings',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.account.settings'
}
]
},
{
name: 'system',
icon: 'BugOutlined',
path: '/system',
component: '@/layouts/TabsLayout',
routes: [
{
path: '/',
redirect: '/system/user'
},
{
name: 'user',
icon: 'PartitionOutlined',
path: '/system/user',
component: 'system/user/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.user'
},
{
name: 'menu',
icon: 'PartitionOutlined',
path: '/system/menu',
component: 'system/menu/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.menu'
},
{
name: 'role',
icon: 'PartitionOutlined',
path: '/system/role',
component: 'system/role/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.role'
},
{
name: 'dept',
icon: 'PartitionOutlined',
path: '/system/dept',
component: 'system/dept/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.dept'
},
{
name: 'post',
icon: 'PartitionOutlined',
path: '/system/post',
component: 'system/post/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.post'
},
{
name: 'dict',
icon: 'PartitionOutlined',
path: '/system/dict',
component: 'system/dict/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.dict'
},
{
name: 'dictData',
icon: 'PartitionOutlined',
path: '/system/dictData/index/:id?',
component: 'system/dictData/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.dictData'
},
{
name: 'config',
icon: 'PartitionOutlined',
path: '/system/config',
component: 'system/config/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.config'
},
{
name: 'notice',
icon: 'PartitionOutlined',
path: '/system/notice',
component: 'system/notice/index',
access: 'authorize',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
title: 'menu.title.notice'
},
{
name: 'log',
icon: 'BugOutlined',
path: '/system/log/',
routes: [
{
path: '/',
redirect: '/system/log/operlog'
}
]
}
]
},
{
name: 'model',
path: '/model',
component: '@/layouts/TabsLayout',
routes: [
{
name: 'modelChildren',
icon: 'BugOutlined',
path: '/model/modelChildren',
component: 'pdManer/pages/getstore/index',
wrappers: ['@/components/KeepAlive'],
keppAlive: false,
access:'authorize',
title:'menu.title.modelChildren'
}
]
},
{
name: 'OnlinInquiry',
path: '/OnlinInquiry',
component: '@/layouts/TabsLayout',
routes: [
{
name: 'OnlinInquiryChildren',
path: '/OnlinInquiry/OnlinInquiryChildren',
component: 'OnlinInquiry/src/entryPointFactory',
wrappers: ['@/components/KeepAlive'],
keppAlive: false,
access:'authorize',
title:'menu.title.OnlinInquiryChildren'
}
]
},
// {
// name: 'pdmaner',
// icon: 'BugOutlined',
// path: '/getstore',
// component: '@/pdManer/pages/getstore/index',
// keppAlive: true
// },
{
name: 'modelMonitor',
icon: 'BugOutlined',
path: '/modelMonitor',
component: '@/layouts/TabsLayout',
routes: [
{
name: 'theme',
icon: 'PartitionOutlined',
path: '/modelMonitor/theme',
component: 'modelMonitor/theme/index',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
access: 'modelMonitor',
title: 'menu.title.theme'
},
{
name: 'databasir',
icon: 'PartitionOutlined',
path: '/modelMonitor/databasir',
component: 'modelMonitor/databasir/index',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
access: 'modelMonitor',
title: 'menu.title.databasir',
},
{
name: 'dataextension',
icon: 'PartitionOutlined',
path: '/modelMonitor/dataextension',
component: 'modelMonitor/dataextension/index',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
access: 'modelMonitor',
title: 'menu.title.dataextension'
},
{
name: 'subjectdetails',
icon: 'PartitionOutlined',
path: '/modelMonitor/subjectdetails',
component: 'modelMonitor/subjectdetails/index',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
access: 'modelMonitor',
title: 'menu.title.subjectdetails'
},
{
name: 'alarmmanage',
icon: 'PartitionOutlined',
path: '/modelMonitor/alarmmanage',
component: 'modelMonitor/alarmmanage/index',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
access: 'modelMonitor',
title: 'menu.title.alarmmanage'
}
]
},
{
name: 'textpage',
icon: 'BugOutlined',
path: '/textpage',
component: '@/layouts/TabsLayout',
routes: [
{
name: 'sbhzl',
icon: 'PartitionOutlined',
path: '/textpage/sbhzl',
component: 'textpage/sbhzl/index',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
access: 'textpage',
title: 'menu.title.sbhzl'
},
{
name: 'test2',
icon: 'PartitionOutlined',
path: '/textpage/test2',
component: 'textpage/test2/index',
wrappers: ['@/components/KeepAlive'],
keppAlive: true,
access: 'textpage',
title: 'menu.title.test2'
}
]
},
{
path: '/',
redirect: '/model/modelChildren'
// redirect:'/modelMonitor/theme'
},
{
component: './404'
}
]

10
jest.config.js Normal file
View File

@ -0,0 +1,10 @@
module.exports = {
testURL: 'http://localhost:8000',
testEnvironment: './tests/PuppeteerEnvironment',
verbose: false,
extraSetupFiles: ['./tests/setupTests.js'],
globals: {
ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: false,
localStorage: null,
},
};

10
jsconfig.json Normal file
View File

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

175
mock/listTableList.ts Normal file
View File

@ -0,0 +1,175 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import { Request, Response } from 'express';
import moment from 'moment';
import { parse } from 'url';
// mock tableListDataSource
const genList = (current: number, pageSize: number) => {
const tableListDataSource: API.RuleListItem[] = [];
for (let i = 0; i < pageSize; i += 1) {
const index = (current - 1) * 10 + i;
tableListDataSource.push({
key: index,
disabled: i % 6 === 0,
href: 'https://ant.design',
avatar: [
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
][i % 2],
name: `TradeCode ${index}`,
owner: '曲丽丽',
desc: '这是一段描述',
callNo: Math.floor(Math.random() * 1000),
status: Math.floor(Math.random() * 10) % 4,
updatedAt: moment().format('YYYY-MM-DD'),
createdAt: moment().format('YYYY-MM-DD'),
progress: Math.ceil(Math.random() * 100),
});
}
tableListDataSource.reverse();
return tableListDataSource;
};
let tableListDataSource = genList(1, 100);
function getRule(req: Request, res: Response, u: string) {
let realUrl = u;
if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') {
realUrl = req.url;
}
const { current = 1, pageSize = 10 } = req.query;
const params = parse(realUrl, true).query as unknown as API.PageParams &
API.RuleListItem & {
sorter: any;
filter: any;
};
let dataSource = [...tableListDataSource].slice(
((current as number) - 1) * (pageSize as number),
(current as number) * (pageSize as number),
);
if (params.sorter) {
const sorter = JSON.parse(params.sorter);
dataSource = dataSource.sort((prev, next) => {
let sortNumber = 0;
Object.keys(sorter).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 as any) as {
[key: string]: string[];
};
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.current}`, 10) || 1,
};
return res.json(result);
}
function postRule(req: Request, res: Response, u: string, b: Request) {
let realUrl = u;
if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') {
realUrl = req.url;
}
const body = (b && b.body) || req.body;
const { method, name, desc, key } = body;
switch (method) {
/* eslint no-case-declarations:0 */
case 'delete':
tableListDataSource = tableListDataSource.filter((item) => key.indexOf(item.key) === -1);
break;
case 'post':
(() => {
const i = Math.ceil(Math.random() * 10000);
const newRule: API.RuleListItem = {
key: tableListDataSource.length,
href: 'https://ant.design',
avatar: [
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
][i % 2],
name,
owner: '曲丽丽',
desc,
callNo: Math.floor(Math.random() * 1000),
status: Math.floor(Math.random() * 10) % 2,
updatedAt: moment().format('YYYY-MM-DD'),
createdAt: moment().format('YYYY-MM-DD'),
progress: Math.ceil(Math.random() * 100),
};
tableListDataSource.unshift(newRule);
return res.json(newRule);
})();
return;
case 'update':
(() => {
let newRule = {};
tableListDataSource = tableListDataSource.map((item) => {
if (item.key === key) {
newRule = { ...item, desc, name };
return { ...item, desc, name };
}
return item;
});
return res.json(newRule);
})();
return;
default:
break;
}
const result = {
list: tableListDataSource,
pagination: {
total: tableListDataSource.length,
},
};
res.json(result);
}
export default {
'GET /api/rule': getRule,
'POST /api/rule': postRule,
};

107
mock/notices.ts Normal file
View File

@ -0,0 +1,107 @@
import { Request, Response } from 'express';
const getNotices = (req: Request, res: Response) => {
res.json({
data: [
{
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,
};

5
mock/route.ts Normal file
View File

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

539
mock/user.ts Normal file
View File

@ -0,0 +1,539 @@
import { Request, Response } from 'express';
import captchapng from 'captchapng3';
const waitTime = (time: number = 100) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, time);
});
};
async function getFakeCaptcha(req: Request, res: Response) {
await waitTime(2000);
return res.json('captcha-xxx');
}
function guid () {
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
async function getCaptchaImage(req: Request, res: Response) {
await waitTime(1000);
let rand = (Math.random() * 9000 + 1000).toFixed();
var p = new captchapng(100, 30, rand);
const img = p.getBase64();
res.status(200).send({
code: 200,
msg: 'success',
img: img,
uuid: guid()
});
}
const { ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION } = process.env;
/**
*
* current user access if is '', user need login
* pro
*/
let access = ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site' ? 'admin' : '';
const getAccess = () => {
return access;
};
// 代码中会兼容本地 service mock 以及部署站点的静态数据
export default {
// 支持值为 Object 和 Array
'GET /api/getInfo': (req: Request, res: Response) => {
if (!getAccess()) {
res.status(401).send({
data: {
isLogin: false,
},
errorCode: '401',
errorMessage: '请先登录!',
success: true,
});
return;
}
res.send({
msg: "操作成功",
code: 200,
permissions: ["*:*:*"],
roles: ["admin"],
user: {
searchValue: null,
createBy: "admin",
createTime: "2021-09-09 17:25:28",
updateBy: null,
updateTime: null,
remark: "管理员",
params: {},
userId: 1,
deptId: 103,
userName: "admin",
nickName: "若依",
email: "ry@163.com",
phonenumber: "15888888888",
sex: "1",
avatar: "/static/img/profile.473f5971.jpg",
status: "0",
delFlag: "0",
loginIp: "61.140.198.155",
loginDate: "2021-11-11T14:03:07.723+0800",
dept: {
searchValue: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
params: {},
deptId: 103,
parentId: 101,
ancestors: null,
deptName: "研发部门",
orderNum: "1",
leader: "若依",
phone: null,
email: null,
status: "0",
delFlag: null,
parentName: null,
children: []
},
roles: [
{
searchValue: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
params: {},
roleId: 1,
roleName: "超级管理员",
roleKey: "admin",
roleSort: "1",
dataScope: "1",
menuCheckStrictly: false,
deptCheckStrictly: false,
status: "0",
delFlag: null,
flag: false,
menuIds: null,
deptIds: null,
admin: true
}
],
roleIds: null,
postIds: null,
roleId: null,
admin: true
}
});
},
// 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': async (req: Request, res: Response) => {
const { password, username, type } = req.body;
await waitTime(2000);
if (password === 'admin123' && username === 'admin') {
res.send({
code: 200,
type,
currentAuthority: 'admin',
token: guid()
});
access = 'admin';
return;
}
if (password === '123456' && username === 'user') {
res.send({
code: 200,
type,
currentAuthority: 'user',
token: guid()
});
access = 'user';
return;
}
if (type === 'mobile') {
res.send({
code: 200,
type,
currentAuthority: 'admin',
token: guid()
});
access = 'admin';
return;
}
res.send({
status: 'error',
type,
currentAuthority: 'guest',
});
access = 'guest';
},
'POST /api/logout': (req: Request, res: Response) => {
access = '';
res.send({ data: {}, success: true });
},
'GET /api/getRouters': {
msg: "操作成功",
code: 200,
data: [
{
name: "System",
path: "/system",
hidden: false,
redirect: "noRedirect",
component: "Layout",
alwaysShow: true,
meta: {
title: "系统管理",
icon: "system",
noCache: false,
link: null
},
children: [
{
name: "User",
path: "user",
hidden: false,
component: "system/user/index",
meta: {
title: "用户管理",
icon: "user",
noCache: false,
link: null
}
},
{
name: "Role",
path: "role",
hidden: false,
component: "system/role/index",
meta: {
title: "角色管理",
icon: "peoples",
noCache: false,
link: null
}
},
{
name: "Menu",
path: "menu",
hidden: false,
component: "system/menu/index",
meta: {
title: "菜单管理",
icon: "tree-table",
noCache: false,
link: null
}
},
{
name: "Dept",
path: "dept",
hidden: false,
component: "system/dept/index",
meta: {
title: "部门管理",
icon: "tree",
noCache: false,
link: null
}
},
{
name: "Post",
path: "post",
hidden: false,
component: "system/post/index",
meta: {
title: "岗位管理",
icon: "post",
noCache: false,
link: null
}
},
{
name: "Dict",
path: "dict",
hidden: false,
component: "system/dict/index",
meta: {
title: "字典管理",
icon: "dict",
noCache: false,
link: null
}
},
{
name: "Config",
path: "config",
hidden: false,
component: "system/config/index",
meta: {
title: "参数设置",
icon: "edit",
noCache: false,
link: null
}
},
{
name: "Notice",
path: "notice",
hidden: false,
component: "system/notice/index",
meta: {
title: "通知公告",
icon: "message",
noCache: false,
link: null
}
},
{
name: "Log",
path: "log",
hidden: false,
redirect: "noRedirect",
component: "ParentView",
alwaysShow: true,
meta: {
title: "日志管理",
icon: "log",
noCache: false,
link: null
},
children: [
{
name: "Operlog",
path: "operlog",
hidden: false,
component: "monitor/operlog/index",
meta: {
title: "操作日志",
icon: "form",
noCache: false,
link: null
}
},
{
name: "Logininfor",
path: "logininfor",
hidden: false,
component: "monitor/logininfor/index",
meta: {
title: "登录日志",
icon: "logininfor",
noCache: false,
link: null
}
}
]
}
]
},
{
name: "Monitor",
path: "/monitor",
hidden: false,
redirect: "noRedirect",
component: "Layout",
alwaysShow: true,
meta: {
title: "系统监控",
icon: "monitor",
noCache: false,
link: null
},
children: [
{
name: "Online",
path: "online",
hidden: false,
component: "monitor/online/index",
meta: {
title: "在线用户",
icon: "online",
noCache: false,
link: null
}
},
{
name: "Job",
path: "job",
hidden: false,
component: "monitor/job/index",
meta: {
title: "定时任务",
icon: "job",
noCache: false,
link: null
}
},
{
name: "Druid",
path: "druid",
hidden: false,
component: "monitor/druid/index",
meta: {
title: "数据监控",
icon: "druid",
noCache: false,
link: null
}
},
{
name: "Server",
path: "server",
hidden: false,
component: "monitor/server/index",
meta: {
title: "服务监控",
icon: "server",
noCache: false,
link: null
}
},
{
name: "Cache",
path: "cache",
hidden: false,
component: "monitor/cache/index",
meta: {
title: "缓存监控",
icon: "redis",
noCache: false,
link: null
}
}
]
},
{
name: "Tool",
path: "/tool",
hidden: false,
redirect: "noRedirect",
component: "Layout",
alwaysShow: true,
meta: {
title: "系统工具",
icon: "tool",
noCache: false,
link: null
},
children: [
{
name: "Build",
path: "build",
hidden: false,
component: "tool/build/index",
meta: {
title: "表单构建",
icon: "build",
noCache: false,
link: null
}
},
{
name: "Gen",
path: "gen",
hidden: false,
component: "tool/gen/index",
meta: {
title: "代码生成",
icon: "code",
noCache: false,
link: null
}
},
{
name: "Swagger",
path: "swagger",
hidden: false,
component: "tool/swagger/index",
meta: {
title: "系统接口",
icon: "swagger",
noCache: false,
link: null
}
}
]
}
]
},
'POST /api/register': (req: Request, res: Response) => {
res.send({ status: 'ok', currentAuthority: 'user', success: true });
},
'GET /api/500': (req: Request, res: Response) => {
res.status(500).send({
timestamp: 1513932555104,
status: 500,
error: 'error',
message: 'error',
path: '/base/category/list',
});
},
'GET /api/404': (req: Request, res: Response) => {
res.status(404).send({
timestamp: 1513932643431,
status: 404,
error: 'Not Found',
message: 'No message available',
path: '/base/category/list/2121212',
});
},
'GET /api/403': (req: Request, res: Response) => {
res.status(403).send({
timestamp: 1513932555104,
status: 403,
error: 'Forbidden',
message: 'Forbidden',
path: '/base/category/list',
});
},
'GET /api/401': (req: Request, res: Response) => {
res.status(401).send({
timestamp: 1513932555104,
status: 401,
error: 'Unauthorized',
message: 'Unauthorized',
path: '/base/category/list',
});
},
'GET /api/login/captcha': getFakeCaptcha,
'GET /api/captchaImage': getCaptchaImage,
};

46678
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

252
package.json Normal file
View File

@ -0,0 +1,252 @@
{
"name": "ant-design-pro",
"version": "5.0.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 build && npm run gh-pages",
"dev": "npm run start:dev",
"docker-hub:build": "docker build -f Dockerfile.hub -t ant-design-pro ./",
"docker-prod:build": "docker-compose -f ./docker/docker-compose.yml build",
"docker-prod:dev": "docker-compose -f ./docker/docker-compose.yml up",
"docker:build": "docker-compose -f ./docker/docker-compose.dev.yml build",
"docker:dev": "docker-compose -f ./docker/docker-compose.dev.yml up",
"docker:push": "npm run docker-hub:build && npm run docker:tag && docker push antdesign/ant-design-pro",
"docker:tag": "docker tag ant-design-pro antdesign/ant-design-pro",
"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 && npm run tsc",
"lint-staged": "lint-staged",
"lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx ",
"lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src && npm run lint:style",
"lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
"lint:prettier": "prettier -c --write \"src/**/*\" --end-of-line auto",
"lint:style": "stylelint --fix \"src/**/*.less\" --syntax less",
"openapi": "umi openapi",
"precommit": "lint-staged",
"prettier": "prettier -c --write \"src/**/*\"",
"serve": "umi-serve",
"start": "cross-env UMI_ENV=dev umi dev",
"start:dev": "cross-env REACT_APP_ENV=dev MOCK=none UMI_ENV=dev umi dev",
"start:no-mock": "cross-env MOCK=none UMI_ENV=dev umi dev",
"start:no-ui": "cross-env UMI_UI=none UMI_ENV=dev umi dev",
"start:pre": "cross-env REACT_APP_ENV=pre UMI_ENV=dev umi dev",
"start:test": "cross-env REACT_APP_ENV=test MOCK=none UMI_ENV=dev 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"
},
"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/charts": "^0.9.4",
"@ant-design/icons": "^4.5.0",
"@ant-design/pro-components": "^1.1.1",
"@ant-design/pro-descriptions": "^1.6.8",
"@ant-design/pro-form": "^1.18.3",
"@ant-design/pro-layout": "^6.15.3",
"@ant-design/pro-table": "^2.30.8",
"@antv/data-set": "^0.11.0",
"@antv/l7": "^2.3.7",
"@antv/l7-maps": "^2.3.7",
"@antv/l7-react": "^2.1.9",
"@antv/x6": "^1.32.3",
"@antv/x6-react-shape": "^1.6.0",
"@babel/core": "^7.16.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
"@reduxjs/toolkit": "^1.8.0",
"@svgr/webpack": "^5.5.0",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0",
"@umijs/route-utils": "^1.0.36",
"ahooks": "^2.0.0",
"antd": "^4.14.0",
"babel-loader": "^8.2.3",
"babel-plugin-named-asset-import": "^0.3.8",
"bfj": "^7.0.2",
"bizcharts": "^3.5.3-beta.0",
"bizcharts-plugin-slider": "^2.1.1-beta.1",
"browserslist": "^4.18.1",
"btoa": "^1.2.1",
"camelcase": "^6.2.1",
"captchapng3": "^1.0.7",
"case-sensitive-paths-webpack-plugin": "^2.4.0",
"classnames": "^2.2.6",
"core-js": "^3.25.0",
"crypto": "^1.0.1",
"dot": "^1.1.3",
"dotenv": "^10.0.0",
"dotenv-expand": "^5.1.0",
"eslint-config-react-app": "^7.0.1",
"eslint-webpack-plugin": "^3.1.1",
"file-loader": "^6.2.0",
"fs-extra": "^10.0.0",
"g2": "^2.3.13",
"gg-editor": "^2.0.2",
"html-webpack-plugin": "^5.5.0",
"html2canvas": "^1.4.1",
"i18next": "^19.9.1",
"i18next-browser-languagedetector": "^6.0.1",
"identity-obj-proxy": "^3.0.0",
"jest": "^27.4.3",
"jest-resolve": "^27.4.2",
"jest-watch-typeahead": "^1.0.0",
"jquery": "^3.6.0",
"lodash": "^4.17.11",
"lodash-decorators": "^6.0.0",
"marked": "^2.1.3",
"mini-css-extract-plugin": "^2.4.5",
"moment": "^2.25.3",
"numeral": "^2.0.6",
"nzh": "^1.0.3",
"omit.js": "^2.0.2",
"polished": "^4.1.1",
"postcss": "^8.4.4",
"postcss-flexbugs-fixes": "^5.0.2",
"postcss-normalize": "^10.0.1",
"postcss-preset-env": "^7.0.1",
"prompts": "^2.4.2",
"prop-types": "^15.8.1",
"qs": "^6.9.0",
"react": "^17.0.0",
"react-ace": "^10.1.0",
"react-app-polyfill": "^3.0.0",
"react-color": "^2.19.3",
"react-cropper": "^2.1.8",
"react-dev-inspector": "^1.6.0",
"react-dev-utils": "^12.0.1",
"react-dom": "^17.0.2",
"react-fittext": "^1.0.0",
"react-helmet-async": "^1.2.2",
"react-hotkeys-hook": "^3.4.0",
"react-i18next": "^11.15.3",
"react-intl": "^5.24.6",
"react-redux": "^7.2.6",
"react-refresh": "^0.11.0",
"react-resize-detector": "^6.7.6",
"react-router": "^4.3.1",
"react-router-dom": "^6.3.0",
"react-scripts": "^5.0.1",
"react-sortable-hoc": "^2.0.0",
"react-window": "^1.8.6",
"redux": "^4.2.0",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.4.1",
"resolve": "^1.20.0",
"resolve-url-loader": "^4.0.0",
"sass-loader": "^12.3.0",
"semver": "^7.3.5",
"sortablejs": "^1.15.0",
"source-map-loader": "^3.0.0",
"split.js": "^1.6.4",
"sql-formatter": "^4.0.2",
"style-loader": "^3.3.1",
"styled-components": "^5.3.3",
"tailwindcss": "^3.0.2",
"terser-webpack-plugin": "^5.2.5",
"umi": "^3.5.34",
"umi-plugin-keep-alive": "^0.0.1-beta.18",
"umi-request": "^1.0.8",
"umi-serve": "^1.9.10",
"uuid": "8.3.2",
"web-vitals": "^2.1.4",
"webpack": "^5.64.4",
"webpack-dev-server": "^4.6.0",
"webpack-manifest-plugin": "^4.0.2",
"workbox-webpack-plugin": "^6.4.1",
"xterm": "^4.18.0"
},
"devDependencies": {
"@ant-design/pro-cli": "^2.0.2",
"@babel/cli": "^7.17.10",
"@babel/plugin-proposal-class-properties": "^7.17.12",
"@babel/plugin-proposal-decorators": "^7.18.2",
"@babel/plugin-proposal-export-default-from": "^7.17.12",
"@babel/plugin-proposal-export-namespace-from": "^7.17.12",
"@babel/plugin-proposal-optional-chaining": "^7.17.12",
"@babel/polyfill": "^7.12.1",
"@babel/preset-env": "^7.18.2",
"@babel/preset-react": "^7.17.12",
"@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": "^17.0.0",
"@types/react-dom": "^17.0.0",
"@types/react-helmet": "^6.1.0",
"@types/redux-logger": "^3.0.9",
"@types/styled-components": "^5.1.20",
"@types/uuid": "^8.3.4",
"@umijs/fabric": "^2.6.2",
"@umijs/max": "^4.0.0-rc.22",
"@umijs/openapi": "^1.1.14",
"@umijs/plugin-blocks": "^2.0.5",
"@umijs/plugin-esbuild": "^1.0.1",
"@umijs/plugin-openapi": "^1.2.0",
"@umijs/preset-ant-design-pro": "^1.2.0",
"@umijs/preset-dumi": "^1.1.7",
"@umijs/preset-react": "^1.8.17",
"@umijs/yorkie": "^2.0.3",
"autoprefixer": "^10.4.7",
"babel-eslint": "^10.1.0",
"babel-plugin-import": "^1.13.5",
"babel-plugin-styled-components": "^2.0.7",
"carlo": "^0.9.46",
"copy-webpack-plugin": "^11.0.0",
"cross-env": "^7.0.0",
"cross-port-killer": "^1.1.1",
"cssnano": "^5.1.12",
"detect-installer": "^1.0.1",
"enzyme": "^3.11.0",
"eslint": "^7.1.0",
"express": "^4.17.1",
"extract-text-webpack-plugin": "^3.0.2",
"gh-pages": "^3.0.0",
"hoist-non-react-statics": "^3.3.2",
"imports-loader": "^4.0.0",
"jest-styled-components": "^7.0.8",
"jsdom-global": "^3.0.2",
"lint-staged": "^10.0.0",
"loader-utils": "^2.0.2",
"mockjs": "^1.0.1-beta3",
"monaco-editor": "^0.28.1",
"monaco-editor-webpack-plugin": "^4.2.0",
"open-browser-webpack-plugin": "^0.0.5",
"optimize-css-assets-webpack-plugin": "^6.0.1",
"prettier": "^2.3.2",
"pro-download": "1.0.1",
"puppeteer-core": "^8.0.0",
"react-monaco-editor": "^0.46.0",
"resize-observer-polyfill": "^1.5.1",
"script-ext-html-webpack-plugin": "^2.1.5",
"stylelint": "^13.0.0",
"stylelint-config-styled-components": "^0.1.1",
"typescript": "^4.2.2",
"url-loader": "^4.1.1",
"webpack-cli": "^4.10.0"
},
"engines": {
"node": ">=10.0.0"
},
"gitHooks": {
"commit-msg": "fabric verify-commit"
}
}

1
public/CNAME Normal file
View File

@ -0,0 +1 @@
preview.pro.ant.design

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -0,0 +1,459 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 41.4 42.2" style="enable-background:new 0 0 41.4 42.2;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{fill:#84D0E9;}
.st2{fill:#2BB1DC;}
.st3{fill:#1481BC;}
</style>
<g id="图层_1" class="st0">
<image style="display:inline;overflow:visible;" width="466" height="156" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdIAAACcCAIAAABEJ73JAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA
GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAX7JJREFUeNrsnemzFMeZ7iuruvts
bAIECIEAsUsChBBabHns8BKzfZhv9++8Eb4xdoxjxrY82tCGVjYBAoGEJMRy4GzdXZX3V/V0ZWcv
Z+8DHJSv8VF3dVVWZlblk0+++S7GWhsFCRIkSJAHJXHogiBBggQJsBskSJAgAXaDBAkSJEiA3SBB
ggQJsBskSJAgQQLsBgkSJEiA3SBBggQJsBskSJAgQQLsBgkSJEiA3SBBggQJEmA3SJAgQQLsBgkS
JEiQALtBggQJEmA3SJAgQQLsBgkSJEiQALtBggQJEmA3SJAgQYIE2A0SJEiQALtBggQJEiTAbpAg
QYIE2A0SJEiQALtBggQJEiTAbpAgQYIE2A0SJEiQIAF2gwQJEuRRk8rPq7mWfzb/YExk2seK/+T/
1VFb/GQWX3Z+VfGfVgnW/WStaZVvFl1wkAf7juhNMOYhXruccmaryfLLfNR6O8DuagHdEk1zEDSz
nGMGfMe8QFdmwNwgQX7uYjTb/DxITAmCbcJpPLpbnGMix3mXBrItMp2XwEfHoE0ng7arAoKXz79W
L5eZreaz9clgueqgevjB9//SWPbPjfP+/HS7xvaw0W41RL/ji6K3/W4biG6QIEF+ZmxXU6qNWjrW
2ENK43hvyU+XgpPljN2GdiP+G5lutF+1+oZHn/POxrZaXb6q+NTSGPTC+ebD5cKLvftC2rVaWPPP
SrebPw3bQUhtaqN6Ziea2a16NtlMs+LBefqARTw/D7LdPUxsosSYNUm8aSgZq5jERGFLLUiQwHbt
z6zJTq+aKxOmU3u7nl6833j/p+lvJhv1LMvyw3HUn6DOV64tWXMO3lxvqrEZS5K9a6qvbxnds6Yy
FEcVE/QNjxBbf9R0owtvRS9/XyyXfBRaFywZfi4zjf9hOs1uTKcXxuunb09fulevW9uG3RJEo4XN
TO1tsnJrzcJzK8nW4eq6ajxT4Ll3bkDeIEF+plL5mba7hZFmIrVfTzRhuz9ON+83sqzAWmOzwgDB
Rr51wgILtYVlbqHPsMZW4mjLcGXbaHVdJR7KNcqmfd4jjLzL0Zo9avzFr89iueGj1oq5Ge5sbelt
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" transform="matrix(0.5 0 0 0.5 -31.6256 48.9837)">
</image>
</g>
<g id="图标">
</g>
<g id="图层_3">
<g>
<path class="st1" d="M22.6,6.2c0,0-5,6-2.3,13.4c1.2,3,5,8,5.3,11.9c0.7,7.6-3.2,10.7-3.2,10.7h15.9c0,0,4.4-5.2,3-10.6
c-0.9-5-3.4-7.7-4.9-10.5c-0.8-1.6-3.3-3.7,1.3-15C31.5,5.3,22.6,6.2,22.6,6.2z"/>
<path class="st2" d="M12.7,0.3c0,0-5,6-2.3,13.4c1.2,3,5,8,5.3,11.9c0.7,7.6-3.2,10.7-3.2,10.7h15.9c0,0,4.4-5.2,3-10.6
c-0.9-5-3.4-7.7-4.9-10.5c-0.8-1.6-3.3-3.7,1.3-15C21.6-0.6,12.7,0.3,12.7,0.3z"/>
<path class="st3" d="M3.3,5.8c0,0-5,6-2.3,13.4c1.2,3,5,8,5.3,11.9C6.9,38.8,3,41.9,3,41.9h15.9c0,0,4.4-5.2,3-10.6
c-0.9-5-3.4-7.7-4.9-10.5c-0.8-1.6-3.3-3.7,1.3-15C12.2,4.9,3.3,5.8,3.3,5.8z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 34 KiB

BIN
public/jar/chiner-java.jar Normal file

Binary file not shown.

1
public/logo.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" version="1.1" viewBox="0 0 200 200"><title>Group 28 Copy 5</title><desc>Created with Sketch.</desc><defs><linearGradient id="linearGradient-1" x1="62.102%" x2="108.197%" y1="0%" y2="37.864%"><stop offset="0%" stop-color="#4285EB"/><stop offset="100%" stop-color="#2EC7FF"/></linearGradient><linearGradient id="linearGradient-2" x1="69.644%" x2="54.043%" y1="0%" y2="108.457%"><stop offset="0%" stop-color="#29CDFF"/><stop offset="37.86%" stop-color="#148EFF"/><stop offset="100%" stop-color="#0A60FF"/></linearGradient><linearGradient id="linearGradient-3" x1="69.691%" x2="16.723%" y1="-12.974%" y2="117.391%"><stop offset="0%" stop-color="#FA816E"/><stop offset="41.473%" stop-color="#F74A5C"/><stop offset="100%" stop-color="#F51D2C"/></linearGradient><linearGradient id="linearGradient-4" x1="68.128%" x2="30.44%" y1="-35.691%" y2="114.943%"><stop offset="0%" stop-color="#FA8E7D"/><stop offset="51.264%" stop-color="#F74A5C"/><stop offset="100%" stop-color="#F51D2C"/></linearGradient></defs><g id="Page-1" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><g id="logo" transform="translate(-20.000000, -20.000000)"><g id="Group-28-Copy-5" transform="translate(20.000000, 20.000000)"><g id="Group-27-Copy-3"><g id="Group-25" fill-rule="nonzero"><g id="2"><path id="Shape" fill="url(#linearGradient-1)" d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C99.2571609,26.9692191 101.032305,26.9692191 102.20193,28.1378823 L129.985225,55.8983314 C134.193707,60.1033528 141.017005,60.1033528 145.225487,55.8983314 C149.433969,51.69331 149.433969,44.8756232 145.225487,40.6706018 L108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z"/><path id="Shape" fill="url(#linearGradient-2)" d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C100.999864,25.6271836 105.751642,20.541824 112.729652,19.3524487 C117.915585,18.4685261 123.585219,20.4140239 129.738554,25.1889424 C125.624663,21.0784292 118.571995,14.0340304 108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z"/></g><path id="Shape" fill="url(#linearGradient-3)" d="M153.685633,135.854579 C157.894115,140.0596 164.717412,140.0596 168.925894,135.854579 L195.959977,108.842726 C200.659183,104.147384 200.659183,96.5636133 195.960527,91.8688194 L168.690777,64.7181159 C164.472332,60.5180858 157.646868,60.5241425 153.435895,64.7316526 C149.227413,68.936674 149.227413,75.7543607 153.435895,79.9593821 L171.854035,98.3623765 C173.02366,99.5310396 173.02366,101.304724 171.854035,102.473387 L153.685633,120.626849 C149.47715,124.83187 149.47715,131.649557 153.685633,135.854579 Z"/></g><ellipse id="Combined-Shape" cx="100.519" cy="100.437" fill="url(#linearGradient-4)" rx="23.6" ry="23.581"/></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

5
public/pro_icon.svg Normal file
View File

@ -0,0 +1,5 @@
<svg width="42" height="42" xmlns="http://www.w3.org/2000/svg">
<g>
<path fill="#070707" d="m6.717392,13.773912l5.6,0c2.8,0 4.7,1.9 4.7,4.7c0,2.8 -2,4.7 -4.9,4.7l-2.5,0l0,4.3l-2.9,0l0,-13.7zm2.9,2.2l0,4.9l1.9,0c1.6,0 2.6,-0.9 2.6,-2.4c0,-1.6 -0.9,-2.4 -2.6,-2.4l-1.9,0l0,-0.1zm8.9,11.5l2.7,0l0,-5.7c0,-1.4 0.8,-2.3 2.2,-2.3c0.4,0 0.8,0.1 1,0.2l0,-2.4c-0.2,-0.1 -0.5,-0.1 -0.8,-0.1c-1.2,0 -2.1,0.7 -2.4,2l-0.1,0l0,-1.9l-2.7,0l0,10.2l0.1,0zm11.7,0.1c-3.1,0 -5,-2 -5,-5.3c0,-3.3 2,-5.3 5,-5.3s5,2 5,5.3c0,3.4 -1.9,5.3 -5,5.3zm0,-2.1c1.4,0 2.2,-1.1 2.2,-3.2c0,-2 -0.8,-3.2 -2.2,-3.2c-1.4,0 -2.2,1.2 -2.2,3.2c0,2.1 0.8,3.2 2.2,3.2z" class="st0" id="Ant-Design-Pro"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 677 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 789.1 195.64" height="48">
<defs>
<style>.cls-1{fill:#003545;}</style>
</defs>
<title>MDB-HLogo_RGB</title>
<path class="cls-1" d="M378.08,70l18.52,71.5h-14L370.26,90l-23.17,51.5H335.3l-23.07-51.2-12.68,51.2H285.89L304.21,70h12.08l24.95,55.36L366.1,70Z" transform="translate(0 -3.38)"></path>
<path class="cls-1" d="M449.27,97.64V89.32h13.47v52.19H449.27v-8.42c-3.56,6-10.89,9.51-19.8,9.51-18.62,0-29-13.08-29-28.23,0-14.55,9.9-26.24,27-26.24C437.29,88.13,445.41,91.5,449.27,97.64Zm-34.46,17.43c0,9.6,6,17.82,17.72,17.82,11.29,0,17.43-8,17.43-17.53s-6.33-17.62-18-17.62C420.65,97.74,414.81,105.86,414.81,115.07Z" transform="translate(0 -3.38)"></path>
<path class="cls-1" d="M493.13,141.51H479.66V89.32h13.47V101c3.56-8,10.79-12.87,18.81-12.87a24.2,24.2,0,0,1,8.42,1.39l-2.87,9.9a29.66,29.66,0,0,0-7.13-1c-9.71,0-17.23,7.33-17.23,18.12Z" transform="translate(0 -3.38)"></path>
<path class="cls-1" d="M527.09,75.55a6.86,6.86,0,0,1,7.23-7,7.1,7.1,0,0,1,7.33,7.23c0,3.47-2.38,6.93-7.33,6.93A6.93,6.93,0,0,1,527.09,75.55Zm.59,13.77h13.47v38.13c0,2.37.5,4.06,2.48,4.06a14.37,14.37,0,0,0,2.57-.3l2.08,9.8a23.72,23.72,0,0,1-8.91,1.59c-5.65,0-11.69-1.69-11.69-14.46Z" transform="translate(0 -3.38)"></path>
<path class="cls-1" d="M601.36,97.64V89.32h13.46v52.19H601.36v-8.42c-3.57,6-10.9,9.51-19.81,9.51-18.62,0-29-13.08-29-28.23,0-14.55,9.91-26.24,27-26.24C589.37,88.13,597.49,91.5,601.36,97.64Zm-34.47,17.43c0,9.6,6,17.82,17.73,17.82,11.29,0,17.43-8,17.43-17.53s-6.34-17.62-18-17.62C572.74,97.74,566.89,105.86,566.89,115.07Z" transform="translate(0 -3.38)"></path>
<path class="cls-1" d="M635.51,70H667.8c27.13,0,40.7,14.95,40.5,35.75.2,21.59-14.76,35.75-38.13,35.75H635.51Zm8.91,6.34v58.92H669c21.59,0,29.81-14.56,29.81-29.71,0-17.13-10.3-29.21-29.81-29.21Z" transform="translate(0 -3.38)"></path>
<path class="cls-1" d="M763.35,141.51h-41V70h36.94c14.16,0,27.63,2.67,27.43,18.52,0,11.19-6.93,14.26-14.26,15.45,10.4.89,16.64,7.52,16.64,18.22C789.19,138.24,775.13,141.51,763.35,141.51Zm-3.07-40.31c14.16,0,17.33-5.44,17.33-12.38,0-10.39-6.34-12.77-17.33-12.77H730.87V101.2Zm.39,6h-29.8v28.23H762c8.72,0,17.93-2.88,17.93-13.87C779.89,108.93,769.29,107.24,760.67,107.24Z" transform="translate(0 -3.38)"></path>
<path class="cls-1" d="M299.2,4.34a4.35,4.35,0,0,0-2.92-1c-2.9,0-6.65,2-8.66,3-.35.19-.62.33-.81.41A27.32,27.32,0,0,1,276,9.53c-3.86.12-7.19.35-11.5.8C238.82,13,227.43,32.6,216.42,51.6c-6,10.32-12.18,21-20.67,29.28a54.92,54.92,0,0,1-5.59,4.74c-8.78,6.54-19.81,11.17-28.43,14.47-8.26,3.15-17.28,6-26,8.74-8,2.51-15.51,4.89-22.44,7.46-3.13,1.16-5.79,2-8.13,2.83-6.31,2.1-10.87,3.62-17.51,8.17-2.59,1.77-5.19,3.69-7,5.14A73.46,73.46,0,0,0,66.8,147.05a86.62,86.62,0,0,1-11.6,14c-1.4,1.37-3.89,2-7.62,2-4.37,0-9.67-.9-15.28-1.85-5.77-1-11.75-2-16.87-2-4.17,0-7.35.67-9.74,2.06,0,0-4,2.34-5.69,5.36l1.66.75a34.71,34.71,0,0,1,7.1,5.07,35.39,35.39,0,0,0,7.37,5.25,6.61,6.61,0,0,1,2.27,1.51c-.7,1-1.73,2.35-2.8,3.76-5.92,7.74-9.37,12.63-7.39,15.29a6.09,6.09,0,0,0,3,.71c12.9,0,19.82-3.36,28.59-7.6,2.54-1.23,5.16-2.5,8.16-3.8,5.12-2.22,10.64-5.76,16.48-9.52,7.74-5,15.74-10.11,23.49-12.6a64,64,0,0,1,19.71-2.77c8.23,0,16.83,1.1,25.15,2.17,6.21.79,12.63,1.61,18.93,2,2.45.15,4.72.22,6.92.22a77.2,77.2,0,0,0,8.83-.47l.7-.24c4.42-2.72,6.49-8.55,8.5-14.18,1.29-3.63,2.37-6.89,4.05-9a2.79,2.79,0,0,1,.34-.28.4.4,0,0,1,.5.09s0,.05,0,.15c-1.06,22.06-9.9,36.05-18.88,48.49l-6,6.43s8.39,0,13.16-1.84c17.42-5.21,30.58-16.69,40.15-35a149.42,149.42,0,0,0,6.32-14.44c.16-.41,1.68-1.17,1.53.95,0,.63-.09,1.32-.14,2h0c0,.43-.06.87-.08,1.31-.25,3-1,9.57-1,9.57l5.38-2.88c13-8.22,23-24.74,30.56-50.47,3.16-10.72,5.47-21.37,7.51-30.76,2.44-11.23,4.55-20.93,7-24.68,3.78-5.89,9.55-9.87,15.13-13.73l2.28-1.58c7-4.93,14-10.62,15.54-21.22l0-.24C301.22,7.29,300.27,5.27,299.2,4.34Z" transform="translate(0 -3.38)"></path>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1645770420428" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1363" width="48" height="48" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M1017.6 521.6c-3.2-3.2-6.4-6.4-6.4-9.6-6.4-12.8-16-22.4-28.8-32-9.6-6.4-28.8-16-32-25.6 6.4 0 12.8-3.2 19.2-3.2 9.6-3.2 16-3.2 25.6-3.2 3.2 0 9.6-3.2 12.8-3.2v-3.2c-3.2-6.4-9.6-12.8-12.8-19.2-12.8-12.8-28.8-25.6-44.8-38.4-9.6-6.4-19.2-9.6-28.8-16-3.2-3.2-9.6-3.2-9.6-6.4-3.2-6.4-6.4-16-9.6-22.4-6.4-16-16-35.2-22.4-54.4-3.2-12.8-6.4-25.6-12.8-35.2-28.8-51.2-57.6-83.2-102.4-115.2-9.6-6.4-22.4-9.6-35.2-12.8h-19.2c-3.2-3.2-9.6-6.4-12.8-9.6-16-9.6-54.4-35.2-67.2-3.2-6.4 19.2 9.6 38.4 16 48 3.2 6.4 9.6 16 12.8 22.4 3.2 6.4 3.2 9.6 3.2 16 6.4 12.8 9.6 28.8 16 41.6l9.6 19.2c3.2 3.2 6.4 6.4 6.4 9.6-3.2 6.4-3.2 16-6.4 22.4-9.6 35.2-6.4 76.8 6.4 102.4 3.2 6.4 16 25.6 28.8 19.2 12.8-6.4 9.6-22.4 12.8-38.4 0-3.2 0-6.4 3.2-9.6 3.2 9.6 6.4 16 9.6 25.6 9.6 16 22.4 32 35.2 41.6 6.4 6.4 12.8 16 19.2 19.2l-6.4-6.4c-6.4-6.4-9.6-12.8-12.8-19.2-12.8-19.2-22.4-35.2-28.8-54.4-3.2-9.6-9.6-19.2-12.8-28.8-3.2-3.2-3.2-9.6-3.2-9.6-3.2 6.4-9.6 12.8-12.8 19.2-6.4 12.8-6.4 28.8-6.4 44.8-9.6-3.2-12.8-12.8-16-22.4-6.4-22.4-9.6-57.6-3.2-83.2 3.2-6.4 9.6-25.6 6.4-32-3.2-6.4-6.4-9.6-9.6-12.8l-9.6-19.2c-6.4-16-9.6-35.2-16-54.4-3.2-6.4-9.6-16-12.8-22.4-6.4-9.6-9.6-12.8-16-22.4 0-3.2-3.2-9.6 0-12.8 0-3.2 3.2-3.2 3.2-3.2 3.2-3.2 12.8 0 16 3.2 9.6 3.2 19.2 9.6 25.6 16 3.2 3.2 6.4 9.6 12.8 9.6h6.4c9.6 3.2 19.2 0 25.6 3.2 12.8 6.4 25.6 12.8 38.4 22.4 35.2 25.6 64 60.8 83.2 105.6 3.2 6.4 3.2 12.8 6.4 22.4 6.4 16 12.8 28.8 19.2 44.8 6.4 12.8 9.6 28.8 19.2 41.6 3.2 6.4 19.2 9.6 28.8 12.8l19.2 9.6c9.6 6.4 19.2 12.8 25.6 19.2 3.2 3.2 19.2 9.6 19.2 16-22.4 0-38.4 3.2-51.2 9.6-6.4-3.2-12.8-3.2-12.8 3.2 3.2 3.2 3.2 6.4 3.2 9.6 3.2 6.4 9.6 12.8 12.8 19.2 6.4 6.4 12.8 9.6 16 12.8 9.6 6.4 22.4 12.8 32 19.2 6.4 3.2 12.8 9.6 19.2 12.8 3.2 3.2 3.2 6.4 9.6 6.4-3.2 0-3.2-3.2-3.2-6.4z" fill="#02608A" p-id="1364"></path><path d="M713.6 166.4c-3.2 0-6.4 0-9.6 3.2 3.2 0 12.8 25.6 16 25.6 3.2-3.2 6.4-9.6 6.4-12.8 0-6.4-3.2-9.6-9.6-12.8 0-3.2 0-3.2-3.2-3.2zM198.4 518.4l-57.6 201.6-57.6-201.6H32c-9.6 86.4-19.2 176-22.4 275.2h44.8c0-73.6 0-137.6 6.4-208l57.6 208h38.4l57.6-208c6.4 73.6 6.4 137.6 9.6 208h48c-3.2-83.2-12.8-172.8-22.4-275.2H198.4zM390.4 588.8c-6.4 60.8-9.6 112-28.8 163.2 0-12.8-3.2-19.2-9.6-44.8l-32-118.4H275.2l44.8 156.8c6.4 22.4 9.6 38.4 9.6 48 0 9.6 0 16-3.2 19.2-6.4 6.4-16 9.6-28.8 9.6h-16v35.2c6.4 3.2 16 6.4 22.4 6.4 25.6 0 48-16 67.2-54.4 25.6-44.8 48-118.4 64-220.8h-44.8z" fill="#02608A" p-id="1365"></path><path d="M953.6 748.8v-230.4h-48v272h115.2v-41.6zM832 771.2c3.2-3.2 6.4-6.4 9.6-12.8 19.2-25.6 28.8-60.8 28.8-112 0-89.6-32-134.4-92.8-134.4-32 0-54.4 12.8-70.4 35.2-19.2 25.6-28.8 60.8-28.8 112 0 48 9.6 83.2 25.6 105.6 16 19.2 38.4 28.8 67.2 28.8 12.8 0 22.4-3.2 32-3.2l57.6 38.4 16-32-44.8-25.6z m-54.4-25.6c-16 0-28.8-6.4-35.2-22.4-9.6-16-12.8-41.6-12.8-73.6 0-60.8 16-89.6 48-89.6 16 0 28.8 6.4 35.2 22.4 9.6 16 12.8 38.4 12.8 73.6 0 60.8-16 89.6-48 89.6zM633.6 656s-35.2-22.4-51.2-32c-19.2-12.8-32-25.6-32-41.6 0-9.6 6.4-16 12.8-25.6 6.4-6.4 16-9.6 28.8-9.6 16 0 32 6.4 44.8 16l9.6-35.2c-19.2-12.8-38.4-19.2-60.8-19.2s-38.4 6.4-54.4 19.2c-12.8 12.8-25.6 38.4-25.6 60.8 0 25.6 9.6 41.6 28.8 57.6 0 0 32 22.4 51.2 32 19.2 12.8 28.8 25.6 28.8 41.6 0 12.8-3.2 22.4-12.8 28.8-9.6 6.4-19.2 3.2-28.8 3.2-16 0-32-6.4-51.2-16l-9.6 32c22.4 16 44.8 25.6 67.2 25.6 25.6 0 44.8-6.4 60.8-22.4 16-16 22.4-35.2 22.4-57.6 0-25.6-9.6-41.6-28.8-57.6z" fill="#E58E01" p-id="1366"></path></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1650692654847" class="icon" viewBox="0 0 8165 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="988" xmlns:xlink="http://www.w3.org/1999/xlink" width="255.15625" height="48"><defs><style type="text/css"></style></defs><path d="M3398.499037 666.115306h520.24153l-274.800972-442.904953-504.499351 800.60224-229.885787 0.187407 614.069914-961.397353A143.303803 143.303803 0 0 1 3643.564782 0.008746c48.350978 0 92.703942 22.801172 118.878438 60.907239l616.193859 963.084015-230.073194-0.187407-107.883901-178.973581h-527.175585l-114.942893-178.723706z m2386.751699 178.911113V10.00378h-195.090574v916.669574c0 25.362399 10.307379 49.600357 28.423379 67.716357 19.115503 18.928096 44.352964 29.360413 71.464494 29.360413h888.995824l114.693017-178.661236H5785.250736z m-3225.2726-149.425762a342.829673 342.829673 0 0 0 0-685.596877H1706.777029v1013.808813h194.903167V188.665016h644.867113a163.856092 163.856092 0 0 1 164.043499 164.105968 163.98103 163.98103 0 0 1-164.043499 164.168437l-549.414537-0.187407 581.77346 507.060579h283.234282l-391.430527-328.399343 89.268149 0.187407zM506.935641 1023.812593a506.873172 506.873172 0 1 1 0-1013.808813h589.269735a506.935641 506.935641 0 0 1 506.873173 506.935641 506.935641 506.935641 0 0 1-506.873173 507.060579l-589.269735-0.187407z m576.151253-178.661236a328.086998 328.086998 0 0 0 328.149467-328.211936 328.086998 328.086998 0 0 0-328.149467-328.211936H519.991655a328.274405 328.274405 0 0 0 0 656.423872h563.095239z m3702.285608 178.661236a506.935641 506.935641 0 1 1 0-1013.808813h700.277084l-114.755487 178.723705h-572.340646a328.274405 328.274405 0 1 0 0 656.423872h702.838312l-114.505611 178.661236h-601.576121z m2384.752692-178.661236a328.086998 328.086998 0 0 1-315.593205-238.506504h833.335977l114.755486-178.723705-948.341339-0.062469a328.211936 328.211936 0 0 1 315.843081-239.193663l572.028302 0.062469 114.942893-178.723705h-700.277084a506.935641 506.935641 0 0 0 0 1013.808813h601.576121l114.505611-178.661236h-702.775843zM7961.482027 117.950149a89.455556 89.455556 0 1 1 179.036051 0 89.455556 89.455556 0 1 1-179.036051 0z m89.580494 114.318204l0 0z m-10.744661-181.597278c17.553779 0 24.800179 0.187407 33.420895 3.435793 22.488827 7.558745 24.800179 28.235972 24.800179 35.794717a49.975171 49.975171 0 0 1-1.374317 10.494785 34.795213 34.795213 0 0 1-15.867117 21.926607c-1.311848 0.999503-2.061476 1.624193-5.747145 2.99851l29.672758 53.098619h-28.673254l-25.987089-48.850729h-17.303903v48.78826h-24.987586V50.671075h32.046579z m8.933061 57.721323c7.683683-0.124938 16.241931-0.687159 21.239448-7.996028a18.990565 18.990565 0 0 0 2.873572-10.932068 16.86662 16.86662 0 0 0-9.62022-15.492303c-5.747145-2.248883-11.619227-2.248883-23.425861-2.248883h-7.058993v36.669282h15.992054z" fill="#d81e06" p-id="989"></path></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1 @@
<svg height="2222" viewBox="0 0 9 8" width="2500" xmlns="http://www.w3.org/2000/svg"><path d="m0 7h1v1h-1z" fill="#f00"/><path d="m0 0h1v7h-1zm2 0h1v8h-1zm2 0h1v8h-1zm2 0h1v8h-1zm2 3.25h1v1.5h-1z" fill="#fc0"/></svg>

After

Width:  |  Height:  |  Size: 216 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1652175124881" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="42276" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M64 154.944a411.52 154.944 0 1 0 823.04 0 411.52 154.944 0 1 0-823.04 0Z" fill="#434343" p-id="42277"></path><path d="M477.632 709.12c-225.024 0-412.608-62.72-412.608-104.704v209.216c0 76.032 184.768 137.344 412.608 137.344s412.608-61.376 412.608-137.344V604.416c0 41.984-187.584 104.704-412.608 104.704z" fill="#434343" p-id="42278"></path><path d="M479.616 387.264C254.592 387.264 67.008 323.136 67.008 280.128v214.144c0 77.696 184.768 140.544 412.608 140.544s412.608-62.848 412.608-140.544V280.128c0 43.008-187.584 107.136-412.608 107.136z" fill="#434343" p-id="42279"></path></svg>

After

Width:  |  Height:  |  Size: 961 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1 @@
<svg width="2500" height="2500" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet"><path d="M255.96 134.393c0-21.521-13.373-40.117-33.223-47.43a75.239 75.239 0 0 0 1.253-13.791c0-39.909-32.386-72.295-72.295-72.295-23.193 0-44.923 11.074-58.505 30.088-6.686-5.224-14.835-7.94-23.402-7.94-21.104 0-38.446 17.133-38.446 38.446 0 4.597.836 9.194 2.298 13.373C13.582 81.739 0 100.962 0 122.274c0 21.522 13.373 40.327 33.431 47.64-.835 4.388-1.253 8.985-1.253 13.79 0 39.7 32.386 72.087 72.086 72.087 23.402 0 44.924-11.283 58.505-30.088 6.686 5.223 15.044 8.149 23.611 8.149 21.104 0 38.446-17.134 38.446-38.446 0-4.597-.836-9.194-2.298-13.373 19.64-7.104 33.431-26.327 33.431-47.64z" fill="#FFF"/><path d="M100.085 110.364l57.043 26.119 57.669-50.565a64.312 64.312 0 0 0 1.253-12.746c0-35.52-28.834-64.355-64.355-64.355-21.313 0-41.162 10.447-53.072 27.998l-9.612 49.73 11.074 23.82z" fill="#F4BD19"/><path d="M40.953 170.75c-.835 4.179-1.253 8.567-1.253 12.955 0 35.52 29.043 64.564 64.564 64.564 21.522 0 41.372-10.656 53.49-28.208l9.403-49.729-12.746-24.238-57.251-26.118-56.207 50.774z" fill="#3CBEB1"/><path d="M40.536 71.918l39.073 9.194 8.775-44.506c-5.432-4.179-11.91-6.268-18.805-6.268-16.925 0-30.924 13.79-30.924 30.924 0 3.552.627 7.313 1.88 10.656z" fill="#E9478C"/><path d="M37.192 81.32c-17.551 5.642-29.67 22.567-29.67 40.954 0 17.97 11.074 34.059 27.79 40.327l54.953-49.73-10.03-21.52-43.043-10.03z" fill="#2C458F"/><path d="M167.784 219.852c5.432 4.18 11.91 6.478 18.596 6.478 16.925 0 30.924-13.79 30.924-30.924 0-3.761-.627-7.314-1.88-10.657l-39.073-9.193-8.567 44.296z" fill="#95C63D"/><path d="M175.724 165.317l43.043 10.03c17.551-5.85 29.67-22.566 29.67-40.954 0-17.97-11.074-33.849-27.79-40.326l-56.415 49.311 11.492 21.94z" fill="#176655"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -0,0 +1 @@
<svg width="2500" height="2500" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid"><rect width="256" height="256" rx="18"/><path d="M230.118 128.531c0 7.047-5.713 12.76-12.761 12.76-7.047 0-12.76-5.713-12.76-12.76 0-7.048 5.713-12.761 12.76-12.761 7.048 0 12.761 5.713 12.761 12.761" fill="#669CFE"/><path d="M203.806 154.531c0 7.047-5.713 12.76-12.761 12.76-7.048 0-12.761-5.713-12.761-12.76 0-7.048 5.713-12.761 12.761-12.761 7.048 0 12.761 5.713 12.761 12.761" fill="#3FE7FE"/><path d="M177.451 181.072c0 7.048-5.713 12.761-12.76 12.761-7.048 0-12.761-5.713-12.761-12.761 0-7.047 5.713-12.76 12.761-12.76 7.047 0 12.76 5.713 12.76 12.76" fill="#FFF"/><path d="M202.993 102.336c0 6.597-5.348 11.944-11.944 11.944-6.597 0-11.945-5.347-11.945-11.944s5.348-11.945 11.945-11.945c6.596 0 11.944 5.348 11.944 11.945" fill="#669CFE"/><path d="M176.738 128.298c0 6.597-5.348 11.945-11.944 11.945-6.597 0-11.945-5.348-11.945-11.945s5.348-11.945 11.945-11.945c6.596 0 11.944 5.348 11.944 11.945" fill="#3FE7FE"/><path d="M150.569 154.642c0 6.597-5.347 11.945-11.944 11.945s-11.945-5.348-11.945-11.945 5.348-11.944 11.945-11.944 11.944 5.347 11.944 11.944" fill="#FFF"/><path d="M175.743 76.235c0 5.991-4.857 10.849-10.849 10.849s-10.849-4.858-10.849-10.849c0-5.992 4.857-10.849 10.849-10.849s10.849 4.857 10.849 10.849" fill="#669CFE"/><path d="M149.522 102.191c0 5.991-4.858 10.849-10.85 10.849-5.991 0-10.849-4.858-10.849-10.849 0-5.992 4.858-10.85 10.849-10.85 5.992 0 10.85 4.858 10.85 10.85" fill="#3FE7FE"/><path d="M123.253 128.618c0 5.992-4.857 10.849-10.849 10.849s-10.849-4.857-10.849-10.849c0-5.991 4.857-10.849 10.849-10.849s10.849 4.858 10.849 10.849" fill="#FFF"/><path d="M148.618 50.008c0 5.386-4.366 9.752-9.752 9.752-5.386 0-9.752-4.366-9.752-9.752 0-5.387 4.366-9.753 9.752-9.753 5.386 0 9.752 4.366 9.752 9.753" fill="#669CFE"/><path d="M122.297 76.089c0 5.386-4.366 9.753-9.752 9.753-5.386 0-9.752-4.367-9.752-9.753s4.366-9.752 9.752-9.752c5.386 0 9.752 4.366 9.752 9.752" fill="#3FE7FE"/><path d="M96.06 102.471c0 5.386-4.367 9.752-9.753 9.752s-9.752-4.366-9.752-9.752c0-5.386 4.366-9.753 9.752-9.753 5.386 0 9.753 4.367 9.753 9.753" fill="#FFF"/><path d="M95.06 154.721a8.67 8.67 0 1 1-17.338-.002 8.67 8.67 0 0 1 17.338.002M121.185 180.846a8.67 8.67 0 1 1-17.338-.002 8.67 8.67 0 0 1 17.338.002M147.268 206.929a8.669 8.669 0 0 1-8.669 8.669 8.669 8.669 0 0 1-8.669-8.669 8.669 8.669 0 0 1 8.669-8.669 8.669 8.669 0 0 1 8.669 8.669M95.185 206.929a8.67 8.67 0 1 1-17.339 0 8.67 8.67 0 0 1 17.339 0M42.601 206.929a8.67 8.67 0 1 1-17.337 0 8.67 8.67 0 0 1 17.337 0M68.726 180.804a8.67 8.67 0 1 1-17.337 0 8.67 8.67 0 0 1 17.337 0" fill="#6A9EFE"/><path d="M95.172 50.032a9.06 9.06 0 0 1-18.118 0 9.06 9.06 0 1 1 18.118 0" fill="#3FE7FE"/><path d="M68.799 76.538a9.06 9.06 0 1 1-18.12 0 9.06 9.06 0 0 1 18.12 0M41.174 49.663a7.31 7.31 0 1 1-14.62 0 7.31 7.31 0 0 1 14.62 0" fill="#FFF"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1 @@
<svg width="2500" height="2148" viewBox="0 0 256 220" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet"><path d="M245.97 168.943c-13.662 7.121-84.434 36.22-99.501 44.075-15.067 7.856-23.437 7.78-35.34 2.09-11.902-5.69-87.216-36.112-100.783-42.597C3.566 169.271 0 166.535 0 163.951v-25.876s98.05-21.345 113.879-27.024c15.828-5.679 21.32-5.884 34.79-.95 13.472 4.936 94.018 19.468 107.331 24.344l-.006 25.51c.002 2.558-3.07 5.364-10.024 8.988" fill="#912626"/><path d="M245.965 143.22c-13.661 7.118-84.431 36.218-99.498 44.072-15.066 7.857-23.436 7.78-35.338 2.09-11.903-5.686-87.214-36.113-100.78-42.594-13.566-6.485-13.85-10.948-.524-16.166 13.326-5.22 88.224-34.605 104.055-40.284 15.828-5.677 21.319-5.884 34.789-.948 13.471 4.934 83.819 32.935 97.13 37.81 13.316 4.881 13.827 8.9.166 16.02" fill="#C6302B"/><path d="M245.97 127.074c-13.662 7.122-84.434 36.22-99.501 44.078-15.067 7.853-23.437 7.777-35.34 2.087-11.903-5.687-87.216-36.112-100.783-42.597C3.566 127.402 0 124.67 0 122.085V96.206s98.05-21.344 113.879-27.023c15.828-5.679 21.32-5.885 34.79-.95C162.142 73.168 242.688 87.697 256 92.574l-.006 25.513c.002 2.557-3.07 5.363-10.024 8.987" fill="#912626"/><path d="M245.965 101.351c-13.661 7.12-84.431 36.218-99.498 44.075-15.066 7.854-23.436 7.777-35.338 2.087-11.903-5.686-87.214-36.112-100.78-42.594-13.566-6.483-13.85-10.947-.524-16.167C23.151 83.535 98.05 54.148 113.88 48.47c15.828-5.678 21.319-5.884 34.789-.949 13.471 4.934 83.819 32.933 97.13 37.81 13.316 4.88 13.827 8.9.166 16.02" fill="#C6302B"/><path d="M245.97 83.653c-13.662 7.12-84.434 36.22-99.501 44.078-15.067 7.854-23.437 7.777-35.34 2.087-11.903-5.687-87.216-36.113-100.783-42.595C3.566 83.98 0 81.247 0 78.665v-25.88s98.05-21.343 113.879-27.021c15.828-5.68 21.32-5.884 34.79-.95C162.142 29.749 242.688 44.278 256 49.155l-.006 25.512c.002 2.555-3.07 5.361-10.024 8.986" fill="#912626"/><path d="M245.965 57.93c-13.661 7.12-84.431 36.22-99.498 44.074-15.066 7.854-23.436 7.777-35.338 2.09C99.227 98.404 23.915 67.98 10.35 61.497-3.217 55.015-3.5 50.55 9.825 45.331 23.151 40.113 98.05 10.73 113.88 5.05c15.828-5.679 21.319-5.883 34.789-.948 13.471 4.935 83.819 32.934 97.13 37.811 13.316 4.876 13.827 8.897.166 16.017" fill="#C6302B"/><path d="M159.283 32.757l-22.01 2.285-4.927 11.856-7.958-13.23-25.415-2.284 18.964-6.839-5.69-10.498 17.755 6.944 16.738-5.48-4.524 10.855 17.067 6.391M131.032 90.275L89.955 73.238l58.86-9.035-17.783 26.072M74.082 39.347c17.375 0 31.46 5.46 31.46 12.194 0 6.736-14.085 12.195-31.46 12.195s-31.46-5.46-31.46-12.195c0-6.734 14.085-12.194 31.46-12.194" fill="#FFF"/><path d="M185.295 35.998l34.836 13.766-34.806 13.753-.03-27.52" fill="#621B1C"/><path d="M146.755 51.243l38.54-15.245.03 27.519-3.779 1.478-34.791-13.752" fill="#9A2928"/></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 42.1 62.45"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#dd00a1;}.cls-3{fill:#f9d8d2;}.cls-4{fill:#10110e;}.cls-5{fill:#e5e5e5;}.cls-6{fill:#8accce;opacity:0.2;isolation:isolate;}.cls-7{fill:#515151;}</style></defs><path class="cls-1" d="M14.24,55.36c.92-.61-1.49-.38-1.69-.79a15,15,0,0,1-2.82-.51C8,53.62,3.9,50.85,3.47,48.25s0-7.65,1.83-10.61A17,17,0,0,1,9.73,33S6.16,24.51,5.85,18.1,6,.21,10.24,0s3.49,10.48,2.82,17.43a89.47,89.47,0,0,0-.21,13.89,19.45,19.45,0,0,1,5.51-.92,21.2,21.2,0,0,1,4.9.46S24.58,21,29,14.86,38,2.4,41,4.19s-.81,8.19-3.46,11.52-7.25,8.33-8.78,11a47.26,47.26,0,0,0-2.65,5.51,15,15,0,0,1,6.4,6.32c2.07,4.28,2.27,9.59,1.15,11.83a8.1,8.1,0,0,1-5.61,4c-1.32.1-6.91,1.48-6.91,1.48Z" transform="translate(0 0)"/><path class="cls-2" d="M24,30.94s3.33-8.7,6.32-13.6,7-8.59,8.26-7.84S36,14.85,32.66,19.32a112.3,112.3,0,0,0-7.44,12.37Z" transform="translate(0 0)"/><path class="cls-2" d="M10.64,32.44l.95-.75s-.13-8.7,0-14S12,5.78,10.23,5.85,7.23,11,7.92,18.23A86.92,86.92,0,0,0,10.64,32.44Z" transform="translate(0 0)"/><circle class="cls-3" cx="7.65" cy="49.17" r="1.94"/><circle class="cls-3" cx="30.57" cy="49.17" r="1.94"/><path class="cls-4" d="M22.33,49a.19.19,0,0,0-.25,0h0s-.57,1-1.41,1.06a2.11,2.11,0,0,1-1.5-.7V48c.54-.29,1.41-1.19,1.41-1.5a1.4,1.4,0,0,0-1.5-1.09c-1,0-1.7.65-1.7,1.19s1.1,1.23,1.41,1.44v1.45a1.77,1.77,0,0,1-1.3.7c-.8,0-1.4-1.08-1.4-1.09a.19.19,0,0,0-.25-.08h0a.18.18,0,0,0-.08.23h0c0,.06.71,1.29,1.73,1.29a2.07,2.07,0,0,0,1.5-.72,2.46,2.46,0,0,0,1.59.73h.14a2.47,2.47,0,0,0,1.71-1.25.18.18,0,0,0,0-.25A.24.24,0,0,0,22.33,49Z" transform="translate(0 0)"/><path class="cls-5" d="M9.73,33S7,26,6.42,22.29s-1-9.78-.3-13.85A46.3,46.3,0,0,1,7.31,2.85S6,12.34,6.49,16.49,9.73,33,9.73,33Z" transform="translate(0 0)"/><path class="cls-5" d="M23.26,30.85s2-10.59,4.91-14.76S34.73,6.9,36.52,5.62l1.82-1.28S31,12,28.17,18.34,23.26,30.85,23.26,30.85Z" transform="translate(0 0)"/><path class="cls-4" d="M11.6,42.85a1.52,1.52,0,1,0,1.52,1.52h0a1.52,1.52,0,0,0-1.5-1.52Zm.4,1.41a.42.42,0,1,1,.42-.42h0a.42.42,0,0,1-.41.43h0Z" transform="translate(0 0)"/><path class="cls-4" d="M26.55,42.85a1.52,1.52,0,1,0,1.51,1.53h0a1.52,1.52,0,0,0-1.51-1.53ZM27,44.26a.42.42,0,0,1-.43-.41h0a.43.43,0,0,1,.41-.43.42.42,0,0,1,.43.41h0a.41.41,0,0,1-.4.42h0Z" transform="translate(0 0)"/><ellipse class="cls-6" cx="19.36" cy="44.95" rx="14.1" ry="10.16"/><path class="cls-1" d="M36.43,39.3V32.58a2.46,2.46,0,0,0,1.91-2.29,2.65,2.65,0,0,0-5.27,0A2.48,2.48,0,0,0,35,32.58v6.55h-.2c-2-6.94-7.91-11.28-15.63-11.28S5.51,32.15,3.55,39.13H2.88A2.76,2.76,0,0,0,0,41.71v5.14a2.75,2.75,0,0,0,2.88,2.59h.91a13,13,0,0,0,3.59,5.11L6.09,55.72A.78.78,0,0,0,6,56.82l0,0H6c2.93,3.53,7.72,5.6,13.13,5.6s10.21-2,13.14-5.6a.79.79,0,0,0-.09-1.11h0l-1.3-1.19a13,13,0,0,0,3.59-5.08h1a2.74,2.74,0,0,0,2.87-2.6V41.71A2.58,2.58,0,0,0,36.43,39.3Zm-17.26-4c7.14,0,12.94,4.7,12.94,10.47,0,6.25-6.51,9-12.94,9S6.23,52,6.23,45.72C6.23,40,12,35.25,19.17,35.25Z" transform="translate(0 0)"/><path class="cls-7" d="M36.91,45.16H35v-1a18.61,18.61,0,0,0-.39-3.79h.82a1.35,1.35,0,0,1,1.44,1.25h0Z" transform="translate(0 0)"/><path class="cls-7" d="M35.47,48.18h-1A16.13,16.13,0,0,0,34.89,46h2v.85a1.34,1.34,0,0,1-1.36,1.32h-.06Z" transform="translate(0 0)"/><path class="cls-7" d="M19.17,61.1c-4.79,0-9.06-1.72-11.74-4.78l1.3-1.21a17.87,17.87,0,0,0,10.4,3,17.73,17.73,0,0,0,10.4-3l1.35,1.21C28.23,59.38,24,61.1,19.17,61.1Z" transform="translate(0 0)"/><path class="cls-7" d="M2.88,40.42h.85a19.33,19.33,0,0,0-.38,3.79,8.34,8.34,0,0,0,0,1H1.49v-3.5a1.27,1.27,0,0,1,1.24-1.29Z" transform="translate(0 0)"/><path d="M19.17,34.39a17.66,17.66,0,0,0-4.79.69V29.85a17.23,17.23,0,0,1,4.79-.64,17.3,17.3,0,0,1,4.8.64v5.26A15.91,15.91,0,0,0,19.17,34.39Z" transform="translate(0 0)"/><path class="cls-7" d="M1.44,46h2a17.56,17.56,0,0,0,.43,2.16h-1a1.35,1.35,0,0,1-1.44-1.25h0V46Z" transform="translate(0 0)"/><ellipse class="cls-7" cx="35.71" cy="30.29" rx="1.2" ry="1.08"/></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

459
public/szxqlogo.svg Normal file
View File

@ -0,0 +1,459 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 41.4 42.2" style="enable-background:new 0 0 41.4 42.2;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{fill:#84D0E9;}
.st2{fill:#2BB1DC;}
.st3{fill:#1481BC;}
</style>
<g id="图层_1" class="st0">
<image style="display:inline;overflow:visible;" width="466" height="156" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdIAAACcCAIAAABEJ73JAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA
GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAX7JJREFUeNrsnemzFMeZ7iuruvts
bAIECIEAsUsChBBabHns8BKzfZhv9++8Eb4xdoxjxrY82tCGVjYBAoGEJMRy4GzdXZX3V/V0ZWcv
Z+8DHJSv8VF3dVVWZlblk0+++S7GWhsFCRIkSJAHJXHogiBBggQJsBskSJAgAXaDBAkSJEiA3SBB
ggQJsBskSJAgQQLsBgkSJEiA3SBBggQJsBskSJAgQQLsBgkSJEiA3SBBggQJEmA3SJAgQQLsBgkS
JEiQALtBggQJEmA3SJAgQQLsBgkSJEiQALtBggQJEmA3SJAgQYIE2A0SJEiQALtBggQJEiTAbpAg
QYIE2A0SJEiQALtBggQJEiTAbpAgQYIE2A0SJEiQIAF2gwQJEuRRk8rPq7mWfzb/YExk2seK/+T/
1VFb/GQWX3Z+VfGfVgnW/WStaZVvFl1wkAf7juhNMOYhXruccmaryfLLfNR6O8DuagHdEk1zEDSz
nGMGfMe8QFdmwNwgQX7uYjTb/DxITAmCbcJpPLpbnGMix3mXBrItMp2XwEfHoE0ng7arAoKXz79W
L5eZreaz9clgueqgevjB9//SWPbPjfP+/HS7xvaw0W41RL/ji6K3/W4biG6QIEF+ZmxXU6qNWjrW
2ENK43hvyU+XgpPljN2GdiP+G5lutF+1+oZHn/POxrZaXb6q+NTSGPTC+ebD5cKLvftC2rVaWPPP
SrebPw3bQUhtaqN6Ziea2a16NtlMs+LBefqARTw/D7LdPUxsosSYNUm8aSgZq5jERGFLLUiQwHbt
z6zJTq+aKxOmU3u7nl6833j/p+lvJhv1LMvyw3HUn6DOV64tWXMO3lxvqrEZS5K9a6qvbxnds6Yy
FEcVE/QNjxBbf9R0owtvRS9/XyyXfBRaFywZfi4zjf9hOs1uTKcXxuunb09fulevW9uG3RJEo4XN
TO1tsnJrzcJzK8nW4eq6ajxT4Ll3bkDeIEF+plL5mba7hZFmIrVfTzRhuz9ON+83sqzAWmOzwgDB
Rr51wgILtYVlbqHPsMZW4mjLcGXbaHVdJR7KNcqmfd4jjLzL0Zo9avzFr89iueGj1oq5Ge5sbelt
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" transform="matrix(0.5 0 0 0.5 -31.6256 48.9837)">
</image>
</g>
<g id="图标">
</g>
<g id="图层_3">
<g>
<path class="st1" d="M22.6,6.2c0,0-5,6-2.3,13.4c1.2,3,5,8,5.3,11.9c0.7,7.6-3.2,10.7-3.2,10.7h15.9c0,0,4.4-5.2,3-10.6
c-0.9-5-3.4-7.7-4.9-10.5c-0.8-1.6-3.3-3.7,1.3-15C31.5,5.3,22.6,6.2,22.6,6.2z"/>
<path class="st2" d="M12.7,0.3c0,0-5,6-2.3,13.4c1.2,3,5,8,5.3,11.9c0.7,7.6-3.2,10.7-3.2,10.7h15.9c0,0,4.4-5.2,3-10.6
c-0.9-5-3.4-7.7-4.9-10.5c-0.8-1.6-3.3-3.7,1.3-15C21.6-0.6,12.7,0.3,12.7,0.3z"/>
<path class="st3" d="M3.3,5.8c0,0-5,6-2.3,13.4c1.2,3,5,8,5.3,11.9C6.9,38.8,3,41.9,3,41.9h15.9c0,0,4.4-5.2,3-10.6
c-0.9-5-3.4-7.7-4.9-10.5c-0.8-1.6-3.3-3.7,1.3-15C12.2,4.9,3.3,5.8,3.3,5.8z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 34 KiB

772
public/xlogo.svg Normal file
View File

@ -0,0 +1,772 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 384.3 107.2" style="enable-background:new 0 0 384.3 107.2;" xml:space="preserve">
<g>
<image style="overflow:visible;" width="1208" height="336" id="qurJ8U_1_" xlink:href="data:image/png;base64,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
H/2fAAMAf69+LpPrqNsAAAAASUVORK5CYII=" transform="matrix(0.3181 0 0 0.3181 -0.1011 0)">
</image>
</g>
</svg>

After

Width:  |  Height:  |  Size: 58 KiB

860
public/樽海鞘_图案.svg Normal file
View File

@ -0,0 +1,860 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 188.16 104.88" style="enable-background:new 0 0 188.16 104.88;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_00000011005318758800827250000011057430084231322519_);}
</style>
<g>
<defs>
<rect id="SVGID_1_" width="188.16" height="104.88"/>
</defs>
<clipPath id="SVGID_00000052804745015154638170000012213085671327136956_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g style="clip-path:url(#SVGID_00000052804745015154638170000012213085671327136956_);">
<g>
<defs>
<rect id="SVGID_00000168819797670722599790000013148437931894726560_" width="188.16" height="104.88"/>
</defs>
<clipPath id="SVGID_00000094585513345185356800000001731322396342632333_">
<use xlink:href="#SVGID_00000168819797670722599790000013148437931894726560_" style="overflow:visible;"/>
</clipPath>
<g style="clip-path:url(#SVGID_00000094585513345185356800000001731322396342632333_);">
<image style="overflow:visible;" width="784" height="437" xlink:href="data:image/png;base64,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
AABJRU5ErkJggg==" transform="matrix(0.24 0 0 0.24 0 0)">
</image>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 64 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

77
src/access.ts Normal file
View File

@ -0,0 +1,77 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2022/02/15
*
* */
import type { MenuDataItem } from "@umijs/route-utils";
import { getMatchMenuItem } from "./services/session";
import { checkRole, matchPermission } from "./utils/permission";
/**
* @see https://umijs.org/zh-CN/plugins/plugin-access
* */
export default function access (initialState: { currentUser: API.CurrentUser | undefined, menus: MenuDataItem[] | undefined }) {
const { currentUser, menus } = initialState || {};
return {
canAdmin: currentUser && currentUser.access === 'admin',
hasPerms: (perm: string) => {
return matchPermission(currentUser?.permissions, perm);
},
hasNoPerms: (perm: string) => {
return !matchPermission(currentUser?.permissions, perm);
},
roleFiler: (route: {authority: string[]}) => {
return checkRole(currentUser?.roles, route.authority);
},
authorize: (route: any) => {
if(menus) {
const items = getMatchMenuItem(route.path, menus);
if(!items || items.length === 0){
return false;
} else {
return true;
}
}
return true;
}, // initialState 中包含了的路由才有权限访问
};
}
export function setSessionToken (
access_token: string | undefined,
refresh_token: string | undefined,
expireTime: number,
): void {
if (access_token) {
localStorage.setItem('access_token', access_token);
} else {
localStorage.removeItem('access_token');
}
if (refresh_token) {
localStorage.setItem('refresh_token', refresh_token);
} else {
localStorage.removeItem('refresh_token');
}
localStorage.setItem('expireTime', `${expireTime}`);
}
export function getAccessToken () {
return localStorage.getItem('access_token');
}
export function getRefreshToken () {
return localStorage.getItem('refresh_token');
}
export function getTokenExpireTime () {
return localStorage.getItem('expireTime');
}
export function clearSessionToken () {
sessionStorage.removeItem('user');
localStorage.removeItem('access_token');
localStorage.removeItem('refresh_token');
localStorage.removeItem('expireTime');
}

124
src/app.tsx Normal file
View File

@ -0,0 +1,124 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2022/02/15
*
* */
import RightContent from '@/components/RightContent'
import type { Settings as LayoutSettings } from '@ant-design/pro-layout'
import { PageLoading } from '@ant-design/pro-layout'
import type { RunTimeLayoutConfig } from 'umi'
import { history, Link } from 'umi'
// import Footer from '@/components/Footer';
import { BookOutlined, LinkOutlined } from '@ant-design/icons'
import defaultSettings from '../config/defaultSettings'
import iconStyle from '../public/樽海鞘_图案.svg'
import { getRoutersInfo, getUserInfo } from './services/session'
const isDev = process.env.NODE_ENV === 'development'
const loginPath = '/user/login'
/** 获取用户信息比较慢的时候会展示一个 loading */
export const initialStateConfig = {
loading: <PageLoading />
}
/**
* @see https://umijs.org/zh-CN/plugins/plugin-initial-state
* */
export async function getInitialState(): Promise<{
settings?: Partial<LayoutSettings>
currentUser?: API.CurrentUser
loading?: boolean
fetchUserInfo?: () => Promise<API.CurrentUser | undefined>
}> {
const fetchUserInfo = async () => {
try {
console.log(1111111111111111111111111111111)
const resp = await getUserInfo()
if (resp === undefined || resp.code !== 200) {
history.push(loginPath)
} else {
return { ...resp.user, permissions: resp.permissions } as API.CurrentUser
}
} catch (error) {
history.push(loginPath)
}
return undefined
}
// 如果是登录页面,不执行
if (history.location.pathname !== loginPath) {
console.log(222222222222222222222222222222)
const currentUser = await fetchUserInfo()
return {
settings: defaultSettings,
currentUser,
fetchUserInfo
}
}
return {
fetchUserInfo,
settings: defaultSettings
}
}
// ProLayout 支持的api https://procomponents.ant.design/components/layout
export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
return {
rightContentRender: () => <RightContent />,
waterMarkProps: {
content: initialState?.currentUser?.userName
},
// footerRender: () => <Footer />,
onPageChange: () => {
const { location } = history
// 如果没有登录,重定向到 login
if (!initialState?.currentUser && location.pathname !== loginPath) {
history.push(loginPath)
}
},
links: isDev
? [
<Link key="openapi" to="/umi/plugin/openapi" target="_blank">
<LinkOutlined />
<span>OpenAPI </span>
</Link>,
<Link key="docs" to="/~docs">
<BookOutlined />
<span></span>
</Link>
]
: [],
menuHeaderRender: undefined,
menu: {
// 每当 initialState?.currentUser?.userid 发生修改时重新执行 request
params: {
userId: initialState?.currentUser?.userId
},
request: async () => {
if (!initialState?.currentUser?.userId) {
return []
}
// initialState.currentUser 中包含了所有用户信息
const menus = await getRoutersInfo()
setInitialState((preInitialState: any) => ({
...preInitialState,
menus
}))
return menus
}
},
// 自定义 403 页面
// unAccessible: <div>unAccessible</div>,
// 增加一个 loading 的状态
childrenRender: (children, props) => {
return (
<div>
{children}
{!props.location?.pathname?.includes('/login')}
</div>
)
},
...initialState?.settings,
logo: <img src={iconStyle} />
}
}

View File

@ -0,0 +1,39 @@
import { useIntl } from 'umi';
import { GithubOutlined } from '@ant-design/icons';
import { DefaultFooter } from '@ant-design/pro-layout';
export default () => {
const intl = useIntl();
const defaultMessage = intl.formatMessage({
id: 'app.copyright.produced',
defaultMessage: '蚂蚁集团体验技术部出品',
});
const currentYear = new Date().getFullYear();
return (
<DefaultFooter
copyright={`${currentYear} ${defaultMessage}`}
links={[
{
key: 'Ant Design Pro',
title: 'Ant Design Pro',
href: 'https://pro.ant.design',
blankTarget: true,
},
{
key: 'github',
title: <GithubOutlined />,
href: 'https://github.com/ant-design/ant-design-pro',
blankTarget: true,
},
{
key: 'Ant Design',
title: 'Ant Design',
href: 'https://ant.design',
blankTarget: true,
},
]}
/>
);
};

View File

@ -0,0 +1,17 @@
@import '~antd/es/style/themes/default.less';
.container > * {
background-color: @popover-bg;
border-radius: 4px;
box-shadow: @shadow-1-down;
z-index: 99999;
}
@media screen and (max-width: @screen-xs) {
.container {
width: 100% !important;
}
.container > * {
border-radius: 0 !important;
}
}

View File

@ -0,0 +1,17 @@
import type { DropDownProps } from 'antd/es/dropdown';
import { Dropdown } from 'antd';
import React from 'react';
import classNames from 'classnames';
import styles from './index.less';
export type HeaderDropdownProps = {
overlayClassName?: string;
overlay: React.ReactNode | (() => React.ReactNode) | any;
placement?: 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight' | 'bottomCenter';
} & Omit<DropDownProps, 'overlay'>;
const HeaderDropdown: React.FC<HeaderDropdownProps> = ({ overlayClassName: cls, ...restProps }) => (
<Dropdown overlayClassName={classNames(styles.container, cls)} {...restProps} />
);
export default HeaderDropdown;

View File

@ -0,0 +1,26 @@
@import '~antd/es/style/themes/default.less';
.headerSearch {
display: inline-flex;
align-items: center;
z-index: 999;
.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 {
box-shadow: none !important;
}
&.show {
width: 210px;
margin-left: 8px;
}
}
}

View File

@ -0,0 +1,101 @@
import { SearchOutlined } from '@ant-design/icons';
import { AutoComplete, Input } from 'antd';
import useMergedState from 'rc-util/es/hooks/useMergedState';
import type { AutoCompleteProps } from 'antd/es/auto-complete';
import React, { useRef } from 'react';
import classNames from 'classnames';
import styles from './index.less';
export type HeaderSearchProps = {
onSearch?: (value?: string) => void;
onChange?: (value?: string) => void;
onVisibleChange?: (b: boolean) => void;
className?: string;
placeholder?: string;
options: AutoCompleteProps['options'];
defaultVisible?: boolean;
visible?: boolean;
defaultValue?: string;
value?: string;
};
const HeaderSearch: React.FC<HeaderSearchProps> = (props) => {
const {
className,
defaultValue,
onVisibleChange,
placeholder,
visible,
defaultVisible,
...restProps
} = props;
const inputRef = useRef<Input | null>(null);
const [value, setValue] = useMergedState<string | undefined>(defaultValue, {
value: props.value,
onChange: props.onChange,
});
const [searchMode, setSearchMode] = useMergedState(defaultVisible ?? false, {
value: props.visible,
onChange: onVisibleChange,
});
const inputClass = classNames(styles.input, {
[styles.show]: searchMode,
});
return (
<div
className={classNames(className, styles.headerSearch)}
onClick={() => {
setSearchMode(true);
if (searchMode && inputRef.current) {
inputRef.current.focus();
}
}}
onTransitionEnd={({ propertyName }) => {
if (propertyName === 'width' && !searchMode) {
if (onVisibleChange) {
onVisibleChange(searchMode);
}
}
}}
>
<SearchOutlined
key="Icon"
style={{
cursor: 'pointer',
}}
/>
<AutoComplete
key="AutoComplete"
className={inputClass}
value={value}
options={restProps.options}
onChange={setValue}
>
<Input
size="small"
ref={inputRef}
defaultValue={defaultValue}
aria-label={placeholder}
placeholder={placeholder}
onKeyDown={(e) => {
if (e.key === 'Enter') {
if (restProps.onSearch) {
restProps.onSearch(value);
}
}
}}
onBlur={() => {
setSearchMode(false);
}}
/>
</AutoComplete>
</div>
);
};
export default HeaderSearch;

View File

@ -0,0 +1,78 @@
import * as React from 'react';
import { message } from 'antd';
import { injectIntl } from 'react-intl';
import CopyableIcon from './CopyableIcon';
import type { ThemeType } from './index';
import type { CategoriesKeys } from './fields';
import styles from './style.less';
interface CategoryProps {
title: CategoriesKeys;
icons: string[];
theme: ThemeType;
newIcons: string[];
intl: any;
onSelect: (name: string) => any;
}
interface CategoryState {
justCopied: string | null;
}
class Category extends React.Component<CategoryProps, CategoryState> {
copyId?: number;
state = {
justCopied: null,
};
componentWillUnmount() {
window.clearTimeout(this.copyId);
}
onSelect = (name: string) => {
const { onSelect } = this.props;
if (onSelect) {
onSelect(name);
}
message.success(
<span>
<code className="copied-code">{name}</code> selected 🎉
</span>,
);
this.setState({ justCopied: name }, () => {
this.copyId = window.setTimeout(() => {
this.setState({ justCopied: null });
}, 2000);
});
};
render() {
const {
icons,
title,
newIcons,
theme,
intl: { messages },
} = this.props;
const items = icons.map((name) => (
<CopyableIcon
key={name}
name={name}
theme={theme}
isNew={newIcons.indexOf(name) >= 0}
justCopied={this.state.justCopied}
onSelect={this.onSelect}
/>
));
return (
<div>
<h3>{messages[`app.docs.components.icon.category.${title}`]}</h3>
<ul className={styles.anticonsList}>{items}</ul>
</div>
);
}
}
export default injectIntl(Category);

View File

@ -0,0 +1,46 @@
import * as React from 'react';
import { Badge } from 'antd';
import classNames from 'classnames';
import * as AntdIcons from '@ant-design/icons';
import type { ThemeType } from './index';
import styles from './style.less';
const allIcons: Record<string, any> = AntdIcons;
export interface CopyableIconProps {
name: string;
isNew: boolean;
theme: ThemeType;
justCopied: string | null;
onSelect: (name: string) => any;
}
const CopyableIcon: React.FC<CopyableIconProps> = ({
name,
isNew,
justCopied,
theme,
onSelect,
}) => {
const className = classNames({
copied: justCopied === name,
[theme]: !!theme,
});
return (
<li
className={className}
onClick={() => {
if (onSelect) {
onSelect(name);
}
}}
>
{ React.createElement(allIcons[name], { className: styles.anticon }) }
<span className={styles.anticonTitle}>
<Badge dot={isNew}>{name}</Badge>
</span>
</li>
);
};
export default CopyableIcon;

View File

@ -0,0 +1,248 @@
import React, { Component } from 'react';
import { Upload, Tooltip, Popover, Modal, Progress, message, Spin, Result } from 'antd';
import { injectIntl } from 'react-intl';
import * as AntdIcons from '@ant-design/icons';
const allIcons: {
[key: string]: any;
} = AntdIcons;
const { Dragger } = Upload;
interface AntdIconClassifier {
load: Function;
predict: Function;
}
declare global {
interface Window {
antdIconClassifier: AntdIconClassifier;
}
}
interface PicSearcherProps {
intl: any;
}
interface PicSearcherState {
loading: boolean;
modalVisible: boolean;
popoverVisible: boolean;
icons: string[];
fileList: any[];
error: boolean;
modelLoaded: boolean;
}
interface iconObject {
type: string;
score: number;
}
class PicSearcher extends Component<PicSearcherProps, PicSearcherState> {
state = {
loading: false,
modalVisible: false,
popoverVisible: false,
icons: [],
fileList: [],
error: false,
modelLoaded: false,
};
componentDidMount() {
this.loadModel();
this.setState({ popoverVisible: !localStorage.getItem('disableIconTip') });
}
componentWillUnmount() {
document.removeEventListener('paste', this.onPaste);
}
loadModel = () => {
const script = document.createElement('script');
script.onload = async () => {
await window.antdIconClassifier.load();
this.setState({ modelLoaded: true });
document.addEventListener('paste', this.onPaste);
};
script.src = 'https://cdn.jsdelivr.net/gh/lewis617/antd-icon-classifier@0.0/dist/main.js';
document.head.appendChild(script);
};
onPaste = (event: ClipboardEvent) => {
const items = event.clipboardData && event.clipboardData.items;
let file = null;
if (items && items.length) {
for (let i = 0; i < items.length; i += 1) {
if (items[i].type.indexOf('image') !== -1) {
file = items[i].getAsFile();
break;
}
}
}
if (file) this.uploadFile(file);
};
uploadFile = (file: File) => {
this.setState(() => ({ loading: true }));
const reader: FileReader = new FileReader();
reader.onload = () => {
this.toImage(reader.result).then(this.predict);
this.setState(() => ({
fileList: [{ uid: 1, name: file.name, status: 'done', url: reader.result }],
}));
};
reader.readAsDataURL(file);
};
toImage = (url: any) =>
new Promise((resolve) => {
const img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
img.src = url;
img.onload = function onload() {
resolve(img);
};
});
predict = (imgEl: any) => {
try {
let icons = window.antdIconClassifier.predict(imgEl);
// if (gtag && icons.length >= 1) {
// gtag('event', 'icon', {
// event_category: 'search-by-image',
// event_label: icons[0].className,
// });
// }
icons = icons.map((i: any) => ({ score: i.score, type: i.className.replace(/\s/g, '-') }));
this.setState(() => ({ icons, loading: false, error: false }));
} catch (err) {
this.setState(() => ({ loading: false, error: true }));
}
};
toggleModal = () => {
this.setState((prev) => ({
modalVisible: !prev.modalVisible,
popoverVisible: false,
fileList: [],
icons: [],
}));
if (!localStorage.getItem('disableIconTip')) {
localStorage.setItem('disableIconTip', 'true');
}
};
onCopied = (text: string) => {
message.success(
<span>
<code className="copied-code">{text}</code> copied 🎉
</span>,
);
};
render() {
const {
intl: { messages },
} = this.props;
const { modalVisible, popoverVisible, icons, fileList, loading, modelLoaded, error } =
this.state;
return (
<div className="icon-pic-searcher">
<Popover
content={messages[`app.docs.components.icon.pic-searcher.intro`]}
visible={popoverVisible}
>
<AntdIcons.CameraOutlined className="icon-pic-btn" onClick={this.toggleModal} />
</Popover>
<Modal
title={messages[`app.docs.components.icon.pic-searcher.title`]}
visible={modalVisible}
onCancel={this.toggleModal}
footer={null}
>
{modelLoaded || (
<Spin
spinning={!modelLoaded}
tip={messages['app.docs.components.icon.pic-searcher.modelloading']}
>
<div style={{ height: 100 }} />
</Spin>
)}
{modelLoaded && (
<Dragger
accept="image/jpeg, image/png"
listType="picture"
customRequest={(o: any) => this.uploadFile(o.file)}
fileList={fileList}
showUploadList={{ showPreviewIcon: false, showRemoveIcon: false }}
>
<p className="ant-upload-drag-icon">
<AntdIcons.InboxOutlined />
</p>
<p className="ant-upload-text">
{messages['app.docs.components.icon.pic-searcher.upload-text']}
</p>
<p className="ant-upload-hint">
{messages['app.docs.components.icon.pic-searcher.upload-hint']}
</p>
</Dragger>
)}
<Spin spinning={loading} tip={messages['app.docs.components.icon.pic-searcher.matching']}>
<div className="icon-pic-search-result">
{icons.length > 0 && (
<div className="result-tip">
{messages['app.docs.components.icon.pic-searcher.result-tip']}
</div>
)}
<table>
{icons.length > 0 && (
<thead>
<tr>
<th className="col-icon">
{messages['app.docs.components.icon.pic-searcher.th-icon']}
</th>
<th>{messages['app.docs.components.icon.pic-searcher.th-score']}</th>
</tr>
</thead>
)}
<tbody>
{icons.map((icon: iconObject) => {
const { type } = icon;
const iconName = `${type
.split('-')
.map((str) => `${str[0].toUpperCase()}${str.slice(1)}`)
.join('')}Outlined`;
return (
<tr key={iconName}>
<td className="col-icon">
{/* <CopyToClipboard text={`<${iconName} />`} onCopy={this.onCopied}> */}
<Tooltip title={icon.type} placement="right">
{React.createElement(allIcons[iconName])}
</Tooltip>
{/* </CopyToClipboard> */}
</td>
<td>
<Progress percent={Math.ceil(icon.score * 100)} />
</td>
</tr>
);
})}
</tbody>
</table>
{error && (
<Result
status="500"
title="503"
subTitle={messages['app.docs.components.icon.pic-searcher.server-error']}
/>
)}
</div>
</Spin>
</Modal>
</div>
);
}
}
export default injectIntl(PicSearcher);

View File

@ -0,0 +1,221 @@
import * as AntdIcons from '@ant-design/icons/lib/icons';
const all = Object.keys(AntdIcons)
.map((n) => n.replace(/(Outlined|Filled|TwoTone)$/, ''))
.filter((n, i, arr) => arr.indexOf(n) === i);
const direction = [
'StepBackward',
'StepForward',
'FastBackward',
'FastForward',
'Shrink',
'ArrowsAlt',
'Down',
'Up',
'Left',
'Right',
'CaretUp',
'CaretDown',
'CaretLeft',
'CaretRight',
'UpCircle',
'DownCircle',
'LeftCircle',
'RightCircle',
'DoubleRight',
'DoubleLeft',
'VerticalLeft',
'VerticalRight',
'VerticalAlignTop',
'VerticalAlignMiddle',
'VerticalAlignBottom',
'Forward',
'Backward',
'Rollback',
'Enter',
'Retweet',
'Swap',
'SwapLeft',
'SwapRight',
'ArrowUp',
'ArrowDown',
'ArrowLeft',
'ArrowRight',
'PlayCircle',
'UpSquare',
'DownSquare',
'LeftSquare',
'RightSquare',
'Login',
'Logout',
'MenuFold',
'MenuUnfold',
'BorderBottom',
'BorderHorizontal',
'BorderInner',
'BorderOuter',
'BorderLeft',
'BorderRight',
'BorderTop',
'BorderVerticle',
'PicCenter',
'PicLeft',
'PicRight',
'RadiusBottomleft',
'RadiusBottomright',
'RadiusUpleft',
'RadiusUpright',
'Fullscreen',
'FullscreenExit',
];
const suggestion = [
'Question',
'QuestionCircle',
'Plus',
'PlusCircle',
'Pause',
'PauseCircle',
'Minus',
'MinusCircle',
'PlusSquare',
'MinusSquare',
'Info',
'InfoCircle',
'Exclamation',
'ExclamationCircle',
'Close',
'CloseCircle',
'CloseSquare',
'Check',
'CheckCircle',
'CheckSquare',
'ClockCircle',
'Warning',
'IssuesClose',
'Stop',
];
const editor = [
'Edit',
'Form',
'Copy',
'Scissor',
'Delete',
'Snippets',
'Diff',
'Highlight',
'AlignCenter',
'AlignLeft',
'AlignRight',
'BgColors',
'Bold',
'Italic',
'Underline',
'Strikethrough',
'Redo',
'Undo',
'ZoomIn',
'ZoomOut',
'FontColors',
'FontSize',
'LineHeight',
'Dash',
'SmallDash',
'SortAscending',
'SortDescending',
'Drag',
'OrderedList',
'UnorderedList',
'RadiusSetting',
'ColumnWidth',
'ColumnHeight',
];
const data = [
'AreaChart',
'PieChart',
'BarChart',
'DotChart',
'LineChart',
'RadarChart',
'HeatMap',
'Fall',
'Rise',
'Stock',
'BoxPlot',
'Fund',
'Sliders',
];
const logo = [
'Android',
'Apple',
'Windows',
'Ie',
'Chrome',
'Github',
'Aliwangwang',
'Dingding',
'WeiboSquare',
'WeiboCircle',
'TaobaoCircle',
'Html5',
'Weibo',
'Twitter',
'Wechat',
'Youtube',
'AlipayCircle',
'Taobao',
'Skype',
'Qq',
'MediumWorkmark',
'Gitlab',
'Medium',
'Linkedin',
'GooglePlus',
'Dropbox',
'Facebook',
'Codepen',
'CodeSandbox',
'CodeSandboxCircle',
'Amazon',
'Google',
'CodepenCircle',
'Alipay',
'AntDesign',
'AntCloud',
'Aliyun',
'Zhihu',
'Slack',
'SlackSquare',
'Behance',
'BehanceSquare',
'Dribbble',
'DribbbleSquare',
'Instagram',
'Yuque',
'Alibaba',
'Yahoo',
'Reddit',
'Sketch',
];
const datum = [...direction, ...suggestion, ...editor, ...data, ...logo];
const other = all.filter((n) => !datum.includes(n));
export const categories = {
direction,
suggestion,
editor,
data,
logo,
other,
};
export default categories;
export type Categories = typeof categories;
export type CategoriesKeys = keyof Categories;

View File

@ -0,0 +1,162 @@
import * as React from 'react';
import Icon, * as AntdIcons from '@ant-design/icons';
import { Radio, Input, Empty, Tabs, Row, Col } from 'antd';
import type { RadioChangeEvent } from 'antd/es/radio/interface';
import { injectIntl } from 'react-intl';
import debounce from 'lodash/debounce';
import Category from './Category';
import type { Categories, CategoriesKeys } from './fields';
import { categories } from './fields';
import { FilledIcon, OutlinedIcon, TwoToneIcon } from './themeIcons';
import { Fragment } from 'react';
const { TabPane } = Tabs;
export enum ThemeType {
Filled = 'Filled',
Outlined = 'Outlined',
TwoTone = 'TwoTone',
}
const allIcons: Record<string, any> = AntdIcons;
interface IconSelectorProps {
intl: any;
onSelect: any;
}
interface IconSelectorState {
theme: ThemeType;
searchKey: string;
}
class IconSelector extends React.PureComponent<IconSelectorProps, IconSelectorState> {
static categories: Categories = categories;
static newIconNames: string[] = [];
state: IconSelectorState = {
theme: ThemeType.Outlined,
searchKey: '',
};
constructor(props: IconSelectorProps) {
super(props);
this.handleSearchIcon = debounce(this.handleSearchIcon, 300);
}
handleChangeTheme = (e: RadioChangeEvent) => {
this.setState({
theme: e.target.value as ThemeType,
});
};
handleSearchIcon = (searchKey: string) => {
this.setState((prevState) => ({
...prevState,
searchKey,
}));
};
getTitle(cate: string) {
const titles = {
direction: '方向性图标',
suggestion: '提示建议性图标',
editor: '编辑类图标',
data: '数据类图标',
logo: '品牌和标识',
other: '网站通用图标',
};
return titles[cate];
}
renderTabs() {
const { searchKey = '', theme } = this.state;
const { onSelect } = this.props;
const categoriesResult = Object.keys(categories)
.map((key: any) => {
let iconList = categories[key];
if (searchKey) {
const matchKey = searchKey
.replace(new RegExp(`^<([a-zA-Z]*)\\s/>$`, 'gi'), (_, name) => name)
.replace(/(Filled|Outlined|TwoTone)$/, '')
.toLowerCase();
iconList = iconList.filter((iconName: string) =>
iconName.toLowerCase().includes(matchKey),
);
}
// CopyrightCircle is same as Copyright, don't show it
iconList = iconList.filter((icon: string) => icon !== 'CopyrightCircle');
return {
category: key,
icons: iconList
.map((iconName: ThemeType) => iconName + theme)
.filter((iconName: string | number) => allIcons[iconName]),
};
})
.filter(({ icons }) => !!icons.length)
.map(({ category, icons }) => (
<TabPane tab={this.getTitle(category)} key={category}>
<Category
key={category}
title={category as CategoriesKeys}
theme={theme}
icons={icons}
newIcons={IconSelector.newIconNames}
onSelect={(name) => {
if (onSelect) {
onSelect(name, allIcons[name]);
}
}}
/>
</TabPane>
));
return categoriesResult.length === 0 ? <Empty style={{ margin: '2em 0' }} /> : categoriesResult;
}
render() {
const {
intl: { messages },
} = this.props;
return (
<Fragment>
<Row gutter={[16, 16]}>
<Col span={4}>
<Radio.Group
value={this.state.theme}
onChange={this.handleChangeTheme}
size="large"
buttonStyle="solid"
>
<Radio.Button value={ThemeType.Outlined}>
<Icon component={OutlinedIcon} /> {messages['app.docs.components.icon.outlined']}
</Radio.Button>
<Radio.Button value={ThemeType.Filled}>
<Icon component={FilledIcon} /> {messages['app.docs.components.icon.filled']}
</Radio.Button>
<Radio.Button value={ThemeType.TwoTone}>
<Icon component={TwoToneIcon} /> {messages['app.docs.components.icon.two-tone']}
</Radio.Button>
</Radio.Group>
</Col>
<Col span={18}>
<Input.Search
style={{ margin: '0 10px', flex: 1 }}
allowClear
onChange={(e) => this.handleSearchIcon(e.currentTarget.value)}
size="large"
autoFocus
// suffix={<IconPicSearcher />}
/>
</Col>
</Row>
<Row>
<Tabs defaultActiveKey="1">{this.renderTabs()}</Tabs>
</Row>
</Fragment>
);
}
}
export default injectIntl(IconSelector);

View File

@ -0,0 +1,81 @@
.anticonsList {
margin: 6px 0;
overflow: hidden;
direction: ltr;
list-style: none;
li {
position: relative;
float: left;
width: 16.66%;
height: 60px;
margin: 30px 0;
padding: 4px 0 0;
overflow: hidden;
color: #555;
text-align: center;
list-style: none;
background-color: inherit;
border-radius: 3px;
cursor: pointer;
transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
.rtl & {
margin: 2px 0;
padding: 3px 0 0;
}
.anticon {
margin: 2px 0 3px;
font-size: 26px;
transition: transform 0.3s ease-in-out;
will-change: transform;
}
.anticonTitle {
display: block;
font-family: 'Lucida Console', Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
white-space: nowrap;
text-align: center;
transform: scale(0.83);
.ant-badge {
transition: color 0.3s ease-in-out;
}
}
&:hover {
color: #fff;
background-color: @primary-color;
.anticon {
transform: scale(1.4);
}
.ant-badge {
color: #fff;
}
}
&.TwoTone:hover {
background-color: #8ecafe;
}
&.copied:hover {
color: rgba(255, 255, 255, 0.2);
}
&::after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
color: #fff;
line-height: 110px;
text-align: center;
opacity: 0;
transition: all 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);
content: 'Copied!';
}
&.copied::after {
top: -10px;
opacity: 1;
}
}
}

View File

@ -0,0 +1,46 @@
import * as React from 'react';
export const FilledIcon: React.FC<JSX.IntrinsicAttributes & React.SVGProps<SVGSVGElement>> = (
props,
) => {
const path =
'M864 64H160C107 64 64 107 64 160v' +
'704c0 53 43 96 96 96h704c53 0 96-43 96-96V16' +
'0c0-53-43-96-96-96z';
return (
<svg {...(props as any)} viewBox="0 0 1024 1024">
<path d={path} />
</svg>
);
};
export const OutlinedIcon: React.FC<JSX.IntrinsicAttributes & React.SVGProps<SVGSVGElement>> = (
props,
) => {
const path =
'M864 64H160C107 64 64 107 64 160v7' +
'04c0 53 43 96 96 96h704c53 0 96-43 96-96V160c' +
'0-53-43-96-96-96z m-12 800H172c-6.6 0-12-5.4-' +
'12-12V172c0-6.6 5.4-12 12-12h680c6.6 0 12 5.4' +
' 12 12v680c0 6.6-5.4 12-12 12z';
return (
<svg {...(props as any)} viewBox="0 0 1024 1024">
<path d={path} />
</svg>
);
};
export const TwoToneIcon: React.FC<JSX.IntrinsicAttributes & React.SVGProps<SVGSVGElement>> = (
props,
) => {
const path =
'M16 512c0 273.932 222.066 496 496 49' +
'6s496-222.068 496-496S785.932 16 512 16 16 238.' +
'066 16 512z m496 368V144c203.41 0 368 164.622 3' +
'68 368 0 203.41-164.622 368-368 368z';
return (
<svg {...(props as any)} viewBox="0 0 1024 1024">
<path d={path} />
</svg>
);
};

View File

@ -0,0 +1,58 @@
/*
* @Author: wangYe
* @Date: 2020-12-18 13:25:08
* @Last Modified by: WhiteShader
* @Last Modified time: 2022-02-21 11:12:12
*/
import React, { useEffect } from 'react';
import { KeepAlive, useIntl, useModel } from 'umi';
export default function KeepAlivePage(props: any) {
const intl = useIntl()
const { dispatch, tabList, showTabs, tarnslateX, tabsWidth, tabWidth } = useModel("system")
useEffect(() => {
// 去重
const localTablist = JSON.parse(JSON.stringify(tabList));
const isExit = localTablist.findIndex((item: any) => item.pathname === props.location.pathname);
// 需要计算translateX
if (isExit < 0) {
const obj = { ...props.location, title: intl.formatMessage({ id: props.route.title }), keepAliveName: props.route.name }
localTablist.push(obj);
let x = 0;
if (localTablist.length >= showTabs) {
const isBeyondDistance = ((showTabs as number) * (tabWidth as number)) - (tabsWidth as number) + 100;
x = isBeyondDistance + (localTablist.length - showTabs) * tabWidth
}
dispatch({ type: 'CHANGESTATE', payload: { tabList: localTablist, active: localTablist.length - 1, tarnslateX: x } });
} else {
const isBeyondDistance = ((showTabs as number) * (tabWidth as number)) - (tabsWidth as number) + 100;
const curClickIndex = tabList.findIndex(item => item.pathname === props.location.pathname) as number;
// 能展示多少个
const totalShowIndex = (showTabs as number) - 1;
if (curClickIndex > totalShowIndex) {
// 计算移动的距离
const x = (curClickIndex - totalShowIndex) * (tabWidth as number) + isBeyondDistance
dispatch({ type: 'CHANGESTATE', payload: { tarnslateX: x, active: isExit } })
} else {
// 计算隐藏了多少个
const transNum = Math.ceil(tarnslateX / tabWidth);
if (isExit < transNum) {
dispatch({ type: 'CHANGESTATE', payload: { tarnslateX: tabWidth * curClickIndex, active: isExit } })
} else {
dispatch({ type: 'CHANGESTATE', payload: { active: isExit } })
}
}
}
}, [])
if (props.route.keppAlive) {
return (
<KeepAlive saveScrollPosition={props.route.saveScrollPosition ?? "screen"} name={props.route.name}>
{props.children}
</KeepAlive>
)
}
return props.children
}

View File

@ -0,0 +1,91 @@
@import '~antd/es/style/themes/default.less';
.tabItem {
z-index: 20;
padding: 0 20px;
white-space: nowrap;
text-overflow: ellipsis;
background-color: #fff;
border-style:solid;
border-width:1px;
border-color: @border-color-base;
border-radius: @border-radius-base;
// border-top-left-radius: @border-radius-base;
// border-top-right-radius: @border-radius-base;
overflow: hidden;
height: 30px;
line-height: 30px;
text-align: center;
margin-left: 5px;
margin-top: 2px;
width: 120px;
position: relative;
cursor: pointer;
font-size: @font-size-sm;
color: @text-color ;
&:hover {
// background: @layout-body-background;
color: @primary-color-hover;
font-weight: bolder;
&::before {
display: none;
}
// display: block;
&+.tabItem {
&::before {
display: none;
}
}
}
// &:before {
// content: '';
// display: block;
// position: absolute;
// top: 5px;
// bottom: 5px;
// left: 0;
// width: 1px;
// border-left: 1px solid #d9d9d9;
// z-index: 10;
// }
.closeIcon {
// display: none;
position: absolute;
right: 5px;
top: 5px;
width: 15px;
height: 15px;
border-radius: 50%;
color: rgba(0, 0, 0, 0.45);
transform: scale(0.8);
transition: 300ms;
display: flex;
justify-content: center;
align-items: center;
&:hover {
background: #ccc; //@close-icon-hover;
}
}
}
.active {
color: @primary-color;
font-weight: bolder;
&::before {
display: none;
}
&+.tabItem {
&::before {
display: none;
}
}
}

View File

@ -0,0 +1,115 @@
/*
* @Author: wangYe
* @Date: 2020-11-05 18:00:19
* @Last Modified by: WhiteShader
* @Last Modified time: 2022-02-21 11:12:12
*/
import { SortableElement } from 'react-sortable-hoc';
import { CloseOutlined } from '@ant-design/icons';
import { useModel, useHistory, useAliveController } from 'umi'
import styles from './index.less';
interface ITab {
value: {
hash: string
key: string
title: string
pathname: string
query: Record<string, any>
search: string
state: any
keepAliveName: string
}
// index: number
tabIndex: number
}
const SortableTab = (props: ITab) => {
const history = useHistory()
const { value, tabIndex } = props;
const { active, dispatch, tabWidth, tarnslateX, showTabs, tabsWidth, tabList } = useModel("system");
const { dropScope } = useAliveController()
const closable = tabList.length > 1
return (
<div
className={`${styles.tabItem} link-tab ${tabIndex === active ? styles.active : ''}`}
title={value.title}
onClick={() => {
// translate了 多少个
const tarnsNumber = Math.floor(tarnslateX / tabWidth)
// 隐藏了多少
const isBeyondDistance = tarnslateX - tarnsNumber * tabWidth;
if (tabIndex - tarnsNumber <= 0) {
dispatch({ type: 'CHANGESTATE', payload: { active: tabIndex, tarnslateX: tarnslateX - isBeyondDistance } })
history.push({ ...value })
return;
}
// 是否在可视区域内
if ((tabIndex - tarnsNumber + 1) === showTabs) {
// 需要移动的距离计算
const x = (tabIndex + 1) * (tabWidth as number) - (tabsWidth - 100)
dispatch({ type: 'CHANGESTATE', payload: { active: tabIndex, tarnslateX: x } })
history.push({ ...value })
return;
}
dispatch({ type: 'CHANGESTATE', payload: { active: tabIndex } })
history.push({ ...value })
}}>
{value.title}
{
closable && (
<div
className={styles.closeIcon}
onClick={(e) => {
e.stopPropagation()
const currentName = value.keepAliveName
// 如果关闭激活中的 KeepAlive Tab需要先离开当前路由
// 触发 KeepAlive unactivated 后再进行 drop
const localTablist = JSON.parse(JSON.stringify(tabList))
localTablist.splice(tabIndex, 1)
let activeIndex: number = 0;
if (tabIndex < active) {
// 我在前面
activeIndex = active - 1;
dropScope(currentName)
} else if (tabIndex === active) {
// 点击后面当前窗口
if (active > 0) {
activeIndex = active - 1
const timer = setTimeout(() => {
clearTimeout(timer)
history.push(tabList[activeIndex])
}, 10)
} else {
activeIndex = 0
const timer = setTimeout(() => {
clearTimeout(timer)
history.push(localTablist[activeIndex])
}, 10)
}
const unlisten = history.listen(() => {
unlisten()
const dropTimer = setTimeout(() => {
clearTimeout(dropTimer)
dropScope(currentName)
}, 10)
})
} else {
activeIndex = active
dropScope(currentName)
}
dispatch({ type: "CHANGESTATE", payload: { tabList: localTablist, active: activeIndex, tarnslateX: 0 } })
}}>
<CloseOutlined />
</div>
)
}
</div>
);
}
export default SortableElement(SortableTab);

View File

@ -0,0 +1,66 @@
@import '~antd/es/style/themes/default.less';
.tabs {
position: fixed;
top: @layout-trigger-height;
width: 100%;
z-index: 999;
background: #fff;
height: 38px;
// margin-left: -24px;
// width: calc(100% - 256px);
// width: 100%;
// margin-top: 5px;
display: flex;
justify-content: space-between;
border-bottom:solid;
border-width:1px;
border-color: @border-color-base;
.tabList {
display: flex;
margin-top: 2px;
flex: 1;
overflow: hidden;
.linkTabs {
display: flex;
flex: 1;
// transform: translate(-50px, 0);
transition: all 0.5s;
}
}
.tabLeftMenu {
margin-top: 5px;
padding: 0 20px 0 5px;
display: flex;
align-items: center;
height: 30px;
z-index: 12;
width: 100px;
.tabMore {
color: @primary-color;
font-weight: bold;
}
}
.boxShadow {
box-shadow: -7px 0 7px -7px #5E5E5E; //@tab-left-menu;
}
&:first-child {
&::before {
display: none;
}
}
:global {
.ant-dropdown-link {
line-height: 30px;
}
}
}

View File

@ -0,0 +1,242 @@
/*
* @Author: wangYe
* @Date: 2020-11-05 17:09:40
* @Last Modified by: WhiteShader
* @Last Modified time: 2022-02-21 11:12:12
*/
import { useEffect, useRef } from 'react';
import { SortableContainer } from 'react-sortable-hoc';
import { Dropdown, Menu, Divider } from 'antd';
import { DownOutlined, MoreOutlined } from '@ant-design/icons';
import { useModel, history, useAliveController } from 'umi'
import SortableTab from './components/SortableTab'
import styles from './index.less';
const SortableList = SortableContainer(() => {
const tabsRef = useRef<any>()
const { tabList, tarnslateX } = useModel("system");
return (
<div className={`${styles.tabList}`} ref={tabsRef} >
{/* <div className={styles.linkTabs} style={{ transform: `translateX(-${tarnslateX}px)` }}> */}
<div className={styles.linkTabs} style={{ transform: `translateX(-${tarnslateX}px)` }}>
{
tabList.map((value, index: number) => (
<SortableTab key={`item-${index}`} index={index} value={value} tabIndex={index} />
))
}
</div>
</div >
);
});
const KeepAliveTabs = () => {
const { initialState } = useModel<any>("@@initialState");
const { collapsed } = initialState;
const { tabList, dispatch, active, showTabs, tabsWidth, tabWidth, tarnslateX } = useModel("system");
const { dropScope, clear } = useAliveController();
const onSortEnd = ({ oldIndex, newIndex }: { oldIndex: number, newIndex: number }) => {
const dataSource = JSON.parse(JSON.stringify(tabList))
const activeItem = dataSource[active as number]
dataSource.splice(newIndex, 0, dataSource.splice(oldIndex, 1)[0]);
const movedActiveIndex = dataSource.findIndex((item: string) => item === activeItem)
dispatch({ type: "CHANGESTATE", payload: { tabList: dataSource, active: movedActiveIndex } })
}
// 当前的索引值active showTabs一排能展示多少个
// 计算应该在菜单展示的菜单有哪些
const arr: any[] = []
if (tabList.length > showTabs) {
// 前面隐藏的元素
const beforeTab = Math.floor(tarnslateX / tabWidth);
// 后面隐藏的元素
const afterTab = Math.floor(tarnslateX / tabWidth) + showTabs
tabList.forEach((item, index) => {
if (index < beforeTab) {
arr.push(item)
}
if (index >= afterTab) {
arr.push(item)
}
})
}
const menuMore = (
<Menu onClick={(e) => {
// 判断点击多余tab的展示移动距离是多少
// 计算超出了多少
// tabsWidth tabWidth showTabs 100是右边操作的距离目前写死
const isBeyondDistance = ((showTabs as number) * (tabWidth as number)) - (tabsWidth as number) + 100;
// TODO 找到当前点击的索引值
const curClickIndex = tabList?.findIndex(item => item.pathname === e.key) as number;
// 能展示多少个
const totalShowIndex = (showTabs as number) - 1;
if (curClickIndex > totalShowIndex) {
// 计算移动的距离
const x = (curClickIndex - totalShowIndex) * (tabWidth as number) + isBeyondDistance
dispatch({ type: 'CHANGESTATE', payload: { tarnslateX: x, active: curClickIndex } })
} else {
dispatch({ type: 'CHANGESTATE', payload: { tarnslateX: tabWidth * curClickIndex, active: curClickIndex } })
}
history.push({ ...tabList[curClickIndex] })
}}>
{
arr.map(item => {
return <Menu.Item key={item.pathname}> {item.title}</Menu.Item>
})
}
</Menu>
);
const menu = (
<Menu onClick={(e) => {
let activeIndex: number = 0;
const localTablist = JSON.parse(JSON.stringify(tabList))
switch (e.key) {
case "closeCurrent": {
const currentName = localTablist[active].keepAliveName
if (active > 0) {
activeIndex = active - 1
const timer = setTimeout(() => {
clearTimeout(timer)
history.push(tabList[activeIndex])
}, 10)
} else {
activeIndex = 0
const timer = setTimeout(() => {
clearTimeout(timer)
history.push(localTablist[activeIndex])
}, 10)
}
const unlisten = history.listen(() => {
unlisten()
const dropTimer = setTimeout(() => {
clearTimeout(dropTimer)
dropScope(currentName)
}, 10)
})
localTablist.splice(active, 1)
dispatch({ type: "CHANGESTATE", payload: { tabList: localTablist, active: activeIndex, tarnslateX: 0 } })
break;
}
case "closeOther": {
const needDelete = localTablist.filter((item: any, index: number) => index !== active);
const needUpdate = localTablist.filter((item: any, index: number) => index === active);
needDelete.forEach((item: any) => dropScope(item.keepAliveName));
dispatch({ type: "CHANGESTATE", payload: { tabList: needUpdate, active: 0, tarnslateX: 0 } })
break;
}
case "closeAll": {
const unlisten = history.listen(() => {
unlisten()
const dropTimer = setTimeout(() => {
clearTimeout(dropTimer)
clear()
}, 10)
})
const timer = setTimeout(() => {
clearTimeout(timer)
history.push("/")
}, 10)
dispatch({ type: "CHANGESTATE", payload: { tabList: [], active: 0, tarnslateX: 0 } })
break;
}
case "closeLeft": {
const needDelete = localTablist.filter((item: any, index: number) => index < active);
const needUpdate = localTablist.filter((item: any, index: number) => index >= active);
needDelete.forEach((item: any) => dropScope(item.keepAliveName));
dispatch({ type: "CHANGESTATE", payload: { tabList: needUpdate, active: 0, tarnslateX: 0 } })
break;
}
case "closeRight": {
const needDelete = localTablist.filter((item: any, index: number) => index > active);
const needUpdate = localTablist.filter((item: any, index: number) => index <= active);
needDelete.forEach((item: any) => dropScope(item.keepAliveName));
dispatch({ type: "CHANGESTATE", payload: { tabList: needUpdate, tarnslateX: 0 } })
break;
}
}
}}>
<Menu.Item key="closeCurrent"></Menu.Item>
<Menu.Item key="closeOther"></Menu.Item>
<Menu.Item key="closeAll"></Menu.Item>
<Menu.Item key="closeLeft" disabled={active === 0}></Menu.Item>
<Menu.Item key="closeRight" disabled={active === tabList.length - 1}></Menu.Item>
</Menu>
);
useEffect(() => {
window.onresize = () => {
const width = document.getElementById("contentContainer") ? document.getElementById("contentContainer")!.getBoundingClientRect()!.width : 0;
dispatch({ type: "CHANGESTATE", payload: { tabsWidth: width, tarnslateX: 0 } })
}
const timer = setTimeout(() => {
const width = document.getElementById("contentContainer") ? document.getElementById("contentContainer")!.getBoundingClientRect()!.width : 0;
dispatch({ type: "CHANGESTATE", payload: { tabsWidth: width } })
}, 100);
return () => {
clearTimeout(timer)
}
}, [collapsed])
useEffect(() => {
const timer = setTimeout(() => {
// 需要重新计算拿到当前tab的宽度
const itemWidth = document.getElementsByClassName("link-tab")[0] ? document.getElementsByClassName("link-tab")[0]!.getBoundingClientRect().width : 120;
//计算一排能展示多少个tab 需要减去操作占用的空间100
const isShowTabs = Math.ceil((tabsWidth as number - 100) / itemWidth);
if (itemWidth > 0 && tabWidth > 0) {
dispatch({ type: "CHANGESTATE", payload: { showTabs: isShowTabs, tabWidth: itemWidth } })
}
}, 100);
return () => {
clearTimeout(timer)
}
}, [tabsWidth])
return (
// <div className={styles.tabs} style={{ width: initialState?.collapsed ? "calc(100vw - 41px)" : "calc(100vw - 249px)" }}>
<div className={styles.tabs} id="contentContainer">
{tabList.length > 0 && <SortableList onSortEnd={onSortEnd} axis={'x'} distance={1} />}
<div className={`${styles.tabLeftMenu} ${tabList.length >= showTabs && styles.boxShadow}`}>
{
tabList.length > showTabs && (
<>
<Dropdown overlay={menuMore} className={styles.tabMore}>
<a className="ant-dropdown-link" onClick={e => e.preventDefault()}>
<MoreOutlined />
</a>
</Dropdown>
<Divider type='vertical' />
</>
)
}
{
tabList.length > 1 && (
<Dropdown overlay={menu} className={styles.menuRight}>
<a className="ant-dropdown-link" onClick={e => e.preventDefault()}>
<DownOutlined />
</a>
</Dropdown>
)
}
</div>
</div>
);
}
export default KeepAliveTabs;

View File

@ -0,0 +1,126 @@
import { BellOutlined } from '@ant-design/icons';
import { Badge, Spin, Tabs } from 'antd';
import useMergedState from 'rc-util/es/hooks/useMergedState';
import React from 'react';
import classNames from 'classnames';
import type { NoticeIconTabProps } from './NoticeList';
import NoticeList from './NoticeList';
import HeaderDropdown from '../HeaderDropdown';
import styles from './index.less';
const { TabPane } = Tabs;
export type NoticeIconProps = {
count?: number;
bell?: React.ReactNode;
className?: string;
loading?: boolean;
onClear?: (tabName: string, tabKey: string) => void;
onItemClick?: (item: API.NoticeIconItem, tabProps: NoticeIconTabProps) => void;
onViewMore?: (tabProps: NoticeIconTabProps, e: MouseEvent) => void;
onTabChange?: (tabTile: string) => void;
style?: React.CSSProperties;
onPopupVisibleChange?: (visible: boolean) => void;
popupVisible?: boolean;
clearText?: string;
viewMoreText?: string;
clearClose?: boolean;
emptyImage?: string;
children?: React.ReactElement<NoticeIconTabProps>[];
};
const NoticeIcon: React.FC<NoticeIconProps> & {
Tab: typeof NoticeList;
} = (props) => {
const getNotificationBox = (): React.ReactNode => {
const {
children,
loading,
onClear,
onTabChange,
onItemClick,
onViewMore,
clearText,
viewMoreText,
} = props;
if (!children) {
return null;
}
const panes: React.ReactNode[] = [];
React.Children.forEach(children, (child: React.ReactElement<NoticeIconTabProps>): void => {
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: string = msgCount > 0 ? `${title} (${msgCount})` : title;
panes.push(
<TabPane tab={tabTitle} key={tabKey}>
<NoticeList
clearText={clearText}
viewMoreText={viewMoreText}
list={list}
tabKey={tabKey}
onClear={(): void => onClear && onClear(title, tabKey)}
onClick={(item): void => onItemClick && onItemClick(item, child.props)}
onViewMore={(event): void => onViewMore && onViewMore(child.props, event)}
showClear={showClear}
showViewMore={showViewMore}
title={title}
/>
</TabPane>,
);
});
return (
<>
<Spin spinning={loading} delay={300}>
<Tabs className={styles.tabs} onChange={onTabChange}>
{panes}
</Tabs>
</Spin>
</>
);
};
const { className, count, bell } = props;
const [visible, setVisible] = useMergedState<boolean>(false, {
value: props.popupVisible,
onChange: props.onPopupVisibleChange,
});
const noticeButtonClass = classNames(className, styles.noticeButton);
const notificationBox = getNotificationBox();
const NoticeBellIcon = bell || <BellOutlined className={styles.icon} />;
const trigger = (
<span className={classNames(noticeButtonClass, { opened: visible })}>
<Badge count={count} style={{ boxShadow: 'none' }} className={styles.badge}>
{NoticeBellIcon}
</Badge>
</span>
);
if (!notificationBox) {
return trigger;
}
return (
<HeaderDropdown
placement="bottomRight"
overlay={notificationBox}
overlayClassName={styles.popover}
trigger={['click']}
visible={visible}
onVisibleChange={setVisible}
>
{trigger}
</HeaderDropdown>
);
};
NoticeIcon.defaultProps = {
emptyImage: 'https://gw.alipayobjects.com/zos/rmsportal/wAhyIChODzsoKIOBHcBk.svg',
};
NoticeIcon.Tab = NoticeList;
export default NoticeIcon;

View File

@ -0,0 +1,103 @@
@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;
}
}
}

View File

@ -0,0 +1,113 @@
import { Avatar, List } from 'antd';
import React from 'react';
import classNames from 'classnames';
import styles from './NoticeList.less';
export type NoticeIconTabProps = {
count?: number;
showClear?: boolean;
showViewMore?: boolean;
style?: React.CSSProperties;
title: string;
tabKey: API.NoticeIconItemType;
onClick?: (item: API.NoticeIconItem) => void;
onClear?: () => void;
emptyText?: string;
clearText?: string;
viewMoreText?: string;
list: API.NoticeIconItem[];
onViewMore?: (e: any) => void;
};
const NoticeList: React.FC<NoticeIconTabProps> = ({
list = [],
onClick,
onClear,
title,
onViewMore,
emptyText,
showClear = true,
clearText,
viewMoreText,
showViewMore = false,
}) => {
if (!list || list.length === 0) {
return (
<div className={styles.notFound}>
<img
src="https://gw.alipayobjects.com/zos/rmsportal/sAuJeJzSKbUmHfBQRzmZ.svg"
alt="not found"
/>
<div>{emptyText}</div>
</div>
);
}
return (
<div>
<List<API.NoticeIconItem>
className={styles.list}
dataSource={list}
renderItem={(item, i) => {
const itemCls = classNames(styles.item, {
[styles.read]: item.read,
});
// eslint-disable-next-line no-nested-ternary
const leftIcon = item.avatar ? (
typeof item.avatar === 'string' ? (
<Avatar className={styles.avatar} src={item.avatar} />
) : (
<span className={styles.iconElement}>{item.avatar}</span>
)
) : null;
return (
<List.Item
className={itemCls}
key={item.key || i}
onClick={() => {
onClick?.(item);
}}
>
<List.Item.Meta
className={styles.meta}
avatar={leftIcon}
title={
<div className={styles.title}>
{item.title}
<div className={styles.extra}>{item.extra}</div>
</div>
}
description={
<div>
<div className={styles.description}>{item.description}</div>
<div className={styles.datetime}>{item.datetime}</div>
</div>
}
/>
</List.Item>
);
}}
/>
<div className={styles.bottomBar}>
{showClear ? (
<div onClick={onClear}>
{clearText} {title}
</div>
) : null}
{showViewMore ? (
<div
onClick={(e) => {
if (onViewMore) {
onViewMore(e);
}
}}
>
{viewMoreText}
</div>
) : null}
</div>
</div>
);
};
export default NoticeList;

View File

@ -0,0 +1,35 @@
@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;
}
}
}

View File

@ -0,0 +1,153 @@
import { useEffect, useState } from 'react';
import { Tag, message } from 'antd';
import { groupBy } from 'lodash';
import moment from 'moment';
import { useModel, useRequest } from 'umi';
import NoticeIcon from './NoticeIcon';
import styles from './index.less';
import { getNotices } from '@/services/api';
export type GlobalHeaderRightProps = {
fetchingNotices?: boolean;
onNoticeVisibleChange?: (visible: boolean) => void;
onNoticeClear?: (tabName?: string) => void;
};
const getNoticeData = (notices: API.NoticeIconItem[]): Record<string, API.NoticeIconItem[]> => {
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 as string).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 = (
<Tag
color={color}
style={{
marginRight: 0,
}}
>
{newNotice.extra}
</Tag>
) as any;
}
return newNotice;
});
return groupBy(newNotices, 'type');
};
const getUnreadData = (noticeData: Record<string, API.NoticeIconItem[]>) => {
const unreadMsg: Record<string, number> = {};
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;
};
const NoticeIconView = () => {
const { initialState } = useModel('@@initialState');
const { currentUser } = initialState || {};
const [notices, setNotices] = useState<API.NoticeIconItem[]>([]);
const { data } = useRequest(getNotices);
useEffect(() => {
setNotices(data || []);
}, [data]);
const noticeData = getNoticeData(notices);
const unreadMsg = getUnreadData(noticeData || {});
const changeReadState = (id: string) => {
setNotices(
notices.map((item) => {
const notice = { ...item };
if (notice.id === id) {
notice.read = true;
}
return notice;
}),
);
};
const clearReadState = (title: string, key: string) => {
setNotices(
notices.map((item) => {
const notice = { ...item };
if (notice.type === key) {
notice.read = true;
}
return notice;
}),
);
message.success(`${'清空了'} ${title}`);
};
return (
<NoticeIcon
className={styles.action}
count={currentUser && currentUser.unreadCount}
onItemClick={(item) => {
changeReadState(item.id!);
}}
onClear={(title: string, key: string) => clearReadState(title, key)}
loading={false}
clearText="清空"
viewMoreText="查看更多"
onViewMore={() => message.info('Click on view more')}
clearClose
>
<NoticeIcon.Tab
tabKey="notification"
count={unreadMsg.notification}
list={noticeData.notification}
title="通知"
emptyText="你已查看所有通知"
showViewMore
/>
<NoticeIcon.Tab
tabKey="message"
count={unreadMsg.message}
list={noticeData.message}
title="消息"
emptyText="您已读完所有消息"
showViewMore
/>
<NoticeIcon.Tab
tabKey="event"
title="待办"
emptyText="你已完成所有待办"
count={unreadMsg.event}
list={noticeData.event}
showViewMore
/>
</NoticeIcon>
);
};
export default NoticeIconView;

View File

@ -0,0 +1,111 @@
import React, { useCallback } from 'react';
import { HomeOutlined, LogoutOutlined, SettingOutlined, UserOutlined } from '@ant-design/icons';
import { Avatar, Menu, Spin } from 'antd';
import { history, useModel } from 'umi';
import { stringify } from 'querystring';
import HeaderDropdown from '../HeaderDropdown';
import styles from './index.less';
import type { MenuInfo } from 'rc-menu/lib/interface';
import { logout } from '@/services/session';
export type GlobalHeaderRightProps = {
menu?: boolean;
};
/**
* 退 url
*/
const loginOut = async () => {
await logout();
const { query = {}, pathname } = history.location;
const { redirect } = query;
// Note: There may be security issues, please note
if (window.location.pathname !== '/user/login' && !redirect) {
history.replace({
pathname: '/user/login',
search: stringify({
redirect: pathname,
}),
});
}
};
const AvatarDropdown: React.FC<GlobalHeaderRightProps> = ({ menu }) => {
const { initialState, setInitialState } = useModel('@@initialState');
const { dispatch } = useModel('system');
const onMenuClick = useCallback(
(event: MenuInfo) => {
const { key } = event;
if (key === 'logout') {
setInitialState((s) => ({ ...s, currentUser: undefined, menus: undefined }));
dispatch({ type: 'CHANGESTATE', payload: { tabList: [] } });
loginOut();
return;
}
history.push(`${key}`);
},
[setInitialState],
);
const loading = (
<span className={`${styles.action} ${styles.account}`}>
<Spin
size="small"
style={{
marginLeft: 8,
marginRight: 8,
}}
/>
</span>
);
if (!initialState) {
return loading;
}
const { currentUser } = initialState;
if (!currentUser || !currentUser.userName) {
return loading;
}
const menuHeaderDropdown = (
<Menu className={styles.menu} selectedKeys={[]} onClick={onMenuClick}>
{menu && (
<Menu.Item key="/account/center">
<UserOutlined />
</Menu.Item>
)}
{menu && (
<Menu.Item key="/account/settings">
<SettingOutlined />
</Menu.Item>
)}
{menu && (
<Menu.Item key="/dashboard/workplace">
<HomeOutlined />
</Menu.Item>
)}
{menu && <Menu.Divider />}
<Menu.Item key="logout">
<LogoutOutlined />
退
</Menu.Item>
</Menu>
);
return (
<HeaderDropdown overlay={menuHeaderDropdown}>
<span className={`${styles.action} ${styles.account}`}>
<Avatar size="small" className={styles.avatar} src={currentUser.avatar} alt="avatar" />
<span className={`${styles.name} anticon`}>{currentUser.userName}</span>
</span>
</HeaderDropdown>
);
};
export default AvatarDropdown;

View File

@ -0,0 +1,87 @@
@import '~antd/es/style/themes/default.less';
@pro-header-hover-bg: rgba(0, 0, 0, 0.025);
.menu {
z-index: 9999;
:global(.anticon) {
margin-right: 8px;
}
:global(.ant-dropdown-menu-item) {
min-width: 160px;
}
}
.right {
z-index: 9999;
display: flex;
float: right;
height: 48px;
margin-left: auto;
overflow: hidden;
.action {
display: flex;
align-items: center;
height: 48px;
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-right: 8px;
color: @primary-color;
vertical-align: top;
background: rgba(255, 255, 255, 0.85);
}
}
}
.dark {
z-index: 9999;
.action {
&:hover {
background: #252a3d;
}
&:global(.opened) {
background: #252a3d;
}
}
}
@media only screen and (max-width: @screen-md) {
:global(.ant-divider-vertical) {
vertical-align: unset;
}
.name {
display: none;
}
.right {
position: absolute;
top: 0;
right: 12px;
.account {
.avatar {
margin-right: 0;
}
}
.search {
display: none;
}
}
}

View File

@ -0,0 +1,68 @@
import { Space } from 'antd';
import { QuestionCircleOutlined } from '@ant-design/icons';
import React from 'react';
import { useModel, SelectLang } from 'umi';
import Avatar from './AvatarDropdown';
import HeaderSearch from '../HeaderSearch';
import styles from './index.less';
import NoticeIconView from '../NoticeIcon';
export type SiderTheme = 'light' | 'dark';
const GlobalHeaderRight: React.FC = () => {
const { initialState } = useModel('@@initialState');
if (!initialState || !initialState.settings) {
return null;
}
const { navTheme, layout } = initialState.settings;
let className = styles.right;
if ((navTheme === 'dark' && layout === 'top') || layout === 'mix') {
className = `${styles.right} ${styles.dark}`;
}
return (
<Space className={className}>
<HeaderSearch
className={`${styles.action} ${styles.search}`}
placeholder="站内搜索"
defaultValue="umi ui"
options={[
{
label: <a href="https://umijs.org/zh/guide/umi-ui.html">umi ui</a>,
value: 'umi ui',
},
{
label: <a href="next.ant.design">Ant Design</a>,
value: 'Ant Design',
},
{
label: <a href="https://protable.ant.design/">Pro Table</a>,
value: 'Pro Table',
},
{
label: <a href="https://prolayout.ant.design/">Pro Layout</a>,
value: 'Pro Layout',
},
]} // onSearch={value => {
// console.log('input', value);
// }}
/>
<span
className={styles.action}
onClick={() => {
window.open('https://pro.ant.design/docs/getting-started');
}}
>
<QuestionCircleOutlined />
</span>
<NoticeIconView />
<Avatar menu />
<SelectLang className={styles.action} />
</Space>
);
};
export default GlobalHeaderRight;

View File

@ -0,0 +1,6 @@
@import '~antd/es/style/themes/default.less';
.wraper {
margin: 62px 24px 24px 24px;
}

View File

@ -0,0 +1,9 @@
import styles from './index.less';
const WrapContent: React.FC = (props) => {
return (
<div className={styles.wraper} >{props.children}</div>
)
};
export default WrapContent;

272
src/components/index.md Normal file
View File

@ -0,0 +1,272 @@
---
title: 业务组件
sidemenu: false
---
> 此功能由[dumi](https://d.umijs.org/zh-CN/guide/advanced#umi-%E9%A1%B9%E7%9B%AE%E9%9B%86%E6%88%90%E6%A8%A1%E5%BC%8F)提供dumi 是一个 📖 为组件开发场景而生的文档工具,用过的都说好。
# 业务组件
这里列举了 Pro 中所有用到的组件,这些组件不适合作为组件库,但是在业务中却真实需要。所以我们准备了这个文档,来指导大家是否需要使用这个组件。
## Footer 页脚组件
这个组件自带了一些 Pro 的配置,你一般都需要改掉它的信息。
```tsx
/**
* background: '#f0f2f5'
*/
import React from 'react';
import Footer from '@/components/Footer';
export default () => <Footer />;
```
## HeaderDropdown 头部下拉列表
HeaderDropdown 是 antd Dropdown 的封装,但是增加了移动端的特殊处理,用法也是相同的。
```tsx
/**
* background: '#f0f2f5'
*/
import { Button, Menu } from 'antd';
import React from 'react';
import HeaderDropdown from '@/components/HeaderDropdown';
export default () => {
const menuHeaderDropdown = (
<Menu selectedKeys={[]}>
<Menu.Item key="center">个人中心</Menu.Item>
<Menu.Item key="settings">个人设置</Menu.Item>
<Menu.Divider />
<Menu.Item key="logout">退出登录</Menu.Item>
</Menu>
);
return (
<HeaderDropdown overlay={menuHeaderDropdown}>
<Button>hover 展示菜单</Button>
</HeaderDropdown>
);
};
```
## HeaderSearch 头部搜索框
一个带补全数据的输入框,支持收起和展开 Input
```tsx
/**
* background: '#f0f2f5'
*/
import { Button, Menu } from 'antd';
import React from 'react';
import HeaderSearch from '@/components/HeaderSearch';
export default () => {
return (
<HeaderSearch
placeholder="站内搜索"
defaultValue="umi ui"
options={[
{ label: 'Ant Design Pro', value: 'Ant Design Pro' },
{
label: 'Ant Design',
value: 'Ant Design',
},
{
label: 'Pro Table',
value: 'Pro Table',
},
{
label: 'Pro Layout',
value: 'Pro Layout',
},
]}
onSearch={(value) => {
console.log('input', value);
}}
/>
);
};
```
### API
| 参数 | 说明 | 类型 | 默认值 |
| --------------- | ---------------------------------- | ---------------------------- | ------ |
| value | 输入框的值 | `string` | - |
| onChange | 值修改后触发 | `(value?: string) => void` | - |
| onSearch | 查询后触发 | `(value?: string) => void` | - |
| options | 选项菜单的的列表 | `{label,value}[]` | - |
| defaultVisible | 输入框默认是否显示,只有第一次生效 | `boolean` | - |
| visible | 输入框是否显示 | `boolean` | - |
| onVisibleChange | 输入框显示隐藏的回调函数 | `(visible: boolean) => void` | - |
## NoticeIcon 通知工具
通知工具提供一个展示多种通知信息的界面。
```tsx
/**
* background: '#f0f2f5'
*/
import { message } from 'antd';
import React from 'react';
import NoticeIcon from '@/components/NoticeIcon/NoticeIcon';
export default () => {
const list = [
{
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',
},
];
return (
<NoticeIcon
count={10}
onItemClick={(item) => {
message.info(`${item.title} 被点击了`);
}}
onClear={(title: string, key: string) => message.info('点击了清空更多')}
loading={false}
clearText="清空"
viewMoreText="查看更多"
onViewMore={() => message.info('点击了查看更多')}
clearClose
>
<NoticeIcon.Tab
tabKey="notification"
count={2}
list={list}
title="通知"
emptyText="你已查看所有通知"
showViewMore
/>
<NoticeIcon.Tab
tabKey="message"
count={2}
list={list}
title="消息"
emptyText="您已读完所有消息"
showViewMore
/>
<NoticeIcon.Tab
tabKey="event"
title="待办"
emptyText="你已完成所有待办"
count={2}
list={list}
showViewMore
/>
</NoticeIcon>
);
};
```
### NoticeIcon API
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| count | 有多少未读通知 | `number` | - |
| bell | 铃铛的图表 | `ReactNode` | - |
| onClear | 点击清空数据按钮 | `(tabName: string, tabKey: string) => void` | - |
| onItemClick | 未读消息列被点击 | `(item: API.NoticeIconData, tabProps: NoticeIconTabProps) => void` | - |
| onViewMore | 查看更多的按钮点击 | `(tabProps: NoticeIconTabProps, e: MouseEvent) => void` | - |
| onTabChange | 通知 Tab 的切换 | `(tabTile: string) => void;` | - |
| popupVisible | 通知显示是否展示 | `boolean` | - |
| onPopupVisibleChange | 通知信息显示隐藏的回调函数 | `(visible: boolean) => void` | - |
| clearText | 清空按钮的文字 | `string` | - |
| viewMoreText | 查看更多的按钮文字 | `string` | - |
| clearClose | 展示清空按钮 | `boolean` | - |
| emptyImage | 列表为空时的兜底展示 | `ReactNode` | - |
### NoticeIcon.Tab API
| 参数 | 说明 | 类型 | 默认值 |
| ------------ | ------------------ | ------------------------------------ | ------ |
| count | 有多少未读通知 | `number` | - |
| title | 通知 Tab 的标题 | `ReactNode` | - |
| showClear | 展示清除按钮 | `boolean` | `true` |
| showViewMore | 展示加载更 | `boolean` | `true` |
| tabKey | Tab 的唯一 key | `string` | - |
| onClick | 子项的单击事件 | `(item: API.NoticeIconData) => void` | - |
| onClear | 清楚按钮的点击 | `()=>void` | - |
| emptyText | 为空的时候测试 | `()=>void` | - |
| viewMoreText | 查看更多的按钮文字 | `string` | - |
| onViewMore | 查看更多的按钮点击 | `( e: MouseEvent) => void` | - |
| list | 通知信息的列表 | `API.NoticeIconData` | - |
### NoticeIconData
```tsx | pure
export interface NoticeIconData {
id: string;
key: string;
avatar: string;
title: string;
datetime: string;
type: string;
read?: boolean;
description: string;
clickClose?: boolean;
extra: any;
status: string;
}
```
## RightContent
RightContent 是以上几个组件的组合,同时新增了 plugins 的 `SelectLang` 插件。
```tsx | pure
<Space>
<HeaderSearch
placeholder="站内搜索"
defaultValue="umi ui"
options={[
{ label: <a href="https://umijs.org/zh/guide/umi-ui.html">umi ui</a>, value: 'umi ui' },
{
label: <a href="next.ant.design">Ant Design</a>,
value: 'Ant Design',
},
{
label: <a href="https://protable.ant.design/">Pro Table</a>,
value: 'Pro Table',
},
{
label: <a href="https://prolayout.ant.design/">Pro Layout</a>,
value: 'Pro Layout',
},
]}
/>
<Tooltip title="使用文档">
<span
className={styles.action}
onClick={() => {
window.location.href = 'https://pro.ant.design/docs/getting-started';
}}
>
<QuestionCircleOutlined />
</span>
</Tooltip>
<Avatar />
{REACT_APP_ENV && (
<span>
<Tag color={ENVTagColor[REACT_APP_ENV]}>{REACT_APP_ENV}</Tag>
</span>
)}
<SelectLang className={styles.action} />
</Space>
```

61
src/e2e/baseLayout.e2e.js Normal file
View File

@ -0,0 +1,61 @@
const { uniq } = require('lodash');
const RouterConfig = require('../../config/config').default.routes;
const BASE_URL = `http://localhost:${process.env.PORT || 8001}`;
function formatter(routes, parentPath = '') {
const fixedParentPath = parentPath.replace(/\/{1,}/g, '/');
let result = [];
routes.forEach((item) => {
if (item.path && !item.path.startsWith('/')) {
result.push(`${fixedParentPath}/${item.path}`.replace(/\/{1,}/g, '/'));
}
if (item.path && item.path.startsWith('/')) {
result.push(`${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();
});
});

84
src/global.less Normal file
View File

@ -0,0 +1,84 @@
@import '~antd/es/style/themes/default.less';
html,
body,
#root {
height: 100%;
}
.colorWeak {
filter: invert(80%);
}
.ant-layout {
min-height: 100vh;
}
.ant-pro-sider.ant-layout-sider.ant-pro-sider-fixed {
left: unset;
}
canvas {
display: block;
}
body {
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
ul,
ol {
list-style: none;
}
@media (max-width: @screen-xs) {
.ant-table {
width: 100%;
overflow-x: auto;
&-thead > tr,
&-tbody > tr {
> th,
> td {
white-space: pre;
> span {
display: block;
}
}
}
}
}
// Compatible with IE11
@media screen and(-ms-high-contrast: active), (-ms-high-contrast: none) {
body .ant-design-pro > .ant-layout {
min-height: 100vh;
}
}
.ant-layout{
background: #fff;
}
.ant-layout-header{
//display: none;
}
#contentContainer{
//display: none;
}
.ant-pro-right-content{
display: none;
}
.ant-modal-mask{
background-color: rgba(255, 0, 0, 0);
}
.chiner-modal{
background-color: rgba(255, 0, 0, 0);
}
.ant-pro-top-nav-header-logo{
display: none;
}
.ant-pro-top-nav-header-main-left{
min-width: 0px;
}

91
src/global.tsx Normal file
View File

@ -0,0 +1,91 @@
import { Button, message, notification } from 'antd';
import { useIntl } from 'umi';
import defaultSettings from '../config/defaultSettings';
const { pwa } = defaultSettings;
const isHttps = document.location.protocol === 'https:';
const clearCache = () => {
// remove all caches
if (window.caches) {
caches
.keys()
.then((keys) => {
keys.forEach((key) => {
caches.delete(key);
});
})
.catch((e) => console.log(e));
}
};
// if pwa is true
if (pwa) {
// Notify user if offline now
window.addEventListener('sw.offline', () => {
message.warning(useIntl().formatMessage({ id: 'app.pwa.offline' }));
});
// Pop up a prompt on the page asking the user if they want to use the latest version
window.addEventListener('sw.updated', (event: Event) => {
const e = event as CustomEvent;
const reloadSW = async () => {
// Check if there is sw whose state is waiting in ServiceWorkerRegistration
// https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
const worker = e.detail && e.detail.waiting;
if (!worker) {
return true;
}
// Send skip-waiting event to waiting SW with MessageChannel
await new Promise((resolve, reject) => {
const channel = new MessageChannel();
channel.port1.onmessage = (msgEvent) => {
if (msgEvent.data.error) {
reject(msgEvent.data.error);
} else {
resolve(msgEvent.data);
}
};
worker.postMessage({ type: 'skip-waiting' }, [channel.port2]);
});
clearCache();
window.location.reload();
return true;
};
const key = `open${Date.now()}`;
const btn = (
<Button
type="primary"
onClick={() => {
notification.close(key);
reloadSW();
}}
>
{useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.ok' })}
</Button>
);
notification.open({
message: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated' }),
description: useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.hint' }),
btn,
key,
onClose: async () => null,
});
});
} else if ('serviceWorker' in navigator && isHttps) {
// unregister service worker
const { serviceWorker } = navigator;
if (serviceWorker.getRegistrations) {
serviceWorker.getRegistrations().then((sws) => {
sws.forEach((sw) => {
sw.unregister();
});
});
}
serviceWorker.getRegistration().then((sw) => {
if (sw) sw.unregister();
});
clearCache();
}

View File

@ -0,0 +1,29 @@
import KeepAliveTabs from '@/components/KeepAliveTabs';
import defaultSettings from '../../config/defaultSettings';
const { tabsLayout } = defaultSettings;
/* *
*
* @author whiteshader@163.com
* @datetime 2022/02/22
*
* */
const TabsLayout: React.FC = (props) => {
const renderTabs = () => {
if(tabsLayout)
return <KeepAliveTabs />;
else
return null;
}
return (
<div>
{renderTabs()}
<div>{props.children}</div>
</div>
);
};
export default TabsLayout;

53
src/locales/en-US.ts Normal file
View File

@ -0,0 +1,53 @@
import component from './en-US/component';
import globalHeader from './en-US/globalHeader';
import menu from './en-US/menu';
import pages from './en-US/pages';
import pwa from './en-US/pwa';
import settingDrawer from './en-US/settingDrawer';
import settings from './en-US/settings';
import user from './en-US/user';
import role from './en-US/role';
import dept from './en-US/dept';
import post from './en-US/post';
import config from './en-US/config';
import sysmenu from './en-US/sysmenu';
import notice from './en-US/notice';
import dict from './en-US/dict';
import job from './en-US/job';
import jobLog from './en-US/jobLog';
import loginInfo from './en-US/loginInfo';
import operLog from './en-US/operLog';
import server from './en-US/server';
import onlineUser from './en-US/onlineUser';
export default {
'navBar.lang': 'Languages',
'layout.user.link.help': 'Help',
'layout.user.link.privacy': 'Privacy',
'layout.user.link.terms': 'Terms',
'app.copyright.produced': 'Produced by Ant Financial Experience Department',
'app.preview.down.block': 'Download this page to your local project',
'app.welcome.link.fetch-blocks': 'Get all block',
'app.welcome.link.block-list': 'Quickly build standard, pages based on `block` development',
...globalHeader,
...menu,
...settingDrawer,
...settings,
...pwa,
...component,
...pages,
...user,
...post,
...dept,
...role,
...config,
...sysmenu,
...notice,
...dict,
...job,
...jobLog,
...loginInfo,
...operLog,
...server,
...onlineUser,
};

View File

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

View File

@ -0,0 +1,21 @@
/**
*
* @author whiteshader@163.com
*
* */
export default {
'system.Config.config_id': 'ID',
'system.Config.config_name': 'Name',
'system.Config.config_key': 'Key',
'system.Config.config_value': 'Value',
'system.Config.config_type': 'Type',
'system.Config.status': 'Status',
'system.Config.create_by': 'Creator',
'system.Config.create_time': 'Create Time',
'system.Config.update_by': 'Updater',
'system.Config.update_time': 'Update Time',
'system.Config.remark': 'Remark',
'system.Config.modify': 'Edit',
};

26
src/locales/en-US/dept.ts Normal file
View File

@ -0,0 +1,26 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2021/09/16
*
* */
export default {
'system.Dept.dept_id': 'ID',
'system.Dept.parent_dept': 'Parent',
'system.Dept.parent_id': 'Parent Id',
'system.Dept.ancestors': 'Ancestors',
'system.Dept.dept_name': 'Name',
'system.Dept.order_num': 'Order',
'system.Dept.leader': 'Leader',
'system.Dept.phone': 'Phone',
'system.Dept.email': 'Email',
'system.Dept.status': 'Status',
'system.Dept.del_flag': 'Deleted',
'system.Dept.create_by': 'Creator',
'system.Dept.create_time': 'Create Time',
'system.Dept.update_by': 'Updater',
'system.Dept.update_time': 'Update Time',
'system.Dept.modify': 'Edit',
};

37
src/locales/en-US/dict.ts Normal file
View File

@ -0,0 +1,37 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2021/09/16
*
* */
export default {
'system.DictType.dict_id': 'ID',
'system.DictType.dict_name': 'Name',
'system.DictType.dict_type': 'Type',
'system.DictType.status': 'Status',
'system.DictType.del_flag': 'Flag',
'system.DictType.login_ip': 'IP',
'system.DictType.login_date': 'Login Date',
'system.DictType.create_by': 'Creator',
'system.DictType.create_time': 'Create Time',
'system.DictType.update_by': 'Updater',
'system.DictType.update_time': 'Update Time',
'system.DictType.remark': 'Remark',
'system.DictType.modify': 'Edit',
'system.DictData.dict_code': 'Code',
'system.DictData.dict_sort': 'Sort',
'system.DictData.dict_label': 'Label',
'system.DictData.dict_value': 'Value',
'system.DictData.dict_type': 'Type',
'system.DictData.css_class': 'CSS',
'system.DictData.list_class': 'List Class',
'system.DictData.is_default': 'Default',
'system.DictData.status': 'Status',
'system.DictData.create_by': 'Creator',
'system.DictData.create_time': 'Create Time',
'system.DictData.update_by': 'Updater',
'system.DictData.update_time': 'Update Time',
'system.DictData.remark': 'Remark',
'system.DictData.modify': 'Edit',
};

View File

@ -0,0 +1,17 @@
export default {
'component.globalHeader.search': 'Search',
'component.globalHeader.search.example1': 'Search example 1',
'component.globalHeader.search.example2': 'Search example 2',
'component.globalHeader.search.example3': 'Search example 3',
'component.globalHeader.help': 'Help',
'component.globalHeader.notification': 'Notification',
'component.globalHeader.notification.empty': 'You have viewed all notifications.',
'component.globalHeader.message': 'Message',
'component.globalHeader.message.empty': 'You have viewed all messsages.',
'component.globalHeader.event': 'Event',
'component.globalHeader.event.empty': 'You have viewed all events.',
'component.noticeIcon.clear': 'Clear',
'component.noticeIcon.cleared': 'Cleared',
'component.noticeIcon.empty': 'No notifications',
'component.noticeIcon.view-more': 'View more',
};

27
src/locales/en-US/job.ts Normal file
View File

@ -0,0 +1,27 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2021/09/16
*
* */
export default {
'monitor.Job.job_id': 'ID',
'monitor.Job.job_name': 'Name',
'monitor.Job.job_group': 'Group',
'monitor.Job.invoke_target': 'Invoke',
'monitor.Job.cron_expression': 'Cron Exp',
'monitor.Job.misfire_policy': 'Policy',
'monitor.Job.concurrent': 'Concurrent',
'monitor.Job.status': 'Status',
'monitor.Job.del_flag': 'Flag',
'monitor.Job.login_ip': 'IP',
'monitor.Job.login_date': 'Login Date',
'monitor.Job.create_by': 'Creator',
'monitor.Job.create_time': 'Create Time',
'monitor.Job.update_by': 'Updater',
'monitor.Job.update_time': 'Update Time',
'monitor.Job.remark': 'Remark',
'monitor.Job.modify': 'Edit',
};

View File

@ -0,0 +1,19 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2021/09/16
*
* */
export default {
'monitor.JobLog.title': '定时任务调度日志',
'monitor.JobLog.job_log_id': '任务日志ID',
'monitor.JobLog.job_name': '任务名称',
'monitor.JobLog.job_group': '任务组名',
'monitor.JobLog.invoke_target': '调用目标字符串',
'monitor.JobLog.job_message': '日志信息',
'monitor.JobLog.status': '执行状态',
'monitor.JobLog.exception_info': '异常信息',
'monitor.JobLog.create_time': '创建时间',
};

View File

@ -0,0 +1,19 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2021/09/16
*
* */
export default {
'monitor.Logininfor.info_id': 'ID',
'monitor.Logininfor.user_name': 'User',
'monitor.Logininfor.ipaddr': 'IP',
'monitor.Logininfor.login_location': 'Location',
'monitor.Logininfor.browser': 'Browser',
'monitor.Logininfor.os': 'OS',
'monitor.Logininfor.status': 'Status',
'monitor.Logininfor.msg': 'Message',
'monitor.Logininfor.login_time': 'Time',
};

73
src/locales/en-US/menu.ts Normal file
View File

@ -0,0 +1,73 @@
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',
'menu.title.user': 'User',
'menu.title.role': 'Role',
'menu.title.menu': 'Menu',
'menu.title.dept': 'Dept',
'menu.title.post': 'Post',
'menu.title.dict': 'Dictionary',
'menu.title.dictData': 'DictData',
'menu.title.config': 'Configure',
'menu.title.notice': 'Notice',
'menu.title.operlog': 'Operation Log',
'menu.title.loginInfo': 'Login Log',
'menu.title.onlineUser': 'Online User',
'menu.title.job': 'Job',
'menu.title.joblog': 'Job Log',
'menu.title.druid': 'Druid',
'menu.title.serverInfo': 'Server',
'menu.title.cacheInfo': 'Cache',
'menu.title.cacheList': 'CacheList',
'menu.title.gen': 'Gen',
'menu.title.design': 'Form',
'menu.title.swagger': 'Swagger',
};

View File

@ -0,0 +1,16 @@
export default {
'system.Notice.notice_id': 'ID',
'system.Notice.notice_title': 'Tile',
'system.Notice.notice_type': 'Type',
'system.Notice.notice_content': 'Content',
'system.Notice.status': 'Status',
'system.Notice.del_flag': 'Flag',
'system.Notice.login_ip': 'IP',
'system.Notice.login_date': 'Login Date',
'system.Notice.create_by': 'Creator',
'system.Notice.create_time': 'Create Time',
'system.Notice.update_by': 'Updater',
'system.Notice.update_time': 'Update Time',
'system.Notice.remark': 'Remark',
'system.Notice.modify': 'Edit',
};

View File

@ -0,0 +1,19 @@
/* *
*
* @author whiteshader@163.com
* @datetime 2021/09/16
*
* */
export default {
'monitor.OnlineUser.id': 'id',
'monitor.OnlineUser.user_name': 'User',
'monitor.OnlineUser.ipaddr': 'IP',
'monitor.OnlineUser.login_location': 'Location',
'monitor.OnlineUser.browser': 'Browser',
'monitor.OnlineUser.os': 'OS',
'monitor.OnlineUser.dept_name': 'Dept',
'monitor.OnlineUser.login_time': 'Datetime',
'monitor.OnlineUser.force_logout': 'Tick Out',
};

Some files were not shown because too many files have changed in this diff Show More