king
2024-08-06 70f30488f31c2adb1cfb3cb2452ea27c85167019
2024-08-06
9个文件已修改
573 ■■■■ 已修改文件
public/README.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/options.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/editor/index.jsx 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/index.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/module/voucher/resetAttach/addAttach/fileupload/index.jsx 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 120 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/fileupload/index.jsx 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/baseform/index.jsx 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/README.txt
@@ -14,7 +14,6 @@
WXMerchID         -- 使用微信支付时,绑定的商户ID
WXNotice          -- 是否开启明科云公众号消息提醒,值为 true 时开启,可通过明科云发送模板消息
WXApps            -- 存在多个公众号、小程序或商户时可使用微信APP列表,注意填写默认公众号、小程序与商户号,格式 [{"appId": "", "appName": "", "appType": "public/miniProgram/merchant"}]
nginx             -- 是否开启了nginx服务,值为 true 时开启,如需使用微信模板消息等服务,请先设置nginx服务并开启此配置
debugger          -- 值为 true 时开启调试模式,开启后移动端子应用中会有控制台
devTools          -- 值为 false 时不允许使用调试模式
licenseKey        -- 许可密钥,在内部网络中使用系统时,会跳过epc验证
public/options.json
@@ -12,7 +12,6 @@
  "WXminiAppID": "",
  "WXMerchID": "",
  "WXNotice": "true",
  "nginx": "true",
  "debugger": false,
  "devTools": true,
  "licenseKey": "",
src/api/index.js
@@ -100,15 +100,15 @@
  /**
   * @description 微信业务请求 原接口 'wxpay/getaccesstoken'
   */
  wxAccessToken (appId, domain = '') {
    let _url = domain || window.GLOB.baseurl
  // wxAccessToken (appId, domain = '') {
  //   let _url = domain || window.GLOB.baseurl
    return axios({
      url: _url + 'wechat/getaccesstoken',
      method: 'post',
      data: JSON.stringify({app_id: appId})
    })
  }
  //   return axios({
  //     url: _url + 'wechat/getaccesstoken',
  //     method: 'post',
  //     data: JSON.stringify({app_id: appId})
  //   })
  // }
  /**
   * @description 微信业务请求
@@ -999,26 +999,37 @@
  /**
   * @description 大文件上传
   */
  getLargeFileUpload (param) {
    return axios({
      url: '/webapi/doupload',
      method: 'post',
      headers: { 'Content-Type': 'multipart/form-data' },
      data: param
  getFileUpload (param) {
    param.append('shardingCnt', 1)
    param.append('LoginUID', sessionStorage.getItem('LoginUID') || '')
    param.append('UserID', sessionStorage.getItem('UserID') || '')
    return new Promise((resolve, reject) => {
      axios({
        url: '/webapi/doupload',
        method: 'post',
        headers: { 'Content-Type': 'multipart/form-data' },
        data: param
      }).then(res => {
        if (res.status && res.urlPath) {
          res.urlPath = window.GLOB.baseurl + res.urlPath
        }
        resolve(res)
      })
    })
  }
  /**
   * @description 查询文件是否已上传
   */
  getFilePreUpload (param) {
    return axios({
      url: '/webapi/dopreload',
      method: 'post',
      headers: { 'Content-Type': 'multipart/form-data' },
      data: param
    })
  }
  // getFilePreUpload (param) {
  //   return axios({
  //     url: '/webapi/dopreload',
  //     method: 'post',
  //     headers: { 'Content-Type': 'multipart/form-data' },
  //     data: param
  //   })
  // }
  /**
   * @description oss文件上传
src/components/editor/index.jsx
@@ -1,12 +1,10 @@
import React, {Component} from 'react'
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import BraftEditor from 'braft-editor'
import 'braft-editor/dist/index.css'
import 'braft-extensions/dist/table.css'
import Table from 'braft-extensions/dist/table'
import SparkMD5 from 'spark-md5'
import moment from 'moment'
import Api from '@/api'
import './index.scss'
@@ -73,37 +71,21 @@
    }
  }
  shardupload = (params, param) => {
    let _param = params.chunks.shift()
  handleUpload(param) {
    let form = new FormData()
    form.append('file', _param.binary)
    form.append('fileMd5', params.file.fileMd5)
    form.append('shardingMd5', _param.chunkMd5)
    form.append('baseDomain', window.GLOB.baseurl)
    form.append('rootPath', 'Content/images/upload/')
    form.append('fileName', params.file.fileName)
    form.append('fileExt', params.file.fileType)
    form.append('shardingCnt', _param.chunks)
    form.append('shardingNo', _param.chunk)
    form.append('LoginUID', sessionStorage.getItem('LoginUID') || '')
    form.append('UserID', sessionStorage.getItem('UserID') || '')
    form.append('file', param.file)
    Api.getLargeFileUpload(form).then(res => {
    Api.getFileUpload(form).then(res => {
      if (res.status) {
        if (params.chunks.length > 0) {
          param.progress(Math.floor(100 * (_param.chunk / _param.chunks)))
          this.shardupload(params, param)
        if (res.urlPath) {
          param.success({
            url: res.urlPath
          })
        } else {
          if (res.urlPath) {
            param.success({
              url: res.urlPath
            })
          } else {
            param.error({
              url: '上传失败!'
            })
          }
          param.error({
            url: '上传失败!'
          })
        }
      } else {
        param.error({
@@ -111,106 +93,6 @@
        })
      }
    })
  }
  getuuid = () => {
    let uuid = []
    let _options = '0123456789abcdefghigklmnopqrstuv'
    for (let i = 0; i < 19; i++) {
      uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1))
    }
    uuid = uuid.join('')
    return uuid
  }
  handleUpload(param) {
    const file = param.file
    let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
    let chunkSize = 1024 * 1024 * 2                // 切片每次2M
    let chunks = Math.ceil(file.size / chunkSize)  // 切片总数
    let currentChunk = 0                           // 当前上传的chunk
    let spark = new SparkMD5.ArrayBuffer()         // 对arrayBuffer数据进行md5加密,产生一个md5字符串
    let chunkFileReader = new FileReader()         // 用于计算出每个chunkMd5
    let totalFileReader = new FileReader()         // 用于计算出总文件的fileMd5
    let params = {chunks: [], file: {}}            // 用于上传所有分片的md5信息
    params.file.fileName = file.name.replace(/\.{1}[^.]*$/ig, '')  // 文件名(去除后缀名)
    params.file.fileType = file.name.replace(/^.*\.{1}/ig, '')     // 文件类型
    params.file.fileSize = file.size                               // 文件大小
    params.file.fileChunks = chunks                                // 记录所有chunks的长度
    if (!/^[A-Za-z0-9]+$/.test(params.file.fileName)) {            // 文件名称含有英文及数字之外字符时,名称系统生成
      params.file.fileName = moment().format('YYYYMMDDHHmmss') + this.getuuid()
    }
    totalFileReader.readAsArrayBuffer(file)
    totalFileReader.onload = (e) => {   // 对整个totalFile生成md5
      spark.append(e.target.result)
      params.file.fileMd5 = spark.end() // 计算整个文件的fileMd5
      let _param = new FormData()
      _param.append('fileMd5', params.file.fileMd5)
      Api.getFilePreUpload(_param).then(res => {
        if (res.status && res.urlPath) {
          param.success({
            url: res.urlPath
          })
        } else if (res.shardings && res.shardings.length > 0) {
          res.shardings.forEach(shard => {
            if (shard.shardingNo && parseInt(shard.shardingNo) > currentChunk) {
              currentChunk = parseInt(shard.shardingNo)
            }
          })
          loadNext()
        } else {
          loadNext()
        }
      })
    }
    chunkFileReader.onload = (e) => {
      spark.append(e.target.result)      // 对每一片分片进行md5加密
      params.chunks[params.chunks.length - 1].chunkMd5 = spark.end() // 添加切片md5
      currentChunk++  // 每一次分片onload,currentChunk都需要增加,以便来计算分片的次数
      if (currentChunk < chunks) { // 当前切片总数没有达到总数时
        loadNext()
      } else {
        this.shardupload(params, param)
      }
    }
    chunkFileReader.onerror = () => {
      param.error({
        url: '上传失败!'
      })
      console.warn('File reading failed.')
    }
    totalFileReader.onerror = () => {
      param.error({
        url: '上传失败!'
      })
    }
    let loadNext = () => {
      let start = currentChunk * chunkSize              // 计算分片的起始位置
      let end = Math.min(file.size, start + chunkSize)  // 计算分片的结束位置
      let obj = {                                       // 每一个分片需要包含的信息
        chunk: currentChunk + 1,
        binary: file.slice(start, end),
        start: start,
        end: end,
        chunks
      }
      params.chunks.push(obj)
      chunkFileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
    }
  }
  render() {
src/index.js
@@ -45,7 +45,6 @@
    GLOB.watermark = config.watermark + '' !== 'false'
    GLOB.transfer = config.transfer + '' === 'true'
    GLOB.keepKey = config.keepPassword + '' !== 'false'
    GLOB.nginx = config.nginx + '' === 'true'
    GLOB.WXAppID = config.WXAppID || ''
    GLOB.WXminiAppID = config.WXminiAppID || ''
    GLOB.WXMerchID = config.WXMerchID || ''
src/tabviews/custom/components/module/voucher/resetAttach/addAttach/fileupload/index.jsx
@@ -1,10 +1,9 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import moment from 'moment'
import { Upload, Button, Progress, notification } from 'antd'
import { UploadOutlined } from '@ant-design/icons'
import SparkMD5 from 'spark-md5'
import Api from '@/api'
import './index.scss'
@@ -90,54 +89,6 @@
    })
  }
  shardupload = (param, name) => {
    let form = new FormData()
    form.append('file', param.binary)
    form.append('fileMd5', param.fileMd5)
    form.append('shardingMd5', param.fileMd5)
    form.append('baseDomain', window.GLOB.baseurl)
    form.append('rootPath', 'Content/images/upload/')
    form.append('fileName', param.fileName)
    form.append('fileExt', param.fileType)
    form.append('shardingCnt', 1)
    form.append('shardingNo', 1)
    form.append('LoginUID', sessionStorage.getItem('LoginUID') || '')
    form.append('UserID', sessionStorage.getItem('UserID') || '')
    Api.getLargeFileUpload(form).then(res => {
      if (res.status) {
        if (res.urlPath) {
          this.onUpdate(res.urlPath, name)
        } else {
          this.onFail()
        }
        this.setState({
          percent: 100
        }, () => {
          setTimeout(() => {
            this.setState({
              showprogress: false,
              percent: 0
            })
          }, 200)
        })
      } else {
        this.onFail(res.message)
      }
    })
  }
  getuuid = () => {
    let uuid = []
    let _options = '0123456789abcdefghigklmnopqrstuv'
    for (let i = 0; i < 19; i++) {
      uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1))
    }
    uuid = uuid.join('')
    return uuid
  }
  beforeUpload = (file) => {
    const { accepts, maxSize } = this.state
@@ -172,49 +123,31 @@
      percent: 0
    })
    // 兼容性的处理
    let spark = new SparkMD5.ArrayBuffer()         // 对arrayBuffer数据进行md5加密,产生一个md5字符串
    let totalFileReader = new FileReader()         // 用于计算出总文件的fileMd5
    let param = {}
    let form = new FormData()
    param.fileName = file.name.replace(/\.{1}[^.]*$/ig, '')  // 文件名(去除后缀名)
    param.fileType = file.name.replace(/^.*\.{1}/ig, '')     // 文件类型
    form.append('file', file)
    if (!/^[A-Za-z0-9]+$/.test(param.fileName)) {            // 文件名称含有英文及数字之外字符时,名称系统生成
      param.fileName = moment().format('YYYYMMDDHHmmss') + this.getuuid()
    }
    totalFileReader.readAsArrayBuffer(file)
    totalFileReader.onload = (e) => {   // 对整个totalFile生成md5
      spark.append(e.target.result)
      param.fileMd5 = spark.end()       // 计算整个文件的fileMd5
      param.binary = file
      let _param = new FormData()
      _param.append('fileMd5', param.fileMd5)
      Api.getFilePreUpload(_param).then(res => {
        if (res.status && res.urlPath) {
    Api.getFileUpload(form).then(res => {
      if (res.status) {
        if (res.urlPath) {
          this.onUpdate(res.urlPath, file.name)
          this.setState({
            percent: 100
          }, () => {
            setTimeout(() => {
              this.setState({
                showprogress: false,
                percent: 0
              })
            }, 200)
          })
        } else {
          this.shardupload(param, file.name)
          this.onFail()
        }
      })
    }
    totalFileReader.onerror = () => {
      this.onFail('文件读取失败!')
    }
        this.setState({
          percent: 100
        }, () => {
          setTimeout(() => {
            this.setState({
              showprogress: false,
              percent: 0
            })
          }, 200)
        })
      } else {
        this.onFail(res.message)
      }
    })
    return false
  }
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -2556,7 +2556,7 @@
  }
  sendWxMessage = (verify, id) => {
    let domain = ''
    let domain = window.GLOB.baseurl
    let appId = window.GLOB.WXAppID || ''
    if (verify.wxAppId && verify.wxAppId !== appId) {
@@ -2576,14 +2576,7 @@
      appId = 'wx4d8a34c8d4494872'
    }
    if (!window.GLOB.nginx && !domain) {
      notification.warning({
        top: 92,
        message: 'nginx服务尚未开启,不可发送模板消息。',
        duration: 5
      })
      return
    } else if (!appId) {
    if (!appId) {
      notification.warning({
        top: 92,
        message: '尚未添加公众号ID,不可发送模板消息。',
@@ -2663,62 +2656,63 @@
        return m
      })
      Api.wxAccessToken(appId, domain).then(res => {
        if (!res.access_token) return
        params.forEach(n => {
          Api.wxNginxRequest(`${domain}cgi-bin/message/template/send?access_token=${res.access_token}`, 'post', JSON.stringify(n)).then(re => {
            if (verify.wxNoteCallback === 'true') {
              let msg = re.errmsg || ''
      // cgi-bin/message/template/send
      params.forEach(n => {
        Api.directRequest({
          url: domain + 'wechat/send?appid=' + appId,
          method: 'post',
          data: JSON.stringify(n)
        }).then(re => {
          if (verify.wxNoteCallback === 'true') {
            let msg = re.errmsg || ''
              if (msg.length > 50) {
                msg = msg.substr(0, 50)
              }
              let _p = {
                func: 's_get_sms_weixin_local_suc_err',
                upid: id,
                send_id: n.client_msg_id || '',
                status_result: re.errcode === 0 ? 'S' : 'E',
                errcode: re.errcode,
                msg_result: msg
              }
              _p.LText = Utils.getuuid()
              _p.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
              _p.secretkey = Utils.encrypt(_p.LText, _p.timestamp)
              Api.genericInterface(_p).then(result => {
                if (!result.status) {
                  notification.warning({
                    top: 92,
                    message: result.message,
                    duration: 5
                  })
                }
              })
            } else if (re.errcode !== 0 && re.errmsg) {
              let msgs = [
                {errcode: -1, errmsg: '系统繁忙,请稍候再试'},
                {errcode: 40001, errmsg: 'access_token 无效'},
                {errcode: 40003, errmsg: '不合法的 OpenID'},
                {errcode: 40014, errmsg: '不合法的 access_token'},
                {errcode: 40033, errmsg: '不合法的请求字符'},
                {errcode: 43004, errmsg: '需要接收者关注'},
                {errcode: 43019, errmsg: '需要将接收者从黑名单中移除'},
                {errcode: 50005, errmsg: '用户未关注公众号'}
              ]
              let msg = msgs.filter(m => m.errcode === re.errcode)[0]
              msg = msg || re
              notification.warning({
                top: 92,
                message: msg.errmsg,
                duration: 5
              })
            if (msg.length > 50) {
              msg = msg.substr(0, 50)
            }
          })
            let _p = {
              func: 's_get_sms_weixin_local_suc_err',
              upid: id,
              send_id: n.client_msg_id || '',
              status_result: re.errcode === 0 ? 'S' : 'E',
              errcode: re.errcode,
              msg_result: msg
            }
            _p.LText = Utils.getuuid()
            _p.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
            _p.secretkey = Utils.encrypt(_p.LText, _p.timestamp)
            Api.genericInterface(_p).then(result => {
              if (!result.status) {
                notification.warning({
                  top: 92,
                  message: result.message,
                  duration: 5
                })
              }
            })
          } else if (re.errcode !== 0 && re.errmsg) {
            let msgs = [
              {errcode: -1, errmsg: '系统繁忙,请稍候再试'},
              {errcode: 40001, errmsg: 'access_token 无效'},
              {errcode: 40003, errmsg: '不合法的 OpenID'},
              {errcode: 40014, errmsg: '不合法的 access_token'},
              {errcode: 40033, errmsg: '不合法的请求字符'},
              {errcode: 43004, errmsg: '需要接收者关注'},
              {errcode: 43019, errmsg: '需要将接收者从黑名单中移除'},
              {errcode: 50005, errmsg: '用户未关注公众号'}
            ]
            let msg = msgs.filter(m => m.errcode === re.errcode)[0]
            msg = msg || re
            notification.warning({
              top: 92,
              message: msg.errmsg,
              duration: 5
            })
          }
        })
      })
    })
src/tabviews/zshare/fileupload/index.jsx
@@ -1,10 +1,8 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import moment from 'moment'
import { Upload, Button, Progress, notification } from 'antd'
import { UploadOutlined } from '@ant-design/icons'
import SparkMD5 from 'spark-md5'
import Api from '@/api'
import MKEmitter from '@/utils/events.js'
@@ -195,44 +193,6 @@
    })
  }
  shardupload = (param, file_name) => {
    let form = new FormData()
    form.append('file', param.binary)
    form.append('fileMd5', param.fileMd5)
    form.append('shardingMd5', param.fileMd5)
    form.append('baseDomain', window.GLOB.baseurl)
    form.append('rootPath', 'Content/images/upload/')
    form.append('fileName', param.fileName)
    form.append('fileExt', param.fileType)
    form.append('shardingCnt', 1)
    form.append('shardingNo', 1)
    form.append('LoginUID', sessionStorage.getItem('LoginUID') || '')
    form.append('UserID', sessionStorage.getItem('UserID') || '')
    Api.getLargeFileUpload(form).then(res => {
      if (res.status) {
        if (res.urlPath) {
          this.onUpdate(res.urlPath, file_name)
        } else {
          this.onFail()
        }
        this.setState({
          percent: 100
        }, () => {
          setTimeout(() => {
            this.setState({
              showprogress: false,
              percent: 0
            })
          }, 200)
        })
      } else {
        this.onFail(res.message)
      }
    })
  }
  getuuid = () => {
    let uuid = []
    let _options = '0123456789abcdefghigklmnopqrstuv'
@@ -406,49 +366,31 @@
      return false
    }
    // 兼容性的处理
    let spark = new SparkMD5.ArrayBuffer()         // 对arrayBuffer数据进行md5加密,产生一个md5字符串
    let totalFileReader = new FileReader()         // 用于计算出总文件的fileMd5
    let param = {}
    let form = new FormData()
    param.fileName = file.name.replace(/\.{1}[^.]*$/ig, '')  // 文件名(去除后缀名)
    param.fileType = file.name.replace(/^.*\.{1}/ig, '')     // 文件类型
    form.append('file', file)
    if (!/^[A-Za-z0-9]+$/.test(param.fileName)) {            // 文件名称含有英文及数字之外字符时,名称系统生成
      param.fileName = moment().format('YYYYMMDDHHmmss') + this.getuuid()
    }
    totalFileReader.readAsArrayBuffer(file)
    totalFileReader.onload = (e) => {   // 对整个totalFile生成md5
      spark.append(e.target.result)
      param.fileMd5 = spark.end()       // 计算整个文件的fileMd5
      param.binary = file
      let _param = new FormData()
      _param.append('fileMd5', param.fileMd5)
      Api.getFilePreUpload(_param).then(res => {
        if (res.status && res.urlPath) {
    Api.getFileUpload(form).then(res => {
      if (res.status) {
        if (res.urlPath) {
          this.onUpdate(res.urlPath, file_name)
          this.setState({
            percent: 100
          }, () => {
            setTimeout(() => {
              this.setState({
                showprogress: false,
                percent: 0
              })
            }, 200)
          })
        } else {
          this.shardupload(param, file_name)
          this.onFail()
        }
      })
    }
    totalFileReader.onerror = () => {
      this.onFail('文件读取失败!')
    }
        this.setState({
          percent: 100
        }, () => {
          setTimeout(() => {
            this.setState({
              showprogress: false,
              percent: 0
            })
          }, 200)
        })
      } else {
        this.onFail(res.message)
      }
    })
    return false
  }
src/templates/zshare/verifycard/baseform/index.jsx
@@ -47,7 +47,7 @@
    let wxTemps = sessionStorage.getItem('wxTemplates' + appId)
    if (appId && window.GLOB.nginx && !wxTemps) {
    if (appId && !wxTemps) {
      if (verify.wxNote === 'true') {
        this.getTemps(appId)
      }
@@ -61,31 +61,28 @@
  }
  getTemps = (appId) => {
    Api.wxAccessToken(appId).then(res => {
      if (res.status && res.access_token) {
        Api.wxNginxRequest(`cgi-bin/template/get_all_private_template?access_token=${res.access_token}`, 'get').then(res => {
          let temps = []
          if (res.template_list) {
            temps = res.template_list.filter(item => {
              if (!item.primary_industry || sysTempsIds.includes(item.template_id)) return false
              if (item.content) {
                item.content = item.content.replace('{{first.DATA}}\n', '').replace('\n{{remark.DATA}}', '')
              }
              return true
            })
          } else if (res.errcode && res.errmsg) {
            message.warning(res.errcode + ': ' + res.errmsg)
    // cgi-bin/template/get_all_private_template
    Api.directRequest({
      url: window.GLOB.baseurl + 'wechat/get_all_private_template?appid=' + appId,
      method: 'get',
    }).then(res => {
      let temps = []
      if (res.template_list) {
        temps = res.template_list.filter(item => {
          if (!item.primary_industry || sysTempsIds.includes(item.template_id)) return false
          if (item.content) {
            item.content = item.content.replace('{{first.DATA}}\n', '').replace('\n{{remark.DATA}}', '')
          }
          sessionStorage.setItem('wxTemplates' + appId, JSON.stringify(temps))
          this.resetTemps(temps)
          return true
        })
      } else {
        message.warning(res.message || '微信授权失败!')
        sessionStorage.setItem('wxTemplates' + appId, JSON.stringify([]))
      } else if (res.errcode && res.errmsg) {
        message.warning(res.errcode + ': ' + res.errmsg)
      }
      sessionStorage.setItem('wxTemplates' + appId, JSON.stringify(temps))
      this.resetTemps(temps)
    })
  }
@@ -206,7 +203,7 @@
    this.props.onChange(_verify)
    if (key === 'wxNote' && value === 'true' && window.GLOB.WXAppID && window.GLOB.nginx) {
    if (key === 'wxNote' && value === 'true' && window.GLOB.WXAppID) {
      let wxTemps = sessionStorage.getItem('wxTemplates' + window.GLOB.WXAppID)
      if (wxTemps) {
@@ -308,11 +305,6 @@
    setTimeout(() => {
      this.props.onChange(_verify_)
      if (!window.GLOB.nginx) {
        message.warning('nginx服务尚未开启,请检查配置文件并在服务器中完成nginx设置。')
        return
      }
      let wxTemps = sessionStorage.getItem('wxTemplates' + val)