From ee32a69f9a7f25c37757325dc28ac7b5127dceca Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 15 十月 2019 22:23:36 +0800
Subject: [PATCH] datamanage-update

---
 src/components/mutilform/index.jsx |  193 ++++++++++++++++++++++++++----------------------
 1 files changed, 104 insertions(+), 89 deletions(-)

diff --git a/src/components/mutilform/index.jsx b/src/components/mutilform/index.jsx
index d0a3e9e..667ec75 100644
--- a/src/components/mutilform/index.jsx
+++ b/src/components/mutilform/index.jsx
@@ -1,42 +1,39 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
-import { Form, Row, Col, Input, Select, DatePicker } from 'antd'
+import { Form, Row, Col, Input, InputNumber, Select, DatePicker } from 'antd'
 import moment from 'moment'
-import Utils from '@/utils/utils.js'
 import './index.scss'
 
-const {MonthPicker, WeekPicker} = DatePicker
 const dateFormat = 'YYYY-MM-DD'
-const weekFormat = 'YYYYMMDD'
-const monthFormat = 'YYYY-MM'
+const timeFormat = 'YYYY-MM-DD HH:mm:ss'
 
 class MainSearch extends Component {
   static propTpyes = {
     formlist: PropTypes.array, // 鎼滅储鏉′欢鍒楄〃
     dict: PropTypes.object, // 瀛楀吀椤�
-    data: PropTypes.object // 琛ㄦ牸鏁版嵁
+    data: PropTypes.any, // 琛ㄦ牸鏁版嵁
+    cols: PropTypes.number
   }
 
   state = {
     formats: null, // 浜嬩欢鏍¢獙瑙勫垯
-    match: null // 鎼滅储鏉′欢鍖归厤瑙勫垯
+    datatype: null
   }
 
   UNSAFE_componentWillMount () {
     let formats = {}
-    let match = {}
+    let datatype = {}
     this.props.formlist.forEach(item => {
-      if (item.Type === 'date') {
-        // formats[item.FieldName] = dateFormat
-        formats[item.FieldName] = weekFormat
-      } else if (item.ID === 'WHE1400200905') {
-        formats[item.FieldName] = monthFormat
+      if (item.InputType === 'date') {
+        formats[item.FieldName] = dateFormat
+      } else if (item.InputType === 'datetime') {
+        formats[item.FieldName] = timeFormat
       }
-      match[item.FieldName] = item.Op
+      datatype[item.FieldName] = item.InputType
     })
     this.setState({
       formats: formats,
-      match: match
+      datatype: datatype
     })
   }
 
@@ -44,31 +41,61 @@
     const { getFieldDecorator } = this.props.form
     const fields = []
     this.props.formlist.forEach((item, index) => {
-      if (item.InputType === 'text' || item.InputType === 'string') { // 鏂囨湰鎼滅储
+      if (item.Hide !== 'false') return // input闅愯棌
+
+      let validate = item.Validate ? JSON.parse(item.Validate) : {} // 妫�楠屾槸鍚﹀繀濉�
+      let _required = validate.required || false
+      if (item.InputType === 'text') { // 鏂囨湰鎼滅储
         fields.push(
-          <Col span={12} key={index}>
+          <Col span={24 / this.props.cols} key={index}>
             <Form.Item label={item.Label}>
               {getFieldDecorator(item.FieldName, {
-                initialValue: this.props.data[item.FieldName],
+                initialValue: this.props.data ? this.props.data[item.FieldName] : item.InitVal,
                 rules: [
                   {
-                    required: item.required,
+                    required: _required,
                     message: this.props.dict['main.form.required.input'] + item.Label + '!'
                   }
                 ]
-              })(<Input placeholder="" autoComplete="off" disabled={item.ReadOnly === 'true'} />)}
+              })(<Input placeholder="" autoComplete="off" disabled={item.readonly} />)}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.InputType === 'spinner') { // 鏁板瓧
+        validate.min = (validate.min || validate.min === 0) ? validate.min : -Infinity
+        validate.max = (validate.max || validate.max === 0) ? validate.max : Infinity
+        validate.precision = (validate.precision || validate.precision === 0) ? validate.precision : ''
+        let _initval = (this.props.data ? this.props.data[item.FieldName] : item.InitVal) || 0
+        let model = <InputNumber initialValue={_initval} disabled={item.readonly} min={validate.min} max={validate.max} />
+
+        if (validate.precision === +validate.precision) { // 鏁版嵁绮惧害
+          model = <InputNumber initialValue={_initval} disabled={item.readonly} min={validate.min} max={validate.max} precision={validate.precision} />
+        }
+        
+        fields.push(
+          <Col span={24 / this.props.cols} key={index}>
+            <Form.Item label={item.Label}>
+              {getFieldDecorator(item.FieldName, {
+                initialValue: _initval,
+                rules: [
+                  {
+                    required: _required,
+                    message: this.props.dict['main.form.required.input'] + item.Label + '!'
+                  }
+                ]
+              })(model)}
             </Form.Item>
           </Col>
         )
       } else if (item.InputType === 'select') { // 涓嬫媺鎼滅储
         fields.push(
-          <Col span={12} key={index}>
+          <Col span={24 / this.props.cols} key={index}>
             <Form.Item label={item.Label}>
               {getFieldDecorator(item.FieldName, {
-                initialValue: this.props.data[item.FieldName],
+                initialValue: this.props.data ? this.props.data[item.FieldName] : item.InitVal,
                 rules: [
                   {
-                    required: item.required,
+                    required: _required,
                     message: this.props.dict['main.form.required.select'] + item.Label + '!'
                   }
                 ]
@@ -76,6 +103,7 @@
                 <Select
                   showSearch
                   filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
+                  getPopupContainer={() => document.getElementById('form-box')}
                 >
                   {item.DynOptions.map(option =>
                     <Select.Option id={option.id} title={option.text} key={option.id} value={option.id}>{option.text}</Select.Option>
@@ -86,37 +114,43 @@
           </Col>
         )
       } else if (item.InputType === 'date') { // 鏃堕棿鎼滅储
-        if (item.ID === 'WHE14002009024') {
-          fields.push(
-            <Col span={12} key={index}>
-              <Form.Item label={item.Label}>
-                {getFieldDecorator(item.FieldName, {initialValue: moment('2019-09-14', dateFormat) })(
-                  <DatePicker format={dateFormat} />
-                )}
-              </Form.Item>
-            </Col>
-          )
-        } else if (item.ID === 'WHE1400200905') {
-          fields.push(
-            <Col span={12} key={index}>
-              <Form.Item label={item.Label}>
-                {getFieldDecorator(item.FieldName, {initialValue: moment('2019-09', monthFormat) })(
-                  <MonthPicker format={monthFormat} />
-                )}
-              </Form.Item>
-            </Col>
-          )
-        } else if (item.ID === 'WHE1400200902') {
-          fields.push(
-            <Col span={12} key={index}>
-              <Form.Item label={item.Label}>
-                {getFieldDecorator(item.FieldName, {initialValue: moment('20190906', weekFormat) })(
-                  <WeekPicker />
-                )}
-              </Form.Item>
-            </Col>
-          )
-        }
+        let _initval = this.props.data ? this.props.data[item.FieldName] : item.InitVal
+        fields.push(
+          <Col span={24 / this.props.cols} key={index}>
+            <Form.Item label={item.Label}>
+              {getFieldDecorator(item.FieldName, {
+                initialValue: _initval ? moment(_initval, dateFormat) : null,
+                rules: [
+                  {
+                    required: _required,
+                    message: this.props.dict['main.form.required.select'] + item.Label + '!'
+                  }
+                ]
+              })(
+                <DatePicker getCalendarContainer={() => document.getElementById('form-box')} format={dateFormat} />
+              )}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.InputType === 'datetime') {
+        let _initval = this.props.data ? this.props.data[item.FieldName] : item.InitVal
+        fields.push(
+          <Col span={24 / this.props.cols} key={index}>
+            <Form.Item label={item.Label}>
+              {getFieldDecorator(item.FieldName, {
+                initialValue: _initval ? moment(_initval, timeFormat) : null,
+                rules: [
+                  {
+                    required: _required,
+                    message: this.props.dict['main.form.required.select'] + item.Label + '!'
+                  }
+                ]
+              })(
+                <DatePicker showTime format={timeFormat} />
+              )}
+            </Form.Item>
+          </Col>
+        )
       }
     })
     
@@ -128,7 +162,21 @@
     return new Promise((resolve, reject) => {
       this.props.form.validateFieldsAndScroll((err, values) => {
         if (!err) {
-          resolve(values)
+          let formdata = {}
+          Object.keys(values).forEach(key => {
+            if (values[key] && typeof(values[key]) === 'object') {
+              formdata[key] = moment(values[key]).format(this.state.formats[key])
+            } else if (values[key] || values[key] === 0) {
+              if (this.state.datatype[key] === 'spinner') {
+                formdata[key] = parseFloat(values[key])
+              } else {
+                formdata[key] = values[key].replace(/\t|\v|\n|\r/g,'')
+              }
+            } else {
+              formdata[key] = ''
+            }
+          })
+          resolve(formdata)
         } else {
           reject(err)
         }
@@ -139,39 +187,6 @@
   handleReset = () => {
     // 閲嶇疆
     this.props.form.resetFields()
-  }
-
-  getFieldsValues = (searches) => {
-    // 鑾峰彇鎼滅储鏉′欢鍊�
-    let search = []
-    Object.keys(searches).forEach(key => {
-      if (searches[key] && typeof(searches[key]) === 'object') {
-        if (this.state.formats[key] === weekFormat) {
-          search.push({
-            type: 'date',
-            key: key,
-            value: moment(searches[key]).startOf('week').format(this.state.formats[key]) + ' ' + moment(searches[key]).endOf('week').format(this.state.formats[key]),
-            op: this.state.match[key]
-          })
-        } else {
-          search.push({
-            type: 'date',
-            key: key,
-            value: moment(searches[key]).format(this.state.formats[key]),
-            op: this.state.match[key]
-          })
-        }
-      } else if (searches[key] && searches[key] !== '-1') {
-        search.push({
-          type: 'text',
-          key: key,
-          value: searches[key],
-          op: this.state.match[key]
-        })
-      }
-    })
-    search = Utils.jointsearchkey(search)
-    this.props.refreshdata(search)
   }
 
   render() {
@@ -186,7 +201,7 @@
       }
     }
     return (
-      <Form {...formItemLayout} className="ant-advanced-search-form">
+      <Form {...formItemLayout} className="ant-advanced-search-form" id="form-box">
         <Row gutter={24}>{this.getFields()}</Row>
       </Form>
     )

--
Gitblit v1.8.0