vue3实现英皇乐理音乐考试系统原型图ui代码

代码语言:html

所属分类:布局界面

代码描述:vue3实现英皇乐理音乐考试系统原型图ui代码

代码标签: vue 英皇 乐理 音乐 考试 系统 原型图 ui 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>英皇乐理在线考试系统 - 专业版</title>
    <!-- 使用 Tailwind CSS 和 Vue.js -->
    <script type="text/javascript" src="https://cdn.tailwindcss.com"></script>
    <script type="text/javascript" src="https://unpkg.com/vue@3.2.36/dist/vue.global.prod.js"></script>
    <!-- 引入 ECharts -->
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>
    <style>
        /* 防止 Vue 初始化时页面闪烁 */
        [v-cloak] { display: none; }
        
        /* 页面切换动画 */
        .fade-enter-active, .fade-leave-active {
            transition: opacity 0.3s ease;
        }
        .fade-enter-from, .fade-leave-to {
            opacity: 0;
        }
    </style>
</head>
<body class="bg-slate-50 font-sans antialiased">

    <div id="app" v-cloak>
        <!-- 导航栏 -->
        <nav class="bg-white/80 backdrop-blur-md shadow-sm sticky top-0 z-40">
            <div class="max-w-screen-xl mx-auto px-4 sm:px-6 lg:px-8">
                <div class="flex justify-between items-center h-16">
                    <!-- Logo 和标题 -->
                    <div class="flex items-center space-x-3 cursor-pointer" @click="navigateTo('home')">
                        <div class="flex-shrink-0">
                            <svg class="h-8 w-8 text-indigo-600" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
                                <path d="M12 3.25C12 3.25 6.66667 2.25 5.5 5.75C4.33333 9.25 8.5 11.25 8.5 11.25V18.5C8.5 20.7091 10.2909 22.5 12.5 22.5C14.7091 22.5 16.5 20.7091 16.5 18.5V6.75C17.6667 3.25 22 2.25 22 2.25C22 2.25 17.3333 3.25 16.5 6.75" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
                                <circle cx="6.5" cy="18.5" r="2" stroke="currentColor" stroke-width="1.5"/>
                            </svg>
                        </div>
                        <h1 class="text-xl font-bold text-slate-800 hidden sm:block">英皇乐理考试系统</h1>
                    </div>
                    
                    <!-- 用户菜单 (登录后) -->
                    <div class="flex items-center space-x-5" v-if="currentUser">
                        <button @click="navigateTo('dashboard')" class="text-slate-500 hover:text-indigo-600 transition-colors" title="仪表板">
                            <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17v-2a4 4 0 00-4-4H3V9h2a4 4 0 004-4V3l7 4-7 4v2a4 4 0 004 4h2v2H9z"/></svg>
                        </button>
                        <button @click="navigateTo('wrongQuestions')" class="text-slate-500 hover:text-red-600 transition-colors" title="错题本">
                            <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg>
                        </button>
                        <div class="relative">
                            <button @click="showUserMenu = !showUserMenu" class="flex items-center space-x-2 text-slate-600 hover:text-indigo-600 transition-colors">
                                <!-- 图片已更换为 picsum.photos -->
                                <img :src="`https://picsum.photos/seed/${currentUser.id}/32/32`" class="h-8 w-8 rounded-full ring-2 ring-offset-2 ring-indigo-200">
                                <span class="hidden md:inline">{{ currentUser.username }}</span>
                            </button>
                            <transition name="fade">
                                <div v-if="showUserMenu" @click.away="showUserMenu = false" class="absolute right-0 mt-2 w-48 bg-white rounded-md shadow-lg py-1 z-50 ring-1 ring-slate-900/5">
                                    <a @click="logout" class="block px-4 py-2 text-sm text-slate-700 hover:bg-slate-100 hover:text-indigo-600 cursor-pointer">退出登录</a>
                                </div>
                            </transition>
                        </div>
                    </div>
                    
                    <!-- 登录/注册按钮 (未登录) -->
                    <div class="flex space-x-2" v-else>
                        <button @click="navigateTo('login')" class="px-4 py-2 text-sm font-semibold text-indigo-600 bg-indigo-100 rounded-md hover:bg-indigo-200 transition-colors">登录</button>
                        <button @click="navigateTo('register')" class="px-4 py-2 text-sm font-semibold text-white bg-indigo-600 rounded-md hover:bg-indigo-700 transition-colors">立即注册</button>
                    </div>
                </div>
            </div>
        </nav>

        <!-- 主要内容区域 -->
        <main class="max-w-screen-xl mx-auto py-8 sm:py-12 px-4 sm:px-6 lg:px-8">
            <transition name="fade" mode="out-in">
                <!-- 首页 -->
                <div v-if="currentPage === 'home'" key="home">
                    <div class="relative text-center mb-16 py-20 px-6 rounded-2xl overflow-hidden bg-slate-800">
                        <div class="absolute inset-0 bg-gradient-to-br from-indigo-500/30 via-slate-800 to-slate-800"></div>
                         <div class="absolute -top-1/2 -left-1/2 w-96 h-96 bg-indigo-500/20 rounded-full filter blur-3xl animate-pulse"></div>
                        <div class="absolute -bottom-1/2 -right-1/2 w-96 h-96 bg-emerald-500/20 rounded-full filter blur-3xl animate-pulse animation-delay-4000"></div>
                        <div class="relative z-10">
                            <h2 class="text-4xl md:text-5xl font-extrabold text-white mb-4 tracking-tight">开启您的英皇乐理通关之旅</h2>
                            <p class="text-xl text-slate-300 mb-8 max-w-3xl mx-auto">系统化题库、智能化分析、全真模拟,助您自信应对每一场考试。</p>
                            <!-- 图片已更换为 picsum.photos,并选择了一个固定的主题图片 -->
                            <img src="https://picsum.photos/id/119/1200/500" class="mx-auto rounded-lg shadow-2xl mb-8 w-full max-w-4xl object-cover h-64 md:h-96">
                        </div>
                    </div>
                    
                    <div class="grid grid-cols-1 md:grid-cols-3 gap-8">
                        <div class="bg-white p-8 rounded-xl shadow-lg hover:shadow-2xl transition-shadow text-center transform hover:-translate-y-2">
                            <div class="bg-indigo-100 text-indigo-600 rounded-full h-16 w-16 flex items-center justify-center mx-auto mb-6">
                                <svg class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.746 0 3.332.477 4.5 1.253v13C19.832 18.477 18.246 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/></svg>
                            </div>
                            <h3 class="text-xl font-semibold text-slate-800 mb-2">海量专业题库</h3>
                            <p class="text-slate-500">全面覆盖1-8级乐理考纲,由专业音乐教师团队精心编撰。</p>
                        </div>
                        
                        <div class="bg-white p-8 rounded-xl shadow-lg hover:shadow-2xl transition-shadow text-center transform hover:-translate-y-2">
                             <div class="bg-emerald-100 text-emerald-600 rounded-full h-16 w-16 flex items-center justify-center mx-auto mb-6">
                                <svg class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/></svg>
                            </div>
                            <h3 class="text-xl font-semibold text-slate-800 mb-2">智能学习分析</h3>
                            <p class="text-slate-500">精准记录答题数据,生成可视化学习报告,定位知识薄弱点。</p>
                        </div>
                        
                        <div class="bg-white p-8 rounded-xl shadow-lg hover:shadow-2xl transition-shadow text-center transform hover:-translate-y-2">
                             <div class="bg-sky-100 text-sky-600 rounded-full h-16 w-16 flex items-center justify-center mx-auto mb-6">
                                <svg class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/></svg>
                            </div>
                            <h3 class="text-xl font-semibold text-slate-800 mb-2">全真模拟考试</h3>
                            <p class="text-slate-500">还原真实考试界面与流程,限时答题,帮您提前适应考场压力。</p>
                        </div>
                    </div>
                    
                    <div class="text-center mt-16" v-if="!currentUser">
                        <button @click="navigateTo('register')" class="bg-indigo-600 text-white px-10 py-4 rounded-lg text-lg font-semibold hover:bg-indigo-700 transform hover:scale-105 transition-all">开启免费学习之旅</button>
                    </div>
                </div>

                <!-- 登录页面 -->
                <div v-else-if="currentPage === 'login'" key="login" class="max-w-md mx-auto">
                    <div class="bg-white p-8 rounded-xl shadow-lg">
                        <h2 class="text-2xl font-bold text-center text-slate-800 mb-8">欢迎回来</h2>
                        <form @submit.prevent="login">
                            <div class="mb-4">
                                <label class="block text-slate-700 text-sm font-bold mb-2">用户名</label>
                                <input v-model="loginForm.username" type="text" required class="w-full px-4 py-3 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 transition">
                            </div>
                            <div class="mb-6">
                                <label c.........完整代码请登录后点击上方下载按钮下载查看

网友评论0