|
@@ -4,14 +4,18 @@
|
|
<view class="banner">
|
|
<view class="banner">
|
|
<swiper class="swiper right-indicator" circular :indicator-dots="true" :autoplay="true" :interval="2000"
|
|
<swiper class="swiper right-indicator" circular :indicator-dots="true" :autoplay="true" :interval="2000"
|
|
:duration="1000">
|
|
:duration="1000">
|
|
- <swiper-item v-for="item in bannerData" :key="item.id">
|
|
|
|
|
|
+ <swiper-item
|
|
|
|
+ v-for="item in bannerData"
|
|
|
|
+ :key="item.id"
|
|
|
|
+ @click="goDetail(item.id)"
|
|
|
|
+ >
|
|
<view class="item">
|
|
<view class="item">
|
|
<image class="w-100" :src="item.image" mode="aspectFill"></image>
|
|
<image class="w-100" :src="item.image" mode="aspectFill"></image>
|
|
</view>
|
|
</view>
|
|
</swiper-item>
|
|
</swiper-item>
|
|
</swiper>
|
|
</swiper>
|
|
</view>
|
|
</view>
|
|
- <view class="main m-3 radius-l p-3 bg-light">
|
|
|
|
|
|
+ <view class="main radius-l p-3 bg-light">
|
|
<view class="change-year">
|
|
<view class="change-year">
|
|
<view class="year">
|
|
<view class="year">
|
|
<text class="iconfont icon-arrow-left" @click="changeYear(currentYear - 1)"></text>
|
|
<text class="iconfont icon-arrow-left" @click="changeYear(currentYear - 1)"></text>
|
|
@@ -22,7 +26,7 @@
|
|
</view>
|
|
</view>
|
|
<text class="iconfont icon-calendar"></text>
|
|
<text class="iconfont icon-calendar"></text>
|
|
</view>
|
|
</view>
|
|
- <u-tabs
|
|
|
|
|
|
+ <!-- <u-tabs
|
|
:current="activeTab"
|
|
:current="activeTab"
|
|
:list="tabs"
|
|
:list="tabs"
|
|
lineWidth="30"
|
|
lineWidth="30"
|
|
@@ -38,41 +42,55 @@
|
|
}"
|
|
}"
|
|
class="top-tab"
|
|
class="top-tab"
|
|
@click="tabClick"
|
|
@click="tabClick"
|
|
- />
|
|
|
|
|
|
+ /> -->
|
|
<view class="activity-wrap mt-3">
|
|
<view class="activity-wrap mt-3">
|
|
<view class="month-list">
|
|
<view class="month-list">
|
|
<view
|
|
<view
|
|
v-for="month in monthList"
|
|
v-for="month in monthList"
|
|
:key="month.value"
|
|
:key="month.value"
|
|
- :class="{ active: month.value === currentMonth }"
|
|
|
|
class="month"
|
|
class="month"
|
|
@click="goMonth(month.value)"
|
|
@click="goMonth(month.value)"
|
|
>
|
|
>
|
|
|
|
+ <!-- :class="{ active: month.value === currentMonth }" -->
|
|
{{ month.label }}
|
|
{{ month.label }}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<SimplePageContentLoader
|
|
<SimplePageContentLoader
|
|
:loader="listLoader"
|
|
:loader="listLoader"
|
|
:showEmpty="!listLoader.content.value?.length"
|
|
:showEmpty="!listLoader.content.value?.length"
|
|
|
|
+ class="w-100"
|
|
>
|
|
>
|
|
<view
|
|
<view
|
|
v-if="listLoader.content.value && listLoader.content.value.length"
|
|
v-if="listLoader.content.value && listLoader.content.value.length"
|
|
class="activity-list"
|
|
class="activity-list"
|
|
>
|
|
>
|
|
<scroll-view scroll-y :scroll-into-view="'month' + currentMonth" scroll-with-animation>
|
|
<scroll-view scroll-y :scroll-into-view="'month' + currentMonth" scroll-with-animation>
|
|
- <view class="item" v-for="item in listLoader.content.value" :key="item.id">
|
|
|
|
- <view class="head" :id="'month' + item.month">
|
|
|
|
- <view class="year-month">{{ item.year }}年{{ item.month }}月</view>
|
|
|
|
- <view>本月活动 <text>{{ item.data.length }}</text></view>
|
|
|
|
- </view>
|
|
|
|
- <view class="activity" v-for="act in item.data" :key="act.id">
|
|
|
|
- <view class="title">{{ act.title }}</view>
|
|
|
|
- <view class="dot" :class="{ ing: act.status === 0 }"></view>
|
|
|
|
- <view class="desc ellipsis-2">{{ act.desc }}</view>
|
|
|
|
- <view class="place"><text class="iconfont icon-place"></text>{{ act.place }}</view>
|
|
|
|
- <view class="time"><text class="iconfont icon-time"></text>{{ act.time }}</view>
|
|
|
|
|
|
+ <template v-for="(item, key) in listLoader.content.value" :key="key">
|
|
|
|
+ <view v-if="item" class="item">
|
|
|
|
+ <view class="head" :id="'month' + item.month">
|
|
|
|
+ <view class="year-month">{{ item.year }}年{{ item.month }}月</view>
|
|
|
|
+ <view>本月活动 <text>{{ item.data.length }}</text></view>
|
|
|
|
+ </view>
|
|
|
|
+ <view v-if="item.data.length == 0" class="activity">
|
|
|
|
+ <view class="title">
|
|
|
|
+ <text class="iconfont icon-activity"></text>
|
|
|
|
+ 本月暂无活动
|
|
|
|
+ </view>
|
|
|
|
+ </view>
|
|
|
|
+ <view
|
|
|
|
+ class="activity"
|
|
|
|
+ v-for="act in item.data"
|
|
|
|
+ :key="act.id"
|
|
|
|
+ @click="goDetail(act.id)"
|
|
|
|
+ >
|
|
|
|
+ <view class="title">{{ act.title }}</view>
|
|
|
|
+ <view class="dot" :class="{ ing: act.status === 0 }"></view>
|
|
|
|
+ <view class="desc ellipsis-2">{{ act.desc }}</view>
|
|
|
|
+ <view class="place"><text class="iconfont icon-place"></text>{{ act.place }}</view>
|
|
|
|
+ <view class="time"><text class="iconfont icon-time"></text>{{ act.time }}</view>
|
|
|
|
+ </view>
|
|
</view>
|
|
</view>
|
|
- </view>
|
|
|
|
|
|
+ </template>
|
|
</scroll-view>
|
|
</scroll-view>
|
|
</view>
|
|
</view>
|
|
</SimplePageContentLoader>
|
|
</SimplePageContentLoader>
|
|
@@ -83,9 +101,10 @@
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
import { GetContentListParams } from '@/api/CommonContent';
|
|
import { GetContentListParams } from '@/api/CommonContent';
|
|
-import NewsIndexContent from '@/api/news/NewsIndexContent';
|
|
|
|
|
|
+import CalendarContent from '@/api/fusion/CalendarContent';
|
|
import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
|
|
import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
|
|
import { useSimplePageContentLoader } from '@/common/composeabe/SimplePageContentLoader';
|
|
import { useSimplePageContentLoader } from '@/common/composeabe/SimplePageContentLoader';
|
|
|
|
+import { navTo } from '@/common/utils/PageAction';
|
|
import { onLoad } from '@dcloudio/uni-app';
|
|
import { onLoad } from '@dcloudio/uni-app';
|
|
import { ref } from 'vue';
|
|
import { ref } from 'vue';
|
|
|
|
|
|
@@ -116,16 +135,7 @@ const tabs = [
|
|
}
|
|
}
|
|
];
|
|
];
|
|
const activeTab = ref(0);
|
|
const activeTab = ref(0);
|
|
-const bannerData = [
|
|
|
|
- {
|
|
|
|
- id: 1,
|
|
|
|
- image: 'https://lucheng.app4lh.cnhttps://mn.wenlvti.net/app_static/minnan/tmphttps://mn.wenlvti.net/app_static/minnan/tmp/banner_act.png',
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- id: 2,
|
|
|
|
- image: 'https://lucheng.app4lh.cnhttps://mn.wenlvti.net/app_static/minnan/tmphttps://mn.wenlvti.net/app_static/minnan/tmp/banner_act.png',
|
|
|
|
- }
|
|
|
|
-]
|
|
|
|
|
|
+const bannerData = ref<{ id: number, image: string }[]>([])
|
|
|
|
|
|
const currentMonth = ref(1);
|
|
const currentMonth = ref(1);
|
|
const currentYear = ref(new Date().getFullYear());
|
|
const currentYear = ref(new Date().getFullYear());
|
|
@@ -168,8 +178,8 @@ const monthList = [
|
|
value: 12
|
|
value: 12
|
|
}
|
|
}
|
|
];
|
|
];
|
|
-
|
|
|
|
-const listLoader = useSimplePageContentLoader<{
|
|
|
|
|
|
+
|
|
|
|
+interface ListItem {
|
|
id: number;
|
|
id: number;
|
|
month: number,
|
|
month: number,
|
|
year: number,
|
|
year: number,
|
|
@@ -181,26 +191,41 @@ const listLoader = useSimplePageContentLoader<{
|
|
time: string,
|
|
time: string,
|
|
status: number,
|
|
status: number,
|
|
}[]
|
|
}[]
|
|
-}[]>(async () => {
|
|
|
|
- const res = await NewsIndexContent.getContentList(new GetContentListParams()
|
|
|
|
- .setModelId(18)
|
|
|
|
- .setMainBodyColumnId(272)
|
|
|
|
- , 1, 50);
|
|
|
|
- return [
|
|
|
|
- {
|
|
|
|
- id: 1,
|
|
|
|
- month: 1,
|
|
|
|
- year: 2025,
|
|
|
|
- data: res.list.map(item => ({
|
|
|
|
- id: item.id,
|
|
|
|
- title: item.title,
|
|
|
|
- desc: item.desc,
|
|
|
|
- place: item.district,
|
|
|
|
- time: '2025-01-01',
|
|
|
|
- status: 1,
|
|
|
|
- }))
|
|
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const listLoader = useSimplePageContentLoader<ListItem[]>(async () => {
|
|
|
|
+ const res = (await CalendarContent.getCalendarList(new GetContentListParams(), 1, 100));
|
|
|
|
+ const res2 : ListItem[] = [];
|
|
|
|
+ for (let i = 0; i < 12; i++) {
|
|
|
|
+ res2[i] = {
|
|
|
|
+ id: i,
|
|
|
|
+ month: i + 1,
|
|
|
|
+ year: currentYear.value,
|
|
|
|
+ data: []
|
|
}
|
|
}
|
|
- ];
|
|
|
|
|
|
+ }
|
|
|
|
+ for (const item of res.list) {
|
|
|
|
+ if (item.dateYear != currentYear.value)
|
|
|
|
+ continue;
|
|
|
|
+ const it = res2[item.dateMonth - 1];
|
|
|
|
+ it.data.push({
|
|
|
|
+ id: item.id,
|
|
|
|
+ title: item.title,
|
|
|
|
+ desc: item.desc,
|
|
|
|
+ place: item.district + (item.regionText || ''),
|
|
|
|
+ time: item.dateString ?? item.date,
|
|
|
|
+ status: item.dateObj > new Date() ? 0 : 1,
|
|
|
|
+ })
|
|
|
|
+ if (bannerData.value.length < 3)
|
|
|
|
+ bannerData.value.push({
|
|
|
|
+ id: item.id,
|
|
|
|
+ image: item.thumbnail || item.image,
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ const a = res2.filter(p => p);
|
|
|
|
+ console.log(a);
|
|
|
|
+
|
|
|
|
+ return a
|
|
});
|
|
});
|
|
|
|
|
|
function tabClick(e: { index: number }) {
|
|
function tabClick(e: { index: number }) {
|
|
@@ -213,6 +238,9 @@ async function changeYear(year: number) {
|
|
currentYear.value = year;
|
|
currentYear.value = year;
|
|
listLoader.loadData(undefined, true);
|
|
listLoader.loadData(undefined, true);
|
|
}
|
|
}
|
|
|
|
+function goDetail(id: number) {
|
|
|
|
+ navTo('/pages/article/details', { id })
|
|
|
|
+}
|
|
|
|
|
|
onLoad(() => {
|
|
onLoad(() => {
|
|
listLoader.loadData(undefined, true);
|
|
listLoader.loadData(undefined, true);
|
|
@@ -227,6 +255,7 @@ $color-primary: map.get($colors, "primary");
|
|
|
|
|
|
.travel_calendar {
|
|
.travel_calendar {
|
|
.banner {
|
|
.banner {
|
|
|
|
+ height: 400rpx;
|
|
margin-top: 0;
|
|
margin-top: 0;
|
|
|
|
|
|
.swiper {
|
|
.swiper {
|
|
@@ -241,6 +270,10 @@ $color-primary: map.get($colors, "primary");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ .main {
|
|
|
|
+ margin: 30rpx;
|
|
|
|
+ height: calc(100vh - 400rpx - 120rpx);
|
|
|
|
+ }
|
|
.activity-wrap {
|
|
.activity-wrap {
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
|
@@ -355,8 +388,8 @@ $color-primary: map.get($colors, "primary");
|
|
|
|
|
|
.month {
|
|
.month {
|
|
border-radius: 10rpx;
|
|
border-radius: 10rpx;
|
|
- margin-bottom: 30rpx;
|
|
|
|
- padding: 12rpx 20rpx;
|
|
|
|
|
|
+ margin-bottom: 10rpx;
|
|
|
|
+ padding: 10rpx 20rpx;
|
|
|
|
|
|
&.active {
|
|
&.active {
|
|
border: 1px solid $color-primary;
|
|
border: 1px solid $color-primary;
|
|
@@ -367,8 +400,7 @@ $color-primary: map.get($colors, "primary");
|
|
}
|
|
}
|
|
|
|
|
|
scroll-view {
|
|
scroll-view {
|
|
- height: calc(100vh - 540rpx);
|
|
|
|
- padding-bottom: 50rpx;
|
|
|
|
|
|
+ height: calc(100vh - 620rpx);
|
|
}
|
|
}
|
|
|
|
|
|
.change-year {
|
|
.change-year {
|