Trong một chuyến công tác, cô bị phát hiện có công việc làm thêm là người mẫu áo tắm. Cô bị buộc phải ở chung phòng với ông chủ khó chịu của mình và bị cưỡng bức tình dục và xâm hại tình dục nhiều lần. (Phần còn lại của văn bản dường như không liên quan và có thể đề cập đến một bài báo hoặc mô tả riêng về một nữ nhân viên.)","lastmod":"2026-07-11","duration":"","url":"/play/19267255.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvM2NhYjdhNGFmOGFmNTI2NzM3YmNlNzQ3NTQ5Njg5ZDEuanBn.cache","vod_id":19189877,"title":"GVG887 Sổ ghi chép y tế biến thái về việc liếm mặt và xuất tinh của bác sĩ già - Hatano Yui.","lastmod":"2025-03-30","duration":"2:18:42","url":"/play/19189877.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZmFhMjQ3NDI3MjI5NWM0NGYyNWZlN2Q1ODFhNzRlMzMuanBn.cache","vod_id":19089635,"title":"Cô thư ký xinh đẹp, ngực khủng của chủ tịch công ty đã quyến rũ anh ta!","lastmod":"2025-03-29","duration":"2:58:14","url":"/play/19089635.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MjEvNzdkZWI4NTEzMTE2NWY1Mzk2ZTAxZDc5MzU4MWQ3N2MuanBn.cache","vod_id":19198643,"title":"Mijiri OL, người làm việc trong bộ phận giải quyết khiếu nại cực kỳ tệ, được miêu tả trong tư thế nằm sấp kiểu dogeza, chuyển động như một con piston đi vào từ phía sau. (JUQ-104-C)","lastmod":"2025-04-21","duration":"","url":"/play/19198643.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMmJkNTM1OTI3ZWYwMjFjMWJiMGU2MzMzYTNiMWMwNTkuanBn.cache","vod_id":19168316,"title":"[Tay anh sẽ với tới đâu...?] Không thể cưỡng lại được tên bác sĩ vật lý trị liệu dâm đãng, cô gái mặc đồng phục, Futaba Megumi, đã bị xâm hại.","lastmod":"2025-03-30","duration":"1:58:50","url":"/play/19168316.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZTRjYTU4NDQzZTg0ZWU4Mzk4YmVhMmUzZmRiZGFmNzEuanBn.cache","vod_id":19138824,"title":"8 \"Đừng bỏ chạy!\" Em gái kế của tôi là một con quái vật tình dục thích quan hệ thâm nhập! Em gái kế của tôi là một cô gái quỷ dữ siêu hư hỏng!","lastmod":"2025-03-29","duration":"3:54:54","url":"/play/19138824.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMTkvMTBiM2ZlOTQwN2EwNmQ0ZWI0MzIyZjNhYWIxNDViNDMuanBn.cache","vod_id":19227029,"title":"MADM_190 [4K] Vợ của người hàng xóm là một huấn luyện viên xinh đẹp, dẻo dai và quyến rũ. Cô ấy táo bạo quyến rũ bạn, mang đến cho bạn sự phát triển thiêng liêng mà bạn luôn mơ ước. Xuất tinh bị cấm.","lastmod":"2025-10-18","duration":"2:06:20","url":"/play/19227029.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzk1MDc5Yjk0MTJmNmM2ZmEyZTUyZTlmZjAxNjg1MmIuanBn.cache","vod_id":19050830,"title":"SDAB-124-CN Lần vi phạm nội quy trường học đầu tiên và tuyệt vời nhất của tôi, \"Lần đầu tiên quan hệ tình dục trong trường\", tôi có linh cảm xấu rằng điều gì đó tồi tệ sắp xảy ra, nhưng tôi không thể ngăn cản được. Nakajo Aoi","lastmod":"2025-03-29","duration":"2:18:23","url":"/play/19050830.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYmYwOWI5NWMxZDdhOGUxZDQ3Mzk5MDI1NGEzYWQxZDcuanBn.cache","vod_id":19241571,"title":"Tôi thích liếm cái dương vật bóng bẩy, căng mọng đó! Con điếm lưỡi rắn! Một bữa tiệc tình dục quyến rũ, đầy kích thích cho đến khi dương vật hoàn toàn mất hết lý trí. Nữ diễn viên vô danh BLK-682","lastmod":"2026-01-26","duration":"1:58:23","url":"/play/19241571.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZGYyOTAyMmNkYmRmNTA3ZDk2YzQzN2Q5ODM1ZDI4MDcuanBn.cache","vod_id":19164530,"title":"Lần đầu quay phim phụ nữ đã kết hôn BEST19 8 giờ tập 07 Ham muốn vô độ × Xuất tinh × Thân hình mảnh mai - Nữ diễn viên không rõ danh tính.","lastmod":"2025-03-30","duration":"8:04:26","url":"/play/19164530.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNWUxODIyNjQzMjRhMmJhYjNhZGRmOTVhNzYwZWRjZjAuanBn.cache","vod_id":19144733,"title":"8. Xuất tinh không giới hạn được chấp nhận: Trong khi tắm bồn, cô ấy nhìn chằm chằm vào bạn, đòi hỏi bạn xuất tinh vào bên trong cô ấy hết lần này đến lần khác.","lastmod":"2025-03-29","duration":"2:50:51","url":"/play/19144733.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvN2NhOGE2ZDNlYWJhZjVlYWQzNjU5Yzg5N2YzZWNkNjYuanBn.cache","vod_id":19061381,"title":"MEYD-573-CN Một người phụ nữ đã kết hôn, không quan hệ tình dục trong một năm và bị dồn nén về mặt tình dục, đã ngủ với tôi và xuất tinh vào trong tôi. (Nakano Nanao)","lastmod":"2025-03-29","duration":"1:56:18","url":"/play/19061381.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYWM2YTQ2NDk1MGQyNzUzOGRhZGM2Y2Q0NzNkYmE4MTIuanBn.cache","vod_id":19171001,"title":"MUDR-266 Hành vi nhìn trộm, trộm cắp và che đậy một cô gái đang ngủ... Học trong khi ngủ. Khoái cảm liên tục từ việc xuất tinh.","lastmod":"2025-03-30","duration":"2:15:35","url":"/play/19171001.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MjMvNzA1YTAwMDBiZTg3YjhkMjYyZDk4MTk5ZDc2OWM3NGYuanBn.cache","vod_id":19199007,"title":"Không bị cấm xuất tinh: Tôi có thai với bạn của chồng. Kimizuka Hinata JUQ-064-C.","lastmod":"2025-04-23","duration":"","url":"/play/19199007.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzkyMzVjNzVjNWRhNTk2NzFhNzU3ZTkzMTQ4MDYwZWQuanBn.cache","vod_id":19192282,"title":"Cướp bạn trai của em gái mình - một hành vi phản bội tàn nhẫn, phi nhân tính.","lastmod":"2025-03-30","duration":"0:29:57","url":"/play/19192282.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNDE0NTdlMGU2M2M1OTgwNjUyN2FjMmMyZmU4NzUyNDQuanBn.cache","vod_id":19236999,"title":"Cô chủ tịch hội học sinh nhút nhát, với vòng ba căng tròn và không mặc nội y, đã quyến rũ tôi. Không thể cưỡng lại, hậu môn của cô ấy co thắt vì bị trêu chọc, dẫn đến một cuộc giao hợp cuồng nhiệt từ phía sau. Rei Kuroshima MIAB-535","lastmod":"2025-12-29","duration":"1:57:32","url":"/play/19236999.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MTcvMWU1NWU0OWRkNzg4OTFiYjc3ZTBjOTg3NmI4ZDUxZTUuanBn.cache","vod_id":19208225,"title":"MUKC056 có cảnh quan hệ tình dục tập thể ngoài màn ảnh với một thần tượng underground xinh đẹp. Nếu bạn cố gắng hết sức, bạn có thể tận hưởng cảnh xuất tinh trần trụi không giới hạn số lần.","lastmod":"2025-06-17","duration":"2:06:54","url":"/play/19208225.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNjVkNWNmN2M5NzcxMDVlOGJkZTM3OWFjZTkxYWMxNDMuanBn.cache","vod_id":19236383,"title":"Một người đẹp ngực khủng, phóng khoáng và một cô gái phục vụ quán cà phê đã có một cuộc gặp gỡ tình dục bí mật, không dùng biện pháp bảo vệ bên ngoài quán cà phê. (KNMB-107)","lastmod":"2025-12-25","duration":"","url":"/play/19236383.html"}]},
videoTitle: 'Thang máy bị hỏng, và cả hai đang ở trong một căn phòng bí mật, nơi họ ăn thịt lẫn nhau.',
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=/`;
}
};
}