diff --git a/biji-qianduan/src/assets/styles/global.css b/biji-qianduan/src/assets/styles/global.css index 5277f59..a64d0fc 100644 --- a/biji-qianduan/src/assets/styles/global.css +++ b/biji-qianduan/src/assets/styles/global.css @@ -7,9 +7,10 @@ body { font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - background-color: var(--bg-color); + background: var(--bg-gradient); color: var(--text-color); - transition: background-color var(--transition-duration), color var(--transition-duration); + transition: background var(--transition-duration), color var(--transition-duration); + background-attachment: fixed; } /* 滚动条美化 */ diff --git a/biji-qianduan/src/assets/styles/theme.css b/biji-qianduan/src/assets/styles/theme.css index df4b1ed..31ef241 100644 --- a/biji-qianduan/src/assets/styles/theme.css +++ b/biji-qianduan/src/assets/styles/theme.css @@ -2,46 +2,66 @@ /* 默认浅色主题 */ :root { + /* 主色调 - 活力紫 */ + --primary-color: #6a11cb; + --primary-color-light: #f3e5f5; /* 浅紫色,用于悬停 */ + --primary-color-dark: #4a008f; /* 深紫色,用于激活 */ + + /* 辅助色 */ + --secondary-color: #f7fafc; + --accent-color: #2575fc; /* 亮蓝色,用于强调 */ + --danger-color: #f5365c; + --success-color: #2dce89; + --warning-color: #fb6340; + + /* 背景色 - 带有色彩倾向的渐变 */ --bg-color: #ffffff; - --bg-color-secondary: #f7f8fa; - --bg-color-tertiary: #eff2f5; - --text-color: #303133; - --text-color-secondary: #606266; - --text-color-placeholder: #a8abb2; - --border-color: #dcdfe6; - --border-color-light: #e4e7ed; - --primary-color: #409eff; - --primary-color-light: #ecf5ff; - --danger-color: #f56c6c; - --success-color: #67c23a; - --warning-color: #e6a23c; - --info-color: #909399; + --bg-color-secondary: #f8f9fe; + --bg-gradient: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); - --box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); - --box-shadow-light: 0 2px 4px rgba(0, 0, 0, 0.08); - --box-shadow-dark: 0 4px 16px rgba(0, 0, 0, 0.15); + /* 文本色 */ + --text-color: #32325d; /* 深蓝灰色 */ + --text-color-secondary: #6b7c93; /* 灰蓝色 */ + --text-color-placeholder: #adb5bd; - --transition-duration: 0.3s; + /* 边框和阴影 */ + --border-color: #e9ecef; + --border-radius: 8px; + --box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); + --box-shadow-light: 0 2px 4px rgba(50, 50, 93, 0.1); + --box-shadow-dark: 0 7px 14px rgba(50, 50, 93, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08); + + /* 过渡 */ + --transition-duration: 0.25s; } /* 深色主题 */ .dark-theme { - --bg-color: #141414; - --bg-color-secondary: #1a1a1a; - --bg-color-tertiary: #222222; - --text-color: #e5e5e5; - --text-color-secondary: #a3a3a3; - --text-color-placeholder: #5c5c5c; - --border-color: #3a3a3a; - --border-color-light: #2a2a2a; - --primary-color: #409eff; - --primary-color-light: #26334f; - --danger-color: #f56c6c; - --success-color: #67c23a; - --warning-color: #e6a23c; - --info-color: #909399; + /* 主色调 - 科技蓝 */ + --primary-color: #007bff; + --primary-color-light: #1f2937; + --primary-color-dark: #0056b3; - --box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.3); - --box-shadow-light: 0 2px 4px rgba(0, 0, 0, 0.25); - --box-shadow-dark: 0 4px 16px rgba(0, 0, 0, 0.4); + /* 辅助色 */ + --secondary-color: #111827; + --accent-color: #10b981; /* 亮绿色 */ + --danger-color: #ef4444; + --success-color: #22c55e; + --warning-color: #f97316; + + /* 背景色 - 深邃的渐变 */ + --bg-color: #0d1117; + --bg-color-secondary: #1f2937; + --bg-gradient: linear-gradient(135deg, #0d1117 0%, #1f2937 100%); + + /* 文本色 */ + --text-color: #e5e7eb; + --text-color-secondary: #9ca3af; + --text-color-placeholder: #4b5563; + + /* 边框和阴影 */ + --border-color: #374151; + --box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2), 0 1px 3px rgba(0, 0, 0, 0.15); + --box-shadow-light: 0 2px 4px rgba(0, 0, 0, 0.18); + --box-shadow-dark: 0 7px 14px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.15); } \ No newline at end of file diff --git a/biji-qianduan/src/components/HomePage.vue b/biji-qianduan/src/components/HomePage.vue index 9465c02..29985ed 100644 --- a/biji-qianduan/src/components/HomePage.vue +++ b/biji-qianduan/src/components/HomePage.vue @@ -71,7 +71,7 @@
-

我的笔记

+

我的笔记

-
- 欢迎, {{ userStore.userInfo?.username }} + -
+
登录 注册
- 新建笔记 - - 上传Markdown -
@@ -1009,43 +1008,66 @@ watch(activeMenu, (newVal) => { + +/* 对话框样式 */ +:deep(.el-dialog) { + border-radius: var(--border-radius); + background-color: var(--bg-color-secondary); +} + +:deep(.el-dialog__header) { + border-bottom: 1px solid var(--border-color); + padding: 1.5rem; +} + +:deep(.el-dialog__title) { + font-size: 1.25rem; + font-weight: 600; + color: var(--text-color); +} + +:deep(.el-dialog__body) { + padding: 1.5rem; +} + +:deep(.el-dialog__footer) { + padding: 1.5rem; + border-top: 1px solid var(--border-color); +} + +.welcome-text { + white-space: nowrap; +} +.user-actions, .guest-actions { + display: flex; + align-items: center; + gap: 10px; +} diff --git a/biji-qianduan/src/components/LoginPage.vue b/biji-qianduan/src/components/LoginPage.vue index 8bc0e97..a90ac53 100644 --- a/biji-qianduan/src/components/LoginPage.vue +++ b/biji-qianduan/src/components/LoginPage.vue @@ -1,25 +1,36 @@ @@ -28,6 +39,7 @@ import { ref } from 'vue'; import { useRouter } from 'vue-router'; import { useUserStore } from '../stores/user'; import { ElMessage } from 'element-plus'; +import { User, Lock } from '@element-plus/icons-vue'; const router = useRouter(); const userStore = useUserStore(); @@ -70,60 +82,128 @@ const goToHome = () => { display: flex; justify-content: center; align-items: center; - height: 100vh; - background-color: var(--bg-color-secondary); - background-image: linear-gradient(135deg, var(--bg-color) 0%, var(--bg-color-secondary) 100%); + min-height: 100vh; + padding: 2rem; + background: var(--bg-gradient); + background-attachment: fixed; } .login-card { - width: 420px; - padding: 20px 30px; - border-radius: 12px; - background-color: var(--bg-color); + width: 100%; + max-width: 420px; + padding: 2.5rem 2rem; + border-radius: var(--border-radius); + background-color: rgba(255, 255, 255, 0.85); + backdrop-filter: blur(10px); box-shadow: var(--box-shadow-dark); - border: 1px solid var(--border-color); - animation: slideInDown 0.5s ease-out; + border: 1px solid rgba(255, 255, 255, 0.2); + animation: fadeIn 0.5s ease-out; overflow: hidden; } +.dark-theme .login-card { + background-color: rgba(23, 23, 39, 0.85); + border: 1px solid rgba(255, 255, 255, 0.1); +} + .card-header { text-align: center; - font-size: 24px; + margin-bottom: 2.5rem; +} + +.card-header h2 { + margin: 0 0 0.5rem 0; + font-size: 1.75rem; font-weight: 600; color: var(--text-color); - padding-bottom: 20px; - margin-bottom: 20px; - border-bottom: 1px solid var(--border-color-light); +} + +.card-header p { + margin: 0; + color: var(--text-color-secondary); } .el-form-item { - margin-bottom: 25px; + margin-bottom: 1.5rem; } -.el-button { +:deep(.el-form-item__label) { + color: var(--text-color-secondary); + line-height: 1.5; + margin-bottom: 0.5rem; +} + +:deep(.el-input__wrapper) { + border-radius: var(--border-radius); + background-color: var(--bg-color-secondary); + box-shadow: none; + transition: all var(--transition-duration) ease; + border: 1px solid var(--border-color); +} + +:deep(.el-input__wrapper.is-focus) { + border-color: var(--primary-color); + box-shadow: 0 0 0 2px rgba(var(--primary-color), 0.2); +} + +.button-group { + display: flex; width: 100%; + gap: 1rem; +} + +.login-button, .register-button { + flex: 1; + height: 44px; + border-radius: var(--border-radius); + font-size: 1rem; + font-weight: 600; + border: none; transition: all var(--transition-duration) ease; } -.el-button--primary { - height: 40px; +.login-button { + background-color: var(--primary-color); } -.el-button--primary:hover { +.register-button { + background-color: var(--secondary-color); + color: var(--text-color); + border: 1px solid var(--border-color); +} + +.login-button:hover, .register-button:hover { transform: translateY(-2px); - box-shadow: 0 4px 10px rgba(64, 158, 255, 0.4); + box-shadow: var(--box-shadow); } -.el-button:last-child { - margin-left: 0; - margin-top: 10px; - color: var(--text-color-secondary); - border: none; - background: none; +.login-button:hover { + background-color: var(--primary-color-dark); } -.el-button:last-child:hover { +.register-button:hover { + background-color: var(--border-color); +} + +.card-footer { + margin-top: 2rem; + display: flex; + justify-content: center; + align-items: center; + gap: 1rem; + font-size: 0.875rem; +} + +.link-highlight { + color: var(--primary-color); + font-weight: 600; +} + +:deep(.el-link) { + color: var(--text-color-secondary); +} + +:deep(.el-link:hover) { color: var(--primary-color); - background-color: var(--primary-color-light); } \ No newline at end of file diff --git a/biji-qianduan/src/components/RegisterPage.vue b/biji-qianduan/src/components/RegisterPage.vue index fc5612c..e8461fb 100644 --- a/biji-qianduan/src/components/RegisterPage.vue +++ b/biji-qianduan/src/components/RegisterPage.vue @@ -1,28 +1,43 @@ @@ -31,6 +46,7 @@ import { ref } from 'vue'; import { useRouter } from 'vue-router'; import { register } from '../api/CommonApi'; import { ElMessage } from 'element-plus'; +import { User, Lock, CircleCheck } from '@element-plus/icons-vue'; const router = useRouter(); const registerFormRef = ref(null); @@ -84,60 +100,128 @@ const goToHome = () => { display: flex; justify-content: center; align-items: center; - height: 100vh; - background-color: var(--bg-color-secondary); - background-image: linear-gradient(135deg, var(--bg-color) 0%, var(--bg-color-secondary) 100%); + min-height: 100vh; + padding: 2rem; + background: var(--bg-gradient); + background-attachment: fixed; } .register-card { - width: 420px; - padding: 20px 30px; - border-radius: 12px; - background-color: var(--bg-color); + width: 100%; + max-width: 420px; + padding: 2.5rem 2rem; + border-radius: var(--border-radius); + background-color: rgba(255, 255, 255, 0.85); + backdrop-filter: blur(10px); box-shadow: var(--box-shadow-dark); - border: 1px solid var(--border-color); - animation: slideInDown 0.5s ease-out; + border: 1px solid rgba(255, 255, 255, 0.2); + animation: fadeIn 0.5s ease-out; overflow: hidden; } +.dark-theme .register-card { + background-color: rgba(23, 23, 39, 0.85); + border: 1px solid rgba(255, 255, 255, 0.1); +} + .card-header { text-align: center; - font-size: 24px; + margin-bottom: 2.5rem; +} + +.card-header h2 { + margin: 0 0 0.5rem 0; + font-size: 1.75rem; font-weight: 600; color: var(--text-color); - padding-bottom: 20px; - margin-bottom: 20px; - border-bottom: 1px solid var(--border-color-light); +} + +.card-header p { + margin: 0; + color: var(--text-color-secondary); } .el-form-item { - margin-bottom: 25px; + margin-bottom: 1.5rem; } -.el-button { +:deep(.el-form-item__label) { + color: var(--text-color-secondary); + line-height: 1.5; + margin-bottom: 0.5rem; +} + +:deep(.el-input__wrapper) { + border-radius: var(--border-radius); + background-color: var(--bg-color-secondary); + box-shadow: none; + transition: all var(--transition-duration) ease; + border: 1px solid var(--border-color); +} + +:deep(.el-input__wrapper.is-focus) { + border-color: var(--primary-color); + box-shadow: 0 0 0 2px rgba(var(--primary-color), 0.2); +} + +.button-group { + display: flex; width: 100%; + gap: 1rem; +} + +.register-button, .login-button { + flex: 1; + height: 44px; + border-radius: var(--border-radius); + font-size: 1rem; + font-weight: 600; + border: none; transition: all var(--transition-duration) ease; } -.el-button--primary { - height: 40px; +.register-button { + background-color: var(--primary-color); } -.el-button--primary:hover { +.login-button { + background-color: var(--secondary-color); + color: var(--text-color); + border: 1px solid var(--border-color); +} + +.register-button:hover, .login-button:hover { transform: translateY(-2px); - box-shadow: 0 4px 10px rgba(64, 158, 255, 0.4); + box-shadow: var(--box-shadow); } -.el-button:last-child { - margin-left: 0; - margin-top: 10px; - color: var(--text-color-secondary); - border: none; - background: none; +.register-button:hover { + background-color: var(--primary-color-dark); } -.el-button:last-child:hover { +.login-button:hover { + background-color: var(--border-color); +} + +.card-footer { + margin-top: 2rem; + display: flex; + justify-content: center; + align-items: center; + gap: 1rem; + font-size: 0.875rem; +} + +.link-highlight { + color: var(--primary-color); + font-weight: 600; +} + +:deep(.el-link) { + color: var(--text-color-secondary); +} + +:deep(.el-link:hover) { color: var(--primary-color); - background-color: var(--primary-color-light); } \ No newline at end of file