From 08fff72a7cfdd238fd51b0976fc3371c8fc05b5c Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期四, 06 八月 2026 22:46:28 +0800
Subject: [PATCH] fix(admin): 支持上传资讯封面图 (bug #24043)

---
 talent-card-admin/src/views/TalentNewsEditView.vue    |   17 ++++++++++++++++-
 talent-card-admin/src/views/TalentNewsPublishView.vue |   17 ++++++++++++++++-
 talent-card-admin/src/style.css                       |    9 +++++++++
 3 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/talent-card-admin/src/style.css b/talent-card-admin/src/style.css
index baede4e..2ff1f87 100644
--- a/talent-card-admin/src/style.css
+++ b/talent-card-admin/src/style.css
@@ -3502,6 +3502,15 @@
   padding: 16px 0 10px;
 }
 
+.news-cover-preview {
+  width: 120px;
+  height: 72px;
+  margin-left: 12px;
+  vertical-align: middle;
+  border: 1px solid #d9dee8;
+  border-radius: 4px;
+}
+
 .article-management-table {
   color: #111827;
   font-size: 12px;
diff --git a/talent-card-admin/src/views/TalentNewsEditView.vue b/talent-card-admin/src/views/TalentNewsEditView.vue
index c792ee4..77700af 100644
--- a/talent-card-admin/src/views/TalentNewsEditView.vue
+++ b/talent-card-admin/src/views/TalentNewsEditView.vue
@@ -2,13 +2,14 @@
 import { nextTick, onMounted, reactive, ref } from 'vue'
 import { useRoute, useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
+import type { UploadFile } from 'element-plus'
 import {
   ArrowLeftBold,
   ArrowRightBold,
   Link,
   Picture,
 } from '@element-plus/icons-vue'
-import { getAdminNewsDetail, updateAdminNews } from '../api/admin'
+import { getAdminNewsDetail, updateAdminNews, uploadAdminImage } from '../api/admin'
 
 interface NewsForm {
   title: string
@@ -43,6 +44,13 @@
 
 function updateContent(event: Event) {
   form.content = (event.target as HTMLElement).innerHTML
+}
+
+async function uploadCover(file: UploadFile) {
+  if (!file.raw) return
+  const result = await uploadAdminImage(file.raw)
+  form.coverUrl = result.url
+  ElMessage.success('封面图上传成功')
 }
 
 function formatTime(value?: string) {
@@ -153,6 +161,13 @@
           <el-switch v-model="form.pinned" />
         </el-form-item>
 
+        <el-form-item label="封面图">
+          <el-upload accept="image/*" :auto-upload="false" :show-file-list="false" :on-change="uploadCover">
+            <el-button>上传图片</el-button>
+          </el-upload>
+          <el-image v-if="form.coverUrl" class="news-cover-preview" :src="form.coverUrl" fit="cover" />
+        </el-form-item>
+
         <el-form-item>
           <el-button type="primary" @click="saveNews">保存</el-button>
         </el-form-item>
diff --git a/talent-card-admin/src/views/TalentNewsPublishView.vue b/talent-card-admin/src/views/TalentNewsPublishView.vue
index a0476c7..fb41348 100644
--- a/talent-card-admin/src/views/TalentNewsPublishView.vue
+++ b/talent-card-admin/src/views/TalentNewsPublishView.vue
@@ -2,13 +2,14 @@
 import { reactive } from 'vue'
 import { useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
+import type { UploadFile } from 'element-plus'
 import {
   ArrowLeftBold,
   ArrowRightBold,
   Link,
   Picture,
 } from '@element-plus/icons-vue'
-import { createAdminNews } from '../api/admin'
+import { createAdminNews, uploadAdminImage } from '../api/admin'
 
 interface NewsForm {
   title: string
@@ -38,6 +39,13 @@
 
 function updateContent(event: Event) {
   form.content = (event.target as HTMLElement).innerHTML
+}
+
+async function uploadCover(file: UploadFile) {
+  if (!file.raw) return
+  const result = await uploadAdminImage(file.raw)
+  form.coverUrl = result.url
+  ElMessage.success('封面图上传成功')
 }
 
 async function saveNews() {
@@ -103,6 +111,13 @@
           <el-switch v-model="form.pinned" />
         </el-form-item>
 
+        <el-form-item label="封面图">
+          <el-upload accept="image/*" :auto-upload="false" :show-file-list="false" :on-change="uploadCover">
+            <el-button>上传图片</el-button>
+          </el-upload>
+          <el-image v-if="form.coverUrl" class="news-cover-preview" :src="form.coverUrl" fit="cover" />
+        </el-form-item>
+
         <el-form-item>
           <el-button type="primary" @click="saveNews">保存</el-button>
         </el-form-item>

--
Gitblit v1.7.1