1
0
mirror of https://github.com/ialley-workshop-open/uni-halo.git synced 2026-07-27 04:20:43 +08:00

refactor: 项目整体重构与功能完善

1. 配置开发环境接口地址
2. 重构工具函数目录结构,迁移防抖节流等工具到base目录
3. 统一页面布局样式为全屏居中布局
4. 新增大量通用工具函数:深克隆、深合并、uuid、时间格式化、随机数、数组打乱、剪贴板操作等
5. 优化自定义tabbar实现,修复交互逻辑
6. 新增列表数据管理hook和请求loading封装
7. 移除无用测试文件和冗余代码
8. 完善首页内容,增加轮播图、作者卡片、金刚区等模块
This commit is contained in:
小莫唐尼
2026-06-11 23:33:54 +08:00
parent 3945ee611d
commit 862d176593
33 changed files with 1787 additions and 251 deletions
+99
View File
@@ -0,0 +1,99 @@
import type { Ref } from 'vue'
interface IPaginationParams {
page: number
size: number
}
interface IUpdateDataOptions<T> {
/** 错误信息 */
error: boolean | Error
/** 是否还有更多数据 */
hasNext: boolean
/** 列表数据 */
items: T[]
}
interface IUseListDataOptions<T> {
params: IPaginationParams
/** 加载状态 */
loading: Ref<boolean>
onPullDownRefresh?: (params: IPaginationParams, updateData: (data: IUpdateDataOptions<T>) => void) => void
onReachBottom?: (params: IPaginationParams, updateData: (data: IUpdateDataOptions<T>) => void) => void
}
/**
* useListData是一个定制化的列表数据管理钩子,用于处理列表数据的添加和刷新。
* @param T 列表数据类型,默认为any。
* @returns 返回一个对象{list, append},包含列表数据和数据操作方法。
*/
export function useListData<T>(options: IUseListDataOptions<T>) {
const _hasNext = ref(false)
const _error = ref<boolean | Error>()
const _items = shallowRef<T[]>([])
/** 是否追加数据 */
const isAppend = ref(false)
/** 列表数据 */
const list = shallowRef<T[]>([])
/**
* 数据操作方法
* @param data 新数据数组
*/
function append(data: T[]) {
if (isAppend.value) {
list.value.push(...data)
return
}
list.value = data
}
function _updateData(data: IUpdateDataOptions<T>) {
_error.value = data.error
_hasNext.value = data.hasNext
_items.value = data.items
uni.stopPullDownRefresh()
}
function refresh() {
console.log('刷新数据', options)
if (options.loading.value) {
return
}
isAppend.value = false
options.params.page = 1
options.onPullDownRefresh?.(options.params, _updateData)
}
/** 下拉刷新 */
onPullDownRefresh(refresh)
/** 上拉加载更多 */
onReachBottom(() => {
if (options.loading.value) {
return
}
if (!_hasNext.value) {
return
}
options.params.page += 1
isAppend.value = true
options.onReachBottom?.(options.params, _updateData)
})
/** 监听items变化 */
watch(() => _items.value, (newVal) => {
console.log('监听数据变化', newVal)
console.log('监听数据变化', options)
if (_error.value) {
return
}
append(newVal)
})
return {
list,
refresh,
}
}