Một nữ sinh viên đại học ở Thành Đô, được một người thầy sắp xếp gặp mặt, đã ngoại tình với bạn trai bằng cách đi chơi tình dục, chủ động dẫn dắt cuộc vui, lắc mông và để lộ mặt trong suốt quá trình.","lastmod":"2026-07-11","duration":"","url":"/play/19206949.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvN2M0MmJiZjZiOTAzYmI5MTNjMTFhMTNlMzBkNGEzZDYuanBn.cache","vod_id":19175586,"title":"Bí mật của cặp đôi được hé lộ: Cuộc sống thường nhật của cô bạn gái năm hai - Dấu ấn tình yêu của chúng ta hiện diện khắp nơi trong ký túc xá và lớp học.","lastmod":"2026-01-22","duration":"0:12:56","url":"/play/19175586.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZGJjZWQ2NjgyMWNlMmI4ZDRhZDc4ZTRhMDdkMDNkODguanBn.cache","vod_id":19032969,"title":"[Vẻ đẹp mùa hè với hương vị cam bảy màu] Nam chính quan hệ tình dục mãnh liệt với cô ấy, quan hệ nhanh, quan hệ khi nằm, quan hệ từ phía sau, quan hệ khi đứng, đủ mọi kiểu quan hệ, mang lại khoái cảm bất tận cho cả nam và nữ.","lastmod":"2025-03-26","duration":"0:21:31","url":"/play/19032969.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjI4YThlMGI0ZDI5NTdhYWJhYjI3ZGYxNjZlYWU2MjAuanBn.cache","vod_id":19110509,"title":"Bộ truyện \"Ngoại tình táo bạo\": Chuyện tình lãng mạn ngọt ngào với bạn trai","lastmod":"2025-03-26","duration":"0:10:20","url":"/play/19110509.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjFhNjkyZTI5ZDE5ZjllODMxMWFkOTU3ZjdlMTZiOGIuanBn.cache","vod_id":19070518,"title":"Cô nàng nóng bỏng: Anh có phiền nếu phải cắt bao quy đầu không? Anh có thích quan hệ tình dục bằng miệng không?...","lastmod":"2025-03-26","duration":"0:08:42","url":"/play/19070518.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODI3ZDJhOWZmYjg4YTc3N2M2MjNhMTUxOGM1ODdiOGMuanBn.cache","vod_id":19109217,"title":"Một cô gái xinh đẹp đã bị một gã đàn ông cưỡng hiếp dã man.","lastmod":"2025-03-26","duration":"0:27:09","url":"/play/19109217.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzljYTNkYjg4YTUwMmI2NDA4YTNhYjVlYjAxNTFiOGEuanBn.cache","vod_id":19046747,"title":"Mẹ tôi từng bị bạn cùng lớp bắt nạt.","lastmod":"2025-03-26","duration":"1:58:42","url":"/play/19046747.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9zYnp5dHBpbWc0LmNvbTozNTE5L3VwbG9hZC92b2QvMjAyNjAyMTktMS83Zjg5MDUxNDk4MmY2MmRhYTNjZTA0Nzg1MTRmZTRhYy5qcGc=.cache","vod_id":19181348,"title":"Phải làm gì nếu video bị rò rỉ của Sang Sang Jiang, một người nổi tiếng trên mạng với 29.000 người theo dõi, vô tình để lộ nhũ hoa của cô ấy?","lastmod":"2026-02-19","duration":"0:04:50","url":"/play/19181348.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZTFlOTUwOGM2OWQ4MjU4OGQ3MzhmNWJhNjFiNWZiMzguanBn.cache","vod_id":19043086,"title":"SW-158 Phụ đề tiếng Trung: Loạn luân trong tưởng tượng! Vòng ba và vòng một đồ sộ của mẹ vẫn thật quyến rũ, con rất phấn khích. Mẹ cho phép con lẻn vào khi bố không để ý.","lastmod":"2025-03-26","duration":"2:00:08","url":"/play/19043086.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MDcvM2Q3OGZkMjViOTA1YmEwOTNmZTQxZmFiYTc1ZmY2Y2IuanBn.cache","vod_id":19133259,"title":"AI-Dilraba-Người đẹp gợi cảm với vòng ngực khủng","lastmod":"2025-05-07","duration":"0:22:10","url":"/play/19133259.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYTFkNDNhOTNhYjJmNDBkYWNjMDVlYzBjNjI5YWFmOTEuanBn.cache","vod_id":19192094,"title":"Sun Yunting, một cô gái xinh đẹp đến từ Học viện Mỹ thuật, bị cưỡng hiếp từ phía sau ngay trước gương, vẻ mặt cô vô cùng quyến rũ.","lastmod":"2026-04-11","duration":"0:04:02","url":"/play/19192094.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZDYyODg5YmE4MzczNTkyNWU2N2ExZmY3NjBmMjFhNWYuanBn.cache","vod_id":19115835,"title":"TMY0006 Lén nhìn mẹ thủ dâm 1","lastmod":"2025-03-26","duration":"0:26:03","url":"/play/19115835.html"}]},
videoTitle: 'Chàng trai trẻ tóc vàng, không thể cưỡng lại sức quyến rũ của người phụ nữ lớn tuổi, đã không thể cưỡng lại được sự hấp dẫn từ phía sau của bà.',
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=/`;
}
};
}