feat(qianduan): 重构前端结构并添加新功能

- 新增分类创建功能
- 新增笔记创建功能
- 优化笔记列表展示
- 改进笔记预览界面
- 添加删除笔记功能
- 重构菜单选择逻辑
- 优化文件上传处理
- 更新Markdown编辑器配置
This commit is contained in:
ikmkj
2025-06-19 15:02:51 +08:00
parent b1b74f5efd
commit 827c661e5c
19 changed files with 776 additions and 276 deletions

View File

@@ -0,0 +1,10 @@
/**
* 处理参数的其他处理逻辑,如编码、格式化等
* @param data
* @returns {string}
*/
const handleCopy =(data) =>{
return encodeURIComponent( data)
};
export default handleCopy;

View File

@@ -0,0 +1,32 @@
import axios from 'axios'
const instance = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
// 开发环境使用withCredentials生产环境关闭
withCredentials: import.meta.env.DEV,
headers: {
'Content-Type': 'application/json'
}
})
// 请求拦截器
instance.interceptors.request.use(
config => {
return config
},
error => {
return Promise.reject(error)
}
)
// 响应拦截器
instance.interceptors.response.use(
response => {
return response.data
},
error => {
return Promise.reject(error)
}
)
export default instance

View File

@@ -0,0 +1,11 @@
/**
* 设备检测工具
*/
export function detectDeviceType() {
// 基础检测User Agent
const ua = navigator.userAgent;
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);
return isMobile ? 'mobile' : 'desktop';
}

View File

@@ -0,0 +1,55 @@
/**
* 处理复制
* @param data
* @param message
* @returns {Promise<void>}
*/
const handleCopy = async (data, message) => {
// 检查是否在安全上下文中 (HTTPS 或 localhost)
const isSecureContext = window.isSecureContext || location.protocol === 'https:';
if (isSecureContext) {
try {
// 使用现代剪贴板 API
await navigator.clipboard.writeText(data);
message.success('已复制到剪贴板');
} catch (err) {
message.error('现代剪贴板API错误:', err);
useFallbackCopy(data, message);
}
} else {
// 非安全上下文直接使用回退方法
useFallbackCopy(data, message);
}
}
// 回退复制方法
function useFallbackCopy(data, message) {
try {
const textarea = document.createElement('textarea');
textarea.value = data;
// 设置样式确保元素在视口外但可交互
textarea.style.position = 'fixed';
textarea.style.top = '0';
textarea.style.left = '0';
textarea.style.opacity = '0';
textarea.style.pointerEvents = 'none';
document.body.appendChild(textarea);
textarea.select();
// 尝试执行复制
const success = document.execCommand('copy');
document.body.removeChild(textarea);
if (success) {
message.success('已复制');
} else {
throw new Error('回退复制方法失败');
}
} catch (err) {
message.error('复制失败,请手动复制内容');
}
}
export default handleCopy