Lòng biết ơn của bạn có đang chảy nước dãi không? Mối quan hệ tình ái của Mao Trạch Đông với người hàng xóm Hamasaki Ayumi Hamasaki Mao Depps","lastmod":"2026-07-11","duration":"02:37:44","url":"/play/19161243.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNmFhOWNiYTA2YzhlZDI1M2Q4OTk1MmM2MGNiOGI5ZDMuanBn.cache","vod_id":18959775,"title":"CLUB-134 Tôi (♀) chỉ thích những cô gái dễ thương, nhưng tôi đã đưa bạn gái thẳng của mình về nhà, ép cô ấy quan hệ đồng tính nữ và bí mật quay phim lại.","lastmod":"2025-12-14","duration":"02:57:51","url":"/play/18959775.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMDYvMDc2MjllODhiZDk2Y2JhZjdlYmUzYjZiNGY1YzI1YTEuanBn.cache","vod_id":19061423,"title":"Buổi chụp ảnh đời thường của nhóm nhạc thần tượng phần 2 ~ Buổi chụp ảnh \"xuất tinh\". Bốn người mẫu là mục tiêu ~ Nữ diễn viên vô danh STSK_141","lastmod":"2025-11-05","duration":"03:53:18","url":"/play/19061423.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNDE5YWQzY2FlNjk2MWI1NWViN2Y4ZWQ3OTI5NWU5NWMuanBn.cache","vod_id":18964585,"title":"JUC-926 Cô gái đồng tính cao ráo, xinh đẹp, trưởng thành - Ướt át và đầy khoái cảm - Takashita Eddy Paradox Aoyama Saki Hira","lastmod":"2025-03-22","duration":"01:45:28","url":"/play/18964585.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMDY3MGU4NTNhMjI2ZTcxZjY3Njk5NjgxZGM1NGEzYTMuanBn.cache","vod_id":18941628,"title":"ANND-118 Ngực Đẹp Đồng Tính Nữ Quan Hệ Tình Dục: Mikoto Mochida, Mayu Otsuka","lastmod":"2025-12-14","duration":"01:58:44","url":"/play/18941628.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvM2VlNDI3NmEzNWNkNzEyOTY0NDUzODBmYWQ4ZDkwYmQuanBn.cache","vod_id":18953255,"title":"[Phụ đề tiếng Trung] OIGS-016 Buổi huấn luyện trói buộc khó quên dành cho bà nội trợ nghiện trói buộc bằng dây thừng - Miho Nakazato","lastmod":"2025-12-14","duration":"01:45:51","url":"/play/18953255.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvMzM5NmFkZmUxNGE4NDdhZWM1MWIwMjA2MDAzYWFjODcuanBn.cache","vod_id":19158866,"title":"Ai Mukai, một nữ nhân viên văn phòng đã kết hôn, bị ông chủ cuồng mông nhắm đến và ép buộc thực hiện những hành vi đáng xấu hổ như liếm mông và tim. (Mukai Ai, Madonna)","lastmod":"2026-05-19","duration":"02:28:17","url":"/play/19158866.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZWE4ZWI4MzY1M2QwZTQyOWZjNDJmZDVjYjM4YjFlZDAuanBn.cache","vod_id":18938408,"title":"AUKB-090_A 4 Giờ Huấn Luyện Dương Vật Đồng Tính Nữ ~ Niềm Vui Của Cực Khoái Nữ Trưởng Thành ~ Phần 1","lastmod":"2025-12-14","duration":"02:03:02","url":"/play/18938408.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOTQxYjBkZDQ3ODYwYzI0ZWE0M2ExZjhlZWIwMzZjNzguanBn.cache","vod_id":18985496,"title":"Dildo hai đầu LZBS-100 dành cho quan hệ tình dục âm đạo sâu giữa hai người phụ nữ - 5 giờ trải nghiệm tuyệt vời được lựa chọn kỹ lưỡng.","lastmod":"2025-12-14","duration":"05:04:22","url":"/play/18985496.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzFkMTM2NzE3Yjk1MWIwYmZmMTFlOTAyNGZkOWJjYzkuanBn.cache","vod_id":19010618,"title":"IPX401CHINASSESSUB Tôi sẽ cưỡng hiếp Nishimiya. Cô ta đã quan hệ với tất cả mọi người trong lớp trừ tôi, cho đến khi cô ta yêu dương vật của tôi, và sau đó tôi sẽ xuất tinh một cách tuyệt vọng vào bên trong cô ta.","lastmod":"2025-03-24","duration":"02:27:53","url":"/play/19010618.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYmFlNDdlZmU4YTMxMmFiOTQzZjg0ODQxZDgyNDEyZTMuanBn.cache","vod_id":19013531,"title":"Vợ nhà hàng xóm tôi ra đổ rác mà không mặc áo ngực vào sáng sớm, đúng là cô ta đang tự chuốc lấy rắc rối. (Imada Mirei, 1pondo_010123_001)","lastmod":"2025-03-24","duration":"52:53","url":"/play/19013531.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjkvZGYyZTQ4NGM5NzNhMDZjZTE0OTdjZjQ3NjMwMDVhNGYuanBn.cache","vod_id":19166320,"title":"Tuyệt vời! Bạn có thể vào nhà tắm nam chỉ với một chiếc khăn tắm?! Thật thú vị!! Xuất tinh dữ dội trong một nhiệm vụ đáng xấu hổ!! Thu hút người hâm mộ?! DASS-530-C cực cao","lastmod":"2026-07-11","duration":"03:16:38","url":"/play/19166320.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNThmNGM0YTAxYjFmZjhiNjUzNWZiNGFjOGQ5NmNkNTYuanBn.cache","vod_id":18986184,"title":"KAM-127 Ăn mừng chồng được thăng chức: Tiệc gia đình của người phụ nữ đã kết hôn (NTR) - Người vợ say xỉn ngực khủng bị cưỡng hiếp nhiều lần - Monami Takarada","lastmod":"2025-12-14","duration":"02:05:22","url":"/play/18986184.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNmU4MzkzMTRiYzExODc2NWUwOGM0ZThiOTlhYzlkNDkuanBn.cache","vod_id":19015291,"title":"HND719 Kururugi Aoi lại bị cưỡng hiếp bởi chính người đang tìm đến giúp đỡ cô.","lastmod":"2025-03-24","duration":"01:56:15","url":"/play/19015291.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MTIvNDAwYzJlOTZkNDEyMzAzZWFiNjlkMTc0NGM2NDY3ZjQuanBn.cache","vod_id":19033194,"title":"Phụ nữ yêu thích thể dục","lastmod":"2025-05-12","duration":"17:25","url":"/play/19033194.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNDRkN2Q2ZTkzYzZmMTI1YTZiYjhlMjg3MzI0ZTcwMGIuanBn.cache","vod_id":18942165,"title":"AUKG-414 Người phụ nữ đã kết hôn, có mối quan hệ đồng tính nữ bí mật vào buổi chiều","lastmod":"2025-12-14","duration":"02:01:48","url":"/play/18942165.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMTg5OGE1ZGI1MjJmODRiYzg3YTk4ZmI4YTZjNDhjMjAuanBn.cache","vod_id":18944297,"title":"JJAA-012 là một tiệm làm đẹp dành riêng cho phụ nữ đồng tính trung niên, đã kết hôn, nằm ngay trên bãi biển, do một người phụ nữ đồng tính thực sự ở độ tuổi hai mươi điều hành.","lastmod":"2025-12-14","duration":"02:08:34","url":"/play/18944297.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmFlZjhhZDBhMGE5MzFkZDk3OTYwZjFmOTA0N2ZmODIuanBn.cache","vod_id":18985933,"title":"MADV-288 Một bộ phim truyền hình dài tập đồng tính nữ cao cấp thường xuyên có sự tham gia của các nữ diễn viên nổi tiếng. (6 tập)","lastmod":"2025-03-23","duration":"02:29:46","url":"/play/18985933.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvN2JmMGEzNjhlYTEyZTlkMGY5ZTE5MDBkMjA5OGFmMmQuanBn.cache","vod_id":18926206,"title":"RBD-965 - Huấn luyện đồng tính nữ chị em: Mối quan hệ giữa phụ nữ tràn đầy tình yêu và ghen tuông - Koharu Sakino, Tsubasa Hachino","lastmod":"2025-12-14","duration":"01:59:43","url":"/play/18926206.html"}]},
videoTitle: 'AUKG-429 Tôi bị người hàng xóm đồng tính nữ nhắm đến ~Cưỡng hiếp đồng tính nữ theo kiểu rình rập~ Suzuki Satomi, Ichijo Ki',
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=/`;
}
};
}