import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { fromJS } from 'immutable'
|
import { Form, Tabs, Row, Col, Radio, Button, Table, Popconfirm, Icon, notification, Modal, message, InputNumber, Tooltip, Typography } from 'antd'
|
import moment from 'moment'
|
|
import Api from '@/api'
|
import Utils from '@/utils/utils.js'
|
|
import UniqueForm from './uniqueform'
|
import ContrastForm from './contrastform'
|
import CustomForm from './customform'
|
import CustomScript from './customscript'
|
import BillcodeForm from './billcodeform'
|
import VoucherForm from './voucherform'
|
import './index.scss'
|
|
const { TabPane } = Tabs
|
const { confirm } = Modal
|
const { Paragraph } = Typography
|
|
class VerifyCard extends Component {
|
static propTpyes = {
|
floor: PropTypes.any, // 是否为子表
|
btnTab: PropTypes.any, // 表单标签页(按钮)参数
|
config: PropTypes.any, // 表单标签页参数
|
dict: PropTypes.object, // 字典项
|
card: PropTypes.object, // 按钮信息
|
columns: PropTypes.array
|
}
|
|
state = {
|
initsql: '', // sql验证时变量声明及赋值
|
verify: {},
|
fields: [],
|
usefulfields: '',
|
defaultsql: '', // 默认Sql
|
orderModular: [],
|
orderModularDetail: [],
|
voucher: [],
|
voucherDetail: [],
|
systemScripts: [],
|
columnsFields: [],
|
uniqueColumns: [
|
{
|
title: '字段名',
|
dataIndex: 'field',
|
width: '35%'
|
},
|
{
|
title: '报错编码',
|
dataIndex: 'errorCode',
|
width: '12%'
|
},
|
{
|
title: '验证类型',
|
dataIndex: 'verifyType',
|
width: '13%',
|
render: (text, record) => record.verifyType === 'logic' ? '逻辑验证' : '物理验证'
|
},
|
{
|
title: '状态',
|
dataIndex: 'status',
|
width: '15%',
|
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: '25%',
|
dataIndex: 'operation',
|
render: (text, record) =>
|
(<div>
|
<span className="operation-btn" title={this.props.dict['model.edit']} onClick={() => this.handleEdit(record, 'unique')} style={{color: '#1890ff'}}><Icon type="edit" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.up']} onClick={() => this.handleUpDown(record, 'unique', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.down']} onClick={() => this.handleUpDown(record, 'unique', '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, 'unique')} style={{color: '#8E44AD'}}><Icon type="swap" /></span>
|
<Popconfirm
|
overlayClassName="popover-confirm"
|
title={this.props.dict['model.query.delete']}
|
onConfirm={() => this.handleDelete(record, 'unique')
|
}>
|
<span className="operation-btn" style={{color: '#ff4d4f'}}><Icon type="delete" /></span>
|
</Popconfirm>
|
</div>)
|
}
|
],
|
onceUniqueColumns: [
|
{
|
title: '字段名',
|
dataIndex: 'field',
|
width: '45%'
|
},
|
{
|
title: '状态',
|
dataIndex: 'status',
|
width: '30%',
|
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: '25%',
|
dataIndex: 'operation',
|
render: (text, record) =>
|
(<div>
|
<span className="operation-btn" title={this.props.dict['model.edit']} onClick={() => this.handleEdit(record, 'unique')} style={{color: '#1890ff'}}><Icon type="edit" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.up']} onClick={() => this.handleUpDown(record, 'unique', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.down']} onClick={() => this.handleUpDown(record, 'unique', '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, 'unique')} style={{color: '#8E44AD'}}><Icon type="swap" /></span>
|
<Popconfirm
|
overlayClassName="popover-confirm"
|
title={this.props.dict['model.query.delete']}
|
onConfirm={() => this.handleDelete(record, 'unique')
|
}>
|
<span className="operation-btn" style={{color: '#ff4d4f'}}><Icon type="delete" /></span>
|
</Popconfirm>
|
</div>)
|
}
|
],
|
contrastColumns: [
|
{
|
title: '内容1',
|
dataIndex: 'frontfield',
|
width: '13%'
|
},
|
{
|
title: '运算符',
|
dataIndex: 'operator',
|
width: '13%'
|
},
|
{
|
title: '内容2',
|
dataIndex: 'backfield',
|
width: '13%',
|
},
|
{
|
title: '提示信息',
|
dataIndex: 'errmsg',
|
width: '13%'
|
},
|
{
|
title: '报错编码',
|
dataIndex: 'errorCode',
|
width: '13%'
|
},
|
{
|
title: '状态',
|
dataIndex: 'status',
|
width: '15%',
|
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, 'contrast')} style={{color: '#1890ff'}}><Icon type="edit" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.up']} onClick={() => this.handleUpDown(record, 'contrast', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.down']} onClick={() => this.handleUpDown(record, 'contrast', '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, 'contrast')} style={{color: '#8E44AD'}}><Icon type="swap" /></span>
|
<Popconfirm
|
overlayClassName="popover-confirm"
|
title={this.props.dict['model.query.delete']}
|
onConfirm={() => this.handleDelete(record, 'contrast')
|
}>
|
<span className="operation-btn" style={{color: '#ff4d4f'}}><Icon type="delete" /></span>
|
</Popconfirm>
|
</div>)
|
}
|
],
|
customColumns: [
|
{
|
title: 'SQL',
|
dataIndex: 'sql',
|
width: '45%',
|
render: (text) => (
|
<Paragraph copyable ellipsis={{ rows: 5, expandable: true }}>{text}</Paragraph>
|
)
|
},
|
{
|
title: '结果处理',
|
dataIndex: 'resultName',
|
width: '9%'
|
},
|
{
|
title: '提示信息',
|
dataIndex: 'errmsg',
|
width: '13%'
|
},
|
{
|
title: '报错编码',
|
dataIndex: 'errorCode',
|
width: '9%'
|
},
|
{
|
title: '状态',
|
dataIndex: 'status',
|
width: '9%',
|
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: '15%',
|
dataIndex: 'operation',
|
render: (text, record) =>
|
(<div>
|
<span className="operation-btn" title={this.props.dict['model.edit']} onClick={() => this.handleEdit(record, 'customverify')} style={{color: '#1890ff'}}><Icon type="edit" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.up']} onClick={() => this.handleUpDown(record, 'customverify', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.down']} onClick={() => this.handleUpDown(record, 'customverify', '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, 'customverify')} style={{color: '#8E44AD'}}><Icon type="swap" /></span>
|
<Popconfirm
|
overlayClassName="popover-confirm"
|
title={this.props.dict['model.query.delete']}
|
onConfirm={() => this.handleDelete(record, 'customverify')
|
}>
|
<span className="operation-btn" style={{color: '#ff4d4f'}}><Icon type="delete" /></span>
|
</Popconfirm>
|
</div>)
|
}
|
],
|
scriptsColumns: [
|
{
|
title: 'SQL',
|
dataIndex: 'sql',
|
width: '60%',
|
render: (text) => (
|
<Paragraph copyable ellipsis={{ rows: 5, expandable: true }}>{text}</Paragraph>
|
)
|
},
|
{
|
title: '执行位置',
|
dataIndex: 'position',
|
width: '10%',
|
render: (text, record) => {
|
if (record.position === 'init') {
|
return '初始化'
|
} else if (record.position === 'front') {
|
return 'sql前'
|
} else {
|
return 'sql后'
|
}
|
}
|
},
|
{
|
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>)
|
}
|
],
|
orderColumns: [
|
{
|
title: this.props.dict['header.form.funcvar'],
|
dataIndex: 'fieldName',
|
width: '12%',
|
render: (text, record) => (`${record.fieldName || ''}(${record.field})`)
|
},
|
{
|
title: '类型',
|
dataIndex: 'billType',
|
width: '6%',
|
},
|
{
|
title: '凭证类型',
|
dataIndex: 'ModularCodeName',
|
width: '11%'
|
},
|
{
|
title: '凭证标识',
|
dataIndex: 'ModularDetailCode',
|
width: '11%'
|
},
|
{
|
title: '关联字段',
|
dataIndex: 'linkFieldName',
|
width: '10%',
|
render: (text, record) => (record.linkField ? `${record.linkFieldName || ''}(${record.linkField})` : '')
|
},
|
{
|
title: '位数',
|
dataIndex: 'Type',
|
width: '6%'
|
},
|
{
|
title: '示例',
|
dataIndex: 'example',
|
width: '13%',
|
render: (text, record) => {
|
let _text = ''
|
|
let _type = record.Type
|
if (_type && typeof(_type) === 'string') {
|
_type = parseInt(_type)
|
} else {
|
_type = 4
|
}
|
|
if (record.TypeCharOne === 'n') {
|
_text = record.ModularDetailCode + Array(_type).join('0') + '1'
|
} else if (record.TypeCharOne === 'Y') {
|
_text = record.ModularDetailCode + moment().format('YYYYMMDD') + Array(_type).join('0') + '1'
|
} else if (record.TypeCharOne === 'Lp') {
|
_text = Array(_type).join('0') + '10'
|
} else if (record.TypeCharOne === 'BN') {
|
_text = moment().format('YYYYMMDD') + Array(_type).join('0') + '1'
|
}
|
return _text
|
}
|
},
|
{
|
title: '标识',
|
dataIndex: 'mark',
|
width: '8%'
|
},
|
{
|
title: '状态',
|
dataIndex: 'status',
|
width: '8%',
|
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: '15%',
|
dataIndex: 'operation',
|
render: (text, record) =>
|
(<div>
|
<span className="operation-btn" title={this.props.dict['model.edit']} onClick={() => this.handleEdit(record, 'ordercode')} style={{color: '#1890ff'}}><Icon type="edit" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.up']} onClick={() => this.handleUpDown(record, 'ordercode', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span>
|
<span className="operation-btn" title={this.props.dict['header.form.down']} onClick={() => this.handleUpDown(record, 'ordercode', '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, 'ordercode')} style={{color: '#8E44AD'}}><Icon type="swap" /></span>
|
<Popconfirm
|
overlayClassName="popover-confirm"
|
title={this.props.dict['model.query.delete']}
|
onConfirm={() => this.handleDelete(record, 'ordercode')
|
}>
|
<span className="operation-btn" style={{color: '#ff4d4f'}}><Icon type="delete" /></span>
|
</Popconfirm>
|
</div>)
|
}
|
]
|
}
|
|
UNSAFE_componentWillMount() {
|
const { columns, config, card } = this.props
|
let _verify = this.props.card.verify || {}
|
|
let _invalid = _verify.invalid
|
|
if (!_invalid) { // 选择行时,失效验证默认开启
|
_invalid = card.Ot !== 'notRequired' ? 'true' : 'false'
|
}
|
if (card.sqlType === 'custom') { // 自定义验证时,不使用默认sql
|
_verify.default = 'false'
|
}
|
|
_verify.default = _verify.default || 'true'
|
_verify.invalid = _invalid
|
_verify.uniques = _verify.uniques || []
|
_verify.contrasts = _verify.contrasts || []
|
_verify.accountdate = _verify.accountdate || 'false'
|
_verify.customverifys = _verify.customverifys || []
|
_verify.billcodes = _verify.billcodes || []
|
_verify.voucher = _verify.voucher || {enabled: false}
|
_verify.scripts = _verify.scripts || []
|
|
this.setState({
|
verify: _verify
|
})
|
|
// 按钮-表单标签页
|
if (this.props.card.btnType) {
|
let _fields = []
|
|
config.groups.forEach(group => {
|
_fields.push(...group.sublist)
|
})
|
|
let _usefulfields = ['BID', 'ID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey', 'UserName', 'FullName', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode']
|
let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)']
|
let _select = ['@UserName=\'\'', '@FullName=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'']
|
let fieldArr = _usefulfields.map(_f => _f.toLowerCase())
|
|
_fields.forEach(_f => {
|
if (_f.field) {
|
if (fieldArr.includes(_f.field.toLowerCase())) return
|
fieldArr.push(_f.field.toLowerCase())
|
|
_usefulfields.push(_f.field)
|
|
let _fieldlen = _f.fieldlength || 50
|
|
if (['textarea', 'fileupload', 'multiselect'].includes(_f.type)) {
|
_fieldlen = _f.fieldlength || 512
|
} else if (_f.type === 'number') {
|
_fieldlen = _f.decimal ? _f.decimal : 0
|
}
|
|
if (_fieldlen > 2048) {
|
_fieldlen = 'max'
|
}
|
|
let _type = `nvarchar(${_fieldlen})`
|
|
if (_f.type.match(/date/ig)) {
|
_type = 'datetime'
|
_select.push(`@${_f.field}='1900-01-01'`)
|
} else if (_f.type === 'number') {
|
_type = `decimal(18,${_fieldlen})`
|
_select.push(`@${_f.field}=0`)
|
} else {
|
_select.push(`@${_f.field}=''`)
|
}
|
|
_declare.push(`@${_f.field} ${_type}`)
|
}
|
})
|
|
if (columns && columns.length > 0 && this.props.btnTab.Ot !== 'notRequired' && this.props.btnTab.Ot !== 'requiredOnce') {
|
columns.forEach(_f => {
|
if (!_f.field || fieldArr.includes(_f.field.toLowerCase())) return
|
|
fieldArr.push(_f.field.toLowerCase())
|
|
_usefulfields.push(_f.field)
|
|
let _fieldlen = _f.fieldlength || 50
|
|
if (_f.type === 'picture' || _f.type === 'textarea') {
|
_fieldlen = _f.fieldlength || 512
|
}
|
|
if (_fieldlen > 2048) {
|
_fieldlen = 'max'
|
}
|
|
let _type = `nvarchar(${_fieldlen})`
|
|
if (_f.type === 'number') {
|
_type = `decimal(18,${_f.decimal ? _f.decimal : 0})`
|
} else if (_f.type === 'picture' || _f.type === 'textarea') {
|
_type = `nvarchar(${_fieldlen})`
|
}
|
|
if (_f.type === 'number') {
|
_select.push(`@${_f.field}=0`)
|
} else {
|
_select.push(`@${_f.field}=''`)
|
}
|
|
_declare.push(`@${_f.field} ${_type}`)
|
})
|
}
|
|
_usefulfields = _usefulfields.join(', ')
|
let _sql = `Declare ${_declare.join(', ')}
|
Select ${_select.join(', ')}
|
`
|
|
// 默认sql
|
let _insertsql = ''
|
let _updatesql = ''
|
|
if (this.props.card.sqlType === 'insert' || this.props.card.sqlType === 'insertOrUpdate') {
|
let keys = []
|
let values = []
|
_fields.forEach(item => {
|
if (!item.field) return
|
|
keys.push(item.field.toLowerCase())
|
values.push('@' + item.field)
|
})
|
|
if (config.setting.primaryKey && !keys.includes(config.setting.primaryKey.toLowerCase())) {
|
keys.push(config.setting.primaryKey.toLowerCase())
|
values.push('@ID@')
|
}
|
if (!keys.includes('createuserid')) {
|
keys.push('createuserid')
|
values.push('@userid@')
|
}
|
if (!keys.includes('createuser')) {
|
keys.push('createuser')
|
values.push('@username')
|
}
|
if (!keys.includes('createstaff')) {
|
keys.push('createstaff')
|
values.push('@fullname')
|
}
|
if (!keys.includes('bid')) {
|
keys.push('bid')
|
values.push('@BID@')
|
}
|
|
keys = keys.join(', ')
|
values = values.join(', ')
|
_insertsql = `insert into ${this.props.card.sql} (${keys}) select ${values};`
|
}
|
|
if (this.props.card.sqlType === 'update' || this.props.card.sqlType === 'insertOrUpdate') {
|
let _form = []
|
let _arr = []
|
|
_fields.forEach(item => {
|
if (!item.field) return
|
|
_arr.push(item.field.toLowerCase())
|
_form.push(item.field + '=@' + item.field)
|
})
|
|
if (!_arr.includes('modifydate')) {
|
_form.push('modifydate=getdate()')
|
}
|
if (!_arr.includes('modifyuserid')) {
|
_form.push('modifyuserid=@userid@')
|
}
|
|
if (_verify.voucher && _verify.voucher.enabled) {
|
if (!_arr.includes('bvoucher')) {
|
_form.push('BVoucher=@BVoucher')
|
}
|
if (!_arr.includes('fibvoucherdate')) {
|
_form.push('FIBVoucherDate=@FIBVoucherDate')
|
}
|
if (!_arr.includes('fiyear')) {
|
_form.push('FiYear=@FiYear')
|
}
|
}
|
|
_form = _form.join(', ')
|
_updatesql = `update ${this.props.card.sql} set ${_form} where ${config.setting.primaryKey}=@ID@;`
|
}
|
|
let _defaultsql = ''
|
|
if (this.props.card.sqlType === 'insert') {
|
_defaultsql = _insertsql
|
} else if (this.props.card.sqlType === 'update') {
|
_defaultsql = _updatesql
|
} else if (this.props.card.sqlType === 'insertOrUpdate') {
|
_defaultsql += `select @tbid=''
|
select @tbid='X' from ${this.props.card.sql} where ${config.setting.primaryKey}=@ID@
|
if @tbid=''
|
begin
|
${_insertsql}
|
end
|
else
|
begin
|
${_updatesql}
|
end
|
`
|
}
|
|
this.setState({
|
fields: _fields,
|
initsql: _sql,
|
defaultsql: _defaultsql,
|
usefulfields: _usefulfields
|
}, () => {
|
this.getsysScript()
|
})
|
|
return
|
}
|
|
// 通用按钮
|
if (this.props.card.OpenType === 'pop') {
|
Api.getSystemConfig({
|
func: 'sPC_Get_LongParam',
|
MenuID: this.props.card.uuid
|
}).then(res => {
|
if (res.status) {
|
let _LongParam = ''
|
if (res.LongParam) {
|
try {
|
_LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
|
} catch (e) {
|
console.warn('Parse Failure')
|
_LongParam = ''
|
}
|
}
|
|
if (!_LongParam) {
|
notification.warning({
|
top: 92,
|
message: '表单未添加或解析错误,请检查表单设置!',
|
duration: 5
|
})
|
|
this.getsysScript()
|
|
return
|
}
|
|
let _fields = []
|
if (_LongParam.groups.length > 0) {
|
_LongParam.groups.forEach(group => {
|
_fields.push(...group.sublist)
|
})
|
} else {
|
_fields = _LongParam.fields
|
}
|
|
let _usefulfields = ['BID', 'ID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey', 'UserName', 'FullName', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode']
|
let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)']
|
let _select = ['@UserName=\'\'', '@FullName=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'']
|
let hasBid = false
|
let fieldArr = _usefulfields.map(_f => _f.toLowerCase())
|
let _defaultfields = fromJS(_fields).toJS()
|
|
_fields.forEach(_f => {
|
if (_f.field) {
|
if (fieldArr.includes(_f.field.toLowerCase())) return
|
fieldArr.push(_f.field.toLowerCase())
|
|
_usefulfields.push(_f.field)
|
|
let _fieldlen = _f.fieldlength || 50
|
|
if (['textarea', 'fileupload', 'multiselect'].includes(_f.type)) {
|
_fieldlen = _f.fieldlength || 512
|
} else if (_f.type === 'number') {
|
_fieldlen = _f.decimal ? _f.decimal : 0
|
}
|
|
if (_fieldlen > 2048) {
|
_fieldlen = 'max'
|
}
|
|
let _type = `nvarchar(${_fieldlen})`
|
|
if (_f.type.match(/date/ig)) {
|
_type = 'datetime'
|
_select.push(`@${_f.field}='1900-01-01'`)
|
} else if (_f.type === 'number') {
|
_type = `decimal(18,${_fieldlen})`
|
_select.push(`@${_f.field}=0`)
|
} else {
|
_select.push(`@${_f.field}=''`)
|
}
|
|
_declare.push(`@${_f.field} ${_type}`)
|
}
|
if (_f.field && _f.field.toLowerCase() === 'bid') {
|
hasBid = true
|
}
|
})
|
|
if (this.props.floor === 'subtable' && !hasBid) { // 子表表单中增加BID
|
_fields.unshift({
|
uuid: 'BID',
|
field: 'BID',
|
label: 'BID',
|
type: 'text'
|
})
|
}
|
|
if (columns && columns.length > 0 && this.props.card.Ot !== 'notRequired' && this.props.card.Ot !== 'requiredOnce') {
|
columns.forEach(_f => {
|
if (!_f.field || fieldArr.includes(_f.field.toLowerCase())) return
|
|
fieldArr.push(_f.field.toLowerCase())
|
|
_usefulfields.push(_f.field)
|
|
let _fieldlen = _f.fieldlength || 50
|
|
if (_f.type === 'picture' || _f.type === 'textarea') {
|
_fieldlen = _f.fieldlength || 512
|
}
|
|
if (_fieldlen > 2048) {
|
_fieldlen = 'max'
|
}
|
|
let _type = `nvarchar(${_fieldlen})`
|
|
if (_f.type === 'number') {
|
_type = `decimal(18,${_f.decimal ? _f.decimal : 0})`
|
} else if (_f.type === 'picture' || _f.type === 'textarea') {
|
_type = `nvarchar(${_fieldlen})`
|
}
|
|
if (_f.type === 'number') {
|
_select.push(`@${_f.field}=0`)
|
} else {
|
_select.push(`@${_f.field}=''`)
|
}
|
|
_declare.push(`@${_f.field} ${_type}`)
|
})
|
}
|
|
_usefulfields = _usefulfields.join(', ')
|
let _sql = `Declare ${_declare.join(', ')}
|
Select ${_select.join(', ')}
|
`
|
|
// 默认sql
|
let _defaultsql = ''
|
|
if (this.props.card.sqlType === 'insert') {
|
let keys = []
|
let values = []
|
_defaultfields.forEach(item => {
|
if (!item.field) return
|
|
keys.push(item.field.toLowerCase())
|
values.push('@' + item.field)
|
})
|
|
if (config.setting.primaryKey && !keys.includes(config.setting.primaryKey.toLowerCase())) {
|
keys.push(config.setting.primaryKey.toLowerCase())
|
values.push('@ID@')
|
}
|
if (!keys.includes('createuserid')) {
|
keys.push('createuserid')
|
values.push('@userid@')
|
}
|
if (!keys.includes('createuser')) {
|
keys.push('createuser')
|
values.push('@username')
|
}
|
if (!keys.includes('createstaff')) {
|
keys.push('createstaff')
|
values.push('@fullname')
|
}
|
if (!keys.includes('bid')) {
|
keys.push('bid')
|
values.push('@BID@')
|
}
|
|
keys = keys.join(', ')
|
values = values.join(', ')
|
_defaultsql = `insert into ${this.props.card.sql} (${keys}) select ${values};`
|
} else if (this.props.card.sqlType === 'update' || this.props.card.sqlType === 'audit') {
|
let _form = []
|
let _arr = []
|
|
_defaultfields.forEach(item => {
|
if (!item.field) return
|
|
_arr.push(item.field.toLowerCase())
|
_form.push(item.field + '=@' + item.field)
|
})
|
|
if (this.props.card.sqlType === 'audit') {
|
if (!_arr.includes('submitdate')) {
|
_form.push('submitdate=getdate()')
|
}
|
if (!_arr.includes('submituserid')) {
|
_form.push('submituserid=@userid@')
|
}
|
} else {
|
if (!_arr.includes('modifydate')) {
|
_form.push('modifydate=getdate()')
|
}
|
if (!_arr.includes('modifyuserid')) {
|
_form.push('modifyuserid=@userid@')
|
}
|
}
|
|
if (_verify.voucher && _verify.voucher.enabled) {
|
if (!_arr.includes('bvoucher')) {
|
_form.push('BVoucher=@BVoucher')
|
}
|
if (!_arr.includes('fibvoucherdate')) {
|
_form.push('FIBVoucherDate=@FIBVoucherDate')
|
}
|
if (!_arr.includes('fiyear')) {
|
_form.push('FiYear=@FiYear')
|
}
|
}
|
|
_form = _form.join(', ')
|
_defaultsql = `update ${this.props.card.sql} set ${_form} where ${config.setting.primaryKey}${this.props.card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID from dbo.SplitComma(@ID@))'};`
|
}
|
|
this.setState({
|
fields: _fields,
|
initsql: _sql,
|
defaultsql: _defaultsql,
|
usefulfields: _usefulfields
|
}, () => {
|
this.getsysScript()
|
})
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
this.getsysScript()
|
}
|
})
|
} else {
|
let _usefulfields = ['BID', 'ID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey', 'UserName', 'FullName', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode']
|
let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)']
|
let _select = ['@UserName=\'\'', '@FullName=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'']
|
let fieldArr = _usefulfields.map(_f => _f.toLowerCase())
|
|
if (columns && columns.length > 0 && this.props.card.Ot !== 'notRequired' && this.props.card.Ot !== 'requiredOnce') {
|
columns.forEach(_f => {
|
if (!_f.field || fieldArr.includes(_f.field.toLowerCase())) return
|
|
fieldArr.push(_f.field.toLowerCase())
|
|
_usefulfields.push(_f.field)
|
|
let _fieldlen = _f.fieldlength || 50
|
|
if (_f.type === 'picture' || _f.type === 'textarea') {
|
_fieldlen = _f.fieldlength || 512
|
}
|
|
if (_fieldlen > 2048) {
|
_fieldlen = 'max'
|
}
|
|
let _type = `nvarchar(${_fieldlen})`
|
|
if (_f.type === 'number') {
|
_type = `decimal(18,${_f.decimal ? _f.decimal : 0})`
|
} else if (_f.type === 'picture' || _f.type === 'textarea') {
|
_type = `nvarchar(${_fieldlen})`
|
}
|
|
if (_f.type === 'number') {
|
_select.push(`@${_f.field}=0`)
|
} else {
|
_select.push(`@${_f.field}=''`)
|
}
|
|
_declare.push(`@${_f.field} ${_type}`)
|
})
|
}
|
|
_usefulfields = _usefulfields.join(', ')
|
let _sql = `Declare ${_declare.join(', ')}
|
Select ${_select.join(', ')}
|
`
|
|
// 默认sql
|
let _defaultsql = ''
|
|
if (this.props.card.sqlType === 'LogicDelete') {
|
_defaultsql = `update ${this.props.card.sql} set deleted=1,modifydate=getdate(),modifyuserid=@userid@ where ${config.setting.primaryKey}${this.props.card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID from dbo.SplitComma(@ID@))'};`
|
} else if (this.props.card.sqlType === 'delete') {
|
let _msg = ''
|
if (columns && columns.length > 0 && this.props.card.Ot !== 'notRequired' && this.props.card.Ot !== 'requiredOnce') {
|
let _index = 0
|
columns.forEach(col => {
|
if (col.field && col.Hide !== 'true' && _index < 4) {
|
_msg += col.label + '=\'\','
|
_index++
|
}
|
})
|
}
|
_defaultsql += `insert into snote (remark,createuserid,CreateUser,CreateStaff) select left('删除表:${this.props.card.sql} 数据: ${_msg}${config.setting.primaryKey}='+@ID@,200),@userid@,@username,@fullname delete ${this.props.card.sql} where ${config.setting.primaryKey}${this.props.card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID from dbo.SplitComma(@ID@))'};`
|
}
|
|
this.setState({
|
initsql: _sql,
|
defaultsql: _defaultsql,
|
usefulfields: _usefulfields
|
}, () => {
|
this.getsysScript()
|
})
|
}
|
|
if (this.props.card.Ot === 'requiredOnce') {
|
let _columns = fromJS(config.columns).toJS()
|
_columns = _columns.filter(col => col.field)
|
|
if (this.props.floor === 'subtable' && _columns.filter(col => col.field.toLowerCase() === 'bid').length === 0) { // 子表表单中增加BID
|
_columns.unshift({
|
uuid: 'BID',
|
field: 'BID',
|
label: 'BID',
|
type: 'text'
|
})
|
}
|
this.setState({
|
columnsFields: _columns
|
})
|
}
|
}
|
|
componentDidMount() {
|
// 获取生成单号一级菜单
|
let defer1 = new Promise(resolve => {
|
let _orderSql = `select distinct ModularCode as ID,ModularCode+ModularName+ModularNo as NameNO from sModular where deleted=0 and Appkey=case when Appkey='' then '' else @Appkey@ end order by ID asc`
|
_orderSql = Utils.formatOptions(_orderSql)
|
|
let orderParam = {
|
func: 'sPC_Get_SelectedList',
|
LText: _orderSql,
|
obj_name: 'data',
|
arr_field: 'ID,NameNO'
|
}
|
|
orderParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
orderParam.secretkey = Utils.encrypt(orderParam.LText, orderParam.timestamp)
|
orderParam.open_key = Utils.encryptOpenKey(orderParam.secretkey, orderParam.timestamp) // 云端数据验证
|
|
Api.getSystemConfig(orderParam).then(res => {
|
if (res.status) {
|
resolve(res)
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
}
|
})
|
})
|
|
// 获取生成单号二级菜单
|
let defer2 = new Promise(resolve => {
|
let _orderDetailSql = `select distinct ModularDetailCode,ModularDetailCode+ModularDetailName as CodeName,ModularCode as BID,Type from sModularDetail where Deleted=0 and Appkey=case when Appkey='' then '' else @Appkey@ end order by ModularDetailCode`
|
_orderDetailSql = Utils.formatOptions(_orderDetailSql)
|
|
let orderDetailParam = {
|
func: 'sPC_Get_SelectedList',
|
LText: _orderDetailSql,
|
obj_name: 'data',
|
arr_field: 'ModularDetailCode,CodeName,BID,Type'
|
}
|
|
orderDetailParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
orderDetailParam.secretkey = Utils.encrypt(orderDetailParam.LText, orderDetailParam.timestamp)
|
orderDetailParam.open_key = Utils.encryptOpenKey(orderDetailParam.secretkey, orderDetailParam.timestamp) // 云端数据验证
|
|
Api.getSystemConfig(orderDetailParam).then(res => {
|
if (res.status) {
|
resolve(res)
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
}
|
})
|
})
|
|
Promise.all([defer1, defer2]).then(result => {
|
this.setState({
|
orderModular: result[0].data,
|
orderModularDetail: result[1].data
|
})
|
})
|
|
// 获取凭证二级菜单
|
let defer3 = new Promise(resolve => {
|
let _voucherSql = 'select distinct ModularCode as ID,ModularCode+ModularName+ModularNo as NameNO,TypeCharOne from sModular where deleted=0 and Appkey=case when Appkey=\'\' then \'\' else @Appkey@ end order by ModularCode'
|
_voucherSql = Utils.formatOptions(_voucherSql)
|
|
let voucherParam = {
|
func: 'sPC_Get_SelectedList',
|
LText: _voucherSql,
|
obj_name: 'data',
|
arr_field: 'ID,NameNO,TypeCharOne'
|
}
|
|
voucherParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
voucherParam.secretkey = Utils.encrypt(voucherParam.LText, voucherParam.timestamp)
|
voucherParam.open_key = Utils.encryptOpenKey(voucherParam.secretkey, voucherParam.timestamp) // 云端数据验证
|
|
Api.getSystemConfig(voucherParam).then(res => {
|
if (res.status) {
|
resolve(res)
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
}
|
})
|
})
|
|
// 获取凭证三级菜单
|
let defer4 = new Promise(resolve => {
|
let _voucherDetailSql = 'select distinct ModularDetailCode,ModularDetailCode+ModularDetailName as CodeName,ModularCode as BID, VoucherTypeTwo, IDefine1 from sModularDetail where Deleted=0 and VoucherTypeTwo!=\'\' and Appkey=case when Appkey=\'\' then \'\' else @Appkey@ end order by ModularDetailCode'
|
_voucherDetailSql = Utils.formatOptions(_voucherDetailSql)
|
|
let voucherDetailParam = {
|
func: 'sPC_Get_SelectedList',
|
LText: _voucherDetailSql,
|
obj_name: 'data',
|
arr_field: 'ModularDetailCode,CodeName,BID,VoucherTypeTwo,IDefine1'
|
}
|
|
voucherDetailParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
voucherDetailParam.secretkey = Utils.encrypt(voucherDetailParam.LText, voucherDetailParam.timestamp)
|
voucherDetailParam.open_key = Utils.encryptOpenKey(voucherDetailParam.secretkey, voucherDetailParam.timestamp) // 云端数据验证
|
|
Api.getSystemConfig(voucherDetailParam).then(res => {
|
if (res.status) {
|
resolve(res)
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
}
|
})
|
})
|
|
Promise.all([defer3, defer4]).then(result => {
|
this.setState({
|
voucher: result[0].data,
|
voucherDetail: result[1].data
|
})
|
})
|
}
|
|
getsysScript = () => {
|
const { defaultsql } = this.state
|
|
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) {
|
let _scripts = []
|
|
if (defaultsql) {
|
_scripts.push({
|
name: '默认sql',
|
value: defaultsql
|
})
|
}
|
|
res.data.forEach(item => {
|
let _item = {
|
name: item.funcname,
|
value: Utils.UnformatOptions(item.longparam)
|
}
|
|
_scripts.push(_item)
|
})
|
|
this.setState({
|
systemScripts: _scripts
|
})
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
}
|
})
|
}
|
|
uniqueChange = (values) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
|
if (values.uuid) {
|
verify.uniques = verify.uniques.map(item => {
|
if (item.uuid === values.uuid) {
|
return values
|
} else {
|
return item
|
}
|
})
|
} else {
|
values.uuid = Utils.getuuid()
|
verify.uniques.push(values)
|
}
|
|
this.setState({
|
verify: verify
|
})
|
}
|
|
contrastChange = (values) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
|
if (values.uuid) {
|
verify.contrasts = verify.contrasts.map(item => {
|
if (item.uuid === values.uuid) {
|
return values
|
} else {
|
return item
|
}
|
})
|
} else {
|
values.uuid = Utils.getuuid()
|
verify.contrasts.push(values)
|
}
|
|
this.setState({
|
verify: verify
|
})
|
}
|
|
customChange = (values) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
|
if (values.uuid) {
|
verify.customverifys = verify.customverifys.map(item => {
|
if (item.uuid === values.uuid) {
|
return values
|
} else {
|
return item
|
}
|
})
|
} else {
|
values.uuid = Utils.getuuid()
|
verify.customverifys.push(values)
|
}
|
|
this.setState({
|
verify: verify
|
})
|
}
|
|
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
|
})
|
}
|
|
orderChange = (values) => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
|
if (values.uuid) {
|
verify.billcodes = verify.billcodes.map(item => {
|
if (item.uuid === values.uuid) {
|
return values
|
} else {
|
return item
|
}
|
})
|
} else {
|
values.uuid = Utils.getuuid()
|
verify.billcodes.push(values)
|
}
|
|
this.setState({
|
verify: verify
|
})
|
}
|
|
onOptionChange = (e, key) => {
|
const { verify } = this.state
|
let value = e.target.value
|
|
this.setState({
|
verify: {...verify, [key]: value}
|
})
|
}
|
|
handleDelete = (record, type) => {
|
const { verify } = this.state
|
|
if (type === 'customverify') {
|
verify.customverifys = verify.customverifys.filter(item => item.uuid !== record.uuid)
|
} else if (type === 'unique') {
|
verify.uniques = verify.uniques.filter(item => item.uuid !== record.uuid)
|
} else if (type === 'ordercode') {
|
verify.billcodes = verify.billcodes.filter(item => item.uuid !== record.uuid)
|
} else if (type === 'scripts') {
|
verify.scripts = verify.scripts.filter(item => item.uuid !== record.uuid)
|
} else if (type === 'contrast') {
|
verify.contrasts = verify.contrasts.filter(item => item.uuid !== record.uuid)
|
}
|
|
this.setState({ verify: verify })
|
}
|
|
handleEdit = (record, type) => {
|
if (type === 'customverify') {
|
this.customForm.edit(record)
|
} else if (type === 'unique') {
|
this.uniqueForm.edit(record)
|
} else if (type === 'ordercode') {
|
this.orderForm.edit(record)
|
} else if (type === 'scripts') {
|
this.scriptsForm.edit(record)
|
} else if (type === 'contrast') {
|
this.contrastForm.edit(record)
|
}
|
|
let node = document.getElementById('verify-card-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 === 'customverify') {
|
verify.customverifys = verify.customverifys.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
|
}
|
})
|
} else if (type === 'contrast') {
|
verify.contrasts = verify.contrasts.map(item => {
|
if (item.uuid === record.uuid) {
|
return record
|
} else {
|
return item
|
}
|
})
|
} else if (type === 'ordercode') {
|
verify.billcodes = verify.billcodes.map(item => {
|
if (item.uuid === record.uuid) {
|
return record
|
} else {
|
return item
|
}
|
})
|
} else if (type === 'scripts') {
|
verify.scripts = verify.scripts.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 === 'customverify') {
|
verify.customverifys = verify.customverifys.filter((item, i) => {
|
if (item.uuid === record.uuid) {
|
index = i
|
}
|
|
return item.uuid !== record.uuid
|
})
|
if ((index === 0 && direction === 'up') || (index === verify.customverifys.length && direction === 'down')) {
|
return
|
}
|
|
if (direction === 'up') {
|
verify.customverifys.splice(index - 1, 0, record)
|
} else {
|
verify.customverifys.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 === 'contrast') {
|
verify.contrasts = verify.contrasts.filter((item, i) => {
|
if (item.uuid === record.uuid) {
|
index = i
|
}
|
|
return item.uuid !== record.uuid
|
})
|
if ((index === 0 && direction === 'up') || (index === verify.contrasts.length && direction === 'down')) {
|
return
|
}
|
|
if (direction === 'up') {
|
verify.contrasts.splice(index - 1, 0, record)
|
} else {
|
verify.contrasts.splice(index + 1, 0, record)
|
}
|
} else if (type === 'ordercode') {
|
verify.billcodes = verify.billcodes.filter((item, i) => {
|
if (item.uuid === record.uuid) {
|
index = i
|
}
|
|
return item.uuid !== record.uuid
|
})
|
if ((index === 0 && direction === 'up') || (index === verify.billcodes.length && direction === 'down')) {
|
return
|
}
|
|
if (direction === 'up') {
|
verify.billcodes.splice(index - 1, 0, record)
|
} else {
|
verify.billcodes.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
|
})
|
}
|
|
voucherChange = (voucher) => {
|
const { verify } = this.state
|
|
this.setState({
|
verify: {
|
...verify,
|
voucher: voucher
|
}
|
})
|
}
|
|
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}
|
})
|
}
|
|
handleConfirm = () => {
|
let verify = JSON.parse(JSON.stringify(this.state.verify))
|
|
// 表单提交时检查输入值是否正确
|
return new Promise((resolve, reject) => {
|
if (verify.default === 'false' && verify.scripts.length === 0) {
|
notification.warning({
|
top: 92,
|
message: '不执行默认sql时,必须设置自定义脚本!',
|
duration: 5
|
})
|
return
|
}
|
|
let _loading = false
|
if (this.customForm && this.customForm.state.editItem) {
|
_loading = true
|
} else if (this.uniqueForm && this.uniqueForm.state.editItem) {
|
_loading = true
|
} else if (this.orderForm && this.orderForm.state.editItem) {
|
_loading = true
|
} else if (this.scriptsForm && this.scriptsForm.state.editItem) {
|
_loading = true
|
} else if (this.contrastForm && this.contrastForm.state.editItem) {
|
_loading = true
|
}
|
|
if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql')) {
|
_loading = true
|
} else if (this.customForm && this.customForm.props.form.getFieldValue('sql')) {
|
_loading = true
|
}
|
|
if (_loading) {
|
confirm({
|
content: `存在未保存项,确定提交吗?`,
|
onOk() {
|
resolve(verify)
|
},
|
onCancel() {}
|
})
|
} else {
|
resolve(verify)
|
}
|
})
|
}
|
|
/**
|
* @description 组件销毁,清除state更新
|
*/
|
componentWillUnmount () {
|
this.setState = () => {
|
return
|
}
|
}
|
|
render() {
|
const { card } = this.props
|
const { verify, fields, uniqueColumns, onceUniqueColumns, columnsFields, contrastColumns, customColumns, orderColumns, scriptsColumns, orderModular, orderModularDetail, voucher, voucherDetail } = this.state
|
const formItemLayout = {
|
labelCol: {
|
xs: { span: 24 },
|
sm: { span: 8 }
|
},
|
wrapperCol: {
|
xs: { span: 24 },
|
sm: { span: 16 }
|
}
|
}
|
|
return (
|
<div id="verify-card-box-tab">
|
{card.intertype === 'system' ? <Tabs defaultActiveKey="1" className="verify-card-box">
|
<TabPane tab="基础验证" key="1">
|
<Form {...formItemLayout}>
|
<Row gutter={24}>
|
{this.props.card.sqlType !== 'custom' ? <Col span={8}>
|
<Form.Item label={
|
<Tooltip placement="bottomLeft" title={'默认sql执行顺序为自定义脚本之前'}>
|
<Icon type="question-circle" style={{color: '#c49f47', marginRight: '5px'}} />
|
默认sql
|
</Tooltip>
|
}>
|
<Radio.Group value={verify.default} onChange={(e) => {this.onOptionChange(e, 'default')}}>
|
<Radio value="true">执行</Radio>
|
<Radio value="false">不执行</Radio>
|
</Radio.Group>
|
</Form.Item>
|
</Col> : null}
|
<Col span={8}>
|
<Form.Item label={'账期验证'}>
|
<Radio.Group value={verify.accountdate} onChange={(e) => {this.onOptionChange(e, 'accountdate')}}>
|
<Radio value="true">开启</Radio>
|
<Radio value="false">不开启</Radio>
|
</Radio.Group>
|
</Form.Item>
|
</Col>
|
<Col span={8}>
|
<Form.Item label={'失效验证'}>
|
<Radio.Group value={verify.invalid} onChange={(e) => {this.onOptionChange(e, 'invalid')}}>
|
<Radio value="true">开启</Radio>
|
<Radio value="false">不开启</Radio>
|
</Radio.Group>
|
</Form.Item>
|
</Col>
|
</Row>
|
</Form>
|
</TabPane>
|
<TabPane tab={
|
<span>
|
比较验证
|
{verify.contrasts.length ? <span className="count-tip">{verify.contrasts.length}</span> : null}
|
</span>
|
} key="2x">
|
<ContrastForm
|
dict={this.props.dict}
|
contrastChange={this.contrastChange}
|
wrappedComponentRef={(inst) => this.contrastForm = inst}
|
/>
|
<Table
|
bordered
|
rowKey="uuid"
|
className="custom-table"
|
dataSource={verify.contrasts}
|
columns={contrastColumns}
|
pagination={false}
|
/>
|
</TabPane>
|
<TabPane tab={
|
<span>
|
自定义验证
|
{verify.customverifys.length ? <span className="count-tip">{verify.customverifys.length}</span> : null}
|
</span>
|
} key="3">
|
<CustomForm
|
dict={this.props.dict}
|
btn={this.props.card}
|
initsql={this.state.initsql}
|
usefulfields={this.state.usefulfields}
|
customChange={this.customChange}
|
wrappedComponentRef={(inst) => this.customForm = inst}
|
/>
|
<Table
|
bordered
|
rowKey="uuid"
|
className="custom-table"
|
dataSource={verify.customverifys}
|
columns={customColumns}
|
pagination={false}
|
/>
|
</TabPane>
|
<TabPane tab={
|
<span>
|
单号生成
|
{verify.billcodes.length ? <span className="count-tip">{verify.billcodes.length}</span> : null}
|
</span>
|
} key="4">
|
<BillcodeForm
|
fields={fields}
|
btn={this.props.card}
|
billcodes={verify.billcodes}
|
columns={this.props.columns}
|
dict={this.props.dict}
|
modular={orderModular}
|
modularDetail={orderModularDetail}
|
orderChange={this.orderChange}
|
wrappedComponentRef={(inst) => this.orderForm = inst}
|
/>
|
<Table
|
bordered
|
rowKey="uuid"
|
className="custom-table"
|
dataSource={verify.billcodes}
|
columns={orderColumns}
|
pagination={false}
|
/>
|
</TabPane>
|
<TabPane tab={
|
<span>
|
{card.Ot !== 'requiredOnce' ? '唯一性验证' : '同类数据验证'}
|
{verify.uniques.length ? <span className="count-tip">{verify.uniques.length}</span> : null}
|
</span>
|
} key="2">
|
<UniqueForm
|
btn={card}
|
fields={card.Ot !== 'requiredOnce' ? fields : columnsFields}
|
dict={this.props.dict}
|
uniqueChange={this.uniqueChange}
|
wrappedComponentRef={(inst) => this.uniqueForm = inst}
|
/>
|
<Table
|
bordered
|
rowKey="uuid"
|
className="custom-table"
|
dataSource={verify.uniques}
|
columns={card.Ot !== 'requiredOnce' ? uniqueColumns : onceUniqueColumns}
|
pagination={false}
|
/>
|
</TabPane>
|
<TabPane tab={
|
<span>
|
创建凭证
|
{verify.voucher && verify.voucher.enabled ? <span className="count-tip">1</span> : null}
|
</span>
|
} key="5">
|
<VoucherForm
|
dict={this.props.dict}
|
voucher={voucher}
|
columns={this.props.columns}
|
voucherobj={verify.voucher}
|
voucherDetail={voucherDetail}
|
voucherChange={this.voucherChange}
|
wrappedComponentRef={(inst) => this.voucherForm = inst}
|
/>
|
</TabPane>
|
<TabPane tab={
|
<span>
|
自定义脚本
|
{verify.scripts.length ? <span className="count-tip">{verify.scripts.length}</span> : null}
|
</span>
|
} key="6">
|
<CustomScript
|
usefulfields={this.state.usefulfields}
|
initsql={this.state.initsql}
|
dict={this.props.dict}
|
btn={this.props.card}
|
customScripts={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>
|
<TabPane tab="信息提示" key="7">
|
<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> : null}
|
{card.intertype !== 'system' ? <Tabs defaultActiveKey="7" className="verify-card-box">
|
<TabPane tab="信息提示" key="7">
|
<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> : null}
|
</div>
|
)
|
}
|
}
|
|
export default Form.create()(VerifyCard)
|