新增
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
<template>
|
||||
<page-meta :page-style="$theme.pageStyle">
|
||||
<!-- #ifndef H5 -->
|
||||
<navigation-bar
|
||||
:front-color="$theme.navColor"
|
||||
:background-color="$theme.navBgColor"
|
||||
/>
|
||||
<!-- #endif -->
|
||||
</page-meta>
|
||||
<view class="h-screen flex flex-col justify-center items-center">
|
||||
<view>
|
||||
<u-empty text="对不起,您访问的页面不存在" mode="data"></u-empty>
|
||||
</view>
|
||||
<view class="w-full px-[100rpx] mt-[40rpx]">
|
||||
<router-navigate
|
||||
class="bg-primary rounded-full text-btn-text leading-[80rpx] text-center"
|
||||
to="/"
|
||||
nav-type="reLaunch"
|
||||
>
|
||||
返回首页
|
||||
</router-navigate>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
@@ -0,0 +1,109 @@
|
||||
<template>
|
||||
<page-meta :page-style="$theme.pageStyle">
|
||||
<!-- #ifndef H5 -->
|
||||
<navigation-bar
|
||||
:front-color="$theme.navColor"
|
||||
:background-color="$theme.navBgColor"
|
||||
/>
|
||||
<!-- #endif -->
|
||||
</page-meta>
|
||||
<view class="recharge p-[20rpx]">
|
||||
<view class="bg-white rounded-[14rpx] p-[40rpx]">
|
||||
<view class="text-content">充值金额</view>
|
||||
<view class="border-0 border-b border-solid border-light">
|
||||
<input
|
||||
v-model="money"
|
||||
class="text-[60rpx] h-[60rpx] py-[24rpx]"
|
||||
placeholder="0.00"
|
||||
type="digit"
|
||||
/>
|
||||
</view>
|
||||
<view class="mt-[20rpx] text-xs text-muted">
|
||||
当前可用余额
|
||||
<text class="text-primary"> {{ wallet.user_money }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mt-[40rpx]">
|
||||
<u-button :loading="isLock" type="primary" shape="circle" @click="rechargeLock">
|
||||
立即充值
|
||||
</u-button>
|
||||
</view>
|
||||
<view class="flex justify-center m-[60rpx]">
|
||||
<navigator url="/packages/pages/recharge_record/recharge_record" hover-class="none">
|
||||
<text class="text-content text-sm">充值记录</text>
|
||||
</navigator>
|
||||
</view>
|
||||
<payment
|
||||
v-model:show="payState.showPay"
|
||||
v-model:show-check="payState.showCheck"
|
||||
:order-id="payState.orderId"
|
||||
:from="payState.from"
|
||||
:redirect="payState.redirect"
|
||||
@success="handlePaySuccess"
|
||||
@fail="handlePayFail"
|
||||
/>
|
||||
</view>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { recharge, rechargeConfig } from '@/api/recharge'
|
||||
import { useLockFn } from '@/hooks/useLockFn'
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||
import { reactive, ref } from 'vue'
|
||||
const money = ref('')
|
||||
|
||||
const payState = reactive({
|
||||
orderId: '',
|
||||
from: '',
|
||||
showPay: false,
|
||||
showCheck: false,
|
||||
redirect: '/packages/pages/recharge/recharge'
|
||||
})
|
||||
const wallet = reactive({
|
||||
user_money: '',
|
||||
min_amount: 0
|
||||
})
|
||||
|
||||
const { isLock, lockFn: rechargeLock } = useLockFn(async () => {
|
||||
const minNum = wallet.min_amount
|
||||
if (!money.value) return uni.$u.toast('请输入充值金额')
|
||||
if (minNum == 0 && Number(money.value) == minNum) {
|
||||
return uni.$u.toast(`充值金额必须大于0`)
|
||||
}
|
||||
if (Number(money.value) < minNum) return uni.$u.toast(`最低充值金额${minNum}`)
|
||||
const data = await recharge({
|
||||
money: money.value
|
||||
})
|
||||
payState.orderId = data.order_id
|
||||
payState.from = data.from
|
||||
payState.showPay = true
|
||||
})
|
||||
|
||||
const handlePaySuccess = async () => {
|
||||
payState.showPay = false
|
||||
payState.showCheck = false
|
||||
uni.navigateTo({
|
||||
url: `/pages/payment_result/payment_result?id=${payState.orderId}&from=${payState.from}`
|
||||
})
|
||||
}
|
||||
|
||||
const handlePayFail = async () => {
|
||||
uni.$u.toast('支付失败')
|
||||
}
|
||||
|
||||
const getWallet = async () => {
|
||||
const data = await rechargeConfig()
|
||||
Object.assign(wallet, data)
|
||||
}
|
||||
|
||||
onLoad((options: any) => {
|
||||
// h5支付用于弹起手动确认支付弹窗
|
||||
if (options?.checkPay) {
|
||||
payState.orderId = options.id
|
||||
payState.from = options.from
|
||||
payState.showCheck = true
|
||||
}
|
||||
})
|
||||
onShow(() => {
|
||||
getWallet()
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,52 @@
|
||||
<template>
|
||||
<page-meta :page-style="$theme.pageStyle">
|
||||
<!-- #ifndef H5 -->
|
||||
<navigation-bar
|
||||
:front-color="$theme.navColor"
|
||||
:background-color="$theme.navBgColor"
|
||||
/>
|
||||
<!-- #endif -->
|
||||
</page-meta>
|
||||
<z-paging
|
||||
ref="paging"
|
||||
v-model="dataList"
|
||||
@query="queryList"
|
||||
:show-loading-more-when-reload="true"
|
||||
>
|
||||
<view class="pt-2.5">
|
||||
<view
|
||||
v-for="item in dataList"
|
||||
:key="item.id"
|
||||
class="bg-white border-solid border-b border-0 border-light px-[26rpx] py-[24rpx]"
|
||||
>
|
||||
<view class="flex justify-between">
|
||||
<view class="mr-2">{{ item.tips }}</view>
|
||||
<view class="text-lg text-primary"> +{{ item.order_amount }} </view>
|
||||
</view>
|
||||
<view class="text-sm text-muted mr-1">{{ item.create_time }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</z-paging>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, shallowRef } from 'vue'
|
||||
import { rechargeRecord } from '@/api/recharge'
|
||||
|
||||
const paging = shallowRef()
|
||||
const dataList = ref<any[]>([])
|
||||
|
||||
const queryList = async (pageNo: number, pageSize: number) => {
|
||||
try {
|
||||
const data = await rechargeRecord({
|
||||
page_no: pageNo,
|
||||
page_size: pageSize
|
||||
})
|
||||
paging.value.complete(data.lists)
|
||||
} catch (error) {
|
||||
paging.value.complete(false)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
@@ -0,0 +1,120 @@
|
||||
<template>
|
||||
<page-meta :page-style="$theme.pageStyle">
|
||||
<!-- #ifndef H5 -->
|
||||
<navigation-bar
|
||||
:front-color="$theme.navColor"
|
||||
:background-color="$theme.navBgColor"
|
||||
/>
|
||||
<!-- #endif -->
|
||||
</page-meta>
|
||||
<z-paging
|
||||
ref="paging"
|
||||
v-model="dataList"
|
||||
@query="queryList"
|
||||
:show-loading-more-when-reload="true"
|
||||
>
|
||||
<view class="user-wallet">
|
||||
<view class="p-[20rpx]">
|
||||
<view
|
||||
class="bg-primary rounded-[14rpx] flex items-center justify-between pl-[44rpx] py-[54rpx] text-white"
|
||||
>
|
||||
<view>
|
||||
<view class="text-sm">钱包余额</view>
|
||||
<view class="text-[60rpx]">{{ wallet.user_money }}</view>
|
||||
</view>
|
||||
<navigator
|
||||
v-if="wallet.status"
|
||||
url="/packages/pages/recharge/recharge"
|
||||
hover-class="none"
|
||||
>
|
||||
<view class="text-primary px-[30rpx] py-[15rpx] bg-white rounded-l-full">
|
||||
去充值
|
||||
</view>
|
||||
</navigator>
|
||||
</view>
|
||||
</view>
|
||||
<u-tabs
|
||||
:list="tabList"
|
||||
:is-scroll="false"
|
||||
v-model="current"
|
||||
activeColor="var(--color-primary)"
|
||||
@change="changeType"
|
||||
></u-tabs>
|
||||
|
||||
<view class="pt-2.5">
|
||||
<view
|
||||
v-for="item in dataList"
|
||||
:key="item.id"
|
||||
class="bg-white border-solid border-b border-0 border-light px-[26rpx] py-[24rpx]"
|
||||
>
|
||||
<view class="flex justify-between">
|
||||
<view class="mr-2">{{ item.type_desc }}</view>
|
||||
<view
|
||||
class="text-lg"
|
||||
:class="{
|
||||
'text-primary': item.action == 1
|
||||
}"
|
||||
>
|
||||
{{ item.change_amount_desc }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-sm text-muted mr-1">{{ item.create_time }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</z-paging>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, shallowRef } from 'vue'
|
||||
import { accountLog } from '@/api/user'
|
||||
import { rechargeConfig } from '@/api/recharge'
|
||||
import { onShow } from '@dcloudio/uni-app'
|
||||
const tabList = ref([
|
||||
{
|
||||
name: '全部',
|
||||
type: ''
|
||||
},
|
||||
{
|
||||
name: '收入',
|
||||
type: 1
|
||||
},
|
||||
{
|
||||
name: '支出',
|
||||
type: 2
|
||||
}
|
||||
])
|
||||
const paging = shallowRef()
|
||||
const dataList = ref<any[]>([])
|
||||
const current = ref(0)
|
||||
|
||||
const changeType = (index: number) => {
|
||||
current.value = index
|
||||
paging.value.reload()
|
||||
}
|
||||
|
||||
const queryList = async (pageNo: number, pageSize: number) => {
|
||||
try {
|
||||
const action = tabList.value[current.value].type
|
||||
const data = await accountLog({
|
||||
action,
|
||||
type: 'um',
|
||||
page_no: pageNo,
|
||||
page_size: pageSize
|
||||
})
|
||||
paging.value.complete(data.lists)
|
||||
} catch (error) {
|
||||
paging.value.complete(false)
|
||||
}
|
||||
}
|
||||
|
||||
const wallet = ref<any>({})
|
||||
const getWallet = async () => {
|
||||
wallet.value = await rechargeConfig()
|
||||
}
|
||||
onShow(() => {
|
||||
getWallet()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
Reference in New Issue
Block a user