feat(assessment): 测评类型增加LinkUrl字段,支持可配置跳转

- assessment_types表新增LinkUrl字段
- 后端实体类、DTO、请求模型、服务层全链路支持LinkUrl
- 前端首页卡片点击改为读取后台配置的linkUrl跳转
- 测评类页面自动拼接typeId/typeName参数
This commit is contained in:
zpc 2026-02-23 12:03:37 +08:00
parent e33f4ed8f0
commit 38dfd10b43
9 changed files with 54 additions and 2 deletions

View File

@ -36,6 +36,12 @@ public class AssessmentType
[MaxLength(500)]
public string? ImageUrl { get; set; }
/// <summary>
/// 跳转链接URL
/// </summary>
[MaxLength(500)]
public string? LinkUrl { get; set; }
/// <summary>
/// 详情横幅图URL
/// </summary>

View File

@ -25,6 +25,11 @@ public class AssessmentTypeDto
/// </summary>
public string? ImageUrl { get; set; }
/// <summary>
/// 跳转链接URL
/// </summary>
public string? LinkUrl { get; set; }
/// <summary>
/// 详情横幅图URL
/// </summary>

View File

@ -27,6 +27,12 @@ public class CreateAssessmentTypeRequest
[MaxLength(500, ErrorMessage = "图片URL不能超过500个字符")]
public string? ImageUrl { get; set; }
/// <summary>
/// 跳转链接URL
/// </summary>
[MaxLength(500, ErrorMessage = "跳转链接URL不能超过500个字符")]
public string? LinkUrl { get; set; }
/// <summary>
/// 详情横幅图URL
/// </summary>

View File

@ -33,6 +33,12 @@ public class UpdateAssessmentTypeRequest
[MaxLength(500, ErrorMessage = "图片URL不能超过500个字符")]
public string? ImageUrl { get; set; }
/// <summary>
/// 跳转链接URL
/// </summary>
[MaxLength(500, ErrorMessage = "跳转链接URL不能超过500个字符")]
public string? LinkUrl { get; set; }
/// <summary>
/// 详情横幅图URL
/// </summary>

View File

@ -83,6 +83,7 @@ public class AssessmentService : IAssessmentService
Name = t.Name,
Code = t.Code,
ImageUrl = t.ImageUrl,
LinkUrl = t.LinkUrl,
DetailImageUrl = t.DetailImageUrl,
IntroContent = t.IntroContent,
Price = t.Price,
@ -109,6 +110,7 @@ public class AssessmentService : IAssessmentService
Name = t.Name,
Code = t.Code,
ImageUrl = t.ImageUrl,
LinkUrl = t.LinkUrl,
DetailImageUrl = t.DetailImageUrl,
IntroContent = t.IntroContent,
Price = t.Price,
@ -161,6 +163,7 @@ public class AssessmentService : IAssessmentService
Name = request.Name,
Code = request.Code,
ImageUrl = request.ImageUrl,
LinkUrl = request.LinkUrl,
DetailImageUrl = request.DetailImageUrl,
IntroContent = request.IntroContent,
Price = request.Price,
@ -222,6 +225,7 @@ public class AssessmentService : IAssessmentService
assessmentType.Name = request.Name;
assessmentType.Code = request.Code;
assessmentType.ImageUrl = request.ImageUrl;
assessmentType.LinkUrl = request.LinkUrl;
assessmentType.DetailImageUrl = request.DetailImageUrl;
assessmentType.IntroContent = request.IntroContent;
assessmentType.Price = request.Price;

View File

@ -66,6 +66,7 @@ public class HomeService : IHomeService
Name = a.Name,
Code = a.Code,
ImageUrl = a.ImageUrl ?? string.Empty,
LinkUrl = a.LinkUrl,
Price = a.Price,
Status = a.Status
})

View File

@ -36,6 +36,12 @@ public class AssessmentType
[MaxLength(500)]
public string? ImageUrl { get; set; }
/// <summary>
/// 跳转链接URL
/// </summary>
[MaxLength(500)]
public string? LinkUrl { get; set; }
/// <summary>
/// 详情横幅图URL
/// </summary>

View File

@ -25,6 +25,11 @@ public class AssessmentTypeDto
/// </summary>
public string ImageUrl { get; set; } = null!;
/// <summary>
/// 跳转链接URL
/// </summary>
public string? LinkUrl { get; set; }
/// <summary>
/// 价格
/// </summary>

View File

@ -216,9 +216,22 @@ function handleAssessmentClick(item) {
return
}
//
//
if (!item.linkUrl) return
// typeId typeName
let url = item.linkUrl
if (url.includes('/pages/assessment/')) {
const separator = url.includes('?') ? '&' : '?'
url = `${url}${separator}typeId=${item.id}&typeName=${encodeURIComponent(item.name || '')}`
}
uni.navigateTo({
url: `/pages/assessment/info/index?typeId=${item.id}&typeName=${encodeURIComponent(item.name || '')}`
url,
fail: () => {
// tabBar使switchTab
uni.switchTab({ url })
}
})
}