From a8e94242166881639cecf3809e45ca527233ebd7 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 23 三月 2021 16:42:20 +0800
Subject: [PATCH] 2021-03-23

---
 src/tabviews/zshare/mutilform/index.jsx | 1106 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 741 insertions(+), 365 deletions(-)

diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx
index 29bd63c..56b78f9 100644
--- a/src/tabviews/zshare/mutilform/index.jsx
+++ b/src/tabviews/zshare/mutilform/index.jsx
@@ -1,17 +1,25 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { fromJS } from 'immutable'
-import { Form, Row, Col, Input, InputNumber, Select, DatePicker, notification } from 'antd'
+import { Form, Row, Col, Input, InputNumber, Select, DatePicker, notification, Checkbox, Radio, Tooltip, Icon } from 'antd'
 import moment from 'moment'
 
 import Api from '@/api'
+import options from '@/store/options.js'
 import { formRule } from '@/utils/option.js'
 import Utils from '@/utils/utils.js'
-import FileUpload from '../fileupload'
+import asyncComponent from '@/utils/asyncComponent'
+import asyncSpinComponent from '@/utils/asyncSpinComponent'
 import './index.scss'
 
-const {MonthPicker} = DatePicker
-const { TextArea } = Input
+const { MonthPicker } = DatePicker
+
+const CheckCard = asyncComponent(() => import('./checkCard'))
+const CustomSwitch = asyncComponent(() => import('./customSwitch'))
+const CustomTextArea = asyncComponent(() => import('./customTextArea'))
+const FileUpload = asyncComponent(() => import('../fileupload'))
+const ColorSketch = asyncComponent(() => import('@/mob/colorsketch'))
+const Editor = asyncSpinComponent(() => import('@/components/editor'))
 
 class MainSearch extends Component {
   static propTpyes = {
@@ -25,125 +33,98 @@
   }
 
   state = {
-    cols: 2,         // 鏄剧ず涓哄灏戝垪
     datatype: null,  // 鏁版嵁绫诲瀷
     readtype: null,  // 鏄惁鍙
     readin: null,    // 琛屾暟鎹槸鍚﹀啓鍏�
+    writein: null,   // 鎵ц鏃舵槸鍚﹀~鍏ラ粯璁ql
     fieldlen: null,  // 瀛楁闀垮害
     formlist: [],    // 琛ㄥ崟椤�
-    encrypts: [],    // 鍔犲瘑瀛楁
     intercepts: [],  // 鎴彇瀛楁
     record: {}       // 璁板綍涓嬫媺琛ㄥ崟鍏宠仈瀛楁锛岀敤浜庢暟鎹啓鍏�
   }
 
-  UNSAFE_componentWillMount () {
-    let cols = 2
-    if (this.props.action.setting && this.props.action.setting.cols) {
-      cols = parseInt(this.props.action.setting.cols)
-      if (cols > 4 || cols < 1) {
-        cols = 2
-      }
-    }
-
-    this.setState({
-      cols: cols
-    })
-  }
-
   componentDidMount () {
-    const { data, BData } = this.props
-    let action = fromJS(this.props.action).toJS()
+    const { data, BData, action } = this.props
     
     let datatype = {}
     let readtype = {}
     let readin = {}
+    let writein = {}
     let fieldlen = {}
-    let formlist = []
-    let encrypts = []
     let intercepts = []
+    let _inputfields = []
+    let linkFields = {} // 鍏宠仈鑿滃崟
+    let supItemVal = {} // 涓婄骇鑿滃崟鍒濆鍊�
+    let deForms = []    // 闇�瑕佸姩鎬佽幏鍙栦笅鎷夎彍鍗曠殑琛ㄥ崟
 
-    if (action.groups.length > 0) {
-      action.groups.forEach(group => {
-        if (group.sublist.length === 0) return
-
-        if (!group.default) {
-          formlist.push({
-            type: 'title',
-            label: group.label,
-            uuid: group.uuid
-          })
-        }
-
-        formlist.push(...group.sublist)
-      })
-    } else {
-      formlist = action.fields
-    }
-
-    let _inputfields = formlist.filter(item => item.type === 'text' || item.type === 'number') // 鐢ㄤ簬杩囨护涓嬫媺鑿滃崟鍏宠仈琛ㄥ崟
-
-    formlist = formlist.map(item => {
-      if (item.type === 'title') return item
-
-      // 鍔犲瘑瀛楁
-      if (item.type === 'textarea' && item.encryption === 'true') {
-        encrypts.push(item.field)
+    action.fields.forEach(item => {
+      if (item.type === 'text' || item.type === 'number') {              // 鐢ㄤ簬杩囨护涓嬫媺鑿滃崟鍏宠仈琛ㄥ崟
+        _inputfields.push(item.field)
+      } else if (item.type === 'textarea') {
+        _inputfields.push(item.field)
+      } else if (item.type === 'link') {
+        linkFields[item.linkField] = linkFields[item.linkField] || []
+        linkFields[item.linkField].push(item.field)
       }
-
-      // 瀛楃鎴彇瀛楁
-      if (item.interception === 'true') {
+      if (item.interception === 'true') {                                // 瀛楃鎴彇瀛楁
         intercepts.push(item.field)
       }
+    })
 
-      // 鏁版嵁鍐欏叆
+    let formlist = action.fields.map(item => {
+      if (item.labelwidth) {
+        item.labelCol = {style: {width: item.labelwidth + '%'}}
+      }
+      if (item.type === 'split' || item.type === 'hint') return item
+
+      // 鏁版嵁鑷姩濉厖
       let _readin = item.readin !== 'false'
       if (item.type === 'linkMain' || item.type === 'funcvar') {
         _readin = false
       }
 
-      // 鐢ㄤ簬鍙楁帶鍊肩殑琛ㄥ崟锛岄殣钘忔椂浼犻粯璁ゅ��(鏈娇鐢紵)
-      item.initVal = typeof(item.initval) === 'object' ? fromJS(item.initval).toJS() : item.initval
-
       let _fieldlen = item.fieldlength || 50
-      if (item.type === 'textarea' || item.type === 'fileupload' || item.type === 'multiselect') {
+      if (item.type === 'textarea' || item.type === 'fileupload' || item.type === 'multiselect' || item.type === 'brafteditor') {
         _fieldlen = item.fieldlength || 512
       } else if (item.type === 'number') {
         _fieldlen = item.decimal ? item.decimal : 0
+        item.initval = item.initval || 0
       }
 
       datatype[item.field] = item.type
       readtype[item.field] = item.readonly === 'true'
       readin[item.field] = _readin
+      writein[item.field] = item.writein !== 'false'
       fieldlen[item.field] = _fieldlen
 
-      if (item.type === 'select' || item.type === 'link' || item.type === 'multiselect') {
-        if (item.setAll === 'true') {
-          item.options.unshift({
-            key: Utils.getuuid(),
-            Value: '',
-            Text: this.props.dict['main.all']
-          })
-        }
+      if (item.setAll === 'true' && (item.type === 'select' || item.type === 'link' || item.type === 'radio')) { // 娣诲姞绌哄��
+        item.options.unshift({
+          key: Utils.getuuid(),
+          Value: '',
+          Text: item.emptyText || '绌�',
+          ParentID: ''
+        })
+      }
 
-        // 淇濆瓨鍒濆鍒楄〃锛岀敤浜庡叧鑱旇彍鍗曟帶鍒�
-        item.oriOptions = fromJS(item.options).toJS()
+      item.oriOptions = item.options ? fromJS(item.options).toJS() : null // 淇濆瓨鍒濆鍒楄〃锛岀敤浜庤仈鍔ㄨ彍鍗曟帶鍒�
 
-        // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆
-        if (item.linkSubField && item.linkSubField.length > 0) {
-          let _fields = _inputfields.map(_item => _item.field)
-          item.linkSubField = item.linkSubField.filter(_item => _fields.includes(_item))
-        }
+      // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆
+      if ((item.type === 'select' || item.type === 'radio') && item.linkSubField && item.linkSubField.length > 0) {
+        item.linkSubField = item.linkSubField.filter(_item => _inputfields.includes(_item))
+      }
+      if (item.linkSubField && item.linkSubField.length === 0) {
+        item.linkSubField = null
       }
 
       let newval = ''
 
-      if (item.type === 'linkMain' && BData && BData.hasOwnProperty(item.field)) {
-        newval = BData[item.field]
-      } else if (item.type !== 'linkMain' && _readin && !/^date/.test(item.type) && this.props.data && this.props.data.hasOwnProperty(item.field)) {
-        newval = this.props.data[item.field]
+      if (item.type === 'linkMain') {
+        newval = BData && BData[item.field] ? BData[item.field] : ''
+      } else if (_readin && !/^date/.test(item.type) && data && data.hasOwnProperty(item.field)) {
+        newval = data[item.field]
       } else if (item.type === 'date') { // 鏃堕棿鎼滅储
-        if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) {
-          newval = this.props.data[item.field]
+        if (_readin && data && data.hasOwnProperty(item.field)) {
+          newval = data[item.field]
         }
         if (newval) {
           newval = moment(newval, 'YYYY-MM-DD')
@@ -155,8 +136,8 @@
           newval = null
         }
       } else if (item.type === 'datemonth') {
-        if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) {
-          newval = this.props.data[item.field]
+        if (_readin && data && data.hasOwnProperty(item.field)) {
+          newval = data[item.field]
         }
         if (newval) {
           newval = moment(newval, 'YYYY-MM')
@@ -168,26 +149,27 @@
           newval = null
         }
       } else if (item.type === 'datetime') {
-        if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) {
-          newval = this.props.data[item.field]
+        if (_readin && data && data.hasOwnProperty(item.field)) {
+          newval = data[item.field]
         }
         if (newval) {
           newval = moment(newval, 'YYYY-MM-DD HH:mm:ss')
           newval = newval.format('YYYY-MM-DD HH:mm:ss') === 'Invalid date' ? '' : newval
         }
         if (!newval && item.initval) {
-          newval = moment().subtract(item.initval, 'days')
+          newval = moment(moment().subtract(item.initval, 'days').format('YYYY-MM-DD') + ' 00:00:00', 'YYYY-MM-DD HH:mm:ss')
         } else if (!newval) {
           newval = null
         }
       }
 
-      // 鍔犲瘑瀛楁锛岃В瀵嗗鐞�
-      if (item.type === 'textarea' && item.encryption === 'true' && newval !== '') {
-        try {
-          newval = window.decodeURIComponent(window.atob(newval))
-        } catch (e) {
-          console.warn(e)
+      if (item.type === 'switch' && newval !== '') { // 寮�鍏冲彧鎺ユ敹鍥哄畾鍊�
+        if (newval !== item.closeVal && newval !== item.openVal) {
+          newval = ''
+        } else if (newval === item.openVal) {
+          newval = true
+        } else {
+          newval = false
         }
       }
 
@@ -206,165 +188,369 @@
         item.supvalue = supvals
       }
 
+      if (linkFields[item.field]) {
+        item.linkFields = linkFields[item.field]
+      }
+      supItemVal[item.field] = item.initval
+
+      if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && item.resourceType === '1') {
+        deForms.push(item)
+      } else if (['select', 'link', 'radio'].includes(item.type) && item.resourceType !== '1') { // 閫変腑绗竴椤�
+        if (typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) {
+          item.initval = item.options[0] ? item.options[0].Value : ''
+        }
+      }
+
       return item
     })
 
     formlist = formlist.map(item => {
       if (item.type === 'link') {
-        let supItem = formlist.filter(form => form.field === item.linkField)[0]
+        item.supInitVal = ''
 
-        // 鍏宠仈鏄剧ず鍒椾腑鐨勫瓧娈靛�硷紝閫氳繃璇ュ�艰繃婊や笅鎷夐�夐」
-        if (!supItem && data && data.hasOwnProperty(item.linkField)) {
-          supItem = {initval: data[item.linkField]}
+        if (supItemVal[item.linkField]) {
+          item.supInitVal = supItemVal[item.linkField]
+        } else if (data && data.hasOwnProperty(item.linkField)) {
+          item.supInitVal = data[item.linkField]
         }
         
-        if (!supItem) {
-          notification.warning({
-            top: 92,
-            message: '鏈煡璇㈠埌琛ㄥ崟銆�' + item.label + '銆嬪叧鑱斿瓧娈碉紒',
-            duration: 5
-          })
-          item.supInitVal = ''
-        } else {
-          item.supInitVal = supItem.initval
-          item.options = item.oriOptions.filter(option => option.parentId === supItem.initval)
-        }
+        item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '')
       }
-
       return item
     })
 
     this.setState({
-      readtype: readtype,
-      datatype: datatype,
-      readin: readin,
-      fieldlen: fieldlen,
-      encrypts: encrypts,
-      intercepts: intercepts,
-      formlist: formlist
+      readin,
+      writein,
+      readtype,
+      datatype,
+      fieldlen,
+      intercepts,
+      formlist
     }, () => {
       if (action.setting && action.setting.focus) {
-        try {
-          let _form = document.getElementById('main-form-box')
-          let _item = _form.getElementsByTagName('input')
-          _item = [..._item]
-          _item.forEach(input => {
-            if (!input || input.id !== action.setting.focus) return
-            input.select()
-          })
-        } catch {
-          console.warn('focus error锛�')
-        }
+        this.selectInput(action.setting.focus, 'init')
       }
       // 鐢ㄦ潵鏇存柊state锛岄槻姝㈠彈鎺ц〃鍗曞垵濮嬫椂涓嶆樉绀�
       this.setState({
         loaded: true
       })
-      this.improveActionForm()
+      this.improveActionForm(deForms)
     })
+  }
+
+  selectInput = (selectId, type) => {
+    try {
+      let _form = document.getElementById('main-form-box')
+      let _inputs = _form.getElementsByTagName('input')
+      _inputs = [..._inputs]
+      _inputs.forEach(input => {
+        if (!input || input.id !== selectId) return
+
+        if (input.className === 'ant-select-search__field' && type !== 'init') {
+          let div = input.parentNode
+          while (div && div.parentNode) {
+            div = div.parentNode
+            if (div.id === selectId) {
+              div && div.click && div.click()
+              div = null
+            }
+          }
+        } else if (input.select) {
+          input.select()
+        } else if (input.focus) {
+          input.focus()
+        }
+      })
+    } catch {
+      console.warn('focus error锛�')
+    }
   }
 
   /**
    * @description 鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅
    */
-  improveActionForm = () => {
+  improveActionForm = (deForms) => {
+    const { BID, menuType } = this.props
     const { formlist } = this.state
+
+    if (deForms.length === 0) {
+      return
+    } else if (menuType !== 'HS' && options.sysType === 'local' && !window.GLOB.systemType) {
+      this.improveSimpleActionForm(deForms)
+      return
+    }
+
     let deffers = []
+    let mainItems = []  // 浜戠鎴栧崟鐐规暟鎹�
+    let localItems = [] // 鏈湴鏁版嵁
 
-    formlist.forEach(item => {
-      if (!['select', 'link', 'multiselect'].includes(item.type) || item.resourceType !== '1') return
-
-      let param = {
-        func: 'sPC_Get_SelectedList',
-        LText: item.data_sql,
-        obj_name: 'data',
-        arr_field: item.arr_field
+    deForms.forEach(item => {
+      if (item.database === 'sso') {
+        mainItems.push(`select '${item.field}' as obj_name,'${item.arr_field}' as arr_field,'${item.base_sql}' as LText`)
+      } else {
+        localItems.push(`select '${item.field}' as obj_name,'${item.arr_field}' as arr_field,'${item.base_sql}' as LText`)
       }
+    })
+    
+    if (menuType !== 'HS' && window.GLOB.systemType !== 'production') {
+      localItems = [...localItems, ...mainItems]
+      mainItems = []
+    }
 
-      if (this.props.BID) {
-        param.BID = this.props.BID
-      }
+    // 鏈湴璇锋眰
+    let param = {
+      func: 'sPC_Get_SelectedList',
+      LText: localItems.join(' union all '),
+      obj_name: '',
+      arr_field: '',
+      table_type: 'Y'
+    }
 
-      param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
+    if (BID) {
+      param.BID = BID
+    }
+
+    if (param.LText) {
+      param.LText = Utils.formatOptions(param.LText)
+      param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
       param.secretkey = Utils.encrypt(param.LText, param.timestamp)
 
-      if (this.props.menuType === 'HS') { // 浜戠鏁版嵁楠岃瘉
-        param.open_key = Utils.encrypt(param.secretkey, param.timestamp, true)
+      if (menuType === 'HS') { // 浜戠鏁版嵁楠岃瘉
+        param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
       }
 
       deffers.push(
         new Promise(resolve => {
-          Api.getSystemCacheConfig(param, item.database === 'sso').then(res => {
-            res.$search = item
+          Api.getSystemCacheConfig(param).then(res => {
+            if (!res.status) {
+              notification.warning({
+                top: 92,
+                message: res.message,
+                duration: 5
+              })
+            }
             resolve(res)
           })
         })
-      ) 
-    })
+      )
+    }
 
-    if (deffers.length === 0) return
+    // 绯荤粺璇锋眰
+    let mainparam = {
+      func: 'sPC_Get_SelectedList',
+      LText: mainItems.join(' union all '),
+      obj_name: '',
+      arr_field: '',
+      table_type: 'Y'
+    }
 
-    let _field = {}
-    let error = ''
-    Promise.all(deffers).then(result => {
-      result.forEach(res => {
-        if (res.status) {
-          let options = res.data.map(cell => {
-            let item = {
-              key: Utils.getuuid(),
-              Value: cell[res.$search.valueField],
-              Text: cell[res.$search.valueText]
-            }
+    if (BID) {
+      mainparam.BID = BID
+    }
 
-            if (res.$search.type === 'link') {
-              item.parentId = cell[res.$search.linkField]
-            } else if (res.$search.type === 'select' && res.$search.linkSubField && res.$search.linkSubField.length > 0) {
-              res.$search.linkSubField.forEach(_field => {
-                item[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : ''
-              })
-            }
+    if (mainparam.LText) {
+      mainparam.LText = Utils.formatOptions(mainparam.LText)
+      mainparam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
+      mainparam.secretkey = Utils.encrypt(mainparam.LText, mainparam.timestamp)
 
-            return item
-          })
-
-          _field[res.$search.uuid] = options
-        } else {
-          error = res
+      if (menuType === 'HS') { // 浜戠鏁版嵁楠岃瘉
+        mainparam.open_key = Utils.encryptOpenKey(mainparam.secretkey, mainparam.timestamp)
+        if (options.cloudServiceApi) {
+          mainparam.rduri = options.cloudServiceApi
+          mainparam.userid = sessionStorage.getItem('CloudUserID') || ''
+          mainparam.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
         }
-      })
-
-      if (error) {
-        notification.warning({
-          top: 92,
-          message: error.message,
-          duration: 5
-        })
+      } else if (window.GLOB.mainSystemApi) {
+        mainparam.rduri = window.GLOB.mainSystemApi
       }
 
+      deffers.push(
+        new Promise(resolve => {
+          Api.getSystemCacheConfig(mainparam).then(res => {
+            if (!res.status) {
+              notification.warning({
+                top: 92,
+                message: res.message,
+                duration: 5
+              })
+            }
+            resolve(res)
+          })
+        })
+      )
+    }
+
+    Promise.all(deffers).then(response => {
+      let result = {...response[0], ...(response[1] || {})}
+
+      delete result.ErrCode
+      delete result.ErrMesg
+      delete result.message
+      delete result.status
+
       let _formlist = formlist.map(item => {
-        if (item.type === 'select' || item.type === 'link' || item.type === 'multiselect') {
-          if (item.resourceType === '1' && _field.hasOwnProperty(item.uuid)) {
-            item.oriOptions = [...item.oriOptions, ..._field[item.uuid]]
-          }
+        if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
+          let options = []
+          result[item.field].forEach(cell => {
+            let _cell = { key: Utils.getuuid() }
+
+            if (item.type !== 'checkcard') {
+              _cell.Value = cell[item.valueField]
+              _cell.Text = cell[item.valueText]
+              if ((!_cell.Value && _cell.Value !== 0) || (!_cell.Text && _cell.Text !== 0)) return
+            } else {
+              _cell.$value = cell[item.valueField]
+              _cell = {..._cell, ...cell}
+              if (!_cell.$value && _cell.$value !== 0) return
+            }
+    
+            if (item.type === 'link') {
+              _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField]
+            } else if (item.linkSubField) {
+              item.linkSubField.forEach(_field => {
+                _cell[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : ''
+              })
+            }
+    
+            options.push(_cell)
+          })
+
+          item.oriOptions = [...item.oriOptions, ...options]
         }
         return item
       })
-  
-      _formlist = _formlist.map(item => {
-        if (item.type === 'link') {
-          if (item.supInitVal) {
-            item.options = item.oriOptions.filter(option => option.parentId === item.supInitVal)
-          } else {
-            item.options = item.oriOptions
-          }
-        } else if (item.type === 'select' || item.type === 'multiselect') {
-          item.options = item.oriOptions
-        }
-        return item
-      })
+      let values = []
 
       this.setState({
-        formlist: _formlist
+        formlist: _formlist.map(item => {
+          if (item.type === 'link') {
+            item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '')
+          } else if (['select', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type)) {
+            item.options = item.oriOptions
+          }
+          if (['select', 'link', 'radio'].includes(item.type) && typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { // 閫変腑绗竴椤�
+            item.initval = item.options[0] ? item.options[0].Value : ''
+            values.push({field: item.field, value: item.initval})
+          }
+          return item
+        })
+      }, () => {
+        if (values.length === 0) return
+        let fieldsvalue = {}
+        values.forEach(item => {
+          if (this.props.form.getFieldValue(item.field) !== undefined) {
+            fieldsvalue[item.field] = item.value
+          }
+        })
+        this.props.form.setFieldsValue(fieldsvalue)
+      })
+    })
+  }
+
+  /**
+   * @description 娴嬭瘯绯荤粺鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅
+   */
+  improveSimpleActionForm = (deForms) => {
+    const { formlist } = this.state
+
+    let deffers = deForms.map(form => {
+      let param = {
+        func: 'sPC_Get_SelectedList',
+        LText: form.data_sql,
+        obj_name: form.field,
+        arr_field: form.arr_field
+      }
+  
+      if (this.props.BID) {
+        param.BID = this.props.BID
+      }
+  
+      param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
+      param.secretkey = Utils.encrypt(param.LText, param.timestamp)
+  
+      return (
+        new Promise(resolve => {
+          Api.getSystemCacheConfig(param).then(res => {
+            if (!res.status) {
+              notification.warning({
+                top: 92,
+                message: res.message,
+                duration: 5
+              })
+            }
+            resolve(res)
+          })
+        })
+      )
+    })
+
+    Promise.all(deffers).then(response => {
+      let result = {}
+      response.forEach(res => {
+        result = {...result, ...res}
+      })
+      
+      delete result.ErrCode
+      delete result.ErrMesg
+      delete result.message
+      delete result.status
+
+      let _formlist = formlist.map(item => {
+        if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
+          let options = []
+          result[item.field].forEach(cell => {
+            let _cell = { key: Utils.getuuid() }
+
+            if (item.type !== 'checkcard') {
+              _cell.Value = cell[item.valueField]
+              _cell.Text = cell[item.valueText]
+              if ((!_cell.Value && _cell.Value !== 0) || (!_cell.Text && _cell.Text !== 0)) return
+            } else {
+              _cell.$value = cell[item.valueField]
+              _cell = {..._cell, ...cell}
+              if (!_cell.$value && _cell.$value !== 0) return
+            }
+    
+            if (item.type === 'link') {
+              _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField]
+            } else if (item.linkSubField) {
+              item.linkSubField.forEach(_field => {
+                _cell[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : ''
+              })
+            }
+    
+            options.push(_cell)
+          })
+
+          item.oriOptions = [...item.oriOptions, ...options]
+        }
+        return item
+      })
+      let values = []
+
+      this.setState({
+        formlist: _formlist.map(item => {
+          if (item.type === 'link') {
+            item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '')
+          } else if (['select', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type)) {
+            item.options = item.oriOptions
+          }
+          if (['select', 'link', 'radio'].includes(item.type) && typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { // 閫変腑绗竴椤�
+            item.initval = item.options[0] ? item.options[0].Value : ''
+            values.push({field: item.field, value: item.initval})
+          }
+          return item
+        })
+      }, () => {
+        if (values.length === 0) return
+        let fieldsvalue = {}
+        values.forEach(item => {
+          if (this.props.form.getFieldValue(item.field) !== undefined) {
+            fieldsvalue[item.field] = item.value
+          }
+        })
+        this.props.form.setFieldsValue(fieldsvalue)
       })
     })
   }
@@ -377,7 +563,7 @@
       formlist = formlist.map(item => {
         if (item.type === 'link' && item.linkField === supfield.field) {
           
-          item.options = item.oriOptions.filter(option => option.parentId === supfield.initval)
+          item.options = item.oriOptions.filter(option => option.ParentID === supfield.initval || option.Value === '')
           item.initval = item.options[0] ? item.options[0].Value : ''
 
           if (this.props.form.getFieldValue(item.field) !== undefined) {
@@ -397,16 +583,16 @@
     }
   }
 
-  selectChange = (_field, value, option) => {
+  selectChange = (_field, value) => {
     const { record } = this.state
     let formlist = fromJS(this.state.formlist).toJS()
-
     let subfields = []
     let fieldsvalue = {}
     let _record = {}
+
     formlist = formlist.map(item => {
       if (item.type === 'link' && item.linkField === _field.field) {
-        item.options = item.oriOptions.filter(option => option.parentId === value)
+        item.options = item.oriOptions.filter(option => option.ParentID === value || option.Value === '')
         item.initval = item.options[0] ? item.options[0].Value : ''
 
         if (this.props.form.getFieldValue(item.field) !== undefined) {
@@ -419,43 +605,44 @@
     })
     
     // 琛ㄥ崟鍒囨崲鏃讹紝鏇存柊鍏宠仈瀛楁
-    if (_field.type === 'select' && _field.linkSubField && _field.linkSubField.length > 0 && option.props.data) {
-      let _data = option.props.data
-      _field.linkSubField.forEach(subfield => {
-        if (this.props.form.getFieldValue(subfield) !== undefined) {
-          fieldsvalue[subfield] = (_data[subfield] || _data[subfield] === 0) ? _data[subfield] : ''
-        } else {
-          _record[subfield] = (_data[subfield] || _data[subfield] === 0) ? _data[subfield] : ''
-        }
-      })
+    if (_field.linkSubField) {
+      let _data = _field.options.filter(op => op.Value === value)[0]
+
+      if (_data) {
+        _field.linkSubField.forEach(subfield => {
+          if (this.props.form.getFieldValue(subfield) !== undefined) {
+            fieldsvalue[subfield] = (_data[subfield] || _data[subfield] === 0) ? _data[subfield] : ''
+          } else {
+            _record[subfield] = (_data[subfield] || _data[subfield] === 0) ? _data[subfield] : ''
+          }
+        })
+      }
     }
 
     if (subfields.length === 0) {
-      if (Object.keys(fieldsvalue).length > 0) {
-        this.props.form.setFieldsValue(fieldsvalue)
-      }
-      if (Object.keys(_record).length > 0) {
-        this.setState({
-          record: {...record, ..._record}
-        })
-      }
+      this.props.form.setFieldsValue(fieldsvalue)
+      this.setState({
+        record: {...record, ..._record}
+      })
     } else {
       let result = this.resetform(formlist, subfields, 0, fieldsvalue)
 
-      if (Object.keys(result.fieldsvalue).length > 0) {
-        this.props.form.setFieldsValue(fieldsvalue)
-      }
-
-      let _param = {
-        formlist: result.formlist
-      }
-
-      if (Object.keys(_record).length > 0) {
-        _param.record = {...record, ..._record}
-      }
-
-      this.setState(_param)
+      this.props.form.setFieldsValue(fieldsvalue)
+      this.setState({
+        formlist: result.formlist,
+        record: {...record, ..._record}
+      })
     }
+
+    this.setState({}, () => {
+      if (!_field.enter || _field.enter === 'false') return
+
+      if (_field.enter === 'tab') {
+        this.selectInput(_field.tabField)
+      } else if (_field.enter === 'sub') {
+        this.handleSubmit()
+      }
+    })
   }
 
   handleConfirmPassword = (rule, value, callback, item) => {
@@ -468,30 +655,81 @@
         callback(item.label + '鏈�澶у�间负 ' + item.max)
       }
     }
-
     callback()
   }
 
-  getFields(formlist) {
+  handleChange = (e, item) => {
+    let val = e.target.value
+
+    if (item.enter === 'false') return
+    if (!val || !/\n/ig.test(val)) return
+    if (item.enter === 'tab') {
+      this.selectInput(item.tabField)
+    } else {
+      this.handleSubmit(e)
+      this.selectInput(item.tabField || item.field)
+    }
+  }
+
+  handleInputSubmit = (e, item) => {
+    if (item.enter === 'false') return
+    if (item.enter === 'tab') {
+      this.selectInput(item.tabField)
+    } else {
+      this.handleSubmit(e)
+      this.selectInput(item.tabField || item.field)
+    }
+  }
+
+  getFields() {
     const { getFieldDecorator } = this.props.form
-    const { cols } = this.state
+    const { formlist } = this.state
 
     const fields = []
+    let filtration = {}
 
     formlist.forEach((item, index) => {
-      if (item.type === 'title') {
+      if ((!item.field && item.type !== 'split' && item.type !== 'hint') || item.hidden === 'true' || item.type === 'funcvar') return
+      if (item.supField) { // 澶氬眰琛ㄥ崟鎺у埗
+        let _supVal = this.props.form.getFieldValue(item.supField)
+
+        if (_supVal === undefined && filtration[item.supField]) {
+          _supVal = filtration[item.supField]
+        }
+
+        if (item.supvalue.includes(_supVal)) {
+          let _subVal = this.props.form.getFieldValue(item.field)
+          filtration[item.field] = _subVal === undefined ? item.initval : _subVal
+        } else {
+          return
+        }
+      }
+
+      if (item.type === 'split') {
         fields.push(
           <Col span={24} key={index}>
             <p>{item.label}</p>
           </Col>
         )
+      } else if (item.type === 'hint') {
+        fields.push(
+          <Col span={item.span || 24} key={index}>
+            <Form.Item colon={!!item.label} label={item.label || ' '} labelCol={item.labelCol} className="hint">
+              <div className="message">{item.message}</div>
+            </Form.Item>
+          </Col>
+        )
       } else if (item.type === 'text') {
         let _max = item.fieldlength || 50
-        let _rules = []
+        let _rules = [{
+          pattern: /^[^']*$/ig,
+          message: formRule.input.quotemsg
+        }]
+
         if (item.regular) {
           if (item.regular === 'number') {
             _rules = [{
-              pattern: /^[0-9]*$/ig,
+              pattern: /^[0-9.-]*$/ig,
               message: formRule.input.numbermsg
             }]
           } else if (item.regular === 'letter') {
@@ -511,11 +749,17 @@
             }]
           }
         }
+
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
-                initialValue: item.initval,
+                initialValue: item.initval + '',
                 rules: [
                   {
                     required: item.required === 'true',
@@ -527,19 +771,23 @@
                   },
                   ..._rules
                 ]
-              })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} onPressEnter={this.handleSubmit} />)}
+              })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} onChange={(e) => this.handleChange(e, item)} onPressEnter={(e) => this.handleInputSubmit(e, item)} />)}
             </Form.Item>
           </Col>
         )
       } else if (item.type === 'number') { // 鏁板瓧
-        let _initval = item.initval
         let precision = (item.decimal || item.decimal === 0) ? item.decimal : null
 
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
-                initialValue: _initval,
+                initialValue: item.initval,
                 rules: [
                   {
                     required: true,
@@ -551,21 +799,138 @@
                 ]
               })(
                 precision === null ?
-                <InputNumber disabled={item.readonly === 'true'} onPressEnter={this.handleSubmit} /> :
-                <InputNumber precision={precision} disabled={item.readonly === 'true'} onPressEnter={this.handleSubmit} />
+                <InputNumber disabled={item.readonly === 'true'} onPressEnter={(e) => this.handleInputSubmit(e, item)} /> :
+                <InputNumber precision={precision} disabled={item.readonly === 'true'} onPressEnter={(e) => this.handleInputSubmit(e, item)} />
                 )}
             </Form.Item>
           </Col>
         )
-      } else if (item.type === 'select' || item.type === 'link') { // 涓嬫媺鎼滅储
-        let hasSubField = false
-        if (item.linkSubField && item.linkSubField.length > 0) { // 瀛樺湪鍏宠仈瀛楁锛屾暟鎹瓨鍌�
-          hasSubField = true
-        }
+      } else if (item.type === 'color') { // 棰滆壊閫夋嫨
+        fields.push(
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
+              {getFieldDecorator(item.field, {
+                initialValue: item.initval || 'transparent',
+                rules: [
+                  {
+                    required: item.required === 'true',
+                    message: this.props.dict['form.required.select'] + item.label + '!'
+                  }
+                ]
+              })(
+                <ColorSketch />
+              )}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'checkcard') { // 澶氶�夋
+        fields.push(
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            } className="checkcard">
+              {getFieldDecorator(item.field, {
+                initialValue: item.initval,
+                rules: [
+                  {
+                    required: item.required === 'true',
+                    message: this.props.dict['form.required.select'] + item.label + '!'
+                  }
+                ]
+              })(<CheckCard card={item} />)}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'switch') { // 澶氶�夋
+        fields.push(
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
+              {getFieldDecorator(item.field, {
+                initialValue: item.initval,
+                rules: [
+                  {
+                    required: item.required === 'true',
+                    message: this.props.dict['form.required.select'] + item.label + '!'
+                  }
+                ]
+              })(<CustomSwitch Item={item} />)}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'checkbox') { // 澶氶�夋
+        let _initval = item.initval ? item.initval.split(',').filter(Boolean) : []
         
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
+              {getFieldDecorator(item.field, {
+                initialValue: _initval,
+                rules: [
+                  {
+                    required: item.required === 'true',
+                    message: this.props.dict['form.required.select'] + item.label + '!'
+                  }
+                ]
+              })(
+                <Checkbox.Group disabled={item.readonly === 'true'}>
+                  {item.options.map(option => <Checkbox key={option.key} title={option.Text} value={option.Value}>{option.Text}</Checkbox>)}
+                </Checkbox.Group>
+              )}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'radio') { // 鍗曢�夋
+        fields.push(
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
+              {getFieldDecorator(item.field, {
+                initialValue: item.initval,
+                rules: [
+                  {
+                    required: item.required === 'true',
+                    message: this.props.dict['form.required.select'] + item.label + '!'
+                  }
+                ]
+              })(
+                <Radio.Group disabled={item.readonly === 'true'} onChange={(e) => {this.selectChange(item, e.target.value)}}>
+                  {item.options.map(option => <Radio key={option.key} value={option.Value}>{option.Text}</Radio>)}
+                </Radio.Group>
+              )}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'select' || item.type === 'link') { // 涓嬫媺鎼滅储
+        fields.push(
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
                 initialValue: item.initval,
                 rules: [
@@ -577,12 +942,13 @@
               })(
                 <Select
                   showSearch
+                  allowClear={true}
                   filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
-                  onChange={(value, option) => {this.selectChange(item, value, option)}}
+                  onSelect={(value) => {this.selectChange(item, value)}}
                   disabled={item.readonly === 'true'}
                 >
                   {item.options.map(option =>
-                    <Select.Option id={option.key} data={hasSubField ? option : ''} title={option.Text} key={option.key} value={option.Value}>{option.Text}</Select.Option>
+                    <Select.Option id={option.key} title={option.Text} key={option.key} value={option.Value}>{option.Text}</Select.Option>
                   )}
                 </Select>
               )}
@@ -592,8 +958,13 @@
       } else if (item.type === 'multiselect') { // 澶氶��
         let _initval = item.initval ? item.initval.split(',').filter(Boolean) : []
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
                 initialValue: _initval,
                 rules: [
@@ -619,8 +990,13 @@
         )
       } else if (item.type === 'date') { // 鏃堕棿鎼滅储
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
                 initialValue: item.initval,
                 rules: [
@@ -637,8 +1013,13 @@
         )
       } else if (item.type === 'datemonth') {
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
                 initialValue: item.initval,
                 rules: [
@@ -655,8 +1036,13 @@
         )
       } else if (item.type === 'datetime') {
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
                 initialValue: item.initval,
                 rules: [
@@ -692,8 +1078,13 @@
         }
 
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
                 initialValue: filelist,
                 rules: [
@@ -703,15 +1094,20 @@
                   }
                 ]
               })(
-                <FileUpload maxFile={item.maxfile} fileType={item.fileType || 'text'} />
+                <FileUpload accept={item.suffix} maxFile={item.maxfile} fileType={item.fileType || 'text'} />
               )}
             </Form.Item>
           </Col>
         )
       } else if (item.type === 'linkMain') {
         fields.push(
-          <Col span={24 / cols} key={index}>
-            <Form.Item label={item.label}>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
                 initialValue: item.initval,
                 rules: [
@@ -728,15 +1124,21 @@
         // 鍑芥暟鍙橀噺瀛楁锛岄粯璁や笉鏄剧ず
       } else if (item.type === 'textarea') {
         let _max = item.fieldlength || 512
-        let _labelcol = cols !== 3 ? 8 / cols : 3
-        let _wrapcol = cols !== 3 ? 16 + (cols - 1) * 4 : 21
-        let _style = {}
-        if (cols === 2 || cols === 4) {
-          _style.paddingLeft = '7px'
+        let _rules = []
+        if (item.encryption !== 'true') {
+          _rules = [{
+            pattern: /^[^']*$/ig,
+            message: formRule.input.quotemsg
+          }]
         }
         fields.push(
-          <Col span={24} key={index} className="textarea-row" style={{..._style}}>
-            <Form.Item label={item.label} labelCol={{xs: { span: 24 }, sm: { span: _labelcol }}} wrapperCol={ {xs: { span: 24 }, sm: { span: _wrapcol }} }>
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : item.label
+            }>
               {getFieldDecorator(item.field, {
                 initialValue: item.initval,
                 rules: [
@@ -747,9 +1149,37 @@
                   {
                     max: _max,
                     message: formRule.input.formMessage.replace('@max', _max)
+                  },
+                  ..._rules
+                ]
+              })(<CustomTextArea Item={item} />)}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'brafteditor') {
+        let _max = item.fieldlength || 512
+
+        fields.push(
+          <Col span={item.span || 24} key={index}>
+            <Form.Item extra={item.extra || null} labelCol={item.labelCol} label={item.hidelabel !== 'true' && item.tooltip ?
+              <Tooltip placement="topLeft" title={item.tooltip}>
+                <Icon type="question-circle" />
+                {item.label}
+              </Tooltip> : (item.hidelabel !== 'true' ? item.label : '')
+            }>
+              {getFieldDecorator(item.field, {
+                initialValue: item.initval || '',
+                rules: [
+                  {
+                    required: item.required === 'true',
+                    message: this.props.dict['form.required.input'] + item.label + '!'
+                  },
+                  {
+                    max: _max,
+                    message: formRule.input.formMessage.replace('@max', _max)
                   }
                 ]
-              })(<TextArea autosize={{ minRows: 2, maxRows: item.maxRows || 6 }} disabled={item.readonly === 'true'} />)}
+              })(<Editor Item={item}/>)}
             </Form.Item>
           </Col>
         )
@@ -760,8 +1190,7 @@
   }
 
   handleConfirm = () => {
-    const { record, intercepts } = this.state
-    let _encrypts = fromJS(this.state.encrypts).toJS()
+    const { record, intercepts, writein } = this.state
     let _format = {
       date: 'YYYY-MM-DD',
       datemonth: 'YYYY-MM',
@@ -783,6 +1212,7 @@
                 type: 'funcvar',
                 readonly: 'true',
                 readin: false,
+                writein: writein[item.field],
                 fieldlen: this.state.fieldlen[item.field],
                 key: item.field,
                 value: ''
@@ -791,13 +1221,13 @@
               let _val = item.initval
               if (record.hasOwnProperty(item.field)) {
                 _val = record[item.field]
-                _encrypts = _encrypts.filter(_field => _field !== item.field) // 闅愯棌瀛楁锛屼笉鍙備笌鍔犲瘑澶勭悊
               }
               
               _item = {
                 type: this.state.datatype[item.field],
                 readonly: this.state.readtype[item.field],
                 readin: this.state.readin[item.field],
+                writein: writein[item.field],
                 fieldlen: this.state.fieldlen[item.field],
                 key: item.field,
                 value: _val
@@ -807,6 +1237,7 @@
                 type: this.state.datatype[item.field],
                 readonly: this.state.readtype[item.field],
                 readin: this.state.readin[item.field],
+                writein: writein[item.field],
                 fieldlen: this.state.fieldlen[item.field],
                 key: item.field,
                 value: item.initval
@@ -815,12 +1246,18 @@
 
             if (!_item) return
 
-            if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') {
-              if (_item.value && _item.value.format) {
-                _item.value = _item.value.format(_format[item.type])
-              } else if (!_item.value) {
+            if (_item.value === undefined) {
+              _item.value = ''
+            } else if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') {
+              if (!_item.value) {
                 _item.value = ''
+              } else if (_item.value.format) {
+                _item.value = _item.value.format(_format[item.type])
               }
+            } else if (item.type === 'text' && _item.value && typeof(_item.value) === 'string') { // 鐗规畩瀛楁鏇挎崲
+              _item.value = _item.value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey)
+              _item.value = _item.value.replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || ''))
+              _item.value = _item.value.replace(/^(\s*)@bid@(\s*)$/ig, (this.props.BID || ''))
             }
 
             search.push(_item)
@@ -833,6 +1270,7 @@
                   type: this.state.datatype[key],
                   readonly: this.state.readtype[key],
                   readin: this.state.readin[key],
+                  writein: writein[key],
                   fieldlen: this.state.fieldlen[key],
                   key: key,
                   value: ''
@@ -842,19 +1280,20 @@
             }
 
             let _value = ''
-            if (this.state.datatype[key] === 'datetime') {
+            let _type = this.state.datatype[key]
+            if (_type === 'datetime') {
               _value = values[key] ? moment(values[key]).format('YYYY-MM-DD HH:mm:ss') : ''
-            } else if (this.state.datatype[key] === 'datemonth') {
+            } else if (_type === 'datemonth') {
               _value = values[key] ? moment(values[key]).format('YYYY-MM') : ''
-            } else if (this.state.datatype[key] === 'date') {
+            } else if (_type === 'date') {
               _value = values[key] ? moment(values[key]).format('YYYY-MM-DD') : ''
-            } else if (this.state.datatype[key] === 'number') {
+            } else if (_type === 'number') {
               _value = values[key]
 
-            } else if (this.state.datatype[key] === 'multiselect') {
+            } else if (_type === 'multiselect' || _type === 'checkbox') {
               _value = values[key] ? values[key].join(',') : ''
 
-            } else if (this.state.datatype[key] === 'fileupload') {
+            } else if (_type === 'fileupload') {
               let vals = []
 
               if (values[key] && values[key].length > 0) {
@@ -868,43 +1307,35 @@
               }
 
               _value = vals.join(',')
-            } else if (this.state.datatype[key] === 'text' || this.state.datatype[key] === 'textarea') {
+            } else if (_type === 'text' || _type === 'textarea') {
               _value = values[key].replace(/\t*|\v*/g, '') // 鍘婚櫎鍒惰〃绗�
 
               if (intercepts.includes(key)) {              // 鍘婚櫎棣栧熬绌烘牸
                 _value = _value.replace(/(^\s*|\s*$)/g, '')
               }
+              if (_type === 'text' && _value) { // 鐗规畩瀛楁鏇挎崲
+                _value = _value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey)
+                _value = _value.replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || ''))
+                _value = _value.replace(/^(\s*)@bid@(\s*)$/ig, (this.props.BID || ''))
+              }
             } else {
               _value = values[key]
-              
+            }
+
+            if (_value === undefined) {
+              _value = ''
             }
 
             search.push({
               type: this.state.datatype[key],
               readonly: this.state.readtype[key],
               readin: this.state.readin[key],
+              writein: writein[key],
               fieldlen: this.state.fieldlen[key],
               key: key,
               value: _value
             })
           })
-
-          // 鍚湁鍔犲瘑瀛楁鏃讹紝瀵硅〃鍗曞�艰繘琛屽姞瀵�
-          if (_encrypts && _encrypts.length > 0) {
-            search = search.map(item => {
-              let _value = item.value
-              if (_encrypts.includes(item.key)) {
-                try {
-                  _value = window.btoa(window.encodeURIComponent(_value))
-                } catch (e) {
-                  console.warn(e)
-                }
-              }
-              item.value = _value
-
-              return item
-            })
-          }
 
           resolve(search)
         } else {
@@ -915,69 +1346,14 @@
   }
 
   handleSubmit = (e) => {
-    e.preventDefault()
+    e && e.preventDefault()
     this.props.inputSubmit()
   }
 
   render() {
-    const { formlist, cols } = this.state
-    const formItemLayout = {
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 8 }
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 16 }
-      }
-    }
-
-    let _formlist = []
-    let rowIndex = 0
-    let colIndex = 0
-    let filtration = {}
-
-    // 琛ㄥ崟鍒嗚锛岄伩鍏嶆帓鍒椾笉鏁撮綈
-    formlist.forEach(item => {
-      if ((!item.field && item.type !== 'title') || item.hidden === 'true' || item.type === 'funcvar') return
-      if (item.supField) { // 澶氬眰琛ㄥ崟鎺у埗
-        let _supVal = this.props.form.getFieldValue(item.supField)
-
-        if (_supVal === undefined && filtration[item.supField]) {
-          _supVal = filtration[item.supField]
-        }
-
-        if (item.supvalue.includes(_supVal)) {
-          let _subVal = this.props.form.getFieldValue(item.field)
-          filtration[item.field] = _subVal === undefined ? item.initval : _subVal
-        } else {
-          return
-        }
-      }
-
-      _formlist[rowIndex] = _formlist[rowIndex] || []
-      if (item.type === 'textarea' || item.type === 'title') {
-        if (colIndex === 0) {
-          _formlist[rowIndex].push(item)
-        } else {
-          rowIndex++
-          _formlist[rowIndex] = [item]
-        }
-        rowIndex++
-        colIndex = 0
-      } else {
-        _formlist[rowIndex].push(item)
-        colIndex++
-      }
-      if (colIndex >= cols) {
-        rowIndex++
-        colIndex = 0
-      }
-    })
-
     return (
-      <Form {...formItemLayout} className="ant-advanced-search-form main-form-field" id="main-form-box">
-        {_formlist.map((formrow, index) => <Row key={index} gutter={24}>{this.getFields(formrow)}</Row>)}
+      <Form className="main-form-field" id="main-form-box">
+        <Row gutter={24}>{this.getFields()}</Row>
       </Form>
     )
   }

--
Gitblit v1.8.0