初始化导入 hjsq H5 项目代码

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
谢宇宁
2026-11-05 12:01:36 +07:00
co-authored by Claude Opus 5.5
commit f61585f786
1367 changed files with 136187 additions and 0 deletions
+168
View File
@@ -0,0 +1,168 @@
<template>
<div class="itemBox">
<template v-if="!state.loading">
<van-pull-refresh
v-model="moreParams.refreshing"
@refresh="onRefresh"
:disabled="moreParams.disabled"
success-text="刷新成功"
:class="[{ 'my-refresh': moreParams.isHigehtMax, none: moreParams.refreshing }]"
>
<van-list
v-if="!moreParams.isNoData"
v-model:loading="moreParams.loading"
:finished="moreParams.finished"
finished-text="没有更多数据了"
@load="onLoad"
:offset="10"
v-model:error="moreParams.error"
:immediate-check="false"
error-text="请求失败,点击重新加载"
>
<div class="listBox" v-for="(item, index) in state.list" :key="index">
<Post
class="post"
:postInfo="item"
:currentIndex="index"
:list="state.list"
:key="item"
:isListMode="true"
/>
<!-- <div class="advBox">
<lazyImg
v-if="state.advsList.length > 0"
class="advImg"
:src="state.advsList[index % state.advsList.length].cover"
:key="state.advsList[index % state.advsList.length].cover"
@click="jumpAdv(state.advsList[index % state.advsList.length], 'ads')"
/>
</div> -->
</div>
</van-list>
<div class="sizeBox" v-if="!moreParams.isNoData"></div>
<Empty v-if="moreParams.isNoData" />
</van-pull-refresh>
</template>
<div v-else class="isloading">
<Loading />
</div>
</div>
</template>
<script lang="ts" setup>
import { reactive } from 'vue';
// import { AdType } from '@/enums/app';
// import { getAdItem } from '@/utils/getConfig';
import HomeApi from '@/service/home';
const props = withDefaults(
defineProps<{
moduleId: string;
moduleSort?: number;
tagId: string;
}>(),
{
moduleId: '',
},
);
const state = reactive({
// advsList: <Array<Types.App.AdsInfoListItem>>[], // 专栏之间的广告
list: <Array<Types.Home.SectionsItem>>[],
pageNumber: 1,
pageSize: 10,
loading: true,
});
const moreParams = reactive({
loading: true,
refreshing: false,
finished: false,
isNoData: false,
error: false,
isHigehtMax: true,
disabled: false,
});
// 获取帖子数据
const getList = async (type: any) => {
const data = {
id: props.moduleId,
data: {
pageNumber: state.pageNumber,
pageSize: state.pageSize,
moduleSort: props.moduleSort,
tagId: props.tagId || null,
},
};
try {
let res: any = await HomeApi.getModuleList(data);
moreParams.loading = false;
moreParams.refreshing = false;
state.loading = false;
let list = res.allVideoInfo || [];
if (type === 'refresh') {
state.list = list;
} else {
state.list = state.list.concat(list);
}
if (state.pageNumber == 1) {
moreParams.isNoData = list.length ? false : true;
}
if (!res.hasNext) {
moreParams.finished = true;
}
} catch (e) {
moreParams.loading = false;
moreParams.error = true;
}
};
// 初始化
const init = () => {
// 专题之间的广告
// state.advsList = getAdItem(AdType.HOMETOPIC);
getList('');
};
init();
const onLoad = () => {
moreParams.loading = true;
state.pageNumber++;
getList(null);
};
const onRefresh = () => {
state.pageNumber = 1;
moreParams.refreshing = true;
moreParams.finished = false;
getList('refresh');
};
const resetList = () => {
state.loading = true;
state.list = [];
state.pageNumber = 1;
moreParams.loading = true;
moreParams.finished = false;
moreParams.isNoData = false;
getList('');
};
defineExpose({
resetList,
});
</script>
<style lang="scss" scoped>
.itemBox {
.isloading {
height: 400px;
}
.advBox {
margin-bottom: 20px;
}
.sizeBox {
height: 100px;
}
}
</style>