From 6d0137932fcc8f9848123743c1aad5cff8172d8a Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期日, 09 二月 2020 13:09:39 +0800
Subject: [PATCH] 2020-02-09

---
 src/tabviews/tableshare/mutilform/index.jsx |  127 ++++++++++++++++++++++++++++++++----------
 1 files changed, 96 insertions(+), 31 deletions(-)

diff --git a/src/tabviews/tableshare/mutilform/index.jsx b/src/tabviews/tableshare/mutilform/index.jsx
index c4ec170..4286fa1 100644
--- a/src/tabviews/tableshare/mutilform/index.jsx
+++ b/src/tabviews/tableshare/mutilform/index.jsx
@@ -23,7 +23,10 @@
   state = {
     datatype: null,
     readtype: null,
-    formlist: []
+    readin: null,
+    fieldlen: null,
+    formlist: [],
+    record: {}
   }
 
   componentDidMount () {
@@ -32,6 +35,8 @@
 
     let datatype = {}
     let readtype = {}
+    let readin = {}
+    let fieldlen = {}
     let formlist = []
     if (action.groups.length > 0) {
       action.groups.forEach(group => {
@@ -45,24 +50,32 @@
           })
         }
 
-        group.sublist.forEach(item => {
-          datatype[item.field] = item.type
-          readtype[item.field] = item.readonly === 'true'
-          formlist.push(item)
-        })
+        formlist.push(...group.sublist)
       })
     } else {
-      formlist = action.fields.map(item => {
-        datatype[item.field] = item.type
-        readtype[item.field] = item.readonly === 'true'
-
-        return item
-      })
+      formlist = action.fields
     }
 
     let _inputfields = formlist.filter(item => item.type === 'text' || item.type === 'number') // 鐢ㄤ簬杩囨护涓嬫媺鑿滃崟鍏宠仈琛ㄥ崟
 
     formlist = formlist.map(item => {
+      let _readin = item.readin !== 'false'
+      if (item.type === 'linkMain' || item.type === 'funcvar') {
+        _readin = false
+      }
+
+      let _fieldlen = item.fieldlength || 50
+      if (item.type === 'textarea' || item.type === 'fileupload') {
+        _fieldlen = item.fieldlength || 512
+      } else if (item.type === 'number') {
+        _fieldlen = (item.decimal || item.decimal === 0) ? item.decimal : 18
+      }
+
+      datatype[item.field] = item.type
+      readtype[item.field] = item.readonly === 'true'
+      readin[item.field] = _readin
+      fieldlen[item.field] = _fieldlen
+
       if (item.type === 'select' || item.type === 'link' || item.type === 'multiselect') {
         if (item.setAll === 'true') {
           item.options.unshift({
@@ -83,10 +96,10 @@
           item.linkSubField = item.linkSubField.filter(_item => _fields.includes(_item))
         }
       }
-
+      
       if (item.type === 'linkMain' && BData && BData.hasOwnProperty(item.field)) {
         item.initval = BData[item.field]
-      } else if (!/^date/.test(item.type) && this.props.data && this.props.data.hasOwnProperty(item.field)) {
+      } else if (_readin && !/^date/.test(item.type) && this.props.data && this.props.data.hasOwnProperty(item.field)) {
         item.initval = this.props.data[item.field]
       }
 
@@ -94,7 +107,7 @@
     })
 
     let error = false
-
+    
     formlist = formlist.map(item => {
       if (item.type === 'link') {
         let supItem = formlist.filter(form => form.field === item.linkField)[0]
@@ -120,10 +133,12 @@
         duration: 10
       })
     }
-    
+
     this.setState({
       readtype: readtype,
       datatype: datatype,
+      readin: readin,
+      fieldlen: fieldlen,
       formlist: formlist
     }, () => {
       if (action.setting && action.setting.focus) {
@@ -161,18 +176,19 @@
     })
 
     if (subfields.length === 0 || index > 6) {
-      this.props.form.setFieldsValue(fieldsvalue)
-      return formlist
+      return {formlist: formlist, fieldsvalue: fieldsvalue}
     } else {
       return this.resetform(formlist, subfields, index, fieldsvalue)
     }
   }
 
   selectChange = (_field, value, option) => {
+    const { record } = this.state
     let formlist = JSON.parse(JSON.stringify(this.state.formlist))
 
     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)
@@ -188,20 +204,41 @@
     // 琛ㄥ崟鍒囨崲鏃讹紝鏇存柊鍏宠仈瀛楁
     if (_field.type === 'select' && _field.linkSubField && _field.linkSubField.length > 0 && option.props.data) {
       let _data = option.props.data
-      let fieldVal = {}
       _field.linkSubField.forEach(subfield => {
-        fieldVal[subfield] = _data[subfield]
+        if (this.props.form.getFieldValue(subfield) !== undefined) {
+          fieldsvalue[subfield] = _data[subfield]
+        } else {
+          _record[subfield] = _data[subfield]
+        }
       })
-      this.props.form.setFieldsValue(fieldVal)
     }
 
-    if (subfields.length === 0) return
+    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}
+        })
+      }
+    } else {
+      let result = this.resetform(formlist, subfields, 0, fieldsvalue)
 
-    formlist = this.resetform(formlist, subfields, 0, fieldsvalue)
+      if (Object.keys(result.fieldsvalue).length > 0) {
+        this.props.form.setFieldsValue(fieldsvalue)
+      }
 
-    this.setState({
-      formlist: formlist
-    })
+      let _param = {
+        formlist: result.formlist
+      }
+
+      if (Object.keys(_record).length > 0) {
+        _param.record = {...record, ..._record}
+      }
+
+      this.setState(_param)
+    }
   }
 
   getFields() {
@@ -330,7 +367,7 @@
         )
       } else if (item.type === 'date') { // 鏃堕棿鎼滅储
         let _initval = this.props.data ? this.props.data[item.field] : ''
-        if (_initval) {
+        if (_initval && this.state.readin[item.field]) {
           _initval = moment(_initval, 'YYYY-MM-DD')
         } else {
           _initval = item.initval ? moment().subtract(item.initval, 'days') : null
@@ -354,7 +391,7 @@
         )
       } else if (item.type === 'datemonth') {
         let _initval = this.props.data ? this.props.data[item.field] : ''
-        if (_initval) {
+        if (_initval && this.state.readin[item.field]) {
           _initval = moment(_initval, 'YYYY-MM')
         } else {
           _initval = item.initval ? moment().subtract(item.initval, 'month') : null
@@ -378,7 +415,7 @@
         )
       } else if (item.type === 'datetime') {
         let _initval = this.props.data ? this.props.data[item.field] : ''
-        if (_initval) {
+        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
@@ -403,7 +440,7 @@
         )
       } else if (item.type === 'fileupload') {
         let filelist = this.props.data ? this.props.data[item.field] : item.initval
-        if (filelist) {
+        if (filelist && this.state.readin[item.field]) {
           try {
             filelist = filelist.split(',').map((url, index) => {
               return {
@@ -417,6 +454,8 @@
           } catch {
             filelist = []
           }
+        } else {
+          filelist = []
         }
 
         fields.push(
@@ -495,6 +534,7 @@
   }
 
   handleConfirm = () => {
+    const { record } = this.state
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
     return new Promise((resolve, reject) => {
       this.props.form.validateFieldsAndScroll((err, values) => {
@@ -508,15 +548,23 @@
               search.push({
                 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]
+              }
               search.push({
                 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
+                value: _val
               })
             }
           })
@@ -530,6 +578,8 @@
               search.push({
                 type: this.state.datatype[key],
                 readonly: this.state.readtype[key],
+                readin: this.state.readin[key],
+                fieldlen: this.state.fieldlen[key],
                 key: key,
                 value: _value
               })
@@ -541,6 +591,8 @@
               search.push({
                 type: this.state.datatype[key],
                 readonly: this.state.readtype[key],
+                readin: this.state.readin[key],
+                fieldlen: this.state.fieldlen[key],
                 key: key,
                 value: _value
               })
@@ -552,6 +604,8 @@
               search.push({
                 type: this.state.datatype[key],
                 readonly: this.state.readtype[key],
+                readin: this.state.readin[key],
+                fieldlen: this.state.fieldlen[key],
                 key: key,
                 value: _value
               })
@@ -559,6 +613,8 @@
               search.push({
                 type: this.state.datatype[key],
                 readonly: this.state.readtype[key],
+                readin: this.state.readin[key],
+                fieldlen: this.state.fieldlen[key],
                 key: key,
                 value: values[key]
               })
@@ -566,6 +622,8 @@
               search.push({
                 type: this.state.datatype[key],
                 readonly: this.state.readtype[key],
+                readin: this.state.readin[key],
+                fieldlen: this.state.fieldlen[key],
                 key: key,
                 value: values[key] ? values[key].join(',') : ''
               })
@@ -585,6 +643,8 @@
               search.push({
                 type: this.state.datatype[key],
                 readonly: this.state.readtype[key],
+                readin: this.state.readin[key],
+                fieldlen: this.state.fieldlen[key],
                 key: key,
                 value: vals.join(',')
               })
@@ -592,6 +652,8 @@
               search.push({
                 type: this.state.datatype[key],
                 readonly: this.state.readtype[key],
+                readin: this.state.readin[key],
+                fieldlen: this.state.fieldlen[key],
                 key: key,
                 value: values[key].replace(/(^\s*|\s*$) | \t* | \v*/ig, '')
               })
@@ -599,11 +661,14 @@
               search.push({
                 type: this.state.datatype[key],
                 readonly: this.state.readtype[key],
+                readin: this.state.readin[key],
+                fieldlen: this.state.fieldlen[key],
                 key: key,
                 value: values[key]
               })
             }
           })
+
           resolve(search)
         } else {
           reject(err)

--
Gitblit v1.8.0