From 70375c04a72cc0a8f170bce6b5723b5ef07fdc0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=93=B2=E9=93=9C?= <9490856+zhangzhetong@user.noreply.gitee.com> Date: Sun, 21 Sep 2025 12:30:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=AD=A6=E7=94=9F=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cursor/rules/tanstack-query-guide.md | 405 ++++ src/pages/student/list.vue | 420 ++-- src/service/index.ts | 4 +- ...juzidianleixing.ts => shujuzidileixing.ts} | 0 ...{shujuzidianxiang.ts => shujuzidixiang.ts} | 0 wot-design-ui-components.md | 1844 +++++++++++++++++ 6 files changed, 2550 insertions(+), 123 deletions(-) create mode 100644 .cursor/rules/tanstack-query-guide.md rename src/service/{shujuzidianleixing.ts => shujuzidileixing.ts} (100%) rename src/service/{shujuzidianxiang.ts => shujuzidixiang.ts} (100%) create mode 100644 wot-design-ui-components.md diff --git a/.cursor/rules/tanstack-query-guide.md b/.cursor/rules/tanstack-query-guide.md new file mode 100644 index 0000000..756928a --- /dev/null +++ b/.cursor/rules/tanstack-query-guide.md @@ -0,0 +1,405 @@ +# TanStack Query 使用指南 + +## 📋 概述 + +TanStack Query (原名 React Query) 是一个强大的数据获取和状态管理库,为 Vue 3 项目提供: + +- 🚀 **智能缓存**: 自动缓存和去重请求 +- 🔄 **后台更新**: 自动在后台重新获取数据 +- ⚡ **实时同步**: 窗口聚焦时自动刷新 +- 📱 **离线支持**: 网络恢复时自动重试 +- 🎯 **响应式**: 与 Vue 3 Composition API 完美集成 + +## 🚀 快速开始 + +### 1. 基础配置 + +项目已配置好 TanStack Query,在 `main.ts` 中: + +```typescript +import { VueQueryPlugin } from '@tanstack/vue-query' + +app.use(VueQueryPlugin) +``` + +### 2. 基础用法 + +```vue + + + +``` + +## 📚 核心 API + +### useQuery - 数据获取 + +用于获取数据的基础 hook: + +```typescript +const { + data, // 查询结果 + isLoading, // 首次加载状态 + isFetching, // 获取状态(包括后台刷新) + error, // 错误信息 + refetch, // 手动重新获取 + remove // 移除查询缓存 +} = useQuery({ + queryKey: ['queryKey'], + queryFn: fetchFunction, + enabled: true, // 是否启用查询 + staleTime: 30000, // 数据过期时间(30秒) + gcTime: 300000 // 缓存垃圾回收时间(5分钟) +}) +``` + +### useMutation - 数据修改 + +用于创建、更新、删除操作: + +```typescript +const { + mutate, // 执行变更 + mutateAsync, // 异步执行变更 + isLoading, // 变更加载状态 + error, // 变更错误 + isSuccess // 变更成功状态 +} = useMutation({ + mutationFn: (data) => apiService.createUser(data), + onSuccess: (data) => { + // 成功回调 + queryClient.invalidateQueries(['users']) + }, + onError: (error) => { + // 重要: ElMessage 已经在httpClient 封装过了,如果不需要对异常进行特殊处理,你完全不需要 onError + } +}) +``` + +### useQueryClient - 查询客户端 + +用于手动管理缓存: + +```typescript +import { useQueryClient } from '@tanstack/vue-query' + +const queryClient = useQueryClient() + +// 手动设置查询数据 +queryClient.setQueryData(['user', userId], userData) + +// 使特定查询失效 +queryClient.invalidateQueries({ queryKey: ['users'] }) + +// 移除查询 +queryClient.removeQueries(['user', userId]) + +// 获取查询数据 +const userData = queryClient.getQueryData(['user', userId]) +``` + +## 🎯 实际应用场景 + +### 1. 列表页面数据获取 + +列表不需要使用这个,使用封装好的 useTable 即可 + +### 2. 详情页面数据获取 + +```vue + + + +``` + +### 3. 表单提交和数据更新 + +```vue + + + +``` + +### 4. 依赖查询 + +```vue + +``` + +### 5. 无限滚动加载 + +```vue + + + +``` + +## 🔧 高级功能 + +### 3. 条件查询 + +```typescript +const searchQuery = ref('') +const shouldSearch = computed(() => searchQuery.value.length >= 2) + +const { data: searchResults } = useQuery({ + queryKey: computed(() => ['search', searchQuery.value]), + queryFn: () => searchApi.search(searchQuery.value), + enabled: shouldSearch, + staleTime: 30000 // 搜索结果缓存30秒 +}) +``` + +## ⚙️ 配置选项 + +### 常用配置项 + +```typescript +useQuery({ + queryKey: ['key'], + queryFn: fetchFunction, + + // 缓存配置 + staleTime: 30000, // 数据新鲜时间 + gcTime: 300000, // 垃圾回收时间 + + // 重试配置 + retry: 3, // 重试次数 + retryDelay: 1000, // 重试延迟 + + // 刷新配置 + refetchOnMount: true, // 组件挂载时刷新 + refetchOnWindowFocus: false, // 窗口聚焦时刷新 + refetchOnReconnect: true, // 网络重连时刷新 + + // 条件配置 + enabled: true, // 是否启用查询 + + // 占位数据 + placeholderData: [], // 占位数据 + keepPreviousData: true // 保留之前的数据 +}) +``` + +## 📋 最佳实践 + +### 3. 性能优化 + +```typescript +// 使用 keepPreviousData 避免加载闪烁 +const { data } = useQuery({ + queryKey: computed(() => ['users', pagination.value]), + queryFn: () => userApi.getUserList(pagination.value), + keepPreviousData: true +}) +``` + +## 🐛 常见问题 + +### Q: 数据没有自动更新? + +A: 检查查询键是否正确设置为响应式: + +```typescript +// ❌ 错误:查询键不是响应式的 +useQuery({ + queryKey: ['users', searchQuery.value], // 不会响应变化 + queryFn: () => api.search(searchQuery.value) +}) + +// ✅ 正确:使用 computed 让查询键响应式 +useQuery({ + queryKey: computed(() => ['users', searchQuery.value]), + queryFn: () => api.search(searchQuery.value) +}) +``` + +### Q: 如何清除特定查询的缓存? + +A: 使用 queryClient 的相关方法: + +```typescript +const queryClient = useQueryClient() + +// 使查询失效(会重新获取) +queryClient.invalidateQueries({ queryKey: ['users'] }) + +// 移除查询(从缓存中删除) +queryClient.removeQueries({ queryKey: ['users'] }) + +// 重置查询(重置为初始状态) +queryClient.resetQueries({ queryKey: ['users'] }) +``` \ No newline at end of file diff --git a/src/pages/student/list.vue b/src/pages/student/list.vue index e34765e..c48b23c 100644 --- a/src/pages/student/list.vue +++ b/src/pages/student/list.vue @@ -1,161 +1,339 @@ diff --git a/src/service/index.ts b/src/service/index.ts index 83863d1..0db788c 100644 --- a/src/service/index.ts +++ b/src/service/index.ts @@ -5,8 +5,8 @@ export * from './displayEnumLabel'; export * from './renzheng'; export * from './banjifenxi'; -export * from './shujuzidianxiang'; -export * from './shujuzidianleixing'; +export * from './shujuzidixiang'; +export * from './shujuzidileixing'; export * from './kaoshitongji'; export * from './wenjianguanli'; export * from './wenjianqiepianguanli'; diff --git a/src/service/shujuzidianleixing.ts b/src/service/shujuzidileixing.ts similarity index 100% rename from src/service/shujuzidianleixing.ts rename to src/service/shujuzidileixing.ts diff --git a/src/service/shujuzidianxiang.ts b/src/service/shujuzidixiang.ts similarity index 100% rename from src/service/shujuzidianxiang.ts rename to src/service/shujuzidixiang.ts diff --git a/wot-design-ui-components.md b/wot-design-ui-components.md new file mode 100644 index 0000000..51e522b --- /dev/null +++ b/wot-design-ui-components.md @@ -0,0 +1,1844 @@ +# wot-design-ui 组件完整指南 + +wot-design-ui 是一个专为移动端设计的 Vue 3 组件库,提供丰富的组件和强大的功能,支持微信小程序、支付宝小程序、H5 等多个平台。 + +## 基础组件 + +### wd-button +按钮组件,用于触发操作,支持多种类型、尺寸和状态。 + +**基础用法:** +```html + +默认按钮 +主要按钮 +成功按钮 +警告按钮 +危险按钮 + + +小号按钮 +中号按钮 +大号按钮 + + +禁用按钮 +加载中 +幽灵按钮 +块状按钮 + + +搜索 + +``` + +### wd-icon + +不需要使用,所有需要图标的地方都可以这样 + + +### wd-cell +单元格组件,列表中的单个展示项,可单独使用或与 cell-group 组合。 + +**基础用法:** +```html + + + + + + + + + + + + + + + +``` + +### wd-cell-group +单元格组,用于包装多个 cell 组件。 + +**基础用法:** +```html + + + + +``` + +### wd-tag +标签组件,用于标记和分类。 + +**基础用法:** +```html + +默认标签 +主要标签 +成功标签 +警告标签 +错误标签 + + +朴素标签 +圆角标签 +可关闭 + + +自定义颜色 +``` + +### wd-badge +徽标组件,显示消息数量或状态点。 + +**基础用法:** +```html + + + 按钮 + + + + + 按钮 + + + + + 按钮 + + + + +``` + +### wd-card +卡片容器,用于包装内容。 + +**基础用法:** +```html + + 卡片内容 + + +``` + +### wd-divider +分割线组件,用于分隔内容。 + +**基础用法:** +```html + + + + +分割文字 + + +左侧文字 +右侧文字 + + +虚线分割 +``` + +### wd-gap +间距组件,提供空白间距。 + +**基础用法:** +```html + + + + + + + + + +``` + +## 布局组件 + +### wd-layout +布局容器,提供基础的页面布局。 + +**基础用法:** +```html + + 头部 + 主体内容 + 底部 + +``` + +### wd-grid +网格布局,用于展示同类信息。 + +**基础用法:** +```html + + + + + + + + + 首页 + + +``` + +### wd-row / wd-col +栅格布局系统,基于24栅格。 + +**基础用法:** +```html + + + col-12 + col-12 + + + + + col-6 + col-6 + col-6 + col-6 + + + + + 偏移6列 + +``` + +### wd-sticky +粘性定位组件,滚动时可以固定在顶部。 + +**基础用法:** +```html + + + 粘性元素 + + + + + + +``` + +## 表单组件 + +### wd-form +表单容器,提供数据验证和收集功能。 + +**基础用法:** +```html + + + +``` + +### wd-input +输入框组件,支持多种输入类型和验证。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + + + +``` + +### wd-textarea +多行文本输入框。 + +**基础用法:** +```html + + + + + + + + + + + +``` + +### wd-picker +选择器组件,支持单列和多列选择。 + +**基础用法:** +```html + + + +``` + +### wd-datetime-picker +日期时间选择器。 + +**基础用法:** +```html + + + + + + + + + + + + + + +``` + +### wd-calendar +日历选择器,支持多种选择模式。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + + + + +``` + +### wd-col-picker +多列选择器,支持级联选择。 + +**基础用法:** +```html + + + +``` + +### wd-select-picker +单复选选择器。 + +**基础用法:** +```html + + + + + + + + +``` + +### wd-checkbox +复选框组件。 + +**基础用法:** +```html + +同意协议 + + + + 苹果 + 香蕉 + 橙子 + + + + + 全选 + + + +禁用选项 + + + + 按钮样式 + +``` + +### wd-radio +单选框组件。 + +**基础用法:** +```html + + + 选项一 + 选项二 + 选项三 + + + + + + + + + + + + 正常选项 + 禁用选项 + + + + + 选项1 + 选项2 + +``` + +### wd-switch +开关组件。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + +``` + +### wd-slider +滑块组件,用于在给定的范围内选择值。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + +``` + +### wd-rate +评分组件。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + + + + +``` + +### wd-input-number +数字输入框,用于输入数字。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + +``` + +### wd-upload + +文件上传组件,但不需要你使用它。我有更高级的封装,位于 src/components/FileUpload/FileUpload.vue + +你可以直接使用 + +### wd-search +搜索框组件。 + +**基础用法:** +```html + + + + + + + + + + + +``` + +## 反馈组件 + +### wd-toast +轻提示组件,用于消息通知、加载提示等。 + +**基础用法:** +```html + + + +``` + +### wd-message-box +消息弹框组件,用于确认操作、输入等场景。 + +**基础用法:** +```html + + + +``` + +### wd-notify +通知栏组件,用于展示重要的全局消息。 + +**基础用法:** +```html + + + +``` + +### wd-popup +弹出层组件,支持多种弹出位置和动画效果。 + +**基础用法:** +```html + + + +``` + +### wd-action-sheet +动作面板,从底部弹出的操作菜单。 + +**基础用法:** +```html + + + +``` + +### wd-overlay +遮罩层组件。 + +**基础用法:** +```html + + + +``` + +### wd-status-tip +缺省页组件,用于显示空状态、网络错误等。 + +**基础用法:** +```html + + + + + + 重新加载 + + + + + 操作按钮 + +``` + +## 展示组件 + +### wd-collapse +折叠面板,可以折叠/展开的内容区域。 + +**基础用法:** +```html + + + +``` + +### wd-notice-bar +通知栏,用于循环播放展示一组消息通知。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + + + +``` + +### wd-steps +步骤条,引导用户按照流程完成任务。 + +**基础用法:** +```html + + + +``` + +### wd-tabs +标签页组件,用于在不同的内容区域之间进行切换。 + +**基础用法:** +```html + + + +``` + +### wd-swiper +轮播图组件,用于展示一组图片或内容。 + +**基础用法:** +```html + + + +``` + +### wd-img +图片组件,增强版的 image 标签。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + + + + + + + +``` + +### wd-progress +进度条组件,用于展示操作的当前进度。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + + + + + +``` + +### wd-circle +环形进度条。 + +**基础用法:** +```html + + + + + + + + + + + + 90% + + + + +``` + +### wd-table +表格组件,用于展示行列数据。 + +**基础用法:** +```html + + + +``` + +### wd-pagination +分页组件。 + +**基础用法:** +```html + + + + + + + + +``` + +## 导航组件 + +下面的几个,如需了解详情,自己去查 doc/wot-design-ui/对应文件.md + +### wd-navbar +导航栏组件,用于页面顶部导航。 + +### wd-tabbar +底部标签栏,用于在不同页面之间进行切换。 + +### wd-sidebar +侧边导航栏。 + +### wd-index-bar +索引栏,用于长列表的快速定位。 + +### wd-backtop +回到顶部组件。 + +**基础用法:** +```html + + + + + + + + + + + 顶部 + + +``` + +## 业务组件 + +### wd-calendar-view +日历视图组件,用于展示日历界面。 + +### wd-count-down +倒计时组件。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + +开始 +暂停 +重置 +``` + +### wd-count-to +数字动画组件,用于数字递增动画效果。 + +### wd-drop-menu +下拉菜单组件。 + +**基础用法:** +```html + + + +``` + +### wd-fab +悬浮操作按钮。 + +### wd-floating-panel +浮动面板组件。 + +### wd-img-cropper +图片裁剪组件。 + +### wd-swipe-action +滑动操作组件,用于左滑显示操作按钮。 + +**基础用法:** +```html + + + + + + + + + + + + + + + + + + +``` + +### wd-sort-button +排序按钮组件。 + +**基础用法:** +```html + + + 价格排序 + + + + + 自定义排序 + +``` + +### wd-text +文本组件,用于文本展示和处理。 + +**基础用法:** +```html + +普通文本内容 + + +主要文本 +成功文本 +警告文本 +错误文本 + + +小号文本 +中号文本 +大号文本 + + + + + + + + +可选择的文本内容 + + +下划线文本 +删除线文本 +```