Chỉ có tôi là người mẫu áo tắm thi đấu. Một cuộc gặp gỡ tình dục riêng tư với JULIA xinh đẹp, ngực khủng, người rất khó nói không. JULIA PREMIUM","lastmod":"2026-07-11","duration":"02:23:39","url":"/play/19166296.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MjgvMzRlNDc2YzUzMDgyY2MzMGVkZjQ3ZjFiMjM0MjJhZjQuanBn.cache","vod_id":19048891,"title":"JUR214 Người yêu thời thơ ấu của tôi, người từng thích tôi, giờ đã trở thành một người phụ nữ đã kết hôn quyến rũ và gợi cảm, vì vậy tôi sẽ quan hệ tình dục với cô ấy thật mạnh mẽ cho đến khi ham muốn tình dục của tôi cạn kiệt.","lastmod":"2025-08-27","duration":"01:55:17","url":"/play/19048891.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNzVhYjNhNWU3OTQ4ZWU2YWUyNDc2M2NlY2Q3OTMzNjMuanBn.cache","vod_id":18999169,"title":"Môn Phi Tiêu dành cho Người Mới Bắt Đầu - Phần 1: Haruna Akiyama","lastmod":"2025-03-23","duration":"01:03:32","url":"/play/18999169.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOTMxNzIyMTRjZWE2NmFmMzM1YWEzOTJlZTY4M2E3ZmYuanBn.cache","vod_id":18969455,"title":"BLK-276 Chuyện chăn gối với chồng tôi thật nhàm chán, và nó gợi lại những ký ức về quá khứ!! Bạn gái cũ của tôi, bà mẹ ngực bự lẳng lơ, Ayumi Shinoda","lastmod":"2025-03-23","duration":"01:58:51","url":"/play/18969455.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZDE4M2FmMGJiMjFkNjFhMjY2ZmE3MDYyNmQzZmQ1MzMuanBn.cache","vod_id":18990469,"title":"LULU-001: Trong thời gian bạn gái vắng nhà ba ngày, anh ta đã quan hệ tình dục với người bạn tiếp viên hàng không của cô ấy, người có vòng mông rất lớn (loạn luân).","lastmod":"2025-12-14","duration":"02:17:26","url":"/play/18990469.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZjNiNDU0NzgwMDM5YTE5MzY2MDZmM2JhMzExOGU5YTMuanBn.cache","vod_id":19001438,"title":"JUY-499 Bà nội trợ nhà bên không mặc áo ngực khi nghỉ ngơi. Bộ sưu tập độc quyền \"Ngực Khủng\" của Madonna - Người đẹp trưởng thành số 1, phần 5!! Mori Hotaru","lastmod":"2025-03-23","duration":"01:57:24","url":"/play/19001438.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvMmM0OGI0OGFmNGE4YThiN2Q5ZjU2YjYyNmEyODIwNWUuanBn.cache","vod_id":19065764,"title":"Một người phụ nữ mảnh mai, xinh đẹp, là người đàn ông quyến rũ nhất, đã ngủ với hàng ngàn người đàn ông.","lastmod":"2025-12-14","duration":"06:50","url":"/play/19065764.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZDBiNTA0YzliOWU4MzgyMjQ4NGZmMDZlYjdkMmNiNjIuanBn.cache","vod_id":19149401,"title":"[Phép màu] Tôi gọi cho một cô giao hàng và hóa ra đó lại là cô bạn thân ngực khủng ở gần nhà tôi! Thật tuyệt vời!! 8 MDBK-400","lastmod":"2026-03-21","duration":"02:20:13","url":"/play/19149401.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MDkvNDdjODBmMjEyMGY0ZTRmYTRhNzk3MzRhYjU5MTFhMDEuanBn.cache","vod_id":19042075,"title":"YST334 Tôi là một kẻ biến thái vì cha dượng đã đối xử với tôi như một con mèo có miệng, và dịch âm đạo của tôi chảy ra.","lastmod":"2025-07-08","duration":"01:39:06","url":"/play/19042075.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTM5NzhiMzY0MzNiZTAzNzk4MTViYWI4MjkxYjFjNzUuanBn.cache","vod_id":18984071,"title":"HEYZO 3137 Hãy xem hành vi tục tĩu của vợ tôi! Tập 2 - Noriko Nakagawa","lastmod":"2025-03-23","duration":"00:59:23","url":"/play/18984071.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNGQ3NmEyZjE4MjhjYTdiNjcyMWUxZTE1NmQyYTFiMzUuanBn.cache","vod_id":18933727,"title":"ZMAR-010_A Tất cả! Hazuki Mion Phần 1","lastmod":"2025-12-14","duration":"02:06:24","url":"/play/18933727.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MTYvYzk0YzNmMzkzZDQ0NWNhM2Q5YWEzMDNmOWJiYzI2MmEuanBn.cache","vod_id":19029223,"title":"Bất cứ lúc nào, bất cứ nơi đâu, dù bao nhiêu lần đi nữa... Cuộc sống vợ chồng mới cưới của tôi đã bị hủy hoại bởi việc người hàng xóm xuất tinh vào trong tôi. Hojo Maki JUQ-167-C.","lastmod":"2025-04-16","duration":"02:03:56","url":"/play/19029223.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNmQ1MGJkMzNmNjhlNWZlYTQ0NTg5ZjkwNTcxZjQ4MTkuanBn.cache","vod_id":19156271,"title":"\"Tôi có một tính cách luôn muốn lấp đầy khoảng trống. Đồ đạc trong nhà, hộp cơm trưa của chồng, cảm giác cô đơn của tôi...\" —Kaoru Anai, một phụ nữ đã kết hôn, người mà tôi gặp ở một câu lạc bộ.","lastmod":"2026-05-03","duration":"02:13:18","url":"/play/19156271.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvN2NiNWY0ODg2YzcyM2RmYzYzNTNlMzUyYzY2MGYxZmYuanBn.cache","vod_id":19005977,"title":"[Phụ đề tiếng Trung] JUL663 Đêm hội ngộ lớp, tiếp tục cuộc vui tại khách sạn thương gia: Màn threesome ngược đời ở thiên đường. ~Xuất tinh liên tục, tận hưởng tình một đêm ngoại tình~ Nanase Iori, Tomoda Maki","lastmod":"2025-03-24","duration":"01:59:50","url":"/play/19005977.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMWNhMWQ2YzE2MTNiNmJmMjFiZjAwNDBmMTFjZTYzNWUuanBn.cache","vod_id":19012749,"title":"MIAA188 Chú ơi, ăn bộ phận sinh dục của cháu đi! Vì không người đàn ông nào cùng tuổi cháu chịu liếm cháu cả... Mitsuki Nagisa (loạn luân).","lastmod":"2025-03-24","duration":"01:58:40","url":"/play/19012749.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNDAzYzRlMjZjZTNkMTUzNjJhMDZmNTFkMWViNGYyYjEuanBn.cache","vod_id":18936489,"title":"[Phụ đề tiếng Trung] HUNTA-683 Quái vật chị dâu dâm đãng, quan hệ tình dục bằng miệng tức thì, đuổi theo tôi khắp nhà","lastmod":"2025-03-22","duration":"04:00:06","url":"/play/18936489.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvM2YyOTgxNGM0ZWFkNzQxMzg0MTI2YmU4MDc1ODZiOWQuanBn.cache","vod_id":19009171,"title":"Chỉ cần nhìn thoáng qua cũng thấy rõ cô K hoàn toàn còn trinh. Cô ấy là một nữ sinh viên đại học 19 tuổi, trải qua lần quan hệ tình dục đầu tiên kể từ khi sinh ra—sự xâm nhập của con người, xuất tinh bên trong cô ấy, cô ấy khóc và la hét!! Nhưng cô ấy vẫn còn sống—CD5.","lastmod":"2025-03-24","duration":"18:04","url":"/play/19009171.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZWE2ODA1ZmZlMDhkMWI4YjY4OTYzODA5Yzc4YTY2ODcuanBn.cache","vod_id":19021194,"title":"Bác sĩ ơi, làm ơn cứu lấy giấc ngủ ngon của tôi!","lastmod":"2025-03-24","duration":"36:03","url":"/play/19021194.html"}]},
videoTitle: 'Bạn gái đầu tiên của tôi! Bước vào giai đoạn hạnh phúc nhất cuộc đời! Cậu bạn cùng lớp từng bắt nạt tôi chuyển đến sống cạnh nhà. MKON-087-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=/`;
}
};
}