Meniduri gadis buronan dengan kasar! Pelatihan dan ejakulasi di kamar single, catatan lengkap tentang kejatuhannya yang cabul.","lastmod":"2026-07-11","duration":"","url":"/play/19245226.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNDRiYWI4ZDc0ZTI3NjNkZDk2YWU0ZjI3NDBjZjMxMWIuanBn.cache","vod_id":19163029,"title":"Seorang wanita cantik berpayudara besar (gamer) setingkat idola (gaya Nogizaka) yang ditelepon oleh pacarnya lalu diam-diam mengeluarkan ejakulasi di dalam dirinya.","lastmod":"2025-03-29","duration":"01:11:32","url":"/play/19163029.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjcyNDQ2Y2ZjNjkyZmM5MWUxOGNlYmM0MGZjZGRiZDEuanBn.cache","vod_id":19116627,"title":"[Kode Definisi Tinggi] 494SIKA-241 3P Aheiki setelah kencan dengan wanita cantik berpayudara kecil dan sebuah rotor","lastmod":"2025-03-29","duration":"01:22:38","url":"/play/19116627.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZTk3Y2U3NzQ4NjA2MWRkNjM2NjBiOGY5M2JiODk2NjAuanBn.cache","vod_id":19234164,"title":"Idolmaster Love Thread: Idol Berdada Besar Disetubuhi dan Dikeluarkan Sperma di Dalam! Versi Lengkap 60fps dengan Efek Suara","lastmod":"2026-05-12","duration":"0:05:29","url":"/play/19234164.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOWYzNDMwMTU4MjliNzI2M2QxYTgxYTM5NTU5M2IxMGYuanBn.cache","vod_id":19152189,"title":"BAZX227 Bantal Idol Original Bisnis Vol.007.","lastmod":"2025-03-29","duration":"","url":"/play/19152189.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYjM3OTg3N2FhYmJiYjkyMDk4MTI3ZTY0N2YzN2Y4MWEuanBn.cache","vod_id":19233081,"title":"NajarHina, Sang Master Idola, Payudara Besar, Lubang Seksi, Versi Lengkap, 60fps, Seks Payudara dan Ejakulasi","lastmod":"2026-05-05","duration":"0:04:36","url":"/play/19233081.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMTFjYWVkOTI2YjJhNTY1NTg1MjcyYWVhZjQyMWVkMzUuanBn.cache","vod_id":19121454,"title":"MKMP-249 Aula Ketenaran! Super Idol 4 Jam - Yuri Oshikawa","lastmod":"2025-03-29","duration":"01:55:32","url":"/play/19121454.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMGQ0MjJlMWY1YmJiZjc0MmE5ZTMyNzU0MzZmZTk2YTEuanBn.cache","vod_id":19106169,"title":"200GANA-2221 Softcore serius, pengambilan gambar pertama. 1431 Seorang wanita cantik yang berhati-hati namun kewalahan! Pada akhirnya, dia menyerah dan memasukkan penis aktor ke dalam mulutnya, dan mereka secara alami mulai bercinta! Tubuhnya sangat sensitif; sentuhan sekecil apa pun akan membuatnya basah dan gemetar.","lastmod":"2025-03-29","duration":"","url":"/play/19106169.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzc0ZWVmZTZmMjBlMzVlNjc1YTBmYWM5YThiYWI4OGEuanBn.cache","vod_id":19099171,"title":"[Tanpa Sensor] KAWD-723 Seorang gadis muda yang cantik namun mesum dan kecanduan seks, Suzuki Koharu, bertemu dengan seorang pria paruh baya yang dikenalnya di media sosial empat kali seminggu dan menjadi terobsesi dengannya.","lastmod":"2025-03-29","duration":"01:58:01","url":"/play/19099171.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNDY3YWM4N2RjZmI2MmQ0NjhkZTBmZDBhYmQ0MDY3ODkuanBn.cache","vod_id":19093786,"title":"SHKD-934 Hari ini adalah hari jadi akhirnya aku bercinta dengan putriku, yang telah kulihat tumbuh dewasa. Minri Neo","lastmod":"2025-03-29","duration":"02:19:27","url":"/play/19093786.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzA5ODFjZDYxM2Y5MmQ3OWIzYTE3ODNhODMwYmUzMmEuanBn.cache","vod_id":19164519,"title":"Memamerkan wajahnya ♥ Seorang model yang imut dan langsing setingkat idola.","lastmod":"2025-03-29","duration":"04:35","url":"/play/19164519.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYzJmNTBiNTE3NDdhMmZmM2E1MzMzY2FmOTBlOWYxZjEuanBn.cache","vod_id":19170198,"title":"XRW577 Ciuman lidah dan hubungan seks antara wanita yang mesum dan tergila-gila.","lastmod":"2025-03-29","duration":"02:04:57","url":"/play/19170198.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMzlhZmJlYjU3ZjM3OGQ0ZWVkNmMwZjkzODY5NzdiOTMuanBn.cache","vod_id":19136798,"title":"Pemuda dan wanita yang baru saja lulus dari sekolah menengah pertama dan sekarang bersekolah di sekolah kejuruan itu benar-benar buas, menikmati layanan seks oral dari gadis-gadis murahan ini, bergantian berhubungan seks dengan mereka, dan menusuk mereka.","lastmod":"2025-03-29","duration":"09:34","url":"/play/19136798.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZWU5YTFjMmFiZDRhYmM0MjA0NjljODE1ZjA0ODVjY2QuanBn.cache","vod_id":19066111,"title":"AMBI-121 Mainan Seks Ayah Setan: Seorang siswi berseragam sekolah berpisah dari pacarnya, Kisaragi Mashiro.","lastmod":"2025-03-28","duration":"02:02:24","url":"/play/19066111.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYjFlYjZiMGEwY2Q2ZTQ3NzBiZmRjMjFlY2Q4MmJiODIuanBn.cache","vod_id":19214967,"title":"[Blacked] Aku diam-diam berhubungan seks dengan pacar kulit hitam ibuku di belakangnya.","lastmod":"2026-02-02","duration":"0:12:22","url":"/play/19214967.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODllMmRmYWU0ZWM0MmM5N2MzZGU0M2EzZjA1ZjU4MzAuanBn.cache","vod_id":19086042,"title":"[Subtitle Bahasa Mandarin] COGM-037 Aku mandi busa bersama Fuwako (nama keluarga) yang berdada besar (nama keluarga) lalu bercinta sepanjang malam.","lastmod":"2025-03-29","duration":"01:49:03","url":"/play/19086042.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjkvOTQzMmQ4NTdmNTM3ZmIzNjVmN2VmZDQ1YjA0ODBhOTkuanBn.cache","vod_id":19242925,"title":"ADN-602-C Seorang mantan narapidana memperkosa seorang wanita muda yang sensual secara brutal, dan mengeluarkan sperma di dalam kemaluannya.","lastmod":"2026-06-29","duration":"1:55:46","url":"/play/19242925.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvN2UxM2Y1NjQzZTIyNmNkM2Q5MDIzMjg3YjRmOTFmMmUuanBn.cache","vod_id":19104865,"title":"MUDR-093 Sesi Pemotretan Seks Pribadi 01: Siswi Berseragam dan Pria yang Lebih Tua - Nagase Yui.","lastmod":"2025-03-29","duration":"","url":"/play/19104865.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZjU0YTdlMTVjNDcxNzIyM2IyZjE4ZTYzYzZjZjUyZjUuanBn.cache","vod_id":19230815,"title":"DSLC-022 Wanita cantik amatir berkualitas tinggi diperkosa secara brutal dan dilatih menjadi jalang murahan oleh penis yang besar.","lastmod":"2026-04-25","duration":"0:09:01","url":"/play/19230815.html"}]},
videoTitle: 'Mari bercinta sambil saling menatap seperti keindahan tingkat galaksi. (Peserta Pelatihan Idol: Kirari 002)',
language: 'id',
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('Tautan berhasil disalin!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Tautan berhasil disalin!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Tautan berhasil disalin!');
}
}
},
// 切换布局
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=/`;
}
};
}