Muitas pessoas estão pedindo por lésbicas maduras para treiná-las. Elas são tão bonitas e têm gostos extremamente pervertidos e intensos.","lastmod":"2026-07-11","duration":"29:33","url":"/play/19165871.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNzc5Zjk2YzRjMDE3OWQwNGM3MmU3MzRlMjBiMzFjMTkuanBn.cache","vod_id":18963662,"title":"VAGU-200 Banho de Espuma com Torta de Creme Incestuoso: Minha Primeira Vez em um Bordel de Mulheres Maduras, e a Garota que Escolhi Era na Verdade Minha Mãe, Shinohara Yuka","lastmod":"2025-12-14","duration":"01:28:53","url":"/play/18963662.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZDc5NDkyOTk5MGJmY2JlZjFiYTQzZTRhMWVkOTg1MzIuanBn.cache","vod_id":19009054,"title":"[Impressão de Pés] Beleza Pura e Inocente da Classe (Parte 1) ~Inserção Forçada da Beleza da Classe~","lastmod":"2025-03-24","duration":"01:12:10","url":"/play/19009054.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYzVkZTczZmFjZmI5YjZmMzQ1YWY3ZTczODFjZDUyNjAuanBn.cache","vod_id":18943138,"title":"200GANA-2232 Falando com seriedade e gentileza, primeira vez filmando. 1443 Instrutor de Esportes","lastmod":"2025-03-22","duration":"01:20:05","url":"/play/18943138.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MjcvYjQ1MmRiYWRmOWI0ODUyZTZlNzI0NGZmYWFiZmFmZjMuanBn.cache","vod_id":19035338,"title":"O primeiro contato sexual real de HMN410 com uma beldade esbelta e musculosa de Kyoto.","lastmod":"2025-05-27","duration":"02:00:30","url":"/play/19035338.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOGNmZjUzZjYzYzY2MWRkZGViYTA4MTJkMDVhMDcxMWIuanBn.cache","vod_id":19005016,"title":"IPZZ-132-C Silêncio! Ufa! Ufa! Meu primeiro encontro noturno com \"Momo-chan\" foi incrivelmente intenso. Manhã, tarde e noite S","lastmod":"2025-03-23","duration":"02:32:55","url":"/play/19005016.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOGU1ODQxZTVjYThiZjhjNmU2NjZjM2M4MWQ2MWVjOGYuanBn.cache","vod_id":18930874,"title":"ATOM-393_A Escorregadio! Tum! ? E uma inserção vigorosa! ? Sexo sem calcinha na virilha, competição de cowboy humano, Parte 1, Volume 00","lastmod":"2025-12-14","duration":"00:20:00","url":"/play/18930874.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODM0NGY4N2JlYTM3NTMwZGU3ZGI1MTQ2NzM1MTVmNjYuanBn.cache","vod_id":18956330,"title":"SIRO-1841 Primeiro 293","lastmod":"2025-12-14","duration":"00:51:08","url":"/play/18956330.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMmRhM2JhMWI3MWQxMjhmNGNkOWQyNTAzN2YzOTYwMzAuanBn.cache","vod_id":18991508,"title":"300MIUM-388 Uma Joia Pervertida!!! Minha primeira experiência foi na quinta série!!! Ela odeia calcinhas e nunca usa!!! Ela se masturba sempre que tem tempo livre!!! O problema é que suas experiências até agora são bastante horríveis (muito chocantes)!!! E... nunca acaba!!! Essa garota realmente tem uma lista interminável de histórias picantes!!! Não deixe de conferir esse conteúdo totalmente rosa do começo ao fim! Confira a história principal...!!! : Festa até o amanhecer no bar em frente à Estação Shin-Okubo, 1º Distrito 39","lastmod":"2025-03-23","duration":"01:47:53","url":"/play/18991508.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvMTRkNTUyNGZiNWVjNzQxZGNlNTFkYzNjN2Y3OGQxZGMuanBn.cache","vod_id":19163753,"title":"A versão definitiva do treinamento para mulheres casadas sensuais de Chengdu aceita sexo em grupo com estranhos","lastmod":"2026-07-11","duration":"20:33","url":"/play/19163753.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMjMyOWNmOWNkZTBkMDY3NWNlOWViZTA0YzBkOGE2NjUuanBn.cache","vod_id":18971144,"title":"Treinar uma cadela para chupar sêmen, mostrando o rosto o tempo todo enquanto seu pau enorme a penetrava, palavras obscenas em seus seios, sexo oral profundo até seus olhos revirarem, foder sua buceta e ânus era tão excitante.","lastmod":"2025-03-23","duration":"00:38:00","url":"/play/18971144.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjY0NTAyYzg5NGMxYTE3YzViY2MwMzkxM2I4YzcyYTEuanBn.cache","vod_id":19023780,"title":"Primeira vez que JRZE154C filma um documentário sobre mulheres casadas.","lastmod":"2025-03-24","duration":"02:12:51","url":"/play/19023780.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZDhjYzVjMDcwZTFkNWFiNWFlZjE5MTUxZjEyZTJhYzIuanBn.cache","vod_id":18951162,"title":"\"Vazamento de vídeo íntimo de casal\" - Milhares buscam comprar conteúdo exclusivo da esposa da celebridade da internet Ryumi, do OnlyFans - Temporada 2 de filmagens privadas indecentes: Fetiche por pés, sexo oral, sexo anal, extração de sêmen, bondage com garganta profunda, dominação extrema 005","lastmod":"2025-12-14","duration":"00:14:48","url":"/play/18951162.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTZhYTYzZWZkNzZkYjgxMzQyNjY5YzkzMDZjNzliZWYuanBn.cache","vod_id":18937463,"title":"Primeira vez transando - plib_emma_kiki_dd112117_720p_2600","lastmod":"2025-12-14","duration":"00:36:52","url":"/play/18937463.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmJhMTFjMTM1ZWUwOWIxMDEzNzI0ODFkMzg2ZjJlYmYuanBn.cache","vod_id":18981267,"title":"NACR-651 - Número Um em Satisfação do Cliente! Um salão de beleza masculino super difícil de agendar, especializado em ejaculação em homens de seios grandes. (Nome: Chitose Yuki)","lastmod":"2025-03-23","duration":"02:06:51","url":"/play/18981267.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MDQvNWVlNWYyZjNhNjExOWM5N2ZhMjk5ZjVhMjMwMDI4ODMuanBn.cache","vod_id":19032080,"title":"Treinamento intenso","lastmod":"2025-05-04","duration":"35:58","url":"/play/19032080.html"}]},
videoTitle: 'Treinamento Yaqi TS Parte 1.',
language: 'pt',
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('Link copiado!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Link copiado!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Link copiado!');
}
}
},
// 切换布局
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=/`;
}
};
}