Bạn có muốn làm thú cưng của tôi không? Hãy để cô ấy xuất tinh hết lần này đến lần khác cho đến khi cô ấy mệt. Meiyin SOD","lastmod":"2026-07-11","duration":"02:27:40","url":"/play/19162687.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZTBiY2IzODIyNmZkNGQyYzFiNDNmY2M0YTU3ZjAzZGIuanBn.cache","vod_id":19150762,"title":"Nubiles-Porn Bạn thân của em gái tôi muốn quan hệ tình dục qua đường hậu môn và thâm nhập [NubilesPorn]","lastmod":"2026-03-29","duration":"08:50","url":"/play/19150762.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTJkMzYwNzc3ODRmYjE4OWMwOGIwMzRjNzU4MzBlMWIuanBn.cache","vod_id":18968445,"title":"MIGD-751 Khi tôi gọi điện cho nữ nhân viên mát-xa ở khách sạn để yêu cầu các dịch vụ không liên quan đến tình dục, tôi bất ngờ gặp phải cô em gái tinh nghịch của bạn tôi! Tôi chớp lấy cơ hội và nói: \"Tôi sẽ mách anh trai tôi!\"","lastmod":"2025-12-14","duration":"01:58:36","url":"/play/18968445.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTg3Y2Q1ZTkzNGZiYzhlM2VlNDg5NjRiMGRlYjFlNDIuanBn.cache","vod_id":18959930,"title":"\"Rò rỉ gây sốc hàng đầu\" Vợ bị cắm sừng gợi cảm [Cô gái đào] Quay phim riêng hoàn tất: Cặp đôi ba người mời người đàn ông độc thân quyền lực tham gia thống trị 3P - Rất tương phản (2)","lastmod":"2025-03-22","duration":"00:07:47","url":"/play/18959930.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYjU5ODVlNmIyN2Y1MjA1OTdjYzg5ZTE3MGE0NDUyMDcuanBn.cache","vod_id":19152272,"title":"Một người vợ ướt sũng vì mưa, buồn rầu khơi gợi ham muốn của cậu sinh viên nhà hàng xóm... Một dương vật giả bằng tre non biến âm đạo mà cô hằng mong ước thành âm hộ của một người phụ nữ. SNOS-024","lastmod":"2026-04-08","duration":"02:00:01","url":"/play/19152272.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMTYyZDUwNDczNmM3ODYzMGRlNDUwMmNhODE5ZDI1NDQuanBn.cache","vod_id":18987714,"title":"[Không kiểm duyệt] VENX-273 Con trai tôi là một con thú ăn thịt đầy dục vọng trần tục. Bà mẹ Chisato Shoda trở thành một gái điếm thực thụ thông qua việc bị bóp cổ, quan hệ tình dục bằng miệng và sử dụng máy rung cố định.","lastmod":"2025-03-23","duration":"01:37:11","url":"/play/18987714.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMmU5NDg4Yzc1MzU3Nzc5YzQzNzEwM2NhNDA1NjE0MGMuanBn.cache","vod_id":18966493,"title":"Vị thần bị cắm sừng của cộng đồng Hải Giao, mắc chứng rối loạn chức năng tình dục, không thể làm thỏa mãn vợ mình ❤️ nên đã đưa vợ đến một nhóm bạn để tham gia cuộc thác loạn 4 người. Anh ta bị chuốc thuốc mê, say xỉn, rồi trong cơn động dục, bị lột trần truồng và bị cưỡng hiếp tập thể không dùng bao cao su bởi các thành viên khác trong cộng đồng Hải Giao!","lastmod":"2025-12-14","duration":"00:33:04","url":"/play/18966493.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvOGJiNmFiMmNjYzI0MDEyZDM4ZGNkOGIzY2RmYTBhODkuanBn.cache","vod_id":19157360,"title":"Người vợ yêu dấu bị bắt cóc trong quá trình quay phim. (Yui Hatano)","lastmod":"2026-05-10","duration":"02:34:23","url":"/play/19157360.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMDE3OGRmMjg3NWUwODhmZDhkMTE1ZjU1MTFkYmI2ZDEuanBn.cache","vod_id":18984141,"title":"[Không kiểm duyệt] SPRD-1428 Chuyện gì sẽ xảy ra nếu một người vợ đoan chính liên tục bị bố chồng ôm ấp...? Aya Shiomi","lastmod":"2025-03-23","duration":"02:16:08","url":"/play/18984141.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmFhMzFhNmNlZmZiOWU2MjBiMmFiOGU0MGQyMTY4NmUuanBn.cache","vod_id":19005191,"title":"JUQ-319-C Tôi không thể nói với chồng rằng bố chồng đã làm tôi có thai... - Bạn sẽ làm gì trong một chuyến đi suối nước nóng hai ngày một đêm?","lastmod":"2025-03-23","duration":"02:15:57","url":"/play/19005191.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODNkZWMxZWI3NzRjNjMxNmFlZTEwZmU3ZTVkYzZkMTcuanBn.cache","vod_id":18988462,"title":"MEYD-563 Người phụ nữ bước ra từ phòng tập thể dục không có thảm lót là một người hàng xóm xinh đẹp, kiêu kỳ. Tôi đã lợi dụng điểm yếu của cô ta, nên tôi đã ép cô ta quan hệ tình dục và xuất tinh vào trong tôi! Ngay cả bên ngoài cửa hàng, Mizumori Midori cũng trở thành một nô lệ tình dục ngoan ngoãn.","lastmod":"2025-03-23","duration":"01:58:08","url":"/play/18988462.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmIxNDE4MjkwZGE2N2UzNzJhZmQ5ZmY0OTBjMjg4MGYuanBn.cache","vod_id":18979014,"title":"[Phụ đề tiếng Trung] FOCS-136 Bạn thời thơ ấu của tôi, một người hoạt động tích cực trong thế giới ngầm của thành phố... đã biến thành một thần tượng quỷ quái, thích tinh dịch và trêu chọc tôi bằng những chiếc kính dính nhớp.","lastmod":"2025-03-23","duration":"02:02:10","url":"/play/18979014.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MTYvMzI1NWFhNzc2OWRhOTQwZmM5NmM1NDY4ZWU0ZmQwNzYuanBn.cache","vod_id":19047338,"title":"VENZ038 Một người vợ ham muốn tình dục mãnh liệt quyến rũ một dương vật khổng lồ bằng những nụ hôn kiểu Pháp gợi cảm và màn quan hệ tình dục bằng miệng sâu lắng, khiến nó xuất tinh.","lastmod":"2025-08-15","duration":"01:44:49","url":"/play/19047338.html"}]},
videoTitle: 'SCPX-382-CN "Vì anh đã làm thế với vợ tôi, vậy thì hãy để tôi làm thế với vợ anh nữa!!" Trả thù vì bị cắm sừng trước mặt chồng.',
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=/`;
}
};
}