From 07fab4c54ad2896540e1fbd69fa3bceeccf6e30c Mon Sep 17 00:00:00 2001 From: Mohan Date: Mon, 10 Aug 2026 12:36:52 +0800 Subject: [PATCH] refactor(theme): tokenize auth pages and shared widgets --- src/components/ArticleCard.vue | 26 ++++++++++---------- src/components/CommentSection.vue | 40 +++++++++++++++++++------------ src/components/Pagination.vue | 17 +++++++++---- src/components/TagCloud.vue | 19 ++++++++------- src/views/LoginView.vue | 39 ++++++++++++++++++++---------- src/views/RegisterView.vue | 37 +++++++++++++++++++--------- 6 files changed, 113 insertions(+), 65 deletions(-) diff --git a/src/components/ArticleCard.vue b/src/components/ArticleCard.vue index a590d81..b6a1990 100644 --- a/src/components/ArticleCard.vue +++ b/src/components/ArticleCard.vue @@ -39,37 +39,37 @@ function coverSrc(): string | undefined { \ No newline at end of file diff --git a/src/components/CommentSection.vue b/src/components/CommentSection.vue index da8dfc7..1a260dc 100644 --- a/src/components/CommentSection.vue +++ b/src/components/CommentSection.vue @@ -123,7 +123,7 @@ onMounted(load) .comment-item { padding: 12px 0; - border-bottom: 1px solid #eee; + border-bottom: 1px solid var(--ac-border); } .comment-item:last-child { @@ -143,20 +143,20 @@ onMounted(load) } .comment-time { - color: #8a93a3; + color: var(--ac-text-disabled); font-size: 12px; } .comment-content { margin: 0; font-size: 14px; - color: #333; + color: var(--ac-text); } .comment-form { - background: #fff; - border: 1px solid #e5e5ea; - border-radius: 8px; + background: var(--ac-bg-card); + border: 1px solid var(--ac-border); + border-radius: var(--song-radius-l); padding: 16px; } @@ -169,16 +169,25 @@ onMounted(load) display: block; margin: 10px 0 4px; font-size: 13px; - color: #5c6470; + color: var(--ac-text-secondary); } .form-input, .form-textarea { width: 100%; padding: 8px 10px; - border: 1px solid #d3d8e0; - border-radius: 6px; + border: 1px solid var(--ac-input-border); + border-radius: var(--song-radius-l); font-size: 14px; + background: var(--ac-bg-card); + color: var(--ac-text); + transition: border-color var(--song-dur-1) var(--song-ease); +} + +.form-input:focus, +.form-textarea:focus { + border-color: var(--ac-primary); + outline: none; } .form-textarea { @@ -190,11 +199,12 @@ onMounted(load) margin-top: 12px; padding: 8px 18px; border: none; - border-radius: 6px; - background: #3b82f6; - color: #fff; + border-radius: var(--song-radius-l); + background: var(--ac-primary-strong); + color: var(--ac-primary-text); font-size: 14px; cursor: pointer; + transition: opacity var(--song-dur-1) var(--song-ease); } .submit-btn:disabled { @@ -202,16 +212,16 @@ onMounted(load) } .error-text { - color: #d33c3c; + color: var(--ac-danger); font-size: 13px; } .success-text { - color: #1e7e34; + color: var(--ac-success); font-size: 13px; } .hint-text { - color: #8a93a3; + color: var(--ac-text-disabled); } \ No newline at end of file diff --git a/src/components/Pagination.vue b/src/components/Pagination.vue index 5c1dad8..dc63ebd 100644 --- a/src/components/Pagination.vue +++ b/src/components/Pagination.vue @@ -33,20 +33,27 @@ function go(p: number) { .page-btn { padding: 6px 14px; - border: 1px solid #d3d8e0; - border-radius: 6px; - background: #fff; + border: 1px solid var(--ac-input-border); + border-radius: var(--song-radius-l); + background: var(--ac-bg-card); cursor: pointer; font-size: 14px; + color: var(--ac-text); + transition: border-color var(--song-dur-1) var(--song-ease), color var(--song-dur-1) var(--song-ease); +} + +.page-btn:hover:not(:disabled) { + color: var(--ac-primary); + border-color: var(--ac-primary); } .page-btn:disabled { - color: #b8bfc9; + color: var(--ac-text-disabled); cursor: not-allowed; } .page-info { - color: #5c6470; + color: var(--ac-text-secondary); font-size: 14px; } \ No newline at end of file diff --git a/src/components/TagCloud.vue b/src/components/TagCloud.vue index 8e3697c..e8a3526 100644 --- a/src/components/TagCloud.vue +++ b/src/components/TagCloud.vue @@ -58,9 +58,9 @@ onMounted(load) \ No newline at end of file diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue index 39c2eb6..77ac959 100644 --- a/src/views/LoginView.vue +++ b/src/views/LoginView.vue @@ -59,30 +59,40 @@ async function onSubmit() { .login-form { width: 100%; max-width: 360px; - background: #fff; - border: 1px solid #e5e5ea; - border-radius: 8px; + background: var(--ac-bg-card); + border: 1px solid var(--ac-border); + border-radius: var(--song-radius-l); padding: 28px; } .login-title { + font-family: var(--song-font-display); text-align: center; + font-weight: 400; margin: 0 0 20px; } -.field-label { +.form-label { display: block; margin: 14px 0 6px; font-size: 14px; - color: #5c6470; + color: var(--ac-text-secondary); } .form-input { width: 100%; padding: 10px 12px; - border: 1px solid #d3d8e0; - border-radius: 6px; + border: 1px solid var(--ac-input-border); + border-radius: var(--song-radius-l); font-size: 14px; + background: var(--ac-bg-card); + color: var(--ac-text); + transition: border-color var(--song-dur-1) var(--song-ease); +} + +.form-input:focus { + border-color: var(--ac-primary); + outline: none; } .login-btn { @@ -90,11 +100,16 @@ async function onSubmit() { margin-top: 20px; padding: 11px; border: none; - border-radius: 6px; - background: #3b82f6; - color: #fff; + border-radius: var(--song-radius-l); + background: var(--ac-primary-strong); + color: var(--ac-primary-text); font-size: 15px; cursor: pointer; + transition: opacity var(--song-dur-1) var(--song-ease); +} + +.login-btn:hover:not(:disabled) { + opacity: 0.9; } .login-btn:disabled { @@ -105,11 +120,11 @@ async function onSubmit() { text-align: center; margin-top: 16px; font-size: 13px; - color: #8a93a3; + color: var(--ac-text-disabled); } .error-text { - color: #d33c3c; + color: var(--ac-danger); font-size: 13px; } \ No newline at end of file diff --git a/src/views/RegisterView.vue b/src/views/RegisterView.vue index ab9d365..bc90e70 100644 --- a/src/views/RegisterView.vue +++ b/src/views/RegisterView.vue @@ -84,14 +84,16 @@ async function onSubmit() { .register-form { width: 100%; max-width: 360px; - background: #fff; - border: 1px solid #e5e5ea; - border-radius: 8px; + background: var(--ac-bg-card); + border: 1px solid var(--ac-border); + border-radius: var(--song-radius-l); padding: 28px; } .register-title { + font-family: var(--song-font-display); text-align: center; + font-weight: 400; margin: 0 0 20px; } @@ -99,15 +101,23 @@ async function onSubmit() { display: block; margin: 14px 0 6px; font-size: 14px; - color: #5c6470; + color: var(--ac-text-secondary); } .form-input { width: 100%; padding: 10px 12px; - border: 1px solid #d3d8e0; - border-radius: 6px; + border: 1px solid var(--ac-input-border); + border-radius: var(--song-radius-l); font-size: 14px; + background: var(--ac-bg-card); + color: var(--ac-text); + transition: border-color var(--song-dur-1) var(--song-ease); +} + +.form-input:focus { + border-color: var(--ac-primary); + outline: none; } .register-btn { @@ -115,11 +125,16 @@ async function onSubmit() { margin-top: 20px; padding: 11px; border: none; - border-radius: 6px; - background: #3b82f6; - color: #fff; + border-radius: var(--song-radius-l); + background: var(--ac-primary-strong); + color: var(--ac-primary-text); font-size: 15px; cursor: pointer; + transition: opacity var(--song-dur-1) var(--song-ease); +} + +.register-btn:hover:not(:disabled) { + opacity: 0.9; } .register-btn:disabled { @@ -130,11 +145,11 @@ async function onSubmit() { text-align: center; margin-top: 16px; font-size: 13px; - color: #8a93a3; + color: var(--ac-text-disabled); } .error-text { - color: #d33c3c; + color: var(--ac-danger); font-size: 13px; } \ No newline at end of file