Browse Source

all

yangrongze
hanyuqing 3 months ago
parent
commit
e1d1dde923
  1. 4
      vue/src/system/GraphQA.vue
  2. 143
      vue/src/system/Profile.vue

4
vue/src/system/GraphQA.vue

@ -60,7 +60,7 @@ export default {
data() { data() {
return { return {
query:"", query:"",
answers:[] answers:['糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么','糖尿病不能吃什么',]
}; };
}, },
methods: { methods: {
@ -68,7 +68,7 @@ export default {
let data={ let data={
text:this.query text:this.query
} }
qaAnalyze(data).then(res=>{ qaAnalyze().then(res=>{
}) })
} }

143
vue/src/system/Profile.vue

@ -10,44 +10,45 @@
<div class="profile-container"> <div class="profile-container">
<!-- 页面标题 --> <!-- 页面标题 -->
<div class="page-header"> <div class="page-header">
<h1 class="page-title">个人主页</h1> <h2 class="page-title">个人中心</h2>
<p class="page-subtitle">管理您的个人信息和账户设置</p>
</div> </div>
<div class="avatar-section">
<!-- 个人信息卡片 --> <div class="avatar-container">
<div class="profile-card"> <img
<!-- 头像区域 -->
<div class="avatar-section">
<div class="avatar-container">
<img
:src="userProfile.avatar" :src="userProfile.avatar"
alt="用户头像" alt="用户头像"
class="avatar-image" class="avatar-image"
@error="handleAvatarError" @error="handleAvatarError"
> >
<div class="avatar-overlay" @click="triggerFileInput"> <div class="avatar-overlay" @click="triggerFileInput">
<span class="camera-icon">📷</span> <span class="camera-icon">📷</span>
<span class="overlay-text">更换头像</span> <span class="overlay-text">更换头像</span>
</div> </div>
<input <input
type="file" type="file"
ref="fileInput" ref="fileInput"
@change="handleAvatarChange" @change="handleAvatarChange"
accept="image/*" accept="image/*"
class="hidden-input" class="hidden-input"
> >
</div> </div>
<div class="username-display">{{ userProfile.username }}</div> <div class="username-display">{{ userProfile.username }}</div>
<div class="avatar-status"> <div class="avatar-status">
<p v-if="avatarUploading" class="uploading-text">上传中...</p> <p v-if="avatarUploading" class="uploading-text">上传中...</p>
<p v-if="avatarUploadSuccess" class="success-text">头像更新成功</p> <p v-if="avatarUploadSuccess" class="success-text">头像更新成功</p>
</div>
</div> </div>
</div>
<!-- 个人信息卡片 -->
<div class="profile-card">
<!-- 头像区域 -->
<!-- 用户信息表单 --> <!-- 用户信息表单 -->
<div class="info-section"> <div class="info-section">
<h2 class="section-title">修改密码</h2> <div style="border-bottom: 3px solid #F5F8FF;">
<h2 class="section-title">修改密码</h2>
</div>
<form class="password-form" @submit.prevent="changePassword"> <form class="password-form" @submit.prevent="changePassword">
<div class="form-group"> <div class="form-group">
<label for="currentPassword" class="form-label">当前密码</label> <label for="currentPassword" class="form-label">当前密码</label>
@ -56,7 +57,7 @@
id="currentPassword" id="currentPassword"
v-model="passwordForm.currentPassword" v-model="passwordForm.currentPassword"
class="form-input" class="form-input"
placeholder="请输入当前密码" placeholder="请输入当前登录密码"
required required
> >
</div> </div>
@ -68,11 +69,13 @@
id="newPassword" id="newPassword"
v-model="passwordForm.newPassword" v-model="passwordForm.newPassword"
class="form-input" class="form-input"
placeholder="请输入新密码" placeholder="请设置新密码(8-16位,含字母+数字)"
required required
> >
<div class="form-label" style="text-align: left;margin-top: 7px;font-size: 12px;font-weight: 500">密码要求:8-16包含字母和数字不允许空格</div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="confirmPassword" class="form-label">确认新密码</label> <label for="confirmPassword" class="form-label">确认新密码</label>
<input <input
@ -401,13 +404,30 @@ onMounted(async () => {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
.page-title { .page-title {
font-size: 1.5rem; font-size: 20px;
font-weight: 600; margin-bottom: 20px;
color: #1f2937; padding-left: 12px;
margin: 0 0 0.5rem 0; position: relative;
display: flex;
align-items: center;
color: #165DFF;
margin-left: 15px;
} }
.page-title::before {
content: '';
width: 6px;
height: 18px;
background-color: #165DFF;
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
border-radius: 5px;
}
.page-subtitle { .page-subtitle {
color: #6b7280; color: #6b7280;
margin: 0; margin: 0;
@ -433,12 +453,12 @@ onMounted(async () => {
/* 个人信息卡片 */ /* 个人信息卡片 */
.profile-card { .profile-card {
background-color: #fff; background-color: #fff;
border-radius: 0.5rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
padding: 1.5rem; padding: 1.5rem;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
box-shadow: 2px -1px 14px 9px #EBF1FF;
border-radius: 18px;
} }
/* 头像区域样式 */ /* 头像区域样式 */
@ -447,14 +467,17 @@ onMounted(async () => {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
margin-bottom: 2rem; margin-bottom: 2rem;
padding-bottom: 1.5rem; padding: 20px;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid #e5e7eb;
background-color: #fff;
box-shadow: 2px -1px 14px 9px #EBF1FF;
border-radius: 18px;
} }
.avatar-container { .avatar-container {
position: relative; position: relative;
width: 100px; width: 120px;
height: 100px; height: 120px;
margin-bottom: 1rem; margin-bottom: 1rem;
} }
@ -507,11 +530,14 @@ onMounted(async () => {
.username-display { .username-display {
text-align: center; text-align: center;
font-size: 1.125rem; font-size: 12px;
font-weight: 600; color: #1356F2;
color: #1f2937;
margin-top: 0.75rem; margin-top: 0.75rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
background-color: #E8F0FF;
padding: 10px 13px;
border-radius: 5px;
font-weight:600;
} }
.uploading-text, .success-text { .uploading-text, .success-text {
@ -530,25 +556,39 @@ onMounted(async () => {
/* 信息区域样式 */ /* 信息区域样式 */
.info-section { .info-section {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
.section-title { .section-title {
font-size: 1.125rem; font-size: 17px;
font-weight: 600; margin-bottom: 10px;
color: #1f2937; padding-left: 12px;
margin: 0 0 1rem 0; position: relative;
padding-bottom: 0.5rem; display: flex;
border-bottom: 1px solid #e5e7eb; align-items: center;
text-align: center; color: #165DFF;
margin-top: 0px;
} }
.section-title::before {
content: '';
width: 6px;
height: 17px;
background-color: #165DFF;
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
border-radius: 5px;
}
/* 表单样式 */ /* 表单样式 */
.profile-form, .password-form { .profile-form, .password-form {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 1rem; gap: 1rem;
max-width: 400px; margin-top: 15px;
margin: 0 auto;
} }
.form-group { .form-group {
@ -559,19 +599,21 @@ onMounted(async () => {
.form-label { .form-label {
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 500; text-align: left;
color: #374151; font-weight: bold;
color: #8d929a;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
.form-input { .form-input {
padding: 0.625rem 0.875rem; padding: 0.625rem 0.875rem;
border: 1px solid #d1d5db; border: 2px solid #EBF1FF;
border-radius: 0.375rem; border-radius: 0.375rem;
font-size: 0.875rem; font-size: 0.875rem;
transition: border-color 0.2s; transition: border-color 0.2s;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
background-color: #F5F8FF;
} }
.form-input:focus { .form-input:focus {
@ -590,8 +632,7 @@ onMounted(async () => {
} }
.form-actions { .form-actions {
display: flex; text-align: left;
justify-content: center;
margin-top: 1rem; margin-top: 1rem;
} }

Loading…
Cancel
Save