From a02fc6a77fa1b35c6516b2d37108d80e260c6c85 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 07 十一月 2024 22:05:08 +0800
Subject: [PATCH] 2024-11-07

---
 src/menu/datasource/verifycard/customscript/index.jsx |  280 ++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 162 insertions(+), 118 deletions(-)

diff --git a/src/menu/datasource/verifycard/customscript/index.jsx b/src/menu/datasource/verifycard/customscript/index.jsx
index 9bd1aaa..5b4c682 100644
--- a/src/menu/datasource/verifycard/customscript/index.jsx
+++ b/src/menu/datasource/verifycard/customscript/index.jsx
@@ -1,24 +1,30 @@
 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 { checkSQL, getSearchFields } from '@/utils/utils-custom.js'
 import CodeMirror from '@/templates/zshare/codemirror'
 import MKEmitter from '@/utils/events.js'
 import './index.scss'
 
 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,52 +33,15 @@
   UNSAFE_componentWillMount() {
     const { searches } = this.props
 
-    let _usefulFields = []
-    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(', ')
+      usefulFields: getSearchFields(searches)
     })
   }
 
   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(', ')
+        usefulFields: getSearchFields(nextProps.searches)
       })
     }
   }
@@ -83,7 +52,8 @@
     })
 
     this.props.form.setFieldsValue({
-      sql: record.sql
+      sql: record.sql,
+      position: record.position || 'front'
     })
   }
 
@@ -92,81 +62,74 @@
       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)
-        let _lparen = values.sql.match(/\({1}/g)
-        let _rparen = values.sql.match(/\){1}/g)
+        let pass = checkSQL(values.sql, 'customscript')
 
-        _quot = _quot ? _quot.length : 0
-        _lparen = _lparen ? _lparen.length : 0
-        _rparen = _rparen ? _rparen.length : 0
+        if (!pass && !skip) return
 
-        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
-        }
-
-        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
+            })
           })
-        })
+        }
       }
     })
   }
 
   selectScript = (value, option) => {
+    const { setting } = this.props
+
     let _sql = this.props.form.getFieldValue('sql')
     if (_sql === ' ') {
       _sql = ''
@@ -178,6 +141,18 @@
 
     if (value === 'defaultsql') {
       value = this.props.defaultsql
+    } else if (value === 'flowstart') {
+      value = `/* select a.*, w.remark as remark_w, w.statusname  as statusname_w,w.status as status_w,w.works_flow_param,w.works_flow_detail_id,w.modifydate as modifydate_w  from (select * from ${setting.tableName} where status=0 and deleted=0 $@ and createuserid=@userid@ @$) 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()
+    } else if (value === 'flowcheck') {
+      value = `/* select a.*, w.remark as remark_w, w.statusname  as statusname_w,w.status as status_w,w.works_flow_param,w.works_flow_detail_id,w.modifydate as modifydate_w  
+      from (select * from ${setting.tableName} where status=0 and deleted=0 ) a
+      inner join (select * from  s_my_works_flow  where works_flow_code=@works_flow_code@ and status>0 and status<888 and deleted=0) w 
+      on a.id=w.works_flow_id 
+      $@ inner join (select works_flow_id  from s_my_works_flow_role where userid=@userid@ and  works_flow_code=@works_flow_code@ and deleted=0 ) r
+      on r.works_flow_id=w.works_flow_id @$ */`
+      this.props.addProcess()
     }
 
     _sql = _sql.replace(/\s{6}$/, '')
@@ -191,52 +166,117 @@
     })
   }
 
-  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, hasExtend } = 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}}>
-              ErrorCode, retmsg
+          <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>,&nbsp;
+          <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, lang, time_id, typename, datam{window.GLOB.getLocation ? ', mk_longitude, mk_latitude' : ''}</span></Tooltip>,&nbsp;
               <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>,&nbsp;
-              <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@ 鎴栬剼鏈腑瀛樺湪 @mk_total 浠h〃鑷畾涔夊垎椤碉紝鎬绘暟璇蜂互mk_total杩斿洖銆�'}>orderBy, pageSize, pageIndex{usefulFields ? ', ' + usefulFields : ''}{type === 'calendar' ? ', mk_year' : ''}{hasExtend ? ', mk_time' : ''}</Tooltip>
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'url鍙橀噺锛岃鎸夌収@xxx@鏍煎紡浣跨敤銆�'}>{urlFields ? ', ' : ''}<span style={{color: '#13c2c2'}}>{urlFields}</span></Tooltip>
+              {window.GLOB.process ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'宸ヤ綔娴佸彉閲忥紝璇锋寜鐓xxx@鏍煎紡浣跨敤銆�'}>, <span style={{color: 'purple'}}>works_flow_code</span></Tooltip> : null}
             </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="flowstart" value="flowstart">榛樿sql锛堝伐浣滄祦-鍙戣捣锛�</Select.Option> : null}
+                {window.GLOB.process ? <Select.Option style={{whiteSpace: 'normal'}} key="flowcheck" value="flowcheck">榛樿sql锛堝伐浣滄祦-瀹℃牳锛�</Select.Option> : null}
                 <Select.Option key="debugger" value={`z_debug: select @ErrorCode='E',@retmsg='娴嬭瘯鏂偣' goto aaa`}>
                   娴嬭瘯鏂偣
                 </Select.Option>
@@ -246,13 +286,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 +308,7 @@
                     message: '璇疯緭鍏ql!'
                   }
                 ]
-              })(<CodeMirror />)}
+              })(<CodeMirror/>)}
             </Form.Item>
           </Col>
         </Row>

--
Gitblit v1.8.0