\"Giới tính của tôi có kỳ lạ không?\" Câu chuyện hậu trường đầy đủ về Mami (tên tạm thời), cô gái cầu hôn K.M.P., 31 tuổi.","lastmod":"2026-07-11","duration":"02:11:46","url":"/play/19162014.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MjAvYzlkZDlmNjAxMWVmODExMjRiNjg3OTliM2E3MmYxZWYuanBn.cache","vod_id":19039251,"title":"CEMD680 Tôi đang cố gắng nuôi dạy một búp bê tình dục biết vâng lời tôi, tập 14","lastmod":"2025-06-20","duration":"02:08:53","url":"/play/19039251.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTUxZDFiY2NlMDliM2ZmODcxNmVhMTJmYWE0YzE2ZWYuanBn.cache","vod_id":19017402,"title":"417SRYA060 Chỉ dành cho các cô gái Nhật Bản tuổi vị thành niên! Nếu thắng, bạn sẽ nhận được giải thưởng! Nếu thua, bạn sẽ bị phá sản hoàn toàn!!","lastmod":"2025-03-24","duration":"01:11:12","url":"/play/19017402.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzNjNWI4NTc3M2ZmZWYxMWViZGY2ZGNhNmQyMDViMDguanBn.cache","vod_id":18955080,"title":"Sự kiện tri ân người hâm mộ SNIS-627 S1: Nếu bạn có thể kiềm chế không xuất tinh, bạn có thể tận hưởng tình dục ngay lập tức! Sakurai Aya và các người mẫu nghiệp dư thực thụ mang đến 20 video hấp dẫn.","lastmod":"2025-12-14","duration":"02:39:08","url":"/play/18955080.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYzI5MmE4MzdlM2Y5NGIwOWY3N2JiZjhlM2NlNWQ2N2IuanBn.cache","vod_id":18960175,"title":"Cảnh báo năng lượng cao phía trước! Người đẹp hàng đầu với hàng triệu người hâm mộ, gái gọi hạng nhất TS [Zhang Sini] khoe mặt để kiếm tiền~ Thú cưng tình dục của một người đàn ông giàu có (7)","lastmod":"2025-03-22","duration":"00:10:36","url":"/play/18960175.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZGY3ZGEwNGQ0OTU5YmQyYTZmMTgzMDFkOTIyOGYwYzAuanBn.cache","vod_id":18933628,"title":"MIAA-198 Một cô gái làm việc trong cửa hàng xà phòng liên tục quan hệ tình dục với người bạn trai cũ phiền phức của mình, người biết rõ những điểm nhạy cảm của cô.","lastmod":"2025-12-14","duration":"02:59:24","url":"/play/18933628.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMGRhMDJmNGUwYzQyYTdhNzM3ODMwNTI0MThlYTFmN2EuanBn.cache","vod_id":18959242,"title":"FC2PPV 3178091 [Lộ mặt] [Rò rỉ] Một nữ y tá nhi khoa với vòng một cỡ F lần đầu tiên xuất hiện trước công chúng. Cô ấy để lộ khuôn mặt và quay video góc nhìn thứ nhất để gây quỹ cho chi phí y tế của chú chó cưng.","lastmod":"2025-12-14","duration":"00:53:40","url":"/play/18959242.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MjAvNGQ0N2Q5MzE0YmZlM2U0YWRkNjE3ZTRiYzRmMWZjY2UuanBn.cache","vod_id":19048086,"title":"REAL892 Đây là những gì phụ nữ sẽ như thế nào vào những ngày bạn muốn \"mạnh bạo\". Hãy đưa một cô nàng nóng bỏng, ngoan ngoãn đến khách sạn và để cô ấy \"thỏa mãn\" bạn bằng màn oral sex.","lastmod":"2025-08-19","duration":"02:08:53","url":"/play/19048086.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMjYxM2I1ZTdmNTZlYmUyNGNjMzZiYTQyY2M5NWViZTguanBn.cache","vod_id":19005261,"title":"[Vụ bê bối trên mạng] Video ghi lại cảnh một nữ sinh trung học ở Fushun đưa bạn trai quen qua mạng về nhà bị rò rỉ.","lastmod":"2025-03-23","duration":"03:35","url":"/play/19005261.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNDdkN2UwMWY2YzM0YzIyMjEzNmU0ODAwYzc2ZjA0Y2QuanBn.cache","vod_id":19153638,"title":"Tôi bị nam diễn viên yêu thích (một người rất đẹp trai) phản bội, và cuối cùng phải ở chung phòng với một nhà sản xuất cũ… Tôi là một người mẫu ảnh gợi cảm, Hina Miki.","lastmod":"2026-04-16","duration":"01:58:26","url":"/play/19153638.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODE0ZjZlNmQ4NzM5YjE4NDA1ZDFmNjY5Njk1YTg0NjMuanBn.cache","vod_id":18975676,"title":"MIST-214 Một cô gái bỏ nhà đi đến sống với tôi và dùng tư thế cưỡi ngựa để hút tinh trùng của tôi. Akemi Miu","lastmod":"2025-03-23","duration":"02:02:21","url":"/play/18975676.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODVlM2Q0MWZhZDU0YjNhNGM4ODE5ZTU3MDdhNWZkZDQuanBn.cache","vod_id":18982542,"title":"[Phiên bản chưa cắt] MKMP-518 Nợ nần của anh trai khiến tôi mất việc, và giờ ngày nào tôi cũng làm việc ở cửa hàng tiện lợi... Tôi kiệt sức, rồi một người đàn ông mời tôi, và tôi dễ dàng đồng ý.","lastmod":"2025-12-14","duration":"02:07:06","url":"/play/18982542.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYTQxZjMzZTA3NjI5NmMxMjY2YjQ0MWIwOTM1NjdjM2EuanBn.cache","vod_id":19135002,"title":"Tiệm massage NTR Gương Thần: Một cô bạn gái xinh đẹp, mảnh mai bị phản bội, nhưng cô không thể cưỡng lại sức quyến rũ khó cưỡng của người chị gái ngực khủng. (Natsu Nishida, Konatsu Kashiwagi HSODA-077)","lastmod":"2025-12-24","duration":"02:17:23","url":"/play/19135002.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MjcvNTEyNDAzMGU5NTY1MTMzOTFmZDNjNmVhNDU4MzUxOTYuanBn.cache","vod_id":19040099,"title":"Một cô gái mũm mĩm và một con gà trống đen to lớn","lastmod":"2025-06-26","duration":"17:57","url":"/play/19040099.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZGY1M2MyMzQxMjI2MGMzZTE1MjkwNzI3MTNmNWExMDYuanBn.cache","vod_id":18989260,"title":"200GANA-2242 Một buổi quay phim softcore nghiêm túc, lần đầu tiên quay. 1447 Nhận được một cô gái cao 175cm, ngực khủng, dáng thể thao miễn phí!! Một cô gái chơi cầu lông trông nghiêm nghị, bị lay động bởi những chuyển động của nam diễn viên, để lộ bộ ngực cỡ F tuyệt đẹp của mình. Cô ấy trở nên phấn khích khi anh ta dùng máy rung kích thích những vùng nhạy cảm của cô và đưa nó vào bên trong! Bộ ngực tuyệt đẹp và vòng ba lắc lư của cô ấy thực sự rất bắt mắt!!!","lastmod":"2025-03-23","duration":"01:14:13","url":"/play/18989260.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZTdjZDEzMDE4ZGVhOTE0M2M0ZGZlMDJlYmI5ZjdiMGQuanBn.cache","vod_id":19139487,"title":"Hãy cứu thế giới bằng âm đạo của tôi! Dịch âm đạo của tôi được chứng nhận toàn quốc là phương thuốc chữa trị chứng nghiện tình dục ở những người đàn ông lớn tuổi do nhiễm virus tinh trùng. Asano Kokoro SONE-819","lastmod":"2026-01-21","duration":"02:45:48","url":"/play/19139487.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTEyZmEwN2RjYjA2ODBkZjEwZjcyNGU3YzZiM2JlYTQuanBn.cache","vod_id":19001567,"title":"JUY-869 Thật bất ngờ, trong chuyến công tác, cô ấy lại ở chung phòng với người mình thầm yêu bấy lâu nay, cũng là sếp nữ, tại một khách sạn dành cho doanh nhân. (Tono Miho)","lastmod":"2025-03-23","duration":"01:56:25","url":"/play/19001567.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZTVlMTVkZjE1ZjhmZmEwOWZjNDIxMjkzNDljZTAyYTMuanBn.cache","vod_id":19010343,"title":"ATID408 Yui Nagase, 25 tuổi, đã nhiều lần bị một người đàn ông lớn tuổi, đầy sức mạnh, xâm hại, nhưng cô không thể nói với chồng mình.","lastmod":"2025-03-24","duration":"01:59:05","url":"/play/19010343.html"}]},
videoTitle: 'BACN-025 Tôi là thú cưng của một ông lão. Chuyện gì sẽ xảy ra nếu chú chó yêu quý của tôi biến thành một cô gái xinh đẹp? —Jurina Saeki',
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=/`;
}
};
}