From 62ab1e616510d3444c12f2130448043ccfb12e2a Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 18 五月 2026 11:42:56 +0800
Subject: [PATCH] 巡检功能问题修改
---
src/pages/inspectionUpload/upload.vue | 1537 +++++++++++++++++++++++++++++++---------------------------
1 files changed, 817 insertions(+), 720 deletions(-)
diff --git a/src/pages/inspectionUpload/upload.vue b/src/pages/inspectionUpload/upload.vue
index 746e995..6d95785 100644
--- a/src/pages/inspectionUpload/upload.vue
+++ b/src/pages/inspectionUpload/upload.vue
@@ -1,12 +1,13 @@
<template>
<view class="inspection-upload-page">
<!-- 椤甸潰澶撮儴 -->
- <PageHeader title="涓婁紶宸℃璁板綍" @back="goBack" />
-
+ <PageHeader title="涓婁紶宸℃璁板綍"
+ @back="goBack" />
<!-- 椤甸潰鍐呭 -->
<view class="upload-content">
<!-- 浠诲姟淇℃伅鍗$墖 -->
- <view class="task-info-card" v-if="taskInfo">
+ <view class="task-info-card"
+ v-if="taskInfo">
<view class="task-info-header">
<text class="task-name">{{ taskInfo.taskName }}</text>
</view>
@@ -25,114 +26,115 @@
</view>
</view>
</view>
-
<!-- 寮傚父鐘舵�侀�夋嫨 -->
<view class="section-card">
<view class="section-title">宸℃鐘舵��</view>
<view class="exception-options">
- <view
- class="exception-option"
- :class="{ active: hasException === false }"
- @click="setExceptionStatus(false)"
- >
- <u-icon name="checkmark-circle" size="20" color="#52c41a"></u-icon>
+ <view class="exception-option"
+ :class="{ active: hasException === false }"
+ @click="setExceptionStatus(false)">
+ <u-icon name="checkmark-circle"
+ size="20"
+ color="#52c41a"></u-icon>
<text class="option-text">姝e父</text>
</view>
- <view
- class="exception-option"
- :class="{ active: hasException === true }"
- @click="setExceptionStatus(true)"
- >
- <u-icon name="close-circle" size="20" color="#ff4d4f"></u-icon>
+ <view class="exception-option"
+ :class="{ active: hasException === true }"
+ @click="setExceptionStatus(true)">
+ <u-icon name="close-circle"
+ size="20"
+ color="#ff4d4f"></u-icon>
<text class="option-text">瀛樺湪寮傚父</text>
</view>
</view>
</view>
-
<!-- 寮傚父鎻忚堪锛堜粎鍦ㄥ紓甯告椂鏄剧ず锛� -->
- <view class="section-card" v-if="hasException === true">
+ <view class="section-card"
+ v-if="hasException === true">
<view class="section-title">寮傚父鎻忚堪</view>
- <textarea
- v-model="abnormalDescription"
- class="exception-textarea"
- maxlength="500"
- placeholder="璇锋弿杩板紓甯告儏鍐�..."
- />
+ <textarea v-model="abnormalDescription"
+ class="exception-textarea"
+ maxlength="500"
+ placeholder="璇锋弿杩板紓甯告儏鍐�..." />
</view>
-
<!-- 鍒嗙被鏍囩椤碉紙浠呭湪寮傚父鏃舵樉绀猴級 -->
- <view class="section-card" v-if="hasException === true">
+ <view class="section-card"
+ v-if="hasException === true">
<view class="upload-tabs">
- <view
- class="tab-item"
- :class="{ active: currentUploadType === 'before' }"
- @click="switchUploadType('before')"
- >
+ <view class="tab-item"
+ :class="{ active: currentUploadType === 'before' }"
+ @click="switchUploadType('before')">
鐢熶骇鍓�
</view>
- <view
- class="tab-item"
- :class="{ active: currentUploadType === 'after' }"
- @click="switchUploadType('after')"
- >
+ <view class="tab-item"
+ :class="{ active: currentUploadType === 'after' }"
+ @click="switchUploadType('after')">
鐢熶骇涓�
</view>
- <view
- class="tab-item"
- :class="{ active: currentUploadType === 'issue' }"
- @click="switchUploadType('issue')"
- >
+ <view class="tab-item"
+ :class="{ active: currentUploadType === 'issue' }"
+ @click="switchUploadType('issue')">
鐢熶骇鍚�
</view>
</view>
-
<!-- 褰撳墠鍒嗙被鐨勪笂浼犲尯鍩� -->
<view class="upload-area">
<view class="upload-buttons">
- <u-button
- type="primary"
- @click="chooseMedia('image')"
- :loading="uploading"
- :disabled="getCurrentFiles().length >= uploadConfig.limit"
- :customStyle="{ marginRight: '10px', flex: 1 }"
- >
- <u-icon name="camera" size="18" color="#fff" style="margin-right: 5px"></u-icon>
+ <u-button type="primary"
+ @click="chooseMedia('image')"
+ :loading="uploading"
+ :disabled="getCurrentFiles().length >= uploadConfig.limit"
+ :customStyle="{ marginRight: '10px', flex: 1 }">
+ <u-icon name="camera"
+ size="18"
+ color="#fff"
+ style="margin-right: 5px"></u-icon>
{{ uploading ? '涓婁紶涓�...' : '鎷嶇収' }}
</u-button>
- <u-button
- type="success"
- @click="chooseMedia('video')"
- :loading="uploading"
- :disabled="getCurrentFiles().length >= uploadConfig.limit"
- :customStyle="{ flex: 1 }"
- >
- <uni-icons type="videocam" size="18" color="#fff" style="margin-right: 5px"></uni-icons>
+ <u-button type="success"
+ @click="chooseMedia('video')"
+ :loading="uploading"
+ :disabled="getCurrentFiles().length >= uploadConfig.limit"
+ :customStyle="{ flex: 1 }">
+ <uni-icons type="videocam"
+ size="18"
+ color="#fff"
+ style="margin-right: 5px"></uni-icons>
{{ uploading ? '涓婁紶涓�...' : '鎷嶈棰�' }}
</u-button>
</view>
-
<!-- 涓婁紶杩涘害 -->
- <view v-if="uploading" class="upload-progress">
- <u-line-progress :percentage="uploadProgress" :showText="true" activeColor="#409eff"></u-line-progress>
+ <view v-if="uploading"
+ class="upload-progress">
+ <u-line-progress :percentage="uploadProgress"
+ :showText="true"
+ activeColor="#409eff"></u-line-progress>
</view>
-
<!-- 褰撳墠鍒嗙被鐨勬枃浠跺垪琛� -->
- <view v-if="getCurrentFiles().length > 0" class="file-list">
- <view v-for="(file, index) in getCurrentFiles()" :key="index" class="file-item">
+ <view v-if="getCurrentFiles().length > 0"
+ class="file-list">
+ <view v-for="(file, index) in getCurrentFiles()"
+ :key="index"
+ class="file-item">
<view class="file-preview-container">
- <image
- v-if="file.type === 'image' || (file.type !== 'video' && !file.type)"
- :src="file.url || file.tempFilePath || file.path || file.downloadUrl"
- class="file-preview"
- mode="aspectFill"
- />
- <view v-else-if="file.type === 'video'" class="video-preview">
- <uni-icons type="videocam" size="18" color="#fff" style="margin-right: 5px"></uni-icons>
+ <image v-if="file.type === 'image' || (file.type !== 'video' && !file.type)"
+ :src="file.url || file.tempFilePath || file.path || file.downloadUrl"
+ class="file-preview"
+ mode="aspectFill" />
+ <view v-else-if="file.type === 'video'"
+ class="video-preview">
+ <uni-icons type="videocam"
+ size="18"
+ color="#fff"
+ style="margin-right: 5px"></uni-icons>
<text class="video-text">瑙嗛</text>
</view>
<!-- 鍒犻櫎鎸夐挳 -->
- <view class="delete-btn" @click="removeFile(index)">
- <u-icon name="close" size="12" color="#fff"></u-icon>
+ <view class="delete-btn"
+ @click="removeFile(index)">
+ <u-icon name="close"
+ size="12"
+ color="#fff"></u-icon>
</view>
</view>
<view class="file-info">
@@ -141,12 +143,11 @@
</view>
</view>
</view>
-
- <view v-if="getCurrentFiles().length === 0" class="empty-state">
+ <view v-if="getCurrentFiles().length === 0"
+ class="empty-state">
<text>璇烽�夋嫨瑕佷笂浼犵殑{{ getUploadTypeText() }}鍥剧墖鎴栬棰�</text>
</view>
</view>
-
<!-- 缁熻淇℃伅 -->
<view class="upload-summary">
<text class="summary-text">
@@ -156,730 +157,826 @@
</text>
</view>
</view>
-
<!-- 姝e父鐘舵�佹彁绀� -->
- <view class="normal-tip-card" v-if="hasException === false">
- <u-icon name="info-circle" size="60" color="#52c41a"></u-icon>
+ <view class="normal-tip-card"
+ v-if="hasException === false">
+ <u-icon name="info-circle"
+ size="60"
+ color="#52c41a"></u-icon>
<text class="tip-text">璁惧杩愯姝e父锛屾棤闇�涓婁紶鐓х墖</text>
</view>
</view>
-
<!-- 搴曢儴鎸夐挳 -->
<view class="footer-buttons">
- <u-button @click="goBack" :customStyle="{ marginRight: '10px' }">鍙栨秷</u-button>
- <u-button v-if="hasException === true" type="warning" @click="goToRepair" :customStyle="{ marginRight: '10px' }">
+ <u-button @click="goBack"
+ :customStyle="{ marginRight: '10px' }">鍙栨秷</u-button>
+ <u-button v-if="hasException === true"
+ type="warning"
+ @click="goToRepair"
+ :customStyle="{ marginRight: '10px' }">
鏂板鎶ヤ慨
</u-button>
- <u-button type="primary" @click="submitUpload">鎻愪氦</u-button>
+ <u-button type="primary"
+ @click="submitUpload">鎻愪氦</u-button>
</view>
</view>
</template>
<script setup>
-import { ref, computed, onMounted } from 'vue';
-import { onLoad } from '@dcloudio/uni-app';
-import PageHeader from '@/components/PageHeader.vue';
-import { uploadInspectionTask } from '@/api/inspectionManagement';
-import { getToken } from '@/utils/auth';
-import config from '@/config';
+ import { ref, computed, onMounted } from "vue";
+ import { onLoad } from "@dcloudio/uni-app";
+ import PageHeader from "@/components/PageHeader.vue";
+ import { uploadInspectionTask } from "@/api/inspectionManagement";
+ import { getToken } from "@/utils/auth";
+ import config from "@/config";
-// 浠诲姟淇℃伅
-const taskInfo = ref(null);
+ // 浠诲姟淇℃伅
+ const taskInfo = ref(null);
-// 涓婁紶鐩稿叧鐘舵��
-const uploading = ref(false);
-const uploadProgress = ref(0);
+ // 涓婁紶鐩稿叧鐘舵��
+ const uploading = ref(false);
+ const uploadProgress = ref(0);
-// 涓変釜鍒嗙被鐨勪笂浼犵姸鎬�
-const beforeModelValue = ref([]); // 鐢熶骇鍓�
-const afterModelValue = ref([]); // 鐢熶骇涓�
-const issueModelValue = ref([]); // 鐢熶骇鍚�
+ // 涓変釜鍒嗙被鐨勪笂浼犵姸鎬�
+ const beforeModelValue = ref([]); // 鐢熶骇鍓�
+ const afterModelValue = ref([]); // 鐢熶骇涓�
+ const issueModelValue = ref([]); // 鐢熶骇鍚�
-// 褰撳墠婵�娲荤殑涓婁紶绫诲瀷
-const currentUploadType = ref('before'); // 'before', 'after', 'issue'
+ // 褰撳墠婵�娲荤殑涓婁紶绫诲瀷
+ const currentUploadType = ref("before"); // 'before', 'after', 'issue'
-// 寮傚父鐘舵��
-const hasException = ref(null); // null: 鏈�夋嫨, true: 瀛樺湪寮傚父, false: 姝e父
-// 寮傚父鎻忚堪
-const abnormalDescription = ref('');
+ // 寮傚父鐘舵��
+ const hasException = ref(null); // null: 鏈�夋嫨, true: 瀛樺湪寮傚父, false: 姝e父
+ // 寮傚父鎻忚堪
+ const abnormalDescription = ref("");
-// 涓婁紶閰嶇疆
-const uploadConfig = {
- action: '/file/upload',
- limit: 10,
- fileSize: 50, // MB
- fileType: ['jpg', 'jpeg', 'png', 'mp4', 'mov'],
- maxVideoDuration: 60, // 绉�
-};
+ // 涓婁紶閰嶇疆
+ const uploadConfig = {
+ action: "/common/upload",
+ limit: 10,
+ fileSize: 50, // MB
+ fileType: ["jpg", "jpeg", "png", "mp4", "mov"],
+ maxVideoDuration: 60, // 绉�
+ };
-// 璁$畻涓婁紶URL
-const uploadFileUrl = computed(() => {
- const baseUrl = config.baseUrl;
- return baseUrl + uploadConfig.action;
-});
+ // 璁$畻涓婁紶URL
+ const uploadFileUrl = computed(() => {
+ const baseUrl = config.baseUrl;
+ return baseUrl + uploadConfig.action;
+ });
-// 椤甸潰鍔犺浇
-onLoad((options) => {
- if (options.taskInfo) {
- try {
- taskInfo.value = JSON.parse(decodeURIComponent(options.taskInfo));
- } catch (e) {
- console.error('瑙f瀽浠诲姟淇℃伅澶辫触:', e);
+ // 椤甸潰鍔犺浇
+ onLoad(options => {
+ if (options.taskInfo) {
+ try {
+ const info = JSON.parse(decodeURIComponent(options.taskInfo));
+ taskInfo.value = info;
+
+ // 鍥炴樉閫昏緫锛氫粠 taskInfo 涓仮澶嶅凡涓婁紶鐨勬枃浠�
+ const mapFiles = list => {
+ if (!list || !Array.isArray(list)) return [];
+ return list.map(item => {
+ // 澶勭悊 URL锛屽幓闄ゅ彲鑳界殑绌烘牸
+ const finalUrl = (item.url || item.previewURL || "").trim();
+ // 鑷姩鎺ㄦ柇鏂囦欢绫诲瀷
+ let fileType = item.type;
+ if (!fileType && item.contentType) {
+ fileType = item.contentType.startsWith("video") ? "video" : "image";
+ } else if (!fileType) {
+ fileType = "image"; // 榛樿鍥剧墖
+ }
+
+ return {
+ ...item,
+ url: finalUrl,
+ name: item.name || item.originalFilename,
+ tempId: item.tempId || item.id || item.tempFileId,
+ size: item.size || item.byteSize || 0, // 鏄犲皠澶у皬瀛楁
+ type: fileType,
+ status: "success",
+ };
+ });
+ };
+
+ // 鏍规嵁鐢ㄦ埛瑕佹眰鏄犲皠锛欰fterDTO(鐢熶骇鍓�), DTO(鐢熶骇涓�), BeforeDTO(鐢熶骇鍚�)
+ if (
+ info.commonFileListAfterVO &&
+ Array.isArray(info.commonFileListAfterVO)
+ ) {
+ beforeModelValue.value = mapFiles(info.commonFileListAfterVO);
+ }
+ console.log(beforeModelValue.value, "beforeModelValue");
+
+ if (info.commonFileListVO && Array.isArray(info.commonFileListVO)) {
+ afterModelValue.value = mapFiles(info.commonFileListVO);
+ }
+ if (
+ info.commonFileListBeforeVO &&
+ Array.isArray(info.commonFileListBeforeVO)
+ ) {
+ issueModelValue.value = mapFiles(info.commonFileListBeforeVO);
+ }
+
+ // 濡傛灉鏈夊紓甯告弿杩帮紝涔熸仮澶�
+ if (info.abnormalDescription) {
+ abnormalDescription.value = info.abnormalDescription;
+ }
+ // 濡傛灉鏈夊紓甯哥姸鎬侊紝涔熸仮澶�
+ if (info.hasException !== undefined && info.hasException !== null) {
+ hasException.value = info.hasException;
+ } else if (
+ info.inspectionResult !== undefined &&
+ info.inspectionResult !== null
+ ) {
+ // 0-寮傚父锛�1-姝e父
+ hasException.value = String(info.inspectionResult) === "0";
+ }
+
+ // 鑷姩鍏滃簳锛氬鏋滃瓨鍦ㄥ凡涓婁紶鏂囦欢锛屽垯蹇呯劧鏄紓甯哥姸鎬侊紝纭繚 UI 姝e父鏄剧ず
+ if (
+ !hasException.value &&
+ (beforeModelValue.value.length > 0 ||
+ afterModelValue.value.length > 0 ||
+ issueModelValue.value.length > 0)
+ ) {
+ hasException.value = true;
+ }
+ } catch (e) {
+ console.error("瑙f瀽浠诲姟淇℃伅澶辫触:", e);
+ }
}
- }
-});
+ });
-// 杩斿洖涓婁竴椤�
-const goBack = () => {
- uni.navigateBack();
-};
+ // 杩斿洖涓婁竴椤�
+ const goBack = () => {
+ uni.navigateBack();
+ };
-// 鍒囨崲涓婁紶绫诲瀷
-const switchUploadType = (type) => {
- currentUploadType.value = type;
-};
+ // 鍒囨崲涓婁紶绫诲瀷
+ const switchUploadType = type => {
+ currentUploadType.value = type;
+ };
-// 鑾峰彇褰撳墠鍒嗙被鐨勬枃浠跺垪琛�
-const getCurrentFiles = () => {
- switch (currentUploadType.value) {
- case 'before':
- return beforeModelValue.value || [];
- case 'after':
- return afterModelValue.value || [];
- case 'issue':
- return issueModelValue.value || [];
- default:
- return [];
- }
-};
+ // 鑾峰彇褰撳墠鍒嗙被鐨勬枃浠跺垪琛�
+ const getCurrentFiles = () => {
+ switch (currentUploadType.value) {
+ case "before":
+ return beforeModelValue.value || [];
+ case "after":
+ return afterModelValue.value || [];
+ case "issue":
+ return issueModelValue.value || [];
+ default:
+ return [];
+ }
+ };
-// 鑾峰彇涓婁紶绫诲瀷鏂囨湰
-const getUploadTypeText = () => {
- switch (currentUploadType.value) {
- case 'before':
- return '鐢熶骇鍓�';
- case 'after':
- return '鐢熶骇涓�';
- case 'issue':
- return '鐢熶骇鍚�';
- default:
- return '';
- }
-};
+ // 鑾峰彇涓婁紶绫诲瀷鏂囨湰
+ const getUploadTypeText = () => {
+ switch (currentUploadType.value) {
+ case "before":
+ return "鐢熶骇鍓�";
+ case "after":
+ return "鐢熶骇涓�";
+ case "issue":
+ return "鐢熶骇鍚�";
+ default:
+ return "";
+ }
+ };
-// 璁剧疆寮傚父鐘舵��
-const setExceptionStatus = (status) => {
- hasException.value = status;
-};
+ // 璁剧疆寮傚父鐘舵��
+ const setExceptionStatus = status => {
+ hasException.value = status;
+ };
-// 璺宠浆鍒版柊澧炴姤淇〉闈�
-const goToRepair = () => {
- try {
- const taskData = {
- taskId: taskInfo.value?.taskId || taskInfo.value?.id,
- taskName: taskInfo.value?.taskName,
- inspectionLocation: taskInfo.value?.inspectionLocation,
- inspector: taskInfo.value?.inspector,
- uploadedFiles: {
- before: beforeModelValue.value,
- after: afterModelValue.value,
- issue: issueModelValue.value,
- },
- };
+ // 璺宠浆鍒版柊澧炴姤淇〉闈�
+ const goToRepair = () => {
+ try {
+ const taskData = {
+ taskId: taskInfo.value?.taskId || taskInfo.value?.id,
+ taskName: taskInfo.value?.taskName,
+ inspectionLocation: taskInfo.value?.inspectionLocation,
+ inspector: taskInfo.value?.inspector,
+ hasException: hasException.value,
+ inspectionResult: hasException.value ? 0 : 1, // 0-寮傚父锛�1-姝e父
+ commonFileListAfterDTO: beforeModelValue.value,
+ commonFileListDTO: afterModelValue.value,
+ commonFileListBeforeDTO: issueModelValue.value,
+ uploadedFiles: {
+ before: beforeModelValue.value,
+ after: afterModelValue.value,
+ issue: issueModelValue.value,
+ },
+ };
- uni.setStorageSync('repairTaskInfo', JSON.stringify(taskData));
+ uni.setStorageSync("repairTaskInfo", JSON.stringify(taskData));
- uni.navigateTo({
- url: '/pages/equipmentManagement/repair/add',
- });
- } catch (error) {
- console.error('璺宠浆鎶ヤ慨椤甸潰澶辫触:', error);
- uni.showToast({
- title: '璺宠浆澶辫触锛岃閲嶈瘯',
- icon: 'error',
- });
- }
-};
-
-// 鎻愪氦涓婁紶
-const submitUpload = async () => {
- try {
- // 妫�鏌ユ槸鍚﹂�夋嫨浜嗗紓甯哥姸鎬�
- if (hasException.value === null) {
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/repair/add",
+ });
+ } catch (error) {
+ console.error("璺宠浆鎶ヤ慨椤甸潰澶辫触:", error);
uni.showToast({
- title: '璇烽�夋嫨宸℃鐘舵��',
- icon: 'none',
+ title: "璺宠浆澶辫触锛岃閲嶈瘯",
+ icon: "error",
+ });
+ }
+ };
+
+ // 鎻愪氦涓婁紶
+ const submitUpload = async () => {
+ try {
+ // 妫�鏌ユ槸鍚﹂�夋嫨浜嗗紓甯哥姸鎬�
+ if (hasException.value === null) {
+ uni.showToast({
+ title: "璇烽�夋嫨宸℃鐘舵��",
+ icon: "none",
+ });
+ return;
+ }
+
+ // 濡傛灉鏄紓甯哥姸鎬侊紝妫�鏌ユ槸鍚︽湁涓婁紶鏂囦欢鍜屾弿杩�
+ if (hasException.value === true) {
+ const totalFiles =
+ beforeModelValue.value.length +
+ afterModelValue.value.length +
+ issueModelValue.value.length;
+ if (totalFiles === 0) {
+ uni.showToast({
+ title: "璇蜂笂浼犲紓甯哥収鐗�",
+ icon: "none",
+ });
+ return;
+ }
+ // 妫�鏌ユ槸鍚﹀~鍐欎簡寮傚父鎻忚堪
+ if (!abnormalDescription.value.trim()) {
+ uni.showToast({
+ title: "璇峰~鍐欏紓甯告弿杩�",
+ icon: "none",
+ });
+ return;
+ }
+ }
+
+ // 鏄剧ず鎻愪氦涓殑鍔犺浇鎻愮ず
+ uni.showLoading({
+ title: "鎻愪氦涓�...",
+ mask: true,
+ });
+
+ // 鎸夌収閫昏緫鍚堝苟鎵�鏈夊垎绫荤殑鏂囦欢鐢ㄤ簬鎻愬彇ID
+ const allFiles = [
+ ...beforeModelValue.value,
+ ...afterModelValue.value,
+ ...issueModelValue.value,
+ ];
+
+ // 浼犵粰鍚庣鐨勪复鏃舵枃浠禝D鍒楄〃
+ let tempFileIds = [];
+ if (allFiles.length > 0) {
+ tempFileIds = allFiles
+ .map(item => item?.tempId ?? item?.tempFileId ?? item?.id)
+ .filter(v => v !== undefined && v !== null && v !== "");
+ }
+
+ // 鎻愪氦鏁版嵁
+ const submitData = {
+ ...taskInfo.value,
+ commonFileListAfterDTO: beforeModelValue.value, // 鐢熶骇鍓�
+ commonFileListDTO: afterModelValue.value, // 鐢熶骇涓�
+ commonFileListBeforeDTO: issueModelValue.value, // 鐢熶骇鍚�
+ hasException: hasException.value,
+ inspectionResult: hasException.value ? 0 : 1, // 0-寮傚父锛�1-姝e父
+ abnormalDescription: abnormalDescription.value,
+ tempFileIds: tempFileIds,
+ };
+
+ const result = await uploadInspectionTask(submitData);
+
+ // 妫�鏌ユ彁浜ょ粨鏋�
+ if (result && (result.code === 200 || result.success)) {
+ uni.hideLoading();
+ uni.showToast({
+ title: "鎻愪氦鎴愬姛",
+ icon: "success",
+ });
+
+ // 杩斿洖鍒楄〃椤靛苟鍒锋柊
+ setTimeout(() => {
+ uni.navigateBack();
+ }, 500);
+ } else {
+ uni.hideLoading();
+ uni.showToast({
+ title: result?.msg || result?.message || "鎻愪氦澶辫触",
+ icon: "error",
+ });
+ }
+ } catch (error) {
+ console.error("鎻愪氦涓婁紶澶辫触:", error);
+ uni.hideLoading();
+ uni.showToast({
+ title: error?.message || "鎻愪氦澶辫触",
+ icon: "error",
+ });
+ }
+ };
+
+ // 鏍煎紡鍖栨枃浠跺ぇ灏�
+ const formatFileSize = size => {
+ if (!size) return "0 B";
+ const units = ["B", "KB", "MB", "GB"];
+ let index = 0;
+ let fileSize = size;
+ while (fileSize >= 1024 && index < units.length - 1) {
+ fileSize /= 1024;
+ index++;
+ }
+ return `${fileSize.toFixed(2)} ${units[index]}`;
+ };
+
+ // 鎷嶇収/鎷嶈棰�
+ const chooseMedia = type => {
+ if (getCurrentFiles().length >= uploadConfig.limit) {
+ uni.showToast({
+ title: `鏈�澶氬彧鑳介�夋嫨${uploadConfig.limit}涓枃浠禶,
+ icon: "none",
});
return;
}
- // 濡傛灉鏄紓甯哥姸鎬侊紝妫�鏌ユ槸鍚︽湁涓婁紶鏂囦欢鍜屾弿杩�
- if (hasException.value === true) {
- const totalFiles = beforeModelValue.value.length + afterModelValue.value.length + issueModelValue.value.length;
- if (totalFiles === 0) {
- uni.showToast({
- title: '璇蜂笂浼犲紓甯哥収鐗�',
- icon: 'none',
- });
- return;
- }
- // 妫�鏌ユ槸鍚﹀~鍐欎簡寮傚父鎻忚堪
- if (!abnormalDescription.value.trim()) {
- uni.showToast({
- title: '璇峰~鍐欏紓甯告弿杩�',
- icon: 'none',
- });
- return;
- }
- }
+ const remaining = uploadConfig.limit - getCurrentFiles().length;
- // 鏄剧ず鎻愪氦涓殑鍔犺浇鎻愮ず
- uni.showLoading({
- title: '鎻愪氦涓�...',
- mask: true,
- });
+ // 浼樺厛浣跨敤 chooseMedia
+ if (typeof uni.chooseMedia === "function") {
+ uni.chooseMedia({
+ count: Math.min(remaining, 1),
+ mediaType: [type || "image"],
+ sizeType: ["compressed", "original"],
+ sourceType: ["camera"],
+ success: res => {
+ try {
+ const files = res?.tempFiles || [];
+ if (!files.length) throw new Error("鏈幏鍙栧埌鏂囦欢");
- // 鎸夌収閫昏緫鍚堝苟鎵�鏈夊垎绫荤殑鏂囦欢
- let arr = [];
- if (beforeModelValue.value.length > 0) {
- arr.push(...beforeModelValue.value);
- }
- if (afterModelValue.value.length > 0) {
- arr.push(...afterModelValue.value);
- }
- if (issueModelValue.value.length > 0) {
- arr.push(...issueModelValue.value);
- }
-
- // 浼犵粰鍚庣鐨勪复鏃舵枃浠禝D鍒楄〃
- let tempFileIds = [];
- if (arr !== null && arr.length > 0) {
- tempFileIds = arr
- .map((item) => item?.tempId ?? item?.tempFileId ?? item?.id)
- .filter((v) => v !== undefined && v !== null && v !== '');
- }
-
- // 鎻愪氦鏁版嵁
- const submitData = {
- ...taskInfo.value,
- storageBlobDTO: arr,
- hasException: hasException.value,
- abnormalDescription: abnormalDescription.value,
- tempFileIds: tempFileIds,
- };
-
- const result = await uploadInspectionTask(submitData);
-
- // 妫�鏌ユ彁浜ょ粨鏋�
- if (result && (result.code === 200 || result.success)) {
- uni.hideLoading();
- uni.showToast({
- title: '鎻愪氦鎴愬姛',
- icon: 'success',
- });
-
- // 杩斿洖鍒楄〃椤靛苟鍒锋柊
- setTimeout(() => {
- uni.navigateBack();
- }, 500);
- } else {
- uni.hideLoading();
- uni.showToast({
- title: result?.msg || result?.message || '鎻愪氦澶辫触',
- icon: 'error',
- });
- }
- } catch (error) {
- console.error('鎻愪氦涓婁紶澶辫触:', error);
- uni.hideLoading();
- uni.showToast({
- title: error?.message || '鎻愪氦澶辫触',
- icon: 'error',
- });
- }
-};
-
-// 鏍煎紡鍖栨枃浠跺ぇ灏�
-const formatFileSize = (size) => {
- if (!size) return '0 B';
- const units = ['B', 'KB', 'MB', 'GB'];
- let index = 0;
- let fileSize = size;
- while (fileSize >= 1024 && index < units.length - 1) {
- fileSize /= 1024;
- index++;
- }
- return `${fileSize.toFixed(2)} ${units[index]}`;
-};
-
-// 鎷嶇収/鎷嶈棰�
-const chooseMedia = (type) => {
- if (getCurrentFiles().length >= uploadConfig.limit) {
- uni.showToast({
- title: `鏈�澶氬彧鑳介�夋嫨${uploadConfig.limit}涓枃浠禶,
- icon: 'none',
- });
- return;
- }
-
- const remaining = uploadConfig.limit - getCurrentFiles().length;
-
- // 浼樺厛浣跨敤 chooseMedia
- if (typeof uni.chooseMedia === 'function') {
- uni.chooseMedia({
- count: Math.min(remaining, 1),
- mediaType: [type || 'image'],
- sizeType: ['compressed', 'original'],
- sourceType: ['camera'],
- success: (res) => {
- try {
- const files = res?.tempFiles || [];
- if (!files.length) throw new Error('鏈幏鍙栧埌鏂囦欢');
-
- files.forEach((tf, idx) => {
- const filePath = tf.tempFilePath || tf.path || '';
- const fileType = tf.fileType || type || 'image';
- const ext = fileType === 'video' ? 'mp4' : 'jpg';
- const file = {
- tempFilePath: filePath,
- path: filePath,
- type: fileType,
- name: `${fileType}_${Date.now()}_${idx}.${ext}`,
- size: tf.size || 0,
- duration: tf.duration || 0,
- createTime: Date.now(),
- };
- uploadFile(file);
- });
- } catch (err) {
- uni.showToast({ title: err.message || '澶勭悊鏂囦欢澶辫触', icon: 'none' });
- }
- },
- fail: (err) => {
- console.error('閫夋嫨濯掍綋澶辫触:', err);
- uni.showToast({ title: '閫夋嫨澶辫触', icon: 'none' });
- },
- });
- } else {
- // 闄嶇骇鏂规
- if (type === 'video') {
- uni.chooseVideo({
- sourceType: ['camera'],
- success: (res) => {
- const file = {
- tempFilePath: res.tempFilePath,
- path: res.tempFilePath,
- type: 'video',
- name: `video_${Date.now()}.mp4`,
- size: res.size || 0,
- duration: res.duration || 0,
- createTime: Date.now(),
- };
- uploadFile(file);
- },
- fail: () => {
- uni.showToast({ title: '閫夋嫨瑙嗛澶辫触', icon: 'none' });
- },
- });
- } else {
- uni.chooseImage({
- count: Math.min(remaining, 9),
- sizeType: ['compressed'],
- sourceType: ['camera'],
- success: (res) => {
- const list = res.tempFilePaths || res.tempFiles || [];
- list.forEach((src, idx) => {
- const path = typeof src === 'string' ? src : src.path;
- const file = {
- tempFilePath: path,
- path: path,
- type: 'image',
- name: `image_${Date.now()}_${idx}.jpg`,
- size: 0,
- createTime: Date.now(),
- };
- uploadFile(file);
- });
- },
- fail: () => {
- uni.showToast({ title: '閫夋嫨鍥剧墖澶辫触', icon: 'none' });
- },
- });
- }
- }
-};
-
-// 涓婁紶鍗曚釜鏂囦欢
-const uploadFile = (file) => {
- const token = getToken();
- if (!token) {
- uni.showToast({ title: '鐢ㄦ埛鏈櫥褰�', icon: 'none' });
- return;
- }
-
- uploading.value = true;
- uploadProgress.value = 0;
-
- const uploadTask = uni.uploadFile({
- url: uploadFileUrl.value,
- filePath: file.tempFilePath,
- name: 'file',
- header: {
- Authorization: `Bearer ${token}`,
- },
- formData: {
- type: getTabType(),
- },
- success: (res) => {
- try {
- const data = JSON.parse(res.data);
- if (data.code === 200) {
- const uploadedFile = {
- ...file,
- url: data.data.url,
- tempId: data.data.tempId || data.data.id,
- status: 'success',
- };
-
- // 鏍规嵁褰撳墠绫诲瀷娣诲姞鍒板搴旀暟缁�
- if (currentUploadType.value === 'before') {
- beforeModelValue.value.push(uploadedFile);
- } else if (currentUploadType.value === 'after') {
- afterModelValue.value.push(uploadedFile);
- } else if (currentUploadType.value === 'issue') {
- issueModelValue.value.push(uploadedFile);
+ files.forEach((tf, idx) => {
+ const filePath = tf.tempFilePath || tf.path || "";
+ const fileType = tf.fileType || type || "image";
+ const ext = fileType === "video" ? "mp4" : "jpg";
+ const file = {
+ tempFilePath: filePath,
+ path: filePath,
+ type: fileType,
+ name: `${fileType}_${Date.now()}_${idx}.${ext}`,
+ size: tf.size || 0,
+ duration: tf.duration || 0,
+ createTime: Date.now(),
+ };
+ uploadFile(file);
+ });
+ } catch (err) {
+ uni.showToast({ title: err.message || "澶勭悊鏂囦欢澶辫触", icon: "none" });
}
-
- uni.showToast({ title: '涓婁紶鎴愬姛', icon: 'success' });
- } else {
- uni.showToast({ title: data.msg || '涓婁紶澶辫触', icon: 'none' });
- }
- } catch (e) {
- uni.showToast({ title: '瑙f瀽鍝嶅簲澶辫触', icon: 'none' });
+ },
+ fail: err => {
+ console.error("閫夋嫨濯掍綋澶辫触:", err);
+ uni.showToast({ title: "閫夋嫨澶辫触", icon: "none" });
+ },
+ });
+ } else {
+ // 闄嶇骇鏂规
+ if (type === "video") {
+ uni.chooseVideo({
+ sourceType: ["camera"],
+ success: res => {
+ const file = {
+ tempFilePath: res.tempFilePath,
+ path: res.tempFilePath,
+ type: "video",
+ name: `video_${Date.now()}.mp4`,
+ size: res.size || 0,
+ duration: res.duration || 0,
+ createTime: Date.now(),
+ };
+ uploadFile(file);
+ },
+ fail: () => {
+ uni.showToast({ title: "閫夋嫨瑙嗛澶辫触", icon: "none" });
+ },
+ });
+ } else {
+ uni.chooseImage({
+ count: Math.min(remaining, 9),
+ sizeType: ["compressed"],
+ sourceType: ["camera"],
+ success: res => {
+ const list = res.tempFilePaths || res.tempFiles || [];
+ list.forEach((src, idx) => {
+ const path = typeof src === "string" ? src : src.path;
+ const file = {
+ tempFilePath: path,
+ path: path,
+ type: "image",
+ name: `image_${Date.now()}_${idx}.jpg`,
+ size: 0,
+ createTime: Date.now(),
+ };
+ uploadFile(file);
+ });
+ },
+ fail: () => {
+ uni.showToast({ title: "閫夋嫨鍥剧墖澶辫触", icon: "none" });
+ },
+ });
}
- },
- fail: (err) => {
- console.error('涓婁紶澶辫触:', err);
- uni.showToast({ title: '涓婁紶澶辫触', icon: 'none' });
- },
- complete: () => {
- uploading.value = false;
- },
- });
+ }
+ };
- // 鐩戝惉涓婁紶杩涘害
- uploadTask.onProgressUpdate((res) => {
- uploadProgress.value = res.progress;
- });
-};
+ // 涓婁紶鍗曚釜鏂囦欢
+ const uploadFile = file => {
+ const token = getToken();
+ if (!token) {
+ uni.showToast({ title: "鐢ㄦ埛鏈櫥褰�", icon: "none" });
+ return;
+ }
-// 鑾峰彇type鍊�
-const getTabType = () => {
- switch (currentUploadType.value) {
- case 'before':
- return 10;
- case 'after':
- return 11;
- case 'issue':
- return 12;
- default:
- return 10;
- }
-};
+ uploading.value = true;
+ uploadProgress.value = 0;
-// 鍒犻櫎鏂囦欢
-const removeFile = (index) => {
- const files = getCurrentFiles();
- files.splice(index, 1);
-};
+ const uploadTask = uni.uploadFile({
+ url: uploadFileUrl.value,
+ filePath: file.tempFilePath,
+ name: "files",
+ header: {
+ Authorization: `Bearer ${token}`,
+ },
+ formData: {
+ type: getTabType(),
+ },
+ success: res => {
+ try {
+ const data = JSON.parse(res.data);
+ if (data.code === 200) {
+ // 鍏煎 CommonUpload.vue 鐨勫鐞嗛�昏緫
+ const resultData = Array.isArray(data.data)
+ ? data.data[0]
+ : data.data;
+
+ // 澶勭悊 url 鍜� name 璧嬪��
+ const finalUrl = resultData.url || resultData.previewURL;
+ const finalName = resultData.name || resultData.originalFilename;
+ const finalId =
+ resultData.tempId || resultData.id || resultData.tempFileId;
+
+ const uploadedFile = {
+ ...file,
+ ...resultData, // 鍖呭惈鍚庣杩斿洖鐨勬墍鏈夊瓧娈�
+ url: finalUrl,
+ name: finalName,
+ tempId: finalId,
+ status: "success",
+ };
+
+ // 鏍规嵁褰撳墠绫诲瀷娣诲姞鍒板搴旀暟缁�
+ if (currentUploadType.value === "before") {
+ beforeModelValue.value.push(uploadedFile);
+ } else if (currentUploadType.value === "after") {
+ afterModelValue.value.push(uploadedFile);
+ } else if (currentUploadType.value === "issue") {
+ issueModelValue.value.push(uploadedFile);
+ }
+
+ uni.showToast({ title: "涓婁紶鎴愬姛", icon: "success" });
+ } else {
+ uni.showToast({ title: data.msg || "涓婁紶澶辫触", icon: "none" });
+ }
+ } catch (e) {
+ uni.showToast({ title: "瑙f瀽鍝嶅簲澶辫触", icon: "none" });
+ }
+ },
+ fail: err => {
+ console.error("涓婁紶澶辫触:", err);
+ uni.showToast({ title: "涓婁紶澶辫触", icon: "none" });
+ },
+ complete: () => {
+ uploading.value = false;
+ },
+ });
+
+ // 鐩戝惉涓婁紶杩涘害
+ uploadTask.onProgressUpdate(res => {
+ uploadProgress.value = res.progress;
+ });
+ };
+
+ // 鑾峰彇type鍊�
+ const getTabType = () => {
+ switch (currentUploadType.value) {
+ case "before":
+ return 10;
+ case "after":
+ return 11;
+ case "issue":
+ return 12;
+ default:
+ return 10;
+ }
+ };
+
+ // 鍒犻櫎鏂囦欢
+ const removeFile = index => {
+ const files = getCurrentFiles();
+ files.splice(index, 1);
+ };
</script>
<style scoped>
-.inspection-upload-page {
- min-height: 100vh;
- background-color: #f5f5f5;
- padding-bottom: 80px;
-}
+ .inspection-upload-page {
+ min-height: 100vh;
+ background-color: #f5f5f5;
+ padding-bottom: 80px;
+ }
-.upload-content {
- padding: 15px;
-}
+ .upload-content {
+ padding: 15px;
+ }
-/* 浠诲姟淇℃伅鍗$墖 */
-.task-info-card {
- background: #fff;
- border-radius: 12px;
- padding: 15px;
- margin-bottom: 15px;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-}
+ /* 浠诲姟淇℃伅鍗$墖 */
+ .task-info-card {
+ background: #fff;
+ border-radius: 12px;
+ padding: 15px;
+ margin-bottom: 15px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+ }
-.task-info-header {
- margin-bottom: 12px;
- padding-bottom: 12px;
- border-bottom: 1px solid #f0f0f0;
-}
+ .task-info-header {
+ margin-bottom: 12px;
+ padding-bottom: 12px;
+ border-bottom: 1px solid #f0f0f0;
+ }
-.task-name {
- font-size: 16px;
- font-weight: 600;
- color: #333;
-}
+ .task-name {
+ font-size: 16px;
+ font-weight: 600;
+ color: #333;
+ }
-.task-info-body {
- display: flex;
- flex-direction: column;
- gap: 8px;
-}
+ .task-info-body {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ }
-.info-item {
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
+ .info-item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
-.info-label {
- font-size: 13px;
- color: #999;
-}
+ .info-label {
+ font-size: 13px;
+ color: #999;
+ }
-.info-value {
- font-size: 13px;
- color: #666;
-}
+ .info-value {
+ font-size: 13px;
+ color: #666;
+ }
-/* 閫氱敤鍗$墖鏍峰紡 */
-.section-card {
- background: #fff;
- border-radius: 12px;
- padding: 15px;
- margin-bottom: 15px;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-}
+ /* 閫氱敤鍗$墖鏍峰紡 */
+ .section-card {
+ background: #fff;
+ border-radius: 12px;
+ padding: 15px;
+ margin-bottom: 15px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+ }
-.section-title {
- font-size: 14px;
- font-weight: 600;
- color: #333;
- margin-bottom: 12px;
-}
+ .section-title {
+ font-size: 14px;
+ font-weight: 600;
+ color: #333;
+ margin-bottom: 12px;
+ }
-/* 寮傚父鐘舵�侀�夋嫨 */
-.exception-options {
- display: flex;
- gap: 12px;
-}
+ /* 寮傚父鐘舵�侀�夋嫨 */
+ .exception-options {
+ display: flex;
+ gap: 12px;
+ }
-.exception-option {
- flex: 1;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 8px;
- padding: 14px 16px;
- background: #f8f9fa;
- border: 2px solid #e9ecef;
- border-radius: 8px;
- cursor: pointer;
- transition: all 0.3s ease;
-}
+ .exception-option {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ padding: 14px 16px;
+ background: #f8f9fa;
+ border: 2px solid #e9ecef;
+ border-radius: 8px;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ }
-.exception-option.active {
- border-color: #409eff;
- background: #f0f8ff;
-}
+ .exception-option.active {
+ border-color: #409eff;
+ background: #f0f8ff;
+ }
-.option-text {
- font-size: 14px;
- color: #333;
- font-weight: 500;
-}
+ .option-text {
+ font-size: 14px;
+ color: #333;
+ font-weight: 500;
+ }
-/* 寮傚父鎻忚堪 */
-.exception-textarea {
- width: 100%;
- min-height: 100px;
- padding: 12px;
- background: #f8f9fa;
- border: 1px solid #e9ecef;
- border-radius: 8px;
- font-size: 14px;
- color: #333;
- resize: none;
- box-sizing: border-box;
-}
+ /* 寮傚父鎻忚堪 */
+ .exception-textarea {
+ width: 100%;
+ min-height: 100px;
+ padding: 12px;
+ background: #f8f9fa;
+ border: 1px solid #e9ecef;
+ border-radius: 8px;
+ font-size: 14px;
+ color: #333;
+ resize: none;
+ box-sizing: border-box;
+ }
-.exception-textarea:focus {
- outline: none;
- border-color: #409eff;
- background: #fff;
-}
+ .exception-textarea:focus {
+ outline: none;
+ border-color: #409eff;
+ background: #fff;
+ }
-/* 鍒嗙被鏍囩椤� */
-.upload-tabs {
- display: flex;
- gap: 10px;
- margin-bottom: 15px;
-}
+ /* 鍒嗙被鏍囩椤� */
+ .upload-tabs {
+ display: flex;
+ gap: 10px;
+ margin-bottom: 15px;
+ }
-.tab-item {
- flex: 1;
- padding: 10px;
- text-align: center;
- background: #f5f5f5;
- border-radius: 6px;
- font-size: 13px;
- color: #666;
- cursor: pointer;
- transition: all 0.3s;
-}
+ .tab-item {
+ flex: 1;
+ padding: 10px;
+ text-align: center;
+ background: #f5f5f5;
+ border-radius: 6px;
+ font-size: 13px;
+ color: #666;
+ cursor: pointer;
+ transition: all 0.3s;
+ }
-.tab-item.active {
- background: #409eff;
- color: #fff;
-}
+ .tab-item.active {
+ background: #409eff;
+ color: #fff;
+ }
-/* 涓婁紶鍖哄煙 */
-.upload-area {
- padding: 10px 0;
-}
+ /* 涓婁紶鍖哄煙 */
+ .upload-area {
+ padding: 10px 0;
+ }
-.upload-buttons {
- display: flex;
- gap: 10px;
- margin-bottom: 15px;
-}
+ .upload-buttons {
+ display: flex;
+ gap: 10px;
+ margin-bottom: 15px;
+ }
-.upload-progress {
- margin-bottom: 15px;
-}
+ .upload-progress {
+ margin-bottom: 15px;
+ }
-/* 鏂囦欢鍒楄〃 */
-.file-list {
- display: flex;
- flex-wrap: wrap;
- gap: 10px;
-}
+ /* 鏂囦欢鍒楄〃 */
+ .file-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ }
-.file-item {
- width: calc(33.33% - 7px);
-}
+ .file-item {
+ width: calc(33.33% - 7px);
+ }
-.file-preview-container {
- position: relative;
- width: 100%;
- aspect-ratio: 1;
- border-radius: 8px;
- overflow: hidden;
- background: #f5f5f5;
-}
+ .file-preview-container {
+ position: relative;
+ width: 100%;
+ aspect-ratio: 1;
+ border-radius: 8px;
+ overflow: hidden;
+ background: #f5f5f5;
+ }
-.file-preview {
- width: 100%;
- height: 100%;
- object-fit: cover;
-}
+ .file-preview {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
-.video-preview {
- width: 100%;
- height: 100%;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- background: #333;
-}
+ .video-preview {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ background: #333;
+ }
-.video-text {
- font-size: 12px;
- color: #fff;
- margin-top: 5px;
-}
+ .video-text {
+ font-size: 12px;
+ color: #fff;
+ margin-top: 5px;
+ }
-.delete-btn {
- position: absolute;
- top: 5px;
- right: 5px;
- width: 22px;
- height: 22px;
- background: rgba(0, 0, 0, 0.5);
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
-}
+ .delete-btn {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ width: 22px;
+ height: 22px;
+ background: rgba(0, 0, 0, 0.5);
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
-.file-info {
- margin-top: 5px;
-}
+ .file-info {
+ margin-top: 5px;
+ }
-.file-name {
- display: block;
- font-size: 11px;
- color: #666;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
+ .file-name {
+ display: block;
+ font-size: 11px;
+ color: #666;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
-.file-size {
- display: block;
- font-size: 10px;
- color: #999;
- margin-top: 2px;
-}
+ .file-size {
+ display: block;
+ font-size: 10px;
+ color: #999;
+ margin-top: 2px;
+ }
-.empty-state {
- text-align: center;
- padding: 30px;
- color: #999;
- font-size: 13px;
-}
+ .empty-state {
+ text-align: center;
+ padding: 30px;
+ color: #999;
+ font-size: 13px;
+ }
-/* 缁熻淇℃伅 */
-.upload-summary {
- margin-top: 15px;
- padding: 10px;
- background: #f8f9fa;
- border-radius: 6px;
- border-left: 3px solid #409eff;
-}
+ /* 缁熻淇℃伅 */
+ .upload-summary {
+ margin-top: 15px;
+ padding: 10px;
+ background: #f8f9fa;
+ border-radius: 6px;
+ border-left: 3px solid #409eff;
+ }
-.summary-text {
- font-size: 12px;
- color: #666;
-}
+ .summary-text {
+ font-size: 12px;
+ color: #666;
+ }
-/* 姝e父鐘舵�佹彁绀� */
-.normal-tip-card {
- background: #f6ffed;
- border: 2px dashed #b7eb8f;
- border-radius: 12px;
- padding: 50px 20px;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- margin-bottom: 15px;
-}
+ /* 姝e父鐘舵�佹彁绀� */
+ .normal-tip-card {
+ background: #f6ffed;
+ border: 2px dashed #b7eb8f;
+ border-radius: 12px;
+ padding: 50px 20px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 15px;
+ }
-.normal-tip-card .tip-text {
- margin-top: 15px;
- font-size: 16px;
- color: #52c41a;
- font-weight: 500;
-}
+ .normal-tip-card .tip-text {
+ margin-top: 15px;
+ font-size: 16px;
+ color: #52c41a;
+ font-weight: 500;
+ }
-/* 搴曢儴鎸夐挳 */
-.footer-buttons {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- display: flex;
- padding: 15px;
- background: #fff;
- border-top: 1px solid #f0f0f0;
- box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
-}
+ /* 搴曢儴鎸夐挳 */
+ .footer-buttons {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ display: flex;
+ padding: 15px;
+ background: #fff;
+ border-top: 1px solid #f0f0f0;
+ box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
+ }
</style>
--
Gitblit v1.9.3