From 0c439ced2c97905cb2b02f5f689a37b19369fb8a Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 22 七月 2022 15:00:58 +0800
Subject: [PATCH] 2022-07-22

---
 src/tabviews/zshare/mutilform/index.jsx |  450 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 327 insertions(+), 123 deletions(-)

diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx
index 184bddf..1496a1f 100644
--- a/src/tabviews/zshare/mutilform/index.jsx
+++ b/src/tabviews/zshare/mutilform/index.jsx
@@ -1,7 +1,8 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { fromJS } from 'immutable'
-import { Form, Row, Col, notification, Tooltip, Icon } from 'antd'
+import { Form, Row, Col, notification, Tooltip, Rate } from 'antd'
+import { QuestionCircleOutlined, StarFilled } from '@ant-design/icons'
 import moment from 'moment'
 
 import Api from '@/api'
@@ -13,6 +14,7 @@
 import MKInput from './mkInput'
 import MKNumberInput from './mkNumberInput'
 import MKSelect from './mkSelect'
+import MkIcon from '@/components/mk-icon'
 import './index.scss'
 
 const MKCheckCard = asyncComponent(() => import('./mkCheckCard'))
@@ -23,13 +25,13 @@
 const MKTextArea = asyncComponent(() => import('./mkTextArea'))
 const MKFileUpload = asyncComponent(() => import('../fileupload'))
 const MKColor = asyncComponent(() => import('./mkColor'))
+const MkFormula = asyncComponent(() => import('./mkFormula'))
+const MkCascader = asyncComponent(() => import('./mkCascader'))
 const MKEditor = asyncComponent(() => import('@/components/editor'))
 
 class MainSearch extends Component {
   static propTpyes = {
-    menuType: PropTypes.object,  // 鑿滃崟绫诲瀷锛屾槸鍚︿负HS
     action: PropTypes.object,    // 鎸夐挳淇℃伅銆佽〃鍗曞垪琛�
-    dict: PropTypes.object,      // 瀛楀吀椤�
     data: PropTypes.any,         // 琛ㄦ牸鏁版嵁
     BID: PropTypes.any,          // 涓昏〃ID
     BData: PropTypes.any,        // 涓昏〃鏁版嵁
@@ -55,25 +57,54 @@
     let check = action.setting.formType === 'check'
 
     formlist = formlist.filter(item => {
-      if (item.supField && item.supvalue) { // 澶氬眰琛ㄥ崟鎺у埗
+      if (item.supField) { // 澶氬眰琛ㄥ崟鎺у埗
         let supvals = []
-        item.supvalue.split(',').forEach(val => {
-          supvals.push(val)
-          if (/^([-]?(0|[1-9][0-9]*)(\.[0-9]+)?)$/.test(val)) {
-            supvals.push(+val)
-          }
-        })
+        if (item.supvalue) {
+          item.supvalue.split(',').forEach(val => {
+            supvals.push(val)
+            if (/^([-]?(0|[1-9][0-9]*)(\.[0-9]+)?)$/.test(val)) {
+              supvals.push(+val)
+            }
+          })
+        } else {
+          supvals.push('')
+        }
         controlFields[item.supField] = controlFields[item.supField] || []
         controlFields[item.supField].push({field: item.field, values: supvals})
       }
-      if (item.type === 'link') {
+      // if (item.type === 'link') {
+      if (item.linkField) {
         linkFields[item.linkField] = linkFields[item.linkField] || []
         linkFields[item.linkField].push({field: item.field, uuid: item.uuid})
       }
 
-      if (item.type === 'split' || item.type === 'hint') return true
+      if (item.style) {
+        delete item.style.marginTop
+        delete item.style.marginBottom
+        delete item.style.marginLeft
+        delete item.style.marginRight
+      }
 
-      if (!item.field || !['text', 'number', 'switch', 'select', 'link', 'linkMain', 'funcvar', 'date', 'datemonth', 'datetime', 'radio', 'checkbox', 'checkcard', 'fileupload', 'textarea', 'multiselect', 'brafteditor', 'color'].includes(item.type)) return false
+      if (item.type === 'split' || item.type === 'formula') return true
+      if (item.type === 'hint') {
+        if (item.field && data && data[item.field]) {
+          item.message = data[item.field]
+        }
+        delete item.field
+        return true
+      } else if (item.type === 'date') { // 鏃堕棿鎼滅储
+        item.precision = item.precision || 'day'
+      } else if (item.type === 'datetime') {
+        item.type = 'date'
+        item.precision = 'second'
+      }
+
+      if (!item.field || !['text', 'number', 'switch', 'rate', 'select', 'link', 'cascader', 'linkMain', 'funcvar', 'date', 'datemonth', 'radio', 'checkbox', 'checkcard', 'fileupload', 'textarea', 'multiselect', 'brafteditor', 'color'].includes(item.type)) return false
+
+      if (/^\s+$/.test(item.label)) {
+        item.style = item.style || {}
+        item.style.color = 'transparent'
+      }
 
       // 鏁版嵁鑷姩濉厖
       let readin = item.readin !== 'false'
@@ -93,12 +124,13 @@
         item.initval = item.initval || 0
       }
 
-      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type)) {
+      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type)) {
         item.options = item.options || []
-        item.options = item.options.map(cell => {
+        item.options = item.options.filter(cell => {
           cell.value = cell.Value
           cell.label = cell.Text
-          return cell
+
+          return !cell.Hide
         })
         if (item.setAll === 'true' && ['select', 'link', 'radio'].includes(item.type)) { // 娣诲姞绌哄��
           item.options.unshift({
@@ -119,12 +151,24 @@
       if (item.type === 'linkMain') {
         newval = BData && BData[item.field] ? BData[item.field] : '$empty'
       } else if (item.type === 'date') { // 鏃堕棿鎼滅储
+        let format = 'YYYY-MM-DD'
+        let _format = 'YYYY-MM-DD HH:mm:ss'
+        if (item.precision === 'day') {
+          _format = 'YYYY-MM-DD'
+        } else if (item.precision === 'hour') {
+          format = 'YYYY-MM-DD HH'
+        } else if (item.precision === 'minute') {
+          format = 'YYYY-MM-DD HH:mm'
+        } else if (item.precision === 'second') {
+          format = 'YYYY-MM-DD HH:mm:ss'
+        }
+
         if (newval !== '$empty') {
-          newval = moment(newval, 'YYYY-MM-DD').format('YYYY-MM-DD')
+          newval = moment(newval, format).format(_format)
           newval = newval === 'Invalid date' ? '$empty' : newval
         }
         if (newval === '$empty' && item.initval) {
-          newval = moment().subtract(item.initval, 'days').format('YYYY-MM-DD')
+          newval = moment().subtract(item.initval, 'days').format(_format)
         }
       } else if (item.type === 'datemonth') {
         if (newval !== '$empty') {
@@ -134,14 +178,18 @@
         if (newval === '$empty' && item.initval) {
           newval = moment().subtract(item.initval, 'month').format('YYYY-MM')
         }
-      } else if (item.type === 'datetime') {
-        if (newval !== '$empty') {
-          newval = moment(newval, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss')
-          newval = newval === 'Invalid date' ? '$empty' : newval
-        }
-        if (newval === '$empty' && item.initval) {
-          newval = moment().subtract(item.initval, 'days').format('YYYY-MM-DD') + ' 00:00:00'
-        }
+      // } else if (item.type === 'datetime') {
+      //   if (newval !== '$empty') {
+      //     newval = moment(newval, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss')
+      //     newval = newval === 'Invalid date' ? '$empty' : newval
+      //   }
+      //   if (newval === '$empty' && item.initval) {
+      //     if (item.initval === '0') {
+      //       newval = moment().format('YYYY-MM-DD HH:mm:ss')
+      //     } else {
+      //       newval = moment().subtract(item.initval, 'days').format('YYYY-MM-DD') + ' 00:00:00'
+      //     }
+      //   }
       } else if (item.type === 'switch') { // 寮�鍏冲彧鎺ユ敹鍥哄畾鍊�
         if (newval !== '$empty' && (newval === item.closeVal || newval === item.openVal)) {
 
@@ -158,8 +206,26 @@
         item.initval = ''
       }
 
-      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type) && item.resourceType === '1') {
+      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && item.resourceType === '1') {
         deForms.push(item)
+      } else if (item.type === 'rate') {
+        item.rateCount = item.rateCount || 5
+        item.allowHalf = item.allowHalf === 'true'
+
+        if (item.allowHalf) {
+          item.initval = parseFloat(item.initval)
+          if (item.initval % 0.5 !== 0) {
+            item.initval = parseInt(item.initval)
+          }
+        } else {
+          item.initval = parseInt(item.initval)
+        }
+
+        if (isNaN(item.initval) || item.initval < 0) {
+          item.initval = 0
+        } else if (item.initval > item.rateCount) {
+          item.initval = item.rateCount
+        }
       }
 
       if (item.type === 'text') {
@@ -168,14 +234,26 @@
         }
         let _rules = [{
           pattern: /^[^']*$/ig,
-          message: formRule.input.quotemsg
+          message: '涓嶅彲浣跨敤鑻辨枃鐘舵�佺殑鍗曞紩鍙凤紒'
+        }, {
+          validator: (rule, value, callback) => {
+            if (/--/ig.test(value)) {
+              callback('涓嶅彲浣跨敤 -- 锛�')
+            } else {
+              callback()
+            }
+          }
         }, {
           required: item.required === 'true',
           message: item.label + '涓嶅彲涓虹┖!'
-        }, {
-          max: item.fieldlength,
-          message: formRule.input.formMessage.replace('@max', item.fieldlength)
         }]
+
+        if (!item.lenControl || item.lenControl === 'limit') {
+          _rules.push({
+            max: item.fieldlength,
+            message: formRule.input.formMessage.replace('@max', item.fieldlength)
+          })
+        }
 
         if (item.regular) {
           if (item.regular === 'number') {
@@ -190,13 +268,18 @@
             })
           } else if (item.regular === 'letter&number') {
             _rules.push({
-              pattern: /^[a-zA-Z0-9]*$/ig,
-              message: formRule.input.letternummsg
+              pattern: /^[a-zA-Z0-9@_.]*$/ig,
+              message: '璇疯緭鍏ユ暟瀛椼�佸瓧姣嶄互鍙夽_.'
             })
           } else if (item.regular === 'phone') {
             _rules.push({
               pattern: /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/ig,
               message: '璇锋纭緭鍏ユ墜鏈哄彿'
+            })
+          } else if (item.regular === 'email') {
+            _rules.push({
+              pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/,
+              message: '璇锋纭緭鍏ラ偖绠卞湴鍧�'
             })
           } else if (item.regular === 'funcname') {
             _rules.push({
@@ -228,7 +311,15 @@
         if (item.encryption !== 'true') {
           _rules.push({
             pattern: /^[^']*$/ig,
-            message: formRule.input.quotemsg
+            message: '涓嶅彲浣跨敤鑻辨枃鐘舵�佺殑鍗曞紩鍙凤紒'
+          }, {
+            validator: (rule, value, callback) => {
+              if (/--/ig.test(value)) {
+                callback('涓嶅彲浣跨敤 -- 锛�')
+              } else {
+                callback()
+              }
+            }
           })
         }
         item.rules = _rules
@@ -290,6 +381,8 @@
       fieldMap.set(key, supItem)
     })
 
+    let reFieldsVal = null
+
     formlist = formlist.map(cell => {
       if (cell.labelwidth) {
         cell.labelCol = {style: {width: cell.labelwidth + '%'}}
@@ -298,7 +391,36 @@
       if (!cell.field || !fieldMap.has(cell.field)) return cell
       let item = fieldMap.get(cell.field)
 
-      if (item.type === 'link') {
+      // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆
+      if ((['select', 'radio', 'link'].includes(item.type) || (item.type === 'checkcard' && item.multiple !== 'true') || (item.type === 'cascader' && item.resourceType !== '2')) && item.linkSubField) {
+        item.subFields = []
+        item.linkSubField.forEach(m => {
+          let n = fieldMap.get(m)
+          if (n && ['text', 'number', 'textarea'].includes(n.type)) {
+            item.subFields.push({
+              uuid: n.uuid,
+              field: m
+            })
+          }
+        })
+
+        if (item.subFields.length === 0) {
+          item.subFields = null
+        } else if (item.oriOptions.length > 0) {
+          item.oriOptions = item.oriOptions.map(cell => {
+            item.subFields.forEach(m => {
+              cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field]
+            })
+            return cell
+          })
+          
+          item.options = fromJS(item.oriOptions).toJS()
+        }
+        item.linkSubField = null
+      }
+
+      // if (item.type === 'link') {
+      if (item.linkField) {
         item.supInitVal = ''
 
         if (fieldMap.has(item.linkField)) {
@@ -310,7 +432,7 @@
         item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.value === '')
       }
 
-      if (['select', 'link', 'radio'].includes(item.type) && item.resourceType !== '1') { // 閫変腑绗竴椤�
+      if (['select', 'link', 'radio'].includes(item.type) && item.resourceType === '0') { // 閫変腑绗竴椤�
         if (typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) {
           item.initval = item.options[0] ? item.options[0].value : ''
         }
@@ -325,36 +447,46 @@
       if (linkFields[item.field]) {
         item.linkFields = linkFields[item.field]
       }
-
-      // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆
-      if ((['select', 'radio', 'link'].includes(item.type) || (item.type === 'checkcard' && item.multiple !== 'true')) && item.linkSubField) {
-        item.subFields = []
-        item.linkSubField.forEach(m => {
-          let n = fieldMap.get(m)
-          if (n && ['text', 'number', 'textarea'].includes(n.type)) {
-            item.subFields.push({
-              uuid: n.uuid,
-              field: m
-            })
-          }
-        })
-
-        if (item.subFields.length === 0) {
-          item.subFields = null
-        }
-        item.linkSubField = null
-      }
-
+      
       if (item.enter === 'tab' || item.enter === 'sub') {
         if (fieldMap.has(item.tabField)) {
           item.tabUuid = fieldMap.get(item.tabField).uuid
-        } else {
+        } else if (item.enter === 'tab') {
+          item.enter = 'false'
+        } else if (item.enter === 'sub') {
           item.tabUuid = item.uuid
+        }
+      }
+
+      if (item.subFields && item.options.length > 0) {
+        let initval = item.initval
+        if (item.type === 'cascader' && item.separator) {
+          initval = initval.split(item.separator).pop()
+        }
+        // eslint-disable-next-line
+        let option = item.options.filter(cell => initval == cell.value)[0]
+
+        if (option) {
+          reFieldsVal = reFieldsVal || {}
+          item.subFields.forEach(n => {
+            reFieldsVal[n.field] = option[n.field]
+          })
         }
       }
       
       return item
     })
+
+    if (reFieldsVal) {
+      formlist = formlist.map(cell => {
+        if (reFieldsVal[cell.field] === undefined) return cell
+
+        cell.initval = reFieldsVal[cell.field]
+        record[cell.field] = reFieldsVal[cell.field]
+
+        return cell
+      })
+    }
 
     this.record = record
 
@@ -366,7 +498,7 @@
       }
 
       if (deForms.length > 0) {
-        if (this.props.menuType !== 'HS' && options.sysType === 'local' && window.GLOB.systemType !== 'production') {
+        if (!window.GLOB.mkHS && options.sysType === 'local' && window.GLOB.systemType !== 'production') {
           this.improveSimpleActionForm(deForms)
         } else {
           this.improveActionForm(deForms)
@@ -379,11 +511,12 @@
    * @description 鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅
    */
   improveActionForm = (deForms) => {
-    const { BID, menuType } = this.props
+    const { BID, action } = this.props
 
     let deffers = []
     let mainItems = []  // 浜戠鎴栧崟鐐规暟鎹�
     let localItems = [] // 鏈湴鏁版嵁
+    let cache = action.setting.cache !== 'false'
 
     deForms.forEach(item => {
       if (item.database === 'sso') {
@@ -393,7 +526,7 @@
       }
     })
     
-    if (menuType !== 'HS' && options.sysType !== 'local') {
+    if (!window.GLOB.mkHS && options.sysType !== 'local') {
       localItems = [...localItems, ...mainItems]
       mainItems = []
     }
@@ -413,13 +546,13 @@
       param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
       param.secretkey = Utils.encrypt(param.LText, param.timestamp)
 
-      if (menuType === 'HS') { // 浜戠鏁版嵁楠岃瘉
+      if (window.GLOB.mkHS) { // 浜戠鏁版嵁楠岃瘉
         param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
       }
 
       deffers.push(
         new Promise(resolve => {
-          Api.getSystemCacheConfig(param).then(res => {
+          Api.getSystemCacheConfig(param, cache).then(res => {
             if (!res.status) {
               notification.warning({
                 top: 92,
@@ -448,7 +581,7 @@
       mainparam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
       mainparam.secretkey = Utils.encrypt(mainparam.LText, mainparam.timestamp)
 
-      if (menuType === 'HS') { // 浜戠鏁版嵁楠岃瘉
+      if (window.GLOB.mkHS) { // 浜戠鏁版嵁楠岃瘉
         mainparam.open_key = Utils.encryptOpenKey(mainparam.secretkey, mainparam.timestamp)
         if (options.cloudServiceApi) {
           mainparam.rduri = options.cloudServiceApi
@@ -461,7 +594,7 @@
 
       deffers.push(
         new Promise(resolve => {
-          Api.getSystemCacheConfig(mainparam).then(res => {
+          Api.getSystemCacheConfig(mainparam, cache).then(res => {
             if (!res.status) {
               notification.warning({
                 top: 92,
@@ -491,7 +624,9 @@
    * @description 娴嬭瘯绯荤粺鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅
    */
   improveSimpleActionForm = (deForms) => {
-    let deffers = deForms.map(form => {
+    let cache = this.props.action.setting.cache !== 'false'
+
+    let deffers = deForms.map((form, index) => {
       let param = {
         func: 'sPC_Get_SelectedList',
         LText: form.data_sql,
@@ -505,16 +640,18 @@
   
       return (
         new Promise(resolve => {
-          Api.getSystemCacheConfig(param).then(res => {
-            if (!res.status) {
-              notification.warning({
-                top: 92,
-                message: res.message,
-                duration: 5
-              })
-            }
-            resolve(res)
-          })
+          setTimeout(() => {
+            Api.getSystemCacheConfig(param, cache).then(res => {
+              if (!res.status) {
+                notification.warning({
+                  top: 92,
+                  message: res.message,
+                  duration: 5
+                })
+              }
+              resolve(res)
+            })
+          }, index * 30)
         })
       )
     })
@@ -535,8 +672,9 @@
   }
 
   resetFormList = (result) => {
+    let reFieldsVal = null
     let _formlist = fromJS(this.state.formlist).toJS().map(item => {
-      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
+      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
         let options = []
         result[item.field].forEach(cell => {
           let _cell = { key: Utils.getuuid() }
@@ -550,7 +688,7 @@
             _cell = {..._cell, ...cell}
           }
   
-          if (item.type === 'link') {
+          if (item.linkField) {
             _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField]
           }
           if (item.subFields) {
@@ -568,20 +706,53 @@
 
         item.oriOptions = [...item.oriOptions, ...options]
 
-        if (item.type === 'link') {
+        // if (item.type === 'link') {
+        if (item.linkField) {
           item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.value === '')
-        } else if (['select', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type)) {
+        // } else if (['select', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type)) {
+        } else {
           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 : ''
-        this.record[item.field] = item.initval
+        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 : ''
+          this.record[item.field] = item.initval
+        }
+
+        if (item.subFields && item.options.length > 0) {
+          let initval = item.initval
+          if (item.type === 'cascader' && item.separator) {
+            initval = initval.split(item.separator).pop()
+          }
+          // eslint-disable-next-line
+          let option = item.options.filter(cell => initval == cell.value)[0]
+  
+          if (option) {
+            reFieldsVal = reFieldsVal || {}
+            item.subFields.forEach(n => {
+              reFieldsVal[n.field] = option[n.field]
+            })
+          }
+        }
       }
       
       return item
     })
+
+    if (reFieldsVal) {
+      _formlist = _formlist.map((cell, i) => {
+        if (reFieldsVal[cell.field] === undefined) return cell
+
+        cell.initval = reFieldsVal[cell.field]
+        this.record[cell.field] = reFieldsVal[cell.field]
+
+        setTimeout(() => {
+          MKEmitter.emit('mkFC', 'input', cell.uuid, reFieldsVal[cell.field])
+        }, i * 5)
+
+        return cell
+      })
+    }
 
     this.setState({
       formlist: _formlist
@@ -596,51 +767,54 @@
         callback(item.label + '鏈�灏忓�间负 ' + item.min)
       } else if (typeof(item.max) === 'number' && val > item.max) {
         callback(item.label + '鏈�澶у�间负 ' + item.max)
+      } else {
+        callback()
       }
+    } else {
+      callback()
     }
-    callback()
   }
 
   recordChange = (values, item) => {
     this.record = {...this.record, ...values}
 
-    if (item && item.controlFields) {
-      let map = new Map()
-      this.state.formlist.forEach(cell => {
-        if (!cell.field) return
-        map.set(cell.field, cell)
-      })
+    if (!item || !item.controlFields) return
 
-      let reset = (current) => {
-        let val = this.record[current.field]
+    let map = new Map()
+    this.state.formlist.forEach(cell => {
+      if (!cell.field) return
+      map.set(cell.field, cell)
+    })
 
-        current.controlFields.forEach(cell => {
-          let m = map.get(cell.field)
-          m.hidden = current.hidden || !cell.values.includes(val)
+    let reset = (current) => {
+      let val = this.record[current.field]
 
-          if (m.hidden) {
-            m.initval = this.record[m.field]
-          }
+      current.controlFields.forEach(cell => {
+        let m = map.get(cell.field)
+        m.hidden = current.hidden || !cell.values.includes(val)
 
-          map.set(cell.field, m)
+        if (m.hidden) {
+          m.initval = this.record[m.field]
+        }
 
-          if (m.controlFields) {
-            reset(m)
-          }
-        })
-      }
+        map.set(cell.field, m)
 
-      reset(item)
-
-      this.setState({
-        formlist: this.state.formlist.map(cell => {
-          if (cell.field) {
-            return map.get(cell.field)
-          }
-          return cell
-        })
+        if (m.controlFields) {
+          reset(m)
+        }
       })
     }
+
+    reset(item)
+
+    this.setState({
+      formlist: this.state.formlist.map(cell => {
+        if (cell.field) {
+          return map.get(cell.field)
+        }
+        return cell
+      })
+    })
   }
 
   getFields() {
@@ -655,21 +829,31 @@
       if (item.type === 'split') {
         fields.push(
           <Col span={24} key={index}>
-            <p className="mk-form-split-line">{item.label}</p>
+            <p className="mk-form-split-line" style={item.style}>{item.label}</p>
           </Col>
         )
       } else if (item.type === 'hint') {
         fields.push(
           <Col span={item.span || 24} key={index}>
-            <Form.Item className="hint" colon={!!item.label} label={item.label} labelCol={item.labelCol} wrapperCol={item.wrapperCol}>
-              <div className="message">{item.message}</div>
+            <Form.Item className="hint" colon={false} label={item.label ? <span className="mk-form-label" style={item.style}>{item.label}</span> : ' '} labelCol={item.labelCol} wrapperCol={item.wrapperCol}>
+              <div className="message" style={item.style}>{item.message}</div>
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'formula') {
+        fields.push(
+          <Col span={item.span || 24} key={index}>
+            <Form.Item className="hint" colon={false} label={<span className="mk-form-label" style={item.style}>{item.label}</span>} labelCol={item.labelCol} wrapperCol={item.wrapperCol}>
+              <MkFormula config={item} data={this.record}></MkFormula>
             </Form.Item>
           </Col>
         )
       } else {
         let content = null
         let className = ''
-        let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><Icon type="question-circle" />{item.label}</Tooltip> : item.label
+        let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><QuestionCircleOutlined style={{color: '#c49f47', marginRight: '3px'}}/>
+          <span className="mk-form-label" style={item.style}>{item.label}</span>
+        </Tooltip> : <span className="mk-form-label" style={item.style}>{item.label}</span>
       
         if (item.type === 'text' || item.type === 'linkMain') {
           content = (<MKInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit} />)
@@ -677,18 +861,20 @@
           content = (<MKNumberInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit} />)
         } else if (item.type === 'select' || item.type === 'link' || item.type === 'multiselect') {
           content = (<MKSelect config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)} onSubmit={this.props.inputSubmit} />)
+        } else if (item.type === 'cascader') {
+          content = (<MkCascader config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
         } else if (item.type === 'color') {
           content = (<MKColor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
         } else if (item.type === 'checkcard') {
           className = 'checkcard'
           content = (<MKCheckCard config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
         } else if (item.type === 'switch') {
-          content = (<MKSwitch config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
+          content = (<MKSwitch config={item} onChange={(val) => this.recordChange({[item.field]: val}, item)}/>)
         } else if (item.type === 'checkbox') {
           content = (<MKCheckbox config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
         } else if (item.type === 'radio') {
-          content = (<MKRadio config={item} onChange={(val) => this.recordChange({[item.field]: val}, item)}/>)
-        } else if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') {
+          content = (<MKRadio config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
+        } else if (item.type === 'date' || item.type === 'datemonth') {
           content = (<MKDatePicker config={item} onChange={(val) => this.recordChange({[item.field]: val})} />)
         } else if (item.type === 'fileupload') {
           className = item.readonly ? 'readonly' : ''
@@ -696,6 +882,8 @@
           content = (<MKFileUpload config={item} onChange={(val) => this.recordChange({[item.field]: val})} />)
         } else if (item.type === 'textarea') {
           content = (<MKTextArea config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})}/>)
+        } else if (item.type === 'rate') {
+          content = (<Rate count={item.rateCount} disabled={item.readonly} onChange={(val) => this.recordChange({[item.field]: val})} character={item.character ? <MkIcon type={item.character}/> : <StarFilled />} allowHalf={item.allowHalf}/>)
         } else if (item.type === 'brafteditor') {
           content = (<MKEditor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
           label = item.hidelabel !== 'true' ? label : ''
@@ -707,6 +895,7 @@
           <Col span={item.span || 24} key={index}>
             <Form.Item
               label={label}
+              colon={false}
               className={className}
               extra={item.extra || null}
               labelCol={item.labelCol}
@@ -754,13 +943,13 @@
     
           if (item.type === 'funcvar') {
             _item.value = ''
-          } else if (_item.value && (item.type === 'text' || item.type === 'textarea' || item.type === 'linkMain')) {
+          } else if (_item.value && (item.type === 'text' || item.type === 'textarea' || item.type === 'linkMain') && typeof(_item.value) === 'string') {
             _item.value = _item.value.replace(/\t*|\v*/g, '')       // 鍘婚櫎鍒惰〃绗�
     
             if (item.interception === 'true') {           // 鍘婚櫎棣栧熬绌烘牸
               _item.value = _item.value.replace(/(^\s*|\s*$)/g, '')
             }
-            if (item.type === 'text' && typeof(_item.value) === 'string') { // 鐗规畩瀛楁鏇挎崲
+            if (item.type === 'text') { // 鐗规畩瀛楁鏇挎崲
               _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 || ''))
@@ -768,6 +957,17 @@
           } else if (item.type.indexOf('date') > -1) {
             if (item.declareType === 'nvarchar(50)') {
               _item.type = 'text'
+            }
+          } else if (item.declare === 'decimal' && ['select', 'link', 'radio', 'checkcard'].includes(item.type)) {
+            _item.type = 'number'
+            _item.fieldlen = item.decimal || 0
+          }
+
+          if (item.type === 'text' && item.lenControl && item.lenControl !== 'limit') {
+            if (item.lenControl === 'left') {
+              _item.value = _item.value.substr(0, item.fieldlength)
+            } else {
+              _item.value = _item.value.slice(-item.fieldlength)
             }
           }
     
@@ -786,9 +986,13 @@
     if (action.setting && action.setting.align) {
       _align = action.setting.align
     }
+    let space = ' space-normal'
+    if (action.setting && action.setting.verticalSpace) {
+      space = ' space-' + action.setting.verticalSpace
+    }
 
     return (
-      <Form className={'main-form-field ' + _align}>
+      <Form className={'main-form-field ' + _align + space}>
         <Row gutter={24}>{this.getFields()}</Row>
       </Form>
     )

--
Gitblit v1.8.0