diff --git a/package-lock.json b/package-lock.json
index 6ae624d7..2587a9c2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,6 +27,8 @@
"cookies-js": "^1.2.3",
"cross-fetch": "^3.1.6",
"dayjs": "^1.11.7",
+ "echarts": "^5.4.2",
+ "echarts-for-react": "^3.0.2",
"fetch-intercept": "^2.4.0",
"helmet": "^7.0.0",
"js-md5": "^0.7.3",
@@ -13536,6 +13538,33 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"dev": true
},
+ "node_modules/echarts": {
+ "version": "5.4.2",
+ "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.2.tgz",
+ "integrity": "sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==",
+ "dependencies": {
+ "tslib": "2.3.0",
+ "zrender": "5.4.3"
+ }
+ },
+ "node_modules/echarts-for-react": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/echarts-for-react/-/echarts-for-react-3.0.2.tgz",
+ "integrity": "sha512-DRwIiTzx8JfwPOVgGttDytBqdp5VzCSyMRIxubgU/g2n9y3VLUmF2FK7Icmg/sNVkv4+rktmrLN9w22U2yy3fA==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "size-sensor": "^1.0.1"
+ },
+ "peerDependencies": {
+ "echarts": "^3.0.0 || ^4.0.0 || ^5.0.0",
+ "react": "^15.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/echarts/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
@@ -29887,6 +29916,11 @@
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
"dev": true
},
+ "node_modules/size-sensor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/size-sensor/-/size-sensor-1.0.1.tgz",
+ "integrity": "sha512-QTy7MnuugCFXIedXRpUSk9gUnyNiaxIdxGfUjr8xxXOqIB3QvBUYP9+b51oCg2C4dnhaeNk/h57TxjbvoJrJUA=="
+ },
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz",
@@ -34739,6 +34773,19 @@
"node": ">=10"
}
},
+ "node_modules/zrender": {
+ "version": "5.4.3",
+ "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.3.tgz",
+ "integrity": "sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==",
+ "dependencies": {
+ "tslib": "2.3.0"
+ }
+ },
+ "node_modules/zrender/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ },
"node_modules/zstddec": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/zstddec/-/zstddec-0.0.2.tgz",
@@ -44995,6 +45042,31 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"dev": true
},
+ "echarts": {
+ "version": "5.4.2",
+ "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.2.tgz",
+ "integrity": "sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==",
+ "requires": {
+ "tslib": "2.3.0",
+ "zrender": "5.4.3"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ }
+ }
+ },
+ "echarts-for-react": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/echarts-for-react/-/echarts-for-react-3.0.2.tgz",
+ "integrity": "sha512-DRwIiTzx8JfwPOVgGttDytBqdp5VzCSyMRIxubgU/g2n9y3VLUmF2FK7Icmg/sNVkv4+rktmrLN9w22U2yy3fA==",
+ "requires": {
+ "fast-deep-equal": "^3.1.3",
+ "size-sensor": "^1.0.1"
+ }
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
@@ -57863,6 +57935,11 @@
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
"dev": true
},
+ "size-sensor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/size-sensor/-/size-sensor-1.0.1.tgz",
+ "integrity": "sha512-QTy7MnuugCFXIedXRpUSk9gUnyNiaxIdxGfUjr8xxXOqIB3QvBUYP9+b51oCg2C4dnhaeNk/h57TxjbvoJrJUA=="
+ },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz",
@@ -61676,6 +61753,21 @@
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true
},
+ "zrender": {
+ "version": "5.4.3",
+ "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.3.tgz",
+ "integrity": "sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==",
+ "requires": {
+ "tslib": "2.3.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ }
+ }
+ },
"zstddec": {
"version": "0.0.2",
"resolved": "https://registry.npmmirror.com/zstddec/-/zstddec-0.0.2.tgz",
diff --git a/package.json b/package.json
index adb10b81..dfd7700b 100644
--- a/package.json
+++ b/package.json
@@ -232,6 +232,8 @@
"cookies-js": "^1.2.3",
"cross-fetch": "^3.1.6",
"dayjs": "^1.11.7",
+ "echarts": "^5.4.2",
+ "echarts-for-react": "^3.0.2",
"fetch-intercept": "^2.4.0",
"helmet": "^7.0.0",
"js-md5": "^0.7.3",
diff --git a/src/pages/echarts/index.jsx b/src/pages/echarts/index.jsx
new file mode 100644
index 00000000..f6b370c4
--- /dev/null
+++ b/src/pages/echarts/index.jsx
@@ -0,0 +1,52 @@
+import React from 'react'
+import FixTabPanel from '@stateless/FixTabPanel'
+import ReactEcharts from 'echarts-for-react'
+
+const Echarts = () => {
+ const option = {
+ title: {
+ text: '某站点用户访问来源',
+ subtext: '纯属虚构',
+ x: 'center',
+ },
+ tooltip: {
+ trigger: 'item',
+ formatter: '{a}
{b} : {c} ({d}%)',
+ },
+ legend: {
+ orient: 'vertical',
+ left: 'left',
+ data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'],
+ },
+ series: [
+ {
+ name: '访问来源',
+ type: 'pie',
+ radius: '55%',
+ center: ['50%', '60%'],
+ data: [
+ { value: 335, name: '直接访问' },
+ { value: 310, name: '邮件营销' },
+ { value: 234, name: '联盟广告' },
+ { value: 135, name: '视频广告' },
+ { value: 1548, name: '搜索引擎' },
+ ],
+ itemStyle: {
+ emphasis: {
+ shadowBlur: 10,
+ shadowOffsetX: 0,
+ shadowColor: 'rgba(0, 0, 0, 0.5)',
+ },
+ },
+ },
+ ],
+ }
+ return (
+
+ Welcome to echarts!
+
+
+ )
+}
+
+export default Echarts
diff --git a/src/pages/layout/proSecNav/index.jsx b/src/pages/layout/proSecNav/index.jsx
index 57222e0c..8923ea79 100644
--- a/src/pages/layout/proSecNav/index.jsx
+++ b/src/pages/layout/proSecNav/index.jsx
@@ -70,6 +70,7 @@ const ProSecNav = () => {
{ label: 'ReactTilt', key: '/tilt', icon: },
{ label: 'Music', key: '/music', icon: },
{ label: 'Three', key: '/three', icon: },
+ { label: 'Echarts', key: '/echarts', icon: },
{
label: '技术栈',
key: '/sub-act',
diff --git a/src/routers/authRouter.jsx b/src/routers/authRouter.jsx
index 4b526cfe..1848af11 100644
--- a/src/routers/authRouter.jsx
+++ b/src/routers/authRouter.jsx
@@ -12,7 +12,7 @@ const AuthRouter = (props) => {
if (!token) return
// * 后端返回有权限路由列表 暂时硬编码 需要结合 proSecNav组件中的menuItems
- const routerList = ['/', '/home', '/demo', '/parallax', '/dashboard', '/tilt', '/prism', '/three']
+ const routerList = ['/', '/home', '/demo', '/parallax', '/dashboard', '/tilt', '/prism', '/three', '/echarts']
if (routerList.indexOf(pathname) === -1) return
return props.children
diff --git a/src/routers/index.jsx b/src/routers/index.jsx
index 9b3d7215..f5acd62d 100644
--- a/src/routers/index.jsx
+++ b/src/routers/index.jsx
@@ -27,6 +27,7 @@ const ParallaxVert = lazy(() => import('@pages/parallax'))
const ReactTilt = lazy(() => import('@pages/tilt'))
const ReactMusic = lazy(() => import('@pages/music'))
const ReactThree = lazy(() => import('@pages/three'))
+const Echarts = lazy(() => import('@pages/echarts'))
const QrCode = lazy(() => import('@pages/qrGenerate'))
const PrismRender = lazy(() => import('@pages/prism'))
const Exception403 = lazy(() => import('@stateless/Exception/exception403'))
@@ -103,6 +104,14 @@ const rootRouter = [
auth: true,
element: lazyLoad(ReactThree),
},
+ {
+ index: false,
+ path: 'echarts',
+ name: 'ReactEcharts',
+ key: '/echarts',
+ auth: true,
+ element: lazyLoad(Echarts),
+ },
{
index: false,
path: 'coupons',