From b69b5f6329ca5f87932436b7a6c1ddfc3377e10f Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 16 五月 2024 10:56:41 +0800
Subject: [PATCH] 2024-05-16

---
 src/menu/components/card/cardcellcomponent/elementform/index.jsx |  329 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 204 insertions(+), 125 deletions(-)

diff --git a/src/menu/components/card/cardcellcomponent/elementform/index.jsx b/src/menu/components/card/cardcellcomponent/elementform/index.jsx
index 2f3f53a..992eff8 100644
--- a/src/menu/components/card/cardcellcomponent/elementform/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/elementform/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { fromJS } from 'immutable'
-import { Form, Row, Col, Input, Select, Radio, Tooltip, InputNumber, Cascader, Popover } from 'antd'
+import { Form, Row, Col, Input, Select, Radio, Tooltip, InputNumber, Cascader, Popover, message, AutoComplete } from 'antd'
 import { QuestionCircleOutlined } from '@ant-design/icons'
 
 import { formRule } from '@/utils/option.js'
@@ -10,11 +10,13 @@
 
 const { TextArea } = Input
 const ColorSketch = asyncComponent(() => import('@/mob/colorsketch'))
+const CodeMirror = asyncComponent(() => import('@/templates/zshare/codemirror'))
 const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent'))
+const MKTable = asyncComponent(() => import('@/components/normalform/modalform/mkTable'))
 const MkEditIcon = asyncComponent(() => import('@/components/mkIcon'))
 
 const cardTypeOptions = {
-  sequence: ['eleType', 'width'],
+  sequence: ['eleType', 'width', 'prefix', 'postfix'],
   text: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'link', 'anchors', 'noValue', 'bgImage', 'fixStyle', 'copyable', 'alignItems', 'sortField'],
   number: ['eleType', 'datatype', 'width', 'height', 'prefix', 'postfix', 'noValue', 'fixStyle', 'alignItems'],
   picture: ['eleType', 'datatype', 'width', 'lenWidRadio', 'maxWidth', 'link', 'noValue'],
@@ -25,8 +27,9 @@
   barcode: ['eleType', 'datatype', 'width', 'barHeight', 'displayValue', 'interval', 'noValue'],
   qrcode: ['eleType', 'datatype', 'width', 'qrWidth', 'color', 'url', 'noValue'],
   currentDate: ['eleType', 'width', 'dateFormat', 'prefix', 'postfix', 'fixStyle'],
-  formula: ['eleType', 'width', 'height', 'prefix', 'postfix', 'eval', 'formula', 'noValue', 'fixStyle', 'alignItems'],
+  formula: ['eleType', 'width', 'height', 'eval', 'formula', 'noValue'],
   color: ['eleType', 'datatype', 'width', 'lenWidRadio', 'noValue', 'copyable'],
+  tag: ['eleType', 'datatype', 'width', 'noValue', 'signs'],
 }
 
 class ElementEditForm extends Component {
@@ -58,7 +61,7 @@
       formlist: formlist.map(item => {
         item.hidden = !_options.includes(item.key)
 
-        if (item.key === 'field' || item.key === 'linkurl' || item.key === 'bgImage' || item.key === 'posterField') {
+        if ((item.key === 'field' || item.key === 'linkurl' || item.key === 'bgImage' || item.key === 'posterField') && item.type === 'select') {
           item.options = []
           
           if (side === 'sub') {
@@ -112,26 +115,39 @@
               })
             })
           }
-        } else if (item.key === 'value' && card.eleType === 'slider') {
-          item.type = 'number'
-          item.label = '鍊�'
         } else if (item.key === 'formula') {
           item.fields = []
 
-          config.columns.forEach(col => {
-            item.fields.push(col.field)
-          })
-          
-          if (config.subColumns) {
-            config.subColumns.forEach(col => {
+          if (side === 'sub') {
+            if (config.subColumns) {
+              config.subColumns.forEach(col => {
+                item.fields.push(col.field)
+              })
+            }
+          } else {
+            config.columns.forEach(col => {
               item.fields.push(col.field)
             })
           }
 
           item.fields = item.fields.join(', ')
-        } else if (item.key === 'value' && card.eleType === 'text') {
-          item.type = 'textarea'
-          item.label = '鍐呭'
+        } else if (item.key === 'value') {
+          item.tooltip = ''
+          if (card.eleType === 'slider') {
+            item.type = 'number'
+            item.label = '鍊�'
+          } else if (card.eleType === 'text') {
+            item.type = 'textarea'
+            item.label = '鍐呭'
+            item.tooltip = '鏂囨湰绫诲瀷锛屼細鏇挎崲鍐呭涓殑@username@銆丂fullName@銆丂mk_city@銆丂appname@銆丂bid@銆丂month@銆丂week@銆丂day@'
+          } else if (card.eleType === 'tag') {
+            item.type = 'textarea'
+            item.label = '鍐呭'
+            item.tooltip = '澶氫釜鍊艰浣跨敤閫楀彿锛堣嫳鏂囷級鍒嗛殧銆�'
+          } else {
+            item.type = 'text'
+            item.label = '鍐呭'
+          }
         } else if (item.key === 'format') {
           if (card.eleType === 'text') {
             item.options = item.oriOptions.filter(op => !['percent', 'thdSeparator', 'abs'].includes(op.value))
@@ -142,7 +158,7 @@
           item.required = card.eleType !== 'qrcode'
         }
         if (item.key === 'linkurl') {
-          item.type = card.link === 'dynamic' ? 'select' : 'textarea'
+          item.type = card.link === 'dynamic' ? item.defType : 'textarea'
         }
 
         return item
@@ -153,7 +169,7 @@
   getOptions = () => {
     let _options = fromJS(cardTypeOptions[this.record.eleType]).toJS() // 閫夐」鍒楄〃
     
-    if (['text', 'number', 'picture', 'slider', 'barcode', 'qrcode', 'video', 'color'].includes(this.record.eleType)) {
+    if (['text', 'number', 'picture', 'slider', 'barcode', 'qrcode', 'video', 'color', 'tag'].includes(this.record.eleType)) {
       if (this.record.datatype === 'dynamic') {
         _options.push('field')
         if (this.record.eleType === 'number') {
@@ -164,7 +180,10 @@
       } else {
         _options.push('value')
       }
-      if (this.record.eleType === 'video' && this.record.posterType) {
+      
+      if (this.record.eleType === 'picture' && this.record.noValue === 'show') {
+        _options.push('lostTip')
+      } else if (this.record.eleType === 'video' && this.record.posterType) {
         if (this.record.posterType === 'dynamic') {
           _options.push('posterField')
         } else {
@@ -175,14 +194,14 @@
       if (['text', 'picture'].includes(this.record.eleType) && this.record.link) {
         _options.push('linkType')
         if (this.record.linkType === 'linkmenu') {
-          _options.push('open', 'joint')
+          _options.push('open')
           if (this.record.link === 'static') {
             _options.push('linkmenu')
           } else {
             _options.push('linkurl')
           }
         } else if (this.record.linkType === 'other') {
-          _options.push('linkurl', 'joint', 'open')
+          _options.push('linkurl', 'open')
         } else {
           _options.push('linkurl')
         }
@@ -207,8 +226,13 @@
       if (this.record.tipType === 'text') {
         _options.push('height')
       }
-    } else if (this.record.eleType === 'formula' && this.record.eval === 'true') {
-      _options.push('decimal')
+    } else if (this.record.eleType === 'formula') {
+      if (this.record.eval !== 'func') {
+        _options.push('prefix', 'postfix', 'fixStyle', 'alignItems')
+      }
+      if (this.record.eval === 'true') {
+        _options.push('decimal')
+      }
     }
     if (_options.includes('fixStyle') && this.record.fixStyle === 'alone') {
       _options.push('fixSize', 'fixColor', 'fixLeft', 'fixRight')
@@ -242,7 +266,7 @@
         item.initVal = this.record[item.key]
         item.hidden = !_options.includes(item.key)
 
-        if (item.key === 'field') {
+        if (item.key === 'field' && item.type === 'select') {
           item.options = []
 
           if (side === 'sub') {
@@ -278,12 +302,18 @@
             })
           }
         } else if (item.key === 'value') {
+          item.tooltip = ''
           if (value === 'slider') {
             item.type = 'number'
             item.label = '鍊�'
           } else if (value === 'text') {
             item.type = 'textarea'
             item.label = '鍐呭'
+            item.tooltip = '鏂囨湰绫诲瀷锛屼細鏇挎崲鍐呭涓殑@username@銆丂fullName@銆丂mk_city@銆丂appname@銆丂bid@銆丂month@銆丂week@銆丂day@'
+          } else if (value === 'tag') {
+            item.type = 'textarea'
+            item.label = '鍐呭'
+            item.tooltip = '澶氫釜鍊艰浣跨敤閫楀彿锛堣嫳鏂囷級鍒嗛殧銆�'
           } else {
             item.type = 'text'
             item.label = '鍐呭'
@@ -336,12 +366,12 @@
           item.hidden = !_options.includes(item.key)
 
           if (item.key === 'linkurl') {
-            item.type = value === 'dynamic' ? 'select' : 'textarea'
+            item.type = value === 'dynamic' ? item.defType : 'textarea'
           }
           return item
         })
       })
-    } else if (['datatype', 'showInfo', 'showType', 'fixStyle', 'posterType', 'eval', 'linkType', 'tipType'].includes(key)) {
+    } else if (['datatype', 'showInfo', 'showType', 'fixStyle', 'posterType', 'eval', 'linkType', 'tipType', 'noValue'].includes(key)) {
       let _options = this.getOptions()
 
       this.setState({
@@ -370,106 +400,122 @@
     this.state.formlist.forEach((item, index) => {
       if (item.hidden || item.forbid) return
 
+      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') {
+        let rules = item.rules || []
+        if (item.options && item.options.length > 0) {
+          fields.push(
+            <Col span={12} key={index}>
+              <Form.Item label={label}>
+                {getFieldDecorator(item.key, {
+                  initialValue: item.initVal || '',
+                  rules: [
+                    {
+                      required: !!item.required,
+                      message: '璇疯緭鍏�' + item.label + '!'
+                    },
+                    {
+                      pattern: formRule.field.pattern,
+                      message: formRule.field.message
+                    },
+                    {
+                      max: formRule.input.max,
+                      message: formRule.input.message
+                    }
+                  ]
+                })(
+                  <AutoComplete
+                    dataSource={item.options.map((cell, i) => <AutoComplete.Option value={cell.value} key={i}>
+                      {cell.value}
+                    </AutoComplete.Option>)}
+                    filterOption={(input, option) => option.props.children.indexOf(input) > -1}
+                  >
+                    <Input autoComplete="off" onPressEnter={this.handleSubmit} />
+                  </AutoComplete>
+                )}
+              </Form.Item>
+            </Col>
+          )
+        } else {
+          fields.push(
+            <Col span={12} key={index}>
+              <Form.Item label={label}>
+                {getFieldDecorator(item.key, {
+                  initialValue: item.initVal || '',
+                  rules: [
+                    {
+                      required: item.readonly ? false : !!item.required,
+                      message: '璇疯緭鍏�' + item.label + '!'
+                    },
+                    {
+                      max: formRule.input.max,
+                      message: formRule.input.message
+                    },
+                    ...rules
+                  ]
+                })(<Input placeholder="" autoComplete="off" disabled={item.readonly} onPressEnter={this.handleSubmit} />)}
+              </Form.Item>
+            </Col>
+          )
+        }
+      } else if (item.type === 'textarea') {
         fields.push(
-          <Col span={12} key={index}>
-            <Form.Item label={item.tooltip ?
-              <Tooltip placement="topLeft" title={item.tooltip}>
-                <QuestionCircleOutlined className="mk-form-tip" />
-                {item.label}
-              </Tooltip> : item.label
-            }>
+          <Col span={24} className="textarea" key={index}>
+            <Form.Item label={label}>
               {getFieldDecorator(item.key, {
                 initialValue: item.initVal || '',
                 rules: [
                   {
                     required: item.readonly ? false : !!item.required,
                     message: '璇疯緭鍏�' + item.label + '!'
-                  },
-                  {
-                    max: formRule.input.max,
-                    message: formRule.input.message
                   }
                 ]
-              })(<Input placeholder="" autoComplete="off" disabled={item.readonly} onPressEnter={this.handleSubmit} />)}
+              })(<TextArea autoSize={{minRows: 2}} disabled={item.readonly} placeholder={item.placeholder || ''} />)}
             </Form.Item>
           </Col>
         )
-      } else if (item.type === 'textarea') {
-        if (item.key === 'formula') {
+      } else if (item.type === 'number') {
+        if (item.help) {
           fields.push(
-            <Col span={24} className="textarea" key={index}>
-              <Form.Item label={item.tooltip ?
-                <Tooltip placement="topLeft" title={item.tooltip}>
-                  <QuestionCircleOutlined className="mk-form-tip" />
-                  {item.label}
-                </Tooltip> : item.label
-              }>
+            <Col span={12} key={index}>
+              <Form.Item help={item.help} label={label}>
                 {getFieldDecorator(item.key, {
-                  initialValue: item.initVal || '',
-                  rules: [
-                    {
-                      required: item.readonly ? false : !!item.required,
-                      message: '璇疯緭鍏�' + item.label + '!'
-                    }
-                  ]
-                })(<TextArea autoSize={{minRows: 2}} disabled={item.readonly} placeholder={item.placeholder || ''} />)}
+                  initialValue: item.initVal,
+                  rules: [{
+                    required: item.readonly ? false : !!item.required,
+                    message: '璇疯緭鍏�' + item.label + '!'
+                  }]
+                })(<InputNumber min={item.min || 0} max={item.max || 10000} precision={item.precision || 0} onPressEnter={this.handleSubmit} />)}
               </Form.Item>
-              <Popover overlayClassName="formula-fields" placement="topLeft" title="" content={<div>{item.fields}</div>} trigger="click">
-                <span className="formula-icon">瀛楁闆�</span>
-              </Popover>
             </Col>
           )
         } else {
           fields.push(
-            <Col span={24} className="textarea" key={index}>
-              <Form.Item label={item.tooltip ?
-                <Tooltip placement="topLeft" title={item.tooltip}>
-                  <QuestionCircleOutlined className="mk-form-tip" />
-                  {item.label}
-                </Tooltip> : item.label
-              }>
+            <Col span={12} key={index}>
+              <Form.Item label={label}>
                 {getFieldDecorator(item.key, {
-                  initialValue: item.initVal || '',
-                  rules: [
-                    {
-                      required: item.readonly ? false : !!item.required,
-                      message: '璇疯緭鍏�' + item.label + '!'
-                    }
-                  ]
-                })(<TextArea autoSize={{minRows: 2}} disabled={item.readonly} placeholder={item.placeholder || ''} />)}
+                  initialValue: item.initVal,
+                  rules: [{
+                    required: item.readonly ? false : !!item.required,
+                    message: '璇疯緭鍏�' + item.label + '!'
+                  }]
+                })(<InputNumber min={item.min || 0} max={item.max || 10000} precision={item.precision || 0} onPressEnter={this.handleSubmit} />)}
               </Form.Item>
             </Col>
           )
         }
-      } else if (item.type === 'number') {
-        fields.push(
-          <Col span={12} key={index}>
-            <Form.Item help={item.help || null} label={item.tooltip ?
-              <Tooltip placement="topLeft" title={item.tooltip}>
-                <QuestionCircleOutlined className="mk-form-tip" />
-                {item.label}
-              </Tooltip> : item.label
-            }>
-              {getFieldDecorator(item.key, {
-                initialValue: item.initVal,
-                rules: [{
-                  required: item.readonly ? false : !!item.required,
-                  message: '璇疯緭鍏�' + item.label + '!'
-                }]
-              })(<InputNumber min={item.min || 0} max={item.max || 10000} precision={item.precision || 0} onPressEnter={this.handleSubmit} />)}
-            </Form.Item>
-          </Col>
-        )
       } else if (item.type === 'select') { // 涓嬫媺鎼滅储
         fields.push(
           <Col span={12} key={index}>
-            <Form.Item label={item.tooltip ?
-              <Tooltip placement="topLeft" title={item.tooltip}>
-                <QuestionCircleOutlined className="mk-form-tip" />
-                {item.label}
-              </Tooltip> : item.label
-            }>
+            <Form.Item label={label}>
               {getFieldDecorator(item.key, {
                 initialValue: item.initVal || '',
                 rules: [{
@@ -497,12 +543,7 @@
       } else if (item.type === 'icon') {
         fields.push(
           <Col span={12} key={index}>
-            <Form.Item label={item.tooltip ?
-              <Tooltip placement="topLeft" title={item.tooltip}>
-                <QuestionCircleOutlined className="mk-form-tip" />
-                {item.label}
-              </Tooltip> : item.label
-            }>
+            <Form.Item label={label}>
               {getFieldDecorator(item.key, {
                 initialValue: item.initVal || '',
                 rules: [{
@@ -518,12 +559,7 @@
       } else if (item.type === 'radio') {
         fields.push(
           <Col span={12} key={index}>
-            <Form.Item label={item.tooltip ?
-              <Tooltip placement="topLeft" title={item.tooltip}>
-                <QuestionCircleOutlined className="mk-form-tip" />
-                {item.label}
-              </Tooltip> : item.label
-            }>
+            <Form.Item label={label}>
               {getFieldDecorator(item.key, {
                 initialValue: item.initVal,
                 rules: [{
@@ -545,7 +581,7 @@
       } else if (item.type === 'color') {
         fields.push(
           <Col span={12} key={index} className="color-form">
-            <Form.Item label={item.label}>
+            <Form.Item label={label}>
               {getFieldDecorator(item.key, {
                 initialValue: item.initVal,
                 rules: [
@@ -561,18 +597,14 @@
           </Col>
         )
       } else if (item.type === 'file') {
-        let type = this.state.eleType
+        let type = this.record.eleType
         if (item.key === 'posterUrl') {
           type = 'picture'
         }
+
         fields.push(
           <Col span={12} key={index}>
-            <Form.Item label={item.tooltip ?
-              <Tooltip placement="topLeft" title={item.tooltip}>
-                <QuestionCircleOutlined className="mk-form-tip" />
-                {item.label}
-              </Tooltip> : item.label
-            }>
+            <Form.Item label={label}>
               {getFieldDecorator(item.key, {
                 initialValue: item.initVal,
                 rules: [
@@ -590,12 +622,7 @@
       } else if (item.type === 'cascader') {
         fields.push(
           <Col span={12} key={index}>
-            <Form.Item label={item.tooltip ?
-              <Tooltip placement="topLeft" overlayClassName={item.tooltipClass} title={item.tooltip}>
-                <QuestionCircleOutlined className="mk-form-tip" />
-                {item.label}
-              </Tooltip> : item.label
-            }>
+            <Form.Item label={label}>
               {getFieldDecorator(item.key, {
                 initialValue: item.initVal || [],
                 rules: [
@@ -608,6 +635,45 @@
                 <Cascader options={item.options || []} expandTrigger="hover" placeholder=""/>
               )}
             </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'table') {
+        fields.push(
+          <Col span={24} key={index} className="textarea">
+            <Form.Item label={label}>
+              {getFieldDecorator(item.key, {
+                initialValue: item.initVal || '',
+                rules: [
+                  {
+                    required: !!item.required,
+                    message: '璇疯緭鍏�' + item.label + '!'
+                  }
+                ]
+              })(
+                <MKTable columns={item.columns || []} actions={item.actions}/>
+              )}
+            </Form.Item>
+          </Col>
+        )
+      } else if (item.type === 'codemirror') {
+        fields.push(
+          <Col span={24} key={index} className="textarea">
+            <Form.Item label={label}>
+              {getFieldDecorator(item.key, {
+                initialValue: item.initVal || '',
+                rules: [
+                  {
+                    required: !!item.required,
+                    message: '璇疯緭鍏�' + item.label + '!'
+                  }
+                ]
+              })(
+                <CodeMirror mode="text/javascript"/>
+              )}
+            </Form.Item>
+            <Popover overlayClassName="formula-fields" placement="topLeft" title="" content={<div>{item.fields}</div>} trigger="click">
+              <span className="formula-icon">瀛楁闆�</span>
+            </Popover>
           </Col>
         )
       }
@@ -626,7 +692,7 @@
           values.marks = this.props.card.marks || null
 
           // eslint-disable-next-line
-          if (values.eleType === 'formula' && values.eval !== 'false' && /^[\u4E00-\u9FA50-9a-zA-Z_\s@\+\-\*\/]*$/ig.test(values.formula) && /[\+\-\*\/]/ig.test(values.formula)) {
+          if (values.eleType === 'formula' && values.eval === 'true' && /^[\u4E00-\u9FA50-9a-zA-Z_\s@\+\-\*\/]*$/ig.test(values.formula) && /[\+\-\*\/]/ig.test(values.formula)) {
             let cols = []
             config.subColumns && config.subColumns.forEach(col => {
               if (/^(Int|Decimal)/ig.test(col.datatype)) {
@@ -644,6 +710,19 @@
             })
           }
 
+          if (values.width === 0) {
+            let utype = {picture: '鍥剧墖', video: '瑙嗛', slider: '杩涘害鏉�', splitline: '鍒嗗壊绾�', barcode: '鏉″舰鐮�', qrcode: '浜岀淮鐮�'}
+            
+            if (utype[values.eleType]) {
+              message.warning(utype[values.eleType] + '鍏冪礌瀹藉害涓嶅彲涓�0锛�')
+              return
+            }
+          }
+          
+          if (values.eleType === 'tag' && values.signs && values.signs.length === 0) {
+            values.signs = null
+          }
+
           resolve(values)
         } else {
           reject(err)

--
Gitblit v1.8.0