zjk
2026-09-29 70e7eace440e324c74fb7dfe2b30dc5ba5b67205
feat(养生课程): 新增当前在学人数统计与展示功能

- 新增数据库字段studying_count并提供兼容的初始化SQL脚本
- 添加用户访问课程详情时自动递增在学人数的逻辑
- 同步更新所有后端实体、VO、DTO类以支持新字段
- 更新前后端所有页面的展示逻辑,将「X人正在学」替换为使用当前在学人数
- 新增管理后台课程编辑页的初始在学人数配置项与校验规则
1个文件已添加
27个文件已修改
118 ■■■■■ 已修改文件
tcm-training-admin-backend/sql/init.sql 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/sql/update_health_course_studying_count.sql 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/vo/AppHealthCourseDetailVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/vo/AppHealthCourseFavoriteItemVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/vo/AppHealthCourseListItemVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/home/service/AppHomeFeaturedContentService.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/home/vo/AppHomeFeaturedHealthCourseVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/search/service/AppSearchService.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/search/vo/AppSearchHealthCourseVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/dto/HealthCourseSaveRequest.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/HealthCourse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/excel/HealthCourseExportRow.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/row/AppHealthCourseFavoriteRow.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/HealthCourseAppService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/vo/HealthCourseDetailRow.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/vo/HealthCourseDetailVO.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/vo/HealthCourseListItemVO.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/vo/HealthCourseListRow.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/resources/mapper/HealthCourseFavoriteRecordMapper.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/resources/mapper/HealthCourseMapper.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/live/health/index.tsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/live/health/manage.tsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traditionalApp/pages/courseDetail/courseDetail.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traditionalApp/pages/favorites/favorites.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traditionalApp/pages/healthCourses/healthCourses.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traditionalApp/pages/home/home.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traditionalApp/pages/search/search.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/sql/init.sql
@@ -578,6 +578,7 @@
  `base_sales_count` INT NOT NULL DEFAULT 0 COMMENT '基础销量',
  `real_sales_count` INT NOT NULL DEFAULT 0 COMMENT '真实销量',
  `learn_user_count` INT NOT NULL DEFAULT 0 COMMENT '累计学习人数',
  `studying_count` INT NOT NULL DEFAULT 0 COMMENT '正在学习人数',
  `favorite_count` INT NOT NULL DEFAULT 0 COMMENT '收藏量',
  `total_duration_seconds` INT NOT NULL DEFAULT 0 COMMENT '课程总时长(秒)',
  `video_count` INT NOT NULL DEFAULT 0 COMMENT '视频小节数',
tcm-training-admin-backend/sql/update_health_course_studying_count.sql
New file
@@ -0,0 +1,10 @@
-- 在目标主库执行;仅新增养生课程「正在学习人数」字段,不修改已有业务数据,可重复执行。
SET @ddl = IF(
    (SELECT COUNT(*) FROM information_schema.COLUMNS
     WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'tcm_health_course'
       AND COLUMN_NAME = 'studying_count') = 0,
    'ALTER TABLE tcm_health_course ADD COLUMN studying_count INT NOT NULL DEFAULT 0 COMMENT ''正在学习人数'' AFTER learn_user_count',
    'SELECT 1');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java
@@ -153,6 +153,7 @@
            itemVO.setDifficultyName(trimToEmpty(row.getDifficultyName()));
            itemVO.setSalePrice(defaultPrice(row.getSalePrice()));
            itemVO.setLearnUserCount(defaultNumber(row.getLearnUserCount()));
            itemVO.setStudyingCount(defaultNumber(row.getStudyingCount()));
            result.add(itemVO);
        }
        return result;
@@ -166,6 +167,8 @@
        if (courseDetail.getStatus() == null || courseDetail.getStatus().intValue() != COURSE_STATUS_ENABLED) {
            throw new IllegalArgumentException("养生课程不存在");
        }
        // 进入课程详情即视为一次学习行为,正在学习人数自增;返回值按自增后的口径展示
        incrementStudyingCount(courseId);
        List<HealthCourseVideo> enabledVideos = listEnabledVideos(courseId);
        AppHealthCourseDetailVO detailVO = new AppHealthCourseDetailVO();
@@ -176,6 +179,7 @@
        detailVO.setDifficultyName(trimToEmpty(courseDetail.getDifficultyName()));
        detailVO.setSalePrice(defaultPrice(courseDetail.getSalePrice()));
        detailVO.setLearnUserCount(defaultNumber(courseDetail.getLearnUserCount()));
        detailVO.setStudyingCount(Integer.valueOf(defaultNumber(courseDetail.getStudyingCount()) + 1));
        detailVO.setSummary(trimToEmpty(courseDetail.getSummary()));
        detailVO.setTargetUsers(trimToEmpty(courseDetail.getTargetUsers()));
        detailVO.setContent(trimToEmpty(courseDetail.getContent()));
@@ -218,6 +222,7 @@
            itemVO.setTeacherName(trimToEmpty(row.getTeacherName()));
            itemVO.setTeacherAvatar(trimToEmpty(row.getTeacherAvatar()));
            itemVO.setLearnUserCount(defaultNumber(row.getLearnUserCount()));
            itemVO.setStudyingCount(defaultNumber(row.getStudyingCount()));
            itemVO.setFavoritedAt(row.getFavoritedAt());
            result.add(itemVO);
        }
@@ -1410,6 +1415,16 @@
    }
    /**
     * 正在学习人数自增 1,进入课程详情时调用。
     */
    private void incrementStudyingCount(Long courseId) {
        LambdaUpdateWrapper<HealthCourse> updateWrapper = new LambdaUpdateWrapper<HealthCourse>()
                .eq(HealthCourse::getId, courseId)
                .setSql("studying_count = COALESCE(studying_count, 0) + 1");
        healthCourseMapper.update(null, updateWrapper);
    }
    /**
     * 构造收藏操作返回结果,避免控制器层重复拼装。
     */
    private AppHealthCourseFavoriteResultVO buildFavoriteResult(Long courseId, boolean favorited, Integer favoriteCount) {
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/vo/AppHealthCourseDetailVO.java
@@ -27,6 +27,9 @@
    private Integer learnUserCount;
    /** 正在学习人数:访问详情页时自增,随详情接口返回最新值 */
    private Integer studyingCount;
    private String summary;
    private String targetUsers;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/vo/AppHealthCourseFavoriteItemVO.java
@@ -20,5 +20,8 @@
    private String teacherName;
    private String teacherAvatar;
    private Integer learnUserCount;
    /** 正在学习人数:与课程列表/详情口径一致,用于「X人正在学」展示 */
    private Integer studyingCount;
    private LocalDateTime favoritedAt;
}
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/vo/AppHealthCourseListItemVO.java
@@ -25,4 +25,7 @@
    private BigDecimal salePrice;
    private Integer learnUserCount;
    /** 正在学习人数:每次进入课程详情自增,用于列表展示 */
    private Integer studyingCount;
}
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/home/service/AppHomeFeaturedContentService.java
@@ -98,6 +98,7 @@
            vo.setDifficultyName(categoryNameMap.get(course.getDifficultyCategoryId()));
            vo.setSalePrice(course.getSalePrice() == null ? BigDecimal.ZERO : course.getSalePrice());
            vo.setLearnUserCount(defaultNumber(course.getLearnUserCount()));
            vo.setStudyingCount(defaultNumber(course.getStudyingCount()));
            result.add(vo);
        }
        return result;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/home/vo/AppHomeFeaturedHealthCourseVO.java
@@ -25,4 +25,7 @@
    private BigDecimal salePrice;
    private Integer learnUserCount;
    /** 正在学习人数:与课程详情/列表口径一致,用于「X人正在学」展示 */
    private Integer studyingCount;
}
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/search/service/AppSearchService.java
@@ -86,6 +86,7 @@
            courseVO.setDifficultyName(trimToEmpty(row.getDifficultyName()));
            courseVO.setSalePrice(defaultPrice(row.getSalePrice()));
            courseVO.setLearnUserCount(defaultNumber(row.getLearnUserCount()));
            courseVO.setStudyingCount(defaultNumber(row.getStudyingCount()));
            result.add(courseVO);
        }
        return result;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/search/vo/AppSearchHealthCourseVO.java
@@ -25,4 +25,7 @@
    private BigDecimal salePrice;
    private Integer learnUserCount;
    /** 正在学习人数:与课程列表/详情口径一致,用于「X人正在学」展示 */
    private Integer studyingCount;
}
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/dto/HealthCourseSaveRequest.java
@@ -6,6 +6,7 @@
import lombok.Setter;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@@ -53,6 +54,10 @@
    @NotNull(message = "请输入基础购买量")
    private Integer baseSalesCount;
    @NotNull(message = "请输入学习人数")
    @Min(value = 0, message = "学习人数不能小于0")
    private Integer studyingCount;
    @NotNull(message = "请选择是否启用")
    private Integer status;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/HealthCourse.java
@@ -60,6 +60,9 @@
    @TableField("learn_user_count")
    private Integer learnUserCount;
    @TableField("studying_count")
    private Integer studyingCount;
    @TableField("favorite_count")
    private Integer favoriteCount;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/excel/HealthCourseExportRow.java
@@ -28,7 +28,7 @@
    private Integer salesCount;
    @ExcelProperty("学习人数")
    private Integer learnUserCount;
    private Integer studyingCount;
    @ExcelProperty("共计课时")
    private String totalDuration;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/row/AppHealthCourseFavoriteRow.java
@@ -22,5 +22,6 @@
    private String teacherName;
    private String teacherAvatar;
    private Integer learnUserCount;
    private Integer studyingCount;
    private LocalDateTime favoritedAt;
}
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/HealthCourseAppService.java
@@ -181,7 +181,7 @@
            export.setDifficultyName(defaultText(row.getDifficultyName()));
            export.setSalePrice(row.getSalePrice() == null ? BigDecimal.ZERO : row.getSalePrice());
            export.setSalesCount(resolveSalesCount(row.getBaseSalesCount(), row.getRealSalesCount()));
            export.setLearnUserCount(defaultNumber(row.getLearnUserCount()));
            export.setStudyingCount(defaultNumber(row.getStudyingCount()));
            export.setTotalDuration(formatDuration(defaultNumber(row.getTotalDurationSeconds())));
            export.setFavoriteCount(defaultNumber(row.getFavoriteCount()));
            export.setExpertName(defaultText(row.getExpertName()));
@@ -418,6 +418,8 @@
        course.setBannerImgs(req.getBannerImgs());
        course.setContent(req.getContent().trim());
        course.setBaseSalesCount(req.getBaseSalesCount() == null ? 0 : req.getBaseSalesCount());
        // 正在学习人数由后台表单配置初始值,App 端每次进入课程详情会在此基础上自增
        course.setStudyingCount(req.getStudyingCount() == null ? 0 : req.getStudyingCount());
        course.setStatus(req.getStatus());
        course.setIsHomeRecommend(req.getIsHomeRecommend());
        course.setSort(defaultNumber(req.getSort()));
@@ -590,6 +592,7 @@
        vo.setSalePrice(row.getSalePrice() == null ? BigDecimal.ZERO : row.getSalePrice());
        vo.setSalesCount(resolveSalesCount(row.getBaseSalesCount(), row.getRealSalesCount()));
        vo.setLearnUserCount(defaultNumber(row.getLearnUserCount()));
        vo.setStudyingCount(defaultNumber(row.getStudyingCount()));
        vo.setTotalDurationSeconds(defaultNumber(row.getTotalDurationSeconds()));
        vo.setFavoriteCount(defaultNumber(row.getFavoriteCount()));
        vo.setExpert(new ExpertVO(row.getExpertId(), row.getExpertName(), row.getExpertAvatar()));
@@ -620,6 +623,7 @@
        vo.setRealSalesCount(defaultNumber(row.getRealSalesCount()));
        vo.setSalesCount(resolveSalesCount(row.getBaseSalesCount(), row.getRealSalesCount()));
        vo.setLearnUserCount(defaultNumber(row.getLearnUserCount()));
        vo.setStudyingCount(defaultNumber(row.getStudyingCount()));
        vo.setFavoriteCount(defaultNumber(row.getFavoriteCount()));
        vo.setTotalDurationSeconds(defaultNumber(row.getTotalDurationSeconds()));
        vo.setVideoCount(defaultNumber(row.getVideoCount()));
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/vo/HealthCourseDetailRow.java
@@ -29,6 +29,7 @@
    private Integer baseSalesCount;
    private Integer realSalesCount;
    private Integer learnUserCount;
    private Integer studyingCount;
    private Integer favoriteCount;
    private Integer totalDurationSeconds;
    private Integer videoCount;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/vo/HealthCourseDetailVO.java
@@ -29,6 +29,7 @@
    private Integer realSalesCount;
    private Integer salesCount;
    private Integer learnUserCount;
    private Integer studyingCount;
    private Integer favoriteCount;
    private Integer totalDurationSeconds;
    private Integer videoCount;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/vo/HealthCourseListItemVO.java
@@ -18,6 +18,7 @@
    private BigDecimal salePrice;
    private Integer salesCount;
    private Integer learnUserCount;
    private Integer studyingCount;
    private Integer totalDurationSeconds;
    private Integer favoriteCount;
    private ExpertVO expert;
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/vo/HealthCourseListRow.java
@@ -19,6 +19,7 @@
    private Integer baseSalesCount;
    private Integer realSalesCount;
    private Integer learnUserCount;
    private Integer studyingCount;
    private Integer totalDurationSeconds;
    private Integer favoriteCount;
    private Long expertId;
tcm-training-admin-backend/src/main/resources/mapper/HealthCourseFavoriteRecordMapper.xml
@@ -13,6 +13,7 @@
            e.name AS teacherName,
            e.avatar AS teacherAvatar,
            c.learn_user_count AS learnUserCount,
            c.studying_count AS studyingCount,
            latest.action_time AS favoritedAt
        FROM (
            SELECT r.course_id, r.action_time, r.id
tcm-training-admin-backend/src/main/resources/mapper/HealthCourseMapper.xml
@@ -23,6 +23,7 @@
            c.base_sales_count AS baseSalesCount,
            c.real_sales_count AS realSalesCount,
            c.learn_user_count AS learnUserCount,
            c.studying_count AS studyingCount,
            c.favorite_count AS favoriteCount,
            c.total_duration_seconds AS totalDurationSeconds,
            c.video_count AS videoCount,
tcm-training-admin/src/pages/live/health/index.tsx
@@ -32,6 +32,7 @@
  salePrice?: number;
  salesCount?: number;
  learnUserCount?: number;
  studyingCount?: number;
  totalDurationSeconds?: number;
  favoriteCount?: number;
  coverImg?: string;
@@ -189,7 +190,7 @@
    },
    {
      title: '学习人数',
      dataIndex: 'learnUserCount',
      dataIndex: 'studyingCount',
      width: 100,
      render: (value) => `${value || 0}人`,
    },
tcm-training-admin/src/pages/live/health/manage.tsx
@@ -74,6 +74,7 @@
            isHomeRecommend: false,
            salePrice: 0,
            baseSalesCount: 0,
            studyingCount: 0,
            sort: 0,
            summary: '',
            targetUsers: '',
@@ -97,6 +98,7 @@
          coverImg: course.coverImg,
          bannerImgs: course.bannerImgs || [],
          baseSalesCount: course.baseSalesCount,
          studyingCount: course.studyingCount ?? 0,
          sort: course.sort ?? 0,
          status: course.status === 1,
          isHomeRecommend: course.isHomeRecommend === 1,
@@ -120,6 +122,7 @@
      bannerImgs,
      content: values.content,
      sort: Number(values.sort || 0),
      studyingCount: Number(values.studyingCount || 0),
      status: values.status ? 1 : 0,
      isHomeRecommend: values.isHomeRecommend ? 1 : 0,
    };
@@ -206,6 +209,18 @@
            >
              <InputNumber min={0} precision={0} placeholder="请输入" className="health-course-edit-form__number" />
            </Form.Item>
            <Form.Item
              label="学习人数"
              name="studyingCount"
              rules={[{ required: true, message: '请输入学习人数' }]}
            >
              <InputNumber
                min={0}
                precision={0}
                placeholder="课程初始学习人数"
                className="health-course-edit-form__number"
              />
            </Form.Item>
            <Form.Item label="课程介绍" name="summary">
              <Input.TextArea rows={4} maxLength={500} placeholder="请输入" disabled={loading} />
            </Form.Item>
traditionalApp/pages/courseDetail/courseDetail.vue
@@ -64,7 +64,7 @@
                            <image class="person-icon"
                                src="http://obs.haizhentong.com/file/person-f8f5e24d3abe449c95b58cd6253aabfd.png"
                                mode="aspectFit"></image>
                            <text class="stats-text">{{ formatLearningCount(courseDetail.learnUserCount) }}人正在学</text>
                            <text class="stats-text">{{ formatLearningCount(courseDetail.studyingCount) }}人正在学</text>
                        </view>
                    </view>
@@ -370,6 +370,8 @@
        difficultyName : string
        salePrice : number | string
        learnUserCount : number
        /** 正在学习人数:后端在返回详情时会自增,用于「X人正在学」展示 */
        studyingCount : number
        summary : string
        targetUsers : string
        content : string
@@ -446,6 +448,7 @@
            difficultyName: '',
            salePrice: 0,
            learnUserCount: 0,
            studyingCount: 0,
            summary: '',
            targetUsers: '',
            content: '',
@@ -555,12 +558,14 @@
    onMounted(() => {
        setTimeout(() => {
            const pageOptions = getCurrentPageOptions()
            if (!courseId.value) {
                courseId.value = resolveCourseId(pageOptions)
                shouldPlayLatestVideoOnLoad.value = resolveBooleanRouteParam(pageOptions, 'playLatest')
                shouldPlayFirstVideoOnLoad.value = resolveBooleanRouteParam(pageOptions, 'playFirst')
            // onLoad 已解析出课程 id 时不再重复请求,避免详情接口被调用两次导致学习人数重复自增
            if (courseId.value) {
                return
            }
            const pageOptions = getCurrentPageOptions()
            courseId.value = resolveCourseId(pageOptions)
            shouldPlayLatestVideoOnLoad.value = resolveBooleanRouteParam(pageOptions, 'playLatest')
            shouldPlayFirstVideoOnLoad.value = resolveBooleanRouteParam(pageOptions, 'playFirst')
            loadCourseDetail()
        }, 0)
    })
traditionalApp/pages/favorites/favorites.vue
@@ -52,7 +52,7 @@
                                            </view>
                                            <view class="student-count">
                                                <wd-icon name="user" size="12px" color="#999" custom-class="user-icon"></wd-icon>
                                                <text>{{ formatLearnUserCount(item.learnUserCount) }}人正在学</text>
                                                <text>{{ formatLearnUserCount(item.studyingCount) }}人正在学</text>
                                            </view>
                                        </view>
                                    </view>
@@ -80,6 +80,8 @@
    teacherName?: string
    teacherAvatar?: string
    learnUserCount?: number | null
    /** 正在学习人数:收藏接口返回,用于「X人正在学」展示 */
    studyingCount?: number | null
    selected?: boolean
}
@@ -156,6 +158,7 @@
            teacherName: normalizeOptionalText(record.teacherName),
            teacherAvatar: normalizeOptionalText(record.teacherAvatar),
            learnUserCount: normalizeOptionalNumber(record.learnUserCount),
            studyingCount: normalizeOptionalNumber(record.studyingCount),
            selected: false,
        }
    })
traditionalApp/pages/healthCourses/healthCourses.vue
@@ -65,7 +65,7 @@
                        <view class="course-bottom">
                            <view class="people-box">
                                <image class="person-icon" src="/static/image/home/person.png" mode="aspectFit"></image>
                                <text class="people-text">{{ formatLearningCount(item.learnUserCount) }}人正在学</text>
                                <text class="people-text">{{ formatLearningCount(item.studyingCount) }}人正在学</text>
                            </view>
                        </view>
                    </view>
@@ -90,6 +90,8 @@
    difficultyName?: string
    salePrice?: number | string
    learnUserCount?: number
    /** 正在学习人数:列表接口返回,用于「X人正在学」展示 */
    studyingCount?: number
}
interface DifficultyOptionItem {
traditionalApp/pages/home/home.vue
@@ -109,7 +109,7 @@
                            <view class="course-bottom">
                                <view class="people">
                                    <image src="/static/image/home/person.png" class="person-icon"></image>
                                    <text>{{ formatLearningCount(item.learnUserCount) }}人正在学</text>
                                    <text>{{ formatLearningCount(item.studyingCount) }}人正在学</text>
                                </view>
                            </view>
                        </view>
@@ -188,6 +188,8 @@
        difficultyName ?: string;
        salePrice ?: number | string;
        learnUserCount ?: number;
        /** 正在学习人数:首页精选课程接口返回,用于「X人正在学」展示 */
        studyingCount ?: number;
    }
    interface HomeFeaturedPopularizationItem {
traditionalApp/pages/search/search.vue
@@ -46,7 +46,7 @@
                            <view class="course-bottom">
                                <view class="people-box">
                                    <image class="person-icon" src="/static/image/home/person.png" mode="aspectFit"></image>
                                    <text class="people-text">{{ formatLearningCount(item.learnUserCount) }}人正在学</text>
                                    <text class="people-text">{{ formatLearningCount(item.studyingCount) }}人正在学</text>
                                </view>
                            </view>
                        </view>
@@ -90,6 +90,8 @@
    difficultyName?: string
    salePrice?: number | string
    learnUserCount?: number
    /** 正在学习人数:搜索接口返回,用于「X人正在学」展示 */
    studyingCount?: number
}
interface SearchPopularizationItem {