king
2023-01-14 004176924ce35c96600f5c18e85478944de8bec6
2023-01-14
32个文件已修改
863 ■■■■ 已修改文件
src/api/cacheutils.js 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/header/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/settingform/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/balcony/index.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/balcony/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/data-card/index.jsx 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/prop-card/index.jsx 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/prop-card/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/table-card/index.jsx 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/table-card/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/carousel/data-card/index.jsx 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/carousel/prop-card/index.jsx 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/carousel/prop-card/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-G6/index.jsx 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-bar-line/index.jsx 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-dashboard/index.jsx 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-pie/index.jsx 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-scatter/index.jsx 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/custom-chart/index.jsx 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/code/sand-box/index.jsx 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/group/normal-group/index.jsx 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/share/tabtransfer/index.jsx 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/normal-table/index.jsx 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/timeline/normal-timeline/index.jsx 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/timeline/normal-timeline/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/tree/antd-tree/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.jsx 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/popview/index.jsx 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/changeuserbutton/index.jsx 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils-datamanage.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.jsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cacheutils.js
@@ -22,6 +22,13 @@
          throw 'CREATE TABLE ERROR'
        })
        tx.executeSql('CREATE TABLE IF NOT EXISTS CACHES (menuid varchar(50), CreateDate varchar(50), LongParam text, CDefine1 varchar(50), CDefine2 varchar(50))', [], () => {
        }, () => {
          // eslint-disable-next-line
          throw 'CREATE TABLE ERROR'
        })
        if (window.GLOB.systemType === '') {
          tx.executeSql('CREATE TABLE IF NOT EXISTS FUNCS (func_code varchar(50), key_sql text, CDefine1 varchar(50), CDefine2 varchar(50), CDefine3 varchar(50))', [], () => {
@@ -217,11 +224,55 @@
  }
  /**
   * @description 将缓存数据写入websql
   */
  static writeCacheInWebSql (data) {
    if (!window.GLOB.WebSql) return
    window.GLOB.WebSql.transaction(tx => {
      tx.executeSql(`DELETE FROM CACHES where menuid='${data[0]}'`)
      if (data[2]) {
        tx.executeSql('INSERT INTO CACHES (menuid, CreateDate, LongParam) VALUES (?, ?, ?)', data)
      }
    })
  }
  /**
   * @description 获取websql中的配置信息
   */
  static getWebSqlCacheConfig (MenuID) {
    if (!window.GLOB.WebSql) return Promise.resolve()
    return new Promise((resolve, reject) => {
      window.GLOB.WebSql.transaction(tx => {
        tx.executeSql(`SELECT * FROM CACHES WHERE menuid='${MenuID}'`, [], (tx, results) => {
          resolve(results.rows[0])
        }, (tx, results) => {
          console.warn(results)
          resolve()
        })
      })
    })
  }
  /**
   * @description 删除websql中超过7天的缓存信息
   */
  static delWebSqlCacheConfig (date, type) {
    if (!window.GLOB.WebSql) return
    window.GLOB.WebSql.transaction(tx => {
      if (type === 'all') {
        tx.executeSql('DELETE FROM CACHES')
      } else {
        tx.executeSql(`DELETE FROM CACHES where CreateDate<'${date}'`)
      }
    })
  }
  /**
   * @description 打开IndexedDB
   */
  static openIndexDB (db) {
    try {
      let request = window.indexedDB.open(db, 1)
      let request = window.indexedDB.open(db, 2)
      request.onerror = () => {
        console.warn('IndexedDB 初始化失败!')
      }
@@ -237,6 +288,9 @@
          let objectStore = window.GLOB.IndexDB.createObjectStore('configs', { keyPath: 'id' })
          objectStore.createIndex('menuid', 'menuid', { unique: false })
          objectStore.createIndex('userid', 'userid', { unique: false })
        }
        if (!window.GLOB.IndexDB.objectStoreNames.contains('caches')) {
          window.GLOB.IndexDB.createObjectStore('caches', { keyPath: 'menuid' })
        }
        if (window.GLOB.systemType === '' && !window.GLOB.IndexDB.objectStoreNames.contains('funcs')) {
          window.GLOB.IndexDB.createObjectStore('funcs', { keyPath: 'id' })
@@ -440,12 +494,62 @@
  static writeInIndexDB (data) {
    if (!window.GLOB.IndexDB || !data) return
    let request = window.GLOB.IndexDB.transaction(['configs'], 'readwrite')
      .objectStore('configs')
      .add(data)
    window.GLOB.IndexDB.transaction(['configs'], 'readwrite').objectStore('configs').add(data)
  }
    request.onerror = () => {
      window.GLOB.IndexDB = null
  /**
   * @description 将数据写入IndexedDB
   */
  static writeCacheInIndexDB (data) {
    if (!window.GLOB.IndexDB) return
    let objectStore = window.GLOB.IndexDB.transaction(['caches'], 'readwrite').objectStore('caches')
    objectStore.delete(data.menuid)
    if (data.LongParam) {
      objectStore.add(data)
    }
  }
  /**
   * @description 获取IndexedDB中的配置信息
   */
  static getIndexDBCacheConfig (MenuID) {
    if (!window.GLOB.IndexDB) return Promise.resolve()
    return new Promise((resolve, reject) => {
      let request = window.GLOB.IndexDB.transaction(['caches']).objectStore('caches').get(MenuID)
      request.onerror = () => {
        resolve()
      }
      request.onsuccess = () => {
        resolve(request.result)
      }
    })
  }
  /**
   * @description 删除IndexedDB中超过7天的缓存信息
   */
  static delIndexDBCacheConfig (date, type) {
    if (!window.GLOB.IndexDB) return
    if (type === 'all') {
      window.GLOB.IndexDB.transaction(['caches'], 'readwrite').objectStore('caches').clear()
    } else {
      let request = window.GLOB.IndexDB.transaction(['caches'], 'readwrite').objectStore('caches').openCursor()
      request.onsuccess = (e) => {
        let cursor = e.target.result
        if (cursor) {
          if (cursor.value.CreateDate < date) {
            cursor.delete()
          }
          cursor.continue()
        }
      }
    }
  }
}
src/api/index.js
@@ -264,7 +264,7 @@
  /**
   * @description 手机号验证码登录
   */
  getphoneusermsg (phoneNo, checkcode, isCloud = false, ipAddress, city) {
  getphoneusermsg (phoneNo, checkcode, isCloud = false) {
    let param = {
      // func: 'webapi_login',
      mob: phoneNo,
@@ -273,8 +273,8 @@
      check_code: checkcode,
      way_no: 'sms_vcode',
      systemType: options.sysType,
      login_city: city,
      login_id_address: ipAddress,
      login_city: sessionStorage.getItem('city') || '',
      login_id_address: sessionStorage.getItem('ipAddress') || '',
      kei_id: window.btoa(window.encodeURIComponent(window.GLOB.host)),
      device_id: localStorage.getItem('SessionUid'),
      appkey: window.GLOB.appkey || ''
@@ -303,14 +303,14 @@
  /**
   * @description 登录系统, 获取用户信息
   */
  getusermsg (username, password, isCloud = false, ipAddress, city) {
  getusermsg (username, password, isCloud = false) {
    let param = {
      // func: 'webapi_login',
      UserName: username,
      systemType: options.sysType,
      Type: 'S',
      login_city: city,
      login_id_address: ipAddress,
      login_city: sessionStorage.getItem('city') || '',
      login_id_address: sessionStorage.getItem('ipAddress') || '',
      kei_id: window.btoa(window.encodeURIComponent(window.GLOB.host)),
      device_id: localStorage.getItem('SessionUid'),
      timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
@@ -361,6 +361,55 @@
    })
  }
  delCacheConfig (type = '') {
    let date = moment().subtract(7, 'days').format('YYYY-MM-DD')
    CacheUtils.delWebSqlCacheConfig(date, type)
    CacheUtils.delIndexDBCacheConfig(date, type)
  }
  writeCacheConfig (menuid, data) {
    if (!menuid) return
    let date = moment().format('YYYY-MM-DD')
    let _data = data ? JSON.stringify(data) : ''
    CacheUtils.writeCacheInWebSql([menuid, date, _data])
    CacheUtils.writeCacheInIndexDB({menuid, CreateDate: date, LongParam: _data})
  }
  getLCacheConfig (menuid) {
    return new Promise((resolve, reject) => {
      if (window.GLOB.WebSql) {
        CacheUtils.getWebSqlCacheConfig(menuid).then(res => {
          if (res && res.LongParam) {
            let _data = JSON.parse(res.LongParam)
            if (_data.length === 0) {
              resolve()
            } else {
              resolve(_data)
            }
          } else {
            resolve()
          }
        })
      } else if (window.GLOB.IndexDB) {
        CacheUtils.getIndexDBCacheConfig(menuid).then(res => {
          if (res && res.LongParam) {
            let _data = JSON.parse(res.LongParam)
            if (_data.length === 0) {
              resolve()
            } else {
              resolve(_data)
            }
          } else {
            resolve()
          }
        })
      } else {
        resolve()
      }
    })
  }
  /**
   * @description 获取系统版本信息,启用或更新websql
   */
src/components/header/index.jsx
@@ -558,6 +558,7 @@
            resolve()
          } else {
            Api.updateAppVersion()
            Api.delCacheConfig('all')
            setTimeout(() => {
              notification.success({
                top: 92,
src/menu/datasource/verifycard/settingform/index.jsx
@@ -86,12 +86,17 @@
  }
  handleConfirm = () => {
    const { config } = this.props
    // 表单提交时检查输入值是否正确
    return new Promise((resolve, reject) => {
      this.props.form.validateFieldsAndScroll((err, values) => {
        if (!err) {
          values.sync = values.sync || 'false'
          if (['navbar', 'balcony', 'menubar', 'interface'].includes(config.type)) {
            values.onload = 'true'
          }
          // 数据源前端验证
          if (values.interType === 'system' && values.execute !== 'false' && values.dataresource) {
            let _quot = values.dataresource.match(/'{1}/g)
src/tabviews/custom/components/card/balcony/index.jsx
@@ -127,7 +127,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('syncBalconyData', this.syncBalconyData)
@@ -142,6 +142,17 @@
    if (config.timer && config.wrap.datatype === 'dynamic') {
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {this.loadData(true)})
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        let _data = res[0]
        _data.$$uuid = _data[config.setting.primaryKey] || ''
        this.setState({data: _data})
      })
    }
  }
@@ -181,7 +192,6 @@
      _data.$$BID = BID || ''
      _data.$$BData = BData || ''
      _data.$$uuid = _data[config.setting.primaryKey] || ''
      this.setState({sync: false, data: _data})
    }
  }
@@ -321,6 +331,10 @@
    if (result.status) {
      let _data = {}
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      if (!result.data || !result.data[0]) {
        _data.$$empty = true
      } else {
src/tabviews/custom/components/card/balcony/index.scss
@@ -46,9 +46,9 @@
  .loading-mask {
    position: absolute;
    left: 40px;
    left: 0px;
    top: 0;
    right: 40px;
    right: 0px;
    bottom: 0px;
    display: flex;
    align-items: center;
src/tabviews/custom/components/card/data-card/index.jsx
@@ -196,7 +196,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('mkCheckAll', this.mkCheckAll)
@@ -212,6 +212,28 @@
        }, () => {
          this.loadData('', 'timer')
        })
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        let _data = res.map((item, index) => {
          item.key = index
          item.$$uuid = item[config.setting.primaryKey] || ''
          item.$Index = index + 1 + ''
          if (config.wrap.controlField) {
            if (config.wrap.controlVal.includes(item[config.wrap.controlField])) {
              item.$disabled = true
            }
          }
          return item
        })
        this.setState({data: _data})
      })
    }
  }
@@ -583,6 +605,10 @@
        start = config.setting.pageSize * (pageIndex - 1) + 1
      }
      if (config.$cache && pageIndex === 1) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      if (selected !== 'false' || (id && config.wrap.selected !== 'false')) {
        setTimeout(() => {
          this.checkTopLine(id)
src/tabviews/custom/components/card/prop-card/index.jsx
@@ -157,7 +157,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -171,6 +171,17 @@
    if (config.timer && config.wrap.datatype === 'dynamic') {
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {this.loadData(true)})
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        let _data = res[0]
        _data.$$uuid = _data[config.setting.primaryKey] || ''
        this.setState({data: _data})
      })
    }
  }
@@ -383,6 +394,10 @@
    if (result.status) {
      let _data = {}
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      if (!result.data || !result.data[0]) {
        _data.$$empty = true
      } else {
src/tabviews/custom/components/card/prop-card/index.scss
@@ -63,9 +63,9 @@
  .loading-mask {
    position: absolute;
    left: 40px;
    left: 0px;
    top: 0;
    right: 40px;
    right: 0px;
    bottom: 0px;
    display: flex;
    align-items: center;
src/tabviews/custom/components/card/table-card/index.jsx
@@ -122,7 +122,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -137,6 +137,21 @@
        }, () => {
          this.loadData('timer')
        })
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        let _data = res.map((item, index) => {
          item.key = index
          item.$$uuid = item[config.setting.primaryKey] || ''
          item.$Index = index + 1 + ''
          return item
        })
        this.setState({data: _data})
      })
    }
  }
@@ -297,6 +312,10 @@
        start = config.setting.pageSize * (pageIndex - 1) + 1
      }
      if (config.$cache && pageIndex === 1) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      let data = []
      if (type === 'plus') {
src/tabviews/custom/components/card/table-card/index.scss
@@ -68,9 +68,9 @@
  .loading-mask {
    position: absolute;
    left: 40px;
    left: 0px;
    top: 0;
    right: 40px;
    right: 0px;
    bottom: 0px;
    display: flex;
    align-items: center;
src/tabviews/custom/components/carousel/data-card/index.jsx
@@ -117,7 +117,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
    MKEmitter.addListener('queryModuleParam', this.queryModuleParam)
@@ -127,6 +127,21 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData('timer')
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        let _data = res.map((item, index) => {
          item.key = index
          item.$$uuid = item[config.setting.primaryKey] || ''
          item.$Index = index + 1 + ''
          return item
        })
        this.setState({data: _data})
      })
    }
  }
@@ -276,6 +291,10 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      this.setState({
        data: result.data.map((item, index) => {
          item.key = index
src/tabviews/custom/components/carousel/prop-card/index.jsx
@@ -117,7 +117,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -128,6 +128,17 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData('timer')
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        let _data = res[0]
        _data.$$uuid = _data[config.setting.primaryKey] || ''
        this.setState({data: _data})
      })
    }
  }
@@ -294,6 +305,10 @@
    if (result.status) {
      let _data = {}
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      if (!result.data || !result.data[0]) {
        _data.$$empty = true
      } else {
src/tabviews/custom/components/carousel/prop-card/index.scss
@@ -21,9 +21,9 @@
  .loading-mask {
    position: absolute;
    left: 40px;
    left: 0px;
    top: 0;
    right: 40px;
    right: 0px;
    bottom: 0px;
    display: flex;
    align-items: center;
src/tabviews/custom/components/chart/antv-G6/index.jsx
@@ -804,7 +804,7 @@
  state = {
    config: null,
    data: null,
    data: [],
    BID: '',
    BData: '',
    plot: null,
@@ -850,7 +850,7 @@
    this.setState({
      config: _config,
      data: _data,
      data: _data || [],
      BID: BID || '',
      BData: BData || '',
      arr_field: _config.columns.map(col => col.field).join(','),
@@ -865,40 +865,8 @@
        this.handleData()
      }
    })
  }
  /**
   * @description 图表数据更新,刷新内容
   */
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { sync, config } = this.state
    if (sync && !is(fromJS(this.props.data), fromJS(nextProps.data))) {
      let _data = []
      if (nextProps.data && nextProps.data[config.dataName]) {
        _data = nextProps.data[config.dataName]
      }
      this.setState({sync: false, data: _data}, () => {
        this.handleData()
      })
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
      })
    }
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState))
  }
  componentDidMount () {
    const { config } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
    let that = this
    if (config.plot.subtype === 'mindmap') {
@@ -1028,6 +996,51 @@
  }
  /**
   * @description 图表数据更新,刷新内容
   */
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { sync, config } = this.state
    if (sync && !is(fromJS(this.props.data), fromJS(nextProps.data))) {
      let _data = []
      if (nextProps.data && nextProps.data[config.dataName]) {
        _data = nextProps.data[config.dataName]
      }
      this.setState({sync: false, data: _data})
      if (!is(fromJS(this.state.data), fromJS(_data))) {
        this.handleData()
      }
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
      })
    }
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState))
  }
  componentDidMount () {
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res})
        this.handleData()
      })
    }
  }
  /**
   * @description 组件销毁,清除state更新,清除快捷键设置
   */
  componentWillUnmount () {
@@ -1059,11 +1072,11 @@
  async loadData () {
    const { mainSearch } = this.props
    const { config, arr_field, BID } = this.state
    const { config, arr_field, BID, data } = this.state
    if (config.setting.supModule && !BID) { // BID 不存在时,不做查询
      this.setState({
        data: {}
        data: []
      }, () => {
        this.handleData()
      })
@@ -1086,14 +1099,18 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      let data = result.data || []
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      this.setState({
        data,
        data: result.data || [],
        loading: false
      }, () => {
        this.handleData()
      })
      if (!is(fromJS(data), fromJS(result.data || []))) {
        this.handleData()
      }
    } else {
      this.setState({
        loading: false
@@ -1256,14 +1273,20 @@
  }
  handleData = () => {
    const { plot, data } = this.state
    let _element = document.getElementById(this.state.chartId)
    if (_element) {
      _element.innerHTML = ''
    }
    if (!data || data.length === 0) {
    setTimeout(() => {
      this.viewrender()
    }, 100)
  }
  viewrender = () => {
    const { plot, data } = this.state
    if (data.length === 0) {
      this.setState({empty: true})
    } else {
      this.setState({empty: false})
src/tabviews/custom/components/chart/antv-bar-line/index.jsx
@@ -37,7 +37,7 @@
    transfield: {},            // 字段名称翻译
    sync: false,               // 是否统一请求数据
    plot: null,                // 图表设置
    data: null,                // 数据
    data: [],                  // 数据
    search: null,              // 搜索条件
    vFields: [],               // 数值字段
    vstFields: null,           // 统计数据值字段信息
@@ -335,7 +335,7 @@
    this.setState({
      config: _config,
      data: _data,
      data: _data || [],
      BID: BID || '',
      vFields: vFields,
      vstFields: vstFields,
@@ -359,7 +359,7 @@
   * @description 图表数据更新,刷新内容
   */
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { sync, config } = this.state
    const { sync, config, data } = this.state
    if (sync && !is(fromJS(this.props.data), fromJS(nextProps.data))) {
      let _data = []
@@ -367,9 +367,11 @@
        _data = nextProps.data[config.dataName] || []
      }
      this.setState({sync: false, data: _data}, () => {
      this.setState({sync: false, data: _data})
      if (!is(fromJS(data), fromJS(_data))) {
        this.handleData()
      })
      }
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
@@ -382,7 +384,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -393,6 +395,16 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData(true)
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res}, () => {
          this.handleData()
        })
      })
    }
  }
@@ -522,19 +534,18 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      let reset = true
      if (hastimer && is(fromJS(result.data), fromJS(this.state.data))) {
        reset = false
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      this.setState({
        data: result.data,
        data: result.data || [],
        loading: false
      }, () => {
        if (!reset) return
        this.handleData()
      })
      if (!is(fromJS(this.state.data), fromJS(result.data || []))) {
        this.handleData()
      }
    } else {
      this.setState({
        loading: false
@@ -577,7 +588,7 @@
  getdata = () => {
    const { data, plot, vFields, config } = this.state
    if (!data || data.length === 0) {
    if (data.length === 0) {
      this.setState({empty: true})
      return []
    }
@@ -726,7 +737,7 @@
      percent = true
    }
    if (!data || data.length === 0) {
    if (data.length === 0) {
      this.setState({empty: true})
      return []
    }
src/tabviews/custom/components/chart/antv-dashboard/index.jsx
@@ -156,9 +156,11 @@
        }
      }
      this.setState({sync: false, data: _data}, () => {
      this.setState({sync: false, data: _data})
      if (!is(fromJS(this.state.data), fromJS(_data))) {
        this.handleData()
      })
      }
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
@@ -171,7 +173,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -180,6 +182,23 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData(true)
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        let _data = null
        if (config.subtype === 'ratioboard') {
          _data = res
        } else {
          _data = {value: res[0][config.plot.valueField]}
        }
        this.setState({data: _data}, () => {
          this.handleData()
        })
      })
    }
  }
@@ -221,7 +240,10 @@
    if (_element) {
      _element.innerHTML = ''
    }
    this.viewrender()
    setTimeout(() => {
      this.viewrender()
    }, 100)
  }
  async loadData (hastimer) {
@@ -255,6 +277,10 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      let data = null
      if (config.subtype === 'ratioboard') {
        data = result.data || []
@@ -264,19 +290,15 @@
          data.value = result.data[0][config.plot.valueField]
        }
      }
      let reset = true
      if (hastimer && is(fromJS(data), fromJS(this.state.data))) {
        reset = false
      }
      this.setState({
        data,
        loading: false
      }, () => {
        if (!reset) return
        this.handleData()
      })
      if (!is(fromJS(this.state.data), fromJS(data))) {
        this.handleData()
      }
    } else {
      this.setState({
        loading: false
src/tabviews/custom/components/chart/antv-pie/index.jsx
@@ -32,7 +32,7 @@
    title: '',                 // 组件标题
    sync: false,               // 是否统一请求数据
    plot: null,                // 图表设置
    data: null,                // 数据
    data: [],                  // 数据
    search: null,              // 搜索条件
    chart: null
  }
@@ -83,7 +83,7 @@
    this.setState({
      config: _config,
      data: _data,
      data: _data || [],
      BID: BID || '',
      arr_field: _config.columns.map(col => col.field).join(','),
      plot: _config.plot,
@@ -113,9 +113,11 @@
        _data = nextProps.data[config.dataName] || []
      }
      this.setState({sync: false, data: _data}, () => {
      this.setState({sync: false, data: _data})
      if (!is(fromJS(this.state.data), fromJS(_data))) {
        this.handleData()
      })
      }
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
@@ -128,7 +130,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -137,6 +139,16 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData(true)
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res}, () => {
          this.handleData()
        })
      })
    }
  }
@@ -174,12 +186,18 @@
  }
  handleData = () => {
    const { plot, chartId } = this.state
    let _element = document.getElementById(chartId)
    let _element = document.getElementById(this.state.chartId)
    if (_element) {
      _element.innerHTML = ''
    }
    setTimeout(() => {
      this.viewrender()
    }, 100)
  }
  viewrender = () => {
    const { plot } = this.state
    if (plot.shape === 'nest') {
      this.nestrender()
@@ -227,19 +245,18 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      let reset = true
      if (hastimer && is(fromJS(result.data), fromJS(this.state.data))) {
        reset = false
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      this.setState({
        data: result.data,
        data: result.data || [],
        loading: false
      }, () => {
        if (!reset) return
        this.handleData()
      })
      if (!is(fromJS(this.state.data), fromJS(result.data || []))) {
        this.handleData()
      }
    } else {
      this.setState({
        loading: false
src/tabviews/custom/components/chart/antv-scatter/index.jsx
@@ -33,7 +33,7 @@
    chartId: Utils.getuuid(),  // 图表Id
    sync: false,               // 是否统一请求数据
    plot: null,                // 图表设置
    data: null,                // 数据
    data: [],                  // 数据
    search: null,              // 搜索条件
    chart: null
  }
@@ -74,7 +74,7 @@
    this.setState({
      config: _config,
      data: _data,
      data: _data || [],
      BID: BID || '',
      empty: !_data,
      arr_field: _config.columns.map(col => col.field).join(','),
@@ -104,9 +104,11 @@
        _data = nextProps.data[config.dataName] || []
      }
      this.setState({sync: false, data: _data, empty: !_data,}, () => {
      this.setState({sync: false, data: _data, empty: false})
      if (!is(fromJS(this.state.data), fromJS(_data))) {
        this.handleData()
      })
      }
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
@@ -119,7 +121,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -130,6 +132,16 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData(true)
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res, empty: false}, () => {
          this.handleData()
        })
      })
    }
  }
@@ -260,20 +272,19 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      let reset = true
      if (hastimer && is(fromJS(result.data), fromJS(this.state.data))) {
        reset = false
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      
      this.setState({
        data: result.data,
        data: result.data || [],
        empty: false,
        loading: false
      }, () => {
        if (!reset) return
        this.handleData()
      })
      if (!is(fromJS(this.state.data), fromJS(result.data || []))) {
        this.handleData()
      }
    } else {
      this.setState({
        loading: false
@@ -302,7 +313,10 @@
    if (_element) {
      _element.innerHTML = ''
    }
    this.scatterrender()
    setTimeout(() => {
      this.scatterrender()
    }, 100)
  }
  /**
src/tabviews/custom/components/chart/custom-chart/index.jsx
@@ -28,7 +28,7 @@
    loading: false,            // 数据加载状态
    sync: false,               // 是否统一请求数据
    plot: null,                // 图表设置
    data: null,                // 数据
    data: [],                  // 数据
    search: null,              // 搜索条件
  }
@@ -63,7 +63,7 @@
    this.setState({
      config: _config,
      data: _data,
      data: _data || [],
      empty: !_data || _data.length === 0,
      BID: BID || '',
      arr_field: _config.columns.map(col => col.field).join(','),
@@ -93,9 +93,11 @@
        _data = nextProps.data[config.dataName] || []
      }
      this.setState({sync: false, data: _data, empty: _data.length === 0}, () => {
      this.setState({sync: false, data: _data, empty: _data.length === 0})
      if (!is(fromJS(this.state.data), fromJS(_data))) {
        this.handleData()
      })
      }
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
@@ -108,7 +110,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -119,6 +121,16 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData(true)
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res, empty: false}, () => {
          this.handleData()
        })
      })
    }
  }
@@ -248,20 +260,19 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      let reset = true
      if (hastimer && is(fromJS(result.data), fromJS(this.state.data))) {
        reset = false
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      this.setState({
        data: result.data,
        loading: false,
        empty: result.data.length === 0
      }, () => {
        if (!reset) return
        this.handleData()
      })
      if (!is(fromJS(this.state.data), fromJS(result.data || []))) {
        this.handleData()
      }
    } else {
      this.setState({
        loading: false
@@ -287,7 +298,7 @@
    
    setTimeout(() => {
      this.viewrender()
    }, 150)
    }, 100)
  }
  /**
src/tabviews/custom/components/code/sand-box/index.jsx
@@ -84,7 +84,19 @@
  }
  componentDidMount () {
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res[0]}, () => {
          this.renderView()
        })
      })
    }
  }
  shouldComponentUpdate (nextProps, nextState) {
@@ -110,9 +122,13 @@
        _data = nextProps.data[config.dataName]
      }
      this.setState({sync: false, data: _data}, () => {
        this.renderView()
      })
      this.setState({sync: false, data: _data})
      if (!is(fromJS(this.state.data), fromJS(_data))) {
        setTimeout(() => {
          this.renderView()
        }, 10)
      }
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
@@ -164,12 +180,20 @@
    if (result.status) {
      let _data = result.data || {}
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      this.setState({
        data: _data,
        loading: false
      }, () => {
        this.renderView()
      })
      if (!is(fromJS(this.state.data), fromJS(_data))) {
        setTimeout(() => {
          this.renderView()
        }, 10)
      }
    } else {
      this.setState({
        loading: false
src/tabviews/custom/components/group/normal-group/index.jsx
@@ -103,14 +103,15 @@
   * @description 主表数据加载
   */ 
  loadmaindata = (params) => {
    const { config } = this.props
    let BID = ''
    let BData = window.GLOB.CacheData.get(this.props.config.$pageId)
    let BData = window.GLOB.CacheData.get(config.$pageId)
    if (BData) {
      BID = BData.$BID || ''
    }
    let param = getStructuredParams(params, this.props.config, BID)
    let param = getStructuredParams(params, config, BID)
    Api.genericInterface(param).then(result => {
      if (result.status) {
@@ -119,6 +120,16 @@
        delete result.ErrMesg
        delete result.ErrCode
        if (config.$cache) {
          params.forEach((item) => {
            let _data = result[item.name] || ''
            if (_data && !Array.isArray(_data)) {
              _data = [_data]
            }
            Api.writeCacheConfig(item.uuid, _data)
          })
        }
        this.setState({
          data: result
        })
src/tabviews/custom/components/share/tabtransfer/index.jsx
@@ -124,14 +124,15 @@
   * @description 主表数据加载
   */ 
  loadmaindata = (params) => {
    const { config } = this.props
    let BID = ''
    let BData = window.GLOB.CacheData.get(this.props.config.$pageId)
    let BData = window.GLOB.CacheData.get(config.$pageId)
    if (BData) {
      BID = BData.$BID || ''
    }
    let param = getStructuredParams(params, this.props.config, BID)
    let param = getStructuredParams(params, config, BID)
    Api.genericInterface(param).then(result => {
      if (result.status) {
@@ -140,6 +141,16 @@
        delete result.ErrMesg
        delete result.ErrCode
        if (config.$cache) {
          params.forEach((item) => {
            let _data = result[item.name] || ''
            if (_data && !Array.isArray(_data)) {
              _data = [_data]
            }
            Api.writeCacheConfig(item.uuid, _data)
          })
        }
        this.setState({
          data: result
        })
src/tabviews/custom/components/table/normal-table/index.jsx
@@ -234,6 +234,10 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      if (config.$cache && pageIndex === 1) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      if ((setting.selected !== 'false' || (setting.orisel && id)) && result.data && result.data.length > 0) {
        setTimeout(() => {
          MKEmitter.emit('mkCheckTopLine', config.uuid, id, setting.selected)
@@ -657,7 +661,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync, setting } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -675,6 +679,35 @@
        })
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res.map((item, index) => {
          item.key = index
          item.$$uuid = item[config.setting.primaryKey] || ''
          item.$$key = '' + item.key + item.$$uuid
          item.$Index = index + 1 + ''
          if (config.absFields) {
            config.absFields.forEach(f => {
              if (!isNaN(item[f])) {
                item[f] = Math.abs(item[f])
              }
            })
          }
          if (setting.controlField) {
            if (setting.controlVal.includes(item[setting.controlField])) {
              item.$disabled = true
            }
          }
          return item
        })})
      })
    }
  }
  /**
src/tabviews/custom/components/timeline/normal-timeline/index.jsx
@@ -110,7 +110,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -121,6 +121,20 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData(true)
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res.map((item, index) => {
          item.key = index
          item.$$uuid = item[config.setting.primaryKey] || ''
          item.$Index = index + 1 + ''
          return item
        })})
      })
    }
  }
@@ -280,6 +294,10 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      this.setState({
        data: result.data.map((item, index) => {
          item.key = index
src/tabviews/custom/components/timeline/normal-timeline/index.scss
@@ -80,9 +80,9 @@
  .loading-mask {
    position: absolute;
    left: 40px;
    left: 0px;
    top: 0;
    right: 40px;
    right: 0px;
    bottom: 0px;
    display: flex;
    align-items: center;
src/tabviews/custom/components/tree/antd-tree/index.jsx
@@ -107,7 +107,7 @@
  }
  componentDidMount () {
    const { config } = this.state
    const { config, sync } = this.state
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
@@ -116,6 +116,16 @@
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {
        this.loadData(true)
      })
    }
    if (config.$cache && (config.setting.sync !== 'true' || sync)) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res) return
        this.setState({data: res}, () => {
          this.handleData()
        })
      })
    }
  }
@@ -186,6 +196,10 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      if (config.$cache) {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      this.setState({
        data: result.data,
        loading: false
src/tabviews/custom/index.jsx
@@ -197,9 +197,10 @@
        popview = 'popview'
      }
      config.interfaces = this.formatInterSetting(config.interfaces, regs)
      config.$cache = config.cacheLocal === 'true'
      config.components = this.filterComponent(config.components, roleId, window.GLOB.mkActions, balMap, skip, param, MenuID, config.interfaces, popview)
      config.interfaces = this.formatInterSetting(config.interfaces, regs)
      config.components = this.filterComponent(config.components, roleId, window.GLOB.mkActions, balMap, skip, param, MenuID, config.interfaces, popview, config.$cache)
      
      // 获取主搜索条件
      let mainSearch = []
@@ -307,9 +308,10 @@
    }
  }
  filterComponent = (components, roleId, permAction, balMap, skip, urlparam, pageId, interfaces, popview) => {
  filterComponent = (components, roleId, permAction, balMap, skip, urlparam, pageId, interfaces, popview, cache) => {
    return components.filter(item => {
      item.$pageId = pageId
      item.$cache = cache
      
      if (item.style && item.style.boxShadow) {
        delete item.style.hShadow
@@ -393,7 +395,7 @@
        item.subtabs = item.subtabs.map(tab => {
          tab.$pageId = pageId
          tab.components = this.filterComponent(tab.components, roleId, permAction, balMap, skip, urlparam, pageId, interfaces, popview)
          tab.components = this.filterComponent(tab.components, roleId, permAction, balMap, skip, urlparam, pageId, interfaces, popview, cache)
          return tab
        })
@@ -406,7 +408,7 @@
          return false
        }
        item.components = this.filterComponent(item.components, roleId, permAction, balMap, skip, urlparam, pageId, interfaces, popview)
        item.components = this.filterComponent(item.components, roleId, permAction, balMap, skip, urlparam, pageId, interfaces, popview, cache)
        return true
      } else if (['pie', 'bar', 'line', 'dashboard', 'scatter', 'chart'].includes(item.type)) {
@@ -988,7 +990,8 @@
   * @description 主表数据加载
   */ 
  loadmaindata = (params) => {
    let param = getStructuredParams(params, this.state.config, this.state.BID || '')
    const { config } = this.state
    let param = getStructuredParams(params, config, this.state.BID || '')
    this.setState({loading: true, loadingview: false})
@@ -998,6 +1001,16 @@
        delete result.message
        delete result.ErrMesg
        delete result.ErrCode
        if (config.$cache) {
          params.forEach((item) => {
            let _data = result[item.name] || ''
            if (_data && !Array.isArray(_data)) {
              _data = [_data]
            }
            Api.writeCacheConfig(item.uuid, _data)
          })
        }
        this.setState({
          data: result,
@@ -1300,7 +1313,7 @@
    return (
      <div className={'custom-page-wrap ' + (loadingview || loading ? 'loading' : '')} id={this.state.ContainerId} style={config ? config.style : null}>
        {(loadingview || loading) ? <Spin className="view-spin" size="large" /> : null}
        {(loadingview || (loading && !config.$cache)) ? <Spin className="view-spin" size="large" /> : null}
        <Row className="component-wrap">{this.getComponents()}</Row>
        {config && config.interfaces.length > 0 ? <MkInterfaces BID={BID} interfaces={config.interfaces}/> : null}
        {config && window.GLOB.breakpoint ? <DebugTable /> : null}
src/tabviews/custom/popview/index.jsx
@@ -129,7 +129,9 @@
      })
    }
    config.components = this.filterComponent(config.components, roleId, balMap, param, Tab)
    config.$cache = config.cacheLocal === 'true'
    config.components = this.filterComponent(config.components, roleId, balMap, param, Tab, config.$cache)
    
    // 获取主搜索条件
    let mainSearch = []
@@ -175,9 +177,10 @@
    })
  }
  filterComponent = (components, roleId, balMap, urlparam, Tab) => {
  filterComponent = (components, roleId, balMap, urlparam, Tab, cache) => {
    return components.filter(item => {
      item.$pageId = Tab.uuid
      item.$cache = cache
      
      if (item.style && item.style.boxShadow) {
        delete item.style.hShadow
@@ -261,7 +264,7 @@
        item.subtabs = item.subtabs.map(tab => {
          tab.$pageId = Tab.uuid
          tab.components = this.filterComponent(tab.components, roleId, balMap, urlparam, Tab)
          tab.components = this.filterComponent(tab.components, roleId, balMap, urlparam, Tab, cache)
          return tab
        })
@@ -274,7 +277,7 @@
          return false
        }
        item.components = this.filterComponent(item.components, roleId, balMap, urlparam, Tab)
        item.components = this.filterComponent(item.components, roleId, balMap, urlparam, Tab, cache)
        return true
      } else if (['pie', 'bar', 'line', 'dashboard', 'scatter', 'chart'].includes(item.type)) {
@@ -754,7 +757,8 @@
   * @description 主表数据加载
   */ 
  loadmaindata = (params) => {
    let param = getStructuredParams(params, this.state.config, this.state.BID || '')
    const { config } = this.state
    let param = getStructuredParams(params, config, this.state.BID || '')
    this.setState({loading: true})
@@ -764,6 +768,16 @@
        delete result.message
        delete result.ErrMesg
        delete result.ErrCode
        if (config.$cache) {
          params.forEach((item) => {
            let _data = result[item.name] || ''
            if (_data && !Array.isArray(_data)) {
              _data = [_data]
            }
            Api.writeCacheConfig(item.uuid, _data)
          })
        }
        this.setState({
          data: result,
@@ -1011,7 +1025,7 @@
    return (
      <div className={'pop-page-wrap ' + (loading ? 'loading' : '')} style={config ? config.style : null}>
        {loading ? <Spin className="view-spin" size="large" /> : null}
        {loading && !config.$cache ? <Spin className="view-spin" size="large" /> : null}
        <Row className="component-wrap">{this.getComponents()}</Row>
        {viewlost ? <NotFount msg={this.state.lostmsg} /> : null}
      </div>
src/tabviews/zshare/actionList/changeuserbutton/index.jsx
@@ -164,7 +164,10 @@
    let _this = this
    let param = {
      func: 'webapi_ChangeUser'
      func: 'webapi_ChangeUser',
      login_city: sessionStorage.getItem('city') || '',
      login_id_address: sessionStorage.getItem('ipAddress') || '',
      domain_name: window.btoa(window.encodeURIComponent(window.GLOB.host)),
    }
    if (this.props.BID) {
src/utils/utils-datamanage.js
@@ -733,7 +733,7 @@
 * @description 生成单个组件sPC_Get_structured_data请求参数
 */
export function getStructDefaultParam (component, searchlist, first) {
  const { columns, setting, dataName, format } = component
  const { columns, setting, dataName, format, uuid } = component
  let arr_field = columns.map(col => col.field)
  let _dataresource = setting.dataresource
@@ -799,6 +799,7 @@
  }
  return {
    uuid: uuid,
    name: dataName,
    $name: setting.$name,
    columns: columns,
src/views/login/index.jsx
@@ -68,11 +68,8 @@
   * @param {Object} param 用户名密码等信息
   */
  async loginsubmit (param) {
    let city = sessionStorage.getItem('city') || ''
    let ipAddress = sessionStorage.getItem('ipAddress') || ''
    // 登录提交
    let res = await Api.getusermsg(param.username, param.password, false, ipAddress, city)
    let res = await Api.getusermsg(param.username, param.password, false)
    if (res.status) {
      if (res.check_mob) {
        let loginWays = this.state.loginWays.filter(item => item.type === 'sms_vcode')
@@ -184,11 +181,8 @@
  }
  async phoneloginsubmit (param) {
    let city = sessionStorage.getItem('city') || ''
    let ipAddress = sessionStorage.getItem('ipAddress') || ''
    // 登录提交
    let res = await Api.getphoneusermsg(param.phone, param.vercode, false, ipAddress, city)
    let res = await Api.getphoneusermsg(param.phone, param.vercode, false)
    if (res.status) {
      sessionStorage.setItem('UserID', res.UserID)
      sessionStorage.setItem('LoginUID', res.LoginUID)
@@ -315,6 +309,10 @@
    //   if (!res || !res.ip) return
    //   sessionStorage.setItem('ipAddress', res.ip)
    // })
    setTimeout(() => {
      Api.delCacheConfig()
    }, 50)
    if (window.GLOB.filter) {
      let view = document.getElementById('mk-login-view')