From 491585f7ad453d889f71dc549f6a4d3dee74828f Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期五, 31 十月 2025 14:48:09 +0800
Subject: [PATCH] 除附件

---
 src/pages/routingInspection/detail/indexLS.vue |  599 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 489 insertions(+), 110 deletions(-)

diff --git a/src/pages/routingInspection/detail/indexLS.vue b/src/pages/routingInspection/detail/indexLS.vue
index ad3ccac..07bfd70 100644
--- a/src/pages/routingInspection/detail/indexLS.vue
+++ b/src/pages/routingInspection/detail/indexLS.vue
@@ -68,7 +68,6 @@
           <wd-form-item label="鍨嬪彿" prop="poleModel">
             {{ formatValue(detailData.fixedInfo?.poleModel) }}
           </wd-form-item>
-
           <wd-form-item label="鎵规" prop="poleNumber">
             {{ formatValue(detailData.fixedInfo?.poleNumber) }}
           </wd-form-item>
@@ -80,6 +79,7 @@
           </wd-form-item>
         </wd-col>
       </wd-row>
+
       <!-- 鑷璁板綍璇︽儏妯″潡 -->
       <wd-row>
         <view style="margin: 10rpx">
@@ -96,6 +96,7 @@
           </wd-form-item>
         </wd-col>
       </wd-row>
+
       <!-- 妫�楠岀粨鏋� -->
       <wd-row>
         <view style="margin: 10rpx">
@@ -105,52 +106,186 @@
           <wd-form-item label="鍗曚笣鐩村緞" prop="dia">
             {{ formatValue(detailData.inspectionResult?.dia, "mm") || "-" }}
           </wd-form-item>
-          <wd-form-item label="鏈�澶х洿寰�" prop="maxDia">
-            {{ formatValue(detailData.inspectionResult?.maxDia, "mm") || "-" }}
+
+          <wd-form-item label="鏈�澶х洿寰�" prop="maxDia" required>
+            <template v-if="isEdit">
+              <wd-input v-model="formData.maxDia" placeholder="璇疯緭鍏ユ渶澶х洿寰�(mm)" type="number" />
+            </template>
+            <template v-else>
+              {{ formatValue(detailData.inspectionResult?.maxDia, "mm") || "-" }}
+            </template>
           </wd-form-item>
-          <wd-form-item label="鏈�灏忕洿寰�" prop="minDia">
-            {{ formatValue(detailData.inspectionResult?.minDia, "mm") || "-" }}
+
+          <wd-form-item label="鏈�灏忕洿寰�" prop="minDia" required>
+            <template v-if="isEdit">
+              <wd-input v-model="formData.minDia" placeholder="璇疯緭鍏ユ渶灏忕洿寰�(mm)" type="number" />
+            </template>
+            <template v-else>
+              {{ formatValue(detailData.inspectionResult?.minDia, "mm") || "-" }}
+            </template>
           </wd-form-item>
-          <wd-form-item label="澶栬" prop="appearance">
-            {{ formatProductAppearance(detailData.inspectionResult?.appearance) || "-" }}
+
+          <wd-form-item label="澶栬" prop="appearance" required>
+            <template v-if="isEdit">
+              <wd-checkbox-group
+                v-model="formData.appearance"
+                inline
+                v-for="(opt, idx) in appearanceOptions"
+                :key="idx"
+                style="text-align: justify"
+              >
+                <wd-checkbox :modelValue="opt.value" style="width: 100px">
+                  {{ opt.label }}
+                </wd-checkbox>
+              </wd-checkbox-group>
+            </template>
+            <template v-else>
+              {{
+                formatProductAppearance(detailData.inspectionResult?.appearance).join("銆�") || "-"
+              }}
+            </template>
           </wd-form-item>
-          <wd-form-item label="鍗风粫绱у瘑" prop="windingTightness">
-            {{ formatValue(detailData.inspectionResult?.windingTightness) }}
+
+          <wd-form-item label="鍗风粫绱у瘑" prop="windingTightness" required>
+            <template v-if="isEdit">
+              <wd-radio-group
+                v-model="formData.windingTightness"
+                inline
+                class="conclusion-radio-group"
+              >
+                <wd-radio
+                  v-for="(opt, idx) in sampleCompleteOptions"
+                  :key="idx"
+                  :value="opt.value"
+                  shape="dot"
+                >
+                  {{ opt.label }}
+                </wd-radio>
+              </wd-radio-group>
+            </template>
+            <template v-else>
+              {{ formatValue(detailData.inspectionResult?.windingTightness) }}
+            </template>
           </wd-form-item>
-          <wd-form-item label="鎺掑垪鏁撮綈" prop="arrangementNeatness">
-            {{ formatValue(detailData.inspectionResult?.arrangementNeatness) }}
+
+          <wd-form-item label="鎺掑垪鏁撮綈" prop="arrangementNeatness" required>
+            <template v-if="isEdit">
+              <wd-radio-group
+                v-model="formData.arrangementNeatness"
+                inline
+                class="conclusion-radio-group"
+              >
+                <wd-radio
+                  v-for="(opt, idx) in sampleCompleteOptions"
+                  :key="idx"
+                  :value="opt.value"
+                  shape="dot"
+                >
+                  {{ opt.label }}
+                </wd-radio>
+              </wd-radio-group>
+            </template>
+            <template v-else>
+              {{ formatValue(detailData.inspectionResult?.arrangementNeatness) }}
+            </template>
           </wd-form-item>
+
           <wd-form-item
             label="澶栧眰閾濈嚎绂讳晶鏉胯竟缂樿窛绂�"
             prop="aluminumWireDistance"
-            label-width="500rpx"
+            label-width="360rpx"
+            required
           >
-            {{ formatValue(detailData.inspectionResult?.aluminumWireDistance, "mm") || "-" }}
+            <template v-if="isEdit">
+              <wd-input
+                v-model="formData.aluminumWireDistance"
+                placeholder="璇疯緭鍏ヨ窛绂�(mm)"
+                type="number"
+              />
+            </template>
+            <template v-else>
+              {{ formatValue(detailData.inspectionResult?.aluminumWireDistance, "mm") || "-" }}
+            </template>
           </wd-form-item>
-          <wd-form-item label="鎴愬搧妯″悗鎺ュご鎯呭喌" prop="jointCondition" label-width="250rpx">
-            {{ formatValue(detailData.inspectionResult?.jointCondition) || "-" }}
+
+          <wd-form-item
+            label="鎴愬搧妯″悗鎺ュご鎯呭喌"
+            prop="jointCondition"
+            label-width="280rpx"
+            required
+          >
+            <template v-if="isEdit">
+              <wd-radio-group
+                v-model="formData.jointCondition"
+                inline
+                class="conclusion-radio-group"
+              >
+                <wd-radio
+                  v-for="(opt, idx) in jointConditionOptions"
+                  :key="idx"
+                  :value="opt.value"
+                  shape="dot"
+                >
+                  {{ opt.label }}
+                </wd-radio>
+              </wd-radio-group>
+            </template>
+            <template v-else>
+              {{ formatValue(detailData.inspectionResult?.jointCondition) || "-" }}
+            </template>
           </wd-form-item>
-          <wd-form-item label="缁撹" prop="conclusion">
-            {{ formatValue(detailData.inspectionResult?.conclusion) || "-" }}
+
+          <wd-form-item label="缁撹" prop="conclusion" required>
+            <template v-if="isEdit">
+              <wd-radio-group v-model="formData.conclusion" inline class="conclusion-radio-group">
+                <wd-radio
+                  v-for="(opt, idx) in conclusionOptions"
+                  :key="idx"
+                  :value="opt.value"
+                  shape="dot"
+                >
+                  {{ opt.label }}
+                </wd-radio>
+              </wd-radio-group>
+            </template>
+            <template v-else>
+              {{ formatValue(detailData.inspectionResult?.conclusion) || "-" }}
+            </template>
           </wd-form-item>
         </wd-col>
       </wd-row>
+
       <!-- 宸℃缁撴灉 -->
       <wd-row v-if="detailData.processInspectionResult?.isFully">
         <view style="margin: 10rpx">
           <text class="title">{{ "宸℃缁撴灉" }}</text>
         </view>
         <wd-col :span="24">
-          <wd-form-item label="閾濇潌鍓嶃�佷腑銆佸熬鏍峰搧鏄惁榻愬叏" prop="processInspectionUserName">
-            <wd-tag
-              custom-class="space"
-              :type="detailData.processInspectionResult?.isFully ? 'success' : 'danger'"
-            >
-              {{ detailData.processInspectionResult?.isFully ? "鏄�" : "鍚�" }}
-            </wd-tag>
+          <wd-form-item label="閾濇潌鍓嶃�佷腑銆佸熬鏍峰搧鏄惁榻愬叏" prop="isFully" required>
+            <template v-if="isEdit">
+              <wd-radio-group v-model="formData.isFully" inline class="conclusion-radio-group">
+                <wd-radio
+                  v-for="(opt, idx) in sampleCompleteOptions"
+                  :key="idx"
+                  :value="opt.value"
+                  shape="dot"
+                >
+                  {{ opt.label }}
+                </wd-radio>
+              </wd-radio-group>
+            </template>
+            <template v-else>
+              <wd-tag
+                custom-class="space"
+                :type="detailData.processInspectionResult?.isFully ? 'success' : 'danger'"
+              >
+                {{ detailData.processInspectionResult?.isFully ? "鏄�" : "鍚�" }}
+              </wd-tag>
+            </template>
           </wd-form-item>
         </wd-col>
       </wd-row>
+
       <!-- 闄勪欢妯″潡 -->
       <wd-row class="attachment-section" v-if="detailData.files && detailData.files.length > 0">
         <view style="margin: 10rpx">
@@ -159,15 +294,29 @@
         <view class="attachment-grid">
           <wd-col v-for="(file, index) in detailData.files" :key="index" class="attachment-item">
             <wd-img :width="80" :height="80" :src="file.url" @click="previewImage(file.url)">
-              <template #error>
-                <view class="error-wrap">鍔犺浇澶辫触</view>
-              </template>
+              <template #error><view class="error-wrap">鍔犺浇澶辫触</view></template>
               <template #loading>
-                <view class="loading-wrap">
-                  <wd-loading />
-                </view>
+                <view class="loading-wrap"><wd-loading /></view>
               </template>
             </wd-img>
+            <!-- <wd-icon
+              v-if="isEdit"
+              name="close-circle"
+              class="delete-icon"
+              @click.stop="deleteFile(index)"
+            ></wd-icon> -->
+          </wd-col>
+          <wd-col v-if="isEdit" class="attachment-item upload-btn">
+            <wd-upload
+              :multiple="true"
+              :max-count="5"
+              :before-upload="beforeUpload"
+              @success="handleUploadSuccess"
+              @fail="handleUploadFail"
+              accept="all"
+            >
+              <view class="upload-icon">+</view>
+            </wd-upload>
           </wd-col>
         </view>
       </wd-row>
@@ -177,36 +326,77 @@
         <img :src="previewImageUrl" alt="棰勮鍥剧墖" style="width: 100%; height: auto" />
       </div>
     </wd-popup>
+    <Scan ref="scanRef" emitName="scan" />
+    <wd-toast />
   </view>
 </template>
 
 <script setup lang="ts">
+import { ref, reactive } from "vue";
 import { onLoad } from "@dcloudio/uni-app";
 import RoutingInspectionApi from "@/api/routingInspection/routingInspection";
-
+import Scan from "@/components/scan/index.vue";
+import { useToast } from "wot-design-uni";
+// 鏍稿績鐘舵��
 const paramsId = ref("");
 const detailData = ref<any>({});
 const show = ref(false);
 const previewImageUrl = ref("");
 const isEdit = ref(false);
+const tempFiles = ref<any[]>([]);
+const deviceUid = ref("");
+const scanRef = ref();
+const toast = useToast();
 
-// 鐘舵�佺被鍨嬫槧灏�
+// 琛ㄥ崟鏁版嵁
+const formData = reactive({
+  dia: "",
+  maxDia: "",
+  minDia: "",
+  appearance: "",
+  windingTightness: "",
+  arrangementNeatness: "",
+  aluminumWireDistance: "",
+  jointCondition: "",
+  conclusion: "",
+  isFully: "",
+});
+
+// 澶栬閫夐」
+const appearanceOptions = [
+  { label: "鏃犲瑙傞棶棰�", value: "鏃犲瑙傞棶棰�" },
+  { label: "琛ㄩ潰鍒掍激", value: "琛ㄩ潰鍒掍激" },
+  { label: "鐩村緞涓嶅潎", value: "鐩村緞涓嶅潎" },
+  { label: "鍏朵粬缂洪櫡", value: "鍏朵粬缂洪櫡" },
+];
+const sampleCompleteOptions = [
+  { label: "鏄�", value: "鏄�" },
+  { label: "鍚�", value: "鍚�" },
+];
+const jointConditionOptions = [
+  { label: "鏈�", value: "鏈�" },
+  { label: "鏃�", value: "鏃�" },
+];
+const conclusionOptions = [
+  { label: "鍚堟牸", value: "鍚堟牸" },
+  { label: "涓嶅悎鏍�", value: "涓嶅悎鏍�" },
+];
+// 鐘舵�佹槧灏�
 const getStatusType = (status: number) => {
   switch (status) {
     case 0:
-      return "warning"; // 寰呭贰妫�
+      return "warning";
     case 1:
-      return "danger"; // 宸查┏鍥�
+      return "danger";
     case 2:
-      return "info"; // 寰呭鏍�
+      return "info";
     case 3:
-      return "success"; // 閫氳繃
+      return "success";
     default:
       return "info";
   }
 };
 
-// 鐘舵�佹枃鏈槧灏�
 const getStatusText = (status: number) => {
   switch (status) {
     case 0:
@@ -222,25 +412,16 @@
   }
 };
 
-// 鑾峰彇澶栬鏂囨湰
-const getAppearanceText = (appearance: string[]) => {
-  if (!appearance || appearance.length === 0) return "-";
-  return appearance.join("銆�");
+// 鏍煎紡鍖栧伐鍏�
+const formatProductAppearance = (productAppearance: string) => {
+  return !productAppearance ? "-" : productAppearance;
 };
 
-// 鏍煎紡鍖栦骇鍝佸瑙傛樉绀�
-const formatProductAppearance = (productAppearance: string[]) => {
-  if (!productAppearance || productAppearance.length === 0) return "-";
-  return productAppearance.join("銆�");
-};
-
-// 鏍煎紡鍖栨暟鍊兼樉绀�
 const formatValue = (value: any, unit?: string) => {
   if (value === null || value === undefined || value === "") return "-";
   return unit ? `${value}${unit}` : value;
 };
 
-// 鏍煎紡鍖栨棩鏈熸樉绀�
 const formatDate = (date: string) => {
   if (!date) return "-";
   return new Date(date).toLocaleDateString("zh-CN", {
@@ -250,32 +431,145 @@
   });
 };
 
-// 鏍煎紡鍖栫粨鏋勫�兼樉绀�
-const formatStructureValue = (value1: any, value2: any) => {
-  const val1 = value1 || "-";
-  const val2 = value2 ? `${value2}mm` : "-";
-  return { count: val1, diameter: val2 };
+// 鍒濆鍖栬〃鍗�
+const initFormData = () => {
+  const inspectionResult = detailData.value.inspectionResult || {};
+  const processInspectionResult = detailData.value.processInspectionResult || {};
+  formData.dia = inspectionResult.dia || "";
+  formData.maxDia = inspectionResult.maxDia || "";
+  formData.minDia = inspectionResult.minDia || "";
+  formData.appearance = inspectionResult.appearance || "";
+  formData.windingTightness = inspectionResult.windingTightness || "";
+  formData.arrangementNeatness = inspectionResult.arrangementNeatness || "";
+  formData.aluminumWireDistance = inspectionResult.aluminumWireDistance || "";
+  formData.jointCondition = inspectionResult.jointCondition || "";
+  formData.conclusion = inspectionResult.conclusion || "";
+  formData.isFully = processInspectionResult.isFully ? "鏄�" : "鍚�";
 };
 
+// 鑾峰彇璇︽儏
 const getDetailData = async (id: string, deviceType: string) => {
   try {
-    let response;
-    // 鑾峰彇鎷変笣鍗曚釜缁撴瀯
-    response = await RoutingInspectionApi.getDrawInspectInfoById({
-      id: id,
-    });
+    const response = await RoutingInspectionApi.getDrawInspectInfoById({ id });
     detailData.value = response.data;
-    console.log(detailData.value);
+    tempFiles.value = [];
+    initFormData();
   } catch (error) {
     console.error("鑾峰彇璇︽儏澶辫触:", error);
   }
 };
 
+// 椤甸潰鍔犺浇
 onLoad((options: any) => {
   paramsId.value = options.id;
   getDetailData(options.id, options.deviceType);
 });
 
+// 缂栬緫鍒囨崲
+const editList = () => {
+  isEdit.value = true;
+};
+
+// 鍙栨秷缂栬緫
+const close = () => {
+  isEdit.value = false;
+  tempFiles.value = [];
+  initFormData();
+};
+
+// 淇濆瓨缂栬緫
+const saveList = async () => {
+  // 鏍¢獙
+  if (!formData.maxDia) return uni.showToast({ title: "鏈�澶х洿寰勪负蹇呭~椤�", icon: "none" });
+  if (!formData.minDia) return uni.showToast({ title: "鏈�灏忕洿寰勪负蹇呭~椤�", icon: "none" });
+  if (!formData.appearance) return uni.showToast({ title: "澶栬涓哄繀濉」", icon: "none" });
+  if (!formData.windingTightness) return uni.showToast({ title: "鍗风粫绱у瘑涓哄繀濉」", icon: "none" });
+  if (!formData.arrangementNeatness)
+    return uni.showToast({ title: "鎺掑垪鏁撮綈涓哄繀濉」", icon: "none" });
+  if (!formData.aluminumWireDistance)
+    return uni.showToast({ title: "澶栧眰閾濈嚎绂讳晶鏉胯竟缂樿窛绂讳负蹇呭~椤�", icon: "none" });
+  if (!formData.jointCondition)
+    return uni.showToast({ title: "鎴愬搧妯″悗鎺ュご鎯呭喌涓哄繀濉」", icon: "none" });
+  if (!formData.conclusion) return uni.showToast({ title: "缁撹涓哄繀濉」", icon: "none" });
+  if (!formData.isFully) return uni.showToast({ title: "閾濇潌鏍峰搧鏄惁榻愬叏涓哄繀濉」", icon: "none" });
+  if (!deviceUid.value) return uni.showToast({ title: "璇锋壂鎻忎簩缁寸爜", icon: "none" });
+  // 鎻愪氦
+  try {
+    const res = await RoutingInspectionApi.drawPatrolCheckInspection({
+      deviceUid: deviceUid.value,
+      id: paramsId.value,
+      result: {
+        dia: formData.dia,
+        maxDia: formData.maxDia,
+        minDia: formData.minDia,
+        appearance: formData.appearance,
+        windingTightness: formData.windingTightness,
+        arrangementNeatness: formData.arrangementNeatness,
+        aluminumWireDistance: formData.aluminumWireDistance,
+        jointCondition: formData.jointCondition,
+        conclusion: formData.conclusion,
+      },
+      inspectionResult: { isFully: formData.isFully },
+      processInspectionAttachmentList: tempFiles.value.map((f) => f.url),
+    });
+    if (res.code === 200) {
+      uni.showToast({ title: "淇濆瓨鎴愬姛", icon: "success" });
+      isEdit.value = false;
+      getDetailData(paramsId.value, detailData.value.deviceType);
+    } else {
+      uni.showModal({ title: res.msg || "淇濆瓨澶辫触", icon: "error" });
+    }
+  } catch (e) {
+    console.error("淇濆瓨澶辫触:", e);
+    uni.showModal({ title: e.message || "淇濆瓨澶辫触", icon: "error" });
+  }
+};
+
+// 闄勪欢涓婁紶鏍¢獙
+const beforeUpload = (file: any) => {
+  const maxSize = 2 * 1024 * 1024;
+  if (file.size > maxSize) {
+    uni.showToast({ title: "鍥剧墖澶у皬涓嶈兘瓒呰繃2M", icon: "none" });
+    return false;
+  }
+  return true;
+};
+
+// 闄勪欢涓婁紶鎴愬姛
+const handleUploadSuccess = (res: any) => {
+  if (Array.isArray(res)) {
+    tempFiles.value = [
+      ...tempFiles.value,
+      ...res.map((file) => ({
+        ...file,
+        id: `temp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
+      })),
+    ];
+  } else {
+    tempFiles.value.push({
+      ...res,
+      id: `temp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
+    });
+  }
+};
+
+// 闄勪欢涓婁紶澶辫触
+const handleUploadFail = (err: any) => {
+  uni.showToast({ title: "闄勪欢涓婁紶澶辫触", icon: "error" });
+};
+
+// 鍒犻櫎闄勪欢
+const deleteFile = (index: number) => {
+  if (index >= detailData.value.files.length) {
+    tempFiles.value = tempFiles.value.filter(
+      (_, idx) => idx !== index - detailData.value.files.length
+    );
+  } else {
+    detailData.value.files = detailData.value.files.filter((_, idx) => idx !== index);
+  }
+};
+
+// 鍥剧墖棰勮
 const previewImage = (url: string) => {
   previewImageUrl.value = url;
   show.value = true;
@@ -285,54 +579,82 @@
   show.value = false;
 };
 
-// 缂栬緫鍒楄〃
-const editList = () => {};
-
-// 鍏抽棴
-const close = () => {};
-
-// 淇濆瓨鍒楄〃
-const saveList = async () => {
-  // try {
-  //   let response;
-  //   // 淇濆瓨鍒楄〃
-  //   response = await RoutingInspectionApi.saveStrandedInspectionStructureInfo({
-  //     id: paramsId.value,
-  //     structureInfo: recordData.value.structureInfo,
-  //   });
-  //   if (response.code === 200) {
-  //     uni.showToast({
-  //       title: "淇濆瓨鎴愬姛",
-  //       icon: "success",
-  //     });
-  //     // 鍒锋柊璇︽儏鏁版嵁
-  //     getDetailData(paramsId.value, recordData.value.deviceType);
-  //   } else {
-  //     uni.showToast({
-  //       title: response.msg || "淇濆瓨澶辫触",
-  //       icon: "error",
-  //     });
-  //   }
-  // } catch (error) {
-  //   console.error("淇濆瓨鍒楄〃澶辫触:", error);
-  //   uni.showToast({
-  //     title: "淇濆瓨澶辫触",
-  //     icon: "error",
-  //   });
-  // }
+const openScan = () => {
+  scanRef.value.triggerScan();
 };
-</script>
-<style lang="scss" scoped>
-.list {
-  height: calc(100vh - 80px);
-  padding: 12px;
-  background: #f3f9f8;
-
-  :deep() {
-    .round {
-      border-radius: 4px;
-    }
+const getScanCode = (params: any) => {
+  console.log("瀹屾暣鍙傛暟锛�", params);
+  let codeObj = {};
+  try {
+    codeObj = JSON.parse(params.code);
+  } catch (err) {
+    console.error("JSON瑙f瀽澶辫触锛�", err);
+    toast.error("鎵爜鏁版嵁寮傚父");
+    return; // 瑙f瀽澶辫触鐩存帴杩斿洖锛岄伩鍏嶅悗缁敊璇�
   }
+  deviceUid.value = codeObj?.uid;
+  toast.success("鎵爜鎴愬姛");
+};
+// 纭繚鍏堢Щ闄ゅ啀娣诲姞鐩戝惉
+const setupScanListener = () => {
+  uni.$off("scan", getScanCode); // 鍏堢Щ闄ゆ棫鐨�
+  uni.$on("scan", getScanCode); // 鍐嶆坊鍔犳柊鐨�
+};
+onUnmounted(() => {
+  // 寮�鍚箍鎾洃鍚簨浠�
+  uni.$off("scan", getScanCode);
+  console.log("绂诲紑1");
+});
+onMounted(() => {
+  // 寮�鍚箍鎾洃鍚簨浠�
+  setupScanListener();
+  console.log("鏄剧ず1");
+});
+</script>
+
+<style lang="scss" scoped>
+.fixed-header {
+  position: fixed;
+  top: 44;
+  left: 0;
+  right: 0;
+  background: #f3f9f8;
+  z-index: 999;
+  padding: 12px;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  min-height: 60px;
+  box-sizing: border-box;
+  overflow: visible;
+}
+
+.header-container {
+  display: flex;
+  align-items: center;
+  width: 100%;
+  gap: 10px;
+}
+
+.placeholder {
+  flex: 1;
+}
+
+.scan-wrapper {
+  width: 38px;
+  height: 38px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 6px;
+  flex-shrink: 0;
+}
+
+.list {
+  padding: 12px;
+  padding-top: 84px;
+  background: #f3f9f8;
+  min-height: 100vh;
+  box-sizing: border-box;
+  overflow-y: auto;
 }
 
 .title {
@@ -361,22 +683,79 @@
 .attachment-grid {
   display: flex;
   flex-wrap: wrap;
-  /* 瓒呭嚭鑷姩鎹㈣ */
   gap: 10px;
-  /* 鍥剧墖涔嬮棿鐨勯棿璺� */
   padding: 10px 0;
 }
 
 .attachment-item {
   width: calc(25% - 10px);
-  /* 姣忚4寮狅紝闂磋窛鐢眊ap鎺у埗锛岄渶璁$畻瀹藉害 */
+  box-sizing: border-box;
+  position: relative;
+}
+
+.upload-btn {
+  width: 80px;
+  height: 80px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border: 1px dashed #ccc;
+  border-radius: 4px;
   box-sizing: border-box;
 }
 
-/* 閫傞厤灏忓睆骞曪紝鍙皟鏁存瘡琛屾暟閲忥紙濡傛瘡琛�2寮狅級 */
+.upload-icon {
+  font-size: 32px;
+  color: #0d867f;
+}
+
+.delete-icon {
+  position: absolute;
+  top: -8px;
+  right: -8px;
+  width: 24px;
+  height: 24px;
+  background-color: rgba(255, 0, 0, 0.8);
+  color: white;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  z-index: 10;
+}
+
 @media (max-width: 768px) {
   .attachment-item {
     width: calc(25% - 10px);
+    margin: 10;
   }
 }
+
+:deep(.wd-form-item) {
+  margin-bottom: 8rpx;
+}
+
+:deep(.wd-input, .wd-select, .wd-radio-group, .wd-checkbox-group) {
+  width: 100%;
+  box-sizing: border-box;
+}
+
+:deep(.wd-form-item__label)::after {
+  content: "*";
+  color: red;
+  margin-left: 4rpx;
+}
+
+:deep(.wd-select) {
+  width: 100%;
+}
+
+:deep(.wd-checkbox) {
+  margin-right: 0;
+}
+.conclusion-radio-group {
+  display: flex;
+  align-items: flex-start; // 鍨傜洿鏂瑰悜椤堕儴瀵归綈锛堜笂绉诲叧閿級
+  gap: 20rpx; // 閫夐」涔嬮棿鐨勯棿璺�
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3