diff --git a/src/App.vue b/src/App.vue index a9681fd..9669f98 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,22 +1,52 @@ \ No newline at end of file diff --git a/src/components/auth/AuthorApplicationProvider.vue b/src/components/auth/AuthorApplicationProvider.vue new file mode 100644 index 0000000..daa2e72 --- /dev/null +++ b/src/components/auth/AuthorApplicationProvider.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/src/components/book/BookCatalog.vue b/src/components/book/BookCatalog.vue new file mode 100644 index 0000000..19991d6 --- /dev/null +++ b/src/components/book/BookCatalog.vue @@ -0,0 +1,268 @@ + + + + + \ No newline at end of file diff --git a/src/components/book/BookComments.vue b/src/components/book/BookComments.vue new file mode 100644 index 0000000..04f6b8f --- /dev/null +++ b/src/components/book/BookComments.vue @@ -0,0 +1,275 @@ + + + + + \ No newline at end of file diff --git a/src/components/book/BookIntro.vue b/src/components/book/BookIntro.vue new file mode 100644 index 0000000..7b359e1 --- /dev/null +++ b/src/components/book/BookIntro.vue @@ -0,0 +1,120 @@ + + + + + \ No newline at end of file diff --git a/src/components/book/BookStats.vue b/src/components/book/BookStats.vue new file mode 100644 index 0000000..14e5dfd --- /dev/null +++ b/src/components/book/BookStats.vue @@ -0,0 +1,166 @@ + + + + + \ No newline at end of file diff --git a/src/components/bookshelf/BookshelfItem.vue b/src/components/bookshelf/BookshelfItem.vue new file mode 100644 index 0000000..d277047 --- /dev/null +++ b/src/components/bookshelf/BookshelfItem.vue @@ -0,0 +1,151 @@ + + + + + \ No newline at end of file diff --git a/src/components/bookshelf/bookshelfCard.vue b/src/components/bookshelf/bookshelfCard.vue new file mode 100644 index 0000000..e6d1381 --- /dev/null +++ b/src/components/bookshelf/bookshelfCard.vue @@ -0,0 +1,191 @@ + + + + + \ No newline at end of file diff --git a/src/components/common/BookCard.vue b/src/components/common/BookCard.vue index 7d86994..adbb118 100644 --- a/src/components/common/BookCard.vue +++ b/src/components/common/BookCard.vue @@ -7,9 +7,9 @@

{{ book.title }}

作者:{{ book.author }}

{{ book.description }}

-
- {{ book.status }} - {{ book.readCount }}人在读 +
+ 连载中 + 大家都在读
@@ -61,7 +61,6 @@ export default { transition: all 0.3s; cursor: pointer; background-color: #fff; - max-width: 400px; margin-bottom: 15px; @@ -117,16 +116,16 @@ export default { .book-status { margin-top: 8px; display: flex; - justify-content: space-between; align-items: center; + gap: 10px; .status-tag { - background-color: #e6f7ff; + background-color: #67C23A33; color: vars.$primary-color; padding: 2px 8px; border-radius: 10px; font-size: 12px; - border: 1px solid #91d5ff; + color: #67C23A; } .reading-count { diff --git a/src/components/ranking/IntimacyRanking copy.vue b/src/components/ranking/IntimacyRanking copy.vue new file mode 100644 index 0000000..160e5a0 --- /dev/null +++ b/src/components/ranking/IntimacyRanking copy.vue @@ -0,0 +1,438 @@ + + + + + \ No newline at end of file diff --git a/src/components/ranking/IntimacyRanking.vue b/src/components/ranking/IntimacyRanking.vue new file mode 100644 index 0000000..2605c7d --- /dev/null +++ b/src/components/ranking/IntimacyRanking.vue @@ -0,0 +1,328 @@ + + + + + \ No newline at end of file diff --git a/src/layout/layout/Header.vue b/src/layout/layout/Header.vue index c9add71..82f8638 100644 --- a/src/layout/layout/Header.vue +++ b/src/layout/layout/Header.vue @@ -48,18 +48,51 @@ 登录/注册 - + @@ -69,18 +102,38 @@ @@ -259,318 +232,196 @@ export default { @use '@/assets/styles/variables.scss' as vars; .book-detail-container { - width: 100%; - background-color: #f5f5f5; + width: 100%; + background-color: #f5f5f5; } // 小说基本信息部分 .book-info-wrapper { - background-color: #fff; - padding: 30px 0; - border-bottom: 1px solid #eee; - - .book-info { - display: flex; - max-width: 1200px; - margin: 0 auto; - padding: 0 20px; - - .book-cover { - width: 150px; - height: 200px; - margin-right: 30px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - - img { - width: 100%; - height: 100%; - object-fit: cover; - } - } - - .book-details { - flex: 1; - - .book-title { - font-size: 24px; - font-weight: bold; - margin: 0 0 15px 0; - color: #333; - } - - .book-meta { - margin-bottom: 20px; - - .meta-item { - margin-bottom: 10px; - font-size: 14px; - color: #666; - - .label { - display: inline-block; - width: 60px; - color: #999; - } - - .value { - color: #333; - - &.finished { - color: #52c41a; - } - - &.updating { - color: #1890ff; - } - } - } - } - - .action-buttons { + background-color: #fff; + padding: 30px 0; + border-bottom: 1px solid #eee; + + .book-info { display: flex; - margin-top: 30px; - - .el-button { - padding: 12px 20px; - font-size: 16px; - margin-right: 15px; - } - - .add-to-shelf { - background-color: vars.$primary-color; - } - - .start-reading { - border-color: vars.$primary-color; - color: vars.$primary-color; - } - } - } - } -} + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; -// 内容导航 -.book-navbar { - background-color: #fff; - border-bottom: 1px solid #eee; - margin-top: 1px; - - .nav-container { - max-width: 1200px; - margin: 0 auto; - padding: 0 20px; - - .nav-list { - display: flex; - list-style: none; - padding: 0; - margin: 0; - - .nav-item { - padding: 15px 20px; - font-size: 16px; - cursor: pointer; - position: relative; - color: #666; - - &.active { - color: vars.$primary-color; - font-weight: bold; - - &::after { - content: ''; - position: absolute; - bottom: 0; - left: 50%; - transform: translateX(-50%); - width: 30px; - height: 3px; - background-color: vars.$primary-color; - } - } - - &:hover { - color: vars.$primary-color; - } - } - } - } -} + .book-cover { + width: 165px; + height: 220px; + margin-right: 30px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); -// 内容部分 -.book-content { - max-width: 1200px; - margin: 0 auto; - padding: 30px 20px; - background-color: #fff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - - // 简介 - .book-intro { - .intro-text { - line-height: 1.8; - color: #555; - font-size: 15px; - - .paragraph { - margin-bottom: 15px; - } - } - } - - // 目录 - .book-directory { - .chapter-list { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 20px; - margin-bottom: 30px; - - @media screen and (max-width: vars.$md) { - grid-template-columns: repeat(2, 1fr); - } - - @media screen and (max-width: vars.$sm) { - grid-template-columns: 1fr; - } - - .chapter-item { - padding: 15px; - border: 1px solid #eee; - border-radius: 4px; - display: flex; - justify-content: space-between; - align-items: center; - cursor: pointer; - transition: all 0.3s; - - &:hover { - background-color: #f9f9f9; - border-color: #ddd; - } - - .chapter-title { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - color: #333; - } - - .chapter-tag { - background-color: #ff4d4f; - color: #fff; - font-size: 12px; - padding: 2px 6px; - border-radius: 2px; - } - } - } - - .pagination { - display: flex; - justify-content: center; - } - } - - // 书评 - .book-comments { - .comment-list { - margin-bottom: 40px; - - .comment-item { - padding: 20px 0; - border-bottom: 1px solid #eee; - - &:last-child { - border-bottom: none; + img { + width: 100%; + height: 100%; + object-fit: cover; + border-radius: 6px; + } } - - .comment-user { - display: flex; - align-items: center; - margin-bottom: 10px; - - .user-info { - margin-left: 12px; - - .username { - font-weight: bold; - color: #333; + + .book-details { + flex: 1; + + .book-title { + font-size: 24px; + font-weight: bold; + margin: 0 0 15px 0; + color: #333; + } + + .book-meta { + margin-bottom: 8px; + .book-status-row { + display: flex; + align-items: center; + font-size: 15px; + margin-top: 10px; + .status-badge { + background: #eaffea; + color: #52c41a; + border-radius: 6px; + padding: 2px 12px; + font-size: 15px; + font-weight: 500; + margin-right: 8px; + } + .dot { + color: #d1d1d1; + margin: 0 8px; + font-size: 18px; + } + .reading-tip { + color: #bdbdbd; + font-size: 15px; + } + } } - - .comment-time { - font-size: 12px; - color: #999; - margin-top: 2px; + .book-user-info { + display: flex; + align-items: center; + margin-bottom: 18px; + .user-badges { + display: flex; + align-items: center; + margin-right: 18px; + .level-icon { + width: 36px; + height: 36px; + } + .badge-label { + color: #b88a4a; + font-size: 14px; + margin-left: 4px; + } + } + .user-medal { + margin-right: 18px; + .medal-icon { + width: 44px; + height: 44px; + } + } + .user-avatar-block { + display: flex; + align-items: center; + margin-right: 18px; + .user-avatar { + width: 36px; + height: 36px; + border-radius: 50%; + margin-right: 8px; + } + .user-name { + color: #222; + font-size: 16px; + font-weight: 500; + margin-right: 4px; + } + .dot { + color: #d1d1d1; + margin: 0 8px; + font-size: 18px; + } + .user-title { + background: #ede6ff; + color: #a97cff; + border-radius: 8px; + padding: 2px 10px; + font-size: 15px; + margin-left: 2px; + } + } + .user-intimacy { + color: #bdbdbd; + font-size: 15px; + } + } + + .action-buttons { + display: flex; + gap: 24px; + margin-top: 10px; + .action-btn-group { + display: flex; + flex-direction: column; + align-items: center; + .el-button { + width: 140px; + height: 40px; + font-size: 16px; + border-radius: 4px; + margin: 0; + font-weight: 500; + } + .diamond-icon { + width: 28px; + height: 18px; + margin-top: 4px; + } + .reward-btn { + color: #0A2463; + border: 1.5px solid #0A2463; + background: #fff; + } + .add-to-shelf-btn { + background: #FF7C6A; + color: #fff; + border: none; + } + .add-to-shelf-btn.in-shelf { + background: #fff; + color: #FF7C6A; + border: 1.5px solid #FF7C6A; + } + .read-btn { + background: #0A2463; + color: #fff; + border: none; + } + } } - } - } - - .comment-content { - color: #555; - line-height: 1.6; } - } - } - - .comment-form { - .form-title { - font-size: 18px; - margin-bottom: 15px; - color: #333; - } - - .form-footer { - margin-top: 15px; - display: flex; - justify-content: flex-end; - } } - } } -// 推荐书籍 -.recommended-books { - max-width: 1200px; - margin: 30px auto; - padding: 0 20px; - - .section-title { - font-size: 20px; - font-weight: bold; - margin-bottom: 20px; - position: relative; - padding-left: 15px; - - &::before { - content: ''; - position: absolute; - left: 0; - top: 50%; - transform: translateY(-50%); - width: 4px; - height: 18px; - background-color: vars.$primary-color; - border-radius: 2px; - } - } - - .book-list { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 20px; - - @media screen and (max-width: vars.$lg) { - grid-template-columns: repeat(3, 1fr); - } - - @media screen and (max-width: vars.$md) { - grid-template-columns: repeat(2, 1fr); +.book-main-content { + display: flex; + gap: 3px; + margin-top: 20px; + .main-left { + flex: 1.8; + min-width: 0; + display: flex; + flex-direction: column; + gap: 3px; } - - @media screen and (max-width: vars.$sm) { - grid-template-columns: 1fr; + .main-right { + flex: 1; + min-width: 220px; + max-width: 280px; } - } } - \ No newline at end of file + \ No newline at end of file diff --git a/src/views/home/Bookshelf.vue b/src/views/home/Bookshelf.vue new file mode 100644 index 0000000..3f12267 --- /dev/null +++ b/src/views/home/Bookshelf.vue @@ -0,0 +1,269 @@ + + + + + \ No newline at end of file diff --git a/src/views/home/category.vue b/src/views/home/category.vue new file mode 100644 index 0000000..4804131 --- /dev/null +++ b/src/views/home/category.vue @@ -0,0 +1,304 @@ + + + + + diff --git a/src/views/home/ranking.vue b/src/views/home/ranking.vue new file mode 100644 index 0000000..8d0c394 --- /dev/null +++ b/src/views/home/ranking.vue @@ -0,0 +1,376 @@ + + + + +