Hình ảnh camera giám sát khách sạn bị rò rỉ! Tôi đã lén lút qua đêm với bạn gái tuyệt vời của anh trai tôi, và toàn bộ sự việc đã bị bại lộ.","lastmod":"2026-07-11","duration":"","url":"/play/19244846.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzUzYThiMGRkNGRkZDczYzc2MDY3YmRhMGIzNzA3MjUuanBn.cache","vod_id":19090425,"title":"[Không kiểm duyệt] HMN-317 Kẻ quấy rối tôi trên tàu hồi còn là sinh viên đã tái hôn với mẹ tôi. Từ ngày đó trở đi, ngày nào tôi cũng bị đối xử như một con vật cưng ngoan ngoãn mặc đồng phục.","lastmod":"2025-03-29","duration":"01:58:27","url":"/play/19090425.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNTc2YTljYTFiZTQ5MmY4ZTZhM2U0NTQ5Y2ZjNGFmNDAuanBn.cache","vod_id":19159865,"title":"NNPJ354 “Tôi thèm khát một dương vật to…” Đầu óc tôi lúc nào cũng tràn ngập những dương vật to!! Akari là một cô gái nhút nhát, chăm chỉ, yêu thích dương vật to và tự sướng với một chiếc dương vật giả khổng lồ mỗi sáng và tối, nhưng cuối cùng cô ấy cũng ra mắt trong ngành công nghiệp phim người lớn để theo đuổi dương vật to đầu tiên trong đời!! Nampa JAPAN EXPRESS Tập 115.","lastmod":"2025-03-29","duration":"03:03:21","url":"/play/19159865.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOTkyZTA4NmIwNTRjYjhlZWY5NGUwZmEwNDc4NDAwNTIuanBn.cache","vod_id":19098309,"title":"[Phụ đề tiếng Trung] CAWD-567 Đầu nhũ hoa nhạy cảm của tôi bị nhắm mục tiêu... Arai Rima, một nữ sinh bị cưỡng hiếp bởi một kẻ bẩn thỉu, biến thái và đê tiện.","lastmod":"2025-03-29","duration":"02:00:46","url":"/play/19098309.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTdhZjNhYjAwYzQ2MjU5NjExZDFlZDQ3Mzc3NjI3ODMuanBn.cache","vod_id":19123754,"title":"Thú cưng của tôi là một chú mèo con đáng yêu! Chú mèo con này rất ngoan ngoãn.","lastmod":"2025-03-29","duration":"02:43:13","url":"/play/19123754.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZWZmYTNkZDRjNDVmZmU1M2MwNDBjNzE3YzcyZjA3NTcuanBn.cache","vod_id":19066704,"title":"C-2419 Đây là công việc của tôi! Vụ án","lastmod":"2025-03-28","duration":"02:10:24","url":"/play/19066704.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODQ5YzNhNzc5ZTk5ZDdkZmU2OTg4MjRkOTI1OTRjMTIuanBn.cache","vod_id":19034939,"title":"AMBI-111 Không thể nào! Tôi không thể tin được giáo viên chủ nhiệm của tôi đã phát hiện ra tôi đang phát trực tiếp nội dung khiêu dâm!! Matsumoto Ichika","lastmod":"2025-03-28","duration":"01:59:45","url":"/play/19034939.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjc1NjczMjhhNmE2ODE1NjhjZmJmYzlkNDNjY2MwZWYuanBn.cache","vod_id":19090531,"title":"200GANA-2802 Một tay tán tỉnh lão luyện đưa một cô gái về phòng để quan hệ tình dục và bí mật quay phim cô ấy. 274. Một cô gái xinh đẹp với khuôn mặt ưa nhìn và thái độ tốt gặp một cô gái khác trên ứng dụng hẹn hò và đưa cô ấy về nhà.","lastmod":"2025-03-29","duration":"01:08:07","url":"/play/19090531.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzZlNzA1NDBhNTU2YmVlOTEzNjgxYjdlZDFlNGYxNDguanBn.cache","vod_id":19089442,"title":"[Phụ đề tiếng Trung] YMDS-126 Những nữ thần Otaku xinh đẹp uống rượu, hôn sâu và cảnh nóng: Ngày Hinata Hinakage trở thành bạn gái tôi","lastmod":"2025-03-29","duration":"02:08:42","url":"/play/19089442.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMmNiMzhmYzQ5MzI4YTNhNGU2NGNhMGVjMjJkOTJlNmIuanBn.cache","vod_id":19045581,"title":"BBAN-208 Gái mại dâm đồng tính nữ, Cô gái tắm bồn số 1... Một cảnh chiến đấu giữa những người đồng tính nữ xoay quanh sự nổi tiếng và lòng tự trọng.","lastmod":"2025-03-28","duration":"01:59:08","url":"/play/19045581.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZGU4ZTFlNzE3MGVhMTA0ZGJlNjk2MGMxYzY3YzM0ZDEuanBn.cache","vod_id":19158943,"title":"MIUM446 [Cô Gái Ngực Thần] Cựu thần tượng, nay là sinh viên đại học, được thuê làm bạn gái của bạn! Toàn bộ quá trình quyến rũ cô ấy, thậm chí cả những hành vi khiêu dâm cấm kỵ, đều được ghi lại! Bộ ngực cỡ H thần thánh của cô ấy đã phát triển từ năm 10 tuổi!! Cảm giác kích thích tột độ khi ấn ngực có thể bùng nổ bất cứ lúc nào!? Khi cô ấy mạnh mẽ thâm nhập vào âm đạo chật hẹp của mình ở nhiều tư thế khác nhau, bộ ngực khổng lồ của cô ấy rung lắc theo từng cơn cực khoái!!!","lastmod":"2025-03-29","duration":"01:44:25","url":"/play/19158943.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjIyMDAzNDIyYmY0NTMzNWZiMGMyNDQ3M2ExMzQ3MzEuanBn.cache","vod_id":19099513,"title":"[Không kiểm duyệt] ROYD-124 Cô em kế của tôi vô tình quyến rũ tôi bằng vòng ba gợi cảm của cô ấy! Marui Moeka","lastmod":"2025-03-29","duration":"02:14:37","url":"/play/19099513.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjJlMWY0Yjk2MmNjMjc4MTYzZTRlOGQ2NmMzZTRjYmUuanBn.cache","vod_id":19091516,"title":"[Không kiểm duyệt] FSDSS-416 Một cô hầu gái mới, Ami Tokita, người thậm chí còn cho phép bạn quan hệ tình dục ngay lập tức.","lastmod":"2025-03-29","duration":"02:03:55","url":"/play/19091516.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYjIxMzZlZWU3ZWE0M2E0YjIxNzY2NmIwZDMzZDc1OTQuanBn.cache","vod_id":19148245,"title":"HSAM001 Em gái tôi, Yui, bị sốt sau khi uống thuốc kích dục.","lastmod":"2025-03-29","duration":"50:52","url":"/play/19148245.html"}]},
videoTitle: 'MUDR-004 Từ giờ trở đi, tôi sẽ quan hệ tình dục với anh trai mình. (Hatsusaki)',
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=/`;
}
};
}