The story of a dog who was reincarnated as (an angelic, busty female student) ひよこ","lastmod":"2026-07-11","duration":"01:59:05","url":"/play/19166348.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNmVjNTZmN2JlNWZiYjBkZWQ4ODU4OTM2MDhkZTJiNTAuanBn.cache","vod_id":18935425,"title":"FC2PPV-1154180 18-year-old extremely loli female college student and her uniform day","lastmod":"2025-03-22","duration":"00:27:06","url":"/play/18935425.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvY2NhNjNjYmE3YTMwNDY4NjFkNWUzZjJkMTFlYjc4MGYuanBn.cache","vod_id":18970457,"title":"CESD-502 Kagami Suka, the busty stepmother who becomes her son's slave and is penetrated.","lastmod":"2025-03-23","duration":"02:06:20","url":"/play/18970457.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvOWI4NDE2MzIxMTZkNGRkOTk2YTM2YmMwNjdmZGUwZTAuanBn.cache","vod_id":19155091,"title":"First photoshoot for a married woman: Miho Sanjo, Central Village","lastmod":"2026-04-25","duration":"02:00:36","url":"/play/19155091.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTBmOGU2MGQyNWI2OGMwYjg3ZGY0Zjg0Mjc0NjNjOGQuanBn.cache","vod_id":19022313,"title":"BF590, a female college student in a suit who is currently employed, is subjected to a super M-style assault and internal ejaculation SEX by Wakamiya Uhono.","lastmod":"2025-03-24","duration":"01:59:55","url":"/play/19022313.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MjcvOWJlMDZhOTI2NjRlOTA4NzAwOTc2ODVmMWY0OGRjMzkuanBn.cache","vod_id":19040085,"title":"IPZZ562 “As a woman, it’s a mistake to come here alone…” A female college student’s words were passed around among her classmates at a party at her home.","lastmod":"2025-06-26","duration":"02:26:00","url":"/play/19040085.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNGMxMjI0ODUzYjJkMTg0MzdlZTNmMTVjMmRhYzZhODcuanBn.cache","vod_id":18955764,"title":"[Sex Leaked❤️Top Quality Leak] Taiwan's Big Stud 'Xinyi Zhao Youting' Hooks Up with a Slim-Waisted, Breasty, White-Tiered Female College Student in Dark, High-Energy, Full-Scale Sex, High-Definition 720P Original Version, No Watermark","lastmod":"2025-12-14","duration":"00:32:03","url":"/play/18955764.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjMvOGY0MzgzZTAxNGRmYmU5ZGMxOTg0YzI3MjZmNjkwZGEuanBn.cache","vod_id":19164927,"title":"A single, unsophisticated, busty college student living alone in Tokyo with low safety awareness is illegally intruded upon, raped while unconscious, and raped during stalking. OPPAI","lastmod":"2026-07-11","duration":"02:32:35","url":"/play/19164927.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMDQvZDM0N2U5NWMzMjI3MDA4Nzk2ZjMyMWQwM2Y1Mzk0NWYuanBn.cache","vod_id":19061133,"title":"Look at my black stockings, I'm getting excited! My beautiful female boss gently guided me through her black stockings! Unknown actor SW_972","lastmod":"2025-11-03","duration":"03:36:10","url":"/play/19061133.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTk3YzliYjQ5MDA0YWEyMDQwNzRjZDBmM2QyM2YyYjMuanBn.cache","vod_id":18946003,"title":"SSNI-534 Shion Yumi, a female student who can't resist pressure and can't say no.","lastmod":"2025-03-22","duration":"02:35:51","url":"/play/18946003.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMGI4YTlkMzY2MTZkNTcyYjExYzg3Y2E5NTZiMGI3ZWMuanBn.cache","vod_id":18991899,"title":"A stunning college beauty [176cm tall elementary school girl] took off her bra and exposed her breasts in class while other students were playing on their phones. Back in the dorm, she pulled up the mosquito net, stripped naked, and revealed her pink vulva. The real scene is even more exciting!","lastmod":"2025-12-14","duration":"03:17:37","url":"/play/18991899.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMDQ0MjcwZGEwY2U0YjM2OTk1NTA3NDQ4MWMzZGI1MmQuanBn.cache","vod_id":18940994,"title":"A tutorial on breast massage and milk expression techniques was given, with a charming older woman personally demonstrating how to express milk for a young woman with blocked milk ducts. The students watching attentively learned from the demonstration, but were told not to lick the milk!","lastmod":"2025-12-14","duration":"00:01:00","url":"/play/18940994.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODYwYzk4MGIwZmQwNTViNmZlNDhkZjA5M2RiOTM2NjAuanBn.cache","vod_id":18988877,"title":"413INST-018 First-person perspective of having an affair with a busty female college student after school: When I opened her untouched vagina, her breasts trembled, and she had a wild orgasm! I gently widened her young opening, \"It feels better than my boyfriend!\" I inserted my penis into her loose uterus and ejaculated wildly!","lastmod":"2025-12-14","duration":"01:02:29","url":"/play/18988877.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODgxZTYwOTAwMWU1ZGUyOThiOTllOTgyMGNjYjMyNTAuanBn.cache","vod_id":18997944,"title":"MGT-092 Amateur Pickup on a Street Corner! Volume 67: Earnest Persuasion of a Female College Student. 9","lastmod":"2025-12-14","duration":"04:04:46","url":"/play/18997944.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MTUvNjg1NWNjMGQyM2I5NmIyOWUzMmExMDU2ODVmMWYxYmYuanBn.cache","vod_id":19038396,"title":"Hino, the student council president who founded the new bubble bath club in MIDV737, dresses in sexy clothes and sprays water like crazy! Unlimited ejaculation service.","lastmod":"2025-06-15","duration":"02:32:40","url":"/play/19038396.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvNWY4YmE1NTIwYTIwZjNhZWY5MjE5NmQ0YjAzNDhlYjcuanBn.cache","vod_id":19160024,"title":"A gang of perverts targeted a female college student living alone, breaking into her home and sexually assaulting her. The victim, R.T., was secretly filmed.","lastmod":"2026-05-25","duration":"01:13:03","url":"/play/19160024.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMzAvNzkxZThjZTUwODRlZjRmOWVkOGZmMzhmYTgwMmMyY2EuanBn.cache","vod_id":19060176,"title":"When a huge penis filled her with semen, this hot female student fell in love with deep anal penetration.","lastmod":"2025-10-29","duration":"10:15","url":"/play/19060176.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMTQxYjM3Mjg4YjRhY2RjMTI5ODI1ZWRkZDA2YmNkM2QuanBn.cache","vod_id":18969379,"title":"EBOD-958 A pure and lovely Asian mixed-race girl! Rocket G-cup petite college student E-BODY makes her exclusive AV debut - Sakura Otoka","lastmod":"2025-03-23","duration":"01:59:48","url":"/play/18969379.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNmY1NGE5OTM4MTc3Njg1ZGRiYzFmMmM0MDk3MjJiZDguanBn.cache","vod_id":18977438,"title":"300MIUM-120 A neat-looking and outstanding college girl! She studies hard day and night, aiming to transfer to a top-tier university.","lastmod":"2025-12-14","duration":"01:08:07","url":"/play/18977438.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMWVhNzM2ODFiZmU3ZGMxOGI5N2I1OTcxMzkxMTdkZGUuanBn.cache","vod_id":18932196,"title":"SIRO-1512 Amateur personal shooting and posting. 426 Ayana, 19 years old, student.","lastmod":"2025-12-14","duration":"00:48:26","url":"/play/18932196.html"}]},
videoTitle: 'CAWD051 She looks like that female announcer! University student Kato Iori, who became a hot topic during a beauty pageant, makes her AV debut.',
language: 'en',
dataKey: '01',
loadingPlayer: true,
showShare: false,
pageUrl: '',
// RecommendedMovies 组件状态
isSingleColumn: false,
pageSize: 8,
currentPage: 1,
// 计算属性(使用 getter)
get layoutIconClass() {
return this.isSingleColumn ? 'icon-view-list' : 'icon-grid';
},
get layoutClass() {
return [
'row',
'g-3',
'row-cols-1',
this.isSingleColumn ? '' : 'row-cols-2',
'row-cols-lg-4'
].filter(Boolean).join(' ');
},
// 方法
onAppMounted() {
// 设置页面 URL
this.pageUrl = window.location.href;
// 保存观看历史
this.saveWatchHistory();
// 更新标签统计
if (this.videoData.tag && this.videoData.tag.length > 0) {
this.updateTagStats(this.videoData.tag);
}
// 发送点击统计
this.hitVideoId(this.videoData.id);
// 从 Cookie 读取布局偏好
const layoutCookie = this.getCookie('list_layout');
if (layoutCookie === 'single') {
this.isSingleColumn = true;
}
// 监听 iframe 加载完成,隐藏骨架屏
// 使用 setTimeout 确保 DOM 已完全渲染
setTimeout(() => {
const iframe = document.getElementById('v2-player');
const skeleton = document.getElementById('player-skeleton');
if (iframe && skeleton) {
// 定义隐藏骨架屏的函数
const hideSkeleton = () => {
skeleton.style.transition = 'opacity 0.3s ease';
skeleton.style.opacity = '0';
setTimeout(() => {
skeleton.style.display = 'none';
}, 300);
};
// 检查 iframe 是否已经加载完成
if (iframe.contentDocument || iframe.contentWindow) {
try {
// 如果 iframe 已加载,直接隐藏骨架屏
if (iframe.contentWindow.document.readyState === 'complete') {
setTimeout(hideSkeleton, 500);
return;
}
} catch (e) {
console.log('[Video] 跨域 iframe,无法检查状态:', e.message);
// 跨域情况下无法访问 contentWindow,继续监听 load 事件
}
}
// 监听 load 事件
iframe.addEventListener('load', () => {
console.log('[Video] iframe load 事件触发');
setTimeout(hideSkeleton, 500);
});
// 添加超时保护,确保骨架屏最终会被隐藏
setTimeout(() => {
if (skeleton.style.display !== 'none') {
console.log('[Video] 超时保护触发,强制隐藏骨架屏');
hideSkeleton();
}
}, 5000); // 5秒后强制隐藏
} else {
console.error('[Video] 未找到 iframe 或 skeleton 元素');
}
}, 0);
},
// 随机跳转
async jumpToRandomVideo() {
try {
const response = await fetch(`/api/qun/randomid?t=${Date.now()}`, {
headers: {
'x-data-key': this.dataKey,
'x-api-key': 'dagexxx.com'
}
});
const data = await response.json();
if (data?.status === 1 && data?.data?.id) {
window.location.href = `/${this.language}/play/${data.data.id}.html`;
} else {
console.error('获取随机视频失败:', data?.message || '未知错误');
}
} catch (err) {
console.error('获取随机视频失败:', err);
}
},
// 复制分享链接
copyShareLink() {
const input = this.$refs.shareInput;
if (input) {
input.select();
input.setSelectionRange(0, 99999); // For mobile devices
// 尝试使用现代 API
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(this.pageUrl).then(() => {
alert('Link copied!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Link copied!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Link copied!');
}
}
},
// 切换布局
toggleLayout() {
this.isSingleColumn = !this.isSingleColumn;
this.setCookie('list_layout', this.isSingleColumn ? 'single' : 'multi', 30);
},
// 加载更多
loadMore() {
this.currentPage++;
},
// 保存观看历史
saveWatchHistory() {
try {
const storageKey = 'watchHistory';
let history = JSON.parse(localStorage.getItem(storageKey) || '[]');
// 解码 HTML 实体编码的标题
const decodeHtmlEntities = (text) => {
const textarea = document.createElement('textarea');
textarea.innerHTML = text;
return textarea.value;
};
const video = {
id: this.videoData.id,
title: decodeHtmlEntities(this.videoData.title),
image: this.videoData.images || this.videoData.preview,
duration: this.videoData.duration || ''
};
// 过滤掉已存在的相同 ID 视频
history = history.filter(item => item.id !== video.id);
// 添加新记录到最前面
history.unshift(video);
// 限制最多保存 100 条
if (history.length > 100) {
history = history.slice(0, 100);
}
localStorage.setItem(storageKey, JSON.stringify(history));
} catch (e) {
console.error('Failed to save watch history:', e);
}
},
// 更新标签统计
updateTagStats(tags = []) {
// HTML 实体解码函数
const decodeHtmlEntities = (text) => {
const textarea = document.createElement('textarea');
textarea.innerHTML = text;
return textarea.value;
};
const storageKey = this.dataKey + 'tagWatchStats';
const lastWatchedKey = this.dataKey + 'tagLastWatched';
const raw = localStorage.getItem(storageKey);
const stats = raw ? JSON.parse(raw) : {};
// 解码标签并统计
const decodedTags = tags.map(tag => decodeHtmlEntities(tag));
decodedTags.forEach(tag => {
stats[tag] = (stats[tag] || 0) + 1;
});
localStorage.setItem(storageKey, JSON.stringify(stats));
localStorage.setItem(lastWatchedKey, JSON.stringify(decodedTags));
},
// 点击统计
hitVideoId(id) {
fetch(`/api/qun/hit?type=play&id=${id}`, {
method: 'GET',
headers: {
'x-data-key': this.dataKey,
'x-api-key': 'dagexxx.com'
}
}).catch(err => {
console.error('点击统计失败:', err);
});
},
// Cookie 工具方法
getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
},
setCookie(name, value, days) {
const expires = new Date(Date.now() + days * 864e5).toUTCString();
document.cookie = `${name}=${value}; expires=${expires}; path=/`;
}
};
}