From 9a1416e0b5cdb40f49b3c2061b04b35551d77e99 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 19 九月 2023 18:14:21 +0800 Subject: [PATCH] 2023-09-19 --- src/menu/datasource/verifycard/customscript/index.jsx | 250 +++++++++++++++++++++++++++++++++++--------------- 1 files changed, 175 insertions(+), 75 deletions(-) diff --git a/src/menu/datasource/verifycard/customscript/index.jsx b/src/menu/datasource/verifycard/customscript/index.jsx index 9bd1aaa..aee86c2 100644 --- a/src/menu/datasource/verifycard/customscript/index.jsx +++ b/src/menu/datasource/verifycard/customscript/index.jsx @@ -1,7 +1,10 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Form, Row, Col, Button, notification, Select, Tooltip } from 'antd' +import { Form, Row, Col, Button, notification, Select, Tooltip, Modal, Switch, Radio } from 'antd' +import { QuestionCircleOutlined } from '@ant-design/icons' +import Toast from 'antd-mobile/es/components/toast' +import Dialog from 'antd-mobile/es/components/dialog' import Utils from '@/utils/utils.js' import CodeMirror from '@/templates/zshare/codemirror' @@ -10,15 +13,18 @@ class CustomForm extends Component { static propTpyes = { + type: PropTypes.string, // 缁勪欢绫诲瀷 defaultsql: PropTypes.string, // 榛樿sql setting: PropTypes.object, // 璁剧疆 searches: PropTypes.array, // 鎼滅储鏉′欢 systemScripts: PropTypes.array, // 绯荤粺鑴氭湰 scriptSubmit: PropTypes.func, // 鑴氭湰楠岃瘉鍚庢彁浜� - scriptsChange: PropTypes.func // 鑴氭湰楠岃瘉 + scriptsChange: PropTypes.func, + addProcess: PropTypes.func } state = { + skip: false, editItem: null, loading: false, usefulFields: '' @@ -27,21 +33,35 @@ UNSAFE_componentWillMount() { const { searches } = this.props + this.getSearchField(searches) + } + + UNSAFE_componentWillReceiveProps (nextProps) { + if (!is(fromJS(this.props.searches), fromJS(nextProps.searches))) { + this.getSearchField(nextProps.searches) + } + } + + getSearchField = (searches) => { let _usefulFields = [] searches.forEach(item => { - if (!item.field) return + if (['dateweek', 'datemonth'].includes(item.type)) { + _usefulFields.push(item.key) + _usefulFields.push(item.key + '1') + } else if (item.type === 'daterange') { + let _skey = item.key + let _ekey = item.key + '1' - if (item.type === 'group') { - _usefulFields.push(item.field) - _usefulFields.push(item.datefield) - _usefulFields.push(item.datefield + '1') - } else if (['dateweek', 'datemonth', 'daterange'].includes(item.type)) { - _usefulFields.push(item.field) - _usefulFields.push(item.field + '1') - } else if (item.type === 'date' && _usefulFields.includes(item.field)) { - _usefulFields.push(item.field + '1') + if (/,/.test(item.key)) { + _skey = item.key.split(',')[0] + _ekey = item.key.split(',')[1] + } + _usefulFields.push(_skey) + _usefulFields.push(_ekey) + } else if (item.type === 'date' && _usefulFields.includes(item.key)) { + _usefulFields.push(item.key + '1') } else { - _usefulFields.push(item.field) + _usefulFields.push(item.key) } }) @@ -50,40 +70,14 @@ }) } - UNSAFE_componentWillReceiveProps (nextProps) { - if (!is(fromJS(this.props.searches), fromJS(nextProps.searches))) { - - let _usefulFields = [] - nextProps.searches.forEach(item => { - if (!item.field) return - - if (item.type === 'group') { - _usefulFields.push(item.field) - _usefulFields.push(item.datefield) - _usefulFields.push(item.datefield + '1') - } else if (['dateweek', 'datemonth', 'daterange'].includes(item.type)) { - _usefulFields.push(item.field) - _usefulFields.push(item.field + '1') - } else if (item.type === 'date' && _usefulFields.includes(item.field)) { - _usefulFields.push(item.field + '1') - } else { - _usefulFields.push(item.field) - } - }) - - this.setState({ - usefulFields: _usefulFields.join(', ') - }) - } - } - edit = (record) => { this.setState({ editItem: record }) this.props.form.setFieldsValue({ - sql: record.sql + sql: record.sql, + position: record.position || 'front' }) } @@ -92,14 +86,25 @@ editItem: null }) this.props.form.setFieldsValue({ - sql: ' ' + sql: ' ', + position: 'front' }) } handleConfirm = () => { + const { skip } = this.state // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� this.props.form.validateFieldsAndScroll((err, values) => { if (!err) { + if (/^[\s\n]+$/.test(values.sql)) { + notification.warning({ + top: 92, + message: '璇疯緭鍏ql!', + duration: 5 + }) + return + } + values.uuid = this.state.editItem ? this.state.editItem.uuid : '' let _quot = values.sql.match(/'{1}/g) @@ -131,6 +136,13 @@ 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') @@ -144,24 +156,42 @@ return } - this.setState({loading: true}) - this.props.scriptsChange(values).then(() => { + if (skip) { this.setState({ editItem: null, - loading: false + skip: false }) - MKEmitter.emit('editLineId', values.uuid) + if (values.uuid) { + MKEmitter.emit('editLineId', values.uuid) + } this.props.form.setFieldsValue({ sql: ' ' }) this.props.scriptSubmit(values) - }, () => { - this.setState({ - loading: false + } else { + this.setState({loading: true}) + this.props.scriptsChange(values).then(() => { + this.setState({ + editItem: null, + loading: false + }) + + if (values.uuid) { + MKEmitter.emit('editLineId', values.uuid) + } + + this.props.form.setFieldsValue({ + sql: ' ' + }) + this.props.scriptSubmit(values) + }, () => { + this.setState({ + loading: false + }) }) - }) + } } }) } @@ -178,6 +208,9 @@ if (value === 'defaultsql') { value = this.props.defaultsql + } else if (value === 'flowsql') { + value = `/* select a.*,w.remark as remark_w,w.statusname as statusname_w,w.status as status_w,w.works_flow_param from (鏁版嵁婧�) a inner join (select * from s_my_works_flow where works_flow_code=@works_flow_code@ and status=0 and deleted=0) w on a.id=w.works_flow_id */` + this.props.addProcess() } _sql = _sql.replace(/\s{6}$/, '') @@ -191,52 +224,115 @@ }) } - render() { - const { systemScripts, setting } = this.props - const { getFieldDecorator } = this.props.form - const { usefulFields } = this.state - const formItemLayout = { - labelCol: { - xs: { span: 24 }, - sm: { span: 8 } - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 16 } + showError = (type) => { + let appType = sessionStorage.getItem('appType') + + if (type === 'S') { + if (appType === 'mob') { + Toast.show({ icon: 'success', content: '鎵ц鎴愬姛锛�', duration: 3000 }) + } else { + notification.success({ + top: 92, + message: '鎵ц鎴愬姛锛�', + duration: 2 + }) + } + + } else if (type === 'Y') { + if (appType === 'mob') { + Dialog.alert({content: '鎵ц鎴愬姛锛�', confirmText: '鐭ラ亾浜�'}) + } else { + Modal.success({ + title: '鎵ц鎴愬姛锛�' + }) + } + } else if (type === 'N') { + if (appType === 'mob') { + Dialog.alert({content: '鎵ц澶辫触锛�', confirmText: '鐭ラ亾浜�'}) + } else { + Modal.error({ + title: '鎵ц澶辫触锛�' + }) + } + } else { + if (appType === 'mob') { + Toast.show({ icon: 'fail', content: '鎵ц澶辫触锛�', duration: 3000 }) + } else { + notification.error({ + top: 92, + message: '鎵ц澶辫触锛�', + duration: 10 + }) } } + } + + render() { + const { systemScripts, setting, type } = this.props + const { getFieldDecorator } = this.props.form + const { usefulFields, skip } = this.state let urlFields = window.GLOB.urlFields ? window.GLOB.urlFields.join(', ') : '' return ( - <Form {...formItemLayout} className="modal-menu-setting-script"> + <Form className="modal-source-setting-script"> <Row gutter={24}> - {setting.tableName ? <Col span={8}> - <Form.Item label={'琛ㄥ悕'} style={{whiteSpace: 'nowrap', margin: 0}}> + {setting.tableName ? <Col span={6}> + <Form.Item label="琛ㄥ悕" style={{whiteSpace: 'nowrap', margin: 0}}> {setting.tableName} </Form.Item> </Col> : null} - <Col span={8}> - <Form.Item label={'鎶ラ敊瀛楁'} style={{margin: 0}}> + <Col span={18}> + <Form.Item label="鎶ラ敊瀛楁" style={{margin: 0}}> ErrorCode, retmsg + <span style={{marginLeft: 25}}> + 鎴愬姛锛� + <span className="error-val" onClick={() => {this.showError('S')}}> S </span>銆� + <span className="error-val" onClick={() => {this.showError('Y')}}> Y </span>銆� + -1锛堜笉鎻愮ず锛� + </span> + <span style={{marginLeft: 20}}> + 澶辫触锛� + <span className="error-val" onClick={() => {this.showError('N')}}> N </span>銆� + -2锛堜笉鎻愮ず锛夈�� + <span className="error-val" onClick={() => {this.showError('')}}> 鍏朵粬 </span> + </span> </Form.Item> </Col> - <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</span></Tooltip>, + <Col span={24}> + <Form.Item label="鍙敤瀛楁" className="field-able"> + <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'鍏叡鍊硷紝璇锋寜鐓xxx@鏍煎紡浣跨敤銆�'}><span style={{color: '#1890ff'}}>BID, LoginUID, SessionUid, UserID, Appkey, time_id, typename</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={'鎺掑簭銆佸垎椤典互鍙婃悳绱㈡潯浠跺彉閲忥紝璇锋寜鐓xxx@鏍煎紡浣跨敤銆�'}>orderBy, pageSize, pageIndex{usefulFields ? ', ' + usefulFields : ''}</Tooltip> + <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'鎺掑簭銆佸垎椤典互鍙婃悳绱㈡潯浠跺彉閲忥紝璇锋寜鐓xxx@鏍煎紡浣跨敤銆備娇鐢ˊpageSize@鎴朄orderBy@浠h〃鑷畾涔夊垎椤碉紝鎬绘暟璇蜂互mk_total杩斿洖銆�'}>orderBy, pageSize, pageIndex{usefulFields ? ', ' + usefulFields : ''}{type === 'calendar' ? ', mk_year' : ''}</Tooltip> <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'url鍙橀噺锛岃鎸夌収@xxx@鏍煎紡浣跨敤銆�'}>{urlFields ? ', ' : ''}<span style={{color: '#13c2c2'}}>{urlFields}</span></Tooltip> </Form.Item> </Col> - <Col span={10} style={{width: '43%'}}> - <Form.Item label={'蹇嵎娣诲姞'} labelCol={{xs: { span: 24 }, sm: { span: 6 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 18 }} } style={{marginBottom: 0}}> + <Col span={8} style={{whiteSpace: 'nowrap'}}> + <Form.Item style={{marginBottom: 0}} label={ + <Tooltip placement="bottomLeft" title={'鑷畾涔夎剼鏈笌鏁版嵁婧愪綅缃叧绯汇��'}> + <QuestionCircleOutlined className="mk-form-tip" /> + 鎵ц浣嶇疆 + </Tooltip> + }> + {getFieldDecorator('position', { + initialValue: 'front' + })( + <Radio.Group> + <Radio value="front">鍓嶇疆</Radio> + <Radio value="back">鍚庣疆</Radio> + </Radio.Group> + )} + </Form.Item> + </Col> + <Col span={8}> + <Form.Item label="蹇嵎娣诲姞" labelCol={{xs: { span: 24 }, sm: { span: 6 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 18 }} } style={{marginBottom: 0}}> <Select showSearch filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} onSelect={this.selectScript} > <Select.Option style={{whiteSpace: 'normal'}} key="default" value="defaultsql">榛樿sql</Select.Option> + {window.GLOB.process ? <Select.Option style={{whiteSpace: 'normal'}} key="default" value="flowsql">榛樿sql锛堝伐浣滄祦锛�</Select.Option> : null} <Select.Option key="debugger" value={`z_debug: select @ErrorCode='E',@retmsg='娴嬭瘯鏂偣' goto aaa`}> 娴嬭瘯鏂偣 </Select.Option> @@ -246,13 +342,17 @@ </Select> </Form.Item> </Col> - <Col span={6} className="add"> + <Col span={5} style={{whiteSpace: 'nowrap'}}> <Button onClick={this.handleConfirm} loading={this.state.loading} className="mk-green" style={{marginTop: 5, marginBottom: 15, marginLeft: 30}}> 淇濆瓨 </Button> <Button onClick={this.handleCancel} style={{marginTop: 5, marginBottom: 15, marginLeft: 10}}> 鍙栨秷 </Button> + </Col> + <Col span={3} style={{paddingTop: '15px', fontSize: '12px', whiteSpace: 'nowrap'}}> + 寮哄埗淇濆瓨锛� + <Switch checked={skip} size="small" onChange={() => this.setState({skip: !skip})}/> </Col> <Col span={24} className="sql"> <Form.Item label="sql"> @@ -264,7 +364,7 @@ message: '璇疯緭鍏ql!' } ] - })(<CodeMirror />)} + })(<CodeMirror/>)} </Form.Item> </Col> </Row> -- Gitblit v1.8.0