From 5046d0d13dc6a8563b8e54e31913bc44cfa1072f Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 26 四月 2022 19:23:18 +0800
Subject: [PATCH] 2022-04-26

---
 src/tabviews/zshare/mutilform/index.jsx |  271 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 187 insertions(+), 84 deletions(-)

diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx
index 9c61db0..1db51b6 100644
--- a/src/tabviews/zshare/mutilform/index.jsx
+++ b/src/tabviews/zshare/mutilform/index.jsx
@@ -77,9 +77,21 @@
         linkFields[item.linkField].push({field: item.field, uuid: item.uuid})
       }
 
-      if (item.type === 'split' || item.type === 'hint') return true
+      if (item.type === 'split') 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', 'linkMain', 'funcvar', 'date', 'datemonth', 'datetime', 'radio', 'checkbox', 'checkcard', 'fileupload', 'textarea', 'multiselect', 'brafteditor', 'color'].includes(item.type)) return false
+      if (!item.field || !['text', 'number', 'switch', 'rate', 'select', 'link', 'linkMain', 'funcvar', 'date', 'datemonth', 'radio', 'checkbox', 'checkcard', 'fileupload', 'textarea', 'multiselect', 'brafteditor', 'color'].includes(item.type)) return false
 
       // 鏁版嵁鑷姩濉厖
       let readin = item.readin !== 'false'
@@ -101,10 +113,17 @@
 
       if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type)) {
         item.options = item.options || []
-        item.options = item.options.map(cell => {
+        // item.options = item.options.map(cell => {
+        //   cell.value = cell.Value
+        //   cell.label = cell.Text
+
+        //   return 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({
@@ -125,12 +144,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') {
@@ -140,14 +171,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)) {
 
@@ -196,10 +231,14 @@
         }, {
           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') {
@@ -314,6 +353,8 @@
       fieldMap.set(key, supItem)
     })
 
+    let reFieldsVal = null
+
     formlist = formlist.map(cell => {
       if (cell.labelwidth) {
         cell.labelCol = {style: {width: cell.labelwidth + '%'}}
@@ -321,6 +362,34 @@
       }
       if (!cell.field || !fieldMap.has(cell.field)) return cell
       let item = fieldMap.get(cell.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
+        } 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) {
@@ -350,35 +419,7 @@
       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
-        } else if (item.options.length > 0) {
-          item.options = item.options.map(cell => {
-            item.subFields.forEach(m => {
-              cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field]
-            })
-            return cell
-          })
-          
-          item.oriOptions = fromJS(item.options).toJS()
-        }
-        item.linkSubField = null
-      }
-
+      
       if (item.enter === 'tab' || item.enter === 'sub') {
         if (fieldMap.has(item.tabField)) {
           item.tabUuid = fieldMap.get(item.tabField).uuid
@@ -388,9 +429,32 @@
           item.tabUuid = item.uuid
         }
       }
+
+      if (item.subFields && item.options.length > 0) {
+        // eslint-disable-next-line
+        let option = item.options.filter(cell => item.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
 
@@ -576,6 +640,7 @@
   }
 
   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) {
         let options = []
@@ -616,15 +681,42 @@
         } 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) {
+          // eslint-disable-next-line
+          let option = item.options.filter(cell => item.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
@@ -647,43 +739,43 @@
   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() {
@@ -698,21 +790,23 @@
       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 {
         let content = null
         let className = ''
-        let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><QuestionCircleOutlined style={{color: '#c49f47', marginRight: '3px'}}/>{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} />)
@@ -731,7 +825,7 @@
           content = (<MKCheckbox config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
         } else if (item.type === 'radio') {
           content = (<MKRadio config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
-        } else if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') {
+        } 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' : ''
@@ -752,6 +846,7 @@
           <Col span={item.span || 24} key={index}>
             <Form.Item
               label={label}
+              colon={false}
               className={className}
               extra={item.extra || null}
               labelCol={item.labelCol}
@@ -815,6 +910,14 @@
               _item.type = 'text'
             }
           }
+
+          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)
+            }
+          }
     
           search.push(_item)
         })

--
Gitblit v1.8.0