king
2022-09-06 b8e1395f02c929eaa96b949cf6027ee2a43856a6
2022-09-06
44个文件已修改
720 ■■■■■ 已修改文件
public/options.json 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/dragaction/card.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/dragaction/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/elementform/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/formconfig.jsx 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/search/main-search/dategroup/index.scss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/dragaction/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/formconfig.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/markcomponent/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/markcomponent/markform/index.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/base-table/columns/editColumn/formconfig.jsx 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/base-table/columns/editColumn/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/base-table/columns/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/edit-table/columns/editColumn/formconfig.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/edit-table/columns/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/columns/editColumn/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/columns/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/commontable/index.jsx 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardItem/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.jsx 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/table-card/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/share/normalTable/index.jsx 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.jsx 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/subtable/index.jsx 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/subtabtable/index.jsx 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/exceloutbutton/index.jsx 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/tabbutton/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkInput/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/normalTable/index.jsx 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/normalTable/index.scss 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/topSearch/dategroup/index.scss 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/modalconfig/source.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/dragaction/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/columncomponent/columnform/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/columncomponent/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/searchcomponent/dategroup/index.scss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/formconfig.jsx 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/modalform/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/options.json
@@ -1,12 +1,12 @@
{
  "appId": "201912040924165801464FF1788654BC5AC73",
  "appkey": "20191106103859640976D6E924E464D029CF0",
  "appId": "202108312122504607B107A83F55B40C98CCF",
  "appkey": "20210831212235413F287EC3BF489424496C8",
  "mainSystemApi": "http://sso.mk9h.cn/cloud/webapi/dostars",
  "systemType": "",
  "externalDatabase": "false",
  "lineColor": "",
  "filter": "false",
  "defaultApp": "mk",
  "defaultApp": "mkindustry",
  "defaultLang": "zh-CN",
  "WXAppID": "",
  "WXminiAppID": "",
@@ -15,6 +15,6 @@
  "probation": "",
  "keepPassword": "true",
  "platforms": ["H5", "wechat", "android", "ios", "wxMiniProgram"],
  "host": "http://qingqiumarket.cn",
  "service": "MKWMS/"
  "host": "http://demo.mk9h.cn",
  "service": "erp_new/"
}
src/menu/components/card/cardcellcomponent/dragaction/card.jsx
@@ -203,7 +203,7 @@
        <CopyOutlined className="copy" title="复制" onClick={() => copyCard(id)} />
        <CloseOutlined className="close" title="删除" onClick={() => delCard(id)} />
        <FontColorsOutlined className="style" title="调整样式" onClick={() => changeStyle(id)}/>
        {['text', 'number', 'slider', 'sequence', 'formula'].includes(card.eleType) ? <MarkColumn columns={fields} type={card.eleType} marks={card.marks} onSubmit={(vals) => updateMarks({...card, marks: vals})} /> : null }
        {['text', 'number', 'slider', 'sequence', 'formula'].includes(card.eleType) ? <MarkColumn field={card.field || ''} columns={fields} type={card.eleType} marks={card.marks} onSubmit={(vals) => updateMarks({...card, marks: vals})} /> : null }
      </div>
    } trigger="hover">
      <div ref={node => drag(drop(node))} className={'ant-col card-cell ant-col-' + card.width}>
src/menu/components/card/cardcellcomponent/dragaction/index.jsx
@@ -48,8 +48,6 @@
    let _val = fromJS(copycard).toJS()
    if (_val.control) {
      _val.control = ''
      delete _val.controlField
      delete _val.controlVal
    }
src/menu/components/card/cardcellcomponent/elementform/index.jsx
@@ -16,7 +16,7 @@
const cardTypeOptions = {
  sequence: ['eleType', 'width'],
  text: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'link', 'anchors', 'noValue', 'bgImage', 'fixStyle', 'copyable'],
  number: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'noValue', 'fixStyle'],
  number: ['eleType', 'datatype', 'width', 'height', 'prefix', 'postfix', 'noValue', 'fixStyle'],
  picture: ['eleType', 'datatype', 'width', 'lenWidRadio', 'maxWidth', 'link', 'noValue'],
  video: ['eleType', 'datatype', 'width', 'aspectRatio', 'autoPlay', 'loop', 'startTime', 'noValue', 'posterType'],
  icon: ['eleType', 'icon', 'datatype', 'width'],
@@ -66,7 +66,7 @@
          item.options = []
          config.columns.forEach(col => {
            let label = col.label
            if (label !== col.field) {
            if (label.toLowerCase() !== col.field.toLowerCase()) {
              label = col.field + ' ' + col.label
            }
            if (/^(Int|Decimal)/ig.test(col.datatype) && (card.eleType === 'number' || card.eleType === 'slider')) {
@@ -112,7 +112,7 @@
      if (datatype === 'dynamic') {
        _options.push('field')
        if (eleType === 'number') {
          _options.push('decimal')
          _options.push('decimal', 'format')
        }
      } else if (eleType === 'picture' || eleType === 'video') {
        _options.push('url')
@@ -175,7 +175,7 @@
          item.options = []
          config.columns.forEach(col => {
            let label = col.label
            if (label !== col.field) {
            if (label.toLowerCase() !== col.field.toLowerCase()) {
              label = col.field + ' ' + col.label
            }
src/menu/components/card/cardcellcomponent/formconfig.jsx
@@ -161,6 +161,16 @@
      required: true
    },
    {
      type: 'number',
      key: 'decimal',
      min: 0,
      max: 18,
      decimal: 0,
      label: '小数位',
      initVal: card.decimal === undefined ? '' : card.decimal,
      required: false
    },
    {
      type: 'select',
      key: 'format',
      label: '格式化',
@@ -198,16 +208,6 @@
        { value: 'YYYY-MM-DD HH:mm', text: 'YYYY-MM-DD HH:mm' },
        { value: 'YYYY-MM-DD HH:mm:ss', text: 'YYYY-MM-DD HH:mm:ss' },
      ]
    },
    {
      type: 'number',
      key: 'decimal',
      min: 0,
      max: 18,
      decimal: 0,
      label: '小数位',
      initVal: card.decimal === undefined ? '' : card.decimal,
      required: false
    },
    {
      type: 'text',
@@ -347,7 +347,7 @@
      max: 10,
      label: '高度(行)',
      initVal: card.height !== undefined ? card.height : 1,
      tooltip: '内容显示行数,值为空时高度自适应,注:自适应高度仅在设置卡片高度后有效。',
      tooltip: '内容显示行数,值为空时高度自适应。',
      required: false
    },
    {
src/menu/components/card/cardcellcomponent/index.jsx
@@ -423,6 +423,7 @@
          res.eleType = cell.eleType || null
          res.style = cell.style || null
          res.modal = cell.modal || null
          res.wrapStyle = cell.wrapStyle || null
          // res = {...cell, ...res}
          // if (!res.control) {
src/menu/components/search/main-search/dategroup/index.scss
@@ -13,6 +13,7 @@
  }
  .ant-tag-checkable-checked {
    border-color: #1890ff;
    background: #1890ff;
  }
}
src/menu/components/share/actioncomponent/dragaction/index.jsx
@@ -64,8 +64,6 @@
    let _val = fromJS(copycard).toJS()
    if (_val.control) {
      _val.control = ''
      delete _val.controlField
      delete _val.controlVal
    }
src/menu/components/share/actioncomponent/formconfig.jsx
@@ -285,7 +285,7 @@
      type: 'radio',
      key: 'procMode',
      label: '参数处理',
      initVal: card.procMode || 'system',
      initVal: card.procMode || (card.innerFunc ? 'inner' : 'system'),
      required: true,
      options: [{
        value: 'system',
@@ -433,7 +433,7 @@
      type: 'radio',
      key: 'callbackType',
      label: '回调方式',
      initVal: card.callbackType || 'script',
      initVal: card.callbackType || (card.callbackFunc ? 'func' : 'none'),
      tooltip: '使用后台脚本执行时,需要配合计划任务。',
      required: true,
      options: [{
src/menu/components/share/markcomponent/index.jsx
@@ -19,6 +19,7 @@
class MarkColumn extends Component {
  static propTpyes = {
    field: PropTypes.any,
    columns: PropTypes.array,  // 显示列
    marks: PropTypes.object,
    onSubmit: PropTypes.func
@@ -341,7 +342,7 @@
          onCancel={() => { this.setState({ visible: false }) }}
          destroyOnClose
        >
          <MarkForm dict={dict} signs={signs} columns={options} markChange={this.markChange}/>
          <MarkForm field={this.props.field} dict={dict} signs={signs} columns={options} markChange={this.markChange}/>
          <Col style={{fontSize: '12px', color: '#757575', paddingLeft: '10px'}} span={24}>注:从上到下,匹配第一个符合条件的标记。</Col>
          <EditTable actions={['edit', 'move', 'del']} data={marks} columns={markColumns} onChange={(marks) => this.setState({marks})}/>
        </Modal>
src/menu/components/share/markcomponent/markform/index.jsx
@@ -9,6 +9,7 @@
class UniqueForm extends Component {
  static propTpyes = {
    dict: PropTypes.object,         // 字典项
    field: PropTypes.any,
    columns: PropTypes.array,       // 列名集合
    signs: PropTypes.array,         // 标记类型
    markChange: PropTypes.func      // 修改函数
@@ -24,7 +25,7 @@
  }
  render() {
    const { columns, signs } = this.props
    const { columns, signs, field } = this.props
    const { getFieldDecorator } = this.props.form
    const formItemLayout = {
      labelCol: {
@@ -37,13 +38,18 @@
      }
    }
    let initVal = []
    if (field) {
      initVal = [field, 'static']
    }
    return (
      <Form {...formItemLayout} className="normal-table-mark-form">
        <Row gutter={24}>
          <Col span={6}>
            <Form.Item label={'对比字段'}>
              {getFieldDecorator('field', {
                initialValue: [],
                initialValue: initVal,
                rules: [
                  {
                    required: true,
src/menu/components/table/base-table/columns/editColumn/formconfig.jsx
@@ -276,6 +276,17 @@
      readonly: false
    },
    {
      type: 'number',
      key: 'span',
      min: 1,
      max: 24,
      precision: 0,
      label: '图片宽度',
      initVal: card.span || 24,
      tooltip: '栅格布局,等分为24份。',
      required: true
    },
    {
      type: 'select',
      key: 'lenWidRadio',
      label: '长宽比',
@@ -299,27 +310,6 @@
        { value: '2:3', text: '2:3' },
        { value: '9:16', text: '9:16' },
      ]
    },
    {
      type: 'radio',
      key: 'picSort',
      label: '图片排列',
      initVal: card.picSort || '1',
      tooltip: '同一单元格内,含有多张图片时的列数。',
      required: false,
      options: [{
        value: '1',
        text: '1'
      }, {
        value: '2',
        text: '2'
      }, {
        value: '3',
        text: '3'
      }, {
        value: '4',
        text: '4'
      }]
    },
    {
      type: 'radio',
src/menu/components/table/base-table/columns/editColumn/index.jsx
@@ -14,7 +14,7 @@
  number: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'decimal', 'format', 'prefix', 'postfix', 'blacklist', 'perspective', 'sum', 'rowspan'],
  link: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'joint', 'Width', 'blacklist', 'nameField'],
  textarea: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'prefix', 'postfix', 'blacklist'],
  picture: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'blacklist', 'scale', 'lenWidRadio', 'picSort'],
  picture: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'blacklist', 'scale', 'lenWidRadio', 'span'],
  colspan: ['label', 'type', 'Align', 'Hide', 'blacklist'],
  custom: ['label', 'type', 'Align', 'Hide', 'Width', 'blacklist'],
  action: ['label', 'type', 'Align', 'Width'],
@@ -380,7 +380,7 @@
        <Modal
          title="显示列编辑"
          visible={visible}
          width={800}
          width={850}
          maskClosable={false}
          onOk={this.handleSubmit}
          onCancel={this.editModalCancel}
src/menu/components/table/base-table/columns/index.jsx
@@ -66,7 +66,7 @@
              {column && column.type === 'custom' ? <PasteComponent options={['customCardElement']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null}
              {column && column.type === 'custom' ? <FontColorsOutlined className="style" title="调整样式" onClick={() => this.props.changeStyle(column)}/> : null}
              <DeleteOutlined className="close" title="删除" onClick={this.deleteCol} />
              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
            </div>
          } trigger="hover">
            {children}
@@ -84,7 +84,7 @@
              <EditOutlined className="edit" title="编辑" onClick={() => this.props.editColumn(column)} />
              {column.type === 'custom' ? <PasteComponent options={['customCardElement']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null}
              <DeleteOutlined className="close" title="删除" onClick={this.deleteCol} />
              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
            </div>
          } trigger="hover">
            {children}
src/menu/components/table/edit-table/columns/editColumn/formconfig.jsx
@@ -384,7 +384,7 @@
      precision: 0,
      label: Formdict['header.form.decimal'],
      initVal: card.decimal || 0,
      required: true
      required: false
    },
    {
      type: 'number',
src/menu/components/table/edit-table/columns/index.jsx
@@ -72,7 +72,7 @@
            {column.type === 'action' ? <PasteComponent options={['action']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null}
            {column.type === 'custom' ? <FontColorsOutlined className="style" title="调整样式" onClick={() => this.props.changeStyle(column)}/> : null}
            <DeleteOutlined className="close" title="删除" onClick={this.deleteCol} />
            {['text', 'number', 'formula'].includes(column.type) ? <MarkColumn columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
            {['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
          </div>
        } trigger="hover">
          {children}
src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx
@@ -217,7 +217,7 @@
      decimal: 0,
      label: Formdict['header.form.decimal'],
      initVal: card.decimal || 0,
      required: true
      required: false
    },
    {
      type: 'select',
@@ -276,6 +276,17 @@
      readonly: false
    },
    {
      type: 'number',
      key: 'span',
      min: 1,
      max: 24,
      precision: 0,
      label: '图片宽度',
      initVal: card.span || 24,
      tooltip: '栅格布局,等分为24份。',
      required: true
    },
    {
      type: 'select',
      key: 'lenWidRadio',
      label: '长宽比',
@@ -299,27 +310,6 @@
        { value: '2:3', text: '2:3' },
        { value: '9:16', text: '9:16' },
      ]
    },
    {
      type: 'radio',
      key: 'picSort',
      label: '图片排列',
      initVal: card.picSort || '1',
      tooltip: '同一单元格内,含有多张图片时的列数。',
      required: false,
      options: [{
        value: '1',
        text: '1'
      }, {
        value: '2',
        text: '2'
      }, {
        value: '3',
        text: '3'
      }, {
        value: '4',
        text: '4'
      }]
    },
    {
      type: 'radio',
src/menu/components/table/normal-table/columns/editColumn/index.jsx
@@ -14,7 +14,7 @@
  number: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'decimal', 'format', 'prefix', 'postfix', 'blacklist', 'perspective', 'sum', 'rowspan'],
  link: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'joint', 'Width', 'blacklist', 'nameField'],
  textarea: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'prefix', 'postfix', 'blacklist'],
  picture: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'blacklist', 'scale', 'lenWidRadio', 'picSort'],
  picture: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'blacklist', 'scale', 'lenWidRadio', 'span'],
  colspan: ['label', 'type', 'Align', 'Hide', 'blacklist'],
  custom: ['label', 'type', 'Align', 'Hide', 'Width', 'blacklist'],
  action: ['label', 'type', 'Align', 'Width'],
@@ -380,7 +380,7 @@
        <Modal
          title="显示列编辑"
          visible={visible}
          width={800}
          width={850}
          maskClosable={false}
          onOk={this.handleSubmit}
          onCancel={this.editModalCancel}
src/menu/components/table/normal-table/columns/index.jsx
@@ -67,7 +67,7 @@
              {column && column.type === 'action' ? <PasteComponent options={['action']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null}
              {column && column.type === 'custom' ? <FontColorsOutlined className="style" title="调整样式" onClick={() => this.props.changeStyle(column)}/> : null}
              <DeleteOutlined className="close" title="删除" onClick={this.deleteCol} />
              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
            </div>
          } trigger="hover">
            {children}
@@ -85,7 +85,7 @@
              <EditOutlined className="edit" title="编辑" onClick={() => this.props.editColumn(column)} />
              {column.type === 'custom' ? <PasteComponent options={['customCardElement']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null}
              <DeleteOutlined className="close" title="删除" onClick={this.deleteCol} />
              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
            </div>
          } trigger="hover">
            {children}
src/tabviews/commontable/index.jsx
@@ -341,6 +341,15 @@
            col.linkThdMenu = ''
          }
          if (col.type === 'number') {
            col.decimal = col.decimal || 0
            col.round = Math.pow(10, col.decimal)
            if (col.format === 'percent') {
              col.decimal = col.decimal > 2 ? col.decimal - 2 : 0
            }
          }
          col.nameField && _arrField.push(col.nameField) // 链接名字段
          if (col.Hide !== 'true' && col.type === 'number' && col.sum === 'true') {
            statFields.push(col)
src/tabviews/custom/components/card/cardItem/index.jsx
@@ -85,11 +85,12 @@
      let menu = null
      if (card.setting.MenuID) {
        let _menu = this.props.permMenus.filter(m => m.MenuID === card.setting.MenuID)[0] || ''
        menu = {
          MenuID: card.setting.MenuID,
          MenuName: card.setting.MenuName,
          MenuName: _menu ? _menu.MenuName : card.setting.MenuName,
          MenuNo: card.setting.MenuNo,
          type: card.setting.tabType
          type: _menu ? _menu.type : card.setting.tabType
        }
      } else if (card.setting.menu && card.setting.menu.length > 0) {
        let menu_id = card.setting.menu.slice(-1)[0]
src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -44,21 +44,7 @@
    elements: PropTypes.array,       // 元素集
  }
  state = {
    card: null,          // 编辑中元素
    elements: null,      // 按钮组
  }
  /**
   * @description 搜索条件初始化
   */
  UNSAFE_componentWillMount () {
    const { elements } = this.props
    this.setState({
      elements: fromJS(elements).toJS()
    })
  }
  state = {}
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState)) || !is(fromJS(this.props), fromJS(nextProps))
@@ -237,9 +223,12 @@
    return color
  }
  getContent = (card) => {
    const { data, cards } = this.props
  getContent = () => {
    const { data, cards, elements } = this.props
    let contents = []
    elements.forEach(card => {
    if (card.eleType === 'sequence') {
      let _style = {}
      if (card.marks) {
@@ -251,7 +240,7 @@
        _style = mark.style
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div style={card.style}>
            <div className="ant-mk-text"><span className="sequence-wrap" style={_style}>{data.$Index || ''}</span></div>
@@ -376,7 +365,7 @@
        _style.backgroundImage = `url('${data[card.bgImage]}')`
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div style={_style} onClick={(e) => {this.openNewView(e, card)}}>
            <div className={'ant-mk-text line' + (card.height || '')} style={{height: card.innerHeight || 'auto'}}>{val}</div>
@@ -398,23 +387,17 @@
      }
      if (typeof(val) === 'number') {
          if (card.round) {
            val = Math.round(val * card.round) / card.round
          }
        if (card.format === 'percent') {
          val = val * 100
        } else if (card.format === 'abs') {
          val = Math.abs(val)
        }
        if (typeof(card.decimal) === 'number') {
          let decimal = card.decimal
          if (card.format === 'percent') {
            decimal = decimal - 2
          }
          if (decimal < 0) {
            decimal = 0
          }
          val = val.toFixed(decimal)
          if (card.round) {
            val = val.toFixed(card.decimal)
        } else {
          val = '' + val
        }
@@ -449,7 +432,7 @@
        }
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div style={_style}>
            <div className={'ant-mk-text line' + (card.height || '')} style={{height: card.innerHeight || 'auto'}}>{val}</div>
@@ -465,7 +448,7 @@
        val = data[card.field]
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div style={card.style}>
            {val ? <Tooltip title={val}>
@@ -495,7 +478,7 @@
        color = _color ? _color : color
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div style={card.style}>
            <MkProgress value={val} config={card} color={color}/>
@@ -529,12 +512,6 @@
        return null
      }
      
      if (url) {
        _imagestyle = {backgroundImage: `url('${url}')`}
      } else {
        _imagestyle = {backgroundImage: `url(${LostPng})`, backgroundSize: 'contain'}
      }
      if (_style.borderRadius) {
        _imagestyle.borderRadius = _style.borderRadius
      }
@@ -550,29 +527,32 @@
      }
      let scale = url && card.scale === 'true'
        let urls = url ? url.split(',').filter(Boolean) : [LostPng]
      
      return (
        <Col key={card.uuid} span={card.width}>
        if (!url) {
          _imagestyle = {backgroundSize: 'contain'}
        }
        urls.forEach((u, i) => {
          contents.push(<Col key={card.uuid + i} span={card.width}>
          <div style={_style} onClick={(e) => {this.openNewView(e, card)}}>
            <div
              className={'ant-mk-picture' + (scale ? ' scale' : '')}
              onClick={(e) => {
                if (scale) {
                  e.stopPropagation()
                } else {
                  return
                }
                  if (!scale) return
                MKEmitter.emit('mkImageScale', url)
                  e.stopPropagation()
                  MKEmitter.emit('mkImageScale', url, urls)
              }}
              style={_imagestyle}
                style={{..._imagestyle, backgroundImage: `url('${u}')`}}
            ></div>
          </div>
        </Col>
      )
          </Col>)
        })
    } else if (card.eleType === 'splitline') {
      let _borderWidth = card.borderWidth === undefined ? 1 : card.borderWidth
      return (
        contents.push(
        <Col key={card.uuid} span={card.width} style={{minHeight: _borderWidth}}>
          <div style={card.style}>
            <div className="ant-mk-splitline" style={{borderColor: card.color, borderWidth: _borderWidth}}></div>
@@ -592,7 +572,7 @@
        return null
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div style={card.style}>
            <div style={{height: card.innerHeight || 25}}>
@@ -622,13 +602,17 @@
        poster = card.posterUrl || ''
      }
      return (
        <Col key={card.uuid} span={card.width}>
        let urls = url.split(',').filter(Boolean)
        urls.forEach((u, i) => {
          contents.push(
            <Col key={card.uuid + i} span={card.width}>
          <div className="video-wrap" style={card.style}>
            <Video card={card} poster={poster} value={url}/>
                <Video card={card} poster={poster} value={u}/>
          </div>
        </Col>
      )
        })
    } else if (card.eleType === 'qrcode') {
      let val = ''
@@ -642,7 +626,7 @@
        return null
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div style={card.style}>
            <div style={{minHeight: card.qrWidth || 50}}>
@@ -661,7 +645,7 @@
        val = `${card.prefix || ''}${val}${card.postfix || ''}`
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div className="ant-mk-date" style={card.style}>
            {val}
@@ -746,7 +730,7 @@
        }
      }
      return (
        contents.push(
        <Col key={card.uuid} span={card.width}>
          <div style={_style}>
            <div className={'ant-mk-text line' + (card.height || '')} style={{height: card.innerHeight || 'auto'}}>{val}</div>
@@ -778,7 +762,7 @@
      }
      if (['exec', 'prompt', 'pop', 'form'].includes(card.OpenType)) {
        return (
          contents.push(
          <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
            <NormalButton
              btn={card}
@@ -792,7 +776,7 @@
          </Col>
        )
      } else if (card.OpenType === 'excelIn') {
        return (
          contents.push(
          <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
            <ExcelInButton
              btn={card}
@@ -805,7 +789,7 @@
          </Col>
        )
      } else if (card.OpenType === 'excelOut') {
        return (
          contents.push(
          <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
            <ExcelOutButton
              btn={card}
@@ -818,7 +802,7 @@
          </Col>
        )
      } else if (card.OpenType === 'popview') {
        return (
          contents.push(
          <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
            <PopupButton
              btn={card}
@@ -831,7 +815,7 @@
          </Col>
        )
      } else if (card.OpenType === 'tab') {
        return (
          contents.push(
          <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
            <TabButton
              btn={card}
@@ -843,7 +827,7 @@
          </Col>
        )
      } else if (card.OpenType === 'innerpage') {
        return (
          contents.push(
          <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
            <NewPageButton
              btn={card}
@@ -856,7 +840,7 @@
        )
      } else if (card.OpenType === 'funcbutton') {
        if (card.funcType === 'changeuser' || card.funcType === 'closetab') {
          return (
            contents.push(
            <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
              <ChangeUserButton
                btn={card}
@@ -869,7 +853,7 @@
            </Col>
          )
        } else if (card.funcType === 'print') {
          return (
            contents.push(
            <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
              <PrintButton
                btn={card}
@@ -882,7 +866,7 @@
            </Col>
          )
        } else if (card.funcType === 'megvii') {
          return (
            contents.push(
            <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
              <FuncMegvii
                btn={card}
@@ -894,7 +878,7 @@
            </Col>
          )
        } else if (card.funcType === 'filezip') {
          return (
            contents.push(
            <Col key={card.uuid} className="mk-cell-btn" style={card.wrapStyle} span={card.width}>
              <FuncZip
                btn={card}
@@ -908,16 +892,15 @@
        }
      }
    }
    })
    return null
    return contents
  }
  render() {
    const { elements } = this.state
    return (
      <div className="card-cell-list">
        {elements.map(item => this.getContent(item))}
        {this.getContent()}
      </div>
    )
  }
src/tabviews/custom/components/card/table-card/index.jsx
@@ -333,11 +333,12 @@
      let menu = null
      if (card.setting.MenuID) {
        let _menu = this.props.permMenus.filter(m => m.MenuID === card.setting.MenuID)[0] || ''
        menu = {
          MenuID: card.setting.MenuID,
          MenuName: card.setting.MenuName,
          MenuName: _menu ? _menu.MenuName : card.setting.MenuName,
          MenuNo: card.setting.MenuNo,
          type: card.setting.tabType
          type: _menu ? _menu.type : card.setting.tabType
        }
      } else if (card.setting.menu && card.setting.menu.length > 0) {
        let menu_id = card.setting.menu.slice(-1)[0]
src/tabviews/custom/components/share/normalTable/index.jsx
@@ -177,15 +177,17 @@
      }
      if (content !== '') {
        let decimal = col.decimal || 0
        if (col.round) {
          content = Math.round(content * col.round) / col.round
        }
        if (col.format === 'percent') {
          content = content * 100
          decimal = decimal > 2 ? decimal - 2 : 0
        } else if (col.format === 'abs') {
          content = Math.abs(content)
        }
        content = content.toFixed(decimal)
        if (col.round) {
          content = content.toFixed(col.decimal)
        }
  
        if (col.format === 'thdSeparator') {
          content = content.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
@@ -240,7 +242,6 @@
        photos = photos.split(',').filter(Boolean)
      }
      let cols = 24 / (col.picSort || 1)
      let paddingTop = '100%'
      let scale = col.scale === 'true'
@@ -250,8 +251,8 @@
      resProps.children = (
        <div>
          {photos && photos.map((url, i) => (
            <Col key={i} span={cols}>
          {photos.map((url, i) => (
            <Col key={i} span={col.span || 24}>
              <div className={'ant-mk-picture' + (scale ? ' scale' : '')} onClick={() => {
                if (!scale) return
                MKEmitter.emit('mkImageScale', url, photos)
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -388,15 +388,17 @@
      }
      if (content !== '') {
        let decimal = col.decimal || 0
        if (col.round) {
          content = Math.round(content * col.round) / col.round
        }
        if (col.format === 'percent') {
          content = content * 100
          decimal = decimal > 2 ? decimal - 2 : 0
        } else if (col.format === 'abs') {
          content = Math.abs(content)
        }
        content = content.toFixed(decimal)
        if (col.round) {
          content = content.toFixed(col.decimal)
        }
  
        if (col.format === 'thdSeparator') {
          content = content.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
@@ -772,15 +774,17 @@
        }
        if (content !== '') {
          let decimal = col.decimal || 0
          if (col.round) {
            content = Math.round(content * col.round) / col.round
          }
          if (col.format === 'percent') {
            content = content * 100
            decimal = decimal > 2 ? decimal - 2 : 0
          } else if (col.format === 'abs') {
            content = Math.abs(content)
          }
          content = content.toFixed(decimal)
          if (col.round) {
            content = content.toFixed(col.decimal)
          }
    
          if (col.format === 'thdSeparator') {
            content = content.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
src/tabviews/custom/index.jsx
@@ -581,8 +581,16 @@
            } else if (col.blacklist && col.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
              col.Hide = 'true'
            }
            if (col.type === 'number' && col.sum === 'true' && !statFields.includes(col.field)) {
            if (col.type === 'number') {
              if (col.sum === 'true' && !statFields.includes(col.field)) {
              statFields.push(col)
              }
              if (typeof(col.decimal) === 'number') {
                col.round = Math.pow(10, col.decimal)
                if (col.format === 'percent') {
                  col.decimal = col.decimal > 2 ? col.decimal - 2 : 0
                }
              }
            } else if (col.type === 'colspan') {
              col.subcols = getCols(col.subcols || [])
              if (col.subcols.length === 0) {
@@ -590,8 +598,16 @@
              }
            } else if (col.type === 'custom') {
              col.elements = col.elements.map(cell => {
                if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height) {
                if (['text', 'number', 'formula'].includes(cell.eleType)) {
                  if (!cell.height) {
                  cell.innerHeight = 'auto'
                  }
                  if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') {
                    cell.round = Math.pow(10, cell.decimal)
                    if (cell.format === 'percent') {
                      cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0
                    }
                  }
                } else if (cell.eleType === 'icon') {
                  let fontSize = 14
                  let lineHeight = 1.5
@@ -671,8 +687,6 @@
      if (item.type === 'card') {
        item.subcards && item.subcards.forEach(card => {
          let _hasheight = card.style.height && card.style.height !== 'auto'
          if (card.style.boxShadow) {
            delete card.style.hShadow
            delete card.style.vShadow
@@ -704,8 +718,16 @@
                card.style = card.style || {}
                card.style = {...card.style, ...card.btnstyle}
              }
            } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
            } else if (['text', 'number', 'formula'].includes(cell.eleType)) {
              if (!cell.height) {
              cell.innerHeight = 'auto'
              }
              if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') {
                cell.round = Math.pow(10, cell.decimal)
                if (cell.format === 'percent') {
                  cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0
                }
              }
            } else if (cell.eleType === 'icon') {
              let fontSize = 14
              let lineHeight = 1.5
@@ -746,8 +768,16 @@
                card.style = card.style || {}
                card.style = {...card.style, ...card.btnstyle}
              }
            } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
            } else if (['text', 'number', 'formula'].includes(cell.eleType)) {
              if (!cell.height) {
              cell.innerHeight = 'auto'
              }
              if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') {
                cell.round = Math.pow(10, cell.decimal)
                if (cell.format === 'percent') {
                  cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0
                }
              }
            } else if (cell.eleType === 'icon') {
              let fontSize = 14
              let lineHeight = 1.5
@@ -792,8 +822,16 @@
            if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置
              cell = this.getPrinter(cell, item.uuid)
            }
          } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height) {
          } else if (['text', 'number', 'formula'].includes(cell.eleType)) {
            if (!cell.height) {
            cell.innerHeight = 'auto'
            }
            if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') {
              cell.round = Math.pow(10, cell.decimal)
              if (cell.format === 'percent') {
                cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0
              }
            }
          } else if (cell.eleType === 'icon') {
            let fontSize = 14
            let lineHeight = 1.5
@@ -812,7 +850,6 @@
        })
      } else if ((item.type === 'table' && item.subtype === 'tablecard') || item.type === 'carousel' || item.type === 'timeline') {
        item.subcards && item.subcards.forEach(card => {
          let _hasheight = card.style.height && card.style.height !== 'auto'
          card.elements = card.elements.filter(cell => {
            if (cell.eleType === 'button') {
              if (cell.hidden === 'true') return false
@@ -837,8 +874,16 @@
                card.style = card.style || {}
                card.style = {...card.style, ...card.btnstyle}
              }
            } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
            } else if (['text', 'number', 'formula'].includes(cell.eleType)) {
              if (!cell.height) {
              cell.innerHeight = 'auto'
              }
              if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') {
                cell.round = Math.pow(10, cell.decimal)
                if (cell.format === 'percent') {
                  cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0
                }
              }
            } else if (cell.eleType === 'icon') {
              let fontSize = 14
              let lineHeight = 1.5
@@ -1051,13 +1096,13 @@
      }
  
      if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
        component.setting.dataresource = component.setting.dataresource.replace(/\$@/ig, '/*')
        component.setting.dataresource = component.setting.dataresource.replace(/\$@/ig, '/*').replace(/@datam@/ig, 'Y')
        component.setting.dataresource = component.setting.dataresource.replace(/@\$/ig, '*/')
        _customScript = _customScript.replace(/\$@/ig, '/*')
        _customScript = _customScript.replace(/\$@/ig, '/*').replace(/@datam@/ig, 'Y')
        _customScript = _customScript.replace(/@\$/ig, '*/')
      } else {
        component.setting.dataresource = component.setting.dataresource.replace(/@\$|\$@/ig, '')
        _customScript = _customScript.replace(/@\$|\$@/ig, '')
        component.setting.dataresource = component.setting.dataresource.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '')
        _customScript = _customScript.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '')
      }
      regs.forEach(cell => {
src/tabviews/subtable/index.jsx
@@ -188,6 +188,15 @@
            col.linkThdMenu = ''
          }
          if (col.type === 'number') {
            col.decimal = col.decimal || 0
            col.round = Math.pow(10, col.decimal)
            if (col.format === 'percent') {
              col.decimal = col.decimal > 2 ? col.decimal - 2 : 0
            }
          }
          col.nameField && _arrField.push(col.nameField) // 链接名字段
          if (col.Hide !== 'true' && col.type === 'number' && col.sum === 'true') {
            statFields.push(col)
src/tabviews/subtabtable/index.jsx
@@ -160,6 +160,15 @@
        if (col.field) {
          _arrField.push(col.field)
          if (col.type === 'number') {
            col.decimal = col.decimal || 0
            col.round = Math.pow(10, col.decimal)
            if (col.format === 'percent') {
              col.decimal = col.decimal > 2 ? col.decimal - 2 : 0
            }
          }
          col.nameField && _arrField.push(col.nameField) // 链接名字段
          if (col.Hide !== 'true' && col.type === 'number' && col.sum === 'true') {
            statFields.push(col)
src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -487,11 +487,22 @@
  exportExcel = (data) => {
    const { btn } = this.props
    
    let columns = btn.verify.columns.filter(col => col.output !== 'false')
    let imgCol = false
    let columns = btn.verify.columns.filter(col => {
      if (col.output === 'false') return false
      if (col.type === 'image') {
        imgCol = true
      }
      if (col.type === 'number' && (col.decimal || col.decimal === 0) ) {
        col.round = Math.pow(10, col.decimal)
      }
      return col
    })
    
    try {
      let imgCol = columns.filter(col => col.type === 'image')[0]
      if (imgCol) {
        const column = columns.map(item => {
          let col = {
@@ -515,11 +526,18 @@
          item.$Index = index + 1 + ''
  
          columns.forEach((col, i) => {
            if (item[col.Column] && col.abs === 'true') {
              _row[col.Column] = Math.abs(item[col.Column])
            } else {
              _row[col.Column] = item[col.Column]
            let val = item[col.Column]
            if (typeof(val) === 'number') {
              if (col.abs === 'true') {
                val = Math.abs(val)
            }
              if (col.round) {
                val = Math.round(val * col.round) / col.round
                val = val.toFixed(col.decimal)
              }
            }
            _row[col.Column] = val
          })
  
          table.push(_row)
@@ -532,23 +550,14 @@
        } else {
          this.execSuccess({ErrCode: 'S', ErrMesg: '导出成功!'})
        }
      } else {
        let _header = []
        let _topRow = {}
        let colwidth = []
        let abses = []
  
        columns.forEach(col => {
          if (_topRow[col.Column]) return
          _header.push(col.Column)
          _topRow[col.Column] = col.Text
          if (col.abs === 'true') {
            abses.push(col.Column)
          }
          colwidth.push({width: col.Width || 20})
        })
  
@@ -561,12 +570,20 @@
  
          item.$Index = index + 1 + ''
  
          _header.forEach(field => {
            if (item[field] && abses.includes(field)) {
              _row[field] = Math.abs(item[field])
            } else {
              _row[field] = item[field]
          columns.forEach((col, i) => {
            let val = item[col.Column]
            if (typeof(val) === 'number') {
              if (col.abs === 'true') {
                val = Math.abs(val)
            }
              if (col.round) {
                val = Math.round(val * col.round) / col.round
                val = val.toFixed(col.decimal)
              }
            }
            _row[col.Column] = val
          })
  
          table.push(_row)
src/tabviews/zshare/actionList/tabbutton/index.jsx
@@ -157,11 +157,12 @@
      let menu = null
      if (btn.MenuID) {
        let _menu = this.props.permMenus.filter(m => m.MenuID === btn.MenuID)[0] || ''
        menu = {
          MenuID: btn.MenuID,
          MenuName: btn.MenuName,
          MenuName: _menu ? _menu.MenuName : btn.MenuName,
          MenuNo: btn.MenuNo,
          type: btn.tabType
          type: _menu ? _menu.type : btn.tabType
        }
      } else if (btn.linkmenu && btn.linkmenu.length > 0) {
        let menu_id = btn.linkmenu.slice(-1)[0]
src/tabviews/zshare/mutilform/index.jsx
@@ -913,7 +913,7 @@
        } else if (item.type === 'textarea') {
          content = (<MKTextArea config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})}/>)
        } else if (item.type === 'rate') {
          content = (<Rate count={item.rateCount} disabled={item.readonly} onChange={(val) => this.recordChange({[item.field]: val})} character={item.character ? <MkIcon type={item.character}/> : <StarFilled />} allowHalf={item.allowHalf}/>)
          content = (<Rate count={item.rateCount} disabled={item.readonly} style={{color: item.color || '#fadb14'}} onChange={(val) => this.recordChange({[item.field]: val})} character={item.character ? <MkIcon type={item.character}/> : <StarFilled />} allowHalf={item.allowHalf}/>)
        } else if (item.type === 'brafteditor') {
          content = (<MKEditor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
          label = item.hidelabel !== 'true' ? label : ''
src/tabviews/zshare/mutilform/mkInput/index.jsx
@@ -83,9 +83,13 @@
  handleChange = (e) => {
    let val = e.target.value
    let submit = /\n/ig.test(val)
    let submit = /\n/g.test(val)
    val = val.replace(/\n/ig, '')
    val = val.replace(/\n/g, '')
    if (submit && /^\s+$/.test(val)) {
      submit = false
    }
    let _val = val
src/tabviews/zshare/normalTable/index.jsx
@@ -2,7 +2,7 @@
import PropTypes from 'prop-types'
import md5 from 'md5'
import { is, fromJS } from 'immutable'
import { Table, Affix, Typography } from 'antd'
import { Table, Affix, Typography, Col } from 'antd'
import asyncComponent from '@/utils/asyncComponent'
import MKEmitter from '@/utils/events.js'
@@ -18,6 +18,12 @@
const TabButton = asyncComponent(() => import('@/tabviews/zshare/actionList/tabbutton'))
const NewPageButton = asyncComponent(() => import('@/tabviews/zshare/actionList/newpagebutton'))
const Video = asyncComponent(() => import('@/components/video'))
const PicRadio = {
  '4:3': '75%', '3:2': '66.67%', '16:9': '56.25%', '2:1': '50%', '3:1': '33.33%', '4:1': '25%',
  '5:1': '20%', '6:1': '16.67%', '7:1': '14.29%', '8:1': '12.5%', '9:1': '11.11%',
  '10:1': '10%', '3:4': '133.33%', '2:3': '150%', '9:16': '177.78%'
}
class BodyRow extends React.Component {
  shouldComponentUpdate (nextProps) {
@@ -548,13 +554,13 @@
      }
      if (content !== '') {
        let decimal = item.decimal || 0
        content = Math.round(content * item.round) / item.round
        if (item.format === 'percent') {
          content = content * 100
          decimal = decimal > 2 ? decimal - 2 : 0
        }
  
        content = content.toFixed(decimal)
        content = content.toFixed(item.decimal)
  
        if (item.format === 'thdSeparator') {
          content = content.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
@@ -633,6 +639,7 @@
      }
    } else if (item.type === 'picture') {
      let photos = ''
      let style = {borderRadius: '2px'}
      if (item.field && record.hasOwnProperty(item.field)) {
        photos = record[item.field] + ''
      }
@@ -642,19 +649,29 @@
        photos = photos.split(',').filter(Boolean)
      }
      let maxHeight = item.maxHeight || 128
      if (PicRadio[item.lenWidRadio]) {
        style.paddingTop = PicRadio[item.lenWidRadio]
      } else {
        style.paddingTop = '100%'
      }
      let scale = item.scale === 'true'
      return (
        <div className="picture-col">
          {photos && photos.map((url, i) => {
            if (item.scale === 'true') {
              return <img style={{maxHeight: maxHeight}} className="image-scale" onClick={(e) => {
          {photos.map((url, i) => (<Col key={i} span={item.span || 24}>
            <div
              className={'mk-picture' + (scale ? ' image-scale' : '')}
              onClick={(e) => {
                if (!scale) return
                e.stopPropagation()
                MKEmitter.emit('mkImageScale', url, photos)
              }} key={`${i}`} src={url} alt=""/>
            } else {
              return <img style={{maxHeight: maxHeight}} key={`${i}`} src={url} alt=""/>
            }
          })}
              }}
              style={{...style, backgroundImage: `url('${url}')`}}
            ></div>
          </Col>))}
        </div>
      )
    } else if (item.type === 'video') {
@@ -814,13 +831,13 @@
          }
    
          if (content !== '') {
            let decimal = col.decimal || 0
            content = Math.round(content * col.round) / col.round
            if (col.format === 'percent') {
              content = content * 100
              decimal = decimal > 2 ? decimal - 2 : 0
            }
            content = content.toFixed(decimal)
            content = content.toFixed(col.decimal)
      
            if (col.format === 'thdSeparator') {
              content = content.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
@@ -863,7 +880,7 @@
          }
          photos.forEach(photo => {
            images.push({url: photo, align: col.Align, scale: col.scale === 'true', maxHeight: col.maxHeight || 128})
            images.push({url: photo, align: col.Align, scale: col.scale === 'true'})
          })
        } else if (col.type === 'text') {
          let content = record[col.field]
@@ -1002,12 +1019,12 @@
          <div className="content-fence-top" style={images[0] ? {textAlign: images[0].align} : null}>
            {images.map((_img, index) => {
              if (_img.scale) {
                return <img style={{maxHeight: _img.maxHeight}} className="image-scale" onClick={(e) => {
                return <img className="image-scale" onClick={(e) => {
                  e.stopPropagation()
                  MKEmitter.emit('mkImageScale', _img.url, images.map(g => g.url))
                }} key={`${index}`} src={_img.url} alt=""/>
              } else {
                return (<img style={{maxHeight: _img.maxHeight}} key={`${index}`} src={_img.url} alt=""/>)
                return (<img key={`${index}`} src={_img.url} alt=""/>)
              }
            })}
          </div>
@@ -1024,11 +1041,11 @@
          <div className="content-fence-left" style={images[0] ? {textAlign: images[0].align} : null}>
            {images.map((_img, index) => {
              if (_img.scale) {
                return <img style={{maxHeight: _img.maxHeight}} className="image-scale" onClick={() => {
                return <img className="image-scale" onClick={() => {
                  MKEmitter.emit('mkImageScale', _img.url, images.map(g => g.url))
                }} key={`${index}`} src={_img.url} alt=""/>
              } else {
                return (<img style={{maxHeight: _img.maxHeight}} key={`${index}`} src={_img.url} alt=""/>)
                return (<img key={`${index}`} src={_img.url} alt=""/>)
              }
            })}
          </div>
src/tabviews/zshare/normalTable/index.scss
@@ -121,6 +121,7 @@
              img {
                max-width: 100%;
                max-height: 128px;
                display: block;
              }
              img + img {
@@ -142,6 +143,7 @@
              img {
                max-width: 100%;
                max-height: 128px;
                display: block;
                float: right;
              }
@@ -167,12 +169,15 @@
          }
        }
        .picture-col {
          img {
            max-width: 100%;
            display: inline-block;
          margin-left: -5px;
          margin-right: -5px;
          >.ant-col {
            padding: 5px;
          }
          img + img {
            margin-top: 10px;
          .mk-picture {
            background-color: #d9d9d9;
            background-position: center center;
            background-size: cover;
          }
          .image-scale {
            cursor: zoom-in;
src/tabviews/zshare/topSearch/dategroup/index.scss
@@ -49,7 +49,8 @@
    background-color: #ffffff;
  }
  .ant-tag-checkable-checked {
    border-color: #1890ff;
    border-color: var(--mk-sys-color);
    background: var(--mk-sys-color);
  }
  .table-search-date-group-value {
    position: absolute;
src/templates/modalconfig/source.jsx
@@ -91,6 +91,11 @@
  },
  {
    type: 'form',
    label: '多行文本',
    subType: 'textarea',
  },
  {
    type: 'form',
    label: CommonDict['model.form.multiselect'],
    subType: 'multiselect',
  },
@@ -133,11 +138,6 @@
    type: 'form',
    label: CommonDict['model.form.datemonth'],
    subType: 'datemonth',
  },
  {
    type: 'form',
    label: CommonDict['model.form.textarea'],
    subType: 'textarea',
  },
  {
    type: 'form',
src/templates/sharecomponent/actioncomponent/dragaction/index.jsx
@@ -64,6 +64,10 @@
    let _val = fromJS(copycard).toJS()
    try {
      if (_val.control) {
        delete _val.controlField
        delete _val.controlVal
      }
      delete _val.$srcId
    
      let srcid = localStorage.getItem(window.location.href.split('#')[0] + 'srcId')
src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx
@@ -79,19 +79,20 @@
              })(<InputNumber min={5} max={200} precision={0} />)}
            </Form.Item>
          </Col>
          <Col span={5}>
          <Col span={6}>
            <Form.Item label="类型">
              {getFieldDecorator('type', {
                initialValue: 'text'
              })(
                <Radio.Group style={{whiteSpace: 'nowrap'}}>
                  <Radio value="text">文本</Radio>
                  <Radio value="number">数值</Radio>
                  <Radio value="image">图片</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col>
          <Col span={4} className="add">
          <Col span={3} className="add">
            <Button onClick={this.handleConfirm} type="primary" className="mk-green">
              添加
            </Button>
src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
@@ -39,14 +39,15 @@
        inputType: 'input',
        editable: true,
        unique: true,
        width: '20%'
        width: '17%'
      },
      {
        title: this.props.dict['model.name'],
        dataIndex: 'Text',
        inputType: 'input',
        editable: true,
        width: '20%'
        unique: true,
        width: '17%'
      },
      {
        title: this.props.dict['model.form.columnWidth'],
@@ -55,25 +56,28 @@
        min: 5,
        max: 200,
        editable: true,
        width: '14%',
        width: '12%',
        render: (text) => text || 20
      },
      {
        title: '类型',
        dataIndex: 'type',
        inputType: 'radio',
        inputType: 'select',
        editable: true,
        required: false,
        width: '18%',
        width: '14%',
        render: (text) => {
          if (text === 'image') {
            return '图片'
          } else if (text === 'number') {
            return '数值'
          } else {
            return '文本'
          }
        },
        options: [
          {value: 'text', text: '文本'},
          {value: 'number', text: '数值'},
          {value: 'image', text: '图片'}
        ]
      },
@@ -95,6 +99,16 @@
          {value: 'true', text: '是'},
          {value: 'false', text: '否'}
        ]
      },
      {
        title: '小数位',
        dataIndex: 'decimal',
        inputType: 'number',
        min: 0,
        max: 18,
        editable: true,
        required: false,
        width: '12%'
      },
      {
        title: '导出',
@@ -703,7 +717,7 @@
      if (fields.includes(item.field) || !item.field) return
      fields.push(item.field)
      columns.push({
      let cell = {
        Column: item.field,
        Text: item.label,
        Width: 20,
@@ -711,7 +725,14 @@
        output: 'true',
        type: 'text',
        uuid: Utils.getuuid()
      })
      }
      if (item.type === 'number') {
        cell.type = 'number'
        cell.decimal = item.decimal
      }
      columns.push(cell)
    })
    this.setState({
@@ -740,7 +761,7 @@
  changeColumns = (columns) => {
    const { verify } = this.state
    if (columns[0] && (columns[0].type !== 'image' && columns[0].type !== 'text')) {
    if (columns[0] && (columns[0].type !== 'image' && columns[0].type !== 'text' && columns[0].type !== 'number')) {
      columns = columns.map(col => {
        let _cell = {
          uuid: Utils.getuuid(),
@@ -939,7 +960,7 @@
            <Button className="excel-col-add mk-red" title="清空Excel列" onClick={this.clearField}>
              清空Excel列
            </Button>
            <div style={{color: '#959595', fontSize: '13px', paddingLeft: '10px'}}>如需导出序号,请使用字段 $Index。</div>
            <div style={{color: '#959595', fontSize: '13px', paddingLeft: '10px'}}>如需导出序号,请使用字段 $Index;数值类型导出时可进行数据处理(取绝对值、保留小数位)。</div>
            <EditTable actions={['edit', 'move', 'copy', 'del']} type="excelcolumn" wrappedComponentRef={(inst) => this.columnRef = inst} data={verify.columns} columns={excelColumns} onChange={this.changeColumns}/>
          </TabPane>
          {card.intertype === 'system' ? <TabPane tab={
src/templates/sharecomponent/columncomponent/columnform/index.jsx
@@ -12,7 +12,7 @@
  number: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'decimal', 'format', 'prefix', 'postfix', 'blacklist', 'perspective', 'sum', 'rowspan'],
  link: ['label', 'field', 'type', 'nameField', 'Align', 'Hide', 'IsSort', 'joint', 'Width', 'fieldlength', 'blacklist'],
  textarea: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'prefix', 'postfix', 'fieldlength', 'blacklist'],
  picture: ['label', 'field', 'type', 'Align', 'Hide', 'Width', 'fieldlength', 'blacklist', 'scale', 'maxHeight'],
  picture: ['label', 'field', 'type', 'Align', 'Hide', 'Width', 'fieldlength', 'blacklist', 'scale', 'lenWidRadio', 'span'],
  video: ['label', 'field', 'type', 'Align', 'Hide', 'startTime', 'Width', 'fieldlength', 'blacklist', 'aspectRatio'],
  index: ['label', 'type', 'Align', 'Width']
}
src/templates/sharecomponent/columncomponent/index.jsx
@@ -523,7 +523,7 @@
        <Modal
          title="显示列-编辑"
          visible={modaltype === 'columns'}
          width={800}
          width={850}
          maskClosable={false}
          onOk={this.handleSubmit}
          onCancel={this.editModalCancel}
@@ -542,7 +542,7 @@
        <Modal
          title={dict['model.form.colspan'] + '-' + dict['model.edit']}
          visible={modaltype === 'colspan'}
          width={800}
          width={850}
          maskClosable={false}
          onOk={this.handleSubmit}
          onCancel={this.editModalCancel}
@@ -560,7 +560,7 @@
        <Modal
          title="操作列-编辑"
          visible={modaltype === 'gridbtn'}
          width={800}
          width={850}
          maskClosable={false}
          onOk={this.handleSubmit}
          onCancel={this.editModalCancel}
src/templates/sharecomponent/searchcomponent/dategroup/index.scss
@@ -13,6 +13,7 @@
  }
  .ant-tag-checkable-checked {
    border-color: #1890ff;
    background: #1890ff;
  }
}
src/templates/zshare/formconfig.jsx
@@ -1206,7 +1206,7 @@
      type: 'radio',
      key: 'callbackType',
      label: '回调方式',
      initVal: card.callbackType || (card.callbackFunc ? 'func' : 'script'),
      initVal: card.callbackType || (card.callbackFunc ? 'func' : 'none'),
      tooltip: '使用后台脚本执行时,需要配合计划任务。',
      required: true,
      options: [{
@@ -1843,15 +1843,39 @@
    },
    {
      type: 'number',
      key: 'maxHeight',
      key: 'span',
      min: 1,
      max: 1000,
      decimal: 0,
      label: '最大高度',
      tooltip: '图片在表格中显示的最大高度',
      tooltipClass: 'middle',
      initVal: card.maxHeight || 128,
      max: 24,
      precision: 0,
      label: '图片宽度',
      initVal: card.span || 24,
      tooltip: '栅格布局,等分为24份。',
      required: true
    },
    {
      type: 'select',
      key: 'lenWidRadio',
      label: '长宽比',
      initVal: card.lenWidRadio || '1:1',
      required: true,
      options: [
        { value: '1:1', text: '1:1' },
        { value: '4:3', text: '4:3' },
        { value: '3:2', text: '3:2' },
        { value: '16:9', text: '16:9' },
        { value: '2:1', text: '2:1' },
        { value: '3:1', text: '3:1' },
        { value: '4:1', text: '4:1' },
        { value: '5:1', text: '5:1' },
        { value: '6:1', text: '6:1' },
        { value: '7:1', text: '7:1' },
        { value: '8:1', text: '8:1' },
        { value: '9:1', text: '9:1' },
        { value: '10:1', text: '10:1' },
        { value: '3:4', text: '3:4' },
        { value: '2:3', text: '2:3' },
        { value: '9:16', text: '9:16' },
      ]
    },
    {
      type: 'radio',
@@ -2407,6 +2431,9 @@
    value: 'select',
    text: Formdict['model.form.select']
  }, {
    value: 'textarea',
    text: '多行文本'
  }, {
    value: 'multiselect',
    text: Formdict['model.form.multiselect']
  }, {
@@ -2436,9 +2463,6 @@
  // }, {
  //   value: 'datetime',
  //   text: '日期(分/秒)'
  }, {
    value: 'textarea',
    text: Formdict['model.form.textarea']
  }, {
    value: 'cascader',
    text: '级联菜单'
@@ -3087,19 +3111,6 @@
    },
    {
      type: 'radio',
      key: 'allowHalf',
      label: '半选',
      initVal: card.allowHalf || 'false',
      options: [{
        value: 'true',
        text: '支持'
      }, {
        value: 'false',
        text: '不支持'
      }]
    },
    {
      type: 'radio',
      key: 'hidden',
      label: "隐藏",
      initVal: card.hidden || 'false',
@@ -3213,6 +3224,26 @@
      }]
    },
    {
      type: 'radio',
      key: 'allowHalf',
      label: '半选',
      initVal: card.allowHalf || 'false',
      options: [{
        value: 'true',
        text: '支持'
      }, {
        value: 'false',
        text: '不支持'
      }]
    },
    {
      type: 'color',
      key: 'color',
      label: '颜色',
      initVal: card.color || '#fadb14',
      required: true
    },
    {
      type: 'number',
      min: 1,
      max: 100,
src/templates/zshare/modalform/index.jsx
@@ -35,7 +35,7 @@
  textarea: ['initval', 'readonly', 'required', 'hidden', 'readin', 'fieldlength', 'span', 'labelwidth', 'maxRows', 'encryption', 'interception', 'tooltip', 'extra', 'count', 'placeholder', 'marginTop', 'marginBottom'],
  cascader: ['readonly', 'required', 'hidden', 'readin', 'resourceType', 'fieldlength', 'span', 'labelwidth', 'tooltip', 'extra', 'splitline', 'marginTop', 'marginBottom', 'separator'],
  color: ['initval', 'readonly', 'required', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'marginTop', 'marginBottom'],
  rate: ['initval', 'readonly', 'required', 'hidden', 'readin', 'span', 'labelwidth', 'splitline', 'tooltip', 'extra', 'marginTop', 'marginBottom', 'allowHalf', 'rateCount', 'character', 'place'],
  rate: ['initval', 'readonly', 'required', 'hidden', 'readin', 'span', 'labelwidth', 'splitline', 'tooltip', 'extra', 'marginTop', 'marginBottom', 'allowHalf', 'color', 'rateCount', 'character', 'place'],
  hint: ['label', 'field', 'type', 'blacklist', 'message', 'span', 'labelwidth', 'splitline', 'marginTop', 'marginBottom'],
  split: ['label', 'type', 'marginTop', 'marginBottom', 'splitline'],
  formula: ['label', 'type', 'marginTop', 'marginBottom', 'splitline', 'span', 'labelwidth', 'formula', 'eval', 'postfix'],