Compare commits
No commits in common. "bbdb49a655c7167debee504a5deae4dc07dcd46b" and "b4e8ed0736b3d8cc88b1e63bde29e24abdee8de5" have entirely different histories.
bbdb49a655
...
b4e8ed0736
@ -7,7 +7,7 @@ const form = ref({
|
|||||||
email: "",
|
email: "",
|
||||||
company: "",
|
company: "",
|
||||||
phone: "",
|
phone: "",
|
||||||
alertType: "all"
|
alertType: "all"
|
||||||
});
|
});
|
||||||
const submitted = ref(false);
|
const submitted = ref(false);
|
||||||
|
|
||||||
|
@ -1,75 +1,22 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { NCarousel, NDivider, NMarquee, NPopselect } from "naive-ui";
|
||||||
|
import { onUnmounted, ref, watch, onMounted, computed } from "vue";
|
||||||
|
|
||||||
const form = ref({
|
|
||||||
firstName: '',
|
|
||||||
lastName: '',
|
|
||||||
email: '',
|
|
||||||
company: '',
|
|
||||||
phone: '',
|
|
||||||
alertType: 'all',
|
|
||||||
});
|
|
||||||
const submitted = ref(false);
|
|
||||||
|
|
||||||
function handleSubmit(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
submitted.value = true;
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<main class="min-h-screen flex flex-col items-center justify-center bg-white relative px-4 py-8">
|
<header className="header">
|
||||||
<!-- Card -->
|
375
|
||||||
<div class="w-full max-w-90vw p-4 bg-white/95 rounded-2xl shadow-lg animate-bounce-in">
|
</header>
|
||||||
<template v-if="!submitted">
|
<main ref="main">
|
||||||
<h2 class="text-xl font-bold text-#8A5AFB mb-2 text-center tracking-wide">E-Mail Alerts</h2>
|
|
||||||
<p class="text-xs text-gray-500 mb-4 text-center">* Required Fields</p>
|
|
||||||
<form class="flex flex-col gap-3" @submit="handleSubmit">
|
|
||||||
<div>
|
|
||||||
<label class="block text-gray-700 font-semibold mb-1 text-sm">* First Name</label>
|
|
||||||
<input v-model="form.firstName" type="text" required class="w-full px-3 py-2 rounded-lg border border-gray-300 outline-none bg-white/90 text-sm" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label class="block text-gray-700 font-semibold mb-1 text-sm">* Last Name</label>
|
|
||||||
<input v-model="form.lastName" type="text" required class="w-full px-3 py-2 rounded-lg border border-gray-300 outline-none bg-white/90 text-sm" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label class="block text-gray-700 font-semibold mb-1 text-sm">* Email</label>
|
|
||||||
<input v-model="form.email" type="email" required class="w-full px-3 py-2 rounded-lg border border-gray-300 outline-none bg-white/90 text-sm" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label class="block text-gray-700 font-semibold mb-1 text-sm">* Company</label>
|
|
||||||
<input v-model="form.company" type="text" required class="w-full px-3 py-2 rounded-lg border border-gray-300 outline-none bg-white/90 text-sm" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label class="block text-gray-700 font-semibold mb-1 text-sm">Phone</label>
|
|
||||||
<input v-model="form.phone" type="tel" class="w-full px-3 py-2 rounded-lg border border-gray-300 outline-none bg-white/90 text-sm" />
|
|
||||||
</div>
|
|
||||||
<button type="submit" class="w-full py-3 rounded-xl bg-#8A5AFB text-white font-bold text-base active:scale-95 transition-all duration-200 animate-bounce-in animate-delay-200 mt-2">
|
|
||||||
Submit
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
<div class="flex flex-col items-center justify-center min-h-[200px] animate-bounce-in">
|
|
||||||
<span class="i-mdi:check-circle-outline text-green-500 text-4xl mb-3"></span>
|
|
||||||
<h2 class="text-lg font-bold text-#8A5AFB mb-2">Submitted successfully!</h2>
|
|
||||||
<div class="text-gray-700 text-sm mb-3">The information you submitted is as follows:</div>
|
|
||||||
<div class="w-full bg-white/90 rounded-xl shadow p-3 space-y-1 text-gray-800 text-sm">
|
|
||||||
<div><span class="font-semibold">First Name:</span>{{ form.firstName }}</div>
|
|
||||||
<div><span class="font-semibold">Last Name:</span>{{ form.lastName }}</div>
|
|
||||||
<div><span class="font-semibold">Email:</span>{{ form.email }}</div>
|
|
||||||
<div><span class="font-semibold">Company:</span>{{ form.company }}</div>
|
|
||||||
<div><span class="font-semibold">Phone:</span>{{ form.phone || '(Not filled)' }}</div>
|
|
||||||
<div><span class="font-semibold">Alert Type:</span>{{ form.alertType === 'all' ? 'All Alerts' : 'Customize Alerts' }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
</main>
|
</main>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
</footer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
/* Keep mobile background simple */
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
@ -11,17 +11,19 @@ import customFooter from '@/components/customFooter/index.vue'
|
|||||||
375
|
375
|
||||||
</header> -->
|
</header> -->
|
||||||
<!-- <main ref="main"></main> -->
|
<!-- <main ref="main"></main> -->
|
||||||
<div class="flex flex-col h-screen">
|
|
||||||
<customHeader />
|
<customHeader />
|
||||||
<div class="bg-[url('@/assets/image/bg-mobile.png')] bg-cover bg-center flex-1" style="margin: 80px 0;">
|
<div style="margin: 80px 0; position: relative; min-height: 100vh;">
|
||||||
|
<div class="background-image"></div>
|
||||||
<router-view />
|
<router-view />
|
||||||
</div>
|
</div>
|
||||||
<customFooter />
|
<customFooter />
|
||||||
</div>
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
main {
|
||||||
|
padding: var(--header-height, 80px) 0 0;
|
||||||
|
}
|
||||||
.background-image {
|
.background-image {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
@ -1,54 +1,22 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { useStockQuote } from '@/store/stock-quote/index.js';
|
import { NCarousel, NDivider, NMarquee, NPopselect } from "naive-ui";
|
||||||
const { getStockQuate, stockQuote } = useStockQuote();
|
import { onUnmounted, ref, watch, onMounted, computed } from "vue";
|
||||||
getStockQuate();
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<main class="h-60vh flex flex-col items-center justify-center px-2">
|
<header className="header">
|
||||||
<!-- 价格卡片 -->
|
375
|
||||||
<section class="w-full max-w-90vw flex flex-col items-center justify-center glass-card p-6 rounded-2xl shadow-lg mb-6">
|
</header>
|
||||||
<div class="text-5xl font-extrabold text-#8A5AFB animate-bg-move select-none drop-shadow-lg">$1.98</div>
|
<main ref="main">
|
||||||
<div class="mt-4 text-base text-gray-500 font-semibold tracking-widest">NASDAQ: <span class="text-black">UK</span></div>
|
|
||||||
</section>
|
|
||||||
<!-- 信息卡片列表 -->
|
|
||||||
<section class="w-full max-w-90vw grid grid-cols-2 gap-3">
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="text-xs text-gray-400">Open</div>
|
|
||||||
<div class="text-xl font-bold">{{ stockQuote.Open }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="text-xs text-gray-400">Change</div>
|
|
||||||
<div class="text-xl font-bold text-red-500">{{ stockQuote.change?.join('') }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="text-xs text-gray-400">Day's Range</div>
|
|
||||||
<div class="text-xl font-bold">{{ stockQuote.DaysRange }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="text-xs text-gray-400">52-Week Range</div>
|
|
||||||
<div class="text-xl font-bold">{{ stockQuote.Week52Range }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="text-xs text-gray-400">Volume</div>
|
|
||||||
<div class="text-xl font-bold">{{ stockQuote.Volume }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="text-xs text-gray-400">Market Cap</div>
|
|
||||||
<div class="text-xl font-bold">{{ stockQuote.MarketCap }}</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</main>
|
</main>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
</footer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped lang="scss">
|
||||||
.glass-card {
|
|
||||||
backdrop-filter: blur(12px);
|
|
||||||
background: rgba(255,255,255,0.7);
|
|
||||||
border: 1px solid rgba(255,255,255,0.3);
|
|
||||||
box-shadow: 0 4px 16px 0 rgba(31,38,135,0.10);
|
|
||||||
}
|
|
||||||
.info-card {
|
|
||||||
@apply glass-card p-3 rounded-lg flex flex-col items-start gap-1;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user