Files
Xinyue-Search/app/index/view/common/footer.html
T
2024-09-14 17:00:49 +08:00

175 lines
7.1 KiB
HTML

<script src="/static/index/js/vue.global.min.js"></script>
<script src="/static/index/js/index.full.min.js"></script>
<script src="/static/index/js/axios.min.js"></script>
<script>
const { createApp, ref, onMounted, onUnmounted } = Vue;
const { ElButton, ElMessage } = ElementPlus;
const app = createApp({
setup() {
// 定义响应式数据
const elementOpacity = ref(0);
const scrollThreshold = ref(150); // 动态设置的滚动阈值
const keyword = ref('{$keyword??''}');
const qcodeVisible = ref(false);
const layerVisible = ref(false);
const content = ref('');
const load = ref(false)
const drawer = ref(false)
const rankList = ref([]);
const rankDj = ref([]);
const is_m = ref(0);
const newList = ref([]);
// 公共消息方法
const showMessage = (message, type = 'info') => {
ElMessage({
message,
type,
plain: true,
});
};
// 滚动监听方法
const handleScroll = () => {
const scrollTop = window.scrollY || document.documentElement.scrollTop;
elementOpacity.value = scrollTop >= scrollThreshold.value
? Math.min((scrollTop - scrollThreshold.value) / 100, 1)
: Math.max(1 - (scrollThreshold.value - scrollTop) / 100, 0);
const boxElement = document.querySelector('.listBox .screen .fixed .box');
if (boxElement.style.display === 'block' && is_m.value) {
boxElement.style.display = 'none'; // 隐藏元素
}
};
// 搜索按钮点击事件
const searchBtn = () => {
if (!keyword.value) {
return showMessage('请输入你要搜索的内容~', 'error');
}
const currentUrl = window.location.href;
const targetUrl = `/s/${keyword.value}.html`;
if (currentUrl.includes('/s/') || currentUrl.includes('/d/')) {
window.location.href = targetUrl;
} else {
window.open(targetUrl, '_blank');
}
};
// 保存按钮点击事件
const saveBtn = async () => {
if (!content.value) {
return showMessage('请输入你想看的资源信息~', 'error');
}
if (load.value) return;
load.value = true;
try {
const response = await axios.post('/api/tool/feedback', { content: content.value });
showMessage(response.data.message, response.data.code === 200 ? 'success' : 'error');
if (response.data.code === 200) {
layerVisible.value = false;
content.value = '';
}
} finally {
load.value = false;
}
};
const setnum = (num) => (num / 10000).toFixed(2) + 'W';
const goLink = (event,id) => {
event.preventDefault();
window.location.href = `/d/${id}.html`;
}
const changeBtn = (e) => {
const category_id = `{$category_id}`;
if(category_id){
window.location.href = `/s/${keyword.value}-${e}-${category_id}.html`;
}else{
window.location.href = `/s/${keyword.value}-${e}.html`;
}
};
const copyText = async(event,title,url,code) => {
event.preventDefault();
var text = '标题:'+title+'\n链接:'+url
if (code) text += `\n提取码:${code}`;
text += `\n由【${'{$config.app_name}'}${window.location.hostname}】供网盘分享链接`;
try {
// 优先使用 navigator.clipboard
await navigator.clipboard.writeText(text);
showMessage('复制成功', 'success');
} catch (err) {
// 如果 navigator.clipboard 失败,使用 document.execCommand 作为回退
const textArea = document.createElement('textarea');
textArea.value = text;
textArea.style.position = 'fixed'; // 避免滚动
textArea.style.opacity = 0;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
const successful = document.execCommand('copy');
if (successful) {
showMessage('复制成功', 'success');
} else {
throw new Error('复制失败');
}
} catch (err) {
showMessage('复制失败,请手动复制', 'error');
}
document.body.removeChild(textArea);
}
}
const selectBtn = () => {
const boxElement = document.querySelector('.listBox .screen .fixed .box');
// 切换 display 属性,显示或隐藏
if (boxElement.style.display === 'none' || boxElement.style.display === '') {
boxElement.style.display = 'block'; // 显示
} else {
boxElement.style.display = 'none'; // 隐藏
}
}
const handleDeviceType = () => {
const isMobile = window.matchMedia('(max-width: 768px)').matches;
if (isMobile) {
// 手机端的逻辑
is_m.value = 1
} else {
// 电脑端的逻辑
is_m.value = 0
}
};
// 组件挂载时添加滚动监听
onMounted(() => {
handleDeviceType();
window.addEventListener('scroll', handleScroll);
window.addEventListener('resize', handleDeviceType);
});
// 组件卸载时移除滚动监听
onUnmounted(() => {
window.removeEventListener('scroll', handleScroll);
window.removeEventListener('resize', handleDeviceType);
});
// 返回数据和方法
return { elementOpacity, scrollThreshold, keyword, searchBtn, rankList,newList, setnum, qcodeVisible, layerVisible, content, saveBtn, rankDj,goLink,changeBtn,copyText,drawer,selectBtn,is_m };
}
})
.use(ElementPlus) // 使用 Element Plus
.mount('#app'); // 挂载 Vue 实例
</script>