Просмотр исходного кода

feat: 开放平台管理后台前端项目一期

 On branch feature/openPlatform

 Changes to be committed:
	modified:   .drone.yml
	modified:   .gitignore
	modified:   package.json
	modified:   src/conf/config.js
	modified:   src/conf/proxyMap.js
	new file:   src/pages/allseeing/report/data.js
	new file:   src/pages/allseeing/report/index.js
	new file:   src/pages/allseeing/report/service.js
	modified:   src/pages/fengkong/strategies/add/index.js
	modified:   src/pages/fengkong/strategies/edit/$name.js
	modified:   src/pages/fengkong/strategies/note/$name.js
	modified:   src/pages/fengkong/strategies/strategies.js
	modified:   src/pages/fengkong/view/self/apply.js
	modified:   src/pages/fengkong/view/self/self.js
	new file:   src/pages/openplatform/components/FontManage/index.js
	new file:   src/pages/openplatform/datacore/sublist/index.js
	new file:   src/pages/openplatform/datacore/sublist/structure.js
	new file:   src/pages/openplatform/devcore/aplist/index.js
	new file:   src/pages/openplatform/devcore/aplist/structure.js
	new file:   src/pages/openplatform/devcore/appsublist/index.js
	new file:   src/pages/openplatform/devcore/appsublist/structure.js
	new file:   src/pages/openplatform/devcore/numlist/index.js
	new file:   src/pages/openplatform/devcore/numlist/structure.js
	new file:   src/pages/openplatform/model.js
	new file:   src/pages/openplatform/service.js
	modified:   src/pages/poster/edit/$id$.js
	modified:   yarn.lock
zhurd 4 лет назад
Родитель
Сommit
803c01e139

+ 3 - 1
.drone.yml

@@ -46,5 +46,7 @@ trigger:
   branch:
     include:
     - t*
-    
+
+
+
 

+ 6 - 0
.gitignore

@@ -23,3 +23,9 @@
 .idea/vcs.xml
 .idea/workspace.xml
 .idea/inspectionProfiles/Project_Default.xml
+
+build
+.env.local
+config/config.local.ts
+config/config.local.copy.ts
+src/conf/config.local.ts

+ 2 - 2
package.json

@@ -7,7 +7,7 @@
     "format": "eslint --ext .js src --fix"
   },
   "dependencies": {
-    "antd": "^3.23.4",
+    "antd": "^3.26.18",
     "axios": "^0.19.0",
     "dva": "^2.4.1",
     "lodash": "^4.17.15",
@@ -18,7 +18,7 @@
     "react-copy-to-clipboard": "^5.0.2",
     "react-dom": "^16.9.0",
     "react-rnd": "^10.1.8",
-    "wptpc-design": "^2.0.28"
+    "wptpc-design": "^2.0.85"
   },
   "devDependencies": {
     "@babel/plugin-proposal-decorators": "^7.7.4",

+ 5 - 3
src/conf/config.js

@@ -1,20 +1,22 @@
 let dc = '/back-apit/api'
 let tc = '/back-apit/api'
 let us = '/back-apit/api'
+let wop = '/wopt/api'
 const apiCdn = 'http://cdn01t.weipaitang.com/img/'
 let auth = '/back-autht/api'
 const hostDev = `${window.location.protocol}//${window.location.host}`
 const sTaskJobLog = 'http://ms-trace.weipaitang.com' // 定时任务日志跳转
-let thanos = '/thanos-admint/api'
-// let thanos = 'http://localhost:7070'
+// let thanos = '/thanos-admint/api'
+let thanos = 'http://10.3.7.22:7070'
 
 if (document.domain === 'back-admin.weipaitang.com') {
   dc = '/back-api/api'
   tc = '/back-api/api'
   auth = '/back-auth/api'
   us = '/back-api/api'
+  wop = '/wop/api'
   // sTaskJobLog = '/ms-trace/api' // 定时任务日志跳转
   thanos = '/thanos-admin/api'
 }
 
-export { dc, tc, us, apiCdn, auth, hostDev, sTaskJobLog, thanos };
+export { dc, tc, us, apiCdn, auth, hostDev, sTaskJobLog, thanos, wop }

+ 3 - 1
src/conf/proxyMap.js

@@ -4,9 +4,11 @@ module.exports = {
   '/back-autht/api': 'https://back-autht.weipaitang.com',
   '/ms-tracet/api': 'http://10.3.7.11:16686',
   '/thanos-admint/api': 'http://10.3.7.22:7070',
+  '/wopt/api': 'https://wop-adminapit.weipaitang.com', // 开发平台
   // 生产环境
   '/back-auth/api': 'https://back-auth.weipaitang.com',
   '/back-api/api': 'http://back-api.weipaitang.com',
   '/ms-trace/api': 'http://ms-trace.weipaitang.com',
   '/thanos-admin/api': 'http://thanos-admin.weipaitang.com',
-};
+  '/wop/api': 'https://wop-adminapi.weipaitang.com' // 开发平台
+}

+ 90 - 0
src/pages/allseeing/report/data.js

@@ -0,0 +1,90 @@
+import React from 'react'
+import { connect } from 'dva'
+import { message, Table } from 'antd'
+import { query } from '@/pages/allseeing/report/service'
+
+@connect(({ user }) => ({
+  currentUser: user.currentUser
+}))
+
+class NoteRecord extends React.PureComponent {
+  constructor () {
+    super()
+    this.state = {
+      dataSource: []
+    }
+  }
+
+  componentDidMount () {
+    const reportid = this.parseUrl(window.location.href).reportid
+    console.log('reportid: ' + reportid)
+    query({ name: 'report_info', input: { reportid: reportid } }).then(res => {
+      console.log('data: ' + JSON.stringify(res))
+      // console.log('data1: ' + JSON.parse(res.data))
+      if (res.data != null && res.code === 0) {
+        this.setState({ dataSource: res.data })
+        message.success('数据获取成功')
+      } else {
+        message.error('数据获取失败: ' + res.msg)
+      }
+    })
+  }
+
+  to = (s) => {
+    console.log('http: ' + s.startsWith('"http') + '-' + s.replace('"', ''))
+    if (s.startsWith('http') || s.startsWith('"http')) {
+      window.location.href = s.replace('"', '')
+    }
+  }
+
+  parseUrl = (url) => {
+    const arr = url.split('?')
+    if (arr.length === 1) {
+      return null
+    }
+    const params = arr[1].split('&')
+    const obj = {}
+    for (let i = 0; i < params.length; i++) {
+      const arrParams = params[i].split('=')
+      obj[arrParams[0]] = arrParams[1]
+    }
+    return obj
+  }
+
+  render () {
+    let dataSource = []
+    if (this.state.dataSource.length > 0) {
+      dataSource = this.state.dataSource
+    }
+    const columns = [
+      {
+        title: '名称',
+        key: 'name',
+        dataIndex: 'name',
+        width: 30
+      },
+      {
+        title: '内容',
+        key: 'content',
+        dataIndex: 'content',
+        width: 550,
+        render: (text) => (
+          <a onClick={() => this.to(text)}>{text}</a>
+        )
+      }
+    ]
+
+    return (
+      <div>
+        <b style={{ margin: '5px 10px' }}>上报详情:</b>
+        <Table
+          dataSource={dataSource}
+          columns={columns}
+          // size="small"
+        />
+      </div>
+    )
+  }
+}
+
+export default NoteRecord

+ 80 - 0
src/pages/allseeing/report/index.js

@@ -0,0 +1,80 @@
+import React from 'react'
+import { FilterTable } from 'wptpc-design'
+import { thanos } from '@/conf/config'
+import { Divider, Popconfirm } from 'antd'
+import { connect } from 'dva'
+const apiUrl = `${thanos}/thanos-admin/api/v1/classify/list`
+
+@connect(({ user }) => ({
+  currentUser: user.currentUser
+}))
+class ReportList extends React.PureComponent {
+  state = {
+    showModal: false,
+    params: {}
+  }
+
+  filterSetting = {
+    isClearSearch: false,
+    formFields: [
+      {
+      }
+    ],
+    disabled: true
+  }
+
+  // filtertable的列表配置
+  tableSetting = {
+    rowKey: 'id',
+    pagination: {
+      pageSize: 10
+    },
+    columnConfig: [
+      {
+        title: '名称',
+        dataIndex: 'name',
+        render: (text, record) => (
+          <a href={'/fengkong/strategies/bizBind?binds=' + encodeURIComponent(record.bind) + '&name=' + encodeURIComponent(text)}>
+            {text}
+          </a>
+        )
+      },
+      {
+        title: '描述',
+        dataIndex: 'description'
+      },
+      {
+        title: 'operator',
+        dataIndex: 'operator'
+      },
+      {
+        title: '操作',
+        dataIndex: 'actions',
+        // 所有需要弹窗操作的都可以用编辑的逻辑;所有不需要弹窗的操作,比如上架、发布等,都可以用”删除“的逻辑
+        render: (text, record) => (
+          <span>
+            <a onClick={() => this.bindBiz(record)}>绑定</a>
+            <Divider type="vertical"/>
+            <Popconfirm
+              title="确定删除"
+              onConfirm={() => this.deleteBind(record)}>
+              <a>删除</a>
+            </Popconfirm>
+          </span>)
+      }
+    ],
+    getRefresh: refresh => {
+      this.refresh = refresh
+    }
+  }
+
+  render () {
+    return (
+      <div>
+        <FilterTable filterSetting={this.filterSetting} tableSetting={this.tableSetting} apiUrl={apiUrl} />
+      </div>
+    )
+  }
+}
+
+export default ReportList

+ 7 - 0
src/pages/allseeing/report/service.js

@@ -0,0 +1,7 @@
+import { fetchApi } from '@/apis/'
+
+// 创建业务分类
+export async function query (params) {
+  const url = 'http://10.3.7.22:7070/thanos-admin/api/v1/dsl/test'
+  return fetchApi(url, params)
+}

+ 0 - 1
src/pages/fengkong/strategies/add/index.js

@@ -48,7 +48,6 @@ class Add extends React.PureComponent {
           createUser: this.props.currentUser.name, // 创建人
           updateUser: this.props.currentUser.name // 最后修改人
         }).then(res => {
-          console.log(res)
           if (res.code === 0) {
             this.setState({ ...values })
             Modal.success({

+ 15 - 15
src/pages/fengkong/strategies/edit/$name.js

@@ -2,7 +2,7 @@ import React from 'react'
 import { Form, Input, Row, Col, Switch, Button, Modal, message, Select, Icon } from 'antd'
 import { connect } from 'dva'
 import AceEditor from 'react-ace'
-import {detail, test, update, groupList} from '../service'
+import { detail, test, update, groupList } from '../service'
 import { isJSON } from '@/utils/utils'
 
 import 'ace-builds/src-noconflict/mode-java'
@@ -28,11 +28,11 @@ class Add extends React.PureComponent {
     groupList: [],
     group: '',
     features: '',
-    bzEnabled:false,
-    note:''
+    bzEnabled: false,
+    note: ''
   }
 
-  async componentDidMount () {
+  async componentDidMount() {
     await groupList({ pageNum: 999 }).then(res => this.setState({ groupList: res.data.list }))
 
     detail({
@@ -88,7 +88,7 @@ class Add extends React.PureComponent {
     })
   }
 
-  test =(id) => {
+  test = (id) => {
     if (!this.state.name) {
       message.warn('请先提交决策内容!')
       return false
@@ -138,9 +138,9 @@ class Add extends React.PureComponent {
     this.setState({ dos: dos })
   }
 
-  render () {
+  render() {
     const { getFieldDecorator } = this.props.form
-    const { name, description, enabled, content, note} = this.state
+    const { name, description, enabled, content, note } = this.state
     return (
       <div>
         <h1>编辑决策</h1>
@@ -150,7 +150,7 @@ class Add extends React.PureComponent {
               <Form.Item label="决策名称">
                 {getFieldDecorator('name', {
                   initialValue: name
-                })(<Input placeholder="全英文或英文带下划线" disabled={true}/>)}
+                })(<Input placeholder="全英文或英文带下划线" disabled={true} />)}
               </Form.Item>
               <Form.Item label="决策描述">
                 {getFieldDecorator('description', {
@@ -160,11 +160,11 @@ class Add extends React.PureComponent {
               <Form.Item label="决策类型">
                 {getFieldDecorator('type', { initialValue: this.state.type })(
                   <Select placeholder={'请选择类型'} onChange={value => this.setState({ type: value })} disabled={true}>
-                    <Select.Option value= {0}>策略</Select.Option>
-                    <Select.Option value= {1}>流程</Select.Option>
-                    <Select.Option value= {2}>模型</Select.Option>
-                    <Select.Option value= {3}>调度</Select.Option>
-                    <Select.Option value= {4}>规则</Select.Option>
+                    <Select.Option value={0}>策略</Select.Option>
+                    <Select.Option value={1}>流程</Select.Option>
+                    <Select.Option value={2}>模型</Select.Option>
+                    <Select.Option value={3}>调度</Select.Option>
+                    <Select.Option value={4}>规则</Select.Option>
                   </Select>)
                 }
               </Form.Item>
@@ -196,8 +196,8 @@ class Add extends React.PureComponent {
               {this.state.bzEnabled === true && (
                 <Form.Item>
                   {getFieldDecorator('note', {
-                  initialValue: note
-                })(<Input.TextArea placeholder="多行输入" />)}
+                    initialValue: note
+                  })(<Input.TextArea placeholder="多行输入" />)}
                 </Form.Item>
               )}
               {

+ 1 - 0
src/pages/fengkong/strategies/note/$name.js

@@ -22,6 +22,7 @@ class NoteRecord extends React.PureComponent {
         this.setState({ dataSource: res.data })
       } else {
         message.error('处理失败: ' + res.msg)
+        
       }
     })
   }

+ 0 - 1
src/pages/fengkong/strategies/strategies.js

@@ -185,7 +185,6 @@ class GroupList extends React.PureComponent {
       }
     })
   }
-
   // 点击删除按钮时的事件处理函数
   delItem = (record) => {
     delItem({ id: record.id, name: record.name }).then(res => {

+ 2 - 2
src/pages/fengkong/view/self/apply.js

@@ -3,7 +3,7 @@ import { Modal } from 'antd'
 import { FormItem } from 'wptpc-design'
 
 export default class Apply extends Component {
-  render () {
+  render() {
     console.log('props:' + JSON.stringify(this.props))
     const { showModal, params, onChange, onOk, onCancel, fetching } = this.props
     const formSetting = [
@@ -31,7 +31,7 @@ export default class Apply extends Component {
         onCancel={onCancel}
         okButtonProps={{ disabled: fetching }}
       >
-        <FormItem formSetting={formSetting} params={params} onChange={onChange}/>
+        <FormItem formSetting={formSetting} params={params} onChange={onChange} />
       </Modal>
     )
   }

+ 4 - 5
src/pages/fengkong/view/self/self.js

@@ -112,9 +112,9 @@ class SlefList extends React.PureComponent {
                 state: record
               }}
             >编辑</Link>
-            <Divider type="vertical"/>
+            <Divider type="vertical" />
             <a onClick={() => this.apply(record)}>提交审核</a>
-            <Divider type="vertical"/>
+            <Divider type="vertical" />
             <Popconfirm
               title="确定删除"
               onConfirm={() => this.delItem(record)}>
@@ -160,8 +160,7 @@ class SlefList extends React.PureComponent {
     const record = this.state.record
     other(record).then(res => {
       if (res.code === 0) {
-        console.log('数据: ' + JSON.stringify(res))
-        this.writeLog({ name: record.name, reason: reason, modified: modified, effect: effect, state: 0, applyUser: this.props.currentUser.name, rejectReason: '/', reviewUser: '/'})
+        this.writeLog({ name: record.name, reason: reason, modified: modified, effect: effect, state: 0, applyUser: this.props.currentUser.name, rejectReason: '/', reviewUser: '/' })
         message.success('提交审核成功')
         this.refresh()
       }
@@ -182,7 +181,7 @@ class SlefList extends React.PureComponent {
     this.setState({ showAp: false })
   }
 
-  render () {
+  render() {
     const { params, showAp } = this.state
     return (
       <div>

+ 105 - 0
src/pages/openplatform/components/FontManage/index.js

@@ -0,0 +1,105 @@
+import React, { Component } from 'react'
+import { Modal, Button, Checkbox, Spin, message } from 'antd'
+import { connect } from 'dva'
+
+@connect(({ loading }) => ({
+  getLoading: loading.effects['openplatform/_getFields'],
+  upLoading: loading.effects['openplatform/_updateFields']
+}))
+class FontManage extends Component {
+  state = {
+    visible: false,
+    list: []
+  };
+
+  showModal = () => {
+    this.getFields()
+    this.setState({
+      visible: true
+    })
+  };
+
+  handleOk = async () => {
+    const { id } = this.props.record
+    const callbackFields = []
+    this.state.list.map(item => {
+      item.value && callbackFields.push(item.key)
+    })
+
+    if (!callbackFields?.length) {
+      return message.warning('请选择一个字段')
+    }
+    const res = await this.props.dispatch({
+      type: 'openplatform/_updateFields',
+      payload: { id, callbackFields: callbackFields.toLocaleString() }
+    })
+
+    if (res && res.code === 0) {
+      message.success(res.msg)
+    }
+
+    this.setState({
+      visible: false
+    })
+  };
+
+  handleCancel = e => {
+    console.log(e)
+    this.setState({
+      visible: false
+    })
+  };
+
+  getFields = async () => {
+    const { id } = this.props.record
+
+    const res = await this.props.dispatch({
+      type: 'openplatform/_getFields',
+      payload: { id }
+    })
+
+    if (res && res.code === 0) {
+      this.setState({
+        list: res.data
+      })
+    }
+  }
+
+  render() {
+    const { list } = this.state
+
+    const checkChange = (e, i) => {
+      const { list } = this.state
+      const List = [...list]
+      List[i].value = Number(e.target.checked)
+      this.setState({
+        list: List
+      })
+    }
+
+    return (
+      <>
+        <Button type="primary" type="link" onClick={this.showModal}>
+          字段管理
+        </Button>
+        <Modal
+          title="字段管理"
+          visible={this.state.visible}
+          onOk={this.handleOk}
+          onCancel={this.handleCancel}
+          okButtonProps={{ loading: this.props.upLoading }}
+        >
+          <Spin spinning={this.props.getLoading}>
+            {
+              list.map((item, i) => (
+                <Checkbox onChange={(e) => checkChange(e, i)} key={item.key} checked={item.value} value={item.key}>{item.key}</Checkbox>
+              ))
+            }
+          </Spin>
+        </Modal>
+      </>
+    )
+  }
+}
+
+export default FontManage

+ 11 - 0
src/pages/openplatform/datacore/sublist/index.js

@@ -0,0 +1,11 @@
+import React from 'react'
+import { JsonPage } from 'wptpc-design'
+import FontManage from '../../components/FontManage'
+import structure from './structure'
+
+const Index = props => {
+  return (
+    <JsonPage FontManage={FontManage} structure={structure} />
+  )
+}
+export default Index

+ 111 - 0
src/pages/openplatform/datacore/sublist/structure.js

@@ -0,0 +1,111 @@
+import { wop } from '@/conf/config.js'
+
+export default {
+  apiUrl: `${wop}/v1/admin/subscribe/list`,
+  requestFormat: data => {
+    // data.startTime = moment.unix(data.startTime)
+    // data.endTime = moment.unix(data.endTime)
+
+    return data
+  },
+  constParam: {},
+  fetctWhenMount: true,
+  tableSetting: {
+    rowKey: 'id',
+    defaultExpandAllRows: true,
+    bordered: true,
+    columnConfig: [
+      {
+        title: 'ID',
+        dataIndex: 'id'
+      },
+      {
+        title: '订阅ID',
+        dataIndex: 'subId'
+      },
+      {
+        title: '回调参数',
+        dataIndex: 'callbackParams'
+      },
+      {
+        title: '回调地址',
+        dataIndex: 'callbackUrl',
+        textLength: 20
+      },
+      {
+        title: '事件类型',
+        dataIndex: 'eventType'
+      },
+      {
+        title: 'group',
+        dataIndex: 'groupName'
+      },
+      {
+        title: '订阅名称',
+        dataIndex: 'name'
+      },
+      // {
+      //   title: '创建者',
+      //   dataIndex: 'creator'
+      //   // textLength: 40
+      // },
+      // {
+      //   title: '修改者',
+      //   dataIndex: 'naupdaterme'
+      // },
+      {
+        title: '订阅描述',
+        dataIndex: 'remark',
+        textLength: 20
+      },
+      {
+        title: '创建时间',
+        dataIndex: 'createdAt'
+      }
+      // {
+      //   title: '操作',
+      //   dataIndex: 'nickname',
+      //   coloumnRender: [
+      //     {
+      //       type: 'FontManage'
+      //     }
+      //   ]
+      // }
+    ],
+    operateBar: [
+    ]
+  },
+  filterSetting: {
+    formFields: [
+      {
+        label: 'ID:',
+        type: 'input',
+        key: 'id',
+        placeholder: '请输入ID',
+        allowEnterSearch: true
+      },
+      {
+        label: '订阅名称:',
+        type: 'input',
+        key: 'name',
+        placeholder: '请输入订阅名称',
+        allowEnterSearch: true
+      }
+      // {
+      //   label: '创建者:',
+      //   type: 'input',
+      //   key: 'creator',
+      //   placeholder: '请输入创建者',
+      //   allowEnterSearch: true
+      // },
+      // {
+      //   label: '修改者:',
+      //   type: 'input',
+      //   key: 'updater',
+      //   placeholder: '请输入修改者',
+      //   allowEnterSearch: true
+      // }
+    ],
+    hasClearBtn: false
+  }
+}

+ 10 - 0
src/pages/openplatform/devcore/aplist/index.js

@@ -0,0 +1,10 @@
+import React from 'react'
+import { JsonPage } from 'wptpc-design'
+import structure from './structure'
+
+const Index = props => {
+  return (
+    <JsonPage structure={structure} />
+  )
+}
+export default Index

+ 246 - 0
src/pages/openplatform/devcore/aplist/structure.js

@@ -0,0 +1,246 @@
+import { wop } from '@/conf/config.js'
+import { Tag } from 'antd'
+
+export default {
+  apiUrl: `${wop}/v1/admin/developer/app/get`,
+  requestFormat: data => {
+    // data.startTime = moment.unix(data.startTime)
+    // data.endTime = moment.unix(data.endTime)
+
+    return data
+  },
+  constParam: {},
+  fetctWhenMount: true,
+  tableSetting: {
+    rowKey: 'id',
+    defaultExpandAllRows: true,
+    bordered: true,
+    columnConfig: [
+      {
+        title: 'ID',
+        dataIndex: 'id'
+      },
+      {
+        title: '用户标识',
+        dataIndex: 'userInfoId'
+      },
+      {
+        title: 'AppKey',
+        dataIndex: 'appKey'
+      },
+      {
+        title: 'appSecret',
+        dataIndex: 'appSecret',
+        textLength: 20
+
+      },
+      {
+        title: '回调地址',
+        dataIndex: 'callback'
+      },
+      {
+        title: '应用名称',
+        dataIndex: 'name'
+      },
+      {
+        title: '应用描述',
+        dataIndex: 'description',
+        textLength: 20
+      },
+      {
+        title: '状态',
+        dataIndex: 'stateDesc',
+        render: (t, record) => {
+          if (record.state === 1) {
+            return <Tag color='green'>{t}</Tag>
+          } else {
+            return <Tag color='red' >{t}</Tag>
+          }
+        }
+      },
+      {
+        title: '创建时间',
+        dataIndex: 'createdAt'
+      },
+      {
+        title: '操作',
+        dataIndex: 'state',
+        coloumnRender: [
+          {
+            type: 'operatButton',
+            showControl: [
+              {
+                key: 'state',
+                relationship: '=',
+                value: 2
+              }
+            ],
+            props: {
+              buttonType: 'link',
+              buttonText: '审核通过',
+              confirm: true,
+              confirmText: '确认审核吗?',
+              apiUrl: `${wop}/v1/admin/developer/app/check`,
+              params: {
+                cloumnParams: ['id']
+              }
+            }
+          },
+          {
+            type: 'operatButton',
+            showControl: [
+              {
+                key: 'state',
+                relationship: '=',
+                value: 1
+              }
+            ],
+            props: {
+              buttonType: 'link',
+              buttonText: '取消审核',
+              confirm: true,
+              confirmText: '确认取消审核吗?',
+              apiUrl: `${wop}/v1/admin/developer/app/check`,
+              params: {
+                cloumnParams: ['id']
+              }
+            }
+          },
+          {
+            type: 'modalFormButton',
+            props: {
+              buttonType: 'link',
+              buttonText: '编辑',
+              modalTitle: '编辑',
+              modalWidth: 600,
+              apiUrl: `${wop}/v1/admin/developer/app/update`,
+              formFields: [
+                {
+                  type: 'InputNumber',
+                  label: 'ID',
+                  key: 'id',
+                  isRequired: true,
+                  componentProps: {
+                    disabled: true
+                  }
+                },
+                {
+                  type: 'Input',
+                  label: 'appKey',
+                  key: 'appKey',
+                  isRequired: true,
+                  componentProps: {
+                    disabled: true
+                  }
+                },
+                {
+                  type: 'Input',
+                  label: '名称',
+                  key: 'name',
+                  isRequired: true,
+                  componentProps: {
+                    placeholder: '请输入',
+                    maxLength: 20,
+                    minLength: 2
+                  }
+                },
+                {
+                  type: 'Input',
+                  label: '回调地址',
+                  key: 'callback',
+                  isRequired: true,
+                  componentProps: {
+                    placeholder: '请输入',
+                    maxLength: 200,
+                    minLength: 2
+                  }
+                },
+                {
+                  type: 'TextArea',
+                  label: '应用描述',
+                  key: 'description',
+                  isRequired: true,
+                  componentProps: {
+                    placeholder: '请输入',
+                    maxLength: 500,
+                    minLength: 2
+                  }
+                }
+              ],
+              params: {
+                cloumnParams: [
+                  'id'
+                ],
+                formParams: []
+              }
+            }
+          },
+          {
+            type: 'operatButton',
+            props: {
+              buttonType: 'link',
+              buttonText: '删除',
+              confirm: true,
+              confirmText: '确认删除吗?',
+              apiUrl: `${wop}/v1/admin/developer/app/delete`,
+              params: {
+                cloumnParams: ['id']
+              }
+            }
+          }
+        ]
+      }
+    ],
+    operateBar: [
+    ]
+  },
+  filterSetting: {
+    formFields: [
+      {
+        label: '用户标示:',
+        type: 'input',
+        key: 'userInfoId',
+        placeholder: '请输入用户标示',
+        allowEnterSearch: true
+      },
+      {
+        label: 'AppKey:',
+        type: 'input',
+        key: 'appKey',
+        placeholder: '请输入AppKey',
+        allowEnterSearch: true
+      },
+      {
+        label: '应用名称:',
+        type: 'input',
+        key: 'name',
+        placeholder: '请输入应用名称',
+        allowEnterSearch: true
+      },
+      {
+        label: '状态:',
+        type: 'select',
+        option: [
+          {
+            value: '0',
+            label: '全部'
+          },
+          {
+            value: '1',
+            label: '通过'
+          },
+          {
+            value: '2',
+            label: '未通过'
+          }
+        ],
+        styles: {
+          width: 120
+        },
+        key: 'state',
+        defaultValue: '0'
+      }
+    ],
+    hasClearBtn: false
+  }
+}

+ 11 - 0
src/pages/openplatform/devcore/appsublist/index.js

@@ -0,0 +1,11 @@
+import React from 'react'
+import { JsonPage } from 'wptpc-design'
+import FontManage from '../../components/FontManage'
+import structure from './structure'
+
+const Index = props => {
+  return (
+    <JsonPage FontManage={FontManage} structure={structure} />
+  )
+}
+export default Index

+ 251 - 0
src/pages/openplatform/devcore/appsublist/structure.js

@@ -0,0 +1,251 @@
+import { wop } from '@/conf/config.js'
+import { Tag } from 'antd'
+
+export default {
+  apiUrl: `${wop}/v1/admin/developer/subscribe/get`,
+  requestFormat: data => {
+    // data.startTime = moment.unix(data.startTime)
+    // data.endTime = moment.unix(data.endTime)
+    return data
+  },
+  dataFormat: data => {
+    data.data.list.forEach(item => {
+      item.eventType = item.eventType?.split(',')
+    })
+    console.log(data.data.list, 111)
+    return data
+  },
+  constParam: {},
+  fetctWhenMount: true,
+  tableSetting: {
+    rowKey: 'id',
+    defaultExpandAllRows: true,
+    bordered: true,
+    columnConfig: [
+      {
+        title: 'ID',
+        dataIndex: 'id'
+      },
+      {
+        title: '用户标识',
+        dataIndex: 'userInfoId'
+      },
+      {
+        title: 'AppKey',
+        dataIndex: 'appKey'
+      },
+      {
+        title: 'appSecret',
+        dataIndex: 'appSecret',
+        textLength: 20
+
+      },
+      {
+        title: '订阅类目',
+        dataIndex: 'name'
+      },
+      {
+        title: '回调地址',
+        dataIndex: 'callback',
+        textLength: 20
+      },
+      {
+        title: '事件类型',
+        dataIndex: 'eventTypeName'
+      },
+      {
+        title: '状态',
+        dataIndex: 'stateDesc',
+        render: (t, record) => {
+          if (record.state === 1) {
+            return <Tag color='green'>{t}</Tag>
+          } else {
+            return <Tag color='red' >{t}</Tag>
+          }
+        }
+      },
+      {
+        title: '创建时间',
+        dataIndex: 'createdAt'
+      },
+      {
+        title: '操作',
+        dataIndex: 'nickname',
+        coloumnRender: [
+          {
+            type: 'FontManage'
+          },
+          {
+            type: 'operatButton',
+            showControl: [
+              {
+                key: 'state',
+                relationship: '=',
+                value: 2
+              }
+            ],
+            props: {
+              buttonType: 'link',
+              buttonText: '启用',
+              confirm: true,
+              confirmText: '确认改变状态吗?',
+              apiUrl: `${wop}/v1/admin/developer/subscribe/check`,
+              params: {
+                cloumnParams: ['id']
+              }
+            }
+          },
+          {
+            type: 'operatButton',
+            showControl: [
+              {
+                key: 'state',
+                relationship: '=',
+                value: 1
+              }
+            ],
+            props: {
+              buttonType: 'link',
+              buttonText: '禁用',
+              confirm: true,
+              confirmText: '确认改变状态吗?',
+              apiUrl: `${wop}/v1/admin/developer/subscribe/check`,
+              params: {
+                cloumnParams: ['id']
+              }
+            }
+          },
+          {
+            type: 'modalFormButton',
+            props: {
+              buttonType: 'link',
+              buttonText: '编辑',
+              modalTitle: '编辑',
+              modalWidth: 600,
+              apiUrl: `${wop}/v1/admin/developer/subscribe/update`,
+              requestFormat: data => {
+                data.eventType = data.eventType.length ? data.eventType.toLocaleString() : ''
+                console.log(data, 1)
+                return data
+              },
+              formFields: [
+                {
+                  type: 'InputNumber',
+                  label: 'ID',
+                  key: 'id',
+                  isRequired: false,
+                  componentProps: {
+                    disabled: true
+                  }
+                },
+                {
+                  type: 'CheckBox',
+                  label: '事件类型',
+                  key: 'eventType',
+                  isRequired: true,
+                  // defaultValue: null,x
+                  componentProps: {
+                    options: [
+                      {
+                        value: '1',
+                        label: 'insert'
+                      },
+                      {
+                        value: '2',
+                        label: 'update'
+                      },
+                      {
+                        value: '3',
+                        label: 'delete'
+                      }
+                    ]
+                  }
+                },
+                {
+                  type: 'TextArea',
+                  label: '回调地址',
+                  key: 'callback',
+                  isRequired: true,
+                  componentProps: {
+                    placeholder: '请输入',
+                    maxLength: 200,
+                    minLength: 2
+                  }
+                }
+              ],
+              params: {
+                cloumnParams: [
+                ],
+                formParams: []
+              }
+            }
+          },
+          {
+            type: 'operatButton',
+            props: {
+              buttonType: 'link',
+              buttonText: '删除',
+              confirm: true,
+              confirmText: '确认删除吗?',
+              apiUrl: `${wop}/v1/admin/developer/subscribe/delete`,
+              params: {
+                cloumnParams: ['id']
+              }
+            }
+          }
+        ]
+      }
+    ],
+    operateBar: [
+    ]
+  },
+  filterSetting: {
+    formFields: [
+      {
+        label: '用户标识:',
+        type: 'input',
+        key: 'userInfoId',
+        placeholder: '请输入用户标识',
+        allowEnterSearch: true
+      },
+      {
+        label: 'AppKey:',
+        type: 'input',
+        key: 'appKey',
+        placeholder: '请输入AppKey',
+        allowEnterSearch: true
+      },
+      {
+        label: '订阅类目:',
+        type: 'input',
+        key: 'name',
+        placeholder: '请输入订阅类目',
+        allowEnterSearch: true
+      },
+      {
+        label: '状态:',
+        type: 'select',
+        option: [
+          {
+            value: '0',
+            label: '全部'
+          },
+          {
+            value: '1',
+            label: '启用'
+          },
+          {
+            value: '2',
+            label: '未启用'
+          }
+        ],
+        styles: {
+          width: 120
+        },
+        key: 'state',
+        defaultValue: '0'
+      }
+    ],
+    hasClearBtn: false
+  }
+}

+ 10 - 0
src/pages/openplatform/devcore/numlist/index.js

@@ -0,0 +1,10 @@
+import React from 'react'
+import { JsonPage } from 'wptpc-design'
+import structure from './structure'
+
+const Index = props => {
+  return (
+    <JsonPage structure={structure} />
+  )
+}
+export default Index

+ 222 - 0
src/pages/openplatform/devcore/numlist/structure.js

@@ -0,0 +1,222 @@
+import { wop } from '@/conf/config.js'
+import { Tag } from 'antd'
+
+export default {
+  apiUrl: `${wop}/v1/admin/developer/account/get`,
+  requestFormat: data => {
+    // data.startTime = moment.unix(data.startTime)
+    // data.endTime = moment.unix(data.endTime)
+
+    return data
+  },
+  constParam: {},
+  fetctWhenMount: true,
+  tableSetting: {
+    rowKey: 'id',
+    defaultExpandAllRows: true,
+    bordered: true,
+    columnConfig: [
+      {
+        title: 'ID',
+        dataIndex: 'id'
+      },
+      {
+        title: '用户标识',
+        dataIndex: 'userInfoId'
+      },
+      {
+        title: '手机号',
+        dataIndex: 'phone'
+      },
+      {
+        title: '邮箱',
+        dataIndex: 'email'
+        // textLength: 40
+      },
+      {
+        title: '类型',
+        dataIndex: 'type',
+        render: (t) =>
+          (Number(t) === 1 ? '个人' : '商家')
+
+      },
+      {
+        title: '状态',
+        dataIndex: 'stateDesc',
+        render: (t, record) => {
+          if (record.state === 1) {
+            return <Tag color='green'>{t}</Tag>
+          } else {
+            return <Tag color='red' >{t}</Tag>
+          }
+        }
+      },
+      {
+        title: '创建时间',
+        dataIndex: 'createdAt'
+      },
+      {
+        title: '操作',
+        dataIndex: 'nickname',
+        coloumnRender: [
+          {
+            type: 'operatButton',
+            props: {
+              buttonType: 'link',
+              buttonText: '删除',
+              confirm: true,
+              confirmText: '确认删除吗?',
+              apiUrl: `${wop}/v1/admin/developer/account/delete`,
+              params: {
+                cloumnParams: ['userInfoId']
+              }
+            }
+          },
+          {
+            type: 'operatButton',
+            showControl: [
+              {
+                key: 'state',
+                relationship: '=',
+                value: 2
+              }
+            ],
+            props: {
+              buttonType: 'link',
+              buttonText: '启用',
+              confirm: true,
+              confirmText: '确认改变状态吗?',
+              apiUrl: `${wop}/v1/admin/developer/account/disable-enable`,
+              params: {
+                cloumnParams: ['userInfoId']
+              }
+            }
+          },
+          {
+            type: 'operatButton',
+            showControl: [
+              {
+                key: 'state',
+                relationship: '=',
+                value: 1
+              }
+            ],
+            props: {
+              buttonType: 'link',
+              buttonText: '禁用',
+              confirm: true,
+              confirmText: '确认改变状态吗?',
+              apiUrl: `${wop}/v1/admin/developer/account/disable-enable`,
+              params: {
+                cloumnParams: ['userInfoId']
+              }
+            }
+          },
+          {
+            type: 'modalFormButton',
+            props: {
+              buttonType: 'link',
+              buttonText: '编辑',
+              modalTitle: '编辑',
+              modalWidth: 600,
+              apiUrl: `${wop}/v1/admin/developer/account/update`,
+              formFields: [
+                {
+                  type: 'Input',
+                  label: '用户标识',
+                  key: 'name',
+                  isRequired: true,
+                  componentProps: {
+                    disabled: true,
+                    placeholder: '请输入',
+                    maxLength: 20,
+                    minLength: 2
+                  }
+                },
+                {
+                  type: 'Input',
+                  label: '手机号',
+                  key: 'phone',
+                  isRequired: true,
+                  componentProps: {
+                    placeholder: '请输入',
+                    maxLength: 11,
+                    minLength: 2
+                  }
+                },
+                {
+                  type: 'Input',
+                  label: '邮箱',
+                  key: 'email',
+                  isRequired: false,
+                  componentProps: {
+                    placeholder: '请输入'
+                  }
+                },
+                {
+                  type: 'TextArea',
+                  label: '地址',
+                  key: 'address',
+                  isRequired: false,
+                  componentProps: {
+                    placeholder: '请输入'
+                  }
+                }
+              ],
+              params: {
+                cloumnParams: [
+                  'id'
+                ],
+                formParams: []
+              }
+            }
+          }
+        ]
+      }
+    ],
+    operateBar: [
+    ]
+  },
+  filterSetting: {
+    formFields: [
+      {
+        label: '用户标示:',
+        type: 'input',
+        key: 'userInfoId',
+        placeholder: '请输入用户标示',
+        allowEnterSearch: true
+      },
+      {
+        label: '手机号:',
+        type: 'input',
+        key: 'phone',
+        placeholder: '请输入手机号',
+        allowEnterSearch: true
+      },
+      {
+        label: '状态:',
+        type: 'select',
+        option: [
+          {
+            value: '0',
+            label: '全部'
+          },
+          {
+            value: '1',
+            label: '启用'
+          },
+          {
+            value: '2',
+            label: '禁用'
+          }
+        ],
+        styles: {
+          width: 120
+        },
+        key: 'state',
+        defaultValue: '0'
+      }
+    ],
+    hasClearBtn: false
+  }
+}

+ 19 - 0
src/pages/openplatform/model.js

@@ -0,0 +1,19 @@
+import {
+  getFields,
+  updateFields
+} from './service'
+
+export default {
+  namespace: 'openplatform',
+  state: {},
+  effects: {
+    * _getFields({ payload }, { call }) {
+      return yield call(getFields, payload)
+    },
+    * _updateFields({ payload }, { call }) {
+      return yield call(updateFields, payload)
+    }
+
+  },
+  reducers: {}
+}

+ 14 - 0
src/pages/openplatform/service.js

@@ -0,0 +1,14 @@
+import { fetchApi } from '@/apis/'
+import { wop } from '@/conf/config'
+
+// 查看-根据id获取应用订阅的返回字段
+export async function getFields(params) {
+  const url = `${wop}/v1/admin/developer/subscribe/get-fields`
+  return fetchApi(url, params)
+}
+
+// 操作-根据id修改应用订阅返回字段
+export async function updateFields(params) {
+  const url = `${wop}/v1/admin/developer/subscribe/update-fields`
+  return fetchApi(url, params)
+}

+ 11 - 39
src/pages/poster/edit/$id$.js

@@ -58,7 +58,7 @@ export default class Edit extends React.PureComponent {
     const _ele = this.state.element.slice()
     const _tar = _ele[index]  // dom
     // console.log(_tar,value);
-    _ele[index] = { 
+    _ele[index] = {
       ..._tar ,
       ...value
     }
@@ -257,39 +257,13 @@ export default class Edit extends React.PureComponent {
                   if (item.type === 'text') {
                     return (
                       <Rnd
-                        // disableDragging={item.fixed}
-                        size={{
-                          width: Number.parseFloat(item.width),
-                          height: Number.parseFloat(item.height)
-                        }}
+                        disableDragging={item.fixed}
+                        size={{ width: Number.parseFloat(item.weight), height: Number.parseFloat(item.height) }}
                         position={{ x: item.dx, y: item.dy - item.size }}
-                        onDragStop={(e, d) => {
-                          this.updateElement(index, {
-                            dx: d.x,
-                            dy: d.y + item.size
-                          });
-                        }}
-                        onResizeStop={(e, direction, ref, delta, position) => {
-                          // 单击、双击文字框 出现白屏
-                          switch (direction) {
-                            case "left":
-                              this.updateElement(index, {
-                                dx: position.x
-                              });
-                              break;
-                            case "top":
-                              this.updateElement(index, {
-                                dy: item.dy - delta.height
-                              });
-                              break;
-                          }
-                          if (ref.style.width && ref.style.height)
-                            this.updateElement(index, {
-                              width: Number.parseFloat(ref.style.width || 0),
-                              height: Number.parseFloat(ref.style.height || 0),
-                              // ...position
-                            });
-                        }}
+                        onDragStop={(e, d) => { this.updateElement(index, { dx: d.x, dy: d.y + item.size }) }}
+                        onResizeStop={(e, direction, ref, delta, position) => { // 单击、双击文字框 出现白屏
+                         if (ref.style.width && ref.style.height)this.updateElement(index, { width: Number.parseFloat(ref.style.width||0), height: Number.parseFloat(ref.style.height||0), ...position })
+                       }}
                         bounds="parent"
                         className={
                           activeObjectIndex === index ? styles.outline : ""
@@ -306,18 +280,16 @@ export default class Edit extends React.PureComponent {
                           style={{
                             WebkitLineClamp: clampLine,
                             // width: item.float_x === 'center' ? (Number.parseFloat(bgWidth) - Number.parseFloat(item.dx)) + 'px' : (Number.parseFloat(item.width) || 'auto'),
-                            width: Number.parseFloat(item.width) || "auto",
-                            height: Number.parseFloat(item.height) || "auto",
+                            width: Number.parseFloat(item.width) || 'auto',
+                            height: Number.parseFloat(item.height) || 'auto',
                             fontFamily: item.font,
                             fontSize: item.size,
                             color: item.c,
                             opacity: item.opacity,
-                            position: "relative",
+                            position: 'relative',
                             textAlign: item.float_x,
                             writingMode: item.vertical && "vertical-lr",
-                            display:
-                              (item.vertical && "inline-block") ||
-                              (item.float_x === "center" && "inline-block")
+                            display: item.vertical&& "inline-block" || item.float_x === 'center' && "inline-block",
                             // left: (Number.parseFloat(bgWidth) - Number.parseFloat(item.dx) - Number.parseFloat(item.width)) / 2 + 'px'
                           }}
                         >

+ 333 - 44
yarn.lock

@@ -329,13 +329,6 @@
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-module-imports@^7.10.1":
-  version "7.10.1"
-  resolved "http://npm.wpt.la/@babel%2fhelper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876"
-  integrity sha1-3TMb1FvMxWbOdwBOnQX+F63ROHY=
-  dependencies:
-    "@babel/types" "^7.10.1"
-
 "@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
   version "7.5.5"
   resolved "http://npm.wpt.la/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
@@ -367,11 +360,6 @@
   resolved "http://npm.wpt.la/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
   integrity sha1-u7P77phmHFaQNCN8wDlnupm08lA=
 
-"@babel/helper-plugin-utils@^7.10.1":
-  version "7.10.1"
-  resolved "http://npm.wpt.la/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127"
-  integrity sha1-7Fpc8O7JJbZsYFgDKLEiwBIwoSc=
-
 "@babel/helper-plugin-utils@^7.8.3":
   version "7.8.3"
   resolved "http://npm.wpt.la/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
@@ -444,11 +432,6 @@
   dependencies:
     "@babel/types" "^7.8.3"
 
-"@babel/helper-validator-identifier@^7.10.1":
-  version "7.10.1"
-  resolved "http://npm.wpt.la/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5"
-  integrity sha1-V3CwwagmxPU/Xt5eFTFj4DGOlLU=
-
 "@babel/helper-wrap-function@^7.1.0":
   version "7.2.0"
   resolved "http://npm.wpt.la/@babel%2fhelper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
@@ -1077,16 +1060,6 @@
     resolve "^1.8.1"
     semver "^5.5.1"
 
-"@babel/plugin-transform-runtime@^7.9.6":
-  version "7.10.1"
-  resolved "http://npm.wpt.la/@babel%2fplugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz#fd1887f749637fb2ed86dc278e79eb41df37f4b1"
-  integrity sha1-/RiH90ljf7LthtwnjnnrQd839LE=
-  dependencies:
-    "@babel/helper-module-imports" "^7.10.1"
-    "@babel/helper-plugin-utils" "^7.10.1"
-    resolve "^1.8.1"
-    semver "^5.5.1"
-
 "@babel/plugin-transform-shorthand-properties@^7.2.0":
   version "7.2.0"
   resolved "http://npm.wpt.la/@babel%2fplugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
@@ -1527,15 +1500,6 @@
     lodash "^4.17.13"
     to-fast-properties "^2.0.0"
 
-"@babel/types@^7.10.1":
-  version "7.10.2"
-  resolved "http://npm.wpt.la/@babel%2ftypes/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d"
-  integrity sha1-MCg74xytDb9vsAvUBkHKDqZ1Fy0=
-  dependencies:
-    "@babel/helper-validator-identifier" "^7.10.1"
-    lodash "^4.17.13"
-    to-fast-properties "^2.0.0"
-
 "@babel/types@^7.8.3":
   version "7.8.3"
   resolved "http://npm.wpt.la/@babel%2ftypes/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
@@ -2792,7 +2756,7 @@ antd-mobile@2.x:
     rmc-tabs "~1.2.0"
     rmc-tooltip "~1.0.0"
 
-antd@3.x, antd@^3.23.4:
+antd@3.x:
   version "3.23.6"
   resolved "http://npm.wpt.la/antd/-/antd-3.23.6.tgz#527733b423a23428d08d8e37a9fca60b6aec1651"
   integrity sha1-UncztCOiNCjQjY43qfymC2rsFlE=
@@ -2851,6 +2815,66 @@ antd@3.x, antd@^3.23.4:
     shallowequal "^1.1.0"
     warning "~4.0.3"
 
+antd@^3.26.18:
+  version "3.26.18"
+  resolved "http://npm.wpt.la/antd/-/antd-3.26.18.tgz#541e26a6865dd20e5d192027c45599b963146e67"
+  integrity sha1-VB4mpoZd0g5dGSAnxFWZuWMUbmc=
+  dependencies:
+    "@ant-design/create-react-context" "^0.2.4"
+    "@ant-design/icons" "~2.1.1"
+    "@ant-design/icons-react" "~2.0.1"
+    "@types/react-slick" "^0.23.4"
+    array-tree-filter "^2.1.0"
+    babel-runtime "6.x"
+    classnames "~2.2.6"
+    copy-to-clipboard "^3.2.0"
+    css-animation "^1.5.0"
+    dom-closest "^0.2.0"
+    enquire.js "^2.1.6"
+    is-mobile "^2.1.0"
+    lodash "^4.17.13"
+    moment "^2.24.0"
+    omit.js "^1.0.2"
+    prop-types "^15.7.2"
+    raf "^3.4.1"
+    rc-animate "^2.10.2"
+    rc-calendar "~9.15.7"
+    rc-cascader "~0.17.4"
+    rc-checkbox "~2.1.6"
+    rc-collapse "~1.11.3"
+    rc-dialog "~7.6.0"
+    rc-drawer "~3.1.1"
+    rc-dropdown "~2.4.1"
+    rc-editor-mention "^1.1.13"
+    rc-form "^2.4.10"
+    rc-input-number "~4.5.0"
+    rc-mentions "~0.4.0"
+    rc-menu "~7.5.1"
+    rc-notification "~3.3.1"
+    rc-pagination "~1.20.11"
+    rc-progress "~2.5.0"
+    rc-rate "~2.5.0"
+    rc-resize-observer "^0.1.0"
+    rc-select "~9.2.0"
+    rc-slider "~8.7.1"
+    rc-steps "~3.5.0"
+    rc-switch "~1.9.0"
+    rc-table "~6.10.5"
+    rc-tabs "~9.7.0"
+    rc-time-picker "~3.7.1"
+    rc-tooltip "~3.7.3"
+    rc-tree "~2.1.0"
+    rc-tree-select "~2.9.1"
+    rc-trigger "^2.6.2"
+    rc-upload "~2.9.1"
+    rc-util "^4.16.1"
+    react-lazy-load "^3.0.13"
+    react-lifecycles-compat "^3.0.4"
+    react-slick "~0.25.2"
+    resize-observer-polyfill "^1.5.1"
+    shallowequal "^1.1.0"
+    warning "~4.0.3"
+
 any-observable@^0.3.0:
   version "0.3.0"
   resolved "http://npm.wpt.la/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
@@ -3526,6 +3550,11 @@ balanced-match@^1.0.0:
   resolved "http://npm.wpt.la/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
   integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
 
+base16@^1.0.0:
+  version "1.0.0"
+  resolved "http://npm.wpt.la/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70"
+  integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=
+
 base64-js@^1.0.2:
   version "1.3.1"
   resolved "http://npm.wpt.la/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
@@ -6961,7 +6990,14 @@ fb-watchman@^2.0.0:
   dependencies:
     bser "^2.0.0"
 
-fbjs@^0.8.1, fbjs@^0.8.15, fbjs@^0.8.16, fbjs@^0.8.3, fbjs@^0.8.9:
+fbemitter@^2.0.0:
+  version "2.1.1"
+  resolved "http://npm.wpt.la/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865"
+  integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=
+  dependencies:
+    fbjs "^0.8.4"
+
+fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.15, fbjs@^0.8.16, fbjs@^0.8.3, fbjs@^0.8.4, fbjs@^0.8.9:
   version "0.8.17"
   resolved "http://npm.wpt.la/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
   integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
@@ -7170,6 +7206,14 @@ flush-write-stream@^1.0.0:
     inherits "^2.0.3"
     readable-stream "^2.3.6"
 
+flux@^3.1.3:
+  version "3.1.3"
+  resolved "http://npm.wpt.la/flux/-/flux-3.1.3.tgz#d23bed515a79a22d933ab53ab4ada19d05b2f08a"
+  integrity sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=
+  dependencies:
+    fbemitter "^2.0.0"
+    fbjs "^0.8.0"
+
 follow-redirects@1.5.10:
   version "1.5.10"
   resolved "http://npm.wpt.la/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
@@ -8762,6 +8806,11 @@ is-mobile@2.1.0:
   resolved "http://npm.wpt.la/is-mobile/-/is-mobile-2.1.0.tgz#4c0cab72f3358dd9986007389b30729fae80da0b"
   integrity sha1-TAyrcvM1jdmYYAc4mzByn66A2gs=
 
+is-mobile@^2.1.0:
+  version "2.2.2"
+  resolved "http://npm.wpt.la/is-mobile/-/is-mobile-2.2.2.tgz#f6c9c5d50ee01254ce05e739bdd835f1ed4e9954"
+  integrity sha1-9snF1Q7gElTOBec5vdg18e1OmVQ=
+
 is-npm@^3.0.0:
   version "3.0.0"
   resolved "http://npm.wpt.la/is-npm/-/is-npm-3.0.0.tgz#ec9147bfb629c43f494cf67936a961edec7e8053"
@@ -10076,6 +10125,11 @@ lodash.clonedeep@^4.5.0:
   resolved "http://npm.wpt.la/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
   integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
 
+lodash.curry@^4.0.1:
+  version "4.1.1"
+  resolved "http://npm.wpt.la/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170"
+  integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA=
+
 lodash.debounce@^4.0.0, lodash.debounce@^4.0.8:
   version "4.0.8"
   resolved "http://npm.wpt.la/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -10096,6 +10150,11 @@ lodash.flattendeep@^4.4.0:
   resolved "http://npm.wpt.la/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
   integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=
 
+lodash.flow@^3.3.0:
+  version "3.5.0"
+  resolved "http://npm.wpt.la/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a"
+  integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=
+
 lodash.get@^4.4.2:
   version "4.4.2"
   resolved "http://npm.wpt.la/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
@@ -10647,6 +10706,14 @@ mini-create-react-context@^0.3.0:
     gud "^1.0.0"
     tiny-warning "^1.0.2"
 
+mini-create-react-context@^0.4.0:
+  version "0.4.0"
+  resolved "http://npm.wpt.la/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040"
+  integrity sha1-32BQHIMVHbaeKOrA7wi0AC76sEA=
+  dependencies:
+    "@babel/runtime" "^7.5.5"
+    tiny-warning "^1.0.3"
+
 mini-css-extract-plugin@0.5.0:
   version "0.5.0"
   resolved "http://npm.wpt.la/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
@@ -12999,6 +13066,11 @@ punycode@^1.2.4, punycode@^1.4.1:
   resolved "http://npm.wpt.la/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
   integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
 
+pure-color@^1.2.0:
+  version "1.3.0"
+  resolved "http://npm.wpt.la/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e"
+  integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=
+
 q@^1.1.2:
   version "1.5.1"
   resolved "http://npm.wpt.la/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -13019,6 +13091,11 @@ qs@^6.5.1:
   resolved "http://npm.wpt.la/qs/-/qs-6.9.0.tgz#d1297e2a049c53119cb49cca366adbbacc80b409"
   integrity sha1-0Sl+KgScUxGctJzKNmrbusyAtAk=
 
+qs@^6.9.4:
+  version "6.9.4"
+  resolved "http://npm.wpt.la/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687"
+  integrity sha1-kJCykNH5FyjTwi5UhDykSupatoc=
+
 qs@~6.5.2:
   version "6.5.2"
   resolved "http://npm.wpt.la/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
@@ -13141,6 +13218,19 @@ rc-animate@2.x, rc-animate@^2.3.0, rc-animate@^2.4.4, rc-animate@^2.6.0, rc-anim
     rc-util "^4.8.0"
     react-lifecycles-compat "^3.0.4"
 
+rc-animate@^2.10.1, rc-animate@^2.10.2:
+  version "2.11.1"
+  resolved "http://npm.wpt.la/rc-animate/-/rc-animate-2.11.1.tgz#2666eeb6f1f2a495a13b2af09e236712278fdb2c"
+  integrity sha1-JmbutvHypJWhOyrwniNnEieP2yw=
+  dependencies:
+    babel-runtime "6.x"
+    classnames "^2.2.6"
+    css-animation "^1.3.2"
+    prop-types "15.x"
+    raf "^3.4.0"
+    rc-util "^4.15.3"
+    react-lifecycles-compat "^3.0.4"
+
 rc-animate@^3.0.0-rc.1:
   version "3.0.0-rc.6"
   resolved "http://npm.wpt.la/rc-animate/-/rc-animate-3.0.0-rc.6.tgz#04288eefa118e0cae214536c8a903ffaac1bc3fb"
@@ -13168,6 +13258,19 @@ rc-calendar@~9.15.5:
     rc-util "^4.1.1"
     react-lifecycles-compat "^3.0.4"
 
+rc-calendar@~9.15.7:
+  version "9.15.11"
+  resolved "http://npm.wpt.la/rc-calendar/-/rc-calendar-9.15.11.tgz#ce1e5ea8e4d77435be66a8c77db12f1f0f9a345f"
+  integrity sha1-zh5eqOTXdDW+ZqjHfbEvHw+aNF8=
+  dependencies:
+    babel-runtime "6.x"
+    classnames "2.x"
+    moment "2.x"
+    prop-types "^15.5.8"
+    rc-trigger "^2.2.0"
+    rc-util "^4.1.1"
+    react-lifecycles-compat "^3.0.4"
+
 rc-cascader@~0.17.4:
   version "0.17.5"
   resolved "http://npm.wpt.la/rc-cascader/-/rc-cascader-0.17.5.tgz#4fde91d23b7608c420263c38eee9c0687f80f7dc"
@@ -13244,6 +13347,15 @@ rc-dialog@~7.5.2:
     rc-animate "2.x"
     rc-util "^4.8.1"
 
+rc-dialog@~7.6.0:
+  version "7.6.1"
+  resolved "http://npm.wpt.la/rc-dialog/-/rc-dialog-7.6.1.tgz#11545ccc0b945934fa76079726e0d853e52d705f"
+  integrity sha1-EVRczAuUWTT6dgeXJuDYU+UtcF8=
+  dependencies:
+    babel-runtime "6.x"
+    rc-animate "2.x"
+    rc-util "^4.16.1"
+
 rc-drawer@~2.0.1:
   version "2.0.9"
   resolved "http://npm.wpt.la/rc-drawer/-/rc-drawer-2.0.9.tgz#d1d07b74416b50d22082b5886ec061be2b2b15fc"
@@ -13254,6 +13366,15 @@ rc-drawer@~2.0.1:
     rc-util "^4.7.0"
     react-lifecycles-compat "^3.0.4"
 
+rc-drawer@~3.1.1:
+  version "3.1.3"
+  resolved "http://npm.wpt.la/rc-drawer/-/rc-drawer-3.1.3.tgz#cbcb04d4c07f0b66f2ece11d847f4a1bd80ea0b7"
+  integrity sha1-y8sE1MB/C2by7OEdhH9KG9gOoLc=
+  dependencies:
+    classnames "^2.2.6"
+    rc-util "^4.16.1"
+    react-lifecycles-compat "^3.0.4"
+
 rc-dropdown@~2.4.1:
   version "2.4.1"
   resolved "http://npm.wpt.la/rc-dropdown/-/rc-dropdown-2.4.1.tgz#aaef6eb3a5152cdd9982895c2a78d9b5f046cdec"
@@ -13292,6 +13413,20 @@ rc-editor-mention@^1.1.13:
     rc-animate "^2.3.0"
     rc-editor-core "~0.8.3"
 
+rc-form@^2.4.10:
+  version "2.4.11"
+  resolved "http://npm.wpt.la/rc-form/-/rc-form-2.4.11.tgz#61ee3ae579259684ae30f2c48f55f0f23a5d3d08"
+  integrity sha1-Ye465XklloSuMPLEj1Xw8jpdPQg=
+  dependencies:
+    async-validator "~1.11.3"
+    babel-runtime "6.x"
+    create-react-class "^15.5.3"
+    dom-scroll-into-view "1.x"
+    hoist-non-react-statics "^3.3.0"
+    lodash "^4.17.4"
+    rc-util "^4.15.3"
+    warning "^4.0.3"
+
 rc-form@^2.4.5:
   version "2.4.9"
   resolved "http://npm.wpt.la/rc-form/-/rc-form-2.4.9.tgz#6884b06bbd8d6a934e5f2aa27e8730882c70840c"
@@ -13361,6 +13496,21 @@ rc-menu@^7.3.0, rc-menu@^7.4.22, rc-menu@~7.4.23:
     rc-util "^4.1.0"
     resize-observer-polyfill "^1.5.0"
 
+rc-menu@~7.5.1:
+  version "7.5.5"
+  resolved "http://npm.wpt.la/rc-menu/-/rc-menu-7.5.5.tgz#78cdc817d86fc353a1430b864d3d96c7489600ca"
+  integrity sha1-eM3IF9hvw1OhQwuGTT2Wx0iWAMo=
+  dependencies:
+    classnames "2.x"
+    dom-scroll-into-view "1.x"
+    mini-store "^2.0.0"
+    mutationobserver-shim "^0.3.2"
+    rc-animate "^2.10.1"
+    rc-trigger "^2.3.0"
+    rc-util "^4.13.0"
+    resize-observer-polyfill "^1.5.0"
+    shallowequal "^1.1.0"
+
 rc-notification@~3.3.1:
   version "3.3.1"
   resolved "http://npm.wpt.la/rc-notification/-/rc-notification-3.3.1.tgz#0baa3e70f8d40ab015ce8fa78c260c490fc7beb4"
@@ -13372,6 +13522,16 @@ rc-notification@~3.3.1:
     rc-animate "2.x"
     rc-util "^4.0.4"
 
+rc-pagination@~1.20.11:
+  version "1.20.15"
+  resolved "http://npm.wpt.la/rc-pagination/-/rc-pagination-1.20.15.tgz#ccb4cd0e9bd4e47f72f29ea432c0350bf7b3d807"
+  integrity sha1-zLTNDpvU5H9y8p6kMsA1C/ez2Ac=
+  dependencies:
+    babel-runtime "6.x"
+    classnames "^2.2.6"
+    prop-types "^15.5.7"
+    react-lifecycles-compat "^3.0.4"
+
 rc-pagination@~1.20.5:
   version "1.20.9"
   resolved "http://npm.wpt.la/rc-pagination/-/rc-pagination-1.20.9.tgz#891c5f33b4199c6e0f3616d0656c30fc7f4b726c"
@@ -13453,6 +13613,20 @@ rc-slider@~8.6.11:
     shallowequal "^1.0.1"
     warning "^4.0.3"
 
+rc-slider@~8.7.1:
+  version "8.7.1"
+  resolved "http://npm.wpt.la/rc-slider/-/rc-slider-8.7.1.tgz#9ed07362dc93489a38e654b21b8122ad70fd3c42"
+  integrity sha1-ntBzYtyTSJo45lSyG4EirXD9PEI=
+  dependencies:
+    babel-runtime "6.x"
+    classnames "^2.2.5"
+    prop-types "^15.5.4"
+    rc-tooltip "^3.7.0"
+    rc-util "^4.0.4"
+    react-lifecycles-compat "^3.0.4"
+    shallowequal "^1.1.0"
+    warning "^4.0.3"
+
 rc-steps@~3.5.0:
   version "3.5.0"
   resolved "http://npm.wpt.la/rc-steps/-/rc-steps-3.5.0.tgz#36b2a7f1f49907b0d90363884b18623caf9fb600"
@@ -13482,6 +13656,20 @@ rc-switch@~1.9.0:
     prop-types "^15.5.6"
     react-lifecycles-compat "^3.0.4"
 
+rc-table@~6.10.5:
+  version "6.10.15"
+  resolved "http://npm.wpt.la/rc-table/-/rc-table-6.10.15.tgz#181f4c70c4fd74f657ee8f23196e7eb08a0365ca"
+  integrity sha1-GB9McMT9dPZX7o8jGW5+sIoDZco=
+  dependencies:
+    classnames "^2.2.5"
+    component-classes "^1.2.6"
+    lodash "^4.17.5"
+    mini-store "^2.0.0"
+    prop-types "^15.5.8"
+    rc-util "^4.13.0"
+    react-lifecycles-compat "^3.0.2"
+    shallowequal "^1.0.2"
+
 rc-table@~6.7.0:
   version "6.7.0"
   resolved "http://npm.wpt.la/rc-table/-/rc-table-6.7.0.tgz#8aca002f84a43a2d51a4fcda0f7a51694154286d"
@@ -13515,6 +13703,23 @@ rc-tabs@~9.6.4:
     resize-observer-polyfill "^1.5.1"
     warning "^4.0.3"
 
+rc-tabs@~9.7.0:
+  version "9.7.0"
+  resolved "http://npm.wpt.la/rc-tabs/-/rc-tabs-9.7.0.tgz#ae09695bef5963d6e64e7bc10521c76dfdd8448b"
+  integrity sha1-rglpW+9ZY9bmTnvBBSHHbf3YRIs=
+  dependencies:
+    "@ant-design/create-react-context" "^0.2.4"
+    babel-runtime "6.x"
+    classnames "2.x"
+    lodash "^4.17.5"
+    prop-types "15.x"
+    raf "^3.4.1"
+    rc-hammerjs "~0.6.0"
+    rc-util "^4.0.4"
+    react-lifecycles-compat "^3.0.4"
+    resize-observer-polyfill "^1.5.1"
+    warning "^4.0.3"
+
 rc-time-picker@~3.7.1:
   version "3.7.2"
   resolved "http://npm.wpt.la/rc-time-picker/-/rc-time-picker-3.7.2.tgz#fabe5501adf1374d31a2d3b47f1ba89fc2dc2467"
@@ -13627,6 +13832,16 @@ rc-upload@~2.7.0:
     prop-types "^15.5.7"
     warning "4.x"
 
+rc-upload@~2.9.1:
+  version "2.9.4"
+  resolved "http://npm.wpt.la/rc-upload/-/rc-upload-2.9.4.tgz#8e34a73a468d7907fe31982c38100e4593857d32"
+  integrity sha1-jjSnOkaNeQf+MZgsOBAORZOFfTI=
+  dependencies:
+    babel-runtime "6.x"
+    classnames "^2.2.5"
+    prop-types "^15.5.7"
+    warning "4.x"
+
 rc-util@4.x, rc-util@^4.0.2, rc-util@^4.0.4, rc-util@^4.1.0, rc-util@^4.1.1, rc-util@^4.10.0, rc-util@^4.11.1, rc-util@^4.3.0, rc-util@^4.4.0, rc-util@^4.5.0, rc-util@^4.5.1, rc-util@^4.6.0, rc-util@^4.7.0, rc-util@^4.8.0, rc-util@^4.8.1:
   version "4.13.0"
   resolved "http://npm.wpt.la/rc-util/-/rc-util-4.13.0.tgz#75682e50a934e7d32ada7ee48fc9f5b20fc0143f"
@@ -13638,6 +13853,17 @@ rc-util@4.x, rc-util@^4.0.2, rc-util@^4.0.4, rc-util@^4.1.0, rc-util@^4.1.1, rc-
     react-lifecycles-compat "^3.0.4"
     shallowequal "^0.2.2"
 
+rc-util@^4.13.0, rc-util@^4.15.3, rc-util@^4.16.1:
+  version "4.21.1"
+  resolved "http://npm.wpt.la/rc-util/-/rc-util-4.21.1.tgz#88602d0c3185020aa1053d9a1e70eac161becb05"
+  integrity sha1-iGAtDDGFAgqhBT2aHnDqwWG+ywU=
+  dependencies:
+    add-dom-event-listener "^1.1.0"
+    prop-types "^15.5.10"
+    react-is "^16.12.0"
+    react-lifecycles-compat "^3.0.4"
+    shallowequal "^1.1.0"
+
 rc@^1.2.7, rc@^1.2.8:
   version "1.2.8"
   resolved "http://npm.wpt.la/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
@@ -13678,6 +13904,16 @@ react-app-polyfill@^1.0.2:
     regenerator-runtime "0.13.3"
     whatwg-fetch "3.0.0"
 
+react-base16-styling@^0.6.0:
+  version "0.6.0"
+  resolved "http://npm.wpt.la/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c"
+  integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=
+  dependencies:
+    base16 "^1.0.0"
+    lodash.curry "^4.0.1"
+    lodash.flow "^3.3.0"
+    pure-color "^1.2.0"
+
 react-copy-to-clipboard@^5.0.2:
   version "5.0.2"
   resolved "http://npm.wpt.la/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz#d82a437e081e68dfca3761fbd57dbf2abdda1316"
@@ -13817,11 +14053,26 @@ react-intl@2.7.2:
     intl-relativeformat "^2.1.0"
     invariant "^2.1.1"
 
+react-is@^16.12.0:
+  version "16.13.1"
+  resolved "http://npm.wpt.la/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+  integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ=
+
 react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
   version "16.10.2"
   resolved "http://npm.wpt.la/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab"
   integrity sha1-mEEg/U0WgA6ac4IIqx+6Qi0jtas=
 
+react-json-view@^1.19.1:
+  version "1.19.1"
+  resolved "http://npm.wpt.la/react-json-view/-/react-json-view-1.19.1.tgz#95d8e59e024f08a25e5dc8f076ae304eed97cf5c"
+  integrity sha1-ldjlngJPCKJeXcjwdq4wTu2Xz1w=
+  dependencies:
+    flux "^3.1.3"
+    react-base16-styling "^0.6.0"
+    react-lifecycles-compat "^3.0.4"
+    react-textarea-autosize "^6.1.0"
+
 react-lazy-load@^3.0.13:
   version "3.0.13"
   resolved "http://npm.wpt.la/react-lazy-load/-/react-lazy-load-3.0.13.tgz#3b0a92d336d43d3f0d73cbe6f35b17050b08b824"
@@ -13931,6 +14182,19 @@ react-router-dom@^5.1.2:
     tiny-invariant "^1.0.2"
     tiny-warning "^1.0.0"
 
+react-router-dom@^5.2.0:
+  version "5.2.0"
+  resolved "http://npm.wpt.la/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662"
+  integrity sha1-nmWk0MReEyieZsexfH4XXQ6hVmI=
+  dependencies:
+    "@babel/runtime" "^7.1.2"
+    history "^4.9.0"
+    loose-envify "^1.3.1"
+    prop-types "^15.6.2"
+    react-router "5.2.0"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+
 react-router-redux@5.0.0-alpha.9:
   version "5.0.0-alpha.9"
   resolved "http://npm.wpt.la/react-router-redux/-/react-router-redux-5.0.0-alpha.9.tgz#825431516e0e6f1fd93b8807f6bd595e23ec3d10"
@@ -13969,6 +14233,22 @@ react-router@5.1.2:
     tiny-invariant "^1.0.2"
     tiny-warning "^1.0.0"
 
+react-router@5.2.0:
+  version "5.2.0"
+  resolved "http://npm.wpt.la/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293"
+  integrity sha1-Qk51ZByodH+/duXsyml4GqN+opM=
+  dependencies:
+    "@babel/runtime" "^7.1.2"
+    history "^4.9.0"
+    hoist-non-react-statics "^3.1.0"
+    loose-envify "^1.3.1"
+    mini-create-react-context "^0.4.0"
+    path-to-regexp "^1.7.0"
+    prop-types "^15.6.2"
+    react-is "^16.6.0"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+
 react-scripts@3.1.1:
   version "3.1.1"
   resolved "http://npm.wpt.la/react-scripts/-/react-scripts-3.1.1.tgz#1796bc92447f3a2d3072c3b71ca99f88d099c48d"
@@ -14061,6 +14341,13 @@ react-test-renderer@^16.0.0-0, react-test-renderer@^16.9.0:
     react-is "^16.8.6"
     scheduler "^0.16.2"
 
+react-textarea-autosize@^6.1.0:
+  version "6.1.0"
+  resolved "http://npm.wpt.la/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz#df91387f8a8f22020b77e3833c09829d706a09a5"
+  integrity sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==
+  dependencies:
+    prop-types "^15.6.0"
+
 react-tween-state@^0.1.5:
   version "0.1.5"
   resolved "http://npm.wpt.la/react-tween-state/-/react-tween-state-0.1.5.tgz#e98b066551efb93cb92dd1be14995c2e3deae339"
@@ -16339,7 +16626,7 @@ tiny-invariant@^1.0.2:
   resolved "http://npm.wpt.la/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73"
   integrity sha1-s/mziDXjakHIQ6OwkHpaezdV3nM=
 
-tiny-warning@^1.0.0, tiny-warning@^1.0.2:
+tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3:
   version "1.0.3"
   resolved "http://npm.wpt.la/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
   integrity sha1-lKMNtFPfTGQ9D9VmBg1gqHXYR1Q=
@@ -18209,21 +18496,23 @@ worker-rpc@^0.1.0:
   dependencies:
     microevent.ts "~0.1.1"
 
-wptpc-design@^2.0.28:
-  version "2.0.35"
-  resolved "http://npm.wpt.la/wptpc-design/-/wptpc-design-2.0.35.tgz#024adc1ba09b375ec3e8cb4539505cc53f3f3783"
-  integrity sha512-YsMJdWHzeeuFaKiIY+bg0CiOJFWcFLtHnf3siszKGVvtfFrCsxH1hh80Ez74f+I3Gsah01sb0/5h1jV7lWD8qA==
+wptpc-design@^2.0.85:
+  version "2.0.85"
+  resolved "http://npm.wpt.la/wptpc-design/-/wptpc-design-2.0.85.tgz#67dafff557aac29e33deb947b2e9b2b2c43e9a2b"
+  integrity sha512-1FeUqsRkRICTQUWIJ8bFUhiP6mjwpyqgSz5orP/UZnD3mVgaveOME97IFMBAXIEphw7JLR3ZnUEbZYQBqNS3Bg==
   dependencies:
-    "@babel/plugin-transform-runtime" "^7.9.6"
     blueimp-md5 "^2.12.0"
     cos-js-sdk-v5 "^0.5.22"
     exif-js "^2.3.0"
     nanoid "^2.0.3"
     qiniu-js "^2.5.3"
+    qs "^6.9.4"
     rc-color-picker "^1.2.6"
     react-dnd "5.0.0"
     react-dnd-html5-backend "5.0.1"
+    react-json-view "^1.19.1"
     react-resizable "^1.10.1"
+    react-router-dom "^5.2.0"
     react-scripts "3.1.1"
     react-sizeme "^2.6.7"
     viewerjs "^1.3.6"