king
2022-07-08 4313d9ccea6534b1da71baa1bf499f045d3c1f0b
2022-07-08
11个文件已修改
2个文件已添加
705 ■■■■■ 已修改文件
public/README.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/options.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-bar/index.jsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/setupProxy.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-bar-line/index.jsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/funczip/index.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/formconfig.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/baseform/index.jsx 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/baseform/index.scss 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/billcodeform/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/index.jsx 302 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/design/index.jsx 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/README.txt
@@ -10,6 +10,7 @@
defaultApp        -- 默认应用,系统默认打开某个子应用时需填写应用编码
defaultLang       -- 打开的子应用语言类型,默认为zh-CN
WXAppID           -- 使用公众号时,绑定的公众号ID
WXminiAppID       -- 使用微信小程序时,绑定的小程序ID
debugger          -- 值为true时开启调试模式,开启后移动端子应用中会有控制台
licenseKey        -- 许可密钥,在内部网络中使用系统时,会跳过epc验证
probation         -- 试用期(YYYY-MM-DD),在正式系统中,试用期内调用系统接口的脚本会记录下来
public/options.json
@@ -9,6 +9,7 @@
  "defaultApp": "mk",
  "defaultLang": "zh-CN",
  "WXAppID": "",
  "WXminiAppID": "",
  "debugger": false,
  "licenseKey": "",
  "probation": "",
src/api/index.js
@@ -29,7 +29,7 @@
axios.interceptors.request.use((config) => {
  if (config.url.includes('LoginAndRedirect') || config.url.includes('getjsonresult') || config.url.includes('wxNativePay')) {
    config.data = qs.stringify(config.data)
  } else if (config.url.includes('Upload') || config.url.includes('doupload') || config.url.includes('dopreload')) {
  } else if (config.url.includes('doupload') || config.url.includes('dopreload')) {
    config.headers = { 'Content-Type': 'multipart/form-data' }
  } else if (config.method === 'post' && config.data) {
    config.data = JSON.stringify(config.data)
@@ -111,9 +111,32 @@
   * @description 微信业务请求
   */
  wxRequest (url, method, param) {
    let _url = window.GLOB.location + ':8080/' + window.GLOB.service + url
    let _url = document.location.origin + '/' + window.GLOB.service + url
    if (process.env.NODE_ENV !== 'production') {
      _url = document.location.origin + '/' + url
    }
    if (param) {
      return axios({
        url: _url,
        method,
        data: param
      })
    }
    return axios({
      url: _url,
      method
    })
  }
  /**
   * @description 微信业务请求
   */
  wxNginxRequest (url, method, param) {
    let _url = window.GLOB.location + ':8080/' + url
    if (process.env.NODE_ENV === 'production') {
      _url = document.location.origin + ':8080/' + window.GLOB.service + url
      _url = document.location.origin + ':8080/' + url
    }
    
    if (param) {
@@ -122,12 +145,12 @@
        method,
        data: param
      })
    } else {
      return axios({
        url: _url,
        method
      })
    }
    return axios({
      url: _url,
      method
    })
  }
  /**
@@ -895,8 +918,13 @@
   * @description 获取微信支付二维码
   */
  getWxNativePay (param) {
    let _url = document.location.origin + '/' + window.GLOB.service + 'wxpay/wxNativePay'
    if (process.env.NODE_ENV !== 'production') {
      _url = document.location.origin + '/wxpay/wxNativePay'
    }
    return axios({
      url: '/wxpay/wxNativePay',
      url: _url,
      method: 'post',
      data: param
    })
src/menu/components/chart/antv-bar/index.jsx
@@ -788,13 +788,17 @@
      }
    }
    const view2 = chart.createView({
      region: {
        start: { x: 0, y: 0 },
        end: { x: 1, y: 1 }
      },
      padding
    })
    let view2 = chart // 无独立柱状图时不做分面
    if (Bar_axis.length) {
      view2 = chart.createView({
        region: {
          start: { x: 0, y: 0 },
          end: { x: 1, y: 1 }
        },
        padding
      })
    }
    view2.data(dv.rows)
src/setupProxy.js
@@ -1,9 +1,7 @@
// const proxy = require('http-proxy-middleware')
// const host = 'http://qingqiumarket.cn'
// const service = 'mkwms/'
const proxy = require('http-proxy-middleware')
const options = require('../public/options.json')
module.exports = function(app) {}
// module.exports = function(app) {
module.exports = function(app) {
//   app.use(proxy('/webapi', { 
//     target: `${host}/${service}webapi`,
//     secure: false,
@@ -32,14 +30,11 @@
//     }
//   }))
//   app.use(proxy('/wxpay', {
//     target: `${host}/${service}wxpay`,
//     secure: false,
//     changeOrigin: true,
//     pathRewrite: {
//     '^/wxpay': '/'
//     }
//   }))
  app.use(proxy('/wxpay', {
    target: `${options.host}/${options.service}`,
    secure: false,
    changeOrigin: true
  }))
//   app.use(proxy('/trans', {
//     target: `${host}/${service}`,
@@ -52,4 +47,4 @@
//     secure: false,
//     changeOrigin: true
//   }))
// }
}
src/tabviews/custom/components/chart/antv-bar-line/index.jsx
@@ -1329,13 +1329,17 @@
      }
    }
    const view2 = chart.createView({
      region: {
        start: { x: 0, y: 0 },
        end: { x: 1, y: 1 }
      },
      padding
    })
    let view2 = chart
    if (plot.Bar_axis) {
      view2 = chart.createView({
        region: {
          start: { x: 0, y: 0 },
          end: { x: 1, y: 1 }
        },
        padding
      })
    }
    view2.data(dv.rows)
    view2.legend(false)
src/tabviews/zshare/actionList/funczip/index.jsx
@@ -123,13 +123,6 @@
      return
    }
    // Api.wxRequest('wxpay/getaccesstoken', 'get').then(res => {
    //   let token = res.oa_access_token
    //   Api.wxRequest(`cgi-bin/template/get_all_private_template?access_token=${token}`, 'get')
    // })
    this.setState({
      loading: true
    })
src/templates/zshare/formconfig.jsx
@@ -878,7 +878,6 @@
 */
export function getActionForm (card, config, usefulFields, type, menulist = [], printTemps = [], tabs = []) {
  let columns = (config.columns || []).filter(col => col.field)
  usefulFields = []
  let opentypes = [
    {
src/templates/zshare/verifycard/baseform/index.jsx
New file
@@ -0,0 +1,250 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
// import { is, fromJS } from 'immutable'
import { Form, Row, Col, Select, Radio, Tooltip } from 'antd'
import { QuestionCircleOutlined } from '@ant-design/icons'
// import './index.scss'
class BillCodeForm extends Component {
  static propTpyes = {
    card: PropTypes.object,
    verify: PropTypes.object,
    unionFields: PropTypes.array,
    notes: PropTypes.array,
    onChange: PropTypes.func
  }
  state = {
    wxTemps: [],
    miniTemps: [],
  }
  UNSAFE_componentWillMount() {
  }
  componentDidMount() {
    let wxTemps = sessionStorage.getItem('wxTemplates')
    let miniTemps = sessionStorage.getItem('wxMiniTemplates')
    wxTemps = wxTemps ? JSON.parse(wxTemps) : []
    miniTemps = miniTemps ? JSON.parse(miniTemps) : []
    this.setState({wxTemps, miniTemps})
  }
  handleConfirm = () => {
    const { verify } = this.props
    let error = ''
    if (verify.noteEnable === 'true' && !verify.noteCode) { // 开启短信时,需要模板编码
      error = '开启短信时,需要选择短信模板!'
    } else if (verify.accountdate === 'true' && !verify.accountfield) {
      error = '开启账期时,需要选择验证公司!'
    } else if (verify.wxNote === 'true') {
      if (!verify.wxTemplateId) {
        error = '开启公众号消息推送时,需要选择消息模板!'
      }
    }
    return error
  }
  onOptionChange = (value, key) => {
    const { verify } = this.props
    let _verify = {...verify, [key]: value}
    if (_verify.noteEnable !== 'true') {
      _verify.noteCode = ''
    }
    if (_verify.accountdate !== 'true') {
      _verify.accountfield = ''
      _verify.voucherdate = ''
    }
    if (_verify.wxNote !== 'true') {
      _verify.wxTemplateId = ''
    }
    this.props.onChange(_verify)
  }
  onNoteCodeChange = (val, option) => {
    const { verify } = this.props
    let _verify = {...verify, noteCode: val, noteId: option.props.id}
    this.props.onChange(_verify)
  }
  onWxTemplateChange = (val) => {
    const { verify } = this.props
    let _verify = {...verify, wxTemplateId: val}
    this.props.onChange(_verify)
  }
  render() {
    const { unionFields, verify, notes, card } = this.props
    // const { getFieldDecorator } = this.props.form
    const { wxTemps } = this.state
    const formItemLayout = {
      labelCol: {
        xs: { span: 24 },
        sm: { span: 8 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      }
    }
    return (
      <Form {...formItemLayout}>
        <Row gutter={24}>
          {card.sqlType !== 'custom' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'默认sql执行顺序为自定义脚本之前'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                默认sql
              </Tooltip>
            }>
              <Radio.Group value={verify.default} onChange={(e) => {this.onOptionChange(e.target.value, 'default')}}>
                <Radio value="true">执行</Radio>
                <Radio value="false">不执行</Radio>
              </Radio.Group>
            </Form.Item>
          </Col> : null}
          <Col span={8}>
            <Form.Item label={'失效验证'}>
              <Radio.Group value={verify.invalid} onChange={(e) => {this.onOptionChange(e.target.value, 'invalid')}}>
                <Radio value="true">开启</Radio>
                <Radio value="false">不开启</Radio>
              </Radio.Group>
            </Form.Item>
          </Col>
          <Col span={8}>
            <Form.Item label={'账期验证'}>
              <Radio.Group value={verify.accountdate} onChange={(e) => {this.onOptionChange(e.target.value, 'accountdate')}}>
                <Radio value="true">开启</Radio>
                <Radio value="false">不开启</Radio>
              </Radio.Group>
            </Form.Item>
          </Col>
          {verify.accountdate === 'true' ? <Col span={8}>
            <Form.Item label={'验证公司'} required>
              <Select defaultValue={verify.accountfield || ''} onChange={(val) => {this.onOptionChange(val, 'accountfield')}}>
                {unionFields.map(option =>
                  <Select.Option key={option.uuid} value={option.field}>
                    {option.label}
                  </Select.Option>
                )}
              </Select>
            </Form.Item>
          </Col> : null}
          {verify.accountdate === 'true' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'验证日期为空时,默认为当天。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                验证日期
              </Tooltip>
            }>
              <Select allowClear defaultValue={verify.voucherdate || ''} onChange={(val) => {this.onOptionChange(val, 'voucherdate')}}>
                {unionFields.map(option =>
                  <Select.Option key={option.uuid} value={option.field}>
                    {option.label}
                  </Select.Option>
                )}
              </Select>
            </Form.Item>
          </Col> : null}
          <Col span={24}></Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'选择发送短信时,需完善短信设置。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                发送短信
              </Tooltip>
            }>
              <Radio.Group value={verify.noteEnable} onChange={(e) => {this.onOptionChange(e.target.value, 'noteEnable')}}>
                <Radio value="true">开启</Radio>
                <Radio value="false">不开启</Radio>
              </Radio.Group>
            </Form.Item>
          </Col>
          {verify.noteEnable === 'true' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={<span>短信模板添加地址:<a target="_blank" rel="noopener noreferrer" href="https://cloud.mk9h.cn/admin/index.html">云中心</a>-&gt;应用服务-&gt;开发者中心-&gt;短信模板。</span>}>
                <QuestionCircleOutlined className="mk-form-tip" />
                短信模板
              </Tooltip>
            } required>
              <Select value={verify.noteCode} onSelect={this.onNoteCodeChange}>
                {notes.map(option =>
                  <Select.Option key={option.value} id={option.id} value={option.value}>
                    {option.name}
                  </Select.Option>
                )}
              </Select>
            </Form.Item>
          </Col> : null}
          {verify.noteEnable === 'true' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'实时发送最多同时发送5个用户,定时发送最多同时发送100个用户。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                发送方式
              </Tooltip>
            }>
              <Radio.Group value={verify.noteType} onChange={(e) => {this.onOptionChange(e.target.value, 'noteType')}}>
                <Radio value="Y">实时</Radio>
                <Radio value="N">定时</Radio>
              </Radio.Group>
            </Form.Item>
          </Col> : null}
          {verify.noteEnable === 'true' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'当向多个用户发送短信时,短信内容是否相同。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                短信内容
              </Tooltip>
            }>
              <Radio.Group value={verify.noteTemp} onChange={(e) => {this.onOptionChange(e.target.value, 'noteTemp')}}>
                <Radio value="Y">相同</Radio>
                <Radio value="N">不同</Radio>
              </Radio.Group>
            </Form.Item>
          </Col> : null}
          <Col span={24}></Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'请在服务器完成公众号配置。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                公众号消息
              </Tooltip>
            }>
              <Radio.Group value={verify.wxNote} onChange={(e) => {this.onOptionChange(e.target.value, 'wxNote')}}>
                <Radio value="true">开启</Radio>
                <Radio value="false">不开启</Radio>
              </Radio.Group>
            </Form.Item>
          </Col>
          {verify.wxNote === 'true' ? <Col span={8}>
            <Form.Item label="消息模板" required>
              <Select value={verify.wxTemplateId} onSelect={this.onWxTemplateChange}>
                {wxTemps.map(option =>
                  <Select.Option key={option.template_id} value={option.template_id}>
                    {option.title}
                  </Select.Option>
                )}
              </Select>
            </Form.Item>
          </Col> : null}
        </Row>
      </Form>
    )
  }
}
export default Form.create()(BillCodeForm)
src/templates/zshare/verifycard/baseform/index.scss
src/templates/zshare/verifycard/billcodeform/index.jsx
@@ -6,8 +6,7 @@
import './index.scss'
class UniqueForm extends Component {
class BillCodeForm extends Component {
  static propTpyes = {
    dict: PropTypes.object,         // 字典项
    btn: PropTypes.object,          // 按钮信息
@@ -377,4 +376,4 @@
  }
}
export default Form.create()(UniqueForm)
export default Form.create()(BillCodeForm)
src/templates/zshare/verifycard/index.jsx
@@ -1,8 +1,8 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Form, Tabs, Row, Col, Radio, Button, Select, Popconfirm, notification, Modal, message, InputNumber, Tooltip, Typography } from 'antd'
import { QuestionCircleOutlined, CheckCircleOutlined, StopOutlined, EditOutlined, SwapOutlined, DeleteOutlined, ExclamationOutlined, BorderOutlined } from '@ant-design/icons'
import { Form, Tabs, Row, Col, Button, Popconfirm, notification, Modal, message, InputNumber, Typography } from 'antd'
import { CheckCircleOutlined, StopOutlined, EditOutlined, SwapOutlined, DeleteOutlined, ExclamationOutlined, BorderOutlined } from '@ant-design/icons'
import Toast from 'antd-mobile/es/components/toast'
import Dialog from 'antd-mobile/es/components/dialog'
import moment from 'moment'
@@ -10,6 +10,7 @@
import Api from '@/api'
import Utils from '@/utils/utils.js'
import options from '@/store/options.js'
import BaseForm from './baseform'
import UniqueForm from './uniqueform'
import ContrastForm from './contrastform'
import CustomForm from './customform'
@@ -39,6 +40,8 @@
  state = {
    initsql: '',            // sql验证时变量声明及赋值
    verifyInter: 'system',  // 接口类型
    activeKey: 'base',
    appType: sessionStorage.getItem('appType'),
    notes: [],              // 短信模板
    setting: null,
@@ -550,6 +553,7 @@
    }
    _verify.default = _verify.default || 'true'
    _verify.wxNote = _verify.wxNote || 'false'         // 公众号消息推送是否开启
    _verify.noteEnable = _verify.noteEnable || 'false' // 短信发送是否开启
    _verify.noteType = _verify.noteType || 'N'         // 短信发送模式:Y(实时)、N(定时)
    _verify.noteTemp = _verify.noteTemp || 'Y'         // 短信发送模板:Y(相同)、N(不同)
@@ -590,7 +594,11 @@
      item.$index = i + 1
    })
    let verifyInter = card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? 'system' : 'inner'
    this.setState({
      activeKey: verifyInter === 'system' ? 'base' : 'tip',
      verifyInter: verifyInter,
      setting: config.setting || {},
      verify: _verify,
      oriVerify: fromJS(_verify).toJS()
@@ -1147,39 +1155,6 @@
    this.setState({ verify })
  }
  onNoteCodeChange = (val, option) => {
    const { verify } = this.state
    this.setState({
      verify: {...verify, noteCode: val, noteId: option.props.id}
    })
  }
  onOptionChange = (e, key) => {
    const { verify } = this.state
    let value = e.target.value
    this.setState({
      verify: {...verify, [key]: value}
    })
  }
  changeAccField = (val) => {
    const { verify } = this.state
    this.setState({
      verify: {...verify, accountfield: val}
    })
  }
  changeAccDate = (val) => {
    const { verify } = this.state
    this.setState({
      verify: {...verify, voucherdate: val}
    })
  }
  handleDelete = (record, type) => {
    const { verify } = this.state
@@ -1383,8 +1358,21 @@
  handleConfirm = () => {
    const { card } = this.props
    const { setting } = this.state
    const { setting, activeKey } = this.state
    let verify = fromJS(this.state.verify).toJS()
    if (activeKey === 'base') {
      let msg = this.baseForm.handleConfirm()
      if (msg) {
        notification.warning({
          top: 92,
          message: msg,
          duration: 5
        })
        return Promise.reject()
      }
    }
    
    // 表单提交时检查输入值是否正确
    return new Promise((resolve, reject) => {
@@ -1392,13 +1380,6 @@
        notification.warning({
          top: 92,
          message: '不执行默认sql时,必须设置自定义脚本!',
          duration: 5
        })
        return
      } else if (verify.accountdate === 'true' && !verify.accountfield) {
        notification.warning({
          top: 92,
          message: '开启账期时,需要选择验证公司!',
          duration: 5
        })
        return
@@ -1422,12 +1403,6 @@
        msg = '自定义脚本'
      } else if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) {
        msg = '自定义脚本'
      }
      if (verify.noteEnable === 'true' && !verify.noteCode) { // 开启短信时,需要模板编码
        verify.noteEnable = 'false'
      } else if (verify.noteEnable !== 'true' && verify.noteCode) {
        verify.noteCode = ''
      }
      if (window.GLOB.funcs && window.GLOB.funcs.length > 0) {
@@ -1477,6 +1452,26 @@
    })
  }
  changeTab = (val) => {
    const { activeKey } = this.state
    if (activeKey === 'base') {
      let msg = this.baseForm.handleConfirm()
      if (msg) {
        notification.warning({
          top: 92,
          message: msg,
          duration: 5
        })
        return
      }
    }
    this.setState({
      activeKey: val
    })
  }
  /**
   * @description 组件销毁,清除state更新
   */
@@ -1488,7 +1483,7 @@
  render() {
    const { card } = this.props
    const { verify, fields, visible, uniqueFields, uniqueColumns, unionFields, onceUniqueColumns, columnsFields, contrastColumns, customColumns, orderColumns, scriptsColumns, cbScriptsColumns, orderModular, orderModularDetail, voucher, voucherDetail, notes, appType } = this.state
    const { activeKey, verifyInter, verify, fields, visible, uniqueFields, uniqueColumns, unionFields, onceUniqueColumns, columnsFields, contrastColumns, customColumns, orderColumns, scriptsColumns, cbScriptsColumns, orderModular, orderModularDetail, voucher, voucherDetail, notes, appType } = this.state
    const formItemLayout = {
      labelCol: {
        xs: { span: 24 },
@@ -1502,201 +1497,30 @@
    return (
      <div id="verify-card-box-tab">
        <Tabs defaultActiveKey="1" className="verify-card-box">
          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
        <Tabs activeKey={activeKey} className="verify-card-box" onChange={this.changeTab}>
          {verifyInter === 'system' ? <TabPane tab={
            <span>
              基础验证
              {verify.default === 'false' ? <span className="count-tip"><ExclamationOutlined style={{color: 'orange'}}/></span> : null}
            </span>
          } key="1">
            <Form {...formItemLayout}>
              <Row gutter={24}>
                {this.props.card.sqlType !== 'custom' ? <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={'默认sql执行顺序为自定义脚本之前'}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      默认sql
                    </Tooltip>
                  }>
                    <Radio.Group value={verify.default} onChange={(e) => {this.onOptionChange(e, 'default')}}>
                      <Radio value="true">执行</Radio>
                      <Radio value="false">不执行</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col> : null}
                <Col span={8}>
                  <Form.Item label={'账期验证'}>
                    <Radio.Group value={verify.accountdate} onChange={(e) => {this.onOptionChange(e, 'accountdate')}}>
                      <Radio value="true">开启</Radio>
                      <Radio value="false">不开启</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col>
                {verify.accountdate === 'true' ? <Col span={8}>
                  <Form.Item label={'验证公司'} required>
                    <Select defaultValue={verify.accountfield || ''} onChange={this.changeAccField}>
                      {unionFields.map(option =>
                        <Select.Option key={option.uuid} value={option.field}>
                          {option.label}
                        </Select.Option>
                      )}
                    </Select>
                  </Form.Item>
                </Col> : null}
                {verify.accountdate === 'true' ? <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={'验证日期为空时,默认为当天。'}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      验证日期
                    </Tooltip>
                  }>
                    <Select allowClear defaultValue={verify.voucherdate || ''} onChange={this.changeAccDate}>
                      {unionFields.map(option =>
                        <Select.Option key={option.uuid} value={option.field}>
                          {option.label}
                        </Select.Option>
                      )}
                    </Select>
                  </Form.Item>
                </Col> : null}
                <Col span={8}>
                  <Form.Item label={'失效验证'}>
                    <Radio.Group value={verify.invalid} onChange={(e) => {this.onOptionChange(e, 'invalid')}}>
                      <Radio value="true">开启</Radio>
                      <Radio value="false">不开启</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col>
                <Col span={24}></Col>
                <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={'选择发送短信时,需完善短信设置。'}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      发送短信
                    </Tooltip>
                  }>
                    <Radio.Group value={verify.noteEnable} onChange={(e) => {this.onOptionChange(e, 'noteEnable')}}>
                      <Radio value="true">开启</Radio>
                      <Radio value="false">不开启</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col>
                {verify.noteEnable === 'true' ? <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={<span>短信模板添加地址:<a target="_blank" rel="noopener noreferrer" href="https://cloud.mk9h.cn/admin/index.html">云中心</a>-&gt;应用服务-&gt;开发者中心-&gt;短信模板。</span>}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      短信模板
                    </Tooltip>
                  }>
                    <Select value={verify.noteCode} onSelect={this.onNoteCodeChange}>
                      {notes.map(option =>
                        <Select.Option key={option.value} id={option.id} value={option.value}>
                          {option.name}
                        </Select.Option>
                      )}
                    </Select>
                  </Form.Item>
                </Col> : null}
                {verify.noteEnable === 'true' ? <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={'实时发送最多同时发送5个用户,定时发送最多同时发送100个用户。'}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      发送方式
                    </Tooltip>
                  }>
                    <Radio.Group value={verify.noteType} onChange={(e) => {this.onOptionChange(e, 'noteType')}}>
                      <Radio value="Y">实时</Radio>
                      <Radio value="N">定时</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col> : null}
                {verify.noteEnable === 'true' ? <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={'当向多个用户发送短信时,短信内容是否相同。'}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      短信内容
                    </Tooltip>
                  }>
                    <Radio.Group value={verify.noteTemp} onChange={(e) => {this.onOptionChange(e, 'noteTemp')}}>
                      <Radio value="Y">相同</Radio>
                      <Radio value="N">不同</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col> : null}
                {/* <Col span={24}></Col>
                <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={'选择发送短信时,需完善短信设置。'}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      公众号消息
                    </Tooltip>
                  }>
                    <Radio.Group value={verify.wxEnable} onChange={(e) => {this.onOptionChange(e, 'noteEnable')}}>
                      <Radio value="true">开启</Radio>
                      <Radio value="false">不开启</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col>
                {verify.noteEnable === 'true' ? <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={<span>短信模板添加地址:<a target="_blank" rel="noopener noreferrer" href="https://cloud.mk9h.cn/admin/index.html">云中心</a>-&gt;应用服务-&gt;开发者中心-&gt;短信模板。</span>}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      短信模板
                    </Tooltip>
                  }>
                    <Select value={verify.noteCode} onSelect={this.onNoteCodeChange}>
                      {notes.map(option =>
                        <Select.Option key={option.value} id={option.id} value={option.value}>
                          {option.name}
                        </Select.Option>
                      )}
                    </Select>
                  </Form.Item>
                </Col> : null}
                {verify.noteEnable === 'true' ? <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={'实时发送最多同时发送5个用户,定时发送最多同时发送100个用户。'}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      发送方式
                    </Tooltip>
                  }>
                    <Radio.Group value={verify.noteType} onChange={(e) => {this.onOptionChange(e, 'noteType')}}>
                      <Radio value="Y">实时</Radio>
                      <Radio value="N">定时</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col> : null}
                {verify.noteEnable === 'true' ? <Col span={8}>
                  <Form.Item label={
                    <Tooltip placement="bottomLeft" title={'当向多个用户发送短信时,短信内容是否相同。'}>
                      <QuestionCircleOutlined className="mk-form-tip" />
                      短信内容
                    </Tooltip>
                  }>
                    <Radio.Group value={verify.noteTemp} onChange={(e) => {this.onOptionChange(e, 'noteTemp')}}>
                      <Radio value="Y">相同</Radio>
                      <Radio value="N">不同</Radio>
                    </Radio.Group>
                  </Form.Item>
                </Col> : null} */}
              </Row>
            </Form>
          } key="base">
            <BaseForm card={card} unionFields={unionFields} verify={verify} notes={notes} onChange={(verify) => this.setState({verify})} wrappedComponentRef={(inst) => this.baseForm = inst}/>
          </TabPane> : null}
          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
          {verifyInter === 'system' ? <TabPane tab={
            <span>
              比较验证
              {verify.contrasts.length ? <span className="count-tip">{verify.contrasts.length}</span> : null}
            </span>
          } key="2x">
          } key="contrasts">
            <ContrastForm dict={this.props.dict} contrastChange={this.contrastChange}/>
            <EditTable actions={['edit', 'move', 'copy', 'del', 'status']} type="contrastverify" data={verify.contrasts} columns={contrastColumns} onChange={(contrasts) => this.setState({verify: {...verify, contrasts}})}/>
          </TabPane> : null}
          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
          {verifyInter === 'system' ? <TabPane tab={
            <span>
              自定义验证
              {verify.customverifys.length ? <span className="count-tip">{verify.customverifys.length}</span> : null}
            </span>
          } key="3">
          } key="customverifys">
            <CustomForm
              dict={this.props.dict}
              btn={this.props.card}
@@ -1707,12 +1531,12 @@
            />
            <EditTable actions={['move']} data={verify.customverifys} columns={customColumns} onChange={(customverifys) => {this.setState({verify: {...verify, customverifys}})}}/>
          </TabPane> : null}
          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
          {verifyInter === 'system' ? <TabPane tab={
            <span>
              单号生成
              {verify.billcodes.length ? <span className="count-tip">{verify.billcodes.length}</span> : null}
            </span>
          } key="4">
          } key="billcodes">
            <BillcodeForm
              fields={fields}
              btn={this.props.card}
@@ -1726,12 +1550,12 @@
            />
            <EditTable actions={['move']} data={verify.billcodes} columns={orderColumns} onChange={(billcodes) => {this.setState({verify: {...verify, billcodes}})}}/>
          </TabPane> : null}
          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
          {verifyInter === 'system' ? <TabPane tab={
            <span>
              {card.Ot !== 'requiredOnce' ? '唯一性验证' : '同类数据验证'}
              {verify.uniques.length ? <span className="count-tip">{verify.uniques.length}</span> : null}
            </span>
          } key="2">
          } key="uniques">
            <UniqueForm
              btn={card}
              fields={card.Ot !== 'requiredOnce' ? uniqueFields : columnsFields}
@@ -1740,12 +1564,12 @@
            />
            <EditTable actions={['edit', 'move', 'del', 'status']} data={verify.uniques} columns={card.Ot !== 'requiredOnce' ? uniqueColumns : onceUniqueColumns} onChange={this.changeUniques}/>
          </TabPane> : null}
          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
          {verifyInter === 'system' ? <TabPane tab={
            <span>
              创建凭证
              {verify.voucher && verify.voucher.enabled ? <span className="count-tip">1</span> : null}
            </span>
          } key="5">
          } key="voucher">
            <VoucherForm
              dict={this.props.dict}
              voucher={voucher}
@@ -1756,12 +1580,12 @@
              wrappedComponentRef={(inst) => this.voucherForm = inst}
            />
          </TabPane> : null}
          {card.intertype === 'system' || (card.intertype === 'custom' && card.procMode === 'system') ? <TabPane tab={
          {verifyInter === 'system' ? <TabPane tab={
            <span>
              自定义脚本
              {verify.scripts.length ? <span className="count-tip">{verify.scripts.length}</span> : null}
            </span>
          } key="6">
          } key="scripts">
            <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({
@@ -1791,7 +1615,7 @@
              回调脚本
              {verify.cbScripts.length ? <span className="count-tip">{verify.cbScripts.length}</span> : null}
            </span>
          } key="6a">
          } key="cbScripts">
            <CallBackCustomScript
              btn={this.props.card}
              dict={this.props.dict}
@@ -1804,7 +1628,7 @@
            />
            <EditTable actions={['move']} data={verify.cbScripts} columns={cbScriptsColumns} onChange={(cbScripts) => {this.setState({verify: {...verify, cbScripts}})}}/>
          </TabPane> : null}
          <TabPane tab="信息提示" key="7">
          <TabPane tab="信息提示" key="tip">
            <Form {...formItemLayout}>
              <Row gutter={24}>
                <Col offset={6} span={6}>
src/views/design/index.jsx
@@ -3,6 +3,7 @@
import enUS from 'antd/es/locale/en_US'
import zhCN from 'antd/es/locale/zh_CN'
import Api from '@/api'
import asyncComponent from '@/utils/asyncComponent'
import Header from './header'
import { setGLOBFuncs } from '@/utils/utils.js'
@@ -16,6 +17,38 @@
class Design extends Component {
  componentDidMount() {
    setGLOBFuncs()
    // 获取微信公众号及小程序消息模板
    if (!sessionStorage.getItem('wxTemplates')) {
      Api.wxRequest('wxpay/getaccesstoken', 'get').then(res => {
        let wxtoken = res.oa_access_token || ''
        let minitoken = res.mini_access_token || ''
        if (wxtoken) {
          Api.wxNginxRequest(`cgi-bin/template/get_all_private_template?access_token=${wxtoken}`, 'get').then(res => {
            if (res.template_list) {
              let temps = res.template_list.filter(item => item.primary_industry)
              sessionStorage.setItem('wxTemplates', JSON.stringify(temps))
            } else {
              sessionStorage.setItem('wxTemplates', JSON.stringify([]))
            }
          })
        } else {
          sessionStorage.setItem('wxTemplates', JSON.stringify([]))
        }
        if (minitoken) {
          Api.wxNginxRequest(`wxaapi/newtmpl/gettemplate?access_token=${minitoken}`, 'get').then(res => {
            if (res.errmsg === 'ok' && res.data) {
              sessionStorage.setItem('wxMiniTemplates', JSON.stringify(res.data))
            } else {
              sessionStorage.setItem('wxMiniTemplates', JSON.stringify([]))
            }
          })
        } else {
          sessionStorage.setItem('wxMiniTemplates', JSON.stringify([]))
        }
      })
    }
  }
  
  render () {