Sfoglia il codice sorgente

写不动了……

shaogen1995 4 mesi fa
parent
commit
2d3bad3bf0

+ 1 - 0
package.json

@@ -17,6 +17,7 @@
     "braft-editor": "^2.3.9",
     "braft-utils": "^3.0.12",
     "dayjs": "^1.11.10",
+    "echarts": "^5.6.0",
     "js-base64": "^3.7.3",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",

+ 6 - 2
src/components/MyTable/index.tsx

@@ -20,6 +20,8 @@ type Props = {
   myTitle?: { name: string; Com: React.ReactNode }
   // 为空的定制字段
   isNull?: string
+  // 设置宽度
+  widthSet?: any
 }
 
 // 表格内容定制化
@@ -51,7 +53,8 @@ function MyTable({
   classKey = '',
   merge,
   myTitle,
-  isNull = '(空)'
+  isNull = '(空)',
+  widthSet
 }: Props) {
   useEffect(() => {
     const dom = document.querySelector(`.MyTable${classKey} .ant-table-body`) as HTMLDivElement
@@ -132,6 +135,7 @@ function MyTable({
     const arr: any = columnsTemp.map((v: any) => ({
       title: myTitle && v.includes(myTitle.name) ? myTitle.Com : v[1],
       render: dataChangeFu(v),
+      width: widthSet && Reflect.get(widthSet, v[2]) ? Reflect.get(widthSet, v[2]) : 'auto',
       onCell:
         merge && v.includes(merge.type)
           ? // {rowSpan:3}
@@ -142,7 +146,7 @@ function MyTable({
     }))
 
     return arr
-  }, [columnsTemp, dataChangeFu, merge, myTitle])
+  }, [columnsTemp, dataChangeFu, merge, myTitle, widthSet])
 
   return (
     <Table

+ 5 - 0
src/pages/A_workbench/A1dataSta/A1selectDate/index.module.scss

@@ -0,0 +1,5 @@
+// .A1selectDate {
+//   display: flex;
+//   :global {
+//   }
+// }

+ 47 - 0
src/pages/A_workbench/A1dataSta/A1selectDate/index.tsx

@@ -0,0 +1,47 @@
+import React from 'react'
+import styles from './index.module.scss'
+import { Select } from 'antd'
+
+type Props = {
+  value: string
+  setValue: (val: string) => void
+}
+
+function A1selectDate({ value, setValue }: Props) {
+  // 时间选择器改变
+  // const timeChange = useCallback((date: any, dateString: any) => {
+  //   let startTime = ''
+  //   let endTime = ''
+  //   if (dateString[0] && dateString[1]) {
+  //     startTime = dateString[0] + ' 00:00:00'
+  //     endTime = dateString[1] + ' 23:59:59'
+  //   }
+  // }, [])
+
+  return (
+    <div className={styles.A1selectDate}>
+      <Select
+        style={{ width: 120 }}
+        value={value}
+        onChange={e => setValue(e)}
+        options={[
+          { value: '', label: '全部' },
+          { value: '30', label: '近30日' },
+          { value: '7', label: '近7日' }
+        ]}
+      />
+      {/* <div
+        style={{
+          opacity: value === 'xx' ? '1' : '0',
+          pointerEvents: value === 'xx' ? 'auto' : 'none'
+        }}
+      >
+        <RangePicker style={{ width: 220 }} onChange={timeChange} />
+      </div> */}
+    </div>
+  )
+}
+
+const MemoA1selectDate = React.memo(A1selectDate)
+
+export default MemoA1selectDate

+ 80 - 0
src/pages/A_workbench/A1dataSta/data.ts

@@ -0,0 +1,80 @@
+import * as echarts from 'echarts/core'
+import {
+  DatasetComponent,
+  TitleComponent,
+  TooltipComponent,
+  GridComponent,
+  TransformComponent
+} from 'echarts/components'
+import { LineChart } from 'echarts/charts'
+import { UniversalTransition } from 'echarts/features'
+import { CanvasRenderer } from 'echarts/renderers'
+
+echarts.use([
+  DatasetComponent,
+  TitleComponent,
+  TooltipComponent,
+  GridComponent,
+  TransformComponent,
+  LineChart,
+  CanvasRenderer,
+  UniversalTransition
+])
+
+// 折线图
+export const echartsFu1 = (dom: HTMLDivElement) => {
+  const myChart = echarts.getInstanceByDom(dom) || echarts.init(dom)
+  const option = {
+    grid: {
+      left: '-30', //距左边边框的距离
+      right: '0%', //距右边边框的距离
+      bottom: '10', //距下面边框的距离
+      top: '15', //距上面边框的距离
+      containLabel: true
+    },
+
+    xAxis: {
+      type: 'category',
+      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+      axisLine: {
+        show: false //隐藏X轴
+      },
+      axisTick: {
+        show: false //隐藏刻度线
+      },
+      axisLabel: {
+        show: false //隐藏X轴文字
+      }
+    },
+    yAxis: {
+      type: 'value'
+    },
+    series: [
+      {
+        data: [182, 193, 988, 546, 454, 1111, 1200],
+        type: 'line'
+        // showSymbol: false,
+        // smooth: true
+      },
+      {
+        data: [820, 932, 901, 934, 1290, 1330, 1320],
+        type: 'line'
+        // showSymbol: false,
+        // smooth: true
+      }
+    ],
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'cross',
+        label: {
+          backgroundColor: '#6a7985'
+        }
+      },
+      formatter: (val: any) => {
+        return `${val[0].axisValue}<br/>入馆${val[0].data}件<br/>入藏${val[1].data}件`
+      }
+    }
+  }
+  option && myChart.setOption(option)
+}

+ 69 - 0
src/pages/A_workbench/A1dataSta/index.module.scss

@@ -1,4 +1,73 @@
 .A1dataSta {
+  overflow-y: auto;
   :global {
+    .A1tit {
+      font-size: 16px;
+      font-weight: 700;
+      position: relative;
+      padding-left: 15px;
+      &::before {
+        content: '';
+        position: absolute;
+        left: 0px;
+        top: 0;
+        width: 6px;
+        height: 24px;
+        background-color: var(--themeColor);
+      }
+    }
+    .A1box1 {
+      border-radius: 10px;
+      background-color: #fff;
+      padding: 24px;
+      display: flex;
+      justify-content: space-between;
+      .A1box1ll {
+        width: 380px;
+        margin-right: 20px;
+        .A1box1ll1 {
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+        }
+      }
+      .A1box1ll2 {
+        display: flex;
+        flex-wrap: wrap;
+        justify-content: space-between;
+        align-content: space-between;
+        padding-top: 20px;
+        height: 267px;
+        & > div {
+          border-radius: 8px;
+          box-shadow: 1px 1px 1px 1px #ccc;
+          width: calc(50% - 10px);
+          height: calc(50% - 10px);
+          padding: 20px 0 0 35px;
+          & > p {
+            color: var(--themeColor);
+            font-size: 16px;
+          }
+          & > div {
+            margin-top: 24px;
+            font-weight: 700;
+            font-size: 18px;
+          }
+        }
+      }
+      .A1box1rr {
+        width: calc(100% - 400px);
+        height: 300px;
+      }
+    }
+
+    .A1box2 {
+      height: 348px;
+      margin-top: 20px;
+      border-radius: 10px;
+      background-color: #fff;
+      padding: 24px;
+      display: flex;
+    }
   }
 }

+ 53 - 2
src/pages/A_workbench/A1dataSta/index.tsx

@@ -1,10 +1,61 @@
-import React from 'react'
+import React, { useCallback, useEffect, useRef, useState } from 'react'
 import styles from './index.module.scss'
+import A1selectDate from './A1selectDate'
+import { echartsFu1 } from './data'
+
 function A1dataSta() {
+  // 加载折线图,固定12个月
+  useEffect(() => {
+    echartsFu1(echartRef1.current!)
+  }, [])
+
+  const [value1, setValue1] = useState('30')
+
+  const echartRef1 = useRef<HTMLDivElement>(null)
+
+  const getInfo1 = useCallback(async () => {
+    console.log('入藏数据', value1)
+  }, [value1])
+
+  useEffect(() => {
+    getInfo1()
+  }, [getInfo1])
+
   return (
     <div className={styles.A1dataSta}>
       <div className='pageTitle'>数据统计</div>
-      <p>待开发</p>
+      <div className='A1box1'>
+        <div className='A1box1ll'>
+          <div className='A1box1ll1'>
+            <div className='A1tit'>入藏数据</div>
+            <A1selectDate value={value1} setValue={val => setValue1(val)} />
+          </div>
+          <div className='A1box1ll2'>
+            <div>
+              <p>征集线索</p>
+              <div>124件</div>
+            </div>
+            <div>
+              <p>藏品鉴定</p>
+              <div>124件</div>
+            </div>
+            <div>
+              <p>藏品入馆</p>
+              <div>124件</div>
+            </div>
+            <div>
+              <p>藏品入藏</p>
+              <div>124件</div>
+            </div>
+          </div>
+        </div>
+        <div className='A1box1rr' ref={echartRef1}></div>
+      </div>
+
+      <div className='A1box2'>
+        <div className='A1tit'>藏品数据</div>
+        <div className='A1box2_1'></div>
+      </div>
     </div>
   )
 }

+ 5 - 0
src/pages/D_storeManage/D2storSet/data.ts

@@ -0,0 +1,5 @@
+export const D2select = [
+  { value: '', label: '全部' },
+  { value: 1, label: '启用' },
+  { value: 0, label: '禁用' }
+]

+ 24 - 0
src/pages/D_storeManage/D2storSet/index.module.scss

@@ -1,4 +1,28 @@
 .D2storSet {
+  background-color: #fff;
+  border-radius: 10px;
+  padding: 24px;
   :global {
+    .D2top {
+      display: flex;
+      justify-content: space-between;
+      .D2topll {
+        display: flex;
+        .ant-input {
+          margin-right: 15px;
+          width: 180px;
+        }
+        .ant-select {
+          width: 100px;
+        }
+      }
+    }
+    .D2tableBox {
+      border-radius: 10px;
+      overflow: hidden;
+      margin-top: 15px;
+      height: calc(100% - 25px);
+      background-color: #fff;
+    }
   }
 }

+ 171 - 2
src/pages/D_storeManage/D2storSet/index.tsx

@@ -1,10 +1,179 @@
-import React from 'react'
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
 import styles from './index.module.scss'
+import { TypeD2form, TypeD2list } from './type'
+import { useDispatch, useSelector } from 'react-redux'
+import { D2_APIdel, D2_APIgetList } from '@/store/action/D2storSet'
+import { Button, Input, Select, Table } from 'antd'
+import { D2select } from './data'
+import { RootState } from '@/store'
+import MyTable from '@/components/MyTable'
+import { D2tableC } from '@/utils/tableData'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import { MessageFu } from '@/utils/message'
+
+const formDataTemp: TypeD2form = {
+  pageNum: 1,
+  pageSize: 10,
+  name: '',
+  num: '',
+  managerUser: '',
+  description: '',
+  enable: ''
+}
+
 function D2storSet() {
+  const dispatch = useDispatch()
+
+  const [formData, setFormData] = useState(formDataTemp)
+  const formDataRef = useRef(formDataTemp)
+
+  useEffect(() => {
+    formDataRef.current = formData
+  }, [formData])
+
+  // 点击搜索的 时间戳
+  const [timeKey, setTimeKey] = useState(0)
+
+  // 点击搜索
+  const clickSearch = useCallback(() => {
+    setFormData({ ...formData, pageNum: 1 })
+    setTimeout(() => {
+      setTimeKey(Date.now())
+    }, 50)
+  }, [formData])
+
+  const getListFu = useCallback(() => {
+    dispatch(D2_APIgetList(formDataRef.current))
+  }, [dispatch])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu, timeKey])
+
+  // 输入框的改变
+  const txtChangeFu = useCallback(
+    (txt: string, key: 'name' | 'num' | 'managerUser' | 'description') => {
+      setFormData({ ...formData, [key]: txt })
+    },
+    [formData]
+  )
+
+  // 点击重置
+  const resetFu = useCallback(() => {
+    setFormData(formDataTemp)
+    setTimeout(() => {
+      setTimeKey(Date.now())
+    }, 50)
+  }, [])
+
+  const tableInfo = useSelector((state: RootState) => state.D2storSet.tableInfo)
+
+  // 页码变化
+  const paginationChange = useCallback(
+    (pageNum: number, pageSize: number) => {
+      setFormData({ ...formData, pageNum, pageSize })
+      setTimeout(() => {
+        setTimeKey(Date.now())
+      }, 50)
+    },
+    [formData]
+  )
+
+  // 点击删除
+  const delTableFu = useCallback(
+    async (id: number) => {
+      const res = await D2_APIdel(id)
+      if (res.code === 0) {
+        MessageFu.success('删除成功!')
+        getListFu()
+      }
+    },
+    [getListFu]
+  )
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        width: 240,
+        render: (item: TypeD2list) => {
+          return (
+            <>
+              <Button size='small' type='text'>
+                查看
+              </Button>
+              <Button size='small' type='text'>
+                库位设置
+              </Button>
+              <Button size='small' type='text'>
+                编辑
+              </Button>
+              <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
+            </>
+          )
+        }
+      }
+    ]
+  }, [delTableFu])
+
   return (
     <div className={styles.D2storSet}>
       <div className='pageTitle'>库房设置</div>
-      <p>待开发</p>
+      <div className='D2top'>
+        <div className='D2topll'>
+          <Input
+            placeholder='请输入仓库名称'
+            maxLength={30}
+            value={formData.name}
+            onChange={e => txtChangeFu(e.target.value, 'name')}
+          />
+          <Input
+            placeholder='请输入仓库编码'
+            maxLength={30}
+            value={formData.num}
+            onChange={e => txtChangeFu(e.target.value, 'num')}
+          />
+          <Input
+            placeholder='请输入仓库负责人'
+            maxLength={30}
+            value={formData.managerUser}
+            onChange={e => txtChangeFu(e.target.value, 'managerUser')}
+          />
+          <Input
+            placeholder='请输入仓库说明'
+            maxLength={30}
+            value={formData.description}
+            onChange={e => txtChangeFu(e.target.value, 'description')}
+          />
+          <Select
+            placeholder='仓库状态'
+            options={D2select}
+            value={formData.enable}
+            onChange={e => setFormData({ ...formData, pageNum: 1, enable: e })}
+          />
+        </div>
+        <div className='D2toprr'>
+          <Button type='primary'>新增</Button>&emsp;
+          <Button type='primary' onClick={clickSearch}>
+            查询
+          </Button>
+          &emsp;
+          <Button onClick={resetFu}>重置</Button>
+        </div>
+      </div>
+      <div className='D2tableBox'>
+        <MyTable
+          yHeight={630}
+          list={tableInfo.list}
+          columnsTemp={D2tableC}
+          lastBtn={tableLastBtn}
+          pageNum={formData.pageNum}
+          pageSize={formData.pageSize}
+          total={tableInfo.total}
+          onChange={(pageNum, pageSize) => paginationChange(pageNum, pageSize)}
+          widthSet={{ description: 500 }}
+        />
+      </div>
     </div>
   )
 }

+ 26 - 0
src/pages/D_storeManage/D2storSet/type.d.ts

@@ -0,0 +1,26 @@
+// 分页列表
+export type TypeD2list = {
+  createTime: string
+  creatorId: number
+  creatorName: string
+  description: string
+  enable: number
+  id: number
+  level: number
+  managerUser: string
+  managerUserId: number
+  name: string
+  num: string
+  updateTime: string
+}
+
+// 发送数据
+export type TypeD2form = {
+  pageNum: number
+  pageSize: number
+  name: string
+  num: string
+  managerUser: string
+  description: string
+  enable: '' | 0 | 1
+}

+ 24 - 24
src/pages/Layout/data.ts

@@ -2,30 +2,30 @@ import { RouterType, RouterTypeRow } from '@/types'
 import React from 'react'
 
 const tabLeftArr: RouterType = [
-  // {
-  //   id: 1,
-  //   name: '工作台',
-  //   son: [
-  //     {
-  //       id: 100,
-  //       name: '数据统计',
-  //       path: '/',
-  //       Com: React.lazy(() => import('../A_workbench/A1dataSta'))
-  //     },
-  //     {
-  //       id: 101,
-  //       name: '业务中心',
-  //       path: '/business',
-  //       Com: React.lazy(() => import('../A_workbench/A2business'))
-  //     },
-  //     {
-  //       id: 102,
-  //       name: '流程管理',
-  //       path: '/flow',
-  //       Com: React.lazy(() => import('../A_workbench/A3flow'))
-  //     }
-  //   ]
-  // },
+  {
+    id: 1,
+    name: '工作台',
+    son: [
+      {
+        id: 100,
+        name: '数据统计',
+        path: '/',
+        Com: React.lazy(() => import('../A_workbench/A1dataSta'))
+      }
+      // {
+      //   id: 101,
+      //   name: '业务中心',
+      //   path: '/business',
+      //   Com: React.lazy(() => import('../A_workbench/A2business'))
+      // },
+      // {
+      //   id: 102,
+      //   name: '流程管理',
+      //   path: '/flow',
+      //   Com: React.lazy(() => import('../A_workbench/A3flow'))
+      // }
+    ]
+  },
   // {
   //   id: 2,
   //   name: '入藏管理',

+ 3 - 3
src/pages/Z_system/Z1dict/Z1add.tsx

@@ -75,7 +75,7 @@ function Z1add({ addInfo, addFu, closeFu }: Props) {
     if (addInfo.txt === '编辑') getInfoFu(addInfo.id)
     else {
       FormBoxRef.current?.setFieldsValue({
-        sort: 999
+        sort: 20000
       })
     }
   }, [addInfo.id, addInfo.txt, getInfoFu])
@@ -186,10 +186,10 @@ function Z1add({ addInfo, addFu, closeFu }: Props) {
               name='sort'
               rules={[{ required: true, message: '请输入排序值!' }]}
             >
-              <InputNumber min={1} max={999} precision={0} placeholder='请输入' />
+              <InputNumber min={1} max={20000} precision={0} placeholder='请输入' />
             </Form.Item>
             <div className='fromRowTit'>
-              请输入1~999的数字。数字越小,排序越靠前。数字相同时,更新发布的内容排在前面
+              请输入1~20000的数字。数字越小,排序越靠前。数字相同时,更新发布的内容排在前面
             </div>
           </div>
 

+ 5 - 6
src/pages/初始化组件/index.tsx

@@ -1,7 +1,6 @@
-import React from "react";
-import styles from "./index.module.scss";
- function AAAAA() {
-  
+import React from 'react'
+import styles from './index.module.scss'
+function AAAAA() {
   return (
     <div className={styles.AAAAA}>
       <h1>AAAAA</h1>
@@ -9,6 +8,6 @@ import styles from "./index.module.scss";
   )
 }
 
-const MemoAAAAA = React.memo(AAAAA);
+const MemoAAAAA = React.memo(AAAAA)
 
-export default MemoAAAAA;
+export default MemoAAAAA

+ 24 - 0
src/store/action/D2storSet.ts

@@ -0,0 +1,24 @@
+import http from '@/utils/http'
+import { AppDispatch } from '..'
+/**
+ * 库房设置 - 获取分页列表
+ */
+export const D2_APIgetList = (data: any): any => {
+  return async (dispatch: AppDispatch) => {
+    const res = await http.post('cms/storage/st/pageList', data)
+    if (res.code === 0) {
+      const obj = {
+        list: res.data.records,
+        total: res.data.total
+      }
+      dispatch({ type: 'D2/getList', payload: obj })
+    }
+  }
+}
+
+/**
+ * 库房设置-删除
+ */
+export const D2_APIdel = (id: number) => {
+  return http.get(`cms/storage/st/remove/${id}`)
+}

+ 28 - 0
src/store/reducer/D2storSet.ts

@@ -0,0 +1,28 @@
+import { TypeD2list } from '@/pages/D_storeManage/D2storSet/type'
+
+// 初始化状态
+const initState = {
+  // 列表数据
+  tableInfo: {
+    list: [] as TypeD2list[],
+    total: 0
+  }
+}
+
+// 定义 action 类型
+type Props = {
+  type: 'D2/getList'
+  payload: { list: TypeD2list[]; total: number }
+}
+
+// reducer
+export default function userReducer(state = initState, action: Props) {
+  switch (action.type) {
+    // 获取列表数据
+    case 'D2/getList':
+      return { ...state, tableInfo: action.payload }
+
+    default:
+      return state
+  }
+}

+ 2 - 0
src/store/reducer/index.ts

@@ -3,6 +3,7 @@ import { combineReducers } from 'redux'
 
 // 导入 登录 模块的 reducer
 import A0Layout from './layout'
+import D2storSet from './D2storSet'
 import Z1dict from './Z1dict'
 import Z2numRule from './Z2numRule'
 import Z6user from './Z6user'
@@ -11,6 +12,7 @@ import Z7log from './Z7log'
 // 合并 reducer
 const rootReducer = combineReducers({
   A0Layout,
+  D2storSet,
   Z1dict,
   Z2numRule,
   Z6user,

+ 8 - 0
src/utils/tableData.ts

@@ -14,6 +14,14 @@
 //     ["text", "创建日期",'description', 50,A],
 //   ];
 
+export const D2tableC = [
+  ['txt', '仓库名称', 'name'],
+  ['txt', '仓库编码', 'num'],
+  ['txt', '仓库负责人', 'managerUser'],
+  ['text', '仓库说明', 'description', 100],
+  ['txtChange', '仓库状态', 'enable', { 0: '禁用', 1: '启用' }]
+]
+
 export const Z2tableC = [
   ['txt', '编号类型', 'name'],
   ['txt', '前缀', 'prefix'],

+ 20 - 0
yarn.lock

@@ -4451,6 +4451,14 @@ eastasianwidth@^0.2.0:
   resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
   integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
 
+echarts@^5.6.0:
+  version "5.6.0"
+  resolved "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz#2377874dca9fb50f104051c3553544752da3c9d6"
+  integrity sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==
+  dependencies:
+    tslib "2.3.0"
+    zrender "5.6.1"
+
 ee-first@1.1.1:
   version "1.1.1"
   resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -10187,6 +10195,11 @@ tsconfig-paths@^3.15.0:
     minimist "^1.2.6"
     strip-bom "^3.0.0"
 
+tslib@2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
+  integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
+
 tslib@^1.8.1:
   version "1.14.1"
   resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
@@ -11008,3 +11021,10 @@ yocto-queue@^0.1.0:
   version "0.1.0"
   resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
   integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+zrender@5.6.1:
+  version "5.6.1"
+  resolved "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz#e08d57ecf4acac708c4fcb7481eb201df7f10a6b"
+  integrity sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==
+  dependencies:
+    tslib "2.3.0"