king
2023-07-10 19e156d67e400bff8883425f3511812bb4f9d193
src/tabviews/custom/components/carousel/data-card/index.jsx
@@ -12,6 +12,7 @@
import './index.scss'
const CardItem = asyncComponent(() => import('../cardItem'))
const NormalHeader = asyncComponent(() => import('@/tabviews/custom/components/share/normalheader'))
class DataCard extends Component {
  static propTpyes = {
@@ -31,11 +32,12 @@
    visible: false
  }
  loaded = false
  UNSAFE_componentWillMount () {
    const { data, initdata } = this.props
    let _config = fromJS(this.props.config).toJS()
    let _card = _config.subcards[0]
    let _cols = new Map()
    let _data = null
    let _sync = _config.setting.sync === 'true'
@@ -61,6 +63,7 @@
    }
    if (_data) {
      this.loaded = true
      _data = _data.map((item, index) => {
        item.key = index
        item.$$uuid = item[_config.setting.primaryKey] || ''
@@ -71,23 +74,16 @@
      })
    }
    _config.columns.forEach(item => {
      if (item.type !== 'number') return
      _cols.set(item.field, item)
    })
    _card.style.height = _config.style.height
    if (_card.setting.click) {
      _card.style.cursor = 'pointer'
    }
    _card.elements = _card.elements.map(item => {
      if (item.eleType === 'number' && item.field && _cols.has(item.field) && typeof(item.decimal) !== 'number') {
        item.decimal = _cols.get(item.field).decimal || 0
      }
      return item
    })
    if (!_config.wrap.height) { // 兼容
      _config.wrap.height = _config.style.height || '300px'
      delete _config.style.height
    }
    _card.style.height = _config.wrap.height
    _config.wrap.speed = (_config.wrap.speed || 3) * 1000
@@ -123,6 +119,21 @@
        this.loadData('timer')
      })
    }
    if (config.$cache && !this.loaded) {
      Api.getLCacheConfig(config.uuid).then(res => {
        if (!res || this.loaded) 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})
      })
    }
  }
  shouldComponentUpdate (nextProps, nextState) {
@@ -147,10 +158,12 @@
        return item
      })
      this.loaded = true
      this.setState({sync: false, data: _data}, () => {
        this.openModal()
      })
    } else if (config.setting.syncRefresh && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
    } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
      })
@@ -168,7 +181,7 @@
    this.timer && this.timer.stop()
  }
  openModal = () => {
  openModal = (ErrCode) => {
    const { config, data } = this.state
    
    if (config.wrap.display !== 'modal' || !data || data.length === 0) return
@@ -182,6 +195,10 @@
      localStorage.setItem(code, data[0].$$uuid + data.length)
      Api.getAppVersion(true)
      if (ErrCode === '-1') {
        return
      }
    }
    setTimeout(() => {
@@ -204,10 +221,6 @@
      MKEmitter.emit('reloadData', config.setting.supModule, BID)
    } else {
      this.loadData()
    }
    if (position === 'popclose') { // 执行启动弹窗的按钮所选择的刷新项
      btn.$tabId && MKEmitter.emit('refreshPopButton', btn.$tabId)
    }
  }
@@ -250,6 +263,8 @@
        data: [],
        loading: false
      })
      this.loaded = true
      return
    }
@@ -270,30 +285,58 @@
    let result = await Api.genericInterface(param)
    if (result.status) {
      this.loaded = true
      if (config.$cache && config.setting.onload !== 'false') {
        Api.writeCacheConfig(config.uuid, result.data || '')
      }
      let data = result.data.map((item, index) => {
        item.key = index
        item.$$uuid = item[config.setting.primaryKey] || ''
        item.$$BID = BID || ''
        item.$$BData = BData || ''
        item.$Index = index + 1
        return item
      })
      this.setState({
        data: result.data.map((item, index) => {
          item.key = index
          item.$$uuid = item[config.setting.primaryKey] || ''
          item.$$BID = BID || ''
          item.$$BData = BData || ''
          item.$Index = index + 1
          return item
        }),
        data: data,
        loading: false
      }, () => {
        this.openModal()
        this.openModal(result.ErrCode)
      })
      if (config.timer && config.clearField && result.data && result.data[0]) {
        let vals = (config.clearValue || '').split(',')
        if (vals.includes(result.data[0][config.clearField])) {
          this.timer && this.timer.stop()
        }
      }
      if (result.message) {
        if (result.ErrCode === 'Y') {
          Modal.success({
            title: result.message
          })
        } else if (result.ErrCode === 'S') {
          notification.success({
            top: 92,
            message: result.message,
            duration: 2
          })
        }
      }
    } else {
      this.setState({
        loading: false
      })
      this.timer && this.timer.stop()
      
      if (!result.message) return
      if (result.ErrCode === 'N') {
        Modal.error({
          title: result.message,
        })
      } else {
      } else if (result.ErrCode !== '-2') {
        notification.error({
          top: 92,
          message: result.message,
@@ -329,23 +372,26 @@
        footer={null}
        destroyOnClose
      >
        {data && data.length > 0 ? <div className="custom-data-carousel-box" style={config.style}>
          {data.length > 1 && config.wrap.autoplay === 'false' ? <div className="prev" onClick={() => this.node && this.node.prev()}><LeftOutlined /></div> : null}
          {data.length > 1 && config.wrap.autoplay === 'false' ? <div className="next" onClick={() => this.node && this.node.next()}><RightOutlined /></div> : null}
          <Carousel
            autoplay={config.wrap.autoplay !== 'false'}
            dots={config.wrap.dots !== 'false'}
            dotPosition={config.wrap.dotPosition || 'bottom'}
            effect={config.wrap.effect || 'scrollx'}
            autoplaySpeed={config.wrap.speed}
            ref={ref => this.node = ref}
          >
            {data.map((item, index) => (
              <div key={index}>
                <CardItem card={card} cards={config} data={item}/>
              </div>
            ))}
          </Carousel>
        {visible ? <div className="custom-data-carousel-box" style={config.style}>
          <NormalHeader config={config}/>
          <div className="carousel-wrap" style={{height: config.wrap.height}}>
            {data.length > 1 && config.wrap.autoplay === 'false' ? <div className="prev" onClick={() => this.node && this.node.prev()}><LeftOutlined /></div> : null}
            {data.length > 1 && config.wrap.autoplay === 'false' ? <div className="next" onClick={() => this.node && this.node.next()}><RightOutlined /></div> : null}
            <Carousel
              autoplay={config.wrap.autoplay !== 'false'}
              dots={config.wrap.dots !== 'false'}
              dotPosition={config.wrap.dotPosition || 'bottom'}
              effect={config.wrap.effect || 'scrollx'}
              autoplaySpeed={config.wrap.speed}
              ref={ref => this.node = ref}
            >
              {data.map((item, index) => (
                <div key={index}>
                  <CardItem card={card} cards={config} data={item}/>
                </div>
              ))}
            </Carousel>
          </div>
        </div> : null}
        {config.wrap.modalContent !== 'update' ? <div className="mk-footer">
          <Checkbox defaultChecked={false} onChange={this.onTipChange}>不在提醒</Checkbox>
@@ -364,20 +410,22 @@
            <Spin />
          </div> : null
        }
        {data && data.length > 0 ? <Carousel
          autoplay={config.wrap.autoplay !== 'false'}
          dots={config.wrap.dots !== 'false'}
          dotPosition={config.wrap.dotPosition || 'bottom'}
          effect={config.wrap.effect || 'scrollx'}
          autoplaySpeed={config.wrap.speed}
        >
          {data.map((item, index) => (
            <div key={index}>
              <CardItem card={card} cards={config} data={item}/>
            </div>
          ))}
        </Carousel> : null}
        {!data || data.length === 0 ? <Empty description={false}/> : null}
        <NormalHeader config={config}/>
        <div className="carousel-wrap" style={{height: config.wrap.height}}>
          {data && data.length > 0 ? <Carousel
            autoplay={config.wrap.autoplay !== 'false'}
            dots={config.wrap.dots !== 'false'}
            dotPosition={config.wrap.dotPosition || 'bottom'}
            effect={config.wrap.effect || 'scrollx'}
            autoplaySpeed={config.wrap.speed}
          >
            {data.map((item, index) => (
              <div key={index}>
                <CardItem card={card} cards={config} data={item}/>
              </div>
            ))}
          </Carousel> : <Empty description={false}/>}
        </div>
      </div>
    )
  }