king
2021-01-05 a82d726906f0264b96a5b1a82d932d0c3c38714e
2021-01-05
7 文件已重命名
29个文件已修改
423 ■■■■■ 已修改文件
src/assets/css/viewstyle.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/groupcomponents/card.jsx 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/groupcomponents/index.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/groupcomponents/index.scss 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/groupsetting/index.jsx 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/groupsetting/index.scss 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/groupsetting/settingform/index.jsx 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/groupsetting/settingform/index.scss 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/normal-group/index.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/normal-group/index.scss 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/actionform/index.jsx 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/formconfig.jsx 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/tabs/tabcomponents/index.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/menushell/index.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/pastecontroller/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/commontable/index.jsx 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/data-card/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-bar-line/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/group/normal-group/index.jsx 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/group/normal-group/index.scss 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/normal-table/index.jsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/normal-table/index.scss 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/subtable/index.jsx 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/subtabtable/index.jsx 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/verupmanage/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/verupmanage/subtabtable/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/exceloutbutton/index.jsx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/index.jsx 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/printbutton/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/cardcomponent/index.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/chartcomponent/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/actionform/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils-update.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/viewstyle.scss
@@ -243,6 +243,11 @@
      }
    }
  }
  .normal-group-wrap {
    .print-button:hover, .print-button:focus, .print-button:active {
      color: $color5;
    }
  }
  // 系统样式修改
  .ant-select-dropdown-menu-item:hover:not(.ant-select-dropdown-menu-item-disabled) {
src/menu/components/group/groupcomponents/card.jsx
src/menu/components/group/groupcomponents/index.jsx
File was renamed from src/menu/components/group/tabcomponents/index.jsx
@@ -115,14 +115,6 @@
        i++
      }
      let dataName = ''
      while (!dataName) {
        let _dataName = Utils.getdataName()
        if (config.components.filter(com => com.dataName === _dataName).length === 0) {
          dataName = _dataName
        }
      }
      let newcard = {
        uuid: Utils.getuuid(),
        tabId: config.uuid,
@@ -131,7 +123,7 @@
        subtype: item.subtype,
        config: item.config,
        width: item.width || 24,
        dataName: dataName,
        dataName: Utils.getdataName(),
        name: name,
        floor: config.floor || 1, // 组件的层级
        isNew: true               // 新添加标志,用于初始化
src/menu/components/group/groupcomponents/index.scss
src/menu/components/group/groupsetting/index.jsx
src/menu/components/group/groupsetting/index.scss
src/menu/components/group/groupsetting/settingform/index.jsx
File was renamed from src/menu/components/group/tabsetting/settingform/index.jsx
@@ -1,6 +1,6 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { Form, Row, Col, Input, Tooltip, Icon, InputNumber, Select } from 'antd'
import { Form, Row, Col, Input, Tooltip, Icon, InputNumber, Select, Radio } from 'antd'
import './index.scss'
@@ -12,7 +12,8 @@
  }
  state = {
    roleList: []
    roleList: [],
    print: this.props.setting.print || 'false'
  }
  UNSAFE_componentWillMount () {
@@ -52,9 +53,9 @@
  }
  render() {
    const { setting } = this.props
    const { setting, dict } = this.props
    const { getFieldDecorator } = this.props.form
    const { roleList } = this.state
    const { roleList, print } = this.state
    const formItemLayout = {
      labelCol: {
@@ -108,6 +109,55 @@
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="打印按钮">
                {getFieldDecorator('print', {
                  initialValue: print
                })(
                  <Radio.Group style={{whiteSpace: 'nowrap'}} onChange={(e) => {this.setState({print: e.target.value})}}>
                    <Radio key="true" value="true"> 显示 </Radio>
                    <Radio key="false" value="false"> 隐藏 </Radio>
                  </Radio.Group>
                )}
              </Form.Item>
            </Col>
            {print === 'true' ? <Col span={12}>
              <Form.Item label="打印尺寸">
                {getFieldDecorator('pageSize', {
                  initialValue: setting.pageSize || 'A4',
                  rules: [
                    {
                      required: true,
                      message: '请选择打印尺寸!'
                    }
                  ]
                })(
                  <Select>
                    <Select.Option value="A3">A3</Select.Option>
                    <Select.Option value="A4">A4</Select.Option>
                    <Select.Option value="A5">A5</Select.Option>
                  </Select>
                )}
              </Form.Item>
            </Col> : null}
            {print === 'true' ? <Col span={12}>
              <Form.Item label="打印布局">
                {getFieldDecorator('pageLayout', {
                  initialValue: setting.pageLayout || 'vertical',
                  rules: [
                    {
                      required: true,
                      message: dict['mob.required.select'] + '打印布局!'
                    }
                  ]
                })(
                  <Radio.Group>
                    <Radio value="vertical">纵向</Radio>
                    <Radio value="horizontal">横向</Radio>
                  </Radio.Group>
                )}
              </Form.Item>
            </Col> : null}
            <Col span={12}>
              <Form.Item label="黑名单">
                {getFieldDecorator('blacklist', {
                  initialValue: setting.blacklist || []
src/menu/components/group/groupsetting/settingform/index.scss
src/menu/components/group/normal-group/index.jsx
@@ -2,7 +2,7 @@
import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import { is, fromJS } from 'immutable'
import { Icon, Popover } from 'antd'
import { Icon, Popover, Button } from 'antd'
import MKEmitter from '@/utils/events.js'
import asyncComponent from '@/utils/asyncComponent'
@@ -12,10 +12,10 @@
import enUS from '@/locales/en-US/model.js'
import './index.scss'
const SettingComponent = asyncIconComponent(() => import('../tabsetting'))
const SettingComponent = asyncIconComponent(() => import('../groupsetting'))
const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent'))
const PasteController = asyncIconComponent(() => import('@/menu/pastecontroller'))
const TabComponents = asyncComponent(() => import('../tabcomponents'))
const GroupComponents = asyncComponent(() => import('../groupcomponents'))
class NormalGroup extends Component {
  static propTpyes = {
@@ -148,8 +148,8 @@
        } trigger="hover">
          <Icon type="tool" />
        </Popover>
        <TabComponents config={group} handleList={this.updateComponent} deleteCard={this.deleteCard} />
        {group.setting && group.setting.print === 'true' ? <Button className="print-button" icon="printer" onClick={this.print}></Button> : null}
        <GroupComponents config={group} handleList={this.updateComponent} deleteCard={this.deleteCard} />
      </div>
    )
  }
src/menu/components/group/normal-group/index.scss
@@ -17,6 +17,14 @@
    padding: 5px;
    background: rgba(255, 255, 255, 0.55);
  }
  .print-button, .print-button:hover, .print-button:focus, .print-button:active {
    position: absolute;
    right: 40px;
    top: 0px;
    border: 0;
    background: transparent;
    color: #bcbcbc;
  }
}
.menu-group-edit-box::before {
  content: ' ';
src/menu/components/share/actioncomponent/actionform/index.jsx
@@ -77,10 +77,6 @@
    let _intertype = card.intertype || 'system'  // 接口类型
    let _funcType = card.funcType || 'print'     // 功能按钮默认类型
    
    if (card.execMode) {                         // 转换打印时打开方式
      _opentype = 'funcbutton'
    }
    let _options = this.getOptions(_opentype, _intertype, _funcType, card.pageTemplate)
    this.setState({
@@ -141,10 +137,11 @@
      }
    } else if (_opentype === 'funcbutton') {
      if (_funcType === 'print') {
        _options.push('execMode', 'intertype', 'Ot', 'execSuccess', 'execError')
        if (_intertype === 'outer') {
          _options.push('execMode', 'intertype', 'innerFunc', 'sysInterface', 'interface', 'outerFunc', 'callbackFunc', 'Ot', 'execSuccess', 'execError')
          _options.push('innerFunc', 'sysInterface', 'interface', 'outerFunc', 'callbackFunc')
        } else if (_intertype === 'inner') {
          _options.push('execMode', 'intertype', 'innerFunc', 'Ot', 'execSuccess', 'execError')
          _options.push('innerFunc')
        }
      }
    } else if (_opentype !== 'popview' && _opentype !== 'tab') {
@@ -589,10 +586,6 @@
            }
            
            values.Ot = 'notRequired'
          } else if (values.OpenType === 'funcbutton') { // 转换打印时打开方式
            if (values.funcType === 'print') {
              values.OpenType = values.execMode
            }
          } else if (['pop', 'prompt', 'exec'].includes(values.OpenType) && values.verify) {
            if ((values.Ot === 'requiredOnce' || this.props.card.Ot === 'requiredOnce') && this.props.card.Ot !== values.Ot) {
              values.verify.uniques = []
src/menu/components/share/actioncomponent/formconfig.jsx
@@ -71,8 +71,11 @@
      initVal: card.funcType || 'print',
      required: true,
      options: [{
        value: 'changeuser',
        text: Formdict['header.form.func.changeuser']
      }, {
        value: 'print',
        text: Formdict['header.form.func.print']
        text: '标签打印'
      }]
    },
    {
@@ -221,34 +224,6 @@
      initVal: card.linkmenu || [],
      required: true,
      options: menulist
    },
    {
      type: 'radio',
      key: 'afterExecSuccess',
      label: Formdict['header.form.afterExecSuccess'],
      initVal: card.afterExecSuccess || 'close',
      required: true,
      options: [{
        value: 'close',
        text: Formdict['model.close']
      }, {
        value: 'notclose',
        text: Formdict['model.notclose']
      }]
    },
    {
      type: 'radio',
      key: 'afterExecError',
      label: Formdict['header.form.afterExecError'],
      initVal: card.afterExecError || 'notclose',
      required: true,
      options: [{
        value: 'close',
        text: Formdict['model.close']
      }, {
        value: 'notclose',
        text: Formdict['model.notclose']
      }]
    },
    {
      type: 'radio',
src/menu/components/tabs/tabcomponents/index.jsx
@@ -108,14 +108,6 @@
        i++
      }
      let dataName = ''
      while (!dataName) {
        let _dataName = Utils.getdataName()
        if (config.components.filter(com => com.dataName === _dataName).length === 0) {
          dataName = _dataName
        }
      }
      let newcard = {
        uuid: Utils.getuuid(),
        tabId: config.uuid,
@@ -124,7 +116,7 @@
        subtype: item.subtype,
        config: item.config,
        width: item.width || 24,
        dataName: dataName,
        dataName: Utils.getdataName(),
        name: name,
        floor: config.floor ? (config.floor + 1) : 2, // 组件的层级
        isNew: true                                   // 新添加标志,用于初始化
src/menu/menushell/index.jsx
@@ -101,21 +101,13 @@
        i++
      }
      let dataName = ''
      while (!dataName) {
        let _dataName = Utils.getdataName()
        if (menu.components.filter(com => com.dataName === _dataName).length === 0) {
          dataName = _dataName
        }
      }
      let newcard = {
        uuid: Utils.getuuid(),
        type: item.component,
        subtype: item.subtype,
        config: item.config,
        width: item.width || 24,
        dataName: dataName,
        dataName: Utils.getdataName(),
        name: name,
        floor: 1,   // 组件的层级
        isNew: true // 新添加标志,用于初始化
src/menu/pastecontroller/index.jsx
@@ -35,6 +35,10 @@
      item.parentId = Tab.parentId
    }
    if (item.dataName) {
      item.dataName = Utils.getdataName()
    }
    if (item.type === 'tabs') {
      item.subtabs.forEach(tab => {
        tab.uuid = Utils.getuuid()
src/tabviews/commontable/index.jsx
@@ -225,10 +225,6 @@
        config.easyCode = _curUserConfig.easyCode || config.easyCode || ''
        config.action = config.action.map(item => {
          if (item.execMode) {
            item.OpenType = 'funcbutton'
          }
          if (_curUserConfig.action[item.uuid]) {
            delete _curUserConfig.action[item.uuid].label
            item = {...item, ..._curUserConfig.action[item.uuid]}
@@ -267,9 +263,7 @@
      config.action.forEach(item => {
        item.logLabel = MenuName + '-' + item.label // 用于sPC_TableData_InUpDe记录操作按钮
        if (item.execMode) {
          item.OpenType = 'funcbutton'
        }
        item.$menuId = this.props.MenuID
        if (item.position === 'toolbar') {
          _actions.push(item)
@@ -744,16 +738,18 @@
  /**
   * @description 导出Excel时,获取页面搜索排序等参数
   */
  getexceloutparam = () => {
    const { MenuName } = this.props
  getexceloutparam = (menuId, btnId) => {
    const { MenuName, MenuID } = this.props
    const { arr_field, orderBy, search, setting} = this.state
    return {
    if (MenuID !== menuId) return
    MKEmitter.emit('execExcelout', MenuID, btnId, {
      arr_field: arr_field,
      orderBy: orderBy || setting.order,
      search: search,
      menuName: MenuName
    }
    })
  }
  /**
@@ -918,6 +914,7 @@
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('reloadMenuView', this.reloadMenuView)
    MKEmitter.addListener('resetActiveMenu', this.resetActiveMenu)
    MKEmitter.addListener('getexceloutparam', this.getexceloutparam)
  }
  /**
@@ -931,6 +928,7 @@
    MKEmitter.removeListener('reloadData', this.reloadData)
    MKEmitter.removeListener('reloadMenuView', this.reloadMenuView)
    MKEmitter.removeListener('resetActiveMenu', this.resetActiveMenu)
    MKEmitter.removeListener('getexceloutparam', this.getexceloutparam)
  }
  render() {
@@ -968,7 +966,6 @@
                      selectedData={selectedData}
                      ContainerId={this.state.ContainerId}
                      refreshdata={this.refreshbyaction}
                      getexceloutparam={this.getexceloutparam}
                    />
                  </div>
                  <div className="main-table-box">
@@ -1021,7 +1018,6 @@
                    loading={this.state.loading}
                    ContainerId={this.state.ContainerId}
                    refreshdata={this.refreshbyaction}
                    getexceloutparam={this.getexceloutparam}
                    handleTableId={this.handleTableId}
                  />
                </Col>
@@ -1034,7 +1030,6 @@
                    plot={item}
                    config={config}
                    data={this.state.data}
                    getexceloutparam={this.getexceloutparam}
                    loading={this.state.loading}
                  />
                </Col>
src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -515,7 +515,6 @@
                show={card.show}
                style={card.btnstyle}
                setting={cards.setting}
                // getexceloutparam={getexceloutparam}
                updateStatus={this.props.updateStatus}
              />
            </div>
src/tabviews/custom/components/card/data-card/index.jsx
@@ -360,7 +360,6 @@
            columns={config.columns}
            selectedData={selectedData}
            refreshdata={this.refreshbyaction}
            getexceloutparam={this.getexceloutparam}
          /> : null
        }
        <div className={`data-zoom ${config.wrap.cardType || ''} ${config.wrap.scale || ''}`}>
src/tabviews/custom/components/chart/antv-bar-line/index.jsx
@@ -1288,7 +1288,6 @@
                    btn={item}
                    show="icon"
                    setting={config.setting}
                    getexceloutparam={this.props.getexceloutparam}
                    updateStatus={() => {}}
                  />
                )
src/tabviews/custom/components/group/normal-group/index.jsx
@@ -2,7 +2,7 @@
import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import { is, fromJS } from 'immutable'
import { Col, Empty, notification } from 'antd'
import { Col, Empty, notification, Button } from 'antd'
import moment from 'moment'
import md5 from 'md5'
@@ -30,6 +30,7 @@
  state = {
    mainSearch: [],
    printing: false,
    data: null
  }
@@ -272,11 +273,84 @@
    })
  }
  print = () => {
    const { config } = this.props
    const { printing } = this.state
    if (printing) return
    this.setState({printing: true})
    let pageSize = ['A4', 'A3', 'A5'].includes(config.setting.pageSize) ? config.setting.pageSize : 'A4'
    let pageLayout = config.setting.pageLayout !== 'horizontal' ? 'vertical' : 'horizontal'
    let pageParam = {
      A4: {
        vertical: 980,
        horizontal: 1200,
      },
      A3: {
        vertical: 1200,
        horizontal: 1600,
      },
      A5: {
        vertical: 700,
        horizontal: 1000,
      }
    }
    let width = pageParam[pageSize][pageLayout]
    try {
      let jubuData =  document.getElementById(config.uuid).innerHTML
      let iframe = document.createElement('IFRAME')
      let linkList = document.getElementsByTagName('link')     // 获取父窗口link标签对象列表
      let styleList = document.getElementsByTagName('style')   // 获取父窗口style标签对象列表
      document.body.appendChild(iframe)
      let doc = iframe.contentWindow.document
      doc.open()
      doc.write(`<!DOCTYPE html><html lang="en"><head>`)
      for (let i = 0;i < linkList.length;i++) {
        if (linkList[i].type === 'text/css') {
          doc.write(`<LINK rel="stylesheet" type="text/css" href="${linkList[i].href}">`)
        }
      }
      doc.write(`<style>body{width: ${width}px!important;}*{border-style: solid;border-width: 0;}.print-button, .top-search{display: none!important;}</style>`)
      for (let i = 0;i < styleList.length;i++) {
        doc.write('<style>' + styleList[i].innerHTML + '</style>')
      }
      doc.write(`</head><body>`)
      doc.write(jubuData)
      doc.write(`</body></html>`)
      doc.close()
      setTimeout(() => {
        iframe.contentWindow.focus()
        iframe.contentWindow.print()
        document.body.removeChild(iframe)
        this.setState({printing: false})
      }, 500)
    } catch (e) {
      this.setState({printing: false})
      notification.warning({
        top: 92,
        message: '打印异常!',
        duration: 5
      })
    }
  }
  render() {
    const { config } = this.props
    const { printing } = this.state
    return (
      <div className="normal-group-wrap" id={config.uuid}>
      <div className="normal-group-wrap" id={config.uuid} style={config.style}>
        {config.setting && config.setting.print === 'true' ? <Button className="print-button" icon="printer" loading={printing} onClick={this.print}></Button> : null}
        {this.getComponents()}
      </div>
    )
src/tabviews/custom/components/group/normal-group/index.scss
@@ -1,3 +1,14 @@
.normal-group-wrap {
  .print-button, .print-button:hover, .print-button:focus, .print-button:active {
    position: absolute;
    right: 0px;
    top: 0px;
    z-index: 2;
    border: 0;
    background: transparent;
  }
}
.normal-group-wrap::after {
  content: ' ';
  display: block;
src/tabviews/custom/components/table/normal-table/index.jsx
@@ -410,15 +410,17 @@
  /**
   * @description 导出Excel时,获取页面搜索排序等参数
   */
  getexceloutparam = () => {
  getexceloutparam = (menuId, btnId) => {
    const { arr_field, config, orderBy, search, setting} = this.state
    return {
    if (config.uuid !== menuId) return
    MKEmitter.emit('execExcelout', config.uuid, btnId, {
      arr_field: arr_field,
      orderBy: orderBy || setting.order,
      search: search,
      menuName: config.name
    }
    })
  }
  reloadData = (menuId, id, btn) => {
@@ -487,6 +489,7 @@
  componentDidMount () {
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
    MKEmitter.addListener('getexceloutparam', this.getexceloutparam)
  }
  /**
@@ -498,13 +501,14 @@
    }
    MKEmitter.removeListener('reloadData', this.reloadData)
    MKEmitter.removeListener('resetSelectLine', this.resetParentParam)
    MKEmitter.removeListener('getexceloutparam', this.getexceloutparam)
  }
  render() {
    const { BID, setting, searchlist, actions, config, columns, selectedData } = this.state
    return (
      <div className="custom-normal-table">
      <div className="custom-normal-table" style={config.style}>
        <NormalHeader config={config}/>
        {searchlist && searchlist.length ?
          <MainSearch BID={BID} searchlist={searchlist} menuType={this.props.menuType} refreshdata={this.refreshbysearch}/> : null
@@ -517,9 +521,8 @@
          columns={config.columns}
          selectedData={selectedData}
          refreshdata={this.refreshbyaction}
          getexceloutparam={this.getexceloutparam}
        />
        <div className="main-table-box">
        <div className={'main-table-box ' + (!actions || actions.length === 0 ? 'no-action' : '')}>
          <MainTable
            setting={setting}
            columns={columns}
src/tabviews/custom/components/table/normal-table/index.scss
@@ -36,7 +36,7 @@
      position: absolute;
      right: 5px;
      top: -22px;
      z-index: 1;
      z-index: 2;
    }
    .custom-control {
      position: absolute;
@@ -51,4 +51,13 @@
      line-height: 150px!important;
    }
  }
  .no-action.main-table-box {
    .main-pickup {
      position: relative;
      right: 0px;
      top: 0px;
      z-index: 2;
      float: right;
    }
  }
}
src/tabviews/custom/index.jsx
@@ -253,6 +253,7 @@
          item.action = item.action.filter(cell => {
            cell.logLabel = item.name + '-' + cell.label
            cell.ContainerId = this.state.ContainerId
            cell.$menuId = item.uuid
            return permAction[cell.uuid]
          })
@@ -271,6 +272,7 @@
                cell.logLabel = item.name + '-' + cell.label
                cell.Ot = 'requiredSgl'
                cell.ContainerId = this.state.ContainerId
                cell.$menuId = item.uuid
              } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
                cell.innerHeight = 'auto'
              }
@@ -282,6 +284,7 @@
                cell.logLabel = item.name + '-' + cell.label
                cell.Ot = 'requiredSgl'
                cell.ContainerId = this.state.ContainerId
                cell.$menuId = item.uuid
              } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
                cell.innerHeight = 'auto'
              }
@@ -296,6 +299,7 @@
                cell.logLabel = item.name + '-' + cell.label
                cell.Ot = 'requiredSgl'
                cell.ContainerId = this.state.ContainerId
                cell.$menuId = item.uuid
              } else if (['text', 'number', 'link'].includes(cell.eleType) && !cell.height && _hasheight) {
                cell.innerHeight = 'auto'
              }
@@ -309,6 +313,8 @@
              cell.logLabel = item.name + '-' + cell.label
              cell.Ot = 'requiredSgl'
              cell.ContainerId = this.state.ContainerId
              cell.$menuId = item.uuid
              return permAction[cell.uuid]
            })
            return col.elements.length !== 0
@@ -318,6 +324,7 @@
        if (item.action && item.action.length > 0) {
          item.action = item.action.map(cell => {
            cell.logLabel = item.name + '-' + cell.label
            cell.$menuId = item.uuid
            return cell
          })
        }
src/tabviews/subtable/index.jsx
@@ -183,10 +183,6 @@
            item = {...item, ...userConfig.action[item.uuid]}
          }
          if (item.execMode) {
            item.OpenType = 'funcbutton'
          }
          if (item.OpenType === 'funcbutton' && item.funcType === 'print' && item.verify && item.printer) {
            item.verify.defaultPrinter = item.printer.defaultPrinter || ''
            if (item.verify.printerTypeList && item.printer.printerList) {
@@ -258,9 +254,7 @@
      config.action.forEach(item => {
        item.logLabel = Tab.label + '-' + item.label // 用于sPC_TableData_InUpDe记录操作按钮
        if (item.execMode) {
          item.OpenType = 'funcbutton'
        }
        item.$menuId = this.props.MenuID
        if (item.position === 'toolbar') {
          _actions.push(item)
@@ -675,21 +669,23 @@
  /**
   * @description 导出Excel时,获取页面搜索排序等参数
   */
  getexceloutparam = () => {
    const { Tab, mainSearch } = this.props
  getexceloutparam = (menuId, btnId) => {
    const { Tab, mainSearch, MenuID } = this.props
    const { arr_field, orderBy, search, setting} = this.state
    if (MenuID !== menuId) return
    let searches = search
    if (mainSearch && mainSearch.length > 0) { // 主表搜索条件
      searches = [...mainSearch, ...search]
    }
    return {
    MKEmitter.emit('execExcelout', MenuID, btnId, {
      arr_field: arr_field,
      orderBy: orderBy || setting.order,
      search: searches,
      menuName: Tab.label
    }
    })
  }
  /**
@@ -748,6 +744,7 @@
  componentDidMount () {
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('getexceloutparam', this.getexceloutparam)
  }
  /**
@@ -758,6 +755,7 @@
      return
    }
    MKEmitter.removeListener('reloadData', this.reloadData)
    MKEmitter.removeListener('getexceloutparam', this.getexceloutparam)
  }
  render() {
@@ -794,7 +792,6 @@
                      selectedData={selectedData}
                      refreshdata={this.refreshbyaction}
                      ContainerId={this.props.ContainerId}
                      getexceloutparam={this.getexceloutparam}
                    />
                  </div>
                  <div className="subtable-box">
@@ -840,7 +837,6 @@
                    tableId={this.props.Tab.uuid}
                    refreshdata={this.refreshbyaction}
                    handleTableId={this.handleTableId}
                    getexceloutparam={this.getexceloutparam}
                  />
                </Col>
              )
@@ -853,7 +849,6 @@
                    BID={this.props.BID}
                    Tab={this.props.Tab}
                    data={this.state.data}
                    getexceloutparam={this.getexceloutparam}
                    loading={this.state.loading}
                  />
                </Col>
src/tabviews/subtabtable/index.jsx
@@ -229,9 +229,7 @@
      config.action.forEach(item => {
        item.logLabel = Tab.label + '-' + item.label // 用于sPC_TableData_InUpDe记录操作按钮
        if (item.execMode) {
          item.OpenType = 'funcbutton'
        }
        item.$menuId = this.props.MenuID
        if (item.position === 'toolbar') {
          _actions.push(item)
@@ -526,21 +524,23 @@
  /**
   * @description 导出Excel时,获取页面搜索排序等参数
   */
  getexceloutparam = () => {
    const { Tab, mainSearch } = this.props
  getexceloutparam = (menuId, btnId) => {
    const { Tab, mainSearch, MenuID } = this.props
    const { arr_field, orderBy, search, setting} = this.state
    if (MenuID !== menuId) return
    let searches = search
    if (mainSearch && mainSearch.length > 0) { // 主表搜索条件
      searches = [...mainSearch, ...search]
    }
    return {
    MKEmitter.emit('execExcelout', MenuID, btnId, {
      arr_field: arr_field,
      orderBy: orderBy || setting.order,
      search: searches,
      menuName: Tab.label
    }
    })
  }
  /**
@@ -559,6 +559,10 @@
    return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
  }
  componentDidMount () {
    MKEmitter.addListener('getexceloutparam', this.getexceloutparam)
  }
  /**
   * @description 组件销毁,清除state更新
   */
@@ -566,6 +570,7 @@
    this.setState = () => {
      return
    }
    MKEmitter.removeListener('getexceloutparam', this.getexceloutparam)
  }
  render() {
@@ -602,7 +607,6 @@
                      selectedData={selectedData}
                      MenuID={this.props.SupMenuID}
                      refreshdata={this.refreshbyaction}
                      getexceloutparam={this.getexceloutparam}
                    />
                  </div>
                  <SubTable
src/tabviews/verupmanage/index.jsx
@@ -102,6 +102,8 @@
      setting: config.setting,
      searchlist: config.search,
      actions: config.action.map(item => {
        item.$menuId = this.props.MenuID
        if (buttonConfig[item.uuid]) {
          item = {...buttonConfig[item.uuid], ...item}
        }
src/tabviews/verupmanage/subtabtable/index.jsx
@@ -461,7 +461,6 @@
              MenuID={this.props.SupMenuID}
              refreshdata={this.refreshbyaction}
              ContainerId={this.props.ContainerId}
              getexceloutparam={this.getexceloutparam}
            />
          </div> : null
        }
src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -23,7 +23,6 @@
    btn: PropTypes.object,            // 按钮
    setting: PropTypes.any,           // 页面通用设置
    updateStatus: PropTypes.func,     // 按钮状态更新
    getexceloutparam: PropTypes.func, // 获取表格中参数
  }
  state = {
@@ -43,6 +42,7 @@
    if (position === 'toolbar') {
      MKEmitter.addListener('triggerBtnId', this.actionTrigger)
    }
    MKEmitter.addListener('execExcelout', this.triggerExcelout)
  }
  componentWillUnmount () {
@@ -50,6 +50,7 @@
      return
    }
    MKEmitter.removeListener('triggerBtnId', this.actionTrigger)
    MKEmitter.removeListener('execExcelout', this.triggerExcelout)
  }
  /**
@@ -109,15 +110,17 @@
      return
    }
    this.triggerExcelout()
    MKEmitter.emit('getexceloutparam', btn.$menuId, btn.uuid)
  }
  /**
   * @description Excel 导出
   */
  triggerExcelout = () => {
  triggerExcelout = (menuId, btnId, viewParam) => {
    const { btn } = this.props
    let viewParam = this.props.getexceloutparam()
    if (btn.$menuId !== menuId || btn.uuid !== btnId || !viewParam) return
    let name = `${viewParam.menuName}${moment().format('YYYYMMDDHHmmss')}.xlsx`
    let pageSize = 1000
src/tabviews/zshare/actionList/index.jsx
@@ -29,7 +29,6 @@
    setting: PropTypes.any,           // 页面通用设置
    ContainerId: PropTypes.any,       // tab页面ID,用于弹窗控制
    refreshdata: PropTypes.func,      // 执行完成后数据刷新
    getexceloutparam: PropTypes.func, // 获取excel导出数据
  }
  state = {
@@ -49,7 +48,7 @@
  }
  getButtonList = (actions) => {
    const { BID, BData, MenuID, Tab, columns, setting, ContainerId, selectedData, getexceloutparam } = this.props
    const { BID, BData, MenuID, Tab, columns, setting, ContainerId, selectedData } = this.props
    return actions.map(item => {
      if (['exec', 'prompt', 'pop'].includes(item.OpenType)) {
@@ -93,7 +92,6 @@
            btn={item}
            setting={setting}
            position="toolbar"
            getexceloutparam={getexceloutparam}
            updateStatus={this.updateStatus}
          />
        )
src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -1045,7 +1045,7 @@
            duration: 5
          })
          this.updateStatus('over')
        } else if (!_LongParam || (btn.OpenType === 'pop' && _LongParam.type !== 'Modal')) {
        } else if (!_LongParam || (btn.execMode === 'pop' && _LongParam.type !== 'Modal')) {
          notification.warning({
            top: 92,
            message: '未获取到按钮配置信息!',
src/tabviews/zshare/cardcomponent/index.jsx
@@ -522,7 +522,6 @@
    loading: PropTypes.bool,
    data: PropTypes.array,
    refreshdata: PropTypes.func,
    getexceloutparam: PropTypes.func,
    handleTableId: PropTypes.func
  }
@@ -779,8 +778,8 @@
                    key={action.uuid}
                    BID={BID}
                    Tab={Tab}
                    btn={action}
                    show="icon"
                    btn={action}
                    setting={config.setting}
                    updateStatus={this.updateStatus}
                  />
@@ -791,10 +790,9 @@
                    key={action.uuid}
                    BID={BID}
                    Tab={Tab}
                    btn={action}
                    show="icon"
                    btn={action}
                    setting={config.setting}
                    getexceloutparam={this.props.getexceloutparam}
                    updateStatus={this.updateStatus}
                  />
                )
src/tabviews/zshare/chartcomponent/index.jsx
@@ -22,7 +22,6 @@
    data: PropTypes.array,           // 图表传入数据
    loading: PropTypes.bool,         // 数据加载中
    config: PropTypes.object,        // 页面配置信息
    getexceloutparam: PropTypes.func // 获取excel导出参数
  }
  state = {
@@ -1092,7 +1091,6 @@
                    btn={item}
                    show="icon"
                    setting={config.setting}
                    getexceloutparam={this.props.getexceloutparam}
                    updateStatus={() => {}}
                  />
                )
src/templates/sharecomponent/actioncomponent/actionform/index.jsx
@@ -83,9 +83,7 @@
    let _tabTemplate = card.tabTemplate         // 按钮为标签页时,标签类型:三级菜单或表单标签页
    let _pageTemplate = card.pageTemplate       // 新页面类型
    if (card.execMode) {                        // 转换打印时打开方式
      _opentype = 'funcbutton'
    } else if (_opentype === 'outerpage') {
    if (_opentype === 'outerpage') {
      card.pageTemplate = 'custom'
      _opentype = 'innerpage'
    } else if (_opentype === 'blank') {
@@ -182,12 +180,11 @@
      }
    } else if (_opentype === 'funcbutton') {
      if (_funcType === 'print') {
        if (_intertype === 'outer') {
          _options.push('execMode', 'intertype', 'innerFunc', 'sysInterface', 'interface', 'outerFunc', 'callbackFunc', 'Ot', 'execSuccess', 'execError')
        } else if (_intertype === 'inner') {
          _options.push('execMode', 'intertype', 'innerFunc', 'Ot', 'execSuccess', 'execError')
        } else if (_intertype === 'system') {
          _options.push('execMode', 'intertype', 'Ot', 'execSuccess', 'execError')
        if (_intertype === 'outer') {
          _options.push('innerFunc', 'sysInterface', 'interface', 'outerFunc', 'callbackFunc')
        } else if (_intertype === 'inner') {
          _options.push('innerFunc')
        }
      }
    } else if (_opentype !== 'popview') { // 打开方式不是弹窗页面时
@@ -663,9 +660,6 @@
            values.createTab = true // 用于标记按钮复制时,是否复制原有标签
          } else if (values.OpenType === 'funcbutton') { // 转换打印时打开方式
            values.position = 'toolbar'
            if (values.funcType === 'print') {
              values.OpenType = values.execMode
            }
          } else if (['pop', 'prompt', 'exec'].includes(values.OpenType) && values.verify) {
            if (values.Ot === 'requiredOnce' && ['notRequired', 'requiredSgl', 'required'].includes(this.props.card.Ot)) {
              values.verify.uniques = []
src/utils/utils-update.js
@@ -58,6 +58,7 @@
    }
    if (config.version < '1.1') {
      config.version = '1.1'
      if (config.setting.interType === 'inner' && !config.setting.innerFunc) {
        config.setting.interType = 'system'
      }
@@ -70,7 +71,17 @@
      })
    }
    config.version = '1.1'
    if (config.version < '1.2') {
      config.version = '1.2'
      // 兼容功能按钮
      config.action = config.action.map(item => {
        if (item.execMode) {
          item.OpenType = 'funcbutton'
        }
        return item
      })
    }
    config.Template = 'CommonTable'
    return config
@@ -127,6 +138,7 @@
    }
    if (config.version < '1.1') {
      config.version = '1.1'
      if (config.setting.interType === 'inner' && !config.setting.innerFunc) {
        config.setting.interType = 'system'
      }
@@ -139,7 +151,17 @@
      })
    }
    config.version = '1.1'
    if (config.version < '1.2') {
      config.version = '1.2'
      // 兼容功能按钮
      config.action = config.action.map(item => {
        if (item.execMode) {
          item.OpenType = 'funcbutton'
        }
        return item
      })
    }
    config.Template = 'SubTable'
    return config
src/utils/utils.js
@@ -48,6 +48,7 @@
    for (let i = 0; i < 6; i++) {
      name.push(_options.substr(Math.floor(Math.random() * 26), 1))
    }
    name.splice(3, 0, new Date().getTime())
    return name.join('')
  }