From 71beff1699701e18c2503791c7ba1437c89966aa Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期三, 30 九月 2026 15:26:43 +0800
Subject: [PATCH] feat(wxcp): 活动封面改用附件中间表,并修正附件地址同源

---
 src/views/wxcp/activity/modules/form.vue |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/src/views/wxcp/activity/modules/form.vue b/src/views/wxcp/activity/modules/form.vue
index 05d379b..29b38d3 100644
--- a/src/views/wxcp/activity/modules/form.vue
+++ b/src/views/wxcp/activity/modules/form.vue
@@ -9,6 +9,7 @@
 import { Button, message } from 'ant-design-vue';
 
 import { useVbenForm } from '#/adapter/form';
+import { toAccessibleFileUrl } from '#/utils';
 import {
   createActivity,
   getActivity,
@@ -44,6 +45,47 @@
   wrapperClass: 'grid-cols-2',
 });
 
+/**
+ * 鎶婃椿鍔ㄨ鎯呮槧灏勬垚琛ㄥ崟鍊�
+ *
+ * 灏侀潰鍦ㄥ悗绔笉钀戒笟鍔¤〃瀛楁锛岃�屾槸瀛樺湪闄勪欢涓棿琛ㄩ噷锛�
+ * 鍥炴樉鏃惰鎶� attachmentList 杞垚涓婁紶缁勪欢鑳借瘑鍒殑鏂囦欢瀵硅薄銆�
+ */
+function activityToForm(
+  activity: WxCpActivityApi.Activity,
+): Record<string, unknown> {
+  const form: Record<string, unknown> = { ...activity };
+  form.blobIds = (activity.attachmentList ?? []).map((item) => ({
+    uid: String(item.id),
+    name: item.name || item.originalFilename || '',
+    url: toAccessibleFileUrl(item.url || item.previewURL),
+    status: 'done',
+    id: item.id,
+  }));
+  return form;
+}
+
+/**
+ * 鎶婁笂浼犵粍浠剁殑鍊艰鏁存垚 blobId 鏁扮粍
+ *
+ * ImageUpload 鍦� maxNumber=1 鏃惰繑鍥炵殑鏄崟涓�硷紙鑰屼笉鏄暟缁勶級锛�
+ * 鍚庣绛惧悕鏄� List<Long>锛岃繖閲岀粺涓�鍖呮垚鏁扮粍鍐嶆彁浜ゃ��
+ */
+function normalizeBlobIds(value: unknown): number[] {
+  const list = Array.isArray(value)
+    ? value
+    : value === '' || value === null || value === undefined
+      ? []
+      : [value];
+  return list
+    .map((item) =>
+      item && typeof item === 'object' && 'id' in item
+        ? Number((item as { id: unknown }).id)
+        : Number(item),
+    )
+    .filter((blobId) => Number.isFinite(blobId));
+}
+
 const [Modal, modalApi] = useVbenModal({
   async onOpenChange(isOpen: boolean) {
     if (!isOpen) {
@@ -59,7 +101,7 @@
       modalApi.lock();
       try {
         const detail = await getActivity(data.id);
-        await formApi.setValues(detail as unknown as Record<string, unknown>);
+        await formApi.setValues(activityToForm(detail));
       } finally {
         modalApi.unlock();
       }
@@ -76,12 +118,16 @@
   }
   submitting.value = true;
   try {
-    const data = (await formApi.getValues()) as WxCpActivityApi.Activity;
+    const data = (await formApi.getValues()) as Record<string, unknown>;
+    const payload = {
+      ...data,
+      blobIds: normalizeBlobIds(data.blobIds),
+    } as WxCpActivityApi.Activity;
     if (id.value) {
-      await updateActivity({ ...data, id: id.value });
+      await updateActivity({ ...payload, id: id.value });
       message.success('淇敼鎴愬姛');
     } else {
-      await createActivity(data);
+      await createActivity(payload);
       message.success('鍒涘缓鎴愬姛锛岃鍦ㄥ垪琛ㄤ腑鍙戝竷鍚庡啀鎺ㄩ��');
     }
     await modalApi.close();

--
Gitblit v1.9.3