Merge branch 'main' of http://1.117.67.95:3000/team/qnc-webview-v3
This commit is contained in:
2
.env
2
.env
@@ -9,7 +9,7 @@ VITE_INQUIRE_AES_KEY=ff83609b2b24fc73196aac3d3dfb874f
|
|||||||
VITE_WECHAT_APP_ID=wx442ee1ac1ee75917
|
VITE_WECHAT_APP_ID=wx442ee1ac1ee75917
|
||||||
|
|
||||||
VITE_ICP_RECORD=琼ICP备2024048057号-2
|
VITE_ICP_RECORD=琼ICP备2024048057号-2
|
||||||
VITE_PUBLIC_SECURITY_RECORD=琼公网安备46010002000584号
|
VITE_PUBLIC_SECURITY_RECORD=琼公网安备46010002000443号
|
||||||
VITE_SHOW_PUBLIC_SECURITY_RECORD=true
|
VITE_SHOW_PUBLIC_SECURITY_RECORD=true
|
||||||
|
|
||||||
VITE_CHAT_AES_KEY=qw5w6SFE2D1jmxyd
|
VITE_CHAT_AES_KEY=qw5w6SFE2D1jmxyd
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ VITE_COMPANY_NAME=海南海宇大数据有限公司
|
|||||||
VITE_APP_NAME=全能查
|
VITE_APP_NAME=全能查
|
||||||
|
|
||||||
VITE_ICP_RECORD=琼ICP备2024038584号-10
|
VITE_ICP_RECORD=琼ICP备2024038584号-10
|
||||||
VITE_PUBLIC_SECURITY_RECORD=琼公网安备46010002000584号
|
VITE_PUBLIC_SECURITY_RECORD=琼公网安备46010002000443号
|
||||||
VITE_SHOW_PUBLIC_SECURITY_RECORD=false
|
VITE_SHOW_PUBLIC_SECURITY_RECORD=false
|
||||||
|
|
||||||
VITE_SERVICE_URL=https://work.weixin.qq.com/kfid/kfc82d4424e4b19e5f3
|
VITE_SERVICE_URL=https://work.weixin.qq.com/kfid/kfc82d4424e4b19e5f3
|
||||||
|
|||||||
@@ -70,6 +70,7 @@
|
|||||||
import { ref, computed, onMounted } from "vue";
|
import { ref, computed, onMounted } from "vue";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
const { isWeChat } = useEnv();
|
const { isWeChat } = useEnv();
|
||||||
|
import { showConfirmDialog, showToast } from "vant";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
data: {
|
data: {
|
||||||
@@ -113,6 +114,12 @@ const router = useRouter();
|
|||||||
const discountPrice = ref(false); // 是否应用折扣
|
const discountPrice = ref(false); // 是否应用折扣
|
||||||
|
|
||||||
async function getPayment() {
|
async function getPayment() {
|
||||||
|
showConfirmDialog({
|
||||||
|
title: '重要安全声明',
|
||||||
|
message:
|
||||||
|
'为保障您的个人信息与资金安全,请您务必知悉以下事项:\n\n关于平台业务:本平台官方服务仅限于大数据报告查询,不涉及也从未开展“央行征信修复”、“贷款办理”或“征信洗白”等相关业务。请注意,本平台出具的报告仅供决策参考,不可作为任何官方征信凭证或贷款依据。\n\n关于诈骗警示:任何自称与本平台合作,或以“内部渠道”、“百分百包下款”、“修复征信”等为由,诱导您进行支付的行为,均属欺诈。请您切勿相信,谨慎对待任何支付要求。\n\n关于安全提示:请您时刻保持警惕,妥善保管个人敏感信息。如遇任何索款要求或可疑承诺,请务必首先通过我平台官方公布的联系方式进行核实,切勿轻信他人。',
|
||||||
|
})
|
||||||
|
.then(async () => {
|
||||||
const { data, error } = await useApiFetch("/pay/payment")
|
const { data, error } = await useApiFetch("/pay/payment")
|
||||||
.post({
|
.post({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
@@ -146,17 +153,24 @@ async function getPayment() {
|
|||||||
payload,
|
payload,
|
||||||
function (res) {
|
function (res) {
|
||||||
if (res.err_msg == "get_brand_wcpay_request:ok") {
|
if (res.err_msg == "get_brand_wcpay_request:ok") {
|
||||||
// 支付成功,直接跳转到结果页面
|
// 支付成功:短延迟再跳转,给后端回调与异步任务留出时间,避免结果页查报告报错
|
||||||
|
showToast({ message: "支付成功,正在跳转...", type: "success" });
|
||||||
|
setTimeout(() => {
|
||||||
router.push({
|
router.push({
|
||||||
path: "/payment/result",
|
path: "/payment/result",
|
||||||
query: { orderNo: data.value.data.order_no },
|
query: { orderNo: data.value.data.order_no },
|
||||||
});
|
});
|
||||||
|
}, 1500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
show.value = false;
|
show.value = false;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
return;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -135,9 +135,30 @@ const getReport = async () => {
|
|||||||
} else if (data.value.code === 200003) {
|
} else if (data.value.code === 200003) {
|
||||||
isEmpty.value = true;
|
isEmpty.value = true;
|
||||||
isDone.value = true;
|
isDone.value = true;
|
||||||
} else if (data.value.code === 200002) {
|
} else if (data.value.code === 200002 || data.value.code === 100005) {
|
||||||
isPending.value = true;
|
// 200002:报告生成中;100005:兼容旧后端“报告未就绪”时的 DB_ERROR,按生成中轮询
|
||||||
isDone.value = true;
|
queryState.value = "pending";
|
||||||
|
if (!pollingInterval.value) {
|
||||||
|
pollingInterval.value = setInterval(() => {
|
||||||
|
getReport();
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (data.value?.code === 200002) {
|
||||||
|
// 接口返回 200002 时可能走不到上面分支,单独处理
|
||||||
|
queryState.value = "pending";
|
||||||
|
if (!pollingInterval.value) {
|
||||||
|
pollingInterval.value = setInterval(() => {
|
||||||
|
getReport();
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
} else if (data.value?.code === 100005) {
|
||||||
|
// 兼容:报告未就绪时后端返回 100005,按“生成中”轮询
|
||||||
|
queryState.value = "pending";
|
||||||
|
if (!pollingInterval.value) {
|
||||||
|
pollingInterval.value = setInterval(() => {
|
||||||
|
getReport();
|
||||||
|
}, 2000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22,11 +22,14 @@
|
|||||||
<div>
|
<div>
|
||||||
<!-- 提现卡片 -->
|
<!-- 提现卡片 -->
|
||||||
<div class="rounded-xl shadow-lg p-6 mb-4" style="background: linear-gradient(135deg, var(--van-theme-primary-light), rgba(255,255,255,0.8));">
|
<div class="rounded-xl shadow-lg p-6 mb-4" style="background: linear-gradient(135deg, var(--van-theme-primary-light), rgba(255,255,255,0.8));">
|
||||||
<div class="flex items-center mb-6">
|
<!-- 提现方式切换 -->
|
||||||
|
<van-tabs v-model:active="withdrawalType" shrink class="mb-4" title-active-color="var(--van-theme-primary)" @change="onWithdrawalTypeChange">
|
||||||
|
<van-tab title="支付宝" :name="1">
|
||||||
|
<div class="pt-2">
|
||||||
|
<div class="flex items-center mb-4">
|
||||||
<van-icon name="alipay" class="text-xl mr-2" style="color: #1677FF;" />
|
<van-icon name="alipay" class="text-xl mr-2" style="color: #1677FF;" />
|
||||||
<h1 class="text-xl font-bold" style="color: var(--van-text-color);">支付宝提现</h1>
|
<span class="text-base font-medium" style="color: var(--van-text-color);">支付宝提现</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 支付宝账号 -->
|
<!-- 支付宝账号 -->
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">支付宝账号</label>
|
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">支付宝账号</label>
|
||||||
@@ -57,6 +60,58 @@
|
|||||||
</van-field>
|
</van-field>
|
||||||
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">请填写支付宝账户认证的真实姓名</small>
|
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">请填写支付宝账户认证的真实姓名</small>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</van-tab>
|
||||||
|
<van-tab title="银行卡" :name="2">
|
||||||
|
<div class="pt-2">
|
||||||
|
<div class="flex items-center mb-4">
|
||||||
|
<van-icon name="balance-list-o" class="text-xl mr-2" style="color: var(--van-theme-primary);" />
|
||||||
|
<span class="text-base font-medium" style="color: var(--van-text-color);">银行卡提现</span>
|
||||||
|
</div>
|
||||||
|
<!-- 银行卡号 -->
|
||||||
|
<div class="mb-6">
|
||||||
|
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">银行卡号</label>
|
||||||
|
<van-field v-model="bankCardNo" placeholder="请输入银行卡号" type="number"
|
||||||
|
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm"
|
||||||
|
:rules="[{ required: true, message: ' ' }]">
|
||||||
|
<template #left-icon>
|
||||||
|
<van-icon name="balance-list-o" style="color: var(--van-text-color-2);" />
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">请填写与实名一致的开户银行卡号</small>
|
||||||
|
</div>
|
||||||
|
<!-- 开户行名称 -->
|
||||||
|
<div class="mb-6">
|
||||||
|
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">开户行名称</label>
|
||||||
|
<van-field v-model="bankName" placeholder="请输入开户行名称,如:中国工商银行XX支行"
|
||||||
|
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm"
|
||||||
|
:rules="[{ required: true, message: ' ' }]">
|
||||||
|
<template #left-icon>
|
||||||
|
<van-icon name="shop-o" style="color: var(--van-text-color-2);" />
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
</div>
|
||||||
|
<!-- 收款人姓名 -->
|
||||||
|
<div class="mb-6">
|
||||||
|
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">收款人姓名</label>
|
||||||
|
<van-field v-model="bankPayeeName" placeholder="请输入银行卡户主姓名"
|
||||||
|
class="flex items-center rounded-lg bg-white/90 backdrop-blur-sm shadow-sm" :rules="[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: ' ',
|
||||||
|
validator: (val) =>
|
||||||
|
/^[\u4e00-\u9fa5]{2,4}$/.test(val),
|
||||||
|
},
|
||||||
|
]">
|
||||||
|
<template #left-icon>
|
||||||
|
<van-icon name="contact-o" style="color: var(--van-text-color-2);" />
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
<small class="text-xs mt-1 block" style="color: var(--van-text-color-2);">需与银行卡开户姓名一致</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</van-tab>
|
||||||
|
</van-tabs>
|
||||||
<!-- 提现金额 -->
|
<!-- 提现金额 -->
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">提现金额</label>
|
<label class="text-sm mb-2 block" style="color: var(--van-text-color);">提现金额</label>
|
||||||
@@ -91,11 +146,19 @@
|
|||||||
<div class="flex items-center text-sm mb-2" style="color: var(--van-theme-primary);">
|
<div class="flex items-center text-sm mb-2" style="color: var(--van-theme-primary);">
|
||||||
<van-icon name="warning" class="mr-1" />提现须知
|
<van-icon name="warning" class="mr-1" />提现须知
|
||||||
</div>
|
</div>
|
||||||
<ul class="text-xs space-y-1" style="color: var(--van-text-color);">
|
<!-- 支付宝提现说明 -->
|
||||||
|
<ul v-if="withdrawalType === 1" class="text-xs space-y-1" style="color: var(--van-text-color);">
|
||||||
<li>· 每日限提现1次,最低50元</li>
|
<li>· 每日限提现1次,最低50元</li>
|
||||||
<li>· 提现收取6%税收</li>
|
<li>· 提现收取6%税收</li>
|
||||||
<li>· 到账时间:24小时内</li>
|
<li>· 到账时间:24小时内</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<!-- 银行卡提现说明 -->
|
||||||
|
<ul v-else class="text-xs space-y-1" style="color: var(--van-text-color);">
|
||||||
|
<li>· 每日限提现1次,最低50元</li>
|
||||||
|
<li>· 提现收取6%税收</li>
|
||||||
|
<li>· 到账时间:1-3个工作日(需人工审核)</li>
|
||||||
|
<li>· 银行卡提现:请确保开户行、户名与实名一致,到账前会有审核</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 税收说明 -->
|
<!-- 税收说明 -->
|
||||||
@@ -201,11 +264,16 @@
|
|||||||
</h2>
|
</h2>
|
||||||
<template v-if="status === 2">
|
<template v-if="status === 2">
|
||||||
<p class="text-sm" style="color: var(--van-text-color-2);">
|
<p class="text-sm" style="color: var(--van-text-color-2);">
|
||||||
|
<template v-if="withdrawalType === 1">
|
||||||
已向
|
已向
|
||||||
<span style="color: var(--van-theme-primary);">{{
|
<span style="color: var(--van-theme-primary);">{{ alipayAccount }}</span>
|
||||||
alipayAccount
|
|
||||||
}}</span>
|
|
||||||
转账
|
转账
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
已向
|
||||||
|
<span style="color: var(--van-theme-primary);">尾号{{ displayBankCardTail }}</span>
|
||||||
|
银行卡转账
|
||||||
|
</template>
|
||||||
</p>
|
</p>
|
||||||
<p class="text-2xl font-bold mt-2" style="color: #10b981;">
|
<p class="text-2xl font-bold mt-2" style="color: #10b981;">
|
||||||
¥{{ amount }}
|
¥{{ amount }}
|
||||||
@@ -227,8 +295,9 @@
|
|||||||
<!-- 辅助文案 -->
|
<!-- 辅助文案 -->
|
||||||
<div class="text-xs space-y-1.5" style="color: var(--van-text-color-2);">
|
<div class="text-xs space-y-1.5" style="color: var(--van-text-color-2);">
|
||||||
<template v-if="status === 2">
|
<template v-if="status === 2">
|
||||||
<p>预计24小时内到账</p>
|
<p>预计1-3个工作日到账(需人工审核)</p>
|
||||||
<p>可在支付宝账单中查看详情</p>
|
<p v-if="withdrawalType === 1">可在支付宝账单中查看详情</p>
|
||||||
|
<p v-else>请留意银行卡到账通知</p>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="status === 1">
|
<template v-if="status === 1">
|
||||||
<p>您的申请已进入处理队列</p>
|
<p>您的申请已进入处理队列</p>
|
||||||
@@ -289,6 +358,12 @@ const estimatedActualAmount = computed(() => {
|
|||||||
return Number(amount.value) - estimatedTaxAmount.value;
|
return Number(amount.value) - estimatedTaxAmount.value;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 银行卡号尾号(成功弹窗展示用)
|
||||||
|
const displayBankCardTail = computed(() => {
|
||||||
|
const no = (bankCardNo.value || "").replace(/\s/g, "");
|
||||||
|
return no.length >= 4 ? no.slice(-4) : no || "****";
|
||||||
|
});
|
||||||
|
|
||||||
// 样式配置
|
// 样式配置
|
||||||
const statusIcon = {
|
const statusIcon = {
|
||||||
1: "clock",
|
1: "clock",
|
||||||
@@ -325,11 +400,29 @@ const statusMessages = {
|
|||||||
3: "提现失败",
|
3: "提现失败",
|
||||||
};
|
};
|
||||||
|
|
||||||
// 表单数据
|
// 提现方式:1=支付宝,2=银行卡
|
||||||
|
const withdrawalType = ref(1);
|
||||||
|
// 表单数据 - 支付宝
|
||||||
const alipayAccount = ref("");
|
const alipayAccount = ref("");
|
||||||
const amount = ref(0);
|
const amount = ref(0);
|
||||||
const availableAmount = ref(null);
|
const availableAmount = ref(null);
|
||||||
const realName = ref("");
|
const realName = ref("");
|
||||||
|
// 表单数据 - 银行卡
|
||||||
|
const bankCardNo = ref("");
|
||||||
|
const bankName = ref("");
|
||||||
|
const bankPayeeName = ref("");
|
||||||
|
|
||||||
|
// 切换提现方式时清空另一侧部分字段(金额保留)
|
||||||
|
const onWithdrawalTypeChange = () => {
|
||||||
|
if (withdrawalType.value === 1) {
|
||||||
|
bankCardNo.value = "";
|
||||||
|
bankName.value = "";
|
||||||
|
bankPayeeName.value = "";
|
||||||
|
} else {
|
||||||
|
alipayAccount.value = "";
|
||||||
|
realName.value = "";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const getData = async () => {
|
const getData = async () => {
|
||||||
const { data, error } = await getRevenueInfo();
|
const { data, error } = await getRevenueInfo();
|
||||||
@@ -350,6 +443,22 @@ const validateAmount = (val) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const validateForm = () => {
|
const validateForm = () => {
|
||||||
|
const amountNum = Number(amount.value);
|
||||||
|
if (!amount.value || isNaN(amountNum)) {
|
||||||
|
showToast("请输入有效金额");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (amountNum < 50) {
|
||||||
|
showToast("提现金额不能低于50元");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (amountNum > availableAmount.value) {
|
||||||
|
showToast("超过可提现金额");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (withdrawalType.value === 1) {
|
||||||
|
// 支付宝
|
||||||
if (!realName.value.trim()) {
|
if (!realName.value.trim()) {
|
||||||
showToast("请输入账户实名姓名");
|
showToast("请输入账户实名姓名");
|
||||||
return false;
|
return false;
|
||||||
@@ -362,22 +471,29 @@ const validateForm = () => {
|
|||||||
showToast("请输入支付宝账号");
|
showToast("请输入支付宝账号");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
const amountNum = Number(amount.value);
|
// 银行卡
|
||||||
if (!amount.value || isNaN(amountNum)) {
|
if (!bankCardNo.value.trim()) {
|
||||||
showToast("请输入有效金额");
|
showToast("请输入银行卡号");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!/^\d{16,19}$/.test(bankCardNo.value.replace(/\s/g, ""))) {
|
||||||
if (amountNum < 50) {
|
showToast("请输入正确的银行卡号");
|
||||||
showToast("提现金额不能低于50元");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!bankName.value.trim()) {
|
||||||
if (amountNum > availableAmount.value) {
|
showToast("请输入开户行名称");
|
||||||
showToast("超过可提现金额");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!bankPayeeName.value.trim()) {
|
||||||
|
showToast("请输入收款人姓名");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!/^[\u4e00-\u9fa5]{2,4}$/.test(bankPayeeName.value)) {
|
||||||
|
showToast("请输入2-4位中文姓名");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
@@ -409,11 +525,19 @@ const confirmWithdraw = async () => {
|
|||||||
isSubmitting.value = true;
|
isSubmitting.value = true;
|
||||||
try {
|
try {
|
||||||
const { applyWithdrawal } = await import('@/api/agent');
|
const { applyWithdrawal } = await import('@/api/agent');
|
||||||
const { data, error } = await applyWithdrawal({
|
const payload = {
|
||||||
payee_account: alipayAccount.value,
|
withdrawal_type: withdrawalType.value,
|
||||||
amount: Number(amount.value),
|
amount: Number(amount.value),
|
||||||
payee_name: realName.value,
|
payee_name: withdrawalType.value === 1 ? realName.value : bankPayeeName.value,
|
||||||
});
|
};
|
||||||
|
if (withdrawalType.value === 1) {
|
||||||
|
payload.payee_account = alipayAccount.value;
|
||||||
|
} else {
|
||||||
|
payload.payee_account = bankCardNo.value.replace(/\s/g, "");
|
||||||
|
payload.bank_card_no = bankCardNo.value.replace(/\s/g, "");
|
||||||
|
payload.bank_name = bankName.value.trim();
|
||||||
|
}
|
||||||
|
const { data, error } = await applyWithdrawal(payload);
|
||||||
if (data.value?.code === 200 && !error.value) {
|
if (data.value?.code === 200 && !error.value) {
|
||||||
status.value = 1; // 新系统:申请后状态为1(待审核)
|
status.value = 1; // 新系统:申请后状态为1(待审核)
|
||||||
showTaxConfirmPopup.value = false;
|
showTaxConfirmPopup.value = false;
|
||||||
@@ -450,6 +574,9 @@ const resetForm = () => {
|
|||||||
alipayAccount.value = "";
|
alipayAccount.value = "";
|
||||||
amount.value = "";
|
amount.value = "";
|
||||||
realName.value = "";
|
realName.value = "";
|
||||||
|
bankCardNo.value = "";
|
||||||
|
bankName.value = "";
|
||||||
|
bankPayeeName.value = "";
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user