From cbeffcc0902631909c0373f274752a97ddaf2d4e Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期六, 06 八月 2022 01:41:54 +0800
Subject: [PATCH] 2022-08-06

---
 src/templates/zshare/verifycard/index.jsx |  621 +++++++++++++++++++++++++++++++-------------------------
 1 files changed, 344 insertions(+), 277 deletions(-)

diff --git a/src/templates/zshare/verifycard/index.jsx b/src/templates/zshare/verifycard/index.jsx
index 5bc26a1..118c3f0 100644
--- a/src/templates/zshare/verifycard/index.jsx
+++ b/src/templates/zshare/verifycard/index.jsx
@@ -1,13 +1,16 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
-import { fromJS } from 'immutable'
-import { Form, Tabs, Row, Col, Radio, Button, Select, Popconfirm, notification, Modal, message, InputNumber, Tooltip, Typography } from 'antd'
-import { QuestionCircleOutlined, CheckCircleOutlined, StopOutlined, EditOutlined, SwapOutlined, DeleteOutlined } from '@ant-design/icons'
+import { is, fromJS } from 'immutable'
+import { Form, Tabs, Row, Col, Button, Popconfirm, notification, Modal, message, InputNumber, Typography } from 'antd'
+import { CheckCircleOutlined, StopOutlined, EditOutlined, SwapOutlined, DeleteOutlined, ExclamationOutlined, BorderOutlined } from '@ant-design/icons'
+import Toast from 'antd-mobile/es/components/toast'
+import Dialog from 'antd-mobile/es/components/dialog'
 import moment from 'moment'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
 import options from '@/store/options.js'
+import BaseForm from './baseform'
 import UniqueForm from './uniqueform'
 import ContrastForm from './contrastform'
 import CustomForm from './customform'
@@ -17,6 +20,8 @@
 import VoucherForm from './voucherform'
 import asyncComponent from '@/utils/asyncComponent'
 import { updateForm } from '@/utils/utils-update.js'
+import MKEmitter from '@/utils/events.js'
+import MinView from '@/assets/img/minview.png'
 import './index.scss'
 
 const { TabPane } = Tabs
@@ -35,8 +40,13 @@
 
   state = {
     initsql: '',            // sql楠岃瘉鏃跺彉閲忓0鏄庡強璧嬪��
+    verifyInter: 'system',  // 鎺ュ彛绫诲瀷
+    activeKey: 'base',
+    appType: sessionStorage.getItem('appType'),
     notes: [],              // 鐭俊妯℃澘
     setting: null,
+    visible: false,
+    scriptId: '',
     verify: {},
     fields: [],
     usefulfields: '',
@@ -97,15 +107,15 @@
         inputType: 'switch',
         render: (text, record) => record.status === 'false' ?
           (
-            <div>
-              {this.props.dict['model.status.forbidden']}
-              <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} />
+            <div style={{color: '#ff4d4f'}}>
+              绂佺敤
+              <StopOutlined style={{marginLeft: '5px'}} />
             </div>
           ) :
           (
-            <div>
+            <div style={{color: '#26C281'}}>
               {this.props.dict['model.status.open']}
-              <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/>
+              <CheckCircleOutlined style={{marginLeft: '5px'}}/>
             </div>
           )
       }
@@ -133,15 +143,15 @@
         inputType: 'switch',
         render: (text, record) => record.status === 'false' ?
           (
-            <div>
-              {this.props.dict['model.status.forbidden']}
-              <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} />
+            <div style={{color: '#ff4d4f'}}>
+              绂佺敤
+              <StopOutlined style={{marginLeft: '5px'}} />
             </div>
           ) :
           (
-            <div>
+            <div style={{color: '#26C281'}}>
               {this.props.dict['model.status.open']}
-              <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/>
+              <CheckCircleOutlined style={{marginLeft: '5px'}}/>
             </div>
           )
       },
@@ -207,15 +217,15 @@
         inputType: 'switch',
         render: (text, record) => record.status === 'false' ?
           (
-            <div>
-              {this.props.dict['model.status.forbidden']}
-              <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} />
+            <div style={{color: '#ff4d4f'}}>
+              绂佺敤
+              <StopOutlined style={{marginLeft: '5px'}} />
             </div>
           ) :
           (
-            <div>
+            <div style={{color: '#26C281'}}>
               {this.props.dict['model.status.open']}
-              <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/>
+              <CheckCircleOutlined style={{marginLeft: '5px'}}/>
             </div>
           )
       }
@@ -228,12 +238,12 @@
         render: (text) => {
           let title = text.match(/^\s*\/\*.+\*\//)
           title = title && title[0] ? title[0] : ''
-          text = title ? text.replace(title, '') : text
+          let _text = title ? text.replace(title, '') : text
 
           return (
             <div>
-              {title ? <span style={{color: '#a50'}}>{title}</span> : null}
-              <Paragraph copyable ellipsis={{ rows: 4, expandable: true }}>{text}</Paragraph>
+              {title ? <span style={{color: '#a50'}}>{title}<span style={{fontSize: '12px', marginLeft: '5px'}}>{_text.length}</span></span> : null}
+              <Paragraph copyable={{ text: text }} ellipsis={{ rows: 4, expandable: true }}>{_text}</Paragraph>
             </div>
           )
         }
@@ -259,15 +269,15 @@
         width: '9%',
         render: (text, record) => record.status === 'false' ?
           (
-            <div>
-              {this.props.dict['model.status.forbidden']}
-              <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} />
+            <div style={{color: '#ff4d4f'}}>
+              绂佺敤
+              <StopOutlined style={{marginLeft: '5px'}} />
             </div>
           ) :
           (
-            <div>
+            <div style={{color: '#26C281'}}>
               {this.props.dict['model.status.open']}
-              <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/>
+              <CheckCircleOutlined style={{marginLeft: '5px'}}/>
             </div>
           )
       },
@@ -298,12 +308,12 @@
         render: (text) => {
           let title = text.match(/^\s*\/\*.+\*\//)
           title = title && title[0] ? title[0] : ''
-          text = title ? text.replace(title, '') : text
+          let _text = title ? text.replace(title, '') : text
 
           return (
             <div>
-              {title ? <span style={{color: '#a50'}}>{title}</span> : null}
-              <Paragraph copyable ellipsis={{ rows: 4, expandable: true }}>{text}</Paragraph>
+              {title ? <span style={{color: '#a50'}}>{title}<span style={{fontSize: '12px', marginLeft: '5px'}}>{_text.length}</span></span> : null}
+              <Paragraph copyable={{ text: text }} ellipsis={{ rows: 4, expandable: true }}>{_text}</Paragraph>
             </div>
           )
         }
@@ -314,11 +324,11 @@
         width: '10%',
         render: (text, record) => {
           if (record.position === 'init') {
-            return '鍒濆鍖�'
+            return <span style={{color: 'orange'}}>鍒濆鍖�</span>
           } else if (record.position === 'front') {
-            return 'sql鍓�'
+            return <span style={{color: '#26C281'}}>sql鍓�</span>
           } else {
-            return 'sql鍚�'
+            return <span style={{color: '#1890ff'}}>sql鍚�</span>
           }
         }
       },
@@ -328,22 +338,22 @@
         width: '10%',
         render: (text, record) => record.status === 'false' ?
           (
-            <div>
-              {this.props.dict['model.status.forbidden']}
-              <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} />
+            <div style={{color: '#ff4d4f'}}>
+              绂佺敤
+              <StopOutlined style={{marginLeft: '5px'}} />
             </div>
           ) :
           (
-            <div>
+            <div style={{color: '#26C281'}}>
               {this.props.dict['model.status.open']}
-              <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/>
+              <CheckCircleOutlined style={{marginLeft: '5px'}}/>
             </div>
           )
       },
       {
         title: '鎿嶄綔',
         align: 'center',
-        width: '20%',
+        width: '140px',
         dataIndex: 'operation',
         render: (text, record) =>
           (<div style={{textAlign: 'center'}}>
@@ -367,12 +377,12 @@
         render: (text) => {
           let title = text.match(/^\s*\/\*.+\*\//)
           title = title && title[0] ? title[0] : ''
-          text = title ? text.replace(title, '') : text
+          let _text = title ? text.replace(title, '') : text
 
           return (
             <div>
-              {title ? <span style={{color: '#a50'}}>{title}</span> : null}
-              <Paragraph copyable ellipsis={{ rows: 4, expandable: true }}>{text}</Paragraph>
+              {title ? <span style={{color: '#a50'}}>{title}<span style={{fontSize: '12px', marginLeft: '5px'}}>{_text.length}</span></span> : null}
+              <Paragraph copyable={{ text: text }} ellipsis={{ rows: 4, expandable: true }}>{_text}</Paragraph>
             </div>
           )
         }
@@ -383,9 +393,9 @@
         width: '10%',
         render: (text, record) => {
           if (record.position === 'front') {
-            return 'sql鍓�'
+            return <span style={{color: '#26C281'}}>sql鍓�</span>
           } else {
-            return 'sql鍚�'
+            return <span style={{color: '#1890ff'}}>sql鍚�</span>
           }
         }
       },
@@ -395,15 +405,15 @@
         width: '10%',
         render: (text, record) => record.status === 'false' ?
           (
-            <div>
-              {this.props.dict['model.status.forbidden']}
-              <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} />
+            <div style={{color: '#ff4d4f'}}>
+              绂佺敤
+              <StopOutlined style={{marginLeft: '5px'}} />
             </div>
           ) :
           (
-            <div>
+            <div style={{color: '#26C281'}}>
               {this.props.dict['model.status.open']}
-              <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/>
+              <CheckCircleOutlined style={{marginLeft: '5px'}}/>
             </div>
           )
       },
@@ -469,7 +479,7 @@
           let _type = record.Type
           if (_type && typeof(_type) === 'string') {
             _type = parseInt(_type)
-          } else {
+          } else if (!_type) {
             _type = 4
           }
 
@@ -496,15 +506,15 @@
         width: '8%',
         render: (text, record) => record.status === 'false' ?
           (
-            <div>
-              {this.props.dict['model.status.forbidden']}
-              <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} />
+            <div style={{color: '#ff4d4f'}}>
+              绂佺敤
+              <StopOutlined style={{marginLeft: '5px'}} />
             </div>
           ) :
           (
-            <div>
+            <div style={{color: '#26C281'}}>
               {this.props.dict['model.status.open']}
-              <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/>
+              <CheckCircleOutlined style={{marginLeft: '5px'}}/>
             </div>
           )
       },
@@ -531,7 +541,7 @@
 
   UNSAFE_componentWillMount() {
     const { columns, config, card, btnTab } = this.props
-    let _verify = card.verify || {}
+    let _verify = fromJS(card.verify || {}).toJS()
 
     let _invalid = _verify.invalid
 
@@ -543,6 +553,7 @@
     }
 
     _verify.default = _verify.default || 'true'
+    _verify.wxNote = _verify.wxNote || 'false'         // 鍏紬鍙锋秷鎭帹閫佹槸鍚﹀紑鍚�
     _verify.noteEnable = _verify.noteEnable || 'false' // 鐭俊鍙戦�佹槸鍚﹀紑鍚�
     _verify.noteType = _verify.noteType || 'N'         // 鐭俊鍙戦�佹ā寮忥細Y锛堝疄鏃讹級銆丯锛堝畾鏃讹級
     _verify.noteTemp = _verify.noteTemp || 'Y'         // 鐭俊鍙戦�佹ā鏉匡細Y锛堢浉鍚岋級銆丯锛堜笉鍚岋級
@@ -573,18 +584,45 @@
       })
     }
 
-    this.setState({
-      setting: config.setting || {},
-      verify: _verify
+    _verify.customverifys.forEach((item, i) => {
+      item.$index = i + 1
+    })
+    _verify.scripts.forEach((item, i) => {
+      item.$index = i + 1
+    })
+    _verify.cbScripts.forEach((item, i) => {
+      item.$index = i + 1
     })
 
-    if (config.Template !== 'FormTab' && (card.intertype === 'inner' || card.intertype === 'outer')) { // 鍐呴儴鎴栧閮ㄦ帴鍙�
+    let verifyInter = card.intertype === 'system' || card.procMode === 'system' ? 'system' : 'inner'
+    let activeKey = verifyInter === 'system' || card.intertype === 'inner' ? 'base' : 'tip'
+
+    if (card.callbackType === 'script') {
+      activeKey = 'cbScripts'
+    }
+
+    this.setState({
+      activeKey: activeKey,
+      verifyInter: verifyInter,
+      setting: config.setting || {},
+      verify: _verify,
+      oriVerify: fromJS(_verify).toJS()
+    })
+
+    if (config.Template !== 'FormTab' && card.intertype === 'inner') {
       return
     }
 
     new Promise(resolve => {
       let _fields = []
-      if (config.Template === 'FormTab') {
+      if (card.OpenType === 'form') {
+        _fields.push({
+          field: card.field,
+          label: card.label,
+          type: 'text'
+        })
+        resolve(_fields)
+      } else if (config.Template === 'FormTab') {
         config.groups.forEach(group => {
           _fields.push(...group.sublist)
         })
@@ -627,14 +665,22 @@
         resolve(_fields)
       }
     }).then(_fields => {
-      let _usefulfields = ['BID', 'ID', 'LoginUID', 'SessionUid', 'UserID', 'Appkey', 'UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'login_city', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode']
-      let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@RoleID nvarchar(512)', '@mk_departmentcode nvarchar(50)', '@mk_organization nvarchar(50)', '@login_city 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=\'\'', '@RoleID=\'\'', '@mk_departmentcode=\'\'', '@mk_organization=\'\'', '@login_city=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'']
+      let _usefulfields = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode']
+      let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@RoleID nvarchar(512)', '@mk_departmentcode nvarchar(50)', '@mk_organization nvarchar(50)', '@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)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)', '@bid nvarchar(50)']
+      let _select = ['@UserName=\'\'', '@FullName=\'\'', '@RoleID=\'\'', '@mk_departmentcode=\'\'', '@mk_organization=\'\'', '@mk_user_type=\'\'', '@mk_nation=\'\'', '@mk_province=\'\'', '@mk_city=\'\'', '@mk_district=\'\'', '@mk_address=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'', '@bid=\'\'']
       let fieldArr = _usefulfields.map(_f => _f.toLowerCase())
       let hasBid = false
 
+      _usefulfields = []
+      
+      fieldArr.push('bid')
+
       _fields = _fields.filter(_f => _f.field)
       _fields.forEach(_f => {
+        if (_f.field.toLowerCase() === 'bid') {
+          hasBid = true
+        }
+
         if (fieldArr.includes(_f.field.toLowerCase())) return
 
         fieldArr.push(_f.field.toLowerCase())
@@ -655,19 +701,18 @@
 
         if (_f.type.match(/date/ig)) {
           _type = 'datetime'
-          _select.push(`@${_f.field}='1900-01-01'`)
+          _select.push(`@${_f.field}='1949-10-01'`)
         } else if (_f.type === 'number') {
           _type = `decimal(18,${_fieldlen})`
+          _select.push(`@${_f.field}=0`)
+        } else if (_f.type === 'rate') {
+          _type = `decimal(18,2)`
           _select.push(`@${_f.field}=0`)
         } else {
           _select.push(`@${_f.field}=''`)
         }
 
         _declare.push(`@${_f.field} ${_type}`)
-
-        if (_f.field.toLowerCase() === 'bid') {
-          hasBid = true
-        }
       })
 
       let uniqueFields = fromJS(_fields).toJS()
@@ -675,9 +720,6 @@
       if (!hasBid) { // 鍞竴鎬ч獙璇佹坊鍔燘ID
         uniqueFields.unshift({ uuid: 'BID', field: 'BID', label: 'BID', type: 'text' })
         _fields.unshift({ uuid: 'BID', field: 'BID', label: 'BID', type: 'text' })
-        fieldArr.push('bid')
-        _declare.push(`@bid nvarchar(50)`)
-        _select.push(`@bid=''`)
       }
 
       let hasColumn = false
@@ -748,6 +790,7 @@
       let _defaultsql = ''
       let _insertsql = ''
       let _updatesql = ''
+      let _primaryKey = config.setting.primaryKey || 'id'
 
       if (card.sqlType === 'insert' || card.sqlType === 'insertOrUpdate') {
         let keys = []
@@ -765,8 +808,8 @@
           }
         })
 
-        if (config.setting.primaryKey && !keys.includes(config.setting.primaryKey.toLowerCase())) {
-          keys.push(config.setting.primaryKey.toLowerCase())
+        if (!keys.includes(_primaryKey.toLowerCase())) {
+          keys.push(_primaryKey.toLowerCase())
           values.push('@ID@')
         }
         if (!keys.includes('createuserid')) {
@@ -799,7 +842,11 @@
           if (!item.field || item.writein === 'false') return
 
           _arr.push(item.field.toLowerCase())
-          _form.push(item.field + '=@' + item.field)
+          if (item.field.toLowerCase() === 'bid' && item.uuid === 'BID') {
+            _form.push(item.field + '=@BID@')
+          } else {
+            _form.push(item.field + '=@' + item.field)
+          }
         })
 
         if (this.props.card.sqlType === 'audit') {
@@ -837,7 +884,7 @@
         }
 
         _form = _form.join(', ')
-        _updatesql = `update ${card.sql} set ${_form} where ${config.setting.primaryKey || 'id'}${card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID  from dbo.SplitComma(@ID@))'};`
+        _updatesql = `update ${card.sql} set ${_form} where ${_primaryKey}${card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID  from dbo.SplitComma(@ID@))'};`
       }
 
       if (card.sqlType === 'insert') {
@@ -846,7 +893,7 @@
         _defaultsql = _updatesql
       } else if (card.sqlType === 'insertOrUpdate') {
         _defaultsql += `select @tbid=''
-          select @tbid='X' from ${card.sql} where ${config.setting.primaryKey || 'id'}=@ID@
+          select @tbid='X' from ${card.sql} where ${_primaryKey}=@ID@
           if @tbid=''
             begin
             ${_insertsql}
@@ -861,7 +908,7 @@
         if (_verify.voucher && _verify.voucher.enabled) {
           _voucher = ',BVoucher=@BVoucher,FIBVoucherDate=@FIBVoucherDate,FiYear=@FiYear'
         }
-        _defaultsql = `update ${card.sql} set deleted=1,modifydate=getdate(),modifyuser=@username,modifyuserid=@userid@${_voucher} where ${config.setting.primaryKey || 'id'}${card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID  from dbo.SplitComma(@ID@))'};`
+        _defaultsql = `update ${card.sql} set deleted=1,modifydate=getdate(),modifyuser=@username,modifyuserid=@userid@${_voucher} where ${_primaryKey}${card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID  from dbo.SplitComma(@ID@))'};`
       } else if (card.sqlType === 'delete') {
         let _msg = ''
         if (columns && columns.length > 0 && card.Ot !== 'notRequired' && card.Ot !== 'requiredOnce') {
@@ -873,7 +920,7 @@
             _index++
           })
         }
-        _defaultsql += `insert into snote (remark,createuserid,CreateUser,CreateStaff) select left('鍒犻櫎琛�:${card.sql} 鏁版嵁: ${_msg}${config.setting.primaryKey || 'id'}='+@ID@,200),@userid@,@username,@fullname delete ${card.sql} where ${config.setting.primaryKey}${card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID  from dbo.SplitComma(@ID@))'};`
+        _defaultsql += `insert into snote (remark,createuserid,CreateUser,CreateStaff) select left('鍒犻櫎琛�:${card.sql} 鏁版嵁: ${_msg}${_primaryKey}='+@ID@,200),@userid@,@username,@fullname delete ${card.sql} where ${_primaryKey}${card.Ot !== 'requiredOnce' ? '=@ID@' : ' in (select ID  from dbo.SplitComma(@ID@))'};`
       }
 
       let _columns = []
@@ -892,7 +939,7 @@
           _columns.unshift({ uuid: 'BID', field: 'BID', label: 'BID', type: 'text' })
         }
       }
-      
+
       this.setState({
         fields: _fields,
         columnsFields: _columns,
@@ -1073,6 +1120,8 @@
       verify.scripts.push(values)
     }
 
+    MKEmitter.emit('editLineId', values.uuid)
+
     this.setState({ verify })
   }
 
@@ -1112,39 +1161,6 @@
     }
 
     this.setState({ verify })
-  }
-
-  onNoteCodeChange = (val, option) => {
-    const { verify } = this.state
-
-    this.setState({
-      verify: {...verify, noteCode: val, noteId: option.props.id}
-    })
-  }
-
-  onOptionChange = (e, key) => {
-    const { verify } = this.state
-    let value = e.target.value
-
-    this.setState({
-      verify: {...verify, [key]: value}
-    })
-  }
-
-  changeAccField = (val) => {
-    const { verify } = this.state
-
-    this.setState({
-      verify: {...verify, accountfield: val}
-    })
-  }
-
-  changeAccDate = (val) => {
-    const { verify } = this.state
-
-    this.setState({
-      verify: {...verify, voucherdate: val}
-    })
   }
 
   handleDelete = (record, type) => {
@@ -1243,35 +1259,66 @@
   }
 
   showError = (errorType) => {
+    const { verify, appType } = this.state
+
     if (errorType === 'S') {
-      notification.success({
-        top: 92,
-        message: '鎵ц鎴愬姛锛�',
-        duration: 2
-      })
+      let time = verify.stime || 2
+      if (appType === 'mob') {
+        Toast.show({ icon: 'success', content: '鎵ц鎴愬姛锛�', duration: time * 1000 })
+      } else {
+        notification.success({
+          top: 92,
+          message: '鎵ц鎴愬姛锛�',
+          duration: time
+        })
+      }
+      
     } else if (errorType === 'Y') {
-      Modal.success({
-        title: '鎵ц鎴愬姛锛�'
-      })
+      if (appType === 'mob') {
+        Dialog.alert({content: '鎵ц鎴愬姛锛�', confirmText: '鐭ラ亾浜�'})
+      } else {
+        Modal.success({
+          title: '鎵ц鎴愬姛锛�'
+        })
+      }
     } else if (errorType === 'F') {
-      notification.error({
-        className: 'notification-custom-error',
-        top: 92,
-        message: '鎵ц澶辫触锛�',
-        duration: 10
-      })
+      if (appType === 'mob') {
+        let time = verify.ftime || 3
+        Toast.show({ icon: 'fail', content: '鎵ц澶辫触锛�', duration: time * 1000 })
+      } else {
+        notification.error({
+          className: 'notification-custom-error',
+          top: 92,
+          message: '鎵ц澶辫触锛�',
+          duration: verify.ftime || 10
+        })
+      }
     } else if (errorType === 'N') {
-      notification.error({
-        top: 92,
-        message: '鎵ц澶辫触锛�',
-        duration: 10
-      })
+      if (appType === 'mob') {
+        let time = verify.ntime || 3
+        Toast.show({ content: '鎵ц澶辫触锛�', duration: time * 1000 })
+      } else {
+        notification.error({
+          top: 92,
+          message: '鎵ц澶辫触锛�',
+          duration: verify.ntime || 10
+        })
+      }
     } else if (errorType === 'E') {
-      Modal.error({
-        title: '鎵ц澶辫触锛�'
-      })
+      if (appType === 'mob') {
+        Dialog.alert({content: '鎵ц澶辫触锛�', confirmText: '鐭ラ亾浜�'})
+      } else {
+        Modal.error({
+          title: '鎵ц澶辫触锛�'
+        })
+      }
     } else if (errorType === 'NM') {
-      message.error('鎵ц澶辫触锛�')
+      if (appType === 'mob') {
+        let time = verify.ntime || 3
+        Toast.show({ content: '鎵ц澶辫触锛�', duration: time * 1000 })
+      } else {
+        message.error('鎵ц澶辫触锛�')
+      }
     }
   }
 
@@ -1319,8 +1366,21 @@
 
   handleConfirm = () => {
     const { card } = this.props
-    const { setting } = this.state
+    const { setting, activeKey } = this.state
     let verify = fromJS(this.state.verify).toJS()
+
+    if (activeKey === 'base') {
+      let msg = this.baseForm.handleConfirm()
+
+      if (msg) {
+        notification.warning({
+          top: 92,
+          message: msg,
+          duration: 5
+        })
+        return Promise.reject()
+      }
+    }
     
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
     return new Promise((resolve, reject) => {
@@ -1331,14 +1391,7 @@
           duration: 5
         })
         return
-      } else if (verify.accountdate === 'true' && !verify.accountfield) {
-        notification.warning({
-          top: 92,
-          message: '寮�鍚处鏈熸椂锛岄渶瑕侀�夋嫨楠岃瘉鍏徃锛�',
-          duration: 5
-        })
-        return
-      } else if (verify.invalid === 'true' && setting.maxScript && setting.maxScript >= 100) {
+      } else if (verify.invalid === 'true' && setting.maxScript && setting.maxScript >= 300) {
         notification.warning({
           top: 92,
           message: '鏁版嵁婧愪腑鑷畾涔夎剼鏈繃浜庡鏉傦紝涓嶈兘浣跨敤澶辨晥楠岃瘉锛�',
@@ -1358,12 +1411,6 @@
         msg = '鑷畾涔夎剼鏈�'
       } else if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) {
         msg = '鑷畾涔夎剼鏈�'
-      }
-
-      if (verify.noteEnable === 'true' && !verify.noteCode) { // 寮�鍚煭淇℃椂锛岄渶瑕佹ā鏉跨紪鐮�
-        verify.noteEnable = 'false'
-      } else if (verify.noteEnable !== 'true' && verify.noteCode) {
-        verify.noteCode = ''
       }
 
       if (window.GLOB.funcs && window.GLOB.funcs.length > 0) {
@@ -1395,6 +1442,44 @@
     })
   }
 
+  handleCancel = () => {
+    const { verify, oriVerify } = this.state
+    // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
+    return new Promise((resolve, reject) => {
+      if (!is(fromJS(verify), fromJS(oriVerify))) {
+        confirm({
+          content: '楠岃瘉淇℃伅宸蹭慨鏀癸紝纭畾鍙栨秷鍚楋紵',
+          onOk() {
+            resolve()
+          },
+          onCancel() {}
+        })
+      } else {
+        resolve()
+      }
+    })
+  }
+
+  changeTab = (val) => {
+    const { activeKey } = this.state
+
+    if (activeKey === 'base') {
+      let msg = this.baseForm.handleConfirm()
+
+      if (msg) {
+        notification.warning({
+          top: 92,
+          message: msg,
+          duration: 5
+        })
+        return
+      }
+    }
+    this.setState({
+      activeKey: val
+    })
+  }
+
   /**
    * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊
    */
@@ -1406,7 +1491,7 @@
 
   render() {
     const { card } = this.props
-    const { verify, fields, uniqueFields, uniqueColumns, unionFields, onceUniqueColumns, columnsFields, contrastColumns, customColumns, orderColumns, scriptsColumns, cbScriptsColumns, orderModular, orderModularDetail, voucher, voucherDetail, notes } = this.state
+    const { activeKey, verifyInter, verify, fields, visible, uniqueFields, uniqueColumns, unionFields, onceUniqueColumns, columnsFields, contrastColumns, customColumns, orderColumns, scriptsColumns, cbScriptsColumns, orderModular, orderModularDetail, voucher, voucherDetail, notes, appType } = this.state
     const formItemLayout = {
       labelCol: {
         xs: { span: 24 },
@@ -1420,129 +1505,30 @@
 
     return (
       <div id="verify-card-box-tab">
-        <Tabs defaultActiveKey="1" className="verify-card-box">
-          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <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鎵ц椤哄簭涓鸿嚜瀹氫箟鑴氭湰涔嬪墠'}>
-                      <QuestionCircleOutlined className="mk-form-tip" />
-                      榛樿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>
-                {verify.accountdate === 'true' ? <Col span={8}>
-                  <Form.Item label={'楠岃瘉鍏徃'} required>
-                    <Select defaultValue={verify.accountfield || ''} onChange={this.changeAccField}>
-                      {unionFields.map(option =>
-                        <Select.Option key={option.uuid} value={option.field}>
-                          {option.label}
-                        </Select.Option>
-                      )}
-                    </Select>
-                  </Form.Item>
-                </Col> : null}
-                {verify.accountdate === 'true' ? <Col span={8}>
-                  <Form.Item label={
-                    <Tooltip placement="bottomLeft" title={'楠岃瘉鏃ユ湡涓虹┖鏃讹紝榛樿涓哄綋澶┿��'}>
-                      <QuestionCircleOutlined className="mk-form-tip" />
-                      楠岃瘉鏃ユ湡
-                    </Tooltip>
-                  }>
-                    <Select allowClear defaultValue={verify.voucherdate || ''} onChange={this.changeAccDate}>
-                      {unionFields.map(option =>
-                        <Select.Option key={option.uuid} value={option.field}>
-                          {option.label}
-                        </Select.Option>
-                      )}
-                    </Select>
-                  </Form.Item>
-                </Col> : null}
-                <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>
-                <Col span={8}>
-                  <Form.Item label={
-                    <Tooltip placement="bottomLeft" title={'閫夋嫨鍙戦�佺煭淇℃椂锛岄渶瀹屽杽鐭俊璁剧疆銆�'}>
-                      <QuestionCircleOutlined className="mk-form-tip" />
-                      鍙戦�佺煭淇�
-                    </Tooltip>
-                  }>
-                    <Radio.Group value={verify.noteEnable} onChange={(e) => {this.onOptionChange(e, 'noteEnable')}}>
-                      <Radio value="true">寮�鍚�</Radio>
-                      <Radio value="false">涓嶅紑鍚�</Radio>
-                    </Radio.Group>
-                  </Form.Item>
-                </Col>
-                {verify.noteEnable === 'true' ? <Col span={8}>
-                  <Form.Item label="鐭俊妯℃澘">
-                    <Select value={verify.noteCode} onSelect={this.onNoteCodeChange}>
-                      {notes.map(option =>
-                        <Select.Option key={option.value} id={option.id} value={option.value}>
-                          {option.name}
-                        </Select.Option>
-                      )}
-                    </Select>
-                  </Form.Item>
-                </Col> : null}
-                {verify.noteEnable === 'true' ? <Col span={8}>
-                  <Form.Item label={
-                    <Tooltip placement="bottomLeft" title={'瀹炴椂鍙戦�佹渶澶氬悓鏃跺彂閫�5涓敤鎴凤紝瀹氭椂鍙戦�佹渶澶氬悓鏃跺彂閫�100涓敤鎴枫��'}>
-                      <QuestionCircleOutlined className="mk-form-tip" />
-                      鍙戦�佹柟寮�
-                    </Tooltip>
-                  }>
-                    <Radio.Group value={verify.noteType} onChange={(e) => {this.onOptionChange(e, 'noteType')}}>
-                      <Radio value="Y">瀹炴椂</Radio>
-                      <Radio value="N">瀹氭椂</Radio>
-                    </Radio.Group>
-                  </Form.Item>
-                </Col> : null}
-                {verify.noteEnable === 'true' ? <Col span={8}>
-                  <Form.Item label="鐭俊鍐呭">
-                    <Radio.Group value={verify.noteTemp} onChange={(e) => {this.onOptionChange(e, 'noteTemp')}}>
-                      <Radio value="Y">鐩稿悓</Radio>
-                      <Radio value="N">涓嶅悓</Radio>
-                    </Radio.Group>
-                  </Form.Item>
-                </Col> : null}
-              </Row>
-            </Form>
+        <Tabs activeKey={activeKey} className="verify-card-box" onChange={this.changeTab}>
+          {verifyInter === 'system' || card.intertype === 'inner' ? <TabPane tab={
+            <span>
+              鍩虹楠岃瘉
+              {verify.default === 'false' ? <span className="count-tip"><ExclamationOutlined style={{color: 'orange'}}/></span> : null}
+            </span>
+          } key="base">
+            <BaseForm card={card} unionFields={unionFields} verify={verify} notes={notes} onChange={(verify) => this.setState({verify})} wrappedComponentRef={(inst) => this.baseForm = inst}/>
           </TabPane> : null}
-          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
+          {verifyInter === 'system' ? <TabPane tab={
             <span>
               姣旇緝楠岃瘉
               {verify.contrasts.length ? <span className="count-tip">{verify.contrasts.length}</span> : null}
             </span>
-          } key="2x">
+          } key="contrasts">
             <ContrastForm dict={this.props.dict} contrastChange={this.contrastChange}/>
-            <EditTable actions={['edit', 'move', 'copy', 'del']} type="contrastverify" data={verify.contrasts} columns={contrastColumns} onChange={(contrasts) => this.setState({verify: {...verify, contrasts}})}/>
+            <EditTable actions={['edit', 'move', 'copy', 'del', 'status']} type="contrastverify" data={verify.contrasts} columns={contrastColumns} onChange={(contrasts) => this.setState({verify: {...verify, contrasts}})}/>
           </TabPane> : null}
-          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
+          {verifyInter === 'system' ? <TabPane tab={
             <span>
               鑷畾涔夐獙璇�
               {verify.customverifys.length ? <span className="count-tip">{verify.customverifys.length}</span> : null}
             </span>
-          } key="3">
+          } key="customverifys">
             <CustomForm
               dict={this.props.dict}
               btn={this.props.card}
@@ -1553,12 +1539,12 @@
             />
             <EditTable actions={['move']} data={verify.customverifys} columns={customColumns} onChange={(customverifys) => {this.setState({verify: {...verify, customverifys}})}}/>
           </TabPane> : null}
-          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
+          {verifyInter === 'system' ? <TabPane tab={
             <span>
               鍗曞彿鐢熸垚
               {verify.billcodes.length ? <span className="count-tip">{verify.billcodes.length}</span> : null}
             </span>
-          } key="4">
+          } key="billcodes">
             <BillcodeForm
               fields={fields}
               btn={this.props.card}
@@ -1572,26 +1558,26 @@
             />
             <EditTable actions={['move']} data={verify.billcodes} columns={orderColumns} onChange={(billcodes) => {this.setState({verify: {...verify, billcodes}})}}/>
           </TabPane> : null}
-          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
+          {verifyInter === 'system' ? <TabPane tab={
             <span>
               {card.Ot !== 'requiredOnce' ? '鍞竴鎬ч獙璇�' : '鍚岀被鏁版嵁楠岃瘉'}
               {verify.uniques.length ? <span className="count-tip">{verify.uniques.length}</span> : null}
             </span>
-          } key="2">
+          } key="uniques">
             <UniqueForm
               btn={card}
               fields={card.Ot !== 'requiredOnce' ? uniqueFields : columnsFields}
               dict={this.props.dict}
               uniqueChange={this.uniqueChange}
             />
-            <EditTable actions={['edit', 'move', 'del']} data={verify.uniques} columns={card.Ot !== 'requiredOnce' ? uniqueColumns : onceUniqueColumns} onChange={this.changeUniques}/>
+            <EditTable actions={['edit', 'move', 'del', 'status']} data={verify.uniques} columns={card.Ot !== 'requiredOnce' ? uniqueColumns : onceUniqueColumns} onChange={this.changeUniques}/>
           </TabPane> : null}
-          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
+          {verifyInter === 'system' ? <TabPane tab={
             <span>
               鍒涘缓鍑瘉
               {verify.voucher && verify.voucher.enabled ? <span className="count-tip">1</span> : null}
             </span>
-          } key="5">
+          } key="voucher">
             <VoucherForm
               dict={this.props.dict}
               voucher={voucher}
@@ -1602,12 +1588,23 @@
               wrappedComponentRef={(inst) => this.voucherForm = inst}
             />
           </TabPane> : null}
-          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
+          {verifyInter === 'system' ? <TabPane tab={
             <span>
               鑷畾涔夎剼鏈�
               {verify.scripts.length ? <span className="count-tip">{verify.scripts.length}</span> : null}
             </span>
-          } key="6">
+          } key="scripts">
+            <BorderOutlined className="full-scripts" onClick={() => {
+              if (this.scriptsForm && (this.scriptsForm.state.editItem || (this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))))) {
+                notification.warning({
+                  top: 92,
+                  message: '璇蜂繚瀛樿嚜瀹氫箟鑴氭湰锛�',
+                  duration: 5
+                })
+                return
+              }
+              this.setState({visible: true, scriptId: ''})
+            }}/>
             <CustomScript
               btn={this.props.card}
               dict={this.props.dict}
@@ -1621,12 +1618,12 @@
             />
             <EditTable actions={['move']} data={verify.scripts} columns={scriptsColumns} onChange={(scripts) => {this.setState({verify: {...verify, scripts}})}}/>
           </TabPane> : null}
-          {card.callbackType === 'script' && card.intertype === 'custom' ? <TabPane tab={
+          {card.callbackType === 'script' ? <TabPane tab={
             <span>
               鍥炶皟鑴氭湰
               {verify.cbScripts.length ? <span className="count-tip">{verify.cbScripts.length}</span> : null}
             </span>
-          } key="6a">
+          } key="cbScripts">
             <CallBackCustomScript
               btn={this.props.card}
               dict={this.props.dict}
@@ -1639,7 +1636,7 @@
             />
             <EditTable actions={['move']} data={verify.cbScripts} columns={cbScriptsColumns} onChange={(cbScripts) => {this.setState({verify: {...verify, cbScripts}})}}/>
           </TabPane> : null}
-          <TabPane tab="淇℃伅鎻愮ず" key="7">
+          <TabPane tab="淇℃伅鎻愮ず" key="tip">
             <Form {...formItemLayout}>
               <Row gutter={24}>
                 <Col offset={6} span={6}>
@@ -1677,7 +1674,7 @@
                 </Col>
                 <Col span={8}>
                   <Form.Item label={'鍋滅暀鏃堕棿'}>
-                    <InputNumber defaultValue={verify.ntime || 10} min={1} max={10000} precision={0} onChange={(val) => {this.timeChange(val, 'ntime')}} />
+                    <InputNumber defaultValue={verify.ntime || (appType === 'mob' ? 3 : 10)} min={1} max={10000} precision={0} onChange={(val) => {this.timeChange(val, 'ntime')}} />
                   </Form.Item>
                 </Col>
               </Row>
@@ -1692,7 +1689,7 @@
                 </Col>
                 <Col span={8}>
                   <Form.Item label={'鍋滅暀鏃堕棿'}>
-                    <InputNumber defaultValue={verify.ftime || 10} min={1} max={10000} precision={0} onChange={(val) => {this.timeChange(val, 'ftime')}} />
+                    <InputNumber defaultValue={verify.ftime || (appType === 'mob' ? 3 : 10)} min={1} max={10000} precision={0} onChange={(val) => {this.timeChange(val, 'ftime')}} />
                   </Form.Item>
                 </Col>
               </Row>
@@ -1727,6 +1724,76 @@
             </Form>
           </TabPane>
         </Tabs>
+        <Modal
+          wrapClassName="model-custom-scripts-modal"
+          title="鑷畾涔夎剼鏈�"
+          visible={visible}
+          width={'95vw'}
+          maskClosable={false}
+          destroyOnClose
+        >
+          <img className="unfull-scripts" src={MinView} onClick={() => this.setState({visible: false, scriptId: ''})} alt=""/>
+          <div className="script-table-wrap">
+            {verify.scripts.map(item => {
+              let title = item.sql.match(/^\s*\/\*.+\*\//)
+              title = title && title[0] ? title[0] : ''
+              let _text = title ? item.sql.replace(title, '') : item.sql
+
+              let position = null
+              if (item.position === 'init') {
+                position = <span style={{color: 'orange'}}>鍒濆鍖�</span>
+              } else if (item.position === 'front') {
+                position = <span style={{color: '#26C281'}}>sql鍓�</span>
+              } else {
+                position = <span style={{color: '#1890ff'}}>sql鍚�</span>
+              }
+
+              return (
+                <div className={'script-item ' + (this.state.scriptId === item.uuid ? 'active' : '') } key={item.uuid}>
+                  <div style={{cursor: 'pointer'}} onClick={() => {
+                    this.scriptsFullForm.edit(item)
+                    this.setState({scriptId: item.uuid})
+                  }}>
+                    {title ? <div style={{color: '#a50', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis'}}>{title}</div> : null}
+                    <Paragraph copyable={{ text: item.sql }} ellipsis={{ rows: 4 }}>{_text}</Paragraph>
+                    <div>{position}{item.status === 'false' ?
+                      <span style={{color: '#ff4d4f', marginLeft: '20px'}}>
+                        绂佺敤
+                        <StopOutlined style={{marginLeft: '5px'}} />
+                      </span> : 
+                      <span style={{color: '#26C281', marginLeft: '20px'}}>
+                        鍚敤
+                        <CheckCircleOutlined style={{marginLeft: '5px'}}/>
+                      </span>}
+                    </div>
+                  </div>
+                  <div style={{textAlign: 'right'}}>
+                    <span className="operation-btn" onClick={() => this.handleStatus(item, 'scripts')} style={{color: '#8E44AD'}}><SwapOutlined /></span>
+                    <Popconfirm
+                      overlayClassName="popover-confirm"
+                      title={this.props.dict['model.query.delete']}
+                      onConfirm={() => this.handleDelete(item, 'scripts')
+                    }>
+                      <span className="operation-btn" style={{color: '#ff4d4f'}}><DeleteOutlined /></span>
+                    </Popconfirm>
+                  </div>
+                </div>
+              )
+            })}
+          </div>
+          <CustomScript
+            type="fullscreen"
+            btn={this.props.card}
+            dict={this.props.dict}
+            initsql={this.state.initsql}
+            customScripts={verify.scripts}
+            defaultsql={this.state.defaultsql}
+            usefulfields={this.state.usefulfields}
+            systemScripts={this.state.systemScripts}
+            scriptsChange={this.scriptsChange}
+            wrappedComponentRef={(inst) => this.scriptsFullForm = inst}
+          />
+        </Modal>
       </div>
     )
   }

--
Gitblit v1.8.0