From 5d48f8215284ca8de312f1c85f78e07215a0faf1 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 20 五月 2021 11:07:04 +0800
Subject: [PATCH] 2021-05-20

---
 src/mob/components/formdragelement/card.jsx              |  118 +++++++---
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx  |   19 
 src/templates/zshare/modalform/index.jsx                 |    4 
 src/mob/components/formdragelement/index.scss            |  275 ++++++++++++++++--------
 src/templates/zshare/formconfig.jsx                      |  194 +++++++++++-----
 src/templates/zshare/verifycard/index.jsx                |    4 
 src/menu/components/form/normal-form/groupform/index.jsx |    6 
 src/templates/zshare/modalform/modaleditable/index.jsx   |    3 
 src/menu/components/form/normal-form/index.jsx           |    5 
 src/mob/components/formdragelement/index.jsx             |    4 
 10 files changed, 410 insertions(+), 222 deletions(-)

diff --git a/src/menu/components/form/normal-form/groupform/index.jsx b/src/menu/components/form/normal-form/groupform/index.jsx
index c1611f9..71648f4 100644
--- a/src/menu/components/form/normal-form/groupform/index.jsx
+++ b/src/menu/components/form/normal-form/groupform/index.jsx
@@ -55,7 +55,7 @@
   render() {
     const { group, dict } = this.props
     const { getFieldDecorator } = this.props.form
-    const { fields } = this.state
+    const { fields, appType } = this.state
 
     const formItemLayout = {
       labelCol: {
@@ -123,7 +123,7 @@
               )}
             </Form.Item>
           </Col>
-          <Col span={12}>
+          {appType !== 'mob' ? <Col span={12}>
             <Form.Item label="琛ㄥ崟鎺掑垪">
               {getFieldDecorator('align', {
                 initialValue: group.setting.align || 'left_right'
@@ -134,7 +134,7 @@
                 </Radio.Group>
               )}
             </Form.Item>
-          </Col>
+          </Col> : null}
         </Row>
       </Form>
     )
diff --git a/src/menu/components/form/normal-form/index.jsx b/src/menu/components/form/normal-form/index.jsx
index 7da0e9e..c8b417c 100644
--- a/src/menu/components/form/normal-form/index.jsx
+++ b/src/menu/components/form/normal-form/index.jsx
@@ -451,7 +451,7 @@
    * @description 琛ㄥ崟缂栬緫
    */
   handleForm = (_item) => {
-    const { card, group } = this.state
+    const { card, group, appType } = this.state
     let _form = fromJS(_item).toJS()
     let _inputfields = []
     let _tabfields = []
@@ -511,7 +511,7 @@
       _form.linkSubField = _form.linkSubField.filter(item => fields.includes(item))
     }
 
-    if (!_form.span && standardform && standardform.span) {
+    if (appType !== 'mob' && !_form.span && standardform && standardform.span) {
       _form.span = standardform.span
       _form.labelwidth = standardform.labelwidth
     }
@@ -669,7 +669,6 @@
             list={group.fields}
             setting={group.setting}
             showField={this.state.showField}
-            placeholder={dict['header.form.modal.placeholder']}
             handleList={this.handleList}
             handleForm={this.handleForm}
             closeForm={this.closeForm}
diff --git a/src/mob/components/formdragelement/card.jsx b/src/mob/components/formdragelement/card.jsx
index 4af435e..888976c 100644
--- a/src/mob/components/formdragelement/card.jsx
+++ b/src/mob/components/formdragelement/card.jsx
@@ -1,16 +1,11 @@
 import React from 'react'
 import { useDrag, useDrop } from 'react-dnd'
-import { Icon, DatePicker, Button, Popover, Switch, Radio, Checkbox, Form } from 'antd'
-import { InputItem, TextareaItem } from 'antd-mobile'
+import { Icon, Button, Popover, Switch, Checkbox, Form } from 'antd'
 import moment from 'moment'
 
 import asyncComponent from '@/utils/asyncComponent'
 import './index.scss'
 
-const { MonthPicker } = DatePicker
-
-const Editor = asyncComponent(() => import('@/components/editor'))
-const ColorSketch = asyncComponent(() => import('@/mob/colorsketch'))
 const CheckCard = asyncComponent(() => import('@/templates/modalconfig/checkCard'))
 
 const Card = ({ id, card, moveCard, findCard, editCard, closeCard, copyCard, showField }) => {
@@ -50,7 +45,7 @@
   }
 
   let selectval = ''
-  if (card.type === 'multiselect' || card.type === 'select' || card.type === 'link') {
+  if (card.type === 'select' || card.type === 'link') {
     if (card.initval) {
       let _option = card.options.filter(option => option.Value === card.initval)[0]
       if (_option) {
@@ -64,55 +59,96 @@
   }
 
   let formItem = null
-  if (card.type === 'text') {
-    formItem = (<InputItem value={card.initval}>{card.label}</InputItem>)
-  } else if (card.type === 'number') {
-    formItem = (<InputItem type="number" value={card.initval}>{card.label}</InputItem>)
-  } else if (card.type === 'multiselect' || card.type === 'select' || card.type === 'link') {
-    formItem = (<div className="am-list-item am-list-item-middle"><div className="am-list-line"><div className="am-list-content">{card.label}</div><div className="am-list-extra">{selectval || '璇烽�夋嫨'}</div><div className="am-list-arrow am-list-arrow-horizontal"></div></div></div>)
-  } else if (card.type === 'color') {
-    formItem = (<ColorSketch value={card.initval || 'transparent'}/>)
+  if (card.type === 'text' || card.type === 'number') {
+    formItem = (<div className="am-list-item"><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className={'am-input-control ' + card.cursor}>{card.initval}</div></div></div>)
+  } else if (card.type === 'select' || card.type === 'link') {
+    formItem = (<div className="am-list-item"><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className="am-input-control">{selectval || '璇烽�夋嫨'}</div><div className="am-list-extra"><Icon type="right" /></div></div></div>)
   } else if (card.type === 'date') {
-    formItem = (<DatePicker value={card.initval ? moment().subtract(card.initval, 'days') : null} />)
+    formItem = (<div className="am-list-item"><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className="am-input-control">{card.initval ? moment().subtract(card.initval, 'days').format('YYYY-MM-DD') : '璇烽�夋嫨'}</div><div className="am-list-extra"><Icon type="right" /></div></div></div>)
   } else if (card.type === 'datemonth') {
-    formItem = (<MonthPicker value={card.initval ? moment().subtract(card.initval, 'month') : null} />)
+    formItem = (<div className="am-list-item"><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className="am-input-control">{card.initval ? moment().subtract(card.initval, 'month').format('YYYY-MM') : '璇烽�夋嫨'}</div><div className="am-list-extra"><Icon type="right" /></div></div></div>)
   } else if (card.type === 'datetime') {
-    formItem = (<DatePicker showTime value={card.initval ? moment().subtract(card.initval, 'days') : null} />)
+    formItem = (<div className="am-list-item"><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className="am-input-control">{card.initval ? moment().subtract(card.initval, 'days').format('YYYY-MM-DD HH:mm') : '璇烽�夋嫨'}</div><div className="am-list-extra"><Icon type="right" /></div></div></div>)
   } else if (card.type === 'textarea') {
-    formItem = (<TextareaItem title={card.label} autoHeight />)
-  } else if (card.type === 'brafteditor') {
-    formItem = (<Editor />)
+    // formItem = (<TextareaItem title={card.label} autoHeight />)
   } else if (card.type === 'fileupload') {
     formItem = (<Button style={{marginTop: '3px'}}><Icon type="upload" /> 鐐瑰嚮涓婁紶 </Button>)
   } else if (card.type === 'funcvar') {
-    formItem = (<InputItem type="number" value={card.linkfield}>{card.label}</InputItem>)
+    formItem = (<div className="am-list-item"><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className="am-input-control">{card.linkfield}</div></div></div>)
   } else if (card.type === 'switch') {
-    formItem = (<Switch checkedChildren={card.openText || ''} unCheckedChildren={card.closeText || ''} style={{marginTop: '8px'}} checked={card.initval}/>)
+    formItem = (<div className="am-list-item"><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className="am-list-switch"><Switch checked={card.initval}/></div></div></div>)
   } else if (card.type === 'radio') {
-    formItem = card.options && card.options.length > 0 ? (<Radio.Group value={card.initval}>
-      {card.options.map(cell => <Radio key={cell.key} value={cell.Value}>{cell.Text}</Radio>)}
-    </Radio.Group>) : (<Radio.Group value={1}>
-      <Radio value={1}>A</Radio>
-      <Radio value={2}>B</Radio>
-      <Radio value={3}>C</Radio>
-      <Radio value={4}>D</Radio>
-    </Radio.Group>)
+    let options = null
+    if (card.options && card.options.length > 0) {
+      options = card.options
+    } else {
+      options = [
+        {key: 'A', Value: 'A', Text: 'A'},
+        {key: 'B', Value: 'B', Text: 'B'},
+        {key: 'C', Value: 'C', Text: 'C'}
+      ]
+    }
+
+    formItem = (
+    <div className="am-list-item checkbox">
+      <div className="am-list-line">
+        <div className="am-input-label">{card.label}</div>
+        <div className="am-input-control">
+          <div className="mk-radio-group">
+            {options.map(cell => (<div key={cell.key} className="mk-radio-wrapper">
+              <span className="radio-value">{cell.Text}</span>
+              <span className={'radio-check ' + (card.initval === cell.Value ? 'checked' : '')}></span>
+            </div>))}
+          </div>
+        </div>
+      </div>
+    </div>)
   } else if (card.type === 'checkbox') {
     let _val = card.initval ? card.initval.split(',') : []
-    formItem = card.options && card.options.length > 0 ? (<Checkbox.Group value={_val}>
-      {card.options.map(cell => <Checkbox key={cell.key} value={cell.Value}>{cell.Text}</Checkbox>)}
-    </Checkbox.Group>) : (<Checkbox.Group value={['A', 'C']}>
-      <Checkbox value="A">A</Checkbox>
-      <Checkbox value="B">B</Checkbox>
-      <Checkbox value="C">C</Checkbox>
-      <Checkbox value="D">D</Checkbox>
-    </Checkbox.Group>)
+    let options = null
+    if (card.options && card.options.length > 0) {
+      options = card.options
+    } else {
+      options = [
+        {key: 'A', Value: 'A', Text: 'A'},
+        {key: 'B', Value: 'B', Text: 'B'},
+        {key: 'C', Value: 'C', Text: 'C'}
+      ]
+    }
+
+    formItem = (
+      <div className="am-list-item checkbox">
+        <div className="am-list-line">
+          <div className="am-input-label">{card.label}</div>
+          <div className="am-input-control">
+            {<Checkbox.Group value={_val}>
+              {options.map(cell => <Checkbox key={cell.key} value={cell.Value}>{cell.Text}</Checkbox>)}
+            </Checkbox.Group>}
+          </div>
+        </div>
+      </div>
+    )
+    
   } else if (card.type === 'hint') {
-    formItem = <div style={{marginTop: '10px', color: 'rgba(0, 0, 0, 0.85)', lineHeight: '1.5'}}>{card.message}</div>
+    formItem = <div className="am-list-item hint">
+      <div className="am-list-line">
+        <div className="am-input-label">{card.label}</div>
+        <div className="am-input-control">
+          {card.message}  
+        </div>
+      </div>
+    </div>
   } else if (card.type === 'split') {
     formItem = <div className="split-line">{card.label}</div>
   } else if (card.type === 'checkcard') {
-    formItem = <CheckCard width={card.width} ratio={card.ratio} display={card.display} fields={card.fields} options={card.options} />
+    formItem = (<div className="am-list-item check-card">
+      <div className="am-list-line">
+        <div className="am-input-label">{card.label}</div>
+        <div className="am-input-control">
+          <CheckCard width={card.width} ratio={card.ratio} display={card.display} fields={card.fields} options={card.options} />  
+        </div>
+      </div>
+    </div>)
   }
 
   return (
diff --git a/src/mob/components/formdragelement/index.jsx b/src/mob/components/formdragelement/index.jsx
index 53f98fc..a62602f 100644
--- a/src/mob/components/formdragelement/index.jsx
+++ b/src/mob/components/formdragelement/index.jsx
@@ -6,7 +6,7 @@
 import Card from './card'
 import './index.scss'
 
-const Container = ({list, setting, placeholder, handleList, handleForm, closeForm, showField }) => {
+const Container = ({list, setting, handleList, handleForm, closeForm, showField }) => {
   const [cards, setCards] = useState(list)
   const moveCard = (id, atIndex) => {
     const { card, index } = findCard(id)
@@ -104,7 +104,7 @@
   })
 
   return (
-    <div ref={drop} className={'ant-row modal-fields-row ' + (setting.align || 'left_right')} >
+    <div ref={drop} className="ant-row modal-fields-row mob-form" >
       {cards.map(card => {
         return <Card
           id={card.uuid}
diff --git a/src/mob/components/formdragelement/index.scss b/src/mob/components/formdragelement/index.scss
index 9384591..188c60e 100644
--- a/src/mob/components/formdragelement/index.scss
+++ b/src/mob/components/formdragelement/index.scss
@@ -8,26 +8,190 @@
     padding-left: 1.2%;
     padding-right: 1.2%;
   }
-  .am-list-item.am-input-item {
-    padding-left: 0;
-  }
-  .am-list-item .am-input-label {
+  .am-list-item {
     font-size: 16px;
-  }
-  .am-list-line {
-    border-bottom: 1PX solid #ddd;
-    input {
-      text-align: right;
+    padding-left: 10px;
+    position: relative;
+    display: flex;
+    height: 44px;
+    min-height: 44px;
+    background-color: #fff;
+    vertical-align: middle;
+    overflow: hidden;
+    transition: background-color 200ms;
+    align-items: center;
+
+    .am-list-line {
+      border-bottom: 1PX solid #ddd;
+      align-items: center;
+      position: relative;
+      display: flex;
+      flex: 1 1;
+      align-self: stretch;
+      padding-right: 15px;
+      overflow: hidden;
+      .am-input-label {
+        width: 28%;
+        color: #000;
+        font-size: 16px;
+        margin-left: 0;
+        margin-right: 5px;
+        text-align: left;
+        white-space: nowrap;
+        overflow: hidden;
+        padding: 2px 0;
+        text-overflow: ellipsis;
+      }
+      .am-list-switch {
+        flex: 1;
+        text-align: right;
+      }
+      .am-input-control {
+        font-size: 16px;
+        flex: 1 1;
+        text-align: right;
+      }
+      .am-input-control.left {
+        text-align: left;
+      }
+      .am-list-extra {
+        display: block;
+        width: 15px;
+        height: 15px;
+        margin-left: 8px;
+        i {
+          vertical-align: top;
+        }
+      }
     }
   }
-  .ant-form-item-children {
-    padding-left: 10px;
+  .am-list-item.check-card {
+    height: auto;
+    .am-list-line {
+      align-items: start;
+      display: block;
+      .check-card-edit-box {
+        margin-top: 0!important;
+      }
+    }
+  }
+  .am-list-item.hint {
+    height: auto;
+    .am-list-line {
+      align-items: start;
+      display: block;
+      .am-input-label {
+        line-height: 2;
+      }
+      .am-input-control {
+        font-size: 14px;
+        line-height: 1.5;
+        text-align: left;
+        padding-bottom: 5px;
+      }
+    }
+  }
+  .am-list-item.checkbox {
+    height: auto;
+    .am-list-line {
+      align-items: start;
+      display: block;
+    }
+    .mk-radio-group {
+      padding-left: 10px;
+      text-align: left;
+
+      .mk-radio-wrapper:not(:last-child) {
+        border-bottom: 1px solid #ddd;
+      }
+      span {
+        display: inline-block;
+      }
+      .radio-value {
+        width: calc(100% - 50px);
+        white-space: nowrap;
+        overflow: hidden;
+        padding: 2px 0;
+        text-overflow: ellipsis;
+        vertical-align: top;
+      }
+      .radio-check {
+        position: relative;
+        width: 50px;
+        height: 30px;
+        top: 8px;
+      }
+      .radio-check.checked::after {
+        content: ' ';
+        position: absolute;
+        display: table;
+        border: 1px solid #1890ff;
+        border-top: 0;
+        border-left: 0;
+        top: 50%;
+        left: 22%;
+        width: 12px;
+        height: 20px;
+        transform: rotate(45deg) scale(1) translate(-50%, -50%);
+      }
+    }
+    .ant-checkbox-group {
+      display: block;
+      padding-left: 10px;
+      .ant-checkbox-wrapper {
+        display: flex;
+        text-align: left;
+        font-size: 16px;
+        .ant-checkbox {
+          display: block;
+          width: 30px;
+          .ant-checkbox-inner {
+            width: 22px;
+            height: 22px;
+            top: 12px;
+          }
+          .ant-checkbox-inner::after {
+            width: 9px;
+            height: 14px;
+          }
+        }
+        .ant-checkbox + span {
+          display: block;
+          flex: 1 1;
+          border-bottom: 1px solid #ddd;
+        }
+      }
+      .ant-checkbox-wrapper:last-child {
+        .ant-checkbox + span {
+          border-bottom: none;
+        }
+      }
+    }
   }
   .split-line {
     color: #1890ff;
-    font-size: 15px;
+    font-size: 16px;
     padding-left: 10px;
+    padding-top: 10px;
     border-bottom: 1px solid #e9e9e9;
+  }
+  .check-card-edit-box .card-cell span {
+    line-height: 1.5;
+  }
+  .ant-form-item {
+    cursor: move;
+    display: flex;
+    margin-bottom: 0px;
+    .ant-form-item-control-wrapper::after {
+      content: '';
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      opacity: 0;
+      z-index: 1;
+    }
   }
   .ant-form-item.required {
     .am-input-label::before {
@@ -40,88 +204,9 @@
       content: '*';
     }
   }
-  .ant-form-item {
-    cursor: move;
-    display: flex;
-    margin-bottom: 0px;
-    .ant-form-item-label {
-      overflow: visible;
-      position: relative;
-      cursor: move;
-      height: 40px;
-      width: 33.3%;
-      label {
-        width: 100%;
-        cursor: move;
-        overflow: hidden;
-        display: inline-block;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-      }
-      .anticon-question-circle {
-        color: #c49f47;
-        margin-right: 3px;
-        line-height: 40px;
-      }
-    }
-    .ant-form-item-control-wrapper {
-      position: relative;
-      flex: 1;
-      .ant-select {
-        width: 100%;
-        margin-top: 4px;
-      }
-      .field-name {
-        line-height: 1.3;
-        float: left;
-      }
-      .ant-checkbox-group {
-        line-height: 40px;
-        .ant-checkbox-wrapper {
-          margin-right: 8px;
-        }
-        .ant-checkbox-wrapper + .ant-checkbox-wrapper {
-          margin-left: 0px;
-        }
-      }
-      .ant-radio-group {
-        line-height: 40px;
-      }
-      .ant-calendar-picker {
-        width: 100%;
-        margin-top: 4px;
-      }
-      .ant-input-number {
-        width: 100%;
-        margin-top: 4px;
-      }
-      .color-sketch-block {
-        margin-top: 7px;
-        overflow: hidden;
-        .color-sketch-block-box {
-          min-width: 100px;
-        }
-      }
-      .normal-braft-editor {
-        border: 1px solid #d9d9d9;
-        border-radius: 4px;
-      }
-    }
-    .ant-form-item-control-wrapper::after {
-      content: '';
-      position: absolute;
-      top: 0;
-      left: 0;
-      right: 0;
-      bottom: 0;
-      opacity: 0;
-      z-index: 1;
-    }
-    .ant-col-cuslabel {
-      width: 10.5%;
-    }
-    .ant-col-cuswrap {
-      width: 89.5%;
-    }
+}
+.mob-form.modal-fields-row {
+  .page-card {
+    margin-bottom: 10px;
   }
 }
\ No newline at end of file
diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index 40d904c..2988149 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -684,20 +684,21 @@
     if (this.props.BID) {
       param.BID = this.props.BID
     }
+
+    let userName = sessionStorage.getItem('User_Name') || ''
+    let fullName = sessionStorage.getItem('Full_Name') || ''
+    let city = sessionStorage.getItem('city') || ''
+
+    if (sessionStorage.getItem('isEditState') === 'true') {
+      userName = sessionStorage.getItem('CloudUserName') || ''
+      fullName = sessionStorage.getItem('CloudFullName') || ''
+    }
     
     let _dataresource = setting.dataresource
 
     let regoptions = null
     if (setting.queryType === 'statistics' || param.custom_script) {
       let allSearch = Utils.getAllSearchOptions(search)
-      let userName = sessionStorage.getItem('User_Name') || ''
-      let fullName = sessionStorage.getItem('Full_Name') || ''
-      let city = sessionStorage.getItem('city') || ''
-
-      if (sessionStorage.getItem('isEditState') === 'true') {
-        userName = sessionStorage.getItem('CloudUserName') || ''
-        fullName = sessionStorage.getItem('CloudFullName') || ''
-      }
 
       regoptions = allSearch.map(item => {
         return {
@@ -743,7 +744,7 @@
     }
 
     if (param.custom_script) {
-      param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode='',@retmsg =''
+      param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@login_city nvarchar(50) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @login_city='${city}'
         ${param.custom_script}
       `
       regoptions.forEach(item => {
diff --git a/src/templates/zshare/formconfig.jsx b/src/templates/zshare/formconfig.jsx
index a3fab62..95f77fc 100644
--- a/src/templates/zshare/formconfig.jsx
+++ b/src/templates/zshare/formconfig.jsx
@@ -1927,10 +1927,118 @@
     roleList = []
   }
   
-  let _openType = []
+  let _openType = [{
+    value: 'text',
+    text: Formdict['model.form.text']
+  }, {
+    value: 'number',
+    text: Formdict['model.form.number']
+  }, {
+    value: 'select',
+    text: Formdict['model.form.select']
+  }, {
+    value: 'multiselect',
+    text: Formdict['model.form.multiselect']
+  }, {
+    value: 'link',
+    text: Formdict['model.form.link']
+  }, {
+    value: 'switch',
+    text: '寮�鍏�'
+  }, {
+    value: 'checkbox',
+    text: '澶氶�夋'
+  }, {
+    value: 'radio',
+    text: '鍗曢�夋'
+  }, {
+    value: 'checkcard',
+    text: '閫夐」鍗�'
+  }, {
+    value: 'fileupload',
+    text: Formdict['header.form.fileupload']
+  }, {
+    value: 'date',
+    text: Formdict['model.form.dateday']
+  }, {
+    value: 'datemonth',
+    text: Formdict['model.form.datemonth']
+  }, {
+    value: 'datetime',
+    text: Formdict['model.form.datetime']
+  }, {
+    value: 'textarea',
+    text: Formdict['model.form.textarea']
+  }, {
+    value: 'color',
+    text: Formdict['model.form.color']
+  }, {
+    value: 'brafteditor',
+    text: '瀵屾枃鏈�'
+  }, {
+    value: 'funcvar',
+    text: Formdict['header.form.funcvar']
+  }, {
+    value: 'hint',
+    text: '鎻愮ず'
+  }, {
+    value: 'split',
+    text: '鍒嗛殧绾�'
+  }]
+
   let _fieldlength = 50
 
-  if (subtable) {
+  if (appType === 'mob') {
+    _openType = [{
+      value: 'text',
+      text: Formdict['model.form.text']
+    }, {
+      value: 'number',
+      text: Formdict['model.form.number']
+    }, {
+      value: 'select',
+      text: '閫夋嫨鍣�'
+    }, {
+      value: 'link',
+      text: Formdict['model.form.link']
+    }, {
+      value: 'switch',
+      text: '寮�鍏�'
+    }, {
+      value: 'checkbox',
+      text: '澶氶�夋'
+    }, {
+      value: 'radio',
+      text: '鍗曢�夋'
+    }, {
+      value: 'checkcard',
+      text: '閫夐」鍗�'
+    }, {
+      value: 'fileupload',
+      text: Formdict['header.form.fileupload']
+    }, {
+      value: 'date',
+      text: Formdict['model.form.dateday']
+    }, {
+      value: 'datemonth',
+      text: Formdict['model.form.datemonth']
+    }, {
+      value: 'datetime',
+      text: Formdict['model.form.datetime']
+    }, {
+      value: 'textarea',
+      text: Formdict['model.form.textarea']
+    }, {
+      value: 'funcvar',
+      text: Formdict['header.form.funcvar']
+    }, {
+      value: 'hint',
+      text: '鎻愮ず'
+    }, {
+      value: 'split',
+      text: '鍒嗛殧绾�'
+    }]
+  } else if (subtable) {
     _openType.push({
       value: 'linkMain',
       text: Formdict['header.form.linkMain']
@@ -1966,65 +2074,7 @@
       label: Formdict['model.form.type'],
       initVal: card.type,
       required: true,
-      options: [{
-        value: 'text',
-        text: Formdict['model.form.text']
-      }, {
-        value: 'number',
-        text: Formdict['model.form.number']
-      }, {
-        value: 'select',
-        text: Formdict['model.form.select']
-      }, {
-        value: 'multiselect',
-        text: Formdict['model.form.multiselect']
-      }, {
-        value: 'link',
-        text: Formdict['model.form.link']
-      }, {
-        value: 'switch',
-        text: '寮�鍏�'
-      }, {
-        value: 'checkbox',
-        text: '澶氶�夋'
-      }, {
-        value: 'radio',
-        text: '鍗曢�夋'
-      }, {
-        value: 'checkcard',
-        text: '閫夐」鍗�'
-      }, {
-        value: 'fileupload',
-        text: Formdict['header.form.fileupload']
-      }, {
-        value: 'date',
-        text: Formdict['model.form.dateday']
-      }, {
-        value: 'datemonth',
-        text: Formdict['model.form.datemonth']
-      }, {
-        value: 'datetime',
-        text: Formdict['model.form.datetime']
-      }, {
-        value: 'textarea',
-        text: Formdict['model.form.textarea']
-      }, {
-        value: 'color',
-        text: Formdict['model.form.color']
-      }, {
-        value: 'brafteditor',
-        text: '瀵屾枃鏈�'
-      }, {
-        value: 'funcvar',
-        text: Formdict['header.form.funcvar']
-      }, {
-        value: 'hint',
-        text: '鎻愮ず'
-      }, {
-        value: 'split',
-        text: '鍒嗛殧绾�'
-      },
-      ..._openType]
+      options: _openType
     },
     {
       type: 'text',
@@ -2061,14 +2111,16 @@
       key: 'openText',
       label: '寮�鍚彁绀�',
       initVal: card.openText || '',
-      required: false
+      required: false,
+      forbid: appType === 'mob'
     },
     {
       type: 'text',
       key: 'closeText',
       label: '鍏抽棴鎻愮ず',
       initVal: card.closeText || '',
-      required: false
+      required: false,
+      forbid: appType === 'mob'
     },
     {
       type: 'radio',
@@ -2399,6 +2451,19 @@
     },
     {
       type: 'radio',
+      key: 'cursor',
+      label: '鍏夋爣',
+      initVal: card.cursor || 'right',
+      options: [{
+        value: 'right',
+        text: '鍙冲榻�'
+      }, {
+        value: 'left',
+        text: '宸﹀榻�'
+      }]
+    },
+    {
+      type: 'radio',
       key: 'readin',
       label: Formdict['header.form.readin'],
       tooltip: Formdict['header.form.readin.tooltip'],
@@ -2448,7 +2513,8 @@
       label: '琛ㄥ崟瀹藉害',
       initVal: card.span || (['textarea', 'hint', 'checkcard', 'brafteditor'].includes(card.type) ? 24 : 12),
       tooltip: '鏍呮牸甯冨眬鏁磋24绛夊垎銆�',
-      required: true
+      required: true,
+      forbid: appType === 'mob'
     },
     {
       type: 'number',
diff --git a/src/templates/zshare/modalform/index.jsx b/src/templates/zshare/modalform/index.jsx
index 0c32aca..8a0e445 100644
--- a/src/templates/zshare/modalform/index.jsx
+++ b/src/templates/zshare/modalform/index.jsx
@@ -14,8 +14,8 @@
 const { TextArea } = Input
 
 const modalTypeOptions = {
-  text: ['initval', 'readonly', 'required', 'hidden', 'readin', 'fieldlength', 'regular', 'interception', 'span', 'labelwidth', 'tooltip', 'extra', 'enter'],
-  number: ['initval', 'readonly', 'hidden', 'decimal', 'min', 'max', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'enter'],
+  text: ['initval', 'readonly', 'required', 'hidden', 'readin', 'fieldlength', 'regular', 'interception', 'span', 'labelwidth', 'tooltip', 'extra', 'enter', 'cursor'],
+  number: ['initval', 'readonly', 'hidden', 'decimal', 'min', 'max', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'enter', 'cursor'],
   select: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'setAll', 'linkSubField', 'span', 'labelwidth', 'tooltip', 'extra', 'emptyText', 'enter'],
   checkbox: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'span', 'labelwidth', 'tooltip', 'extra'],
   radio: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'linkSubField', 'span', 'labelwidth', 'tooltip', 'extra', 'setAll', 'emptyText'],
diff --git a/src/templates/zshare/modalform/modaleditable/index.jsx b/src/templates/zshare/modalform/modaleditable/index.jsx
index 314fe78..66fa4c5 100644
--- a/src/templates/zshare/modalform/modaleditable/index.jsx
+++ b/src/templates/zshare/modalform/modaleditable/index.jsx
@@ -300,7 +300,8 @@
     })
   }
 
-  handleAdd = () => {
+  handleAdd = (e) => {
+    e.stopPropagation()
     const { type, count, dataSource } = this.state
     const newData = {
       key: Utils.getuuid(),
diff --git a/src/templates/zshare/verifycard/index.jsx b/src/templates/zshare/verifycard/index.jsx
index a3a388e..13b0889 100644
--- a/src/templates/zshare/verifycard/index.jsx
+++ b/src/templates/zshare/verifycard/index.jsx
@@ -860,7 +860,7 @@
         _columns = fromJS(columns).toJS()
         let hasbid = false
         _columns = _columns.filter(col => {
-          if (col.field.toLowerCase() === 'bid') {
+          if (col.field && col.field.toLowerCase() === 'bid') {
             hasbid = true
           }
 
@@ -1301,7 +1301,7 @@
     
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
     return new Promise((resolve, reject) => {
-      if (card.sqlType !== 'custom' && verify.default === 'false' && verify.scripts.length === 0) {
+      if ((card.sqlType === 'custom' || verify.default === 'false') && verify.scripts.length === 0) {
         notification.warning({
           top: 92,
           message: '涓嶆墽琛岄粯璁ql鏃讹紝蹇呴』璁剧疆鑷畾涔夎剼鏈紒',

--
Gitblit v1.8.0