import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { fromJS } from 'immutable'
|
import { Form, Tabs, Row, Col, Input, Button, Table, Popconfirm, Icon, Tooltip, notification, Modal, message, InputNumber, Radio, Typography } from 'antd'
|
import moment from 'moment'
|
|
import Api from '@/api'
|
import Utils from '@/utils/utils.js'
|
|
import UniqueForm from './uniqueform'
|
import ColumnForm from './columnform'
|
import CustomScript from './customscript'
|
import asyncComponent from '@/utils/asyncComponent'
|
import './index.scss'
|
|
const { TabPane } = Tabs
|
const { confirm } = Modal
|
const { Paragraph } = Typography
|
const EditTable = asyncComponent(() => import('@/templates/zshare/editTable'))
|
|
class VerifyCard extends Component {
|
static propTpyes = {
|
columns: PropTypes.array, // 显示列
|
dict: PropTypes.object, // 字典项
|
card: PropTypes.object,
|
}
|
|
state = {
|
verify: {},
|
systemScripts: [],
|
activeKey: 'basemsg',
|
excelColumns: [
|
{
|
title: this.props.dict['model.form.field'],
|
dataIndex: 'Column',
|
width: '14%',
|
inputType: 'input',
|
unique: true,
|
editable: true
|
},
|
{
|
title: this.props.dict['model.name'],
|
dataIndex: 'Text',
|
width: '14%',
|
inputType: 'input',
|
editable: true
|
},
|
{
|
title: this.props.dict['model.form.type'],
|
dataIndex: 'type',
|
width: '15%',
|
editable: true,
|
inputType: 'select',
|
options: [
|
{ value: 'Nvarchar(10)', text: 'Nvarchar(10)' },
|
{ value: 'Nvarchar(20)', text: 'Nvarchar(20)' },
|
{ value: 'Nvarchar(50)', text: 'Nvarchar(50)' },
|
{ value: 'Nvarchar(100)', text: 'Nvarchar(100)' },
|
{ value: 'Nvarchar(256)', text: 'Nvarchar(256)' },
|
{ value: 'Nvarchar(512)', text: 'Nvarchar(512)' },
|
{ value: 'Nvarchar(1024)', text: 'Nvarchar(1024)' },
|
{ value: 'Nvarchar(2048)', text: 'Nvarchar(2048)' },
|
{ value: 'Nvarchar(max)', text: 'Nvarchar(max)' },
|
{ value: 'Int', text: 'Int' },
|
{ value: 'Decimal(18,0)', text: 'Decimal(18,0)' },
|
{ value: 'Decimal(18,2)', text: 'Decimal(18,2)' },
|
{ value: 'Decimal(18,4)', text: 'Decimal(18,4)' },
|
{ value: 'Decimal(18,6)', text: 'Decimal(18,6)' },
|
{ value: 'date', text: 'date' }
|
]
|
},
|
{
|
title: this.props.dict['model.required'],
|
dataIndex: 'required',
|
width: '10%',
|
editable: true,
|
inputType: 'switch',
|
render: (text, record) => record.required === 'true' ? this.props.dict['model.true'] : this.props.dict['model.false']
|
},
|
{
|
title: this.props.dict['model.import'],
|
dataIndex: 'import',
|
width: '10%',
|
editable: true,
|
inputType: 'switch',
|
render: (text, record) => record.import !== 'false' ? this.props.dict['model.true'] : this.props.dict['model.false']
|
},
|
{
|
title: '最小值',
|
dataIndex: 'min',
|
width: '10%',
|
required: false,
|
inputType: 'number',
|
unlimit: true,
|
editable: true
|
},
|
{
|
title: '最大值',
|
dataIndex: 'max',
|
width: '10%',
|
required: false,
|
inputType: 'number',
|
unlimit: true,
|
editable: true
|
}
|
],
|
uniqueColumns: [
|
{
|
title: '列名',
|
dataIndex: 'fieldlabel',
|
width: '20%'
|
},
|
{
|
title: '字段',
|
dataIndex: 'field',
|
width: '25%',
|
editable: true,
|
inputType: 'multiStr',
|
options: []
|
},
|
{
|
title: '报错编码',
|
dataIndex: 'errorCode',
|
width: '12%',
|
editable: true,
|
inputType: 'select',
|
options: [
|
{ value: 'E', text: 'E' },
|
{ value: 'N', text: 'N' },
|
{ value: 'F', text: 'F' },
|
{ value: 'NM', text: 'NM' }
|
]
|
},
|
{
|
title: '验证类型',
|
dataIndex: 'verifyType',
|
width: '12%',
|
render: (text, record) => record.verifyType === 'logic' ? '逻辑验证' : '物理验证',
|
inputType: 'select',
|
editable: true,
|
options: [
|
{ value: 'physical', text: '物理验证' },
|
{ value: 'logic', text: '逻辑验证' }
|
]
|
},
|
{
|
title: '是否启用',
|
dataIndex: 'status',
|
width: '12%',
|
editable: true,
|
required: false,
|
inputType: 'switch',
|
render: (text, record) => record.status === 'false' ?
|
(
|
<div>
|
{this.props.dict['model.status.forbidden']}
|
<Icon style={{marginLeft: '5px'}} type="stop" theme="twoTone" twoToneColor="#ff4d4f" />
|
</div>
|
) :
|
(
|
<div>
|
{this.props.dict['model.status.open']}
|
<Icon style={{marginLeft: '5px'}} type="check-circle" theme="twoTone" twoToneColor="#52c41a" />
|
</div>
|
)
|
},
|
],
|
scriptsColumns: [
|
{
|
title: 'SQL',
|
dataIndex: 'sql',
|
width: '60%',
|
render: (text) => {
|
let title = text.match(/^\s*\/\*.+\*\//)
|
title = title && title[0] ? title[0] : ''
|
text = title ? text.replace(title, '') : text
|
|
return (
|
<div>
|
{title ? <span style={{color: '#a50'}}>{title}</span> : null}
|
<Paragraph copyable ellipsis={{ rows: 4, expandable: true }}>{text}</Paragraph>
|
</div>
|
)
|
}
|
},
|
{
|
title: '执行位置',
|
dataIndex: 'position',
|
width: '10%',
|
render: (text, record) => {
|
let _text = ''
|
if (record.position === 'front') {
|
_text = 'sql前'
|
} else if (record.position === 'init') {
|
_text = '初始化'
|
} else {
|
_text = 'sql后'
|
}
|
return _text
|
}
|
},
|
{
|
title: '状态',
|
dataIndex: 'status',
|
width: '10%',
|
render: (text, record) => record.status === 'false' ?
|
(
|
<div>
|
{this.props.dict['model.status.forbidden']}
|
<Icon style={{marginLeft: '5px'}} type="stop" theme="twoTone" twoToneColor="#ff4d4f" />
|
</div>
|
) :
|
(
|
<div>
|
{this.props.dict['model.status.open']}
|
<Icon style={{marginLeft: '5px'}} type="check-circle" theme="twoTone" twoToneColor="#52c41a" />
|
</div>
|
)
|
},
|
{
|
title: '操作',
|
align: 'center',
|
width: '20%',
|
dataIndex: 'operation',
|
render: (text, record) =>
|
(<div>
|
<span className="operation-btn" title={this.props.dict['model.edit']} onClick={() => this.handleEdit(record, 'scripts')} style={{color: '#1890ff'}}><Icon type="edit" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.up']} onClick={() => this.handleUpDown(record, 'scripts', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.down']} onClick={() => this.handleUpDown(record, 'scripts', 'down')} style={{color: '#ff4d4f'}}><Icon type="arrow-down" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.status.change']} onClick={() => this.handleStatus(record, 'scripts')} style={{color: '#8E44AD'}}><Icon type="swap" /></span>
|
<Popconfirm
|
overlayClassName="popover-confirm"
|
title={this.props.dict['model.query.delete']}
|
onConfirm={() => this.handleDelete(record, 'scripts')
|
}>
|
<span className="operation-btn" style={{color: '#ff4d4f'}}><Icon type="delete" /></span>
|
</Popconfirm>
|
</div>)
|
}
|
]
|
}
|
|
UNSAFE_componentWillMount() {
|
const { card } = this.props
|
let _verify = fromJS(card.verify || {range: 1}).toJS()
|
let _columns = _verify.columns || []
|
|
// 旧数据兼容
|
_columns = _columns.map(col => {
|
col.required = col.required || 'true'
|
col.type = col.type || 'Nvarchar(50)'
|
|
if (/^Nvarchar/ig.test(col.type)) {
|
col.limit = col.type.match(/\d+/)[0]
|
} else if (/^Decimal/ig.test(col.type)) {
|
col.limit = col.type.match(/\d+/ig)[1]
|
} else {
|
col.limit = ''
|
}
|
|
return col
|
})
|
|
this.setState({
|
verify: {
|
..._verify,
|
default: _verify.default || 'true',
|
sheet: _verify.sheet || 'Sheet1',
|
range: _verify.range || 0,
|
columns: _columns,
|
scripts: _verify.scripts || [],
|
uniques: _verify.uniques || []
|
}
|
}, () => {
|
this.resetUniqueColumns()
|
})
|
}
|
|
componentDidMount () {
|
let _scriptSql = `Select distinct func+Remark as funcname,longparam, s.Sort from s_custom_script s inner join (select OpenID from sapp where ID=@Appkey@) p on s.openid = case when s.appkey='' then s.openid else p.OpenID end order by s.Sort`
|
|
_scriptSql = Utils.formatOptions(_scriptSql)
|
|
let _sParam = {
|
func: 'sPC_Get_SelectedList',
|
LText: _scriptSql,
|
obj_name: 'data',
|
arr_field: 'funcname,longparam'
|
}
|
|
_sParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
_sParam.secretkey = Utils.encrypt(_sParam.LText, _sParam.timestamp)
|
|
_sParam.open_key = Utils.encryptOpenKey(_sParam.secretkey, _sParam.timestamp) // 云端数据验证
|
|
Api.getSystemConfig(_sParam).then(res => {
|
if (res.status) {
|
this.setState({
|
systemScripts: res.data.map(item => {
|
return {
|
name: item.funcname,
|
value: Utils.UnformatOptions(item.longparam)
|
}
|
})
|
})
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
}
|
})
|
}
|
|
resetUniqueColumns = () => {
|
const { uniqueColumns, verify } = this.state
|
|
this.setState({uniqueColumns: uniqueColumns.map(col => {
|
if (col.dataIndex === 'field') {
|
col.options = verify.columns.map(c => {
|
return {
|
field: c.Column,
|
label: c.Text
|
}
|
})
|
col.options.unshift({
|
field: 'BID',
|
label: 'BID'
|
})
|
}
|
|
return col
|
})})
|
}
|
|
columnFieldInput = () => {
|
const { columns } = this.props
|
const { verify } = this.state
|
|
let _columns = JSON.parse(JSON.stringify(verify.columns))
|
|
let _cols = _columns.map(col => col.Column )
|
|
columns.forEach(col => {
|
if (col.field && !_cols.includes(col.field)) {
|
let _type = 'Nvarchar(50)'
|
let _limit = '50'
|
if (col.type === 'number' && !col.decimal) {
|
_type = 'Int'
|
_limit = ''
|
} else if (col.type === 'number') {
|
_type = 'Decimal(18,' + col.decimal + ')'
|
_limit = col.decimal
|
}
|
|
let _cell = {
|
uuid: col.uuid,
|
Column: col.field,
|
Text: col.label,
|
type: _type,
|
limit: _limit,
|
import: 'true',
|
required: 'true'
|
}
|
|
if (_type !== 'Nvarchar(50)') {
|
_cell.min = 0
|
_cell.max = 999999
|
}
|
|
_columns.push(_cell)
|
}
|
})
|
|
this.setState({
|
verify: {
|
...verify,
|
columns: _columns
|
}
|
}, () => {
|
this.resetUniqueColumns()
|
})
|
}
|
|
clearField = () => {
|
const { verify } = this.state
|
const _this = this
|
|
confirm({
|
content: `确定清空Excel列吗?`,
|
onOk() {
|
_this.setState({
|
verify: {
|
...verify,
|
columns: []
|
}
|
}, () => {
|
_this.resetUniqueColumns()
|
})
|
},
|
onCancel() {}
|
})
|
}
|
|
columnChange = (values) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
|
let fields = verify.columns.map(item => item.Column)
|
if (fields.includes(values.Column)) {
|
notification.warning({
|
top: 92,
|
message: values.Column + '字段已存在!',
|
duration: 5
|
})
|
return
|
}
|
|
values.uuid = Utils.getuuid()
|
verify.columns.push(values)
|
|
this.setState({
|
verify: verify
|
}, () => {
|
this.resetUniqueColumns()
|
})
|
}
|
|
changeColumns = (columns) => {
|
const { verify } = this.state
|
|
columns = columns.map(col => {
|
if (/^Nvarchar/ig.test(col.type)) {
|
col.limit = col.type.match(/\d+/) ? col.type.match(/\d+/)[0] : '20000'
|
} else if (/^Decimal/ig.test(col.type)) {
|
col.limit = col.type.match(/\d+/ig)[1]
|
col.required = 'true'
|
} else if (/^int/ig.test(col.type)) {
|
col.required = 'true'
|
} else {
|
col.limit = ''
|
}
|
|
return col
|
})
|
|
this.setState({verify: {...verify, columns}}, () => {
|
this.resetUniqueColumns()
|
})
|
}
|
|
uniqueChange = (values) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
|
values.status = 'true'
|
values.uuid = Utils.getuuid()
|
verify.uniques.push(values)
|
|
this.setState({
|
verify: verify
|
})
|
}
|
|
changeUniques = (uniques) => {
|
const { verify } = this.state
|
|
let change = {}
|
verify.columns.forEach(col => {
|
change[col.Column] = col.Text
|
})
|
|
uniques = uniques.map(item => {
|
item.status = item.status || 'true'
|
|
if (Array.isArray(item.field)) {
|
item.fieldlabel = item.field.map(field => {
|
return change[field] || ''
|
})
|
|
item.fieldlabel = item.fieldlabel.join(',')
|
item.field = item.field.join(',')
|
}
|
|
return item
|
})
|
|
this.setState({verify: {...verify, uniques}})
|
}
|
|
scriptsChange = (values) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
|
if (values.uuid) {
|
verify.scripts = verify.scripts.map(item => {
|
if (item.uuid === values.uuid) {
|
return values
|
} else {
|
return item
|
}
|
})
|
} else {
|
values.uuid = Utils.getuuid()
|
verify.scripts.push(values)
|
}
|
|
this.setState({
|
verify: verify
|
})
|
}
|
|
handleDelete = (record, type) => {
|
const { verify } = this.state
|
|
if (type === 'columns') {
|
verify.columns = verify.columns.filter(item => item.uuid !== record.uuid)
|
} else if (type === 'scripts') {
|
verify.scripts = verify.scripts.filter(item => item.uuid !== record.uuid)
|
} else if (type === 'unique') {
|
verify.uniques = verify.uniques.filter(item => item.uuid !== record.uuid)
|
}
|
|
this.setState({ verify: verify })
|
}
|
|
handleEdit = (record, type) => {
|
if (type === 'scripts') {
|
this.scriptsForm.edit(record)
|
}
|
|
let node = document.getElementById('verify-excel-box-tab').parentNode
|
|
if (node && node.scrollTop) {
|
let inter = Math.ceil(node.scrollTop / 10)
|
|
let timer = setInterval(() => {
|
if (node.scrollTop - inter > 0) {
|
node.scrollTop = node.scrollTop - inter
|
} else {
|
node.scrollTop = 0
|
clearInterval(timer)
|
}
|
}, 10)
|
}
|
}
|
|
handleStatus = (record, type) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
record.status = record.status === 'false' ? 'true' : 'false'
|
|
if (type === 'scripts') {
|
verify.scripts = verify.scripts.map(item => {
|
if (item.uuid === record.uuid) {
|
return record
|
} else {
|
return item
|
}
|
})
|
} else if (type === 'unique') {
|
verify.uniques = verify.uniques.map(item => {
|
if (item.uuid === record.uuid) {
|
return record
|
} else {
|
return item
|
}
|
})
|
}
|
|
this.setState({
|
verify: verify
|
})
|
}
|
|
handleUpDown = (record, type, direction) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
let index = 0
|
|
if (type === 'columns') {
|
verify.columns = verify.columns.filter((item, i) => {
|
if (item.uuid === record.uuid) {
|
index = i
|
}
|
|
return item.uuid !== record.uuid
|
})
|
if ((index === 0 && direction === 'up') || (index === verify.columns.length && direction === 'down')) {
|
return
|
}
|
|
if (direction === 'up') {
|
verify.columns.splice(index - 1, 0, record)
|
} else {
|
verify.columns.splice(index + 1, 0, record)
|
}
|
} else if (type === 'unique') {
|
verify.uniques = verify.uniques.filter((item, i) => {
|
if (item.uuid === record.uuid) {
|
index = i
|
}
|
|
return item.uuid !== record.uuid
|
})
|
if ((index === 0 && direction === 'up') || (index === verify.uniques.length && direction === 'down')) {
|
return
|
}
|
|
if (direction === 'up') {
|
verify.uniques.splice(index - 1, 0, record)
|
} else {
|
verify.uniques.splice(index + 1, 0, record)
|
}
|
} else if (type === 'scripts') {
|
verify.scripts = verify.scripts.filter((item, i) => {
|
if (item.uuid === record.uuid) {
|
index = i
|
}
|
|
return item.uuid !== record.uuid
|
})
|
if ((index === 0 && direction === 'up') || (index === verify.scripts.length && direction === 'down')) {
|
return
|
}
|
|
if (direction === 'up') {
|
verify.scripts.splice(index - 1, 0, record)
|
} else {
|
verify.scripts.splice(index + 1, 0, record)
|
}
|
}
|
|
this.setState({
|
verify: verify
|
})
|
}
|
|
handleConfirm = () => {
|
const { verify } = this.state
|
// 表单提交时检查输入值是否正确
|
return new Promise((resolve, reject) => {
|
this.props.form.validateFieldsAndScroll((err, values) => {
|
if (!err) {
|
let _verify = {...verify, ...values}
|
|
let cols = _verify.columns.map(col => col.Column)
|
cols = Array.from(new Set(cols))
|
|
if (_verify.columns.length === 0) {
|
notification.warning({
|
top: 92,
|
message: '请设置Excel列字段!',
|
duration: 5
|
})
|
return
|
} else if (_verify.columns.length > cols.length) {
|
notification.warning({
|
top: 92,
|
message: 'Excel列字段名,不可重复!',
|
duration: 5
|
})
|
return
|
} else if (_verify.range === 1) {
|
let tEmptys = _verify.columns.filter(op => !op.Text)
|
if (tEmptys.length > 0) {
|
notification.warning({
|
top: 92,
|
message: '忽略首行时,会使用Text值校验Excel首行内容,Text值与Excel表首行内容相同,且均不可为空!',
|
duration: 5
|
})
|
return
|
}
|
}
|
|
let _loading = false
|
if (this.scriptsForm && this.scriptsForm.state.editItem) {
|
_loading = true
|
this.setState({activeKey: 'scripts'})
|
}
|
|
if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql')) {
|
_loading = true
|
this.setState({activeKey: 'scripts'})
|
}
|
|
if (_loading) {
|
confirm({
|
content: `存在未保存项,确定提交吗?`,
|
onOk() {
|
resolve(_verify)
|
},
|
onCancel() {}
|
})
|
} else {
|
resolve(_verify)
|
}
|
} else {
|
notification.warning({
|
top: 92,
|
message: '请设置Excel表名!',
|
duration: 5
|
})
|
}
|
})
|
})
|
}
|
|
onOptionChange = (e, key) => {
|
const { verify } = this.state
|
let value = e.target.value
|
|
this.setState({
|
verify: {...verify, default: value}
|
})
|
}
|
|
showError = (errorType) => {
|
if (errorType === 'S') {
|
notification.success({
|
top: 92,
|
message: '执行成功!',
|
duration: 2
|
})
|
} else if (errorType === 'Y') {
|
Modal.success({
|
title: '执行成功!'
|
})
|
} else if (errorType === 'F') {
|
notification.error({
|
className: 'notification-custom-error',
|
top: 92,
|
message: '执行失败!',
|
duration: 10
|
})
|
} else if (errorType === 'N') {
|
notification.error({
|
top: 92,
|
message: '执行失败!',
|
duration: 10
|
})
|
} else if (errorType === 'E') {
|
Modal.error({
|
title: '执行失败!'
|
})
|
} else if (errorType === 'NM') {
|
message.error('执行失败!')
|
}
|
}
|
|
timeChange = (val, type) => {
|
const { verify } = this.state
|
|
this.setState({
|
verify: {...verify, [type]: val}
|
})
|
}
|
|
tabchange = (val) => {
|
const { activeKey } = this.state
|
|
if (activeKey === 'basemsg') {
|
this.props.form.validateFieldsAndScroll((err, values) => {
|
if (!err) {
|
this.setState({activeKey: val})
|
}
|
})
|
} else {
|
this.setState({activeKey: val})
|
}
|
}
|
|
render() {
|
const { card } = this.props
|
const { getFieldDecorator } = this.props.form
|
const { verify, excelColumns, scriptsColumns, uniqueColumns, activeKey } = this.state
|
const formItemLayout = {
|
labelCol: {
|
xs: { span: 24 },
|
sm: { span: 8 }
|
},
|
wrapperCol: {
|
xs: { span: 24 },
|
sm: { span: 16 }
|
}
|
}
|
|
return (
|
<div id="verify-excel-box-tab">
|
<Tabs activeKey={activeKey} className="verify-card-box" onChange={this.tabchange}>
|
<TabPane tab="基础验证" key="basemsg">
|
<Form {...formItemLayout}>
|
<Row gutter={24}>
|
<Col span={8}>
|
<Form.Item label={this.props.dict['model.form.tablename']}>
|
{getFieldDecorator('sheet', {
|
initialValue: verify.sheet || '',
|
rules: [
|
{
|
required: true,
|
message: this.props.dict['form.required.input'] + this.props.dict['model.form.tablename'] + '!'
|
}
|
]
|
})(<Input placeholder="" autoComplete="off" />)}
|
</Form.Item>
|
</Col>
|
<Col span={8}>
|
<Form.Item label={
|
<Tooltip placement="bottomLeft" title="忽略首行时,会校验excel中表头名称与excel列设置是否一致。">
|
<Icon type="question-circle" style={{color: '#c49f47', marginRight: '5px'}}/>
|
忽略行
|
</Tooltip>
|
}>
|
{getFieldDecorator('range', {
|
initialValue: verify.range || 0
|
})(<InputNumber min={0} max={100} precision={0} />)}
|
</Form.Item>
|
</Col>
|
{card.intertype === 'system' ? <Col span={8}>
|
<Form.Item label={'默认sql'}>
|
<Radio.Group value={verify.default} onChange={this.onOptionChange}>
|
<Radio value="true">执行</Radio>
|
<Radio value="false">不执行</Radio>
|
</Radio.Group>
|
</Form.Item>
|
</Col> : null}
|
</Row>
|
</Form>
|
</TabPane>
|
<TabPane tab={
|
<span>
|
Excel列设置
|
{verify.columns.length ? <span className="count-tip">{verify.columns.length}</span> : null}
|
</span>
|
} key="excelcolumn">
|
<ColumnForm dict={this.props.dict} columnChange={this.columnChange}/>
|
<Button className="excel-col-add mk-green" title="添加显示列字段" onClick={this.columnFieldInput}>
|
同步显示列
|
</Button>
|
<Button className="excel-col-add mk-red" title="清空Excel列" onClick={this.clearField}>
|
清空Excel列
|
</Button>
|
<Col style={{fontSize: '12px', color: '#757575', paddingLeft: '10px'}} span={24}>注:数值类型(int 或 decimal),内容为必填;最大值和最小值在类型为数值时有效。</Col>
|
<EditTable data={verify.columns} columns={excelColumns} onChange={this.changeColumns}/>
|
</TabPane>
|
{card.intertype === 'system' ? <TabPane tab={
|
<span>
|
唯一性验证
|
{verify.uniques.length ? <span className="count-tip">{verify.uniques.length}</span> : null}
|
</span>
|
} key="unique">
|
<UniqueForm fields={verify.columns} dict={this.props.dict} uniqueChange={this.uniqueChange}/>
|
<EditTable data={verify.uniques} columns={uniqueColumns} onChange={this.changeUniques}/>
|
</TabPane> : null}
|
{card.intertype === 'system' ? <TabPane tab={
|
<span>
|
自定义脚本
|
{verify.scripts.length ? <span className="count-tip">{verify.scripts.length}</span> : null}
|
</span>
|
} key="scripts">
|
<CustomScript
|
dict={this.props.dict}
|
btn={this.props.card}
|
usefulfields={verify.columns}
|
scripts={verify.scripts}
|
systemScripts={this.state.systemScripts}
|
scriptsChange={this.scriptsChange}
|
wrappedComponentRef={(inst) => this.scriptsForm = inst}
|
/>
|
<Table
|
bordered
|
rowKey="uuid"
|
className="custom-table"
|
dataSource={verify.scripts}
|
columns={scriptsColumns}
|
pagination={false}
|
/>
|
</TabPane> : null}
|
<TabPane tab="信息提示" key="tip">
|
<Form {...formItemLayout}>
|
<Row gutter={24}>
|
<Col offset={6} span={6}>
|
<Form.Item label={'提示编码'}>
|
<span className="errorval"> S </span>
|
<Button onClick={() => {this.showError('S')}} type="primary" size="small">
|
查看
|
</Button>
|
</Form.Item>
|
</Col>
|
<Col span={8}>
|
<Form.Item label={'停留时间'}>
|
<InputNumber defaultValue={verify.stime || 2} min={1} max={10000} precision={0} onChange={(val) => {this.timeChange(val, 'stime')}} />
|
</Form.Item>
|
</Col>
|
</Row>
|
<Row gutter={24}>
|
<Col offset={6} span={6}>
|
<Form.Item label={'提示编码'}>
|
<span className="errorval"> Y </span>
|
<Button onClick={() => {this.showError('Y')}} type="primary" size="small">
|
查看
|
</Button>
|
</Form.Item>
|
</Col>
|
</Row>
|
<Row gutter={24}>
|
<Col offset={6} span={6}>
|
<Form.Item label={'提示编码'}>
|
<span className="errorval"> N </span>
|
<Button onClick={() => {this.showError('N')}} type="primary" size="small">
|
查看
|
</Button>
|
</Form.Item>
|
</Col>
|
<Col span={8}>
|
<Form.Item label={'停留时间'}>
|
<InputNumber defaultValue={verify.ntime || 10} min={1} max={10000} precision={0} onChange={(val) => {this.timeChange(val, 'ntime')}} />
|
</Form.Item>
|
</Col>
|
</Row>
|
<Row gutter={24}>
|
<Col offset={6} span={6}>
|
<Form.Item label={'提示编码'}>
|
<span className="errorval"> F </span>
|
<Button onClick={() => {this.showError('F')}} type="primary" size="small">
|
查看
|
</Button>
|
</Form.Item>
|
</Col>
|
<Col span={8}>
|
<Form.Item label={'停留时间'}>
|
<InputNumber defaultValue={verify.ftime || 10} min={1} max={10000} precision={0} onChange={(val) => {this.timeChange(val, 'ftime')}} />
|
</Form.Item>
|
</Col>
|
</Row>
|
<Row gutter={24}>
|
<Col offset={6} span={6}>
|
<Form.Item label={'提示编码'}>
|
<span className="errorval"> E </span>
|
<Button onClick={() => {this.showError('E')}} type="primary" size="small">
|
查看
|
</Button>
|
</Form.Item>
|
</Col>
|
</Row>
|
<Row gutter={24}>
|
<Col offset={6} span={6}>
|
<Form.Item label={'提示编码'}>
|
<span className="errorval"> NM </span>
|
<Button onClick={() => {this.showError('NM')}} type="primary" size="small">
|
查看
|
</Button>
|
</Form.Item>
|
</Col>
|
</Row>
|
<Row gutter={24}>
|
<Col offset={6} span={6}>
|
<Form.Item label={'提示编码'}>
|
<span className="errorval"> -1 </span>
|
不提示
|
</Form.Item>
|
</Col>
|
</Row>
|
</Form>
|
</TabPane>
|
</Tabs>
|
</div>
|
)
|
}
|
}
|
|
export default Form.create()(VerifyCard)
|