import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { Col, Row } from 'antd'
|
|
import './index.scss'
|
|
class CheckCard extends Component {
|
static propTpyes = {
|
config: PropTypes.object, // 表单配置信息
|
onChange: PropTypes.func, // 数据切换
|
}
|
|
state = {
|
appType: sessionStorage.getItem('appType'),
|
}
|
|
getCards = () => {
|
const { display, width, options, fields, ratio, picratio, backgroundColor, field, labelShow } = this.props.config
|
|
let _options = []
|
let _fields = fields || []
|
|
if (options) {
|
_options = options.filter(op => !op.Hide)
|
}
|
|
let cls = ''
|
if (_options.length * width <= 24) {
|
cls = 'no-margin-bottom'
|
}
|
if (display === 'picture') {
|
let _ratio = picratio || ratio
|
let paddingTop = '100%'
|
if (_ratio === '4:3') {
|
paddingTop = '75%'
|
} else if (_ratio === '3:2') {
|
paddingTop = '66.7%'
|
} else if (_ratio === '16:9') {
|
paddingTop = '56.25%'
|
}
|
if (_options.length === 0) {
|
return <Col span={width}>
|
<div className="card-pic-cell no-margin-bottom" style={{paddingTop, background: '#91d5ff'}}>
|
</div>
|
</Col>
|
}
|
return _options.map(item => {
|
return <Col span={width} key={item.key}>
|
<div className={'card-pic-cell ' + cls} style={{paddingTop, backgroundImage: `url(${item.$url})`}}>
|
<div className="content-wrap">
|
<div className="content-center">
|
{_fields.map(col => {
|
return <span className="content-line" key={col.key} style={{color: col.color, fontSize: col.fontSize + 'px', height: col.fontSize * 1.5 + 'px', textAlign: col.align}}>{item[col.field]}</span>
|
})}
|
</div>
|
</div>
|
</div>
|
</Col>
|
})
|
} else if (display === 'color') {
|
if (_options.length === 0) {
|
return <Col span={width}>
|
<div className="card-color-cell no-margin-bottom" style={{background: '#1890ff'}}>
|
</div>
|
</Col>
|
}
|
return _options.map(item => {
|
return <Col span={width} key={item.key}>
|
<div className={'card-color-cell ' + cls} style={{background: item.$color}}>
|
{_fields.map(col => {
|
return <span className="content-line" key={col.key} style={{color: col.color, fontSize: col.fontSize + 'px', height: col.fontSize * 1.5 + 'px', textAlign: col.align}}>{item[col.field]}</span>
|
})}
|
</div>
|
</Col>
|
})
|
} else {
|
let _style = null
|
let style = null
|
|
if (backgroundColor) {
|
_style = {backgroundColor}
|
style = {borderColor: 'transparent'}
|
}
|
|
if (_options.length === 0) {
|
return <Col span={width}>
|
<div className="card-cell no-margin-bottom" style={style}>
|
<div className="bg-mask" style={_style}></div>
|
<span style={{color: '#000000', fontSize: '14px', height: '21px'}}>示例 {labelShow === 'false' ? field : ''}</span>
|
</div>
|
</Col>
|
}
|
return _options.map(item => {
|
return <Col span={width} key={item.key}>
|
<div className={'card-cell ' + cls} style={style}>
|
<div className="bg-mask" style={_style}></div>
|
{_fields.map(col => {
|
return <span className="content-line" key={col.key} style={{color: col.color, fontSize: col.fontSize + 'px', height: col.fontSize * 1.5 + 'px', textAlign: col.align}}>{item[col.field]}</span>
|
})}
|
</div>
|
</Col>
|
})
|
}
|
}
|
|
render() {
|
const { config } = this.props
|
|
return (
|
<div className={'check-card-edit-box border-' + (config.border || 'show')} style={{marginTop: '5px'}}>
|
<Row gutter={12}>{this.getCards()}</Row>
|
</div>
|
)
|
}
|
}
|
|
export default CheckCard
|