king
2024-06-28 c8804ceb1fe2dea76f9949c5ea04423876ee2c81
src/templates/zshare/verifycard/baseform/index.jsx
@@ -1,7 +1,7 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { fromJS } from 'immutable'
import { Form, Row, Col, Select, Radio, Tooltip, Input } from 'antd'
import { Form, Row, Col, Select, Radio, Tooltip, Input, message } from 'antd'
import { QuestionCircleOutlined } from '@ant-design/icons'
import Api from '@/api'
@@ -25,61 +25,66 @@
  state = {
    wxTemps: [],
    selectTemp: null,
    miniTemps: []
    WXApps: null
  }
  componentDidMount() {
    let wxTemps = sessionStorage.getItem('wxTemplates')
    const { appType, verify } = this.props
    if (window.GLOB.WXAppID && window.GLOB.nginx && !wxTemps) {
      Api.wxAccessToken().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 => {
            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}}', '')
                }
    let appId = window.GLOB.WXAppID || ''
                return true
              })
            }
            sessionStorage.setItem('wxTemplates', JSON.stringify(temps))
            localStorage.setItem('wxTemplates', JSON.stringify(temps))
    if (window.GLOB.WXApps && !appType) {
      let apps = window.GLOB.WXApps.filter(app => app.appType === 'public')
            localStorage.removeItem('wxTemplates')
      if (apps.length > 0) {
        this.setState({WXApps: apps})
      }
            this.resetTemps(temps)
          })
        } else {
          sessionStorage.setItem('wxTemplates', JSON.stringify([]))
          localStorage.setItem('wxTemplates', JSON.stringify([]))
      if (verify.wxAppId && apps.findIndex(item => item.appId === verify.wxAppId) > -1) {
        appId = verify.wxAppId
      }
    }
          localStorage.removeItem('wxTemplates')
        }
        // 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([]))
        // }
      })
    let wxTemps = sessionStorage.getItem('wxTemplates' + appId)
    if (appId && window.GLOB.nginx && !wxTemps) {
      this.getTemps(appId)
    } else if (wxTemps) {
      wxTemps = JSON.parse(wxTemps)
      this.resetTemps(wxTemps)
    } else {
      this.resetTemps([])
    }
  }
  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)
          }
          sessionStorage.setItem('wxTemplates' + appId, JSON.stringify(temps))
          this.resetTemps(temps)
        })
      } else {
        message.warning(res.message || '微信授权失败!')
        sessionStorage.setItem('wxTemplates' + appId, JSON.stringify([]))
      }
    })
  }
  resetTemps = (wxTemps) => {
@@ -102,14 +107,14 @@
        content: '订单类型:{{keyword1.DATA}}\n订单号:{{keyword2.DATA}}\n订单状态:{{keyword3.DATA}}',
        example: '订单类型:退租申请\r\n订单号:TZ16101909\r\n订单状态:待取货'
      },
      {
        template_id: 'mk_category_temp',
        title: '类目模板',
        primary_industry: '',
        deputy_industry: '',
        content: '',
        example: ''
      }
      // {
      //   template_id: 'mk_category_temp',
      //   title: '类目模板',
      //   primary_industry: '',
      //   deputy_industry: '',
      //   content: '',
      //   example: ''
      // }
    ]
    
    let _wxTemps = [...wxTemps, ...sysTemps]
@@ -134,6 +139,8 @@
      error = '开启邮件发送时,需要选择邮件模板!'
    } else if (verify.printEnable === 'true' && !verify.printTempId) {
      error = '使用单据打印时,需要选择打印模板!'
    } else if (verify.linkEnable === 'true' && !verify.linkUrl) {
      error = '打开链接开启时,需要添加链接地址!'
    } else if (verify.accountdate === 'true' && !verify.accountfield) {
      error = '开启账期时,需要选择验证公司!'
    } else if (verify.preHandle === 'true' && !verify.pre_func) {
@@ -157,33 +164,39 @@
    let _verify = {...verify, [key]: value}
    if (_verify.noteEnable !== 'true') {
      _verify.noteCode = ''
      _verify.noteId = ''
      delete _verify.noteCode
      delete _verify.noteId
    }
    if (_verify.emailEnable !== 'true') {
      _verify.emailCode = ''
      _verify.emailId = ''
      delete _verify.emailCode
      delete _verify.emailId
    }
    if (_verify.printEnable !== 'true') {
      _verify.printTempId = ''
      delete _verify.printTempId
    }
    if (_verify.linkEnable !== 'true') {
      delete _verify.linkUrl
      delete _verify.linkProUrl
    }
    if (_verify.accountdate !== 'true') {
      _verify.accountfield = ''
      _verify.voucherdate = ''
      delete _verify.accountfield
      delete _verify.voucherdate
    }
    if (_verify.preHandle !== 'true') {
      _verify.pre_func = ''
      delete _verify.pre_func
    }
    if (_verify.wxNote !== 'true') {
      _verify.wxTemplateId = ''
      _verify.wxNoteLink = ''
      _verify.wxNoteLinkUrl = ''
      _verify.wxNoteLinkMenuId = ''
      _verify.wxNoteCallback = 'false'
      _verify.wxNoteKeys = null
      delete _verify.wxAppId
      delete _verify.wxTemplateId
      delete _verify.wxNoteLink
      delete _verify.wxNoteLinkUrl
      delete _verify.wxNoteMiniId
      delete _verify.wxNoteLinkMenuId
      delete _verify.wxNoteCallback
      delete _verify.wxCustomTempId
      _verify.wxNoteKeys = null
      if (this.state.selectTemp) {
        this.setState({selectTemp: null})
      }
@@ -255,6 +268,45 @@
    this.props.onChange(_verify)
  }
  onWxAppChange = (val) => {
    const { verify } = this.props
    let _verify = {...verify, wxAppId: val, wxNote: 'false'}
    delete _verify.wxTemplateId
    delete _verify.wxNoteLink
    delete _verify.wxNoteLinkUrl
    delete _verify.wxNoteMiniId
    delete _verify.wxNoteLinkMenuId
    delete _verify.wxNoteCallback
    delete _verify.wxCustomTempId
    _verify.wxNoteKeys = null
    if (this.state.selectTemp) {
      this.setState({selectTemp: null})
    }
    let _verify_ = fromJS(_verify).toJS()
    _verify_.wxNote = 'true'
    this.props.onChange(_verify)
    setTimeout(() => {
      this.props.onChange(_verify_)
      let wxTemps = sessionStorage.getItem('wxTemplates' + val)
      if (wxTemps) {
        wxTemps = JSON.parse(wxTemps)
        this.resetTemps(wxTemps)
      } else {
        this.getTemps(val)
      }
    }, 20)
  }
  onWxNoteKeyChange = (key, val) => {
    let _verify = fromJS(this.props.verify).toJS()
@@ -293,7 +345,7 @@
  render() {
    const { unionFields, verify, notes, emailCodes, card, appType, columns, fields } = this.props
    const { wxTemps, selectTemp } = this.state
    const { wxTemps, selectTemp, WXApps } = this.state
    const formItemLayout = {
      labelCol: {
        xs: { span: 24 },
@@ -336,12 +388,7 @@
      <Form {...formItemLayout}>
        <Row gutter={24}>
          {card.sqlType !== 'custom' && card.intertype !== 'inner' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'默认sql执行顺序为自定义脚本之前'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                默认sql
              </Tooltip>
            }>
            <Form.Item label="默认sql">
              <Radio.Group value={verify.default} onChange={(e) => {this.onOptionChange(e.target.value, 'default')}}>
                <Radio value="true">执行</Radio>
                <Radio value="false">不执行</Radio>
@@ -540,6 +587,30 @@
            </Form.Item>
          </Col> : null}
          <Col span={24}></Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" overlayStyle={{maxWidth: 350}} title="按钮执行成功后需要打开的链接地址。如果地址不是http开始,会拼接当前系统域名,例如:地址为 /xxxx 时,会打开 http://***.***.**/xxxx。">
                <QuestionCircleOutlined className="mk-form-tip" />
                打开链接
              </Tooltip>
            }>
              <Radio.Group value={verify.linkEnable || 'false'} onChange={(e) => {this.onOptionChange(e.target.value, 'linkEnable')}}>
                <Radio value="true">开启</Radio>
                <Radio value="false">不开启</Radio>
              </Radio.Group>
            </Form.Item>
          </Col>
          {verify.linkEnable === 'true' ? <Col span={24} className="dz-link">
            <Form.Item label="链接地址" required>
              <Input.TextArea autoComplete="off" value={verify.linkUrl || ''} onChange={(e) => {this.onOptionChange(e.target.value, 'linkUrl')}}/>
            </Form.Item>
          </Col> : null}
          {verify.linkEnable === 'true' ? <Col span={24} className="dz-link">
            <Form.Item label="正式地址">
              <Input.TextArea autoComplete="off" value={verify.linkProUrl || ''} onChange={(e) => {this.onOptionChange(e.target.value, 'linkProUrl')}}/>
            </Form.Item>
          </Col> : null}
          <Col span={24}></Col>
          {window.GLOB.process && card.intertype !== 'inner' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title="在菜单开启工作流时有效。">
@@ -610,7 +681,7 @@
          <Col span={24}></Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'请在服务器完成公众号配置。'}>
              <Tooltip placement="bottomLeft" title="请在服务器完成公众号配置。">
                <QuestionCircleOutlined className="mk-form-tip" />
                公众号消息
              </Tooltip>
@@ -621,6 +692,22 @@
              </Radio.Group>
            </Form.Item>
          </Col>
          {verify.wxNote === 'true' && WXApps ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title="请选择发送消息的公众号。">
                <QuestionCircleOutlined className="mk-form-tip" />
                公众号
              </Tooltip>
            } required>
              <Select value={verify.wxAppId || window.GLOB.WXAppID} onSelect={this.onWxAppChange}>
                {WXApps.map(option =>
                  <Select.Option key={option.appId} value={option.appId}>
                    {option.appName}
                  </Select.Option>
                )}
              </Select>
            </Form.Item>
          </Col> : null}
          {verify.wxNote === 'true' ? <Col span={8}>
            <Form.Item label="消息模板" required>
              <Select value={verify.wxTemplateId} onSelect={this.onWxTemplateChange}>
@@ -666,6 +753,16 @@
          </Col> : null}
          {verify.wxNoteLink === 'miniProgram' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="top" title="可指定跳转小程序的ID,未设置时默认使用配置文件中的小程序ID。">
                <QuestionCircleOutlined className="mk-form-tip" />
                小程序ID
              </Tooltip>
            }>
              <Input placeholder="" autoComplete="off" value={verify.wxNoteMiniId || ''} onChange={(e) => {this.onOptionChange(e.target.value, 'wxNoteMiniId')}}/>
            </Form.Item>
          </Col> : null}
          {verify.wxNoteLink === 'miniProgram' ? <Col span={8}>
            <Form.Item label={
              <Tooltip placement="top" title="添加菜单ID可跳转至小程序指定页面,空值默认跳转至小程序首页。注:数据里中如果有bid字段(值不为空),打开小程序时会做为BID传入页面中。">
                <QuestionCircleOutlined className="mk-form-tip" />
                菜单ID