Files
template-10490/pages/down/index.vue
2025-01-27 23:24:42 +08:00

97 lines
2.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<PageBanner :layout="layout" :title="`演示中心`"
:desc="`拥抱开源、坚守品质致力于打造安全稳定高可用的WEB应用`"/>
<!-- <div class="text-3xl py-5">{{ count }}</div>-->
<!-- <el-button @click="increment">点击</el-button>-->
<CardList :list="list" :disabled="disabled" @done="onSearch"/>
</template>
<script setup lang="ts">
import type {ApiResult, PageResult} from "~/api";
import {useServerRequest} from "~/composables/useServerRequest";
import {useWebsite} from "~/composables/configState";
import type {Navigation} from "~/api/cms/navigation/model";
import type {CompanyParam} from "~/api/system/company/model";
import CardList from './components/CardList.vue';
import type {CmsProduct} from "~/api/cms/cmsProduct/model";
import { v4 as uuidv4 } from 'uuid';
const route = useRoute();
// 页面信息
const runtimeConfig = useRuntimeConfig();
const list = ref<CmsProduct[]>([]);
const page = ref<number>(1);
const resultText = ref('');
const layout = ref<any>();
const disabled = ref<boolean>(false);
// 获取状态
const form = ref<Navigation>();
const website = useWebsite();
// 搜索表单
const where = reactive<CompanyParam>({
keywords: ''
});
const onSearch = () => {
if (!disabled.value) {
page.value++;
reload(route.path);
}
}
const count = useToken()
function increment() {
count.value = uuidv4()
}
// 请求数据
const reload = async (path: string) => {
const {data: response} = await useServerRequest<ApiResult<PageResult<CmsProduct>>>('/cms/cms-product/page', {
baseURL: runtimeConfig.public.apiServer, params: {
page: page.value,
limit: 8,
price: 0,
keywords: where.keywords
}
})
if (response.value?.data) {
if (list.value.length < response.value?.data.count) {
disabled.value = false;
if (response.value?.data.list) {
list.value = list.value.concat(response.value?.data.list);
}
} else {
disabled.value = true;
}
if (response.value.data.count == 0) {
resultText.value = '暂无相关结果'
}
}
}
const {data: nav} = await useServerRequest<ApiResult<Navigation>>('/cms/cms-navigation/getNavigationByPath', {query: {path: route.path}})
if (nav.value?.data) {
form.value = nav.value?.data;
}
// 页面布局
if (form.value?.layout) {
layout.value = JSON.parse(form.value?.layout)
}
useHead({
title: `产品 - ${website.value.websiteName}`,
bodyAttrs: {
class: "page-container",
}
});
watch(
() => route.path,
(path) => {
reload(path);
},
{immediate: true}
);
</script>