新增订单页面、用户管理、系统设置

This commit is contained in:
2025-04-25 11:11:43 +08:00
parent 5b0541520d
commit 02a9c72c06
7 changed files with 3381 additions and 147 deletions

View File

@@ -15,7 +15,7 @@ const userData = ref({
lastLogin: '2023-06-20',
email: 'user@example.com',
phone: '138****1234',
role: '企业客户',
role: '超级管理员',
projects: 5,
favorites: 12
})
@@ -141,179 +141,180 @@ const activeTab = ref('profile')
<nav class="flex space-x-8">
<button
@click="activeTab = 'profile'"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200 cursor-pointer"
:class="activeTab === 'profile' ? 'border-rose-500 text-rose-600 dark:text-rose-400' : 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300'"
>
个人资料
</button>
<button
@click="activeTab = 'projects'"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200 cursor-pointer"
:class="activeTab === 'projects' ? 'border-rose-500 text-rose-600 dark:text-rose-400' : 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300'"
>
我的项目
</button>
<button
@click="activeTab = 'settings'"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200"
class="py-4 px-1 border-b-2 font-medium text-sm transition-colors duration-200 cursor-pointer"
:class="activeTab === 'settings' ? 'border-rose-500 text-rose-600 dark:text-rose-400' : 'border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300'"
>
账户设置
</button>
</nav>
</div>
</div>
</div>
</div>
<!-- 标签页内容 -->
<div class="mb-10" data-aos="fade-up">
<!-- 个人资料 -->
<div v-if="activeTab === 'profile'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-4 text-gray-900 dark:text-white">基本信息</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">用户名</p>
<p class="text-gray-900 dark:text-white">{{ userData.username }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">邮箱</p>
<p class="text-gray-900 dark:text-white">{{ userData.email }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">手机号</p>
<p class="text-gray-900 dark:text-white">{{ userData.phone }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">注册时间</p>
<p class="text-gray-900 dark:text-white">{{ userData.createdAt }}</p>
</div>
</div>
</div>
<!-- 标签页内容 -->
<div class="mb-10" data-aos="fade-up">
<!-- 个人资料 -->
<div v-if="activeTab === 'profile'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-4 text-gray-900 dark:text-white">基本信息</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">用户名</p>
<p class="text-gray-900 dark:text-white">{{ userData.username }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">邮箱</p>
<p class="text-gray-900 dark:text-white">{{ userData.email }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">手机号</p>
<p class="text-gray-900 dark:text-white">{{ userData.phone }}</p>
</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400 mb-1">注册时间</p>
<p class="text-gray-900 dark:text-white">{{ userData.createdAt }}</p>
</div>
</div>
</div>
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-4 text-gray-900 dark:text-white">账户安全</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">登录密码</p>
<p class="text-sm text-gray-500 dark:text-gray-400">上次修改时间: 2023-03-15</p>
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-4 text-gray-900 dark:text-white">账户安全</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">登录密码</p>
<p class="text-sm text-gray-500 dark:text-gray-400">上次修改时间: 2023-03-15</p>
</div>
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium">
修改
</button>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">手机验证</p>
<p class="text-sm text-gray-500 dark:text-gray-400">已绑定: {{ userData.phone }}</p>
</div>
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium">
修改
</button>
</div>
</div>
</div>
</div>
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium">
修改
</button>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">手机验证</p>
<p class="text-sm text-gray-500 dark:text-gray-400">已绑定: {{ userData.phone }}</p>
</div>
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium">
修改
</button>
</div>
</div>
</div>
</div>
<!-- 我的项目 -->
<div v-else-if="activeTab === 'projects'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">最近项目</h2>
<div class="space-y-4">
<div
v-for="project in recentProjects"
:key="project.id"
class="flex items-center justify-between p-4 border border-gray-100 dark:border-gray-700 rounded-xl hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors"
>
<div>
<h3 class="font-medium text-gray-900 dark:text-white">{{ project.title }}</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">{{ project.date }}</p>
</div>
<div class="flex items-center">
<!-- 我的项目 -->
<div v-else-if="activeTab === 'projects'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">最近项目</h2>
<div class="space-y-4">
<div
v-for="project in recentProjects"
:key="project.id"
class="flex items-center justify-between p-4 border border-gray-100 dark:border-gray-700 rounded-xl hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors"
>
<div>
<h3 class="font-medium text-gray-900 dark:text-white">{{ project.title }}</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">{{ project.date }}</p>
</div>
<div class="flex items-center">
<span
class="px-3 py-1 rounded-full text-xs font-medium"
:class="project.status === '进行中' ? 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300' : 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300'"
>
{{ project.status }}
</span>
<button class="ml-4 text-gray-400 hover:text-gray-500 dark:text-gray-500 dark:hover:text-gray-400">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
</svg>
</button>
</div>
</div>
</div>
<button class="ml-4 text-gray-400 hover:text-gray-500 dark:text-gray-500 dark:hover:text-gray-400">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
</svg>
</button>
</div>
</div>
</div>
<div class="mt-6 text-center">
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium flex items-center mx-auto">
查看全部项目
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-1" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" />
</svg>
</button>
</div>
</div>
</div>
<div class="mt-6 text-center">
<button class="text-rose-600 dark:text-rose-400 hover:text-rose-700 dark:hover:text-rose-300 font-medium flex items-center mx-auto">
查看全部项目
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-1" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" />
</svg>
</button>
</div>
</div>
</div>
<!-- 账户设置 -->
<div v-else-if="activeTab === 'settings'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">通知设置</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">系统通知</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收系统更新和安全提醒</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer" checked>
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">项目更新</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收项目进度和更新通知</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer" checked>
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">营销信息</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收优惠和促销信息</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer">
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
</div>
</div>
<!-- 账户设置 -->
<div v-else-if="activeTab === 'settings'" class="space-y-6">
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">通知设置</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">系统通知</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收系统更新和安全提醒</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer" checked>
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">项目更新</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收项目进度和更新通知</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer" checked>
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">营销信息</p>
<p class="text-sm text-gray-500 dark:text-gray-400">接收优惠和促销信息</p>
</div>
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer">
<div class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-rose-300 dark:peer-focus:ring-rose-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-rose-600"></div>
</label>
</div>
</div>
</div>
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">隐私设置</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">个人资料可见性</p>
<p class="text-sm text-gray-500 dark:text-gray-400">控制谁可以查看您的个人资料</p>
<div class="bg-white dark:bg-gray-800 rounded-2xl shadow-lg p-6">
<h2 class="text-xl font-bold mb-6 text-gray-900 dark:text-white">隐私设置</h2>
<div class="space-y-4">
<div class="flex items-center justify-between">
<div>
<p class="font-medium text-gray-900 dark:text-white">个人资料可见性</p>
<p class="text-sm text-gray-500 dark:text-gray-400">控制谁可以查看您的个人资料</p>
</div>
<select class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-rose-500 focus:border-rose-500 block p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white">
<option value="public">公开</option>
<option value="friends">仅好友</option>
<option value="private">私密</option>
</select>
</div>
</div>
</div>
</div>
<select class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-rose-500 focus:border-rose-500 block p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white">
<option value="public">公开</option>
<option value="friends">仅好友</option>
<option value="private">私密</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>