Browse Source

Add 添加我的点赞收藏模块

Yue 2 năm trước cách đây
mục cha
commit
68c6dbe627

+ 18 - 5
SERVER/YanZhongXYH/xyh-system/src/main/java/cn/xyh/amActivity/controller/AmStatisticsController.java

@@ -1,13 +1,17 @@
 package cn.xyh.amActivity.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.xyh.amActivity.domain.bo.AmStatisticsBo;
 import cn.xyh.amActivity.domain.vo.AmStatisticsDataVo;
+import cn.xyh.amActivity.domain.vo.AmStatisticsSourceVo;
 import cn.xyh.amActivity.domain.vo.AmStatisticsVo;
 import cn.xyh.amActivity.service.IAmStatisticsService;
 import cn.xyh.common.annotation.Log;
 import cn.xyh.common.annotation.RepeatSubmit;
 import cn.xyh.common.core.controller.BaseController;
+import cn.xyh.common.core.domain.PageQuery;
 import cn.xyh.common.core.domain.R;
+import cn.xyh.common.core.page.TableDataInfo;
 import cn.xyh.common.enums.BusinessType;
 import cn.xyh.system.permissions.PermissionName;
 import lombok.RequiredArgsConstructor;
@@ -98,6 +102,15 @@ public class AmStatisticsController extends BaseController {
 //        return toAjax(amStatisticsService.deleteWithValidByIds(Arrays.asList(amIds), true));
 //    }
 
+    /**
+     * 获取统计详细信息
+     */
+    @SaCheckPermission(PermissionName.AmActivityStatisticsQuery)
+    @GetMapping("querySource")
+    public TableDataInfo<AmStatisticsSourceVo> getAmStatistics(AmStatisticsBo bo, PageQuery pageQuery) {
+        return amStatisticsService.queryStatisticsSources(bo, pageQuery);
+    }
+
     /**
      * 获取统计详细信息
      *
@@ -122,7 +135,7 @@ public class AmStatisticsController extends BaseController {
     }
 
     @SaCheckPermission(PermissionName.AmActivityStatistics)
-    @Log(title = "统计阅读", businessType = BusinessType.UPDATE)
+    @Log(title = "阅读", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PostMapping("/read/{sourceId}/{sourceType}")
     public R<Void> read(@PathVariable String sourceId, @PathVariable String sourceType) {
@@ -133,7 +146,7 @@ public class AmStatisticsController extends BaseController {
     }
 
     @SaCheckPermission(PermissionName.AmActivityStatistics)
-    @Log(title = "统计点赞", businessType = BusinessType.UPDATE)
+    @Log(title = "点赞", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PostMapping("/star/{sourceId}/{sourceType}")
     public R<Void> star(@PathVariable String sourceId, @PathVariable String sourceType) {
@@ -144,7 +157,7 @@ public class AmStatisticsController extends BaseController {
     }
 
     @SaCheckPermission(PermissionName.AmActivityStatistics)
-    @Log(title = "统计取消点赞", businessType = BusinessType.UPDATE)
+    @Log(title = "取消点赞", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PostMapping("/cancelStar/{sourceId}/{sourceType}")
     public R<Void> cancelStar(@PathVariable String sourceId, @PathVariable String sourceType) {
@@ -155,7 +168,7 @@ public class AmStatisticsController extends BaseController {
     }
 
     @SaCheckPermission(PermissionName.AmActivityStatistics)
-    @Log(title = "统计收藏", businessType = BusinessType.UPDATE)
+    @Log(title = "收藏", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PostMapping("/favorite/{sourceId}/{sourceType}")
     public R<Void> favorite(@PathVariable String sourceId, @PathVariable String sourceType) {
@@ -166,7 +179,7 @@ public class AmStatisticsController extends BaseController {
     }
 
     @SaCheckPermission(PermissionName.AmActivityStatistics)
-    @Log(title = "统计取消收藏", businessType = BusinessType.UPDATE)
+    @Log(title = "取消收藏", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PostMapping("/cancelFavorite/{sourceId}/{sourceType}")
     public R<Void> cancelFavorite(@PathVariable String sourceId, @PathVariable String sourceType) {

+ 48 - 46
SERVER/YanZhongXYH/xyh-system/src/main/java/cn/xyh/amActivity/domain/bo/AmStatisticsBo.java

@@ -1,15 +1,13 @@
 package cn.xyh.amActivity.domain.bo;
 
+import cn.xyh.common.core.domain.BaseEntity;
 import cn.xyh.common.core.validate.AddGroup;
 import cn.xyh.common.core.validate.EditGroup;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import javax.validation.constraints.*;
-
-import java.util.Date;
-
-import cn.xyh.common.core.domain.BaseEntity;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 
 /**
  * 统计业务对象 am_statistics
@@ -23,47 +21,51 @@ import cn.xyh.common.core.domain.BaseEntity;
 
 public class AmStatisticsBo extends BaseEntity {
 
-            /**
-             * 校友id
-             */
-                @NotNull(message = "校友id不能为空", groups = { EditGroup.class })
-        private Long amId;
-
-            /**
-             * 源id
-             */
-                @NotBlank(message = "源id不能为空", groups = { EditGroup.class })
-        private String sourceId;
-
-            /**
-             * 源类型
-             */
-                @NotBlank(message = "源类型不能为空", groups = { AddGroup.class, EditGroup.class })
-        private String sourceType;
-
-            /**
-             * 阅读状态(0未阅读 1阅读)
-             */
-                @NotBlank(message = "阅读状态(0未阅读 1阅读)不能为空", groups = { AddGroup.class, EditGroup.class })
-        private String readStatus;
-
-            /**
-             * 点赞状态(0未点赞 1点赞)
-             */
-                @NotBlank(message = "点赞状态(0未点赞 1点赞)不能为空", groups = { AddGroup.class, EditGroup.class })
-        private String starStatus;
-
-            /**
-             * 收藏状态(0未收藏 1收藏)
-             */
-                @NotBlank(message = "收藏状态(0未收藏 1收藏)不能为空", groups = { AddGroup.class, EditGroup.class })
-        private String favoriteStatus;
-
-            /**
-             * 备注
-             */
-                @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
-        private String remark;
+    /**
+     * 校友id
+     */
+    @NotNull(message = "校友id不能为空", groups = {EditGroup.class})
+    private Long amId;
+
+
+    /**
+     * 源id
+     */
+    @NotBlank(message = "源id不能为空", groups = {EditGroup.class})
+    private String sourceId;
+
+    /**
+     * 源类型
+     */
+    @NotBlank(message = "源类型不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String sourceType;
+
+    /**
+     * 阅读状态(0未阅读 1阅读)
+     */
+    @NotBlank(message = "阅读状态(0未阅读 1阅读)不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String readStatus;
+
+    /**
+     * 点赞状态(0未点赞 1点赞)
+     */
+    @NotBlank(message = "点赞状态(0未点赞 1点赞)不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String starStatus;
+
+    /**
+     * 收藏状态(0未收藏 1收藏)
+     */
+    @NotBlank(message = "收藏状态(0未收藏 1收藏)不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String favoriteStatus;
+
+    /**
+     * 备注
+     */
+    @NotBlank(message = "备注不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String remark;
+    
+    private String beginDate;
+    private String endDate;
 
 
 }

+ 1 - 2
SERVER/YanZhongXYH/xyh-system/src/main/java/cn/xyh/amActivity/domain/vo/AmStatisticsDataVo.java

@@ -8,10 +8,9 @@ import java.io.Serializable;
 public class AmStatisticsDataVo implements Serializable {
     private static final long serialVersionUID = 1L;
     private String sourceId;
-    private String sourceTitle;
-    private String sourceType;
     private Long commentCount; // 评论数
     private Long readCount;
     private Long starCount;
     private Long favoriteCount;
 }
+

+ 30 - 0
SERVER/YanZhongXYH/xyh-system/src/main/java/cn/xyh/amActivity/domain/vo/AmStatisticsSourceVo.java

@@ -0,0 +1,30 @@
+package cn.xyh.amActivity.domain.vo;
+
+import cn.xyh.common.annotation.Translation;
+import cn.xyh.common.constant.TransConstant;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class AmStatisticsSourceVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String sourceId;
+    private String sourceType;
+    private String title;
+    private String category;
+    @Translation(type = TransConstant.CATEGORY_ID_TO_NAME, mapper = "category")
+    private String categoryName;
+    private String content;
+    private String isSys;
+    private String isHot;
+    private String isHead;
+    private String createBy;
+    private String createdBy;
+    private String date;
+    private String images;
+    private Long commentCount; // 评论数
+    private Long readCount;
+    private Long starCount;
+    private Long favoriteCount;
+}

+ 5 - 0
SERVER/YanZhongXYH/xyh-system/src/main/java/cn/xyh/amActivity/mapper/AmStatisticsMapper.java

@@ -1,9 +1,12 @@
 package cn.xyh.amActivity.mapper;
 
 import cn.xyh.amActivity.domain.AmStatistics;
+import cn.xyh.amActivity.domain.bo.AmStatisticsBo;
 import cn.xyh.amActivity.domain.vo.AmStatisticsDataVo;
+import cn.xyh.amActivity.domain.vo.AmStatisticsSourceVo;
 import cn.xyh.amActivity.domain.vo.AmStatisticsVo;
 import cn.xyh.common.core.mapper.BaseMapperPlus;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -16,4 +19,6 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface AmStatisticsMapper extends BaseMapperPlus<AmStatisticsMapper, AmStatistics, AmStatisticsVo> {
     AmStatisticsDataVo selectAmStatisticsData(@Param("sourceId") String sourceId);
+
+    Page<AmStatisticsSourceVo> selectStatisticsSource(@Param("page") Page<AmStatisticsSourceVo> page, @Param("map") AmStatisticsBo bo);
 }

+ 6 - 0
SERVER/YanZhongXYH/xyh-system/src/main/java/cn/xyh/amActivity/service/IAmStatisticsService.java

@@ -1,7 +1,11 @@
 package cn.xyh.amActivity.service;
 
+import cn.xyh.amActivity.domain.bo.AmStatisticsBo;
 import cn.xyh.amActivity.domain.vo.AmStatisticsDataVo;
+import cn.xyh.amActivity.domain.vo.AmStatisticsSourceVo;
 import cn.xyh.amActivity.domain.vo.AmStatisticsVo;
+import cn.xyh.common.core.domain.PageQuery;
+import cn.xyh.common.core.page.TableDataInfo;
 
 /**
  * 统计Service接口
@@ -12,6 +16,8 @@ import cn.xyh.amActivity.domain.vo.AmStatisticsVo;
 public interface IAmStatisticsService {
 
 
+    TableDataInfo<AmStatisticsSourceVo> queryStatisticsSources(AmStatisticsBo bo, PageQuery pageQuery);
+
     AmStatisticsDataVo queryBySourceId(String sourceId);
 
     Boolean read(Long amId, String sourceId, String sourceType);

+ 11 - 0
SERVER/YanZhongXYH/xyh-system/src/main/java/cn/xyh/amActivity/service/impl/AmStatisticsServiceImpl.java

@@ -2,12 +2,17 @@ package cn.xyh.amActivity.service.impl;
 
 import cn.hutool.core.date.DateTime;
 import cn.xyh.amActivity.domain.AmStatistics;
+import cn.xyh.amActivity.domain.bo.AmStatisticsBo;
 import cn.xyh.amActivity.domain.vo.AmStatisticsDataVo;
+import cn.xyh.amActivity.domain.vo.AmStatisticsSourceVo;
 import cn.xyh.amActivity.domain.vo.AmStatisticsVo;
 import cn.xyh.amActivity.mapper.AmStatisticsMapper;
 import cn.xyh.amActivity.service.IAmStatisticsService;
+import cn.xyh.common.core.domain.PageQuery;
+import cn.xyh.common.core.page.TableDataInfo;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -179,4 +184,10 @@ public class AmStatisticsServiceImpl implements IAmStatisticsService {
     public AmStatisticsDataVo queryBySourceId(String sourceId) {
         return baseMapper.selectAmStatisticsData(sourceId);
     }
+
+    @Override
+    public TableDataInfo<AmStatisticsSourceVo> queryStatisticsSources(AmStatisticsBo bo, PageQuery pageQuery) {
+        Page<AmStatisticsSourceVo> result = baseMapper.selectStatisticsSource(pageQuery.build(), bo);
+        return TableDataInfo.build(result);
+    }
 }

+ 70 - 0
SERVER/YanZhongXYH/xyh-system/src/main/resources/mapper/amActivity/AmStatisticsMapper.xml

@@ -37,4 +37,74 @@
         WHERE ams.source_id = #{sourceId}
     </select>
 
+
+    <select id="selectStatisticsSource" resultType="cn.xyh.amActivity.domain.vo.AmStatisticsSourceVo">
+        SELECT
+        ams.am_id,
+        ams.source_id,
+        ams.source_type,
+        ams.favorite_time,
+        a.category,
+        a.title,
+        a.content,
+        <if test="map.sourceType=='activity'">
+            a.activity_date as date,
+            a.is_sys,
+        </if>
+        <if test="map.sourceType=='help'">
+            a.expiry_date as date,
+            a.is_sys,
+        </if>
+        <if test=" map.sourceType=='news'">
+            a.date,
+        </if>
+        a.create_by ,
+        a.is_hot,
+        a.is_head,
+        a.images,
+        a.create_time,
+        u.nick_name as createdBy,
+        IFNULL(amcc.commentCount, 0) as comment_count,
+        IFNULL(amsc.readCount, 0) as read_count,
+        IFNULL(amsc.starCount, 0) as star_count,
+        IFNULL(amsc.favoriteCount, 0) as favorite_count
+        FROM am_statistics AS ams
+        <if test="map.sourceType=='activity'">
+            LEFT JOIN am_activity AS a ON a.activity_id = ams.source_id
+        </if>
+        <if test="map.sourceType=='help'">
+            LEFT JOIN am_help AS a ON a.help_id = ams.source_id
+        </if>
+        <if test="map.sourceType=='news'">
+            LEFT JOIN am_news AS a ON a.news_id = ams.source_id
+        </if>
+        LEFT JOIN (SELECT source_id,
+        SUM(read_status) AS readCount,
+        SUM(star_status) AS starCount,
+        SUM(favorite_status) AS favoriteCount
+        FROM am_statistics
+        GROUP BY source_id) AS amsc ON amsc.source_id = ams.source_id
+        LEFT JOIN (SELECT source_id, COUNT(source_id) AS commentCount
+        FROM am_comment
+        GROUP BY source_id) AS amcc ON amcc.source_id = ams.source_id
+        LEFT JOIN sys_user AS u ON u.user_name = a.create_by
+        WHERE 1=1
+        <if test="map.sourceType!=null">
+            AND ams.source_type = #{map.sourceType}
+        </if>
+        <if test="map.amId!=null">
+            AND ams.am_id = #{map.amId}
+        </if>
+        <if test="map.favoriteStatus!=null">
+            AND ams.favorite_status = #{map.favoriteStatus}
+        </if>
+        <if test="map.starStatus!=null">
+            AND ams.star_status = #{map.starStatus}
+        </if>
+        <if test="map.beginDate!=null and  map.endDate!=null">
+            AND a.creat_time between #{map.beginDate} AND #{map.endDate}
+        </if>
+
+    </select>
+
 </mapper>

+ 8 - 0
UI/XYH.APP/src/api/amActivity/_statistics.ts

@@ -100,6 +100,14 @@ class statisticsApi {
       successAlert: false,
     })
   }
+
+  queryStatisticsSource = (query: any) => {
+    return Rs.get({
+      url: "/amActivity/statistics/querySource",
+      params: query,
+      loading: false,
+    })
+  }
 }
 
 export default statisticsApi

+ 125 - 0
UI/XYH.APP/src/pages-sub/favorite/activity.vue

@@ -0,0 +1,125 @@
+<template>
+  <view>
+    <SearchBar
+      v-model:query-type="queryType"
+      v-model:search-input-value="searchInputValue"
+      v-model:search-type="searchType"
+      v-model:search-dropdown-value="searchDropdownValue"
+      :query-type-data="queryTypeData"
+      :search-dropdown-list="dropList"
+      :search-placeholder="searchPlaceholder"
+      :search-tab-list="searchTabList"
+      :height="topHeight"
+      @search="onSearch"
+    ></SearchBar>
+    <vb-list
+      custom-class="mx-15 pt-15"
+      :query-fun="apis.amActivity.statisticsApi.queryStatisticsSource"
+      :query-params="queryParams"
+      :height="listHeight"
+    >
+      <template #item="{ item }">
+        <ListCard :item="item" type="activityDetail" :map="{ id: 'activityId', date: 'date' }"></ListCard>
+      </template>
+    </vb-list>
+  </view>
+</template>
+
+<script lang="ts" setup>
+import dayjs from "dayjs"
+import "dayjs/locale/zh-cn" // 导入本地化语言
+import apis from "@/api"
+import route from "@/route"
+import appStore from "@/stores"
+import SearchBar from "@/components/searchBar.vue"
+import ListCard from "@/components/listCard.vue"
+
+dayjs.locale("zh-cn") // 使用本地化语言
+
+const wHeight = uni.getWindowInfo().windowHeight
+const topHeight = ref(130)
+const listHeight = computed(() => {
+  return wHeight - topHeight.value - 15
+})
+const params = route.getRouteParams("favoriteActivity")
+const amId = computed(() => {
+  if (params && params.amId) {
+    return params.amId
+  }
+  return appStore.authStore.getUser().amId
+})
+const searchInputValue = ref("")
+const queryType = ref(0)
+const searchType = ref("")
+const searchDropdownValue = ref([])
+const searchPlaceholder = ref("搜索校友活动标题")
+const categoryColumns = ref<any>([])
+const queryTypeData = computed(() => {
+  return [
+    { value: 0, text: "我的收藏" },
+    { value: 1, text: "我的点赞" },
+  ]
+})
+const dropList = computed(() => {
+  const arr = []
+  arr.push({
+    emptyTitle: "全部分类",
+    data: categoryColumns.value,
+    map: { text: "categoryName", value: "categoryId" },
+  })
+  return arr
+})
+
+const searchTabList = computed(() => {
+  const arr = []
+  arr.push({ text: "近一周", value: "week" })
+  arr.push({ text: "近一月", value: "month" })
+  arr.push({ text: "全部", value: "" })
+  return arr
+})
+
+const queryParams = ref({
+  amId: amId.value,
+  title: "",
+  favoriteStatus: "1",
+  sourceType: "activity",
+})
+
+function onSearch() {
+  const params: any = {
+    amId: amId.value,
+    title: searchInputValue.value || "",
+    category: searchDropdownValue.value[0] || "",
+    sourceType: "activity",
+  }
+  if (queryType.value == 0) {
+    params.favoriteStatus = "1"
+  } else if (queryType.value == 1) {
+    params.starStatus = "1"
+  }
+  switch (searchType.value) {
+    case "week":
+      params.beginDate = dayjs().startOf("day").add(-7, "day").format("YYYY-MM-DD HH:mm:ss")
+      params.endDate = dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss")
+      break
+    case "month":
+      params.beginDate = dayjs().startOf("day").add(-30, "day").format("YYYY-MM-DD HH:mm:ss")
+      params.endDate = dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss")
+      break
+  }
+  queryParams.value = params
+}
+
+function loadData() {
+  apis.system.categoryApi.getActivityCategory().then((res) => {
+    categoryColumns.value = [{ categoryName: "全部分类", categoryId: "" }, ...res]
+  })
+}
+
+function init() {
+  loadData()
+}
+onLoad(init)
+</script>
+
+<style scoped></style>

+ 126 - 0
UI/XYH.APP/src/pages-sub/favorite/help.vue

@@ -0,0 +1,126 @@
+<template>
+  <view>
+    <SearchBar
+      v-model:query-type="queryType"
+      v-model:search-input-value="searchInputValue"
+      v-model:search-type="searchType"
+      v-model:search-dropdown-value="searchDropdownValue"
+      :query-type-data="queryTypeData"
+      :search-dropdown-list="dropList"
+      :search-placeholder="searchPlaceholder"
+      :search-tab-list="searchTabList"
+      :height="topHeight"
+      @search="onSearch"
+    ></SearchBar>
+    <vb-list
+      custom-class="mx-15 pt-15"
+      :query-fun="apis.amActivity.statisticsApi.queryStatisticsSource"
+      :query-params="queryParams"
+      :height="listHeight"
+    >
+      <template #item="{ item }">
+        <ListCard :item="item" type="helpDetail" :map="{ id: 'helpId', date: 'date' }"></ListCard>
+      </template>
+    </vb-list>
+  </view>
+</template>
+
+<script lang="ts" setup>
+import dayjs from "dayjs"
+import "dayjs/locale/zh-cn" // 导入本地化语言
+import apis from "@/api"
+import route from "@/route"
+import appStore from "@/stores"
+import SearchBar from "@/components/searchBar.vue"
+import ListCard from "@/components/listCard.vue"
+
+dayjs.locale("zh-cn") // 使用本地化语言
+
+const wHeight = uni.getWindowInfo().windowHeight
+const topHeight = ref(130)
+const listHeight = computed(() => {
+  return wHeight - topHeight.value - 15
+})
+const params = route.getRouteParams("favoriteHelp")
+const amId = computed(() => {
+  if (params && params.amId) {
+    return params.amId
+  }
+  return appStore.authStore.getUser().amId
+})
+const searchInputValue = ref("")
+const queryType = ref(0)
+const searchType = ref("")
+const searchDropdownValue = ref([])
+const searchPlaceholder = ref("搜索校友互助标题")
+const categoryColumns = ref<any>([])
+const queryTypeData = computed(() => {
+  return [
+    { value: 0, text: "我的收藏" },
+    { value: 1, text: "我的点赞" },
+  ]
+})
+const dropList = computed(() => {
+  const arr = []
+  arr.push({
+    emptyTitle: "全部分类",
+    data: categoryColumns.value,
+    map: { text: "categoryName", value: "categoryId" },
+  })
+  return arr
+})
+
+const searchTabList = computed(() => {
+  const arr = []
+
+  arr.push({ text: "近一周", value: "week" })
+  arr.push({ text: "近一月", value: "month" })
+  arr.push({ text: "全部", value: "" })
+  return arr
+})
+
+const queryParams = ref({
+  amId: amId.value,
+  title: "",
+  favoriteStatus: "1",
+  sourceType: "help",
+})
+
+function onSearch() {
+  const params: any = {
+    amId: amId.value,
+    title: searchInputValue.value || "",
+    category: searchDropdownValue.value[0] || "",
+    sourceType: "help",
+  }
+  if (queryType.value == 0) {
+    params.favoriteStatus = "1"
+  } else if (queryType.value == 1) {
+    params.starStatus = "1"
+  }
+  switch (searchType.value) {
+    case "week":
+      params.beginDate = dayjs().startOf("day").add(-7, "day").format("YYYY-MM-DD HH:mm:ss")
+      params.endDate = dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss")
+      break
+    case "month":
+      params.beginDate = dayjs().startOf("day").add(-30, "day").format("YYYY-MM-DD HH:mm:ss")
+      params.endDate = dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss")
+      break
+  }
+  queryParams.value = params
+}
+
+function loadData() {
+  apis.system.categoryApi.getActivityCategory().then((res) => {
+    categoryColumns.value = [{ categoryName: "全部分类", categoryId: "" }, ...res]
+  })
+}
+
+function init() {
+  loadData()
+}
+onLoad(init)
+</script>
+
+<style scoped></style>

+ 126 - 0
UI/XYH.APP/src/pages-sub/favorite/news.vue

@@ -0,0 +1,126 @@
+<template>
+  <view>
+    <SearchBar
+      v-model:query-type="queryType"
+      v-model:search-input-value="searchInputValue"
+      v-model:search-type="searchType"
+      v-model:search-dropdown-value="searchDropdownValue"
+      :query-type-data="queryTypeData"
+      :search-dropdown-list="dropList"
+      :search-placeholder="searchPlaceholder"
+      :search-tab-list="searchTabList"
+      :height="topHeight"
+      @search="onSearch"
+    ></SearchBar>
+    <vb-list
+      custom-class="mx-15 pt-15"
+      :query-fun="apis.amActivity.statisticsApi.queryStatisticsSource"
+      :query-params="queryParams"
+      :height="listHeight"
+    >
+      <template #item="{ item }">
+        <ListCard :item="item" type="newsDetail" :map="{ id: 'newsId', date: 'date' }"></ListCard>
+      </template>
+    </vb-list>
+  </view>
+</template>
+
+<script lang="ts" setup>
+import dayjs from "dayjs"
+import "dayjs/locale/zh-cn" // 导入本地化语言
+import apis from "@/api"
+import route from "@/route"
+import appStore from "@/stores"
+import SearchBar from "@/components/searchBar.vue"
+import ListCard from "@/components/listCard.vue"
+
+dayjs.locale("zh-cn") // 使用本地化语言
+
+const wHeight = uni.getWindowInfo().windowHeight
+const topHeight = ref(130)
+const listHeight = computed(() => {
+  return wHeight - topHeight.value - 15
+})
+const params = route.getRouteParams("favoriteNews")
+const amId = computed(() => {
+  if (params && params.amId) {
+    return params.amId
+  }
+  return appStore.authStore.getUser().amId
+})
+const searchInputValue = ref("")
+const queryType = ref(0)
+const searchType = ref("")
+const searchDropdownValue = ref([])
+const searchPlaceholder = ref("搜索校友资讯标题")
+const categoryColumns = ref<any>([])
+const queryTypeData = computed(() => {
+  return [
+    { value: 0, text: "我的收藏" },
+    { value: 1, text: "我的点赞" },
+  ]
+})
+const dropList = computed(() => {
+  const arr = []
+  arr.push({
+    emptyTitle: "全部分类",
+    data: categoryColumns.value,
+    map: { text: "categoryName", value: "categoryId" },
+  })
+  return arr
+})
+
+const searchTabList = computed(() => {
+  const arr = []
+
+  arr.push({ text: "近一周", value: "week" })
+  arr.push({ text: "近一月", value: "month" })
+  arr.push({ text: "全部", value: "" })
+  return arr
+})
+
+const queryParams = ref({
+  amId: amId.value,
+  title: "",
+  favoriteStatus: "1",
+  sourceType: "news",
+})
+
+function onSearch() {
+  const params: any = {
+    amId: amId.value,
+    title: searchInputValue.value || "",
+    category: searchDropdownValue.value[0] || "",
+    sourceType: "news",
+  }
+  if (queryType.value == 0) {
+    params.favoriteStatus = "1"
+  } else if (queryType.value == 1) {
+    params.starStatus = "1"
+  }
+  switch (searchType.value) {
+    case "week":
+      params.beginDate = dayjs().startOf("day").add(-7, "day").format("YYYY-MM-DD HH:mm:ss")
+      params.endDate = dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss")
+      break
+    case "month":
+      params.beginDate = dayjs().startOf("day").add(-30, "day").format("YYYY-MM-DD HH:mm:ss")
+      params.endDate = dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss")
+      break
+  }
+  queryParams.value = params
+}
+
+function loadData() {
+  apis.system.categoryApi.getActivityCategory().then((res) => {
+    categoryColumns.value = [{ categoryName: "全部分类", categoryId: "" }, ...res]
+  })
+}
+
+function init() {
+  loadData()
+}
+onLoad(init)
+</script>
+
+<style scoped></style>

+ 0 - 7
UI/XYH.APP/src/pages-sub/help/myHelp.vue

@@ -31,7 +31,6 @@ import dayjs from "dayjs"
 import "dayjs/locale/zh-cn" // 导入本地化语言
 import apis from "@/api"
 import route from "@/route"
-import configs from "@/core/config"
 import appStore from "@/stores"
 import ListCard from "@/components/listCard.vue"
 import SearchBar from "@/components/searchBar.vue"
@@ -72,12 +71,6 @@ const dropList = computed(() => {
   })
   return arr
 })
-const queryTypeData = computed(() => {
-  return [
-    { value: 0, text: "创建的活动" },
-    { value: 1, text: "参与的活动" },
-  ]
-})
 const categoryColumns = ref<any[]>([])
 const searchTabList = computed(() => {
   const arr = []

+ 24 - 1
UI/XYH.APP/src/pages.json

@@ -242,7 +242,7 @@
         {
           "path": "followMe",
           "style": {
-            "navigationBarTitleText": "我的关注"
+            "navigationBarTitleText": "关注我的"
           }
         },
         {
@@ -252,6 +252,29 @@
           }
         }
       ]
+    },
+    {
+      "root": "pages-sub/favorite",
+      "pages": [
+        {
+          "path": "news",
+          "style": {
+            "navigationBarTitleText": "我的点赞收藏-资讯"
+          }
+        },
+        {
+          "path": "help",
+          "style": {
+            "navigationBarTitleText": "我的点赞收藏-互助"
+          }
+        },
+        {
+          "path": "activity",
+          "style": {
+            "navigationBarTitleText": "我的点赞收藏-活动"
+          }
+        }
+      ]
     }
   ],
   "tabBar": {

+ 3 - 3
UI/XYH.APP/src/pages/mine/index.vue

@@ -168,21 +168,21 @@ onMounted(init)
           icon="favorite-s"
           icon-class="text-vb"
           title="我收藏的资讯"
-          @click="route.navigate('favorite', { active: 0 })"
+          @click="route.navigate('favoriteNews')"
           is-link
         ></vb-cell>
         <vb-cell
           icon="favorite-s"
           icon-class="text-vb"
           title="我收藏的活动"
-          @click="route.navigate('favorite', { active: 1 })"
+          @click="route.navigate('favoriteActivity')"
           is-link
         ></vb-cell>
         <vb-cell
           icon="favorite-s"
           icon-class="text-vb"
           title="我收藏的互助"
-          @click="route.navigate('favorite', { active: 2 })"
+          @click="route.navigate('favoriteHelp')"
           is-link
         ></vb-cell>
       </vb-cell-group>

+ 6 - 0
UI/XYH.APP/src/route/_pages.ts

@@ -44,12 +44,18 @@ const friendSub = {
   myFollow: "/pages-sub/friend/myFollow",
   followMe: "/pages-sub/friend/followMe",
 }
+const favoriteSub = {
+  favoriteNews: "/pages-sub/favorite/news",
+  favoriteHelp: "/pages-sub/favorite/help",
+  favoriteActivity: "/pages-sub/favorite/activity",
+}
 
 const subPackage = {
   ...mineSub,
   ...alumnusSub,
   ...activitySub,
   ...friendSub,
+  ...favoriteSub,
 }
 
 const pages = {