| | |
| | | import './index.scss' |
| | | |
| | | const CardItem = asyncComponent(() => import('../cardItem')) |
| | | const NormalHeader = asyncComponent(() => import('@/tabviews/custom/components/share/normalheader')) |
| | | |
| | | class DataCard extends Component { |
| | | static propTpyes = { |
| | |
| | | BData: null, |
| | | visible: false |
| | | } |
| | | |
| | | loaded = false |
| | | |
| | | UNSAFE_componentWillMount () { |
| | | const { data, initdata } = this.props |
| | |
| | | } |
| | | |
| | | if (_data) { |
| | | this.loaded = true |
| | | _data = _data.map((item, index) => { |
| | | item.key = index |
| | | item.$$uuid = item[_config.setting.primaryKey] || '' |
| | |
| | | _cols.set(item.field, item) |
| | | }) |
| | | |
| | | _card.style.height = _config.style.height |
| | | |
| | | if (_card.setting.click) { |
| | | _card.style.cursor = 'pointer' |
| | | } |
| | |
| | | } |
| | | 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 |
| | | |
| | |
| | | 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) { |
| | |
| | | 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() |
| | | }) |
| | |
| | | |
| | | if (config.wrap.display !== 'modal' || !data || data.length === 0) return |
| | | |
| | | let tip = localStorage.getItem('modal' + config.uuid) |
| | | let code = config.wrap.code || ('modal' + config.uuid) |
| | | let tip = localStorage.getItem(code) |
| | | |
| | | if (!data[0].$$uuid || tip === data[0].$$uuid + data.length) return |
| | | |
| | | if (config.wrap.modalContent === 'update') { |
| | | localStorage.setItem('modal' + config.uuid, data[0].$$uuid + data.length) |
| | | localStorage.setItem(code, data[0].$$uuid + data.length) |
| | | |
| | | Api.getAppVersion(true) |
| | | } |
| | |
| | | data: [], |
| | | loading: false |
| | | }) |
| | | |
| | | this.loaded = true |
| | | return |
| | | } |
| | | |
| | |
| | | |
| | | let result = await Api.genericInterface(param) |
| | | if (result.status) { |
| | | this.loaded = true |
| | | if (config.$cache) { |
| | | Api.writeCacheConfig(config.uuid, result.data || '') |
| | | } |
| | | |
| | | this.setState({ |
| | | data: result.data.map((item, index) => { |
| | | item.key = index |
| | |
| | | onTipChange = (e) => { |
| | | const { config, data } = this.state |
| | | |
| | | let code = config.wrap.code || ('modal' + config.uuid) |
| | | if (e.target.checked) { |
| | | localStorage.setItem('modal' + config.uuid, data[0].$$uuid + data.length) |
| | | localStorage.setItem(code, data[0].$$uuid + data.length) |
| | | } else { |
| | | localStorage.removeItem('modal' + config.uuid) |
| | | localStorage.removeItem(code) |
| | | } |
| | | } |
| | | |
| | |
| | | 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> |
| | | <Button className="close" onClick={() => this.setState({visible: false})}>立即体验</Button> |
| | | </div> : <div className="mk-footer single"> |
| | | </div> : <div className="mk-footer"> |
| | | <Button className="close" onClick={() => this.setState({visible: false})}>知道了</Button> |
| | | </div>} |
| | | </Modal> |
| | |
| | | <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> |
| | | ) |
| | | } |