From a563ea879ef5fb6897e76d2df661e465dce2ab9b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 01 六月 2026 15:02:27 +0800
Subject: [PATCH] Merge branch 'dev_新疆_大罗素马铃薯new' of http://114.132.189.42:9002/r/product-inventory-management into dev_新疆_大罗素马铃薯new

---
 src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue |  456 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 276 insertions(+), 180 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
index ffa727e..9689be8 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
@@ -3,32 +3,44 @@
   <div class="approve-detail-panel">
     <div class="detail-block">
       <div class="detail-block-title">鍩烘湰淇℃伅</div>
-      <el-descriptions :column="2"
-                       border>
-        <el-descriptions-item label="涓氬姟鍗曞彿">{{ row.bizId || row.id || "鈥�" }}</el-descriptions-item>
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="涓氬姟鍗曞彿">{{
+          row.bizId || row.id || "鈥�"
+        }}</el-descriptions-item>
         <el-descriptions-item label="瀹℃壒鐘舵��">
-          <el-tag :type="approvalStatusTagType(row.approvalStatus)"
-                  size="small"
-                  effect="plain">
+          <el-tag
+            :type="approvalStatusTagType(row.approvalStatus)"
+            size="small"
+            effect="plain"
+          >
             {{ approvalStatusLabel(row.approvalStatus) }}
           </el-tag>
         </el-descriptions-item>
         <el-descriptions-item label="瀹℃壒绫诲瀷">
-          <span class="approve-type-cell"
-                :style="approvalTypeStyle(row.approvalType)">
+          <span
+            class="approve-type-cell"
+            :style="approvalTypeStyle(row.approvalType)"
+          >
             {{ approvalTypeLabel(row.approvalType) }}
           </span>
         </el-descriptions-item>
-        <el-descriptions-item label="鐢宠浜虹紪鍙�">{{ row.applicantNo || "鈥�" }}</el-descriptions-item>
-        <el-descriptions-item label="鐢宠浜哄悕绉�">{{ row.applicantName || "鈥�" }}</el-descriptions-item>
-        <el-descriptions-item label="鐢宠鎽樿">{{ row.summary || "鈥�" }}</el-descriptions-item>
-        <el-descriptions-item v-if="row.rejectReason"
-                              label="椹冲洖鍘熷洜"
-                              :span="2">
+        <el-descriptions-item label="鐢宠浜虹紪鍙�">{{
+          row.applicantNo || "鈥�"
+        }}</el-descriptions-item>
+        <el-descriptions-item label="鐢宠浜哄悕绉�">{{
+          row.applicantName || "鈥�"
+        }}</el-descriptions-item>
+        <el-descriptions-item label="鐢宠鎽樿">{{
+          row.summary || "鈥�"
+        }}</el-descriptions-item>
+        <el-descriptions-item
+          v-if="row.rejectReason"
+          label="椹冲洖鍘熷洜"
+          :span="2"
+        >
           <span class="reject-text">{{ row.rejectReason }}</span>
         </el-descriptions-item>
-        <el-descriptions-item label="鍒涘缓鏃堕棿"
-                              :span="2">
+        <el-descriptions-item label="鍒涘缓鏃堕棿" :span="2">
           {{ formatDisplayTime(row.createTime) }}
         </el-descriptions-item>
       </el-descriptions>
@@ -36,141 +48,226 @@
     <div class="detail-block">
       <div class="detail-block-title">濉姤鍐呭</div>
       <!-- 榛樿琛ㄥ崟灞曠ず -->
-      <FormPayloadFields v-if="!isSpecialApprovalType"
-                         :fields="formResolved.fields"
-                         :form-payload="formResolved.formPayload"
-                         readonly />
-      
+      <FormPayloadFields
+        v-if="!isSpecialApprovalType"
+        :fields="formResolved.fields"
+        :form-payload="formResolved.formPayload"
+        readonly
+      />
+
       <!-- 鍙戣揣瀹℃壒璇︽儏 -->
       <template v-else-if="row.businessType === 7">
         <div v-if="detailData.shippingInfo" class="shipment-detail">
           <el-divider content-position="left">鍙戣揣璇︽儏</el-divider>
           <el-descriptions :column="2" border>
-            <el-descriptions-item label="閿�鍞鍗�">{{ detailData.shippingInfo.salesContractNo || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="鍙戣揣璁㈠崟鍙�">{{ detailData.shippingInfo.shippingNo || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ detailData.shippingInfo.customerName || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="鍙戣揣绫诲瀷">{{ detailData.shippingInfo.type || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="鍙戣揣鏃ユ湡">{{ detailData.shippingInfo.shippingDateDate || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="瀹℃牳鐘舵��">{{ detailData.shippingInfo.status || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="鍙戣揣杞︾墝鍙�">{{ detailData.shippingInfo.shippingCarNumber || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="蹇�掑叕鍙�">{{ detailData.shippingInfo.expressCompany || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="蹇�掑崟鍙�" :span="2">{{ detailData.shippingInfo.expressNumber || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="閿�鍞鍗�">{{
+              detailData.shippingInfo.salesContractNo || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="鍑哄簱鎵瑰彿">{{
+              detailData.shippingInfo.outboundBatches || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="瀹㈡埛鍚嶇О">{{
+              detailData.shippingInfo.customerName || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣绫诲瀷">{{
+              detailData.shippingInfo.type || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣鏃ユ湡">{{
+              detailData.shippingInfo.shippingDateDate || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="瀹℃牳鐘舵��">{{
+              detailData.shippingInfo.status || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣杞︾墝鍙�">{{
+              detailData.shippingInfo.shippingCarNumber || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="蹇�掑叕鍙�">{{
+              detailData.shippingInfo.expressCompany || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="蹇�掑崟鍙�" :span="2">{{
+              detailData.shippingInfo.expressNumber || "--"
+            }}</el-descriptions-item>
           </el-descriptions>
-          <div v-if="detailData.shippingProductDetailDtoList.length" style="margin-top: 20px;">
+          <div
+            v-if="detailData.shippingProductDetailDtoList.length"
+            style="margin-top: 20px"
+          >
             <h4>浜у搧鏄庣粏</h4>
-            <el-table :data="detailData.shippingProductDetailDtoList"
-                      border
-                      size="small"
-                      style="width: 100%">
-              <el-table-column label="鎵瑰彿" prop="batchNo" min-width="160" show-overflow-tooltip />
-              <el-table-column label="浜у搧鍚嶇О" prop="productName" min-width="160" show-overflow-tooltip />
-              <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" min-width="160" show-overflow-tooltip />
-              <el-table-column label="鍙戣揣鏁伴噺" prop="deliveryQuantity" min-width="120" align="center" />
+            <el-table
+              :data="detailData.shippingProductDetailDtoList"
+              border
+              size="small"
+              style="width: 100%"
+            >
+              <el-table-column
+                label="鎵瑰彿"
+                prop="batchNo"
+                min-width="160"
+                show-overflow-tooltip
+              />
+              <el-table-column
+                label="浜у搧鍚嶇О"
+                prop="productName"
+                min-width="160"
+                show-overflow-tooltip
+              />
+              <el-table-column
+                label="瑙勬牸鍨嬪彿"
+                prop="specificationModel"
+                min-width="160"
+                show-overflow-tooltip
+              />
+              <el-table-column
+                label="鍙戣揣鏁伴噺"
+                prop="deliveryQuantity"
+                min-width="120"
+                align="center"
+              />
             </el-table>
           </div>
         </div>
       </template>
-      
+
       <!-- 閲囪喘瀹℃壒璇︽儏 -->
       <template v-else-if="row.businessType === 5">
         <div v-if="detailData" class="procurement-detail">
           <el-divider content-position="left">閲囪喘璇︽儏</el-divider>
           <el-descriptions :column="2" border>
-            <el-descriptions-item label="閲囪喘鍚堝悓鍙�">{{ detailData.purchaseContractNumber || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="渚涘簲鍟嗗悕绉�">{{ detailData.supplierName || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="椤圭洰鍚嶇О">{{ detailData.projectName || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="閿�鍞悎鍚屽彿">{{ detailData.salesContractNo || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="绛捐鏃ユ湡">{{ detailData.executionDate || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="褰曞叆鏃ユ湡">{{ detailData.entryDate || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="浠樻鏂瑰紡">{{ detailData.paymentMethod || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="閲囪喘鍚堝悓鍙�">{{
+              detailData.purchaseContractNumber || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="渚涘簲鍟嗗悕绉�">{{
+              detailData.supplierName || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="椤圭洰鍚嶇О">{{
+              detailData.projectName || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="閿�鍞悎鍚屽彿">{{
+              detailData.salesContractNo || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="绛捐鏃ユ湡">{{
+              detailData.executionDate || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="褰曞叆鏃ユ湡">{{
+              detailData.entryDate || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="浠樻鏂瑰紡">{{
+              detailData.paymentMethod || "--"
+            }}</el-descriptions-item>
             <el-descriptions-item label="鍚堝悓閲戦" :span="2">
-              <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">
+              <span style="font-size: 18px; color: #e6a23c; font-weight: bold">
                 楼{{ Number(detailData.contractAmount ?? 0).toFixed(2) }}
               </span>
             </el-descriptions-item>
           </el-descriptions>
-          <div v-if="detailData.productData.length" style="margin-top: 20px;">
+          <div v-if="detailData.productData.length" style="margin-top: 20px">
             <h4>浜у搧鏄庣粏</h4>
-            <el-table :data="detailData.productData"
-                      border
-                      style="width: 100%">
+            <el-table :data="detailData.productData" border style="width: 100%">
               <el-table-column prop="productCategory" label="浜у搧鍚嶇О" />
               <el-table-column prop="specificationModel" label="瑙勬牸鍨嬪彿" />
               <el-table-column prop="unit" label="鍗曚綅" />
               <el-table-column prop="quantity" label="鏁伴噺" />
               <el-table-column prop="taxInclusiveUnitPrice" label="鍚◣鍗曚环">
-                <template #default="scope">楼{{ Number(scope.row.taxInclusiveUnitPrice ?? 0).toFixed(2) }}</template>
+                <template #default="scope"
+                  >楼{{
+                    Number(scope.row.taxInclusiveUnitPrice ?? 0).toFixed(2)
+                  }}</template
+                >
               </el-table-column>
               <el-table-column prop="taxInclusiveTotalPrice" label="鍚◣鎬讳环">
-                <template #default="scope">楼{{ Number(scope.row.taxInclusiveTotalPrice ?? 0).toFixed(2) }}</template>
+                <template #default="scope"
+                  >楼{{
+                    Number(scope.row.taxInclusiveTotalPrice ?? 0).toFixed(2)
+                  }}</template
+                >
               </el-table-column>
             </el-table>
           </div>
         </div>
       </template>
-      
+
       <!-- 鎶ヤ环瀹℃壒璇︽儏 -->
       <template v-else-if="row.businessType === 6">
         <div v-if="detailData" class="quotation-detail">
           <el-divider content-position="left">鎶ヤ环璇︽儏</el-divider>
           <el-descriptions :column="2" border>
-            <el-descriptions-item label="鎶ヤ环鍗曞彿">{{ detailData.quotationNo || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ detailData.customer || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="涓氬姟鍛�">{{ detailData.salesperson || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="鎶ヤ环鏃ユ湡">{{ detailData.quotationDate || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="鏈夋晥鏈熻嚦">{{ detailData.validDate || "--" }}</el-descriptions-item>
-            <el-descriptions-item label="浠樻鏂瑰紡">{{ detailData.paymentMethod || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鎶ヤ环鍗曞彿">{{
+              detailData.quotationNo || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="瀹㈡埛鍚嶇О">{{
+              detailData.customer || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="涓氬姟鍛�">{{
+              detailData.salesperson || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="鎶ヤ环鏃ユ湡">{{
+              detailData.quotationDate || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="鏈夋晥鏈熻嚦">{{
+              detailData.validDate || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="浠樻鏂瑰紡">{{
+              detailData.paymentMethod || "--"
+            }}</el-descriptions-item>
             <el-descriptions-item label="鎶ヤ环鎬婚" :span="2">
-              <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">
+              <span style="font-size: 18px; color: #e6a23c; font-weight: bold">
                 楼{{ Number(detailData.totalAmount ?? 0).toFixed(2) }}
               </span>
             </el-descriptions-item>
           </el-descriptions>
-          <div v-if="detailData.products?.length" style="margin-top: 20px;">
+          <div v-if="detailData.products?.length" style="margin-top: 20px">
             <h4>浜у搧鏄庣粏</h4>
-            <el-table :data="detailData.products"
-                      border
-                      style="width: 100%">
+            <el-table :data="detailData.products" border style="width: 100%">
               <el-table-column prop="product" label="浜у搧鍚嶇О" />
               <el-table-column prop="specification" label="瑙勬牸鍨嬪彿" />
               <el-table-column prop="unit" label="鍗曚綅" />
               <el-table-column prop="unitPrice" label="鍗曚环">
-                <template #default="scope">楼{{ Number(scope.row.unitPrice ?? 0).toFixed(2) }}</template>
+                <template #default="scope"
+                  >楼{{ Number(scope.row.unitPrice ?? 0).toFixed(2) }}</template
+                >
               </el-table-column>
             </el-table>
           </div>
-          <div v-if="detailData.remark" style="margin-top: 20px;">
+          <div v-if="detailData.remark" style="margin-top: 20px">
             <h4>澶囨敞</h4>
             <p>{{ detailData.remark }}</p>
           </div>
         </div>
       </template>
     </div>
-    <div v-if="attachmentList.length"
-         class="detail-block">
+    <div v-if="attachmentList.length" class="detail-block">
       <div class="detail-block-title">闄勪欢鍒楄〃</div>
       <div class="attachment-list">
-        <div v-for="file in attachmentList"
-             :key="file.id"
-             class="attachment-item">
+        <div
+          v-for="file in attachmentList"
+          :key="file.id"
+          class="attachment-item"
+        >
           <el-icon class="file-icon">
             <Paperclip />
           </el-icon>
-          <span class="file-name"
-                :title="file.name || file.originalFilename">
+          <span class="file-name" :title="file.name || file.originalFilename">
             {{ file.name || file.originalFilename }}
           </span>
           <div class="file-actions">
-            <el-link v-if="file.previewURL || file.url"
-                     type="primary"
-                     :underline="false"
-                     @click="openFile(file.previewURL || file.url)">棰勮</el-link>
-            <el-divider v-if="(file.previewURL || file.url) && file.downloadURL"
-                        direction="vertical" />
-            <el-link v-if="file.downloadURL"
-                     type="primary"
-                     :underline="false"
-                     @click="openFile(file.downloadURL)">涓嬭浇</el-link>
+            <el-link
+              v-if="file.previewURL || file.url"
+              type="primary"
+              :underline="false"
+              @click="openFile(file.previewURL || file.url)"
+              >棰勮</el-link
+            >
+            <el-divider
+              v-if="(file.previewURL || file.url) && file.downloadURL"
+              direction="vertical"
+            />
+            <el-link
+              v-if="file.downloadURL"
+              type="primary"
+              :underline="false"
+              @click="openFile(file.downloadURL)"
+              >涓嬭浇</el-link
+            >
           </div>
         </div>
       </div>
@@ -179,108 +276,107 @@
 </template>
 
 <script setup>
-  import { computed } from "vue";
-  import { Paperclip } from "@element-plus/icons-vue";
-  import { formatDisplayTime } from "../../approve-template/approveTemplateConstants.js";
-  import {
-    approvalTypeLabel,
-    approvalTypeStyle,
-    approvalStatusLabel,
-    approvalStatusTagType,
-    resolveInstanceFormFields,
-  } from "../approveListConstants.js";
-  import FormPayloadFields from "./FormPayloadFields.vue";
+import { computed } from "vue";
+import { Paperclip } from "@element-plus/icons-vue";
+import { formatDisplayTime } from "../../approve-template/approveTemplateConstants.js";
+import {
+  approvalTypeLabel,
+  approvalTypeStyle,
+  approvalStatusLabel,
+  approvalStatusTagType,
+  resolveInstanceFormFields,
+} from "../approveListConstants.js";
+import FormPayloadFields from "./FormPayloadFields.vue";
 
-  const props = defineProps({
-    row: { type: Object, default: () => ({}) },
-    detailData: { type: Object, default: () => ({}) },
-  });
+const props = defineProps({
+  row: { type: Object, default: () => ({}) },
+  detailData: { type: Object, default: () => ({}) },
+});
 
-  const formResolved = computed(() => resolveInstanceFormFields(props.row));
+const formResolved = computed(() => resolveInstanceFormFields(props.row));
 
+// 鏄惁涓虹壒娈婂鎵圭被鍨嬶紙閲囪喘銆佸彂璐с�佹姤浠凤級
+const isSpecialApprovalType = computed(() => {
+  return [5, 7, 6].includes(props.row.businessType);
+});
 
-  // 鏄惁涓虹壒娈婂鎵圭被鍨嬶紙閲囪喘銆佸彂璐с�佹姤浠凤級
-  const isSpecialApprovalType = computed(() => {
-    return [5, 7, 6].includes(props.row.businessType);
-  });
+// 璇︽儏鏁版嵁锛堢洿鎺ヤ娇鐢ㄤ紶鍏ョ殑 detail-data 鍙傛暟锛�
+const detailData = computed(() => {
+  return props.detailData || {};
+});
 
-  // 璇︽儏鏁版嵁锛堢洿鎺ヤ娇鐢ㄤ紶鍏ョ殑 detail-data 鍙傛暟锛�
-  const detailData = computed(() => {
-    return props.detailData || {};
-  });
+const attachmentList = computed(() => {
+  const list = props.row.storageBlobVOList || props.row.storageBlobDTOs || [];
+  return Array.isArray(list) ? list : [];
+});
 
-  const attachmentList = computed(() => {
-    const list = props.row.storageBlobVOList || props.row.storageBlobDTOs || [];
-    return Array.isArray(list) ? list : [];
-  });
-
-  function openFile(url) {
-    if (!url) return;
-    window.open(url, "_blank");
-  }
+function openFile(url) {
+  if (!url) return;
+  window.open(url, "_blank");
+}
 </script>
 
 <style scoped>
-  .approve-detail-panel {
-    display: flex;
-    flex-direction: column;
-    gap: 20px;
-  }
-  .detail-block-title {
-    font-size: 14px;
-    font-weight: 600;
-    color: var(--el-text-color-primary);
-    margin: 0 0 12px;
-    padding-left: 10px;
-    border-left: 3px solid var(--el-color-primary);
-    line-height: 1.4;
-  }
-  .approve-type-cell {
-    display: inline-block;
-    padding: 2px 10px;
-    border-radius: 4px;
-    font-size: 13px;
-    line-height: 1.5;
-  }
-  .reject-text {
-    color: var(--el-color-danger);
-  }
+.approve-detail-panel {
+  display: flex;
+  flex-direction: column;
+  gap: 20px;
+}
+.detail-block-title {
+  font-size: 14px;
+  font-weight: 600;
+  color: var(--el-text-color-primary);
+  margin: 0 0 12px;
+  padding-left: 10px;
+  border-left: 3px solid var(--el-color-primary);
+  line-height: 1.4;
+}
+.approve-type-cell {
+  display: inline-block;
+  padding: 2px 10px;
+  border-radius: 4px;
+  font-size: 13px;
+  line-height: 1.5;
+}
+.reject-text {
+  color: var(--el-color-danger);
+}
 
-  .attachment-list {
-    display: grid;
-    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
-    gap: 12px;
-  }
-  .attachment-item {
-    display: flex;
-    align-items: center;
-    padding: 10px 12px;
-    background-color: var(--el-fill-color-light);
-    border-radius: 6px;
-    border: 1px solid var(--el-border-color-lighter);
-    transition: all 0.3s;
-  }
-  .attachment-item:hover {
-    border-color: var(--el-color-primary-light-5);
-    background-color: var(--el-color-primary-light-9);
-  }
-  .file-icon {
-    font-size: 18px;
-    color: var(--el-text-color-secondary);
-    margin-right: 10px;
-  }
-  .file-name {
-    flex: 1;
-    font-size: 13px;
-    color: var(--el-text-color-primary);
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    margin-right: 12px;
-  }
-  .file-actions {
-    display: flex;
-    align-items: center;
-    flex-shrink: 0;
-  }
-</style>
\ No newline at end of file
+.attachment-list {
+  display: grid;
+  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
+  gap: 12px;
+}
+.attachment-item {
+  display: flex;
+  align-items: center;
+  padding: 10px 12px;
+  background-color: var(--el-fill-color-light);
+  border-radius: 6px;
+  border: 1px solid var(--el-border-color-lighter);
+  transition: all 0.3s;
+}
+.attachment-item:hover {
+  border-color: var(--el-color-primary-light-5);
+  background-color: var(--el-color-primary-light-9);
+}
+.file-icon {
+  font-size: 18px;
+  color: var(--el-text-color-secondary);
+  margin-right: 10px;
+}
+.file-name {
+  flex: 1;
+  font-size: 13px;
+  color: var(--el-text-color-primary);
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  margin-right: 12px;
+}
+.file-actions {
+  display: flex;
+  align-items: center;
+  flex-shrink: 0;
+}
+</style>

--
Gitblit v1.9.3