import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { Form, Row, Col, Button, notification, Modal, Tooltip, Select, Switch } from 'antd'
|
import { QuestionCircleOutlined } from '@ant-design/icons'
|
|
import Api from '@/api'
|
import { checkSQL } from '@/utils/utils-custom.js'
|
import CodeMirror from '@/templates/zshare/codemirror'
|
// import './index.scss'
|
|
class CustomForm extends Component {
|
static propTpyes = {
|
type: PropTypes.any,
|
systemScripts: PropTypes.array,
|
customScripts: PropTypes.array,
|
scriptsChange: PropTypes.func
|
}
|
|
state = {
|
editItem: null,
|
loading: false,
|
skip: false
|
}
|
|
edit = (record) => {
|
this.setState({
|
editItem: record
|
})
|
|
this.props.form.setFieldsValue({
|
sql: record.sql
|
})
|
}
|
|
handleConfirm = () => {
|
const { type } = this.props
|
const { editItem, skip } = this.state
|
// 表单提交时检查输入值是否正确
|
this.props.form.validateFieldsAndScroll((err, values) => {
|
if (type === 'fullscreen' && err) {
|
notification.warning({
|
top: 92,
|
message: '请输入sql!',
|
duration: 5
|
})
|
return
|
}
|
if (!err) {
|
if (/^[\s\n]+$/.test(values.sql)) {
|
notification.warning({
|
top: 92,
|
message: '请输入sql!',
|
duration: 5
|
})
|
return
|
}
|
values.uuid = editItem ? editItem.uuid : ''
|
|
if (type === 'fullscreen' && editItem) {
|
values.status = editItem.status || 'true'
|
}
|
|
let pass = checkSQL(values.sql, 'customscript')
|
|
if (!pass) return
|
|
let sql = `
|
/* 系统字段 */
|
|
Declare @UserName nvarchar(50), @FullName nvarchar(50), @RoleID nvarchar(512), @mk_departmentcode nvarchar(512), @mk_organization nvarchar(512), @mk_user_type nvarchar(20), @mk_nation nvarchar(50), @mk_province nvarchar(50), @mk_city nvarchar(50), @mk_district nvarchar(50), @mk_address nvarchar(100), @ErrorCode nvarchar(50), @retmsg nvarchar(4000), @account_id nvarchar(50), @account_year_id nvarchar(50), @account_code nvarchar(50), @account_year_code nvarchar(50), @bid nvarchar(50), @tbid nvarchar(50)
|
|
Select @UserName='', @FullName='', @RoleID='', @mk_departmentcode='', @mk_organization='', @mk_user_type='', @mk_nation='', @mk_province='', @mk_city='', @mk_district='', @mk_address='', @ErrorCode='', @retmsg='', @account_id='', @account_year_id='', @account_code='', @account_year_code='', @bid=''
|
|
/* 发票主表字段 */
|
|
Declare @invoice_type Nvarchar(50), @from_to_name Nvarchar(50), @from_to_tax_no Nvarchar(50), @from_to_addr Nvarchar(100), @from_to_tel Nvarchar(50), @from_to_bank_name Nvarchar(50), @from_to_account_no Nvarchar(50), @from_to_mob Nvarchar(50), @from_to_email Nvarchar(50), @from_to_code Nvarchar(50), @orgname Nvarchar(50), @tax_no Nvarchar(50), @addr Nvarchar(100), @tel Nvarchar(50), @bank_name Nvarchar(50), @account_no Nvarchar(50), @remark Nvarchar(512), @payee Nvarchar(50), @reviewer Nvarchar(50), @drawer Nvarchar(50), @io Nvarchar(50), @orgcode Nvarchar(50), @total_net_amount Decimal(18,2), @total_tax Decimal(18,2), @total_amount Decimal(18,2)
|
|
Select @invoice_type='', @from_to_name='', @from_to_tax_no='', @from_to_addr='', @from_to_tel='', @from_to_bank_name='', @from_to_account_no='', @from_to_mob='', @from_to_email='', @from_to_code='', @orgname='', @tax_no='', @addr='', @tel='', @bank_name='', @account_no='', @remark='', @payee='', @reviewer='', @drawer='', @io='', @orgcode='', @total_net_amount=0, @total_tax=0, @total_amount=0
|
|
/* 发票明细临时表 */
|
Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), invoice_lp Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50))
|
|
Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, invoice_lp, jskey, data_type)
|
|
Select '', '', '', '', 0, 0, 0, '', '', 0, 0, '', '', ''
|
|
`
|
|
this.props.customScripts.forEach(item => {
|
let _item = values.uuid === item.uuid ? values : item
|
|
if (_item.status === 'false') return
|
|
sql += `
|
${_item.sql}
|
`
|
})
|
|
if (!values.uuid) {
|
sql += `
|
${values.sql}
|
`
|
}
|
|
sql += `
|
aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg
|
`
|
|
// 数据权限
|
sql = sql.replace(/@\$|\$@/ig, '')
|
sql = sql.replace(/@datam@/ig, `''`)
|
sql = sql.replace(/@typename@/ig, `'debug'`)
|
|
if (skip) {
|
this.setState({
|
skip: false,
|
editItem: null
|
}, () => {
|
this.props.scriptsChange(values)
|
})
|
this.props.form.setFieldsValue({
|
sql: ' '
|
})
|
} else {
|
this.setState({loading: true})
|
Api.sDebug(sql).then(res => {
|
if (res.status || res.ErrCode === '-2') {
|
this.setState({
|
loading: false,
|
editItem: null
|
}, () => {
|
this.props.scriptsChange(values)
|
})
|
this.props.form.setFieldsValue({
|
sql: ' '
|
})
|
} else {
|
this.setState({loading: false})
|
|
Modal.error({
|
title: res.message
|
})
|
}
|
})
|
}
|
}
|
})
|
}
|
|
handleCancel = () => {
|
this.setState({
|
editItem: null
|
})
|
|
this.props.form.setFieldsValue({
|
sql: ' '
|
})
|
}
|
|
selectScript = (value, option) => {
|
if (!value || !option) return
|
|
let _sql = this.props.form.getFieldValue('sql')
|
if (/^\s+$/.test(_sql)) {
|
_sql = ''
|
}
|
if (_sql) {
|
_sql = _sql + `
|
|
`
|
}
|
|
_sql = _sql.replace(/\s{6}$/, '')
|
_sql = _sql + `/*${option.props.children}*/
|
`
|
_sql = _sql.replace(/\s{4}$/, '')
|
_sql = _sql + value
|
|
this.props.form.setFieldsValue({
|
sql: _sql
|
})
|
}
|
|
render() {
|
const { systemScripts, type } = this.props
|
const { getFieldDecorator } = this.props.form
|
const { editItem, skip } = this.state
|
const formItemLayout = {
|
labelCol: {
|
xs: { span: 24 },
|
sm: { span: 8 }
|
},
|
wrapperCol: {
|
xs: { span: 24 },
|
sm: { span: 16 }
|
}
|
}
|
|
return (
|
<Form {...formItemLayout} className="verify-form">
|
<Row gutter={24}>
|
{!type ? <Col span={8}>
|
<Form.Item label={'报错字段'} style={{margin: 0, whiteSpace: 'nowrap'}}>
|
errorcode(增加后缀NT表示数据不回滚,如ENT、NNT、FNT、NMNT、CNT、-2NT), retmsg
|
</Form.Item>
|
</Col> : null}
|
{!type ? <Col span={24} className="sqlfield">
|
<Form.Item label={'可用字段'}>
|
<Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="公共值,请按照@xxx@格式使用。"><span style={{color: '#1890ff'}}>BID, ID, LoginUID, SessionUid, UserID, Appkey, time_id, typename, datam</span></Tooltip>,
|
<Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="系统变量,系统会定义变量并赋值。"><span style={{color: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address</span></Tooltip>,
|
<Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="账套字段,系统会定义变量并赋值。"><span style={{color: '#13c2c2'}}>account_id, account_year_id, account_code, account_year_code </span></Tooltip>,
|
<Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="主表字段,系统会定义变量并赋值。"><span style={{color: '#8E44AD'}}>invoice_type, from_to_name, from_to_tax_no, from_to_addr, from_to_tel, from_to_bank_name, from_to_account_no, from_to_mob, from_to_email, from_to_code, orgname, tax_no, addr, tel, bank_name, account_no, remark, payee, reviewer, drawer</span></Tooltip>,
|
<Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="子表字段(商品明细),系统会定义变量并赋值。">productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount</Tooltip>
|
</Form.Item>
|
</Col> : null}
|
{/* {!_type ? <Col span={8} style={{whiteSpace: 'nowrap'}}>
|
<Form.Item style={{marginBottom: 0}} label={
|
<Tooltip placement="bottomLeft" title="自定义脚本与默认sql位置关系。">
|
<QuestionCircleOutlined className="mk-form-tip" />
|
执行位置
|
</Tooltip>
|
}>
|
{getFieldDecorator('position', {
|
initialValue: 'front'
|
})(
|
<Radio.Group>
|
<Radio value="init">初始化</Radio>
|
<Radio value="front">sql前</Radio>
|
<Radio value="back">sql后</Radio>
|
</Radio.Group>
|
)}
|
</Form.Item>
|
</Col> : null} */}
|
{!type ? <Col span={8}>
|
<Form.Item label={'快捷添加'} style={{marginBottom: 0}}>
|
<Select
|
showSearch
|
dropdownMatchSelectWidth={false}
|
filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
|
onSelect={this.selectScript}
|
>
|
{systemScripts.map((option, i) =>
|
<Select.Option key={i} value={option.value}>{option.name}</Select.Option>
|
)}
|
</Select>
|
</Form.Item>
|
</Col> : null}
|
<Col span={5} className="add" style={{whiteSpace: 'nowrap'}}>
|
<Button onClick={this.handleConfirm} loading={this.state.loading} className="mk-green" style={{marginBottom: 15, marginLeft: 30}}>
|
{type === 'fullscreen' && !editItem ? '添加' : '保存'}
|
</Button>
|
<Button onClick={this.handleCancel} style={{marginBottom: 15, marginLeft: 10}}>
|
取消
|
</Button>
|
</Col>
|
<Col span={3} className="forced" style={{paddingTop: '12px', fontSize: '12px', whiteSpace: 'nowrap'}}>
|
强制保存:
|
<Switch checked={skip} size="small" onChange={() => this.setState({skip: !skip})}/>
|
</Col>
|
<Col span={24} className="sql">
|
<Form.Item label={
|
<Tooltip placement="bottomLeft" title="数据权限替换符 $@ -> /* 或 \'\'、 @$ -> */ 或 \'\'">
|
<QuestionCircleOutlined className="mk-form-tip" />
|
sql
|
</Tooltip>
|
}>
|
{getFieldDecorator('sql', {
|
initialValue: '',
|
rules: [
|
{
|
required: true,
|
message: '请输入sql!'
|
}
|
]
|
})(<CodeMirror />)}
|
</Form.Item>
|
</Col>
|
</Row>
|
</Form>
|
)
|
}
|
}
|
|
export default Form.create()(CustomForm)
|