feat: 完成页面开发

This commit is contained in:
anonymous
2024-12-27 19:01:54 +08:00
parent b642a7d5e7
commit 6d62cc0567
52 changed files with 1463 additions and 31 deletions
+1
View File
@@ -86,6 +86,7 @@
"bin-wrapper": "npm:bin-wrapper-china"
},
"dependencies": {
"@chenfengyuan/vue-qrcode": "^2.0.0",
"@dcloudio/uni-app": "3.0.0-4020920240930001",
"@dcloudio/uni-app-harmony": "3.0.0-4020920240930001",
"@dcloudio/uni-app-plus": "3.0.0-4020920240930001",
+102
View File
@@ -11,6 +11,9 @@ importers:
.:
dependencies:
'@chenfengyuan/vue-qrcode':
specifier: ^2.0.0
version: 2.0.0(qrcode@1.5.4)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app':
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
@@ -855,6 +858,12 @@ packages:
'@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
'@chenfengyuan/vue-qrcode@2.0.0':
resolution: {integrity: sha512-33Cfr0zjbc3Dd8d5b1IgzXRAgXH0c2Gv19VI4snS25V/x9Z41eg769tC+Us1x+vqgQQhgD5YUjLnkpkrQfeMSw==}
peerDependencies:
qrcode: ^1.5.0
vue: ^3.0.0
'@commitlint/cli@18.6.1':
resolution: {integrity: sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw==}
engines: {node: '>=v18'}
@@ -2433,6 +2442,9 @@ packages:
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
engines: {node: '>=18'}
cliui@6.0.0:
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
cliui@7.0.4:
resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
@@ -2737,6 +2749,9 @@ packages:
resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dijkstrajs@1.0.3:
resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -4439,6 +4454,10 @@ packages:
resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
engines: {node: '>=4.0.0'}
pngjs@5.0.0:
resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
engines: {node: '>=10.13.0'}
possible-typed-array-names@1.0.0:
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
engines: {node: '>= 0.4'}
@@ -4586,6 +4605,11 @@ packages:
resolution: {integrity: sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==}
hasBin: true
qrcode@1.5.4:
resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
engines: {node: '>=10.13.0'}
hasBin: true
qs@6.13.0:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'}
@@ -4684,6 +4708,9 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
require-main-filename@2.0.0:
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
@@ -4806,6 +4833,9 @@ packages:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -5456,6 +5486,9 @@ packages:
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
engines: {node: '>= 0.4'}
which-module@2.0.1:
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
which-typed-array@1.1.16:
resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==}
engines: {node: '>= 0.4'}
@@ -5479,6 +5512,10 @@ packages:
peerDependencies:
vue: '>=3.2.47'
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -5556,6 +5593,9 @@ packages:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
y18n@4.0.3:
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -5580,6 +5620,10 @@ packages:
engines: {node: '>= 14'}
hasBin: true
yargs-parser@18.1.3:
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
engines: {node: '>=6'}
yargs-parser@20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
engines: {node: '>=10'}
@@ -5588,6 +5632,10 @@ packages:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
yargs@15.4.1:
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
engines: {node: '>=8'}
yargs@16.2.0:
resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
engines: {node: '>=10'}
@@ -6379,6 +6427,11 @@ snapshots:
'@bcoe/v8-coverage@0.2.3': {}
'@chenfengyuan/vue-qrcode@2.0.0(qrcode@1.5.4)(vue@3.4.21(typescript@5.7.2))':
dependencies:
qrcode: 1.5.4
vue: 3.4.21(typescript@5.7.2)
'@commitlint/cli@18.6.1(@types/node@20.17.9)(typescript@5.7.2)':
dependencies:
'@commitlint/format': 18.6.1
@@ -8850,6 +8903,12 @@ snapshots:
slice-ansi: 5.0.0
string-width: 7.2.0
cliui@6.0.0:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 6.2.0
cliui@7.0.4:
dependencies:
string-width: 4.2.3
@@ -9104,6 +9163,8 @@ snapshots:
diff-sequences@27.5.1: {}
dijkstrajs@1.0.3: {}
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -11117,6 +11178,8 @@ snapshots:
pngjs@3.4.0: {}
pngjs@5.0.0: {}
possible-typed-array-names@1.0.0: {}
postcss-html@1.7.0:
@@ -11251,6 +11314,12 @@ snapshots:
qrcode-terminal@0.12.0: {}
qrcode@1.5.4:
dependencies:
dijkstrajs: 1.0.3
pngjs: 5.0.0
yargs: 15.4.1
qs@6.13.0:
dependencies:
side-channel: 1.0.6
@@ -11361,6 +11430,8 @@ snapshots:
require-from-string@2.0.2: {}
require-main-filename@2.0.0: {}
requires-port@1.0.0: {}
resolve-cwd@3.0.0:
@@ -11505,6 +11576,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
set-blocking@2.0.0: {}
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -12245,6 +12318,8 @@ snapshots:
is-weakmap: 2.0.2
is-weakset: 2.0.3
which-module@2.0.1: {}
which-typed-array@1.1.16:
dependencies:
available-typed-arrays: 1.0.7
@@ -12267,6 +12342,12 @@ snapshots:
dependencies:
vue: 3.4.21(typescript@5.7.2)
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -12325,6 +12406,8 @@ snapshots:
xtend@4.0.2: {}
y18n@4.0.3: {}
y18n@5.0.8: {}
yallist@3.1.1: {}
@@ -12337,10 +12420,29 @@ snapshots:
yaml@2.6.1: {}
yargs-parser@18.1.3:
dependencies:
camelcase: 5.3.1
decamelize: 1.2.0
yargs-parser@20.2.9: {}
yargs-parser@21.1.1: {}
yargs@15.4.1:
dependencies:
cliui: 6.0.0
decamelize: 1.2.0
find-up: 4.1.0
get-caller-file: 2.0.5
require-directory: 2.1.1
require-main-filename: 2.0.0
set-blocking: 2.0.0
string-width: 4.2.3
which-module: 2.0.1
y18n: 4.0.3
yargs-parser: 18.1.3
yargs@16.2.0:
dependencies:
cliui: 7.0.4
+3 -3
View File
@@ -7,9 +7,9 @@ onLaunch((options) => {
if (checkWithRedirectLogin(options.path)) {
uni.reLaunch({
url: loginRoute,
query: {
redirect: options.path,
},
// query: {
// redirect: options.path,
// },
})
}
})
+8 -7
View File
@@ -13,7 +13,7 @@ import type { Router } from 'vue-router'
export const loginRoute = '/pages/login/index'
const isLogged = () => {
export const isLogged = () => {
const userStore = useUserStore()
return userStore.isLogged
}
@@ -41,8 +41,8 @@ const navigateToInterceptor = {
if (hasLogin) {
return true
}
const redirectRoute = `${loginRoute}?redirect=${encodeURIComponent(url)}`
uni.navigateTo({ url: redirectRoute })
// const redirectRoute = `${loginRoute}?redirect=${encodeURIComponent(url)}`
uni.navigateTo({ url: loginRoute })
return false
},
}
@@ -67,7 +67,8 @@ export const getNotNeedLoginPages = () => {
export const checkLoginUrl = (url: string) => {
const path = url.split('?')[0]
const isNotNeedLogin = getNotNeedLoginPages().includes(path)
const isNotNeedLogin = getNotNeedLoginPages().includes(path.replace(/^pages/, '/pages'))
console.log(path)
return isNotNeedLogin
}
@@ -92,9 +93,9 @@ export const routerBeforeEachConfig = (router: Router) => {
if (checkWithRedirectLogin(to.path)) {
return next({
path: loginRoute,
query: {
redirect: to.fullPath,
},
// query: {
// redirect: to.fullPath,
// },
})
}
return next()
+54
View File
@@ -0,0 +1,54 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '我的资产',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<template>
<view class="min-h-screen py-15">
<view class="mx-15 text-16 font-bold text-#333">我的资产</view>
<view
class="mt-15 mx-15 text-white btn-gradient p-15 rounded-10 shadow-[0_5px_30px_rgba(55,230,236,0.4)]"
>
<view class="text-14">总投资金</view>
<view class="text-35 mt-10 font-bold">10000.00</view>
<view class="flex mt-15">
<view class="flex-1">
<view class="text-12 font-light">我的分红</view>
<view class="text-16 font-bold mt-5">10000.00</view>
</view>
<view class="flex-1">
<view class="text-12 font-light">数字人民币</view>
<view class="text-16 font-bold mt-5">10000.00</view>
</view>
<view class="flex-1">
<view class="text-12 font-light">认购点</view>
<view class="text-16 font-bold mt-5">10000.00</view>
</view>
</view>
</view>
<view class="text-16 mx-15 mb-15 font-bold text-#333 mt-30">资产记录</view>
<view
class="flex px-15 py-8 border-b items-center border-#E5E5E5 border-b-solid"
v-for="item in 10"
:key="item"
>
<image src="/static/images/page-sub/invite-icon.png" class="w-32 h-32 self-center" />
<view class="flex flex-col flex-1 ml-15">
<view class="text-14 text-#333">邀请好友奖励</view>
<view class="text-12 mt-10 text-#999">奖励</view>
<view class="text-12 mt-10 text-#999">2024-12-27 10:00:00</view>
</view>
<view class="flex flex-col items-end">
<view class="text-14 font-bold text-#FF5F5F">+1000 RMB</view>
<view class="text-14 font-bold text-#FF5F5F">+2000 RMB</view>
<view class="text-14 font-bold text-#FF5F5F">+30 </view>
<view class="text-14 mt-10 py-4 px-10 bg-#71C78A1A text-#71C78A">已到账</view>
</view>
</view>
</view>
</template>
+22
View File
@@ -0,0 +1,22 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '公司简介',
},
}
</route>
<template>
<view class="pt-15 pb-50 min-h-screen">
<view class="text-center text-16 font-bold">中巴军团</view>
<image
class="w-345 h-170 rounded-10 mt-15 mx-auto block"
src="@/static/images/page-sub/introduction.png"
mode="aspectFill"
/>
<view class="text-gray-500 mx-16 text-14 mt-15">
中巴军团集团有限公司由具有160年历史的上海纺织集团和具有70年外贸历史的原东方国际集团联合重组而成是一家拥有先进制造业与现代服务业以时尚产业健康产业和供应链服务为核心主业以科技实业产业地产金融投资为支撑构建一体两翼三支撑总体格局的大型综合性企业集团名列中国企业500强第275位上海企业100强第25位
集团拥有总资产627亿元员工5.8万人海外员工占70%2023年快报营业收入780亿元进出口56.64亿美元出口41.34亿美元进口15.3亿美元集团在海外拥有96家业务机构分布在五大洲27个国家和地区所属企业389家上市公司4家东方创业申达股份龙头股份香港联泰控股
</view>
</view>
</template>
+29
View File
@@ -0,0 +1,29 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '投资记录',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<template>
<view class="min-h-screen pb-100">
<view
class="flex px-15 py-8 border-b border-#E5E5E5 border-b-solid"
v-for="item in 10"
:key="item"
>
<image src="/static/images/page-sub/money-icon.png" class="w-32 h-32 self-center" />
<view class="flex flex-col flex-1 justify-between ml-15">
<view class="text-14 text-#333">5G通信</view>
<view class="text-12 text-#999">投资</view>
<view class="text-12 text-#999">2024-12-27 10:00:00</view>
</view>
<view class="flex flex-col items-end">
<view class="text-16 text-#FF5F5F">+1000 RMB</view>
<view class="text-14 mt-18 py-4 px-10 bg-#71C78A1A text-#71C78A">投资成功</view>
</view>
</view>
</view>
</template>
@@ -0,0 +1,60 @@
<route lang="json5">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '立即投资',
},
}
</route>
<template>
<view class="min-h-screen pb-100">
<NavBar>
<template #right>
<image @click="onRecharge" src="/static/images/page-sub/recharge.png" class="w-24 h-24" />
</template>
</NavBar>
<view class="p-15">
<view class="text-20 text-#333">RMB</view>
<view class="mt-15">
<view class="text-14 text-#333">投资金额</view>
<view class="text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<input type="number" placeholder="请输入投资金额" class="text-14 text-#333" />
</view>
<view class="text-12 text-#889BC6 mt-15">当前余额10012.12</view>
</view>
<view class="mt-50">
<view class="text-14 text-#333">支付密码</view>
<view class="text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<input type="password" placeholder="请输入支付密码" class="text-14 text-#333" />
</view>
</view>
</view>
<view class="fixed bottom-0 left-0 right-0 px-15 pb-safe">
<view
class="btn-gradient mb-15 text-center text-white rounded-full text-16 px-30 py-10"
@click="onSubmit"
>
提交
</view>
</view>
</view>
</template>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
const onRecharge = () => {
uni.navigateTo({
url: '/pages-sub/invest-detail/index',
})
}
const onSubmit = () => {
uni.redirectTo({
url: '/pages-sub/invest-result/index',
})
}
</script>
<style scoped></style>
+26
View File
@@ -0,0 +1,26 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '投资成功',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<template>
<view class="min-h-screen flex flex-col items-center justify-center">
<image mode="aspectFit" src="/static/images/page-sub/invest-success.png" class="w-150 h-150" />
<view class="text-17 text-#333">恭喜您投资成功</view>
<!-- 返回 -->
<view class="mt-15">
<view @click="onBack" class="btn-gradient text-14 text-white rounded-full px-30 py-10">
返回
</view>
</view>
</view>
</template>
<script setup lang="ts">
const onBack = () => {
uni.navigateBack()
}
</script>
+59
View File
@@ -0,0 +1,59 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '邀请好友',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<script setup lang="ts">
import VueQrcode from '@chenfengyuan/vue-qrcode'
const qrcodeValue = '/pages/register/index?invite=888888'
const onCopy = (code: string) => {
uni.setClipboardData({
data: code,
})
}
</script>
<template>
<view class="pt-250 pb-100 min-h-screen invite-page">
<view class="flex flex-col items-center">
<view
class="flex items-center text-16 text-#333 bg-[rgba(255,255,255,0.8)] rounded-full px-15 py-4 text-12 mt-8"
>
<view>
邀请码
<text class="font-bold">9999999</text>
</view>
<view
class="btn-gradient text-white rounded-full px-15 py-4 text-12 ml-10"
@click="onCopy('99999')"
>
复制
</view>
</view>
<view class="mt-15 rounded-10 overflow-hidden flex">
<VueQrcode :value="qrcodeValue" :options="{ size: 200 }" />
</view>
<view
class="btn-gradient text-white rounded-full text-14 px-30 py-8 mt-30"
@click="onCopy(qrcodeValue)"
>
复制邀请链接
</view>
</view>
</view>
</template>
<style lang="scss" scoped>
.invite-page {
background-image: url('@/static/images/page-sub/invite-bg.png');
background-repeat: no-repeat;
background-position: top;
background-size: 100%;
}
</style>
@@ -0,0 +1,46 @@
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import VueQrcode from '@chenfengyuan/vue-qrcode'
</script>
<route lang="json5">
{
style: {
navigationBarTitleText: '官方社群',
navigationBarBackgroundColor: '#fff',
navigationStyle: 'custom',
},
}
</route>
<template>
<view class="official-community-page">
<NavBar />
<view class="p-15 text-center bg-white rounded-10 m-15 shadow-[0_0_10px_rgba(0,0,0,0.1)]">
<view class="text-16 font-bold text-#333">扫码进入</view>
<wd-icon name="arrow-down" color="#333" size="18px"></wd-icon>
<view class="btn-gradient rounded-full w-fit mx-auto text-16 text-white py-10 px-15">
微聊总群50101011
</view>
<VueQrcode class="!w-270 !h-270 mx-auto" :value="'qrcodeValue'" :options="{ size: 600 }" />
</view>
<view class="p-15 text-center bg-white rounded-10 m-15 shadow-[0_0_10px_rgba(0,0,0,0.1)]">
<view class="text-16 font-bold text-#333">扫码进入</view>
<wd-icon name="arrow-down" color="#333" size="18px"></wd-icon>
<view class="btn-gradient rounded-full w-fit mx-auto text-16 text-white py-10 px-15">
QQ群2群1011101011
</view>
<VueQrcode class="!w-270 !h-270 mx-auto" :value="'qrcodeValue'" :options="{ size: 600 }" />
</view>
</view>
</template>
<style>
.official-community-page {
min-height: 100vh;
padding-bottom: 100rpx;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
}
</style>
+92
View File
@@ -0,0 +1,92 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '实名认证',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<template>
<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">
<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 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>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入真实姓名"
v-model="form.name"
/>
</view>
<view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-number.png" class="w-20 h-20" />
<view class="ml-8">身份证号</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入身份证号"
v-model="form.idCard"
/>
</view>
</view>
<view class="fixed bottom-0 left-0 right-0 pb-safe">
<button class="btn-gradient text-white rounded-full m-15 text-16" @click="onAddType">
提交
</button>
</view>
<view class="flex flex-col items-center" v-if="false">
<image
src="@/static/images/page-sub/realname/realname-success.png"
class="w-150 h-150 block"
mode="aspectFit"
/>
<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="onBack">
返回
</button>
<image
src="@/static/images/page-sub/realname/realname-fail.png"
class="w-150 h-150 block"
mode="aspectFit"
/>
<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="onBack">
返回
</button>
<image
src="@/static/images/page-sub/realname/realname-checking.png"
class="w-150 h-150 block"
mode="aspectFit"
/>
<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">重新提交</button>
</view>
</view>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const form = ref({
type: '',
})
const onBack = () => {
uni.navigateBack()
}
</script>
<style lang="scss" scoped>
.withdrawal-type-edit-page {
--wot-input-placeholder-color: #889bc6;
--wot-cell-wrapper-padding: 0;
}
</style>
+124
View File
@@ -0,0 +1,124 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '我的邀请',
navigationBarBackgroundColor: '#fff',
navigationStyle: 'custom',
},
}
</route>
<template>
<view class="team-page">
<NavBar>
<template #right>
<view @click="handleRule" class="text-14 text-#333">邀请奖励规则</view>
</template>
</NavBar>
<view class="p-15 relative bg-white rounded-10 mt-50 w-345 mx-auto">
<image
class="w-186 h-122 rounded-10 mt-15 mx-auto block absolute right-0 bottom-0"
src="@/static/images/page-sub/team/team-main-hero.png"
mode="aspectFit"
/>
<view class="flex flex-col">
<view class="text-14 text-gradient">看看人数</view>
<view class="text-35 font-bold text-gradient mt-10 leading-35">1234</view>
</view>
</view>
<image
class="w-201 h-46 rounded-10 mt-30 mx-auto block"
src="@/static/images/page-sub/team/team-title.png"
mode="aspectFill"
/>
<view class="flex overflow-auto mt-25 pr-15 pl-8">
<view
class="px-40 ml-8 py-10 flex-shrink-0 rounded-10 bg-white"
v-for="(item, index) in levelList"
:key="item.title"
:class="{
'btn-gradient': currentLevelIndex === index,
}"
@click="() => (currentLevelIndex = index)"
>
<image class="w-42 h-52 rounded-10 mx-auto block" :src="item.icon" mode="aspectFill" />
<view class="text-14 text-center">{{ item.title }}</view>
</view>
</view>
<view class="mt-25 bg-white rounded-10 w-345 mx-auto">
<view class="flex p-15 items-center" v-for="item in 10" :key="item">
<Avatar class="w-40 h-40" />
<view class="flex-1 flex flex-col ml-15">
<view class="text-14 text-#333">用户名</view>
<view class="text-12 mt-10 text-#999">1234567890</view>
<view class="text-12 mt-10 text-#999">2024-12-27 12:00:00</view>
</view>
<view class="bg-#71C78A80 text-white text-12 rounded-10 px-10 py-5">邀请成功</view>
</view>
</view>
<wd-action-sheet v-model="showRule" title="邀请奖励规则">
<view class="text-16 text-#333 p-15">
<view class="mb-10">1.每邀请一人可以获得1万投资金2000数字人民币 1点认购点</view>
<view class="mb-10">2.邀请满5人可以额外获得5万投资金1万数字人民币 5点认购点</view>
<view class="mb-10">3.邀请满10人可以额外获得10万投资金2万数字人民币 10点认购点</view>
<view class="mb-10">4.邀请满20人可以额外获得20万投资金5万数字人民币 20点认购点</view>
<view class="mb-10">5.邀请满50人可以额外获得50万投资金10万数字人民币 50点认购点</view>
</view>
</wd-action-sheet>
</view>
</template>
<script setup lang="ts">
import Avatar from '@/components/Avatar.vue'
import NavBar from '@/components/NavBar.vue'
import Level1 from '@/static/images/page-sub/team/level-1.png'
import Level2 from '@/static/images/page-sub/team/level-2.png'
import Level3 from '@/static/images/page-sub/team/level-3.png'
import Level4 from '@/static/images/page-sub/team/level-4.png'
import Level5 from '@/static/images/page-sub/team/level-5.png'
import Level6 from '@/static/images/page-sub/team/level-6.png'
const showRule = ref(false)
const handleRule = () => {
showRule.value = true
}
const currentLevelIndex = ref(0)
const levelList = ref([
{
title: '一级用户',
icon: Level1,
},
{
title: '二级用户',
icon: Level2,
},
{
title: '三级用户',
icon: Level3,
},
{
title: '四级用户',
icon: Level4,
},
{
title: '五级用户',
icon: Level5,
},
{
title: '六级用户',
icon: Level6,
},
])
</script>
<style lang="scss" scoped>
.team-page {
min-height: 100vh;
padding-bottom: 100rpx;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
}
</style>
+29
View File
@@ -0,0 +1,29 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '提现记录',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<template>
<view class="min-h-screen pb-100">
<view
class="flex px-15 py-8 border-b border-#E5E5E5 border-b-solid"
v-for="item in 10"
:key="item"
>
<image src="/static/images/invest/unionpay-icon.png" class="w-32 h-32 self-center" />
<view class="flex flex-col flex-1 justify-between ml-15">
<view class="text-14 text-#333">银行卡</view>
<view class="text-12 text-#999">提现</view>
<view class="text-12 text-#999">2024-12-27 10:00:00</view>
</view>
<view class="flex flex-col items-end">
<view class="text-16 text-#FF5F5F">-1000 RMB</view>
<view class="text-14 mt-18 py-4 px-10 bg-#71C78A1A text-#71C78A">提现成功</view>
</view>
</view>
</view>
</template>
+105
View File
@@ -0,0 +1,105 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '编辑收款方式',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<template>
<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.type"
:columns="columns"
@change="handleChange"
></wd-select-picker>
</view>
<view class="flex items-center py-15 text-14">
<view>开户行</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入开户行"
v-model="form.bank"
/>
</view>
<view class="flex items-center py-15 text-14">
<view>持卡人姓名</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入持卡人姓名"
v-model="form.name"
/>
</view>
<view class="flex items-center py-15 text-14">
<view>银行账号</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入银行账号"
v-model="form.account"
/>
</view>
<view class="flex items-center py-15 text-14">
<view>备注</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入备注"
v-model="form.remark"
/>
</view>
</view>
<view class="fixed bottom-0 left-0 right-0 pb-safe">
<button class="btn-gradient text-white rounded-full m-15 text-16" @click="onAddType">
提交
</button>
</view>
</view>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const form = ref({
type: '',
})
const columns = [
{
label: '支付宝',
value: '1',
},
{
label: '微信',
value: '2',
},
{
label: '银行卡',
value: '3',
},
]
const handleChange = (value: string) => {
console.log(value)
}
</script>
<style lang="scss" scoped>
.withdrawal-type-edit-page {
--wot-input-placeholder-color: #889bc6;
--wot-cell-wrapper-padding: 0;
}
</style>
+59
View File
@@ -0,0 +1,59 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '收款方式',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<template>
<view class="withdrawal-type-page min-h-screen pb-100">
<view
class="flex items-center justify-between py-15 text-14 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10 m-15 p-15"
v-for="item in 10"
:key="item"
@click="onSelectType(item)"
>
<image class="w-45 h-45" src="@/static/images/invest/alipay-icon.png" mode="aspectFit" />
<view class="flex-1 ml-15">
<view class="text-16 font-bold">支付宝</view>
<view class="mt-10 text-14 text-#889BC6">132****113</view>
</view>
<wd-icon name="arrow-right" size="14px"></wd-icon>
</view>
<view class="fixed bottom-0 left-0 right-0 pb-safe">
<button class="text-16 btn-gradient text-white rounded-full m-15" @click="onAddType">
添加收款方式
</button>
</view>
</view>
</template>
<script setup lang="ts">
import { onLoad } from '@dcloudio/uni-app'
let isSelect = false
onLoad((options) => {
if (options.type === 'select') {
isSelect = true
}
})
const onSelectType = (item) => {
if (isSelect) {
uni.$emit('withdrawal-type', item)
uni.navigateBack()
} else {
uni.navigateTo({
url: '/pages-sub/withdrawal-type/edit?id=1',
})
}
}
const onAddType = () => {
uni.navigateTo({
url: '/pages-sub/withdrawal-type/edit',
})
}
</script>
+91
View File
@@ -0,0 +1,91 @@
<route lang="json5">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '提现',
},
}
</route>
<template>
<view class="min-h-screen pb-100">
<NavBar>
<template #right>
<image
@click="onWithdrawalDetail"
src="/static/images/page-sub/recharge.png"
class="w-24 h-24"
/>
</template>
</NavBar>
<view class="p-15">
<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"
>
<input type="number" placeholder="请输入提现金额" class="text-14 text-#333 flex-1" />
<view class="text-12 text-#04A9F9">全部</view>
</view>
<view class="text-12 text-#889BC6 mt-15">当前余额10012.12</view>
</view>
<view class="mt-50">
<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">请选择收款方式</view>
<wd-icon name="arrow-right" size="16px"></wd-icon>
</view>
</view>
<view class="mt-50">
<view class="text-14 text-#333">交易密码</view>
<view class="text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<input type="password" placeholder="请输入交易密码" class="text-14 text-#333" />
</view>
</view>
</view>
<view
class="bg-white fixed bottom-0 left-0 right-0 px-15 py-10 shadow-[0_0_10px_rgba(10,68,245,0.1)]"
>
<view class="flex items-center pb-safe">
<view class="text-gradient flex-1 text-14">到账CNY:13123.00</view>
<view
class="btn-gradient text-center text-white rounded-full text-14 px-30 py-10"
@click="onSubmit"
>
申请提现
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
const onWithdrawalDetail = () => {
uni.navigateTo({
url: '/pages-sub/withdrawal-detail/index',
})
}
const onSelectPayType = () => {
uni.$once('withdrawal-type', (data: any) => {
console.log(data)
})
uni.navigateTo({
url: '/pages-sub/withdrawal-type/index?type=select',
})
}
const onSubmit = () => {
uni.redirectTo({
url: '/pages-sub/invest-result/index',
})
}
</script>
<style scoped></style>
+123
View File
@@ -58,6 +58,15 @@
"navigationBarTitleText": "首页"
}
},
{
"path": "pages/edit-password/index",
"type": "page",
"style": {
"navigationBarTitleText": "忘记密码",
"navigationStyle": "custom"
},
"notNeedLogin": false
},
{
"path": "pages/house/index",
"type": "page",
@@ -90,18 +99,132 @@
"navigationStyle": "custom",
"navigationBarTitleText": "个人中心"
}
},
{
"path": "pages/register/index",
"type": "page",
"style": {
"navigationBarTitleText": "注册",
"navigationStyle": "custom"
},
"notNeedLogin": false
}
],
"subPackages": [
{
"root": "pages-sub",
"pages": [
{
"path": "asset/index",
"type": "page",
"style": {
"navigationBarTitleText": "我的资产",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "demo/index",
"type": "page",
"style": {
"navigationBarTitleText": "分包页面 标题"
}
},
{
"path": "introduction/index",
"type": "page",
"style": {
"navigationBarTitleText": "公司简介"
}
},
{
"path": "invest-detail/index",
"type": "page",
"style": {
"navigationBarTitleText": "投资记录",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "invest-immediately/index",
"type": "page",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "立即投资"
}
},
{
"path": "invest-result/index",
"type": "page",
"style": {
"navigationBarTitleText": "投资成功",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "invite/index",
"type": "page",
"style": {
"navigationBarTitleText": "邀请好友",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "official-community/index",
"type": "page",
"style": {
"navigationBarTitleText": "官方社群",
"navigationBarBackgroundColor": "#fff",
"navigationStyle": "custom"
}
},
{
"path": "realname/index",
"type": "page",
"style": {
"navigationBarTitleText": "实名认证",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "team/index",
"type": "page",
"style": {
"navigationBarTitleText": "我的邀请",
"navigationBarBackgroundColor": "#fff",
"navigationStyle": "custom"
}
},
{
"path": "withdrawal/index",
"type": "page",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "提现"
}
},
{
"path": "withdrawal-detail/index",
"type": "page",
"style": {
"navigationBarTitleText": "提现记录",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "withdrawal-type/edit",
"type": "page",
"style": {
"navigationBarTitleText": "编辑收款方式",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "withdrawal-type/index",
"type": "page",
"style": {
"navigationBarTitleText": "收款方式",
"navigationBarBackgroundColor": "#fff"
}
}
]
}
+124
View File
@@ -0,0 +1,124 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '忘记密码',
navigationStyle: 'custom',
},
notNeedLogin: false,
}
</route>
<template>
<view class="login-container relative">
<NavBar />
<view class="pt-45">
<view class="mx-15 px-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/phone.png" mode="aspectFit" />
<input
type="text"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入手机号"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/message.png" mode="aspectFit" />
<input
type="text"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入短信验证码"
/>
<view
class="py-6 rounded-full ml-15 px-15 text-12 text-white btn-gradient text-14 text-#889BC6"
@click="handleGetCode"
>
获取验证码
</view>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请输入登录密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请再次输入登录密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请输入支付密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请再次输入支付密码"
/>
</view>
</view>
<view
class="mt-50 text-center py-12 rounded-full mx-15 text-15 text-white btn-gradient"
@click="handleRegister"
>
确认
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { isLogged } from '@/interceptors/route'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
let redirect = '/'
onLoad((options) => {
redirect = options.redirect ?? '/'
})
const handleRegister = () => {
userStore.setUserInfo({
token: '123456',
})
uni.reLaunch({
url: redirect,
})
}
onLoad(() => {
if (isLogged()) {
uni.reLaunch({
url: redirect,
})
}
})
</script>
<style lang="scss">
.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;
}
</style>
+5
View File
@@ -26,6 +26,7 @@
</view>
<view
class="text-12 text-center bg-[linear-gradient(to_right,#3B81F3,#37E6EC)] text-white py-8 rounded-full"
@click="handleClick(item)"
>
领取
</view>
@@ -41,6 +42,10 @@ import NavBar from '@/components/NavBar.vue'
defineOptions({
name: 'Home',
})
const handleClick = (item: number) => {
alert('领取成功')
}
</script>
<style>
+22 -8
View File
@@ -16,20 +16,16 @@
mode="aspectFill"
/>
<view class="flex bg-white py-15 rounded-10 m-15">
<view class="flex-1 flex flex-col items-center">
<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>
<view class="flex-1 flex flex-col items-center">
<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>
<text class="mt-8 text-14 text-#333">邀请好友</text>
</view>
<view class="flex-1 flex flex-col items-center">
<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">
<image class="w-30 h-30" src="@/static/images/home/nav-4.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">官方社群</text>
</view>
</view>
@@ -59,6 +55,24 @@ import NavBar from '@/components/NavBar.vue'
defineOptions({
name: 'Home',
})
const handleIntroduction = () => {
uni.navigateTo({
url: '/pages-sub/introduction/index',
})
}
const handleInvite = () => {
uni.navigateTo({
url: '/pages-sub/invite/index',
})
}
const handleOfficialCommunity = () => {
uni.navigateTo({
url: '/pages-sub/official-community/index',
})
}
</script>
<style>
+34
View File
@@ -40,6 +40,7 @@
</view>
<view
class="text-center px-50 absolute bottom-0 left-0 text-12 text-#fff rounded-full py-8 bg-[linear-gradient(45deg,rgba(59,129,243,1),rgba(55,230,236,1))]"
@click="onInvest(item)"
>
立即投资
</view>
@@ -50,20 +51,52 @@
</view>
</view>
</view>
<wd-action-sheet v-model="showPayType" :panels="panels" @select="onSelectPayType" />
</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'
defineOptions({
name: 'Home',
})
const showPayType = ref(false)
const panels = ref([
{
iconUrl: WechatIcon,
title: '微信支付',
},
{
iconUrl: AlipayIcon,
title: '支付宝支付',
},
{
iconUrl: UnionpayIcon,
title: '银联支付',
},
])
const onGoInvestDetail = () => {
uni.navigateTo({
url: '/pages-sub/invest-detail/index',
})
}
const onSelectPayType = ({ item, index }: any) => {
console.log(item, index)
alert(item.title)
}
const onInvest = (item: any) => {
// uni.navigateTo({
// url: '/pages-sub/invest-immediately/index',
// })
showPayType.value = true
}
</script>
<style>
@@ -72,6 +105,7 @@ const onGoInvestDetail = () => {
padding-bottom: 100px;
background-image: url('@/static/images/invest/bg.png');
background-repeat: no-repeat;
background-attachment: fixed;
background-position: top -80rpx center;
background-size: 100%;
}
+26 -3
View File
@@ -33,11 +33,13 @@
placeholder-class="text-#889BC6"
type="text"
class="text-right flex-1 text-14"
placeholder="请输入密码"
placeholder="请输入登录密码"
/>
</view>
</view>
<view class="ml-auto mr-0 w-fit text-#04A9F9 text-14 p-15">忘记密码</view>
<view class="ml-auto mr-0 w-fit text-#04A9F9 text-14 p-15" @click="handleEditPassword">
忘记密码
</view>
<view
class="mt-30 text-center py-12 rounded-full mx-15 text-15 text-white bg-[linear-gradient(45deg,rgba(59,129,243,0.5),rgba(55,230,236,0.51))]"
@click="handleLogin"
@@ -46,7 +48,7 @@
</view>
<view class="mt-30 text-center text-14 text-#999">
没有账号
<text class="text-#04A9F9">立即注册</text>
<text class="text-#04A9F9" @click="handleRegister">立即注册</text>
</view>
</view>
<view class="absolute bottom-15 left-50% -translate-x-50% text-#999 text-14">V1.0.0</view>
@@ -55,6 +57,7 @@
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { isLogged } from '@/interceptors/route'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
@@ -72,6 +75,26 @@ const handleLogin = () => {
url: redirect,
})
}
const handleRegister = () => {
uni.navigateTo({
url: '/pages/register/index',
})
}
const handleEditPassword = () => {
uni.navigateTo({
url: '/pages/edit-password/index',
})
}
onLoad(() => {
if (isLogged()) {
uni.reLaunch({
url: redirect,
})
}
})
</script>
<style lang="scss">
+58 -9
View File
@@ -29,6 +29,7 @@
<view class="flex px-15 mt-15">
<view
class="flex py-30 justify-center items-center rounded-tl-10 rounded-br-10 flex-1 bg-[linear-gradient(180deg,#D9EBFF,#9EDAFF)] border-1 border-#5FAEFF80 border-solid"
@click="handleWithdrawal"
>
<image class="w-40 h-40" src="@/static/images/my/withdrawal.png" mode="aspectFit" />
<view
@@ -39,12 +40,13 @@
</view>
<view
class="ml-10 flex py-30 justify-center items-center rounded-tl-10 rounded-br-10 flex-1 bg-[linear-gradient(180deg,#D9EBFF,#9EDAFF)] border-1 border-#5FAEFF80 border-solid"
@click="handleWithdrawalDetail"
>
<image class="w-40 h-40" src="@/static/images/my/top-up.png" mode="aspectFit" />
<view
class="text-white text-14 px-15 py-5 ml-15 rounded-full bg-[linear-gradient(45deg,#3B81F3_0%,#37E6EC_100%)]"
>
充值
提现明细
</view>
</view>
</view>
@@ -53,32 +55,38 @@
class="w-330 h-123 mx-auto mt-15 block"
src="@/static/images/my/recommend.png"
mode="aspectFill"
@click="handleInvite"
/>
<view class="mt-15 grid grid-cols-2 gap-10 p-15">
<view
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/house.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">房屋</view>
</view>
<view
@click="handleTeam"
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/team.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">我的团队</view>
<view class="text-14 text-#333 ml-10">我的邀请</view>
</view>
<view
@click="handleAsset"
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/house.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">我的资产</view>
</view>
<view
@click="handleRealName"
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/realname.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">实名认证</view>
</view>
<view
@click="handleBankCard"
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/kefu.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">在线客服</view>
<view class="text-14 text-#333 ml-10">我的银行卡</view>
</view>
</view>
@@ -105,6 +113,47 @@ const handleLogout = () => {
url: loginRoute,
})
}
const handleWithdrawalDetail = () => {
uni.navigateTo({
url: '/pages-sub/withdrawal-detail/index',
})
}
const handleWithdrawal = () => {
uni.navigateTo({
url: '/pages-sub/withdrawal/index',
})
}
const handleTeam = () => {
uni.navigateTo({
url: '/pages-sub/team/index',
})
}
const handleRealName = () => {
uni.navigateTo({
url: '/pages-sub/realname/index',
})
}
const handleAsset = () => {
uni.navigateTo({
url: '/pages-sub/asset/index',
})
}
const handleBankCard = () => {
uni.navigateTo({
url: '/pages-sub/withdrawal-type/index',
})
}
const handleInvite = () => {
uni.navigateTo({
url: '/pages-sub/invite/index',
})
}
</script>
<style lang="scss" scoped>
+133
View File
@@ -0,0 +1,133 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '注册',
navigationStyle: 'custom',
},
notNeedLogin: false,
}
</route>
<template>
<view class="login-container relative">
<NavBar />
<view class="pt-45">
<view class="mx-15 px-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/phone.png" mode="aspectFit" />
<input
type="text"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入手机号"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/message.png" mode="aspectFit" />
<input
type="text"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入短信验证码"
/>
<view
class="py-6 rounded-full ml-15 px-15 text-12 text-white btn-gradient text-14 text-#889BC6"
@click="handleGetCode"
>
获取验证码
</view>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请输入登录密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请再次输入登录密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请输入支付密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请再次输入支付密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/invite.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请输入邀请码"
/>
</view>
</view>
<view
class="mt-50 text-center py-12 rounded-full mx-15 text-15 text-white btn-gradient"
@click="handleRegister"
>
注册
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { isLogged } from '@/interceptors/route'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
let redirect = '/'
onLoad((options) => {
redirect = options.redirect ?? '/'
})
const handleRegister = () => {
userStore.setUserInfo({
token: '123456',
})
uni.reLaunch({
url: redirect,
})
}
onLoad(() => {
if (isLogged()) {
uni.reLaunch({
url: redirect,
})
}
})
</script>
<style lang="scss">
.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;
}
</style>
Binary file not shown.

After

Width:  |  Height:  |  Size: 745 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

+16 -1
View File
@@ -5,11 +5,26 @@
interface NavigateToOptions {
url: "/pages/index/index" |
"/pages/edit-password/index" |
"/pages/house/index" |
"/pages/invest/index" |
"/pages/login/index" |
"/pages/my/index" |
"/pages-sub/demo/index";
"/pages/register/index" |
"/pages-sub/asset/index" |
"/pages-sub/demo/index" |
"/pages-sub/introduction/index" |
"/pages-sub/invest-detail/index" |
"/pages-sub/invest-immediately/index" |
"/pages-sub/invest-result/index" |
"/pages-sub/invite/index" |
"/pages-sub/official-community/index" |
"/pages-sub/realname/index" |
"/pages-sub/team/index" |
"/pages-sub/withdrawal/index" |
"/pages-sub/withdrawal-detail/index" |
"/pages-sub/withdrawal-type/edit" |
"/pages-sub/withdrawal-type/index";
}
interface RedirectToOptions extends NavigateToOptions {}
+12
View File
@@ -78,6 +78,18 @@ 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(45deg,rgba(59,129,243,1),rgba(55,230,236,1))' },
],
[
'text-gradient',
{
'background-image': 'linear-gradient(45deg,#3B81F3,#37E6EC)',
'background-clip': 'text',
color: 'transparent',
},
],
],
})