From 0c9972b68aaee5ce0d536bb418ebcd2887012a28 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期一, 29 六月 2020 14:35:47 +0800 Subject: [PATCH] 2020-06-29 --- src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx | 207 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 195 insertions(+), 12 deletions(-) diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx index 5cb21ad..6621ff3 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx @@ -1,22 +1,28 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -import { Form, Tabs, Row, Col, Button, Table, Popconfirm, Icon, notification, Modal, message, InputNumber } from 'antd' +import { fromJS } from 'immutable' +import { Form, Tabs, Row, Col, Button, Table, Popconfirm, Icon, notification, Modal, message, InputNumber, Radio, Input } from 'antd' +import moment from 'moment' +import Api from '@/api' import Utils from '@/utils/utils.js' import ColumnForm from './columnform' import './index.scss' const { TabPane } = Tabs +const { TextArea } = Input class VerifyCard extends Component { static propTpyes = { dict: PropTypes.object, // 瀛楀吀椤� + config: PropTypes.object, card: PropTypes.object, } state = { verify: {}, + defaultscript: '', // 鑷畾涔夎剼鏈� excelColumns: [ { title: this.props.dict['model.form.field'], @@ -65,21 +71,84 @@ } UNSAFE_componentWillMount() { - let _verify = this.props.card.verify || {} + const { config, card } = this.props + let _verify = {} - let _columns = _verify.columns || [] - _columns = _columns.map(col => { + if (card.verify) { + _verify = fromJS(card.verify).toJS() + } + + _verify.enable = _verify.enable || 'false' + _verify.columns = _verify.columns || [] + _verify.columns = _verify.columns.map(col => { col.Width = col.Width || 20 - return col }) + if (card.intertype !== 'inner' || card.innerFunc) { + _verify.enable = 'false' + } + + let defaultscript = '' + if (!_verify.script && card.intertype === 'inner' && !card.innerFunc) { + let search = this.formatSearch(config.search) + search = Utils.joinMainSearchkey(search) + search = search ? 'where ' + search : '' + + defaultscript = `update ${config.setting.tableName || ''} set idefine5= idefine5+1 ,modifydate=getdate(),cdefine5='宸插鍑�',modifyuserid=@userid@ ${search}` + } + + this.setState({ - verify: { - ..._verify, - columns: _columns, - } + verify: _verify, + defaultscript: defaultscript }) + } + + /** + * @description 鑾峰彇鍏ㄩ儴鎼滅储鏉′欢 + * @param {Array} searches 鎼滅储鏉′欢鏁扮粍 + */ + formatSearch (searches) { + if (!searches || searches.length === 0) return [] + + let newsearches = [] + searches.forEach(search => { + let item = { + key: search.field, + match: search.match, + type: search.type, + label: search.label, + value: `@${search.field}@`, + required: search.required === 'true' + } + if (item.type === 'group') { + let copy = fromJS(item).toJS() + copy.key = search.datefield + + item.value = `@${search.field}@` + item.match = '=' + + copy.type = 'daterange' + copy.match = 'between' + copy.value = [`@${search.datefield}@`, `@${search.datefield}1@`] + + if (search.transfer === 'true') { + newsearches.push(item) + } + newsearches.push(copy) + return + } else if (item.type === 'dateweek') { + item.value = [`@${search.field}@`, `@${search.field}1@`] + } else if (item.type === 'daterange') { + item.value = [`@${search.field}@`, `@${search.field}1@`] + } else if (item.type === 'multiselect') { + item.value = [`@${search.field}@`] + } + newsearches.push(item) + }) + + return newsearches } columnChange = (values) => { @@ -198,7 +267,7 @@ } handleConfirm = () => { - let verify = JSON.parse(JSON.stringify(this.state.verify)) + let verify = fromJS(this.state.verify).toJS() // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� return new Promise((resolve, reject) => { @@ -215,12 +284,99 @@ return } - resolve(verify) + if (verify.enable === 'true') { + this.props.form.validateFieldsAndScroll((err, values) => { + if (!err) { + values.sql = values.sql || '' + + let _quot = values.sql.match(/'{1}/g) + let _lparen = values.sql.match(/\({1}/g) + let _rparen = values.sql.match(/\){1}/g) + + _quot = _quot ? _quot.length : 0 + _lparen = _lparen ? _lparen.length : 0 + _rparen = _rparen ? _rparen.length : 0 + + if (_quot % 2 !== 0) { + notification.warning({ + top: 92, + message: 'sql涓璡'蹇呴』鎴愬鍑虹幇', + duration: 5 + }) + return + } else if (_lparen !== _rparen) { + notification.warning({ + top: 92, + message: 'sql涓�()蹇呴』鎴愬鍑虹幇', + duration: 5 + }) + return + } else if (/--/ig.test(values.sql)) { + notification.warning({ + top: 92, + message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇瀛楃 -- 锛屾敞閲婅鐢� /*鍐呭*/', + duration: 5 + }) + return + } + + let error = Utils.verifySql(values.sql, 'customscript') + + if (error) { + notification.warning({ + top: 92, + message: 'sql涓笉鍙娇鐢�' + error, + duration: 5 + }) + return + } + + let param = { + func: 's_debug_sql', + LText: values.sql + } + + param.LText = param.LText.replace(/@\$|\$@/ig, '') + + param.LText = Utils.formatOptions(param.LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + + Api.getLocalConfig(param).then(res => { + if (res.status) { + resolve({...verify, script: values.sql}) + } else { + Modal.error({ + title: res.message + }) + } + }) + } else { + notification.warning({ + top: 92, + message: '鑷畾涔夎剼鏈笉鍙负绌猴紒', + duration: 5 + }) + } + }) + } else { + resolve(verify) + } + }) + } + + changeEnable = (e) => { + const { verify } = this.state + + this.setState({ + verify: {...verify, enable: e.target.value} }) } render() { - const { verify, excelColumns } = this.state + const { card } = this.props + const { verify, excelColumns, defaultscript } = this.state + const { getFieldDecorator } = this.props.form const formItemLayout = { labelCol: { xs: { span: 24 }, @@ -250,6 +406,33 @@ pagination={false} /> </TabPane> + {card.intertype === 'inner' && !card.innerFunc ? <TabPane tab="鑷畾涔夎剼鏈�" key="6"> + <Form {...formItemLayout} className="verify-form"> + <Row gutter={24}> + <Col span={8}> + <Form.Item style={{marginBottom: 10}} label={'鍚敤'}> + <Radio.Group defaultValue={verify.enable || 'false'} onChange={this.changeEnable}> + <Radio value="true">鏄�</Radio> + <Radio value="false">鍚�</Radio> + </Radio.Group> + </Form.Item> + </Col> + <Col span={24} className="sql"> + <Form.Item label={'sql'}> + {getFieldDecorator('sql', { + initialValue: verify.script || defaultscript, + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + 'sql!' + } + ] + })(<TextArea rows={15} />)} + </Form.Item> + </Col> + </Row> + </Form> + </TabPane> : null} <TabPane tab="淇℃伅鎻愮ず" key="7"> <Form {...formItemLayout}> <Row gutter={24}> -- Gitblit v1.8.0