king
2023-07-02 63666b72a5a56c16a59b75940eb248a381872405
Merge branch 'master' into positec
47个文件已修改
1086 ■■■■■ 已修改文件
README.md 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/design.scss 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/resetPassword/resetpwd/index.jsx 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-G6/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-X6/chartcompile/formconfig.jsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-X6/chartcompile/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-X6/index.jsx 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/form/simple-form/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/form/step-form/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/form/tab-form/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/search/main-search/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/base-table/columns/editColumn/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/edit-table/columns/editColumn/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/columns/editColumn/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/modalconfig/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/transfer/index.jsx 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/modalconfig/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardItem/index.jsx 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-G6/index.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/index.jsx 334 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/index.scss 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/excelInbutton/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/exceloutbutton/index.jsx 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/printbutton/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/index.jsx 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkSwitch/index.jsx 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkVercode/index.jsx 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/searchcomponent/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/formconfig.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/modalform/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/uniqueform/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/appmanage/index.jsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basedesign/index.jsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/interface/history/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/interface/workspace/request/index.jsx 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.jsx 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/loginform.jsx 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md
@@ -27,6 +27,8 @@
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
node --max-old-space-size=9000 scripts/build.js
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
package.json
@@ -125,7 +125,7 @@
  },
  "scripts": {
    "dev": "set PORT=3001 && node scripts/start.js",
    "build": "node --max-old-space-size=9000 scripts/build.js",
    "build": "node --max-old-space-size=2048 scripts/build.js",
    "test": "node scripts/test.js"
  },
  "eslintConfig": {
src/api/index.js
@@ -1,6 +1,6 @@
import axios from 'axios'
import qs from 'qs'
import { notification } from 'antd'
import { notification, Modal } from 'antd'
import md5 from 'md5'
import CryptoJS from 'crypto-js'
import jsSHA from 'jssha'
@@ -11,6 +11,7 @@
window.GLOB.IndexDB = null
window.GLOB.OuterToken = {}
window.GLOB.$error = false
let service = window.GLOB.service ? '-' + window.GLOB.service.replace('/', '') : ''
let db = `mkdb${service}`
@@ -23,53 +24,53 @@
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
axios.defaults.withCredentials = false
// axios.interceptors.request.use((config) => {
//   return config
// }, (error) => {
//   return Promise.reject(error)
// })
const setCurrentUrl = (res) => {
  if (!!(window.history && window.history.pushState)) {
    sessionStorage.clear()
    sessionStorage.setItem('loginError', JSON.stringify({url: res.config ? res.config.url : '', request: res.config ? res.config.data : '', response: JSON.stringify(res.data)}))
    window.history.replaceState(null, null, window.location.href.split('#')[0] + '#/login')
    window.location.reload()
  }
}
axios.interceptors.response.use((response) => {
  if (response.data.ErrCode === 'LoginError') {
    if (window.debugger === true) {
      response.data.ErrCode = 'E'
      return Promise.resolve(response.data)
    } else if (window.GLOB.developing) {
    if (window.GLOB.developing) {
      sessionStorage.setItem('devError', 'true')
      response.data.ErrCode = 'E'
      return Promise.resolve(response.data)
    } else if (!sessionStorage.getItem('loginError')) {
      setCurrentUrl(response)
    } else if (response.config.url.indexOf('https://sso.mk9h.cn/webapi/dostars') > -1) {
      return Promise.reject(response.data)
    } else if (response.config.url.indexOf('https://epc.mk9h.cn/webapi/dostars') > -1) {
      return Promise.reject(response.data)
    }
    if (!window.GLOB.$error) {
      window.GLOB.$error = true
      Modal.destroyAll()
      Modal.error({
        title: response.data.message,
        onOk: () => {
          window.GLOB.$error = false
          sessionStorage.clear()
          if (!!(window.history && window.history.pushState)) {
            window.history.replaceState(null, null, window.location.href.split('#')[0] + '#/login')
            window.location.reload()
          }
        }
      })
    }
    return Promise.reject(response.data)
  } else {
    return Promise.resolve(response.data)
  }
}, (error) => {
  let response = error.response
  let response = error.response || ''
  if (response) {
    if (!response.data || !response.data.errors) { // 过滤旷视报错信息
      notification.error({
        className: 'notification-custom-error',
        bottom: 0,
        message: '状态码-' + response.status + ',请联系管理员',
        placement: 'bottomRight',
        duration: 15
      })
    }
    return Promise.reject(response)
  } else {
    return Promise.reject()
  if (response && (!response.data || !response.data.errors)) { // 过滤旷视报错信息
    notification.error({
      className: 'notification-custom-error',
      bottom: 0,
      message: '状态码-' + response.status + ',请联系管理员',
      placement: 'bottomRight',
      duration: 15
    })
  }
  return Promise.reject(response)
})
class Api {
src/assets/css/design.scss
@@ -52,6 +52,30 @@
    }
  }
}
.ant-modal-wrap.mk-scroll-modal {
  .ant-modal {
    top: 50px;
  }
  .ant-modal-body {
    min-height: 150px;
    max-height: calc(100vh - 170px);
    overflow-y: auto;
  }
  .ant-modal-body::-webkit-scrollbar {
    width: 7px;
  }
  .ant-modal-body::-webkit-scrollbar-thumb {
    border-radius: 5px;
    box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
    background: rgba(0, 0, 0, 0.13);
  }
  .ant-modal-body::-webkit-scrollbar-track {
    box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
    border-radius: 3px;
    border: 1px solid rgba(0, 0, 0, 0.07);
    background: rgba(0, 0, 0, 0);
  }
}
.ant-modal {
  .ant-radio-group {
src/components/resetPassword/resetpwd/index.jsx
@@ -142,7 +142,30 @@
          })
          message.warning(res.message)
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') {
          let param = {
            func: 's_visitor_login',
            timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
            SessionUid: 'bh0bapabtd45epsgra79segbch6c1ibk',
            TypeCharOne: 'pc',
            appkey: '202004041613277377A6A2456D34A4948AE84'
          }
          param.LText = md5(window.btoa('bh0bapabtd45epsgra79segbch6c1ibk' + param.timestamp))
          param.secretkey = md5(param.LText + 'mingke' + param.timestamp)
          let params = {
            url: 'https://sso.mk9h.cn/webapi/dologon',
            method: 'post',
            data: JSON.stringify(param)
          }
          Api.directRequest(params)
          return
        }
        clearTimeout(this.LoginTimer)
        this.setState({
          verdisabled: false,
src/menu/components/card/cardcellcomponent/index.jsx
@@ -762,6 +762,7 @@
          {/* 编辑按钮:复制、编辑 */}
          <Modal
            title="编辑元素"
            wrapClassName="mk-scroll-modal"
            visible={visible}
            width={850}
            maskClosable={false}
@@ -781,6 +782,7 @@
          {/* 编辑按钮:复制、编辑 */}
          <Modal
            title="按钮·编辑"
            wrapClassName="mk-scroll-modal"
            visible={actvisible}
            width={920}
            maskClosable={false}
src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx
@@ -102,11 +102,11 @@
      type: 'radio',
      field: 'click',
      label: '点击事件',
      initval: card.click || '',
      initval: card.click || 'switch',
      tooltip: '点击节点时触发的事件。',
      required: false,
      options: [
        {value: '', label: '数据切换'},
        {value: 'switch', label: '数据切换'},
        {value: 'menu', label: '菜单'},
        {value: 'menus', label: '菜单组'}
      ],
src/menu/components/chart/antv-G6/index.jsx
@@ -961,6 +961,7 @@
        width: card.width || 24,
        height: 400,
        subtype: card.subtype,
        click: 'switch',
        name: card.name
      }
src/menu/components/chart/antv-X6/chartcompile/formconfig.jsx
@@ -110,6 +110,7 @@
      required: false,
      options: [
        {value: '', label: '无'},
        {value: 'switch', label: '数据切换'},
        {value: 'menu', label: '菜单'},
        {value: 'menus', label: '菜单组'}
      ],
@@ -118,7 +119,6 @@
        {field: 'menus', values: ['menus']},
        {field: 'menuType', values: ['menus']},
        {field: 'open', values: ['menu', 'menus']},
        {field: 'joint', values: ['menu', 'menus']},
      ]
    },
    {
@@ -149,17 +149,6 @@
        {value: 'self', label: '当前窗口'},
      ],
      forbid: appType !== 'pc'
    },
    {
      type: 'radio',
      field: 'joint',
      label: '参数拼接',
      initval: card.joint || 'true',
      required: false,
      options: [
        {value: 'true', label: '是'},
        {value: 'false', label: '否'},
      ],
    },
    {
      type: 'table',
src/menu/components/chart/antv-X6/chartcompile/index.jsx
@@ -144,7 +144,7 @@
        <Modal
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={850}
          width={900}
          maskClosable={false}
          onOk={this.onSubmit}
          onCancel={() => { this.setState({ visible: false }) }}
src/menu/components/chart/antv-X6/index.jsx
@@ -3,7 +3,7 @@
import { is, fromJS } from 'immutable'
import { Popover } from 'antd'
import { ToolOutlined, DeleteOutlined, FontColorsOutlined } from '@ant-design/icons'
import { Graph, Shape } from '@antv/x6'
import { Graph } from '@antv/x6'
import MKEmitter from '@/utils/events.js'
import asyncComponent from '@/utils/asyncComponent'
@@ -314,6 +314,7 @@
        max: 2
      },
      autoResize: true,
      interacting: false,
      background: {
        color: card.plot.backgroundColor || 'transparent'
      },
@@ -335,36 +336,6 @@
        allowBlank: false,
        snap: {
          radius: 20
        },
        createEdge() {
          return new Shape.Edge({
            attrs: {
              line: {
                stroke: '#000000',
                strokeWidth: 1,
                targetMarker: {
                  name: 'block',
                  width: 12,
                  height: 8
                }
              }
            },
            zIndex: 0
          })
        },
        validateConnection({ targetMagnet }) {
          return !!targetMagnet
        }
      },
      highlighting: {
        magnetAdsorbed: {
          name: 'stroke',
          args: {
            attrs: {
              fill: '#5F95FF',
              stroke: '#5F95FF'
            }
          }
        }
      }
    })
@@ -391,6 +362,7 @@
        max: 2
      },
      autoResize: true,
      interacting: false,
      background: { color: '#ffffff' },
      mousewheel: {
        enabled: true,
@@ -410,55 +382,6 @@
        allowBlank: false,
        snap: {
          radius: 20
        },
        createEdge() {
          return new Shape.Edge({
            attrs: {
              line: {
                stroke: '#000000',
                strokeWidth: 1,
                targetMarker: {
                  name: 'block',
                  width: 12,
                  height: 8
                }
              }
            },
            zIndex: 2
          })
        },
        validateConnection({ targetMagnet }) {
          return !!targetMagnet
        }
      },
      highlighting: {
        magnetAdsorbed: {
          name: 'stroke',
          args: {
            attrs: {
              fill: '#5F95FF',
              stroke: '#5F95FF'
            }
          }
        }
      },
      translating: {
        restrict(cellView) {
          const cell = cellView.cell
          const parentId = cell.prop('parent')
          if (parentId) {
            const parentNode = graph.getCellById(parentId)
            if (parentNode) {
              return parentNode.getBBox().moveAndExpand({
                x: 0,
                y: 36,
                width: 0,
                height: -36,
              })
            }
          }
          return cell.getBBox()
        }
      }
    })
src/menu/components/form/simple-form/index.jsx
@@ -683,6 +683,7 @@
        </div>
        <Modal
          title="编辑"
          wrapClassName="mk-scroll-modal"
          visible={this.state.visible}
          width={950}
          maskClosable={false}
src/menu/components/form/step-form/index.jsx
@@ -807,6 +807,7 @@
        </div>
        <Modal
          title="编辑"
          wrapClassName="mk-scroll-modal"
          visible={this.state.visible}
          width={950}
          maskClosable={false}
src/menu/components/form/tab-form/index.jsx
@@ -809,6 +809,7 @@
        </div>
        <Modal
          title="编辑"
          wrapClassName="mk-scroll-modal"
          visible={this.state.visible}
          width={950}
          maskClosable={false}
src/menu/components/search/main-search/index.jsx
@@ -427,6 +427,7 @@
        {/* 编辑搜索条件 */}
        <Modal
          title="搜索条件-编辑"
          wrapClassName="mk-scroll-modal"
          visible={visible}
          width={850}
          maskClosable={false}
src/menu/components/share/actioncomponent/index.jsx
@@ -705,6 +705,7 @@
        {/* 编辑按钮:复制、编辑 */}
        <Modal
          title="按钮·编辑"
          wrapClassName="mk-scroll-modal"
          visible={visible}
          width={920}
          maskClosable={false}
src/menu/components/table/base-table/columns/editColumn/index.jsx
@@ -459,6 +459,7 @@
      <div style={{display: 'inline-block'}}>
        <Modal
          title="显示列编辑"
          wrapClassName="mk-scroll-modal"
          visible={visible}
          width={850}
          maskClosable={false}
src/menu/components/table/edit-table/columns/editColumn/index.jsx
@@ -512,6 +512,7 @@
      <div style={{display: 'inline-block'}}>
        <Modal
          title="显示列编辑"
          wrapClassName="mk-scroll-modal"
          visible={visible}
          width={900}
          maskClosable={false}
src/menu/components/table/normal-table/columns/editColumn/index.jsx
@@ -465,6 +465,7 @@
      <div style={{display: 'inline-block'}}>
        <Modal
          title="显示列编辑"
          wrapClassName="mk-scroll-modal"
          visible={visible}
          width={850}
          maskClosable={false}
src/menu/modalconfig/index.jsx
@@ -588,6 +588,7 @@
        </DndProvider>
        <Modal
          title={card && card.$copy ? '复制' : '编辑'}
          wrapClassName="mk-scroll-modal"
          visible={this.state.visible}
          width={950}
          maskClosable={false}
src/menu/transfer/index.jsx
@@ -29,6 +29,22 @@
    const _this = this
    if (!config.enabled) {
      let tb = config.components[0]
      if (config.components.length === 1 && tb.setting.interType === 'system' && !tb.setting.dataresource) {
        confirm({
          title: '当前页面将清空,确定切换为自定义页面吗?',
          content: '',
          onOk() {
            return new Promise(resolve => {
              _this.execUpdate(resolve, true)
            })
          },
          onCancel() {}
        })
        return
      }
      notification.warning({
        top: 92,
        message: '未启用菜单不可升级!',
@@ -49,7 +65,7 @@
    })
  }
  execUpdate = (_resolve) => {
  execUpdate = (_resolve, clear) => {
    let _config = fromJS(this.props.config).toJS()
    _config.permission = 'true'
    _config.Template = 'CustomPage'
@@ -59,23 +75,53 @@
    delete _config.autoMatic
    let useMSearch = false
    _config.components.forEach((item, i) => {
      if (item.type === 'tabs') {
        item.name = '标签组' + i
        item.width = 24
        item.subtype = 'tabs'
        item.setting = {autoSwitch: 'false', blacklist: [], name: item.name, position: 'top', supModule: [], tabStyle: 'line', width: 24}
        item.subtabs.forEach(tab => {
          tab.components[0].subtype = 'normaltable'
          tab.components[0].width = 24
          tab.components[0].wrap.width = 24
          tab.components[0].wrap.name = tab.components[0].name
          if (tab.components[0].setting.useMSearch === 'true') {
            useMSearch = true
          }
          tab.components[0].action.forEach(btn => {
    if (clear) {
      _config.components = []
    } else {
      _config.components.forEach((item, i) => {
        if (item.type === 'tabs') {
          item.name = '标签组' + i
          item.width = 24
          item.subtype = 'tabs'
          item.setting = {autoSwitch: 'false', blacklist: [], name: item.name, position: 'top', supModule: [], tabStyle: 'line', width: 24}
          item.subtabs.forEach(tab => {
            tab.components[0].subtype = 'normaltable'
            tab.components[0].width = 24
            tab.components[0].wrap.width = 24
            tab.components[0].wrap.name = tab.components[0].name
            if (tab.components[0].setting.useMSearch === 'true') {
              useMSearch = true
            }
            tab.components[0].action.forEach(btn => {
              if (btn.OpenType === 'popview' && btn.config) {
                btn.config.Template = 'CustomPage'
                if (btn.config.components[0]) {
                  btn.config.components[0].subtype = 'normaltable'
                }
              }
            })
            tab.components[0].cols = tab.components[0].cols.filter(col => !(col.field && col.Hide === 'true'))
            tab.components[0].cols.forEach(col => {
              if (col.type !== 'custom') return
              col.elements.forEach(btn => {
                if (btn.OpenType === 'popview' && btn.config) {
                  btn.config.Template = 'CustomPage'
                  if (btn.config.components[0]) {
                    btn.config.components[0].subtype = 'normaltable'
                  }
                }
              })
            })
          })
        } else {
          item.subtype = 'normaltable'
          item.width = 24
          item.wrap.width = 24
          item.wrap.name = item.name
          item.action.forEach(btn => {
            if (btn.OpenType === 'popview' && btn.config) {
              btn.config.Template = 'CustomPage'
              if (btn.config.components[0]) {
@@ -83,8 +129,8 @@
              }
            }
          })
          tab.components[0].cols = tab.components[0].cols.filter(col => !(col.field && col.Hide === 'true'))
          tab.components[0].cols.forEach(col => {
          item.cols = item.cols.filter(col => !(col.field && col.Hide === 'true'))
          item.cols.forEach(col => {
            if (col.type !== 'custom') return
            col.elements.forEach(btn => {
              if (btn.OpenType === 'popview' && btn.config) {
@@ -95,34 +141,9 @@
              }
            })
          })
        })
      } else {
        item.subtype = 'normaltable'
        item.width = 24
        item.wrap.width = 24
        item.wrap.name = item.name
        item.action.forEach(btn => {
          if (btn.OpenType === 'popview' && btn.config) {
            btn.config.Template = 'CustomPage'
            if (btn.config.components[0]) {
              btn.config.components[0].subtype = 'normaltable'
            }
          }
        })
        item.cols = item.cols.filter(col => !(col.field && col.Hide === 'true'))
        item.cols.forEach(col => {
          if (col.type !== 'custom') return
          col.elements.forEach(btn => {
            if (btn.OpenType === 'popview' && btn.config) {
              btn.config.Template = 'CustomPage'
              if (btn.config.components[0]) {
                btn.config.components[0].subtype = 'normaltable'
              }
            }
          })
        })
      }
    })
        }
      })
    }
    if (useMSearch) {
      let cell = {
src/mob/modalconfig/index.jsx
@@ -525,6 +525,7 @@
        </DndProvider>
        <Modal
          title={card && card.$copy ? '复制' : '编辑'}
          wrapClassName="mk-scroll-modal"
          visible={this.state.visible}
          width={950}
          maskClosable={false}
src/tabviews/custom/components/card/cardItem/index.jsx
@@ -16,19 +16,10 @@
    data: PropTypes.object,
  }
  state = {
    card: null,            // 卡片信息,包括正反面
  }
  /**
   * @description 搜索条件初始化
   */
  UNSAFE_componentWillMount () {
  }
  state = {}
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState)) || !is(fromJS(this.props), fromJS(nextProps))
    return !is(fromJS(this.props.data), fromJS(nextProps.data))
  }
  /**
@@ -164,7 +155,6 @@
  render() {
    const { card, data, cards, children } = this.props
    let style = {...card.style}
    let bg = null
    if (card.setting.bgField) {
src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -77,7 +77,7 @@
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.props), fromJS(nextProps))
    return !is(fromJS(this.props.data), fromJS(nextProps.data))
  }
  /**
src/tabviews/custom/components/chart/antv-G6/index.jsx
@@ -1571,9 +1571,9 @@
  handleClick = (data = null) => {
    const { plot, config } = this.state
    
    if (plot.click && !data) return
    if (plot.click === 'menus') {
      if (!data) return
      let menu = null
      
      if (plot.menus && plot.menus.length > 0) {
@@ -1604,6 +1604,8 @@
      MKEmitter.emit('modifyTabs', newtab, true)
    } else if (plot.click === 'menu') {
      if (!data) return
      let menuId = plot.menu.slice(-1)[0]
      let newtab = window.GLOB.mkThdMenus.filter(m => m.MenuID === menuId)[0]
src/tabviews/custom/components/chart/antv-X6/index.jsx
@@ -330,23 +330,49 @@
      }
    }
  },
  // {
  //   inherit: 'rect',
  //   width: 66,
  //   height: 36,
  //   attrs: {
  //     body: {
  //       strokeWidth: 0,
  //       fill: 'transparent'
  //     },
  //     text: {
  //       fontSize: 12,
  //       fill: '#262626'
  //     }
  //   }
  // },
  true
)
const styles = {
  blue: '#1890ff',
  red: '#f5222d',
  orange_red: '#fa541c',
  orange: '#fa8c16',
  orange_yellow: '#faad14',
  yellow: '#fadb14',
  yellow_green: '#a0d911',
  green: '#52c41a',
  cyan: '#13c2c2',
  blue_purple: '#2f54eb',
  purple: '#722ed1',
  magenta: '#eb2f96',
  grass_green: '#aeb303',
  deep_red: '#c32539',
  deep_blue: '#1d3661',
  blue1: '#e6f7ff',
  red1: '#fff1f0',
  orange_red1: '#fff2e8',
  orange1: '#fff7e6',
  orange_yellow1: '#fffbe6',
  yellow1: '#feffe6',
  yellow_green1: '#fcffe6',
  green1: '#f6ffed',
  cyan1: '#e6fffb',
  blue_purple1: '#f0f5ff',
  purple1: '#f9f0ff',
  magenta1: '#fff0f6',
  grass_green1: '#f2efda',
  deep_red1: '#fff0f0',
  deep_blue1: '#eff1f4'
}
let sysColor = '#1890ff'
let lightColor = '#e6f7ff'
if (window.GLOB.style) {
  let type = window.GLOB.style.replace(/bg_black_style_|bg_white_style_/, '')
  sysColor = styles[type] || '#1890ff'
  lightColor = styles[type + '1'] || '#e6f7ff'
}
class antvX6Chart extends Component {
  static propTpyes = {
@@ -386,7 +412,7 @@
    if (BData) {
      BID = BData.$BID || ''
    }
    this.setState({
      config: _config,
      BID: BID || '',
@@ -578,6 +604,7 @@
        max: 2
      },
      autoResize: true,
      interacting: false,
      panning: true,
      background: {
        color: config.plot.backgroundColor || 'transparent'
@@ -600,36 +627,6 @@
        allowBlank: false,
        snap: {
          radius: 20
        },
        createEdge() {
          return new Shape.Edge({
            attrs: {
              line: {
                stroke: '#000000',
                strokeWidth: 1,
                targetMarker: {
                  name: 'block',
                  width: 12,
                  height: 8
                }
              }
            },
            zIndex: 0
          })
        },
        validateConnection({ targetMagnet }) {
          return !!targetMagnet
        }
      },
      highlighting: {
        magnetAdsorbed: {
          name: 'stroke',
          args: {
            attrs: {
              fill: '#5F95FF',
              stroke: '#5F95FF'
            }
          }
        }
      }
    })
@@ -646,6 +643,16 @@
      graph.resetCells(cells)
      graph.positionContent('center')
    }
    if (config.plot.click) {
      graph.on('cell:click', ({ node }) => {
        this.checkNode(graph, node)
      })
      graph.on('blank:click', () => {
        this.checkNode(graph)
      })
    }
  }
  laneSrender = () => {
@@ -657,6 +664,7 @@
        min: 0.5,
        max: 2
      },
      interacting: false,
      autoResize: true,
      panning: true,
      background: { color: '#ffffff' },
@@ -678,55 +686,6 @@
        allowBlank: false,
        snap: {
          radius: 20
        },
        createEdge() {
          return new Shape.Edge({
            attrs: {
              line: {
                stroke: '#000000',
                strokeWidth: 1,
                targetMarker: {
                  name: 'block',
                  width: 12,
                  height: 8
                }
              }
            },
            zIndex: 2
          })
        },
        validateConnection({ targetMagnet }) {
          return !!targetMagnet
        }
      },
      highlighting: {
        magnetAdsorbed: {
          name: 'stroke',
          args: {
            attrs: {
              fill: '#5F95FF',
              stroke: '#5F95FF'
            }
          }
        }
      },
      translating: {
        restrict(cellView) {
          const cell = cellView.cell
          const parentId = cell.prop('parent')
          if (parentId) {
            const parentNode = graph.getCellById(parentId)
            if (parentNode) {
              return parentNode.getBBox().moveAndExpand({
                x: 0,
                y: 36,
                width: 0,
                height: -36,
              })
            }
          }
          return cell.getBBox()
        }
      }
    })
@@ -742,6 +701,16 @@
      })
      graph.resetCells(cells)
      graph.positionContent('top')
    }
    if (config.plot.click) {
      graph.on('cell:click', ({ node }) => {
        this.checkNode(graph, node)
      })
      graph.on('blank:click', () => {
        this.checkNode(graph)
      })
    }
  }
@@ -912,19 +881,19 @@
      showPorts(ports, false)
    })
    graph.on('node:click', ({ e, x, y, node, view }) => {
    graph.on('node:click', ({ node }) => {
      this.selectNode = node
      
      this.setState({node: node.store.data})
    })
    graph.on('edge:click', ({ e, x, y, edge, view }) => {
    graph.on('edge:click', ({ edge }) => {
      this.selectNode = edge
      
      this.setState({node: edge.store.data})
      graph.clearTransformWidgets()
    })
    graph.on('blank:click', ({ e, x, y }) => {
    graph.on('blank:click', () => {
      this.selectNode = null
      
      this.setState({node: null})
@@ -989,8 +958,7 @@
    })
    const p3 = graph.createNode({
      shape: 'mk-text',
      label: '文本'
      shape: 'mk-text'
    })
    
    stencil.load([p1, p2, p3], 'group2')
@@ -1095,8 +1063,15 @@
    })
    graph
      .use(new Transform({
        resizing: true,
        rotating: true
      }))
      .use(new Selection())
      .use(new Snapline())
      .use(new Snapline({
        enabled: true,
        filter: (Graph) => Graph.prop('shape') !== 'lane'
      }))
      .use(new Keyboard())
      .use(new Clipboard())
      .use(new History())
@@ -1141,14 +1116,18 @@
    graph.bindKey(['meta+c', 'ctrl+c'], () => {
      const cells = graph.getSelectedCells()
      if (cells.length) {
        graph.copy(cells)
        if (cells[0].prop('shape') !== 'lane' && cells[0].prop('shape') !== 'edge') {
          graph.copy(cells)
        }
      }
      return false
    })
    graph.bindKey(['meta+x', 'ctrl+x'], () => {
      const cells = graph.getSelectedCells()
      if (cells.length) {
        graph.cut(cells)
        if (cells[0].prop('shape') !== 'lane' && cells[0].prop('shape') !== 'edge') {
          graph.cut(cells)
        }
      }
      return false
    })
@@ -1175,9 +1154,19 @@
    graph.bindKey(['backspace', 'delete'], () => {
      const cells = graph.getSelectedCells()
      if (cells.length) {
        graph.removeCells(cells)
        this.selectNode = null
        this.setState({node: null})
        if (cells[0].prop('shape') === 'lane') {
          graph.startBatch('delete-lane')
          graph.removeCells(cells)
          this.deleteLane(cells[0], graph)
          graph.stopBatch('delete-lane')
        } else {
          graph.removeCells(cells)
        }
      }
    })
@@ -1199,8 +1188,10 @@
      showPorts(ports, false)
    })
    graph.on('node:added', ({ cell, index, options }) => {
    graph.on('node:added', ({ cell }) => {
      if (cell.prop('shape') === 'lane') {
        if (cell.prop('zIndex') === 0) return
        graph.startBatch('add-lane')
        this.addLane(cell, graph)
@@ -1212,22 +1203,26 @@
        if (num <= 1) {
          message.warning('请添加泳道!')
          graph.removeCells([cell])
        } else {
        } else if (!cell.prop('parent')) {
          this.addNode(cell, graph)
        }
      }
    })
    graph.on('node:click', ({ e, x, y, node, view }) => {
    graph.on('node:click', ({ node }) => {
      this.selectNode = node
      this.setState({node: node.store.data})
      if (node.prop('shape') === 'lane') {
        graph.clearTransformWidgets()
      }
    })
    graph.on('edge:click', ({ e, x, y, edge, view }) => {
    graph.on('edge:click', ({ edge }) => {
      this.selectNode = edge
      this.setState({node: edge.store.data})
      graph.clearTransformWidgets()
    })
    graph.on('blank:click', ({ e, x, y }) => {
    graph.on('blank:click', () => {
      this.selectNode = null
      
      this.setState({node: null})
@@ -1292,8 +1287,7 @@
    })
    const p3 = graph.createNode({
      shape: 'mk-text',
      label: '文本'
      shape: 'mk-text'
    })
    
    stencil.load([p1, p2, p3], 'group2')
@@ -1372,6 +1366,25 @@
    // }, {padding: 20})
  }
  deleteLane = (cell, graph) => {
    let id = cell.id
    let nodes = graph.getNodes()
    let cells = []
    nodes.forEach(item => {
      if (item.prop('shape') === 'lane') return
      if (item.prop('parent') === id) {
        cells.push(item)
      }
    })
    graph.removeCells(cells)
    this.resetlane(cell.id, cell.prop('position/x'), -cell.prop('size/width'))
  }
  addLane = (cell, graph) => {
    const { config } = this.state
@@ -1406,6 +1419,7 @@
    }
    let height = 400
    if (typeof(config.plot.height) === 'number' || /px/.test(config.plot.height)) {
      height = parseInt(config.plot.height)
    }
@@ -1498,12 +1512,29 @@
    const { node } = this.state
    if (node.shape === 'edge') {
      let labels = this.selectNode.prop('labels')
      if (!labels || labels.length === 0) {
        labels = [{
          attrs: {label: { text: '' }}
        }]
      }
      if (key === 'title') {
        this.selectNode.setLabels(value)
        labels = JSON.parse(JSON.stringify(labels))
        labels[0].attrs.label.text = value
        this.selectNode.setLabels(labels)
      } else if (key === 'stroke') {
        this.selectNode.attr('line/stroke', value)
      } else if (key === 'strokeWidth') {
        this.selectNode.attr('line/strokeWidth', value)
      } else if (key === 'fontSize') {
        labels = JSON.parse(JSON.stringify(labels))
        labels[0].attrs.label.fontSize = value
        this.selectNode.setLabels(labels)
      } else if (key === 'fontFill') {
        labels = JSON.parse(JSON.stringify(labels))
        labels[0].attrs.label.fill = value
        this.selectNode.setLabels(labels)
      } else if (key === 'lineType') {
        if (value === 'dash') {
          this.selectNode.attr('line/strokeDasharray', 5)
@@ -1564,6 +1595,83 @@
    }
  }
  checkNode = (graph, node) => {
    const { plot, config } = this.state
    let nodes = graph.getNodes()
    nodes.forEach(item => {
      if (item.prop('shape') === 'lane') return
      if (item.prop('oristyle')) {
        let style = item.prop('oristyle')
        item.prop('attrs/body/fill', style.fill)
        item.prop('attrs/body/stroke', style.stroke)
        item.prop('attrs/text/fill', style.text)
      }
    })
    if (!node || ['lane', 'mk-text', 'edge'].includes(node.prop('shape'))) {
      MKEmitter.emit('resetSelectLine', config.uuid, '', '')
      return
    }
    if (!node.prop('oristyle')) {
      node.prop('oristyle', {
        fill: node.prop('attrs/body/fill'),
        stroke: node.prop('attrs/body/stroke'),
        text: node.prop('attrs/text/fill')
      })
    }
    node.prop('attrs/body/fill', lightColor)
    node.prop('attrs/body/stroke', sysColor)
    node.prop('attrs/text/fill', sysColor)
    let sign = node.prop('mksign') || ''
    if (plot.click === 'menus') {
      let menu = null
      if (plot.menus && plot.menus.length > 0) {
        plot.menus.forEach(m => {
          if (sign !== m.sign) return
          menu = m
        })
      }
      if (!menu || !menu.MenuID) return
      let newtab = {
        MenuID: menu.MenuID,
        MenuName: menu.MenuName,
        MenuNo: menu.MenuNo || '',
        type: menu.tabType,
        param: {$BID: sign}
      }
      MKEmitter.emit('modifyTabs', newtab, true)
    } else if (plot.click === 'menu') {
      let menuId = plot.menu.slice(-1)[0]
      let newtab = window.GLOB.mkThdMenus.filter(m => m.MenuID === menuId)[0]
      if (!newtab && plot.MenuID) {
        newtab = {
          MenuID: plot.MenuID,
          MenuName: plot.MenuName,
          MenuNo: plot.MenuNo,
          type: plot.tabType
        }
      } else if (!newtab) {
        return
      }
      MKEmitter.emit('modifyTabs', {...newtab, param: {$BID: sign}}, true)
    } else {
      MKEmitter.emit('resetSelectLine', config.uuid, sign, {})
    }
  }
  resetlane = (id, x, offset) => {
    let nodes = this.mkGraph.getNodes()
@@ -1597,7 +1705,7 @@
            </div> : null
          }
          <NormalHeader config={config} />
          <div className="canvas" style={{width: '100%', minHeight: config.plot.height, height: config.plot.height}} id={config.uuid + 'canvas'}>
          <div className={'canvas only-show' + (config.plot.click ? ' switchable' : '')} style={{width: '100%', minHeight: config.plot.height, height: config.plot.height}} id={config.uuid + 'canvas'}>
            <div id={config.uuid + 'container'} className="mk-container"></div>
          </div>
        </div>
src/tabviews/custom/components/chart/antv-X6/index.scss
@@ -165,6 +165,22 @@
      opacity: 0;
    }
  }
  .only-show {
    .x6-port {
      display: none;
    }
    .x6-cell.x6-edge {
      cursor: default;
      path {
        cursor: default;
      }
    }
  }
  .only-show.switchable {
    .x6-cell.x6-node:not([data-shape="lane"]):not([data-shape="mk-text"]) {
      cursor: pointer;
    }
  }
  .chart-header {
    position: relative;
src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx
@@ -7,6 +7,8 @@
import './index.scss'
const { TextArea } = Input
class NodeUpdate extends Component {
  static propTpyes = {
    node: PropTypes.object,
@@ -71,6 +73,8 @@
        lineType = 'dash'
      }
      let font = node.labels && node.labels[0] ? node.labels[0].attrs.label : {}
      return [
        {
          type: 'title',
@@ -80,7 +84,7 @@
          type: 'text',
          field: 'title',
          label: '标签',
          initval: title
          initval: font.text || ''
        },
        {
          type: 'title',
@@ -107,6 +111,22 @@
            {value: 'solid', text: '实线'},
            {value: 'dash', text: '虚线'}
          ]
        },
        {
          type: 'title',
          label: '标签样式'
        },
        {
          type: 'number',
          field: 'fontSize',
          label: '字号',
          initval: font.fontSize || 14
        },
        {
          type: 'color',
          field: 'fontFill',
          label: '颜色',
          initval: font.fill || '#000000'
        }
      ]
    } else if (node.shape === 'lane') {
@@ -228,7 +248,7 @@
          label: '内容'
        },
        {
          type: 'text',
          type: 'textarea',
          field: 'title',
          label: '标签',
          initval: title
@@ -387,6 +407,12 @@
            </Form.Item>
          </Col>
        )
      } else if (item.type === 'textarea') {
        fields.push(
          <Col span={24} key={index} style={{padding: '0 12px'}}>
            <TextArea defaultValue={item.initval} rows={3} onChange={(e) => this.change(e.target.value, item.field)} />
          </Col>
        )
      } else if (item.type === 'number') {
        fields.push(
          <Col span={24} key={index}>
src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.scss
@@ -8,6 +8,10 @@
    padding-bottom: 2px;
    font-size: 13px;
  }
  textarea.ant-input {
    padding: 0px 4px;
    border-radius: 0px;
  }
  .ant-form-item {
    display: flex;
    margin-bottom: 10px;
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -1671,7 +1671,9 @@
        } else {
          this.execError(res)
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') return
        this.execError({})
      })
    } else if (submit.intertype === 'inner' && submit.innerFunc) { // 自定义存储过程
@@ -1683,7 +1685,9 @@
        } else {
          this.execError(res)
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') return
        this.execError({})
      })
    }
src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -408,7 +408,8 @@
          } else {
            this.execError(res)
          }
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.execError({})
        })
      } else {
@@ -418,7 +419,8 @@
          } else {
            this.execError(res)
          }
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.execError({})
        })
      }
@@ -431,7 +433,8 @@
        } else {
          this.execError(res)
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') return
        this.execError({})
      })
    } else if (btn.intertype === 'outer') { // 外部接口
@@ -460,7 +463,8 @@
              this.execError(res)
              resolve(false)
            }
          }, () => {
          }, (error) => {
            if (error && error.ErrCode === 'LoginError') return
            this.execError({})
          })
        } else {
@@ -521,7 +525,7 @@
        return Api.genericInterface(res)
      }).then(response => {
        if (!response) return
        if (!response || response.ErrCode === 'LoginError') return
        // 回调请求
        if (ver_token && response.ErrMesg === 'token_error') {
          this.execError(response)
@@ -542,7 +546,7 @@
          }
        }
      }).then(res => {
        if (!res) return
        if (!res || res.ErrCode === 'LoginError') return
        if (res.status) {
          this.execSuccess(res)
src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -220,7 +220,8 @@
          } else {
            this.execError(result)
          }
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.execError({})
        })
      } else if (btn.intertype === 'inner') { // 使用内部函数
@@ -233,7 +234,8 @@
          } else {
            this.execError(result)
          }
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.execError({})
        })
      } else if (btn.intertype === 'outer' && !btn.innerFunc) { // 使用外部函数
@@ -285,7 +287,8 @@
          } else {
            this.execError(result)
          }
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.execError({})
        })
      } else if (btn.intertype === 'outer' && btn.innerFunc) {
@@ -349,7 +352,8 @@
          } else {
            this.execError(res)
          }
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.execError({})
        })
      } else {
@@ -437,13 +441,15 @@
          } else {
            this.execError(result)
          }
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.execError({})
        })
      } else {
        this.execError(res)
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.execError({})
    })
  }
@@ -525,7 +531,8 @@
      } else {
        this.execError(result)
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.execError({})
    })
  }
@@ -842,7 +849,8 @@
      } else {
        this.execError(res)
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus('over')
    })
  }
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -4,6 +4,7 @@
import qs from 'qs'
import { is, fromJS } from 'immutable'
import { Button, Modal, notification, message, Drawer, Switch, Checkbox, Progress } from 'antd'
import md5 from 'md5'
import Api from '@/api'
import Utils, { getSysDefaultSql } from '@/utils/utils.js'
@@ -1103,7 +1104,8 @@
            this.execError(res)
          }
          _resolve()
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.updateStatus()
          _resolve()
        })
@@ -1116,7 +1118,8 @@
                  this.triggerNote(res) // 消息
                }
                resolve(res)
              }, () => {
              }, (error) => {
                if (error && error.ErrCode === 'LoginError') return
                this.updateStatus()
                _resolve()
              })
@@ -1143,7 +1146,7 @@
          _resolve()
        })
      } else { // 超出20个请求时循环执行
        if (btn.progress === 'progressbar' && btn.$toolbtn && params.length > 1) {
        if (btn.progress === 'progressbar' && params.length > 1) {
          this.setState({
            loadingTotal: params.length
          })
@@ -1164,7 +1167,7 @@
        _params = this.getInnerParam(data, formdata, btn.callbackType === 'script')
      }
      if (_params.length > 1 && btn.progress === 'progressbar' && btn.$toolbtn) {
      if (_params.length > 1 && btn.progress === 'progressbar') {
        this.setState({
          loadingTotal: _params.length
        })
@@ -1185,7 +1188,7 @@
        params = this.getInnerParam(data, formdata, btn.callbackType === 'script')
      }
      if (params.length > 1 && btn.progress === 'progressbar' && btn.$toolbtn) {
      if (params.length > 1 && btn.progress === 'progressbar') {
        this.setState({
          loadingTotal: params.length
        })
@@ -1232,7 +1235,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1424,7 +1428,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1639,7 +1644,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1702,7 +1708,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1764,7 +1771,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1834,7 +1842,8 @@
        return
      }
      this.outerCallbackRequest(params, res, record, outParam, _resolve)
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.outerCallbackRequest(params, {status: false, message: 500, ErrCode: 'E', ErrMesg: 500}, record, outParam, _resolve)
    })
  }
@@ -2426,6 +2435,29 @@
            duration: 5
          })
        }
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') {
          let param = {
            func: 's_visitor_login',
            timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
            SessionUid: 'bh0bapabtd45epsgra79segbch6c1ibk',
            TypeCharOne: 'pc',
            appkey: '202004041613277377A6A2456D34A4948AE84'
          }
          param.LText = md5(window.btoa('bh0bapabtd45epsgra79segbch6c1ibk' + param.timestamp))
          param.secretkey = md5(param.LText + 'mingke' + param.timestamp)
          let params = {
            url: 'https://sso.mk9h.cn/webapi/dologon',
            method: 'post',
            data: JSON.stringify(param)
          }
          Api.directRequest(params)
          return
        }
      })
    })
  }
@@ -2996,8 +3028,8 @@
      className = 'mk-btn mk-' + (btn.class || 'unset')
    }
    if (loadingNumber && !loadingTotal && btn.$toolbtn && (!btn.show || btn.show === 'button')) {
      label = (loadingNumber && !loadingTotal ? `(${loadingNumber})` : '') + btn.label
    if (loadingNumber && btn.progress !== 'progressbar' && btn.$toolbtn && (!btn.show || btn.show === 'button')) {
      label = (loadingNumber ? `(${loadingNumber})` : '') + btn.label
    }
    return <>
src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -533,7 +533,7 @@
      return Api.getSystemCacheConfig(param)
    }).then(result => {
      if (!result) {
      if (!result || result.ErrCode === 'LoginError') {
        this.setState({ loading: false })
        return
      }
@@ -1262,7 +1262,7 @@
      return Api.genericInterface(res)
    }).then(response => {
      if (!response) return
      if (!response || response.ErrCode === 'LoginError') return
      if (ver_token && response.ErrMesg === 'token_error') {
        this.execError(response)
@@ -1291,7 +1291,7 @@
        _resolve({next: false, list: []})
      }
    }).then(response => {
      if (!response) return
      if (!response || response.ErrCode === 'LoginError') return
      if (response.status) {
        _list.push(response)
src/tabviews/zshare/mutilform/index.jsx
@@ -467,6 +467,31 @@
          item.options = fromJS(item.oriOptions).toJS()
        }
        item.linkSubField = null
      } else if (item.type === 'switch' && item.linkSubField) {
        item.options = []
        item.subFields = []
        item.linkSubField.forEach(m => {
          let n = fieldMap.get(m)
          if (n && ['text', 'number', 'textarea'].includes(n.type)) {
            item.subFields.push({
              uuid: n.uuid,
              field: m
            })
          }
        })
        if (item.subFields.length === 0) {
          item.subFields = null
        } else {
          reFieldsVal = reFieldsVal || {}
          let val = item.initval === item.openVal ? item.openText : item.closeText
          item.subFields.forEach(n => {
            reFieldsVal[n.field] = val || ''
          })
        }
        item.linkSubField = null
      }
      // if (item.type === 'link') {
@@ -1011,7 +1036,7 @@
          className = 'checkcard'
          content = (<MKCheckCard config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
        } else if (item.type === 'switch') {
          content = (<MKSwitch config={item} onChange={(val) => this.recordChange({[item.field]: val}, item)}/>)
          content = (<MKSwitch config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
        } else if (item.type === 'check') {
          content = (<MKCheck config={item} onChange={(val) => this.recordChange({[item.field]: val}, item)}/>)
        } else if (item.type === 'checkbox') {
src/tabviews/zshare/mutilform/mkSwitch/index.jsx
@@ -2,6 +2,8 @@
import PropTypes from 'prop-types'
import { Switch } from 'antd'
import MKEmitter from '@/utils/events.js'
class MKSwitch extends Component {
  static propTpyes = {
    config: PropTypes.object,
@@ -15,10 +17,21 @@
  onChange = (val) => {
    const { config } = this.props
    
    let other = {}
    if (config.subFields) {
      let _val = val ? config.openText : config.closeText
      config.subFields.forEach((n, i) => {
        other[n.field] = _val || ''
        setTimeout(() => {
          MKEmitter.emit('mkFC', 'input', n.uuid, _val || '')
        }, i * 5)
      })
    }
    if (val) {
      this.props.onChange(config.openVal)
      this.props.onChange(config.openVal, other)
    } else {
      this.props.onChange(config.closeVal)
      this.props.onChange(config.closeVal, other)
    }
  }
src/tabviews/zshare/mutilform/mkVercode/index.jsx
@@ -146,7 +146,30 @@
          } else {
            this.props.onSend(send_type, timestamp, n_id)
          }
        }, () => {
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') {
            let param = {
              func: 's_visitor_login',
              timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
              SessionUid: 'bh0bapabtd45epsgra79segbch6c1ibk',
              TypeCharOne: 'pc',
              appkey: '202004041613277377A6A2456D34A4948AE84'
            }
            param.LText = md5(window.btoa('bh0bapabtd45epsgra79segbch6c1ibk' + param.timestamp))
            param.secretkey = md5(param.LText + 'mingke' + param.timestamp)
            let params = {
              url: 'https://sso.mk9h.cn/webapi/dologon',
              method: 'post',
              data: JSON.stringify(param)
            }
            Api.directRequest(params)
            return
          }
          clearTimeout(this.timer)
          this.setState({
            verdisabled: false,
@@ -182,7 +205,30 @@
        } else {
          this.props.onSend(send_type, timestamp, n_id)
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') {
          let param = {
            func: 's_visitor_login',
            timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
            SessionUid: 'bh0bapabtd45epsgra79segbch6c1ibk',
            TypeCharOne: 'pc',
            appkey: '202004041613277377A6A2456D34A4948AE84'
          }
          param.LText = md5(window.btoa('bh0bapabtd45epsgra79segbch6c1ibk' + param.timestamp))
          param.secretkey = md5(param.LText + 'mingke' + param.timestamp)
          let params = {
            url: 'https://sso.mk9h.cn/webapi/dologon',
            method: 'post',
            data: JSON.stringify(param)
          }
          Api.directRequest(params)
          return
        }
        clearTimeout(this.timer)
        this.setState({
          verdisabled: false,
src/templates/sharecomponent/searchcomponent/index.jsx
@@ -354,6 +354,7 @@
        {/* 编辑搜索条件 */}
        <Modal
          title={card && card.copyType === 'search' ?  '搜索条件-复制' : '搜索条件-编辑'}
          wrapClassName="mk-scroll-modal"
          visible={visible}
          width={850}
          maskClosable={false}
src/templates/zshare/formconfig.jsx
@@ -3145,7 +3145,7 @@
      type: 'text',
      key: 'separator',
      label: '连接符',
      initVal: card.separator === undefined ? '/' : card.separator,
      initVal: card.separator === undefined ? ',' : card.separator,
      tooltip: '表单提交时信息之间的连接符。注:连接符为空时,初始化时填充其他表单无效。',
      required: false,
      readonly: false
@@ -4056,7 +4056,7 @@
      type: 'multiselect',
      key: 'linkSubField',
      label: '填充表单',
      tooltip: '在切换选项时会把信息自动填入关联的表单(文本或数字表单)中。',
      tooltip: '在切换选项时会把信息自动填入关联的表单(文本或数字表单)中,开关会将提示文本填入此表单。',
      initVal: card.linkSubField || [],
      options: inputfields
    },
src/templates/zshare/modalform/index.jsx
@@ -28,7 +28,7 @@
  multiselect: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'fieldlength', 'span', 'labelwidth', 'tooltip', 'extra', 'marginTop', 'marginBottom', 'dropdown'],
  link: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'declare', 'setAll', 'linkField', 'linkSubField', 'span', 'place', 'labelwidth', 'tooltip', 'extra', 'emptyText', 'enter', 'splitline', 'dropdown', 'marginTop', 'marginBottom', 'pickerMode'],
  fileupload: ['readonly', 'required', 'readin', 'fieldlength', 'maxfile', 'fileType', 'span', 'labelwidth', 'tooltip', 'extra', 'compress', 'miniSet', 'splitline', 'marginTop', 'marginBottom', 'maxSize'],
  switch: ['initval', 'openVal', 'closeVal', 'openText', 'closeText', 'readonly', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'splitline', 'marginTop', 'marginBottom'],
  switch: ['initval', 'openVal', 'closeVal', 'openText', 'closeText', 'readonly', 'hidden', 'readin', 'span', 'labelwidth', 'linkSubField', 'tooltip', 'extra', 'splitline', 'marginTop', 'marginBottom'],
  check: ['initval', 'openVal', 'closeVal', 'readonly', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'splitline', 'marginTop', 'marginBottom', 'checkTip'],
  date: ['initval', 'readonly', 'required', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'declareType', 'mode', 'splitline', 'place', 'marginTop', 'marginBottom', 'minDate', 'maxDate', 'precision'],
  datemonth: ['initval', 'readonly', 'required', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'splitline', 'place', 'marginTop', 'marginBottom'],
src/templates/zshare/verifycard/uniqueform/index.jsx
@@ -97,7 +97,7 @@
          {btn.Ot !== 'requiredOnce' ? <Col span={7}>
            <Form.Item label="验证类型">
              {getFieldDecorator('verifyType', {
                initialValue: 'physical',
                initialValue: 'logic',
                rules: [
                  {
                    required: true,
src/views/appmanage/index.jsx
@@ -112,6 +112,21 @@
  forbid = false
  UNSAFE_componentWillMount() {
    if (sessionStorage.getItem('devError') === 'true') {
      sessionStorage.clear()
      window.history.replaceState(null, null, window.location.href.split('#')[0] + '#/login')
      window.location.reload()
      return
    }
    if (!sessionStorage.getItem('UserID')) {
      sessionStorage.removeItem('isEditState')
      this.props.history.replace('/login')
      return
    }
    window.GLOB.developing = true
    document.body.className = ''
    this.getAppList()
    this.getSmStemp()
src/views/basedesign/index.jsx
@@ -40,6 +40,21 @@
  }
  UNSAFE_componentWillMount() {
    if (sessionStorage.getItem('devError') === 'true') {
      sessionStorage.clear()
      window.history.replaceState(null, null, window.location.href.split('#')[0] + '#/login')
      window.location.reload()
      return
    }
    if (!sessionStorage.getItem('UserID')) {
      sessionStorage.removeItem('isEditState')
      this.props.history.replace('/login')
      return
    }
    window.GLOB.developing = true
    try {
      let param = JSON.parse(window.decodeURIComponent(window.atob(this.props.match.params.param)))
src/views/interface/history/index.jsx
@@ -211,7 +211,7 @@
      interface: window.GLOB.baseurl + 'webapi/dostars',
      method: 'POST',
      params: [],
      raw: "{\n \"func\":\"******\",\n \"LoginUID\":\"" + (sessionStorage.getItem('LoginUID') || "******") + "\",\n \"UserID\":\"" + (sessionStorage.getItem('UserID') || "******") + "\",\n \"nonc\":\"" + Utils.getguid() + "\",\n \"t\":" + parseInt(new Date().getTime() / 1000) + "\n}",
      raw: "{\n \"func\":\"******\",\n \"LoginUID\":\"@loginuid@\",\n \"UserID\":\"@userid@\",\n \"nonc\":\"" + Utils.getguid() + "\",\n \"t\":" + parseInt(new Date().getTime() / 1000) + "\n}",
      id: 'dologon'
    }
    MKEmitter.emit('useInterface', m)
src/views/interface/workspace/request/index.jsx
@@ -95,7 +95,8 @@
    } else if (config.active === 'raw') {
      if (config.raw) {
        try {
          raws = JSON.parse(config.raw)
          raws = config.raw.replace(/@userid@/ig, sessionStorage.getItem('UserID') || '').replace(/@LoginUID@/ig, sessionStorage.getItem('LoginUID') || '')
          raws = JSON.parse(raws)
        } catch (e) {
          Modal.error({
            title: '参数格式错误,必须为JSON格式!'
@@ -281,6 +282,7 @@
                <Radio value={'formData'}>formData</Radio>
                <Radio value={'raw'}>raw</Radio>
              </Radio.Group>
              {active === 'raw' ? <span style={{float: 'right', color: '#a5a5a5', fontSize: '13px'}}>注:使用@userid@、@loginuid@时将自动替换。</span> : null}
            </div>
            <div className={'body-content ' + (active === 'none' ? 'show' : '')}>
              <div className="no-body">This request does not have a body</div>
src/views/login/index.jsx
@@ -1,5 +1,5 @@
import React, { Component } from 'react'
import { message, Modal, notification } from 'antd'
import { message, Modal } from 'antd'
import md5 from 'md5'
import moment from 'moment'
@@ -322,27 +322,6 @@
      }
    }
    if (sessionStorage.getItem('loginError')) {
      try {
        let res = JSON.parse(sessionStorage.getItem('loginError'))
        console.info(res.url)
        console.info(res.request)
        console.info(res.response)
        let result = JSON.parse(res.response)
        notification.warning({
          top: 92,
          message: result.message,
          duration: 5
        })
      } catch (e) {}
      setTimeout(() => {
        sessionStorage.removeItem('loginError')
      }, 2000)
    }
    const _addressUrl = _href + 'queryAddress'
    if (localStorage.getItem(_addressUrl) === 'true') {
@@ -520,7 +499,30 @@
            authError: res.message
          })
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') {
          let param = {
            func: 's_visitor_login',
            timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
            SessionUid: _id,
            TypeCharOne: 'pc',
            appkey: '202004041613277377A6A2456D34A4948AE84'
          }
          param.LText = md5(window.btoa(_id + param.timestamp))
          param.secretkey = md5(param.LText + 'mingke' + param.timestamp)
          let params = {
            url: _rduri.replace('dostars', 'dologon'),
            method: 'post',
            data: JSON.stringify(param)
          }
          Api.directRequest(params)
          return
        }
        if (index === -1 || index > 10) {
          this.setState({
            auth: false,
src/views/login/loginform.jsx
@@ -329,7 +329,30 @@
          })
          message.warning(res.message)
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') {
          let param = {
            func: 's_visitor_login',
            timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
            SessionUid: 'bh0bapabtd45epsgra79segbch6c1ibk',
            TypeCharOne: 'pc',
            appkey: '202004041613277377A6A2456D34A4948AE84'
          }
          param.LText = md5(window.btoa('bh0bapabtd45epsgra79segbch6c1ibk' + param.timestamp))
          param.secretkey = md5(param.LText + 'mingke' + param.timestamp)
          let params = {
            url: 'https://sso.mk9h.cn/webapi/dologon',
            method: 'post',
            data: JSON.stringify(param)
          }
          Api.directRequest(params)
          return
        }
        if (LoginVerCodeTimer) {
          clearTimeout(LoginVerCodeTimer)
        }