From f448bd7b318f7696c97b392a263bc364700bc8a0 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 09 六月 2020 15:54:45 +0800
Subject: [PATCH] 2020-06-09

---
 src/tabviews/zshare/mutilform/index.jsx |  153 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 96 insertions(+), 57 deletions(-)

diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx
index 5e8fa89..bf40107 100644
--- a/src/tabviews/zshare/mutilform/index.jsx
+++ b/src/tabviews/zshare/mutilform/index.jsx
@@ -21,15 +21,15 @@
   }
 
   state = {
-    cols: 2,
-    datatype: null,
-    readtype: null,
-    readin: null,
-    fieldlen: null,
-    formlist: [],
+    cols: 2,         // 鏄剧ず涓哄灏戝垪
+    datatype: null,  // 鏁版嵁绫诲瀷
+    readtype: null,  // 鏄惁鍙
+    readin: null,    // 琛屾暟鎹槸鍚﹀啓鍏�
+    fieldlen: null,  // 瀛楁闀垮害
+    formlist: [],    // 琛ㄥ崟椤�
     encrypts: [],    // 鍔犲瘑瀛楁
     intercepts: [],  // 鎴彇瀛楁
-    record: {}
+    record: {}       // 璁板綍涓嬫媺琛ㄥ崟鍏宠仈瀛楁锛岀敤浜庢暟鎹啓鍏�
   }
 
   UNSAFE_componentWillMount () {
@@ -81,19 +81,24 @@
     formlist = formlist.map(item => {
       if (item.type === 'title') return item
 
+      // 鍔犲瘑瀛楁
       if (item.type === 'textarea' && item.encryption === 'true') {
         encrypts.push(item.field)
       }
+
+      // 瀛楃鎴彇瀛楁
       if (item.interception === 'true') {
         intercepts.push(item.field)
       }
 
+      // 鏁版嵁鍐欏叆
       let _readin = item.readin !== 'false'
       if (item.type === 'linkMain' || item.type === 'funcvar') {
         _readin = false
       }
 
-      item.initVal = typeof(item.initval) === 'object' ? JSON.parse(JSON.stringify(item.initval)) : item.initval // 鐢ㄤ簬鍙楁帶鍊肩殑琛ㄥ崟锛岄殣钘忔椂浼犻粯璁ゅ��
+      // 鐢ㄤ簬鍙楁帶鍊肩殑琛ㄥ崟锛岄殣钘忔椂浼犻粯璁ゅ��(鏈娇鐢紵)
+      item.initVal = typeof(item.initval) === 'object' ? JSON.parse(JSON.stringify(item.initval)) : item.initval
 
       let _fieldlen = item.fieldlength || 50
       if (item.type === 'textarea' || item.type === 'fileupload' || item.type === 'multiselect') {
@@ -120,22 +125,65 @@
           item.options = [...item.options, ...this.props.configMap[item.uuid]]
         }
 
+        // 淇濆瓨鍒濆鍒楄〃锛岀敤浜庡叧鑱旇彍鍗曟帶鍒�
         item.oriOptions = JSON.parse(JSON.stringify(item.options))
 
+        // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆
         if (item.linkSubField && item.linkSubField.length > 0) {
           let _fields = _inputfields.map(_item => _item.field)
           item.linkSubField = item.linkSubField.filter(_item => _fields.includes(_item))
         }
       }
 
-      let newval = '$$initval$$'
+      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]
+      } else if (item.type === 'date') { // 鏃堕棿鎼滅储
+        if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) {
+          newval = this.props.data[item.field]
+        }
+        if (newval) {
+          newval = moment(newval, 'YYYY-MM-DD')
+          newval = newval.format('YYYY-MM-DD') === 'Invalid date' ? '' : newval
+        }
+        if (!newval && item.initval) {
+          newval = moment().subtract(item.initval, 'days')
+        } else if (!newval) {
+          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 (newval) {
+          newval = moment(newval, 'YYYY-MM')
+          newval = newval.format('YYYY-MM') === 'Invalid date' ? '' : newval
+        }
+        if (!newval && item.initval) {
+          newval = moment().subtract(item.initval, 'month')
+        } else if (!newval) {
+          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 (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')
+        } else if (!newval) {
+          newval = null
+        }
       }
 
-      if (encrypts.includes(item.field) && newval !== '$$initval$$') {
+      // 鍔犲瘑瀛楁锛岃В瀵嗗鐞�
+      if (item.type === 'textarea' && item.encryption === 'true' && newval !== '') {
         try {
           newval = window.decodeURIComponent(window.atob(newval))
         } catch (e) {
@@ -143,10 +191,10 @@
         }
       }
 
-      if (newval !== '$$initval$$') {
-        item.initval = newval
-      }
+      // 璇诲彇琛ㄦ牸鏁版嵁鎴栬鏈夋椂闂寸殑鍒濆鍊�
+      item.initval = newval !== '' ? newval : item.initval
 
+      // 涓嬫媺琛ㄥ崟锛屽瓨鍦ㄤ笂绾ц彍鍗曟椂锛岀敓鎴愭樉绀哄�煎垪琛紝浼樺厛浠ユ暟瀛楀垽鏂�
       if (item.supvalue) {
         let supvals = []
         item.supvalue.split(',').forEach(val => {
@@ -317,9 +365,6 @@
     const fields = []
 
     formlist.forEach((item, index) => {
-      // if ((!item.field && item.type !== 'title') || item.hidden === 'true') return
-      // if (item.supField && !item.supvalue.includes(this.props.form.getFieldValue(item.supField))) return
-
       if (item.type === 'title') {
         fields.push(
           <Col span={24} key={index}>
@@ -459,17 +504,11 @@
           </Col>
         )
       } else if (item.type === 'date') { // 鏃堕棿鎼滅储
-        let _initval = this.props.data ? this.props.data[item.field] : ''
-        if (_initval && this.state.readin[item.field]) {
-          _initval = moment(_initval, 'YYYY-MM-DD')
-        } else {
-          _initval = item.initval ? moment().subtract(item.initval, 'days') : null
-        }
         fields.push(
           <Col span={24 / cols} key={index}>
             <Form.Item label={item.label}>
               {getFieldDecorator(item.field, {
-                initialValue: _initval,
+                initialValue: item.initval,
                 rules: [
                   {
                     required: item.required === 'true',
@@ -483,17 +522,11 @@
           </Col>
         )
       } else if (item.type === 'datemonth') {
-        let _initval = this.props.data ? this.props.data[item.field] : ''
-        if (_initval && this.state.readin[item.field]) {
-          _initval = moment(_initval, 'YYYY-MM')
-        } else {
-          _initval = item.initval ? moment().subtract(item.initval, 'month') : null
-        }
         fields.push(
           <Col span={24 / cols} key={index}>
             <Form.Item label={item.label}>
               {getFieldDecorator(item.field, {
-                initialValue: _initval,
+                initialValue: item.initval,
                 rules: [
                   {
                     required: item.required === 'true',
@@ -507,17 +540,11 @@
           </Col>
         )
       } else if (item.type === 'datetime') {
-        let _initval = this.props.data ? this.props.data[item.field] : ''
-        if (_initval && this.state.readin[item.field]) {
-          _initval = moment(_initval, 'YYYY-MM-DD HH:mm:ss')
-        } else {
-          _initval = item.initval ? moment().subtract(item.initval, 'days') : null
-        }
         fields.push(
           <Col span={24 / cols} key={index}>
             <Form.Item label={item.label}>
               {getFieldDecorator(item.field, {
-                initialValue: _initval,
+                initialValue: item.initval,
                 rules: [
                   {
                     required: item.required === 'true',
@@ -525,7 +552,6 @@
                   }
                 ]
               })(
-                // <DatePicker showTime getCalendarContainer={() => document.getElementById('form-box')} />
                 <DatePicker showTime disabled={item.readonly === 'true'} />
               )}
             </Form.Item>
@@ -620,9 +646,14 @@
   }
 
   handleConfirm = () => {
-    const { record, encrypts, intercepts } = this.state
+    const { record, intercepts } = this.state
+    let _encrypts = JSON.parse(JSON.stringify(this.state.encrypts))
+    let _format = {
+      date: 'YYYY-MM-DD',
+      datemonth: 'YYYY-MM',
+      datetime: 'YYYY-MM-DD HH:mm:ss'
+    }
 
-    let _encrypts = JSON.parse(JSON.stringify(encrypts))
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
     return new Promise((resolve, reject) => {
       this.props.form.validateFieldsAndScroll((err, values) => {
@@ -632,56 +663,63 @@
           this.state.formlist.forEach(item => {
             if (!item.field) return
 
+            let _item = null
             if (item.type === 'funcvar') {
-              search.push({
+              _item = {
                 type: 'funcvar',
                 readonly: 'true',
                 readin: false,
                 fieldlen: this.state.fieldlen[item.field],
                 key: item.field,
                 value: ''
-              })
+              }
             } else if (item.hidden === 'true') {
               let _val = item.initval
               if (record.hasOwnProperty(item.field)) {
                 _val = record[item.field]
-                _encrypts = _encrypts.filter(_field => _field !== item.field)
+                _encrypts = _encrypts.filter(_field => _field !== item.field) // 闅愯棌瀛楁锛屼笉鍙備笌鍔犲瘑澶勭悊
               }
               
-              search.push({
+              _item = {
                 type: this.state.datatype[item.field],
                 readonly: this.state.readtype[item.field],
                 readin: this.state.readin[item.field],
                 fieldlen: this.state.fieldlen[item.field],
                 key: item.field,
                 value: _val
-              })
+              }
             } else if (item.supField && !item.supvalue.includes(this.props.form.getFieldValue(item.supField))) {
-              search.push({
+              _item = {
                 type: this.state.datatype[item.field],
                 readonly: this.state.readtype[item.field],
                 readin: this.state.readin[item.field],
                 fieldlen: this.state.fieldlen[item.field],
                 key: item.field,
                 value: item.initval
-              })
+              }
             }
+
+            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) {
+                _item.value = ''
+              }
+            }
+
+            search.push(_item)
           })
 
           Object.keys(values).forEach(key => {
             let _value = ''
             if (this.state.datatype[key] === 'datetime') {
-              if (values[key]) {
-                _value = moment(values[key]).format('YYYY-MM-DD HH:mm:ss')
-              }
+              _value = values[key] ? moment(values[key]).format('YYYY-MM-DD HH:mm:ss') : ''
             } else if (this.state.datatype[key] === 'datemonth') {
-              if (values[key]) {
-                _value = moment(values[key]).format('YYYY-MM')
-              }
+              _value = values[key] ? moment(values[key]).format('YYYY-MM') : ''
             } else if (this.state.datatype[key] === 'date') {
-              if (values[key]) {
-                _value = moment(values[key]).format('YYYY-MM-DD')
-              }
+              _value = values[key] ? moment(values[key]).format('YYYY-MM-DD') : ''
             } else if (this.state.datatype[key] === 'number') {
               _value = values[key]
 
@@ -723,6 +761,7 @@
             })
           })
 
+          // 鍚湁鍔犲瘑瀛楁鏃讹紝瀵硅〃鍗曞�艰繘琛屽姞瀵�
           if (_encrypts && _encrypts.length > 0) {
             search = search.map(item => {
               let _value = item.value
@@ -769,6 +808,7 @@
     let rowIndex = 0
     let colIndex = 0
 
+    // 琛ㄥ崟鍒嗚锛岄伩鍏嶆帓鍒椾笉鏁撮綈
     formlist.forEach(item => {
       if ((!item.field && item.type !== 'title') || item.hidden === 'true' || item.type === 'funcvar') return
 
@@ -796,7 +836,6 @@
 
     return (
       <Form {...formItemLayout} className="ant-advanced-search-form main-form-field" id="main-form-box">
-        {/* <Row gutter={24}>{this.getFields(formlist)}</Row> */}
         {_formlist.map((formrow, index) => <Row key={index} gutter={24}>{this.getFields(formrow)}</Row>)}
       </Form>
     )

--
Gitblit v1.8.0