king
2021-04-16 d7534812c8199bf1e9faa0279b63e434737d6374
2021-04-16
33个文件已修改
576 ■■■■ 已修改文件
src/menu/components/card/cardcellcomponent/dragaction/action.jsx 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/index.jsx 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/index.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/data-card/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/dragaction/card.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/index.jsx 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/index.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/tabs/antv-tabs/dragabletabs.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/tabs/antv-tabs/index.jsx 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/tabs/antv-tabs/index.scss 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/pastecontroller/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pc/menushell/card.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.jsx 157 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.scss 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/data-card/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/prop-card/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/table-card/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/form/normal-form/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.jsx 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.scss 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/asyncButtonComponent.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/changeuserbutton/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/excelInbutton/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/exceloutbutton/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/newpagebutton/index.jsx 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/popupbutton/index.jsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/printbutton/index.jsx 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/tabbutton/index.jsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/menudesign/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pcdesign/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/dragaction/action.jsx
@@ -27,13 +27,6 @@
    },
  })
  let _style = {opacity: isDragging ? 0 : 1}
  if (card.style) {
    _style = {...card.style, opacity: isDragging ? 0 : 1}
    _style = resetStyle(_style)
  }
  let hasProfile = false
  if (['pop', 'prompt', 'exec'].includes(card.OpenType)) {
    hasProfile = true
@@ -44,13 +37,13 @@
  }
  let btnElement = null
  let btnstyle = resetStyle(card.btnstyle)
  let _style = resetStyle(card.style)
  if (card.show === 'icon') {
    btnElement = (<Button style={btnstyle} type="link"><Icon type={card.icon}/></Button>)
    btnElement = (<Button style={_style} type="link"><Icon type={card.icon}/></Button>)
  } else if (card.show === 'link') {
    btnElement = (<Button style={btnstyle} type="link">{card.label}{card.icon ? <Icon type={card.icon}/> : null}</Button>)
    btnElement = (<Button style={_style} type="link">{card.icon ? <Icon type={card.icon}/> : null}{card.label}</Button>)
  } else {
    btnElement = (<Button icon={card.icon} style={btnstyle}> {card.label} </Button>)
    btnElement = (<Button style={_style}> {card.label}{card.icon ? <Icon type={card.icon}/> : null} </Button>)
  }
  return (
@@ -63,7 +56,7 @@
      </div>
    } trigger="hover">
      <div ref={node => drag(drop(node))} className={'ant-col card-button-cell ant-col-' + card.width} onDoubleClick={() => doubleClickCard(id)}>
        <div style={_style}>
        <div style={{opacity: isDragging ? 0 : 1}}>
          {btnElement}
        </div>
      </div>
src/menu/components/card/cardcellcomponent/index.jsx
@@ -47,9 +47,18 @@
   */
  UNSAFE_componentWillMount () {
    const { elements } = this.props
    let _elements = fromJS(elements).toJS()
    this.setState({
      elements: fromJS(elements).toJS()
      elements: _elements.map(item => {
        if (item.btnstyle) { // 兼容
          item.style = item.style || {}
          item.style = {...item.style, ...item.btnstyle}
          delete item.btnstyle
        }
        return item
      })
    })
  }
@@ -129,9 +138,7 @@
    let options = ['font', 'border', 'padding', 'margin', 'backgroundColor']
    if (element.eleType === 'button') {
      if (element.btnstyle) {
        _style = {..._style, ...element.btnstyle}
      }
    } else if (element.eleType === 'picture') {
      options = ['border', 'margin']
    } else if (element.eleType === 'slider') {
@@ -198,47 +205,7 @@
      _card.innerHeight = _card.barHeight + (_card.displayValue === 'true' ? fontSize + 2 : 0)
    } else if (_card.eleType === 'button') { // 拆分style
      let _style = fromJS(style).toJS()
      _card.style = {}
      if (_style.marginTop) {
        _card.style.marginTop = _style.marginTop
        delete _style.marginTop
      }
      if (_style.marginBottom) {
        _card.style.marginBottom = _style.marginBottom
        delete _style.marginBottom
      }
      if (_style.marginLeft) {
        _card.style.marginLeft = _style.marginLeft
        delete _style.marginLeft
      }
      if (_style.marginRight) {
        _card.style.marginRight = _style.marginRight
        delete _style.marginRight
      }
      if (_style.paddingTop) {
        _card.style.paddingTop = _style.paddingTop
        delete _style.paddingTop
      }
      if (_style.paddingBottom) {
        _card.style.paddingBottom = _style.paddingBottom
        delete _style.paddingBottom
      }
      if (_style.paddingLeft) {
        _card.style.paddingLeft = _style.paddingLeft
        delete _style.paddingLeft
      }
      if (_style.paddingRight) {
        _card.style.paddingRight = _style.paddingRight
        delete _style.paddingRight
      }
      if (_style.textAlign) {
        _card.style.textAlign = _style.textAlign
        delete _style.textAlign
      }
      _card.btnstyle = _style
      _card.style = style
    } else {
      _card.style = style
    }
@@ -404,18 +371,18 @@
        if (cell.uuid === res.uuid) {
          res = {...cell, ...res}
          delete res.focus
          let btnstyle = {}
          let style = {}
          if (res.class !== cell.class || res.show !== cell.show || !res.btnstyle) {
          if (res.class !== cell.class || res.show !== cell.show || !res.style) {
            if (res.show === 'link' || res.show === 'icon') {
              btnstyle.color = color[res.class]
              btnstyle.backgroundColor = 'transparent'
              style.color = color[res.class]
              style.backgroundColor = 'transparent'
            } else {
              btnstyle.color = '#ffffff'
              btnstyle.backgroundColor = color[res.class]
              style.color = '#ffffff'
              style.backgroundColor = color[res.class]
            }
          }
          res.btnstyle = {...res.btnstyle, ...btnstyle}
          res.style = {...res.style, ...style}
          return res
        }
src/menu/components/card/cardcellcomponent/index.scss
@@ -19,13 +19,16 @@
  .card-button-cell {
    float: left;
    button {
      width: 100%;
      background-size: cover;
      background-position: center center;
      height: auto;
      min-height: 32px;
      text-align: center;
      span {
        font-style: inherit;
        text-decoration: inherit;
        font-weight: inherit;
      }
    }
  }
src/menu/components/card/data-card/index.jsx
@@ -286,7 +286,7 @@
    newcard.execError = 'never'
    newcard.verify = null
    newcard.show = 'button'
    newcard.btnstyle = {marginRight: '15px'}
    newcard.style = {marginRight: '15px'}
    // 注册事件-添加按钮
    MKEmitter.emit('addButton', card.uuid, newcard)
src/menu/components/share/actioncomponent/dragaction/card.jsx
@@ -37,7 +37,7 @@
  }
  let btnElement = null
  let _style = resetStyle(card.btnstyle)
  let _style = resetStyle(card.style)
  if (card.show === 'icon') {
    btnElement = (
      <Button
src/menu/components/share/actioncomponent/index.jsx
@@ -43,8 +43,20 @@
   * @description 搜索条件初始化
   */
  UNSAFE_componentWillMount () {
    const { config } = this.props
    let actionlist = fromJS(config.action).toJS() || []
    this.setState({
      actionlist: fromJS(this.props.config.action).toJS()
      actionlist: actionlist.map(item => {
        if (item.btnstyle) { // 兼容
          item.style = item.style || {}
          item.style = {...item.style, ...item.btnstyle}
          delete item.btnstyle
        }
        return item
      })
    })
  }
@@ -85,7 +97,7 @@
    if (comIds[0] !== config.uuid || comIds[1] !== 'actionlist') return
    let _card = fromJS(card).toJS()
    _card.btnstyle = style
    _card.style = style
    let _actionlist = actionlist.map(cell => {
      if (cell.uuid === _card.uuid) return _card
@@ -102,7 +114,7 @@
  changeBtnStyle = (element) => {
    const { config } = this.props
    let _style = element.btnstyle ? fromJS(element.btnstyle).toJS() : {}
    let _style = element.style ? fromJS(element.style).toJS() : {}
    let options = ['font', 'border', 'background', 'margin']
    this.setState({
@@ -221,15 +233,15 @@
        }
        if (item.uuid === btn.uuid) {
          btn.btnstyle = item.btnstyle || {}
          btn.style = item.style || {}
          if (btn.class !== item.class || btn.show !== item.show || !btn.btnstyle.color) {
          if (btn.class !== item.class || btn.show !== item.show || !btn.style.color) {
            if (btn.show === 'link' || btn.show === 'icon') {
              btn.btnstyle.color = color[btn.class]
              btn.btnstyle.backgroundColor = 'transparent'
              btn.style.color = color[btn.class]
              btn.style.backgroundColor = 'transparent'
            } else {
              btn.btnstyle.color = '#ffffff'
              btn.btnstyle.backgroundColor = color[btn.class]
              btn.style.color = '#ffffff'
              btn.style.backgroundColor = color[btn.class]
            }
          }
          return btn
src/menu/components/share/actioncomponent/index.scss
@@ -23,12 +23,19 @@
    }
    button {
      cursor: move;
      height: auto;
      min-height: 32px;
      .anticon-table {
        font-size: 10px;
        position: absolute;
        right: 1px;
        bottom: 0px;
      }
      span {
        font-style: inherit;
        text-decoration: inherit;
        font-weight: inherit;
      }
    }
  }
}
src/menu/components/table/normal-table/index.jsx
@@ -60,9 +60,9 @@
          { origin: true, uuid: Utils.getuuid(), label: 'label', type: 'date', match: 'greater' }
        ],
        action: [
          { origin: true, uuid: Utils.getuuid(), label: '添加', intertype: 'system', OpenType: 'pop', icon: 'plus', class: 'green', btnstyle: {color: 'rgb(255, 255, 255)', background: 'rgb(38, 194, 129)', marginRight: '15px'} },
          { origin: true, uuid: Utils.getuuid(), label: '修改', intertype: 'system', OpenType: 'pop', icon: 'form', class: 'purple', btnstyle: {color: 'rgb(255, 255, 255)', background: 'rgb(142, 68, 173)', marginRight: '15px'} },
          { origin: true, uuid: Utils.getuuid(), label: '删除', intertype: 'system', OpenType: 'prompt', icon: 'delete', class: 'danger', btnstyle: {color: 'rgb(255, 255, 255)', background: 'rgb(255, 77, 79)', marginRight: '15px'} }
          { origin: true, uuid: Utils.getuuid(), label: '添加', intertype: 'system', OpenType: 'pop', icon: 'plus', class: 'green', style: {color: 'rgb(255, 255, 255)', background: 'rgb(38, 194, 129)', marginRight: '15px'} },
          { origin: true, uuid: Utils.getuuid(), label: '修改', intertype: 'system', OpenType: 'pop', icon: 'form', class: 'purple', style: {color: 'rgb(255, 255, 255)', background: 'rgb(142, 68, 173)', marginRight: '15px'} },
          { origin: true, uuid: Utils.getuuid(), label: '删除', intertype: 'system', OpenType: 'prompt', icon: 'delete', class: 'danger', style: {color: 'rgb(255, 255, 255)', background: 'rgb(255, 77, 79)', marginRight: '15px'} }
        ],
        name: card.name,
        subtype: card.subtype,
@@ -274,7 +274,7 @@
    newcard.errorTime = 10
    newcard.verify = null
    newcard.show = 'button'
    newcard.btnstyle = {marginRight: '15px'}
    newcard.style = {marginRight: '15px'}
    // 注册事件-添加按钮
    MKEmitter.emit('addButton', card.uuid, newcard)
src/menu/components/tabs/antv-tabs/dragabletabs.jsx
@@ -1,5 +1,6 @@
import React, { Component } from 'react'
import { Tabs } from 'antd'
import { is, fromJS } from 'immutable'
import { DndProvider, DragSource, DropTarget } from 'react-dnd'
// Drag & Drop node
@@ -52,8 +53,6 @@
    const newOrder = this.state.order.slice()
    const { children } = this.props
    if (dragKey === 'tool' || hoverKey === 'tool') return
    React.Children.forEach(children, c => {
      if (newOrder.indexOf(c.key) === -1) {
        newOrder.push(c.key)
@@ -65,12 +64,11 @@
    newOrder.splice(dragIndex, 1)
    newOrder.splice(hoverIndex, 0, dragKey)
    let _order = newOrder.filter(item => item !== 'tool')
    
    this.setState({
      order: [..._order, 'tool']
      order: newOrder
    })
    this.props.tabsMove(_order)
    this.props.tabsMove(newOrder)
  }
  renderTabBar = (props, DefaultTabBar) => (
@@ -83,10 +81,16 @@
    </DefaultTabBar>
  )
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState)) ||
      !is(fromJS(nextProps.children), fromJS(this.props.children)) ||
      nextProps.tabPosition !== this.props.tabPosition ||
      nextProps.type !== this.props.type
  }
  render() {
    const { order } = this.state
    const { children } = this.props
    const tabs = []
    React.Children.forEach(children, c => {
      tabs.push(c)
src/menu/components/tabs/antv-tabs/index.jsx
@@ -317,21 +317,18 @@
              <TabComponents config={tab} handleList={this.updateTabComponent} deleteCard={this.deleteCard} />
            </TabPane>
          ))}
          <TabPane disabled tab={
            <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
              <div className="mk-popover-control">
                <Icon className="plus" title="添加标签" type="plus" onClick={this.tabAdd} />
                <SettingComponent config={tabs} updateConfig={this.updateComponent} />
                <CopyComponent type="tabs" card={tabs}/>
                <Icon className="style" title="调整样式" onClick={this.changeStyle} type="font-colors" />
                <Icon className="close" title="delete" type="delete" onClick={() => this.props.deletecomponent(tabs.uuid)} />
              </div>
            } trigger="hover">
              <Icon type="tool" />
            </Popover>
          } key="tool">
          </TabPane>
        </DraggableTabs>
        <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
          <div className="mk-popover-control">
            <Icon className="plus" title="添加标签" type="plus" onClick={this.tabAdd} />
            <SettingComponent config={tabs} updateConfig={this.updateComponent} />
            <CopyComponent type="tabs" card={tabs}/>
            <Icon className="style" title="调整样式" onClick={this.changeStyle} type="font-colors" />
            <Icon className="close" title="delete" type="delete" onClick={() => this.props.deletecomponent(tabs.uuid)} />
          </div>
        } trigger="hover">
          <Icon type="tool" />
        </Popover>
        <Modal
          wrapClassName="popview-modal"
          title={'标签编辑'}
src/menu/components/tabs/antv-tabs/index.scss
@@ -6,6 +6,23 @@
  background-repeat: no-repeat;
  background-size: cover;
  >.anticon-tool {
    position: absolute;
    z-index: 2;
    font-size: 16px;
    right: 1px;
    top: 1px;
    cursor: pointer;
    padding: 5px;
    background: rgba(255, 255, 255, 0.55);
  }
  .ant-tabs.ant-tabs-left, .ant-tabs.ant-tabs-bottom {
    .tab-shell-inner {
      padding-top: 25px;
    }
  }
  .ant-tabs-tabpane-active {
    min-height: 200px;
  }
@@ -26,18 +43,12 @@
      display: inline-block;
      padding: 8px 24px;
    }
    .anticon-tool {
      padding: 8px 24px;
    }
  }
  .ant-tabs .ant-tabs-right-bar .ant-tabs-tab {
    padding: 0px;
    text-align: left;
    > span {
      display: inline-block;
      padding: 8px 24px;
    }
    .anticon-tool {
      padding: 8px 24px;
    }
  }
@@ -48,14 +59,6 @@
      display: inline-block;
      padding: 12px 16px;
    }
    .anticon-tool {
      color: rgba(0, 0, 0, 0.65);
      font-size: 16px;
      padding: 12px 16px;
      margin-right: 0px;
      min-width: 100%;
      cursor: pointer;
    }
  }
  .ant-tabs-bottom .ant-tabs-bottom-bar .ant-tabs-ink-bar {
    top: 0px;
@@ -64,9 +67,6 @@
    .ant-tabs-left-bar, .ant-tabs-right-bar {
      .ant-tabs-tab {
        > span {
          padding: 0px 16px;
        }
        .anticon-tool {
          padding: 0px 16px;
        }
      }
@@ -82,14 +82,6 @@
        > span {
          display: inline-block;
          padding: 0px 16px;
        }
      }
      .ant-tabs-tab:last-child {
        padding: 0px;
        border: 0px;
        background: transparent;
        .anticon-tool {
          padding: 12px 16px;
        }
      }
    }
src/menu/pastecontroller/index.jsx
@@ -187,14 +187,14 @@
    let isgroup = Tab && Tab.type === 'group' ? true : false
    this.pasteFormRef.handleConfirm().then(res => {
      if (!isgroup && !['tabs', 'datacard', 'propcard', 'mainsearch', 'group', 'normaltable', 'tablecard', 'line', 'bar', 'pie'].includes(res.copyType)) {
      if (!isgroup && !['tabs', 'datacard', 'propcard', 'mainsearch', 'group', 'normaltable', 'tablecard', 'line', 'bar', 'pie', 'dashboard', 'scatter'].includes(res.copyType)) {
        notification.warning({
          top: 92,
          message: '配置信息格式错误!',
          duration: 5
        })
        return
      } else if (isgroup && !['datacard', 'propcard', 'normaltable', 'tablecard', 'line', 'bar', 'pie'].includes(res.copyType)) {
      } else if (isgroup && !['datacard', 'propcard', 'normaltable', 'tablecard', 'line', 'bar', 'pie', 'dashboard', 'scatter'].includes(res.copyType)) {
        notification.warning({
          top: 92,
          message: '配置信息格式错误!',
src/pc/menushell/card.jsx
@@ -7,6 +7,8 @@
const AntvBar = asyncComponent(() => import('@/menu/components/chart/antv-bar'))
const MainSearch = asyncComponent(() => import('@/menu/components/search/main-search'))
const AntvPie = asyncComponent(() => import('@/menu/components/chart/antv-pie'))
const AntvDashboard = asyncComponent(() => import('@/menu/components/chart/antv-dashboard'))
const AntvScatter = asyncComponent(() => import('@/menu/components/chart/antv-scatter'))
const AntvTabs = asyncComponent(() => import('@/menu/components/tabs/antv-tabs'))
const DataCard = asyncComponent(() => import('@/menu/components/card/data-card'))
const PropCard = asyncComponent(() => import('@/menu/components/card/prop-card'))
@@ -69,6 +71,10 @@
      return (<MainSearch card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
    } else if (card.type === 'pie') {
      return (<AntvPie card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
    } else if (card.type === 'dashboard') {
      return (<AntvDashboard card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
    } else if (card.type === 'scatter') {
      return (<AntvScatter card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
    } else if (card.type === 'tabs') {
      return (<AntvTabs tabs={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
    } else if (card.type === 'card' && card.subtype === 'datacard') {
src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -542,123 +542,108 @@
          return null
        }
      }
      if (['exec', 'prompt', 'pop'].includes(card.OpenType)) {
        return (
          <Col key={card.uuid} span={card.width}>
            <div style={card.style}>
              <NormalButton
                BID={data.$$BID}
                btn={card}
                show={card.show}
                style={card.btnstyle}
                setting={cards.setting}
                columns={cards.columns}
                selectedData={[data]}
              />
            </div>
          <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
            <NormalButton
              BID={data.$$BID}
              btn={card}
              show={card.show}
              style={card.style}
              setting={cards.setting}
              columns={cards.columns}
              selectedData={[data]}
            />
          </Col>
        )
      } else if (card.OpenType === 'excelIn') {
        return (
          <Col key={card.uuid} span={card.width}>
            <div style={card.style}>
              <ExcelInButton
                BID={data.$$BID}
                btn={card}
                show={card.show}
                style={card.btnstyle}
                setting={cards.setting}
                selectedData={[data]}
              />
            </div>
          <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
            <ExcelInButton
              BID={data.$$BID}
              btn={card}
              show={card.show}
              style={card.style}
              setting={cards.setting}
              selectedData={[data]}
            />
          </Col>
        )
      } else if (card.OpenType === 'excelOut') {
        return (
          <Col key={card.uuid} span={card.width}>
            <div style={card.style}>
              <ExcelOutButton
                BID={data.$$BID}
                btn={card}
                show={card.show}
                style={card.btnstyle}
                setting={cards.setting}
              />
            </div>
          <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
            <ExcelOutButton
              BID={data.$$BID}
              btn={card}
              show={card.show}
              style={card.style}
              setting={cards.setting}
            />
          </Col>
        )
      } else if (card.OpenType === 'popview') {
        return (
          <Col key={card.uuid} span={card.width}>
            <div style={card.style}>
              <PopupButton
                BID={data.$$BID}
                btn={card}
                show={card.show}
                style={card.btnstyle}
                setting={cards.setting}
                selectedData={[data]}
              />
            </div>
          <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
            <PopupButton
              BID={data.$$BID}
              btn={card}
              show={card.show}
              style={card.style}
              setting={cards.setting}
              selectedData={[data]}
            />
          </Col>
        )
      } else if (card.OpenType === 'tab') {
        return (
          <Col key={card.uuid} span={card.width}>
            <div style={card.style}>
              <TabButton
                btn={card}
                show={card.show}
                style={card.btnstyle}
                setting={cards.setting}
                selectedData={[data]}
              />
            </div>
          <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
            <TabButton
              btn={card}
              show={card.show}
              style={card.style}
              setting={cards.setting}
              selectedData={[data]}
            />
          </Col>
        )
      } else if (card.OpenType === 'innerpage') {
        return (
          <Col key={card.uuid} span={card.width}>
            <div style={card.style}>
              <NewPageButton
                btn={card}
                show={card.show}
                style={card.btnstyle}
                setting={cards.setting}
                selectedData={[data]}
              />
            </div>
          <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
            <NewPageButton
              btn={card}
              show={card.show}
              style={card.style}
              setting={cards.setting}
              selectedData={[data]}
            />
          </Col>
        )
      } else if (card.OpenType === 'funcbutton') {
        if (card.funcType === 'changeuser') {
          return (
            <Col key={card.uuid} span={card.width}>
              <div style={card.style}>
                <ChangeUserButton
                  BID={data.$$BID}
                  btn={card}
                  show={card.show}
                  style={card.btnstyle}
                  setting={cards.setting}
                  selectedData={[data]}
                />
              </div>
            <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
              <ChangeUserButton
                BID={data.$$BID}
                btn={card}
                show={card.show}
                style={card.style}
                setting={cards.setting}
                selectedData={[data]}
              />
            </Col>
          )
        } else if (card.funcType === 'print') {
          return (
            <Col key={card.uuid} span={card.width}>
              <div style={card.style}>
                <PrintButton
                  BID={data.$$BID}
                  btn={card}
                  show={card.show}
                  style={card.btnstyle}
                  setting={cards.setting}
                  selectedData={[data]}
                />
              </div>
            <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
              <PrintButton
                BID={data.$$BID}
                btn={card}
                show={card.show}
                style={card.style}
                setting={cards.setting}
                selectedData={[data]}
              />
            </Col>
          )
        }
src/tabviews/custom/components/card/cardcellList/index.scss
@@ -46,9 +46,13 @@
  .line10 {
    -webkit-line-clamp: 10;
  }
  button {
    height: auto;
    min-height: 32px;
  .mk-cell-btn {
    > div {width: 100%;}
    button {
      width: 100%;
      height: auto;
      min-height: 32px;
    }
  }
  .ant-mk-slider {
    box-sizing: border-box;
src/tabviews/custom/components/card/data-card/index.jsx
@@ -2,7 +2,7 @@
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { connect } from 'react-redux'
import { Spin, Empty, notification, Col, Pagination } from 'antd'
import { Spin, Empty, notification, Row, Col, Pagination } from 'antd'
import Api from '@/api'
import Utils from '@/utils/utils.js'
@@ -554,13 +554,13 @@
        }
        <div className={`data-zoom ${config.wrap.cardType || ''} ${config.wrap.scale || ''}`}>
          {switchable ? <div className={'prev-page ' + (pageIndex === 1 ? 'disabled' : '')} onClick={this.prevPage}><div><div><img src={preImg} alt=""/></div></div></div> : null}
          {data && data.length > 0 ? <div className="card-row-list">
          {data && data.length > 0 ? <Row className="card-row-list">
            {data.map((item, index) => (
              <Col className={(activeKey === index ? 'active' : (selectKeys.indexOf(index) > -1 ? 'selected' : '')) + (card.setting.click ? ' pointer' : '')} key={index} span={card.setting.width} offset={!index ? offset : 0} onClick={() => {this.changeCard(index, item)}}>
                <CardItem card={card} cards={config} data={item}/>
              </Col>
            ))}
          </div> : null}
          </Row> : null}
          {switchable ? <div className={'prev-page ' + (total <= _total ? 'disabled' : '')} onClick={this.nextPage}><div><div><img src={nextImg} alt=""/></div></div></div> : null}
          {!data || data.length === 0 ? <Empty description={false}/> : null}
        </div>
src/tabviews/custom/components/card/prop-card/index.jsx
@@ -2,7 +2,7 @@
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { connect } from 'react-redux'
import { Spin, notification, Col } from 'antd'
import { Spin, notification, Col, Row } from 'antd'
import moment from 'moment'
import Api from '@/api'
@@ -425,13 +425,13 @@
          </div> : null
        }
        <NormalHeader config={config}/>
        <div className={`card-row-list ${config.wrap.cardType || ''} ${config.wrap.scale || ''}`}>
        <Row className={`card-row-list ${config.wrap.cardType || ''} ${config.wrap.scale || ''}`}>
          {config.subcards.map((item, index) => (
            <Col className={(activeKey === index ? 'active' : '') + (item.setting.click ? ' pointer' : '')} key={index} span={item.setting.width || 6} offset={item.offset || 0} onClick={() => {this.changeCard(index, item)}}>
              <CardItem card={item} cards={config} data={data}/>
            </Col>
          ))}
        </div>
        </Row>
      </div>
    )
  }
src/tabviews/custom/components/card/table-card/index.jsx
@@ -1,7 +1,7 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Spin, notification, Col, Empty, Pagination } from 'antd'
import { Spin, notification, Row, Col, Empty, Pagination } from 'antd'
import Api from '@/api'
import Utils from '@/utils/utils.js'
@@ -351,9 +351,9 @@
          </div> : null
        }
        <NormalHeader config={config} BID={BID} menuType={this.props.menuType} refresh={this.refreshSearch} />
        {data && data.length > 0 ? <div className="card-row-list" style={{height: config.wrap.contentHeight}}>
        {data && data.length > 0 ? <Row className="card-row-list" style={{height: config.wrap.contentHeight}}>
          {data.map((item, index) => this.getLines(item, preIndex + index + 1))}
        </div> : null}
        </Row> : null}
        {data && data.length === 0 ? <div className="card-row-list" style={{height: config.wrap.contentHeight}}>
          <Empty description={false}/>
        </div> : null}
src/tabviews/custom/components/form/normal-form/index.jsx
@@ -66,7 +66,6 @@
      group.subButton.uuid = group.uuid
      group.subButton.$menuId = group.uuid
      group.subButton.Ot = 'requiredSgl'
      group.subButton.btnstyle = group.subButton.style
      group.subButton.OpenType = 'formSubmit'
      group.subButton.execError = 'never'
src/tabviews/custom/index.jsx
@@ -557,9 +557,15 @@
            cell = this.getPrinter(cell, item.uuid)
          }
          if (cell.btnstyle) { // 兼容
            cell.style = cell.style || {}
            cell.style = {...cell.style, ...cell.btnstyle}
          }
          return isHS || permAction[cell.uuid]
        })
      }
      if (item.type === 'card') {
        item.subcards.forEach(card => {
          let _hasheight = card.style.height && card.style.height !== 'auto'
@@ -582,6 +588,10 @@
              if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置
                cell = this.getPrinter(cell, item.uuid)
              }
              if (card.btnstyle) { // 兼容
                card.style = card.style || {}
                card.style = {...card.style, ...card.btnstyle}
              }
            } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
              cell.innerHeight = 'auto'
            }
@@ -600,6 +610,10 @@
              if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置
                cell = this.getPrinter(cell, item.uuid)
              }
              if (card.btnstyle) { // 兼容
                card.style = card.style || {}
                card.style = {...card.style, ...card.btnstyle}
              }
            } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
              cell.innerHeight = 'auto'
@@ -623,6 +637,11 @@
              if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置
                cell = this.getPrinter(cell, item.uuid)
              }
              if (card.btnstyle) { // 兼容
                card.style = card.style || {}
                card.style = {...card.style, ...card.btnstyle}
              }
            } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
              cell.innerHeight = 'auto'
            }
@@ -645,6 +664,11 @@
              cell = this.getPrinter(cell, item.uuid)
            }
            if (cell.btnstyle) { // 兼容
              cell.style = cell.style || {}
              cell.style = {...cell.style, ...cell.btnstyle}
            }
            return isHS || permAction[cell.uuid]
          })
          return col.elements.length !== 0
src/tabviews/custom/index.scss
@@ -43,6 +43,12 @@
  .ant-btn-link:hover {
    opacity: 0.8;
  }
  .button-list.toolbar-button {
    button {
      height: auto;
      min-height: 32px;
    }
  }
}
.custom-page-wrap.loading {
  .ant-spin-spinning:not(.view-spin) {
src/tabviews/zshare/actionList/asyncButtonComponent.jsx
@@ -27,19 +27,11 @@
      const btn = this.props.btn || {}
      let style = {}
      if (!C && btn.btnstyle) {
        if (btn.btnstyle.marginRight) {
          style.marginRight = btn.btnstyle.marginRight
        }
        if (btn.btnstyle.marginLeft) {
          style.marginLeft = btn.btnstyle.marginLeft
        }
        if (btn.btnstyle.marginTop) {
          style.marginTop = btn.btnstyle.marginTop
        }
        if (btn.btnstyle.marginBottom) {
          style.marginBottom = btn.btnstyle.marginBottom
        }
      if (!C && btn.style) {
        style.marginRight = btn.style.marginRight || ''
        style.marginLeft = btn.style.marginLeft || ''
        style.marginTop = btn.style.marginTop || ''
        style.marginBottom = btn.style.marginBottom || ''
      }
      return C ?
src/tabviews/zshare/actionList/changeuserbutton/index.jsx
@@ -166,7 +166,7 @@
          type="link"
          title={show === 'icon' ? btn.label : ''}
          loading={loading}
          style={btn.btnstyle}
          style={btn.style}
          icon={show === 'text' ? '' : (btn.icon || '')}
          onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
        >{show === 'icon' && btn.icon ? '' : btn.label}</Button>
src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -103,7 +103,7 @@
    }
    let primaryId = '' // 导入时行Id
    if (btn.Ot === 'requiredSgl') {
    if (btn.Ot === 'requiredSgl' && setting.primaryKey) {
      primaryId = data[0][setting.primaryKey] || ''
    }
@@ -426,7 +426,7 @@
          type="link"
          title={show === 'icon' ? btn.label : ''}
          loading={loading}
          style={btn.btnstyle}
          style={btn.style}
          icon={show === 'text' ? '' : (show === 'icon' ? (btn.icon || 'upload') : (btn.icon || ''))}
          onClick={() => {this.actionTrigger()}}
        >{show === 'icon' ? '' : btn.label}</Button>
src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -798,7 +798,7 @@
          type="link"
          title={show === 'icon' ? btn.label : ''}
          loading={loading}
          style={btn.btnstyle}
          style={btn.style}
          icon={show === 'text' ? '' : (show === 'icon' ? (btn.icon || 'download') : (btn.icon || ''))}
          onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
        >{show === 'icon' ? '' : btn.label}</Button>
src/tabviews/zshare/actionList/newpagebutton/index.jsx
@@ -69,14 +69,6 @@
        duration: 5
      })
      return
    } else if (btn.Ot !== 'notRequired' && !setting.primaryKey) {
      // 需要选择行时,校验是否设置主键
      notification.warning({
        top: 92,
        message: '未设置主键!',
        duration: 5
      })
      return
    } else if (!btn.pageTemplate) {
      notification.warning({
        top: 92,
@@ -91,7 +83,7 @@
    let MenuNo = ''
    let Remark = ''
    if (btn.Ot === 'requiredSgl' && data[0]) {
      Id = data[0][setting.primaryKey] || ''
      Id = setting.primaryKey ? (data[0][setting.primaryKey] || '') : ''
      name = data[0].PrintTempName || ''
      MenuNo = data[0].PrintTempNO || ''
      Remark = data[0].Remark || ''
@@ -103,7 +95,7 @@
      _name = '单据打印'
      if (btn.Ot === 'required' && data && data.length > 0) {
        data.forEach((item, i) => {
          let _id = item[setting.primaryKey] || ''
          let _id = setting.primaryKey ? (item[setting.primaryKey] || '') : ''
          let url = '#/billprint/' + window.btoa(window.encodeURIComponent(JSON.stringify({ id: _id, tempId: btn.printTemp, dataM: sessionStorage.getItem('dataM') })))
          window.open(url)
        })
@@ -178,7 +170,7 @@
        <Button
          type="link"
          title={show === 'icon' ? btn.label : ''}
          style={btn.btnstyle}
          style={btn.style}
          icon={show === 'text' ? '' : (btn.icon || '')}
          onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
        >{show === 'icon' && btn.icon ? '' : btn.label}</Button>
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -99,7 +99,7 @@
   * @description 触发按钮操作
   */
  actionTrigger = (triggerId, record) => {
    const { setting, Tab, BID, btn, selectedData } = this.props
    const { Tab, BID, btn, selectedData } = this.props
    const { loading } = this.state
    if ((triggerId && btn.uuid !== triggerId) || loading) return
@@ -129,14 +129,6 @@
      notification.warning({
        top: 92,
        message: this.state.dict['main.action.confirm.selectSingleLine'],
        duration: 5
      })
      return
    } else if (btn.OpenType !== 'formSubmit' && !setting.primaryKey) {
      // 需要选择行时,校验是否设置主键
      notification.warning({
        top: 92,
        message: '未设置主键!',
        duration: 5
      })
      return
@@ -258,7 +250,7 @@
      
      let primaryId = ''
      if (btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') {
      if ((btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') && setting.primaryKey) {
        let ids = data.map(d => { return d[setting.primaryKey] || ''})
        ids = ids.filter(Boolean)
        primaryId = ids.join(',')
@@ -512,13 +504,15 @@
      
      let primaryId = ''
      if (btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') {
      if ((btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') && setting.primaryKey) {
        let ids = data.map(d => { return d[setting.primaryKey] || ''})
        ids = ids.filter(Boolean)
        primaryId = ids.join(',')
      }
      param[setting.primaryKey] = primaryId // 设置主键参数
      if (setting.primaryKey) {
        param[setting.primaryKey] = primaryId // 设置主键参数
      }
      if (btn.OpenType === 'pop' || btn.OpenType === 'formSubmit') { // 表单
        formdata.forEach(_data => {
@@ -559,7 +553,9 @@
            param[_data.key] = _data.value
          })
        }
        param[setting.primaryKey] = primaryId
        if (setting.primaryKey) {
          param[setting.primaryKey] = primaryId
        }
        if (this.props.menuType === 'HS' && param.func === 's_sDataDictb_TBBack' && param.LTextOut) { // 函数 s_sDataDictb_TBBack 云端验证
          param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
@@ -1687,7 +1683,7 @@
          type="link"
          title={show === 'icon' ? btn.label : ''}
          loading={loading}
          style={btn.btnstyle || style}
          style={btn.style || style}
          icon={show === 'text' ? '' : (btn.icon || '')}
          onClick={() => {this.actionTrigger()}}
        >{show === 'icon' && btn.icon ? '' : btn.label}</Button>
src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -113,14 +113,6 @@
        duration: 5
      })
      return
    } else if (!setting.primaryKey) {
      // 需要选择行时,校验是否设置主键
      notification.warning({
        top: 92,
        message: '未设置主键!',
        duration: 5
      })
      return
    } else if (setting.tabType === 'subtab') {
      notification.warning({
        top: 92,
@@ -133,7 +125,7 @@
    let _data = null
    let primaryId = ''
    if (btn.Ot === 'requiredSgl') {
    if (btn.Ot === 'requiredSgl' && setting.primaryKey) {
      _data = data[0]
      primaryId = _data[setting.primaryKey] || ''
    }
@@ -182,7 +174,7 @@
          type="link"
          title={show === 'icon' ? btn.label : ''}
          loading={loading}
          style={btn.btnstyle}
          style={btn.style}
          icon={show === 'text' ? '' : (btn.icon || '')}
          onClick={() => {this.actionTrigger()}}
        >{show === 'icon' && btn.icon ? '' : btn.label}</Button> : null}
src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -81,7 +81,7 @@
   * @description 触发按钮操作
   */
  actionTrigger = (triggerId, record) => {
    const { setting, Tab, BID, btn, selectedData } = this.props
    const { Tab, BID, btn, selectedData } = this.props
    const { loading } = this.state
    if ((triggerId && btn.uuid !== triggerId) || loading) return
@@ -111,14 +111,6 @@
      notification.warning({
        top: 92,
        message: this.state.dict['main.action.confirm.selectSingleLine'],
        duration: 5
      })
      return
    } else if (!setting.primaryKey) {
      // 需要选择行时,校验是否设置主键
      notification.warning({
        top: 92,
        message: '未设置主键!',
        duration: 5
      })
      return
@@ -358,17 +350,21 @@
        let _param = { ...param, ...formdata }
        params.push(_param)
      } else if (btn.Ot === 'requiredSgl') {
        param[setting.primaryKey] = data[0][setting.primaryKey]
        if (setting.primaryKey) {
          param[setting.primaryKey] = data[0][setting.primaryKey]
        }
        let _param = { ...param, ...formdata }
        params.push(_param)
      } else if (btn.Ot === 'requiredOnce') {
        let ids = data.map(d => { return d[setting.primaryKey]})
        ids = ids.filter(Boolean)
        ids = ids.join(',')
        param[setting.primaryKey] = ids
        if (setting.primaryKey) {
          let ids = data.map(d => { return d[setting.primaryKey]})
          ids = ids.filter(Boolean)
          ids = ids.join(',')
          param[setting.primaryKey] = ids
        }
        let _param = { ...param, ...formdata }
@@ -376,7 +372,10 @@
      } else if (btn.Ot === 'required') {
        params = data.map((cell, index) => {
          let _param = { ...param }
          _param[setting.primaryKey] = cell[setting.primaryKey]
          if (setting.primaryKey) {
            _param[setting.primaryKey] = cell[setting.primaryKey]
          }
          formlist.forEach(_data => {
            if (index !== 0 && _data.readin && cell.hasOwnProperty(_data.key)) {
@@ -1269,7 +1268,7 @@
          type="link"
          title={show === 'icon' ? btn.label : ''}
          loading={loading}
          style={btn.btnstyle}
          style={btn.style}
          icon={show === 'text' ? '' : (btn.icon || '')}
          onClick={() => {this.actionTrigger()}}
        >{show === 'icon' && btn.icon ? '' : btn.label}</Button>
src/tabviews/zshare/actionList/tabbutton/index.jsx
@@ -62,19 +62,11 @@
        duration: 5
      })
      return
    } else if (!setting.primaryKey) {
      // 需要选择行时,校验是否设置主键
      notification.warning({
        top: 92,
        message: '未设置主键!',
        duration: 5
      })
      return
    }
    let primaryId = ''
    if (btn.Ot === 'requiredSgl') {
    if (btn.Ot === 'requiredSgl' && setting.primaryKey) {
      primaryId = data[0][setting.primaryKey] || ''
    }
@@ -170,7 +162,7 @@
        <Button
          type="link"
          title={show === 'icon' ? btn.label : ''}
          style={btn.btnstyle}
          style={btn.style}
          icon={show === 'text' ? '' : (btn.icon || '')}
          onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
        >{show === 'icon' && btn.icon ? '' : btn.label}</Button>
src/views/menudesign/index.jsx
@@ -849,7 +849,7 @@
            error = `组件《${item.name}》未设置数据源!`
          } else if (item.setting.interType === 'system' && item.setting.execute === 'false' && item.scripts.length === 0) {
            error = `组件《${item.name}》未设置数据源!`
          } else if (item.setting.interType && !item.setting.primaryKey && MenuType !== 'billPrint') {
          } else if (!item.setting.primaryKey && MenuType !== 'billPrint') {
            error = `组件《${item.name}》未设置主键!`
          }
        }
src/views/mobdesign/index.jsx
@@ -1292,7 +1292,7 @@
            error = `组件《${item.name}》未设置数据源!`
          } else if (item.setting.interType === 'system' && item.setting.execute === 'false' && item.scripts.length === 0) {
            error = `组件《${item.name}》未设置数据源!`
          } else if (item.setting.interType && !item.setting.primaryKey) {
          } else if (!item.setting.primaryKey) {
            error = `组件《${item.name}》未设置主键!`
          }
        }
src/views/pcdesign/index.jsx
@@ -1337,7 +1337,7 @@
            error = `组件《${item.name}》未设置数据源!`
          } else if (item.setting.interType === 'system' && item.setting.execute === 'false' && item.scripts.length === 0) {
            error = `组件《${item.name}》未设置数据源!`
          } else if (item.setting.interType && !item.setting.primaryKey) {
          } else if (!item.setting.primaryKey) {
            error = `组件《${item.name}》未设置主键!`
          }
        }