From de7eb8234c4f2840e292f200e4218ce3a08e1e7b Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 20 Feb 2026 19:12:08 +0800 Subject: [PATCH] 321 --- .../scripts/add_detail_image_url.sql | 12 ++ .../Entities/AssessmentType.cs | 6 + .../Models/Assessment/AssessmentTypeDto.cs | 5 + .../Assessment/CreateAssessmentTypeRequest.cs | 6 + .../Assessment/UpdateAssessmentTypeRequest.cs | 6 + .../Services/AssessmentService.cs | 4 + .../admin-web/src/api/business/assessment.ts | 4 + .../views/business/assessment/type/index.vue | 13 ++ .../Services/AssessmentService.cs | 1 + .../Data/MiAssessmentDbContext.cs | 3 + .../Entities/AssessmentType.cs | 6 + .../Models/Assessment/AssessmentIntroDto.cs | 5 + uniapp/pages/assessment/info/index.vue | 201 ++++++++++++------ uniapp/pages/business/detail/index.vue | 112 +++------- 14 files changed, 244 insertions(+), 140 deletions(-) create mode 100644 server/MiAssessment/scripts/add_detail_image_url.sql diff --git a/server/MiAssessment/scripts/add_detail_image_url.sql b/server/MiAssessment/scripts/add_detail_image_url.sql new file mode 100644 index 0000000..922c58d --- /dev/null +++ b/server/MiAssessment/scripts/add_detail_image_url.sql @@ -0,0 +1,12 @@ +-- 为测评类型表添加详情横幅图字段 +-- 用于小程序测评信息填写页顶部的横幅图展示 + +IF NOT EXISTS ( + SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME = 'assessment_types' AND COLUMN_NAME = 'DetailImageUrl' +) +BEGIN + ALTER TABLE assessment_types + ADD DetailImageUrl nvarchar(500) NULL; +END +GO diff --git a/server/MiAssessment/src/MiAssessment.Admin.Business/Entities/AssessmentType.cs b/server/MiAssessment/src/MiAssessment.Admin.Business/Entities/AssessmentType.cs index 752bfc7..a15d4e2 100644 --- a/server/MiAssessment/src/MiAssessment.Admin.Business/Entities/AssessmentType.cs +++ b/server/MiAssessment/src/MiAssessment.Admin.Business/Entities/AssessmentType.cs @@ -36,6 +36,12 @@ public class AssessmentType [MaxLength(500)] public string? ImageUrl { get; set; } + /// + /// 详情横幅图URL + /// + [MaxLength(500)] + public string? DetailImageUrl { get; set; } + /// /// 介绍内容 /// diff --git a/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/AssessmentTypeDto.cs b/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/AssessmentTypeDto.cs index 3f20377..5a48868 100644 --- a/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/AssessmentTypeDto.cs +++ b/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/AssessmentTypeDto.cs @@ -25,6 +25,11 @@ public class AssessmentTypeDto /// public string? ImageUrl { get; set; } + /// + /// 详情横幅图URL + /// + public string? DetailImageUrl { get; set; } + /// /// 介绍内容 /// diff --git a/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/CreateAssessmentTypeRequest.cs b/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/CreateAssessmentTypeRequest.cs index 1234605..038a6ed 100644 --- a/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/CreateAssessmentTypeRequest.cs +++ b/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/CreateAssessmentTypeRequest.cs @@ -27,6 +27,12 @@ public class CreateAssessmentTypeRequest [MaxLength(500, ErrorMessage = "图片URL不能超过500个字符")] public string? ImageUrl { get; set; } + /// + /// 详情横幅图URL + /// + [MaxLength(500, ErrorMessage = "详情横幅图URL不能超过500个字符")] + public string? DetailImageUrl { get; set; } + /// /// 介绍内容 /// diff --git a/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/UpdateAssessmentTypeRequest.cs b/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/UpdateAssessmentTypeRequest.cs index b725a34..51601aa 100644 --- a/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/UpdateAssessmentTypeRequest.cs +++ b/server/MiAssessment/src/MiAssessment.Admin.Business/Models/Assessment/UpdateAssessmentTypeRequest.cs @@ -33,6 +33,12 @@ public class UpdateAssessmentTypeRequest [MaxLength(500, ErrorMessage = "图片URL不能超过500个字符")] public string? ImageUrl { get; set; } + /// + /// 详情横幅图URL + /// + [MaxLength(500, ErrorMessage = "详情横幅图URL不能超过500个字符")] + public string? DetailImageUrl { get; set; } + /// /// 介绍内容 /// diff --git a/server/MiAssessment/src/MiAssessment.Admin.Business/Services/AssessmentService.cs b/server/MiAssessment/src/MiAssessment.Admin.Business/Services/AssessmentService.cs index 034580a..29476d5 100644 --- a/server/MiAssessment/src/MiAssessment.Admin.Business/Services/AssessmentService.cs +++ b/server/MiAssessment/src/MiAssessment.Admin.Business/Services/AssessmentService.cs @@ -83,6 +83,7 @@ public class AssessmentService : IAssessmentService Name = t.Name, Code = t.Code, ImageUrl = t.ImageUrl, + DetailImageUrl = t.DetailImageUrl, IntroContent = t.IntroContent, Price = t.Price, QuestionCount = t.QuestionCount, @@ -108,6 +109,7 @@ public class AssessmentService : IAssessmentService Name = t.Name, Code = t.Code, ImageUrl = t.ImageUrl, + DetailImageUrl = t.DetailImageUrl, IntroContent = t.IntroContent, Price = t.Price, QuestionCount = t.QuestionCount, @@ -159,6 +161,7 @@ public class AssessmentService : IAssessmentService Name = request.Name, Code = request.Code, ImageUrl = request.ImageUrl, + DetailImageUrl = request.DetailImageUrl, IntroContent = request.IntroContent, Price = request.Price, QuestionCount = request.QuestionCount, @@ -219,6 +222,7 @@ public class AssessmentService : IAssessmentService assessmentType.Name = request.Name; assessmentType.Code = request.Code; assessmentType.ImageUrl = request.ImageUrl; + assessmentType.DetailImageUrl = request.DetailImageUrl; assessmentType.IntroContent = request.IntroContent; assessmentType.Price = request.Price; assessmentType.QuestionCount = request.QuestionCount; diff --git a/server/MiAssessment/src/MiAssessment.Admin/admin-web/src/api/business/assessment.ts b/server/MiAssessment/src/MiAssessment.Admin/admin-web/src/api/business/assessment.ts index 9955fb0..ee12564 100644 --- a/server/MiAssessment/src/MiAssessment.Admin/admin-web/src/api/business/assessment.ts +++ b/server/MiAssessment/src/MiAssessment.Admin/admin-web/src/api/business/assessment.ts @@ -21,6 +21,8 @@ export interface AssessmentTypeItem { code: string /** 图片URL */ imageUrl: string + /** 详情横幅图URL */ + detailImageUrl: string /** 介绍内容(富文本) */ introContent: string /** 价格 */ @@ -59,6 +61,8 @@ export interface CreateAssessmentTypeRequest { code: string /** 图片URL */ imageUrl?: string + /** 详情横幅图URL */ + detailImageUrl?: string /** 介绍内容(富文本) */ introContent?: string /** 价格 */ diff --git a/server/MiAssessment/src/MiAssessment.Admin/admin-web/src/views/business/assessment/type/index.vue b/server/MiAssessment/src/MiAssessment.Admin/admin-web/src/views/business/assessment/type/index.vue index 41c44ef..3429e8b 100644 --- a/server/MiAssessment/src/MiAssessment.Admin/admin-web/src/views/business/assessment/type/index.vue +++ b/server/MiAssessment/src/MiAssessment.Admin/admin-web/src/views/business/assessment/type/index.vue @@ -212,6 +212,15 @@ /> + + + + a.Id == typeId && !a.IsDeleted) .Select(a => new AssessmentIntroDto { + ImageUrl = a.DetailImageUrl, Content = a.IntroContent ?? string.Empty, ContentType = "html", Price = a.Price diff --git a/server/MiAssessment/src/MiAssessment.Model/Data/MiAssessmentDbContext.cs b/server/MiAssessment/src/MiAssessment.Model/Data/MiAssessmentDbContext.cs index 3cf06c0..59fd272 100644 --- a/server/MiAssessment/src/MiAssessment.Model/Data/MiAssessmentDbContext.cs +++ b/server/MiAssessment/src/MiAssessment.Model/Data/MiAssessmentDbContext.cs @@ -1124,6 +1124,9 @@ public partial class MiAssessmentDbContext : DbContext entity.Property(e => e.ImageUrl) .HasMaxLength(500) .HasComment("入口图片URL"); + entity.Property(e => e.DetailImageUrl) + .HasMaxLength(500) + .HasComment("详情横幅图URL"); entity.Property(e => e.IntroContent) .HasComment("介绍内容"); entity.Property(e => e.Price) diff --git a/server/MiAssessment/src/MiAssessment.Model/Entities/AssessmentType.cs b/server/MiAssessment/src/MiAssessment.Model/Entities/AssessmentType.cs index 6634c9a..efcb949 100644 --- a/server/MiAssessment/src/MiAssessment.Model/Entities/AssessmentType.cs +++ b/server/MiAssessment/src/MiAssessment.Model/Entities/AssessmentType.cs @@ -36,6 +36,12 @@ public class AssessmentType [MaxLength(500)] public string? ImageUrl { get; set; } + /// + /// 详情横幅图URL + /// + [MaxLength(500)] + public string? DetailImageUrl { get; set; } + /// /// 介绍内容 /// diff --git a/server/MiAssessment/src/MiAssessment.Model/Models/Assessment/AssessmentIntroDto.cs b/server/MiAssessment/src/MiAssessment.Model/Models/Assessment/AssessmentIntroDto.cs index eed869c..85eefd7 100644 --- a/server/MiAssessment/src/MiAssessment.Model/Models/Assessment/AssessmentIntroDto.cs +++ b/server/MiAssessment/src/MiAssessment.Model/Models/Assessment/AssessmentIntroDto.cs @@ -5,6 +5,11 @@ namespace MiAssessment.Model.Models.Assessment; /// public class AssessmentIntroDto { + /// + /// 详情横幅图URL + /// + public string? ImageUrl { get; set; } + /// /// 介绍内容 /// diff --git a/uniapp/pages/assessment/info/index.vue b/uniapp/pages/assessment/info/index.vue index c0a1ffe..cdd811b 100644 --- a/uniapp/pages/assessment/info/index.vue +++ b/uniapp/pages/assessment/info/index.vue @@ -316,7 +316,7 @@ onLoad((options) => { @@ -183,14 +166,8 @@ onLoad((options) => { - - - - 点击参与 - - - - + + @@ -200,7 +177,6 @@ onLoad((options) => { .business-detail-page { min-height: 100vh; background-color: $bg-white; - padding-bottom: 160rpx; // 为底部按钮留出空间 } // 自定义导航栏 @@ -277,6 +253,7 @@ onLoad((options) => { // 详情图片区域 .detail-image-wrap { width: 100%; + position: relative; .detail-image { width: 100%; @@ -284,59 +261,40 @@ onLoad((options) => { } } -// 空状态 -.empty-state { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 200rpx 0; - - .empty-icon { - width: 200rpx; - height: 200rpx; - margin-bottom: $spacing-lg; - } - - .empty-text { - font-size: $font-size-md; - color: $text-placeholder; - } -} - -// 底部按钮区域 -.bottom-action { - position: fixed; +// 图片底部悬浮按钮 +.image-bottom-action { + position: absolute; left: 0; right: 0; - bottom: 0; - background-color: $bg-white; - padding: $spacing-md $spacing-lg; - box-shadow: 0 -4rpx 20rpx rgba(0, 0, 0, 0.05); - z-index: 100; + bottom: 80rpx; + display: flex; + justify-content: center; .action-btn { - width: 100%; - height: 96rpx; - background: linear-gradient(135deg, #4A90E2 0%, #357ABD 100%); - border-radius: 48rpx; + min-width: 320rpx; + height: 88rpx; + background-color: $bg-white; + border-radius: $border-radius-round; display: flex; align-items: center; justify-content: center; + padding: 0 60rpx; + box-shadow: $shadow-md; &:active { opacity: 0.9; } .btn-text { - font-size: 34rpx; + font-size: 32rpx; font-weight: $font-weight-medium; - color: $text-white; + color: $text-color; } } - - .safe-area-bottom { - height: env(safe-area-inset-bottom); - } +} + +// 底部安全区域 +.safe-area-bottom { + height: env(safe-area-inset-bottom); }