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', 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 export default mine

View File

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

View File

@ -13,27 +13,148 @@
onReachBottom, onReachBottom,
onPullDownRefresh onPullDownRefresh
} from '@dcloudio/uni-app' } 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(() => { 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> </script>
<template> <template>
<view class="app"> <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="ghost"></view>
<view class="line tac">
<view class="title mtb30">使用积分支付</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"> <view class="price mtb30 c111">
<text class="unit"></text> <text class="numer b">{{item.amount}}</text>
<text class="numer b">1000</text>
</view> </view>
<view class="time mtb30 c999 f28">2024.12.07 17:00</view>
</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> <view class="key">查看详情</view>
<uni-icons type="right" /> <uni-icons type="right" />
</view> </view>
@ -45,14 +166,49 @@
</template> </template>
<style lang="scss" scoped> <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 { .listBox {
// //
.list { .list {
.line {
padding: 20rpx 0;
}
.line+.line { .line+.line {
border-top: 2rpx solid #ddd; border-top: 2rpx solid #ddd;
@ -61,7 +217,7 @@
// //
.price { .price {
.unit { .unit {
font-size: 40rpx; // font-size: 40rpx;
} }
.numer { .numer {

View File

@ -5,30 +5,97 @@
reactive, reactive,
ref ref
} from 'vue'; } from 'vue';
import {
onLoad,
onReady,
onUnload,
} from '@dcloudio/uni-app'
//
import util from '@/common/js/util'; import util from '@/common/js/util';
//
import api from '@/api/index.js'; import api from '@/api/index.js';
// //
const form = reactive({ const form = reactive({
amount: '', withdrawAmount: '',
}) })
// //
const typeList = reactive([{ const typeList = reactive([{
key: 'bank', key: 'alipay',
name: '银行卡', name: '支付宝',
}, confirm: (event) => getToAlipay(event)
{ }, {
key: 'wechat', key: 'wechat',
name: '微信', name: '微信',
}, confirm: (event) => getToWechat(event)
{ }, {
key: 'alipay', key: 'bank',
name: '支付宝', name: '银行卡',
} confirm: (event) => getToBank(event)
]) }, ])
// //
const typeIndex = ref(0) 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() { 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> </script>
<template> <template>
@ -54,14 +196,14 @@
<view class="key">提现金额</view> <view class="key">提现金额</view>
<view class="value inputBox df aic"> <view class="value inputBox df aic">
<view class="c333 f40 b"></view> <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> </view>
<view class="line"> <view class="line">
<view class="key rows"> <view class="key rows">
<view>选择提现方式</view> <view>选择提现方式</view>
<view class="c999 f26" @click="handleFast">快速选择</view> <view class="c999 f26" @click="handleFast" v-if="typeList[typeIndex].key === 'bank'">快速选择</view>
</view> </view>
<picker :range="typeList" range-key="name" @change="handleTypeIndex"> <picker :range="typeList" range-key="name" @change="handleTypeIndex">
<view class="value inputBox rows"> <view class="value inputBox rows">
@ -71,8 +213,8 @@
</picker> </picker>
</view> </view>
<!-- 银行卡 -->
<template v-if="typeList[typeIndex].key === 'bank'"> <template v-if="typeList[typeIndex].key === 'bank'">
<view class="line"> <view class="line">
<view class="key">银行名称</view> <view class="key">银行名称</view>
<view class="value inputBox"> <view class="value inputBox">
@ -88,6 +230,7 @@
</view> </view>
</template> </template>
<!-- 微信 -->
<template v-if="typeList[typeIndex].key === 'wechat'"> <template v-if="typeList[typeIndex].key === 'wechat'">
<view class="line"> <view class="line">
<view class="key">微信号</view> <view class="key">微信号</view>
@ -97,22 +240,30 @@
</view> </view>
</template> </template>
<!-- 支付宝 -->
<template v-if="typeList[typeIndex].key === 'alipay'"> <template v-if="typeList[typeIndex].key === 'alipay'">
<view class="line"> <view class="line">
<view class="key">支付宝账号</view> <view class="key f1">支付宝账号</view>
<view class="value inputBox">
<input v-model="form.alipay" placeholder="输入金额" /> <view class="value df aic inputBox" @click="link('/pages/mine/setting/binding')">
{{alipayAccount}}
</view> </view>
</view> </view>
</template> </template>
<!-- 温馨提示 -->
<view class="line notice ptb20 plr30 br20"> <view class="line notice ptb20 plr30 br20">
<view class="key">温馨提示</view> <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>
<view class="line"> <view class="line">
<view class="btn pro black">提现</view> <view class="btn pro black" @click="handleSubmit">提现</view>
</view> </view>
</view> </view>

View File

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

View File

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

View File

@ -173,7 +173,7 @@
<template v-if="userinfo.id"> <template v-if="userinfo.id">
<view class="area"> <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> <view class="">先用后付</view>
<uni-icons type="right" /> <uni-icons type="right" />
</view> </view>

View File

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

View File

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