Chiếc vòng cổ trên cổ cô ấy ngay lập tức trùng khớp với những bức ảnh và video đang lan truyền trên mạng, được cho là của một người tên Lin Xiao X, người mà danh tính người đăng tải vẫn chưa được biết. Đó là một bức ảnh cô ấy hóa thân thành một con chó cái.
Hai cô bé loli nhỏ nhắn, hổ trắng không lông, một đường kẻ trên bầu trời, hai bím tóc, cô gái dịu dàng những năm 2000 và bạn thân. Khoe khoang tuổi trẻ, rất dâm đãng, que thủy tinh, hoa cúc, loli liếm âm đạo.","lastmod":"2026-07-11","duration":"","url":"/play/19207020.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MjAvYTgwNmQwOTMxNzI5YWY2NDRhMmEwNjRlMzg1MDQxMjQuanBn.cache","vod_id":19131452,"title":"Video riêng tư của siêu mẫu Trung Quốc Tiểu Ba Diệc bị trói và xâm hại tình dục đã bị rò rỉ.","lastmod":"2025-04-20","duration":"0:18:40","url":"/play/19131452.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMjFlNzQyMDljYjcwZTNhYjA5ZDM5ZDZhNWU5OTE2MmQuanBn.cache","vod_id":19184113,"title":"Hai con điếm lẳng lơ, những cuộc trò chuyện tục tĩu, một cặp đôi bị cắm sừng, thông tin bị rò rỉ về một nhóm trao đổi bạn tình nửa vời, một cặp đôi cùng nhau tham gia huấn luyện SM, một cặp đôi quan hệ tình dục và cắm sừng lẫn nhau.","lastmod":"2026-03-03","duration":"0:54:28","url":"/play/19184113.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYmQ2NmNmZTMzZjgyNGU4NGU2MGRiNmE2NTlhNjExZjEuanBn.cache","vod_id":19124168,"title":"Video tự sướng JOI chủ quan của HMN484CASMR từ đầu đến cuối. Vốn dĩ thanh lịch và trong sáng, cô ấy chỉ xuất tinh những thứ tục tĩu lên người tôi.","lastmod":"2025-03-26","duration":"2:03:19","url":"/play/19124168.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9zYnp5dHBpbWc0LmNvbTozNTE5L3VwbG9hZC92b2QvMjAyNjAyMjAtMS9mNGU0NzVmNDM3MmFkODY3Y2U2YjIzY2FjYTgzNzU3MS5qcGc=.cache","vod_id":19181629,"title":"Một giáo viên hiện đang công tác tại một trường học ở Thâm Quyến, không thể trả được nhiều khoản vay, đã phải dùng đến việc bán dâm để trang trải nợ nần, nhưng vẫn không trả hết số tiền còn lại. Một đoạn video ghi lại cảnh anh ta bị tấn công tình dục sau đó đã bị rò rỉ trên mạng.","lastmod":"2026-02-20","duration":"0:01:40","url":"/play/19181629.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzM2MGNkODMzNWQzZWI5YjBhOGRlZjJiMzc1OTE5ODIuanBn.cache","vod_id":19033454,"title":"[Video bị rò rỉ] Quan hệ tình dục với nữ công nhân thời vụ đã kết hôn, quan hệ tình dục ngẫu nhiên khi đi du lịch, quan hệ tình dục tập thể khi say rượu, đột kích ban đêm, ngoại tình nơi công sở, v.v., sự bóc lột thực tế nữ công nhân thời vụ bởi các công ty bất hợp pháp.","lastmod":"2025-03-26","duration":"3:00:16","url":"/play/19033454.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvN2Y5MGIxNzBlZWJkNDE5ZGVhZjk5NzFhNTEzNjhjY2YuanBn.cache","vod_id":19033046,"title":"Nữ streamer khiêu vũ trên Douyu \"Qian Yijin\" đã tự quay video riêng, thể hiện điệu nhảy nóng bỏng đầy quyến rũ, khoe trọn ba điểm hấp dẫn và phô diễn vẻ gợi cảm của mình.","lastmod":"2025-03-26","duration":"0:06:14","url":"/play/19033046.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MTEvN2YwZGM4MGNkYWU4NDMwYzdjY2U5YTQ3Zjg4MjYyMTIuanBn.cache","vod_id":19209404,"title":"Một người phụ nữ xinh đẹp với khuôn mặt hở hang đang bị người tình giàu có của mình tấn công tình dục và giam giữ mà không dùng bao cao su. Cô ta được miêu tả như một người phụ nữ độc ác.","lastmod":"2026-07-19","duration":"","url":"/play/19209404.html"}]},
videoTitle: 'Chiếc vòng cổ trên cổ cô ấy ngay lập tức trùng khớp với những bức ảnh và video đang lan truyền trên mạng, được cho là của một người tên Lin Xiao X, người mà danh tính người đăng tải vẫn chưa được biết. Đó là một bức ảnh cô ấy hóa thân thành một con chó cái.',
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=/`;
}
};
}