Phòng tắm siêu hẹp và người đẹp quyến rũ quan hệ tình dục hai lần liên tiếp","lastmod":"2026-07-11","duration":"13:11","url":"/play/19163933.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmRjMmY0Zjk5ZjE1MTkwZjM1MWE1YTI0Mzg4Yjk3MjEuanBn.cache","vod_id":18948303,"title":"IENE-678 Shibuya Kaho uống tinh dịch và quan hệ tình dục từ sáng đến tối.","lastmod":"2025-12-14","duration":"02:52:29","url":"/play/18948303.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMmJiMjEwZmNhNDEzMWIwZTEyMGQyOWFmMjkzZmE2NTIuanBn.cache","vod_id":19139367,"title":"4k - Vậy là bạn định chế nhạo tôi à? Cô gái tóc vàng cưỡi lên người cô ấy cho đến khi cô ấy xuất tinh [littlebuffbabe]","lastmod":"2026-01-20","duration":"19:25","url":"/play/19139367.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYWNlOWVkNjAwYWU0NDI3MGJiMTc3YmM3ZmE0NGY2OTcuanBn.cache","vod_id":18924227,"title":"FC2PPV-1205683 (có hiệu ứng làm mờ) Thiên thần quyến rũ với vòng một I-cup lại tái xuất!","lastmod":"2025-12-14","duration":"01:18:20","url":"/play/18924227.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzUwYjFiM2NhZjgxOGUxZThjYzc4ZTM5NGIwN2YzM2EuanBn.cache","vod_id":18974983,"title":"[Phụ đề tiếng Trung] YMDD-321 Kênh hơi nước [Cô gái suối nước nóng] Cô gái khỏa thân, thân hình gợi cảm thực hiện hành vi quan hệ tình dục bằng miệng ngẫu hứng trong bồn tắm. Một buổi tắm tuyệt vời, bao gồm cả kế hoạch nuốt tinh dịch.","lastmod":"2025-12-14","duration":"02:37:27","url":"/play/18974983.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYjYwYTQ5NjJlNmJjZTQxMTRkYTNjYTk0YmE0NDg0MWEuanBn.cache","vod_id":18979384,"title":"[Phụ đề tiếng Trung] ROE-139 MONROE Độc quyền: Một phụ nữ đã kết hôn với vẻ quyến rũ trưởng thành và nét duyên dáng đáng yêu - Lệnh cấm \"bánh kem\" được dỡ bỏ!! Mẹ xinh đẹp của bạn tôi, tôi tận hưởng những ngày hôn hít và mang thai.","lastmod":"2025-12-14","duration":"01:55:13","url":"/play/18979384.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MTYvOTdhNjY0ZWNkY2JjMTQ4NTljNzQyOTEyN2IzZWJjYjcuanBn.cache","vod_id":19029174,"title":"Người cha không về nhà muộn vào ban đêm chờ đợi mong muốn của mẹ kế cho đến tận sáng sớm. Kato Ayano VENX-183-C.","lastmod":"2025-04-16","duration":"01:34:08","url":"/play/19029174.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZGI0MGVkMjM1YzJkODI4MWI4YTM1Mjg0OTZhYWFlMTEuanBn.cache","vod_id":18955867,"title":"[Phụ đề tiếng Trung] MEAT-043 Nhà vệ sinh sữa của mọi người, Nanae-sensei, cô giáo năng động với vòng một cỡ I [Trải nghiệm quan hệ tình dục bằng ngực với 500 người, xuất tinh 2000 lần] 30 tuổi, lần đầu tiên sau 12 năm","lastmod":"2025-12-14","duration":"02:27:46","url":"/play/18955867.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTQ1MDQyZGMyMTMzYjlmYTQ1MzIyYjUwYzg1NWVmNzAuanBn.cache","vod_id":19015042,"title":"GEKI038 \"Tôi chỉ từng có quan hệ với anh trai mình...\" Một cựu võ sĩ từng đoạt giải tại Giải vô địch Kanto đã thẳng thắn thú nhận về trải nghiệm loạn luân đầu tiên mà anh không thể kể cho ai biết!! Một âm đạo nhạy cảm, chưa từng biết đến người đàn ông nào khác ngoài anh trai mình, đã trải qua nhiều cực khoái lần đầu tiên khi một dương vật lớn được đưa vào và cô bị điều khiển một cách tàn bạo bởi những cú xuất tinh liên tục như pít-tông! ... Sakuma Mimi.","lastmod":"2025-03-24","duration":"01:10:03","url":"/play/19015042.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjg0ZjMzOTU5ZGZlNjZmMDNjNjMzNDRiMzMwYjI2NWMuanBn.cache","vod_id":19011534,"title":"GDHH178 \"Đồ ngốc!\" Nó đang đập vào ngực cậu kìa! \"Ôi! Anh trai mình to quá...\" Tuyệt vời! Cậu nhỏ của mình cương cứng lên khi mình đang ngâm mình một mình trong bồn tắm với cô em gái quyến rũ của mình! Em gái mình là...\"","lastmod":"2025-03-24","duration":"03:52:55","url":"/play/19011534.html"}]},
videoTitle: 'Tôi đã triệu hồi một người phụ nữ xinh đẹp, quyến rũ, người đã khiến tôi xuất tinh cho đến khi cạn kiệt hoàn toàn tinh dịch.',
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=/`;
}
};
}