Chị gái xinh đẹp và dễ thương [khuôn mặt xinh đẹp, vòng một quyến rũ, vòng ba gợi cảm, đôi chân thon dài] sẽ khiến bạn cảm thấy vô cùng hạnh phúc tại salon dành cho nam giới cao cấp. Kuraki Hana Kuraki Hana S1 NO.1 STYLE","lastmod":"2026-07-11","duration":"02:03:20","url":"/play/19165268.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMTNjNWExODg1YjZkMzYzZjM2YzhlMTA2MDliYTEzNGUuanBn.cache","vod_id":18984238,"title":"564BMYB-091 Cô gái nghiệp dư với khuôn mặt dễ thương và vòng một đầy đặn xuất tinh quá mức 2","lastmod":"2025-12-14","duration":"01:13:38","url":"/play/18984238.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvN2VlMGQ2ZGFmNzkxMzEzZDQ3NGIzMDdhNjI3NmRhNWYuanBn.cache","vod_id":18958368,"title":"[Không kiểm duyệt] IPIT-027 Khuôn mặt dễ thương như thần tượng, nhưng gợi cảm và điềm tĩnh hơn người lớn. Có một khoảng cách lớn giữa ngoại hình và tính cách của cô ấy. Yuzuki Ai, 20 tuổi, ra mắt trong ngành phim người lớn.","lastmod":"2025-03-22","duration":"02:30:05","url":"/play/18958368.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MzAvMzJmODE2ZWRlMGY2ZDJhNDFlMWE5YjY1YjZlMGZmZTUuanBn.cache","vod_id":19035768,"title":"HUNTC081勃起率100%! 120%的客户满意度!男按摩院里两个可爱的新女孩同时给我做调皮的按摩","lastmod":"2025-05-30","duration":"01:51:52","url":"/play/19035768.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOTU5YzQ3MjllOGJkNWI0NDNiMjlkYTkxNDE5MTJkZWIuanBn.cache","vod_id":18968216,"title":"FC2PPV 3232097 [Trước thềm ra mắt tác phẩm mới nhất của Erica] Lần đầu tiên Erica nuốt tinh dịch! Khuôn mặt xinh đẹp của cô ấy phủ đầy tinh dịch!","lastmod":"2025-12-14","duration":"00:39:16","url":"/play/18968216.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMjQwNzA2NjZjMzljYjJkNmQ3ZWQwZDZkYjlmYmQzMzcuanBn.cache","vod_id":18927752,"title":"AP-736_B Tôi đang bán em gái nhỏ dễ thương của mình. Đây là tập 00 trong câu chuyện của em gái tôi; em ấy luôn rất ngoan ngoãn với tôi từ khi còn bé.","lastmod":"2025-12-14","duration":"00:20:00","url":"/play/18927752.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZGRiNDY3ZTVlMGZhYjE5NDc0YjMzZGFjZDcxZDFiMDguanBn.cache","vod_id":18927244,"title":"\"Nền tảng nhỏ dễ thương\" (trước đây là \"Kawaii\") có một người phụ nữ trên trang web hẹn hò (1108) đã bí mật quay phim một cô gái trẻ xinh đẹp đang thực hiện các hành vi tình dục đầy đam mê.","lastmod":"2025-12-14","duration":"00:49:10","url":"/play/18927244.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTkyOWViZGE0ZWYzNWI5NGU3MDIxNjI2MjAyODNlYjYuanBn.cache","vod_id":18928155,"title":"Nền tảng \"Little Cute\" (trước đây là Kawaii) cung cấp các hình ảnh và video trực tiếp hấp dẫn được tạo ra bằng trí tuệ nhân tạo, showcasing những thân hình gợi cảm, bao gồm cả massage ngực và quan hệ tình dục qua đường âm đạo - một hành vi cực kỳ khiêu dâm.","lastmod":"2025-12-14","duration":"01:17:33","url":"/play/18928155.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTZhYzZhMjUzYmY2YTk1OWQ3NmJmYmM2OTYyOWRmNDQuanBn.cache","vod_id":18951076,"title":"[Phụ đề tiếng Trung] HUNTA-333 Cô em kế ngực khủng siêu dễ thương đổ mồ hôi và nhũ hoa lộ hết.","lastmod":"2025-03-22","duration":"03:33:57","url":"/play/18951076.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvMTFhZDdkNDgxNTkwM2U0NTI0MTg0YTM1MGRhODQwZTMuanBn.cache","vod_id":19159471,"title":"Câu chuyện kỳ lạ về Tenchimu đặt máy mát xa điện lên người và xuất tinh từ phía sau; nữ nghệ sĩ giải trí nghiệp dư dễ thương người Nhật Kimeseku rò rỉ một tiểu thuyết hình ảnh quy mô lớn với những cực khoái chủ quan, trung lập; phim AV doujin SEX Vibe có sự tham gia của Emu Yumi và bạn diễn của cô.","lastmod":"2026-05-22","duration":"11:39","url":"/play/19159471.html"}]},
videoTitle: 'Sabrina đáng yêu xuất tinh lên tóc',
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=/`;
}
};
}