| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Spin, notification, Carousel, Modal } from 'antd' |
| | | import { Spin, notification, Carousel, Modal, Checkbox, Button } from 'antd' |
| | | import { LeftOutlined, RightOutlined } from '@ant-design/icons' |
| | | |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | | import Api from '@/api' |
| | |
| | | config: null, // 图表配置信息 |
| | | loading: false, // 数据加载状态 |
| | | sync: false, // 是否统一请求数据 |
| | | data: {}, // 数据 |
| | | BData: null |
| | | data: {$$empty: true}, |
| | | BData: null, |
| | | visible: false |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | |
| | | } |
| | | } |
| | | |
| | | _data.$$uuid = _data[_config.setting.primaryKey] || '' |
| | | _data.$$BID = BID || '' |
| | | _data.$$BData = BData || '' |
| | | |
| | |
| | | setTimeout(() => { |
| | | this.loadData() |
| | | }, _config.setting.delay || 0) |
| | | } else if (_config.wrap.display === 'modal' && _config.wrap.datatype === 'static') { |
| | | this.openModal() |
| | | } |
| | | }) |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | _data.$$uuid = _data[config.setting.primaryKey] || '' |
| | | _data.$$BID = BID || '' |
| | | _data.$$BData = BData || '' |
| | | |
| | | this.setState({sync: false, data: _data}) |
| | | this.setState({sync: false, data: _data}, () => { |
| | | if (config.wrap.display === 'modal') { |
| | | this.openModal() |
| | | } |
| | | }) |
| | | } else if (config.setting.syncRefresh && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) { |
| | | this.setState({}, () => { |
| | | this.loadData() |
| | | }) |
| | | } |
| | | } |
| | | |
| | | openModal = () => { |
| | | const { config, data } = this.state |
| | | |
| | | let tip = localStorage.getItem('modal' + config.uuid) |
| | | |
| | | if ((data.$$uuid && tip === data.$$uuid) || (!data.$$uuid && tip)) return |
| | | |
| | | if (config.wrap.modalContent === 'update') { |
| | | localStorage.setItem('modal' + config.uuid, data.$$uuid || 'true') |
| | | |
| | | Api.getAppVersion(true) |
| | | } |
| | | |
| | | setTimeout(() => { |
| | | this.setState({visible: true}) |
| | | }, 200) |
| | | } |
| | | |
| | | /** |
| | |
| | | } else { |
| | | _data = result.data[0] |
| | | } |
| | | |
| | | |
| | | _data.$$uuid = _data[config.setting.primaryKey] || '' |
| | | _data.$$BID = BID || '' |
| | | _data.$$BData = BData || '' |
| | | |
| | | this.setState({ |
| | | data: _data, |
| | | loading: false |
| | | }, () => { |
| | | if (config.wrap.display === 'modal') { |
| | | this.openModal() |
| | | } |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | |
| | | } |
| | | } |
| | | |
| | | render() { |
| | | const { config, loading, data } = this.state |
| | | onTipChange = (e) => { |
| | | const { config, data } = this.state |
| | | |
| | | if (config.wrap.empty === 'hidden' && (!data || data.$$empty)) return null |
| | | if (e.target.checked) { |
| | | localStorage.setItem('modal' + config.uuid, data.$$uuid || 'true') |
| | | } else { |
| | | localStorage.removeItem('modal' + config.uuid) |
| | | } |
| | | } |
| | | |
| | | render() { |
| | | const { config, loading, data, visible } = this.state |
| | | |
| | | if (config.wrap.empty === 'hidden' && data.$$empty) return null |
| | | |
| | | if (config.wrap.display === 'modal') { |
| | | return <Modal |
| | | wrapClassName='mk-carousel-modal' |
| | | visible={visible} |
| | | maskClosable={false} |
| | | width={config.wrap.modalWidth} |
| | | onCancel={() => this.setState({visible: false})} |
| | | footer={null} |
| | | destroyOnClose |
| | | > |
| | | <div className="custom-prop-carousel-box" style={config.style}> |
| | | {config.subcards.length > 1 ? <div className="prev" onClick={() => this.node && this.node.prev()}><LeftOutlined /></div> : null} |
| | | {config.subcards.length > 1 ? <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} |
| | | > |
| | | {config.subcards.map((item, index) => ( |
| | | <div key={index}> |
| | | <CardItem card={item} cards={config} data={data}/> |
| | | </div> |
| | | ))} |
| | | </Carousel> |
| | | </div> |
| | | {config.wrap.modalContent !== 'update' ? <div className="mk-footer"> |
| | | <Checkbox defaultChecked={false} onChange={this.onTipChange}>不在提醒</Checkbox> |
| | | <Button className="close" onClick={() => this.setState({visible: false})}>立即体验</Button> |
| | | </div> : <div className="mk-footer single"> |
| | | <Button className="close" onClick={() => this.setState({visible: false})}>知道了</Button> |
| | | </div>} |
| | | </Modal> |
| | | } |
| | | |
| | | return ( |
| | | <div className="custom-prop-carousel-box" id={'anchor' + config.uuid} style={config.style}> |