Hãm hiếp một cô gái bỏ trốn! Huấn luyện trong phòng riêng và xuất tinh, ghi lại đầy đủ hành trình trụy lạc của cô ta.","lastmod":"2026-07-11","duration":"","url":"/play/19245226.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNDRiYWI4ZDc0ZTI3NjNkZDk2YWU0ZjI3NDBjZjMxMWIuanBn.cache","vod_id":19163029,"title":"Một người đẹp ngực khủng kiểu thần tượng (Nogizaka) (game thủ) đã để bạn trai gọi điện cho mình rồi bí mật xuất tinh vào trong cô ấy.","lastmod":"2025-03-29","duration":"01:11:32","url":"/play/19163029.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjcyNDQ2Y2ZjNjkyZmM5MWUxOGNlYmM0MGZjZGRiZDEuanBn.cache","vod_id":19116627,"title":"[Mã độ phân giải cao] 494SIKA-241 Cảnh 3P của Aheiki sau buổi hẹn hò với một người đẹp ngực nhỏ và một rotor","lastmod":"2025-03-29","duration":"01:22:38","url":"/play/19116627.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZTk3Y2U3NzQ4NjA2MWRkNjM2NjBiOGY5M2JiODk2NjAuanBn.cache","vod_id":19234164,"title":"Chủ đề tình yêu của Idolmaster: Thần tượng ngực khủng bị hiếp và xuất tinh vào bên trong! Phiên bản đầy đủ 60fps với hiệu ứng âm thanh.","lastmod":"2026-05-12","duration":"0:05:29","url":"/play/19234164.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOWYzNDMwMTU4MjliNzI2M2QxYTgxYTM5NTU5M2IxMGYuanBn.cache","vod_id":19152189,"title":"BAZX227 Original Idol Pillow Business Vol.007.","lastmod":"2025-03-29","duration":"","url":"/play/19152189.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYjM3OTg3N2FhYmJiYjkyMDk4MTI3ZTY0N2YzN2Y4MWEuanBn.cache","vod_id":19233081,"title":"NajarHina, The Idolmaster, Ngực khủng, Lỗ hậu gợi cảm, Phiên bản đầy đủ, 60fps, Quan hệ tình dục bằng ngực và xuất tinh","lastmod":"2026-05-05","duration":"0:04:36","url":"/play/19233081.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMTFjYWVkOTI2YjJhNTY1NTg1MjcyYWVhZjQyMWVkMzUuanBn.cache","vod_id":19121454,"title":"MKMP-249 Hall of Fame! Siêu thần tượng 4 giờ - Yuri Oshikawa","lastmod":"2025-03-29","duration":"01:55:32","url":"/play/19121454.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMGQ0MjJlMWY1YmJiZjc0MmE5ZTMyNzU0MzZmZTk2YTEuanBn.cache","vod_id":19106169,"title":"200GANA-2221 Một cảnh quay softcore nghiêm túc, lần đầu tiên. 1431 Một người đẹp thận trọng nhưng bị choáng ngợp! Cuối cùng, cô ấy đã khuất phục và ngậm dương vật của nam diễn viên vào miệng, và họ bắt đầu làm tình một cách tự nhiên! Cơ thể cô ấy rất nhạy cảm; chỉ cần chạm nhẹ cũng khiến cô ấy ướt át và run rẩy.","lastmod":"2025-03-29","duration":"","url":"/play/19106169.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzc0ZWVmZTZmMjBlMzVlNjc1YTBmYWM5YThiYWI4OGEuanBn.cache","vod_id":19099171,"title":"[Không kiểm duyệt] KAWD-723 Một cô gái trẻ xinh đẹp nhưng biến thái, nghiện tình dục, Suzuki Koharu, gặp một người đàn ông trung niên mà cô quen trên mạng xã hội bốn lần một tuần và trở nên ám ảnh với ông ta.","lastmod":"2025-03-29","duration":"01:58:01","url":"/play/19099171.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNDY3YWM4N2RjZmI2MmQ0NjhkZTBmZDBhYmQ0MDY3ODkuanBn.cache","vod_id":19093786,"title":"SHKD-934 Hôm nay là kỷ niệm ngày cuối cùng tôi cũng làm tình với con gái mình, người mà tôi đã chứng kiến lớn lên. Minri Neo","lastmod":"2025-03-29","duration":"02:19:27","url":"/play/19093786.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzA5ODFjZDYxM2Y5MmQ3OWIzYTE3ODNhODMwYmUzMmEuanBn.cache","vod_id":19164519,"title":"Khoe gương mặt xinh đẹp ♥ Một người mẫu mảnh mai và dễ thương như thần tượng.","lastmod":"2025-03-29","duration":"04:35","url":"/play/19164519.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYzJmNTBiNTE3NDdhMmZmM2E1MzMzY2FmOTBlOWYxZjEuanBn.cache","vod_id":19170198,"title":"XRW577 Nụ hôn lưỡi dâm đãng và cuồng nhiệt cùng hành vi tình dục của người phụ nữ.","lastmod":"2025-03-29","duration":"02:04:57","url":"/play/19170198.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMzlhZmJlYjU3ZjM3OGQ0ZWVkNmMwZjkzODY5NzdiOTMuanBn.cache","vod_id":19136798,"title":"Chàng trai và cô gái vừa tốt nghiệp trung học cơ sở và đang theo học trường dạy nghề quả là những kẻ thú tính, thích thú với dịch vụ quan hệ tình dục bằng miệng của những cô gái lẳng lơ này, thay phiên nhau quan hệ tình dục với họ và thọc sâu vào người họ.","lastmod":"2025-03-29","duration":"09:34","url":"/play/19136798.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZWU5YTFjMmFiZDRhYmM0MjA0NjljODE1ZjA0ODVjY2QuanBn.cache","vod_id":19066111,"title":"AMBI-121 Đồ chơi tình dục của Devil Daddy: Một nữ sinh mặc đồng phục bị chia cách với bạn trai, Kisaragi Mashiro.","lastmod":"2025-03-28","duration":"02:02:24","url":"/play/19066111.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYjFlYjZiMGEwY2Q2ZTQ3NzBiZmRjMjFlY2Q4MmJiODIuanBn.cache","vod_id":19214967,"title":"[Đã che] Tôi đã lén lút quan hệ tình dục với bạn trai da đen của mẹ tôi sau lưng bà ấy.","lastmod":"2026-02-02","duration":"0:12:22","url":"/play/19214967.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODllMmRmYWU0ZWM0MmM5N2MzZGU0M2EzZjA1ZjU4MzAuanBn.cache","vod_id":19086042,"title":"[Phụ đề tiếng Trung] COGM-037 Tôi đã tắm bồn với cô nàng ngực khủng Fuwako (họ) rồi làm tình suốt đêm.","lastmod":"2025-03-29","duration":"01:49:03","url":"/play/19086042.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjkvOTQzMmQ4NTdmNTM3ZmIzNjVmN2VmZDQ1YjA0ODBhOTkuanBn.cache","vod_id":19242925,"title":"ADN-602-C Một tên côn đồ vừa được thả đã cưỡng hiếp dã man một phụ nữ trẻ gợi cảm, xuất tinh vào âm đạo của cô ấy.","lastmod":"2026-06-29","duration":"1:55:46","url":"/play/19242925.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvN2UxM2Y1NjQzZTIyNmNkM2Q5MDIzMjg3YjRmOTFmMmUuanBn.cache","vod_id":19104865,"title":"MUDR-093 Quay phim sex riêng tư 01: Nữ sinh mặc đồng phục và người đàn ông lớn tuổi - Nagase Yui.","lastmod":"2025-03-29","duration":"","url":"/play/19104865.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZjU0YTdlMTVjNDcxNzIyM2IyZjE4ZTYzYzZjZjUyZjUuanBn.cache","vod_id":19230815,"title":"DSLC-022 Một người đẹp nghiệp dư chất lượng cao bị cưỡng hiếp dã man và bị huấn luyện thành một con điếm bởi một dương vật khổng lồ.","lastmod":"2026-04-25","duration":"0:09:01","url":"/play/19230815.html"}]},
videoTitle: 'Hãy cùng nhau ân ái trong khi ngắm nhìn nhau như những thiên thể tuyệt đẹp. (Thực tập sinh thần tượng: Kirari 002)',
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=/`;
}
};
}