Commit 68de32f9 authored by zhangsan's avatar zhangsan

1

parent cc058e1b
// import fs from 'node:fs'
// import path from 'node:path'
// import process from 'node:process'
// import * as glob from 'glob'
// // 找出 src/pages 下面的 html 模板,形成配置文件
// export function entryPoints() {
// const htmlPaths = glob.sync('src/pages/*.html')
// const config: Record<string, string> = {}
// for (const htmlPath of htmlPaths) {
// if (fs.statSync(htmlPath).isFile()) {
// const { name } = path.parse(htmlPath)
// config[name] = path.resolve(process.cwd(), htmlPath).replace(/\\/g, '/')
// }
// }
// return config
// }
import fs from 'node:fs'
import path from 'node:path'
import process from 'node:process'
import * as glob from 'glob'
// 找出 src/pages 下面的 html 模板,形成配置文件
// 修改配置以支持嵌套的页面结构
export function entryPoints() {
const htmlPaths = glob.sync('src/pages/*.html')
// 修改 glob 模式以匹配所有 HTML 文件,包括子目录
const htmlPaths = glob.sync('src/pages/**/*.html')
const config: Record<string, string> = {}
for (const htmlPath of htmlPaths) {
if (fs.statSync(htmlPath).isFile()) {
const { name } = path.parse(htmlPath)
config[name] = path.resolve(process.cwd(), htmlPath).replace(/\\/g, '/')
// 获取相对于 pages 目录的路径
const relativePath = path.relative('src/pages', htmlPath)
// 获取目录名和文件名
const dirName = path.dirname(relativePath)
const fileName = path.basename(relativePath, '.html')
// 构建路由路径 - 移除重复的目录名
const routePath = dirName === '.'
? fileName
: `${dirName}/${fileName === 'index' ? '' : fileName}`.replace(/\/+$/, '')
// 将反斜杠转换为正斜杠
const normalizedPath = path.resolve(process.cwd(), htmlPath).replace(/\\/g, '/')
config[routePath] = normalizedPath
}
}
return config
}
\ No newline at end of file
......@@ -3,6 +3,10 @@
"path": "404",
"title": "404-页面未找到"
},
{
"path": "detail",
"title": "项目详情"
},
{
"path": "guquan",
"title": "股权"
......@@ -15,20 +19,16 @@
"path": "login",
"title": "登录"
},
{
"path": "register",
"title": "注册"
},
{
"path": "product",
"title": "产品"
"title": "项目"
},
{
"path": "user",
"title": "用户"
"path": "register",
"title": "注册"
},
{
"path": "product/detail",
"title": "产品详情"
"path": "yaoqing",
"title": "邀请奖励"
}
]
\ No newline at end of file
<script setup lang="ts">
const props = defineProps({
title: {
type: String,
default: ''
}
})
function onBack() {
window.history.back()
}
</script>
<template>
<var-app-bar :title="props.title" text-color="#000" style="z-index: 10;" fixed title-position="center" color="#fff">
<template #left>
<var-button round text text-color="#000" @click="onBack">
<var-icon name="chevron-left" :size="26" />
</var-button>
</template>
</var-app-bar>
</template>
......@@ -108,6 +108,7 @@ const handleTabClick = (tab: TabItem): void => {
height: 55px;
background-color: #fff;
box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.06);
z-index: 1000;
}
.footer-item {
......
<template>
<main class="flex flex-col min-h-svh">
<!-- <AppHeader class="h-[var(--van-nav-bar-height)]"/> -->
<div style="margin-top: 54px;">
<slot />
</div>
</main>
</template>
<script setup>
// import AppHeader from '@/components/AppHeader.vue'
</script>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<meta name="description" content="一带一路" />
<meta name="keywords" content="ares-admin,ares-mobile,ares admin,ares mobile,ares,mpa,vue,h5,template">
<meta name="format-detection" content="telephone=no" />
<title>我的</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="./my/main.ts"></script>
</body>
</html>
\ No newline at end of file
<script setup>
import defaultLayout from '@/layout/default.vue'
import request from '@/utils/request'
import { showConfirmDialog } from 'vant'
import { onMounted, ref } from 'vue'
import png1 from '@/static/my/a1.png'
import png2 from '@/static/my/a2.png'
import png3 from '@/static/my/a3.png'
import png4 from '@/static/my/a4.png'
import png5 from '@/static/my/a5.png'
import png6 from '@/static/my/a6.png'
import png7 from '@/static/my/a7.png'
import png8 from '@/static/my/a8.png'
import png9 from '@/static/my/a9.png'
const MENU_ITEMS = ref([
{ name: '实名认证', icon: png1, path: '/user/shiming.html' },
{ name: '银行卡绑定', icon: png2, path: '/user/bindBankCard.html' },
{ name: '资金明细', icon: png3, path: '/user/zjmx.html' },
{ name: '提现明细', icon: png4, path: '/user/withdraw.html' },
{ name: '购买详情', icon: png5, path: '/user/product.html' },
{ name: 'APP下载', icon: png6, path: '/user/app.html' },
{ name: '我的团队', icon: png7, path: '/user/myteam.html' },
{ name: '账号安全', icon: png8, path: '/user/accountSecurity.html' },
{ name: '邀请好友', icon: png9, path: '/yaoqing.html' },
])
const navigateTo = (path) => {
window.location.href = window.location.origin + path
}
const iseye = ref(false)
const userData = ref({})
const loading = ref(true)
const activeCard = ref(null)
// 处理点击事件
function handleClick(item) {
activeCard.value = item.name
setTimeout(() => {
navigateTo(item.path)
}, 150)
}
function gotx(balance, type, title) {
// if (balance && balance > 0) {
// navigateTo(`/user/tixian?balance=${balance}&type=${type}&title=${title}`)
// }
// else {
// showFailToast('余额不足')
// }
navigateTo(`/user/tixian.html?balance=${balance}&type=${type}&title=${title}`)
}
function gomx(tab) {
navigateTo(`/user/zjmx.html?tab=${tab}`)
}
async function fetchData() {
try {
loading.value = true
const res = await request.get('/system/user/')
userData.value = res
}
catch (error) {
console.error('请求失败:', error)
showFailToast('获取用户信息失败')
}
finally {
loading.value = false
}
}
function logout() {
showConfirmDialog({
title: '退出确认',
content: '您确定要退出登录吗?',
}).then(() => {
localStorage.clear()
navigateTo('/login.html')
})
}
onMounted(fetchData)
</script>
<template>
<defaultLayout>
<div class="container">
<var-loading description="加载中..." :loading="loading">
<div class="content-wrapper">
<!-- 用户信息卡片 -->
<div v-ripple class="card user-card">
<div class="leftbox">
<div class="avatar">
<img src="@/static/my/1.png" alt="avatar">
</div>
<div class="info">
<div class="nickname">
<span>{{ userData?.data == "true" ? (userData?.extend2 != '未命名' ? userData?.extend2 :
userData?.nickName) : '未实名' }}</span>
<span class="verify-tag" :class="{ verified: userData?.data === 'true' }">
{{ userData?.data === "true" ? "已实名" : "未实名" }}
</span>
</div>
<div class="phone">
{{ userData?.phonenumber?.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') }}
</div>
<div class="invite-code">
邀请码:{{ userData?.yqm }}
</div>
</div>
</div>
<div class="rightbox">
<div v-ripple class="qd" @click="navigateTo('/user/singIn.html')">
<img src="@/static/my/qd.png" alt="sign">
<span>每日签到</span>
</div>
<div v-ripple class="qd" style="margin-top: 4px;">
<img src="@/static/my/kf.png" alt="sign">
<span>在线客服</span>
</div>
</div>
</div>
<!-- 资产卡片 -->
<div class="card asset-card">
<div class="topbox">
<div class="left">
<div class="div">
<span style="margin-right: 5px;">我的余额()</span>
<van-icon size='30' v-if="iseye" name="closed-eye" @click="iseye = !iseye" />
<van-icon size='30' v-if="!iseye" name="eye-o" @click="iseye = !iseye" />
</div>
<div class="div">
{{ iseye ? userData.q5 || 0 : '****' }}
</div>
</div>
<div class="right" @click="gotx(userData.q5, '5', '提现')">
提现
</div>
</div>
<var-divider />
<div class="bottombox">
<div class="left">
<div class="div">
<div class="subtitle">
可提现金额()
</div>
<div class="num">
{{ userData.q3 || '0' }}
</div>
<div class="btnbox">
<div class="clickbtn" @click="gotx(userData.q3, '3', '提现')">
提现
</div>
<div class="clickbtn" @click="gomx(3)">
明细
</div>
</div>
</div>
</div>
<div class="right">
<div class="div">
<div class="subtitle">
我的股权()
</div>
<div class="num">
{{ userData.q2 || '0' }}
</div>
<div class="btnbox">
<div class="clickbtn" @click="navigateTo('/guquan.html')">
抛售
</div>
<div class="clickbtn" @click="gomx(2)">
明细
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 广告横幅 -->
<div v-ripple class="banner" @click="navigateTo('/user/bankCard.html')">
<div class="left">
银行卡申请
</div>
<div class="right">
<span>申请邮寄</span><var-icon name="chevron-right" />
</div>
</div>
<var-paper :elevation="2" class="menu-list">
<div v-for="item in MENU_ITEMS" :key="item.name" v-ripple class="menu-item" @click="handleClick(item)">
<img :src="item.icon" :alt="item.name">
<span>{{ item.name }}</span>
</div>
</var-paper>
<div v-ripple class="logout" @click="logout">
安全退出
</div>
<div class="footer">
<div class="tips">
网站标识码:bm18000002 ICP10036469
</div>
<div class="tips">
"一带一路"世界银行 版权所有,如需转载,请注明来源
</div>
<div class="tips">
<img src="@/static/my/b1.png" alt="">
<img src="@/static/my/b2.png" alt="">
</div>
</div>
</div>
</var-loading>
</div>
</defaultLayout>
</template>
<style lang="scss" scoped>
.container {
padding: 20px 0;
background: linear-gradient(to bottom, #fff3e6, #feeac9);
min-height: 100vh;
.footer {
padding: 0 40px;
font-size: 12px;
.tips {
display: flex;
img {
margin-top: 10px;
width: 24px;
margin-right: 12px;
}
}
}
}
.card {
border-radius: 12px;
padding: 10px;
}
.user-card {
display: flex;
justify-content: space-between;
align-items: center;
.leftbox {
display: flex;
gap: 10px;
align-items: center;
.avatar img {
width: 60px;
height: 60px;
border-radius: 50%;
transition: transform 0.3s ease;
&:hover {
transform: scale(1.05);
}
}
.info {
.nickname {
display: flex;
align-items: center;
gap: 8px;
font-size: 18px;
font-weight: 600;
.verify-tag {
font-size: 12px;
padding: 2px 8px;
border-radius: 12px;
background: rgba(235, 76, 76, 0.1);
color: #eb4c4c;
&.verified {
background: rgba(76, 175, 80, 0.1);
color: #4caf50;
}
}
}
.phone,
.invite-code {
font-size: 14px;
color: #666;
margin-top: 4px;
}
}
}
.rightbox {
.qd {
display: flex;
padding: 10px 20px;
border-radius: 12px;
background: #7d8ef5;
img {
width: 16px;
height: 16px;
margin-right: 8px;
}
span {
font-weight: 500;
font-size: 14px;
color: #ffffff;
line-height: 14px;
}
}
}
}
.asset-card {
background: url('@/static/my/money.png') no-repeat;
background-size: 100% 100%;
padding: 20px 40px 30px;
color: #fff;
.topbox {
display: flex;
justify-content: space-between;
align-items: center;
.left {
.div {
display: flex;
align-items: center;
img {
width: 14px;
height: 14px;
margin-left: 8px;
}
}
}
.right {
background: url('@/static/my/tixian.png') no-repeat;
background-size: 100% 100%;
padding: 2px 24px;
color: #fff;
}
}
.bottombox {
display: flex;
justify-content: space-between;
align-items: center;
.div {
text-align: center;
.subtitle {
font-size: 12px;
}
.num {
font-size: 18px;
font-weight: 600;
}
}
}
}
.banner {
overflow: hidden;
border-radius: 12px;
background: url('@/static/my/3.png') no-repeat;
background-size: 100% 100%;
display: flex;
padding: 30px 30px 40px;
align-items: center;
color: #fff;
.left {
font-size: 18px;
}
.right {
margin-left: 10px;
display: flex;
align-items: center;
background: #e72226;
padding: 2px 8px;
font-size: 12px;
border-radius: 6px;
}
}
.btnbox {
display: flex;
justify-content: space-between;
align-items: center;
.clickbtn {
margin-left: 10px;
display: flex;
align-items: center;
background: linear-gradient(to right, #f87c2f, #b6040c);
padding: 4px 16px;
border-radius: 16px;
font-size: 12px;
}
}
.quick-actions {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
.action-card {
background: #fff;
border-radius: 12px;
padding: 16px;
display: flex;
align-items: center;
gap: 12px;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
&:hover {
transform: translateY(-2px);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);
}
img {
width: 32px;
height: 32px;
}
span {
font-size: 16px;
font-weight: 500;
color: #333;
}
}
}
.menu-list {
border-radius: 12px;
overflow: hidden;
display: flex;
margin: 0 12px;
flex-wrap: wrap;
background: #fff3e6;
padding: 10px 0;
.menu-item {
width: 33%;
align-items: center;
display: flex;
flex-direction: column;
justify-content: center;
gap: 10px;
padding: 10px 0;
img {
width: 34px;
height: 34px;
}
span {
font-size: 14px;
color: #000;
}
}
.menu-item-active {
background: rgba(0, 0, 0, 0.05);
}
}
.logout {
transition: all 0.3s ease;
text-align: center;
font-size: 16px;
width: 70%;
margin: 18px auto;
color: #fff;
height: 60px;
line-height: 44px;
background: url('@/static/my/btn.png') no-repeat;
background-size: 100% 100%;
}
// 动画
@keyframes fade-in {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.menu-item-enter-active,
.menu-item-leave-active {
transition: all 0.3s ease;
}
.menu-item-enter-from,
.menu-item-leave-to {
opacity: 0;
transform: translateX(30px);
}
</style>
import 'virtual:uno.css'
import '@/styles/index.scss'
import Varlet from '@varlet/ui'
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).use(Varlet).mount('#app')
\ No newline at end of file
......@@ -33,7 +33,7 @@ const fetchData = async () => {
}
const handleJump = (item) => {
window.location.href = window.location.origin + `/product/detail.html?id=${item.productId}`
window.location.href = window.location.origin + `/product/detail?id=${item.productId}`
}
fetchData()
</script>
......
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<meta name="description" content="一带一路" />
<meta name="keywords" content="ares-admin,ares-mobile,ares admin,ares mobile,ares,mpa,vue,h5,template">
<meta name="format-detection" content="telephone=no" />
<title>项目购买</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="./buypro/main.ts"></script>
</body>
</html>
\ No newline at end of file
<script setup>
import { ref } from 'vue'
import request from '@/utils/request'
import AppHeader from '@/components/AppHeader.vue'
import card1 from '@/static/pages/product/card1.png'
import card2 from '@/static/pages/product/card2.png'
import card3 from '@/static/pages/product/card3.png'
import card4 from '@/static/pages/product/card4.png'
const pngArr1 = ref([card1, card2, card3, card4])
import { showFailToast } from 'vant'
const paymentInfo = ref({
mony: 200,
productId: '',
type: 1
});
// const payupRef = ref();
// const handleBuy = () => {
// payupRef.value?.open();
// }
// const handleClose = () => {
// paymentInfo.value.show = false;
// }
const id = window.location.search.split('=')[1]
const productArr = ref([])
const loading = ref(true)
const total = ref(1)
const checked = ref('1')
const amout = ref(0)
const fetchData = async () => {
try {
loading.value = true
const res = await request.get(`/ops/product/data/list?productKey=${id}`)
if (res?.code === 200) {
productArr.value = res.rows[0] ?? []
if (productArr.value?.price) {
amout.value = productArr.value.price * total.value
}
}
} catch (error) {
console.error('获取数据失败:', error)
showFailToast('加载失败,请重试')
} finally {
loading.value = false
}
}
const handClick = (type) => {
if (type == 1) {
total.value += 1
amout.value = productArr.value.price * total.value
}
if (type == 2) {
if (total.value > 1) {
total.value -= 1
amout.value = productArr.value.price * total.value
} else {
showFailToast('最低买入1份')
}
}
}
fetchData()
</script>
<template>
<AppHeader :title="productArr.productName+'购买'"/>
<div class="container">
<!-- <PayUp ref="payupRef" :payment-info="paymentInfo" @close="handleClose" /> -->
<var-loading description="加载中..." :loading="loading">
<div class="card">
<div class="topbox">
<img :src="pngArr1[productArr.productId - 1]" />
<div class="title">{{ productArr.productName }}</div>
</div>
<div class="titlewarp">
<div class="title1">买入份数</div>
<div class="sub1">确认好份数</div>
</div>
<div class="totalwarp">
<img src="@/static/common/add.png" @click="handClick(1)" />
<input type="number" placeholder="最低买入1份" v-model="total">
<img src="@/static/common/plus.png" @click="handClick(2)" />
</div>
</div>
<div class="card card1">
<div class="titlewarp">
<div class="title1">买入份数</div>
<div class="sub1"></div>
</div>
<div class="totalwarp1">
<span class="icon"></span>
<span class="amout"> {{ amout }}</span>
</div>
</div>
<div class="card card1">
<div class="titlewarp">
<div class="title1">付款方式</div>
</div>
<div class="sub1">
<van-radio-group v-model="checked" inset>
<van-cell clickable @click="checked = '1'">
<template #title>
<div class="item1">
<img src="@/static/common/wx.png" alt="">
<div class="paywarp">
<div class="title">微信支付</div>
<div class="sub">银行单笔限额200000.00元</div>
</div>
</div>
</template>
<template #right-icon>
<van-radio name="1" />
</template>
</van-cell>
<van-cell clickable @click="checked = '2'">
<template #title>
<div class="item1">
<img src="@/static/common/zfb.png" alt="">
<div class="paywarp">
<div class="title">支付宝支付</div>
<div class="sub">银行单笔限额200000.00元</div>
</div>
</div>
</template>
<template #right-icon>
<van-radio name="2" />
</template>
</van-cell>
<van-cell clickable @click="checked = '3'">
<template #title>
<div class="item1">
<img src="@/static/common/yue.png" alt="">
<div class="paywarp">
<div class="title">余额支付</div>
<div class="sub">账户余额200000.00元</div>
</div>
</div>
</template>
<template #right-icon>
<van-radio name="3" />
</template>
</van-cell>
</van-radio-group>
</div>
</div>
<div class="buynow" @click="handleBuy">确定购买</div>
</var-loading>
</div>
</template>
<style lang="scss" scoped>
.container {
padding-bottom: 50px;
background: #f5f7fa;
padding-top: 124px;
font-family: pingfang, sans-serif;
min-height: 100vh;
background: url('@/static/common/commonbg.png') no-repeat;
background-size: 100% 100%;
.card {
margin: 0 20px 20px;
background: #fff;
border-radius: 10px;
padding: 15px 0;
.topbox {
padding-left: 20px;
display: flex;
background: linear-gradient(to right, #fcece1, #fffefd);
img {
width: 35px;
height: 25px;
}
.title {
font-weight: bold;
font-size: 15px;
line-height: 25px;
color: #191919;
margin-left: 17px;
}
}
.titlewarp {
display: flex;
justify-content: space-between;
margin-top: 20px;
padding: 0 25px 0 35px;
align-items: center;
.title1 {
font-weight: bold;
font-size: 16px;
color: #232323;
}
.sub1 {
font-weight: 400;
font-size: 13px;
color: #FF2510;
}
}
.totalwarp {
padding: 0 25px 0 35px;
display: flex;
align-items: center;
img {
width: 13px;
height: 13px;
}
input {
width: 50px;
text-align: center;
}
}
}
.card1 {
.titlewarp {
margin-top: 0;
}
.totalwarp1 {
padding: 0 25px 0 35px;
.icon {
font-weight: bold;
font-size: 22px;
color: #303030;
line-height: 47px;
}
.amout {
margin-left: 4px;
color: red;
font-weight: 700;
font-size: 16px;
}
}
.sub1 {
.item1 {
display: flex;
img {
width: 24px;
height: 21px;
margin-right: 8px;
margin-top: 10px;
}
.title {
font-weight: 500;
font-size: 12px;
color: #0E0E0E;
}
.sub {
font-weight: 400;
font-size: 10px;
color: #999999;
}
}
}
}
.buynow {
width: 291px;
height: 63px;
background: url('@/static/common/btn.png') no-repeat;
background-size: 100% 100%;
font-weight: 500;
margin: 0 auto;
margin-top: 37px;
font-size: 21px;
color: #FFF7E9;
text-align: center;
line-height: 46px;
}
}
</style>
\ No newline at end of file
import 'virtual:uno.css'
import '@/styles/index.scss'
import Varlet from '@varlet/ui'
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).use(Varlet).mount('#app')
\ No newline at end of file
......@@ -13,7 +13,7 @@
<body>
<div id="app"></div>
<script type="module" src="./product/detail/main.ts"></script>
<script type="module" src="./detail/main.ts"></script>
</body>
</html>
\ No newline at end of file
<script setup>
import { ref } from 'vue'
import request from '@/utils/request'
import AppHeader from '@/components/AppHeader.vue'
import card1 from '@/static/pages/product/card1.png'
import card2 from '@/static/pages/product/card2.png'
import card3 from '@/static/pages/product/card3.png'
import card4 from '@/static/pages/product/card4.png'
import { showFailToast } from 'vant'
const pngArr1 = ref([card1, card2, card3, card4])
const id = useRoute().params.id
const id = window.location.search.split('=')[1]
const productArr = ref([])
const loading = ref(true)
const activeCard = ref(null)
......@@ -29,15 +30,14 @@ const fetchData = async () => {
const handleDetail = (item) => {
activeCard.value = item.productId
setTimeout(() => {
navigateTo(`/product/buypro/${item.productId}`)
}, 300)
window.location.href = window.location.origin + `/product/buypro.html?id=${item.productId}`
}
fetchData()
</script>
<template>
<AppHeader :title="productArr.productName+'详情'"/>
<div class="container">
<var-loading description="加载中..." :loading="loading">
<div class="card">
......
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<meta name="description" content="一带一路" />
<meta name="keywords" content="ares-admin,ares-mobile,ares admin,ares mobile,ares,mpa,vue,h5,template">
<meta name="format-detection" content="telephone=no" />
<title>邀请奖励</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="./yaoqing/main.ts"></script>
</body>
</html>
\ No newline at end of file
<template>
<defaultLayout>
<div class="container">
<div class="yq-list">
<div class="yq-item" v-for="item in yqArray" :key="item.number">
<div class="left">
<div class="yq-item-title">
{{ item.name }}
</div>
<div class="yq-item-tips">
{{ item.tips }}
</div>
</div>
<div class="right">
<img v-if="item.number <= userinfo.smCount" src="@/static/invite/yes.png" alt="">
<img v-if="item.number > userinfo.smCount" src="@/static/invite/no.png" alt="">
</div>
</div>
</div>
</div>
</defaultLayout>
</template>
<script setup>
import defaultLayout from '@/layout/default.vue'
import request from '@/utils/request'
const yqArray = ref([
{ number: 10, name: '邀请10人', tips: '额外领取20万储蓄金和100万股权' },
{ number: 20, name: '邀请30人', tips: '额外领取50万储蓄金和300万股权' },
{ number: 50, name: '邀请50人', tips: '额外领取150万储蓄金和500万股权' },
{ number: 100, name: '邀请100人', tips: '额外领取300万储蓄金和1000万股权' },
])
const userinfo = ref({})
const getuserinfo = async () => {
const res = await request.get('/system/user/')
userinfo.value = res
}
getuserinfo()
</script>
<style lang="scss" scoped>
.container {
width: 100%;
min-height: 100vh;
background: url('@/static/invite/bg1.png') no-repeat center center;
background-size: 100% 100%;
.yq-list {
padding-top: 330px;
.yq-item {
display: flex;
width: 100%;
box-sizing: border-box;
justify-content: space-between;
align-items: center;
padding: 10px 20px;
background: #fff;
border-radius: 10px;
background: url('@/static/invite/ibg.png') no-repeat center center;
background-size: 100% 100%;
}
.left {
padding-left: 10px;
padding-bottom: 10px;
.yq-item-title {
font-size: 16px;
font-weight: bold;
color: #df594d;
}
.yq-item-tips {
font-size: 14px;
}
}
.right {
padding-right: 10px;
padding-bottom: 10px;
img {
width: 42px;
height: 42px;
}
}
}
}
</style>
import 'virtual:uno.css'
import '@/styles/index.scss'
import Varlet from '@varlet/ui'
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).use(Varlet).mount('#app')
\ No newline at end of file
......@@ -6,7 +6,6 @@
export {}
declare global {
const EffectScope: typeof import('vue')['EffectScope']
const Varlet: typeof import('@varlet/ui')['let']
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
const computed: typeof import('vue')['computed']
......
......@@ -7,6 +7,7 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
AppHeader: typeof import('./../src/components/AppHeader.vue')['default']
GuideModal: typeof import('./../src/components/GuideModal.vue')['default']
ICarbonWorshipMuslim: typeof import('~icons/carbon/worship-muslim')['default']
ICustomGithub: typeof import('~icons/custom/github')['default']
......@@ -21,10 +22,16 @@ declare module 'vue' {
VanImage: typeof import('vant/es')['Image']
VanList: typeof import('vant/es')['List']
VanPopup: typeof import('vant/es')['Popup']
VanRadio: typeof import('vant/es')['Radio']
VanRadioGroup: typeof import('vant/es')['RadioGroup']
VanTab: typeof import('vant/es')['Tab']
VanTabs: typeof import('vant/es')['Tabs']
VarAppBar: typeof import('@varlet/ui')['AppBar']
VarButton: typeof import('@varlet/ui')['Button']
VarDivider: typeof import('@varlet/ui')['Divider']
VarIcon: typeof import('@varlet/ui')['Icon']
VarLoading: typeof import('@varlet/ui')['Loading']
VarPaper: typeof import('@varlet/ui')['Paper']
XModal: typeof import('./../src/components/x-modal/x-modal.vue')['default']
}
export interface ComponentCustomProperties {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment