urbanu vor 1 Monat
Ursprung
Commit
3cb3190005

+ 6 - 1
src/components/headerView/index.vue

@@ -3,7 +3,7 @@
     <div class="page-header-view">
       <div class="header">
         <div class="left">
-          <div class="logo">
+          <div class="logo" @click="goHome">
             <img src="@/assets/images/common/logo.svg" alt="Vitiens" class="logo-icon" />
             <img src="@/assets/images/common/Vitiens.svg" alt="Vitiens" class="logo-text" />
           </div>
@@ -100,6 +100,10 @@ const onLogout = () => {
   window.location.reload();
 };
 
+const goHome = () => {
+  router.push('/');
+};
+
 // 点击外部区域关闭下拉框
 const handleClickOutside = (event: Event) => {
   const target = event.target as HTMLElement;
@@ -170,6 +174,7 @@ onUnmounted(() => {
         font-weight: 700;
         font-size: min(6.24vw, 29.9px);
         letter-spacing: 0.5px;
+        cursor: pointer;
 
         .logo-icon {
           width: min(7vw, 32px);

+ 2 - 0
src/locales/en.json

@@ -151,6 +151,7 @@
     "reviewTime": "Review Time",
     "taskRequirements": "Requirements",
     "taskSteps": "Steps",
+    "taskIntro": "Introduction",
     "imageMaterial": "Image Material",
     "videoMaterial": "Video Material",
     "submitRequirements": "Submit Requirements",
@@ -159,6 +160,7 @@
     "viewProgress": "View Progress",
     "completed": "Completed",
     "viewReason": "View Reason",
+    "noReasonProvided": "No reason provided",
     "reClaim": "Re-Claim",
     "soldOut": "Sold Out",
     "uploadScreenshot": "Upload Screenshot",

+ 2 - 0
src/locales/id.json

@@ -151,6 +151,7 @@
     "reviewTime": "Waktu peninjauan",
     "taskRequirements": "Persyaratan",
     "taskSteps": "Langkah-langkah",
+    "taskIntro": "Pengantar",
     "imageMaterial": "Materi gambar",
     "videoMaterial": "Materi video",
     "submitRequirements": "Persyaratan submit",
@@ -159,6 +160,7 @@
     "viewProgress": "Lihat progress",
     "completed": "Selesai",
     "viewReason": "Lihat alasan",
+    "noReasonProvided": "Tidak ada alasan penolakan",
     "reClaim": "Ambil lagi",
     "soldOut": "Habis",
     "uploadScreenshot": "Unggah screenshot",

+ 2 - 0
src/locales/vi.json

@@ -151,6 +151,7 @@
     "reviewTime": "Thời gian xét duyệt",
     "taskRequirements": "Yêu cầu",
     "taskSteps": "Các bước",
+    "taskIntro": "Giới thiệu",
     "imageMaterial": "Tài liệu hình ảnh",
     "videoMaterial": "Tài liệu video",
     "submitRequirements": "Yêu cầu nộp",
@@ -159,6 +160,7 @@
     "viewProgress": "Xem tiến độ",
     "completed": "Hoàn thành",
     "viewReason": "Xem lý do",
+    "noReasonProvided": "Chưa có lý do từ chối",
     "reClaim": "Nhận lại",
     "soldOut": "Đã hết",
     "uploadScreenshot": "Tải ảnh chụp màn hình",

+ 2 - 0
src/locales/zh.json

@@ -151,6 +151,7 @@
     "reviewTime": "审核时间",
     "taskRequirements": "任务要求",
     "taskSteps": "任务步骤",
+    "taskIntro": "任务简介",
     "imageMaterial": "图片素材",
     "videoMaterial": "视频素材",
     "submitRequirements": "提交要求",
@@ -159,6 +160,7 @@
     "viewProgress": "查看进度",
     "completed": "已完成",
     "viewReason": "查看原因",
+    "noReasonProvided": "暂无驳回原因",
     "reClaim": "重新领取",
     "soldOut": "已售罄",
     "uploadScreenshot": "上传截图",

+ 44 - 7
src/views/task/detail.vue

@@ -28,11 +28,6 @@
         <div class="tag-item">{{ taskInfo.auditTimeout ?? 48 }}{{ $t('task.hoursAudit') }}</div>
       </div>
 
-      <!-- 任务简介 -->
-      <div class="task-intro" v-if="taskInfo.description">
-        <span class="intro-label">{{ $t('task.taskDescription') }}:</span>
-        <span class="intro-text">{{ taskInfo.description }}</span>
-      </div>
     </div>
 
     <!-- 审核标准 -->
@@ -87,6 +82,13 @@
         </div>
         <div
           class="tab-item"
+          :class="{ active: activeTab === 'intro' }"
+          @click="activeTab = 'intro'"
+        >
+          {{ $t('task.taskIntro') }}
+        </div>
+        <div
+          class="tab-item"
           :class="{ active: activeTab === 'examples' }"
           @click="activeTab = 'examples'"
         >
@@ -94,6 +96,12 @@
         </div>
       </div>
 
+      <!-- 任务简介内容 -->
+      <div class="tab-content" v-show="activeTab === 'intro'">
+        <div class="intro-content" v-if="taskInfo?.description" v-html="taskInfo.description"></div>
+        <div class="empty-tip" v-else>{{ $t('common.noData') }}</div>
+      </div>
+
       <!-- 任务步骤内容 -->
       <div class="tab-content" v-show="activeTab === 'steps'">
         <div class="step-list" v-if="stepList?.length">
@@ -212,9 +220,10 @@
       v-model:show="showReject"
       :title="$t('task.viewReason')"
       :show-cancel-button="false"
+      :confirm-button-text="$t('common.confirm')"
     >
       <div class="reject-content">
-        {{ applyInfo?.rejectReason || 'No reason provided' }}
+        {{ applyInfo?.auditRemark || $t('task.noReasonProvided') }}
       </div>
     </van-dialog>
 
@@ -259,7 +268,7 @@ const applyInfo = ref<any>(null);
 const claiming = ref(false);
 const showReject = ref(false);
 const showGuide = ref(false);
-const activeTab = ref<'steps' | 'examples'>('steps');
+const activeTab = ref<'steps' | 'intro' | 'examples'>('steps');
 
 // 格式化奖励金额(后端返回的是分,需要转换为元)
 const formatReward = (amount: number | string | undefined) => {
@@ -668,6 +677,34 @@ onMounted(() => {
     font-size: min(3.733vw, 17.92px);
     padding: min(8vw, 38.4px) 0;
   }
+
+  .intro-content {
+    padding: min(4vw, 19.2px);
+    font-size: min(3.733vw, 17.92px);
+    color: rgba(255, 255, 255, 0.85);
+    line-height: 1.8;
+    word-break: break-word;
+
+    // 富文本图片样式
+    :deep(img) {
+      max-width: 100%;
+      height: auto;
+      border-radius: min(2.133vw, 10.24px);
+      margin: min(2.667vw, 12.8px) 0;
+      display: block;
+    }
+
+    // 富文本段落
+    :deep(p) {
+      margin: min(2.133vw, 10.24px) 0;
+    }
+
+    // 富文本链接
+    :deep(a) {
+      color: #ffc300;
+      text-decoration: underline;
+    }
+  }
 }
 
 // 任务简介