Video chụp ảnh nội y gợi cảm của thành viên nhóm nhạc nữ Hàn Quốc","lastmod":"2026-07-11","duration":"11:24","url":"/play/19165534.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvMGQyZWY4MTIwZTk1MTMwNDRhOGIzY2NjNWZiMGUwMDYuanBn.cache","vod_id":19157885,"title":"Nếu hai người họ hẹn hò… đó sẽ là một ngày tràn ngập tình yêu. Mặc đồ đôi, tắm chung, hôn nhau, một buổi hẹn hò thâu đêm suốt sáng. (Rio Rukawa, Erika Ozaki, 凸凹はぁと)","lastmod":"2026-05-13","duration":"02:23:15","url":"/play/19157885.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZDJhNmUyMTg0ZDdiMTU3OGVmM2FjNTVlOWZiMjQ0MTkuanBn.cache","vod_id":18982977,"title":"MDTM-668 20 cô gái dâm đãng đến nỗi không kịp cởi đồng phục, 5 tiếng đồng hồ","lastmod":"2025-03-23","duration":"05:00:25","url":"/play/18982977.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMDU5NDI3NjM1MjllZmUzMGIyNjY3OThiN2Y3NTQzZTAuanBn.cache","vod_id":18960190,"title":"NPJB-080 Đồng phục cấp độ 18 Quan hệ tình dục với 5 cô gái mặc đồng phục Xuất tinh trong vòng 4 giờ","lastmod":"2025-12-14","duration":"03:56:14","url":"/play/18960190.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNmE3YmQzOTg2N2MzYTQxZDI2MWNkNWIwZmRiMTkyMzEuanBn.cache","vod_id":18993439,"title":"FC2PPV-1245722 [Phép màu tái xuất] [Lộ mặt toàn bộ] ♥ Cựu người mẫu Mana ♥ Bí mật tung video tự sướng do chính mình quay ☆ Không quần lót, tất, đôi chân hình chữ M và âm đạo đầy ham muốn ♥ Làn da bong tróc trong lúc tự sướng! Ngại ngùng nhưng vẫn cực khoái","lastmod":"2025-12-14","duration":"13:14","url":"/play/18993439.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOWNlYjQ5MmY4NzNjZjA1ODA1M2ZlZWYyZDE1YzFjODIuanBn.cache","vod_id":18946294,"title":"Bộ sưu tập video SHIC-188 Sweetheart Daddy (4 giờ)","lastmod":"2025-03-22","duration":"02:01:56","url":"/play/18946294.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODIzZWQxNThkMmY2MWFjYWIwZDE3NjcxMGNlYThjYzAuanBn.cache","vod_id":18966802,"title":"Một bộ sưu tập những người phụ nữ gợi cảm hàng đầu, với khuôn mặt được lộ diện. Mỗi người đều xinh đẹp đến mức được gọi là mỹ nhân thôn quê. Lolita, đeo kính, thuần khiết, quyến rũ, kỹ năng \"oral\" tuyệt vời và những tiếng rên rỉ đầy gợi cảm!","lastmod":"2025-03-22","duration":"00:11:14","url":"/play/18966802.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzFmM2JjOWYyNWJkYjU0M2QxMjNjZWI4YTk4Y2I5ZmEuanBn.cache","vod_id":18951521,"title":"DKSB-057 Một cô gái say xỉn quyến rũ hơn gấp mười lần so với một cô gái bình thường!? Tôi đưa một cô gái say xỉn về nhà, và cuối cùng cô ấy bị tấn công (mồ hôi) Phiên bản đặc biệt 4 giờ","lastmod":"2025-12-14","duration":"01:52:32","url":"/play/18951521.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MTQvZTQwMjk2YjE5YzQ2ZjZlMzAwMzlhMzQ5YjYwYWU1MTQuanBn.cache","vod_id":19042744,"title":"Bộ sưu tập đầy đủ 3D VVA Genshin Impact - Phiên bản dành cho nhà sưu tập","lastmod":"2025-07-13","duration":"48:49","url":"/play/19042744.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMjllMmMxMzQ2ZDgxMGQ4NTliZGYyNmE5NDMzZmExOGUuanBn.cache","vod_id":18971295,"title":"016HEZ-521 [Video tình dục chủ quan] Chuyến đi bắn tinh tục tĩu với anh rể ~ Quan hệ tình dục và xuất tinh với chị dâu ngực khủng tại khách sạn suối nước nóng","lastmod":"2025-03-23","duration":"04:09:10","url":"/play/18971295.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOWFkOWNkNzViMTIyYzRlMjEwMWRhYjNjMzExNjg3MWYuanBn.cache","vod_id":18928441,"title":"APNS-165 Tôi vừa nhận được một đĩa DVD chứa video ghi lại cảnh vị hôn phu mất tích của tôi bị cưỡng hiếp tập thể... Beauty Roll 05","lastmod":"2025-12-14","duration":"00:19:59","url":"/play/18928441.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MTEvOGUwNGQ5N2Q4ZjFjOGU0YTNjNWEzMmEwODY3NjIyYmUuanBn.cache","vod_id":19168467,"title":"Phòng thay đồ nhà tắm nữ: giả vờ gọi điện thoại, thực chất là quay phim lén lút.","lastmod":"2026-07-15","duration":"05:25","url":"/play/19168467.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZGYzOTBkZTI5ZWY4OGQ3OTdlNmIzYWU4Y2Y5NTZiMTkuanBn.cache","vod_id":18946146,"title":"IDBD-600, đưa nó cho Rio, chính bạn sẽ khiến Rio lên đỉnh~♪♪ 8 giờ","lastmod":"2025-12-14","duration":"02:24:13","url":"/play/18946146.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYmNiYTExNTI1MjM4ZWViYTcxNTlmMTA4YzZiZmQ0OWIuanBn.cache","vod_id":18996317,"title":"HODV-21538: 48 giờ tự thỏa mãn với bạn trai cũ, một người tôi không thể nào quên.","lastmod":"2025-12-14","duration":"02:14:27","url":"/play/18996317.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MTQvZjE5OWVjNjE2ZmYzMzgxNzM1YzFiZDA4MWE1Y2FkODQuanBn.cache","vod_id":19038047,"title":"MIDV471 Video riêng tư cực kỳ nóng bỏng của nữ diễn viên nổi tiếng! Chỉ có hai người họ! Cô ấy khoe trọn khuôn mặt mộc! Cảnh sex chân thực, trần trụi, góc nhìn POV.","lastmod":"2025-06-14","duration":"02:28:03","url":"/play/19038047.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNDViMjhhOTMxYjA1M2Y5ODBhMTJhNTZjZGFiOGRjYTEuanBn.cache","vod_id":18985165,"title":"DBNK-014 Trong lúc chị gái tôi đang rửa dương vật cho tôi trong phòng tắm... chị ấy còn thủ dâm và quan hệ tình dục bằng miệng với tôi nữa!? 4 giờ","lastmod":"2025-12-14","duration":"04:00:26","url":"/play/18985165.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZmE5NDExYjA3ZjllNDZmZDE5MzZmMjNjYWFmZTIzYWEuanBn.cache","vod_id":19137289,"title":"Duyên dáng và trang nhã ~ Những chiếc váy lót gợi cảm của phụ nữ trung niên thập niên 1960 và 1950. Thời lượng 4 tiếng, 4 diễn viên không rõ danh tính. PRMJ-325","lastmod":"2026-01-08","duration":"04:06:27","url":"/play/19137289.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOTVjMjA3NjFiNTZkODJjNTc1N2Y0Njg4OWY4NTU3ODEuanBn.cache","vod_id":19024971,"title":"Thông tin rò rỉ gây chấn động đã hé lộ bạn gái tin đồn của nữ influencer Douyin MH Tong Jincheng. Trước khi nổi tiếng, cô ấy thực chất là một người phát sóng phim khiêu dâm. Những video khiêu dâm cực kỳ nhạy cảm đã bị rò rỉ, và nốt ruồi trên ngực cô ấy cũng được xác nhận.","lastmod":"2025-03-24","duration":"02:00","url":"/play/19024971.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzA2MjgwMjIxOWQ2NDkxYmRjOTEzYzU5MGZlZmI3ZTYuanBn.cache","vod_id":18971724,"title":"KTRA-535 Bí mật gia đình... Tuyển tập loạn luân (4 giờ)","lastmod":"2025-12-14","duration":"04:02:03","url":"/play/18971724.html"}]},
videoTitle: 'Bộ sưu tập video SHIC-188 Sweetheart Daddy (4 giờ)',
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=/`;
}
};
}