Mặc dù rạp chiếu phim vắng tanh, nhưng một người phụ nữ xinh đẹp đã ngồi xuống ghế bên cạnh tôi! Hơn nữa, cô ta là một con điếm! 星仲ここみ FALENO TUBE","lastmod":"2026-07-11","duration":"2:42:07","url":"/play/19267106.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzQ0MmI4NjNkYThiOTdlODQ5YTAzNDY1MzJkMmQyODkuanBn.cache","vod_id":19164693,"title":"Cô gái say xỉn bị trói - Tan chảy - Khi một người phụ nữ trải qua cực khoái mãnh liệt, cơ thể cô ấy co giật và run rẩy - Aloha Maeda.","lastmod":"2025-03-30","duration":"2:18:37","url":"/play/19164693.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvN2ZjZTRhMWE2NGM2MTk2NDdjZWJhZTRkNTYyZTY4ZjAuanBn.cache","vod_id":19072955,"title":"Tôi đã thử với một cô gái tôi gặp ở khu vực hút thuốc!","lastmod":"2025-03-29","duration":"0:40:34","url":"/play/19072955.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNWY1NjhiMDJmNzNmYWI3YzA0YTg1ZjhhOTk0YjIxYjIuanBn.cache","vod_id":19131290,"title":"Phòng hẹn hò theo chủ đề phim băng tuyết với những cô gái xinh đẹp (Phần 1) ~Nhiệt tình, chủ động và rất thích phiêu lưu~","lastmod":"2025-03-29","duration":"0:38:39","url":"/play/19131290.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MDIvMjUzYTdlNzMzYmJmMDU1NTZmOWU4MzFlYjBkNWE1OTYuanBn.cache","vod_id":19194869,"title":"Sự thức tỉnh dâm dục của một cô gái Lolita.","lastmod":"2025-04-02","duration":"0:00:05","url":"/play/19194869.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOWFkYjA0OWQxMGNjNTYyZDgzNmNmYmM4OTI0ZjdiYzQuanBn.cache","vod_id":19061961,"title":"AGAV-016 [Câu chuyện có thật] Cô gái say xỉn nghiệp dư bị đưa đến khách sạn - Cảnh quay thực tế về cô gái say xỉn trở thành gái điếm và cuối cùng bị cưỡng hiếp hết lần này đến lần khác - Aya Ibuki 1","lastmod":"2025-03-29","duration":"2:08:00","url":"/play/19061961.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOTBjYTgzYTA4NDA4ZjQ3OTM0N2IyMWQ3YzYxODBmNjcuanBn.cache","vod_id":19149434,"title":"Trong năm năm qua, tôi đã có quan hệ tình dục không ràng buộc với bạn của con trai mình. Chơi với lửa với một cô gái trẻ... Creampie","lastmod":"2025-03-30","duration":"1:58:42","url":"/play/19149434.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMDNmOWE2NDBiNTU5MGZhMDU3MTM1N2VhZWQ4OWY2ZjEuanBn.cache","vod_id":19122515,"title":"Người mẫu xe hơi gợi cảm Mao Ting đã bị một nhiếp ảnh gia tấn công tình dục trong một buổi quay quảng cáo sữa chua.","lastmod":"2025-03-29","duration":"0:23:28","url":"/play/19122515.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjljN2M4YmJjYjZjNzRlNTk1MjZmZWU5ZGFlMmQ5YjEuanBn.cache","vod_id":19070292,"title":"Rừng Đen của Cô Gái Mắt To~ Chào mừng đến với My Stitch~","lastmod":"2025-03-29","duration":"1:06:48","url":"/play/19070292.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYzk5YzdmODdlZjRlZTRlYzA1MjM2ZDg5OGNkNjMwYTAuanBn.cache","vod_id":19184395,"title":"MMND174 \"AV Impossible\" Misaka Kei, 19 tuổi, làm việc tại một cửa hàng bánh bao nhân dưa. Khi cởi quần áo của cô ấy ra, bạn sẽ thấy bộ ngực đồ sộ của cô ấy. Bộ ngực cỡ G của cô gái làm thêm này bị xâm phạm và xoa bóp một cách triệt để.","lastmod":"2025-03-30","duration":"1:58:29","url":"/play/19184395.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjMzZjcxMDdhMzJiOTBiYzhhZTEyZTcyOGI5MTllYmEuanBn.cache","vod_id":19042191,"title":"NTR ngược: Huấn luyện viên cá nhân đã kết hôn Mizuki Yayoi quyến rũ tôi bằng vòng ba tuyệt đẹp và nụ cười ma mị của cô ấy.","lastmod":"2025-03-28","duration":"2:03:31","url":"/play/19042191.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvNTNlYTU4ZDFlNzJhMDA4ZDVhZTVhZDEyYTYwYTA1MWEuanBn.cache","vod_id":19261376,"title":"Cô gái Lolita, cô gái Lolita chất lượng cao, mút dương vật sâu tận cổ họng, âm đạo khít, căng tròn, mềm mại, mông nhô ra chờ được thâm nhập, xuất tinh trực tiếp vào bên trong không dùng bao cao su.","lastmod":"2026-05-31","duration":"0:17:29","url":"/play/19261376.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMmEyYWJkZTNlZjVhZDRjMjI3YmQwMjcxZGFmYWNiY2QuanBn.cache","vod_id":19076019,"title":"[Cảnh báo khiêu dâm] Cô con gái khỏe mạnh và quyến rũ! Thân hình đầy đặn, vòng ba to và cảnh quan hệ tình dục xuất tinh!","lastmod":"2025-03-29","duration":"2:23:30","url":"/play/19076019.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODM5MjJmMDhiMWQzNzRmOTY5ZTY5ZDEwZjcwNTU4NTAuanBn.cache","vod_id":19034284,"title":"MVSD-481 Khi tôi đến bên cạnh cha, tôi lớn lên nhờ việc ngày ngày chơi đùa với núm vú của mình; tôi vẫn nhớ về núm vú của tôi. (Maikari)","lastmod":"2025-03-28","duration":"2:42:21","url":"/play/19034284.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvN2NlOGZlZmRlNTU1NTc3MTcwMmU0ZTE5MTY0ZDJlNDMuanBn.cache","vod_id":19244459,"title":"Một cô gái có ngoại hình giống hệt Christy Chung đang thực hiện dịch vụ mát-xa khỏa thân.","lastmod":"2026-02-12","duration":"0:13:12","url":"/play/19244459.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvM2ZiNjBhNjMxNGM5NjVmYTVkYTkwYWNlZmM3NDJhNGQuanBn.cache","vod_id":19033710,"title":"Chào mừng đến với! Học viện thác loạn riêng tư 4","lastmod":"2025-03-28","duration":"0:18:25","url":"/play/19033710.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZmIxZmU2YjQ5ZThjMDU2ZmM2ZGNjZGIyYWVkNWY1ZjkuanBn.cache","vod_id":19148705,"title":"Phụ nữ đã kết hôn được chào đón! Tôi đã bí mật quay phim các cuộc gặp gỡ tình dục của tất cả những người phụ nữ trưởng thành trong nhà tôi. (Naoko, 14 tuổi)","lastmod":"2025-03-30","duration":"2:52:00","url":"/play/19148705.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOGUxZGQ5ZmIwYjk3N2E3YjVjMDFkYWIzYjk1NmI2NjMuanBn.cache","vod_id":19140764,"title":"[Bản gốc phát hành lần đầu] Cô bé loli này thật sự rất thú vị khi quan hệ tình dục.","lastmod":"2025-03-29","duration":"0:39:33","url":"/play/19140764.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjU3ZWU1NmVhMzhhOWU4NGUwN2QwMTg2NmQ4NzgxMmQuanBn.cache","vod_id":19142589,"title":"Cô thư ký, với bộ ngực săn chắc và vòng mông đầy đặn, là một con điếm lẳng lơ chuyên quyến rũ nhân viên của mình. (Erina)","lastmod":"2025-03-29","duration":"2:13:41","url":"/play/19142589.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvNzQ5YTAyNDJkMTcyM2E2YTIzZmZhNzgxZjZiZGRiMjUuanBn.cache","vod_id":19260901,"title":"Video tục tĩu về cô gái xinh đẹp trong trang phục áo tắm học sinh. (グレイズ)","lastmod":"2026-05-27","duration":"1:59:31","url":"/play/19260901.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMDAwZTU0M2Y4NDhiMzU2NDZlOGNlZmQ3MmMzMWVmOGMuanBn.cache","vod_id":19107610,"title":"THNIB-070 Cô gái dễ thương nhất lớp _ Sakura Momono","lastmod":"2025-03-29","duration":"1:25:49","url":"/play/19107610.html"}]},
videoTitle: 'CAWD553 Tôi muốn ăn mông của bạn. Cô ấy trông giống như cô gái nổi tiếng trên TV, trong quảng cáo và phim ảnh, nhưng cô ấy rất dễ bị tổn thươ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=/`;
}
};
}