From 871597aaf2c838946723ee44fc7fa12487b56d34 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 22 一月 2025 15:14:25 +0800
Subject: [PATCH] 2025-01-22

---
 src/components/normalform/modalform/index.jsx |  194 +++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 157 insertions(+), 37 deletions(-)

diff --git a/src/components/normalform/modalform/index.jsx b/src/components/normalform/modalform/index.jsx
index 5915aaf..5b1cb47 100644
--- a/src/components/normalform/modalform/index.jsx
+++ b/src/components/normalform/modalform/index.jsx
@@ -17,18 +17,23 @@
 const MKCheckbox = asyncComponent(() => import('./mkCheckbox'))
 const StyleInput = asyncComponent(() => import('./styleInput'))
 const MKFileUpload = asyncComponent(() => import('@/tabviews/zshare/fileupload'))
-const MKColor = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkColor'))
+const MkPrintTemps = asyncComponent(() => import('@/menu/components/share/actioncomponent/actionform/mkPrintTemps'))
+const MKColor = asyncComponent(() => import('@/mob/colorsketch'))
+// const MKColor = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkColor'))
 const MkEditIcon = asyncComponent(() => import('@/components/mkIcon'))
 const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent'))
+const CodeMirror = asyncComponent(() => import('@/templates/zshare/codemirror'))
 
 class ModalForm extends Component {
   static propTpyes = {
-    formlist: PropTypes.array,   // 琛ㄥ崟鍒楄〃
-    inputSubmit: PropTypes.func  // input鍥炶溅鎻愪氦
+    formlist: PropTypes.array,
+    inputSubmit: PropTypes.func,
+    transVals: PropTypes.func,
   }
 
   state = {
     formlist: [],    // 琛ㄥ崟椤�
+    formId: ''
   }
 
   record = {}
@@ -37,6 +42,15 @@
     let record = {}
     let controlFields = {}
     let fieldMap = new Map()
+    let formId = (() => {
+      let uuid = []
+      let _options = '0123456789abcdefghigklmnopqrstuv'
+      for (let i = 0; i < 19; i++) {
+        uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1))
+      }
+      uuid = uuid.join('')
+      return uuid
+    })()
 
     let formlist = this.props.formlist.filter(item => {
       if (item.controlFields) { // 澶氬眰琛ㄥ崟鎺у埗
@@ -45,18 +59,25 @@
       
       item.hidden = false
 
+      if (item.forbid && item.del) return false
+
       if (item.forbid) {
         item.hidden = true
       }
       if (item.options) {
         item.oriOptions = fromJS(item.options).toJS()
       }
+      item.$formId = formId
 
       if (item.type === 'text') {
         let _rules = [{
           required: item.required,
           message: item.label + '涓嶅彲涓虹┖!'
         }]
+
+        if (item.rules) {
+          _rules.push(...item.rules)
+        }
         
         item.rules = _rules
       } else if (item.type === 'number') {
@@ -64,7 +85,7 @@
           required: item.required,
           message: item.label + '涓嶅彲涓虹┖!'
         }, {
-          validator: (rule, value, callback) => this.handleConfirmPassword(rule, value, callback, item)
+          validator: (rule, value, callback) => this.checkNumber(rule, value, callback, item)
         }]
       } else if (item.type === 'textarea') {
         item.rules = [
@@ -100,29 +121,36 @@
       if (!fieldMap.has(key)) return
 
       let supItem = fieldMap.get(key)
+      let supval = supItem.initval
+
+      if (supval && JSON.stringify(supval) === '[]') {
+        supval = ''
+      }
+
       let fields = []
-      
       controlFields[key].forEach(item => {
         if (!fieldMap.has(item.field)) return
 
         let cell = fieldMap.get(item.field)
 
-        if (cell.hidden) return
+        cell.$ctrls = cell.$ctrls || []
+        cell.$ctrls.push(key)
 
-        if (cell.skip && supItem.forbid) { // 涓婄骇琛ㄥ崟绂佺敤鏃讹紝姝よ〃鍗曚笉鍙楁帶鍒�
-
+        if (cell.hidden) {
+          
         } else if (supItem.hidden) {
           cell.hidden = true
-        } else if (supItem.type === 'checkbox') {
-          let vals = [...supItem.initval, ...item.values]
+        } else if (item.notNull) {
+          cell.hidden = !supval
+        } else if (supItem.type === 'checkbox' || supItem.type === 'multiselect') {
+          let vals = [...(supval || []), ...item.values]
           if (vals.length === new Set(vals).size) {
             cell.hidden = true
           }
-        } else if (item.notNull) {
-          cell.hidden = !supItem.initval || JSON.stringify(supItem.initval) === '[]'
-        } else if (!item.values.includes(supItem.initval)) {
+        } else if (!item.values.includes(supval)) {
           cell.hidden = true
         }
+
         fieldMap.set(item.field, cell)
 
         fields.push(item)
@@ -136,10 +164,14 @@
     formlist = formlist.map(cell => {
       let item = fieldMap.get(cell.field)
 
+      if (item.$ctrls && item.$ctrls.length === 1) {
+        delete item.$ctrls
+      }
+
       if (item.linkField) {
         let supInitVal = fieldMap.get(item.linkField).initval || ''
         
-        item.options = item.oriOptions.filter(option => option.ParentID === supInitVal)
+        item.options = item.oriOptions.filter(option => option.ParentID === supInitVal || option.ParentID === '')
       }
 
       return item
@@ -147,10 +179,10 @@
 
     this.record = record
 
-    this.setState({ formlist })
+    this.setState({ formlist, formId })
   }
 
-  handleConfirmPassword = (rule, value, callback, item) => {
+  checkNumber = (rule, value, callback, item) => {
     let val = parseFloat(value)
 
     if (!isNaN(val)) {
@@ -166,7 +198,13 @@
   recordChange = (values, item) => {
     this.record = {...this.record, ...values}
 
-    if (item && item.controlFields) {
+    if (!item) return
+
+    if (item.$trans) {
+      this.props.transVals && this.props.transVals(values, item.field)
+    }
+    
+    if (item.controlFields) {
       let map = new Map()
       this.state.formlist.forEach(cell => {
         if (!cell.field) return
@@ -176,22 +214,52 @@
       let reset = (current) => {
         let val = this.record[current.field]
 
+        if (val && JSON.stringify(val) === '[]') {
+          val = ''
+        }
+
         current.controlFields.forEach(cell => {
           let m = map.get(cell.field)
 
           if (current.hidden) {
             m.hidden = true
-          } else if (current.type === 'checkbox') {
-            let vals = [...val, ...cell.values]
+          } else if (cell.notNull) {
+            m.hidden = !val
+          } else if (current.type === 'checkbox' || current.type === 'multiselect') {
+            let vals = [...(val || []), ...cell.values]
             if (vals.length !== new Set(vals).size) {
               m.hidden = false
             } else {
               m.hidden = true
             }
-          } else if (cell.notNull) {
-            m.hidden = !val || JSON.stringify(val) === '[]'
           } else {
             m.hidden = !cell.values.includes(val)
+          }
+
+          if (!m.hidden && m.$ctrls) {
+            m.$ctrls.forEach(n => {
+              if (n === current.field || m.hidden) return
+
+              let oth = map.get(n)
+              let _val = this.record[n]
+
+              if (_val && JSON.stringify(_val) === '[]') {
+                _val = ''
+              }
+
+              let p = oth.controlFields.filter(q => q.field === m.field)[0]
+
+              if (oth.hidden || (p.notNull && !_val)) {
+                m.hidden = true
+              } else if (oth.type === 'checkbox' || oth.type === 'multiselect') {
+                let _vals = [...(_val || []), ...p.values]
+                if (_vals.length === new Set(_vals).size) {
+                  m.hidden = true
+                }
+              } else if (p.values && !p.values.includes(_val)) {
+                m.hidden = true
+              }
+            })
           }
 
           if (m.hidden) {
@@ -217,12 +285,27 @@
           if (item && item.linkField) {
             let supInitVal = this.record[item.linkField] || ''
             
-            item.options = item.oriOptions.filter(option => option.ParentID === supInitVal)
+            item.options = item.oriOptions.filter(option => option.ParentID === supInitVal || option.ParentID === '')
           }
 
           return item || cell
         })
       })
+    } else if (item.reset_source) {
+      let reOptions = item.callback(this.record)
+      
+      if (reOptions) {
+        this.setState({
+          formlist: this.state.formlist.map(cell => {
+            if (!cell.field || !reOptions[cell.field]) return cell
+  
+            cell.options = reOptions[cell.field]
+            cell.timestamp = new Date().getTime()
+            
+            return cell
+          })
+        })
+      }
     }
   }
 
@@ -236,16 +319,23 @@
       if (item.hidden || item.forbid) return
 
       let content = null
-      let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><QuestionCircleOutlined className="mk-form-tip" />{item.label}</Tooltip> : item.label
+      let label = item.label
+      if (item.tooltip) {
+        if (item.toolWidth) {
+          label = <Tooltip placement="topLeft" overlayStyle={{maxWidth: item.toolWidth}} title={<div onClick={(e) => e.stopPropagation()}>{item.tooltip}</div>}><QuestionCircleOutlined className="mk-form-tip" />{item.label}</Tooltip>
+        } else {
+          label = <Tooltip placement="topLeft" title={<div onClick={(e) => e.stopPropagation()}>{item.tooltip}</div>}><QuestionCircleOutlined className="mk-form-tip" />{item.label}</Tooltip>
+        }
+      }
     
       if (item.type === 'text') {
-        content = (<MKEInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit} />)
+        content = (<MKEInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val}, item)} onSubmit={this.props.inputSubmit} />)
       } else if (item.type === 'number') {
-        content = (<MKNumberInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit} />)
+        content = (<MKNumberInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val}, item)} onSubmit={this.props.inputSubmit} />)
       } else if (item.type === 'select' || item.type === 'multiselect') {
         content = (<MKSelect 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})}/>)
+        content = (<MKColor config={item} allowClear={item.allowClear} onChange={(val) => this.recordChange({[item.field]: val})}/>)
       } else if (item.type === 'styleInput') {
         content = (<StyleInput config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
       } else if (item.type === 'radio') {
@@ -264,20 +354,50 @@
         content = (<SourceComponent type="" placement="right"/>)
       } else if (item.type === 'table') {
         content = (<MKTable tip={item.tip || ''} columns={item.columns || []} actions={item.actions || []}/>)
+      } else if (item.type === 'hint') {
+        fields.push(
+          <Col span={24} key={index}>
+            <div style={{color: '#1890ff', borderBottom: '1px solid #e9e9e9', marginBottom: '15px', paddingLeft: '10px'}}>{item.label}</div>
+          </Col>
+        )
+        return
+      } else if (item.type === 'printTemps') {
+        content = <MkPrintTemps onChange={(val) => this.recordChange({[item.field]: val})}/>
+      } else if (item.type === 'codemirror') {
+        content = <CodeMirror mode="text/javascript" theme="cobalt" onChange={(val) => this.recordChange({[item.field]: val})}/>
       }
 
       if (!content) return
 
-      fields.push(
-        <Col span={item.span || 12} key={index}>
-          <Form.Item label={label}>
-            {getFieldDecorator(item.field, {
-              initialValue: item.initval,
-              rules: item.rules
-            })(content)}
-          </Form.Item>
-        </Col>
-      )
+      if (item.help) {
+        let help = null
+        if (typeof(item.help) === 'function') {
+          help = item.help(this.record)
+        } else {
+          help = <span style={{fontSize: '12px'}}>{item.help}</span>
+        }
+        fields.push(
+          <Col span={item.span || 12} key={index}>
+            <Form.Item label={label} help={help}>
+              {getFieldDecorator(item.field, {
+                initialValue: item.initval,
+                rules: item.rules
+              })(content)}
+            </Form.Item>
+          </Col>
+        )
+      } else {
+        fields.push(
+          <Col span={item.span || 12} key={index}>
+            <Form.Item label={label}>
+              {getFieldDecorator(item.field, {
+                initialValue: item.initval,
+                rules: item.rules
+              })(content)}
+            </Form.Item>
+          </Col>
+        )
+      }
     })
     
     return fields
@@ -310,7 +430,7 @@
     }
 
     return (
-      <Form {...formItemLayout} className="normal-form-field">
+      <Form {...formItemLayout} className="normal-form-field" id={this.state.formId}>
         <Row gutter={24}>{this.getFields()}</Row>
       </Form>
     )

--
Gitblit v1.8.0