feat: 完善

This commit is contained in:
阿梦 2026-04-06 12:33:03 +08:00
parent 932b0ff857
commit 1cfbc4f60b
17 changed files with 118 additions and 58 deletions

View File

@ -4,12 +4,12 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="新学小乐 - AI驱动的智慧教育生态平台游戏化激发学习兴趣AI智能批改提升教学效率" />
<meta name="keywords" content="新学小乐,AI教育,智慧学习,游戏化学习,AI批改,智能教育" />
<meta name="description" content="灵犀学 - AI驱动的智慧教育生态平台游戏化激发学习兴趣AI智能批改提升教学效率" />
<meta name="keywords" content="灵犀学,AI教育,智慧学习,游戏化学习,AI批改,智能教育" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet" />
<title>新学小乐 - AI驱动的智慧教育生态平台</title>
<title>灵犀学 - AI驱动的智慧教育生态平台</title>
</head>
<body class="antialiased">
<div id="app"></div>

BIN
src/assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
src/assets/xuesheng.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@ -57,7 +57,7 @@ const flow = [
:class="isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'"
:style="{ transitionDelay: isVisible ? '300ms' : '0ms' }"
>
<div class="w-72 sm:w-80 lg:w-96">
<div class="w-80 sm:w-96 lg:w-[480px]">
<AiBrainIllustration />
</div>
</div>
@ -78,7 +78,7 @@ const flow = [
</span>
</h2>
<p class="text-lg text-indigo-200/70 mt-5 leading-relaxed">
融合自然语言处理知识图谱自适应算法新学小乐为每一位师生提供个性化的智能教育体验
融合自然语言处理知识图谱自适应算法灵犀学为每一位师生提供个性化的智能教育体验
</p>
</div>
</div>

View File

@ -1,8 +1,10 @@
<script setup lang="ts">
import { ArrowRight, Sparkles, BookOpen, GraduationCap, Lightbulb, Star } from 'lucide-vue-next'
import { ref } from 'vue'
import { ArrowRight, Sparkles, BookOpen, GraduationCap, Lightbulb, Star, X, Phone } from 'lucide-vue-next'
import { useScrollReveal } from '@/composables/useScrollReveal'
const { target, isVisible } = useScrollReveal()
const showDemoModal = ref(false)
</script>
<template>
@ -60,29 +62,68 @@ const { target, isVisible } = useScrollReveal()
</h2>
<p class="text-lg text-text-muted mt-5 leading-relaxed max-w-2xl mx-auto">
无论您是想让学生爱上学习的教师还是希望孩子高效进步的家长新学小乐都能为您提供最佳方案
无论您是想让学生爱上学习的教师还是希望孩子高效进步的家长灵犀学都能为您提供最佳方案
</p>
<div class="flex flex-col sm:flex-row items-center justify-center gap-4 mt-10">
<a
href="#"
href="https://ai.xuexiaole.com/"
target="_blank"
rel="noopener noreferrer"
class="w-full sm:w-auto inline-flex items-center justify-center gap-2.5 px-8 py-4 text-base font-semibold text-white bg-gradient-to-r from-primary to-primary-light rounded-2xl hover:shadow-xl hover:shadow-primary/25 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer group"
>
<span>立即免费体验</span>
<ArrowRight class="w-5 h-5 group-hover:translate-x-0.5 transition-transform duration-200" />
</a>
<a
href="#"
<button
@click="showDemoModal = true"
class="w-full sm:w-auto inline-flex items-center justify-center gap-2.5 px-8 py-4 text-base font-semibold text-primary bg-white border-2 border-primary/20 rounded-2xl hover:border-primary/40 hover:bg-primary/5 transition-all duration-300 cursor-pointer"
>
预约产品演示
</a>
</button>
</div>
<p class="text-sm text-text-muted mt-6">
无需信用卡 · 即刻开始 · 专属客服支持
</p>
</div>
<!-- Demo modal -->
<Teleport to="body">
<Transition
enter-active-class="transition-all duration-300 ease-out"
enter-from-class="opacity-0"
enter-to-class="opacity-100"
leave-active-class="transition-all duration-200 ease-in"
leave-from-class="opacity-100"
leave-to-class="opacity-0"
>
<div v-if="showDemoModal" class="fixed inset-0 z-[100] flex items-center justify-center p-4" @click.self="showDemoModal = false">
<div class="absolute inset-0 bg-black/50 backdrop-blur-sm" />
<div class="relative bg-white rounded-3xl shadow-2xl max-w-sm w-full p-8 text-center">
<button
@click="showDemoModal = false"
class="absolute top-4 right-4 w-8 h-8 rounded-full bg-gray-100 hover:bg-gray-200 flex items-center justify-center transition-colors duration-200 cursor-pointer"
>
<X class="w-4 h-4 text-gray-500" />
</button>
<div class="w-16 h-16 rounded-2xl bg-primary/10 flex items-center justify-center mx-auto mb-5">
<Phone class="w-8 h-8 text-primary" />
</div>
<h3 class="text-xl font-bold text-text-heading mb-2">预约产品演示</h3>
<p class="text-sm text-text-muted mb-6">请拨打以下电话联系我们专属顾问将为您安排演示</p>
<a
href="tel:17670000000"
class="inline-flex items-center gap-2.5 px-6 py-3.5 text-lg font-bold text-primary bg-primary/8 rounded-2xl hover:bg-primary/12 transition-colors duration-200"
>
<Phone class="w-5 h-5" />
176 7000 0000
</a>
<p class="text-xs text-text-muted mt-4">工作时间周一至周五 9:00 - 18:00</p>
</div>
</div>
</Transition>
</Teleport>
</section>
</template>

View File

@ -80,7 +80,7 @@ const colorMap: Record<string, { bg: string; iconBg: string; text: string; borde
一个平台<span class="gradient-text">覆盖教与学全场景</span>
</h2>
<p class="text-lg text-text-muted mt-5 leading-relaxed">
从课前预习到课后巩固从作业布置到智能批改新学小乐为教育的每个环节注入智慧力量
从课前预习到课后巩固从作业布置到智能批改灵犀学为教育的每个环节注入智慧力量
</p>
</div>

View File

@ -1,5 +1,5 @@
<script setup lang="ts">
import { GraduationCap } from 'lucide-vue-next'
import logoImg from '@/assets/logo.png'
const currentYear = new Date().getFullYear()
@ -39,11 +39,8 @@ const footerLinks = [
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-16 pb-8">
<div class="grid grid-cols-2 lg:grid-cols-5 gap-8 lg:gap-12">
<div class="col-span-2">
<div class="flex items-center gap-2.5 mb-4">
<div class="w-9 h-9 rounded-xl bg-gradient-to-br from-primary to-primary-light flex items-center justify-center">
<GraduationCap class="w-5 h-5 text-white" :stroke-width="2.2" />
</div>
<span class="text-lg font-bold">新学小乐</span>
<div class="flex items-center mb-4">
<img :src="logoImg" alt="灵犀学" class="h-9 w-auto brightness-0 invert" />
</div>
<p class="text-sm text-indigo-200/50 leading-relaxed max-w-xs mb-6">
AI 驱动的智慧教育生态平台让学习更聪明让教学更轻松
@ -76,7 +73,7 @@ const footerLinks = [
</div>
<div class="mt-12 pt-8 border-t border-white/8 flex flex-col sm:flex-row items-center justify-between gap-4">
<p class="text-xs text-indigo-200/40">&copy; {{ currentYear }} 新学小乐. All rights reserved.</p>
<p class="text-xs text-indigo-200/40">&copy; {{ currentYear }} 灵犀学. All rights reserved.</p>
<div class="flex items-center gap-6">
<a href="#" class="text-xs text-indigo-200/40 hover:text-indigo-200/70 transition-colors duration-200 cursor-pointer">隐私政策</a>
<a href="#" class="text-xs text-indigo-200/40 hover:text-indigo-200/70 transition-colors duration-200 cursor-pointer">服务条款</a>

View File

@ -13,9 +13,9 @@ import HeroIllustration from '@/components/illustrations/HeroIllustration.vue'
<!-- Decorative grid pattern -->
<div class="absolute inset-0 opacity-[0.03]" style="background-image: radial-gradient(circle, #4F46E5 1px, transparent 1px); background-size: 40px 40px;" />
<div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-24 pb-16 lg:pt-32 lg:pb-24">
<div class="grid lg:grid-cols-2 gap-12 lg:gap-8 items-center">
<div class="space-y-8">
<div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-28 pb-20 lg:pt-40 lg:pb-32">
<div class="grid lg:grid-cols-2 gap-16 lg:gap-12 items-center">
<div class="space-y-10">
<div class="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-primary/8 border border-primary/15">
<Sparkles class="w-4 h-4 text-primary" />
<span class="text-sm font-medium text-primary">AI 驱动的智慧教育生态</span>
@ -32,17 +32,21 @@ import HeroIllustration from '@/components/illustrations/HeroIllustration.vue'
<span class="text-text-body font-medium">一个平台连接教与学的每一个环节</span>
</p>
<div class="flex flex-wrap gap-4">
<div class="flex flex-wrap gap-5">
<a
href="#student"
class="inline-flex items-center gap-2.5 px-7 py-3.5 text-base font-semibold text-white bg-gradient-to-r from-primary to-primary-light rounded-2xl hover:shadow-xl hover:shadow-primary/25 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer group"
href="https://ai.xuexiaole.com/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2.5 px-8 py-4 text-base font-semibold text-white bg-gradient-to-r from-primary to-primary-light rounded-2xl hover:shadow-xl hover:shadow-primary/25 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer group"
>
<span>学生入口</span>
<ArrowRight class="w-4.5 h-4.5 group-hover:translate-x-0.5 transition-transform duration-200" />
</a>
<a
href="#teacher"
class="inline-flex items-center gap-2.5 px-7 py-3.5 text-base font-semibold text-primary bg-white border-2 border-primary/20 rounded-2xl hover:border-primary/40 hover:bg-primary/5 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer group"
href="https://admin.xuexiaole.com/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2.5 px-8 py-4 text-base font-semibold text-primary bg-white border-2 border-primary/20 rounded-2xl hover:border-primary/40 hover:bg-primary/5 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer group"
>
<Play class="w-4.5 h-4.5" />
<span>教师入口</span>

View File

@ -1,6 +1,7 @@
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue'
import { GraduationCap, Menu, X } from 'lucide-vue-next'
import { Menu, X } from 'lucide-vue-next'
import logoImg from '@/assets/logo.png'
const scrolled = ref(false)
const mobileOpen = ref(false)
@ -36,11 +37,8 @@ onUnmounted(() => window.removeEventListener('scroll', onScroll))
>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex items-center justify-between h-16 lg:h-18">
<a href="#" class="flex items-center gap-2.5 cursor-pointer group" @click.prevent="scrollTo('#hero')">
<div class="w-9 h-9 rounded-xl bg-gradient-to-br from-primary to-primary-light flex items-center justify-center shadow-md shadow-primary/30 group-hover:shadow-lg group-hover:shadow-primary/40 transition-shadow duration-300">
<GraduationCap class="w-5 h-5 text-white" :stroke-width="2.2" />
</div>
<span class="text-lg font-bold text-text-heading tracking-tight">新学小乐</span>
<a href="#" class="flex items-center cursor-pointer group" @click.prevent="scrollTo('#hero')">
<img :src="logoImg" alt="灵犀学" class="h-9 w-auto" />
</a>
<div class="hidden lg:flex items-center gap-1">

View File

@ -5,7 +5,7 @@ import { useScrollReveal } from '@/composables/useScrollReveal'
const { target, isVisible } = useScrollReveal()
const stats = [
{ value: 10000, suffix: '+', label: '活跃师生', desc: '每天在新学小乐上学习' },
{ value: 10000, suffix: '+', label: '活跃师生', desc: '每天在灵犀学上学习' },
{ value: 200, suffix: '+', label: '合作学校', desc: '覆盖全国多个省市' },
{ value: 500, suffix: '万+', label: '题目批改', desc: 'AI 累计批改题目数' },
{ value: 96.8, suffix: '%', label: '批改准确率', desc: '媲美资深教师水平' },

View File

@ -4,7 +4,7 @@ import {
MessageCircle, Target, Smile, ShieldCheck,
} from 'lucide-vue-next'
import { useScrollReveal } from '@/composables/useScrollReveal'
import PhoneMockup from '@/components/illustrations/PhoneMockup.vue'
import tabletImg from '@/assets/xuesheng.png'
const { target, isVisible } = useScrollReveal()
@ -75,15 +75,19 @@ const features = [
<span class="gradient-text">知识闯关不停歇</span>
</h2>
<p class="text-lg text-text-muted mt-5 leading-relaxed">
告别枯燥背诵新学小乐用游戏化机制点燃学习热情排行榜成就徽章虚拟货币奖励让孩子主动抢着学
告别枯燥背诵灵犀学用游戏化机制点燃学习热情排行榜成就徽章虚拟货币奖励让孩子主动抢着学
</p>
<!-- Phone mockup -->
<!-- Tablet mockup -->
<div class="mt-10 flex justify-center">
<div class="relative w-56 sm:w-64">
<PhoneMockup />
<!-- Floating card on phone -->
<div class="absolute -right-8 top-20 glass-card rounded-xl px-3 py-2 shadow-lg animate-float-slow hidden sm:block">
<div class="relative w-full max-w-md">
<div class="rounded-2xl bg-gradient-to-br from-[#1E1B4B] to-[#312E81] p-2.5 shadow-2xl">
<div class="rounded-xl overflow-hidden bg-[#0F0D2E] aspect-[16/10]">
<img :src="tabletImg" alt="灵犀学学生端界面" class="w-full h-full object-cover" />
</div>
</div>
<!-- Floating card on tablet -->
<div class="absolute -right-6 top-6 glass-card rounded-xl px-3 py-2 shadow-lg animate-float-slow hidden sm:block">
<div class="flex items-center gap-1.5">
<svg class="w-4 h-4 text-amber-500" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
<span class="text-xs font-bold text-amber-600">+100 乐贝</span>
@ -98,7 +102,7 @@ const features = [
<div
v-for="(feat, i) in features"
:key="feat.title"
class="group relative p-5 rounded-2xl bg-white border border-gray-100 hover:border-primary/20 hover:shadow-lg hover:shadow-primary/5 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer overflow-hidden"
class="group relative p-5 rounded-2xl bg-white border border-gray-100 hover:border-primary/20 hover:shadow-lg hover:shadow-primary/5 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer"
:class="isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-6'"
:style="{ transitionDelay: isVisible ? `${200 + i * 80}ms` : '0ms', transitionDuration: '600ms' }"
>
@ -107,7 +111,7 @@ const features = [
<span
v-if="feat.tag"
class="absolute -top-2.5 right-4 text-xs font-semibold px-2.5 py-0.5 rounded-full bg-gradient-to-r from-primary to-primary-light text-white shadow-sm"
class="absolute -top-3 right-4 text-xs font-semibold px-2.5 py-0.5 rounded-full bg-gradient-to-r from-primary to-primary-light text-white shadow-sm z-10"
>
{{ feat.tag }}
</span>

View File

@ -123,7 +123,7 @@ const features = [
<div
v-for="(feat, i) in features"
:key="feat.title"
class="group relative p-5 rounded-2xl bg-white/90 backdrop-blur-sm border border-gray-100 hover:border-accent/20 hover:shadow-lg hover:shadow-accent/5 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer overflow-hidden"
class="group relative p-5 rounded-2xl bg-white/90 backdrop-blur-sm border border-gray-100 hover:border-accent/20 hover:shadow-lg hover:shadow-accent/5 hover:-translate-y-0.5 transition-all duration-300 cursor-pointer"
:class="isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-6'"
:style="{ transitionDelay: isVisible ? `${400 + i * 80}ms` : '0ms', transitionDuration: '600ms' }"
>
@ -131,7 +131,7 @@ const features = [
<span
v-if="feat.tag"
class="absolute -top-2.5 right-4 text-xs font-semibold px-2.5 py-0.5 rounded-full bg-gradient-to-r from-accent to-accent-light text-white shadow-sm"
class="absolute -top-3 right-4 text-xs font-semibold px-2.5 py-0.5 rounded-full bg-gradient-to-r from-accent to-accent-light text-white shadow-sm z-10"
>
{{ feat.tag }}
</span>

View File

@ -23,7 +23,7 @@ const testimonials = [
{
name: '张校长',
role: '实验小学校长 · 成都',
content: '引入新学小乐半年后,全校学生的英语平均分提高了 12 分,教师的作业批改效率提升了 70%。数据看板让教学管理变得透明高效。',
content: '引入灵犀学半年后,全校学生的英语平均分提高了 12 分,教师的作业批改效率提升了 70%。数据看板让教学管理变得透明高效。',
rating: 5,
initials: '张',
},
@ -55,7 +55,7 @@ function prev() {
>
<p class="text-sm font-semibold text-primary tracking-wider uppercase mb-3">用户心声</p>
<h2 class="text-3xl sm:text-4xl lg:text-5xl font-extrabold text-text-heading leading-tight">
他们都在用<span class="gradient-text">新学小乐</span>
他们都在用<span class="gradient-text">灵犀学</span>
</h2>
</div>

View File

@ -49,7 +49,7 @@
<!-- Layer 1 nodes -->
<circle cx="200" cy="80" r="12" fill="url(#brain-grad1)" class="animate-node1" />
<text x="200" y="84" text-anchor="middle" font-size="10" font-weight="bold" fill="white">NLP</text>
<text x="200" y="86" text-anchor="middle" font-size="14" font-weight="bold" fill="white">NLP</text>
<circle cx="120" cy="140" r="10" fill="url(#brain-grad2)" class="animate-node2" />
<circle cx="280" cy="140" r="10" fill="url(#brain-grad2)" class="animate-node3" />
@ -81,20 +81,20 @@
<!-- Labels -->
<g class="animate-label1">
<rect x="40" y="122" width="54" height="18" rx="9" fill="white" opacity="0.1" />
<text x="67" y="135" text-anchor="middle" font-size="7" font-weight="600" fill="#4ADE80">语义分析</text>
<rect x="28" y="118" width="72" height="24" rx="12" fill="white" opacity="0.1" />
<text x="64" y="135" text-anchor="middle" font-size="11" font-weight="600" fill="#4ADE80">语义分析</text>
</g>
<g class="animate-label2">
<rect x="296" y="122" width="64" height="18" rx="9" fill="white" opacity="0.1" />
<text x="328" y="135" text-anchor="middle" font-size="7" font-weight="600" fill="#4ADE80">知识图谱</text>
<rect x="288" y="118" width="80" height="24" rx="12" fill="white" opacity="0.1" />
<text x="328" y="135" text-anchor="middle" font-size="11" font-weight="600" fill="#4ADE80">知识图谱</text>
</g>
<g class="animate-label3">
<rect x="56" y="290" width="54" height="18" rx="9" fill="white" opacity="0.1" />
<text x="83" y="303" text-anchor="middle" font-size="7" font-weight="600" fill="#4ADE80">评分</text>
<rect x="44" y="286" width="72" height="24" rx="12" fill="white" opacity="0.1" />
<text x="80" y="303" text-anchor="middle" font-size="11" font-weight="600" fill="#4ADE80">评分</text>
</g>
<g class="animate-label4">
<rect x="280" y="290" width="64" height="18" rx="9" fill="white" opacity="0.1" />
<text x="312" y="303" text-anchor="middle" font-size="7" font-weight="600" fill="#4ADE80">自适应</text>
<rect x="272" y="286" width="80" height="24" rx="12" fill="white" opacity="0.1" />
<text x="312" y="303" text-anchor="middle" font-size="11" font-weight="600" fill="#4ADE80">自适应</text>
</g>
<!-- Floating data particles -->

View File

@ -42,7 +42,7 @@
<!-- Logo in sidebar -->
<circle cx="95" cy="48" r="14" fill="#4F46E5" />
<text x="95" y="53" text-anchor="middle" font-size="12" font-weight="bold" fill="white"></text>
<text x="120" y="48" font-size="8" font-weight="bold" fill="#1E1B4B">新学小乐</text>
<text x="120" y="48" font-size="8" font-weight="bold" fill="#1E1B4B">灵犀学</text>
<text x="120" y="58" font-size="6" fill="#64748B">教师管理后台</text>
<!-- Sidebar menu items -->

View File

@ -52,7 +52,7 @@
<rect x="16" y="78" width="248" height="50" fill="white" />
<circle cx="40" cy="103" r="14" fill="#4F46E5" />
<text x="40" y="108" text-anchor="middle" font-size="12" font-weight="bold" fill="white"></text>
<text x="62" y="100" font-size="13" font-weight="bold" fill="#1E1B4B">新学小乐</text>
<text x="62" y="100" font-size="13" font-weight="bold" fill="#1E1B4B">灵犀学</text>
<text x="62" y="114" font-size="9" fill="#64748B">今天也要加油哦 </text>
<!-- Coins display -->

16
src/env.d.ts vendored Normal file
View File

@ -0,0 +1,16 @@
/// <reference types="vite/client" />
declare module '*.png' {
const src: string
export default src
}
declare module '*.jpg' {
const src: string
export default src
}
declare module '*.svg' {
const src: string
export default src
}