8 Commits

Author SHA1 Message Date
anonymous 1741f255d0 fix: 修改样式 2025-01-16 15:29:56 +08:00
anonymous 302dfdf203 fix: 安卓异常 2025-01-16 14:19:31 +08:00
anonymous 9b89ff64b3 fix: 修改身份证规则 2025-01-15 10:00:18 +08:00
anonymous 2f997b491b refactor: 修改样式 2025-01-15 08:40:00 +08:00
anonymous c46283de7f refactor: 修改默认头像 2025-01-15 08:29:07 +08:00
anonymous 8a2789f119 refactor: 更新app地址 2025-01-14 17:12:41 +08:00
zzzzzak 28d48c3323 更新 index.vue 2025-01-14 12:23:14 +08:00
anonymous 2b43b95fdb feat: x5初始化 2025-01-14 12:10:43 +08:00
67 changed files with 490 additions and 581 deletions
Vendored
+2 -2
View File
@@ -7,8 +7,8 @@ VITE_WX_APPID = 'wxa2abb91f64032a2b'
# h5部署网站的base,配置到 manifest.config.ts 里的 h5.router.base
VITE_APP_PUBLIC_BASE=/
VITE_SERVER_BASEURL = 'https://sapi.foxmail555.cc'
VITE_UPLOAD_BASEURL = 'https://sapi.foxmail555.cc/api/common/upload'
VITE_SERVER_BASEURL = 'https://yapi.foxmail555.cc'
VITE_UPLOAD_BASEURL = 'https://yapi.foxmail555.cc/api/common/upload'
# h5是否需要配置代理
VITE_APP_PROXY=false
+17 -10
View File
@@ -18,7 +18,7 @@ export default defineUniPages({
},
tabBar: {
color: '#999999',
selectedColor: '#0E57A2',
selectedColor: '#D3B389',
backgroundColor: '#ffffff',
borderStyle: '#E7E7E7',
height: '56px',
@@ -26,23 +26,30 @@ export default defineUniPages({
iconWidth: '20px',
spacing: '3px',
list: [
// {
// iconPath: 'static/tabbar/home.png',
// selectedIconPath: 'static/tabbar/homeHL.png',
// pagePath: 'pages/index/index',
// text: '首页',
// },
{
iconPath: 'static/tabbar/home.png',
selectedIconPath: 'static/tabbar/homeHL.png',
pagePath: 'pages/index/index',
iconPath: 'static/tabbar/bank.png',
selectedIconPath: 'static/tabbar/bankHL.png',
pagePath: 'pages/bank/index',
text: '首页',
},
{
iconPath: 'static/tabbar/invest.png',
selectedIconPath: 'static/tabbar/investHL.png',
pagePath: 'pages/invest/index',
text: '保障',
iconPath: 'static/tabbar/invite.png',
selectedIconPath: 'static/tabbar/inviteHL.png',
pagePath: 'pages/invite/index',
text: '邀请福利',
},
{
iconPath: 'static/tabbar/house.png',
selectedIconPath: 'static/tabbar/houseHL.png',
pagePath: 'pages/invite/index',
text: '社区',
pagePath: 'pages/invest/index',
text: '资产平移',
},
{
iconPath: 'static/tabbar/personal.png',
+7 -1
View File
@@ -36,7 +36,6 @@ const userStore = useUserStore()
/* 覆盖 uniapp 自带rpx效果 */
html {
font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 16px !important;
}
/* stylelint-disable-next-line selector-type-no-unknown */
#app {
@@ -131,4 +130,11 @@ uni-modal {
}
}
}
::-webkit-scrollbar {
display: none;
}
@font-face {
font-family: 'FARRINGTON-7B';
src: url('@/static/FARRINGTON-7B.ttf');
}
</style>
+1 -1
View File
@@ -14,7 +14,7 @@ defineProps({
rounded-full
p-4
shadow-lg
style="background: linear-gradient(45deg, #3b81f3 0%, #37e6ec 100%)"
style="background: linear-gradient(45deg, #ffdd99 0%, #efb85a 100%)"
>
<image
block
-1
View File
@@ -36,7 +36,6 @@ const handleClickLeft = () => {
<style lang="scss" scoped>
:deep(.wd-navbar) {
--wot-navbar-title-font-size: 32rpx;
--wot-navbar-color: v-bind('titleColor');
}
</style>
-1
View File
@@ -4,7 +4,6 @@
* 可以设置路由白名单,或者黑名单,看业务需要选哪一个
* 我这里应为大部分都可以随便进入,所以使用黑名单
*/
import { getRealNameAuthAPI, getUserInfoAPI } from '@/service'
import { useUserStore } from '@/store'
import {
getNotNeedLoginPages as _getNotNeedLoginPages,
+9 -10
View File
@@ -3,11 +3,13 @@
style: {
navigationBarTitleText: '资金明细',
navigationBarBackgroundColor: '#fff',
navigationStyle: 'custom',
},
}
</route>
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { getMyAssetAPI } from '@/service'
import { useUserStore } from '@/store'
@@ -35,9 +37,6 @@ const { list: assetList, onReload } = useListPageRequest(
onLoad((options) => {
tabIndex.value = Number(options.tabIndex ?? 0)
uni.setNavigationBarTitle({
title: tabList.value[tabIndex.value].label,
})
})
watch(
() => tabIndex.value,
@@ -54,7 +53,7 @@ watch(
<template>
<view class="asset-page pt-15 relative">
<view class="absolute top-130 -left-55 btn-gradient text-white rounded-full w-172 h-172"></view>
<NavBar title-color="#333" :title="tabList[tabIndex].label" />
<!-- <view class="flex justify-around">
<view
v-for="(tabItem, index) in tabList"
@@ -66,19 +65,18 @@ watch(
<view class="text-14">{{ tabItem.label }}</view>
</view>
</view> -->
<view class="p-15">
<view class="py-30 pt-80 px-25">
<view class="text-17">{{ tabList[tabIndex].label }}</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>
<view class="mb-15 px-15 text-18">{{ tabList[tabIndex].label }}明细</view>
<template v-if="assetList.length">
<view
class="flex px-25 py-12 border-b items-center border-#3333331A border-b-solid"
class="flex px-15 py-12 border-b items-center border-#3333331A border-b-solid"
v-for="item in assetList"
:key="item.id"
>
<image src="/static/images/page-sub/invite-icon.png" class="w-48 h-48" />
<view class="flex flex-col flex-1 ml-15">
<view class="text-14 text-#333">{{ item.memo }}</view>
<view class="text-12 mt-4 text-#333">{{ item.createtime }}</view>
@@ -107,9 +105,10 @@ watch(
<style scoped>
.asset-page {
background-image: url('@/static/images/page-sub/assets-bg.jpg');
background-repeat: no-repeat;
background-position: center;
background-size: 172px 172px;
background-position: top center;
background-size: 100%;
}
.main-content {
backdrop-filter: blur(60px);
+7 -3
View File
@@ -2,12 +2,15 @@
{
style: {
navigationBarTitleText: '热点新闻',
navigationStyle: 'custom',
},
}
</route>
<template>
<view class="hot-news-page min-h-screen p-15">
<view class="bg-#fff rounded-10 px-15 py-15" v-if="newsList.length > 0">
<view class="hot-news-page min-h-screen px-15 pb-100">
<NavBar title-color="#333" />
<view class="bg-#fff rounded-10 px-15 py-15 mt-15" v-if="newsList.length > 0">
<view
class="flex mb-15"
v-for="item in newsList"
@@ -26,6 +29,7 @@
</template>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { getIntroductionAPI } from '@/service'
import { formatTime } from '@/utils'
@@ -41,6 +45,6 @@ const handleNewsDetail = (id: number) => {
</script>
<style scoped>
.hot-news-page {
background: #f7f7f7;
background: linear-gradient(180deg, #fff3eb 0%, #ffffff 100%);
}
</style>
+1 -3
View File
@@ -15,9 +15,7 @@
:src="introductionDetail.image"
mode="aspectFill"
/>
<view class="text-gray-500 mx-16 text-14 mt-15 break-all">
{{ introductionDetail.content }}
</view>
<view class="text-gray-500 mx-16 text-14 mt-15 break-all" v-html="introductionDetail.content" />
</view>
</template>
+1 -1
View File
@@ -38,7 +38,7 @@ import VueQrcode from '@chenfengyuan/vue-qrcode'
<style scoped>
.official-community-page {
min-height: 100vh;
padding-bottom: 100rpx;
padding-bottom: 50px;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
+22 -10
View File
@@ -3,19 +3,21 @@
style: {
navigationBarTitleText: '实名认证',
navigationBarBackgroundColor: '#fff',
navigationStyle: 'custom',
},
}
</route>
<template>
<view class="withdrawal-type-edit-page pb-100 min-h-screen">
<view class="realname-page min-h-screen">
<NavBar title-color="#333" />
<template v-if="!realnameInfo">
<view class="p-15 m-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="flex items-center py-15 text-14">
<view class="p-15 m-15 bg-white shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<!-- <view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-type.png" class="w-20 h-20" />
<view class="ml-8">证件类型</view>
<view class="flex-1 text-right text-14">身份证</view>
</view>
</view> -->
<view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-name.png" class="w-20 h-20" />
<view class="ml-8">真实姓名</view>
@@ -92,11 +94,12 @@
</button>
</template>
<template v-else-if="Number(realnameInfo.status) === 2">
<image
<!-- <image
src="@/static/images/page-sub/realname/realname-success.png"
class="w-150 h-150 block"
mode="aspectFit"
/>
/> -->
<wd-status-tip image="comment" />
<view class="text-center mt-15 text-14 text-#999">恭喜您实名认证成功</view>
<button class="btn-gradient px-30 text-white rounded-full m-15 text-16" @click="onGoHome">
返回
@@ -121,6 +124,7 @@
</template>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { getRealNameAuthAPI, realNameAuthAPI } from '@/service'
import { useUserStore } from '@/store'
import { mergeStep, showModal } from '@/utils'
@@ -143,7 +147,7 @@ const onSubmit = mergeStep(async () => {
return
}
if (!/^\d{17}[\d|x]$/.test(form.value.cardnum)) {
if (!/^\d{17}[\d|x]$/i.test(form.value.cardnum)) {
await showModal('身份证号格式错误')
return
}
@@ -151,12 +155,12 @@ const onSubmit = mergeStep(async () => {
// await showModal('请上传身份证照片')
// return
// }
await realNameAuthAPI({
const res = await realNameAuthAPI({
...form.value,
// zcardimage: zcardimage.value,
// fcardimage: fcardimage.value,
})
await showModal('提交成功,请耐心等待审核!')
await showModal(res.msg ? res.msg : '提交成功,请耐心等待审核!')
realnameInfo.value = await getRealNameAuthAPI().then((res) => {
return res.data
})
@@ -179,8 +183,16 @@ onLoad(async () => {
})
</script>
<style lang="scss" scoped>
.withdrawal-type-edit-page {
.realname-page {
--wot-input-placeholder-color: #889bc6;
--wot-cell-wrapper-padding: 0;
box-sizing: border-box;
min-height: 100vh;
padding-bottom: 50px;
// background-repeat: no-repeat;
// background-size: cover;
background:
url('@/static/images/brand-person.png') right 20px bottom / 60% no-repeat,
linear-gradient(180deg, #fff3eb 0%, #ffffff 100%);
}
</style>
+1 -1
View File
@@ -123,7 +123,7 @@ watch(
<style lang="scss" scoped>
.team-page {
min-height: 100vh;
padding-bottom: 100rpx;
padding-bottom: 50px;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
+3 -1
View File
@@ -31,7 +31,9 @@
/>
<view class="flex flex-col flex-1 justify-between ml-15">
<view class="text-14 text-#333">{{ item.typedata }}</view>
<view class="text-14 text-#333">
{{ item.kaihuhang }}({{ item.banknum.slice(0, 4) }}****{{ item.banknum.slice(-4) }})
</view>
<view class="text-12 text-#999">提现</view>
<view class="text-12 text-#999">{{ item.createtime }}</view>
</view>
+3 -49
View File
@@ -11,18 +11,6 @@
<view class="withdrawal-type-edit-page pb-100 min-h-screen">
<view class="p-15 m-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="flex items-center py-15 text-14">
<view>收款类型</view>
<wd-select-picker
type="radio"
custom-class="!p-0"
custom-value-class="text-14 text-#889BC6 text-right"
class="flex-1"
placeholder="请选择收款类型"
v-model="form.typedata"
:columns="columns"
></wd-select-picker>
</view>
<view class="flex items-center py-15 text-14" v-if="form.typedata === 3">
<view>开户行</view>
<input
class="flex-1 text-right text-14"
@@ -33,25 +21,15 @@
/>
</view>
<view class="flex items-center py-15 text-14">
<view>{{ typeName }}账号</view>
<view>银行卡账号</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
:placeholder="`请输入${typeName}账号`"
placeholder="请输入银行卡账号"
v-model="form.banknum"
/>
</view>
<view class="flex items-center py-15 text-14">
<view>{{ form.typedata === 3 ? '持卡人' : '' }}姓名</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
:placeholder="`请输入${form.typedata === 3 ? '持卡人' : ''}姓名`"
v-model="form.name"
/>
</view>
<!-- <view class="flex items-center py-15 text-14">
<view>备注</view>
@@ -83,24 +61,6 @@ const form = ref({
name: '',
banknum: '',
})
const columns = [
{
label: '支付宝',
value: 1,
},
{
label: '微信',
value: 2,
},
{
label: '银行卡',
value: 3,
},
]
const typeName = computed(() => {
return ['支付宝', '微信', '银行卡'][Number(form.value.typedata) - 1]
})
const onAddType = mergeStep(async () => {
if (form.value.typedata === 3) {
@@ -113,13 +73,7 @@ const onAddType = mergeStep(async () => {
}
if (!form.value.banknum) {
return uni.showToast({
title: '请输入账号',
icon: 'none',
})
}
if (!form.value.name) {
return uni.showToast({
title: '请输入姓名',
title: '请输入银行卡账号',
icon: 'none',
})
}
+2 -17
View File
@@ -1,7 +1,7 @@
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '收款方式',
navigationBarTitleText: '银行卡列表',
navigationBarBackgroundColor: '#fff',
},
}
@@ -16,27 +16,12 @@
@click="onSelectType(item)"
>
<image
v-if="Number(item.typedata) === 3"
class="w-45 h-45"
src="@/static/images/invest/unionpay-icon.png"
mode="aspectFit"
/>
<image
v-if="Number(item.typedata) === 1"
class="w-45 h-45"
src="@/static/images/invest/alipay-icon.png"
mode="aspectFit"
/>
<image
v-if="Number(item.typedata) === 2"
class="w-45 h-45"
src="@/static/images/invest/wechat-icon.png"
mode="aspectFit"
/>
<view class="flex-1 ml-15">
<view class="text-16 font-bold">
{{ ['支付宝', '微信', '银行卡'][Number(item.typedata) - 1] }}
</view>
<view class="text-16 font-bold">{{ item.kaihuhang }}</view>
<view class="mt-10 text-14 text-#889BC6">{{ item.banknum }}</view>
</view>
<wd-icon v-if="isSelect" name="arrow-right" size="14px"></wd-icon>
+31 -13
View File
@@ -8,17 +8,9 @@
</route>
<template>
<view class="min-h-screen pb-100">
<NavBar title-color="#333">
<template #right>
<image
@click="onWithdrawalDetail"
src="/static/images/page-sub/recharge.png"
class="w-24 h-24"
/>
</template>
</NavBar>
<NavBar title-color="#333" />
<view
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)]"
class="m-15 text-white flex rounded-tl-10 rounded-br-10 justify-between items-center p-15 btn-gradient"
>
<view class="text-14">钱包余额</view>
<view class="text-17 font-bold">{{ userStore.userInfo?.money }}</view>
@@ -39,10 +31,25 @@
全部
</view>
</view>
<view class="mt-15">
<view class="text-14 text-#333">收款方式</view>
<view
class="flex items-center text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10"
@click="onSelectPayType"
>
<view class="flex-1">
{{
currentBank ? `${currentBank.kaihuhang}${currentBank.banknum}` : '请选择收款方式'
}}
</view>
<wd-icon name="arrow-right" size="16px"></wd-icon>
</view>
</view>
<view class="text-14 text-#889BC6 mt-30">提现说明TIPS</view>
<view class="text-12 text-#889BC6 mt-15">
<view>1如遇到系统结算繁忙结算将会延迟到账</view>
<view class="mt-4">2提现将会提现至您的工商银行卡;</view>
</view>
</view>
</view>
@@ -79,6 +86,17 @@ const onWithdrawalDetail = () => {
})
}
const currentBank = ref<any>(null)
const onSelectPayType = () => {
uni.$once('withdrawal-type', (data: any) => {
form.value.bankid = data.id
currentBank.value = data
})
uni.navigateTo({
url: '/pages-sub/withdrawal-type/index?type=select',
})
}
const onSubmit = async () => {
if (!form.value.money) {
return uni.showToast({
@@ -88,8 +106,8 @@ const onSubmit = async () => {
}
await showModal('确认提现?')
await submitWithdrawalAPI(form.value)
await showModal('提交成功')
const res = await submitWithdrawalAPI(form.value)
await showModal(res.msg ? res.msg : '提交成功')
onWithdrawalDetail()
}
</script>
+30 -18
View File
@@ -15,7 +15,7 @@
},
"tabBar": {
"color": "#999999",
"selectedColor": "#0E57A2",
"selectedColor": "#D3B389",
"backgroundColor": "#ffffff",
"borderStyle": "#E7E7E7",
"height": "56px",
@@ -24,22 +24,22 @@
"spacing": "3px",
"list": [
{
"iconPath": "static/tabbar/home.png",
"selectedIconPath": "static/tabbar/homeHL.png",
"pagePath": "pages/index/index",
"iconPath": "static/tabbar/bank.png",
"selectedIconPath": "static/tabbar/bankHL.png",
"pagePath": "pages/bank/index",
"text": "首页"
},
{
"iconPath": "static/tabbar/invest.png",
"selectedIconPath": "static/tabbar/investHL.png",
"pagePath": "pages/invest/index",
"text": "保障"
"iconPath": "static/tabbar/invite.png",
"selectedIconPath": "static/tabbar/inviteHL.png",
"pagePath": "pages/invite/index",
"text": "邀请福利"
},
{
"iconPath": "static/tabbar/house.png",
"selectedIconPath": "static/tabbar/houseHL.png",
"pagePath": "pages/invite/index",
"text": "社区"
"pagePath": "pages/invest/index",
"text": "资产平移"
},
{
"iconPath": "static/tabbar/personal.png",
@@ -51,11 +51,12 @@
},
"pages": [
{
"path": "pages/index/index",
"path": "pages/bank/index",
"type": "home",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "首页"
"navigationBarTitleText": "银行卡",
"navigationBarBackgroundColor": "#fff",
"navigationStyle": "custom"
}
},
{
@@ -67,12 +68,20 @@
},
"notNeedLogin": true
},
{
"path": "pages/index/index",
"type": "page",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "首页"
}
},
{
"path": "pages/invest/index",
"type": "page",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "保障"
"navigationBarTitleText": "资产平移"
}
},
{
@@ -120,7 +129,8 @@
"type": "page",
"style": {
"navigationBarTitleText": "资金明细",
"navigationBarBackgroundColor": "#fff"
"navigationBarBackgroundColor": "#fff",
"navigationStyle": "custom"
}
},
{
@@ -142,7 +152,8 @@
"path": "hot-news/index",
"type": "page",
"style": {
"navigationBarTitleText": "热点新闻"
"navigationBarTitleText": "热点新闻",
"navigationStyle": "custom"
}
},
{
@@ -225,7 +236,8 @@
"type": "page",
"style": {
"navigationBarTitleText": "实名认证",
"navigationBarBackgroundColor": "#fff"
"navigationBarBackgroundColor": "#fff",
"navigationStyle": "custom"
}
},
{
@@ -265,7 +277,7 @@
"path": "withdrawal-type/index",
"type": "page",
"style": {
"navigationBarTitleText": "收款方式",
"navigationBarTitleText": "银行卡列表",
"navigationBarBackgroundColor": "#fff"
}
}
+117
View File
@@ -0,0 +1,117 @@
<route lang="json5" type="home">
{
style: {
navigationBarTitleText: '银行卡',
navigationBarBackgroundColor: '#fff',
navigationStyle: 'custom',
},
}
</route>
<template>
<view class="bank-page min-h-screen pb-50">
<NavBar title-color="#333" />
<view class="bank-card mx-auto mt-24 relative w-300 h-182 rounded-15">
<view class="absolute text-18 top-100 left-20 text-white" style="font-family: FARRINGTON-7B">
{{ userStore.userInfo.banknum.replace(/(\d{4})(?=\d)/g, '$1 ') }}
</view>
</view>
<view
class="rounded-15 mx-auto mt-15 w-345 flex items-center justify-center text-12 px-30 py-20 text-#E5A200"
border="1px solid #FFDD99"
style="
background: linear-gradient(
90deg,
rgba(255, 221, 153, 0.2) 0%,
rgba(239, 184, 90, 0.2) 100%
);
"
>
云家银行专属卡是由全球各地银行联合发行的银行
完成卡首批发行仅限五万张云家人的资产将全部到账到此卡一人一卡此专属卡无任何限制可在全球210个国家及地区进行使用
</view>
<view
class="rounded-full mx-auto mt-15 w-345 h-45 flex items-center justify-center text-15"
style="
background: linear-gradient(
90deg,
rgba(255, 221, 153, 0.2) 0%,
rgba(239, 184, 90, 0.2) 100%
);
border: 1px solid #ffdd99;
"
>
卡内余额{{ userStore.userInfo.money }}
</view>
<view
class="btn-gradient rounded-full text-white mx-auto mt-10 w-345 h-40 flex items-center justify-center text-15"
@click="onWithdraw"
>
提现
</view>
<view
class="flex bg-white py-15 rounded-10 mt-150 w-345 mx-auto border-2 border-#FFDD99 border-solid"
>
<view class="flex-1 flex flex-col items-center" @click="handleOfficialCommunity">
<image class="w-30 h-30" src="@/static/images/home/nav-2.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">官方社群</text>
</view>
<view class="flex-1 flex flex-col items-center" @click="handleOfficialCommunity">
<image class="w-30 h-30" src="@/static/images/home/nav-3.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">在线客服</text>
</view>
<view class="flex-1 flex flex-col items-center" @click="handleDownload">
<image class="w-30 h-30" src="@/static/images/home/nav-4.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">下载APP</text>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { downloadAppAPI, getBankCardAPI } from '@/service'
import { useUserStore } from '@/store'
const userStore = useUserStore()
const list = ref([])
const loadData = async () => {
list.value = (await getBankCardAPI({
limit: 1000,
page: 1,
}).then((res) => res.data)) as any
}
onShow(async () => {
loadData()
})
function onWithdraw() {
uni.navigateTo({
url: '/pages-sub/withdrawal/index',
})
}
const handleOfficialCommunity = () => {
uni.navigateTo({
url: '/pages-sub/official-community/index',
})
}
const handleDownload = () => {
downloadAppAPI()
}
</script>
<style lang="scss" scoped>
.bank-page {
background:
url('@/static/images/home/bg.jpg') no-repeat top -40px center / cover,
linear-gradient(180deg, #fff3eb 0%, #ffffff 100%);
}
.bank-card {
background-image: url('@/static/images/bank/card.jpg');
background-size: 100% 100%;
}
</style>
+2 -2
View File
@@ -116,8 +116,8 @@ onLoad(() => {
.login-container {
box-sizing: border-box;
min-height: 100vh;
padding-bottom: 200rpx;
background-image: url('@/static/images/login-bg.png');
padding-bottom: 50px;
background-image: url('@/static/images/login-bg.jpg');
background-repeat: no-repeat;
background-size: cover;
}
+63 -50
View File
@@ -1,5 +1,5 @@
<!-- 使用 type="home" 属性设置首页其他页面不需要设置默认为page推荐使用json5更强大且允许注释 -->
<route lang="json5" type="home">
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
@@ -10,34 +10,49 @@
<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">
<Avatar class="absolute right-45 top-100 w-70 h-70" />
<view>姓名{{ userStore.userInfo?.realname }}</view>
<view class="mt-10">社会保障号码{{ 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>
<swiper
indicator-active-color="#EFB85A"
indicator-color="rgba(0,0,0,0.1)"
indicator-dots
autoplay
circular
class="w-345 h-170 mx-auto mt-10"
>
<swiper-item v-for="item in bannerList" :key="item.id">
<image
class="block w-345 h-170 rounded-10 overflow-hidden"
:src="getImageUrl(item.image)"
mode="aspectFill"
/>
</swiper-item>
</swiper>
<view class="flex bg-white py-15 rounded-10 m-15 border-2 border-white border-solid">
<view class="flex-1 flex flex-col items-center" @click="handleIntroduction">
<image class="w-30 h-30" src="@/static/images/home/nav-1.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">简介</text>
</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">社会保障号码***</view>
<view class="mt-15">中国工商银行卡号**************</view>
<!-- <view class="flex-1 flex flex-col items-center" @click="handleInvite">
<image class="w-30 h-30" src="@/static/images/home/nav-2.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">抽奖转盘</text>
</view> -->
<view class="flex-1 flex flex-col items-center" @click="handleOfficialCommunity">
<image class="w-30 h-30" src="@/static/images/home/nav-2.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">官方社群</text>
</view>
<view
class="mt-15 btn-gradient w-345 h-45 leading-45 mx-auto text-white rounded-full text-center"
@click="handleOpenAccount"
>
开通个人养老账号
<view class="flex-1 flex flex-col items-center" @click="handleOfficialCommunity">
<image class="w-30 h-30" src="@/static/images/home/nav-3.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">在线客服</text>
</view>
</template>
<view class="flex-1 flex flex-col items-center" @click="handleDownload">
<image class="w-30 h-30" src="@/static/images/home/nav-4.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">下载APP</text>
</view>
</view>
<view class="bg-white pt-15 px-15 rounded-10 m-15">
<view class="flex justify-between items-center">
<view class="flex justify-center items-center">
<view class="text-14 text-#333">最新时讯</view>
<!-- <view class="text-12 text-#999" @click="handleNews">查看全部</view> -->
</view>
@@ -47,7 +62,7 @@
indicator-dots
autoplay
circular
class="h-240 mt-10"
class="h-200 mt-10"
>
<swiper-item v-for="item in newsList" :key="item.id">
<video class="w-full h-160" :src="item.image" mode="aspectFill" />
@@ -66,26 +81,23 @@
:key="item.id"
@click="handleNewsDetail(item.id)"
>
<image class="w-85 h-85 rounded-10" :src="item.image" mode="aspectFill" />
<image
class="w-85 h-85 rounded-10 bg-gray-100"
:src="getImageUrl(item.image)"
mode="aspectFill"
/>
<view class="ml-15 flex-1 flex flex-col justify-between">
<view text-14>{{ item.name }}</view>
<view class="text-12 text-#999">{{ item.source }}</view>
<view class="text-12 text-#999">{{ item.createtime }}</view>
</view>
</view>
</view>
<wd-popup :lockScroll="false" v-model="showNotice" custom-style="border-radius:40rpx;">
<wd-popup :lockScroll="false" v-model="showNotice" custom-style="border-radius:0.2rem;">
<view class="px-30 py-30 w-330 h-457 notice-container rounded-20 flex flex-col">
<view class="text-18 font-bold py-15 text-center">系统公告</view>
<view class="py-15 flex-1">
<view
v-for="(item, index) in announcementList"
:key="item.id"
class="flex border-b-1 border-b-gray-300 border-b-solid py-15"
>
<text class="whitespace-nowrap text-14 font-bold text-gradient">
公告{{ ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十'][index] }}
</text>
<text class="text-14 text-#333 flex-1" v-html="item.content"></text>
<view class="text-18 font-bold pb-15 text-center">系统公告</view>
<view class="flex-1 overflow-y-auto">
<view v-for="(item, index) in announcementList" :key="item.id" class="mb-15">
<view class="mt-12 text-14 text-#333 flex-1" v-html="item.content"></view>
</view>
</view>
<view
@@ -104,12 +116,12 @@ import Avatar from '@/components/Avatar.vue'
import NavBar from '@/components/NavBar.vue'
import {
downloadAppAPI,
getBannerAPI,
getIntroductionAPI,
getOpenPersonalAccountAPI,
getRealNameAuthAPI,
} from '@/service'
import { useUserStore } from '@/store'
import { showModal } from '@/utils'
import { getImageUrl, showModal } from '@/utils'
defineOptions({
name: 'Home',
@@ -186,20 +198,21 @@ const handleOpenAccount = async () => {
userStore.loadUserInfo()
// showModal('开通个人养老账户时,需邀请一名用户')
}
// 获取轮播图
const bannerList = ref([])
const getBanner = async () => {
const res = await getBannerAPI()
bannerList.value = res.data
}
onLoad(getBanner)
</script>
<style scoped>
.home-page {
min-height: 100vh;
padding-bottom: 100rpx;
background-image: url('@/static/images/home/bg.jpg');
background-position: top;
background-size: cover;
}
.main-container {
background-image: url('@/static/images/home/main-bg.jpg');
background-position: top;
background-size: cover;
padding-bottom: 50px;
background: linear-gradient(180deg, #fff3da 0%, #f8f8f8 100%);
}
.notice-container {
background-image: url('@/static/images/home/notice-bg.jpg');
+41 -222
View File
@@ -3,247 +3,66 @@
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '保障',
navigationBarTitleText: '资产平移',
},
}
</route>
<template>
<view class="invest-page">
<NavBar />
<view class="py-20 flex flex-col mx-15 rounded-20 main-content text-white">
<view class="text-14 pl-15">保险概览</view>
<view class="flex mt-30">
<view class="flex-1 text-center">
<view class="text-14">全部</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">{{ userStore.userInfo?.yanglao }}</view>
</view>
<view class="flex-1 text-center">
<view class="text-14">医疗</view>
<view class="text-16 font-bold mt-15">{{ userStore.userInfo?.yiliao }}</view>
</view>
</view>
<view class="invest-page min-h-screen">
<NavBar title-color="#333" />
<view class="mt-320 pl-15 text-24 text-white" style="text-shadow: 0 0 2px #ff5153">
银行卡恢复列表
</view>
<view class="flex p-15 mt-15">
<view class="mt-15 px-15 pb-15">
<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"
class="flex items-center mt-10 text-#333 p-15 rounded-10 bg-#FFF9F2 border-2 border-#FFDD99 border-solid"
v-for="item in list"
:key="item.id"
>
{{ item.title }}
<view class="flex-1">
<view class="text-15">{{ item.name }}</view>
<view class="text-12 mt-8">邀请1人</view>
</view>
<view
class="btn-gradient text-white text-12 border-1 border-#EFB85A border-solid py-4 px-30 rounded-4 px-10"
v-if="item.ishuifu"
>
已恢复
</view>
<view
class="text-12 text-#EFB85A border-1 border-#EFB85A border-solid py-4 px-30 rounded-4 px-10"
@click="handleRecover(item)"
v-else
>
恢复
</view>
</view>
</view>
<view>
<template v-if="tabValue === 1">
<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="getImageUrl(item.leftimage)"
/>
<view class="flex-1 ml-15">
<view class="text-15 text-#333 font-bold">{{ item.name }}</view>
<view class="w-200 flex flex-wrap items-center mt-5">
<view
class="px-14 mr-5 mb-5 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>
<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">{{ 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">{{ item.days }}()</view>
<view class="text-14 text-#999">周期</view>
</view>
</view>
<view
class="mt-15 px-30 text-center text-15 text-white rounded-full py-8 btn-gradient"
@click="onInvest(item)"
>
购买{{ item.money }}
</view>
</view>
</template>
<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="getImageUrl(item.leftimage)"
/>
<view class="flex-1 ml-15">
<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" @click="onShowRights(item)">查看权益</text>
</view>
<view
class="text-center text-15 text-white rounded-full py-8 btn-gradient mt-15"
@click="onInvest(item)"
>
我要投保{{ item.money }}
</view>
</view>
</template>
</view>
<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>
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import AlipayIcon from '@/static/images/invest/alipay-icon.png'
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 { getImageUrl, mergeStep, showModal } from '@/utils'
import { getBankCardRecoverAPI, getBankCardRecoverListAPI } from '@/service'
import { getImageUrl, showModal } from '@/utils'
defineOptions({
name: 'Home',
})
const { list, onReload } = useListPageRequest(getBankCardRecoverListAPI)
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()
const onGoInvestDetail = () => {
uni.navigateTo({
url: '/pages-sub/invest-detail/index',
})
const handleRecover = async (item: any) => {
const res = await getBankCardRecoverAPI({ id: item.id })
showModal(res.msg ? res.msg : '恢复成功')
onReload()
}
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) => {
try {
await submitInvestAPI({
investid: item.id,
type: 3,
})
} catch (error) {
if (error?.data?.msg.includes('邀请')) {
return uni.switchTab({
url: '/pages/invite/index',
})
}
return
}
await userStore.loadUserInfo()
uni.showToast({
title: '投资成功',
icon: 'none',
})
})
</script>
<style scoped>
<style lang="scss" scoped>
.invest-page {
min-height: 100vh;
padding-bottom: 100px;
background-image: url('@/static/images/home/bg.jpg');
background-position: top;
background-size: cover;
}
.main-content {
background: linear-gradient(90deg, #71a4f8 0%, #3b81f3 103.83%);
}
.bg-blue-red {
background-image: linear-gradient(90.02deg, #8bb9ff 0.02%, #be4343 100.27%);
}
.text-blue-red {
background-image: linear-gradient(90.02deg, #8bb9ff 0.02%, #be4343 100.27%);
background-clip: text;
-webkit-text-fill-color: transparent;
background-image: url('@/static/images/invest/bg.png'),
linear-gradient(to right, #e4c198, #e3bd93);
background-repeat: no-repeat;
background-position:
top -80px center,
top center;
background-size: 100%;
}
</style>
+59 -59
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '社区',
@@ -68,40 +68,40 @@ onShow(async () => {
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
// }
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,
status: false,
open: false,
},
// {
// title: '签到有礼',
// desc: `每日签到送${inviteInfo.value.qiandaojiang}元社保金`,
// title: '注册实名',
// desc: `领取${inviteInfo.value.realrewards}元`,
// // status: inviteInfo.value.isuserauth,
// status: false,
// open: false,
// },
{
title: '邀请有礼',
desc: `每邀请1人并实名认证获得${inviteInfo.value.yaoqingjiang}元养老金`,
status: 0,
open: false,
},
// ...inviteTaskList,
// {
// title: '签到有礼',
// desc: `每日签到送${inviteInfo.value.qiandaojiang}元`,
// status: false,
// open: false,
// },
// {
// title: '邀请有礼',
// desc: `每邀请1人并实名认证获得${inviteInfo.value.yaoqingjiang}元养老金`,
// status: 0,
// open: false,
// },
...inviteTaskList,
]
})
@@ -115,7 +115,7 @@ async function onGetReward(level) {
<template>
<view class="pb-100 min-h-screen invite-page">
<NavBar />
<view class="flex items-center mt-228 mx-auto w-345 bg-#FFFFFFE5 p-15 rounded-20">
<view class="flex items-center mt-286 mx-auto w-345 bg-#FFFFFFE5 p-15 rounded-20">
<view class="text-center">
<view class="mt-15 rounded-10 overflow-hidden flex bg-#FFFFFF50 p-10 shadow">
<VueQrcode
@@ -144,7 +144,7 @@ async function onGetReward(level) {
</view>
<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"
class="bg-#FFF9F2 mt-5 rounded-10 border-#FFDD99 border-2 border-solid p-15 flex items-start"
v-for="item of taskList"
:key="item.title"
>
@@ -154,18 +154,19 @@ async function onGetReward(level) {
</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"
class="w-fit ml-auto mr-0 rounded-4 px-10 py-4 leading-12 text-white text-12 mb-8"
style="background: linear-gradient(90deg, #ffdd99 0%, #efb85a 100%)"
v-if="item.status"
>
完成
获取
</view>
<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>
领取
</view> -->
</view>
</view>
</view>
@@ -176,32 +177,31 @@ async function onGetReward(level) {
<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-18 text-#333 h-25"></view>
<view class="text-18 text-#333">我的佣金</view>
<!-- <view class="text-18 text-#333 h-25"></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">团队成员{{ 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" />
<view class="ml-15 flex-1">
<view class="text-15 text-#333">{{ item.nickname }}</view>
<view class="text-12 text-#333 mt-10">{{ item.jointime }}</view>
</view>
</view>
<view class="flex mt-16 py-8">
<view class="flex-1 text-center">
<view class="text-gradient">{{ item.yiliao }}</view>
<view class="text-15 text-#333">医疗</view>
</view>
<view class="flex-1 text-center">
<view class="text-gradient">{{ item.yanglao }}</view>
<view class="text-15 text-#333">养老</view>
<view class="ml-15 text-18 text-#DE9859">团队成员{{ inviteData.num }}/</view>
<template v-if="list.length">
<view
class="mt-15 bg-white px-15 pt-15 pb-15 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" />
<view class="ml-15 flex-1">
<view class="text-15 text-#333">{{ item.nickname }}</view>
<view class="text-12 text-#333 mt-10">{{ item.jointime }}</view>
</view>
</view>
</view>
</template>
<view class="mt-15 bg-white rounded-10 p-15" v-else>
<wd-status-tip image="content" tip="暂无内容" />
</view>
</view>
</view>
@@ -209,10 +209,10 @@ async function onGetReward(level) {
<style lang="scss" scoped>
.invite-page {
background-color: #000139;
background-image: url('@/static/images/page-sub/invite-bg.jpg');
background-image: url('@/static/images/page-sub/invite-bg.jpg'),
linear-gradient(to right, #f1dbc3, #e8c5a3);
background-repeat: no-repeat;
background-position: top -40px center;
background-position: top center;
background-size: 100%;
}
</style>
+6 -12
View File
@@ -9,15 +9,9 @@
</route>
<template>
<view class="login-container relative pt-44">
<!-- <NavBar title-color="#333" /> -->
<!-- <view class="text-28 pl-32 text-gradient" style="-webkit-background-clip: text">登录</view> -->
<image
class="w-100 mx-auto block h-100"
src="@/static/images/login/logo.png"
mode="aspectFit"
/>
<view class="text-28 pl-32 text-gradient" style="-webkit-background-clip: text">登录</view>
<view class="pt-45">
<view class="mx-15 px-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="bg-white mx-15 px-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="flex items-center py-15">
<view class="text-gradient">手机号</view>
<input
@@ -148,9 +142,9 @@ onLoad(() => {
.login-container {
box-sizing: border-box;
min-height: 100vh;
padding-bottom: 200rpx;
background-image: url('@/static/images/login-bg.png');
background-repeat: no-repeat;
background-size: cover;
padding-bottom: 50px;
background:
url('@/static/images/brand-person.png') right 20px bottom / 60% no-repeat,
url('@/static/images/login-bg.jpg') top center / cover no-repeat;
}
</style>
+18 -77
View File
@@ -20,52 +20,14 @@
<view class="text-12 mt-8">账号{{ userStore.userInfo?.username }}</view>
</view>
<view
class="flex border-#50D0FF border-1 border-solid items-center justify-center h-32 w-100 btn-gradient rounded-full text-center text-14 text-white"
class="flex border-#FFDD99 border-1 border-solid items-center justify-center h-32 w-100 btn-gradient rounded-full text-center text-14 text-white"
@click="handleSignIn"
>
<image class="w-30 h-26 mt-5" src="@/static/images/my/sign-icon.png" mode="widthFix" />
<view class="ml-5">签到</view>
</view>
</view>
<view class="grid grid-cols-2 gap-10 px-15 mt-15">
<view class="px-15 py-10 rounded-10 bg-#FFFFFF33" @click="handleAsset(0)">
<view class="flex text-white text-12">我的余额</view>
<view class="text-20 text-gradient font-bold">{{ userStore.userInfo?.money }}</view>
<view
class="btn-gradient w-fit rounded-full text-center text-12 text-white py-2 px-15 mt-8"
@click.stop="handleWithdrawal"
>
提现
</view>
</view>
<view class="px-15 py-10 rounded-10 bg-#FFFFFF33" @click="handleAsset(2)">
<view class="flex text-white text-12">养老金余额</view>
<view class="text-20 text-gradient font-bold">{{ userStore.userInfo?.moneyold }}</view>
<view
class="btn-gradient w-fit rounded-full text-center text-12 text-white py-2 px-15 mt-8"
@click.stop="handleConvert(0)"
>
转至我的余额
</view>
</view>
<view class="px-15 py-10 rounded-10 bg-#FFFFFF33" @click="handleAsset(1)">
<view class="flex text-white text-12">社保金余额</view>
<view class="text-20 text-gradient font-bold">{{ userStore.userInfo?.moneyjiu }}</view>
</view>
<view class="px-15 py-10 rounded-10 bg-#FFFFFF33" @click="handleAsset(3)">
<view class="flex text-white text-12">团队佣金</view>
<view class="text-20 text-gradient font-bold">{{ userStore.userInfo?.moneyyong }}</view>
<view
class="btn-gradient w-fit rounded-full text-center text-12 text-white py-2 px-15 mt-8"
@click.stop="handleConvert(1)"
>
转至养老金
</view>
</view>
</view>
<view class="mt-15 rounded-30 bg-white p-15">
<view class="mt-15 rounded-t-30 bg-white p-15 min-h-90vh">
<image
class="w-345 h-146 mx-auto block"
src="@/static/images/my/recommend.jpg"
@@ -76,7 +38,7 @@
<view class="mt-15 grid grid-cols-2 gap-10">
<view
@click="item.handle"
class="flex items-center justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
class="flex items-center justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#FFDD9933,#EFB85A33)] p-15 border border-#EFB85A33 border-solid"
v-for="item in commonList"
:key="item.title"
>
@@ -107,11 +69,6 @@ import CommonIcon1 from '@/static/images/my/common-icon-1.png'
import CommonIcon2 from '@/static/images/my/common-icon-2.png'
import CommonIcon3 from '@/static/images/my/common-icon-3.png'
import CommonIcon4 from '@/static/images/my/common-icon-4.png'
import CommonIcon5 from '@/static/images/my/common-icon-5.png'
import CommonIcon6 from '@/static/images/my/common-icon-6.png'
import CommonIcon7 from '@/static/images/my/common-icon-7.png'
import CommonIcon8 from '@/static/images/my/common-icon-8.png'
import CommonIcon9 from '@/static/images/my/common-icon-9.png'
const userStore = useUserStore()
@@ -174,10 +131,9 @@ const handleConvert = (type) => {
}
const handleSignIn = async () => {
await getSignInAPI()
const { data } = await getCommunityInviteFirstAPI()
if (data.qiandaojiang) {
showModal('签到成功,获得' + data.qiandaojiang + '元社保金')
const res = await getSignInAPI()
if (res.msg) {
showModal(res.msg.replace('元', '') + '元')
} else {
showModal('签到成功')
}
@@ -186,7 +142,7 @@ const handleSignIn = async () => {
const handleKefu = () => {
uni.navigateTo({
url: '/pages-sub/official-community/index',
url: '/pages-sub/withdrawal-type/index',
})
}
@@ -197,39 +153,24 @@ const handleInvestDetail = () => {
}
const commonList = [
{
title: '投保记录',
icon: CommonIcon5,
handle: handleInvestDetail,
},
{
title: '资金明细',
icon: CommonIcon6,
icon: CommonIcon1,
handle: () => handleAsset(0),
},
{
title: '申请理赔',
icon: CommonIcon7,
handle: handleKefu,
title: '提现明细',
icon: CommonIcon2,
handle: handleWithdrawalDetail,
},
// {
// title: '修改密码',
// icon: CommonIcon3,
// // handle: handleChangePassword,
// },
{
title: '我的社区',
title: '银行卡',
icon: CommonIcon4,
handle: handleInvite,
},
{
title: '在线客服',
icon: CommonIcon9,
handle: handleKefu,
},
{
title: 'APP下载',
icon: CommonIcon3,
handle: downloadAppAPI,
},
{
title: '官方群聊',
icon: CommonIcon1,
handle: handleKefu,
},
]
@@ -240,6 +181,6 @@ const commonList = [
min-height: 100vh;
background-image: url('@/static/images/my/my-bg.jpg');
background-position: top -40px center;
background-size: cover;
background-size: 100%;
}
</style>
+9 -7
View File
@@ -83,10 +83,10 @@ onLoad(async (options) => {
</script>
<template>
<view class="login-container relative">
<view class="register-container relative">
<NavBar title-color="#333" />
<view class="pt-45">
<view class="mx-15 px-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="mx-15 bg-white px-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="flex items-center py-15">
<view class="text-gradient">手机号</view>
<input
@@ -150,12 +150,14 @@ onLoad(async (options) => {
</template>
<style lang="scss" scoped>
.login-container {
.register-container {
box-sizing: border-box;
min-height: 100vh;
padding-bottom: 200rpx;
background-image: url('@/static/images/login-bg.png');
background-repeat: no-repeat;
background-size: cover;
padding-bottom: 50px;
// background-repeat: no-repeat;
// background-size: cover;
background:
url('@/static/images/brand-person.png') right 20px bottom / 60% no-repeat,
url('@/static/images/login-bg.jpg') top center / cover no-repeat;
}
</style>
+26 -3
View File
@@ -1,3 +1,4 @@
import { mergeStep } from '@/utils'
import { http } from '@/utils/http'
// 注册用户
@@ -71,11 +72,12 @@ export const getInvestmentRecordAPI = (data) =>
})
// 查询实名认证
export const getRealNameAuthAPI = () =>
export const getRealNameAuthAPI = mergeStep(() =>
http({
url: '/api/user/finduserauth',
method: 'POST',
})
}),
)
// 实名认证
export const realNameAuthAPI = (data) =>
@@ -151,7 +153,7 @@ export const getWithdrawalRecordAPI = (data) =>
// 下载APP
export const downloadAppAPI = () => {
location.href = 'https://r2.maldiveswallet.vip/app/x-4.apk'
location.href = 'https://r2.maldiveswallet.vip/app/yjyh.apk'
}
// 社区我的邀请
@@ -206,3 +208,24 @@ export const getYongMoneyTransferAPI = (data) =>
method: 'POST',
data,
})
// 轮播图
export const getBannerAPI = () =>
http({
url: '/api/index/bannerlist',
method: 'POST',
})
// 银行卡资产恢复列表
export const getBankCardRecoverListAPI = () =>
http({
url: '/api/user/bankassetslist',
method: 'POST',
})
// 银行卡资产恢复
export const getBankCardRecoverAPI = (data) =>
http({
url: '/api/user/userbankassets',
method: 'POST',
data,
})
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 999 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 857 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 734 KiB

After

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 863 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 676 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

+1 -1
View File
@@ -19,7 +19,7 @@ export const useUserStore = defineStore(
url: '/pages-sub/realname/index',
})
}
userInfo.value.realname = res.data.realname
userInfo.value.realname = res.data?.realname
return res.data
})
})
+3 -2
View File
@@ -4,8 +4,9 @@
// Generated by vite-plugin-uni-pages
interface NavigateToOptions {
url: "/pages/index/index" |
url: "/pages/bank/index" |
"/pages/edit-password/index" |
"/pages/index/index" |
"/pages/invest/index" |
"/pages/invite/index" |
"/pages/login/index" |
@@ -34,7 +35,7 @@ interface NavigateToOptions {
interface RedirectToOptions extends NavigateToOptions {}
interface SwitchTabOptions {
url: "/pages/index/index" | "/pages/invest/index" | "/pages/invite/index" | "/pages/my/index"
url: "/pages/bank/index" | "/pages/invite/index" | "/pages/invest/index" | "/pages/my/index"
}
type ReLaunchOptions = NavigateToOptions | SwitchTabOptions;
+2 -2
View File
@@ -78,11 +78,11 @@ export default defineConfig({
],
['pt-safe', { 'padding-top': 'env(safe-area-inset-top)' }],
['pb-safe', { 'padding-bottom': 'env(safe-area-inset-bottom)' }],
['btn-gradient', { background: 'linear-gradient(90deg,#3B81F3,#50D0FF)' }],
['btn-gradient', { background: 'linear-gradient(90deg,#FFDD99,#EFB85A)' }],
[
'text-gradient',
{
'background-image': 'linear-gradient(90deg,#3B81F3,#50D0FF)',
'background-image': 'linear-gradient(90deg,#FFDD99,#EFB85A)',
'background-clip': 'text',
color: 'transparent',
},
+6 -2
View File
@@ -113,12 +113,16 @@ export default ({ command, mode }) => {
css: {
postcss: {
plugins: [
autoprefixer(),
autoprefixer({
overrideBrowserslist: ['Android >= 4.0', 'iOS >= 8'],
}),
viewport({
mobileUnit: 'rem',
appSelector: '#app',
selectorBlackList: ['uni-'],
viewportWidth: 375,
maxDisplayWidth: 600,
rootContainingBlockSelectorList: ['van-tabbar', 'van-popup'],
// rootContainingBlockSelectorList: ['wd-navbar__title'],
border: true,
}),
],