本代码用于创建一个基于 Vue.js 的个人资料卡片,可用于个人网站或其他需要显示个人信息和设置的应用程序中。
该卡片包含以下功能:
<template>
<div class="bg-gray-100">
<!-- 用户信息 -->
<div class="container mx-auto px-4">
<div class="flex items-center justify-between py-4 border-b border-gray-200">
<div class="flex items-center">
<img
class="w-10 h-10 rounded-full"
src="https://source.unsplash.com/random/40x40"
alt="User avatar"
/>
<div class="ml-4">
<h1 class="text-xl font-semibold">{{ user.name }}</h1>
<p class="text-sm text-gray-500">{{ user.email }}</p>
</div>
</div>
<div>
<button class="bg-blue-500 hover:bg-blue-700 text-white font-semibold py-2 px-4 rounded">
Logout
</button>
</div>
</div>
<!-- 个人资料内容 -->
<div class="grid grid-cols-12 gap-6 mt-8">
<div class="col-span-8">
<!-- 最新动态 -->
<div class="bg-white shadow-md rounded-lg p-4">
<div class="flex items-center justify-between mb-4">
<h2 class="text-xl font-semibold">What's New</h2>
<a href="#" class="text-sm text-blue-500">View All</a>
</div>
<div class="space-y-4">
<!-- 动态列表 -->
<div class="flex items-center" v-for="post in 3" :key="post">
<img
class="w-16 h-16 rounded-full"
src="https://source.unsplash.com/random/32x32"
alt="User avatar"
/>
<div class="ml-4">
<h3 class="text-base font-semibold">Lorem ipsum dolor sit amet</h3>
<p class="text-sm text-gray-500">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin eget
tortor risus. Cras ullamcorper massa sit amet lacus egestas, ac
ultrices nisi tincidunt.
</p>
</div>
</div>
</div>
</div>
<!-- 最新新闻 -->
<div class="bg-white shadow-md rounded-lg p-4 mt-8">
<div class="flex items-center justify-between mb-4">
<h2 class="text-xl font-semibold">Latest News</h2>
<a href="#" class="text-sm text-blue-500">View All</a>
</div>
<div class="space-y-4">
<!-- 新闻列表 -->
<div class="flex items-center" v-for="post in 3" :key="post">
<img
class="w-16 h-16 rounded-full"
src="https://source.unsplash.com/random/32x32"
alt="User avatar"
/>
<div class="ml-4">
<h3 class="text-base font-semibold">Lorem ipsum dolor sit amet</h3>
<p class="text-sm text-gray-500">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin eget
tortor risus. Cras ullamcorper massa sit amet lacus egestas, ac
ultrices nisi tincidunt.
</p>
</div>
</div>
</div>
</div>
</div>
<!-- 个人信息 -->
<div class="col-span-4">
<div class="bg-white shadow-md rounded-lg p-4">
<h2 class="text-xl font-semibold mb-4">Your Profile</h2>
<div class="flex items-center">
<img
class="w-24 h-24 rounded-full"
src="https://source.unsplash.com/random/48x48"
alt="User avatar"
/>
<div class="ml-4">
<h3 class="text-base font-semibold">{{ user.name }}</h3>
<p class="text-sm text-gray-500">{{ user.email }}</p>
</div>
</div>
<div class="mt-4">
<!-- 个人信息列表 -->
<ul class="space-y-2">
<li>
<span class="font-semibold">Email:</span>
<span>{{ user.email }}</span>
</li>
<li>
<span class="font-semibold">Phone:</span>
<span>{{ user.phone }}</span>
</li>
<li>
<span class="font-semibold">Address:</span>
<span>{{ user.address }}</span>
</li>
</ul>
</div>
</div>
<!-- 设置 -->
<div class="bg-white shadow-md rounded-lg p-4 mt-8">
<h2 class="text-xl font-semibold mb-4">Settings</h2>
<ul class="space-y-2">
<!-- 设置列表 -->
<li>
<a href="#" class="text-base font-semibold">Account</a>
</li>
<li>
<a href="#" class="text-base font-semibold">Notifications</a>
</li>
<li>
<a href="#" class="text-base font-semibold">Privacy</a>
</li>
<li>
<a href="#" class="text-base font-semibold">Help</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</template>
该 HTML 结构定义了卡片的布局和内容,包括用户详细信息、个人资料内容(最新动态和最新新闻)以及个人信息和设置。
<script lang="tsx" setup>
import { ref } from "vue";
const user = ref({
name: "John Doe",
email: "john.doe@example.com",
phone: "0123456789",
address: "123 Main Street, Anytown, CA 12345",
});
</script>
该脚本使用 Vue.js 的 ref()
API 创建了一个响应式的 user
对象,用于存储和管理用户数据。
.container {
max-width: 1200px;
margin: 0 auto;
}
.bg-white {
background-color: #fff;
}
.shadow-md {
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
}
.rounded-lg {
border-radius: 0.5rem;
}
.p-4 {
padding: 1rem;
}
.flex {
display: flex;
}
.items-center {
align-items: center;
}
.justify-between {
justify-content: space-between;
}
.mb-4 {
margin-bottom: 1rem;
}
.text-xl {
font-size: 1.25rem;
}
.font-semibold {
font-weight: 600;
}
.text-sm {
font-size: 0.875rem;
}
.text-gray-500 {
color: #6b7280;
}
.space-y-4 {
margin-top: 1rem;
margin-bottom: 1rem;
}
.h