From 91491239c5d4611b5b1404a7abeb2bb23d0edad5 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期三, 30 九月 2026 14:26:59 +0800
Subject: [PATCH] feat(wxcp): 活动封面改用附件中间表,报名姓名手机号改为选填
---
yudao-module-wxcp/src/main/java/cn/iocoder/yudao/module/wxcp/controller/admin/activity/WxCpActivityPublicController.java | 70 +++++++++++++++++++++++++++++++----
1 files changed, 62 insertions(+), 8 deletions(-)
diff --git a/yudao-module-wxcp/src/main/java/cn/iocoder/yudao/module/wxcp/controller/admin/activity/WxCpActivityPublicController.java b/yudao-module-wxcp/src/main/java/cn/iocoder/yudao/module/wxcp/controller/admin/activity/WxCpActivityPublicController.java
index be902a8..6acbdcb 100644
--- a/yudao-module-wxcp/src/main/java/cn/iocoder/yudao/module/wxcp/controller/admin/activity/WxCpActivityPublicController.java
+++ b/yudao-module-wxcp/src/main/java/cn/iocoder/yudao/module/wxcp/controller/admin/activity/WxCpActivityPublicController.java
@@ -1,7 +1,9 @@
package cn.iocoder.yudao.module.wxcp.controller.admin.activity;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.module.system.controller.admin.storage.vo.SystemStorageBlobRespVO;
import cn.iocoder.yudao.module.wxcp.controller.admin.activity.vo.WxCpSignupPublicReqVO;
import cn.iocoder.yudao.module.wxcp.dal.dataobject.activity.WxCpActivityDO;
import cn.iocoder.yudao.module.wxcp.enums.activity.WxCpActivityStatusEnum;
@@ -17,8 +19,10 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import java.net.URI;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
+import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -91,6 +95,7 @@
.append("body{margin:0;padding:16px;font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;")
.append("background:#f5f6f8;color:#1f2329;font-size:15px;line-height:1.6}")
.append(".card{background:#fff;border-radius:12px;padding:18px;margin-bottom:12px;box-shadow:0 1px 4px rgba(0,0,0,.06)}")
+ .append(".cover{display:block;width:100%;max-height:260px;object-fit:cover;border-radius:8px;margin-bottom:14px;background:#f2f3f5}")
.append("h1{font-size:19px;margin:0 0 14px;font-weight:600;word-break:break-all}")
.append(".meta{color:#646a73;font-size:14px}")
.append(".meta div{margin-bottom:6px;display:flex}")
@@ -113,7 +118,13 @@
.append("</style></head><body>");
// 娲诲姩淇℃伅
- sb.append("<div class=\"card\"><h1>").append(esc(activity.getTitle())).append("</h1>")
+ sb.append("<div class=\"card\">");
+ // 灏侀潰鍥撅細鏉ヨ嚜闄勪欢涓棿琛紙record_type = wxcp_activity锛夛紝涓氬姟琛ㄤ笉瀛樻枃浠跺湴鍧�
+ String coverUrl = resolveCoverUrl(activity.getId());
+ if (StrUtil.isNotBlank(coverUrl)) {
+ sb.append("<img class=\"cover\" src=\"").append(esc(coverUrl)).append("\" alt=\"娲诲姩灏侀潰\">");
+ }
+ sb.append("<h1>").append(esc(activity.getTitle())).append("</h1>")
.append("<div class=\"meta\">");
String timeText = formatTimeRange(activity.getStartTime(), activity.getEndTime());
if (StrUtil.isNotBlank(timeText)) {
@@ -139,12 +150,12 @@
}
sb.append("</div>");
- // 鎶ュ悕琛ㄥ崟
+ // 鎶ュ悕琛ㄥ崟锛氬鍚嶃�佹墜鏈哄彿鍧囦负閫夊~锛屽彧濉簡鎵嬫満鍙锋墠鏍¢獙鏍煎紡
sb.append("<div class=\"card\">")
- .append("<label>濮撳悕 <span style=\"color:#f53f3f\">*</span></label>")
- .append("<input id=\"name\" type=\"text\" placeholder=\"璇疯緭鍏ュ鍚峔" maxlength=\"64\" autocomplete=\"name\">")
- .append("<label>鎵嬫満鍙� <span style=\"color:#f53f3f\">*</span></label>")
- .append("<input id=\"mobile\" type=\"tel\" inputmode=\"numeric\" placeholder=\"璇疯緭鍏� 11 浣嶆墜鏈哄彿\" maxlength=\"11\" autocomplete=\"tel\">")
+ .append("<label>濮撳悕</label>")
+ .append("<input id=\"name\" type=\"text\" placeholder=\"璇疯緭鍏ュ鍚嶏紙閫夊~锛塡" maxlength=\"64\" autocomplete=\"name\">")
+ .append("<label>鎵嬫満鍙�</label>")
+ .append("<input id=\"mobile\" type=\"tel\" inputmode=\"numeric\" placeholder=\"璇疯緭鍏� 11 浣嶆墜鏈哄彿锛堥�夊~锛塡" maxlength=\"11\" autocomplete=\"tel\">")
.append("<label>鍙備笌璇存槑</label>")
.append("<textarea id=\"content\" placeholder=\"鍙~鍐欏娉ㄣ�侀渶姹傛垨鍏朵粬璇存槑锛堥�夊~锛塡" maxlength=\"1000\"></textarea>")
.append("<label>鍥剧墖 / 闄勪欢</label>")
@@ -172,8 +183,7 @@
.append("var n=document.getElementById('name').value.trim();")
.append("var m=document.getElementById('mobile').value.trim();")
.append("var c=document.getElementById('content').value.trim();")
- .append("if(!n){tip('璇峰~鍐欏鍚�');return}")
- .append("if(!/^1[3-9]\\d{9}$/.test(m)){tip('鎵嬫満鍙锋牸寮忎笉姝g‘');return}")
+ .append("if(m&&!/^1[3-9]\\d{9}$/.test(m)){tip('鎵嬫満鍙锋牸寮忎笉姝g‘锛岃濉� 11 浣嶆墜鏈哄彿鎴栫暀绌�');return}")
.append("btn.disabled=true;")
.append("var fs=fileInput.files;")
.append("var upload=Promise.resolve([]);")
@@ -202,6 +212,50 @@
return sb.toString();
}
+ /**
+ * 鍙栨椿鍔ㄥ皝闈㈠湴鍧�锛堝彇闄勪欢鍒楄〃閲岀殑绗竴寮狅級
+ */
+ private String resolveCoverUrl(Long activityId) {
+ List<SystemStorageBlobRespVO> attachments = activityService.getActivityAttachments(activityId);
+ if (CollUtil.isEmpty(attachments)) {
+ return null;
+ }
+ SystemStorageBlobRespVO cover = attachments.get(0);
+ String raw = StrUtil.blankToDefault(cover.getPreviewURL(), cover.getUrl());
+ if (StrUtil.isBlank(raw)) {
+ return null;
+ }
+ return toSameOriginUrl(raw);
+ }
+
+ /**
+ * 鎶婇檮浠跺湴鍧�杞垚鍚屾簮鐩稿鍦板潃
+ *
+ * 闄勪欢閲屽瓨鐨勬槸甯︾鍚嶇殑缁濆鍦板潃锛屽煙鍚嶅彇鑷� yudao.storage.domain锛堥�氬父鏄唴缃戝湴鍧�锛夈��
+ * 鑰屾墜鏈烘壂鐮佹槸閫氳繃鍏綉鍩熷悕鎵撳紑鏈〉闈㈢殑锛岀洿杩炲唴缃戝湴鍧�浼氬姞杞戒笉鍑哄浘鐗囥��
+ * 杩欓噷鍓ユ帀鍗忚涓庡煙鍚嶅彧鐣� /admin-api/... 璺緞锛屼氦缁欏悓婧愪唬鐞嗚浆鍙戯紝
+ * 鍐呯綉銆佸叕缃戣闂兘鑳芥甯告樉绀猴紱鍥犱负鍙彇璺緞涓嶅彇鍩熷悕锛屼篃涓嶅瓨鍦ㄨ烦杞埌澶栭儴绔欑偣鐨勯闄┿��
+ */
+ private String toSameOriginUrl(String url) {
+ String trimmed = url.trim();
+ if (!StrUtil.startWithAnyIgnoreCase(trimmed, "http://", "https://")) {
+ return trimmed;
+ }
+ try {
+ URI uri = URI.create(trimmed);
+ String path = uri.getRawPath();
+ if (StrUtil.isBlank(path)) {
+ return trimmed;
+ }
+ String query = uri.getRawQuery();
+ return StrUtil.isBlank(query) ? path : path + "?" + query;
+ } catch (IllegalArgumentException e) {
+ // 鍦板潃涓嶅悎瑙勫氨鍘熸牱閫忓嚭锛屼笉鑳藉洜涓轰竴寮犲皝闈㈠浘璁╂暣椤垫墦涓嶅紑
+ log.warn("娲诲姩灏侀潰鍦板潃瑙f瀽澶辫触锛屾寜鍘熸牱杈撳嚭锛歿}", trimmed);
+ return trimmed;
+ }
+ }
+
private String renderMessagePage(String title, String desc) {
return "<!DOCTYPE html><html lang=\"zh-CN\"><head><meta charset=\"UTF-8\">"
+ "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">"
--
Gitblit v1.9.3