king
2024-03-21 a9b02f6862522b54d0824152017bf2acfec2af7b
2024-03-21
36个文件已修改
516 ■■■■ 已修改文件
src/menu/components/card/cardcellcomponent/dragaction/action.jsx 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/elementform/index.jsx 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/elementform/index.scss 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/formconfig.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/index.scss 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/data-card/index.jsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/data-card/options.jsx 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/double-data-card/options.jsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/prop-card/index.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/table-card/index.jsx 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/actionform/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/formconfig.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/base-table/options.jsx 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/edit-table/options.jsx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/options.jsx 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/stylecontroller/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.jsx 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.scss 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/data-card/index.jsx 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/data-card/index.scss 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/double-data-card/index.scss 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/table-card/index.jsx 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/table-card/index.scss 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/share/normalTable/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/share/normalTable/index.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/share/normalheader/index.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/normalTable/index.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/newpagebutton/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/popupbutton/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/printbutton/index.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyprint/utils.jsx 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/billprint/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/systemfunc/sidemenu/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/dragaction/action.jsx
@@ -66,17 +66,17 @@
  } else if (card.show === 'icon') {
    btnElement = (<Button style={_style} type="link"><MkIcon type={card.icon}/>{warning}</Button>)
  } else if (card.show === 'link') {
    btnElement = (<Button style={_style} type="link">{card.label}{card.icon ? <MkIcon type={card.icon}/> : null}{warning}</Button>)
    btnElement = (<Button style={_style} type="link">{card.showName || card.label}{card.icon ? <MkIcon type={card.icon}/> : null}{warning}</Button>)
  } else {
    btnElement = (<Button style={_style}>{card.icon ? <MkIcon type={card.icon}/> : null}{card.label}{warning}</Button>)
    btnElement = (<Button style={_style}>{card.icon ? <MkIcon type={card.icon}/> : null}{card.showName || card.label}{warning}</Button>)
  }
  let _style_ = null
  let _style_ = {opacity: isDragging ? 0.3 : 1, ...card.wrapStyle}
  if (card.style && card.style.clear === 'left') {
    _style_ = {clear: 'left'}
    _style_.clear = 'left'
  } else if (card.style && card.style.clear === 'right') {
    _style_ = {float: 'right'}
    _style_.float = 'right'
  }
  let className = card.width || 0
@@ -105,9 +105,7 @@
      </div>
    } trigger="hover">
      <div ref={node => drag(drop(node))} style={_style_} className={'ant-col card-button-cell ant-col-' + className} onDoubleClick={(e) => {e.stopPropagation(); doubleClickCard(id)}}>
        <div style={{opacity: isDragging ? 0.3 : 1, ...card.wrapStyle}}>
          {btnElement}
        </div>
      </div>
    </Popover>
  )
src/menu/components/card/cardcellcomponent/elementform/index.jsx
@@ -10,6 +10,7 @@
const { TextArea } = Input
const ColorSketch = asyncComponent(() => import('@/mob/colorsketch'))
const CodeMirror = asyncComponent(() => import('@/templates/zshare/codemirror'))
const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent'))
const MkEditIcon = asyncComponent(() => import('@/components/mkIcon'))
@@ -399,31 +400,6 @@
          </Col>
        )
      } else if (item.type === 'textarea') {
        if (item.key === 'formula') {
          fields.push(
            <Col span={24} className="textarea" key={index}>
              <Form.Item label={item.tooltip ?
                <Tooltip placement="topLeft" title={item.tooltip}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  {item.label}
                </Tooltip> : item.label
              }>
                {getFieldDecorator(item.key, {
                  initialValue: item.initVal || '',
                  rules: [
                    {
                      required: item.readonly ? false : !!item.required,
                      message: '请输入' + item.label + '!'
                    }
                  ]
                })(<TextArea autoSize={{minRows: 2}} disabled={item.readonly} placeholder={item.placeholder || ''} />)}
              </Form.Item>
              <Popover overlayClassName="formula-fields" placement="topLeft" title="" content={<div>{item.fields}</div>} trigger="click">
                <span className="formula-icon">字段集</span>
              </Popover>
            </Col>
          )
        } else {
          fields.push(
            <Col span={24} className="textarea" key={index}>
              <Form.Item label={item.tooltip ?
@@ -444,7 +420,6 @@
              </Form.Item>
            </Col>
          )
        }
      } else if (item.type === 'number') {
        fields.push(
          <Col span={12} key={index}>
@@ -614,6 +589,32 @@
            </Form.Item>
          </Col>
        )
      } else if (item.type === 'codemirror') {
        fields.push(
          <Col span={24} key={index} className="textarea">
            <Form.Item label={
              <Tooltip placement="topLeft" overlayStyle={{width: 500, maxWidth: 500}} title={item.tooltip}>
                <QuestionCircleOutlined className="mk-form-tip" />
                {item.label}
              </Tooltip>
            }>
              {getFieldDecorator(item.key, {
                initialValue: item.initVal || '',
                rules: [
                  {
                    required: !!item.required,
                    message: '请输入' + item.label + '!'
                  }
                ]
              })(
                <CodeMirror mode="text/javascript"/>
              )}
            </Form.Item>
            <Popover overlayClassName="formula-fields" placement="topLeft" title="" content={<div>{item.fields}</div>} trigger="click">
              <span className="formula-icon">字段集</span>
            </Popover>
          </Col>
        )
      }
    })
    return fields
src/menu/components/card/cardcellcomponent/elementform/index.scss
@@ -14,10 +14,13 @@
      .ant-form-item-control-wrapper {
        width: 85.8%;
      }
      .CodeMirror {
        height: 200px;
      }
      .formula-icon {
        position: absolute;
        bottom: 5px;
        top: -18px;
        right: 15px;
        cursor: pointer;
        font-size: 12px;
src/menu/components/card/cardcellcomponent/formconfig.jsx
@@ -314,6 +314,7 @@
        { value: 'YYYY-MM', text: 'YYYY-MM' },
        { 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' },
        { value: 'YYYY年MM月DD日', text: 'YYYY年MM月DD日' },
      ]
    },
    {
@@ -675,11 +676,11 @@
      }]
    },
    {
      type: 'textarea',
      type: 'codemirror',
      key: 'formula',
      label: '公式',
      initVal: card.formula || '',
      tooltip: '执行时会使用查询到的数据替换相应的字段,展示获得的结果,在不使用解析时换行符或空格会替换为页面元素。可使用JS的一些语法,如:三元表达式 @field1@ > @field2@ ? 0 : 1;Math对象,取绝对值 Math.abs(@field@)、四舍五入 Math.round(@field@)等',
      tooltip: '执行时会使用查询到的数据替换相应的字段,展示获得的结果,在不使用解析时换行符或空格会替换为页面元素。可使用JS的一些语法,如:三元表达式 @field1@ > @field2@ ? 0 : 1;Math对象,取绝对值 Math.abs(@field@)、四舍五入 Math.round(@field@)等。注:会替换公式中的@username@、@fullName@、@bid@。',
      placeholder: '例如:@price@ * @number@',
      required: true
    },
src/menu/components/card/cardcellcomponent/index.scss
@@ -9,6 +9,7 @@
  .card-button-cell {
    float: left;
    text-align: center;
    button {
      box-shadow: none;
    }
@@ -18,7 +19,7 @@
      background-position: center center;
      height: auto;
      min-height: 28px;
      text-align: center;
      text-align: inherit;
      border-width: 0;
      padding: 0;
      overflow: hidden;
src/menu/components/card/data-card/index.jsx
@@ -370,6 +370,19 @@
  updateWrap = (res) => {
    const { card } = this.state
    if (res.interaction) {
      if (res.interaction.includes('scale')) {
        res.scale = 'true'
      }
      if (res.interaction.includes('parity')) {
        res.parity = 'true'
      }
      if (res.interaction.includes('hover')) {
        res.hover = 'true'
      }
      delete res.interaction
    }
    let _card = {...card, wrap: res}
    if (res.supNodes) {
@@ -538,7 +551,7 @@
            <PlusOutlined className="plus" title="添加卡片" onClick={() => this.addCard()}/>
            {appType !== 'mob' ? <PlusCircleOutlined className="plus" title="添加搜索" onClick={() => this.addSearch()}/> : null}
            <PlusSquareOutlined className="plus" title="添加按钮" onClick={() => this.addButton()}/>
            <NormalForm title="数据卡设置" width={800} update={this.updateWrap} getForms={this.getWrapForms}>
            <NormalForm title="数据卡设置" width={850} update={this.updateWrap} getForms={this.getWrapForms}>
              <EditOutlined style={{color: '#1890ff'}} title="编辑"/>
            </NormalForm>
            <CopyComponent type="datacard" card={card}/>
src/menu/components/card/data-card/options.jsx
@@ -59,6 +59,74 @@
    }
  }
  let interaction = []
  let interOptions = []
  if (wrap.scale === 'true') {
    interaction.push('scale')
  }
  if (wrap.parity === 'true') {
    interaction.push('parity')
  }
  if (wrap.hover === 'true') {
    interaction.push('hover')
  }
  if (subtype === 'datacard') {
    interOptions = [
      {value: 'parity', label: '奇偶异色'},
    ]
    if (appType !== 'mob') {
      interOptions.push(
        {value: 'hover', label: '悬浮变色'},
        {value: 'scale', label: '悬浮放大'}
      )
    }
  } else if (subtype === 'propcard' && appType !== 'mob') {
    interOptions = [
      {value: 'scale', label: '悬浮放大'}
    ]
  } else if (subtype === 'tablecard') {
    interOptions = [
      {value: 'parity', label: '奇偶异色'},
    ]
    if (appType !== 'mob') {
      interOptions.push(
        {value: 'hover', label: '悬浮变色'}
      )
    }
  }
  if (interaction.length && interOptions.length) {
    interaction = interaction.filter(m => interOptions.findIndex(cell => cell.value === m) > -1)
  }
  // let interItem = null
  // if (interOptions.length === 1) {
  //   interItem = {
  //     type: 'radio',
  //     field: interOptions[0].value,
  //     label: interOptions[0].label,
  //     initval: interaction.length === 1 ? 'true' : 'false',
  //     required: false,
  //     options: [
  //       {value: 'true', label: '启用'},
  //       {value: 'false', label: '禁用'}
  //     ]
  //   }
  // } else {
  //   interItem = {
  //     type: 'checkbox',
  //     field: 'interaction',
  //     label: '交互效果',
  //     initval: interaction,
  //     required: false,
  //     options: interOptions,
  //     forbid: interOptions.length === 0
  //   }
  // }
  const cardWrapForm = [
    {
      type: 'text',
@@ -306,31 +374,27 @@
      ],
      forbid: subtype !== 'datacard' || appType === 'mob'
    },
    // {
    //   type: 'radio',
    //   field: 'scale',
    //   label: '放大效果',
    //   initval: wrap.scale || 'false',
    //   tooltip: '鼠标悬浮于卡片上方时,卡片放大1.05倍。',
    //   required: false,
    //   options: [
    //     {value: 'false', label: '无'},
    //     {value: 'true', label: '有'},
    //   ],
    //   forbid: subtype === 'tablecard' || appType === 'mob'
    // },
    {
      type: 'radio',
      field: 'scale',
      label: '放大效果',
      initval: wrap.scale || 'false',
      tooltip: '鼠标悬浮于卡片上方时,卡片放大1.05倍。',
      type: 'checkbox',
      field: 'interaction',
      label: '交互效果',
      initval: interaction,
      required: false,
      options: [
        {value: 'false', label: '无'},
        {value: 'true', label: '有'},
      ],
      forbid: subtype === 'tablecard' || appType === 'mob'
    },
    {
      type: 'radio',
      field: 'parity',
      label: '奇偶背景',
      initval: wrap.parity || 'false',
      tooltip: '偶数行会添加背景色。',
      required: false,
      options: [
        {value: 'false', label: '无'},
        {value: 'true', label: '有'},
      ],
      forbid: subtype === 'propcard'
      options: interOptions,
      forbid: interOptions.length === 0
    },
    {
      type: 'radio',
src/menu/components/card/double-data-card/options.jsx
@@ -133,21 +133,21 @@
      tooltip: '数据卡右上角会显示收起开关。',
      required: false,
      options: [
        {value: 'false', label: '无'},
        {value: 'true', label: '有'},
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: appType === 'mob'
    },
    {
      type: 'radio',
      field: 'parity',
      label: '奇偶背景',
      label: '奇偶异色',
      initval: wrap.parity || 'false',
      tooltip: '偶数行会添加背景色。',
      tooltip: '子表偶数行会添加背景色。',
      required: false,
      options: [
        {value: 'false', label: '无'},
        {value: 'true', label: '有'},
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ],
    },
    {
src/menu/components/card/prop-card/index.jsx
@@ -315,6 +315,13 @@
  updateWrap = (res) => {
    const { card } = this.state
    if (res.interaction) {
      if (res.interaction.includes('scale')) {
        res.scale = 'true'
      }
      delete res.interaction
    }
    let _card = {...card, wrap: res}
    if (res.datatype === 'static') {
src/menu/components/card/table-card/index.jsx
@@ -271,6 +271,15 @@
  }
  updateWrap = (res) => {
    if (res.interaction) {
      if (res.interaction.includes('parity')) {
        res.parity = 'true'
      }
      if (res.interaction.includes('hover')) {
        res.hover = 'true'
      }
      delete res.interaction
    }
    this.updateComponent({...this.state.card, wrap: res})
  }
src/menu/components/share/actioncomponent/actionform/index.jsx
@@ -965,7 +965,7 @@
          { required: item.readonly ? false : item.required, message: '请输入' + item.label + '!' }
        ]
        content = <CodeMirror mode="text/javascript" theme="cobalt"/>
        content = <CodeMirror mode="text/javascript"/>
      }
      if (help && typeof(help) === 'function') {
src/menu/components/share/actioncomponent/formconfig.jsx
@@ -1034,7 +1034,7 @@
      tooltip: '执行成功后的返回值。系统函数可指定返回的变量(以@符开头,返回id时可使用@id@);自定义函数可指定返回字段(如id)。',
      initVal: card.output || '',
      required: false,
      forbid: viewType === 'popview'
      // forbid: viewType === 'popview'
    },
    {
      type: 'text',
@@ -2207,7 +2207,7 @@
      tooltip: '执行成功后的返回值。系统函数可指定返回的变量(以@符开头,返回id时可使用@id@);自定义函数可指定返回字段(如id)。',
      initVal: card.output || '',
      required: false,
      forbid: viewType === 'popview'
      // forbid: viewType === 'popview'
    },
    {
      type: 'text',
src/menu/components/table/base-table/options.jsx
@@ -20,6 +20,17 @@
    },
    {
      type: 'radio',
      field: 'parity',
      label: '奇偶异色',
      initval: wrap.parity || 'false',
      required: false,
      options: [
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ]
    },
    {
      type: 'radio',
      field: 'bordered',
      label: '边框',
      initval: wrap.bordered || 'true',
@@ -36,8 +47,8 @@
      initval: wrap.actionfixed !== 'true' ? 'false' : 'true',
      required: false,
      options: [
        {value: 'true', label: '是'},
        {value: 'false', label: '否'},
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ]
    },
    {
@@ -64,20 +75,6 @@
        {value: 'small', label: '小'},
        {value: 'mini', label: '迷你'},
      ]
    },
    {
      type: 'select',
      field: 'selected',
      label: '数据选中',
      initval: wrap.selected || 'false',
      tooltip: '初始化:数据加载时选中首行数据,仅执行一次。数据加载:每次数据加载时均选中首行(当按钮执行完成并返回主键值时,默认选中主键值对应行)。选中标记:返回数据中存在 selected 字段,且值为 true 的数据被选中。注:启用无人值守时无效。',
      required: false,
      options: [
        {value: 'false', label: '无'},
        {value: 'init', label: '初始化'},
        {value: 'always', label: '数据加载'},
        {value: 'sign', label: '选中标记'}
      ],
    },
    // {
    //   type: 'radio',
@@ -138,15 +135,18 @@
      ]
    },
    {
      type: 'number',
      field: 'btnlimit',
      label: '按钮限制',
      initval: wrap.btnlimit || '',
      tooltip: '按钮数量限制,超出的按钮会在更多中下拉显示,注:更多中的按钮不要绑定双击事件。',
      min: 3,
      max: 3000,
      precision: 0,
      required: false
      type: 'select',
      field: 'selected',
      label: '数据选中',
      initval: wrap.selected || 'false',
      tooltip: '初始化:数据加载时选中首行数据,仅执行一次。数据加载:每次数据加载时均选中首行(当按钮执行完成并返回主键值时,默认选中主键值对应行)。选中标记:返回数据中存在 selected 字段,且值为 true 的数据被选中。注:启用无人值守时无效。',
      required: false,
      options: [
        {value: 'false', label: '无'},
        {value: 'init', label: '初始化'},
        {value: 'always', label: '数据加载'},
        {value: 'sign', label: '选中标记'}
      ],
    },
    {
      type: 'number',
@@ -211,6 +211,17 @@
    },
    {
      type: 'number',
      field: 'btnlimit',
      label: '按钮限制',
      initval: wrap.btnlimit || '',
      tooltip: '按钮数量限制,超出的按钮会在更多中下拉显示,注:更多中的按钮不要绑定双击事件。',
      min: 3,
      max: 3000,
      precision: 0,
      required: false
    },
    {
      type: 'number',
      field: 'maxPageSize',
      label: '每页最大数',
      initval: wrap.maxPageSize || '',
src/menu/components/table/edit-table/options.jsx
@@ -134,6 +134,17 @@
    },
    {
      type: 'radio',
      field: 'parity',
      label: '奇偶异色',
      initval: wrap.parity || 'false',
      required: false,
      options: [
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ]
    },
    {
      type: 'radio',
      field: 'bordered',
      label: '边框',
      initval: wrap.bordered || 'true',
src/menu/components/table/normal-table/options.jsx
@@ -73,6 +73,17 @@
    },
    {
      type: 'radio',
      field: 'parity',
      label: '奇偶异色',
      initval: wrap.parity || 'false',
      required: false,
      options: [
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ]
    },
    {
      type: 'radio',
      field: 'bordered',
      label: '边框',
      initval: wrap.bordered || 'true',
@@ -155,20 +166,6 @@
      ]
    },
    {
      type: 'select',
      field: 'selected',
      label: '数据选中',
      initval: wrap.selected || 'false',
      tooltip: '初始化:数据加载时选中首行数据,仅执行一次。数据加载:每次数据加载时均选中首行(当按钮执行完成并返回主键值时,默认选中主键值对应行)。选中标记:返回数据中存在 selected 字段,且值为 true 的数据被选中。',
      required: false,
      options: [
        {value: 'false', label: '无'},
        {value: 'init', label: '初始化'},
        {value: 'always', label: '数据加载'},
        {value: 'sign', label: '选中标记'}
      ],
    },
    {
      type: 'color',
      field: 'borderColor',
      label: '边框颜色',
@@ -190,16 +187,18 @@
      ]
    },
    {
      type: 'number',
      field: 'btnlimit',
      label: '按钮限制',
      initval: wrap.btnlimit || '',
      tooltip: '按钮数量限制,超出的按钮会在更多中下拉显示,注:更多中的按钮不要绑定双击事件。',
      min: 3,
      max: 3000,
      precision: 0,
      type: 'select',
      field: 'selected',
      label: '数据选中',
      initval: wrap.selected || 'false',
      tooltip: '初始化:数据加载时选中首行数据,仅执行一次。数据加载:每次数据加载时均选中首行(当按钮执行完成并返回主键值时,默认选中主键值对应行)。选中标记:返回数据中存在 selected 字段,且值为 true 的数据被选中。',
      required: false,
      forbid: appType !== '' || isprint
      options: [
        {value: 'false', label: '无'},
        {value: 'init', label: '初始化'},
        {value: 'always', label: '数据加载'},
        {value: 'sign', label: '选中标记'}
      ],
    },
    {
      type: 'select',
@@ -254,6 +253,18 @@
    },
    {
      type: 'number',
      field: 'btnlimit',
      label: '按钮限制',
      initval: wrap.btnlimit || '',
      tooltip: '按钮数量限制,超出的按钮会在更多中下拉显示,注:更多中的按钮不要绑定双击事件。',
      min: 3,
      max: 3000,
      precision: 0,
      required: false,
      forbid: appType !== '' || isprint
    },
    {
      type: 'number',
      field: 'maxPageSize',
      label: '每页最大数',
      initval: wrap.maxPageSize || '',
src/menu/stylecontroller/index.jsx
@@ -1030,7 +1030,7 @@
                    label={<SwapOutlined title="对齐"/>}
                    labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} }
                  >
                    <Radio.Group style={{whiteSpace: 'nowrap'}} defaultValue={card.float || 'left'} onChange={(e) => this.changeNormalStyle(e.target.value, 'float')}>
                    <Radio.Group style={{whiteSpace: 'nowrap'}} defaultValue={card.float || (type === 'mk-button' ? 'center' : 'left')} onChange={(e) => this.changeNormalStyle(e.target.value, 'float')}>
                      <Radio value="left">左</Radio>
                      <Radio value="center">居中</Radio>
                      <Radio value="right">右</Radio>
src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -867,9 +867,14 @@
            _data = [data]
          }
          let _val = card.formula
          if (/@username@|@fullName@|@bid@/ig.test(_val)) {
            _val = _val.replace(/@username@/ig, sessionStorage.getItem('User_Name') || '').replace(/@fullName@/ig, sessionStorage.getItem('Full_Name') || '').replace(/@bid@/ig, data.$$BID || '')
          }
          try {
            // eslint-disable-next-line
            let func = new Function('data', card.formula)
            let func = new Function('data', _val)
            val = func(_data)
          } catch (e) {
            console.warn(e)
@@ -904,6 +909,9 @@
          val = ''
        } else if (data) {
          let _val = card.formula
          if (/@username@|@fullName@|@bid@/ig.test(_val)) {
            _val = _val.replace(/@username@/ig, sessionStorage.getItem('User_Name') || '').replace(/@fullName@/ig, sessionStorage.getItem('Full_Name') || '').replace(/@bid@/ig, data.$$BID || '')
          }
          Object.keys(data).forEach(key => {
            let reg = new RegExp('@' + key + '@', 'ig')
            _val = _val.replace(reg, data[key])
src/tabviews/custom/components/card/cardcellList/index.scss
@@ -88,6 +88,7 @@
    background-size: cover;
  }
  .mk-cell-btn {
    text-align: center;
    min-height: 0px;
    > div {width: 100%;max-width: 100%;}
    button:not(.ant-switch) {
@@ -97,6 +98,7 @@
      min-height: 28px;
      padding: 0;
      overflow: hidden;
      text-align: inherit;
    }
    .ant-checkbox-wrapper:not(.square) {
      .ant-checkbox-inner, .ant-checkbox-checked::after {
src/tabviews/custom/components/card/data-card/index.jsx
@@ -134,7 +134,7 @@
    _config.wrap.scale = _config.wrap.scale === 'true' ? 'scale' : ''
    _config.wrap.layout = (_config.wrap.layout || 'grid') + '-layout float-' + (_config.wrap.cardFloat || 'left')
    _config.wrap.wrapClass = `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${_config.wrap.scale}`
    _config.wrap.wrapClass = `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${_config.wrap.scale} ${config.wrap.hover === 'true' ? 'mk-hover' : ''}`
    if (_config.wrap.shifting === 'true') {
      _config.wrap.shifting = 'shifting'
@@ -1252,8 +1252,6 @@
              if (config.wrap.parity === 'true') {
                if (index % 2 === 1) {
                  className += 'mk-even-line '
                } else {
                  className += 'mk-odd-line '
                }
              }
              if (item.$disabled) {
src/tabviews/custom/components/card/data-card/index.scss
@@ -40,12 +40,14 @@
    }
    .mk-even-line {
      .card-item-box {
        background-color: #fafafa;
      }
    }
  }
  .data-zoom.mk-hover {
    .mk-card {
      .card-item-box:hover {
        background-color: var(--mk-sys-color1);
      }
    }
    .mk-even-line:hover, .mk-odd-line:hover {
      .card-item-box {
        background-color: var(--mk-sys-color2);
      }
    }
  }
src/tabviews/custom/components/card/double-data-card/index.scss
@@ -194,14 +194,14 @@
    >.card-row-list {
      >.ant-col:not(.extend-card) {
        .card-item-box:hover {
          background-color: var(--mk-sys-color2);
          background-color: var(--mk-sys-color1);
        }
      }
    }
    .sub-card-wrap.mk-parity-bg {
      .ant-col:nth-child(even){
        .card-item-box:not(:hover) {
          background-color: var(--mk-sys-color1);
          background-color: #fafafa;
        }
      }
    }
@@ -270,7 +270,7 @@
    .sub-card-wrap.mk-parity-bg {
      .ant-col:nth-child(even){
        .card-item-box {
          background-color: var(--mk-sys-color1);
          background-color: #fafafa;
        }
      }
    }
src/tabviews/custom/components/card/table-card/index.jsx
@@ -553,8 +553,6 @@
      if (config.wrap.parity === 'true') {
        if (lindex % 2 === 1) {
          className += ' mk-even-line'
        } else {
          className += ' mk-odd-line'
        }
      }
@@ -617,7 +615,7 @@
            selectedData={[]}
          /> : null
        }
        <Row className="card-row-list" style={{height: config.wrap.contentHeight}}>
        <Row className={`card-row-list ${config.wrap.hover === 'true' ? 'mk-hover' : ''}`} style={{height: config.wrap.contentHeight}}>
          {precards.map((item, index) => (
            <Col key={index} className="extend-card" span={24}>
              <div className="card-item-box" style={item.style}>
src/tabviews/custom/components/card/table-card/index.scss
@@ -42,12 +42,14 @@
    }
    .mk-even-line {
      .card-item-box {
        background-color: #fafafa;
      }
    }
  }
  .card-row-list.mk-hover {
    >.ant-col:not(.extend-card) {
      .card-item-box:hover {
        background-color: var(--mk-sys-color1);
      }
    }
    .mk-even-line:hover, .mk-odd-line:hover {
      .card-item-box {
        background-color: var(--mk-sys-color2);
      }
    }
  }
src/tabviews/custom/components/share/normalTable/index.jsx
@@ -1167,7 +1167,7 @@
    }
    return (
      <div className={`normal-custom-table ${setting.tableHeader || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed}`} style={style}>
      <div className={`normal-custom-table ${setting.tableHeader || ''} ${setting.parity === 'true' ? 'mk-parity' : ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed}`} style={style}>
        {(setting.tableType === 'radio' || setting.tableType === 'checkbox') && data && data.length > 0 ?
          <Switch title="收起" className="main-pickup" checkedChildren="开" unCheckedChildren="关" checked={pickup} onChange={this.pickupChange} /> : null
        }
src/tabviews/custom/components/share/normalTable/index.scss
@@ -209,6 +209,11 @@
    color: var(--mk-table-color);
  }
}
.normal-custom-table.mk-parity {
  .ant-table-tbody tr:nth-child(even) {
    background: #fafafa;
  }
}
.normal-custom-table:not(.ghost) {
  .ant-table-small > .ant-table-content .ant-table-thead > tr > th {
    background-color: #fafafa!important;
src/tabviews/custom/components/share/normalheader/index.scss
@@ -38,6 +38,9 @@
        .ant-input-search-button {
          height: 28px;
        }
        .ant-form-explain {
          display: none;
        }
      }
    }
  }
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -2652,7 +2652,7 @@
        {setting.hasSubmit && edData.length > 0 ? <div className="edit-custom-table-btn-wrap" style={submit.wrapStyle}>
          <Button style={submit.style} onClick={() => setTimeout(() => {this.submit()}, 10)} loading={loading} className="submit-table" type="link">提交</Button>
        </div> : null}
        <div className={`edit-custom-table ${setting.tableHeader || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || ''} mk-edit-${setting.editType || 'simple'}`} style={style}>
        <div className={`edit-custom-table ${setting.tableHeader || ''} ${setting.parity === 'true' ? 'mk-parity' : ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || ''} mk-edit-${setting.editType || 'simple'}`} style={style}>
          <Table
            rowKey="$$uuid"
            components={components}
src/tabviews/custom/components/table/edit-table/normalTable/index.scss
@@ -269,6 +269,11 @@
  //   }
  // }
}
.edit-custom-table.mk-parity {
  .ant-table-tbody tr:nth-child(even) {
    background: #fafafa;
  }
}
.edit-custom-table.mk-edit-simple {
  table tbody tr td {
    min-height: 32px;
src/tabviews/zshare/actionList/newpagebutton/index.jsx
@@ -182,10 +182,10 @@
                console.warn(e)
              }
              if (!_param) {
              if (!_param || _param.error) {
                notification.warning({
                  top: 92,
                  message: '未获取到打印参数,自定义脚本错误!',
                  message: _param ? _param.error : '未获取到打印参数,自定义脚本错误!',
                  duration: 5
                })
                return
@@ -203,10 +203,10 @@
              console.warn(e)
            }
            if (!_param) {
            if (!_param || _param.error) {
              notification.warning({
                top: 92,
                message: '未获取到打印参数,自定义脚本错误!',
                message: _param ? _param.error : '未获取到打印参数,自定义脚本错误!',
                duration: 5
              })
              return
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -2475,9 +2475,38 @@
    if (!id) return
    if (btn.verify.preHandle === 'true' && btn.verify.pre_func && /#position-print/.test(btn.verify.pre_func)) {
      MKEmitter.emit('queryModuleParam', btn.$menuId, (res) => {
        let searches = {}
        res.search && res.search.forEach(item => {
          searches[item.key] = item.value
        })
        let _param = { id: id || '', tempId: btn.verify.printTempId, pageId: btn.$MenuID || '', dataM: sessionStorage.getItem('dataM')}
        try {
          // eslint-disable-next-line
          let func = new Function('btn', 'searches', 'param', 'systemType', btn.verify.pre_func)
          _param = func(btn, searches, _param, window.GLOB.systemType)
        } catch (e) {
          console.warn(e)
        }
        if (!_param || _param.error) {
          notification.warning({
            top: 92,
            message: _param ? _param.error : '未获取到打印参数,自定义脚本错误!',
            duration: 5
          })
          return
        }
        window.open('#/billprint/' + window.btoa(window.encodeURIComponent(JSON.stringify(_param))))
      })
    } else {
    setTimeout(() => {
      window.open('#/billprint/' + window.btoa(window.encodeURIComponent(JSON.stringify({ id: id, tempId: btn.verify.printTempId, pageId: btn.$MenuID || '', dataM: sessionStorage.getItem('dataM') }))))
    }, 500)
      }, 200)
    }
  }
  sendWxMessage = (verify, id) => {
src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -339,7 +339,7 @@
          type={type}
          id={'button' + btn.uuid}
          title={disabled ? (btn.reason || '') : (btn.show === 'icon' ? btn.label : '')}
          loading={loading}
          loading={loading && !name}
          disabled={disabled}
          style={btn.style}
          icon={icon}
src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -1007,7 +1007,11 @@
    }
    let isDataM = sessionStorage.getItem('dataM') === 'true'
    let custompage = /@pageSize@|@orderBy@/i.test(_dataresource + _customScript + _tailScript)
    let regoptions = [
      { reg: /@orderBy@/ig, value: btn.verify.setting.order },
      { reg: /@pageSize@/ig, value: '9999' },
      { reg: /@pageIndex@/ig, value: '1'},
      { reg: /@ID@/ig, value: `'${ID}'`},
      { reg: /@BID@/ig, value: `'${BID || ''}'`},
      { reg: /@LoginUID@/ig, value: `'${sessionStorage.getItem('LoginUID') || ''}'`},
@@ -1125,8 +1129,12 @@
    let LText = ''
    if (_dataresource) {
      if (custompage) {
        LText = `/*system_query*/select ${arrFields} from ${_dataresource} `
      } else {
      LText = `/*system_query*/select ${arrFields} from (select ${arrFields} ,ROW_NUMBER() over(order by ${btn.verify.setting.order}) as rows from ${_dataresource}) tmptable order by tmptable.rows `
    }
    }
    if (_customScript) {
      if (LText) {
src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
@@ -9,6 +9,7 @@
import Utils from '@/utils/utils.js'
import { checkSQL, getSearchFields } from '@/utils/utils-custom.js'
import CodeMirror from '@/templates/zshare/codemirror'
import MKEmitter from '@/utils/events.js'
// import './index.scss'
class CustomForm extends Component {
@@ -134,6 +135,9 @@
              loading: false,
              editItem: null
            })
            if (values.uuid) {
              MKEmitter.emit('editLineId', values.uuid)
            }
            this.props.form.setFieldsValue({
              sql: ' '
            })
@@ -213,7 +217,7 @@
            <Form.Item label="可用字段">
              <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'公共值,请按照@xxx@格式使用。'}><span style={{color: '#1890ff'}}>BID, ID, LoginUID, SessionUid, UserID, Appkey, time_id, typename</span></Tooltip>,&nbsp;
              <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'系统变量,系统会定义变量并赋值。'}><span style={{color: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address</span></Tooltip>
              {usefulfields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'搜索条件,请按照@xxx@格式使用。'}>,&nbsp;{usefulfields}</Tooltip> : null}
              <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'排序、分页以及搜索条件变量,请按照@xxx@格式使用。'}>, orderBy, pageSize, pageIndex{usefulfields ? ', ' + usefulfields : ''}</Tooltip>
              {linefields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'表单及行变量,系统会定义变量并赋值。'}>,&nbsp;{linefields}</Tooltip> : null}
            </Form.Item>
          </Col>
src/templates/sharecomponent/actioncomponent/verifyprint/utils.jsx
@@ -34,8 +34,19 @@
      _dataresource = '(' + _dataresource + ') tb'
    }
    let custompage = /@pageSize@|@orderBy@/i.test(_dataresource + _customScript)
    // 正则替换
    let regoptions = [{
      reg: new RegExp('@orderBy@', 'ig'),
      value: setting.order || ''
    }, {
      reg: new RegExp('@pageSize@', 'ig'),
      value: 10
    }, {
      reg: new RegExp('@pageIndex@', 'ig'),
      value: 1
    }, {
      reg: /@datam@/ig,
      value: `''`
    }, {
@@ -61,10 +72,10 @@
    // 数据源处理, 存在显示列时 
    if (_dataresource) {
      if (setting.order) {
        _dataresource = `/*system_query*/select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource}) tmptable order by tmptable.rows`
      } else {
      if (custompage || !setting.order) {
        _dataresource = `/*system_query*/select ${arr_field} from ${_dataresource}`
      } else {
        _dataresource = `/*system_query*/select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource}) tmptable order by tmptable.rows`
      }
    }
src/views/billprint/index.jsx
@@ -368,6 +368,8 @@
              return cols.filter(item => {
                if (item.Hide === 'true') return false
                  
                item.IsSort = 'false'
                if (item.type === 'number') {
                  if (typeof(item.decimal) === 'number') {
                    item.round = Math.pow(10, item.decimal)
@@ -630,6 +632,9 @@
    if (cell.marks && cell.marks.length === 0) {
      cell.marks = null
    }
    if (cell.anchors && cell.anchors.length === 0) {
      cell.anchors = null
    }
    
    if (['text', 'number', 'formula'].includes(cell.eleType)) {
      cell.innerHeight = cell.innerHeight || 'auto'
src/views/systemfunc/sidemenu/index.jsx
@@ -66,7 +66,7 @@
        if (menu) {
          menu = fromJS(menu).toJS()
          menu.param = {}
          menu.param.$searchkey = 'PrintTempNO'
          menu.param.$searchkey = 'printtempno'
          menu.param.$searchval = temp
          setTimeout(() => {
            MKEmitter.emit('modifyTabs', menu)
@@ -77,7 +77,7 @@
        if (menu) {
          menu = fromJS(menu).toJS()
          menu.param = {}
          menu.param.$searchkey = 'PrintTempNO'
          menu.param.$searchkey = 'printtempno'
          menu.param.$searchval = tabTemp
          setTimeout(() => {
            MKEmitter.emit('modifyTabs', menu)