import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { is, fromJS } from 'immutable'
|
import * as QrCode from 'qrcode.react'
|
|
import './index.scss'
|
|
class BarCode extends Component {
|
static propTpyes = {
|
card: PropTypes.object, // 条码设置
|
value: PropTypes.any, // 条码值
|
}
|
|
shouldComponentUpdate (nextProps, nextState) {
|
return !is(fromJS(this.props), fromJS(nextProps))
|
}
|
|
hexify = (color) => {
|
let values = color.replace(/rgba?\(/, '').replace(/\)/, '').replace(/[\s+]/g, '').split(',')
|
let a = parseFloat(values[3] || 1)
|
let r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255)
|
let g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255)
|
let b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255)
|
|
return '#' + ('0' + r.toString(16)).slice(-2) + ('0' + g.toString(16)).slice(-2) + ('0' + b.toString(16)).slice(-2)
|
}
|
|
render() {
|
const { value, card } = this.props
|
let color = card.color
|
|
if (/rgb/ig.test(color)) {
|
color = this.hexify(color)
|
}
|
|
return (
|
<div className="qrcode-box">
|
<QrCode
|
value={value}
|
size={card.qrWidth || 50}
|
fgColor={color}
|
imageSettings={card.url ? {
|
src: card.url,
|
height: (card.qrWidth || 50) / 4,
|
width: (card.qrWidth || 50) / 4,
|
excavate: true
|
} : null}/>
|
</div>
|
)
|
}
|
}
|
|
export default BarCode
|