Tôi có thể đến nhà bạn không? Một chuyến thăm bất ngờ đến túp lều của một otaku nam để giao đồ ăn thức uống!! Một cô gái siêu dễ thương với vòng một thực sự quyến rũ đàn ông - Rena Miyashita MOODYZ","lastmod":"2026-07-11","duration":"02:44:19","url":"/play/19154675.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYTdiZDc1MDNhNTM5NWU4MTg2NjNmOGU0NGIyODhmYTguanBn.cache","vod_id":19053217,"title":"AVSA091 Phim khiêu dâm: Sự sỉ nhục, lạm dụng quyền lực, NTR (ngoại tình): Người vợ xinh đẹp dưới quyền Touka Rinne.","lastmod":"2025-03-29","duration":"01:58:23","url":"/play/19053217.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYmEwZDAxMTM0ZDBlMTMzNjM4MWFlYjAxNWM1NGE4ZWYuanBn.cache","vod_id":18972630,"title":"[Người nổi tiếng trên mạng] Cô bé loli siêu dễ thương cao ba inch trong bộ đồ latex đen gợi cảm và tất chân.","lastmod":"2025-03-28","duration":"15:34","url":"/play/18972630.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MDUvZWQ3OGVhOGY4MDZkODc0MjdlMTk0NDlkNzZmZDFlYzguanBn.cache","vod_id":19147585,"title":"Con ả ngực nhỏ bị cưỡng hiếp dã man, nhưng ả lại cực kỳ dâm dục.","lastmod":"2026-06-04","duration":"00:00:30","url":"/play/19147585.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MTMvMmQyM2JjNjAyZDlhNTFkY2RkODkzOTg3MzkwYzAyMDcuanBn.cache","vod_id":19149174,"title":"Dịch vụ điều phối gái xinh mặc đồng phục, thiên thần ngọt ngào. Ghi chép về một người đàn ông trung niên có sở thích mặc đồng phục và một cô gái xinh đẹp ngoan ngoãn với dịch cơ thể tràn ngập và quan hệ tình dục không thụ tinh sau đó. MVSD-588-C","lastmod":"2026-06-12","duration":"02:15:13","url":"/play/19149174.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMGFhZGYzMGZjODc0YTRhNDNjNTk4ZjY3YjdlMzI2MzguanBn.cache","vod_id":19142318,"title":"HEYZO 0288 Đỉnh điểm đau đớn của vẻ đẹp Lolita không lông - Phần 1 - Tsukushi","lastmod":"2026-05-10","duration":"58:43","url":"/play/19142318.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MDkvZTkyZjE5YzE4OTQ0ZDM3YWU5ZGU1NmMxN2JkZWEwNTIuanBn.cache","vod_id":19072686,"title":"[Không kiểm duyệt] Tuyển tập bí mật những lỗ nhỏ ~Nỗi xấu hổ của một cô gái nghiệp dư~ Với sự tham gia của Yoko Kuroki, Tomoko Ogasawara, Hitomi Murata và những người khác. 10musume_080822_01","lastmod":"2025-05-09","duration":"01:07:42","url":"/play/19072686.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzI0MDBkMTBhMGM5NDU0MDVlYTI0MzUyZmUzZjc2ZjcuanBn.cache","vod_id":19059309,"title":"rki633 Cô gái biến thái thích ngậm núm vú giả và dâng hiến tất cả cho gã bạn trai tồi tệ [Phiên bản Nhà vệ sinh Thịt] Amakawa Sora.","lastmod":"2025-03-29","duration":"02:00:55","url":"/play/19059309.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYTVhNTU3NWYzOTdjZWYwYTEzMzFmYjM2N2VlOGI4YzkuanBn.cache","vod_id":19034129,"title":"Mitt Break SEX: Sự thức tỉnh của một kẻ khổ dâm - Phá vỡ lớp vỏ bọc hoàn hảo của cô gái xinh đẹp - Tập 06 - Minashima Jun [MGS]","lastmod":"2025-03-29","duration":"02:30:10","url":"/play/19034129.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZWQzNDJiN2QwZWI1YjU4YjJmNjRmYTU1ZjgzNjllNDIuanBn.cache","vod_id":19048423,"title":"476MLA-167-C [Yamato Nadeshiko Black Face Climax] Một người phụ nữ xinh đẹp với làn da trắng và vòng ngực cỡ F bị bốn dương vật cứng đâm vào.","lastmod":"2025-03-29","duration":"01:04:16","url":"/play/19048423.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYmY4YzUyNmU0MzBlOGQ0NjE1MDMwM2IxMzhkZjczMTkuanBn.cache","vod_id":19128443,"title":"Các nạn nhân bị lừa đảo hơn 12 triệu yên. Cô gái xinh đẹp nhất quán cà phê bị cưỡng hiếp đến mức mắt trợn ngược và cô hét lên trong đau đớn. (AVSA-416)","lastmod":"2026-03-04","duration":"02:06:08","url":"/play/19128443.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvOTJjM2U0ZjYzODQ2ODViNTZjN2IxM2E3OTM3YzQyNTkuanBn.cache","vod_id":19144009,"title":"Cô nữ sinh ngây thơ mặc đồng phục, bị kết tội oan về tội trộm cắp và hiếp dâm, đã bị ép làm nô lệ tình dục và bị xâm hại tình dục nhiều lần cho đến khi mang thai. (MUKD-507-C)","lastmod":"2026-05-18","duration":"02:31:23","url":"/play/19144009.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MTgvNTY3YjIyZWFjZGEwZTQwZTRkNDIyNTIwYzUzYjBkMDguanBn.cache","vod_id":19090478,"title":"Dịch vụ gái gọi trực tuyến tối nay có sự góp mặt của một nữ sinh viên đại học 20 tuổi, cao 167cm, tràn đầy năng lượng, với khuôn mặt trong sáng và ngây thơ; cơ thể cô ấy trải qua nhiều cực khoái, một kiệt tác của nghệ thuật tự thỏa mãn.","lastmod":"2025-08-17","duration":"20:42","url":"/play/19090478.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMjQvODVkYjI5YjVkYzE1ZGJjMjA5MzQyZDU3ODcyYzljNzMuanBn.cache","vod_id":19102352,"title":"Cô gái xinh đẹp CRiku, diễn viên vô danh BSJA_003","lastmod":"2025-10-23","duration":"01:38:21","url":"/play/19102352.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MDIvYjdiMjQ2YjY5ODk0MjJlNjQwMzBiYmJmODRhYWY0MGQuanBn.cache","vod_id":19081471,"title":"SVFLA007 Để cô gái uống nước tiểu, cô gái liếm nước tiểu chảy ra từ vùng kín đang tuổi dậy thì, hương vị của hậu môn... Người uống nước tiểu","lastmod":"2025-07-01","duration":"05:11:49","url":"/play/19081471.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNDYwNDljYjYwMzYwZTg3ODA2ZWJiNzY0YjE5YTNiMjEuanBn.cache","vod_id":19132875,"title":"Con ả lẳng lơ đang lên cơn thèm khát thủ dâm với tốc độ cao, bị đâm và xuất tinh, cái âm đạo nhỏ màu hồng của nó gần như bị tàn phá.","lastmod":"2026-03-25","duration":"10:42","url":"/play/19132875.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjIvMzY1MGJjMjFlNDE1NDA0MzVhYjAxNzJhMWUxOTgwYmYuanBn.cache","vod_id":19150923,"title":"Linlin, một người mẫu trẻ đẹp với vòng một đầy đặn, đã lợi dụng lúc bạn cùng lớp say xỉn để ngủ với bạn trai 10 năm của cô ấy. Đôi nhũ hoa hồng hào của cô ấy quả là một cảnh tượng đáng chiêm ngưỡng.","lastmod":"2026-06-21","duration":"15:01","url":"/play/19150923.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMzlmNWYxZWNkMmE5ZjNlNzM2NTE5ZjA4YTEyMDg2NTEuanBn.cache","vod_id":18993435,"title":"Nỗi khổ tâm trong hôn nhân: \"Tôi đã đính hôn rồi, vậy tại sao tôi lại cưới một người đàn ông như thế...?\" Tập 1: \"Tôi chẳng biết gì về chuyện này cả...!!\"","lastmod":"2025-03-28","duration":"25:32","url":"/play/18993435.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMDkyN2VmNzY5ZGU0MjRmNjAyYjExZDJjNGIzYjRlNzEuanBn.cache","vod_id":19114905,"title":"Cô gái lẳng lơ dang rộng chân, thể hiện tư thế cưỡi ngựa và liên tục đạt cực khoái kèm theo những lời lẽ tục tĩu.","lastmod":"2025-12-29","duration":"23:21","url":"/play/19114905.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMGE5YzEzYjRiODdiMjExMGQxNDAxNTI5MjExMjkzOWIuanBn.cache","vod_id":19032251,"title":"Một cô gái trẻ xinh xắn đang tập cưỡi ngựa và làm tình.","lastmod":"2025-03-29","duration":"05:43","url":"/play/19032251.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMmU5MTExYjE2MmExYWIyNmY2NjE4M2E3YzE2MGY3NWMuanBn.cache","vod_id":18969195,"title":"[HD Chinese] Vì cơn mưa bất chợt ập đến, tôi để ý thấy thân hình quyến rũ của bạn gái và không thể cưỡng lại được việc bắt đầu xoa bóp ngực cô ấy.","lastmod":"2025-03-28","duration":"02:22:14","url":"/play/18969195.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNGIwOWRkY2E5NWJhZDkzZjNmOTNhNjI2MWZiNDU1MzcuanBn.cache","vod_id":18993785,"title":"Bạn gái thích hành hạ người khác và bạn trai thích khổ dâm - Phần hai: Khen thưởng chú chó ngoan","lastmod":"2025-03-28","duration":"18:24","url":"/play/18993785.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNWJkNDkxNzdkZjFjN2FjNTg0NDVkOTJhYzA4NjAxM2EuanBn.cache","vod_id":19124170,"title":"Một bức ảnh tự sướng bị rò rỉ cho thấy một chàng trai trẻ giàu có đang quan hệ tình dục với bạn gái của mình, một người nổi tiếng trên mạng vô cùng xinh đẹp. Bức ảnh cho thấy cô gái rất xinh đẹp, có thân hình tuyệt vời và rên rỉ nhẹ nhàng trong khi quan hệ.","lastmod":"2026-02-12","duration":"16:06","url":"/play/19124170.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYTlhYzU2YjhlNmMyYzgzNDRiMmUwZmEwNjNjZjE0MmYuanBn.cache","vod_id":19009942,"title":"※Ưu đãi có thời hạn※ Đây là 【Ấm Taiko】Cô gái xinh đẹp Boy-chan, 18 tuổi 【Không nhuộm màu, hoàn toàn tự nhiên】","lastmod":"2025-03-28","duration":"01:25:56","url":"/play/19009942.html"}]},
videoTitle: 'EDMosaic: Một cô gái 21 tuổi ngực khủng tưởng mình sẽ trở thành nữ hoàng, nhưng cuối cùng lại chỉ là một con nhỏ đanh đá (Phần 1)',
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=/`;
}
};
}