From 291b0107a031282e92d1d1fc0a9d3a3dc8229b85 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 16 五月 2024 11:46:00 +0800 Subject: [PATCH] 2024-05-16 --- /dev/null | 177 ----------------- src/tabviews/custom/components/card/cardcellList/index.jsx | 17 src/tabviews/zshare/actionList/funcbutton/index.scss | 0 src/tabviews/zshare/actionList/index.jsx | 26 +- src/api/index.js | 15 + src/tabviews/zshare/actionList/funcbutton/index.jsx | 344 ++++++++++++++++++++++++++++++++++ 6 files changed, 381 insertions(+), 198 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index 42bb5d4..bd49113 100644 --- a/src/api/index.js +++ b/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', diff --git a/src/tabviews/custom/components/card/cardcellList/index.jsx b/src/tabviews/custom/components/card/cardcellList/index.jsx index dee005b..16ec710 100644 --- a/src/tabviews/custom/components/card/cardcellList/index.jsx +++ b/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} + /> } } diff --git a/src/tabviews/zshare/actionList/funcbutton/index.jsx b/src/tabviews/zshare/actionList/funcbutton/index.jsx new file mode 100644 index 0000000..cf887d2 --- /dev/null +++ b/src/tabviews/zshare/actionList/funcbutton/index.jsx @@ -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 = '灏氭湭璁剧疆姝e紡绯荤粺閾炬帴鍦板潃锛�' + } 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 \ No newline at end of file diff --git a/src/tabviews/zshare/actionList/shareLink/index.scss b/src/tabviews/zshare/actionList/funcbutton/index.scss similarity index 100% rename from src/tabviews/zshare/actionList/shareLink/index.scss rename to src/tabviews/zshare/actionList/funcbutton/index.scss diff --git a/src/tabviews/zshare/actionList/index.jsx b/src/tabviews/zshare/actionList/index.jsx index 3993d7e..8e213d8 100644 --- a/src/tabviews/zshare/actionList/index.jsx +++ b/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 }) } diff --git a/src/tabviews/zshare/actionList/shareLink/index.jsx b/src/tabviews/zshare/actionList/shareLink/index.jsx deleted file mode 100644 index c13444a..0000000 --- a/src/tabviews/zshare/actionList/shareLink/index.jsx +++ /dev/null @@ -1,177 +0,0 @@ -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' - -class ShareLink extends Component { - static propTpyes = { - BID: PropTypes.string, - btn: PropTypes.object, - selectedData: PropTypes.any - } - - state = { - loading: false - } - - componentDidMount () { - MKEmitter.addListener('triggerBtnId', this.actionTrigger) - } - - shouldComponentUpdate (nextProps, nextState) { - return !is(fromJS(this.state), fromJS(nextState)) - } - - componentWillUnmount () { - this.setState = () => { - return - } - MKEmitter.removeListener('triggerBtnId', this.actionTrigger) - } - - /** - * @description 瑙﹀彂鎸夐挳鎿嶄綔 - */ - actionTrigger = (triggerId) => { - const { btn, BID, selectedData } = this.props - const { loading } = this.state - - if (loading) return - if (triggerId && btn.uuid !== triggerId) return - - if (window.GLOB.systemType === 'production' && !btn.shareProUrl) { - notification.warning({ - top: 92, - message: '灏氭湭璁剧疆姝e紡绯荤粺閾炬帴鍦板潃锛�', - duration: 5 - }) - return - } - - let bid = BID || '' - let id = '' - if (selectedData && selectedData[0]) { - id = selectedData[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) - } - } - - 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('宸插鍒跺埌鍓垏鏉裤��') - } - } - - render() { - const { btn } = this.props - const { loading } = this.state - - 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 ShareLink \ No newline at end of file -- Gitblit v1.8.0