2025.02.21 工作代码

This commit is contained in:
sx 2025-02-21 17:56:36 +08:00
parent c4a23be60c
commit 69babb6f3e
9 changed files with 615 additions and 253 deletions

View File

@ -297,6 +297,61 @@ const mine = {
method: 'POST',
})
},
/**
* 账号解冻
* @param {Object} param
*/
getWalletBillList(param) {
return util.request({
url: '/user/walletTransaction/list',
data: param.data,
query: param.query,
method: 'GET',
load: true,
})
},
/**
* 支付宝提现
* @param {Object} param
*/
getToAlipay(param) {
return util.request({
url: '/user/alipay/withdraw',
data: param.data,
query: param.query,
method: 'POST',
load: true,
})
},
/**
* 银行卡提现
* @param {Object} param
*/
getToBank(param) {
return util.request({
url: '/user/alipay/withdrawToBankCard',
data: param.data,
query: param.query,
method: 'POST',
load: true,
})
},
/**
* 获取提现配置
* @param {Object} param
*/
getPayConfig(param) {
return util.request({
url: '/user/alipay/getPayConfig',
data: param.data,
query: param.query,
method: 'GET',
})
},
}
export default mine

View File

@ -18,17 +18,18 @@
import util from '@/common/js/util';
// api
import api from '@/api/index.js'
import videoApi from '@/api/video.js'
import {
onLoad,
onReady,
onHide,
onUnload,
} from '@dcloudio/uni-app'
//
import apex from '@/components/header/apex.vue';
//
import videoMenu from '@/components/index/videoMenu.vue';
const {
proxy
} = getCurrentInstance()
@ -37,7 +38,6 @@
const userinfo = computed(() => store.state.userinfo)
//
const durainView = ref(0)
//
const list = reactive({
data: [],
@ -182,7 +182,7 @@
return
}
videoApi.pushVideo({
api.video.pushVideo({
query: {
ids: videoIds.value.join(','),
}
@ -219,7 +219,7 @@
return
}
videoApi.applyVideo({
api.video.applyVideo({
data: {
videoIds: videoIds.value.join(","),
author: apply.author,
@ -256,17 +256,15 @@
})
}
//
//
function pushCollect() {
uni.navigateTo({
url: util.setUrl('/pages/index/dataCenter/pushVideoCollects', {
ids: collectVideoIds.value.join(','),
})
})
link(util.setUrl('/pages/index/dataCenter/pushVideoCollects', {
ids: collectVideoIds.value.join(','),
}))
}
//
function navigateToPage(path) {
function link(path) {
uni.navigateTo({
url: path
});
@ -277,7 +275,7 @@
<view class="app">
<apex title="投流推广">
<template #right>
<view class="c333 f28" @click="navigateToPage('/pages/index/dataCenter/pushHistory')">历史推流</view>
<view class="c333 f28" @click="link('/pages/index/dataCenter/pushHistory')">历史推流</view>
</template>
</apex>
@ -432,7 +430,6 @@
</scroll-view>
</view>
</uni-popup>
</template>
<style lang="scss" scoped>

View File

@ -13,27 +13,148 @@
onReachBottom,
onPullDownRefresh
} from '@dcloudio/uni-app'
//
import api from '@/api/index.js'
//
import util from '@/common/js/util.js'
//
const list = reactive({
pageSize: 10,
pageNum: 1,
data: [],
total: 0,
})
//
const typeList = reactive([{
name: '全部',
id: '',
},
{
name: '余额',
id: 'balance',
},
{
name: '积分',
id: 'score',
},
{
name: '种子',
id: 'seed',
},
{
name: '榴莲果',
id: 'fruit',
}
])
//
const typeIndex = ref(0)
onLoad(() => {
//
//
getList()
})
onReachBottom(() => {
//
getMoreList()
})
onPullDownRefresh(() => {
//
refreshList()
})
//
function refreshList() {
list.pageNum = 1
getList()
}
//
function getMoreList() {
if (list.data.length >= list.total) return
list.pageNum++
getList()
}
//
function getList() {
api.mine.getWalletBillList({
query: {
pageSize: list.pageSize,
pageNum: list.pageNum,
type: typeList[typeIndex.value].id,
}
}).then(rs => {
if (rs.code == 200) {
if (list.pageNum == 1) list.data.length = 0
list.data.push(...rs.rows.map(item => {
//
item.typeName = typeList.find(type => type.id == item.type).name
return item
}))
list.total = rs.total
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
/**
* 账单
* @param {Object} index
*/
function handleTypeIndex(index) {
if (typeIndex.value === index) return
typeIndex.value = index
//
refreshList()
}
</script>
<template>
<view class="app">
<view class="listBox mtb30 mlr30">
<view class="typeList df bfff shadow">
<view class="item f1 fmid fdc" v-for="(item,index) in typeList" :class="{active: index == typeIndex}"
@click="handleTypeIndex(index)">
<view class="txt">{{item.name}}</view>
<view class="line"></view>
</view>
</view>
<view class="list oh mtb30 plr30 bfff br20" v-for="(item,index) in 3" :key="index">
<view class="line tac">
<view class="title mtb30">使用积分支付</view>
<view class="ghost"></view>
<view class="listBox mtb30 mlr30">
<view class="list oh mtb30 plr30 bfff br20" v-for="(item,index) in list.data" :key="item.id">
<view class="line ptb20 tac">
<view class="title mtb30">{{item.reason}}</view>
<view class="price mtb30 c111">
<text class="unit"></text>
<text class="numer b">1000</text>
<text class="numer b">{{item.amount}}</text>
</view>
<view class="time mtb30 c999 f28">2024.12.07 17:00</view>
</view>
<view class="line rows">
<view class="line f28">
<view class="df aic mtb20">
<view class="key w150">明细类型</view>
<view class="value f1 c999">{{item.typeName}}</view>
</view>
<view class="df aic mtb20">
<view class="key w150">交易时间</view>
<view class="value f1 c999">{{item.createTime}}</view>
</view>
<view class="df aic mtb20" @click.stop="util.copyText(item.transactionId)">
<view class="key w150">订单流水</view>
<view class="value f1 thd c999">{{item.transactionId}}</view>
<image class="copy wh24" src="/static/copy.png" mode="aspectFit" />
</view>
</view>
<view class="line ptb20 rows" v-if="0">
<view class="key">查看详情</view>
<uni-icons type="right" />
</view>
@ -45,14 +166,49 @@
</template>
<style lang="scss" scoped>
//
.ghost,
.typeList {
height: 100rpx;
}
//
.typeList {
position: fixed;
top: clac(-window-top + 0);
left: 0;
right: 0;
z-index: 10;
.item {
color: #999;
transition: .3s;
.line {
width: 80rpx;
height: 6rpx;
margin-top: 5rpx;
background-color: #333;
border-radius: 20rpx;
opacity: 0;
transition: .3s;
}
&.active {
color: #333;
.line {
opacity: 1;
}
}
}
}
//
.listBox {
//
.list {
.line {
padding: 20rpx 0;
}
.line+.line {
border-top: 2rpx solid #ddd;
@ -61,7 +217,7 @@
//
.price {
.unit {
font-size: 40rpx;
// font-size: 40rpx;
}
.numer {

View File

@ -5,30 +5,97 @@
reactive,
ref
} from 'vue';
import {
onLoad,
onReady,
onUnload,
} from '@dcloudio/uni-app'
//
import util from '@/common/js/util';
//
import api from '@/api/index.js';
//
const form = reactive({
amount: '',
withdrawAmount: '',
})
//
const typeList = reactive([{
key: 'bank',
name: '银行卡',
},
{
key: 'wechat',
name: '微信',
},
{
key: 'alipay',
name: '支付宝',
}
])
key: 'alipay',
name: '支付宝',
confirm: (event) => getToAlipay(event)
}, {
key: 'wechat',
name: '微信',
confirm: (event) => getToWechat(event)
}, {
key: 'bank',
name: '银行卡',
confirm: (event) => getToBank(event)
}, ])
//
const typeIndex = ref(0)
//
const alipayAccount = ref('未绑定')
//
const wechatAccount = ref('未绑定')
//
const config = reactive({})
onLoad(() => {
//
getBindAccount()
//
getPayConfig()
})
onUnload(() => {
//
removeListener()
})
//
function addListener() {
uni.$on('updateBindingAccount', () => {
//
getBindAccount()
})
}
//
function removeListener() {
uni.$off('updateBindingAccount')
}
//
function getPayConfig() {
api.mine.getPayConfig({}).then(rs => {
if (rs.code == 200) {
Object.assign(config, {}, rs.data)
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
//
function getBindAccount() {
api.mine.getBindAccount().then(rs => {
if (rs.code == 200) {
const result = rs.data
if (result.alipayId) alipayAccount.value = result.alipayId
if (result.wechatId) wechatAccount.value = result.wechatId
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
/**
* 切换下标
@ -44,6 +111,81 @@
function handleFast() {
//
}
/**
* 跳转
* @param {Object} url 跳转
*/
function link(url) {
uni.navigateTo({
url,
})
}
//
function handleSubmit() {
if (!form.withdrawAmount) {
util.alert('提现金额不能为空')
return
}
if (form.withdrawAmount < config.minWithdrawalAmount) {
util.alert(`提现金额不能小于${config.minWithdrawalAmount}`)
return
}
//
typeList[typeIndex.value].confirm()
}
//
function getToAlipay() {
api.mine.getToAlipay({
query: {
account: alipayAccount.value,
withdrawAmount: form.withdrawAmount,
}
}).then(rs => {
if (rs.code == 200) {
//
getToWalletCallback()
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
//
function getToWechat() {
util.alert('微信暂未开通,请联系管理员')
}
//
function getToBank() {
api.mine.getToBank({}).then(rs => {
if (rs.code == 200) {
//
getToWalletCallback()
util.alert({
content: '已发起提现申请,请等待后台审核',
showCancel: false,
})
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
//
function getToWalletCallback() {
//
util.getPurse()
}
</script>
<template>
@ -54,14 +196,14 @@
<view class="key">提现金额</view>
<view class="value inputBox df aic">
<view class="c333 f40 b"></view>
<input type="text" v-model="form.amount" placeholder="输入金额" />
<input type="text" v-model="form.withdrawAmount" placeholder="输入金额" />
</view>
</view>
<view class="line">
<view class="key rows">
<view>选择提现方式</view>
<view class="c999 f26" @click="handleFast">快速选择</view>
<view class="c999 f26" @click="handleFast" v-if="typeList[typeIndex].key === 'bank'">快速选择</view>
</view>
<picker :range="typeList" range-key="name" @change="handleTypeIndex">
<view class="value inputBox rows">
@ -71,8 +213,8 @@
</picker>
</view>
<!-- 银行卡 -->
<template v-if="typeList[typeIndex].key === 'bank'">
<view class="line">
<view class="key">银行名称</view>
<view class="value inputBox">
@ -88,6 +230,7 @@
</view>
</template>
<!-- 微信 -->
<template v-if="typeList[typeIndex].key === 'wechat'">
<view class="line">
<view class="key">微信号</view>
@ -97,22 +240,30 @@
</view>
</template>
<!-- 支付宝 -->
<template v-if="typeList[typeIndex].key === 'alipay'">
<view class="line">
<view class="key">支付宝账号</view>
<view class="value inputBox">
<input v-model="form.alipay" placeholder="输入金额" />
<view class="key f1">支付宝账号</view>
<view class="value df aic inputBox" @click="link('/pages/mine/setting/binding')">
{{alipayAccount}}
</view>
</view>
</template>
<!-- 温馨提示 -->
<view class="line notice ptb20 plr30 br20">
<view class="key">温馨提示</view>
<view class="content mt15 c333 f28">为保证账户资金安全请仔细核对好填写信息在申请提现</view>
<view class="content mt15 c333 f28">
<view>为保证账户资金安全请仔细核对好填写信息再申请提现</view>
<view>每次最低提现金额 {{config.minWithdrawalAmount}}</view>
<view>每次提现手续费 {{config.feeRate * 100}}%</view>
<view>每日最多提现次数 {{config.dailyWithdrawalLimit}}</view>
</view>
</view>
<view class="line">
<view class="btn pro black">提现</view>
<view class="btn pro black" @click="handleSubmit">提现</view>
</view>
</view>

View File

@ -244,7 +244,10 @@
<scroll-view scroll-y="true" class="scroll" @scrolltolower="getMoreGetList">
<view class="list c333 f30">
<view class="item mtb30 f32" v-for="(item,index) in getLog.data" :key="index">
<view>{{item.typeName}}{{item.amount}}</view>
<view class="rows">
<view class="f1 f32">{{item.typeName}}</view>
<view class="f28">{{item.amount}}积分</view>
</view>
<view class="time mt10 c999 f28 ">{{item.createTime}}</view>
</view>
</view>

View File

@ -91,6 +91,7 @@
data,
}).then(rs => {
if (rs.code == 200) {
uni.$emit('updateBindingAccount')
//
detail[bindItem.value.key] = bindItem.value.value
//

View File

@ -173,7 +173,7 @@
<template v-if="userinfo.id">
<view class="area">
<view class="line rows" @click="link('/pages/mine/setting/usePay')">
<view class="line rows" @click="link('/pages/mine/setting/usePay')" v-if="0">
<view class="">先用后付</view>
<uni-icons type="right" />
</view>

View File

@ -1,164 +1,161 @@
<script setup>
//
//
import {
ref,
reactive,
computed,
} from 'vue'
import {
useStore,
} from 'vuex'
import {
onLoad,
onUnload,
} from '@dcloudio/uni-app'
//
import TencentCloudChat from '@tencentcloud/chat';
import {
ref,
reactive,
computed,
} from 'vue'
import {
useStore,
} from 'vuex'
import {
onLoad,
onUnload,
} from '@dcloudio/uni-app'
//
import TencentCloudChat from '@tencentcloud/chat';
//
import apex from '@/components/header/apex'
//
import noLogin from '@/components/login/noLogin.vue'
//
import book from '@/components/news/book'
//
import groupList from '@/components/news/groupList'
//
import msgList from '@/components/news/msgList'
//
import footerMneu from '@/components/footerMenu/footerMenu'
//
import util from '@/common/js/util.js'
// vuex
const store = useStore()
//
const menuList = reactive([
{
key: 'group',
name: '即时消息',
load: true,
}, {
key: 'friend',
name: '通讯录',
load: false,
},
{
key: 'video',
name: '视讯消息',
load: false,
},
{
key: 'store',
name: '商城消息',
load: false,
},
])
//
const menuIndex = ref('')
//
const showSearch = ref(false)
// im
const imLoad = ref(false)
//
const userinfo = computed(() => {
return store.state.userinfo
})
//
const menuCurrent = computed(() => {
return menuList[menuIndex.value]
})
//
import apex from '@/components/header/apex'
//
import noLogin from '@/components/login/noLogin.vue'
//
import book from '@/components/news/book'
//
import groupList from '@/components/news/groupList'
//
import msgList from '@/components/news/msgList'
//
import footerMneu from '@/components/footerMenu/footerMenu'
//
import util from '@/common/js/util.js'
// vuex
const store = useStore()
//
const menuList = reactive([{
key: 'group',
name: '即时消息',
load: true,
}, {
key: 'friend',
name: '通讯录',
load: false,
},
{
key: 'video',
name: '视讯消息',
load: false,
},
{
key: 'store',
name: '商城消息',
load: false,
},
])
//
const menuIndex = ref('')
//
const showSearch = ref(false)
// im
const imLoad = ref(false)
//
const userinfo = computed(() => {
return store.state.userinfo
})
//
const menuCurrent = computed(() => {
return menuList[menuIndex.value]
})
onLoad(() => {
//
handleMenuIndex(0)
onLoad(() => {
//
handleMenuIndex(0)
//
addListener()
})
onUnload(() => {
//
removeListener()
})
//
addListener()
})
function addListener() {
uni.$chat.on(TencentCloudChat.EVENT.SDK_READY, imLoading);
}
// im
function imLoading() {
imLoad.value = true
}
onUnload(() => {
//
removeListener()
})
function removeListener() {
uni.$chat.off(TencentCloudChat.EVENT.SDK_READY, () => {});
}
//
function addListener() {
uni.$chat.on(TencentCloudChat.EVENT.SDK_READY, imLoading);
}
/**
* 切换下标
* @param {Number} index
*/
function handleMenuIndex(index) {
if (menuIndex.value === index) return
menuList.forEach(item => {
item.load = false;
});
menuList[index].load = true;
menuIndex.value = index
}
// im
function imLoading() {
imLoad.value = true
}
//
function removeListener() {
// #ifdef APP
uni.$chat.off(TencentCloudChat.EVENT.SDK_READY);
// #endif
}
/**
* 切换下标
* @param {Number} index
*/
function handleMenuIndex(index) {
if (menuIndex.value === index) return
menuList.forEach(item => {
item.load = false;
});
menuList[index].load = true;
menuIndex.value = index
}
//
function showActionSheet() {
uni.showActionSheet({
itemList: ['扫一扫', '添加好友', '发起群聊', '我的二维码'],
success: rs => {
switch (rs.tapIndex) {
case 0:
util.scan()
break;
case 1:
uni.navigateTo({
// url: '/pages/news/addFriend'
url: '/pages/news/newFriend'
});
break;
case 2:
uni.navigateTo({
url: '/pages/news/group-chat/index'
});
break;
case 3:
uni.navigateTo({
url: '/pages/news/myQr'
});
break;
default:
break;
//
function showActionSheet() {
uni.showActionSheet({
itemList: ['扫一扫', '添加好友', '发起群聊', '我的二维码'],
success: rs => {
switch (rs.tapIndex) {
case 0:
util.scan()
break;
case 1:
uni.navigateTo({
// url: '/pages/news/addFriend'
url: '/pages/news/newFriend'
});
break;
case 2:
uni.navigateTo({
url: '/pages/news/group-chat/index'
});
break;
case 3:
uni.navigateTo({
url: '/pages/news/myQr'
});
break;
default:
break;
}
}
}
})
}
})
}
function getUserInfos(userRecommend) {
videoApi.getUserInfo({
query: {
userRecommend: userRecommend,
}
}).then(rs => {
if (rs.data !== null) {
uni.navigateTo({
url: '/pages/index/beInvited?header=' + rs.data.userPortrait + '&userId=' + rs.data
.userId + '&userNickname=' +
rs.data.userNickname
});
}
})
}
function getUserInfos(userRecommend) {
videoApi.getUserInfo({
query: {
userRecommend: userRecommend,
}
}).then(rs => {
if (rs.data !== null) {
uni.navigateTo({
url: '/pages/index/beInvited?header=' + rs.data.userPortrait + '&userId=' + rs.data
.userId + '&userNickname=' +
rs.data.userNickname
});
}
})
}
</script>
<template>
@ -229,70 +226,70 @@ function getUserInfos(userRecommend) {
</template>
<style lang="scss" scoped>
//
.headMenu {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 25rpx;
margin: 20rpx;
//
.headMenu {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 25rpx;
margin: 20rpx;
//
.option {
height: 120rpx;
background-color: #E2E2E2;
border-radius: 15rpx;
transition: .3s;
//
.option {
height: 120rpx;
background-color: #E2E2E2;
border-radius: 15rpx;
transition: .3s;
//
&.active {
color: #fff;
//
&.active {
color: #fff;
//
&.friend,
&.group,
&.video {
background-image: linear-gradient(126deg, #27EFE2 0%, #A45EFF 43%, #FF004F 100%);
//
&.friend,
&.group,
&.video {
background-image: linear-gradient(126deg, #27EFE2 0%, #A45EFF 43%, #FF004F 100%);
}
//
&.store {
background-image: linear-gradient(270deg, #FF9B27 20%, #FDC123 103%);
}
}
}
//
&.store {
background-image: linear-gradient(270deg, #FF9B27 20%, #FDC123 103%);
}
//
.cartoon {
margin-top: -15rpx;
margin-right: -25rpx;
width: 194rpx;
height: 175rpx;
transform: rotate(-5deg);
}
}
//
.cartoon {
margin-top: -15rpx;
margin-right: -25rpx;
width: 194rpx;
height: 175rpx;
transform: rotate(-5deg);
//
.searchBox {
overflow: hidden;
height: 0;
transition: .3s;
&.active {
height: 80rpx;
}
}
}
//
.searchBox {
overflow: hidden;
height: 0;
transition: .3s;
&.active {
height: 80rpx;
//
.swiper {
flex: 1;
width: 100%;
}
}
//
.swiper {
flex: 1;
width: 100%;
}
//
.loading {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
//
.loading {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
</style>

View File

@ -64,6 +64,8 @@ selectAddress 选择地址
updateOrderList 更新订单列表
updateOrderDetail 更新订单详情
updateUserProduct 更新用户商品
updateBindingAccount 更新绑定账号
selectBindingBank 选择绑定的银行卡
缓存
---