import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { fromJS } from 'immutable'
|
import { Form, Tabs, Row, Col, Input, Button, Popconfirm, Tooltip, notification, Modal, message, InputNumber, Radio, Typography } from 'antd'
|
import { EditOutlined, QuestionCircleOutlined, StopOutlined, CheckCircleOutlined, SwapOutlined, DeleteOutlined } from '@ant-design/icons'
|
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 MKEmitter from '@/utils/events.js'
|
import './index.scss'
|
|
const { TabPane } = Tabs
|
const { confirm } = Modal
|
const { Paragraph } = Typography
|
const EditTable = asyncComponent(() => import('@/templates/zshare/editTable'))
|
const FullScripts = asyncComponent(() => import('@/templates/zshare/verifycard/fullScripts'))
|
|
class VerifyCard extends Component {
|
static propTpyes = {
|
columns: PropTypes.array, // 显示列
|
card: PropTypes.object,
|
}
|
|
state = {
|
verify: {},
|
systemScripts: [],
|
activeKey: 'basemsg',
|
excelColumns: [
|
{
|
title: '字段',
|
dataIndex: 'Column',
|
width: '14%',
|
inputType: 'input',
|
unique: true,
|
strict: true,
|
editable: true
|
},
|
{
|
title: '名称',
|
dataIndex: 'Text',
|
width: '14%',
|
inputType: 'input',
|
editable: true
|
},
|
{
|
title: '类型',
|
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(4000)', text: 'Nvarchar(4000)' },
|
{ 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' },
|
{ value: 'datetime', text: 'datetime' }
|
]
|
},
|
{
|
title: '导入',
|
dataIndex: 'import',
|
width: '10%',
|
editable: true,
|
inputType: 'radio',
|
render: (text, record) => {
|
if (record.import === 'init') {
|
return '初始化'
|
} else if (record.import === 'false') {
|
return '否'
|
}
|
return '是'
|
},
|
options: [
|
{ value: 'true', text: '是' },
|
{ value: 'false', text: '否' },
|
{ value: 'init', text: '初始化' }
|
]
|
},
|
{
|
title: '必填',
|
dataIndex: 'required',
|
width: '10%',
|
editable: true,
|
inputType: 'switch',
|
render: (text, record) => record.required === 'true' ? '是' : '否'
|
},
|
{
|
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: '10%',
|
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: '14%',
|
render: (text, record) => {
|
let names = {
|
physical: '物理验证(全量验证)',
|
logic: '逻辑验证(全量验证)',
|
physical_temp: '物理验证(仅临时表)',
|
logic_temp: '逻辑验证(仅临时表)',
|
}
|
|
return names[text] || '物理验证(全量验证)'
|
},
|
inputType: 'select',
|
editable: true,
|
options: [
|
{ value: 'physical', text: '物理验证(全量验证)' },
|
{ value: 'logic', text: '逻辑验证(全量验证)' },
|
{ value: 'physical_temp', text: '物理验证(仅临时表)' },
|
{ value: 'logic_temp', text: '逻辑验证(仅临时表)' }
|
]
|
},
|
{
|
title: '是否启用',
|
dataIndex: 'status',
|
width: '12%',
|
editable: true,
|
required: false,
|
inputType: 'switch',
|
render: (text, record) => record.status === 'false' ?
|
(
|
<div style={{color: '#ff4d4f'}}>
|
禁用
|
<StopOutlined style={{marginLeft: '5px'}} />
|
</div>
|
) :
|
(
|
<div style={{color: '#26C281'}}>
|
启用
|
<CheckCircleOutlined style={{marginLeft: '5px'}}/>
|
</div>
|
)
|
},
|
],
|
scriptsColumns: [
|
{
|
title: 'SQL',
|
dataIndex: 'sql',
|
width: '60%',
|
render: (text) => {
|
let title = text.match(/^\s*\/\*.+\*\//)
|
title = title && title[0] ? title[0] : ''
|
let _text = title ? text.replace(title, '') : text
|
|
return (
|
<div>
|
{title ? <span style={{color: '#a50'}}>{title}<span style={{fontSize: '12px', marginLeft: '5px'}}>{_text.length}</span></span> : null}
|
<Paragraph copyable={{ text: text }} ellipsis={{ rows: 4, expandable: true }}>{_text}</Paragraph>
|
</div>
|
)
|
}
|
},
|
{
|
title: '执行位置',
|
dataIndex: 'position',
|
width: '10%',
|
render: (text, record) => {
|
if (record.position === 'init') {
|
return <span style={{color: 'orange'}}>初始化</span>
|
} else if (record.position === 'front') {
|
return <span style={{color: '#26C281'}}>sql前</span>
|
} else {
|
return <span style={{color: '#1890ff'}}>sql后</span>
|
}
|
}
|
},
|
{
|
title: '状态',
|
dataIndex: 'status',
|
width: '10%',
|
render: (text, record) => record.status === 'false' ?
|
(
|
<div style={{color: '#ff4d4f'}}>
|
禁用
|
<StopOutlined style={{marginLeft: '5px'}} />
|
</div>
|
) :
|
(
|
<div style={{color: '#26C281'}}>
|
启用
|
<CheckCircleOutlined style={{marginLeft: '5px'}}/>
|
</div>
|
)
|
},
|
{
|
title: '操作',
|
align: 'center',
|
width: '140px',
|
dataIndex: 'operation',
|
render: (text, record) =>
|
(<div style={{textAlign: 'center'}}>
|
<span className="operation-btn" title="编辑" onClick={() => this.handleEdit(record, 'scripts')} style={{color: '#1890ff'}}><EditOutlined /></span>
|
<span className="operation-btn" title="状态切换" onClick={() => this.handleStatus(record, 'scripts')} style={{color: '#8E44AD'}}><SwapOutlined /></span>
|
<Popconfirm
|
overlayClassName="popover-confirm"
|
title="确定删除吗?"
|
onConfirm={() => this.handleDelete(record, 'scripts')
|
}>
|
<span className="operation-btn" style={{color: '#ff4d4f'}}><DeleteOutlined /></span>
|
</Popconfirm>
|
</div>)
|
}
|
]
|
}
|
|
UNSAFE_componentWillMount() {
|
const { card } = this.props
|
let _verify = fromJS(card.verify || {}).toJS()
|
let _columns = _verify.columns || []
|
|
// 旧数据兼容
|
_columns = _columns.map(col => {
|
col.required = col.required || 'true'
|
col.type = col.type || 'Nvarchar(50)'
|
col.import = col.import || 'true'
|
|
if (col.type === 'text' || col.type === 'image') {
|
col.type = 'Nvarchar(50)'
|
} else if (col.type === 'number') {
|
col.type = 'Decimal(18,2)'
|
}
|
|
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
|
})
|
|
if (!_verify.hasOwnProperty('range')) {
|
_verify.range = 1
|
}
|
|
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 () {
|
this.getsysScript()
|
}
|
|
getsysScript = () => {
|
if (sessionStorage.getItem('mk_sys_scripts')) {
|
this.setState({
|
systemScripts: JSON.parse(sessionStorage.getItem('mk_sys_scripts'))
|
})
|
return
|
}
|
|
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.getCloudConfig(_sParam).then(res => {
|
if (res.status) {
|
let _scripts = res.data.map(item => {
|
return {
|
name: item.funcname,
|
value: window.decodeURIComponent(window.atob(item.longparam))
|
}
|
})
|
|
sessionStorage.setItem('mk_sys_scripts', JSON.stringify(_scripts))
|
|
this.setState({
|
systemScripts: _scripts
|
})
|
} 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 _names = {}
|
let _cols = columns.map(item => {
|
let key = item.Column.toLowerCase()
|
_names[key] = item.Text
|
|
return key
|
})
|
let names = {$up: false}
|
|
columns.forEach(col => {
|
if (!col.field) return
|
let key = col.field.toLowerCase()
|
if (_cols.includes(key)) {
|
if (_names[key] !== col.label) {
|
names.$up = true
|
names[key] = col.label
|
}
|
return
|
}
|
|
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)
|
})
|
|
if (names.$up) {
|
const that = this
|
|
confirm({
|
content: '部分字段名称与显示列不一致,是否更新?',
|
onOk() {
|
_columns = _columns.map(item => {
|
let key = item.Column.toLowerCase()
|
|
if (names[key]) {
|
item.Text = names[key]
|
}
|
|
return item
|
})
|
|
that.setState({
|
verify: {
|
...verify,
|
columns: _columns
|
}
|
}, () => {
|
that.resetUniqueColumns()
|
})
|
},
|
onCancel() {
|
that.setState({
|
verify: {
|
...verify,
|
columns: _columns
|
}
|
}, () => {
|
that.resetUniqueColumns()
|
})
|
}
|
})
|
} else {
|
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
|
|
let reset = false
|
columns = columns.map(col => {
|
col.type = col.type || 'Nvarchar(50)'
|
if (col.type === 'text' || col.type === 'image') {
|
col.type = 'Nvarchar(50)'
|
} else if (col.type === 'number') {
|
col.type = 'Decimal(18,2)'
|
}
|
|
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]
|
if (col.required === 'false') {
|
reset = true
|
}
|
col.required = 'true'
|
} else if (/^int/ig.test(col.type)) {
|
if (col.required === 'false') {
|
reset = true
|
}
|
col.required = 'true'
|
} else {
|
col.limit = ''
|
}
|
|
col.required = col.required || 'true'
|
col.import = col.import || 'true'
|
|
return col
|
})
|
|
if (reset) {
|
message.warning('数值类型均为必填。')
|
}
|
|
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)
|
}
|
|
MKEmitter.emit('editLineId', values.uuid)
|
|
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) => {
|
let node = null
|
|
if (type === 'scripts') {
|
this.scriptsForm.edit(record)
|
node = document.getElementById('mk-exin-script')
|
}
|
|
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
|
})
|
}
|
|
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.toLowerCase())
|
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
|
}
|
}
|
|
_verify.columns.sort((a, b) => {
|
if (a.import === 'init' && b.import !== 'init') {
|
return 1
|
} else if (a.import !== 'init' && b.import === 'init') {
|
return -1
|
}
|
return 0
|
})
|
|
let _loading = false
|
if (this.scriptsForm && this.scriptsForm.state.editItem) {
|
_loading = true
|
this.setState({activeKey: 'scripts'})
|
} else if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(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>
|
{card.label ? <div className="mk-com-name">{card.label} - 验证信息</div> : null}
|
<Tabs activeKey={activeKey} className="excelin-verify-card-box" onChange={this.tabchange}>
|
<TabPane tab="基础验证" key="basemsg">
|
<Form {...formItemLayout}>
|
<Row gutter={24}>
|
<Col span={8}>
|
<Form.Item label={
|
<Tooltip placement="bottomLeft" title="导入时工作表名与excel中必须一致,注:工作表名为Sheet1且excel中仅有一个工作表时不进行表名验证。">
|
<QuestionCircleOutlined className="mk-form-tip" />
|
工作表
|
</Tooltip>
|
}>
|
{getFieldDecorator('sheet', {
|
initialValue: verify.sheet || '',
|
rules: [
|
{
|
required: true,
|
message: '请输入工作表名!'
|
}
|
]
|
})(<Input placeholder="" autoComplete="off" />)}
|
</Form.Item>
|
</Col>
|
<Col span={8}>
|
<Form.Item label={
|
<Tooltip placement="bottomLeft" title="忽略首行时,会校验excel中表头名称与excel列设置是否一致。">
|
<QuestionCircleOutlined className="mk-form-tip" />
|
忽略行
|
</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 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),内容为必填;最大值和最小值在类型为数值时有效。导入-初始化:用于excel中不存在,导入时需要初始化的字段</Col>
|
<EditTable actions={['edit', 'move', 'copy', 'del', 'extra:required:是否必填']} type="excelcolumn" 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} uniqueChange={this.uniqueChange}/>
|
<EditTable actions={['edit', 'move', 'del', 'status']} 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" id="mk-exin-script">
|
<FullScripts
|
verify={verify}
|
getScriptsFullForm={() => this.scriptsFullForm}
|
getScriptsForm={() => this.scriptsForm}
|
handleStatus={this.handleStatus}
|
handleDelete={this.handleDelete}
|
>
|
<CustomScript
|
type="fullscreen"
|
btn={this.props.card}
|
usefulfields={verify.columns}
|
scripts={verify.scripts}
|
systemScripts={this.state.systemScripts}
|
scriptsChange={this.scriptsChange}
|
wrappedComponentRef={(inst) => this.scriptsFullForm = inst}
|
/>
|
</FullScripts>
|
<CustomScript
|
btn={this.props.card}
|
usefulfields={verify.columns}
|
scripts={verify.scripts}
|
systemScripts={this.state.systemScripts}
|
scriptsChange={this.scriptsChange}
|
wrappedComponentRef={(inst) => this.scriptsForm = inst}
|
/>
|
<EditTable actions={['move']} data={verify.scripts} columns={scriptsColumns} onChange={(scripts) => {this.setState({verify: {...verify, scripts}})}}/>
|
</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"> -1 </span>
|
执行成功无提示。
|
</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"> -2 </span>
|
执行失败无提示
|
</Form.Item>
|
</Col>
|
</Row>
|
</Form>
|
</TabPane>
|
</Tabs>
|
</div>
|
)
|
}
|
}
|
|
export default Form.create()(VerifyCard)
|