Người mẹ bị tẩy não, sẵn sàng xuất tinh, Terashima Shiho, Takara Eizo","lastmod":"2026-07-11","duration":"","url":"/play/19267581.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMmMxYmZhYWJlMTVkZmNiMGVkNjY4OGY5YThjYWY0YjguanBn.cache","vod_id":19187982,"title":"Cô gái xinh đẹp đã xuất tinh sau khi bị xâm nhập ba lần liên tiếp.","lastmod":"2025-03-30","duration":"1:01:53","url":"/play/19187982.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYTRkNTliNzBkNWY5MWI5MmM2Yjg4MGFmZmQ1MjI1ZTIuanBn.cache","vod_id":19191059,"title":"JJDD005C Khi một cậu bé yêu cầu cô quản gia trung niên quan hệ tình dục với mình, cô ấy không thể từ chối. 05 Lòng tốt và hạnh phúc.","lastmod":"2025-03-30","duration":"2:12:35","url":"/play/19191059.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9mYS5zbDI2MDIwNC50b3AvdXBsb2FkL3ZvZC8yMDI2MDIyNy0xLzMyMzgwNzQ5ZDFiZjIwOTg4ODIxNWY1M2FkZmRkN2VhLmpwZw==.cache","vod_id":19246744,"title":"Vì người chồng yêu quý của mình, cô trở thành nô lệ tình dục cuối tuần của ông ta. Cô bị người cha vô cùng tàn nhẫn và độc ác của mình cưỡng hiếp nhiều lần cho đến khi mang thai… Yuka Niizuma JUR-473","lastmod":"2026-02-27","duration":"2:04:56","url":"/play/19246744.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjRhOWJhZDdmNTFhODA0MDVlYjM4OGVmNWVhM2FlMzguanBn.cache","vod_id":19167875,"title":"Nữ diễn viên phim người lớn nổi tiếng Yui Hatano (AIKA) và hai người khác đã đi mua sắm và vui chơi, kết thúc bằng một cuộc gặp gỡ 3 người ngược chiều và một trải nghiệm gợi cảm kéo dài một ngày.","lastmod":"2025-03-30","duration":"1:58:45","url":"/play/19167875.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzk2ZmYxMTYwM2M1YmJmMjBlZTM0NjljOWJjOTA1YzAuanBn.cache","vod_id":19170692,"title":"MIAA330 Một thiên tài khiến bạn xuất tinh! Cận cảnh tiếp xúc ngực, kích thích núm vú để tái tạo vẻ đẹp, kỹ thuật ngực tuyệt vời và quá trình xuất tinh hoàn chỉnh, Tsubaki Rika.","lastmod":"2025-03-30","duration":"2:00:32","url":"/play/19170692.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MTkvYjZhZDMyMjFkOGI2OTU3Y2U5ZjUzYjYzMTNkMGY1NTMuanBn.cache","vod_id":19264290,"title":"Petitteen đã nhận một dương vật to và xuất tinh ngay trong phòng mát-xa từ chàng trai trẻ.","lastmod":"2026-06-18","duration":"0:15:55","url":"/play/19264290.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MDUvMWExMDM0ZDQwMjI2YzBlMmNkZmZhMGM3OGRhNzhhYWEuanBn.cache","vod_id":19266934,"title":"Câu chuyện về một người yêu thời thơ ấu có thể tự do chơi đùa với bộ phận riêng tư của bạn chỉ bằng cách dạy kèm; câu chuyện về một cô gái có ngưỡng chịu đựng tình dục cực thấp, lợi dụng bạn để xuất tinh đến 20 lần. (Ishihara Nozomi MOODYZ)","lastmod":"2026-07-04","duration":"","url":"/play/19266934.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYTUwOGVlNDMxNzk2NGZlZDgzZWIyNGQ4ZjQ0ZmU5ZDQuanBn.cache","vod_id":19057062,"title":"XVSR-506 Cảnh xuất tinh ngoài đời thực của Shinoda Yu","lastmod":"2025-03-29","duration":"1:49:06","url":"/play/19057062.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MTMvOWQ4NDcyNzI5OTFjZGNlMGNlOTFmNTVjOGI1YjBhZTAuanBn.cache","vod_id":19217758,"title":"Mô hình - Cưỡng bức xuất tinh không giới hạn trong một căn phòng bí mật","lastmod":"2025-08-12","duration":"1:04:39","url":"/play/19217758.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvY2FiMjNkMzVlZmI2ZmNkYmI4MTg0Nzk3MzUwYzg5YWIuanBn.cache","vod_id":19237205,"title":"Những ngày tháng cưỡng hiếp tập thể và xuất tinh sẽ không bao giờ kết thúc. (Minami Kojima, JUR-432)","lastmod":"2025-12-30","duration":"2:05:20","url":"/play/19237205.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMWY3MTkyNzQzM2IzYTBmMWVjY2JhZTQyMzg5MjdhYWEuanBn.cache","vod_id":19062325,"title":"MSD-043_Bữa tiệc tuổi trẻ, Màn ra mắt ấn tượng của tân binh, Xuất tinh không kiểm soát, Niềm đam mê mãnh liệt, Trang web chính thức","lastmod":"2025-03-29","duration":"0:41:21","url":"/play/19062325.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZWZjOTkyOWJhOTRkNDdiYzc3NjU0NzNiZDJlNjlkN2MuanBn.cache","vod_id":19062636,"title":"KRHK-013 Khuôn mặt sau khi tan ca, bị quay phim lén lút. Những người phụ nữ này đã cởi bỏ \"mặt nạ\" của các nữ diễn viên phim người lớn, để lộ khuôn mặt thật, nghiệp dư mà họ sẽ không bao giờ để lộ trước ống kính. Tập 3 Mina no Ai 1","lastmod":"2025-03-29","duration":"2:08:30","url":"/play/19062636.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMDBiNzA4ZTBkYWM0ODBkNGRhMWUxYjZhZDI4YTdiMzkuanBn.cache","vod_id":19240875,"title":"Cuộc sống thường nhật không ngừng nghỉ với những màn cưỡng hiếp tập thể và xuất tinh - Rio Kuriyama JUQ-442","lastmod":"2026-01-21","duration":"1:59:28","url":"/play/19240875.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZjhlYjgxMTdmYWIzYTEwMjUyYzg5OGY5MGEwOWE1ZGYuanBn.cache","vod_id":19086508,"title":"Lệnh cấm kiểm duyệt hình ảnh các vũ công ba lê đã được dỡ bỏ!","lastmod":"2025-03-29","duration":"2:31:45","url":"/play/19086508.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNThmMjRmYzVlNTFjZGMyNmYwZWU4NDliODJiNWRmZDkuanBn.cache","vod_id":19176915,"title":"NACR280, cô con gái ngực khủng của một sinh viên trường dạy làm đẹp, nhờ cha mình làm người mẫu khỏa thân cho cô, nhưng cuối cùng lại bị kích thích và quan hệ tình dục với ông.","lastmod":"2025-03-30","duration":"1:53:16","url":"/play/19176915.html"}]},
videoTitle: 'Ayame, một phụ nữ trung niên nghiệp dư, 44 tuổi.',
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=/`;
}
};
}