275 lines
7.4 KiB
Vue
275 lines
7.4 KiB
Vue
<template>
|
|
<JeepayCustomNavbar backCtrl="back" bgDefaultColor="#fff" title="支付宝代运营授权" />
|
|
<view class="ali-wrapper">
|
|
<view class="ali-top">
|
|
<image class="ali-image" :src="calcStyleOrImg()" mode="scaleToFill" />
|
|
<view class="ali-status" :style="{ color: calcStyleOrImg('color') }">{{ calcAliStatus() }}</view>
|
|
<view class="ali-reset" @tap="upDateAliStatus">
|
|
<image src="/static/iconImg/ali-resete.svg" mode="scaleToFill" /> 刷新授权状态
|
|
</view>
|
|
|
|
<view class="edit-input flex-center" style="margin-top: 30rpx">
|
|
<view class="input-title">支付宝账号</view>
|
|
<uni-easyinput :inputBorder="false" v-model="vdata.aliAccount" placeholderStyle=" font-size: 30rpx;color:#ADADAD"
|
|
placeholder="请输入支付宝账号以授权" :styles="styles" clearable />
|
|
</view>
|
|
</view>
|
|
<view class="ali-bottom">
|
|
<view>
|
|
<Button @tap="openPopup">{{ vdata.original?.handleStatus == 'SUCCESS' ? '重新' : '发起' }}授权</Button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<JSinglePopup :list="list" ref="refSingle" />
|
|
<uni-popup type="center" ref="refPopup">
|
|
<view class="ali-img-wrapper">
|
|
<view class="ali-tips">
|
|
请使用支付宝账号【{{ vdata.aliAccount }}】绑定的支付宝扫码,根据页面指引完成授权
|
|
</view>
|
|
<image class="ali-image" :src="vdata.qrImg" mode="scaleToFill" />
|
|
<view class="save-img">
|
|
<Button @tap="saveImage(vdata.qrImg)">保存图片</Button>
|
|
</view>
|
|
</view>
|
|
</uni-popup>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { $aliPayQrCodeOrApply, $aliAccountInfo } from "@/http/apiManager"
|
|
import infoBox from '@/commons/utils/infoBox.js';
|
|
import { ref, reactive, onMounted } from "vue"
|
|
const vdata = reactive({
|
|
aliAccount: '',
|
|
original: {},//存储原始数据
|
|
})
|
|
const styles = {
|
|
backgroundColor: 'transparent',
|
|
color: '#000',
|
|
fontSize: '32rpx',
|
|
}
|
|
const refSingle = ref(null)
|
|
const refPopup = ref(null)
|
|
const list = [
|
|
{ label: '发送支付宝授权消息', value: 'phone', fun: () => { getAliQrCode('phone') } },
|
|
{ label: '使用支付宝扫授权码', value: 'scan', fun: () => { getAliQrCode('scan') } },
|
|
]
|
|
const getAliQrCode = (v) => {
|
|
if (validate()) return
|
|
$aliPayQrCodeOrApply(vdata.aliAccount, v == 'phone' ? 'apply' : 'queryQrcode').then(({ bizData }) => {
|
|
vdata.qrImg = decodeURIComponent(bizData.qrCodeUrl)
|
|
upDateAliStatus()
|
|
if (v == 'phone') {
|
|
infoBox.showToast('授权消息发送成功 请在支付宝 服务消息点击确认授权')
|
|
return
|
|
}
|
|
refPopup.value.open()
|
|
})
|
|
}
|
|
|
|
const getAliInfo = () => {
|
|
$aliAccountInfo().then(({ bizData }) => {
|
|
if (!bizData) return
|
|
vdata.original = bizData
|
|
vdata.aliAccount = bizData.alipayAccount
|
|
})
|
|
}
|
|
getAliInfo()
|
|
const validate = () => {
|
|
// 正则表达式 判断是否包含中文 和 中文符号
|
|
const REG = /[\u4e00-\u9fa5|\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/
|
|
if (vdata.aliAccount == vdata.original.alipayAccount && vdata.original.handleStatus == 'SUCCESS') return infoBox.showToast('当前支付宝账号已授权通过,无需再次授权。')
|
|
if (REG.test(vdata.aliAccount)) return infoBox.showToast('账号格式错误 不能包含中文和中文标点符号')
|
|
return false
|
|
}
|
|
const calcAliStatus = () => {
|
|
if (!vdata.original.handleStatus) return '暂未授权'
|
|
if (vdata.original.handleStatus == 'SUCCESS') return '已授权'
|
|
if (vdata.original.handleStatus == 'PROCESS') return '授权中'
|
|
return '暂未授权'
|
|
}
|
|
const calcStyleOrImg = (v = 'img') => {
|
|
if (v == 'img') return vdata.original.handleStatus == 'SUCCESS' ? '/static/iconImg/ali-success.svg' : '/static/iconImg/ali-none.svg'
|
|
if (v == 'color') return vdata.original.handleStatus == 'SUCCESS' ? '#000000ff' : '#afbbcbff'
|
|
}
|
|
// 更新授权状态
|
|
const upDateAliStatus = () => {
|
|
$aliPayQrCodeOrApply().then(({ bizData }) => {
|
|
infoBox.showToast('授权状态更新成功')
|
|
if (bizData) vdata.original.handleStatus = bizData.handleStatus
|
|
})
|
|
}
|
|
const saveImage = (key) => {
|
|
// #ifdef APP-PLUS
|
|
|
|
uni.downloadFile({
|
|
url: key,
|
|
success: (res) => {
|
|
if (res.statusCode == 200) {
|
|
uni.saveImageToPhotosAlbum({
|
|
filePath: res.tempFilePath,
|
|
success: (r) => {
|
|
infoBox.showSuccessToast('保存成功')
|
|
uni.vibrateShort()
|
|
},
|
|
fail: (er) => {
|
|
infoBox.showErrorToast('保存失败')
|
|
}
|
|
})
|
|
}
|
|
},
|
|
fail: (err) => {
|
|
infoBox.showErrorToast('保存失败')
|
|
}
|
|
})
|
|
// #endif
|
|
//#ifdef MP-WEIXIN
|
|
downloadQR(key)
|
|
//#endif
|
|
}
|
|
|
|
//#ifdef MP-WEIXIN
|
|
function downloadQR (key) {
|
|
console.log('执行');
|
|
wx.getSetting({
|
|
//获取权限
|
|
success (res) {
|
|
if (res.authSetting['scope.writePhotosAlbum']) {
|
|
if (key == 'authQr') return saveWxQrcodeImg(vdata.authQr)
|
|
download(key)
|
|
} else {
|
|
wx.authorize({
|
|
scope: 'scope.writePhotosAlbum',
|
|
success () {
|
|
if (key == 'authQr') return saveWxQrcodeImg(vdata.authQr)
|
|
download(key)
|
|
},
|
|
})
|
|
}
|
|
},
|
|
})
|
|
}
|
|
function download (data) {
|
|
uni.downloadFile({
|
|
url: data,
|
|
success: (res) => {
|
|
uni.saveImageToPhotosAlbum({
|
|
filePath: res.tempFilePath,
|
|
success: function () {
|
|
infoBox.showSuccessToast('保存成功')
|
|
uni.vibrateShort()
|
|
},
|
|
fail: function (err) {
|
|
infoBox.showErrorToast('保存失败')
|
|
},
|
|
})
|
|
},
|
|
})
|
|
}
|
|
//#endif
|
|
const openPopup = () =>{
|
|
if(!vdata.aliAccount) return infoBox.showToast('请输入支付宝账号。')
|
|
refSingle.value.open()
|
|
}
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.ali-wrapper {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
min-height: calc(100vh - 170rpx);
|
|
overflow: hidden;
|
|
|
|
.ali-top {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
width: 100%;
|
|
|
|
.ali-image {
|
|
margin-top: 50rpx;
|
|
width: 350rpx;
|
|
height: 280rpx;
|
|
}
|
|
|
|
.ali-status {
|
|
margin: 20rpx 0 50rpx 0;
|
|
color: #afbbcbff;
|
|
font-size: 36rpx;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.ali-reset {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-bottom: 130rpx;
|
|
color: #1f7bfeff;
|
|
font-size: 26rpx;
|
|
|
|
image {
|
|
margin-right: 15rpx;
|
|
width: 28rpx;
|
|
height: 28rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.ali-bottom {
|
|
display: flex;
|
|
justify-content: center;
|
|
height: 180rpx;
|
|
|
|
view {
|
|
width: 400rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.edit-input {
|
|
padding: 0 20rpx;
|
|
width: calc(100% - 100rpx);
|
|
flex: 1;
|
|
min-height: 120rpx;
|
|
border-radius: 32rpx;
|
|
background-color: #f7f7f7;
|
|
}
|
|
|
|
.input-title {
|
|
margin-left: 40rpx;
|
|
font-size: 30rpx;
|
|
color: #000;
|
|
}
|
|
|
|
:deep .content-clear-icon {
|
|
color: rgb(192, 196, 204) !important;
|
|
}
|
|
|
|
.ali-img-wrapper {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
margin: 0 auto;
|
|
width: calc(100% - 60rpx);
|
|
min-height: 500rpx;
|
|
background-color: #fff;
|
|
border-radius: 22rpx;
|
|
|
|
image {
|
|
margin-top: 15rpx;
|
|
width: 350rpx;
|
|
height: 350rpx;
|
|
}
|
|
}
|
|
|
|
.ali-tips {
|
|
margin: 30rpx;
|
|
margin-bottom: 0;
|
|
text-align: center;
|
|
color: #808080ff;
|
|
font-size: 26rpx;
|
|
line-height: 2;
|
|
}
|
|
|
|
.save-img {
|
|
margin: 30rpx 0;
|
|
width: 80%;
|
|
}</style> |