feat: 对接完接口

This commit is contained in:
anonymous
2025-01-09 15:47:16 +08:00
parent e70ca852d8
commit ffb887f3bf
12 changed files with 416 additions and 255 deletions
+8 -4
View File
@@ -1,11 +1,15 @@
const baseUrl = import.meta.env.VITE_SERVER_BASEURL
export const useCaptcha = () => {
const codeUrl = ref('')
const t = ref(Date.now())
const codeUrl = computed(() => {
return baseUrl + '/captcha.html?t=' + t.value
})
const refreshCode = () => {
const baseUrl = import.meta.env.VITE_SERVER_BASEURL
codeUrl.value = baseUrl + '/captcha.html?t=' + Date.now()
t.value = Date.now()
}
onMounted(() => {
refreshCode()
})
return { codeUrl, refreshCode }
return { codeUrl, t, refreshCode }
}
+29 -19
View File
@@ -13,30 +13,40 @@ import { useUserStore } from '@/store'
const userStore = useUserStore()
const tabList = [
{ label: '我的余额', value: 0 },
{ label: '救济金余额', value: 1 },
{ label: '养老金余额', value: 2 },
{ label: '金余额', value: 3 },
]
const tabList = computed(() => {
return [
{ label: '我的余额', value: 1, money: userStore.userInfo.money },
{ label: '救济金余额', value: 2, money: userStore.userInfo.moneyjiu },
{ label: '养老金余额', value: 3, money: userStore.userInfo.moneyold },
{ label: '团队佣金余额', value: 4, money: userStore.userInfo.moneyyong },
]
})
const tabIndex = ref(0)
const detailInfo = ref({
point: 1,
score: 1000,
suminvest: '10000',
})
const { list: assetList } = useListPageRequest((params) =>
const { list: assetList, onReload } = useListPageRequest(
(params) =>
getMyAssetAPI(params).then((res) => {
detailInfo.value = res.data
res.data.data = res.data.list
return res.data
return res
}),
{
autoRequest: false,
},
)
onLoad((options) => {
tabIndex.value = Number(options.tabIndex ?? 0)
})
watch(
() => tabIndex.value,
(index) => {
onReload({
type: unref(tabList)[index].value,
})
},
{
immediate: true,
},
)
</script>
<template>
@@ -44,18 +54,18 @@ onLoad((options) => {
<view class="absolute top-130 -left-55 btn-gradient text-white rounded-full w-172 h-172"></view>
<view class="flex justify-around">
<view
v-for="tabItem in tabList"
@click="tabIndex = tabItem.value"
v-for="(tabItem, index) in tabList"
@click="tabIndex = index"
:key="tabItem.value"
class="flex items-center bg-#DEEBFF text-#3B81F3 rounded-full justify-center py-4 px-10"
:class="{ 'btn-gradient text-white': tabIndex === tabItem.value }"
:class="{ 'btn-gradient text-white': tabIndex === index }"
>
<view class="text-14">{{ tabItem.label }}</view>
</view>
</view>
<view class="p-15">
<view class="text-17">{{ tabList[tabIndex].label }}</view>
<view class="text-30">{{ detailInfo.suminvest }}</view>
<view class="text-30">{{ tabList[tabIndex].money }}</view>
</view>
<view class="relative z-1 main-content pt-40 pb-30 rounded-t-15">
<view class="mb-15 px-25">{{ tabList[tabIndex].label }}明细</view>
+13 -5
View File
@@ -21,7 +21,9 @@
class="m-15 text-white flex rounded-tl-10 rounded-br-10 justify-between items-center p-15 bg-[linear-gradient(90deg,rgba(59,129,243,0.5),#3B81F3)]"
>
<view class="text-14">{{ type === 0 ? '养老金' : '团队佣金' }}余额</view>
<view class="text-17 font-bold">{{ userStore.userInfo.money }}</view>
<view class="text-17 font-bold">
{{ type === 0 ? userStore.userInfo.moneyold : userStore.userInfo.moneyyong }}
</view>
</view>
<view class="p-15 bg-white shadow-[0_-2px_3px_rgba(10,68,245,0.1)] rounded-10">
<view class="mt-15">
@@ -34,7 +36,12 @@
placeholder="转出金额"
class="text-14 text-#333 flex-1"
/>
<view class="text-12 text-gradient" @click="convertNum = userStore.userInfo.score">
<view
class="text-12 text-gradient"
@click="
convertNum = type === 0 ? userStore.userInfo.moneyold : userStore.userInfo.moneyyong
"
>
全部
</view>
</view>
@@ -62,7 +69,7 @@
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { convertScoreAPI } from '@/service'
import { convertScoreAPI, getOldMoneyTransferAPI, getYongMoneyTransferAPI } from '@/service'
import { useUserStore } from '@/store'
import { mergeStep, showModal } from '@/utils'
@@ -78,8 +85,9 @@ const onWithdrawalDetail = () => {
const onSubmit = mergeStep(async () => {
await showModal('确认转换?')
await convertScoreAPI({
score: convertNum.value,
const request = type.value === 0 ? getOldMoneyTransferAPI : getYongMoneyTransferAPI
await request({
money: convertNum.value,
})
await showModal('转换成功')
userStore.loadUserInfo()
+1 -1
View File
@@ -66,7 +66,7 @@ const onLottery = () => {
<style lang="scss" scoped>
.invite-page {
background-image: url('@/static/images/page-sub/invite-bg.png');
background-image: url('@/static/images/page-sub/invite-bg.jpg');
background-repeat: no-repeat;
background-position: top;
background-size: 100%;
@@ -8,6 +8,7 @@
</route>
<template>
<view class="min-h-screen pb-100">
<template v-if="list.length > 0">
<view
class="flex px-15 py-8 border-b border-#E5E5E5 border-b-solid"
v-for="item in list"
@@ -57,6 +58,10 @@
</view>
</view>
</view>
</template>
<template v-else>
<wd-status-tip image="content" tip="暂无内容" />
</template>
</view>
</template>
+1 -30
View File
@@ -71,8 +71,6 @@ const userStore = useUserStore()
const form = ref({
money: '',
bankid: '6',
tpassword: '',
})
const onWithdrawalDetail = () => {
@@ -81,22 +79,6 @@ const onWithdrawalDetail = () => {
})
}
const typeName = computed(() => {
return ['支付宝', '微信', '银行卡'][Number(unref(currentBank)?.typedata) - 1]
})
const currentBank = ref<any>(null)
const onSelectPayType = () => {
uni.$once('withdrawal-type', (data: any) => {
form.value.bankid = data.id
console.log(data)
currentBank.value = data
})
uni.navigateTo({
url: '/pages-sub/withdrawal-type/index?type=select',
})
}
const onSubmit = async () => {
if (!form.value.money) {
return uni.showToast({
@@ -104,18 +86,7 @@ const onSubmit = async () => {
icon: 'none',
})
}
if (!form.value.bankid) {
return uni.showToast({
title: '请选择收款方式',
icon: 'none',
})
}
if (!form.value.tpassword) {
return uni.showToast({
title: '请输入交易密码',
icon: 'none',
})
}
await showModal('确认提现?')
await submitWithdrawalAPI(form.value)
await showModal('提交成功')
+26 -3
View File
@@ -10,6 +10,18 @@
<template>
<view class="home-page">
<NavBar />
<template v-if="userStore.userInfo.banknum">
<view class="main-container w-345 h-185 mx-auto rounded-14 px-20 pt-70 text-12">
<view>姓名{{ userStore.userInfo.nickname }}</view>
<view class="mt-10">社会xx号码{{ userStore.userInfo.banknum.substring(0, 4) }}</view>
<view class="mt-15">中国工商银行卡号</view>
<view class="mt-5 text-14 text-#333">
<!-- 每四位数字插入空格 -->
{{ userStore.userInfo.banknum.replace(/(\d{4})(?=\d)/g, '$1 ') }}
</view>
</view>
</template>
<template v-else>
<view class="main-container w-345 h-185 mx-auto rounded-14 px-20 pt-70 text-12">
<view>姓名***</view>
<view class="mt-15">社会xx号码***</view>
@@ -21,6 +33,7 @@
>
开通个人养老账号
</view>
</template>
<view class="bg-white pt-15 px-15 rounded-10 m-15">
<view class="flex justify-between items-center">
@@ -90,7 +103,13 @@
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { downloadAppAPI, getIntroductionAPI, getRealNameAuthAPI } from '@/service'
import {
downloadAppAPI,
getIntroductionAPI,
getOpenPersonalAccountAPI,
getRealNameAuthAPI,
} from '@/service'
import { useUserStore } from '@/store'
import { showModal } from '@/utils'
defineOptions({
@@ -161,8 +180,12 @@ watch(
},
)
const handleOpenAccount = () => {
showModal('开通个人养老账户时,需邀请一名用户')
const userStore = useUserStore()
const handleOpenAccount = async () => {
await getOpenPersonalAccountAPI()
await showModal('开通个人养老账户成功')
userStore.loadUserInfo()
// showModal('开通个人养老账户时,需邀请一名用户')
}
</script>
+107 -43
View File
@@ -15,25 +15,37 @@
<view class="flex mt-30">
<view class="flex-1 text-center">
<view class="text-14">全部</view>
<view class="text-16 font-bold mt-15">2</view>
<view class="text-16 font-bold mt-15">
{{ userStore.userInfo.yanglao + userStore.userInfo.yiliao }}
</view>
</view>
<view class="flex-1 text-center">
<view class="text-14">养老</view>
<view class="text-16 font-bold mt-15">1</view>
<view class="text-16 font-bold mt-15">{{ userStore.userInfo.yanglao }}</view>
</view>
<view class="flex-1 text-center">
<view class="text-14">医疗</view>
<view class="text-16 font-bold mt-15">未保障</view>
<view class="text-16 font-bold mt-15">
{{ userStore.userInfo.yiliao ? '保障中' : '未保障' }}
</view>
</view>
</view>
</view>
<view class="flex p-15 mt-15">
<view class="px-24 py-4 rounded-full btn-gradient text-white text-14">养老</view>
<view class="ml-15 px-24 py-4 rounded-full bg-#DEEBFF text-#3B81F3 text-14">医疗</view>
<view
v-for="item in tabList"
:key="item.value"
class="px-24 mr-15 bg-#DEEBFF text-#3B81F3 py-4 rounded-full text-14"
:class="{ 'btn-gradient text-white': item.value === tabValue }"
@click="tabValue = item.value"
>
{{ item.title }}
</view>
</view>
<view>
<template v-if="tabValue === 1">
<view
v-for="item in investmentList"
:key="item.id"
@@ -43,60 +55,89 @@
<image
class="rounded-10 w-100 h-100"
mode="aspectFill"
src="https://picsum.photos/100/100"
:src="getImageUrl(item.rightimage)"
/>
<view class="flex-1 ml-15">
<view class="text-15 text-#333 font-bold">{{ item.name }}</view>
<view class="flex items-center mt-10">
<view class="px-14 py-2 text-12 text-#D6A165 rounded-2 bg-#FFEBD4">商业型</view>
<view class="ml-8 px-14 py-2 text-12 text-#3B81F3 rounded-2 bg-#D4E8FF">低风险</view>
<view class="w-200 flex items-center mt-10 overflow-x-auto">
<view
class="px-14 mr-15 py-2 whitespace-nowrap text-12 text-#D6A165 rounded-2 bg-#FFEBD4"
v-for="(tag, index) in item.labeltag.split(',')"
:key="tag"
:class="{
'!text-#3B81F3 !bg-#D4E8FF': index % 2 === 1,
}"
>
{{ tag }}
</view>
<view class="text-12 mt-15 text-#999">
此处是产品简介此处是产品简介此处是产品简介此处是产
</view>
<view class="text-12 mt-15 text-#999" v-html="item.content"></view>
</view>
</view>
<view class="flex items-center mt-15">
<view class="flex-1 text-center">
<view class="text-15 text-#FF3B30">1.99(%)</view>
<view class="text-15 text-#FF3B30">{{ item.dividend }}(%)</view>
<view class="text-14 text-#999">日收益</view>
</view>
<view class="text-#D9D9D9">|</view>
<view class="flex-1 text-center">
<view class="text-15 text-#FF3B30">365()</view>
<view class="text-15 text-#FF3B30">{{ item.days }}()</view>
<view class="text-14 text-#999">周期</view>
</view>
</view>
<view class="text-center text-15 text-white rounded-full py-8 btn-gradient mt-15">
<view
class="text-center text-15 text-white rounded-full py-8 btn-gradient mt-15"
@click="onInvest(item)"
>
购买
</view>
</view>
</template>
<view class="p-15 bg-white rounded-20 mx-auto w-345 relative mb-15">
<template v-else>
<view
v-for="item in investmentList"
:key="item.id"
class="p-15 bg-white rounded-20 mx-auto w-345 relative mb-15"
>
<view class="flex">
<image
class="rounded-10 w-100 h-100"
mode="aspectFill"
src="https://picsum.photos/100/100"
:src="getImageUrl(item.leftimage)"
/>
<view class="flex-1 ml-15">
<view class="text-15 text-#333 font-bold">好医保·长期医保(旗舰版)</view>
<view class="text-12 mt-15 text-#999">
此处是产品简介此处是产品简介此处是产品简介此处是产
</view>
<view class="text-15 text-#333 font-bold">{{ item.name }}</view>
<view class="text-12 mt-15 text-#999" v-html="item.content" />
</view>
</view>
<view
class="text-center text-15 text-white rounded-full py-8 border-#3B81F3 border-1 border-solid mt-15"
>
<text class="text-gradient">查看权益</text>
<text class="text-gradient" @click="onShowRights(item)">查看权益</text>
</view>
<view class="text-center text-15 text-white rounded-full py-8 btn-gradient mt-15">
<view
class="text-center text-15 text-white rounded-full py-8 btn-gradient mt-15"
@click="onInvest(item)"
>
我要投保
</view>
</view>
</template>
</view>
<wd-action-sheet v-model="showPayType" :panels="panels" @select="onSelectPayType" />
<wd-popup
v-model="showRightConfig.show"
:title="`${showRightConfig.data?.name}权益`"
custom-style="border-radius: 15px"
>
<view>
<image
class="w-345 h-345"
:src="getImageUrl(showRightConfig.data?.rightimage)"
mode="widthFix"
/>
</view>
</wd-popup>
</view>
</template>
@@ -107,28 +148,37 @@ import WechatIcon from '@/static/images/invest/wechat-icon.png'
import UnionpayIcon from '@/static/images/invest/unionpay-icon.png'
import { getInvestmentListAPI, submitInvestAPI } from '@/service'
import { useUserStore } from '@/store'
import { mergeStep, showModal } from '@/utils'
import { getImageUrl, mergeStep, showModal } from '@/utils'
defineOptions({
name: 'Home',
})
const showPayType = ref(false)
const panels = ref([
{
iconUrl: WechatIcon,
title: '微信支付',
},
{
iconUrl: AlipayIcon,
title: '支付宝支付',
},
{
iconUrl: UnionpayIcon,
title: '银联支付',
},
])
const { list: investmentList } = useListPageRequest(getInvestmentListAPI)
const tabList = [
{
value: 1,
title: '养老',
},
{
value: 2,
title: '医疗',
},
]
const tabValue = ref(1)
const { list: investmentList, onReload } = useListPageRequest((params) =>
getInvestmentListAPI({
...params,
type: tabValue.value,
}),
)
watch(
() => tabValue.value,
() => {
onReload()
},
)
const userStore = useUserStore()
@@ -138,9 +188,23 @@ const onGoInvestDetail = () => {
})
}
const onSelectPayType = ({ item, index }: any) => {
console.log(item, index)
alert(item.title)
const showRightConfig = ref({
show: false,
data: null,
})
watch(
() => showRightConfig.value.show,
(val) => {
if (!val) {
showRightConfig.value.data = null
}
},
)
const onShowRights = (item: any) => {
showRightConfig.value = {
show: true,
data: item,
}
}
const onInvest = mergeStep(async (item: any) => {
+72 -44
View File
@@ -13,7 +13,12 @@ import NavBar from '@/components/NavBar.vue'
import VueQrcode from '@chenfengyuan/vue-qrcode'
import { useUserStore } from '@/store'
import Avatar from '@/components/Avatar.vue'
import { getCommunityMyInviteAPI } from '@/service'
import {
getCommunityInviteFirstAPI,
getCommunityInviteRewardAPI,
getCommunityMyInviteAPI,
} from '@/service'
import { showModal } from '@/utils'
const userStore = useUserStore()
@@ -37,6 +42,61 @@ const { list } = useListPageRequest((params) => {
return res.data
})
})
const inviteInfo = ref<any>(null)
const loadInviteInfo = async () => {
const { data } = await getCommunityInviteFirstAPI()
inviteInfo.value = data
// inviteInfo.value = {
// num: 10,
// isuserauth: 1,
// realrewards: '200',
// jianglitiaojian: {
// '10': '3000',
// '20': '5000',
// '30': '15000',
// '40': '30000',
// '50': '50000',
// },
// open: 1,
// }
}
onShow(async () => {
await loadInviteInfo()
})
const taskList = computed(() => {
if (!inviteInfo.value) return []
const inviteTask = Object.keys(inviteInfo.value.jianglitiaojian)
const inviteTaskList = inviteTask.map((key) => ({
title: `邀请${key}人(${inviteInfo.value.num}/${key})`,
desc: `每月额外领取${inviteInfo.value.jianglitiaojian[key]}元数济金`,
level: key,
status: Number(inviteInfo.value.num) >= Number(key),
open: false,
}))
// 查找最后一个完成的任务,并设置open为true
const lastCompletedTask = inviteTaskList.findLast((item) => item.status)
if (lastCompletedTask) {
lastCompletedTask.open = inviteInfo.value.open
}
return [
{
title: '注册实名',
desc: `领取${inviteInfo.value.realrewards}元救济金`,
status: inviteInfo.value.isuserauth,
open: false,
},
...inviteTaskList,
]
})
async function onGetReward(level) {
await getCommunityInviteRewardAPI({ level })
showModal('领取成功')
await loadInviteInfo()
}
</script>
<template>
@@ -72,56 +132,24 @@ const { list } = useListPageRequest((params) => {
<view class="mt-70 w-345 mx-auto">
<view
class="bg-#F3F8FF rounded-10 border-#3B81F3 border-2 border-solid p-15 flex items-start"
v-for="item of taskList"
:key="item.title"
>
<view class="flex-1">
<view class="text-15 text-#333 font-500">注册实名</view>
<view class="text-12 text-#333 mt-8">领取20000元救济金</view>
</view>
<view class="bg-#C4F7C4 rounded-4 px-10 py-4 leading-12 text-#62C162 text-12">已完成</view>
</view>
<view
class="mt-2 bg-#F3F8FF rounded-10 border-#3B81F3 border-2 border-solid p-15 flex items-start"
>
<view class="flex-1">
<view class="text-15 text-#333 font-500">
邀请10人
<text class="text-#50D0FF">({{ inviteData.num }}</text>
<text class="text-#50D0FF">/10)</text>
</view>
<view class="text-12 text-#333 mt-8">每月额外领取3000元数济金</view>
</view>
<view>
<view
class="w-fit ml-auto mr-0 bg-#C4F7C4 rounded-4 px-10 py-4 leading-12 text-#62C162 text-12 mb-8"
>
已完成
</view>
<view
class="w-fit ml-auto mr-0 bg-#F3CB3B33 rounded-4 px-10 py-4 leading-12 text-#FFA600 text-12"
>
领取救济金
</view>
</view>
</view>
<view
class="mt-2 bg-#F3F8FF rounded-10 border-#3B81F3 border-2 border-solid p-15 flex items-start"
>
<view class="flex-1">
<view class="text-15 text-#333 font-500">
邀请10人
<text class="text-#50D0FF">(10</text>
<text class="text-#">/20)</text>
</view>
<view class="text-12 text-#333 mt-8">每月额外领取3000元数济金</view>
<view class="text-15 text-#333 font-500">{{ item.title }}</view>
<view class="text-12 text-#333 mt-8">{{ item.desc }}</view>
</view>
<view>
<view
class="w-fit ml-auto mr-0 bg-#C4F7C4 rounded-4 px-10 py-4 leading-12 text-#62C162 text-12 mb-8"
v-if="item.status"
>
已完成
</view>
<view
class="w-fit ml-auto mr-0 bg-#F3CB3B33 rounded-4 px-10 py-4 leading-12 text-#FFA600 text-12"
v-if="item.open"
@click="onGetReward(item.level)"
>
领取救济金
</view>
@@ -131,17 +159,17 @@ const { list } = useListPageRequest((params) => {
<view class="bg-#FFFFFFE5 rounded-20 mt-30 w-345 mx-auto p-15 flex">
<view class="flex-1 text-center">
<view class="text-18 text-#333">团队人数</view>
<view class="text-gradient text-18 mt-8">3000</view>
<view class="text-gradient text-18 mt-8">{{ inviteData.num }}</view>
<view class="font-500 text-14 mt-4">直推人数</view>
</view>
<view class="flex-1 text-center">
<view class="text-18 text-#333">团队人数</view>
<view class="text-gradient text-18 mt-8">3000</view>
<view class="text-18 text-#333">我的佣金</view>
<view class="text-gradient text-18 mt-8">{{ inviteData.performance }}</view>
<view class="font-500 text-14 mt-4">直推业绩</view>
</view>
</view>
<view class="mt-15 w-345 mx-auto">
<view class="ml-15 text-18 text-white">团队成员3/</view>
<view class="ml-15 text-18 text-white">团队成员{{ inviteData.num }}/</view>
<view class="mt-15 bg-white px-15 pt-15 pb-4 rounded-10" v-for="item of list" :key="item.id">
<view class="flex items-center">
<Avatar :src="item.avatar" class="w-50 h-50" mode="aspectFill" />
+3 -3
View File
@@ -45,7 +45,7 @@
class="text-right flex-1 text-14"
placeholder="请输入验证码"
/>
<image
<img
:src="codeUrl"
class="w-100 h-30 ml-15 bg-gray-400"
mode="widthFix"
@@ -84,7 +84,7 @@ const formData = ref({
captcha: '',
})
const { codeUrl, refreshCode } = useCaptcha()
const { codeUrl, t: captchaT, refreshCode } = useCaptcha()
let redirect = '/'
onLoad((options) => {
@@ -110,7 +110,7 @@ const handleLogin = async () => {
data: {
userinfo: { token },
},
} = await loginUserAPI(formData.value)
} = await loginUserAPI({ ...formData.value, t: captchaT.value })
userStore.setToken(token)
uni.reLaunch({
url: redirect,
+14 -4
View File
@@ -96,9 +96,9 @@
import Avatar from '@/components/Avatar.vue'
import NavBar from '@/components/NavBar.vue'
import { loginRoute } from '@/interceptors/route'
import { downloadAppAPI } from '@/service'
import { downloadAppAPI, getSignInAPI } from '@/service'
import { useUserStore } from '@/store/user'
import { getImageUrl } from '@/utils'
import { getImageUrl, showModal } from '@/utils'
import CommonIcon1 from '@/static/images/my/common-icon-1.png'
import CommonIcon2 from '@/static/images/my/common-icon-2.png'
@@ -166,7 +166,11 @@ const handleConvert = (type) => {
})
}
const handleSignIn = () => {}
const handleSignIn = async () => {
await getSignInAPI()
showModal('签到成功')
userStore.loadUserInfo()
}
const handleKefu = () => {
uni.navigateTo({
@@ -174,11 +178,17 @@ const handleKefu = () => {
})
}
const handleInvestDetail = () => {
uni.navigateTo({
url: '/pages-sub/invest-detail/index',
})
}
const commonList = [
{
title: '投保记录',
icon: CommonIcon5,
handle: handleTeam,
handle: handleInvestDetail,
},
{
title: '资金明细',
+39 -1
View File
@@ -96,7 +96,7 @@ export const getMyTeamAPI = (data) =>
// 我的资产
export const getMyAssetAPI = (data) =>
http({
url: '/api/user/myassets',
url: '/api/user/moneyloglist',
method: 'POST',
data,
})
@@ -169,3 +169,41 @@ export const getCommunityInviteFirstAPI = (data) =>
method: 'POST',
data,
})
// 领取救济金
export const getCommunityInviteRewardAPI = (data) =>
http({
url: '/api/user/rewardtwo',
method: 'POST',
data,
})
// 签到功能
export const getSignInAPI = () =>
http({
url: '/api/user/signin',
method: 'POST',
})
// 开通个人养老账户
export const getOpenPersonalAccountAPI = () =>
http({
url: '/api/user/activateold',
method: 'POST',
})
// 养老金转入余额
export const getOldMoneyTransferAPI = (data) =>
http({
url: '/api/user/yangout',
method: 'POST',
data,
})
// 佣金转入养老金
export const getYongMoneyTransferAPI = (data) =>
http({
url: '/api/user/tuanduiout',
method: 'POST',
data,
})