Câu chuyện về một chú chó được tái sinh thành (một nữ sinh có vòng một như thiên thần) ひよこ","lastmod":"2026-07-11","duration":"01:59:05","url":"/play/19166348.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvY2NhNjNjYmE3YTMwNDY4NjFkNWUzZjJkMTFlYjc4MGYuanBn.cache","vod_id":18970457,"title":"CESD-502 Kagami Suka, người mẹ kế ngực khủng trở thành nô lệ của con trai mình và bị xâm hại tình dục.","lastmod":"2025-03-23","duration":"02:06:20","url":"/play/18970457.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmE1MjMxZTFjN2IzNmMyZWQzNDZmOGJmNDQxMGQ2N2IuanBn.cache","vod_id":18968250,"title":"DOCP-076 Khi tôi lén nhìn người đẹp quyến rũ trong căn phòng bên kia đường, cô ấy nhận thấy ánh mắt của tôi và bắt đầu quyến rũ tôi, khoe bộ ngực đồ sộ của mình...2","lastmod":"2025-03-23","duration":"04:05:18","url":"/play/18968250.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjMvOGY0MzgzZTAxNGRmYmU5ZGMxOTg0YzI3MjZmNjkwZGEuanBn.cache","vod_id":19164927,"title":"Một nữ sinh viên đại học độc thân, ngây thơ, ngực đầy đặn sống một mình ở Tokyo với ý thức an toàn thấp đã bị xâm nhập trái phép, bị cưỡng hiếp khi bất tỉnh và bị cưỡng hiếp trong lúc bị theo dõi. OPPAI","lastmod":"2026-07-11","duration":"02:32:35","url":"/play/19164927.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvM2IzNDcyOGQzNzFmYWFlNzJlMmE3NzQzMWNmZWRkMjMuanBn.cache","vod_id":18973404,"title":"Chị dâu và anh rể tôi đã thân mật với nhau trong lúc chị gái tôi đi vắng. Da của chị dâu tôi mịn màng và trắng hồng quá!","lastmod":"2025-03-23","duration":"00:30:10","url":"/play/18973404.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvMWVjNmM1MzEwMjEzNTVlNTYzOTE5YjcyOTk2YzVjMWEuanBn.cache","vod_id":19065941,"title":"Quan hệ loạn luân trong khi bơi lội thất bại _ Tỉnh dậy giữa chừng _ Nhà cửa hỗn loạn _ Hai chị gái bị ép phải tiếp tục hoạt động tình dục _ Diễn viên không rõ danh tính HRSM_063","lastmod":"2025-12-14","duration":"02:35:13","url":"/play/19065941.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOTIxODFlNjA2NzJmZDM3YTYwN2NjNTU1ZWIwOGUyMTEuanBn.cache","vod_id":18996407,"title":"Nhìn thấy bộ đồ ngủ gợi cảm của em gái trên giường, tôi không thể cưỡng lại được... \"Bộ phim Gia đình Huyền ảo\" Phần 6: Tập 7.","lastmod":"2025-12-14","duration":"17:25","url":"/play/18996407.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MjkvZmE3MDdkNjgyNGRjYmQ5MjhkNGVhYmYxMmY2NjU0MTkuanBn.cache","vod_id":19055079,"title":"Bạo dâm và tra tấn, một bữa tiệc chợ nô lệ, 12 cô gái ngực khủng bị giam giữ 4 giờ. Nữ diễn viên vô danh BXX015","lastmod":"2025-09-28","duration":"03:59:19","url":"/play/19055079.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNGYwMzliZGU1NjljZjE1ZTQyMjE5MDFkODgxYmI1NTguanBn.cache","vod_id":18982617,"title":"KFNE-091: Một video sex riêng tư được quay lén của một phụ nữ nghiệp dư có vòng ngực lớn. Phát tán trái phép phiên bản đặc biệt này, để lộ khuôn mặt không đứng đắn của người phụ nữ!","lastmod":"2025-03-23","duration":"01:38:32","url":"/play/18982617.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MjgvMTFiOTk3MzdkYTFiNzkzOTE4YTE0ZDAwMGIyN2M5NDEuanBn.cache","vod_id":19044479,"title":"[Tiếng Trung] ROYD197 \"Giờ tôi chỉ có thể yêu thầy giáo của mình thôi...\" Một mỹ nhân thuần khiết, ngực đầy đặn trêu chọc thầy giáo, khiến lý trí người lớn của tôi tan vỡ.","lastmod":"2025-07-27","duration":"02:08:20","url":"/play/19044479.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODliNmI5MjlmOGIzYjVkNzQ0ZjNhYmE3NGEzOTliYjcuanBn.cache","vod_id":18989000,"title":"[Bánh trái cây] Bà mẹ kế ngực bự và người chị gái quyến rũ, chàng trai trẻ đã quan hệ với cả ba người! \"Lên\".","lastmod":"2025-03-23","duration":"32:37","url":"/play/18989000.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MDMvOGY2M2QwMDg4NWU4NmI1NGZiY2UzMWQ1YTBlNDViMTMuanBn.cache","vod_id":19031756,"title":"Sự dâm dục của mẹ kế tôi quá mạnh mẽ! Bà ấy có bộ ngực và vòng mông rất lớn! (Matsumoto Nanami, EKDV-628-C)","lastmod":"2025-05-03","duration":"02:20:47","url":"/play/19031756.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMDBlYWVmODJkZTc0MjdlMjZmMDMxMzY4ZDljNGIwYmYuanBn.cache","vod_id":18977808,"title":"MDVHJ-092 \"Bố chồng, xin hãy tha thứ cho con nếu bố làm thế này nữa...\" Người vợ đạt cực khoái hết lần này đến lần khác với dương vật vô độ của bố chồng... Chương Sáu: Sasaki Natsuna","lastmod":"2025-12-14","duration":"01:50:06","url":"/play/18977808.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZDk3NDYwNTkwNmU3NzIwOWMzMjhjZDg3NzgxNDBiNDUuanBn.cache","vod_id":19135211,"title":"Bộ ngực của người phụ nữ ngực lớn này thực sự rất bắt mắt.","lastmod":"2025-12-25","duration":"01:03:48","url":"/play/19135211.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZGZmZTc4NTBiZWI2ZDNkZTg2MmNhZmZhNWE2MjhhN2EuanBn.cache","vod_id":19151459,"title":"Kết hôn với vợ được 10 năm. Cuối cùng, sau 10 năm \"huấn luyện\", anh ta đã thành công trong việc khiến cô con gái riêng quyến rũ của mình hoàn toàn hiểu anh ta trong chuyến thăm ba ngày của vợ đến nhà bố mẹ cô ấy. PPPE-384","lastmod":"2026-04-03","duration":"02:26:02","url":"/play/19151459.html"}]},
videoTitle: 'Nếu có thời gian rảnh, tôi sẽ dùng nó để thỏa mãn dục vọng của mình với cô hàng xóm ngực khủng Kirito Saya (BF-680-C).',
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=/`;
}
};
}