king
2024-05-16 291b0107a031282e92d1d1fc0a9d3a3dc8229b85
2024-05-16
1 文件已重命名
3个文件已修改
1个文件已添加
1个文件已删除
579 ■■■■■ 已修改文件
src/api/index.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.jsx 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/funcbutton/index.jsx 344 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/funcbutton/index.scss 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/index.jsx 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/shareLink/index.jsx 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js
@@ -1061,6 +1061,21 @@
    })
  }
  /**
   * @description 微信支付退款
   */
  setRefund (orderId) {
    let _param = new FormData()
    _param.append('out_biz_no', orderId)
    return axios({
      url: '/wxpay/wxRefund',
      headers: { 'Content-Type': 'multipart/form-data' },
      method: 'post',
      data: _param
    })
  }
  postekPrint (data) {
    return axios({
      url: 'http://127.0.0.1:888/postek/print',
src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -25,7 +25,7 @@
const FuncMegvii = asyncComponent(() => import('@/tabviews/zshare/actionList/funcMegvii'))
const FuncZip = asyncComponent(() => import('@/tabviews/zshare/actionList/funczip'))
const ExportPdf = asyncComponent(() => import('@/tabviews/zshare/actionList/exportPdf'))
const ShareLink = asyncComponent(() => import('@/tabviews/zshare/actionList/shareLink'))
const FuncButton = asyncComponent(() => import('@/tabviews/zshare/actionList/funcbutton'))
const EditLine = asyncComponent(() => import('@/tabviews/zshare/actionList/editLine'))
const BarCode = asyncComponent(() => import('@/components/barcode'))
const QrCode = asyncComponent(() => import('@/components/qrcode'))
@@ -1271,19 +1271,20 @@
              btn={card}
              LID={lid}
            />
          } else if (card.funcType === 'shareLink') {
            MkButton = <ShareLink
              BID={data.$$BID}
              LID={lid}
              btn={card}
              selectedData={_data}
            />
          } else if (card.funcType === 'addline' || card.funcType === 'delline') {
            MkButton = <EditLine
              btn={card}
              disabled={_disabled}
              selectedData={_data}
            />
          } else {
            MkButton = <FuncButton
              BID={data.$$BID}
              disabled={_disabled}
              LID={lid}
              btn={card}
              selectedData={_data}
            />
          }
        }
src/tabviews/zshare/actionList/funcbutton/index.jsx
New file
@@ -0,0 +1,344 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Button, notification, message, Modal } from 'antd'
import md5 from 'md5'
import Api from '@/api'
import MKEmitter from '@/utils/events.js'
import MkIcon from '@/components/mk-icon'
// import './index.scss'
const { confirm } = Modal
class FuncButton extends Component {
  static propTpyes = {
    BID: PropTypes.string,
    btn: PropTypes.object,
    selectedData: PropTypes.any,
    disabled: PropTypes.any
  }
  state = {
    loading: false,
    disabled: false,
    hidden: false,
  }
  UNSAFE_componentWillMount () {
    const { btn, selectedData, BData, disabled } = this.props
    if (btn.controlField) {
      this.setStatus(btn, selectedData || [], BData, disabled)
    } else if (disabled) {
      this.setState({disabled: true})
    }
  }
  componentDidMount () {
    MKEmitter.addListener('triggerBtnId', this.actionTrigger)
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState))
  }
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { btn } = this.props
    if (btn.controlField) {
      this.setStatus(btn, nextProps.selectedData || [], nextProps.BData, nextProps.disabled)
    } else {
      this.setState({disabled: nextProps.disabled === true})
    }
  }
  componentWillUnmount () {
    this.setState = () => {
      return
    }
    MKEmitter.removeListener('triggerBtnId', this.actionTrigger)
  }
  setStatus = (btn, data, BData, disprop) => {
    let disabled = false
    let hidden = false
    if (btn.control !== 'parent') {
      if (data.length > 0) {
        data.forEach(item => {
          let s = item[btn.controlField] !== undefined ? item[btn.controlField] + '' : ''
          if (btn.controlVals.includes(s)) {
            disabled = true
          }
        })
      } else if (btn.controlVals.includes('')) {
        disabled = true
      }
    } else {
      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
        hidden = true
      } else {
        let s = BData[btn.controlField] + ''
        if (btn.controlVals.includes(s)) {
          hidden = true
        }
      }
    }
    if (disabled && btn.control === 'hidden') {
      hidden = true
    }
    if (disprop) {
      disabled = true
    }
    this.setState({hidden, disabled})
  }
  /**
   * @description 触发按钮操作
   */
  actionTrigger = (triggerId, record, type, lid) => {
    const { btn, BID, selectedData, LID } = this.props
    const { loading } = this.state
    if (loading) return
    if (triggerId && btn.uuid !== triggerId) return
    if (type === 'linkbtn' && !btn.$toolbtn && LID !== lid) return
    let data = record || selectedData || []
    let error = ''
    if (btn.funcType === 'shareLink' && window.GLOB.systemType === 'production' && !btn.shareProUrl) {
      error = '尚未设置正式系统链接地址!'
    } else if (btn.funcType === 'refund') {
      if (data.length === 0) {
        error = '请选择行!'
      } else if (data.length !== 1) {
        error = '请选择单行数据!'
      } else if (!data[0].$$uuid) {
        error = '未获取到订单编号!'
      }
    }
    if (error) {
      notification.warning({
        top: 92,
        message: error,
        duration: 5
      })
      return
    }
    if (btn.funcType === 'shareLink') {
      let bid = BID || ''
      let id = ''
      if (data[0]) {
        id = data[0].$$uuid || ''
      }
      let url = btn.shareUrl
      if (window.GLOB.systemType === 'production') {
        url = btn.shareProUrl
      }
      url = url.replace(/@BID@/ig, bid).replace(/@ID@/ig, id)
      if (btn.shortUrl === 'true') {
        this.setState({
          loading: true
        }, () => {
          this.getShortUrl(url)
        })
      } else {
        this.copyUrl(url)
      }
    } else if (btn.funcType === 'refund') {
      let orderId = data[0].$$uuid
      const that = this
      confirm({
        title: btn.tipTitle || '确定要执行吗?',
        onOk() {
          that.execRefund(orderId)
        },
        onCancel() {}
      })
    }
  }
  execRefund = (orderId) => {
    Api.setRefund(orderId).then(res => {
      if (!res.status) {
        this.execError({ErrCode: 'E', message: '执行失败!', ...res})
      } else {
        this.execSuccess({ErrCode: 'S', ...res})
      }
    })
  }
  getShortUrl = (url) => {
    let _rduri = window.atob('aHR0cHM6Ly9lcGMubWs5aC5$mkjbi93ZWJhcGkvZG9zdGFycw=='.replace(/\$mk/ig, ''))
    let _id = window.atob('YmgwYmFwYWJ0ZDQ1ZXBz$mkZ3JhNzlzZWdiY2g2YzFpYms='.replace(/\$mk/ig, ''))
    let param = {
      func: 's_url_db_adduptdel',
      appkey: window.GLOB.appkey,
      userid: _id,
      LoginUID: _id,
      type: 'add_only',
      validity: 15,
      linkurl: url,
      nonc: '' + new Date().getTime(),
      id: md5(url + window.GLOB.appkey)
    }
    let keys = Object.keys(param).sort()
    let values = ''
    keys.forEach(key => {
      values += key + param[key]
    })
    param.sign = md5(values)
    param.t = new Date().getTime()
    Api.directRequest({
      url: _rduri + '/s_url_db_adduptdel',
      method: 'post',
      data: JSON.stringify(param)
    }).then(res => {
      this.setState({
        loading: false
      })
      if (res.status && res.id) {
        this.copyUrl('https://mk9h.cn/m.asp?m=' + res.id)
      } else {
        notification.warning({
          top: 92,
          message: res.message || '链接生成失败!',
          duration: 5
        })
      }
    }, () => {
      this.setState({
        loading: false
      })
    })
  }
  copyUrl = (url) => {
    const { btn } = this.props
    let oInput = document.createElement('input')
    oInput.value = url
    document.body.appendChild(oInput)
    oInput.select()
    document.execCommand('Copy')
    document.body.removeChild(oInput)
    if (btn.shareTip) {
      Modal.success({
        title: btn.shareTip
      })
    } else {
      message.success('已复制到剪切板。')
    }
  }
  execSuccess = (res = {}) => {
    const { btn } = this.props
    if (res.ErrCode === 'S' || !res.ErrCode) { // 执行成功
      notification.success({
        top: 92,
        message: res.message || '执行成功!',
        duration: btn.verify && btn.verify.stime ? btn.verify.stime : 2
      })
    } else if (res.ErrCode === 'Y') { // 执行成功
      Modal.success({
        title: res.message || '执行成功!'
      })
    } else if (res.ErrCode === '-1') { // 完成后不提示
    }
    this.setState({
      loading: false
    })
    if (btn.execSuccess !== 'never') {
      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execSuccess, btn)
    }
  }
  execError = (res) => {
    const { btn } = this.props
    if (!['LoginError', 'C', '-2', 'E', 'N', 'F', 'NM'].includes(res.ErrCode)) {
      res.ErrCode = 'E'
    }
    if (res.ErrCode === 'E') {
      Modal.error({
        title: res.message || '执行失败!',
      })
    } else if (res.ErrCode === 'N') {
      notification.error({
        top: 92,
        message: res.message || '执行失败!',
        duration: btn.verify && btn.verify.ntime ? btn.verify.ntime : 10
      })
    } else if (res.ErrCode === 'F') {
      notification.error({
        className: 'notification-custom-error',
        top: 92,
        message: res.message || '执行失败!',
        duration: btn.verify && btn.verify.ftime ? btn.verify.ftime : 10
      })
    } else if (res.ErrCode === 'NM') {
      message.error(res.message || '执行失败!')
    }
    this.setState({
      loading: false
    })
    if (res.ErrCode === '-2') return
    if (btn.execError !== 'never') {
      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn)
    }
  }
  render() {
    const { btn } = this.props
    const { loading, hidden } = this.state
    if (hidden) return null
    let label = ''
    if (btn.show === 'link') {
      label = <span>{btn.label}{btn.icon ? <MkIcon style={{marginLeft: '8px'}} type={btn.icon} /> : ''}</span>
    } else if (btn.show === 'icon') {
      label = !loading ? <MkIcon type={btn.icon} /> : null
    } else {
      label = <span>{!loading && btn.icon ? <MkIcon style={{marginRight: '8px'}} type={btn.icon} /> : ''}{btn.label}</span>
    }
    return (
      <Button
        type="link"
        title={btn.show === 'icon' ? btn.label : ''}
        loading={loading}
        style={btn.style || null}
        className={btn.hover || ''}
        onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
      >{label}</Button>
    )
  }
}
export default FuncButton
src/tabviews/zshare/actionList/funcbutton/index.scss
src/tabviews/zshare/actionList/index.jsx
@@ -19,7 +19,7 @@
const FuncZip = asyncComponent(() => import('./funczip'))
const EditLine = asyncComponent(() => import('./editLine'))
const ExportPdf = asyncComponent(() => import('./exportPdf'))
const ShareLink = asyncComponent(() => import('./shareLink'))
const FuncButton = asyncComponent(() => import('./funcbutton'))
class ActionList extends Component {
  static propTpyes = {
@@ -197,26 +197,26 @@
              btn={item}
            />
          )
        } else if (item.funcType === 'shareLink') {
        } else if (item.funcType === 'addline' || item.funcType === 'delline') {
          return (
            <ShareLink
            <EditLine
            key={item.uuid}
            disabled={false}
            btn={item}
            selectedData={selectedData}
            />
            )
          }
        } else {
          return (
            <FuncButton
              key={item.uuid}
              BID={BID}
              btn={item}
              selectedData={selectedData}
            />
          )
        } else if (item.funcType === 'addline' || item.funcType === 'delline') {
          return (
            <EditLine
              key={item.uuid}
              disabled={false}
              btn={item}
              selectedData={selectedData}
            />
          )
        }
      }
      return null
    })
  }
src/tabviews/zshare/actionList/shareLink/index.jsx
File was deleted