支付宝理财页面40%

This commit is contained in:
tangxinyue 2026-01-26 17:39:03 +08:00
parent 19ddea7165
commit 2147da46ac
36 changed files with 2657 additions and 1968 deletions

View File

@ -6,6 +6,7 @@ export default {
recentNativeData: 0 // recentNativeData: 0 //
}, },
onLaunch: function (options) { onLaunch: function (options) {
uni.setStorageSync('onNativeEventReceive', "no")
const startTime = Date.now() const startTime = Date.now()
console.log('App Launch', options) console.log('App Launch', options)

View File

@ -272,6 +272,11 @@
justify-content: space-between; justify-content: space-between;
} }
.flex-justify-between {
display: flex;
justify-content: space-between;
}
.flex-align-center { .flex-align-center {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -4,8 +4,9 @@
<view class="item" v-for="(item, index) in tabList" :key="item.id" <view class="item" v-for="(item, index) in tabList" :key="item.id"
:class="{ 'active': index === activeIndex }" @click="onTabChange(index)"> :class="{ 'active': index === activeIndex }" @click="onTabChange(index)">
<view class="left"> <view class="left">
<view class="triangle-concave-transparent "> <!-- <view class="triangle-concave-transparent ">
</view> </view> -->
<image src="/static/image/recharge/tabLine.png" mode=""></image>
</view> </view>
<view class="box" v-show="index != activeIndex"> <view class="box" v-show="index != activeIndex">
{{ item.label }} {{ item.label }}
@ -17,8 +18,9 @@
<image class="vipImage" v-else src="/static/image/template/close.png" mode=""></image> <image class="vipImage" v-else src="/static/image/template/close.png" mode=""></image>
</view> </view>
<view class="right"> <view class="right">
<view class="triangle-concave-transparent leftBox"> <image src="/static/image/recharge/tabLine.png" mode=""></image>
</view> <!-- <view class="triangle-concave-transparent leftBox">
</view> -->
</view> </view>
</view> </view>
</view> </view>
@ -492,7 +494,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.container { .container {
margin:0 20px 20px 20px; margin:0 32rpx 32rpx 32rpx;
overflow: hidden; overflow: hidden;
} }
@ -508,7 +510,7 @@ export default {
width: 100%; width: 100%;
height: 42px; height: 42px;
// background-color: #; // background-color: #;
border-radius: 14px 14px 0 0; border-radius: 12px 12px 0 0;
position: relative; position: relative;
line-height: 47px; line-height: 47px;
text-align: center; text-align: center;
@ -538,22 +540,27 @@ export default {
} }
.left,.right{
image{
width: 19px;
height: 30px;
}
}
.left { .left {
display: none; display: none;
position: absolute; position: absolute;
bottom: 0; top: 12px;
left: -25px; left: -19px;
// transition: all 0.3s ease-in-out; // transition: all 0.3s ease-in-out;
transform-origin: right center; // transform-origin: right center;
// transform: scaleX(0); transform: scaleX(-1);
} }
.right { .right {
display: none; display: none;
position: absolute; position: absolute;
bottom: 0; top: 12px;
right: -25px; right: -19px;
// transition: all 0.3s ease-in-out; // transition: all 0.3s ease-in-out;
transform-origin: left center; transform-origin: left center;
// transform: scaleX(0); // transform: scaleX(0);

View File

@ -2,7 +2,7 @@
<view style="width: 100%;" :style="{ height: `${data.statusBarHeight + 44}px` }"></view> <view style="width: 100%;" :style="{ height: `${data.statusBarHeight + 44}px` }"></view>
<view class="nav-bar-container" :style="{ backgroundColor: bgColor, zIndex: zIndex }"> <view class="nav-bar-container" :style="{ backgroundColor: bgColor, zIndex: zIndex }">
<view class="status-placeholder" :style="{ height: `${data.statusBarHeight}px` }"></view> <view class="status-placeholder" :style="{ height: `${data.statusBarHeight}px` }"></view>
<view style="width: 100%;height: 44px;" @click="openPopup"> <view style="width: 100%;height: 88rpx;" @click="openPopup">
<slot> <slot>
<uni-nav-bar backgroundColor="#00000000" class="nav-bar" :border="false" :title="title" v-bind="$attrs" <uni-nav-bar backgroundColor="#00000000" class="nav-bar" :border="false" :title="title" v-bind="$attrs"
v-on="$attrs"> v-on="$attrs">

View File

@ -27,7 +27,7 @@ export function createApp() {
const systemInfo = uni.getStorageSync('systemInfo') || {} const systemInfo = uni.getStorageSync('systemInfo') || {}
app.config.globalProperties.$system = systemInfo.platform == 'ios' ? 'iOS' : 'Android' app.config.globalProperties.$system = systemInfo.platform == 'ios' ? 'iOS' : 'Android'
app.config.globalProperties.$systemInfo = systemInfo app.config.globalProperties.$systemInfo = systemInfo
uni.setStorageSync('version', '1.0.0.sp2') uni.setStorageSync('version', '1.0.0.sp3')
app.config.globalProperties.$version = uni.getStorageSync('version') app.config.globalProperties.$version = uni.getStorageSync('version')
app.use(globalMethods); app.use(globalMethods);

View File

@ -262,11 +262,11 @@ const onConsumptionDateChange = (e) => {
} }
onLoad((option) => { onLoad((option) => {
// //
proxy.$apiUserEvent('all', { proxy.$apiUserEvent('all', {
type: 'click', type: 'click',
key: 'huabei', key: 'huabei_overdue',
value: "花呗" value: "花呗逾期"
}) })
console.log(option) console.log(option)
// //

View File

@ -241,7 +241,8 @@ import {
reactive, reactive,
toRefs, toRefs,
ref, ref,
nextTick nextTick,
getCurrentInstance
} from 'vue' } from 'vue'
import { import {
onLoad, onLoad,
@ -257,6 +258,9 @@ const {
updateBill updateBill
} = useStore() } = useStore()
const instance = getCurrentInstance();
const { proxy } = instance;
const billManagementPopupRef = ref(null) const billManagementPopupRef = ref(null)
const buttonGroup = [{ const buttonGroup = [{
@ -326,6 +330,12 @@ onShow(() => {
}) })
onLoad((option) => { onLoad((option) => {
//
proxy.$apiUserEvent('all', {
type: 'click',
key: 'bill_details',
value: "账单详情"
})
console.log(option) console.log(option)
if (option.id) { if (option.id) {
data.billId = option.id data.billId = option.id

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,15 @@
<template> <template>
<view class="container"> <!-- 水印 -->
<view class="main-info-container"> <view v-if="$isVip()">
<watermark :dark="data.dark" />
<liu-drag-button :canDocking="false" @clickBtn="$goRechargePage('watermark')">
<c-lottie ref="cLottieRef" :src='$watermark()' width="94px" height='74px' :loop="true"></c-lottie>
</liu-drag-button>
</view>
<view class="container flex flex-column" @touchstart="handleTouchStart" @touchmove.stop.prevent="handleTouchMove"
@touchend="handleTouchEnd">
<view class="main-info-container" :class="{ 'open': isOpen }"
:style="{ 'padding-bottom': `${cardArrowHeight}px` }">
<!-- 导航栏 placeholder --> <!-- 导航栏 placeholder -->
<NavBar bgColor="transparent"> <NavBar bgColor="transparent">
<view class="nav-bar flex-align-center h100"> <view class="nav-bar flex-align-center h100">
@ -36,10 +45,13 @@
</view> </view>
<view class="total-money flex-align-center" style="margin-top: 10px;"> <view class="total-money flex-align-center" style="margin-top: 10px;">
<view class="total-money-value flex-align-center"> <view class="total-money-value flex-align-center">
<text>{{ financeInfo.totalMoney }}</text> <text class="alipay-font">{{ numberUtil.formatMoneyWithThousand(totalMoney) }}</text>
</view> </view>
<view class="total-money-value flex-align-center"> <view class="total-money-value flex-align-center">
<text>{{ financeInfo.yesterdayIncome }}</text> <text class="alipay-font">{{ yesterdayIncome > 0 ? "+" +
numberUtil.formatMoneyWithThousand(yesterdayIncome) :
numberUtil.formatMoneyWithThousand(yesterdayIncome)
}}</text>
</view> </view>
</view> </view>
</view> </view>
@ -48,54 +60,129 @@
<text>家庭保障</text> <text>家庭保障</text>
</view> </view>
<view class=" flex-align-end" style="margin-top: 10px;"> <view class=" flex-align-end" style="margin-top: 10px;">
<text class="value">{{ financeInfo.familyProtection }}</text> <text class="value alipay-font">{{ familyProtection }}</text>
<text class="text"></text> <text class="text"></text>
</view> </view>
</view> </view>
</view> </view>
<view class="data-box">
<view v-for="item in myAssets" :key="item.title">
<view v-if="item.title" class="title second-color">{{ item.title }}</view>
<view class="group-data flex-justify-between">
<template v-for="subItem in item.items" :key="subItem.label">
<view v-if="financeInfo[item.key][subItem.key].labelSub"
class="item flex-align-center flex-justify-between">
<view class="flex-align-center">
<text class="label primary-color">{{ subItem.label }}</text>
<text v-if="financeInfo[item.key][subItem.key].type == 'text'"
class="label-sub second-color">
{{ formatTextWithNumber(financeInfo[item.key][subItem.key].labelSub) }}
</text>
<text v-else class="label-sub second-color">
{{
numberUtil.formatMoneyWithThousand(financeInfo[item.key][subItem.key].labelSub)
}}</text>
</view>
<view class="arrow-box"> <text v-if="financeInfo[item.key][subItem.key].value" class="value primary-color">{{
<image class="arrow-icon" src="/static/image/finance-management/arrow-down.png"></image> financeInfo[item.key][subItem.key].value > 0 ? "+" +
</view> numberUtil.formatMoneyWithThousand(financeInfo[item.key][subItem.key].value) :
numberUtil.formatMoneyWithThousand(financeInfo[item.key][subItem.key].value)
}}</text>
</view>
</template>
<view class="card-box flex-column"> <view v-if="item.groupId == '1'" class="item flex-align-center flex-justify-between">
<view class="flex-align-center">
<view class="wealth-card-box flex"> <text class="label primary-color">更多资产服务</text>
<!-- 占位图片设置为透明 --> </view>
<image class="wealth-card-opacity0" src="/static/image/finance-management/v1/bg.png" <text class="value primary-color">去看看</text>
mode="widthFix" />
<!-- 背景图片高度自适应 -->
<image class="wealth-card" src="/static/image/finance-management/v1/bg.png" mode="widthFix" />
<view class="card-info">
<image class="logo" src="/static/image/finance-management/v1/logo.png" mode="scaleToFill" />
<view class="name-box flex-align-center">
<image class="card-holder-icon" src="/static/image/finance-management/v1/card-holder.png"
mode="scaleToFill" />
<view class="card-holder-name sacramento-font">{{ financeInfo.cardHolderName }}</view>
</view> </view>
</view> </view>
<view class="enjoy-benefits flex-align-center">
<text class="benefits-text">{{ financeInfo.benefitsText }}</text>
<image class="arrow-icon" src="/static/image/finance-management/v1/arrow.png"></image>
</view>
</view> </view>
<view class="content-box"></view>
</view> </view>
</view> </view>
<view class="image-service-box flex-column"
:style="{ top: topHeight + 'px', 'min-height': `calc(100vh - ${imageCardBoxtopHeight}px)` }">
<view class="card-arrow-box">
<view class="arrow-box">
<image @click="data.isOpen = !data.isOpen" class="arrow-icon"
:src="`/static/image/finance-management/arrow-${isOpen ? 'up' : 'down'}.png`">
</image>
</view>
<view class="content"> <view class="card-box flex-column">
<view class="wealth-card-box flex">
<!-- 占位图片设置为透明 -->
<image class="wealth-card-opacity0" src="/static/image/finance-management/v1/bg.png"
mode="widthFix" @load="updateTopHeight" />
<!-- 背景图片高度自适应 -->
<image class="wealth-card"
:src="`/static/image/finance-management/${financeInfo.vipLevel}/bg.png`" mode="widthFix" />
<view class="card-info">
<image class="logo"
:src="`/static/image/finance-management/${financeInfo.vipLevel}/logo.png`"
mode="scaleToFill" />
<view class="name-box flex-align-center">
<image class="card-holder-icon"
:src="`/static/image/finance-management/${financeInfo.vipLevel}/card-holder.png`"
mode="scaleToFill" />
<view class="card-holder-name sacramento-font">{{ financeInfo.cardHolderName }}</view>
</view>
</view>
<view class="enjoy-benefits flex-align-center">
<text class="benefits-text">{{ financeInfo.benefitsText }}</text>
<image class="arrow-icon"
:src="`/static/image/finance-management/${financeInfo.vipLevel}/arrow.png`"></image>
</view>
</view>
<view class="content-box">
<view class="service-icons">
<view class="service-icon" v-for="item in serviceIcons" :key="item.name">
<image class="icon"
:src="`/static/image/finance-management/service-icon/${item.icon}.png`"
mode="scaleToFill" />
<text class="name">{{ item.name }}</text>
</view>
</view>
</view>
</view>
</view>
<view class="content flex-1 flex-align-center flex-justify-center">
<view class="flex-align-center flex-column">
<image style="width:92rpx; height: 92rpx;margin-top: 16rpx;"
src="/static/image/common/upload-screenshot.png">
</image>
<text style="font-size: 36rpx;color: #1777FF;">长按替换真实截图</text>
</view>
</view>
</view>
<view class="bottom-box"
:class="`navigation-menu-${financeInfo.navigationMenuStyle}`, { 'ios-bottom-box': $system == 'iOS' }">
<view class="bottom-item" v-for="item in navigationMenu" :key="item.name">
<image
:src="`/static/image/finance-management/navigation-menu/${financeInfo.navigationMenuStyle}/${item.icon}.png`">
</image>
<text>{{ item.name }}</text>
</view>
</view> </view>
</view> </view>
</template> </template>
<script setup> <script setup>
import NavBar from '@/components/nav-bar/nav-bar.vue' import NavBar from '@/components/nav-bar/nav-bar.vue'
import { ref, toRefs, reactive, onMounted } from 'vue' import { ref, toRefs, reactive, onMounted, watch, computed } from 'vue'
import { onLoad } from '@dcloudio/uni-app' import { onLoad, onReady } from '@dcloudio/uni-app'
import { serviceIcons, navigationMenu, myAssets } from '@/static/json/fortune.json'
import { numberUtil } from '@/utils/common.js'
onLoad(() => { onLoad(() => {
// //
@ -106,18 +193,245 @@ onLoad(() => {
// }) // })
}) })
const data = reactive({ onReady(() => {
financeInfo: { statusBarHeight.value = uni.getSystemInfoSync().statusBarHeight;
totalMoney: 100000000, uni.createSelectorQuery().select('.total-money-box').boundingClientRect((data) => {
yesterdayIncome: 22222, console.log("total-money-box height: " + (data ? data.height : "null"));
familyProtection: 1, topHeight.value = data ? data.height + 44 + statusBarHeight.value : 44 + statusBarHeight.value;
benefitsText: '尊享礼遇18000元/年', imageCardBoxtopHeight.value = data ? data.height + 44 + statusBarHeight.value : 44 + statusBarHeight.value;
cardHolderName: 'LiXing', }).exec()
vipLevel: 1,
}
}) })
let { financeInfo } = toRefs(data) const updateTopHeight = () => {
setTimeout(() => {
uni.createSelectorQuery().select('.card-arrow-box').boundingClientRect((data) => {
console.log("card-arrow-box height: " + (data ? data.height : "null"));
cardArrowHeight.value = data ? data.height - 20 : 0;
}).exec()
}, 500)
}
//
const totalMoney = computed(() => {
let totalMoney = 0;
for (const key in financeInfo.value.fortune) {
if (!Object.hasOwn(financeInfo.value.fortune, key)) continue;
const element = financeInfo.value.fortune[key];
totalMoney += Number(element.labelSub)
}
return totalMoney
})
//
const yesterdayIncome = computed(() => {
let yesterdayIncome = 0;
for (const key in financeInfo.value.fortune) {
if (!Object.hasOwn(financeInfo.value.fortune, key)) continue;
const element = financeInfo.value.fortune[key];
yesterdayIncome += Number(element.value)
}
return yesterdayIncome
})
//
const familyProtection = computed(() => {
return parseInt(financeInfo.value.myAssets.baoxian.labelSub)
})
const data = reactive({
financeInfo: {
benefitsText: '尊享礼遇18000元/年',
cardHolderName: 'LiXing',
vipLevel: "v3",
navigationMenuStyle: "style-1",
fortune: {
yuebao: {
value: 3.53,
labelSub: "100000",
},
dingqi: {
value: 50,
labelSub: "100000",
},
jijin: {
value: 5000,
labelSub: "100000",
},
huangjin: {
value: -300,
labelSub: "100000",
},
yulingbao: {
value: 20,
labelSub: "100000",
}
},
myAssets: {
baoxian: {
labelSub: "3份保单保障中",
type: "text"
}
},
myQuota: {
huabei: {
labelSub: "可用100000",
type: "text"
},
jubei: {
labelSub: "可用100000",
type: "text"
},
beizhi: {
labelSub: "可用100000",
type: "text"
},
wangshangdai: {
labelSub: "预计可借100000",
type: "text"
}
}
},
topHeight: 0,
statusBarHeight: 0,
cardArrowHeight: 0,
imageCardBoxtopHeight: 0,
isOpen: false
})
let { financeInfo, topHeight, statusBarHeight, cardArrowHeight, imageCardBoxtopHeight, isOpen } = toRefs(data)
const formatTextWithNumber = (str) => {
if (!str) return '';
return str.replace(/(\d+(\.\d+)?)/g, (match) => {
return match > 100 ? numberUtil.formatMoneyWithThousand(match) : match;
});
}
let startY = 0;
let startTop = 0;
let minTop = 0;
let maxTop = 0;
// isOpen topHeight
watch(() => isOpen.value, () => {
updateHeightByState();
})
const handleTouchStart = (e) => {
startY = e.touches[0].clientY;
startTop = topHeight.value;
//
if (!minTop || !maxTop) {
const systemInfo = uni.getSystemInfoSync();
const statusBar = systemInfo.statusBarHeight;
//
const query = uni.createSelectorQuery();
query.select('.total-money-box').boundingClientRect();
query.select('.main-info-container').boundingClientRect();
query.exec(([totalMoneyBox, mainInfoContainer]) => {
if (totalMoneyBox) {
// total-money-box + + -
minTop = totalMoneyBox.height + 44 + statusBar;
}
if (mainInfoContainer) {
// main-info-container -
// isOpen /
// /
//
// ~160px
// ~400px
// 使 'isOpen=true' maxTop
// data.height (main-info-container )
// main-info-container
// 'isOpen=true' topHeight main-info-container
// /使
// minTop topHeight
// maxTop topHeight
// **
// onReady/updateTopHeight
//
// DOM 使
// minTop 44 + statusBar + totalMoneyBoxHeight
// maxTop mainContainerHeight
}
// 使 handleTouchEnd
// handleTouchEnd init
});
}
}
const handleTouchMove = (e) => {
let currentY = e.touches[0].clientY;
let delta = currentY - startY;
let newTop = startTop + delta;
// 0
if (minTop === 0 && !isOpen.value) minTop = startTop;
if (maxTop === 0 && isOpen.value) maxTop = startTop;
//
if (minTop && maxTop) {
if (newTop < minTop) newTop = minTop;
if (newTop > maxTop) newTop = maxTop;
}
//
topHeight.value = newTop;
}
const updateHeightByState = () => {
statusBarHeight.value = uni.getSystemInfoSync().statusBarHeight;
if (isOpen.value) {
// main-info-container
uni.createSelectorQuery().select('.main-info-container').boundingClientRect((data) => {
if (data) {
const targetH = data.height - cardArrowHeight.value;
topHeight.value = targetH;
maxTop = targetH; // maxTop
}
}).exec()
} else {
// total-money-box
uni.createSelectorQuery().select('.total-money-box').boundingClientRect((data) => {
if (data) {
const targetH = data.height + 44 + statusBarHeight.value;
topHeight.value = targetH;
minTop = targetH; // minTop
}
}).exec()
}
}
const handleTouchEnd = (e) => {
let endY = e.changedTouches[0].clientY;
let diff = endY - startY;
let targetState = isOpen.value;
//
if (diff > 50) {
targetState = true;
} else if (diff < -50) {
targetState = false;
}
// watch /
if (targetState !== isOpen.value) {
isOpen.value = targetState;
} else {
//
updateHeightByState();
}
}
</script> </script>
@ -127,13 +441,12 @@ let { financeInfo } = toRefs(data)
<style lang="less" scoped> <style lang="less" scoped>
.container { .container {
height: 100vh; height: 100vh;
background-color: #f5f5f5; background-color: #ffffff;
overflow: hidden; overflow: hidden;
} }
.main-info-container { .main-info-container {
background: linear-gradient(191deg, #0B1028 5.48%, #0B1028 30.26%, #18336C 60.18%, #18336C 100%); background: linear-gradient(348deg, #0B1028 49%, #0B1028 76.26%, #18336C 86.18%, #18336C 100%);
.nav-bar { .nav-bar {
padding: 20rpx; padding: 20rpx;
@ -192,6 +505,7 @@ let { financeInfo } = toRefs(data)
.total-money-box { .total-money-box {
padding-top: 10rpx; padding-top: 10rpx;
padding-bottom: 6rpx; padding-bottom: 6rpx;
margin-bottom: 32rpx;
.revenue-box { .revenue-box {
padding: 0 24rpx; padding: 0 24rpx;
@ -234,6 +548,7 @@ let { financeInfo } = toRefs(data)
.family-protection { .family-protection {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex-shrink: 0;
height: 100%; height: 100%;
padding: 0 28rpx; padding: 0 28rpx;
border-left: 1rpx solid #172139; border-left: 1rpx solid #172139;
@ -256,6 +571,52 @@ let { financeInfo } = toRefs(data)
} }
} }
.data-box {
padding: 0 26rpx 0;
font-size: 26rpx;
.title {
margin-bottom: 40rpx;
}
.group-data {
// margin-top: 8rpx;
flex-wrap: wrap;
.item {
width: calc(50% - 15rpx);
flex-shrink: 0;
margin-bottom: 40rpx;
.label {
margin-right: 18rpx;
flex-shrink: 0;
}
}
}
.second-color {
color: #787174;
}
.primary-color {
color: #EAD2B8;
}
}
}
.open {
// background: #08112E;
background: linear-gradient(146deg, #0B1028 49%, #08112E 71.26%, #18336C 83.18%, #18336C 96%)
}
.image-service-box {
position: absolute;
display: flex;
flex-direction: column;
top: 20%;
width: 100%;
.arrow-box { .arrow-box {
display: flex; display: flex;
align-items: center; align-items: center;
@ -291,7 +652,7 @@ let { financeInfo } = toRefs(data)
.name-box { .name-box {
display: flex; display: flex;
align-items: center; align-items: flex-start;
} }
.card-holder-icon { .card-holder-icon {
@ -338,8 +699,33 @@ let { financeInfo } = toRefs(data)
.content-box { .content-box {
margin-top: -1px; margin-top: -1px;
background-color: #ffffff; background: linear-gradient(180deg, #FFFFFF 56.37%, #F0F4F9 100%);
padding: 20rpx; padding: 20rpx;
.service-icons {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.service-icon {
display: flex;
flex-direction: column;
align-items: center;
width: 20%;
margin-top: 22rpx;
margin-bottom: 8rpx;
.icon {
width: 62rpx;
height: 62rpx;
}
.name {
font-size: 26rpx;
color: #5D5D5D;
}
}
}
} }
@ -347,6 +733,66 @@ let { financeInfo } = toRefs(data)
} }
.content { .content {
background-color: #ffffff;
padding: 20rpx; padding: 20rpx;
margin-top: -1px;
}
.bottom-box {
position: fixed;
bottom: 0;
width: 100%;
height: 100rpx;
background-color: #ffffff;
display: flex;
justify-content: space-around;
align-items: center;
padding: 4rpx 0;
.bottom-item {
display: flex;
flex-direction: column;
align-items: center;
image {
width: 56rpx;
height: 56rpx;
}
text {
margin-top: 12rpx;
font-size: 20rpx;
line-height: 25rpx;
color: #333;
}
}
}
.ios-bottom-box {
padding-bottom: constant(safe-area-inset-bottom); // IOS<11.2
padding-bottom: env(safe-area-inset-bottom); // IOS>11.2
}
.navigation-menu-style-1 {
background-color: #ffffff;
.bottom-item:nth-child(2) {
text {
color: #A27140;
}
}
}
.navigation-menu-style-2 {
background-color: #F8F8F8;
border-top: 1rpx solid #C3CED1;
padding: 6rpx 0;
.bottom-item:nth-child(2) {
text {
color: #0075FF;
}
}
} }
</style> </style>

View File

@ -95,8 +95,6 @@
<text class="vision-text">版本:{{ vision }}</text> <text class="vision-text">版本:{{ vision }}</text>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script setup> <script setup>
@ -108,21 +106,51 @@ import {
storage storage
} from '@/utils/storage.js' } from '@/utils/storage.js'
import { import {
get get,
postJson
} from '@/utils/requests.js' } from '@/utils/requests.js'
import { import {
ref, ref,
reactive, reactive,
toRefs, toRefs
getCurrentInstance
} from 'vue'; } from 'vue';
import { import {
onLoad, onLoad,
onShow onShow
} from '@dcloudio/uni-app'; } from '@dcloudio/uni-app';
const instance = getCurrentInstance(); // 内部埋点方法
const { proxy } = instance; const apiUserEvent = async (type, adminData) => {
let uni_version = uni.getStorageSync("version")
if (type != 'uni') {
await postJson('a', 'api/user/event', {
type: adminData.type,
key: adminData.type + ".uni.alipay." + adminData.key,
value: adminData.value,
extra: JSON.stringify({
uni_version: uni_version,
...adminData.extra
}),
})
}
}
// 内部跳转充值页方法
const goRechargePage = () => {
// 进入页面
apiUserEvent('all', {
type: "event",
key: "payment_onload",
value: "进入充值页面",
extra: {
from: "支付宝模拟器首页"
}
})
uni.navigateTo({
url: '/pages/common/recharge/index'
});
}
// 菜单列表 // 菜单列表
const menuList = [{ const menuList = [{
@ -141,8 +169,8 @@ const menuList = [{
icon: "licaiheika", icon: "licaiheika",
name: "理财黑卡", name: "理财黑卡",
isHot: true, isHot: true,
// path: "/pages/finance-management/index" path: "/pages/finance-management/index"
path: "" // path: ""
}, },
{ {
icon: "huabei", icon: "huabei",
@ -311,9 +339,10 @@ const clickMenu = (item) => {
} }
} }
// 开通vip
const openVip = () => { const openVip = () => {
console.log('openVip') goRechargePage()
util.goPage('/pages/common/recharge/index')
} }
/** /**

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 B

145
static/json/fortune.json Normal file
View File

@ -0,0 +1,145 @@
{
"serviceIcons": [
{
"name": "余额宝",
"icon": "yuebao"
},
{
"name": "稳健理财",
"icon": "wenjianlicai"
},
{
"name": "基金",
"icon": "jijin"
},
{
"name": "黄金",
"icon": "huangjin"
},
{
"name": "股票",
"icon": "gupiao"
},
{
"name": "定期",
"icon": "dingqi"
},
{
"name": "保险",
"icon": "baoxian"
},
{
"name": "高端理财",
"icon": "gaoduanlicai"
},
{
"name": "全球投资",
"icon": "quanqiutouzi"
},
{
"name": "更多",
"icon": "gengduo"
}
],
"navigationMenu": [
{
"name": "首页",
"icon": "shouye"
},
{
"name": "理财",
"icon": "licai"
},
{
"name": "视频",
"icon": "shipin"
},
{
"name": "消息",
"icon": "xiaoxi"
},
{
"name": "我的",
"icon": "wode"
}
],
"myAssets": [
{
"groupId": "1",
"key": "fortune",
"title": "",
"items": [
{
"label": "余额宝",
"labelSub": "",
"value": "",
"key": "yuebao"
},
{
"label": "定期",
"labelSub": "",
"value": "",
"key": "dingqi"
},
{
"label": "基金",
"labelSub": "",
"value": "",
"key": "jijin"
},
{
"label": "黄金",
"labelSub": "",
"value": "",
"key": "huangjin"
},
{
"label": "余利宝",
"labelSub": "",
"value": "",
"key": "yulingbao"
}
]
},
{
"groupId": "2",
"title": "我的保障资产",
"key": "myAssets",
"items": [
{
"label": "保险",
"labelSub": "1份保单保障中",
"value": "",
"key": "baoxian"
}
]
},
{
"groupId": "3",
"title": "我的额度",
"key": "myQuota",
"items": [
{
"label": "花呗",
"labelSub": "",
"key": "huabei"
},
{
"label": "借呗",
"labelSub": "",
"key": "jubei"
},
{
"label": "备用金",
"labelSub": "",
"key": "beizhi"
},
{
"label": "网商贷",
"labelSub": "",
"key": "wangshangdai"
}
]
}
]
}

View File

@ -42,20 +42,22 @@ export default {
let currentPage = pages[pages.length - 1]; let currentPage = pages[pages.length - 1];
let currentUrl = currentPage.route; let currentUrl = currentPage.route;
currentUrl = pageData[currentUrl] currentUrl = pageData[currentUrl]
// 点击水印 if (type) {
app.config.globalProperties.$apiUserEvent('all', { // 点击水印
type: "click", app.config.globalProperties.$apiUserEvent('all', {
key: type, type: "click",
value: type != "watermark" ? "关闭水印" : "点击右下角水印图标", key: type,
extra: { value: type != "watermark" ? "关闭水印" : "点击右下角水印图标",
page: currentUrl extra: {
} page: currentUrl
}, { }
type: 'click_' + type, }, {
data: { type: 'click_' + type,
page: currentUrl data: {
} page: currentUrl
}) }
})
}
// 进入页面 // 进入页面
app.config.globalProperties.$apiUserEvent('all', { app.config.globalProperties.$apiUserEvent('all', {
type: "event", type: "event",