Przeglądaj źródła

修复测评页的投递简历后的展示问题

jialuyu 1 miesiąc temu
rodzic
commit
02352419c4

+ 29 - 3
pages/assessment/assessment.vue

@@ -113,7 +113,8 @@
               {{ item.desc }}
             </view>
             <view class="btn-wrap">
-              <button v-if="item.isPassed" class="apply-btn" @click.stop="handleApply(item)">投递简历</button>
+              <button v-if="item.isPassed && !item.isApplied" class="apply-btn" @click.stop="handleApply(item)">投递简历</button>
+              <button v-if="item.isPassed && item.isApplied" class="applied-btn">已投递</button>
               <button v-if="item.hasRecord && !item.isPassed" class="report-btn" :class="{ disabled: !item.isCompleted }" @click.stop="viewAssessmentReport(item)">查看报告</button>
               <button v-if="item.hasRecord && !item.isPassed" class="retry-btn" @click.stop="goToDetail(item)">重新测评</button>
               <button v-if="!item.hasRecord" class="consult-btn" @click.stop="handleConsult(item)">咨询</button>
@@ -330,6 +331,10 @@ const fetchAssessments = async () => {
           // 判断是否已付款(从localStorage读取支付状态)
           const hasPaid = uni.getStorageSync(`audit_paid_${item.id}`) === true;
           
+          // 检查是否已投递过该岗位
+          const postId = item.positionId;
+          const isApplied = postId ? uni.getStorageSync(`candidate_applied_${postId}`) === true : false;
+
           return {
             id: item.id,
             title: title,
@@ -346,7 +351,8 @@ const fetchAssessments = async () => {
             hasRecord: hasRecordEvaluationIds.value.has(item.id),
             isCompleted: completedEvaluationIds.value.has(item.id),
             hasPaid: hasPaid,
-            postId: item.positionId, // 将对应岗位ID存起来
+            postId: postId,
+            isApplied: isApplied,
           };
         });
     }
@@ -493,13 +499,29 @@ const handleApply = async (item) => {
     uni.hideLoading();
     if (res.code === 200) {
       uni.showToast({ title: '投递成功', icon: 'success' });
+      // 标记为已投递
+      item.isApplied = true;
+      uni.setStorageSync(`candidate_applied_${item.postId}`, true);
+    } else if (res.msg && res.msg.includes('已投递')) {
+      // 已投递过,也标记为已投递状态
+      item.isApplied = true;
+      uni.setStorageSync(`candidate_applied_${item.postId}`, true);
+      uni.showToast({ title: '您已投递过该岗位', icon: 'none' });
     } else {
       uni.showToast({ title: res.msg || '投递失败', icon: 'none' });
     }
   } catch (err) {
     uni.hideLoading();
     console.error('投递失败:', err);
-    uni.showToast({ title: '网络错误,投递失败', icon: 'none' });
+    // 网络错误时检查是否是"已投递"导致的
+    const errMsg = String(err?.msg || err?.message || '');
+    if (errMsg.includes('已投递')) {
+      item.isApplied = true;
+      uni.setStorageSync(`candidate_applied_${item.postId}`, true);
+      uni.showToast({ title: '您已投递过该岗位', icon: 'none' });
+    } else {
+      uni.showToast({ title: '网络错误,投递失败', icon: 'none' });
+    }
   }
 };
 
@@ -968,6 +990,10 @@ onPullDownRefresh(async () => {
         margin: 0; background: #1F6CFF; color: #FFF; border-radius: 30rpx; height: 56rpx; line-height: 56rpx; padding: 0 36rpx; font-size: 26rpx; font-weight: bold;
         &::after { border:none; }
       }
+      .applied-btn {
+        margin: 0; background: #E0E0E0; color: #999; border-radius: 30rpx; height: 56rpx; line-height: 56rpx; padding: 0 36rpx; font-size: 26rpx; font-weight: bold;
+        &::after { border:none; }
+      }
       .retry-btn {
         margin: 0; background: #E8F0FF; color: #2B5CFF; border-radius: 30rpx; height: 56rpx; line-height: 56rpx; padding: 0 36rpx; font-size: 26rpx; font-weight: bold;
         &::after { border:none; }

+ 35 - 2
pages/assessment/detail.vue

@@ -99,7 +99,8 @@
         @click="viewReport"
       >查看报告</button>
       <button v-if="hasRecord && !isPassed" class="start-exam-btn" @click="goToRemind">重新测评</button>
-      <button v-if="isPassed" class="apply-btn" @click="handleApply">投递简历</button>
+      <button v-if="isPassed && !isApplied" class="apply-btn" @click="handleApply">投递简历</button>
+      <button v-if="isPassed && isApplied" class="applied-btn">已投递</button>
     </view>
   </view>
 </template>
@@ -127,6 +128,7 @@ const hasRecord = ref(false);       // 是否有测评记录
 const isAllCompleted = ref(false);   // 是否全部考完(finalResult 有值)
 const hasPaid = ref(false);         // 是否已付款
 const isPassed = ref(false);        // 是否测评通过
+const isApplied = ref(false);       // 是否已投递简历
 
 const decodeBase64Utf8 = (value) => {
     if (!value || typeof value !== 'string') return '';
@@ -186,6 +188,11 @@ const loadAssessmentDetail = async (id) => {
             } else {
                 bannerImages.value = ['/static/images/assess_cover.svg'];
             }
+            
+            // 检查是否已投递简历(基于关联的岗位ID)
+            if (res.data.positionId) {
+                isApplied.value = uni.getStorageSync(`candidate_applied_${res.data.positionId}`) === true;
+            }
         } else {
             uni.showToast({ title: '获取测评详情失败', icon: 'none' });
         }
@@ -278,6 +285,11 @@ const checkExamRecord = async (id) => {
                 isPassed.value = passedRecords.length > 0;
             }
         }
+        
+        // 检查是否已投递(需要等 assessmentData 加载完成后才有 positionId)
+        if (assessmentData.value.positionId) {
+            isApplied.value = uni.getStorageSync(`candidate_applied_${assessmentData.value.positionId}`) === true;
+        }
     } catch (err) {
         console.error('检查测评记录失败', err);
     }
@@ -341,13 +353,27 @@ const handleApply = async () => {
         uni.hideLoading();
         if (res.code === 200) {
             uni.showToast({ title: '投递成功', icon: 'success' });
+            // 标记为已投递
+            isApplied.value = true;
+            uni.setStorageSync(`candidate_applied_${postId}`, true);
+        } else if (res.msg && res.msg.includes('已投递')) {
+            isApplied.value = true;
+            uni.setStorageSync(`candidate_applied_${postId}`, true);
+            uni.showToast({ title: '您已投递过该岗位', icon: 'none' });
         } else {
             uni.showToast({ title: res.msg || '投递失败', icon: 'none' });
         }
     } catch (err) {
         uni.hideLoading();
         console.error('投递失败:', err);
-        uni.showToast({ title: '网络错误,投递失败', icon: 'none' });
+        const errMsg = String(err?.msg || err?.message || '');
+        if (errMsg.includes('已投递')) {
+            isApplied.value = true;
+            uni.setStorageSync(`candidate_applied_${postId}`, true);
+            uni.showToast({ title: '您已投递过该岗位', icon: 'none' });
+        } else {
+            uni.showToast({ title: '网络错误,投递失败', icon: 'none' });
+        }
     }
 };
 
@@ -544,6 +570,13 @@ const toggleFavorite = async () => {
     &::after { border: none; }
     &:active { opacity: 0.9; transform: scale(0.98); }
   }
+
+  .applied-btn {
+    flex: 1.5; height: 84rpx; line-height: 84rpx;
+    background: #E0E0E0; color: #999; border-radius: 42rpx;
+    font-size: 30rpx; font-weight: bold;
+    &::after { border: none; }
+  }
 }
 </style>
 

Plik diff jest za duży
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/assessment/assessment.js.map


Plik diff jest za duży
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/assessment/detail.js.map


Plik diff jest za duży
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/utils/request.js.map


+ 44 - 27
unpackage/dist/dev/mp-weixin/pages/assessment/assessment.js

@@ -78,11 +78,13 @@ const _sfc_main = {
           params.grade = levelFilter;
         const res = await api_assessment.getAssessmentList(params);
         if (res.code === 200 && res.rows) {
-          common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:321", "测评API返回数据:", res.rows[0]);
+          common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:322", "测评API返回数据:", res.rows[0]);
           assessments.value = res.rows.filter((item) => item.status === "1").map((item) => {
             let title = item.evaluationName || item.name || item.title || "未知测评";
             const desc = resolveDescription(item, "专业技能评估,助力职业发展");
             const hasPaid = common_vendor.index.getStorageSync(`audit_paid_${item.id}`) === true;
+            const postId = item.positionId;
+            const isApplied = postId ? common_vendor.index.getStorageSync(`candidate_applied_${postId}`) === true : false;
             return {
               id: item.id,
               title,
@@ -99,13 +101,13 @@ const _sfc_main = {
               hasRecord: hasRecordEvaluationIds.value.has(item.id),
               isCompleted: completedEvaluationIds.value.has(item.id),
               hasPaid,
-              postId: item.positionId
-              // 将对应岗位ID存起来
+              postId,
+              isApplied
             };
           });
         }
       } catch (err) {
-        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:354", "获取测评列表失败", err);
+        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:360", "获取测评列表失败", err);
         common_vendor.index.showToast({ title: "加载失败,请重试", icon: "none" });
       } finally {
         loading.value = false;
@@ -135,9 +137,9 @@ const _sfc_main = {
           params.name = searchQuery.value;
         const res = await api_assessment.getTrainingList(params);
         if (res.code === 200 && res.rows) {
-          common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:382", "培训API返回数据:", res.rows[0]);
+          common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:388", "培训API返回数据:", res.rows[0]);
           trainings.value = res.rows.map((item) => {
-            common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:384", "培训单项数据:", item);
+            common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:390", "培训单项数据:", item);
             let title = item.name || item.trainingName || item.title;
             if (!title || title.trim() === "" || title.startsWith("test_")) {
               const job = item.job || item.position || "专业技能";
@@ -180,7 +182,7 @@ const _sfc_main = {
           });
         }
       } catch (err) {
-        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:439", "获取培训列表失败", err);
+        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:445", "获取培训列表失败", err);
       } finally {
         trainingLoading.value = false;
       }
@@ -230,13 +232,26 @@ const _sfc_main = {
         common_vendor.index.hideLoading();
         if (res.code === 200) {
           common_vendor.index.showToast({ title: "投递成功", icon: "success" });
+          item.isApplied = true;
+          common_vendor.index.setStorageSync(`candidate_applied_${item.postId}`, true);
+        } else if (res.msg && res.msg.includes("已投递")) {
+          item.isApplied = true;
+          common_vendor.index.setStorageSync(`candidate_applied_${item.postId}`, true);
+          common_vendor.index.showToast({ title: "您已投递过该岗位", icon: "none" });
         } else {
           common_vendor.index.showToast({ title: res.msg || "投递失败", icon: "none" });
         }
       } catch (err) {
         common_vendor.index.hideLoading();
-        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:501", "投递失败:", err);
-        common_vendor.index.showToast({ title: "网络错误,投递失败", icon: "none" });
+        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:515", "投递失败:", err);
+        const errMsg = String((err == null ? void 0 : err.msg) || (err == null ? void 0 : err.message) || "");
+        if (errMsg.includes("已投递")) {
+          item.isApplied = true;
+          common_vendor.index.setStorageSync(`candidate_applied_${item.postId}`, true);
+          common_vendor.index.showToast({ title: "您已投递过该岗位", icon: "none" });
+        } else {
+          common_vendor.index.showToast({ title: "网络错误,投递失败", icon: "none" });
+        }
       }
     };
     const handleConsult = async (item) => {
@@ -276,7 +291,7 @@ const _sfc_main = {
         }
       } catch (err) {
         common_vendor.index.hideLoading();
-        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:554", "创建会话失败:", err);
+        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:576", "创建会话失败:", err);
         common_vendor.index.showToast({ title: "连接失败,请重试", icon: "none" });
       }
     };
@@ -327,7 +342,7 @@ const _sfc_main = {
           ];
         }
       } catch (e) {
-        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:610", "加载字典失败", e);
+        common_vendor.index.__f__("error", "at pages/assessment/assessment.vue:632", "加载字典失败", e);
       }
     };
     const trainingFilterList = common_vendor.ref([
@@ -424,16 +439,16 @@ const _sfc_main = {
         }
       } catch (e) {
       }
-      common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:724", "assessment onMounted triggered");
+      common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:746", "assessment onMounted triggered");
       loadDicts();
       fetchAssessments();
       fetchTrainings();
     });
     common_vendor.onLoad(() => {
-      common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:731", "assessment onLoad triggered");
+      common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:753", "assessment onLoad triggered");
     });
     common_vendor.onShow(() => {
-      common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:735", "assessment onShow triggered");
+      common_vendor.index.__f__("log", "at pages/assessment/assessment.vue:757", "assessment onShow triggered");
     });
     common_vendor.onPullDownRefresh(async () => {
       common_vendor.index.stopPullDownRefresh();
@@ -496,29 +511,31 @@ const _sfc_main = {
               };
             }),
             g: common_vendor.t(item.desc),
-            h: item.isPassed
-          }, item.isPassed ? {
+            h: item.isPassed && !item.isApplied
+          }, item.isPassed && !item.isApplied ? {
             i: common_vendor.o(($event) => handleApply(item), index)
           } : {}, {
-            j: item.hasRecord && !item.isPassed
+            j: item.isPassed && item.isApplied
+          }, item.isPassed && item.isApplied ? {} : {}, {
+            k: item.hasRecord && !item.isPassed
           }, item.hasRecord && !item.isPassed ? {
-            k: !item.isCompleted ? 1 : "",
-            l: common_vendor.o(($event) => viewAssessmentReport(item), index)
+            l: !item.isCompleted ? 1 : "",
+            m: common_vendor.o(($event) => viewAssessmentReport(item), index)
           } : {}, {
-            m: item.hasRecord && !item.isPassed
+            n: item.hasRecord && !item.isPassed
           }, item.hasRecord && !item.isPassed ? {
-            n: common_vendor.o(($event) => goToDetail(item), index)
+            o: common_vendor.o(($event) => goToDetail(item), index)
           } : {}, {
-            o: !item.hasRecord
+            p: !item.hasRecord
           }, !item.hasRecord ? {
-            p: common_vendor.o(($event) => handleConsult(item), index)
+            q: common_vendor.o(($event) => handleConsult(item), index)
           } : {}, {
-            q: item.hasPaid && !item.hasRecord
+            r: item.hasPaid && !item.hasRecord
           }, item.hasPaid && !item.hasRecord ? {
-            r: common_vendor.o(($event) => goToDetail(item), index)
+            s: common_vendor.o(($event) => goToDetail(item), index)
           } : {}, {
-            s: index,
-            t: common_vendor.o(($event) => goToDetail(item), index)
+            t: index,
+            v: common_vendor.o(($event) => goToDetail(item), index)
           });
         }),
         v: filteredAssessments.value.length === 0

Plik diff jest za duży
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/assessment/assessment.wxml


+ 14 - 0
unpackage/dist/dev/mp-weixin/pages/assessment/assessment.wxss

@@ -499,6 +499,20 @@ to {
 .job-card .card-right .btn-wrap .apply-btn.data-v-cc3734ea::after {
   border: none;
 }
+.job-card .card-right .btn-wrap .applied-btn.data-v-cc3734ea {
+  margin: 0;
+  background: #E0E0E0;
+  color: #999;
+  border-radius: 30rpx;
+  height: 56rpx;
+  line-height: 56rpx;
+  padding: 0 36rpx;
+  font-size: 26rpx;
+  font-weight: bold;
+}
+.job-card .card-right .btn-wrap .applied-btn.data-v-cc3734ea::after {
+  border: none;
+}
 .job-card .card-right .btn-wrap .retry-btn.data-v-cc3734ea {
   margin: 0;
   background: #E8F0FF;

+ 33 - 11
unpackage/dist/dev/mp-weixin/pages/assessment/detail.js

@@ -22,6 +22,7 @@ const _sfc_main = {
     const isAllCompleted = common_vendor.ref(false);
     const hasPaid = common_vendor.ref(false);
     const isPassed = common_vendor.ref(false);
+    const isApplied = common_vendor.ref(false);
     const decodeBase64Utf8 = (value) => {
       if (!value || typeof value !== "string")
         return "";
@@ -72,11 +73,14 @@ const _sfc_main = {
           } else {
             bannerImages.value = ["/static/images/assess_cover.svg"];
           }
+          if (res.data.positionId) {
+            isApplied.value = common_vendor.index.getStorageSync(`candidate_applied_${res.data.positionId}`) === true;
+          }
         } else {
           common_vendor.index.showToast({ title: "获取测评详情失败", icon: "none" });
         }
       } catch (err) {
-        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:193", "获取测评详情失败:", err);
+        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:200", "获取测评详情失败:", err);
         common_vendor.index.showToast({ title: "网络错误,请重试", icon: "none" });
       } finally {
         loading.value = false;
@@ -96,7 +100,7 @@ const _sfc_main = {
           collectionId.value = null;
         }
       } catch (err) {
-        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:215", "检查收藏状态失败", err);
+        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:222", "检查收藏状态失败", err);
       }
     };
     const formatDateRange = (startTime, endTime) => {
@@ -148,8 +152,11 @@ const _sfc_main = {
             isPassed.value = passedRecords.length > 0;
           }
         }
+        if (assessmentData.value.positionId) {
+          isApplied.value = common_vendor.index.getStorageSync(`candidate_applied_${assessmentData.value.positionId}`) === true;
+        }
       } catch (err) {
-        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:282", "检查测评记录失败", err);
+        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:294", "检查测评记录失败", err);
       }
     };
     const handleConsult = async () => {
@@ -160,7 +167,7 @@ const _sfc_main = {
         const userId = userInfo.studentId || null;
         const userName = userInfo.name || "用户";
         const userAvatar = userInfo.avatarUrl || "/static/images/user_avatar.svg";
-        common_vendor.index.__f__("log", "at pages/assessment/detail.vue:293", "创建会话参数:", {
+        common_vendor.index.__f__("log", "at pages/assessment/detail.vue:305", "创建会话参数:", {
           sessionType: 1,
           fromUserId: userId,
           fromUserName: userName,
@@ -188,7 +195,7 @@ const _sfc_main = {
         }
       } catch (err) {
         common_vendor.index.hideLoading();
-        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:321", "创建会话失败:", err);
+        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:333", "创建会话失败:", err);
         common_vendor.index.showToast({ title: "连接失败,请重试", icon: "none" });
       }
     };
@@ -209,13 +216,26 @@ const _sfc_main = {
         common_vendor.index.hideLoading();
         if (res.code === 200) {
           common_vendor.index.showToast({ title: "投递成功", icon: "success" });
+          isApplied.value = true;
+          common_vendor.index.setStorageSync(`candidate_applied_${postId}`, true);
+        } else if (res.msg && res.msg.includes("已投递")) {
+          isApplied.value = true;
+          common_vendor.index.setStorageSync(`candidate_applied_${postId}`, true);
+          common_vendor.index.showToast({ title: "您已投递过该岗位", icon: "none" });
         } else {
           common_vendor.index.showToast({ title: res.msg || "投递失败", icon: "none" });
         }
       } catch (err) {
         common_vendor.index.hideLoading();
-        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:349", "投递失败:", err);
-        common_vendor.index.showToast({ title: "网络错误,投递失败", icon: "none" });
+        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:368", "投递失败:", err);
+        const errMsg = String((err == null ? void 0 : err.msg) || (err == null ? void 0 : err.message) || "");
+        if (errMsg.includes("已投递")) {
+          isApplied.value = true;
+          common_vendor.index.setStorageSync(`candidate_applied_${postId}`, true);
+          common_vendor.index.showToast({ title: "您已投递过该岗位", icon: "none" });
+        } else {
+          common_vendor.index.showToast({ title: "网络错误,投递失败", icon: "none" });
+        }
       }
     };
     const toggleFavorite = async () => {
@@ -253,7 +273,7 @@ const _sfc_main = {
           }
         }
       } catch (err) {
-        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:393", "操作收藏失败", err);
+        common_vendor.index.__f__("error", "at pages/assessment/detail.vue:419", "操作收藏失败", err);
         common_vendor.index.showToast({ title: "操作失败", icon: "none" });
       } finally {
         common_vendor.index.hideLoading();
@@ -331,10 +351,12 @@ const _sfc_main = {
       }, hasRecord.value && !isPassed.value ? {
         J: common_vendor.o(goToRemind)
       } : {}, {
-        K: isPassed.value
-      }, isPassed.value ? {
+        K: isPassed.value && !isApplied.value
+      }, isPassed.value && !isApplied.value ? {
         L: common_vendor.o(handleApply)
-      } : {});
+      } : {}, {
+        M: isPassed.value && isApplied.value
+      }, isPassed.value && isApplied.value ? {} : {});
     };
   }
 };

Plik diff jest za duży
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/assessment/detail.wxml


+ 13 - 0
unpackage/dist/dev/mp-weixin/pages/assessment/detail.wxss

@@ -277,6 +277,19 @@
   opacity: 0.9;
   transform: scale(0.98);
 }
+.bottom-bar .applied-btn.data-v-db914789 {
+  flex: 1.5;
+  height: 84rpx;
+  line-height: 84rpx;
+  background: #E0E0E0;
+  color: #999;
+  border-radius: 42rpx;
+  font-size: 30rpx;
+  font-weight: bold;
+}
+.bottom-bar .applied-btn.data-v-db914789::after {
+  border: none;
+}
 
 /* 针对所有 scroll-view 隐藏滚动条 */
 ::-webkit-scrollbar {

+ 1 - 1
unpackage/dist/dev/mp-weixin/utils/request.js

@@ -1,6 +1,6 @@
 "use strict";
 const common_vendor = require("../common/vendor.js");
-const BASE_URL = "http://yp1.yingpaipay.com:9054";
+const BASE_URL = "http://localhost:8080";
 const UPLOAD_URL = BASE_URL;
 const request = (options) => {
   return new Promise((resolve, reject) => {

+ 1 - 1
utils/request.js

@@ -2,7 +2,7 @@
 // 根据环境配置 BASE_URL
 // 开发环境:改成你的本地 IP,如 'http://192.168.1.100:8080'
 // 生产环境:改成实际的服务器地址
-const BASE_URL = 'http://yp1.yingpaipay.com:9054';
+const BASE_URL = 'http://localhost:8080';
 
 // OSS 文件上传基地址(与后端网关地址保持一致)
 const UPLOAD_URL = BASE_URL;

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików