king
2020-06-03 d3172b799eccdf7fa69050a0f2d596309bd78059
2020-06-03
17个文件已修改
392 ■■■■ 已修改文件
src/tabviews/commontable/index.jsx 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/subtable/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/subtabtable/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/treepage/index.jsx 185 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/treepage/index.scss 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/index.jsx 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/headerconfig/index.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/menuconfig/editsecmenu/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/menuconfig/editsecmenu/index.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/menuconfig/editthdmenu/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/menuconfig/editthdmenu/index.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/tabscomponent/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/tabscomponent/tabform/index.jsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/formconfig.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/customform/index.jsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/customscript/index.jsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/commontable/index.jsx
@@ -608,12 +608,6 @@
      param = this.getDefaultParam()
    }
    this.handleTableId('mainTable', '', '')
    if (!param) { // 未获取参数时,不发请求
      return
    }
    let result = await Api.genericInterface(param)
    if (result.status) {
      this.setState({
@@ -626,7 +620,8 @@
        pickup: false,
        BIDs: {
          ...BIDs,
          mainTable: ''
          mainTable: '',
          mainTabledata: ''
        }
      })
    } else {
src/tabviews/subtable/index.jsx
@@ -12,7 +12,6 @@
import options from '@/store/options.js'
import { modifyTabview } from '@/store/action'
import ChartComponent from '@/tabviews/zshare/chartcomponent'
import SubTable from '@/tabviews/zshare/normalTable'
import SubSearch from '@/tabviews/zshare/topSearch'
import asyncComponent from '@/utils/asyncComponent'
@@ -24,6 +23,7 @@
const { TabPane } = Tabs
const SubAction = asyncComponent(() => import('@/tabviews/zshare/actionList'))
const CardComponent = asyncComponent(() => import('@/tabviews/zshare/cardcomponent'))
const ChartComponent = asyncSpinComponent(() => import('@/tabviews/zshare/chartcomponent'))
const SubTabTable = asyncSpinComponent(() => import('@/tabviews/subtabtable'))
class SubTabViewTable extends Component {
@@ -341,8 +341,7 @@
        search: Utils.initMainSearch(config.search) // 搜索条件初始化(含有时间格式,需要转化)
      }, () => {
        this.improveSearch()
        if (config.setting.onload !== 'false' && (!Tab.supMenu || BID) && valid) { // 初始化可加载
        if (config.setting.onload !== 'false' && (!Tab.supMenu || BID || Tab.isTreeNode) && valid) { // 初始化可加载
          this.loadmaindata()
        }
      })
@@ -801,6 +800,7 @@
      this.reloadtable()
      this.props.handleMainTable('equaltab')
    }else if (btn.execSuccess === 'mainline' && type === 'success') {
      this.reloadtable()
      this.props.handleMainTable('mainline')
    }
  }
src/tabviews/subtabtable/index.jsx
@@ -11,8 +11,8 @@
import Utils from '@/utils/utils.js'
import options from '@/store/options.js'
import ChartComponent from '@/tabviews/zshare/chartcomponent'
import asyncComponent from '@/utils/asyncComponent'
import asyncSpinComponent from '@/utils/asyncSpinComponent'
import SubTable from '@/tabviews/zshare/normalTable'
import SubSearch from '@/tabviews/zshare/topSearch'
import NotFount from '@/components/404'
@@ -22,6 +22,7 @@
const { TabPane } = Tabs
const SubAction = asyncComponent(() => import('@/tabviews/zshare/actionList'))
const CardComponent = asyncComponent(() => import('@/tabviews/zshare/cardcomponent'))
const ChartComponent = asyncSpinComponent(() => import('@/tabviews/zshare/chartcomponent'))
class SubTabModalTable extends Component {
  static propTpyes = {
src/tabviews/treepage/index.jsx
@@ -53,6 +53,8 @@
    settingVisible: false,// 自定义设置模态框
    triggerBtn: null,     // 点击表格中或快捷键触发的按钮
    tabActive: null,      // 标签页展开控制
    expandedKeys: [],     // 展开的树节点
    selectedKeys: []      // 选中的树节点
  }
  /**
@@ -110,9 +112,13 @@
      // 权限过滤
      config.tabgroups.forEach(group => {
        group.sublist = group.sublist.filter(tab => permAction[tab.linkTab])
        group.sublist = group.sublist.filter(tab => {
          if (tab.supMenu === 'mainTable') {
            tab.isTreeNode = true
          }
          return permAction[tab.linkTab]}
        )
      })
      config.tabgroups = config.tabgroups.filter(group => group.sublist.length > 0)
      if (_curUserConfig) {
        config.setting = {...config.setting, ..._curUserConfig.setting}
@@ -236,7 +242,7 @@
   * @description 主表数据加载
   */ 
  async loadmaindata () {
    const { setting, BIDs } = this.state
    const { setting, searchKey } = this.state
    let param = ''
    this.setState({
@@ -247,12 +253,6 @@
      param = this.getCustomParam()
    } else {
      param = this.getDefaultParam()
    }
    this.handleTableId('mainTable', '', '')
    if (!param) { // 未获取参数时,不发请求
      return
    }
    let result = await Api.genericInterface(param)
@@ -281,15 +281,19 @@
        }
      })
      let _treedata = this.getTree(parentNodes, _options)
      let _treeNodes = []
      if (!searchKey) {
        _treeNodes = fromJS(_treedata).toJS()
      } else {
        _treeNodes = this.getFilterTree(fromJS(_treedata).toJS(), searchKey.toLowerCase())
      }
      this.setState({
        treedata: _treedata,
        treeNodes: fromJS(_treedata).toJS(),
        loading: false,
        BIDs: {
          ...BIDs,
          mainTable: ''
        }
        treeNodes: _treeNodes,
        loading: false
      })
    } else {
      this.setState({
@@ -338,7 +342,7 @@
    return nodes.map(item => {
      if (item.children) {
        return (
          <TreeNode icon={<Icon type="folder-open" />} title={item.title} key={item.key} dataRef={item}>
          <TreeNode icon={<span><Icon type="folder-open" /><Icon type="folder" /></span>} title={item.title} key={item.key} dataRef={item}>
            {this.renderTreeNodes(item.children)}
          </TreeNode>
        )
@@ -347,35 +351,86 @@
    })
  }
  selectTreeNode = (selectedKeys, {selected, node}) => {
    const { config } = this.state
  treeFilter = (value) => {
    const { treedata } = this.state
    let selectId = selectedKeys[0]
    let _data = fromJS(node.props.dataRef).toJS()
    delete _data.children
    let _treeNodes = []
    let _tabgroups = []
    let _tabActive = {}
    config.tabgroups.forEach(group => {
      let _group = fromJS(group).toJS()
      _group.sublist = _group.sublist.filter(tab => !tab.level || (selected && tab.level === _data.level))
      if (_group.sublist.length > 0) {
        _tabActive[_group.uuid] = _group.sublist[0].uuid
        _tabgroups.push(_group)
      }
    })
    if (!value) {
      _treeNodes = fromJS(treedata).toJS()
    } else {
      _treeNodes = this.getFilterTree(fromJS(treedata).toJS(), value.toLowerCase())
    }
    this.setState({
      tabgroups: _tabgroups,
      tabActive: _tabActive
      searchKey: value,
      treeNodes: _treeNodes
    })
  }
  /**
   * @description 获取结构树信息
   */
  getFilterTree = (parents, searchKey) => {
    return parents.filter(node => {
      if (!node.children) {
        return (node.title.toLowerCase().indexOf(searchKey) >= 0 || node.key.toLowerCase().indexOf(searchKey) >= 0)
      } else {
        if (node.title.toLowerCase().indexOf(searchKey) >= 0 || node.key.toLowerCase().indexOf(searchKey) >= 0) {
          return true
        }
        node.children = this.getFilterTree(node.children, searchKey)
        if (node.children.length === 0) {
          return false
        } else {
          return true
        }
      }
    })
  }
  selectTreeNode = (selectedKeys, {selected, node}) => {
    const { config } = this.state
    let _expandedKeys = fromJS(this.state.expandedKeys).toJS()
    let _data = fromJS(node.props.dataRef).toJS()
    if (_expandedKeys.indexOf(_data.key) >= 0) {
      _expandedKeys = _expandedKeys.filter(key => key !== _data.key)
    } else {
      if (_data.children) {
        _expandedKeys.push(_data.key)
        _expandedKeys = Array.from(new Set(_expandedKeys))
      }
    }
    if (selected) {
      this.handleTableId('mainTable', selectId, _data)
      let _tabgroups = []
      let _tabActive = {}
      config.tabgroups.forEach(group => {
        let _group = fromJS(group).toJS()
        _group.sublist = _group.sublist.filter(tab => (!tab.level && tab.level !== 0) || tab.level === _data.level)
        if (_group.sublist.length > 0) {
          _tabActive[_group.uuid] = _group.sublist[0].uuid
          _tabgroups.push(_group)
        }
      })
      delete _data.children
      this.handleTableId('mainTable', _data.key, _data)
      this.setState({
        tabgroups: _tabgroups,
        tabActive: _tabActive,
        expandedKeys: _expandedKeys,
        selectedKeys: [_data.key]
      })
    } else {
      this.handleTableId('mainTable', '', '')
      this.setState({
        expandedKeys: _expandedKeys,
        selectedKeys: [_data.key]
      })
    }
  }
@@ -481,28 +536,17 @@
    this.setState({
      loadingview: true,
      viewlost: false,
      lostmsg: '',
      config: {},
      userConfig: null,
      userParam: null,
      setting: null,
      treedata: null,
      treeNodes: null,
      loading: false,
      BIDs: {},
      expandedKeys: [],
      selectedKeys: []
    }, () => {
      this.loadconfig()
    })
  }
  /**
   * @description 表格刷新
   */
  reloadtable = () => {
    this.setState({
      pageIndex: 1
    }, () => {
      this.loadmaindata()
    })
  }
@@ -511,9 +555,9 @@
   */
  handleMainTable = (type, tab) => {
    if (type === 'maingrid' && tab.supMenu === 'mainTable') {
      this.reloadtable()
      this.loadmaindata()
    } else if (type === 'mainline' && tab.supMenu === 'mainTable') {
      this.reloadtable()
      this.loadmaindata()
    } else if ((type === 'maingrid' || type === 'mainline') && tab.supMenu) {
      this.setState({
        refreshtabs: [type, tab.supMenu]
@@ -733,8 +777,37 @@
    document.onkeydown = () => {}
  }
  changeExpandedKeys = (expandedKeys) => {
    this.setState({
      expandedKeys: expandedKeys
    })
  }
  // 右键展开节点下的全部分支
  changeExpandedAllKeys = ({event, node}) => {
    const { expandedKeys } = this.state
    let _node = node.props.dataRef
    event.stopPropagation()
    let keys = []
    this.getExpandKeys(_node, keys)
    this.setState({
      expandedKeys: Array.from(new Set([...keys, ...expandedKeys])),
    })
  }
  getExpandKeys = (node, keys) => {
    if (node.children) {
      keys.push(node.key)
      node.children.forEach(_node => {
        this.getExpandKeys(_node, keys)
      })
    }
  }
  render() {
    const { setting, loadingview, viewlost, config, triggerBtn, userConfig, tabActive, tabgroups, treeNodes, treedata } = this.state
    const { setting, loadingview, viewlost, config, triggerBtn, userConfig, tabActive, tabgroups, treeNodes, treedata, expandedKeys, selectedKeys } = this.state
    return (
      <div className="tree-page" id={this.state.ContainerId}>
@@ -746,7 +819,7 @@
              title={
                <span className="tree-title">
                  <span className="title">{setting.title}</span>
                  {setting.searchable !== 'false' ? <Search onSearch={this.treeFilter} /> : null}
                  {setting.searchable !== 'false' ? <Search allowClear onSearch={this.treeFilter} /> : null}
                </span>
              }
              bordered={false}
@@ -755,6 +828,10 @@
                <Tree
                  blockNode
                  onSelect={this.selectTreeNode}
                  expandedKeys={expandedKeys}
                  selectedKeys={selectedKeys}
                  onRightClick={this.changeExpandedAllKeys}
                  onExpand={this.changeExpandedKeys}
                  showIcon={setting.showIcon === 'true'}
                  showLine={setting.showLine === 'true'}
                >
src/tabviews/treepage/index.scss
@@ -27,6 +27,8 @@
  .tree-card {
    min-height: calc(100vh - 125px);
    box-shadow: 0px 0px 2px #dddddd;
    // cursor: url(http://gtms02.alicdn.com/tps/i2/T1_PMSFLBaXXcu5FDa-20-20.png) 10 10,pointer!important;
    .ant-card-head {
      padding: 0 10px;
      .ant-card-head-title {
@@ -36,23 +38,32 @@
          width: 100%;
          color: #1890ff;
          .ant-input-affix-wrapper {
            width: calc(100% - 140px);
            display: inline-block;
            width: 62%;
            margin-top: 0px;
            float: right;
            height: 28px;
            text-align: right;
            vertical-align: top;
            .ant-input {
              max-width: 130px;
              width: 100%;
              border-radius: 20px;
              height: 30px;
              height: 28px;
              text-align: left;
            }
            .ant-input-suffix {
              margin-top: 3px;
            .ant-input-clear-icon {
              display: none;
            }
          }
          .ant-input-affix-wrapper:hover {
            .ant-input-clear-icon {
              display: inline-block;
            }
          }
          .title {
            width: 38%;
            display: inline-block;
            max-width: 50%;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
@@ -71,6 +82,13 @@
        min-height: calc(100vh - 180px);
        overflow-x: auto;
        padding-bottom: 20px;
        .ant-tree-node-content-wrapper-close > span > span > .anticon-folder-open {
          display: none;
        }
        .ant-tree-node-content-wrapper-open > span > span > .anticon-folder {
          display: none;
        }
      }
      .tree-box::-webkit-scrollbar {
        height: 10px;
src/tabviews/zshare/actionList/index.jsx
@@ -1143,7 +1143,16 @@
            }
          } else if (btn.sql) {
            param.ID = primaryId
            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, '', param, data[0], logcolumns, this.props.Tab)) // 数据源
            param.LText = Utils.getSysDefaultSql(btn, setting, '', param, data[0], logcolumns, this.props.Tab) // 数据源
            if (this.props.dataManager) { // 数据权限
              param.LText = param.LText.replace(/\$@/ig, '/*')
              param.LText = param.LText.replace(/@\$/ig, '*/')
            } else {
              param.LText = param.LText.replace(/@\$|\$@/ig, '')
            }
            param.LText = Utils.formatOptions(param.LText)
            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
          }
@@ -1170,12 +1179,30 @@
            }
            param.ID = primaryId || Utils.getguid()
            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns, this.props.Tab)) // 数据源
            param.LText = Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns, this.props.Tab) // 数据源
            if (this.props.dataManager) { // 数据权限
              param.LText = param.LText.replace(/\$@/ig, '/*')
              param.LText = param.LText.replace(/@\$/ig, '*/')
            } else {
              param.LText = param.LText.replace(/@\$|\$@/ig, '')
            }
            param.LText = Utils.formatOptions(param.LText)
            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
          } else if (btn.sql) {
            param.ID = primaryId
            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns, this.props.Tab)) // 数据源
            param.LText = Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns, this.props.Tab) // 数据源
            if (this.props.dataManager) { // 数据权限
              param.LText = param.LText.replace(/\$@/ig, '/*')
              param.LText = param.LText.replace(/@\$/ig, '*/')
            } else {
              param.LText = param.LText.replace(/@\$|\$@/ig, '')
            }
            param.LText = Utils.formatOptions(param.LText)
            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
          }
@@ -1218,7 +1245,16 @@
              }
            } else if (btn.sql) {
              param.ID = primaryId
              param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, '', param, cell, logcolumns, this.props.Tab)) // 数据源
              param.LText = Utils.getSysDefaultSql(btn, setting, '', param, cell, logcolumns, this.props.Tab) // 数据源
              if (this.props.dataManager) { // 数据权限
                param.LText = param.LText.replace(/\$@/ig, '/*')
                param.LText = param.LText.replace(/@\$/ig, '*/')
              } else {
                param.LText = param.LText.replace(/@\$|\$@/ig, '')
              }
              param.LText = Utils.formatOptions(param.LText)
              param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
              param.secretkey = Utils.encrypt(param.LText, param.timestamp)
            }
@@ -1244,12 +1280,30 @@
              }
            } else if (btn.sql && btn.sqlType === 'insert') { // 系统函数添加时,生成uuid
              param.ID = _formPrimaryId || Utils.getguid()
              param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, cell, logcolumns, this.props.Tab)) // 数据源
              param.LText = Utils.getSysDefaultSql(btn, setting, formdata, param, cell, logcolumns, this.props.Tab) // 数据源
              if (this.props.dataManager) { // 数据权限
                param.LText = param.LText.replace(/\$@/ig, '/*')
                param.LText = param.LText.replace(/@\$/ig, '*/')
              } else {
                param.LText = param.LText.replace(/@\$|\$@/ig, '')
              }
              param.LText = Utils.formatOptions(param.LText)
              param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
              param.secretkey = Utils.encrypt(param.LText, param.timestamp)
            } else if (btn.sql) {
              param.ID = primaryId
              param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, cell, logcolumns, this.props.Tab)) // 数据源
              param.LText = Utils.getSysDefaultSql(btn, setting, formdata, param, cell, logcolumns, this.props.Tab) // 数据源
              if (this.props.dataManager) { // 数据权限
                param.LText = param.LText.replace(/\$@/ig, '/*')
                param.LText = param.LText.replace(/@\$/ig, '*/')
              } else {
                param.LText = param.LText.replace(/@\$|\$@/ig, '')
              }
              param.LText = Utils.formatOptions(param.LText)
              param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
              param.secretkey = Utils.encrypt(param.LText, param.timestamp)
            }
@@ -1868,6 +1922,13 @@
      param.BID = this.props.BID
    }
    if (this.props.dataManager) { // 数据权限
      result.sql = result.sql.replace(/\$@/ig, '/*')
      result.sql = result.sql.replace(/@\$/ig, '*/')
    } else {
      result.sql = result.sql.replace(/@\$|\$@/ig, '')
    }
    param.LText = Utils.formatOptions(result.sql)
    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
@@ -2424,9 +2485,23 @@
        param.custom_script = param.custom_script.replace(item.reg, item.value)
      })
      if (this.props.dataManager) { // 数据权限
        param.custom_script = param.custom_script.replace(/\$@/ig, '/*')
        param.custom_script = param.custom_script.replace(/@\$/ig, '*/')
      } else {
        param.custom_script = param.custom_script.replace(/@\$|\$@/ig, '')
      }
      param.custom_script = Utils.formatOptions(param.custom_script)
    }
    if (this.props.dataManager) { // 数据权限
      LText = LText.replace(/\$@/ig, '/*')
      LText = LText.replace(/@\$/ig, '*/')
    } else {
      LText = LText.replace(/@\$|\$@/ig, '')
    }
    param.LText = Utils.formatOptions(LText)
    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
src/templates/headerconfig/index.jsx
@@ -315,19 +315,19 @@
    return (
      <div className="header-edit-box">
        <div className="mask">
          <div className="tipcard card1" style={{backgroundImage: card1}}>
          <div className="tipcard card1" style={{backgroundImage: 'url(' + card1 + ')'}}>
            拖动一级菜单可调整顺序,顺序调整后,请点击确定按钮保存。
          </div>
          <div className="tipcard card2" style={{backgroundImage: card2}}>
          <div className="tipcard card2" style={{backgroundImage: 'url(' + card2 + ')'}}>
            鼠标经过菜单时会显示编辑图标,点击编辑可修改和删除菜单。
          </div>
          <div className="tipcard card3" style={{backgroundImage: card3}}>
          <div className="tipcard card3" style={{backgroundImage: 'url(' + card3 + ')'}}>
            点击解除冻结按钮,可还原已删除的一级菜单。
          </div>
          <div className="tipcard card4" style={{backgroundImage: card4}}>
          <div className="tipcard card4" style={{backgroundImage: 'url(' + card4 + ')'}}>
            点击添加图标,可新增一级菜单。
          </div>
          <div className="tipcard card5" style={{backgroundImage: card5}}>
          <div className="tipcard card5" style={{backgroundImage: 'url(' + card5 + ')'}}>
            <p>编辑状态中,菜单之外区域会锁定,查看系统数据请点击。</p>
            <div>
              <a target="blank" href="#/main" >新页面</a>
src/templates/menuconfig/editsecmenu/index.jsx
@@ -14,6 +14,12 @@
import enUS from '@/locales/en-US/header.js'
import './index.scss'
import card1 from '@/assets/img/card-bg2.jpg'
import card2 from '@/assets/img/card-bg5.jpg'
import card3 from '@/assets/img/card-bg8.jpg'
import card4 from '@/assets/img/card-bg7.jpg'
import card5 from '@/assets/img/card-bg6.jpg'
const { confirm } = Modal
class EditMenu extends Component {
@@ -379,19 +385,19 @@
    return (
      <div className="second-edit-box">
        <div className="mask">
          <div className="tipcard card1">
          <div className="tipcard card1" style={{backgroundImage: 'url(' + card1 + ')'}}>
            拖动二级菜单可调整顺序,顺序调整后,请点击确定按钮保存。
          </div>
          <div className="tipcard card2">
          <div className="tipcard card2" style={{backgroundImage: 'url(' + card2 + ')'}}>
            点击编辑图标可修改菜单属性,点击删除图标可删除菜单。
          </div>
          <div className="tipcard card3">
          <div className="tipcard card3" style={{backgroundImage: 'url(' + card3 + ')'}}>
            点击解除冻结按钮,可还原已删除的二级菜单。
          </div>
          <div className="tipcard card4">
          <div className="tipcard card4" style={{backgroundImage: 'url(' + card4 + ')'}}>
            点击添加图标,可新增二级菜单。
          </div>
          <div className="tipcard card5">
          <div className="tipcard card5" style={{backgroundImage: 'url(' + card5 + ')'}}>
            <p>编辑状态中,菜单之外区域会锁定,查看系统数据请点击。</p>
            <div>
              <a target="blank" href="#/main" >新页面</a>
src/templates/menuconfig/editsecmenu/index.scss
@@ -19,7 +19,6 @@
      top: 20vh;
      width: 230px;
      min-height: 100px;
      background-image: url('../../../assets/img/card-bg2.jpg');
      color: #000000;
      font-style: oblique;
    }
@@ -28,7 +27,6 @@
      top: 20vh;
      width: 230px;
      min-height: 100px;
      background-image: url('../../../assets/img/card-bg5.jpg');
      color: #000000;
      padding: 20px 30px;
      font-style: oblique;
@@ -38,7 +36,6 @@
      top: 50vh;
      width: 230px;
      min-height: 140px;
      background-image: url('../../../assets/img/card-bg8.jpg');
      color: #000000;
      padding: 20px 30px;
      font-style: oblique;
@@ -48,7 +45,6 @@
      top: 50vh;
      width: 230px;
      min-height: 140px;
      background-image: url('../../../assets/img/card-bg7.jpg');
      color: #000000;
      padding: 20px 30px;
      font-style: oblique;
@@ -58,7 +54,6 @@
      top: 20vh;
      width: 130px;
      min-height: 240px;
      background-image: url('../../../assets/img/card-bg6.jpg');
      color: #000000;
      padding: 40px 15px 10px;
      p {
src/templates/menuconfig/editthdmenu/index.jsx
@@ -20,6 +20,12 @@
import asyncLoadComponent from '@/utils/asyncLoadComponent'
import './index.scss'
import card1 from '@/assets/img/card-bg2.jpg'
import card2 from '@/assets/img/card-bg5.jpg'
import card3 from '@/assets/img/card-bg8.jpg'
import card4 from '@/assets/img/card-bg7.jpg'
import card5 from '@/assets/img/card-bg6.jpg'
const ComTableConfig = asyncLoadComponent(() => import('@/templates/comtableconfig'))
const TreePageConfig = asyncLoadComponent(() => import('@/templates/treepageconfig'))
const FormTabConfig = asyncLoadComponent(() => import('@/templates/formtabconfig'))
@@ -744,19 +750,19 @@
      <div className="third-edit-box">
        {!this.state.tabview ?
          <div className="mask">
            <div className="tipcard card1">
            <div className="tipcard card1" style={{backgroundImage: 'url(' + card1 + ')'}}>
              拖动三级菜单可调整顺序,顺序调整后,请点击确定按钮保存。
            </div>
            <div className="tipcard card2">
            <div className="tipcard card2" style={{backgroundImage: 'url(' + card2 + ')'}}>
              点击编辑图标会根据菜单模板,进入相应的模板编辑页面,点击删除图标可删除菜单。
            </div>
            <div className="tipcard card3">
            <div className="tipcard card3" style={{backgroundImage: 'url(' + card3 + ')'}}>
              点击解除冻结按钮,可还原已删除的三级菜单。
            </div>
            <div className="tipcard card4">
            <div className="tipcard card4" style={{backgroundImage: 'url(' + card4 + ')'}}>
              点击添加图标,会显示系统模板和已使用模板,选择已使用模板时,会复制已添加菜单的配置信息。
            </div>
            <div className="tipcard card5">
            <div className="tipcard card5" style={{backgroundImage: 'url(' + card5 + ')'}}>
              <p>编辑状态中,菜单之外区域会锁定,查看系统数据请点击。</p>
              <div>
                <a target="blank" href="#/main" >新页面</a>
src/templates/menuconfig/editthdmenu/index.scss
@@ -19,7 +19,6 @@
      top: 20vh;
      width: 250px;
      min-height: 100px;
      background-image: url('../../../assets/img/card-bg2.jpg');
      color: #000000;
      font-style: oblique;
    }
@@ -28,7 +27,6 @@
      top: 20vh;
      width: 250px;
      min-height: 100px;
      background-image: url('../../../assets/img/card-bg5.jpg');
      color: #000000;
      padding: 20px 30px;
      font-style: oblique;
@@ -38,7 +36,6 @@
      top: 50vh;
      width: 250px;
      min-height: 150px;
      background-image: url('../../../assets/img/card-bg8.jpg');
      color: #000000;
      padding: 20px 30px;
      font-style: oblique;
@@ -48,7 +45,6 @@
      top: 50vh;
      width: 250px;
      min-height: 150px;
      background-image: url('../../../assets/img/card-bg7.jpg');
      color: #000000;
      padding: 20px 30px;
      font-style: oblique;
@@ -58,7 +54,6 @@
      top: 20vh;
      width: 130px;
      min-height: 240px;
      background-image: url('../../../assets/img/card-bg6.jpg');
      color: #000000;
      padding: 40px 15px 10px;
      p {
src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
@@ -125,6 +125,9 @@
          func: 's_debug_sql',
          LText: this.state.verifySql + _initsql + values.sql + tail
        }
        param.LText = param.LText.replace(/@\$|\$@/ig, '')
        param.LText = Utils.formatOptions(param.LText)
        param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
        param.secretkey = Utils.encrypt(param.LText, param.timestamp)
src/templates/sharecomponent/tabscomponent/index.jsx
@@ -101,7 +101,7 @@
      if (group.uuid === _group.uuid) {
        isuptab = false
        group.sublist.forEach(tab => { // 可关联的同级标签
          if (tab.level) {
          if (tab.level || tab.level === 0) {
            levels[tab.uuid] = tab.level
          }
@@ -112,7 +112,7 @@
        })
      } else if (isuptab) {
        group.sublist.forEach(tab => {
          if (tab.level) {
          if (tab.level || tab.level === 0) {
            levels[tab.uuid] = tab.level
          }
src/templates/sharecomponent/tabscomponent/tabform/index.jsx
@@ -270,6 +270,9 @@
          if (!values.linkTab) { // 没有关联标签(新建时),创建新标签Id
            values.linkTab = Utils.getuuid()
          }
          if (values.level === undefined) {
            values.level = ''
          }
          resolve(values)
        } else {
src/templates/zshare/formconfig.jsx
@@ -2439,7 +2439,7 @@
      label: '显示级别',
      tooltip: '标签显示控制,选择指定级别时显示标签,级别为空时始终显示。',
      initVal: card.level,
      min: 1,
      min: 0,
      max: 10,
      required: false,
      forbid: type !== 'TreePage',
src/templates/zshare/verifycard/customform/index.jsx
@@ -91,6 +91,9 @@
          LText: this.props.initsql + values.sql
        }
        // 数据权限
        param.LText = param.LText.replace(/@\$|\$@/ig, '')
        param.LText = Utils.formatOptions(param.LText)
        param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
        param.secretkey = Utils.encrypt(param.LText, param.timestamp)
src/templates/zshare/verifycard/customscript/index.jsx
@@ -103,6 +103,9 @@
          LText: this.props.initsql + _initsql + values.sql + tail
        }
        // 数据权限
        param.LText = param.LText.replace(/@\$|\$@/ig, '')
        param.LText = Utils.formatOptions(param.LText)
        param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
        param.secretkey = Utils.encrypt(param.LText, param.timestamp)