Skip to content

Commit 7bb70bb

Browse files
committed
修复狸豆页面
1 parent c3433c3 commit 7bb70bb

8 files changed

Lines changed: 136 additions & 74 deletions

File tree

docs/.vuepress/client.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { defineClientConfig } from '@vuepress/client'
2-
// import CustomLayout from './CustomLayout.vue'
2+
//element plus 组件全局导入。还有默认/暗黑模式的样式
33
import ElementPlus from 'element-plus'
44
import 'element-plus/dist/index.css';
5+
import 'element-plus/theme-chalk/dark/css-vars.css'
6+
57
import EmptyLayout from './layouts/EmptyLayout.vue'
68

79

docs/.vuepress/components/PokopeaMain.vue

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,24 @@
11
<template>
2-
<el-space fill direction="vertical" :size="24" alignment="center" style=" width:100%; padding:20px;">
3-
4-
<!-- <el-collapse>
5-
<el-collapse-item>
6-
<template #title>
7-
<div style="width:100%;">筛选条件</div>
8-
</template>
9-
<FilterOptions v-model="filterData" :onSubmit="doFilter" :unmodifiedVideos="videos.orignal" />
10-
</el-collapse-item>
11-
</el-collapse> -->
2+
<el-space fill direction="vertical" :size="24" alignment="center" style=" width:100%; padding:10px;">
123

134
<!-- 工具菜单 -->
145
<ToolMenus />
156

16-
177
<!-- 视频列表 -->
18-
<el-row class="video-list">
19-
<el-col :xs="12" :sm="12" :md="8" :lg="6" v-for="video in paginatedVideos" :key="video.video_id"
20-
class="video-card-col">
8+
<el-row :gutter="8" class="video-list">
9+
<el-col :xs="12" :sm="12" :md="8" :lg="6" style="padding-bottom: 8px;"
10+
v-for="video in paginatedVideos" :key="video.video_id">
2111
<el-card shadow="hover">
22-
<div style="position: relative;">
12+
<div class="card-img-wrapper">
2313
<img :src="`https://i.ytimg.com/vi/${video.video_id}/mqdefault.jpg`" alt="thumbnail" loading="lazy" />
24-
<div class="card-bottom-shadow">
14+
<div class="card-img-bottom-shadow">
2515
<el-row>
2616
<el-col :span="12">{{ formatDate(video.published_at) }}</el-col>
2717
<el-col :span="12" style="text-align: end;">{{ formatDuration(video.duration) }}</el-col>
2818
</el-row>
2919
</div>
3020
</div>
31-
<div style="padding: 10px 6px 0px 6px;">
21+
<div style="padding: 6px 6px 0px 6px;">
3222
<h3 :title="video.title">{{ video.title }}</h3>
3323
<el-text size="small" line-clamp="1" truncated>{{ video.channel_title }}</el-text>
3424
</div>
@@ -47,21 +37,20 @@
4737
</el-col>
4838
</el-row>
4939

50-
<!-- 分页 -->
40+
<!-- 分页 这个宽度怎么这么长。。。 -->
5141
<div class="width-center">
5242
<el-pagination v-model:current-page="currentPage" :page-size="pageSize" :total="videos.filtered.length"
53-
layout="prev, pager, next" background size="default" />
43+
layout="pager" :pager-count="5" background :size="paginationSize" />
5444
</div>
5545

46+
<!-- 操作按钮点击后弹窗 -->
47+
<ActionDialog v-model="dialogInfo.visible">
48+
<ActionYt v-if="dialogInfo.type === 'Yt'" :video_id="dialogInfo.videoData.video_id" />
49+
<ActionBili v-else-if="dialogInfo.type === 'Bili'" :video_list="dialogInfo.videoData.zh!" />
50+
<ActionSub v-else-if="dialogInfo.type === 'Sub'" :video="dialogInfo.videoData" />
51+
<ActionInfo v-else-if="dialogInfo.type === 'Info'" :video="dialogInfo.videoData" />
52+
</ActionDialog>
5653
</el-space>
57-
58-
<!-- 操作按钮点击后弹窗 -->
59-
<ActionDialog v-model="dialogInfo.visible">
60-
<ActionYt v-if="dialogInfo.type === 'Yt'" :video_id="dialogInfo.videoData.video_id" />
61-
<ActionBili v-else-if="dialogInfo.type === 'Bili'" :video_list="dialogInfo.videoData.zh!" />
62-
<ActionSub v-else-if="dialogInfo.type === 'Sub'" :video="dialogInfo.videoData" />
63-
<ActionInfo v-else-if="dialogInfo.type === 'Info'" :video="dialogInfo.videoData" />
64-
</ActionDialog>
6554
</template>
6655

6756
<script setup lang="ts">
@@ -115,6 +104,8 @@ const paginatedVideos = computed<YtVideo[]>(() => {
115104
return videos.value.filtered.slice(start, end)
116105
});
117106
107+
/** 分页组件的大小 onMount时检测窗口宽度如果过小就改成 small*/
108+
let paginationSize = ref('default')
118109
119110
// 视频卡片点击事件
120111
const card_action_click = (name: ActionType, video: YtVideo) => {
@@ -148,27 +139,31 @@ const fetchVideos = async () => {
148139
149140
onMounted(async () => {
150141
fetchVideos();
142+
paginationSize.value = window && window.innerWidth < 768 ? 'small' : 'default'
151143
});
152144
153145
154146
</script>
155147

156148

157149
<style scoped>
150+
@import './pokopea/style.css';
151+
158152
.video-list {
159153
width: 100%;
160154
}
161155
162-
.video-card-col {
163-
padding: 10px;
156+
.video-list .el-card {
157+
--el-card-padding: 0px;
164158
}
165159
166-
.el-card {
167-
--el-card-padding: 0px;
160+
.video-list .el-card:hover,
161+
.video-list .el-card:focus {
162+
box-shadow: var(--el-box-shadow-dark);
168163
}
169164
170165
/* 视频标题 */
171-
.el-card h3 {
166+
.video-list .el-card h3 {
172167
all: unset;
173168
font-size: 15px;
174169
/* margin: 10px 6px 10px 6px; */
@@ -187,23 +182,29 @@ onMounted(async () => {
187182
188183
}
189184
190-
.el-card img {
191-
width: 100%;
192-
height: auto;
185+
.video-list .card-img-wrapper {
186+
position: relative;
193187
/* 图片未加载时也会留出高度 */
194188
aspect-ratio: 16 / 9;
195189
}
196190
197-
.card-bottom-shadow {
191+
192+
.video-list .el-card img {
193+
width: 100%;
194+
height: auto;
195+
196+
}
197+
198+
.card-img-bottom-shadow {
198199
position: absolute;
199200
bottom: 0;
200201
left: 0;
201202
width: 100%;
202-
height: 38px;
203+
height: 42px;
203204
font-size: 13px;
204205
line-height: 18px;
205206
z-index: 2;
206-
padding: 16px 6px 6px 6px;
207+
padding: 16px 10px 10px 10px;
207208
background-image: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.8) 100%);
208209
color: #fff;
209210
opacity: 1;
@@ -219,13 +220,11 @@ onMounted(async () => {
219220
justify-content: center;
220221
transition: box-shadow 0.3s ease;
221222
/* 添加过渡效果 */
222-
223223
}
224224
225-
226225
.card-footer .el-col:hover,
227226
.card-footer .el-col:active {
228-
box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
227+
box-shadow: var(--el-box-shadow);
229228
/* 添加灰色阴影 */
230229
cursor: pointer;
231230
/* 鼠标悬停时显示手型 */
@@ -242,6 +241,9 @@ onMounted(async () => {
242241
margin: auto;
243242
}
244243
244+
245+
246+
245247
.width-center {
246248
display: flex;
247249
justify-content: center;

docs/.vuepress/components/pokopea/ActionDialog.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<el-dialog v-model="visible" class="action-dialog" fullscreen destroy-on-close>
2+
<el-dialog v-model="visible" class="ppk-action-dialog" fullscreen destroy-on-close>
33
<slot></slot>
44
</el-dialog>
55
</template>
@@ -15,20 +15,20 @@ const visible = defineModel<Boolean>({ required: true, default: false, })
1515
所以这部分写成全局样式 -->
1616
<style>
1717
/* 点击卡片按钮后显示的弹窗 */
18-
.action-dialog {
18+
.ppk-action-dialog {
1919
display: flex;
2020
flex-direction: column;
2121
}
2222
23-
.action-dialog .el-dialog__header {
23+
.ppk-action-dialog .el-dialog__header {
2424
/* 确保高度不受下面挤压 */
2525
flex-shrink: 0;
2626
margin-bottom: 20px;
2727
2828
}
2929
3030
31-
.action-dialog .el-dialog__body {
31+
.ppk-action-dialog .el-dialog__body {
3232
/* 占据剩余空间 */
3333
flex-grow: 1;
3434
display: flex;
@@ -39,7 +39,7 @@ const visible = defineModel<Boolean>({ required: true, default: false, })
3939
此方法需要iframe的父布局是display: flex。本vue内只能设置body为flex
4040
如果子组件中dialog不是直接在template下则需要手动将其父布局设置为flex
4141
*/
42-
.action-dialog iframe {
42+
.ppk-action-dialog iframe {
4343
/* 填满宽度。iframe宽高比无所谓,内部视频元素会自动按比例缩放 */
4444
width: 100%;
4545
height: auto;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<template>
2+
<el-button circle size="large" @click="toggleDark()">
3+
<el-icon :size="24" v-if="isDark">
4+
<svg darkmode xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"
5+
fill="#5f6368">
6+
<path
7+
d="M480-120q-150 0-255-105T120-480q0-150 105-255t255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q55 0 101-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120Zm0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-78 32-126.5 102T200-480q0 116 82 198t198 82Zm-10-270Z" />
8+
</svg>
9+
</el-icon>
10+
<el-icon :size="24" v-else>
11+
<svg lightmode xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"
12+
fill="#5f6368">
13+
<path
14+
d="M480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Zm0 80q-83 0-141.5-58.5T280-480q0-83 58.5-141.5T480-680q83 0 141.5 58.5T680-480q0 83-58.5 141.5T480-280ZM200-440H40v-80h160v80Zm720 0H760v-80h160v80ZM440-760v-160h80v160h-80Zm0 720v-160h80v160h-80ZM256-650l-101-97 57-59 96 100-52 56Zm492 496-97-101 53-55 101 97-57 59Zm-98-550 97-101 59 57-100 96-56-52ZM154-212l101-97 55 53-97 101-59-57Zm326-268Z" />
15+
</svg>
16+
</el-icon>
17+
</el-button>
18+
19+
</template>
20+
<script setup lang="ts">
21+
import { useDark, useToggle } from '@vueuse/core'
22+
const isDark = useDark()
23+
const toggleDark = useToggle(isDark)
24+
25+
</script>
26+
<style scoped>
27+
@import './style.css';
28+
.el-button {
29+
border: 0px;
30+
}
31+
</style>
Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
<template>
22
<div class="content-width-center">
3-
<el-space >
43
<el-text>外部链接:</el-text>
5-
<el-link href="https://zh.moegirl.org.cn/甲贺流忍者Ponpoko" target="_blank">萌娘百科: 甲贺流忍者Ponpoko</el-link>
6-
<el-link href="https://youtube.com/@pokopea" target="_blank">YouTube: ぽんぽこちゃんねる</el-link>
7-
</el-space>
4+
<el-link href="https://zh.moegirl.org.cn/甲贺流忍者Ponpoko" target="_blank">萌娘百科: 甲贺流忍者Ponpoko</el-link>
5+
<el-link href="https://youtube.com/@pokopea" target="_blank">YouTube: ぽんぽこちゃんねる</el-link>
86
</div>
97
</template>
108

119
<style scoped>
12-
.content-width-center {
13-
display: flex;
14-
flex-direction: column;
15-
align-items: center;
16-
}
10+
@import './style.css';
1711
</style>

docs/.vuepress/components/pokopea/ToolMenus.vue

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,28 @@
22
<!-- 父布局是flex-grow:1 填满宽度 -->
33

44
<div class="content-width-center toolmenu-root">
5-
<div style="display: flex; justify-content: center;">
6-
<el-space alignment="center">
7-
<el-text>工具栏:</el-text>
8-
<el-segmented v-model="currTool" :options="toolOptions" @change="onChange">
9-
<template #default="scope: { item: ToolOption }">
10-
<el-icon size="20" style="min-width: 40px;">
11-
<component :is="scope.item.icon" />
12-
</el-icon>
13-
</template>
14-
</el-segmented>
15-
</el-space>
5+
<!-- 用space-between 使子布局一个靠左一个靠右。只能有两个子布局 -->
6+
<div class="titlebar">
7+
<el-text style="font-size: 25px;">狸猫花生</el-text>
8+
<ToolDarkMode />
9+
</div>
10+
11+
<div class="content-width-center">
12+
<el-segmented v-model="currTool" :options="toolOptions" @change="onChange">
13+
<template #default="scope: { item: ToolOption }">
14+
<el-icon size="20" style="min-width: 30px;">
15+
<component :is="scope.item.icon" />
16+
</el-icon>
17+
</template>
18+
</el-segmented>
1619
</div>
1720

1821
<!-- 具体的工具内容 -->
1922
<div class="content-width-center">
2023
<!-- <slot :currToolValue="currTool"></slot> -->
2124

2225
<el-collapse-transition>
23-
<div style="height: 10px;" v-show="currTool !== 'none'" ></div>
26+
<div style="height: 10px;" v-show="currTool !== 'none'"></div>
2427
</el-collapse-transition>
2528

2629
<el-collapse-transition>
@@ -29,7 +32,7 @@
2932

3033
<!-- 筛选选项 -->
3134
<el-collapse-transition>
32-
<FilterOptions v-show="currTool === 'filter'" />
35+
<FilterOptions v-show="currTool === 'filter'" />
3336
</el-collapse-transition>
3437
</div>
3538

@@ -49,6 +52,7 @@ import { ToolMenuValue } from './types';
4952
import { Link, Filter, CircleClose, } from '@element-plus/icons-vue'
5053
import FilterOptions from './ToolFilter.vue';
5154
import ToolInfoLink from './ToolInfoLink.vue';
55+
import ToolDarkMode from './ToolDarkMode.vue';
5256
type ToolOption = { label: string, value: ToolMenuValue, icon: any }
5357
5458
const currTool = defineModel<ToolMenuValue>({ default: 'none' })
@@ -79,15 +83,25 @@ const onChange = (val: ToolMenuValue) => {
7983
8084
</script>
8185
<style scoped>
82-
.content-width-center {
86+
@import './style.css';
87+
88+
.toolmenu-root>* {
89+
flex-grow: 1;
90+
width: 100%;
91+
}
92+
93+
.titlebar {
8394
display: flex;
84-
flex-direction: column;
8595
align-items: center;
96+
justify-content: space-between;
97+
margin: 10px;
8698
}
8799
88-
.toolmenu-root>* {
100+
.titlebar-left {
89101
flex-grow: 1;
90-
width: 100%;
91102
}
92103
104+
.titlebar-right {
105+
margin-left: auto;
106+
}
93107
</style>

docs/.vuepress/components/pokopea/style.css

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,9 @@
33
display: flex;
44
flex-direction: column;
55
align-items: center;
6-
}
6+
}
7+
8+
/* 深色模式下图标颜色 */
9+
.dark svg {
10+
fill: #bbbbbb;
11+
}

0 commit comments

Comments
 (0)