king
2022-09-13 b8cde0c39d7b6d58ceff3adf6dea3cb3118ea602
2022-09-13
69个文件已修改
1个文件已添加
3324 ■■■■ 已修改文件
package-lock.json 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/options.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/design.scss 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/main.scss 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/index.scss 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-bar/chartcompile/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-bar/chartcompile/index.scss 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-dashboard/chartcompile/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-dashboard/chartcompile/index.scss 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-pie/chartcompile/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-pie/chartcompile/index.scss 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-scatter/chartcompile/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-scatter/chartcompile/index.scss 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/chart-custom/chartcompile/index.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/chart-custom/chartcompile/index.scss 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/form/formaction/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/index.scss 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/base-table/index.jsx 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/edit-table/columns/index.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/edit-table/columns/index.scss 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/columns/index.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/columns/index.scss 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/columnform/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/index.jsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/index.scss 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/stylecontroller/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/components/formdragelement/card.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.jsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/printbutton/index.jsx 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkNumberInput/index.jsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/formtabconfig/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/index.scss 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelout/index.scss 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/searchcomponent/settingform/index.jsx 180 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcalcomponent/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcalcomponent/index.scss 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx 294 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.scss 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/index.jsx 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/index.scss 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx 1224 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/datasource/index.scss 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/index.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/treesettingcomponent/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/treesettingcomponent/index.scss 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx 622 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.scss 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/customscript/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/index.jsx 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/index.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basedesign/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/design/sidemenu/thdmenuplus/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/design/sidemenu/thdmenuplus/index.scss 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/menudesign/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pcdesign/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/popdesign/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tabledesign/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json
@@ -5404,9 +5404,9 @@
      }
    },
    "caniuse-lite": {
      "version": "1.0.30001319",
      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz",
      "integrity": "sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw=="
      "version": "1.0.30001399",
      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz",
      "integrity": "sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA=="
    },
    "capture-exit": {
      "version": "2.0.0",
public/options.json
@@ -14,6 +14,7 @@
  "licenseKey": "",
  "probation": "",
  "keepPassword": "true",
  "platforms": ["H5", "wechat", "android", "ios", "wxMiniProgram"],
  "host": "https://css-test.positecgroup.com",
  "service": ""
}
src/assets/css/design.scss
New file
@@ -0,0 +1,92 @@
.ant-modal-wrap.mk-pop-modal {
  .ant-modal {
    top: 50px;
  }
  .ant-modal-body {
    padding: 0;
    .mk-com-name {
      position: absolute;
      top: 38px;
      left: 10px;
      color: rgba(0, 0, 0, 0.85);
      font-size: 15px;
    }
    .ant-tabs {
      .ant-tabs-nav-wrap {
        text-align: center;
      }
      .ant-tabs-bar {
        padding-top: 15px;
        .ant-tabs-nav-container {
          font-size: 15px;
        }
      }
      .ant-tabs-content {
        min-height: 50vh;
        max-height: calc(100vh - 210px);
        .ant-tabs-tabpane {
          position: relative;
          overflow-x: hidden;
          overflow-y: auto;
          padding: 0 24px 24px;
        }
        .ant-tabs-tabpane::-webkit-scrollbar {
          width: 7px;
        }
        .ant-tabs-tabpane::-webkit-scrollbar-thumb {
          border-radius: 5px;
          box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
          background: rgba(0, 0, 0, 0.13);
        }
        .ant-tabs-tabpane::-webkit-scrollbar-track {
          box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
          border-radius: 3px;
          border: 1px solid rgba(0, 0, 0, 0.07);
          background: rgba(0, 0, 0, 0);
        }
      }
    }
  }
}
.ant-modal {
  .ant-radio-group {
    white-space: nowrap;
    .ant-radio-wrapper {
      margin-right: 4px;
    }
  }
}
// 通行宽度
.mk-through-line2 {
  .ant-form-item-label {
    width: 16.5%;
  }
  .ant-form-item-control-wrapper {
    width: 83.5%;
  }
  .CodeMirror {
    height: 150px;
  }
}
.mk-through-line3 {
  .ant-form-item-label {
    width: 10.6%;
  }
  .ant-form-item-control-wrapper {
    width: 89.4%;
  }
  .CodeMirror {
    height: 200px;
  }
}
.mk-color-move {
  .color-sketch-block {
    position: relative;
    top: 7px;
  }
}
src/assets/css/main.scss
@@ -264,28 +264,28 @@
  }
}
.ant-modal.popview-modal {
  top: 70px;
  .ant-modal-body {
    min-height: 200px;
    max-height: calc(100vh - 210px);
    overflow-y: auto;
  }
  .ant-modal-body::-webkit-scrollbar {
    width: 7px;
  }
  .ant-modal-body::-webkit-scrollbar-thumb {
    border-radius: 5px;
    box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
    background: rgba(0, 0, 0, 0.13);
  }
  .ant-modal-body::-webkit-scrollbar-track {
    box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
    border-radius: 3px;
    border: 1px solid rgba(0, 0, 0, 0.07);
    background: rgba(0, 0, 0, 0);
  }
}
// .ant-modal.popview-modal {
//   top: 70px;
//   .ant-modal-body {
//     min-height: 200px;
//     max-height: calc(100vh - 210px);
//     overflow-y: auto;
//   }
//   .ant-modal-body::-webkit-scrollbar {
//     width: 7px;
//   }
//   .ant-modal-body::-webkit-scrollbar-thumb {
//     border-radius: 5px;
//     box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
//     background: rgba(0, 0, 0, 0.13);
//   }
//   .ant-modal-body::-webkit-scrollbar-track {
//     box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
//     border-radius: 3px;
//     border: 1px solid rgba(0, 0, 0, 0.07);
//     background: rgba(0, 0, 0, 0);
//   }
// }
.ant-modal-wrap.popview-modal {
  .ant-modal {
    top: 70px;
@@ -310,6 +310,7 @@
    background: rgba(0, 0, 0, 0);
  }
}
// 设置模态框样式,规定最大最小高度,重置滚动条
.action-modal {
  .ant-modal {
src/menu/components/card/cardcellcomponent/index.jsx
@@ -650,7 +650,7 @@
    if (!card) return null
    if (['pop', 'prompt', 'exec'].includes(card.OpenType)) {
    if (['pop', 'prompt', 'exec', 'form'].includes(card.OpenType)) {
      return <VerifyCard
        card={card}
        dict={dict}
@@ -748,8 +748,7 @@
          </Modal>
          {/* 按钮使用系统存储过程时,验证信息模态框 */}
          <Modal
            wrapClassName="model-table-action-verify-modal"
            title={(card && card.label ? card.label + ' - ' : '') + '验证信息'}
            wrapClassName="mk-pop-modal"
            visible={profVisible}
            width={'90vw'}
            maskClosable={false}
src/menu/components/card/cardcellcomponent/index.scss
@@ -29,32 +29,4 @@
  .card-cell:hover, .card-button-cell:hover {
    box-shadow: 0px 0px 2px #1890ff;
  }
}
.model-table-action-verify-modal {
  .ant-modal {
    top: 50px;
    padding-bottom: 5px;
    .ant-modal-body {
      max-height: calc(100vh - 190px);
      min-height: calc(100vh - 300px);
      overflow-y: auto;
      .ant-empty {
        margin: 5vh 8px;
      }
    }
    .ant-modal-body::-webkit-scrollbar {
      width: 7px;
    }
    .ant-modal-body::-webkit-scrollbar-thumb {
      border-radius: 5px;
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
      background: rgba(0, 0, 0, 0.13);
    }
    .ant-modal-body::-webkit-scrollbar-track {
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
      border-radius: 3px;
      border: 1px solid rgba(0, 0, 0, 0.07);
      background: rgba(0, 0, 0, 0);
    }
  }
}
src/menu/components/chart/antv-bar/chartcompile/index.jsx
@@ -755,8 +755,7 @@
      <div className="line-chart-drawer-form">
        <EditOutlined title="编辑" onClick={this.showDrawer}/>
        <Modal
          wrapClassName="popview-modal menu-chart-edit-modal"
          title={config.type === 'bar' ? '柱状图编辑' : '折线图编辑'}
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={1000}
          maskClosable={false}
@@ -764,6 +763,7 @@
          onCancel={() => { this.setState({ visible: false }) }}
          destroyOnClose
        >
          {config.name ? <div className="mk-com-name">{config.name} - 编辑</div> : null}
          <Tabs activeKey={view} className="menu-chart-edit-box" onChange={this.changeTab}>
            <TabPane tab="组件设置" key="base">
              <NormalForm dict={this.props.dict} formlist={baseFormlist} inputSubmit={this.onSubmit} wrappedComponentRef={(inst) => this.baseRef = inst}/>
src/menu/components/chart/antv-bar/chartcompile/index.scss
@@ -4,36 +4,24 @@
    color: #1890ff;
  }
}
.menu-chart-edit-modal {
  .ant-modal {
    top: 50px;
    .ant-modal-body {
      max-height: calc(100vh - 190px);
      min-height: 50vh;
      padding-top: 10px;
      .menu-chart-edit-box {
        .ant-radio-wrapper {
          margin-right: 5px;
        }
        .ant-tabs-nav-wrap {
          text-align: center;
        }
        .color-sketch-block {
          position: relative;
          top: 5px;
          width: 240px;
        }
        .color-add {
          float: right;
          margin-bottom: 10px;
          position: relative;
          z-index: 1;
        }
        .ant-table-column-title {
          white-space: nowrap;
        }
      }
    }
.menu-chart-edit-box {
  .ant-radio-wrapper {
    margin-right: 5px;
  }
  .color-sketch-block {
    position: relative;
    top: 5px;
    width: 240px;
  }
  .color-add {
    float: right;
    margin-bottom: 10px;
    position: relative;
    z-index: 1;
  }
  .ant-table-column-title {
    white-space: nowrap;
  }
}
src/menu/components/chart/antv-dashboard/chartcompile/index.jsx
@@ -300,8 +300,7 @@
      <div className="line-chart-drawer-form">
        <EditOutlined title="编辑" onClick={this.showDrawer} />
        <Modal
          wrapClassName="popview-modal menu-chart-edit-modal"
          title={config.subtype === 'ratioboard' ? '占比图编辑' : '仪表盘编辑'}
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={850}
          maskClosable={false}
@@ -309,6 +308,7 @@
          onCancel={() => { this.setState({ visible: false }) }}
          destroyOnClose
        >
          {config.name ? <div className="mk-com-name">{config.name} - 编辑</div> : null}
          <Tabs activeKey={view} className="menu-chart-edit-box" onChange={this.changeTab}>
            <TabPane tab="组件设置" key="base">
              <NormalForm dict={this.props.dict} formlist={baseFormlist} inputSubmit={this.onSubmit} wrappedComponentRef={(inst) => this.baseRef = inst}/>
src/menu/components/chart/antv-dashboard/chartcompile/index.scss
@@ -4,32 +4,21 @@
    color: #1890ff;
  }
}
.menu-chart-edit-modal {
  .ant-modal {
    top: 50px;
    .ant-modal-body {
      min-height: 50vh;
      max-height: calc(100vh - 190px);
      padding-top: 10px;
      .ant-tabs-nav-wrap {
        text-align: center;
      }
      .color-sketch-block {
        position: relative;
        top: 5px;
        width: 240px;
      }
      .color-add {
        float: right;
        margin-bottom: 10px;
        position: relative;
        z-index: 1;
      }
      .color-col {
        .ant-form-item-control {
          height: 40px;
        }
      }
.menu-chart-edit-box {
  .color-sketch-block {
    position: relative;
    top: 5px;
    width: 240px;
  }
  .color-add {
    float: right;
    margin-bottom: 10px;
    position: relative;
    z-index: 1;
  }
  .color-col {
    .ant-form-item-control {
      height: 40px;
    }
  }
}
src/menu/components/chart/antv-pie/chartcompile/index.jsx
@@ -309,6 +309,7 @@
  }
  render() {
    const { config } = this.props
    const { visible, plot, colorColumns, view, baseFormlist } = this.state
    const formItemLayout = {
      labelCol: {
@@ -325,8 +326,7 @@
      <div className="line-chart-drawer-form">
        <EditOutlined title="编辑" onClick={this.showDrawer} />
        <Modal
          wrapClassName="popview-modal menu-chart-edit-modal"
          title="饼图编辑"
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={850}
          maskClosable={false}
@@ -334,6 +334,7 @@
          onCancel={() => { this.setState({ visible: false }) }}
          destroyOnClose
        >
          {config.name ? <div className="mk-com-name">{config.name} - 编辑</div> : null}
          <Tabs activeKey={view} className="menu-chart-edit-box" onChange={this.changeTab}>
            <TabPane tab="组件设置" key="base">
              <NormalForm dict={this.props.dict} formlist={baseFormlist} inputSubmit={this.onSubmit} wrappedComponentRef={(inst) => this.baseRef = inst}/>
src/menu/components/chart/antv-pie/chartcompile/index.scss
@@ -4,28 +4,17 @@
    color: #1890ff;
  }
}
.menu-chart-edit-modal {
  .ant-modal {
    top: 50px;
    .ant-modal-body {
      min-height: 50vh;
      max-height: calc(100vh - 190px);
      padding-top: 10px;
      .ant-tabs-nav-wrap {
        text-align: center;
      }
      .color-sketch-block {
        position: relative;
        top: 5px;
        width: 240px;
      }
      .color-add {
        float: right;
        margin-bottom: 10px;
        position: relative;
        z-index: 1;
      }
    }
.menu-chart-edit-box {
  .color-sketch-block {
    position: relative;
    top: 5px;
    width: 240px;
  }
  .color-add {
    float: right;
    margin-bottom: 10px;
    position: relative;
    z-index: 1;
  }
}
src/menu/components/chart/antv-scatter/chartcompile/index.jsx
@@ -228,6 +228,7 @@
  }
  render() {
    const { config } = this.props
    const { view, visible, baseFormlist } = this.state
    const formItemLayout = {
      labelCol: {
@@ -244,8 +245,7 @@
      <div className="line-chart-drawer-form">
        <EditOutlined title="编辑" onClick={this.showDrawer} />
        <Modal
          wrapClassName="popview-modal menu-chart-edit-modal"
          title="散点图编辑"
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={850}
          maskClosable={false}
@@ -253,6 +253,7 @@
          onCancel={() => { this.setState({ visible: false }) }}
          destroyOnClose
        >
          {config.name ? <div className="mk-com-name">{config.name} - 编辑</div> : null}
          <Tabs activeKey={view} className="menu-chart-edit-box" onChange={this.changeTab}>
            <TabPane tab="组件设置" key="base">
              <NormalForm dict={this.props.dict} formlist={baseFormlist} inputSubmit={this.onSubmit} wrappedComponentRef={(inst) => this.baseRef = inst}/>
src/menu/components/chart/antv-scatter/chartcompile/index.scss
@@ -4,30 +4,16 @@
    color: #1890ff;
  }
}
.menu-chart-edit-modal {
  .ant-modal {
    top: 50px;
    .ant-modal-body {
      max-height: calc(100vh - 190px);
      min-height: 50vh;
      padding-top: 10px;
      .menu-chart-edit-box {
        .ant-tabs-nav-wrap {
          text-align: center;
        }
        .color-sketch-block {
          position: relative;
          top: 5px;
          width: 240px;
        }
        .color-add {
          float: right;
          margin-bottom: 10px;
          position: relative;
          z-index: 1;
        }
      }
    }
.menu-chart-edit-box {
  .color-sketch-block {
    position: relative;
    top: 5px;
    width: 240px;
  }
  .color-add {
    float: right;
    margin-bottom: 10px;
    position: relative;
    z-index: 1;
  }
}
src/menu/components/chart/chart-custom/chartcompile/index.jsx
@@ -6,7 +6,7 @@
import { getBaseForm } from './formconfig'
import asyncComponent from '@/utils/asyncComponent'
import './index.scss'
// import './index.scss'
const { TabPane } = Tabs
const NormalForm = asyncComponent(() => import('@/menu/components/share/normalform'))
@@ -87,14 +87,14 @@
  }
  render() {
    const { config } = this.props
    const { view, visible, baseFormlist, plot } = this.state
    return (
      <>
        <EditOutlined style={{color: '#1890ff'}} title="编辑" onClick={this.showDrawer} />
        <Modal
          wrapClassName="popview-modal custom-chart-edit-modal"
          title="自定义图表编辑"
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={950}
          maskClosable={false}
@@ -102,6 +102,7 @@
          onCancel={() => { this.setState({ visible: false }) }}
          destroyOnClose
        >
          {config.name ? <div className="mk-com-name">{config.name} - 编辑</div> : null}
          <Tabs activeKey={view} onChange={this.changeTab}>
            <TabPane tab="组件设置" key="base">
              <NormalForm dict={this.props.dict} formlist={baseFormlist} inputSubmit={this.onSubmit} wrappedComponentRef={(inst) => this.baseRef = inst}/>
src/menu/components/chart/chart-custom/chartcompile/index.scss
@@ -1,11 +0,0 @@
.custom-chart-edit-modal {
  .ant-modal {
    top: 50px;
    .ant-modal-body {
      max-height: calc(100vh - 190px);
      min-height: 50vh;
      padding-top: 10px;
    }
  }
}
src/menu/components/form/formaction/index.jsx
@@ -249,8 +249,7 @@
        </Modal>
        {/* 按钮使用系统存储过程时,验证信息模态框 */}
        <Modal
          wrapClassName="model-table-action-verify-modal"
          title={'验证信息'}
          wrapClassName="mk-pop-modal"
          visible={profVisible}
          width={'90vw'}
          maskClosable={false}
src/menu/components/share/actioncomponent/index.jsx
@@ -549,8 +549,7 @@
        </Modal>
        {/* 按钮使用系统存储过程时,验证信息模态框 */}
        <Modal
          wrapClassName="model-table-action-verify-modal"
          title={(card && card.label ? card.label + ' - ' : '') + '验证信息'}
          wrapClassName="mk-pop-modal"
          visible={profVisible}
          width={'90vw'}
          maskClosable={false}
src/menu/components/share/actioncomponent/index.scss
@@ -50,33 +50,4 @@
      background-color: #cccccc;
    }
  }
}
.model-table-action-verify-modal {
  .ant-modal {
    top: 50px;
    padding-bottom: 5px;
    .ant-modal-body {
      max-height: calc(100vh - 190px);
      min-height: calc(100vh - 300px);
      overflow-y: auto;
      .ant-empty {
        margin: 5vh 8px;
      }
    }
    .ant-modal-body::-webkit-scrollbar {
      width: 7px;
    }
    .ant-modal-body::-webkit-scrollbar-thumb {
      border-radius: 5px;
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
      background: rgba(0, 0, 0, 0.13);
    }
    .ant-modal-body::-webkit-scrollbar-track {
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
      border-radius: 3px;
      border: 1px solid rgba(0, 0, 0, 0.07);
      background: rgba(0, 0, 0, 0);
    }
  }
}
src/menu/components/table/base-table/index.jsx
@@ -21,7 +21,6 @@
const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent'))
const UserComponent = asyncIconComponent(() => import('@/menu/components/share/usercomponent'))
const PasteComponent = asyncIconComponent(() => import('@/menu/components/share/pastecomponent'))
// const LogComponent = asyncIconComponent(() => import('@/menu/components/share/logcomponent'))
const ColumnComponent = asyncComponent(() => import('./columns'))
class TableCardEditComponent extends Component {
@@ -32,14 +31,12 @@
  }
  state = {
    appType: sessionStorage.getItem('appType'),
    card: null,
    back: false
  }
  UNSAFE_componentWillMount () {
    const { card } = this.props
    const { appType } = this.state
    if (card.isNew) {
      let _card = {
@@ -124,17 +121,9 @@
        }
      }
      if (appType === 'mob') {
        _card.search = []
        _card.action = _card.action.filter(a => !a.origin)
      }
      this.updateComponent(_card)
    } else {
      let _card = fromJS(card).toJS()
      if (appType === 'mob') {
        _card.search = []
      }
      this.setState({
        card: _card
@@ -144,7 +133,6 @@
  componentDidMount () {
    MKEmitter.addListener('submitModal', this.handleSave)
    // MKEmitter.addListener('logButton', this.logButton)
    MKEmitter.addListener('completeSave', this.completeSave)
  }
@@ -160,7 +148,6 @@
      return
    }
    MKEmitter.removeListener('submitModal', this.handleSave)
    // MKEmitter.removeListener('logButton', this.logButton)
    MKEmitter.removeListener('completeSave', this.completeSave)
  }
@@ -298,17 +285,6 @@
    this.props.updateConfig(_card)
  }
  // logButton = (id, item) => {
  //   const { card } = this.state
  //   if (id !== card.uuid) return
  //   let btnlog = card.btnlog || []
  //   btnlog.push(item)
  //   this.updateComponent({...card, btnlog})
  // }
  changeStyle = () => {
    const { card } = this.state
@@ -385,13 +361,13 @@
  }
  setSubConfig = (item) => {
    const { card, appType } = this.state
    const { card } = this.state
    let btn = fromJS(item).toJS()
    if (btn.OpenType === 'pop' || btn.execMode === 'pop') {
      if (!btn.modal) {
        btn.modal = {
          setting: { title: btn.label, width: appType === 'mob' ? 100 : 60, cols: '2', container: 'view', focus: '', finish: 'close', clickouter: 'unclose', display: 'modal' },
          setting: { title: btn.label, width: 60, cols: '2', container: 'view', focus: '', finish: 'close', clickouter: 'unclose', display: 'modal' },
          tables: [],
          groups: [],
          fields: []
@@ -499,13 +475,9 @@
  }
  render() {
    const { card, appType } = this.state
    const { card } = this.state
    let options = ['action', 'search', 'form', 'cols']
    let _style = resetStyle(card.style)
    if (appType === 'mob') {
      options = ['action', 'cols']
    }
    return (
      <div className="menu-normal-table-edit-box" style={_style} onClick={this.clickComponent} id={card.uuid}>
@@ -513,7 +485,7 @@
        <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
          <div className="mk-popover-control">
            <PlusOutlined className="plus" title="添加列" onClick={this.addColumns}/>
            {appType !== 'mob' ? <PlusCircleOutlined className="plus" title="添加搜索" onClick={this.addSearch}/> : null}
            <PlusCircleOutlined className="plus" title="添加搜索" onClick={this.addSearch}/>
            <PlusSquareOutlined className="plus" title="添加按钮" onClick={this.addButton}/>
            <NormalForm title="表格设置" width={800} update={this.updateWrap} getForms={this.getWrapForms}>
              <EditOutlined style={{color: '#1890ff'}} title="编辑"/>
src/menu/components/table/edit-table/columns/index.jsx
@@ -2,7 +2,7 @@
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { DndProvider, DragSource, DropTarget } from 'react-dnd'
import { Table, Popover, Modal, message, Button } from 'antd'
import { Table, Popover, Modal, message, Button, Typography } from 'antd'
import { PlusOutlined, FileSyncOutlined, EditOutlined, CopyOutlined, DeleteOutlined, FontColorsOutlined, CloseCircleOutlined, AntDesignOutlined } from '@ant-design/icons'
import asyncComponent from '@/utils/asyncComponent'
@@ -14,6 +14,7 @@
import './index.scss'
const { confirm } = Modal
const { Paragraph } = Typography
const EditColumn = asyncComponent(() => import('./editColumn'))
const TableVerify = asyncComponent(() => import('./tableIn'))
const MarkColumn = asyncIconComponent(() => import('@/menu/components/share/markcomponent'))
@@ -157,9 +158,9 @@
      }
      return (
        <td style={{...style, minWidth: column.Width || 100}} className={className}>
          {val}
          {column.Hide === 'true' ? <CloseCircleOutlined style={{marginLeft: '5px', color: 'orange', fontSize: '12px'}}/> : null}
          {column.field ? <Paragraph className="col-copy" copyable={{ text: column.field }}>{val}</Paragraph> : val}
          {column.marks && column.marks.length ? <AntDesignOutlined className="profile"/> : null}
          {column.Hide === 'true' ? <CloseCircleOutlined className="close-col"/> : null}
        </td>
      )
    } else {
src/menu/components/table/edit-table/columns/index.scss
@@ -24,6 +24,24 @@
    tr {
      td {
        background: #ffffff;
        .col-copy {
          margin-bottom: 0;
          display: inline-block;
          .ant-typography-copy {
            position: absolute;
            left: 2px;
            top: 0px;
            margin-left: 0px;
            font-size: 12px;
            opacity: 0;
            transition: opacity 0.2s;
          }
        }
      }
      td:hover .col-copy {
        .ant-typography-copy {
          opacity: 1;
        }
      }
      td:not(.ant-table-selection-column) {
        position: relative;
@@ -35,6 +53,16 @@
          color: purple;
          font-size: 12px;
        }
        >.close-col {
          position: absolute;
          top: 2px;
          right: 2px;
          color: orange;
          font-size: 12px;
        }
        >.profile + .close-col {
          right: 20px;
        }
      }
    }
    .action-column {
src/menu/components/table/normal-table/columns/index.jsx
@@ -2,7 +2,7 @@
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { DndProvider, DragSource, DropTarget } from 'react-dnd'
import { Table, Popover, Modal, message } from 'antd'
import { Table, Popover, Modal, message, Typography } from 'antd'
import { PlusOutlined, FileSyncOutlined, EditOutlined, CopyOutlined, DeleteOutlined, FontColorsOutlined, CloseCircleOutlined, AntDesignOutlined } from '@ant-design/icons'
import asyncComponent from '@/utils/asyncComponent'
@@ -14,6 +14,7 @@
import './index.scss'
const { confirm } = Modal
const { Paragraph } = Typography
const EditColumn = asyncIconComponent(() => import('./editColumn'))
const MarkColumn = asyncIconComponent(() => import('@/menu/components/share/markcomponent'))
const CardCellComponent = asyncComponent(() => import('@/menu/components/card/cardcellcomponent'))
@@ -173,9 +174,9 @@
      }
      return (
        <td style={{...style, minWidth: column.Width || 100}} className={className}>
          {val}
          {column.Hide === 'true' ? <CloseCircleOutlined style={{marginLeft: '5px', color: 'orange', fontSize: '12px'}}/> : null}
          {column.field ? <Paragraph className="col-copy" copyable={{ text: column.field }}>{val}</Paragraph> : val}
          {column.marks && column.marks.length ? <AntDesignOutlined className="profile"/> : null}
          {column.Hide === 'true' ? <CloseCircleOutlined className="close-col"/> : null}
        </td>
      )
    } else {
src/menu/components/table/normal-table/columns/index.scss
@@ -15,6 +15,24 @@
    tr {
      td {
        background: #ffffff;
        .col-copy {
          margin-bottom: 0;
          display: inline-block;
          .ant-typography-copy {
            position: absolute;
            left: 2px;
            top: 0px;
            margin-left: 0px;
            font-size: 12px;
            opacity: 0;
            transition: opacity 0.2s;
          }
        }
      }
      td:hover .col-copy {
        .ant-typography-copy {
          opacity: 1;
        }
      }
      td:not(.ant-table-selection-column) {
        position: relative;
@@ -26,6 +44,16 @@
          color: purple;
          font-size: 12px;
        }
        >.close-col {
          position: absolute;
          top: 2px;
          right: 2px;
          color: orange;
          font-size: 12px;
        }
        >.profile + .close-col {
          right: 20px;
        }
      }
    }
    .action-column {
src/menu/datasource/index.jsx
@@ -206,8 +206,8 @@
      <div className="model-datasource">
        <SettingOutlined title="数据源" onClick={() => this.editDataSource()} />
        <Modal
          wrapClassName="popview-modal"
          title="数据源配置"
          wrapClassName="mk-pop-modal"
          title=""
          visible={visible}
          width={'75vw'}
          maskClosable={false}
src/menu/datasource/verifycard/columnform/index.jsx
@@ -89,6 +89,7 @@
                  <Select.Option value="Nvarchar(20)"> Nvarchar(20) </Select.Option>
                  <Select.Option value="Nvarchar(50)"> Nvarchar(50) </Select.Option>
                  <Select.Option value="Nvarchar(100)"> Nvarchar(100) </Select.Option>
                  <Select.Option value="Nvarchar(256)"> Nvarchar(256) </Select.Option>
                  <Select.Option value="Nvarchar(512)"> Nvarchar(512) </Select.Option>
                  <Select.Option value="Nvarchar(1024)"> Nvarchar(1024) </Select.Option>
                  <Select.Option value="Nvarchar(2048)"> Nvarchar(2048) </Select.Option>
src/menu/datasource/verifycard/index.jsx
@@ -71,6 +71,7 @@
          { value: 'Nvarchar(20)', text: 'Nvarchar(20)' },
          { value: 'Nvarchar(50)', text: 'Nvarchar(50)' },
          { value: 'Nvarchar(100)', text: 'Nvarchar(100)' },
          { value: 'Nvarchar(256)', text: 'Nvarchar(256)' },
          { value: 'Nvarchar(512)', text: 'Nvarchar(512)' },
          { value: 'Nvarchar(1024)', text: 'Nvarchar(1024)' },
          { value: 'Nvarchar(2048)', text: 'Nvarchar(2048)' },
@@ -276,7 +277,8 @@
  handleEdit = (record) => {
    this.scriptsForm.edit(record)
    
    let node = document.getElementById('model-data-source-wrap').parentNode
    // let node = document.getElementById('mk-scripts-tabpane').parentNode
    let node = document.getElementById('mk-scripts-tabpane')
    if (node && node.scrollTop) {
      let inter = Math.ceil(node.scrollTop / 10)
@@ -722,7 +724,8 @@
    const { columns, setting, scripts, colColumns, scriptsColumns, activeKey, loading, searches, defaultsql, visible, script, scriptValue } = this.state
    return (
      <div id="model-data-source-wrap">
      <div className="model-data-source-wrap">
        {config.name ? <div className="mk-com-name">{config.name} - 数据源</div> : null}
        {loading && <Spin size="large" />}
        <Tabs activeKey={activeKey} className="data-source-card-box" onChange={this.changeTab}>
          <TabPane tab="数据源" key="setting">
@@ -750,8 +753,8 @@
              自定义脚本
              {scripts.length ? <span className="count-tip">{scripts.length}</span> : null}
            </span>
          } key="scripts">
            <BorderOutlined className="full-scripts" onClick={() => {
          } key="scripts" id="mk-scripts-tabpane">
            {scripts.length ? <BorderOutlined className="full-scripts" onClick={() => {
              if (this.scriptsForm && (this.scriptsForm.state.editItem || (this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))))) {
                notification.warning({
                  top: 92,
@@ -761,7 +764,7 @@
                return
              }
              this.setState({visible: true, script: null, scriptValue: ''})
            }}/>
            }}/> : null}
            <CustomScriptsForm
              setting={setting}
              searches={searches}
src/menu/datasource/verifycard/index.scss
@@ -1,12 +1,9 @@
#model-data-source-wrap {
.model-data-source-wrap {
  .ant-spin {
    position: absolute;
    left: calc(50% - 16px);
    top: 220px;
    z-index: 1;
  }
  .ant-tabs-tabpane {
    position: relative;
  }
  .data-source-card-box {
    .ant-tabs-nav-scroll {
@@ -18,9 +15,6 @@
      color: #1890ff;
      font-size: 12px;
    }
    .ant-tabs-content {
      min-height: 40vh;
    }
    table tr td {
      word-wrap: break-word;
      word-break: break-word;
@@ -28,7 +22,7 @@
    .quickly-add {
      position: absolute;
      width: 100px;
      right: 10px;
      right: 24px;
      top: 5px;
      z-index: 2;
    }
@@ -83,10 +77,11 @@
  }
  .full-scripts {
    position: absolute;
    right: 0px;
    top: -40px;
    font-size: 18px;
    right: 24px;
    top: 0px;
    font-size: 16px;
    color: #1890ff;
    z-index: 1;
  }
}
.model-custom-view-scripts-modal {
src/menu/stylecontroller/index.jsx
@@ -35,6 +35,7 @@
import MKEmitter from '@/utils/events.js'
import asyncComponent from '@/utils/asyncComponent'
import StyleInput from './styleInput'
import MainLogo from '@/assets/img/main-logo.png'
import './index.scss'
const { Panel } = Collapse
@@ -458,7 +459,7 @@
      <Drawer
        title={
          <div className="header-logo">
            <img src={window.GLOB.mainlogo} alt=""/>
            <img src={MainLogo} alt=""/>
          </div>
        }
        placement="left"
src/mob/components/formdragelement/card.jsx
@@ -78,7 +78,7 @@
  if (card.type === 'text' || card.type === 'linkMain') {
    formItem = (<div className={'am-list-item input ' + (card.place || '')}><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className={'am-input-control ' + card.cursor}>{card.initval ? card.initval : <span style={{color: '#bcbcbc'}}>{card.placeholder || <span style={{color: 'transparent'}}>input</span>}</span> }</div>{card.scan && card.scan !== 'false' ? <div className="am-list-extra"><ScanOutlined /></div> : null}</div></div>)
  } else if (card.type === 'number') {
    formItem = (<div className={'am-list-item input ' + (card.place || '')}><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className={'am-input-control ' + card.cursor}>{card.initval ? card.initval : <span style={{color: '#bcbcbc'}}><span style={{color: 'transparent'}}>input</span></span> }</div>{card.placeholder ? <div className="am-list-extra" style={{color: '#999999', width: 'auto', lineHeight: 1.5}}>{card.placeholder}</div> : null}</div></div>)
    formItem = (<div className={'am-list-item input ' + (card.place || '')}><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className={'am-input-control ' + card.cursor}>{card.initval || 0}</div>{card.placeholder ? <div className="am-list-extra" style={{color: '#999999', width: 'auto', lineHeight: 1.5, height: '22px'}}>{card.placeholder}</div> : null}</div></div>)
  } else if (card.type === 'number') {
    formItem = (<div className="am-list-item input"><div className="am-list-line"><div className="am-input-label">{card.label}</div><div className={'am-input-control ' + card.cursor}>{card.initval || <span style={{color: 'transparent'}}>input</span>}</div></div></div>)
  } else if (card.type === 'select' || card.type === 'link' || card.type === 'cascader') {
src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -338,8 +338,21 @@
          } else {
            val = <span>{card.prefix || ''}{val}{card.postfix || ''}</span>
          }
          if (card.copyable === 'true') {
            val = <Paragraph copyable={{ text: orival }}>{val}</Paragraph>
            if (card.link || (card.anchors && card.anchors.length > 0)) {
              let url = orival
              if (card.link === 'static') {
                url = card.linkurl
              } else if (card.link === 'dynamic') {
                url = data[card.linkurl]
              }
              val = <span>{val}<Paragraph style={{display: 'inline-block'}} onClick={(e) => e.stopPropagation()} copyable={{ text: url }}></Paragraph></span>
            } else {
              val = <Paragraph copyable={{ text: orival }}>{val}</Paragraph>
            }
          }
        }
  
src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -38,6 +38,7 @@
    formdata: null,
    selines: null,
    btnconfig: null,
    confirmLoading: false,
    loading: false,
    disabled: false,
    hidden: false,
@@ -1347,7 +1348,7 @@
   */
  execSuccess = (res) => {
    const { btn } = this.props
    const { autoMatic } = this.state
    const { autoMatic, btnconfig } = this.state
    if ((res.ErrCode === 'S' || !res.ErrCode) || autoMatic) { // 执行成功
      notification.success({
@@ -1363,8 +1364,15 @@
    }
    if (autoMatic || !btnconfig || btnconfig.setting.finish !== 'unclose') {
      this.setState({
        visible: false
      })
    }
    this.setState({
      loading: false
      loading: false,
      confirmLoading: false
    })
    if (autoMatic) {
@@ -1409,7 +1417,8 @@
    }
    
    this.setState({
      loading: false
      loading: false,
      confirmLoading: false
    })
    if (autoMatic) {
@@ -1529,16 +1538,10 @@
   * @description 模态框(表单),确认
   */
  handleOk = () => {
    const { btnconfig, autoMatic } = this.state
    if (!this.formRef) return
    this.formRef.handleConfirm().then(res => {
      if (btnconfig.setting.finish !== 'unclose' || autoMatic) {
        this.setState({
          visible: false
        })
      }
      this.setState({ confirmLoading: true })
      this.triggerPrint(this.state.selines, res)
    })
  }
@@ -1549,7 +1552,8 @@
  handleCancel = () => {
    this.setState({
      loading: false,
      visible: false
      visible: false,
      confirmLoading: false
    })
  }
@@ -1679,6 +1683,7 @@
        getContainer={container}
        wrapClassName='action-modal'
        visible={this.state.visible}
        confirmLoading={this.state.confirmLoading}
        width={width}
        onOk={this.handleOk}
        onCancel={this.handleCancel}
src/tabviews/zshare/mutilform/mkNumberInput/index.jsx
@@ -49,7 +49,18 @@
  handleChange = (val) => {
    this.setState({value: val})
    this.props.onChange(val)
    let _val = val
    if (typeof(_val) !== 'number') {
      _val = parseFloat(_val)
      if (isNaN(_val)) {
        _val = ''
      }
    }
    this.props.onChange(_val)
  }
  handleSubmit = () => {
src/templates/formtabconfig/index.jsx
@@ -1699,8 +1699,7 @@
        </Modal>
        {/* 按钮使用系统存储过程时,验证信息模态框 */}
        <Modal
          wrapClassName="common-table-fields-modal"
          title={'验证信息'}
          wrapClassName="mk-pop-modal"
          visible={this.state.profileVisible}
          width={'90vw'}
          maskClosable={false}
src/templates/sharecomponent/actioncomponent/index.jsx
@@ -951,8 +951,7 @@
        </Modal>
        {/* 按钮使用系统存储过程时,验证信息模态框 */}
        <Modal
          wrapClassName="model-table-action-verify-modal"
          title={(card && card.label ? card.label + ' - ' : '') + '验证信息'}
          wrapClassName="mk-pop-modal"
          visible={profVisible}
          width={'90vw'}
          maskClosable={false}
src/templates/sharecomponent/actioncomponent/index.scss
@@ -44,32 +44,4 @@
    top: 60px;
    padding-bottom: 5px;
  }
}
.model-table-action-verify-modal {
  .ant-modal {
    top: 50px;
    padding-bottom: 5px;
    .ant-modal-body {
      max-height: calc(100vh - 190px);
      min-height: calc(100vh - 300px);
      overflow-y: auto;
      .ant-empty {
        margin: 5vh 8px;
      }
    }
    .ant-modal-body::-webkit-scrollbar {
      width: 7px;
    }
    .ant-modal-body::-webkit-scrollbar-thumb {
      border-radius: 5px;
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
      background: rgba(0, 0, 0, 0.13);
    }
    .ant-modal-body::-webkit-scrollbar-track {
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
      border-radius: 3px;
      border: 1px solid rgba(0, 0, 0, 0.07);
      background: rgba(0, 0, 0, 0);
    }
  }
}
src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx
@@ -541,11 +541,12 @@
  }
  handleEdit = (record, type) => {
    let node = null
    if (type === 'scripts') {
      this.scriptsForm.edit(record)
      node = document.getElementById('mk-exin-script')
    }
    let node = document.getElementById('verify-excel-box-tab').parentNode
    if (node && node.scrollTop) {
      let inter = Math.ceil(node.scrollTop / 10)
@@ -736,7 +737,8 @@
    }
    return (
      <div id="verify-excel-box-tab">
      <div>
        {card.label ? <div className="mk-com-name">{card.label} - 验证信息</div> : null}
        <Tabs activeKey={activeKey} className="excelin-verify-card-box" onChange={this.tabchange}>
          <TabPane tab="基础验证" key="basemsg">
            <Form {...formItemLayout}>
@@ -807,7 +809,7 @@
              自定义脚本
              {verify.scripts.length ? <span className="count-tip">{verify.scripts.length}</span> : null}
            </span>
          } key="scripts">
          } key="scripts" id="mk-exin-script">
            <CustomScript
              btn={this.props.card}
              usefulfields={verify.columns}
src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
@@ -331,11 +331,13 @@
  }
  handleEdit = (record, type) => {
    let node = null
    if (type === 'scripts') {
      this.scriptsForm.edit(record)
      node = document.getElementById('mk-exout-script')
    }
    let node = document.getElementById('verify-excelout-box-tab').parentNode
    if (node && node.scrollTop) {
      let inter = Math.ceil(node.scrollTop / 10)
@@ -941,7 +943,8 @@
    }
    return (
      <div id="verify-excelout-box-tab">
      <div className="verify-excelout-box-tab">
        {card.label ? <div className="mk-com-name">{card.label} - 验证信息</div> : null}
        {loading && <Spin size="large" />}
        <Tabs activeKey={activeKey} className="excelout-verify-card-box" onChange={this.tabchange}>
          {card.intertype === 'system' ? <TabPane tab="基础验证" key="setting">
@@ -968,7 +971,7 @@
              自定义脚本
              {verify.scripts.length ? <span className="count-tip">{verify.scripts.length}</span> : null}
            </span>
          } key="scripts" disabled={verify.dataType !== 'custom'}>
          } key="scripts" disabled={verify.dataType !== 'custom'} id="mk-exout-script">
            <CustomScript
              btn={card}
              sheet={verify.tableName}
src/templates/sharecomponent/actioncomponent/verifyexcelout/index.scss
@@ -66,7 +66,7 @@
    cursor: pointer;
  }
}
#verify-excelout-box-tab {
.verify-excelout-box-tab {
  >.ant-spin {
    position: absolute;
    top: calc(50% - 16px);
src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx
@@ -234,8 +234,8 @@
  }
  render() {
    const { card } = this.props
    const { getFieldDecorator } = this.props.form
    const { verify, linkType, printMode, printFunc } = this.state
    const formItemLayout = {
      labelCol: {
@@ -249,7 +249,8 @@
    }
    return (
      <div id="verify-card-box-tab">
      <div>
        {card.label ? <div className="mk-com-name">{card.label} - 验证信息</div> : null}
        <Tabs defaultActiveKey="1" className="verify-card-print-box" onChange={this.tabchange}>
          <TabPane tab="打印验证" key="1">
            <Form {...formItemLayout}>
src/templates/sharecomponent/searchcomponent/settingform/index.jsx
@@ -53,97 +53,95 @@
    }
    return (
      <div className="model-table-datasource-setting-form-box">
        <Form {...formItemLayout} className="model-setting-form">
          <Row gutter={24}>
            <Col span={12}>
              <Form.Item label="搜索按钮">
                {getFieldDecorator('show', {
                  initialValue: setting.show || 'true'
                })(
                  <Radio.Group>
                    <Radio value="true">显示</Radio>
                    <Radio value="false">隐藏</Radio>
                  </Radio.Group>
                )}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="高级搜索的展开方式。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  高级搜索
                </Tooltip>
              }>
                {getFieldDecorator('advanceType', {
                  initialValue: setting.advanceType || 'modal'
                })(
                  <Radio.Group onChange={(e) => this.setState({advanceType: e.target.value})}>
                    <Radio value="modal">弹窗</Radio>
                    <Radio value="drawer">抽屉</Radio>
                    <Radio value="pulldown">下拉</Radio>
                  </Radio.Group>
                )}
              </Form.Item>
            </Col>
            {advanceType === 'drawer' ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="抽屉展开的方向。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  抽屉方向
                </Tooltip>
              }>
                {getFieldDecorator('drawerPlacement', {
                  initialValue: setting.drawerPlacement || 'right'
                })(
                  <Radio.Group style={{whiteSpace: 'nowrap'}}>
                    <Radio value="right">右侧</Radio>
                    <Radio value="left">左侧</Radio>
                    <Radio value="top">上侧</Radio>
                    <Radio value="bottom">下侧</Radio>
                  </Radio.Group>
                )}
              </Form.Item>
            </Col> : null}
            {advanceType !== 'pulldown' ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="高级搜索框的宽度,注:当宽度值小于100时表示占窗口的百分比,大于100时表示宽度的绝对值。当使用上下显示的抽屉时代表抽屉高度。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  弹窗宽度
                </Tooltip>
              }>
                {getFieldDecorator('advanceWidth', {
                  initialValue: setting.advanceWidth || 1000
                })(<InputNumber min={10} max={3000} precision={0} onPressEnter={this.props.inputSubmit}/>)}
              </Form.Item>
            </Col> : null}
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="搜索及重置按钮所占比例。栅格布局,每行等分为24列。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  比例
                </Tooltip>
              }>
                {getFieldDecorator('searchRatio', {
                  initialValue: setting.searchRatio || 6,
                })(<InputNumber min={1} max={24} precision={0} onPressEnter={this.props.inputSubmit}/>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="搜索按钮距左侧的百分比,参照搜索条件的名称宽度。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  按钮偏移
                </Tooltip>
              }>
                {getFieldDecorator('searchLwidth', {
                  initialValue: setting.searchLwidth !== undefined ? setting.searchLwidth : 33.3,
                })(<InputNumber min={0} max={100} precision={1} onPressEnter={this.props.inputSubmit}/>)}
              </Form.Item>
            </Col>
          </Row>
        </Form>
      </div>
      <Form {...formItemLayout}>
        <Row gutter={24}>
          <Col span={12}>
            <Form.Item label="搜索按钮">
              {getFieldDecorator('show', {
                initialValue: setting.show || 'true'
              })(
                <Radio.Group>
                  <Radio value="true">显示</Radio>
                  <Radio value="false">隐藏</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col>
          <Col span={12}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="高级搜索的展开方式。">
                <QuestionCircleOutlined className="mk-form-tip" />
                高级搜索
              </Tooltip>
            }>
              {getFieldDecorator('advanceType', {
                initialValue: setting.advanceType || 'modal'
              })(
                <Radio.Group onChange={(e) => this.setState({advanceType: e.target.value})}>
                  <Radio value="modal">弹窗</Radio>
                  <Radio value="drawer">抽屉</Radio>
                  <Radio value="pulldown">下拉</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col>
          {advanceType === 'drawer' ? <Col span={12}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="抽屉展开的方向。">
                <QuestionCircleOutlined className="mk-form-tip" />
                抽屉方向
              </Tooltip>
            }>
              {getFieldDecorator('drawerPlacement', {
                initialValue: setting.drawerPlacement || 'right'
              })(
                <Radio.Group style={{whiteSpace: 'nowrap'}}>
                  <Radio value="right">右侧</Radio>
                  <Radio value="left">左侧</Radio>
                  <Radio value="top">上侧</Radio>
                  <Radio value="bottom">下侧</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col> : null}
          {advanceType !== 'pulldown' ? <Col span={12}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="高级搜索框的宽度,注:当宽度值小于100时表示占窗口的百分比,大于100时表示宽度的绝对值。当使用上下显示的抽屉时代表抽屉高度。">
                <QuestionCircleOutlined className="mk-form-tip" />
                弹窗宽度
              </Tooltip>
            }>
              {getFieldDecorator('advanceWidth', {
                initialValue: setting.advanceWidth || 1000
              })(<InputNumber min={10} max={3000} precision={0} onPressEnter={this.props.inputSubmit}/>)}
            </Form.Item>
          </Col> : null}
          <Col span={12}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="搜索及重置按钮所占比例。栅格布局,每行等分为24列。">
                <QuestionCircleOutlined className="mk-form-tip" />
                比例
              </Tooltip>
            }>
              {getFieldDecorator('searchRatio', {
                initialValue: setting.searchRatio || 6,
              })(<InputNumber min={1} max={24} precision={0} onPressEnter={this.props.inputSubmit}/>)}
            </Form.Item>
          </Col>
          <Col span={12}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="搜索按钮距左侧的百分比,参照搜索条件的名称宽度。">
                <QuestionCircleOutlined className="mk-form-tip" />
                按钮偏移
              </Tooltip>
            }>
              {getFieldDecorator('searchLwidth', {
                initialValue: setting.searchLwidth !== undefined ? setting.searchLwidth : 33.3,
              })(<InputNumber min={0} max={100} precision={1} onPressEnter={this.props.inputSubmit}/>)}
            </Form.Item>
          </Col>
        </Row>
      </Form>
    )
  }
}
src/templates/sharecomponent/settingcalcomponent/index.jsx
@@ -83,8 +83,7 @@
      <div className="model-datasource">
        <SettingOutlined onClick={() => this.editDataSource()} />
        <Modal
          wrapClassName="popview-modal"
          title="数据源配置"
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={'75vw'}
          maskClosable={false}
src/templates/sharecomponent/settingcalcomponent/index.scss
@@ -8,79 +8,4 @@
    font-size: 18px;
    padding: 10px;
  }
  .model-input-group-wrapper {
    padding: 0 20px;
    display: inline-block;
    width: 100%;
    text-align: start;
    vertical-align: top;
    margin-bottom: 15px;
    .model-input-wrapper {
      position: relative;
      display: table;
      width: 100%;
      border-collapse: separate;
      border-spacing: 0;
      .model-input-value {
        display: table-cell;
        width: 100%;
        border: 1px solid #d9d9d9;
        border-radius: 4px 0px 0px 4px;
        overflow: hidden;
        text-overflow:ellipsis;
        white-space: nowrap;
        padding: 2px 10px;
        color: #ffffff;
      }
      .model-input-group-addon {
        display: table-cell;
        width: 1px;
        position: relative;
        padding: 0 11px;
        color: rgba(0, 0, 0, 0.65);
        font-weight: normal;
        font-size: 14px;
        line-height: 1;
        text-align: center;
        background-color: #fafafa;
        border: 1px solid #d9d9d9;
        border-radius: 0px 4px 4px 0px;
        white-space: nowrap;
      }
      .model-input-insert {
        display: table-cell;
        width: 100%;
        border: 1px dotted #d9d9d9;
        border-radius: 4px;
        text-align: center;
        cursor: pointer;
        .anticon-plus {
          padding: 6px;
          font-size: 16px;
          color: rgb(38, 194, 129);
        }
      }
    }
    .anticon-setting {
      margin-right: 5px;
      padding: 6px;
      cursor: pointer;
    }
    .anticon-setting:hover {
      color: #1890ff;
    }
    .anticon-close {
      padding: 6px;
      cursor: pointer;
    }
    .anticon-close:hover {
      color: #ff4d4f;
    }
  }
}
src/templates/sharecomponent/settingcalcomponent/verifycard/index.jsx
@@ -119,21 +119,6 @@
  handleEdit = (record) => {
    this.contrastForm.edit(record)
    let node = document.getElementById('model-setting-form-body').parentNode
    if (node && node.scrollTop) {
      let inter = Math.ceil(node.scrollTop / 10)
      let timer = setInterval(() => {
        if (node.scrollTop - inter > 0) {
          node.scrollTop = node.scrollTop - inter
        } else {
          node.scrollTop = 0
          clearInterval(timer)
        }
      }, 10)
    }
  }
  changeTab = (val) => {
@@ -400,7 +385,7 @@
    const { columns, setting, scripts, colColumns, activeKey, loading } = this.state
    return (
      <div className="model-verify-card-box-tab" id="model-setting-form-body">
      <div className="model-verify-card-box-tab">
        {loading && <Spin size="large" />}
        <Tabs activeKey={activeKey} className="verify-card-box" onChange={this.changeTab}>
          <TabPane tab="数据源" key="setting">
@@ -438,7 +423,7 @@
              自定义脚本
              {scripts.length ? <span className="count-tip">{scripts.length}</span> : null}
            </span>
          } key="scripts">
          } key="scripts" id="mk-setting-scripts">
            <CustomScript
              dict={this.props.dict}
              setting={setting}
src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx
@@ -8,7 +8,7 @@
import { formRule } from '@/utils/option.js'
import Utils from '@/utils/utils.js'
import CodeMirror from '@/templates/zshare/codemirror'
import './index.scss'
// import './index.scss'
const { TextArea } = Input
@@ -176,160 +176,146 @@
    }
    return (
      <div className="model-datasource-setting-form-box">
        <Form {...formItemLayout} className="model-setting-form">
          <Row gutter={24}>
            <Col span={8}>
              <Form.Item label="表名">
                {getFieldDecorator('tableName', {
                  initialValue: setting.tableName,
                  rules: [
                    {
                      required: true,
                      message: this.props.dict['form.required.input'] + '表名!'
                    },
                    {
                      max: 50,
                      message: '表名最长为50个字符!'
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col>
            <Col span={8}>
              <Form.Item label="接口类型">
                {getFieldDecorator('interType', {
                  initialValue: interType,
                  rules: [
                    {
                      required: true,
                      message: this.props.dict['form.required.select'] + '接口类型!'
                    },
                  ]
                })(
                <Radio.Group onChange={(e) => {this.onRadioChange(e, 'interType')}}>
                  <Radio value="system">系统</Radio>
                  <Radio value="inner">内部</Radio>
                  <Radio value="outer">外部</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            {interType === 'inner' ? <Col span={8}>
              <Form.Item label={tooltip ?
                <Tooltip placement="topLeft" title={tooltip}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  内部函数
                </Tooltip> : '内部函数'
              }>
                {getFieldDecorator('innerFunc', {
                  initialValue: setting.innerFunc || '',
                  rules: rules
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
            {interType === 'outer' ? <Col span={8}>
              <Form.Item label="外部函数">
                {getFieldDecorator('outerFunc', {
                  initialValue: setting.outerFunc || '',
                  rules: [
      <Form {...formItemLayout}>
        <Row gutter={24}>
          <Col span={8}>
            <Form.Item label="表名">
              {getFieldDecorator('tableName', {
                initialValue: setting.tableName,
                rules: [
                  {
                    required: true,
                    message: this.props.dict['form.required.input'] + '表名!'
                  },
                  {
                    max: 50,
                    message: '表名最长为50个字符!'
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="接口类型">
              {getFieldDecorator('interType', {
                initialValue: interType,
                rules: [
                  {
                    required: true,
                    message: this.props.dict['form.required.select'] + '接口类型!'
                  },
                ]
              })(
              <Radio.Group onChange={(e) => {this.onRadioChange(e, 'interType')}}>
                <Radio value="system">系统</Radio>
                <Radio value="inner">内部</Radio>
                <Radio value="outer">外部</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          {interType === 'inner' ? <Col span={8}>
            <Form.Item label={tooltip ?
              <Tooltip placement="topLeft" title={tooltip}>
                <QuestionCircleOutlined className="mk-form-tip" />
                内部函数
              </Tooltip> : '内部函数'
            }>
              {getFieldDecorator('innerFunc', {
                initialValue: setting.innerFunc || '',
                rules: rules
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col> : null}
          {interType === 'outer' ? <Col span={8}>
            <Form.Item label="外部函数">
              {getFieldDecorator('outerFunc', {
                initialValue: setting.outerFunc || '',
                rules: [
                  ]
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
            {interType === 'outer' ? <Col span={24} className="data-source">
              <Form.Item label="接口地址">
                {getFieldDecorator('interface', {
                  initialValue: setting.interface || '',
                  rules: [
                    {
                      required: true,
                      message: this.props.dict['form.required.input'] + '接口地址!'
                    },
                  ]
                })(<TextArea rows={2}/>)}
              </Form.Item>
            </Col> : null}
            {interType === 'system' ? <Col span={24} className="data-source" style={{paddingLeft: '7px'}}>
              <Form.Item labelCol={{xs: { span: 24 }, sm: { span: 2 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 22 }} } label={
                <Tooltip placement="topLeft" title={'使用系统函数时,需填写数据源。注:数据权限替换符 $@ -> /* 或 \'\'、 @$ -> */ 或 \'\''}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  数据源
                </Tooltip>
              }>
                {getFieldDecorator('dataresource', {
                  initialValue: setting.dataresource || ''
                })(<CodeMirror />)}
              </Form.Item>
            </Col> : null}
            {interType === 'system' ? <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'查询时,搜索条件以where条件拼接进入sql,统计时,将数据源中以“@+搜索字段+@”的内容,以搜索条件中的值进行替换后,提交查询,注:查询类型仅在使用系统函数时有效。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  查询类型
                </Tooltip>
              }>
                {getFieldDecorator('queryType', {
                  initialValue: setting.queryType || 'query'
                })(
                <Radio.Group>
                  <Radio value="query">查询</Radio>
                  <Radio value="statistics">统计</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {/* <Col span={8}>
              <Form.Item label="主键">
                {getFieldDecorator('primaryKey', {
                  initialValue: setting.primaryKey || ''
                })(
                  <Select>
                    {columns.map((option, i) =>
                      <Select.Option key={i} value={option.field}>
                        {option.label}
                      </Select.Option>
                    )}
                  </Select>
                )}
              </Form.Item>
            </Col> */}
            {interType === 'system' ? <Col span={8}>
              <Form.Item label="默认sql">
                {getFieldDecorator('execute', {
                  initialValue: setting.execute || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">执行</Radio>
                  <Radio value="false">不执行</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            <Col span={8}>
              <Form.Item label="初始化">
                {getFieldDecorator('onload', {
                  initialValue: setting.onload || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">加载数据</Radio>
                  <Radio value="false">不加载数据</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            {/* <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="高级搜索弹窗的宽度,注:当宽度值小于100时表示占窗口的百分比,大于100时表示宽度的绝对值。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  高级搜索
                </Tooltip>
              }>
                {getFieldDecorator('advanceWidth', {
                  initialValue: setting.advanceWidth || 1000
                })(<InputNumber min={10} max={3000} precision={0}/>)}
              </Form.Item>
            </Col> */}
          </Row>
        </Form>
      </div>
                ]
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col> : null}
          {interType === 'outer' ? <Col span={24} className="mk-through-line3">
            <Form.Item label="接口地址">
              {getFieldDecorator('interface', {
                initialValue: setting.interface || '',
                rules: [
                  {
                    required: true,
                    message: this.props.dict['form.required.input'] + '接口地址!'
                  },
                ]
              })(<TextArea rows={2}/>)}
            </Form.Item>
          </Col> : null}
          {interType === 'system' ? <Col span={24} className="mk-through-line3">
            <Form.Item labelCol={{xs: { span: 24 }, sm: { span: 2 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 22 }} } label={
              <Tooltip placement="topLeft" title={'使用系统函数时,需填写数据源。注:数据权限替换符 $@ -> /* 或 \'\'、 @$ -> */ 或 \'\''}>
                <QuestionCircleOutlined className="mk-form-tip" />
                数据源
              </Tooltip>
            }>
              {getFieldDecorator('dataresource', {
                initialValue: setting.dataresource || ''
              })(<CodeMirror />)}
            </Form.Item>
          </Col> : null}
          {interType === 'system' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'查询时,搜索条件以where条件拼接进入sql,统计时,将数据源中以“@+搜索字段+@”的内容,以搜索条件中的值进行替换后,提交查询,注:查询类型仅在使用系统函数时有效。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                查询类型
              </Tooltip>
            }>
              {getFieldDecorator('queryType', {
                initialValue: setting.queryType || 'query'
              })(
              <Radio.Group>
                <Radio value="query">查询</Radio>
                <Radio value="statistics">统计</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {/* <Col span={8}>
            <Form.Item label="主键">
              {getFieldDecorator('primaryKey', {
                initialValue: setting.primaryKey || ''
              })(
                <Select>
                  {columns.map((option, i) =>
                    <Select.Option key={i} value={option.field}>
                      {option.label}
                    </Select.Option>
                  )}
                </Select>
              )}
            </Form.Item>
          </Col> */}
          {interType === 'system' ? <Col span={8}>
            <Form.Item label="默认sql">
              {getFieldDecorator('execute', {
                initialValue: setting.execute || 'true'
              })(
              <Radio.Group>
                <Radio value="true">执行</Radio>
                <Radio value="false">不执行</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          <Col span={8}>
            <Form.Item label="初始化">
              {getFieldDecorator('onload', {
                initialValue: setting.onload || 'true'
              })(
              <Radio.Group>
                <Radio value="true">加载数据</Radio>
                <Radio value="false">不加载数据</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
        </Row>
      </Form>
    )
  }
}
src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.scss
@@ -1,20 +0,0 @@
.model-datasource-setting-form-box {
  position: relative;
  .model-setting-form {
    .data-source {
      .ant-form-item-label {
        width: 11%;
      }
      .ant-form-item-control-wrapper {
        width: 89%;
      }
      .CodeMirror {
        height: 150px;
      }
    }
  }
  .ant-radio-group {
    white-space: nowrap;
  }
}
src/templates/sharecomponent/settingcomponent/index.jsx
@@ -12,7 +12,7 @@
import CreateFunc from '@/templates/zshare/createfunc'
import CreateInterface from '@/templates/zshare/createinterface'
import './index.scss'
// import './index.scss'
class SettingComponent extends Component {
  static propTpyes = {
@@ -181,14 +181,13 @@
    const { dict, visible, search, menu, record } = this.state
    return (
      <div className="model-menu-setting">
        <SettingOutlined onClick={this.changeSetting} />
      <>
        <SettingOutlined style={{position: 'absolute', fontSize: '18px', right: '7px', top: '5px', padding: '10px', zIndex: 1}} onClick={this.changeSetting} />
        {/* 设置全局配置及列表数据源 */}
        <Modal
          wrapClassName="model-table-setting-verify-modal"
          title="数据源配置"
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={900}
          width={'75vw'}
          maskClosable={false}
          onCancel={() => { MKEmitter.emit('modalStatus', false); this.setState({ visible: false, loading: false })}}
          footer={[
@@ -208,7 +207,7 @@
            wrappedComponentRef={(inst) => this.settingRef = inst}
          />
        </Modal>
      </div>
      </>
    )
  }
}
src/templates/sharecomponent/settingcomponent/index.scss
@@ -1,40 +1 @@
.model-menu-setting {
  > .anticon-setting {
    position: absolute;
    font-size: 18px;
    right: 7px;
    top: 5px;
    padding: 10px;
    z-index: 1;
  }
}
.model-table-setting-verify-modal {
  .ant-modal {
    top: 50px;
    padding-bottom: 5px;
    .ant-modal-body {
      max-height: calc(100vh - 190px);
      min-height: 250px;
      overflow-y: auto;
      padding-top: 10px;
    }
    .ant-modal-body::-webkit-scrollbar {
      width: 7px;
    }
    .ant-modal-body::-webkit-scrollbar-thumb {
      border-radius: 5px;
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
      background: rgba(0, 0, 0, 0.13);
    }
    .ant-modal-body::-webkit-scrollbar-track {
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
      border-radius: 3px;
      border: 1px solid rgba(0, 0, 0, 0.07);
      background: rgba(0, 0, 0, 0);
    }
    .ant-empty-normal {
      margin: 5px 0px;
    }
  }
}
src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx
@@ -8,7 +8,7 @@
import { formRule } from '@/utils/option.js'
import Utils from '@/utils/utils.js'
import asyncComponent from '@/utils/asyncComponent'
import './index.scss'
// import './index.scss'
const CodeMirror = asyncComponent(() => import('@/templates/zshare/codemirror'))
const MKColor = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkColor'))
@@ -218,618 +218,616 @@
    }
    return (
      <div className="model-table-datasource-setting-form-box">
        <Form {...formItemLayout} className="model-setting-form">
          <Row gutter={24}>
            <Col span={12}>
              <Form.Item label="表名">
                {getFieldDecorator('tableName', {
                  initialValue: setting.tableName || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '表名!'
                    },
                    {
                      max: 50,
                      message: '表名最长为50个字符!'
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="表格属性">
                {getFieldDecorator('tableType', {
                  initialValue: setting.tableType
                })(
                  <Radio.Group onChange={(e) => this.setState({tableType: e.target.value})}>
                    <Radio value="">不可选</Radio>
                    <Radio value="radio">单选</Radio>
                    <Radio value="checkbox">多选</Radio>
                  </Radio.Group>
                )}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={dict['header.form.intertype']}>
                {getFieldDecorator('interType', {
                  initialValue: interType,
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.select'] + dict['header.form.intertype'] + '!'
                    },
                  ]
                })(
                <Radio.Group style={{whiteSpace: 'nowrap'}} onChange={(e) => {this.onRadioChange(e, 'interType')}}>
                  <Radio value="system">系统</Radio>
                  <Radio value="inner">内部</Radio>
                  <Radio value="outer">外部</Radio>
                  <Radio value="custom">自定义</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            {interType === 'outer' ? <Col span={12}>
              <Form.Item label={dict['header.form.sysInterface']}>
                {getFieldDecorator('sysInterface', {
                  initialValue: sysInterface,
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.select'] + dict['header.form.sysInterface'] + '!'
                    },
                  ]
                })(
                <Radio.Group onChange={(e) => {this.onRadioChange(e, 'sysInterface')}}>
                  <Radio value="true">{dict['model.true']}</Radio>
                  <Radio value="false">{dict['model.false']}</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'custom' ? <Col span={12}>
              <Form.Item label="参数处理">
                {getFieldDecorator('procMode', {
                  initialValue: procMode,
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.select'] + '参数处理方式!'
                    },
                  ]
                })(
                <Radio.Group style={{whiteSpace: 'nowrap'}} onChange={(e) => {this.onRadioChange(e, 'procMode')}}>
                  <Radio value="script">前置脚本</Radio>
                  <Radio value="inner">前置函数</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'custom' && procMode === 'inner' ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={funcTooltip}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  前置函数
                </Tooltip>
              }>
                {getFieldDecorator('prevFunc', {
                  initialValue: setting.prevFunc || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '前置函数!'
                    },
                    {
                      max: formRule.func.max,
                      message: formRule.func.maxMessage
                    },
                    ...funcRules
                  ]
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
            {interType === 'outer' || interType === 'custom' ? <Col className="data-source" span={24}>
              <Form.Item label="接口地址">
                {getFieldDecorator('interface', {
                  initialValue: setting.interface || (interType === 'outer' && sysInterface === 'true' ? window.GLOB.mainSystemApi : ''),
                  rules: [
                    {
                      required: interType === 'outer' && sysInterface === 'true' ? false : true,
                      message: dict['form.required.input'] + '接口地址!'
                    },
                  ]
                })(<TextArea rows={2} readOnly={interType === 'outer' && sysInterface === 'true'}/>)}
              </Form.Item>
            </Col> : null}
            {(interType === 'outer' && sysInterface !== 'true') || interType === 'custom' ? <Col className="data-source" span={24}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="正式系统所使用的的接口地址。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  正式地址
                </Tooltip>
              }>
                {getFieldDecorator('proInterface', {
                  initialValue: setting.proInterface || ''
                })(<TextArea rows={2} />)}
              </Form.Item>
            </Col> : null}
            {interType === 'custom' ? <Col span={12}>
              <Form.Item label="请求方式">
                {getFieldDecorator('method', {
                  initialValue: setting.method || 'post',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.select'] + '请求方式!'
                    },
                  ]
                })(
                <Radio.Group>
                  <Radio value="get">GET</Radio>
                  <Radio value="post">POST</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'custom' ? <Col span={12}>
              <Form.Item label="数据请求">
                {getFieldDecorator('requestMode', {
                  initialValue: requestMode,
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.select'] + '数据请求方式!'
                    },
                  ]
                })(
                <Radio.Group style={{whiteSpace: 'nowrap'}} onChange={(e) => {this.onRadioChange(e, 'requestMode')}}>
                  <Radio value="system">系统函数</Radio>
                  <Radio value="inner">内部函数</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'inner' || (interType === 'custom' && requestMode === 'inner') ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={funcTooltip}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  内部函数
                </Tooltip>
              }>
                {getFieldDecorator('innerFunc', {
                  initialValue: setting.innerFunc || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '内部函数!'
                    },
                    {
                      max: formRule.func.max,
                      message: formRule.func.maxMessage
                    },
                    ...funcRules
                  ]
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
            {interType === 'outer' ? <Col span={12}>
              <Form.Item label="外部函数">
                {getFieldDecorator('outerFunc', {
                  initialValue: setting.outerFunc || '',
                  rules: [
                    {
                      pattern: formRule.func.pattern,
                      message: formRule.func.message
                    }, {
                      max: formRule.func.max,
                      message: formRule.func.maxMessage
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
            {interType === 'system' || (interType === 'custom' && requestMode === 'system') ? <Col span={24} className="data-source" style={{paddingLeft: '7px'}}>
              <Form.Item help={'数据ID:' + menu.MenuID} labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } label={
                <Tooltip placement="topLeft" title={`使用系统函数时,需填写数据源。注:数据权限替换符 $@ -> /* 或 ''、 @$ -> */ 或 '';查询替换符 $select@ -> /* 或 ''、 @select$ -> */ 或 '';统计替换符 $sum@ -> /* 或 ''、 @sum$ -> */ 或 ''。`}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  数据源
                </Tooltip>
              }>
                {getFieldDecorator('dataresource', {
                  initialValue: setting.dataresource || ''
                })(<CodeMirror />)}
              </Form.Item>
            </Col> : null}
            {interType === 'system' || (interType === 'custom' && requestMode === 'system') ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'查询时,搜索条件以where条件拼接进入sql,统计时,将数据源中以“@+搜索字段+@”的内容,以搜索条件中的值进行替换后,提交查询,注:查询类型仅在使用系统函数时有效。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  查询类型
                </Tooltip>
              }>
                {getFieldDecorator('queryType', {
                  initialValue: setting.queryType || 'query'
                })(
                <Radio.Group>
                  <Radio value="query">查询</Radio>
                  <Radio value="statistics">统计</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'system' || (interType === 'custom' && requestMode === 'system') ? <Col span={12}>
              <Form.Item label="默认sql">
                {getFieldDecorator('default', {
                  initialValue: setting.default || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">执行</Radio>
                  <Radio value="false">不执行</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            <Col span={12}>
              <Form.Item label="主键">
                {getFieldDecorator('primaryKey', {
                  initialValue: setting.primaryKey || ''
                })(
                  <Select onChange={this.primaryKeyChange}>
                    <Select.Option key="empty" value="">未设置</Select.Option>
                    {columns.map((option, i) =>
                      <Select.Option key={i} value={option.value}>
                        {option.text}
                      </Select.Option>
                    )}
                  </Select>
                )}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="默认排序">
                {getFieldDecorator('order', {
                  initialValue: setting.order || 'ID desc',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '默认排序!'
                    },
                    {
                      max: formRule.input.max,
                      message: formRule.input.message
                    }
                  ]
                })(<Input placeholder={'ID asc, UID desc'} autoComplete="off" />)}
              </Form.Item>
            </Col>
            {interType === 'custom' ? <Col span={12}>
              <Form.Item label="回调方式">
                {getFieldDecorator('callbackType', {
                  initialValue: setting.callbackType || 'script'
                })(
                <Radio.Group onChange={(e) => {this.onRadioChange(e, 'callbackType')}}>
                  <Radio value="default">默认脚本</Radio>
                  <Radio value="script">自定义脚本</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'custom' ? <Col span={12}>
              <Form.Item label="回调表名">
                {getFieldDecorator('cbTable', {
                  initialValue: setting.cbTable || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '回调表名!'
                    },
                    {
                      max: formRule.input.max,
                      message: formRule.input.message
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
            {interType === 'custom' ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'同步执行:外部接口调用成功后再请求数据;异步执行:外部接口调用与请求数据同时进行。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  执行方式
                </Tooltip>
              }>
                {getFieldDecorator('execType', {
                  initialValue: setting.execType || 'sync'
                })(
                <Radio.Group>
                  <Radio value="sync">同步</Radio>
                  <Radio value="async">异步</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'custom' ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'如果自定义接口不支持跨域请求,会通过当前系统转发。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  跨域请求
                </Tooltip>
              }>
                {getFieldDecorator('cross', {
                  initialValue: setting.cross || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">支持</Radio>
                  <Radio value="false">不支持</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'custom' ? <Col span={12}>
              <Form.Item label="执行次数">
                {getFieldDecorator('execTime', {
                  initialValue: setting.execTime || 'once'
                })(
                <Radio.Group>
                  <Radio value="always">始终</Radio>
                  <Radio value="once">一次</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            <Col span={12}>
              <Form.Item label="是否分页">
                {getFieldDecorator('laypage', {
                  initialValue: setting.laypage || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">{dict['model.true']}</Radio>
                  <Radio value="false">{dict['model.false']}</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="初始化">
                {getFieldDecorator('onload', {
                  initialValue: setting.onload || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">加载数据</Radio>
                  <Radio value="false">不加载数据</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            {config.Template === 'CommonTable' ? <Col span={12}>
              <Form.Item label="按钮固定">
                {getFieldDecorator('actionfixed', {
                  initialValue: setting.actionfixed === 'true' || setting.actionfixed === true ? 'true' : 'false'
                })(
                <Radio.Group>
                  <Radio value="true">{dict['model.true']}</Radio>
                  <Radio value="false">{dict['model.false']}</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {config.Template === 'CommonTable' ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'含有合并列或表格出现横向滚动时会显示异常,请慎用!'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  表头固定
                </Tooltip>
              }>
                {getFieldDecorator('columnfixed', {
                  initialValue: setting.columnfixed === 'true' || setting.columnfixed === true ? 'true' : 'false'
                })(
                <Radio.Group>
                  <Radio value="true">{dict['model.true']}</Radio>
                  <Radio value="false">{dict['model.false']}</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            <Col span={12}>
              <Form.Item label="边框">
                {getFieldDecorator('bordered', {
                  initialValue: setting.bordered || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">有</Radio>
                  <Radio value="false">无</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'表格的内边距,从大到小依次递减。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  表格大小
                </Tooltip>
              }>
                {getFieldDecorator('size', {
                  initialValue: setting.size || 'middle'
                })(
                <Radio.Group>
                  <Radio value="default">大</Radio>
                  <Radio value="middle">中</Radio>
                  <Radio value="small">小</Radio>
                  <Radio value="mini">迷你</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="事务">
                {getFieldDecorator('transaction', {
                  initialValue: setting.transaction || 'false'
                })(
                <Radio.Group>
                  <Radio value="true">使用</Radio>
                  <Radio value="false">不使用</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="使用急速模式时,表格中的标记、双击事件、格式化、行合并、前缀、后缀、字段透视等效果将无效,且数据都会以文本格式显示。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  模式
                </Tooltip>
              }>
                {getFieldDecorator('tableMode', {
                  initialValue: setting.tableMode || 'compatible'
                })(
                <Radio.Group>
                  <Radio value="compatible">兼容</Radio>
                  <Radio value="fast">急速</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="数据加载时,是否显示加载中的遮罩。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  遮罩
                </Tooltip>
              }>
                {getFieldDecorator('mask', {
                  initialValue: setting.mask || 'show'
                })(
                <Radio.Group>
                  <Radio value="show">显示</Radio>
                  <Radio value="hidden">隐藏</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            {/* <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="在搜索条件存在时,是否显示搜索和重置按钮。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  搜索按钮
                </Tooltip>
              }>
                {getFieldDecorator('show', {
                  initialValue: setting.show || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">显示</Radio>
                  <Radio value="false">隐藏</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> */}
            {tableType !== '' ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="当按钮执行完成并返回主键值时,默认选中主键值对应行。注:在启用无人值守功能时无效。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  首行选中
                </Tooltip>
              }>
                {getFieldDecorator('selected', {
                  initialValue: setting.selected || 'false'
                })(
                <Radio.Group>
                  <Radio value="false">无</Radio>
                  <Radio value="init">初始化</Radio>
                  <Radio value="always">数据加载</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="选择分页时有效,默认为10条。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  每页数量
                </Tooltip>
              }>
                {getFieldDecorator('pageSize', {
                  initialValue: setting.pageSize || '',
                })(<InputNumber min={1} max={500} precision={0} />)}
              </Form.Item>
            </Col>
            {/* <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="高级搜索弹窗的宽度,注:当宽度值小于100时表示占窗口的百分比,大于100时表示宽度的绝对值。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  高级搜索
                </Tooltip>
              }>
                {getFieldDecorator('advanceWidth', {
                  initialValue: setting.advanceWidth || 1000
                })(<InputNumber min={10} max={3000} precision={0}/>)}
              </Form.Item>
            </Col> */}
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="双击表格中行,触发的按钮。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  双击事件
                </Tooltip>
              }>
                {getFieldDecorator('doubleClick', {
                  initialValue: setting.doubleClick || ''
                })(
                  <Select allowClear>
                    {config.action.map(option =>
                      <Select.Option key={option.uuid} value={option.uuid}>{option.label}</Select.Option>
                    )}
                  </Select>
                )}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="空值时高度自适应。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  table高度
                </Tooltip>
              }>
                {getFieldDecorator('height', {
                  initialValue: setting.height
                })(<InputNumber min={10} max={3000} precision={0}/>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="默认值rgba(0, 0, 0, 0.65)">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  字体颜色
                </Tooltip>
              }>
                {getFieldDecorator('color', {
                  initialValue: setting.color
                })(<MKColor config={{initval: setting.color || 'rgba(0, 0, 0, 0.65)'}} />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="字体大小">
                {getFieldDecorator('fontSize', {
                  initialValue: setting.fontSize || 14
                })(<InputNumber min={12} max={50} precision={0}/>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="用于控制行数据是否可选择。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  禁用字段
                </Tooltip>
              }>
                {getFieldDecorator('controlField', {
                  initialValue: setting.controlField || ''
                })(
                  <Select allowClear onChange={(val) => this.setState({controlField: val})}>
                    {columns.map((option, i) =>
                      <Select.Option key={i} value={option.value}>
                        {option.text}
                      </Select.Option>
                    )}
                  </Select>
                )}
              </Form.Item>
            </Col>
            {controlField ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="当字段值与控制值相等时,行数据会禁用,多个值用逗号分隔。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  控制值
                </Tooltip>
              }>
                {getFieldDecorator('controlVal', {
                  initialValue: setting.controlVal || ''
                })(<Input autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
          </Row>
        </Form>
      </div>
      <Form {...formItemLayout}>
        <Row gutter={24}>
          <Col span={8}>
            <Form.Item label="表名">
              {getFieldDecorator('tableName', {
                initialValue: setting.tableName || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '表名!'
                  },
                  {
                    max: 50,
                    message: '表名最长为50个字符!'
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={dict['header.form.intertype']}>
              {getFieldDecorator('interType', {
                initialValue: interType,
                rules: [
                  {
                    required: true,
                    message: dict['form.required.select'] + dict['header.form.intertype'] + '!'
                  },
                ]
              })(
              <Radio.Group onChange={(e) => {this.onRadioChange(e, 'interType')}}>
                <Radio value="system">系统</Radio>
                <Radio value="inner">内部</Radio>
                <Radio value="outer">外部</Radio>
                <Radio value="custom">自定义</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="表格属性">
              {getFieldDecorator('tableType', {
                initialValue: setting.tableType
              })(
                <Radio.Group onChange={(e) => this.setState({tableType: e.target.value})}>
                  <Radio value="">不可选</Radio>
                  <Radio value="radio">单选</Radio>
                  <Radio value="checkbox">多选</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col>
          {interType === 'outer' ? <Col span={8}>
            <Form.Item label={dict['header.form.sysInterface']}>
              {getFieldDecorator('sysInterface', {
                initialValue: sysInterface,
                rules: [
                  {
                    required: true,
                    message: dict['form.required.select'] + dict['header.form.sysInterface'] + '!'
                  },
                ]
              })(
              <Radio.Group onChange={(e) => {this.onRadioChange(e, 'sysInterface')}}>
                <Radio value="true">{dict['model.true']}</Radio>
                <Radio value="false">{dict['model.false']}</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'custom' ? <Col span={8}>
            <Form.Item label="参数处理">
              {getFieldDecorator('procMode', {
                initialValue: procMode,
                rules: [
                  {
                    required: true,
                    message: dict['form.required.select'] + '参数处理方式!'
                  },
                ]
              })(
              <Radio.Group onChange={(e) => {this.onRadioChange(e, 'procMode')}}>
                <Radio value="script">前置脚本</Radio>
                <Radio value="inner">前置函数</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'custom' && procMode === 'inner' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={funcTooltip}>
                <QuestionCircleOutlined className="mk-form-tip" />
                前置函数
              </Tooltip>
            }>
              {getFieldDecorator('prevFunc', {
                initialValue: setting.prevFunc || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '前置函数!'
                  },
                  {
                    max: formRule.func.max,
                    message: formRule.func.maxMessage
                  },
                  ...funcRules
                ]
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col> : null}
          {interType === 'outer' || interType === 'custom' ? <Col className="mk-through-line3" span={24}>
            <Form.Item label="接口地址">
              {getFieldDecorator('interface', {
                initialValue: setting.interface || (interType === 'outer' && sysInterface === 'true' ? window.GLOB.mainSystemApi : ''),
                rules: [
                  {
                    required: interType === 'outer' && sysInterface === 'true' ? false : true,
                    message: dict['form.required.input'] + '接口地址!'
                  },
                ]
              })(<TextArea rows={2} readOnly={interType === 'outer' && sysInterface === 'true'}/>)}
            </Form.Item>
          </Col> : null}
          {(interType === 'outer' && sysInterface !== 'true') || interType === 'custom' ? <Col className="mk-through-line3" span={24}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="正式系统所使用的的接口地址。">
                <QuestionCircleOutlined className="mk-form-tip" />
                正式地址
              </Tooltip>
            }>
              {getFieldDecorator('proInterface', {
                initialValue: setting.proInterface || ''
              })(<TextArea rows={2} />)}
            </Form.Item>
          </Col> : null}
          {interType === 'custom' ? <Col span={8}>
            <Form.Item label="请求方式">
              {getFieldDecorator('method', {
                initialValue: setting.method || 'post',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.select'] + '请求方式!'
                  },
                ]
              })(
              <Radio.Group>
                <Radio value="get">GET</Radio>
                <Radio value="post">POST</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'custom' ? <Col span={8}>
            <Form.Item label="数据请求">
              {getFieldDecorator('requestMode', {
                initialValue: requestMode,
                rules: [
                  {
                    required: true,
                    message: dict['form.required.select'] + '数据请求方式!'
                  },
                ]
              })(
              <Radio.Group onChange={(e) => {this.onRadioChange(e, 'requestMode')}}>
                <Radio value="system">系统函数</Radio>
                <Radio value="inner">内部函数</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'inner' || (interType === 'custom' && requestMode === 'inner') ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={funcTooltip}>
                <QuestionCircleOutlined className="mk-form-tip" />
                内部函数
              </Tooltip>
            }>
              {getFieldDecorator('innerFunc', {
                initialValue: setting.innerFunc || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '内部函数!'
                  },
                  {
                    max: formRule.func.max,
                    message: formRule.func.maxMessage
                  },
                  ...funcRules
                ]
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col> : null}
          {interType === 'outer' ? <Col span={8}>
            <Form.Item label="外部函数">
              {getFieldDecorator('outerFunc', {
                initialValue: setting.outerFunc || '',
                rules: [
                  {
                    pattern: formRule.func.pattern,
                    message: formRule.func.message
                  }, {
                    max: formRule.func.max,
                    message: formRule.func.maxMessage
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col> : null}
          {interType === 'system' || (interType === 'custom' && requestMode === 'system') ? <Col span={24} className="mk-through-line3">
            <Form.Item help={'数据ID:' + menu.MenuID} labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } label={
              <Tooltip placement="topLeft" title={`使用系统函数时,需填写数据源。注:数据权限替换符 $@ -> /* 或 ''、 @$ -> */ 或 '';查询替换符 $select@ -> /* 或 ''、 @select$ -> */ 或 '';统计替换符 $sum@ -> /* 或 ''、 @sum$ -> */ 或 ''。`}>
                <QuestionCircleOutlined className="mk-form-tip" />
                数据源
              </Tooltip>
            }>
              {getFieldDecorator('dataresource', {
                initialValue: setting.dataresource || ''
              })(<CodeMirror />)}
            </Form.Item>
          </Col> : null}
          {interType === 'system' || (interType === 'custom' && requestMode === 'system') ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'查询时,搜索条件以where条件拼接进入sql,统计时,将数据源中以“@+搜索字段+@”的内容,以搜索条件中的值进行替换后,提交查询,注:查询类型仅在使用系统函数时有效。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                查询类型
              </Tooltip>
            }>
              {getFieldDecorator('queryType', {
                initialValue: setting.queryType || 'query'
              })(
              <Radio.Group>
                <Radio value="query">查询</Radio>
                <Radio value="statistics">统计</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'system' || (interType === 'custom' && requestMode === 'system') ? <Col span={8}>
            <Form.Item label="默认sql">
              {getFieldDecorator('default', {
                initialValue: setting.default || 'true'
              })(
              <Radio.Group>
                <Radio value="true">执行</Radio>
                <Radio value="false">不执行</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          <Col span={8}>
            <Form.Item label="主键">
              {getFieldDecorator('primaryKey', {
                initialValue: setting.primaryKey || ''
              })(
                <Select onChange={this.primaryKeyChange}>
                  <Select.Option key="empty" value="">未设置</Select.Option>
                  {columns.map((option, i) =>
                    <Select.Option key={i} value={option.value}>
                      {option.text}
                    </Select.Option>
                  )}
                </Select>
              )}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="默认排序">
              {getFieldDecorator('order', {
                initialValue: setting.order || 'ID desc',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '默认排序!'
                  },
                  {
                    max: formRule.input.max,
                    message: formRule.input.message
                  }
                ]
              })(<Input placeholder={'ID asc, UID desc'} autoComplete="off" />)}
            </Form.Item>
          </Col>
          {interType === 'custom' ? <Col span={8}>
            <Form.Item label="回调方式">
              {getFieldDecorator('callbackType', {
                initialValue: setting.callbackType || 'script'
              })(
              <Radio.Group onChange={(e) => {this.onRadioChange(e, 'callbackType')}}>
                <Radio value="default">默认脚本</Radio>
                <Radio value="script">自定义脚本</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'custom' ? <Col span={8}>
            <Form.Item label="回调表名">
              {getFieldDecorator('cbTable', {
                initialValue: setting.cbTable || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '回调表名!'
                  },
                  {
                    max: formRule.input.max,
                    message: formRule.input.message
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col> : null}
          {interType === 'custom' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'同步执行:外部接口调用成功后再请求数据;异步执行:外部接口调用与请求数据同时进行。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                执行方式
              </Tooltip>
            }>
              {getFieldDecorator('execType', {
                initialValue: setting.execType || 'sync'
              })(
              <Radio.Group>
                <Radio value="sync">同步</Radio>
                <Radio value="async">异步</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'custom' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'如果自定义接口不支持跨域请求,会通过当前系统转发。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                跨域请求
              </Tooltip>
            }>
              {getFieldDecorator('cross', {
                initialValue: setting.cross || 'true'
              })(
              <Radio.Group>
                <Radio value="true">支持</Radio>
                <Radio value="false">不支持</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'custom' ? <Col span={8}>
            <Form.Item label="执行次数">
              {getFieldDecorator('execTime', {
                initialValue: setting.execTime || 'once'
              })(
              <Radio.Group>
                <Radio value="always">始终</Radio>
                <Radio value="once">一次</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          <Col span={8}>
            <Form.Item label="是否分页">
              {getFieldDecorator('laypage', {
                initialValue: setting.laypage || 'true'
              })(
              <Radio.Group>
                <Radio value="true">{dict['model.true']}</Radio>
                <Radio value="false">{dict['model.false']}</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="初始化">
              {getFieldDecorator('onload', {
                initialValue: setting.onload || 'true'
              })(
              <Radio.Group>
                <Radio value="true">加载数据</Radio>
                <Radio value="false">不加载数据</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          {config.Template === 'CommonTable' ? <Col span={8}>
            <Form.Item label="按钮固定">
              {getFieldDecorator('actionfixed', {
                initialValue: setting.actionfixed === 'true' || setting.actionfixed === true ? 'true' : 'false'
              })(
              <Radio.Group>
                <Radio value="true">{dict['model.true']}</Radio>
                <Radio value="false">{dict['model.false']}</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {config.Template === 'CommonTable' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'含有合并列或表格出现横向滚动时会显示异常,请慎用!'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                表头固定
              </Tooltip>
            }>
              {getFieldDecorator('columnfixed', {
                initialValue: setting.columnfixed === 'true' || setting.columnfixed === true ? 'true' : 'false'
              })(
              <Radio.Group>
                <Radio value="true">{dict['model.true']}</Radio>
                <Radio value="false">{dict['model.false']}</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          <Col span={8}>
            <Form.Item label="边框">
              {getFieldDecorator('bordered', {
                initialValue: setting.bordered || 'true'
              })(
              <Radio.Group>
                <Radio value="true">有</Radio>
                <Radio value="false">无</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'表格的内边距,从大到小依次递减。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                表格大小
              </Tooltip>
            }>
              {getFieldDecorator('size', {
                initialValue: setting.size || 'middle'
              })(
              <Radio.Group>
                <Radio value="default">大</Radio>
                <Radio value="middle">中</Radio>
                <Radio value="small">小</Radio>
                <Radio value="mini">迷你</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="事务">
              {getFieldDecorator('transaction', {
                initialValue: setting.transaction || 'false'
              })(
              <Radio.Group>
                <Radio value="true">使用</Radio>
                <Radio value="false">不使用</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="使用急速模式时,表格中的标记、双击事件、格式化、行合并、前缀、后缀、字段透视等效果将无效,且数据都会以文本格式显示。">
                <QuestionCircleOutlined className="mk-form-tip" />
                模式
              </Tooltip>
            }>
              {getFieldDecorator('tableMode', {
                initialValue: setting.tableMode || 'compatible'
              })(
              <Radio.Group>
                <Radio value="compatible">兼容</Radio>
                <Radio value="fast">急速</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="数据加载时,是否显示加载中的遮罩。">
                <QuestionCircleOutlined className="mk-form-tip" />
                遮罩
              </Tooltip>
            }>
              {getFieldDecorator('mask', {
                initialValue: setting.mask || 'show'
              })(
              <Radio.Group>
                <Radio value="show">显示</Radio>
                <Radio value="hidden">隐藏</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          {/* <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="在搜索条件存在时,是否显示搜索和重置按钮。">
                <QuestionCircleOutlined className="mk-form-tip" />
                搜索按钮
              </Tooltip>
            }>
              {getFieldDecorator('show', {
                initialValue: setting.show || 'true'
              })(
              <Radio.Group>
                <Radio value="true">显示</Radio>
                <Radio value="false">隐藏</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> */}
          {tableType !== '' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="当按钮执行完成并返回主键值时,默认选中主键值对应行。注:在启用无人值守功能时无效。">
                <QuestionCircleOutlined className="mk-form-tip" />
                首行选中
              </Tooltip>
            }>
              {getFieldDecorator('selected', {
                initialValue: setting.selected || 'false'
              })(
              <Radio.Group>
                <Radio value="false">无</Radio>
                <Radio value="init">初始化</Radio>
                <Radio value="always">数据加载</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="选择分页时有效,默认为10条。">
                <QuestionCircleOutlined className="mk-form-tip" />
                每页数量
              </Tooltip>
            }>
              {getFieldDecorator('pageSize', {
                initialValue: setting.pageSize || '',
              })(<InputNumber min={1} max={500} precision={0} />)}
            </Form.Item>
          </Col>
          {/* <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="高级搜索弹窗的宽度,注:当宽度值小于100时表示占窗口的百分比,大于100时表示宽度的绝对值。">
                <QuestionCircleOutlined className="mk-form-tip" />
                高级搜索
              </Tooltip>
            }>
              {getFieldDecorator('advanceWidth', {
                initialValue: setting.advanceWidth || 1000
              })(<InputNumber min={10} max={3000} precision={0}/>)}
            </Form.Item>
          </Col> */}
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="双击表格中行,触发的按钮。">
                <QuestionCircleOutlined className="mk-form-tip" />
                双击事件
              </Tooltip>
            }>
              {getFieldDecorator('doubleClick', {
                initialValue: setting.doubleClick || ''
              })(
                <Select allowClear>
                  {config.action.map(option =>
                    <Select.Option key={option.uuid} value={option.uuid}>{option.label}</Select.Option>
                  )}
                </Select>
              )}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="空值时高度自适应。">
                <QuestionCircleOutlined className="mk-form-tip" />
                table高度
              </Tooltip>
            }>
              {getFieldDecorator('height', {
                initialValue: setting.height
              })(<InputNumber min={10} max={3000} precision={0}/>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item className="mk-color-move" label={
              <Tooltip placement="topLeft" title="默认值rgba(0, 0, 0, 0.65)">
                <QuestionCircleOutlined className="mk-form-tip" />
                字体颜色
              </Tooltip>
            }>
              {getFieldDecorator('color', {
                initialValue: setting.color
              })(<MKColor config={{initval: setting.color || 'rgba(0, 0, 0, 0.65)'}} />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="字体大小">
              {getFieldDecorator('fontSize', {
                initialValue: setting.fontSize || 14
              })(<InputNumber min={12} max={50} precision={0}/>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="用于控制行数据是否可选择。">
                <QuestionCircleOutlined className="mk-form-tip" />
                禁用字段
              </Tooltip>
            }>
              {getFieldDecorator('controlField', {
                initialValue: setting.controlField || ''
              })(
                <Select allowClear onChange={(val) => this.setState({controlField: val})}>
                  {columns.map((option, i) =>
                    <Select.Option key={i} value={option.value}>
                      {option.text}
                    </Select.Option>
                  )}
                </Select>
              )}
            </Form.Item>
          </Col>
          {controlField ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="当字段值与控制值相等时,行数据会禁用,多个值用逗号分隔。">
                <QuestionCircleOutlined className="mk-form-tip" />
                控制值
              </Tooltip>
            }>
              {getFieldDecorator('controlVal', {
                initialValue: setting.controlVal || ''
              })(<Input autoComplete="off" />)}
            </Form.Item>
          </Col> : null}
        </Row>
      </Form>
    )
  }
}
src/templates/sharecomponent/settingcomponent/settingform/datasource/index.scss
@@ -1,22 +0,0 @@
.model-table-datasource-setting-form-box {
  position: relative;
  .model-setting-form {
    .data-source {
      .ant-form-item-label {
        width: 16.5%;
      }
      .ant-form-item-control-wrapper {
        width: 83.5%;
      }
      .CodeMirror {
        height: 150px;
      }
    }
  }
  .color-sketch-block {
    position: relative;
    top: 7px;
  }
}
src/templates/sharecomponent/settingcomponent/settingform/index.jsx
@@ -576,7 +576,7 @@
    const { loading, activeKey, setting, defaultSql, columns, scripts, preScripts, cbScripts, status, regoptions, visible, script, scriptValue } = this.state
    return (
      <div className="model-table-setting-form-box" id="model-setting-form-body">
      <div className="model-table-setting-form-box">
        {loading && <Spin size="large" />}
        <Tabs activeKey={activeKey} onChange={this.changeTab}>
          <TabPane tab="数据源" key="setting">
@@ -596,8 +596,8 @@
              自定义脚本
              {scripts.length ? <span className="count-tip">{scripts.length}</span> : null}
            </span>
          } disabled={!(status.interType === 'system' || (status.interType === 'custom' && status.requestMode === 'system'))} key="scripts">
            <BorderOutlined className="full-scripts" onClick={() => {
          } disabled={!(status.interType === 'system' || (status.interType === 'custom' && status.requestMode === 'system'))} key="scripts" id="mk-setting-scripts">
            {scripts.length ? <BorderOutlined className="full-scripts" onClick={() => {
              if (this.scriptsForm && (this.scriptsForm.state.editItem || (this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))))) {
                notification.warning({
                  top: 92,
@@ -607,7 +607,7 @@
                return
              }
              this.setState({visible: true, script: null, scriptValue: ''})
            }}/>
            }}/> : null}
            <CustomScript
              dict={dict}
              setting={setting}
src/templates/sharecomponent/settingcomponent/settingform/index.scss
@@ -60,10 +60,11 @@
  }
  .full-scripts {
    position: absolute;
    right: 0px;
    top: 18px;
    right: 24px;
    top: 0px;
    font-size: 18px;
    color: #1890ff;
    z-index: 1;
  }
}
src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx
@@ -28,6 +28,7 @@
  }
  state = {
    wrapId: Utils.getuuid(),
    editItem: null,
    loading: false,
    usefulFields: '',
@@ -358,7 +359,7 @@
  }
  scrolltop = () => {
    let node = document.getElementById('model-setting-form-body').parentNode
    let node = document.getElementById(this.state.wrapId).parentNode
    if (node && node.scrollTop) {
      let inter = Math.ceil(node.scrollTop / 10)
@@ -406,7 +407,7 @@
  render() {
    const { setting, scripts } = this.props
    const { getFieldDecorator } = this.props.form
    const { usefulFields, scriptsColumns, systemScripts, urlFields } = this.state
    const { usefulFields, scriptsColumns, systemScripts, urlFields, wrapId } = this.state
    const formItemLayout = {
      labelCol: {
        xs: { span: 24 },
@@ -419,7 +420,7 @@
    }
    return (
      <div className="modal-menu-setting-script">
      <div className="modal-menu-setting-script" id={wrapId}>
        <Form {...formItemLayout}>
          <Row gutter={24}>
            <Col span={4}>
src/templates/sharecomponent/treesettingcomponent/index.jsx
@@ -99,10 +99,9 @@
        <SettingOutlined onClick={this.changeSetting} />
        {/* 设置全局配置及列表数据源 */}
        <Modal
          wrapClassName="model-tree-setting-verify-modal"
          title="数据源配置"
          wrapClassName="mk-pop-modal"
          visible={visible}
          width={900}
          width={'75vw'}
          maskClosable={false}
          onCancel={() => { MKEmitter.emit('modalStatus', false); this.setState({ visible: false })}}
          confirmLoading={loading}
src/templates/sharecomponent/treesettingcomponent/index.scss
@@ -8,33 +8,4 @@
    z-index: 1;
    color: #1890ff;
  }
}
.model-tree-setting-verify-modal {
  .ant-modal {
    top: 50px;
    padding-bottom: 5px;
    .ant-modal-body {
      max-height: calc(100vh - 190px);
      overflow-y: auto;
      padding-top: 10px;
    }
    .ant-modal-body::-webkit-scrollbar {
      width: 7px;
    }
    .ant-modal-body::-webkit-scrollbar-thumb {
      border-radius: 5px;
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13);
      background: rgba(0, 0, 0, 0.13);
    }
    .ant-modal-body::-webkit-scrollbar-track {
      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05);
      border-radius: 3px;
      border: 1px solid rgba(0, 0, 0, 0.07);
      background: rgba(0, 0, 0, 0);
    }
    .ant-empty-normal {
      margin: 5px 0px;
    }
  }
}
src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx
@@ -8,7 +8,7 @@
import { formRule } from '@/utils/option.js'
import Utils from '@/utils/utils.js'
import CodeMirror from '@/templates/zshare/codemirror'
import './index.scss'
// import './index.scss'
const { TextArea } = Input
@@ -191,317 +191,315 @@
    }
    return (
      <div className="model-table-datasource-setting-form-box">
        <Form {...formItemLayout} className="model-setting-form">
          <Row gutter={24}>
            <Col span={12}>
              <Form.Item label="表名">
                {getFieldDecorator('tableName', {
                  initialValue: setting.tableName || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '表名!'
                    },
                    {
                      max: 50,
                      message: '表名最长为50个字符!'
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit}/>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="标题">
                {getFieldDecorator('title', {
                  initialValue: setting.title || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '标题!'
                    },
                    {
                      max: formRule.input.max,
                      message: formRule.input.message
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={dict['header.form.intertype']}>
                {getFieldDecorator('interType', {
                  initialValue: interType,
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.select'] + dict['header.form.intertype'] + '!'
                    }
                  ]
                })(
                <Radio.Group onChange={(e) => {this.onRadioChange(e, 'interType')}}>
                  <Radio value="system">系统</Radio>
                  <Radio value="inner">内部</Radio>
                  <Radio value="outer">外部</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            {interType === 'outer' ? <Col span={12}>
              <Form.Item label={dict['header.form.sysInterface']}>
                {getFieldDecorator('sysInterface', {
                  initialValue: setting.sysInterface || 'false',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.select'] + dict['header.form.sysInterface'] + '!'
                    },
                  ]
                })(
                <Radio.Group onChange={(e) => {this.onRadioChange(e, 'sysInterface')}}>
                  <Radio value="true">{dict['model.true']}</Radio>
                  <Radio value="false">{dict['model.false']}</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {interType === 'inner' ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={funcTooltip}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  内部函数
                </Tooltip>
              }>
                {getFieldDecorator('innerFunc', {
                  initialValue: setting.innerFunc || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '内部函数!'
                    },
                    {
                      max: formRule.func.max,
                      message: formRule.func.maxMessage
                    },
                    ...funcRules
                  ]
                })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
              </Form.Item>
            </Col> : null}
            {interType === 'outer' ? <Col span={24} className="data-source">
              <Form.Item label="接口地址">
                {getFieldDecorator('interface', {
                  initialValue: setting.interface || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '接口地址!'
                    }
                  ]
                })(<TextArea rows={2}/>)}
              </Form.Item>
            </Col> : null}
            {interType === 'outer' ? <Col span={12}>
              <Form.Item label="外部函数">
                {getFieldDecorator('outerFunc', {
                  initialValue: setting.outerFunc || '',
                  rules: [
                    {
                      pattern: formRule.func.pattern,
                      message: formRule.func.message
                    }, {
                      max: formRule.func.max,
                      message: formRule.func.maxMessage
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
              </Form.Item>
            </Col> : null}
            {interType === 'system' ? <Col span={24} className="data-source" style={{paddingLeft: '7px'}}>
              <Form.Item help={'数据ID:' + menu.MenuID} labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } label={
                <Tooltip placement="topLeft" title={'使用系统函数时,需填写数据源。注:数据权限替换符 $@ -> /* 或 \'\'、 @$ -> */ 或 \'\''}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  数据源
                </Tooltip>
              }>
                {getFieldDecorator('dataresource', {
                  initialValue: setting.dataresource || ''
                })(<CodeMirror />)}
              </Form.Item>
            </Col> : null}
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'数据值字段。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  Value
                </Tooltip>
              }>
                {getFieldDecorator('valueField', {
                  initialValue: setting.valueField || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + 'Value!'
                    },
                    {
                      pattern: formRule.field.pattern,
                      message: formRule.field.message
                    }, {
                      max: formRule.field.max,
                      message: formRule.field.maxMessage
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'显示文字字段。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  Label
                </Tooltip>
              }>
                {getFieldDecorator('labelField', {
                  initialValue: setting.labelField || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + 'Label!'
                    },
                    {
                      pattern: formRule.field.pattern,
                      message: formRule.field.message
                    }, {
                      max: formRule.field.max,
                      message: formRule.field.maxMessage
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'父级字段。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  Parent
                </Tooltip>
              }>
                {getFieldDecorator('parentField', {
                  initialValue: setting.parentField || '',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + 'Label!'
                    },
                    {
                      pattern: formRule.field.pattern,
                      message: formRule.field.message
                    }, {
                      max: formRule.field.max,
                      message: formRule.field.maxMessage
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="排序">
                {getFieldDecorator('order', {
                  initialValue: setting.order || 'ID desc',
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '排序!'
                    },
                    {
                      max: formRule.input.max,
                      message: formRule.input.message
                    }
                  ]
                })(<Input placeholder={'ID asc, UID desc'} autoComplete="off" onPressEnter={this.handleSubmit} />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'父级字段值与顶级标识相同时,视为顶级节点。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  顶级标识
                </Tooltip>
              }>
                {getFieldDecorator('mark', {
                  initialValue: setting.mark || '',
                  rules: [
                    {
                      max: formRule.input.max,
                      message: formRule.input.message
                    }
                  ]
                })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'栅格布局,每行等分为24列,树形比例可设置为2-12(最大50%)'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
                  宽度
                </Tooltip>
              }>
                {getFieldDecorator('width', {
                  initialValue: setting.width || 5,
                  rules: [
                    {
                      required: true,
                      message: dict['form.required.input'] + '宽度!'
                    }
                  ]
                })(<InputNumber min={2} max={12} precision={0} />)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="搜索">
                {getFieldDecorator('searchable', {
                  initialValue: setting.searchable || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">显示</Radio>
                  <Radio value="false">隐藏</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            {interType === 'system' ? <Col span={12}>
              <Form.Item label="默认sql">
                {getFieldDecorator('default', {
                  initialValue: setting.default || 'true'
                })(
                <Radio.Group>
                  <Radio value="true">执行</Radio>
                  <Radio value="false">不执行</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            <Col span={12}>
              <Form.Item label="显示图标">
                {getFieldDecorator('showIcon', {
                  initialValue: setting.showIcon || 'false'
                })(
                <Radio.Group>
                  <Radio value="true">是</Radio>
                  <Radio value="false">否</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label="显示分割线">
                {getFieldDecorator('showLine', {
                  initialValue: setting.showLine || 'false'
                })(
                <Radio.Group>
                  <Radio value="true">是</Radio>
                  <Radio value="false">否</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col>
          </Row>
        </Form>
      </div>
      <Form {...formItemLayout}>
        <Row gutter={24}>
          <Col span={8}>
            <Form.Item label="表名">
              {getFieldDecorator('tableName', {
                initialValue: setting.tableName || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '表名!'
                  },
                  {
                    max: 50,
                    message: '表名最长为50个字符!'
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit}/>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="标题">
              {getFieldDecorator('title', {
                initialValue: setting.title || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '标题!'
                  },
                  {
                    max: formRule.input.max,
                    message: formRule.input.message
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={dict['header.form.intertype']}>
              {getFieldDecorator('interType', {
                initialValue: interType,
                rules: [
                  {
                    required: true,
                    message: dict['form.required.select'] + dict['header.form.intertype'] + '!'
                  }
                ]
              })(
              <Radio.Group onChange={(e) => {this.onRadioChange(e, 'interType')}}>
                <Radio value="system">系统</Radio>
                <Radio value="inner">内部</Radio>
                <Radio value="outer">外部</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          {interType === 'outer' ? <Col span={8}>
            <Form.Item label={dict['header.form.sysInterface']}>
              {getFieldDecorator('sysInterface', {
                initialValue: setting.sysInterface || 'false',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.select'] + dict['header.form.sysInterface'] + '!'
                  },
                ]
              })(
              <Radio.Group onChange={(e) => {this.onRadioChange(e, 'sysInterface')}}>
                <Radio value="true">{dict['model.true']}</Radio>
                <Radio value="false">{dict['model.false']}</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          {interType === 'inner' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={funcTooltip}>
                <QuestionCircleOutlined className="mk-form-tip" />
                内部函数
              </Tooltip>
            }>
              {getFieldDecorator('innerFunc', {
                initialValue: setting.innerFunc || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '内部函数!'
                  },
                  {
                    max: formRule.func.max,
                    message: formRule.func.maxMessage
                  },
                  ...funcRules
                ]
              })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
            </Form.Item>
          </Col> : null}
          {interType === 'outer' ? <Col span={24} className="mk-through-line3">
            <Form.Item label="接口地址">
              {getFieldDecorator('interface', {
                initialValue: setting.interface || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '接口地址!'
                  }
                ]
              })(<TextArea rows={2}/>)}
            </Form.Item>
          </Col> : null}
          {interType === 'outer' ? <Col span={8}>
            <Form.Item label="外部函数">
              {getFieldDecorator('outerFunc', {
                initialValue: setting.outerFunc || '',
                rules: [
                  {
                    pattern: formRule.func.pattern,
                    message: formRule.func.message
                  }, {
                    max: formRule.func.max,
                    message: formRule.func.maxMessage
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
            </Form.Item>
          </Col> : null}
          {interType === 'system' ? <Col span={24} className="mk-through-line3">
            <Form.Item help={'数据ID:' + menu.MenuID} labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } label={
              <Tooltip placement="topLeft" title={'使用系统函数时,需填写数据源。注:数据权限替换符 $@ -> /* 或 \'\'、 @$ -> */ 或 \'\''}>
                <QuestionCircleOutlined className="mk-form-tip" />
                数据源
              </Tooltip>
            }>
              {getFieldDecorator('dataresource', {
                initialValue: setting.dataresource || ''
              })(<CodeMirror />)}
            </Form.Item>
          </Col> : null}
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'数据值字段。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                Value
              </Tooltip>
            }>
              {getFieldDecorator('valueField', {
                initialValue: setting.valueField || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + 'Value!'
                  },
                  {
                    pattern: formRule.field.pattern,
                    message: formRule.field.message
                  }, {
                    max: formRule.field.max,
                    message: formRule.field.maxMessage
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'显示文字字段。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                Label
              </Tooltip>
            }>
              {getFieldDecorator('labelField', {
                initialValue: setting.labelField || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + 'Label!'
                  },
                  {
                    pattern: formRule.field.pattern,
                    message: formRule.field.message
                  }, {
                    max: formRule.field.max,
                    message: formRule.field.maxMessage
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'父级字段。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                Parent
              </Tooltip>
            }>
              {getFieldDecorator('parentField', {
                initialValue: setting.parentField || '',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + 'Label!'
                  },
                  {
                    pattern: formRule.field.pattern,
                    message: formRule.field.message
                  }, {
                    max: formRule.field.max,
                    message: formRule.field.maxMessage
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="排序">
              {getFieldDecorator('order', {
                initialValue: setting.order || 'ID desc',
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '排序!'
                  },
                  {
                    max: formRule.input.max,
                    message: formRule.input.message
                  }
                ]
              })(<Input placeholder={'ID asc, UID desc'} autoComplete="off" onPressEnter={this.handleSubmit} />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'父级字段值与顶级标识相同时,视为顶级节点。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                顶级标识
              </Tooltip>
            }>
              {getFieldDecorator('mark', {
                initialValue: setting.mark || '',
                rules: [
                  {
                    max: formRule.input.max,
                    message: formRule.input.message
                  }
                ]
              })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="topLeft" title={'栅格布局,每行等分为24列,树形比例可设置为2-12(最大50%)'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                宽度
              </Tooltip>
            }>
              {getFieldDecorator('width', {
                initialValue: setting.width || 5,
                rules: [
                  {
                    required: true,
                    message: dict['form.required.input'] + '宽度!'
                  }
                ]
              })(<InputNumber min={2} max={12} precision={0} />)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="搜索">
              {getFieldDecorator('searchable', {
                initialValue: setting.searchable || 'true'
              })(
              <Radio.Group>
                <Radio value="true">显示</Radio>
                <Radio value="false">隐藏</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          {interType === 'system' ? <Col span={8}>
            <Form.Item label="默认sql">
              {getFieldDecorator('default', {
                initialValue: setting.default || 'true'
              })(
              <Radio.Group>
                <Radio value="true">执行</Radio>
                <Radio value="false">不执行</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col> : null}
          <Col span={8}>
            <Form.Item label="显示图标">
              {getFieldDecorator('showIcon', {
                initialValue: setting.showIcon || 'false'
              })(
              <Radio.Group>
                <Radio value="true">是</Radio>
                <Radio value="false">否</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label="显示分割线">
              {getFieldDecorator('showLine', {
                initialValue: setting.showLine || 'false'
              })(
              <Radio.Group>
                <Radio value="true">是</Radio>
                <Radio value="false">否</Radio>
              </Radio.Group>)}
            </Form.Item>
          </Col>
        </Row>
      </Form>
    )
  }
}
src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.scss
@@ -1,17 +0,0 @@
.model-table-datasource-setting-form-box {
  position: relative;
  .model-setting-form {
    .data-source {
      .ant-form-item-label {
        width: 16.5%;
      }
      .ant-form-item-control-wrapper {
        width: 83.5%;
      }
      .CodeMirror {
        height: 150px;
      }
    }
  }
}
src/templates/sharecomponent/treesettingcomponent/settingform/index.jsx
@@ -249,7 +249,7 @@
    const { activeKey, setting, loading, scripts } = this.state
    return (
      <div className="model-tree-setting-form-box" id="model-setting-form-body">
      <div className="model-tree-setting-form-box">
        {loading && <Spin size="large" />}
        <Tabs activeKey={activeKey} onChange={this.changeTab}>
          <TabPane tab="数据源" key="setting">
@@ -266,7 +266,7 @@
              自定义脚本
              {scripts.length ? <span className="count-tip">{scripts.length}</span> : null}
            </span>
          } key="scripts">
          } key="scripts" id="mk-setting-scripts">
            <CustomScript
              dict={this.props.dict}
              setting={setting}
src/templates/zshare/customscript/index.jsx
@@ -303,7 +303,7 @@
  }
  scrolltop = () => {
    let node = document.getElementById('model-setting-form-body').parentNode
    let node = document.getElementById('mk-setting-scripts')
    if (node && node.scrollTop) {
      let inter = Math.ceil(node.scrollTop / 10)
src/templates/zshare/verifycard/index.jsx
@@ -853,11 +853,14 @@
          if (!_arr.includes('submitdate')) {
            _form.push('submitdate=getdate()')
          }
          if (!_arr.includes('submituserid')) {
            _form.push('submituserid=@userid@')
          }
          if (!_arr.includes('submituser')) {
            _form.push('submituser=@username')
          }
          if (!_arr.includes('submitstaff')) {
            _form.push('submitstaff=@fullname')
          }
          if (!_arr.includes('submituserid')) {
            _form.push('submituserid=@userid@')
          }
        } else {
          if (!_arr.includes('modifydate')) {
@@ -865,6 +868,9 @@
          }
          if (!_arr.includes('modifyuser')) {
            _form.push('modifyuser=@username')
          }
          if (!_arr.includes('modifystaff')) {
            _form.push('modifystaff=@fullname')
          }
          if (!_arr.includes('modifyuserid')) {
            _form.push('modifyuserid=@userid@')
@@ -1180,17 +1186,22 @@
  }
  handleEdit = (record, type) => {
    let node = null
    if (type === 'customverify') {
      this.customForm.edit(record)
      node = document.getElementById('mk-custom-script')
    } else if (type === 'ordercode') {
      this.orderForm.edit(record)
    } else if (type === 'scripts') {
      this.scriptsForm.edit(record)
      node = document.getElementById('mk-normal-script')
    } else if (type === 'cbscripts') {
      this.cbscriptsForm.edit(record)
      node = document.getElementById('mk-callback-script')
    }
    let node = document.getElementById('verify-card-box-tab').parentNode
    // let node = document.getElementById('verify-card-box-tab').parentNode
    if (node && node.scrollTop) {
      let inter = Math.ceil(node.scrollTop / 10)
@@ -1504,7 +1515,8 @@
    }
    return (
      <div id="verify-card-box-tab">
      <div>
        {card.label ? <div className="mk-com-name">{card.label} - 验证信息</div> : null}
        <Tabs activeKey={activeKey} className="verify-card-box" onChange={this.changeTab}>
          {verifyInter === 'system' || card.intertype === 'inner' ? <TabPane tab={
            <span>
@@ -1528,7 +1540,7 @@
              自定义验证
              {verify.customverifys.length ? <span className="count-tip">{verify.customverifys.length}</span> : null}
            </span>
          } key="customverifys">
          } key="customverifys" id="mk-custom-script">
            <CustomForm
              dict={this.props.dict}
              btn={this.props.card}
@@ -1593,7 +1605,7 @@
              自定义脚本
              {verify.scripts.length ? <span className="count-tip">{verify.scripts.length}</span> : null}
            </span>
          } key="scripts">
          } key="scripts" id="mk-normal-script">
            <BorderOutlined className="full-scripts" onClick={() => {
              if (this.scriptsForm && (this.scriptsForm.state.editItem || (this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))))) {
                notification.warning({
@@ -1623,7 +1635,7 @@
              回调脚本
              {verify.cbScripts.length ? <span className="count-tip">{verify.cbScripts.length}</span> : null}
            </span>
          } key="cbScripts">
          } key="cbScripts" id="mk-callback-script">
            <CallBackCustomScript
              btn={this.props.card}
              dict={this.props.dict}
src/templates/zshare/verifycard/index.scss
@@ -74,10 +74,11 @@
  }
  .full-scripts {
    position: absolute;
    right: 0px;
    top: 18px;
    font-size: 18px;
    right: 24px;
    top: 0px;
    font-size: 16px;
    color: #1890ff;
    z-index: 1;
  }
}
.model-custom-scripts-modal {
src/utils/utils.js
@@ -1966,11 +1966,14 @@
      if (!_arr.includes('submitdate')) {
        _form.push('submitdate=getdate()')
      }
      if (!_arr.includes('submituserid')) {
        _form.push('submituserid=@userid@')
      }
      if (!_arr.includes('submituser')) {
        _form.push('submituser=@username')
      }
      if (!_arr.includes('submitstaff')) {
        _form.push('submitstaff=@fullname')
      }
      if (!_arr.includes('submituserid')) {
        _form.push('submituserid=@userid@')
      }
    } else {
      if (!_arr.includes('modifydate')) {
@@ -1979,6 +1982,9 @@
      if (!_arr.includes('modifyuser')) {
        _form.push('modifyuser=@username')
      }
      if (!_arr.includes('modifystaff')) {
        _form.push('modifystaff=@fullname')
      }
      if (!_arr.includes('modifyuserid')) {
        _form.push('modifyuserid=@userid@')
      }
src/views/basedesign/index.jsx
@@ -6,6 +6,8 @@
import Api from '@/api'
import asyncComponent from '@/utils/asyncComponent'
import asyncLoadComponent from '@/utils/asyncLoadComponent'
import '@/assets/css/design.scss'
import './index.scss'
const _locale = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
src/views/design/sidemenu/thdmenuplus/index.jsx
@@ -320,8 +320,7 @@
                  return (
                    <Col key={template.type + index} className={template.disabled ? 'disabled' : ''} title={template.disTitle || ''} span={6}>
                      <Card
                        title={template.title}>
                      <Card title={<div className="title-wrap"><div>{template.title}</div><div>{template.MenuNo}</div></div>}>
                        <img onClick={() => {this.previewPicture(template)}} src={template.url} alt=""/>
                        <div className="card-operation">
                          <Button type="primary" onClick={() => {this.useTemplate(template, 'user')}}>使用模板</Button>
src/views/design/sidemenu/thdmenuplus/index.scss
@@ -70,6 +70,9 @@
      .ant-col {
        padding: 10px;
      }
      .ant-card-head {
        padding: 0 10px;
      }
      .ant-col.disabled {
        cursor: not-allowed;
        .ant-card-head-title {
@@ -84,6 +87,15 @@
      }
      .ant-card-head-title {
        text-align: center;
        .title-wrap {
          position: relative;
          top: -8px;
          height: 30px;
          div {
            overflow: hidden;
            text-overflow: ellipsis;
          }
        }
      }
      .ant-card-body {
        padding: 2px;
src/views/menudesign/index.jsx
@@ -19,6 +19,7 @@
import MenuUtils from '@/utils/utils-custom.js'
import asyncComponent from '@/utils/asyncComponent'
import '@/assets/css/design.scss'
import './index.scss'
const { Panel } = Collapse
src/views/mobdesign/index.jsx
@@ -17,6 +17,7 @@
import MenuUtils from '@/utils/utils-custom.js'
import asyncComponent from '@/utils/asyncComponent'
import '@/assets/css/design.scss'
import './index.scss'
const { Panel } = Collapse
src/views/pcdesign/index.jsx
@@ -17,6 +17,7 @@
import MenuUtils from '@/utils/utils-custom.js'
import asyncComponent from '@/utils/asyncComponent'
import '@/assets/css/design.scss'
import './index.scss'
const { Panel } = Collapse
src/views/popdesign/index.jsx
@@ -13,6 +13,7 @@
// import antdEnUS from 'antd/es/locale/en_US'
import antdZhCN from 'antd/es/locale/zh_CN'
import '@/assets/css/design.scss'
import './index.scss'
const _locale = antdZhCN
src/views/tabledesign/index.jsx
@@ -13,6 +13,7 @@
import MKEmitter from '@/utils/events.js'
import asyncComponent from '@/utils/asyncComponent'
import '@/assets/css/design.scss'
import './index.scss'
const { Panel } = Collapse