OVA Cotton Candy Sister Left Rest Bus 2 Little Sister Friend Left Rest Bus Sister Left Rest Bus","lastmod":"2026-07-11","duration":"16:08","url":"/play/19162655.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZTJjOTU5YTkzZTUwNWY1OGM1MTFkM2MzOTBmZDUzYTguanBn.cache","vod_id":19140337,"title":"Vớ đen, ngực khủng, lẳng lơ, rên rỉ, tán tỉnh, tương tác, cưỡi dương vật giả, quan hệ tình dục.","lastmod":"2026-01-26","duration":"03:13:16","url":"/play/19140337.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZDE0MGJkNzVkNjhjNjJmNTE4NDE1MDA2OTc0OGQ0MWQuanBn.cache","vod_id":18947229,"title":"Mới đây, ngôi sao Weibo Xiaoyounu [Cai Tou Miao Miao] hóa trang thành một nữ tu sĩ khêu gợi với vòng một và vòng ba đồ sộ, dùng đạo cụ để thủ dâm, liên tục xuất tinh và thốt ra những lời tục tĩu như \"Anh ơi, làm em đi!\". Bộ ảnh gồm 55 bức ảnh khêu gợi, 1V.","lastmod":"2025-12-14","duration":"00:19:25","url":"/play/18947229.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvNWQyNjA2YTlhMTRjZDI2NjdiNTg4MDY0OTViNzJmZjYuanBn.cache","vod_id":19159432,"title":"Hãy dùng quyền lực để cưỡng hiếp dã man một cô gái điếm 19 tuổi.","lastmod":"2026-05-22","duration":"01:09:53","url":"/play/19159432.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMTUvNzQ5MzBiN2Y5Y2I0MTFlY2ZhYWEzNjg0NjBmODk1NTIuanBn.cache","vod_id":19062649,"title":"Có gì sai khi quá dễ thương chứ? ~Cô nàng tiểu quỷ quyến rũ ông chủ đã có vợ~ Tsukino Kasumi HOMA_145","lastmod":"2025-12-13","duration":"02:23:10","url":"/play/19062649.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZGRlMjJlZTc5NjQwOTcyZTZmZTU4MDIwOTQ3Mzk4MmMuanBn.cache","vod_id":19151562,"title":"[Hoán đổi khuôn mặt] Mai Shiraishi, cảnh xuất tinh không che trên một cô gái lẳng lơ...","lastmod":"2026-04-03","duration":"13:13","url":"/play/19151562.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMWJkNTExMjE5NzQxY2E3MjdlOWI3NmRhYmQwZWM5OWMuanBn.cache","vod_id":19013499,"title":"Mẹ của bạn tôi, người có vòng một đầy đặn, đã quyến rũ tôi.","lastmod":"2025-03-24","duration":"16:32","url":"/play/19013499.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZjczZDkxNjMyYjE3MmI4ZTg0YjJkNjhhYmRiOGIxMDIuanBn.cache","vod_id":19137495,"title":"Một cô gái trẻ tóc hồng rất gợi cảm","lastmod":"2026-01-09","duration":"01:30:38","url":"/play/19137495.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTVlMTlhNWIzNGVkZGZiMjIxZTgwNWFjYzI1MGM0MjYuanBn.cache","vod_id":18977984,"title":"Con nhỏ lẳng lơ, hoàn toàn thỏa mãn với anh trai mình, đã dùng miệng và nuốt trọn dương vật của anh ta suốt thời gian đó, mặt cô ta lộ ra, khiến anh ta xuất tinh liên tục khi anh ta giao cấu và trêu chọc cô ta, xoa bóp ngực cô ta khi anh ta thúc vào cô ta từ bên cạnh và cưỡng hiếp cô ta một cách tàn bạo.","lastmod":"2025-03-23","duration":"01:31:27","url":"/play/18977984.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MTMvOGI1M2NiODMzMDYzODY3Yjk0NjIwN2NkZTA5ZDc0YWIuanBn.cache","vod_id":19033406,"title":"Một ông già đẩy xe đã quan hệ tình dục trực tiếp với một cô gái trẻ béo ú, mông to.","lastmod":"2025-05-13","duration":"02:23","url":"/play/19033406.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNzVmMjdmMmE0YTE0OTQ3Y2E3MWI4NzFlMWIxNTFhN2EuanBn.cache","vod_id":19155382,"title":"Trong tập tiếp theo, một huấn luyện viên nam cơ bắp, dáng người chuẩn mực bị quyến rũ và bị dạy dỗ, thỏa mãn dục vọng trong ký túc xá của mình.","lastmod":"2026-04-27","duration":"16:06","url":"/play/19155382.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMTNhZWE1MGQ5NzYwMDc1Y2RkYmNhNGExMDI3NWNmZDMuanBn.cache","vod_id":19014975,"title":"GANA2065 thật sự rất mềm mại, đây là lần đầu tiên tôi quay phim. Tôi tìm thấy một nữ sinh trường dạy nghề ở Nakano lúc 13:18. Bạn trai tôi vừa chia tay vì anh ấy nói tôi quá bám víu, và tôi đang cảm thấy rất buồn. An ủi cô ấy bằng cơ thể của mình!? Biến thành một con quỷ nhỏ trên giường! Trông có vẻ hơi nặng nề đấy...","lastmod":"2025-03-24","duration":"57:29","url":"/play/19014975.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMGYzMTU0ZTdiZDk5Zjk0NjVmM2MzYzFjZTViNmE1N2MuanBn.cache","vod_id":18969139,"title":"EUMD-004 Một cô nàng thích khổ dâm với vòng một khá lớn! Cô giáo gợi cảm Rino Yuki với vòng một cỡ G quyến rũ bố của học sinh bằng bộ đồ lót sexy.","lastmod":"2025-03-23","duration":"02:16:05","url":"/play/18969139.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvN2YyODkxZWRmZmU3MDRhODRlM2Q4NTg1NjNjMjlmYWIuanBn.cache","vod_id":19136860,"title":"Cốt truyện độc quyền: Những chuyến công tác dài ngày khiến chồng cảm thấy cô đơn và trống rỗng; vợ thay đồ lót gợi cảm để quyến rũ anh thợ sửa ống nước nóng bỏng.","lastmod":"2026-01-05","duration":"23:52","url":"/play/19136860.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvMTc0MWI4N2NkMjcyZjBhM2RlOTQ5ODBjYjI5ZjhkYjMuanBn.cache","vod_id":19064834,"title":"Ông Cang đang ngồi trên ghế sofa khách sạn, vừa chụp xong ảnh một cô bé lẳng lơ với vẻ mặt dâm đãng như đang hét lên: \"Mau cho vào đi!\"","lastmod":"2025-12-14","duration":"16:34","url":"/play/19064834.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNTlhOWYxOWI3ZTVkY2YyOGVlZDJlZDIxNDZiYjlhNzAuanBn.cache","vod_id":19136871,"title":"Người mẫu hàng đầu, một cô nàng lẳng lơ với vẻ ngọt ngào nhưng cũng đầy quyến rũ.","lastmod":"2026-01-05","duration":"01:24:17","url":"/play/19136871.html"}]},
videoTitle: 'Em gái của Lin biến thành một cô nàng lẳng lơ để quyến rũ bạn.',
language: 'vi',
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('Đã sao chép liên kết!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Đã sao chép liên kết!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Đã sao chép liên kết!');
}
}
},
// 切换布局
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=/`;
}
};
}