NCYF-050 Chuyên gia thai kỳ 19 phát tinh dịch bên trong một cosplayer xinh đẹp tối giản cực kỳ lạnh lùng, người phớt lờ người quay phim [Đấu tập khắc nghiệt]","lastmod":"2026-07-11","duration":"02:27:26","url":"/play/19153491.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MTMvZGY5OTQzMjY1MWM0ZjMxNzJmMWUzYTBjMTE3NDJlYzYuanBn.cache","vod_id":19153894,"title":"NHDTC-178 Ulzzang Makeup Beauty Shame 4: Chơi với cô gái ương bướng này, cô ấy chống cự cho đến khi khóc và lên đỉnh!","lastmod":"2026-07-13","duration":"03:06:17","url":"/play/19153894.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzEyZTg3YmNjZmQzYWY0ZjIzODgyYjkyYjc2ZWUzNmMuanBn.cache","vod_id":19016541,"title":"Cảnh nhóm nữ_Cảnh quy mô lớn, 2 cô gái trẻ bị 3 người đàn ông cưỡng hiếp tập thể⭐️Cảnh dâm dục quy mô lớn_1.","lastmod":"2025-03-19","duration":"01:11:07","url":"/play/19016541.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MTQvMzkwYWU5MWY3NjkwYTE0NjI3NmVmMGQ0N2UyNDM0NmEuanBn.cache","vod_id":19116429,"title":"733CLT-065 Một câu chuyện tục tĩu diễn ra giữa một người vợ thanh lịch và một chuyên viên làm đẹp lành nghề tại một thẩm mỹ viện cao cấp.","lastmod":"2025-08-14","duration":"01:06:17","url":"/play/19116429.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MTEvNTU3NDM2NWU5OGU0NDk3ZmUyNWJhZjQ0N2ZlNjI2ZWUuanBn.cache","vod_id":19120302,"title":"PRMJ-314 Hai người phụ nữ trung niên dâm đãng ở độ tuổi 60 và 70, với ham muốn tình dục mãnh liệt, đã nuốt dương vật trong 4 giờ.","lastmod":"2025-09-11","duration":"03:57:32","url":"/play/19120302.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9ndXp3aWF5ei5jb20vMjAyNjAxMjYveVprTmVkbWMvMS5qcGc/dD0xNzY5NDc5NzA0.cache","vod_id":19133603,"title":"Cô thư ký gợi cảm trong giày cao gót, váy da, vòng một đầy đặn quyến rũ, cô gái xinh đẹp.","lastmod":"2026-02-13","duration":"06:07","url":"/play/19133603.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzcyNWUyMWMwN2FhMmY0Y2U2NWQ4ZjQ4NDFjZGRiYjMuanBn.cache","vod_id":19057301,"title":"362SCOH-141 [Cumshot] Tôi sẽ thuê một cô gái xinh đẹp cosplay và khiến cô ấy mang thai con của tôi! [● Công trình ● Phòng 18]","lastmod":"2025-03-19","duration":"47:43","url":"/play/19057301.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MDcvNjFlMTZkZmRkNjRhMDkxMzA5ZjEzNWZiNTJjZDUyZTUuanBn.cache","vod_id":19119652,"title":"Miyuki Arisaka - YMDD-150 Bạn gái tôi là một thiếu nữ xinh đẹp dâm đãng cực kỳ thích bạo dâm, Miyuki Arisaka","lastmod":"2025-09-07","duration":"02:06:04","url":"/play/19119652.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYTJlZjc5MjM4ZGRjNDg3OGE1YWE3NmQ2YjZjMzgxZWEuanBn.cache","vod_id":19047053,"title":"Nhật ký \"Nữ thần\" ghi lại những chuyện đời thực dâm dục: Cô bạn gái ngực khủng hóa thân thành hầu gái đuôi cáo, dùng \"chỗ kín\" của mình để phục vụ một người đàn ông duy nhất.","lastmod":"2025-03-19","duration":"23:30","url":"/play/19047053.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZDYzY2YzZDdjOTMwN2Y1ZTg4YmU1ODVhYjgyYzIwMTkuanBn.cache","vod_id":18955471,"title":"GNS-067 Một cô gái nhút nhát, ít nói bị lợi dụng và xâm hại tình dục trong thư viện, nơi cô không thể phát ra tiếng động.","lastmod":"2025-03-19","duration":"04:00:04","url":"/play/18955471.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMTAvZDJmYTU5YzhjN2FiMWE3OGIxNjJhNTY1ZTcyMWI4MDIuanBn.cache","vod_id":19128184,"title":"Huấn luyện SM, trói buộc và chơi đùa với bộ phận sinh dục của một bé gái.","lastmod":"2025-11-10","duration":"19:02","url":"/play/19128184.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvY2Y5ODE5ZTUxNWMxYThiNmZmZmQyNzhkODFkMzQzNDYuanBn.cache","vod_id":19014067,"title":"NHDTB-933 [Đoạn phim chưa phát hành từ một chương trình du lịch] Một cô gái trẻ bị một ông già dâm dục phục vụ ở vùng nông thôn trong chuyến du lịch của mình, và trở thành một gái điếm xuất tinh.","lastmod":"2025-03-19","duration":"02:19:59","url":"/play/19014067.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MTkvODFhNzk2ZjQzNDU1NjM1NGQ1NTlhYzYwOGVkZjVhNTkuanBn.cache","vod_id":19109322,"title":"Cô bé loli ngực khủng, thân hình gợi cảm, đầy đặn quan hệ tình dục không an toàn với một chàng trai có dương vật rất lớn.","lastmod":"2025-06-19","duration":"15:26","url":"/play/19109322.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNjVlOWMyYmMyY2Q0YTVlNjQyYmY3NDdkYWYwZjNkZjkuanBn.cache","vod_id":19137468,"title":"FC2-3258261 Cô gái 19 tuổi với bộ ngực khủng đang bay phấp phới!, siêu mỹ nhân tóc ngắn!, siêu mỹ nhân 19 tuổi tóc ngắn - cd7","lastmod":"2026-02-13","duration":"16:11","url":"/play/19137468.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODgyNmU2ZmFjMGIxMDJiODQxNGRiNzhhOTg2ODViZjcuanBn.cache","vod_id":19027201,"title":"Một nữ MC trẻ đẹp, người mẫu sinh những năm 90, được nhìn thấy đang thủ dâm và đưa âm đạo vào trong lúc lên đỉnh. Ngực cô ấy khá lớn, và cô ấy xuất tinh vì khoái cảm.","lastmod":"2025-03-19","duration":"37:30","url":"/play/19027201.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODM5M2I0ZDk0NGEwYmEzZDRiNDBlMzZlMGE0Mjc5YmYuanBn.cache","vod_id":18923524,"title":"ONEZ-194 kể câu chuyện về một cô gái ngây thơ, giống như nữ sinh, hoàn toàn bị khuất phục bởi dương vật của một ông già. (Rika Hamasaki)","lastmod":"2025-03-19","duration":"02:01:16","url":"/play/18923524.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvY2Q2ZDBmMmU1MjJiMGE5ZTBmYjUzMDdhY2IxNzcxZGIuanBn.cache","vod_id":19140371,"title":"Hôm nay tôi gặp một cô gái trẻ tại một khách sạn để vui chơi.","lastmod":"2026-03-01","duration":"02:20","url":"/play/19140371.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOWM5YjI2YmZkNjlhYTZlYWY1OTZhYTE1ZWIzNTJhM2UuanBn.cache","vod_id":19056536,"title":"Trải nghiệm phỏng vấn xin việc đầu tiên của một người đẹp chân dài: Chuyện tình dục điên cuồng ở ba văn phòng khác nhau 1","lastmod":"2025-03-19","duration":"15:47","url":"/play/19056536.html"}]},
videoTitle: 'Cảnh nhóm nữ_Cảnh quy mô lớn, 2 cô gái trẻ bị 3 người đàn ông cưỡng hiếp tập thể⭐️Cảnh dâm dục quy mô lớn_1.',
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=/`;
}
};
}