From ac09706b8eb2315b444f4ee8837de47747a6ea43 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期六, 23 五月 2026 14:15:38 +0800
Subject: [PATCH] 合并河南鹤壁问题 1、客户往来没有合同金额 2、销售台账需要详情按钮查看 3、主生产计划,统一居左展示。把销售合同号移到前面展示而不是往后拉才可以看到 4、设备报修-只需要展示关键数据。新增一个详情按钮,其他数据在详情里查看 5、计量器台账-应该是叫编辑而不是查看 6、设备巡检tab页更名、表格无法拖拉问题 7、任务管理不需要巡检结果 8、	反馈登记-问题描述修改为客户诉求

---
 src/views/customerService/feedbackRegistration/components/formDia.vue |    4 
 src/views/equipmentManagement/measurementEquipment/index.vue          |  630 ++++++-----
 src/views/customerService/feedbackRegistration/index.vue              |  825 ++++++++--------
 src/views/equipmentManagement/repair/Modal/RepairModal.vue            |  332 +++--
 src/views/equipmentManagement/repair/index.vue                        |  506 ++++-----
 src/views/productionPlan/productionPlan/index.vue                     |   16 
 src/views/salesManagement/receiptPaymentLedger/index.vue              |    6 
 src/views/salesManagement/salesLedger/index.vue                       |  565 +++++-----
 src/views/equipmentManagement/inspectionManagement/index.vue          |   67 
 src/components/Dialog/FormDialog.vue                                  |    2 
 10 files changed, 1,502 insertions(+), 1,451 deletions(-)

diff --git a/src/components/Dialog/FormDialog.vue b/src/components/Dialog/FormDialog.vue
index 8b657de..b60bfb4 100644
--- a/src/components/Dialog/FormDialog.vue
+++ b/src/components/Dialog/FormDialog.vue
@@ -55,7 +55,7 @@
 })
 
 // 璇︽儏妯″紡涓嶅睍绀衡�滅‘璁も�濇寜閽紝鍏跺畠绫诲瀷姝e父鏄剧ず
-const showConfirm = computed(() => props.operationType !== 'detail')
+const showConfirm = computed(() => props.operationType !== 'detail' && props.operationType !== 'view')
 
 const computedTitle = computed(() => {
   if (typeof props.title === 'function') {
diff --git a/src/views/customerService/feedbackRegistration/components/formDia.vue b/src/views/customerService/feedbackRegistration/components/formDia.vue
index 790ddbe..fd3091e 100644
--- a/src/views/customerService/feedbackRegistration/components/formDia.vue
+++ b/src/views/customerService/feedbackRegistration/components/formDia.vue
@@ -63,10 +63,10 @@
               </el-form-item>
             </el-col>
             <el-col :span="4">
-              <el-form-item label="闂鎻忚堪锛�"
+              <el-form-item label="瀹㈡埛璇夋眰锛�"
                             prop="proDesc">
                 <el-input v-model="form.proDesc"
-                          placeholder="璇疯緭鍏ラ棶棰樻弿杩�" />
+                          placeholder="璇疯緭鍏ュ鎴疯瘔姹�" />
               </el-form-item>
             </el-col>
           </el-row>
diff --git a/src/views/customerService/feedbackRegistration/index.vue b/src/views/customerService/feedbackRegistration/index.vue
index 40d99be..1e57bdb 100644
--- a/src/views/customerService/feedbackRegistration/index.vue
+++ b/src/views/customerService/feedbackRegistration/index.vue
@@ -1,13 +1,13 @@
 <template>
   <div class="app-container">
     <div class="workorder-stats">
-      <div
-          v-for="(item, index) in statsList"
-          :key="index"
-          class="stat-card"
-      >
-        <div class="stat-icon" :style="{ backgroundColor: item.bgColor }">
-          <el-icon :color="item.color" :size="20">
+      <div v-for="(item, index) in statsList"
+           :key="index"
+           class="stat-card">
+        <div class="stat-icon"
+             :style="{ backgroundColor: item.bgColor }">
+          <el-icon :color="item.color"
+                   :size="20">
             <component :is="item.icon" />
           </el-icon>
         </div>
@@ -18,84 +18,64 @@
       </div>
     </div>
     <div class="search-wrapper">
-      <el-form
-          :model="searchForm"
-          class="demo-form-inline"
-      >
+      <el-form :model="searchForm"
+               class="demo-form-inline">
         <el-row :gutter="20">
           <el-col :span="4">
             <el-form-item>
-              <el-input
-                  v-model="searchForm.afterSalesServiceNo"
-                  placeholder="璇疯緭鍏ュ伐鍗曠紪鍙�"
-                  clearable
-              />
+              <el-input v-model="searchForm.afterSalesServiceNo"
+                        placeholder="璇疯緭鍏ュ伐鍗曠紪鍙�"
+                        clearable />
             </el-form-item>
           </el-col>
           <el-col :span="4">
             <el-form-item>
-              <el-select
-                  v-model="searchForm.status"
-                  placeholder="璇烽�夋嫨宸ュ崟鐘舵��"
-                  clearable
-              >
-                <el-option
-                    v-for="dict in workOrderStatusOptions"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                />
+              <el-select v-model="searchForm.status"
+                         placeholder="璇烽�夋嫨宸ュ崟鐘舵��"
+                         clearable>
+                <el-option v-for="dict in workOrderStatusOptions"
+                           :key="dict.value"
+                           :label="dict.label"
+                           :value="dict.value" />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="4">
             <el-form-item>
-              <el-select
-                  v-model="searchForm.urgency"
-                  placeholder="璇烽�夋嫨绱ф�ョ▼搴�"
-                  clearable
-              >
-                <el-option
-                    v-for="dict in degreeOfUrgencyOptions"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                />
+              <el-select v-model="searchForm.urgency"
+                         placeholder="璇烽�夋嫨绱ф�ョ▼搴�"
+                         clearable>
+                <el-option v-for="dict in degreeOfUrgencyOptions"
+                           :key="dict.value"
+                           :label="dict.label"
+                           :value="dict.value" />
               </el-select>
             </el-form-item>
           </el-col>
-           <el-col :span="4">
+          <el-col :span="4">
             <el-form-item>
-              <el-select
-                  v-model="searchForm.serviceType"
-                  placeholder="璇烽�夋嫨鍞悗绫诲瀷"
-                  clearable
-              >
-                <el-option
-                    v-for="dict in classificationOptions"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                />
+              <el-select v-model="searchForm.serviceType"
+                         placeholder="璇烽�夋嫨鍞悗绫诲瀷"
+                         clearable>
+                <el-option v-for="dict in classificationOptions"
+                           :key="dict.value"
+                           :label="dict.label"
+                           :value="dict.value" />
               </el-select>
             </el-form-item>
           </el-col>
-            <el-col :span="4">
-              <el-form-item>
-                <el-input
-                    v-model="searchForm.orderNo"
-                    placeholder="璇疯緭鍏ラ攢鍞崟鍙�"
-                    clearable
-                />
-              </el-form-item>
-            </el-col>
-          
-          
-
+          <el-col :span="4">
+            <el-form-item>
+              <el-input v-model="searchForm.orderNo"
+                        placeholder="璇疯緭鍏ラ攢鍞崟鍙�"
+                        clearable />
+            </el-form-item>
+          </el-col>
           <!-- 鎸夐挳 -->
           <el-col :span="4">
             <el-form-item>
-              <el-button type="primary" @click="handleQuery">
+              <el-button type="primary"
+                         @click="handleQuery">
                 鎼滅储
               </el-button>
               <el-button @click="handleReset">
@@ -107,310 +87,340 @@
       </el-form>
     </div>
     <div class="table_list">
-      <div class="table_header" style="display: flex; justify-content: space-between; align-items: center;">
+      <div class="table_header"
+           style="display: flex; justify-content: space-between; align-items: center;">
         <div>
-          <el-button type="primary" @click="openForm('add')">鏂板鍞悗鍗�</el-button>
+          <el-button type="primary"
+                     @click="openForm('add')">鏂板鍞悗鍗�</el-button>
         </div>
         <div>
           <el-button @click="handleOut">瀵煎嚭</el-button>
-          <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
+          <el-button type="danger"
+                     plain
+                     @click="handleDelete">鍒犻櫎</el-button>
         </div>
       </div>
-      <PIMTable
-          rowKey="id"
-          :column="tableColumn"
-          :tableData="tableData"
-          :page="page"
-          :height="tableHeight"
-          :isSelection="true"
-          @selection-change="handleSelectionChange"
-          :tableLoading="tableLoading"
-          @pagination="pagination"
-      ></PIMTable>
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :height="tableHeight"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"></PIMTable>
     </div>
-    <form-dia ref="formDia" @close="handleQuery"></form-dia>
+    <form-dia ref="formDia"
+              @close="handleQuery"></form-dia>
   </div>
 </template>
 
 <script setup>
-import {onMounted, reactive, ref, toRefs, computed, getCurrentInstance, nextTick} from "vue";
-import FormDia from "@/views/customerService/feedbackRegistration/components/formDia.vue";
-import {ElMessageBox} from "element-plus";
-import {afterSalesServiceDelete, afterSalesServiceListPage, getSalesLedgerDetail} from "@/api/customerService/index.js";
-import useUserStore from "@/store/modules/user.js";
-const { proxy } = getCurrentInstance();
-const userStore = useUserStore()
-import { Document, FolderOpened, UserFilled } from "@element-plus/icons-vue"
-import { markRaw } from 'vue'
+  import {
+    onMounted,
+    reactive,
+    ref,
+    toRefs,
+    computed,
+    getCurrentInstance,
+    nextTick,
+  } from "vue";
+  import FormDia from "@/views/customerService/feedbackRegistration/components/formDia.vue";
+  import { ElMessageBox } from "element-plus";
+  import {
+    afterSalesServiceDelete,
+    afterSalesServiceListPage,
+    getSalesLedgerDetail,
+  } from "@/api/customerService/index.js";
+  import useUserStore from "@/store/modules/user.js";
+  const { proxy } = getCurrentInstance();
+  const userStore = useUserStore();
+  import { Document, FolderOpened, UserFilled } from "@element-plus/icons-vue";
+  import { markRaw } from "vue";
 
-const statsList = ref([
-  {
-    icon: markRaw(Document),
-    count: 0,
-    label: '鍏ㄩ儴宸ュ崟',
-    color: '#4080ff',
-    bgColor: '#eaf2ff'
-  },
-  {
-    icon: markRaw(FolderOpened),
-    count: 0,
-    label: '宸插鐞�',
-    color: '#ff9a2e',
-    bgColor: '#fff5e6'
-  },
-  {
-    icon: markRaw(UserFilled),
-    count: 0,
-    label: '宸插畬鎴�',
-    color: '#00b42a',
-    bgColor: '#e6f7ed'
-  },
-])
-
-const data = reactive({
-  searchForm : {
-    customerName: "",
-    status: "",
-    urgency: "",
-    serviceType: "",
-    reviewStatus: "",
-    orderNo: "",
-  }
-});
-const { searchForm } = toRefs(data);
-
-const tableColumn = ref([
-  {
-    label: "宸ュ崟缂栧彿",
-    prop:"afterSalesServiceNo",
-    width: 150,
-    align: "center"
-  },
-  {
-    label: "閿�鍞崟鍙�",
-    prop:"salesContractNo",
-    width: 150,
-    align: "center"
-  },
-  {
-    label: "澶勭悊鐘舵��",
-    prop: "status",
-    dataType: "tag",
-    
-    formatData: (params) => {
-      if (params) {
-        let part = String(params)
-        const item = workOrderStatusOptions.value.find(item => item.value === part);
-        return item?.label || params; 
-      }
-      return null;
+  const statsList = ref([
+    {
+      icon: markRaw(Document),
+      count: 0,
+      label: "鍏ㄩ儴宸ュ崟",
+      color: "#4080ff",
+      bgColor: "#eaf2ff",
     },
-    formatType: (params) => {
-      if (params === 1) {
-        return "danger";
-      } else if (params === 2) {
-        return "success";
-      } else {
+    {
+      icon: markRaw(FolderOpened),
+      count: 0,
+      label: "宸插鐞�",
+      color: "#ff9a2e",
+      bgColor: "#fff5e6",
+    },
+    {
+      icon: markRaw(UserFilled),
+      count: 0,
+      label: "宸插畬鎴�",
+      color: "#00b42a",
+      bgColor: "#e6f7ed",
+    },
+  ]);
+
+  const data = reactive({
+    searchForm: {
+      customerName: "",
+      status: "",
+      urgency: "",
+      serviceType: "",
+      reviewStatus: "",
+      orderNo: "",
+    },
+  });
+  const { searchForm } = toRefs(data);
+
+  const tableColumn = ref([
+    {
+      label: "宸ュ崟缂栧彿",
+      prop: "afterSalesServiceNo",
+      width: 150,
+      align: "center",
+    },
+    {
+      label: "閿�鍞崟鍙�",
+      prop: "salesContractNo",
+      width: 150,
+      align: "center",
+    },
+    {
+      label: "澶勭悊鐘舵��",
+      prop: "status",
+      dataType: "tag",
+
+      formatData: params => {
+        if (params) {
+          let part = String(params);
+          const item = workOrderStatusOptions.value.find(
+            item => item.value === part
+          );
+          return item?.label || params;
+        }
         return null;
-      }
-    },
-    align: "center"
-  },
-  {
-    label: "鍙嶉鏃ユ湡",
-    prop: "feedbackDate",
-    width: 150,
-    align: "center"
-  },
-  {
-    label: "鐧昏浜�",
-    prop: "checkNickName",
-    align: "center"
-  },
-  {
-    label: "绱ф�ョ▼搴�",
-    prop: "urgency",
-    // 鏍规嵁degreeOfUrgencyOptions瀛楀吀鍘昏嚜鍔ㄥ尮閰�
-    formatData: (params) => {
-      if (params) {
-        const item = degreeOfUrgencyOptions.value.find(item => item.value === params);
-        return item?.label || params;
-      }
-      return null;
-    },
-    align: "center"
-  },
-  {
-    label: "鍞悗绫诲瀷",
-    prop: "serviceType",
-    // 鏍规嵁classificationOptions瀛楀吀鍘昏嚜鍔ㄥ尮閰�
-    formatData: (params) => {
-      if (params) {
-        const item = classificationOptions.value.find(item => item.value === params);
-        return item?.label || params;
-      }
-      return null;
-    },
-    align: "center"
-  },
-  {
-    label: "闂鎻忚堪",
-    prop: "proDesc",
-    width:300,
-  },
-  {
-    label: "鍏宠仈閮ㄩ棬",
-    prop: "deptName",
-    width: 200,
-    align: "center"
-  },
-  {
-    dataType: "action",
-    label: "鎿嶄綔",
-    fixed: 'right',
-    operation: [
-      {
-        name: "缂栬緫",
-        type: "text",
-        clickFun: (row) => {
-          console.log(row)
-          openForm("edit", row);
-        },
-        disabled: (row) => {
-          return row.status !== 1
+      },
+      formatType: params => {
+        if (params === 1) {
+          return "danger";
+        } else if (params === 2) {
+          return "success";
+        } else {
+          return null;
         }
       },
-    ],
-    align: "center"
-  },
-]);
-const tableData = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
-  current: 1,
-  size: 100,
-  total: 0,
-});
-const selectedRows = ref([]);
-const tableHeight = computed(() => "calc(100% -80px)");
-
-const handleReset = () => {
-  Object.keys(searchForm.value).forEach(key => {
-    searchForm.value[key] = ""
-  })
-  page.current = 1;
-  getList();
-}
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
-const formDia = ref()
-
-// 瀛楀吀鑾峰彇
-/* 
-post_sale_waiting_list 鏂板鐨勫敭鍚庡垎绫�
-degree_of_urgency 鏂板鐨勭揣鎬ョ▼搴�
-work_order_status 涓婚〉鐨勫伐鍗曠姸鎬�
-review_status 棣栭〉鐨勫鏍哥姸鎬�
-*/
-const { post_sale_waiting_list, degree_of_urgency, work_order_status, review_status } = proxy.useDict(
-  "post_sale_waiting_list",
-  "degree_of_urgency",
-  "work_order_status",
-  "review_status"
-);
-
-const classificationOptions = computed(() => post_sale_waiting_list?.value || []);
-const degreeOfUrgencyOptions = computed(() => degree_of_urgency?.value || []);
-const workOrderStatusOptions = computed(() => work_order_status?.value || []);
-
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-const pagination = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  getSalesLedgerDetails()
-  afterSalesServiceListPage({ ...searchForm.value, ...page }).then((res) => {
-    tableLoading.value = false;
-    tableData.value = res.data.records;
-    page.total = res.data.total;
+      align: "center",
+    },
+    {
+      label: "鍙嶉鏃ユ湡",
+      prop: "feedbackDate",
+      width: 150,
+      align: "center",
+    },
+    {
+      label: "鐧昏浜�",
+      prop: "checkNickName",
+      align: "center",
+    },
+    {
+      label: "绱ф�ョ▼搴�",
+      prop: "urgency",
+      // 鏍规嵁degreeOfUrgencyOptions瀛楀吀鍘昏嚜鍔ㄥ尮閰�
+      formatData: params => {
+        if (params) {
+          const item = degreeOfUrgencyOptions.value.find(
+            item => item.value === params
+          );
+          return item?.label || params;
+        }
+        return null;
+      },
+      align: "center",
+    },
+    {
+      label: "鍞悗绫诲瀷",
+      prop: "serviceType",
+      // 鏍规嵁classificationOptions瀛楀吀鍘昏嚜鍔ㄥ尮閰�
+      formatData: params => {
+        if (params) {
+          const item = classificationOptions.value.find(
+            item => item.value === params
+          );
+          return item?.label || params;
+        }
+        return null;
+      },
+      align: "center",
+    },
+    {
+      label: "瀹㈡埛璇夋眰",
+      prop: "proDesc",
+      width: 300,
+    },
+    {
+      label: "鍏宠仈閮ㄩ棬",
+      prop: "deptName",
+      width: 200,
+      align: "center",
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      fixed: "right",
+      operation: [
+        {
+          name: "缂栬緫",
+          type: "text",
+          clickFun: row => {
+            console.log(row);
+            openForm("edit", row);
+          },
+          disabled: row => {
+            return row.status !== 1;
+          },
+        },
+      ],
+      align: "center",
+    },
+  ]);
+  const tableData = ref([]);
+  const tableLoading = ref(false);
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
   });
-};
+  const selectedRows = ref([]);
+  const tableHeight = computed(() => "calc(100% -80px)");
 
-// 鎵撳紑寮规
-const openForm = (type, row) => {
-  nextTick(() => {
-    formDia.value?.openDialog(type, row)
-  })
-};
+  const handleReset = () => {
+    Object.keys(searchForm.value).forEach(key => {
+      searchForm.value[key] = "";
+    });
+    page.current = 1;
+    getList();
+  };
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
+  const formDia = ref();
 
-function handleDelete() {
-  let ids = [];
-  if (selectedRows.value.length > 0) {
-    // 妫�鏌ユ槸鍚︽湁浠栦汉缁存姢鐨勬暟鎹�
-    const unauthorizedData = selectedRows.value.filter(item => item.checkUserId !== userStore.id);
-    if (unauthorizedData.length > 0) {
-      proxy.$modal.msgWarning("涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�");
+  // 瀛楀吀鑾峰彇
+  /*
+  post_sale_waiting_list 鏂板鐨勫敭鍚庡垎绫�
+  degree_of_urgency 鏂板鐨勭揣鎬ョ▼搴�
+  work_order_status 涓婚〉鐨勫伐鍗曠姸鎬�
+  review_status 棣栭〉鐨勫鏍哥姸鎬�
+  */
+  const {
+    post_sale_waiting_list,
+    degree_of_urgency,
+    work_order_status,
+    review_status,
+  } = proxy.useDict(
+    "post_sale_waiting_list",
+    "degree_of_urgency",
+    "work_order_status",
+    "review_status"
+  );
+
+  const classificationOptions = computed(
+    () => post_sale_waiting_list?.value || []
+  );
+  const degreeOfUrgencyOptions = computed(() => degree_of_urgency?.value || []);
+  const workOrderStatusOptions = computed(() => work_order_status?.value || []);
+
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    getSalesLedgerDetails();
+    afterSalesServiceListPage({ ...searchForm.value, ...page }).then(res => {
+      tableLoading.value = false;
+      tableData.value = res.data.records;
+      page.total = res.data.total;
+    });
+  };
+
+  // 鎵撳紑寮规
+  const openForm = (type, row) => {
+    nextTick(() => {
+      formDia.value?.openDialog(type, row);
+    });
+  };
+
+  function handleDelete() {
+    let ids = [];
+    if (selectedRows.value.length > 0) {
+      // 妫�鏌ユ槸鍚︽湁浠栦汉缁存姢鐨勬暟鎹�
+      const unauthorizedData = selectedRows.value.filter(
+        item => item.checkUserId !== userStore.id
+      );
+      if (unauthorizedData.length > 0) {
+        proxy.$modal.msgWarning("涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�");
+        return;
+      }
+      ids = selectedRows.value.map(item => item.id);
+    } else {
+      proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
       return;
     }
-    ids = selectedRows.value.map((item) => item.id);
-  } else {
-    proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
-    return;
-  }
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
         tableLoading.value = true;
         afterSalesServiceDelete(ids)
-            .then(() => {
-              proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-              getList();
-            })
-            .finally(() => {
-              tableLoading.value = false;
-            });
+          .then(() => {
+            proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+            getList();
+          })
+          .finally(() => {
+            tableLoading.value = false;
+          });
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
+  }
 
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
         proxy.download("/afterSalesService/export", {}, "鍙嶉鐧昏.xlsx");
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
+  };
 
-const getStatsCountByStatus = (list, status) => {
-  if (!Array.isArray(list)) return 0;
-  return list.find((item) => item?.status === status)?.count || 0;
-};
+  const getStatsCountByStatus = (list, status) => {
+    if (!Array.isArray(list)) return 0;
+    return list.find(item => item?.status === status)?.count || 0;
+  };
 
   // 鑾峰彇缁熻鏁版嵁骞跺埛鏂伴《閮ㄥ崱鐗�
   const getSalesLedgerDetails = () => {
-    getSalesLedgerDetail({}).then((res) => {
+    getSalesLedgerDetail({}).then(res => {
       if (res.code === 200) {
         const statsData = Array.isArray(res.data) ? res.data : [];
         statsList.value[0].count = getStatsCountByStatus(statsData, 3);
@@ -418,99 +428,96 @@
         statsList.value[2].count = getStatsCountByStatus(statsData, 1);
       }
     });
-  }
+  };
 
-
-
-onMounted(() => {
-  getList();
-  
-});
+  onMounted(() => {
+    getList();
+  });
 </script>
 
 <style scoped lang="scss">
-.search-wrapper {
-  background: white;
-  padding: 1rem 1rem 0 1rem;
-  border: 8px;
-  border-radius: 16px;
-}
+  .search-wrapper {
+    background: white;
+    padding: 1rem 1rem 0 1rem;
+    border: 8px;
+    border-radius: 16px;
+  }
 
-.expand-btn {
-  width: 100%;
-  padding: 20px; /* 涓婁笅宸﹀彸鍚�20px锛岀偣鍑昏繖涓寖鍥撮兘鑳借Е鍙戜簨浠� */
-  cursor: pointer; /* 榧犳爣鎮诞鏄剧ず鎵嬪瀷锛屾彁鍗囦綋楠� */
-  text-align: center;
-}
+  .expand-btn {
+    width: 100%;
+    padding: 20px; /* 涓婁笅宸﹀彸鍚�20px锛岀偣鍑昏繖涓寖鍥撮兘鑳借Е鍙戜簨浠� */
+    cursor: pointer; /* 榧犳爣鎮诞鏄剧ず鎵嬪瀷锛屾彁鍗囦綋楠� */
+    text-align: center;
+  }
 
-.workorder-stats {
-  display: flex;
-  gap: 16px;
-  padding-bottom:1rem;
-  border-radius: 8px;
-}
+  .workorder-stats {
+    display: flex;
+    gap: 16px;
+    padding-bottom: 1rem;
+    border-radius: 8px;
+  }
 
-.stat-card {
-  flex: 1;
-  display: flex;
-  align-items: center;
-  gap: 12px;
-  padding: 20px;
-  background-color: #fff;
-  border-radius: 8px;
-  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);
-}
+  .stat-card {
+    flex: 1;
+    display: flex;
+    align-items: center;
+    gap: 12px;
+    padding: 20px;
+    background-color: #fff;
+    border-radius: 8px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);
+  }
 
-.stat-icon {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  width: 48px;
-  height: 48px;
-  border-radius: 8px;
-}
+  .stat-icon {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 48px;
+    height: 48px;
+    border-radius: 8px;
+  }
 
-.stat-info {
-  display: flex;
-  flex-direction: column;
-  gap: 4px;
-}
+  .stat-info {
+    display: flex;
+    flex-direction: column;
+    gap: 4px;
+  }
 
-.stat-number {
-  font-size: 24px;
-  font-weight: 600;
-  color: #303133;
-  line-height: 1;
-}
+  .stat-number {
+    font-size: 24px;
+    font-weight: 600;
+    color: #303133;
+    line-height: 1;
+  }
 
-.stat-label {
-  font-size: 14px;
-  color: #909399;
-  line-height: 1;
-}
-.table_header{
-  padding-bottom: 10px;
-}
+  .stat-label {
+    font-size: 14px;
+    color: #909399;
+    line-height: 1;
+  }
+  .table_header {
+    padding-bottom: 10px;
+  }
 
-.table_list {
-  height: calc(100vh - 380px);
-  background: #fff;
-  margin-top: 20px;
-  display: flex;
-  flex-direction: column;
-}
+  .table_list {
+    height: calc(100vh - 380px);
+    background: #fff;
+    margin-top: 20px;
+    display: flex;
+    flex-direction: column;
+  }
 
-:deep(.table_list .pagination-container) {
-  display: flex;
-  justify-content: flex-end;
-  align-items: center;
-  margin-top: auto;
-  padding: 12px 0 0;
-}
+  :deep(.table_list .pagination-container) {
+    display: flex;
+    justify-content: flex-end;
+    align-items: center;
+    margin-top: auto;
+    padding: 12px 0 0;
+  }
 
-:deep(.table_list .el-pagination) {
-  flex-wrap: nowrap;
-  justify-content: flex-end;
-  width: 100%;
-}
+  :deep(.table_list .el-pagination) {
+    flex-wrap: nowrap;
+    justify-content: flex-end;
+    width: 100%;
+  }
 </style>
diff --git a/src/views/equipmentManagement/inspectionManagement/index.vue b/src/views/equipmentManagement/inspectionManagement/index.vue
index c863719..8c0d52c 100644
--- a/src/views/equipmentManagement/inspectionManagement/index.vue
+++ b/src/views/equipmentManagement/inspectionManagement/index.vue
@@ -52,7 +52,8 @@
                   total: total,
                   layout: 'total, sizes, prev, pager, next, jumper'
                 }"
-                  :table-style="{ width: '100%', height: 'calc(100vh - 23em)' }">
+                  height="calc(100vh - 23em)"
+                  :table-style="{ width: '100%' }">
           <template #inspector="{ row }">
             <div class="person-tags">
               <!-- 璋冭瘯淇℃伅锛屼笂绾挎椂鍒犻櫎 -->
@@ -121,8 +122,8 @@
   // 鍗曢�夋閰嶇疆
   const activeRadio = ref("taskManage");
   const radios = reactive([
-    { name: "taskManage", label: "瀹氭椂浠诲姟绠$悊" },
-    { name: "task", label: "瀹氭椂浠诲姟璁板綍" },
+    { name: "taskManage", label: "宸℃浠诲姟" },
+    { name: "task", label: "宸℃璁板綍" },
   ]);
 
   // 琛ㄦ牸鏁版嵁
@@ -137,10 +138,10 @@
 
   // 鍒楅厤缃�
   const columns = ref([
-    { prop: "taskName", label: "宸℃浠诲姟鍚嶇О", minWidth: 160 },
-    { prop: "inspectionProject", label: "宸℃椤圭洰", minWidth: 150 },
-    { prop: "remarks", label: "澶囨敞", minWidth: 150 },
-    { prop: "inspector", label: "鎵ц宸℃浜�", minWidth: 150, slot: "inspector" },
+    { prop: "taskName", label: "宸℃浠诲姟鍚嶇О", minWidth: 200 },
+    { prop: "inspectionProject", label: "宸℃椤圭洰", minWidth: 180 },
+    { prop: "remarks", label: "澶囨敞", minWidth: 180 },
+    { prop: "inspector", label: "鎵ц宸℃浜�", minWidth: 180, slot: "inspector" },
     {
       prop: "isEnabled",
       label: "鏄惁鍚敤",
@@ -151,13 +152,7 @@
     {
       prop: "frequencyType",
       label: "棰戞",
-      minWidth: 150,
-      // formatter: (_, __, val) => ({
-      //   DAILY: "姣忔棩",
-      //   WEEKLY: "姣忓懆",
-      //   MONTHLY: "姣忔湀",
-      //   QUARTERLY: "瀛e害"
-      // }[val] || "")
+      minWidth: 120,
       formatData: params => {
         return params === "DAILY"
           ? "姣忔棩"
@@ -173,7 +168,7 @@
     {
       prop: "frequencyDetail",
       label: "寮�濮嬫棩鏈熶笌鏃堕棿",
-      minWidth: 150,
+      minWidth: 200,
       formatter: (row, column, cellValue) => {
         // 鍏堝垽鏂槸鍚︽槸瀛楃涓�
         if (typeof cellValue !== "string") return "";
@@ -194,11 +189,11 @@
         );
       },
     },
-    { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
+    { prop: "registrant", label: "鐧昏浜�", minWidth: 120 },
     {
       prop: "createTime",
       label: "鐧昏鏃ユ湡",
-      minWidth: 100,
+      minWidth: 180,
       formatData: cell => {
         if (!cell) return "-";
         try {
@@ -208,19 +203,19 @@
         }
       },
     },
-    {
-      prop: "inspectionResult",
-      label: "宸℃缁撴灉",
-      minWidth: 100,
-      dataType: "tag",
-      formatData: val => {
-        return val == 1 ? "姝e父" : "寮傚父";
-      },
-      formatType: val => {
-        return val == 1 ? "success" : "danger";
-      },
-    },
-    { prop: "abnormalDescription", label: "寮傚父鎻忚堪", minWidth: 100 },
+    // {
+    //   prop: "inspectionResult",
+    //   label: "宸℃缁撴灉",
+    //   minWidth: 100,
+    //   dataType: "tag",
+    //   formatData: val => {
+    //     return val == 1 ? "姝e父" : "寮傚父";
+    //   },
+    //   formatType: val => {
+    //     return val == 1 ? "success" : "danger";
+    //   },
+    // },
+    { prop: "abnormalDescription", label: "寮傚父鎻忚堪", minWidth: 150 },
   ]);
 
   // 鎿嶄綔鍒楅厤缃�
@@ -231,7 +226,7 @@
       label: "鎿嶄綔",
       width: operations.length > 1 ? 180 : 130,
       fixed: "right",
-			align: 'center',
+      align: "center",
       dataType: "action",
       operation: operations
         .map(op => {
@@ -279,7 +274,7 @@
       operationsArr.value = ["edit"];
     } else if (value === "task") {
       const operationColumn = getOperationColumn(["upload", "viewFile"]);
-      // 瀹氭椂浠诲姟璁板綍涓嶅睍绀�"鏄惁鍚敤"鍒�
+      // 宸℃璁板綍涓嶅睍绀�"鏄惁鍚敤"鍒�
       const taskColumns = columns.value.filter(col => col.prop !== "isEnabled");
       tableColumns.value = [
         ...taskColumns,
@@ -422,11 +417,11 @@
       .then(() => {
         // 鏍规嵁褰撳墠閫変腑鐨勬爣绛鹃〉璋冪敤涓嶅悓鐨勫鍑烘帴鍙�
         if (activeRadio.value === "taskManage") {
-          // 瀹氭椂浠诲姟绠$悊
-          proxy.download("/timingTask/export", {}, "瀹氭椂浠诲姟绠$悊.xlsx");
+          // 宸℃浠诲姟
+          proxy.download("/timingTask/export", {}, "宸℃浠诲姟.xlsx");
         } else if (activeRadio.value === "task") {
-          // 瀹氭椂浠诲姟璁板綍
-          proxy.download("/inspectionTask/export", {}, "瀹氭椂浠诲姟璁板綍.xlsx");
+          // 宸℃璁板綍
+          proxy.download("/inspectionTask/export", {}, "宸℃璁板綍.xlsx");
         }
       })
       .catch(() => {
diff --git a/src/views/equipmentManagement/measurementEquipment/index.vue b/src/views/equipmentManagement/measurementEquipment/index.vue
index c8789d8..007eef6 100644
--- a/src/views/equipmentManagement/measurementEquipment/index.vue
+++ b/src/views/equipmentManagement/measurementEquipment/index.vue
@@ -1,320 +1,354 @@
 <template>
-	<div class="app-container">
-		<div class="search_form mb20">
-			<div>
-				<span class="search_title">褰曞叆鏃ユ湡锛�</span>
-				<el-date-picker
-					v-model="searchForm.recordDate"
-					value-format="YYYY-MM-DD"
-					format="YYYY-MM-DD"
-					type="date"
-					placeholder="璇烽�夋嫨"
-					clearable
-					style="width: 160px"
-					@change="handleQuery"
-				/>
-				<span class="search_title ml10">璁¢噺鍣ㄥ叿缂栧彿锛�</span>
-				<el-input v-model="searchForm.code" placeholder="璇疯緭鍏ョ紪鍙�" clearable style="width: 240px" @change="handleQuery"/>
-				<span class="search_title ml10">鐘舵�侊細</span>
-				<el-select v-model="searchForm.status" placeholder="璇烽�夋嫨鐘舵��" @change="handleQuery" style="width: 160px" clearable>
-					<el-option label="鏈夋晥" :value="1"></el-option>
-					<el-option label="閫炬湡" :value="2"></el-option>
-				</el-select>
-				<el-button type="primary" @click="handleQuery" style="margin-left: 10px"
-				>鎼滅储</el-button
-				>
-				<el-button @click="handleReset" style="margin-left: 10px">閲嶇疆</el-button>
-			</div>
-			<div>
-				<el-button type="primary" @click="openForm('add')">鏂板璁¢噺鍣ㄥ叿</el-button>
-				<el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
-				<el-button @click="handleOut">瀵煎嚭</el-button>
-			</div>
-		</div>
-		<div class="table_list">
-			<PIMTable
-				rowKey="id"
-				:column="tableColumn"
-				:tableData="tableData"
-				:page="page"
-				:isSelection="true"
-				@selection-change="handleSelectionChange"
-				:tableLoading="tableLoading"
-				@pagination="pagination"
-        :dbRowClick="dbRowClick"
-        :rowClassName="rowClassName"
-			></PIMTable>
-		</div>
-		<form-dia ref="formDia" @close="handleQuery"></form-dia>
-		<calibration-dia ref="calibrationDia" @close="handleQuery"></calibration-dia>
+  <div class="app-container">
+    <div class="search_form mb20">
+      <div>
+        <span class="search_title">褰曞叆鏃ユ湡锛�</span>
+        <el-date-picker v-model="searchForm.recordDate"
+                        value-format="YYYY-MM-DD"
+                        format="YYYY-MM-DD"
+                        type="date"
+                        placeholder="璇烽�夋嫨"
+                        clearable
+                        style="width: 160px"
+                        @change="handleQuery" />
+        <span class="search_title ml10">璁¢噺鍣ㄥ叿缂栧彿锛�</span>
+        <el-input v-model="searchForm.code"
+                  placeholder="璇疯緭鍏ョ紪鍙�"
+                  clearable
+                  style="width: 240px"
+                  @change="handleQuery" />
+        <span class="search_title ml10">鐘舵�侊細</span>
+        <el-select v-model="searchForm.status"
+                   placeholder="璇烽�夋嫨鐘舵��"
+                   @change="handleQuery"
+                   style="width: 160px"
+                   clearable>
+          <el-option label="鏈夋晥"
+                     :value="1"></el-option>
+          <el-option label="閫炬湡"
+                     :value="2"></el-option>
+        </el-select>
+        <el-button type="primary"
+                   @click="handleQuery"
+                   style="margin-left: 10px">鎼滅储</el-button>
+        <el-button @click="handleReset"
+                   style="margin-left: 10px">閲嶇疆</el-button>
+      </div>
+      <div>
+        <el-button type="primary"
+                   @click="openForm('add')">鏂板璁¢噺鍣ㄥ叿</el-button>
+        <el-button type="danger"
+                   plain
+                   @click="handleDelete">鍒犻櫎</el-button>
+        <el-button @click="handleOut">瀵煎嚭</el-button>
+      </div>
+    </div>
+    <div class="table_list">
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"
+                :dbRowClick="dbRowClick"
+                :rowClassName="rowClassName"></PIMTable>
+    </div>
+    <form-dia ref="formDia"
+              @close="handleQuery"></form-dia>
+    <calibration-dia ref="calibrationDia"
+                     @close="handleQuery"></calibration-dia>
     <files-dia ref="filesDia"></files-dia>
     <rowClickDataForm ref="rowClickData"></rowClickDataForm>
-	</div>
+  </div>
 </template>
 
 <script setup>
-import {onMounted, ref, reactive, toRefs, getCurrentInstance, nextTick} from "vue";
-import FormDia from "@/views/equipmentManagement/measurementEquipment/components/formDia.vue";
-import {ElMessageBox} from "element-plus";
-import useUserStore from "@/store/modules/user.js";
-import CalibrationDia from "@/views/equipmentManagement/measurementEquipment/components/calibrationDia.vue";
-import {
-  measuringInstrumentDelete,
-  measuringInstrumentListPage,
-} from "@/api/equipmentManagement/measurementEquipment.js";
-import FilesDia from "./filesDia.vue";
-import rowClickDataForm from "./components/rowClickData.vue"
-const { proxy } = getCurrentInstance();
-const userStore = useUserStore()
+  import {
+    onMounted,
+    ref,
+    reactive,
+    toRefs,
+    getCurrentInstance,
+    nextTick,
+  } from "vue";
+  import FormDia from "@/views/equipmentManagement/measurementEquipment/components/formDia.vue";
+  import { ElMessageBox } from "element-plus";
+  import useUserStore from "@/store/modules/user.js";
+  import CalibrationDia from "@/views/equipmentManagement/measurementEquipment/components/calibrationDia.vue";
+  import {
+    measuringInstrumentDelete,
+    measuringInstrumentListPage,
+  } from "@/api/equipmentManagement/measurementEquipment.js";
+  import FilesDia from "./filesDia.vue";
+  import rowClickDataForm from "./components/rowClickData.vue";
+  const { proxy } = getCurrentInstance();
+  const userStore = useUserStore();
 
-const data = reactive({
-	searchForm: {
-		recordDate: "",
-		code: "",
-		status: "",
-	},
-});
-const { searchForm } = toRefs(data);
+  const data = reactive({
+    searchForm: {
+      recordDate: "",
+      code: "",
+      status: "",
+    },
+  });
+  const { searchForm } = toRefs(data);
 
-const tableColumn = ref([
-	{
-		label: "鍑哄巶缂栧彿",
-		prop: "code",
-    minWidth:150,
-    align:"center"
-	},
-  {
-    label: "璁¢噺鍣ㄥ叿鍚嶇О",
-    prop: "name",
-    width: '160px',
-    align: "center",
-  },
-	{
-		label: "妫�瀹氬崟浣�",
-		prop: "unit",
-		width: 200,
-    align:"center"
-	},
-	{
-		label: "璇佷功缂栧彿",
-		prop: "model",
-		width:200,
-    align:"center"
-	},
-	{
-		label: "鏈�鏂伴壌瀹氭棩鏈�",
-		prop: "mostDate",
-		width: 130,
-    align:"center"
-	},
-	{
-		label: "褰曞叆浜�",
-		prop: "userName",
-		width: 130,
-    align:"center"
-	},
-	{
-		label: "褰曞叆鏃ユ湡",
-		prop: "recordDate",
-    align:"center",
-    minWidth: 130
-	},
-	{
-		label: "鏈夋晥鏃ユ湡",
-		prop: "valid",
-		width: 130,
-    align:"center"
-	},
-  {
-    label: "鐘舵��",
-    prop: "status",
-    width: 130,
-    align: "center",
-    formatData: (params) => {
-      if (params === 1) {
-        return "鏈夋晥";
-      } else if (params === 2) {
-        return "閫炬湡";
-      } else {
-        return null;
-      }
-    }
-  },
-	{
-		dataType: "action",
-		label: "鎿嶄綔",
-		align: "center",
-		width: '130',
-		fixed: 'right',
-		operation: [
-      {
-      	name: "闄勪欢",
-      	type: "text",
-      	clickFun: (row) => {
-          openFilesFormDia(row);
-      	},
+  const tableColumn = ref([
+    {
+      label: "鍑哄巶缂栧彿",
+      prop: "code",
+      minWidth: 150,
+      align: "center",
+    },
+    {
+      label: "璁¢噺鍣ㄥ叿鍚嶇О",
+      prop: "name",
+      width: "160px",
+      align: "center",
+    },
+    {
+      label: "妫�瀹氬崟浣�",
+      prop: "unit",
+      width: 200,
+      align: "center",
+    },
+    {
+      label: "璇佷功缂栧彿",
+      prop: "model",
+      width: 200,
+      align: "center",
+    },
+    {
+      label: "鏈�鏂伴壌瀹氭棩鏈�",
+      prop: "mostDate",
+      width: 130,
+      align: "center",
+    },
+    {
+      label: "褰曞叆浜�",
+      prop: "userName",
+      width: 130,
+      align: "center",
+    },
+    {
+      label: "褰曞叆鏃ユ湡",
+      prop: "recordDate",
+      align: "center",
+      minWidth: 130,
+    },
+    {
+      label: "鏈夋晥鏃ユ湡",
+      prop: "valid",
+      width: 130,
+      align: "center",
+    },
+    {
+      label: "鐘舵��",
+      prop: "status",
+      width: 130,
+      align: "center",
+      formatData: params => {
+        if (params === 1) {
+          return "鏈夋晥";
+        } else if (params === 2) {
+          return "閫炬湡";
+        } else {
+          return null;
+        }
       },
-			{
-				name: "鏌ョ湅",
-				type: "text",
-				clickFun: (row) => {
-					openCalibrationDia("verifying", row);
-				},
-			},
-		],
-	},
-]);
-const tableData = ref([]);
-const tableLoading = ref(false);
-const rowClickData = ref([])
-const filesDia = ref()
-const page = reactive({
-	current: 1,
-	size: 100,
-	total: 0,
-});
-const selectedRows = ref([]);
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      align: "center",
+      width: "130",
+      fixed: "right",
+      operation: [
+        {
+          name: "闄勪欢",
+          type: "text",
+          clickFun: row => {
+            openFilesFormDia(row);
+          },
+        },
+        {
+          name: "缂栬緫",
+          type: "text",
+          clickFun: row => {
+            openCalibrationDia("verifying", row);
+          },
+        },
+      ],
+    },
+  ]);
+  const tableData = ref([]);
+  const tableLoading = ref(false);
+  const rowClickData = ref([]);
+  const filesDia = ref();
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+  });
+  const selectedRows = ref([]);
 
-// 鎵撳紑闄勪欢寮规
-const openFilesFormDia = (row) => {
-    filesDia.value?.openDialog(row,'measuring_instrument_ledger')
-};
+  // 鎵撳紑闄勪欢寮规
+  const openFilesFormDia = row => {
+    filesDia.value?.openDialog(row, "measuring_instrument_ledger");
+  };
 
-const dbRowClick = (row)=>{
-  rowClickData.value?.openDialog(row)
-}
+  const dbRowClick = row => {
+    rowClickData.value?.openDialog(row);
+  };
 
-// 琛屾牱寮忥細蹇埌鏈燂紙7澶╁唴锛夋垨閫炬湡鏍囩孩
-const rowClassName = ({ row }) => {
-  console.log('rowClassName called:', row);
-  // valid 鏄湁鏁堝ぉ鏁帮紝mostDate 鏄渶鏂版瀹氭棩鏈�
-  if (row.valid && row.mostDate) {
-    const mostDate = new Date(row.mostDate);
-    // 璁$畻鍒版湡鏃ユ湡 = 妫�瀹氭棩鏈� + 鏈夋晥澶╂暟
-    const validDays = parseInt(row.valid) || 0;
-    const expireDate = new Date(mostDate);
-    expireDate.setDate(expireDate.getDate() + validDays);
-    
-    const now = new Date();
-    const diffDays = Math.ceil((expireDate - now) / (1000 * 60 * 60 * 24));
-    console.log('row:', row.code, 'validDays:', validDays, 'expireDate:', expireDate, 'diffDays:', diffDays);
-    // 7澶╁唴鍒版湡鎴栧凡閫炬湡閮芥爣绾�
-    if (diffDays <= 7) {
-      console.log('return warning-row');
-      return 'warning-row';
+  // 琛屾牱寮忥細蹇埌鏈燂紙7澶╁唴锛夋垨閫炬湡鏍囩孩
+  const rowClassName = ({ row }) => {
+    console.log("rowClassName called:", row);
+    // valid 鏄湁鏁堝ぉ鏁帮紝mostDate 鏄渶鏂版瀹氭棩鏈�
+    if (row.valid && row.mostDate) {
+      const mostDate = new Date(row.mostDate);
+      // 璁$畻鍒版湡鏃ユ湡 = 妫�瀹氭棩鏈� + 鏈夋晥澶╂暟
+      const validDays = parseInt(row.valid) || 0;
+      const expireDate = new Date(mostDate);
+      expireDate.setDate(expireDate.getDate() + validDays);
+
+      const now = new Date();
+      const diffDays = Math.ceil((expireDate - now) / (1000 * 60 * 60 * 24));
+      console.log(
+        "row:",
+        row.code,
+        "validDays:",
+        validDays,
+        "expireDate:",
+        expireDate,
+        "diffDays:",
+        diffDays
+      );
+      // 7澶╁唴鍒版湡鎴栧凡閫炬湡閮芥爣绾�
+      if (diffDays <= 7) {
+        console.log("return warning-row");
+        return "warning-row";
+      }
+    } else {
+      console.log("row missing valid or mostDate:", row.valid, row.mostDate);
     }
-  } else {
-    console.log('row missing valid or mostDate:', row.valid, row.mostDate);
-  }
-  return '';
-}
+    return "";
+  };
 
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-	selectedRows.value = selection;
-};
-const formDia = ref()
-const calibrationDia = ref()
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
+  const formDia = ref();
+  const calibrationDia = ref();
 
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-	page.current = 1;
-	getList();
-};
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
 
-// 閲嶇疆鎼滅储鏉′欢
-const handleReset = () => {
-	searchForm.value.recordDate = "";
-	searchForm.value.code = "";
-	searchForm.value.status = "";
-	page.current = 1;
-	getList();
-};
-const pagination = (obj) => {
-	page.current = obj.page;
-	page.size = obj.limit;
-	getList();
-};
-const getList = () => {
-	tableLoading.value = true;
-	measuringInstrumentListPage({ ...searchForm.value, ...page }).then((res) => {
-		tableLoading.value = false;
-		tableData.value = res.data.records;
-		page.total = res.data.total;
-	}).catch((err) => {
-		tableLoading.value = false;
-	})
-};
+  // 閲嶇疆鎼滅储鏉′欢
+  const handleReset = () => {
+    searchForm.value.recordDate = "";
+    searchForm.value.code = "";
+    searchForm.value.status = "";
+    page.current = 1;
+    getList();
+  };
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    measuringInstrumentListPage({ ...searchForm.value, ...page })
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        page.total = res.data.total;
+      })
+      .catch(err => {
+        tableLoading.value = false;
+      });
+  };
 
-// 鎵撳紑寮规
-const openForm = (type, row) => {
-	nextTick(() => {
-		formDia.value?.openDialog(type, row)
-	})
-};
-// 鎵撳紑妫�瀹氭牎鍑嗗脊妗�
-const openCalibrationDia = (type, row) => {
-	nextTick(() => {
-		calibrationDia.value?.openDialog(type, row)
-	})
-}
+  // 鎵撳紑寮规
+  const openForm = (type, row) => {
+    nextTick(() => {
+      formDia.value?.openDialog(type, row);
+    });
+  };
+  // 鎵撳紑妫�瀹氭牎鍑嗗脊妗�
+  const openCalibrationDia = (type, row) => {
+    nextTick(() => {
+      calibrationDia.value?.openDialog(type, row);
+    });
+  };
 
-const handleDelete = () => {
-	let ids = [];
-	if (selectedRows.value.length > 0) {
-		ids = selectedRows.value.map((item) => item.id);
-	} else {
-		proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
-		return;
-	}
-	ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
-		confirmButtonText: "纭",
-		cancelButtonText: "鍙栨秷",
-		type: "warning",
-	})
-		.then(() => {
-			tableLoading.value = true;
-			measuringInstrumentDelete(ids)
-				.then((res) => {
-					proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-					getList();
-				})
-				.finally(() => {
-					tableLoading.value = false;
-				});
-		})
-		.catch(() => {
-			proxy.$modal.msg("宸插彇娑�");
-		});
-};
-// 瀵煎嚭
-const handleOut = () => {
-	ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-		confirmButtonText: "纭",
-		cancelButtonText: "鍙栨秷",
-		type: "warning",
-	})
-		.then(() => {
-			proxy.download("/measuringInstrumentLedger/export", {}, "璁¢噺鍣ㄥ叿鍙拌处.xlsx");
-		})
-		.catch(() => {
-			proxy.$modal.msg("宸插彇娑�");
-		});
-};
-onMounted(() => {
-	getList();
-});
+  const handleDelete = () => {
+    let ids = [];
+    if (selectedRows.value.length > 0) {
+      ids = selectedRows.value.map(item => item.id);
+    } else {
+      proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+      return;
+    }
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
+      .then(() => {
+        tableLoading.value = true;
+        measuringInstrumentDelete(ids)
+          .then(res => {
+            proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+            getList();
+          })
+          .finally(() => {
+            tableLoading.value = false;
+          });
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
+      .then(() => {
+        proxy.download(
+          "/measuringInstrumentLedger/export",
+          {},
+          "璁¢噺鍣ㄥ叿鍙拌处.xlsx"
+        );
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
+  onMounted(() => {
+    getList();
+  });
 </script>
 
 <style scoped>
-:deep(.el-table .warning-row) {
-  background-color: #fef0f0 !important;
-}
-:deep(.el-table .warning-row:hover > td) {
-  background-color: #f9d5d5 !important;
-}
-:deep(.el-table .el-table__body tr.warning-row td) {
-  background-color: #fef0f0 !important;
-}
+  :deep(.el-table .warning-row) {
+    background-color: #fef0f0 !important;
+  }
+  :deep(.el-table .warning-row:hover > td) {
+    background-color: #f9d5d5 !important;
+  }
+  :deep(.el-table .el-table__body tr.warning-row td) {
+    background-color: #fef0f0 !important;
+  }
 </style>
\ No newline at end of file
diff --git a/src/views/equipmentManagement/repair/Modal/RepairModal.vue b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
index 4e73833..4a10071 100644
--- a/src/views/equipmentManagement/repair/Modal/RepairModal.vue
+++ b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -1,111 +1,126 @@
 <template>
-  <FormDialog
-    v-model="visible"
-    :title="id ? '缂栬緫璁惧鎶ヤ慨' : '鏂板璁惧鎶ヤ慨'"
-    width="800px"
-    @confirm="sendForm"
-    @cancel="handleCancel"
-    @close="handleClose"
-  >
-    <el-form :model="form" label-width="100px">
+  <FormDialog v-model="visible"
+              :title="computedTitle"
+              :operation-type="operationType"
+              width="800px"
+              @confirm="sendForm"
+              @cancel="handleCancel"
+              @close="handleClose">
+    <el-form :model="form"
+             label-width="100px">
       <el-row>
         <el-col :span="12">
           <el-form-item label="璁惧鍚嶇О">
-            <el-select v-model="form.deviceLedgerId" @change="setDeviceModel" filterable>
-              <el-option
-                v-for="(item, index) in deviceOptions"
-                :key="index"
-                :label="item.deviceName"
-                :value="item.id"
-              ></el-option>
+            <el-select v-model="form.deviceLedgerId"
+                       @change="setDeviceModel"
+                       filterable
+                       :disabled="operationType === 'view'">
+              <el-option v-for="(item, index) in deviceOptions"
+                         :key="index"
+                         :label="item.deviceName"
+                         :value="item.id"></el-option>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="瑙勬牸鍨嬪彿">
-            <el-input
-              v-model="form.deviceModel"
-              placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
-              disabled
-            />
+            <el-input v-model="form.deviceModel"
+                      placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+                      disabled />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="鎶ヤ慨鏃ユ湡">
-            <el-date-picker
-              v-model="form.repairTime"
-              placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
-              format="YYYY-MM-DD"
-              value-format="YYYY-MM-DD"
-              type="date"
-              clearable
-              style="width: 100%"
-            />
+            <el-date-picker v-model="form.repairTime"
+                            placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
+                            format="YYYY-MM-DD"
+                            value-format="YYYY-MM-DD"
+                            type="date"
+                            clearable
+                            style="width: 100%"
+                            :disabled="operationType === 'view'" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="鎶ヤ慨浜�">
-            <el-input v-model="form.repairName" placeholder="璇疯緭鍏ユ姤淇汉" />
+            <el-input v-model="form.repairName"
+                      placeholder="璇疯緭鍏ユ姤淇汉"
+                      :disabled="operationType === 'view'" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="鎶ヤ慨鎶ヤ慨椤圭洰">
-            <el-input v-model="form.machineryCategory" placeholder="璇疯緭鍏ユ姤淇姤淇」鐩�" />
+            <el-input v-model="form.machineryCategory"
+                      placeholder="璇疯緭鍏ユ姤淇姤淇」鐩�"
+                      :disabled="operationType === 'view'" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="缁翠慨浜�">
-            <el-input v-model="form.maintenanceName" placeholder="璇疯緭鍏ョ淮淇汉濮撳悕" />
+            <el-input v-model="form.maintenanceName"
+                      placeholder="璇疯緭鍏ョ淮淇汉濮撳悕"
+                      :disabled="operationType === 'view'" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row v-if="id">
         <el-col :span="12">
           <el-form-item label="鎶ヤ慨鐘舵��">
-            <el-select v-model="form.status" disabled>
-              <el-option label="寰呯淮淇�" :value="0"></el-option>
-              <el-option label="宸查獙鏀�" :value="1"></el-option>
-              <el-option label="澶辫触" :value="2"></el-option>
+            <el-select v-model="form.status"
+                       disabled>
+              <el-option label="寰呯淮淇�"
+                         :value="0"></el-option>
+              <el-option label="宸查獙鏀�"
+                         :value="1"></el-option>
+              <el-option label="澶辫触"
+                         :value="2"></el-option>
             </el-select>
           </el-form-item>
         </el-col>
       </el-row>
       <!-- 楠屾敹淇℃伅灞曠ず -->
-      <el-row v-if="id && form.status === 1">
+      <el-row v-if="id && (form.status === 1 || form.status === 3)">
         <el-col :span="12">
           <el-form-item label="楠屾敹浜�">
-            <el-input v-model="form.acceptanceName" disabled />
+            <el-input v-model="form.acceptanceName"
+                      disabled />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="楠屾敹鏃堕棿">
-            <el-input v-model="form.acceptanceTime" disabled />
+            <el-input v-model="form.acceptanceTime"
+                      disabled />
           </el-form-item>
         </el-col>
         <el-col :span="24">
           <el-form-item label="楠屾敹澶囨敞">
-            <el-input v-model="form.acceptanceRemark" type="textarea" :rows="2" disabled />
+            <el-input v-model="form.acceptanceRemark"
+                      type="textarea"
+                      :rows="2"
+                      disabled />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="24">
           <el-form-item label="鏁呴殰鐜拌薄">
-            <el-input
-              v-model="form.remark"
-              :rows="2"
-              type="textarea"
-              placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
-            />
+            <el-input v-model="form.remark"
+                      :rows="2"
+                      type="textarea"
+                      placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
+                      :disabled="operationType === 'view'" />
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row :gutter="30">
+      <el-row v-if="operationType !== 'view'"
+              :gutter="30">
         <el-col :span="24">
-          <el-form-item label="闄勪欢" prop="attachmentIds">
-            <FileUpload v-model:file-list="form.storageBlobDTOs" />
+          <el-form-item label="闄勪欢"
+                        prop="attachmentIds">
+            <FileUpload v-model:file-list="form.storageBlobDTOs"
+                        :disabled="operationType === 'view'" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -114,119 +129,140 @@
 </template>
 
 <script setup>
-import FormDialog from "@/components/Dialog/FormDialog.vue";
-import FileUpload from "@/components/AttachmentUpload/file/index.vue";
-import {
-  addRepair,
-  editRepair,
-  getRepairById,
-} from "@/api/equipmentManagement/repair";
-import { ElMessage } from "element-plus";
-import dayjs from "dayjs";
-import useFormData from "@/hooks/useFormData";
-import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
-import useUserStore from "@/store/modules/user";
+  import FormDialog from "@/components/Dialog/FormDialog.vue";
+  import FileUpload from "@/components/AttachmentUpload/file/index.vue";
+  import {
+    addRepair,
+    editRepair,
+    getRepairById,
+  } from "@/api/equipmentManagement/repair";
+  import { ElMessage } from "element-plus";
+  import dayjs from "dayjs";
+  import useFormData from "@/hooks/useFormData";
+  import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
+  import useUserStore from "@/store/modules/user";
 
-defineOptions({
-  name: "璁惧鎶ヤ慨寮圭獥",
-});
+  defineOptions({
+    name: "璁惧鎶ヤ慨寮圭獥",
+  });
 
-const emits = defineEmits(["ok"]);
+  const emits = defineEmits(["ok"]);
 
-const id = ref();
-const visible = ref(false);
-const loading = ref(false);
+  const id = ref();
+  const visible = ref(false);
+  const loading = ref(false);
+  const operationType = ref(""); // add, edit, view
 
-const userStore = useUserStore();
-const deviceOptions = ref([]);
-const fileList = ref([]);
+  const computedTitle = computed(() => {
+    if (operationType.value === "add") return "鏂板璁惧鎶ヤ慨";
+    if (operationType.value === "edit") return "缂栬緫璁惧鎶ヤ慨";
+    if (operationType.value === "view") return "璁惧鎶ヤ慨璇︽儏";
+    return "";
+  });
 
-const loadDeviceName = async () => {
-  const { data } = await getDeviceLedger();
-  deviceOptions.value = data;
-};
+  const userStore = useUserStore();
+  const deviceOptions = ref([]);
+  const fileList = ref([]);
 
-const { form, resetForm } = useFormData({
-  deviceLedgerId: undefined, // 璁惧Id
-  deviceName: undefined, // 璁惧鍚嶇О
-  deviceModel: undefined, // 瑙勬牸鍨嬪彿
-  repairTime: dayjs().format("YYYY-MM-DD"), // 鎶ヤ慨鏃ユ湡锛岄粯璁ゅ綋澶�
-  repairName: userStore.nickName, // 鎶ヤ慨浜�
-  remark: undefined, // 鏁呴殰鐜拌薄
-  status: 0, // 鎶ヤ慨鐘舵��
-  machineryCategory: undefined,
-  storageBlobDTOs: [],
-  maintenanceName: undefined, // 缁翠慨浜�
-});
+  const loadDeviceName = async () => {
+    const { data } = await getDeviceLedger();
+    deviceOptions.value = data;
+  };
 
-const setDeviceModel = (deviceId) => {
-  const option = deviceOptions.value.find((item) => item.id === deviceId);
-  form.deviceModel = option.deviceModel;
-};
+  const { form, resetForm } = useFormData({
+    deviceLedgerId: undefined, // 璁惧Id
+    deviceName: undefined, // 璁惧鍚嶇О
+    deviceModel: undefined, // 瑙勬牸鍨嬪彿
+    repairTime: dayjs().format("YYYY-MM-DD"), // 鎶ヤ慨鏃ユ湡锛岄粯璁ゅ綋澶�
+    repairName: userStore.nickName, // 鎶ヤ慨浜�
+    remark: undefined, // 鏁呴殰鐜拌薄
+    status: 0, // 鎶ヤ慨鐘舵��
+    machineryCategory: undefined,
+    storageBlobDTOs: [],
+    maintenanceName: undefined, // 缁翠慨浜�
+  });
 
-const setForm = (data) => {
-  form.deviceLedgerId = data.deviceLedgerId;
-  form.deviceName = data.deviceName;
-  form.deviceModel = data.deviceModel;
-  form.repairTime = data.repairTime;
-  form.repairName = data.repairName;
-  form.remark = data.remark;
-  form.status = data.status;
-  form.machineryCategory = data.machineryCategory;
-  form.storageBlobDTOs = data.storageBlobVOs || [];
-  form.maintenanceName = data.maintenanceName;
-  form.acceptanceName = data.acceptanceName;
-  form.acceptanceTime = data.acceptanceTime;
-  form.acceptanceRemark = data.acceptanceRemark;
-};
+  const setDeviceModel = deviceId => {
+    const option = deviceOptions.value.find(item => item.id === deviceId);
+    form.deviceModel = option.deviceModel;
+  };
 
-const sendForm = async () => {
-  loading.value = true;
-  try {
-    const { code } = id.value
-      ? await editRepair({ id: unref(id), ...form })
-      : await addRepair(form);
-    if (code == 200) {
-      ElMessage.success(`${id.value ? "缂栬緫" : "鏂板"}鎶ヤ慨鎴愬姛`);
-      visible.value = false;
-      emits("ok");
+  const setForm = data => {
+    form.deviceLedgerId = data.deviceLedgerId;
+    form.deviceName = data.deviceName;
+    form.deviceModel = data.deviceModel;
+    form.repairTime = data.repairTime;
+    form.repairName = data.repairName;
+    form.remark = data.remark;
+    form.status = data.status;
+    form.machineryCategory = data.machineryCategory;
+    form.storageBlobDTOs = data.storageBlobVOs || [];
+    form.maintenanceName = data.maintenanceName;
+    form.acceptanceName = data.acceptanceName;
+    form.acceptanceTime = data.acceptanceTime;
+    form.acceptanceRemark = data.acceptanceRemark;
+  };
+
+  const sendForm = async () => {
+    loading.value = true;
+    try {
+      const { code } = id.value
+        ? await editRepair({ id: unref(id), ...form })
+        : await addRepair(form);
+      if (code == 200) {
+        ElMessage.success(`${id.value ? "缂栬緫" : "鏂板"}鎶ヤ慨鎴愬姛`);
+        visible.value = false;
+        emits("ok");
+      }
+    } finally {
+      loading.value = false;
     }
-  } finally {
-    loading.value = false;
-  }
-};
+  };
 
-const handleCancel = () => {
-  resetForm();
-  visible.value = false;
-};
+  const handleCancel = () => {
+    resetForm();
+    visible.value = false;
+  };
 
-const handleClose = () => {
-  resetForm();
-  visible.value = false;
-};
+  const handleClose = () => {
+    resetForm();
+    visible.value = false;
+  };
 
-const openAdd = async () => {
-  id.value = undefined;
-  visible.value = true;
-  fileList.value = [];
-  await nextTick();
-  await loadDeviceName();
-};
+  const openAdd = async () => {
+    id.value = undefined;
+    operationType.value = "add";
+    visible.value = true;
+    fileList.value = [];
+    await nextTick();
+    await loadDeviceName();
+  };
 
-const openEdit = async (editId) => {
-  const { data } = await getRepairById(editId);
-  id.value = editId;
-  visible.value = true;
-  await nextTick();
-  await loadDeviceName();
-  setForm(data);
-};
+  const openEdit = async editId => {
+    const { data } = await getRepairById(editId);
+    id.value = editId;
+    operationType.value = "edit";
+    visible.value = true;
+    await nextTick();
+    await loadDeviceName();
+    setForm(data);
+  };
 
-defineExpose({
-  openAdd,
-  openEdit,
-});
+  const openView = async viewId => {
+    const { data } = await getRepairById(viewId);
+    id.value = viewId;
+    operationType.value = "view";
+    visible.value = true;
+    await nextTick();
+    await loadDeviceName();
+    setForm(data);
+  };
+
+  defineExpose({
+    openAdd,
+    openEdit,
+    openView,
+  });
 </script>
 
 <style lang="scss" scoped></style>
diff --git a/src/views/equipmentManagement/repair/index.vue b/src/views/equipmentManagement/repair/index.vue
index 2835356..f1573cb 100644
--- a/src/views/equipmentManagement/repair/index.vue
+++ b/src/views/equipmentManagement/repair/index.vue
@@ -1,193 +1,195 @@
 <template>
   <div class="app-container">
-    <el-form :model="filters" :inline="true">
+    <el-form :model="filters"
+             :inline="true">
       <el-form-item label="璁惧鍚嶇О">
-        <el-input
-            v-model="filters.deviceName"
-            style="width: 240px"
-            placeholder="璇疯緭鍏ヨ澶囧悕绉�"
-            clearable
-            :prefix-icon="Search"
-            @change="getTableData"
-        />
+        <el-input v-model="filters.deviceName"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ヨ澶囧悕绉�"
+                  clearable
+                  :prefix-icon="Search"
+                  @change="getTableData" />
       </el-form-item>
       <el-form-item label="瑙勬牸鍨嬪彿">
-        <el-input
-            v-model="filters.deviceModel"
-            style="width: 240px"
-            placeholder="璇烽�夋嫨瑙勬牸鍨嬪彿"
-            clearable
-            :prefix-icon="Search"
-            @change="getTableData"
-        />
+        <el-input v-model="filters.deviceModel"
+                  style="width: 240px"
+                  placeholder="璇烽�夋嫨瑙勬牸鍨嬪彿"
+                  clearable
+                  :prefix-icon="Search"
+                  @change="getTableData" />
       </el-form-item>
       <el-form-item label="鏁呴殰鐜拌薄">
-        <el-input
-            v-model="filters.remark"
-            style="width: 240px"
-            placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
-            clearable
-            :prefix-icon="Search"
-            @change="getTableData"
-        />
+        <el-input v-model="filters.remark"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
+                  clearable
+                  :prefix-icon="Search"
+                  @change="getTableData" />
       </el-form-item>
       <el-form-item label="缁翠慨浜�">
-        <el-input
-            v-model="filters.maintenanceName"
-            style="width: 240px"
-            placeholder="璇疯緭鍏ョ淮淇汉"
-            clearable
-            :prefix-icon="Search"
-            @change="getTableData"
-        />
+        <el-input v-model="filters.maintenanceName"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ョ淮淇汉"
+                  clearable
+                  :prefix-icon="Search"
+                  @change="getTableData" />
       </el-form-item>
       <el-form-item label="鎶ヤ慨鏃ユ湡">
-        <el-date-picker
-            v-model="filters.repairTimeStr"
-            type="date"
-            placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
-            size="default"
-            @change="(date) => handleDateChange(date,2)"
-        />
+        <el-date-picker v-model="filters.repairTimeStr"
+                        type="date"
+                        placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
+                        size="default"
+                        @change="(date) => handleDateChange(date,2)" />
       </el-form-item>
       <el-form-item label="缁翠慨鏃ユ湡">
-        <el-date-picker
-            v-model="filters.maintenanceTimeStr"
-            type="date"
-            placeholder="璇烽�夋嫨缁翠慨鏃ユ湡"
-            size="default"
-            @change="(date) => handleDateChange(date,1)"
-        />
+        <el-date-picker v-model="filters.maintenanceTimeStr"
+                        type="date"
+                        placeholder="璇烽�夋嫨缁翠慨鏃ユ湡"
+                        size="default"
+                        @change="(date) => handleDateChange(date,1)" />
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" @click="getTableData">鎼滅储</el-button>
+        <el-button type="primary"
+                   @click="getTableData">鎼滅储</el-button>
         <el-button @click="resetFilters">閲嶇疆</el-button>
       </el-form-item>
     </el-form>
     <div class="table_list">
       <div class="actions">
-        <el-text class="mx-1" size="large">璁惧鎶ヤ慨</el-text>
+        <el-text class="mx-1"
+                 size="large">璁惧鎶ヤ慨</el-text>
         <div>
-          <el-button type="success" icon="Van" @click="addRepair">
+          <el-button type="success"
+                     icon="Van"
+                     @click="addRepair">
             鏂板鎶ヤ慨
           </el-button>
           <el-button @click="handleOut">
             瀵煎嚭
           </el-button>
-          <el-button
-            type="danger"
-            icon="Delete"
-            :disabled="multipleList.length <= 0 || hasFinishedStatus"
-            @click="delRepairByIds(multipleList.map((item) => item.id))"
-          >
+          <el-button type="danger"
+                     icon="Delete"
+                     :disabled="multipleList.length <= 0 || hasFinishedStatus"
+                     @click="delRepairByIds(multipleList.map((item) => item.id))">
             鎵归噺鍒犻櫎
           </el-button>
         </div>
       </div>
-      <PIMTable
-          rowKey="id"
-          isSelection
-          :column="columns"
-          :tableData="dataList"
-          :page="{
+      <PIMTable rowKey="id"
+                isSelection
+                :column="columns"
+                :tableData="dataList"
+                :page="{
           current: pagination.currentPage,
           size: pagination.pageSize,
           total: pagination.total,
         }"
-          @selection-change="handleSelectionChange"
-          @pagination="changePage"
-      >
+                @selection-change="handleSelectionChange"
+                @pagination="changePage">
         <template #statusRef="{ row }">
-          <el-tag v-if="row.status === 2" type="danger">澶辫触</el-tag>
-          <el-tag v-if="row.status === 1" type="success">瀹岀粨</el-tag>
-          <el-tag v-if="row.status === 3" type="info">寰呴獙鏀�</el-tag>
-          <el-tag v-if="row.status === 0" type="warning">寰呯淮淇�</el-tag>
+          <el-tag v-if="row.status === 2"
+                  type="danger">澶辫触</el-tag>
+          <el-tag v-if="row.status === 1"
+                  type="success">瀹岀粨</el-tag>
+          <el-tag v-if="row.status === 3"
+                  type="info">寰呴獙鏀�</el-tag>
+          <el-tag v-if="row.status === 0"
+                  type="warning">寰呯淮淇�</el-tag>
         </template>
         <template #operation="{ row }">
-          <el-button
-            type="primary"
-            link
-            :disabled="row.status === 1 || row.status === 3"
-            @click="editRepair(row.id)"
-          >
+          <el-button type="primary"
+                     link
+                     @click="viewRepair(row.id)">
+            璇︽儏
+          </el-button>
+          <el-button type="primary"
+                     link
+                     :disabled="row.status === 1 || row.status === 3"
+                     @click="editRepair(row.id)">
             缂栬緫
           </el-button>
-          <el-button
-            type="success"
-            link
-            :disabled="row.status !== 0"
-            @click="addMaintain(row)"
-          >
+          <el-button type="success"
+                     link
+                     :disabled="row.status !== 0"
+                     @click="addMaintain(row)">
             缁翠慨
           </el-button>
-          <el-button
-            type="warning"
-            link
-            :disabled="row.status !== 3"
-            @click="openAcceptance(row)"
-          >
+          <el-button type="warning"
+                     link
+                     :disabled="row.status !== 3"
+                     @click="openAcceptance(row)">
             楠屾敹
           </el-button>
-          <el-button
-            type="danger"
-            link
-            :disabled="row.status === 1 || row.status === 3"
-            @click="delRepairByIds(row.id)"
-          >
+          <el-button type="danger"
+                     link
+                     :disabled="row.status === 1 || row.status === 3"
+                     @click="delRepairByIds(row.id)">
             鍒犻櫎
           </el-button>
-          <el-button
-              type="primary"
-              link
-              @click="openFileDialog(row)"
-          >
+          <el-button type="primary"
+                     link
+                     @click="openFileDialog(row)">
             闄勪欢
           </el-button>
         </template>
       </PIMTable>
     </div>
-    <RepairModal ref="repairModalRef" @ok="getTableData"/>
-    <MaintainModal ref="maintainModalRef" @ok="getTableData"/>
-    <AcceptanceModal ref="acceptanceModalRef" @ok="getTableData"/>
-    <FileList v-if="fileDialogVisible"  v-model:visible="fileDialogVisible" :record-type="'device_repair'" :record-id="recordId"  />
+    <RepairModal ref="repairModalRef"
+                 @ok="getTableData" />
+    <MaintainModal ref="maintainModalRef"
+                   @ok="getTableData" />
+    <AcceptanceModal ref="acceptanceModalRef"
+                     @ok="getTableData" />
+    <FileList v-if="fileDialogVisible"
+              v-model:visible="fileDialogVisible"
+              :record-type="'device_repair'"
+              :record-id="recordId" />
   </div>
 </template>
 
 <script setup>
-import {onMounted, getCurrentInstance, computed, ref, defineAsyncComponent} from "vue";
-import {usePaginationApi} from "@/hooks/usePaginationApi";
-import {getRepairPage, delRepair} from "@/api/equipmentManagement/repair";
-import RepairModal from "./Modal/RepairModal.vue";
-import {ElMessageBox, ElMessage} from "element-plus";
-import dayjs from "dayjs";
-import MaintainModal from "./Modal/MaintainModal.vue";
-import AcceptanceModal from "./Modal/AcceptanceModal.vue";
-const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
+  import {
+    onMounted,
+    getCurrentInstance,
+    computed,
+    ref,
+    defineAsyncComponent,
+  } from "vue";
+  import { usePaginationApi } from "@/hooks/usePaginationApi";
+  import { getRepairPage, delRepair } from "@/api/equipmentManagement/repair";
+  import RepairModal from "./Modal/RepairModal.vue";
+  import { ElMessageBox, ElMessage } from "element-plus";
+  import dayjs from "dayjs";
+  import MaintainModal from "./Modal/MaintainModal.vue";
+  import AcceptanceModal from "./Modal/AcceptanceModal.vue";
+  const FileList = defineAsyncComponent(() =>
+    import("@/components/Dialog/FileList.vue")
+  );
 
-defineOptions({
-  name: "璁惧鎶ヤ慨",
-});
+  defineOptions({
+    name: "璁惧鎶ヤ慨",
+  });
 
-const {proxy} = getCurrentInstance();
+  const { proxy } = getCurrentInstance();
 
-// 妯℃�佹瀹炰緥
-const repairModalRef = ref();
-const maintainModalRef = ref();
-const acceptanceModalRef = ref();
+  // 妯℃�佹瀹炰緥
+  const repairModalRef = ref();
+  const maintainModalRef = ref();
+  const acceptanceModalRef = ref();
 
-// 琛ㄦ牸澶氶�夋閫変腑椤�
-const multipleList = ref([]);
+  // 琛ㄦ牸澶氶�夋閫変腑椤�
+  const multipleList = ref([]);
 
-// 琛ㄦ牸閽╁瓙
-const {
-  filters,
-  columns,
-  dataList,
-  pagination,
-  getTableData,
-  resetFilters,
-  onCurrentChange,
-} = usePaginationApi(
+  // 琛ㄦ牸閽╁瓙
+  const {
+    filters,
+    columns,
+    dataList,
+    pagination,
+    getTableData,
+    resetFilters,
+    onCurrentChange,
+  } = usePaginationApi(
     getRepairPage,
     {
       deviceName: undefined,
@@ -209,52 +211,15 @@
         prop: "deviceModel",
       },
       {
-        label: "鎶ヤ慨椤圭洰",
-        align: "center",
-        prop: "machineryCategory",
-      },
-      {
         label: "鎶ヤ慨鏃ユ湡",
         align: "center",
         prop: "repairTime",
-        formatData: (cell) => dayjs(cell).format("YYYY-MM-DD"),
+        formatData: cell => dayjs(cell).format("YYYY-MM-DD"),
       },
       {
         label: "鎶ヤ慨浜�",
         align: "center",
         prop: "repairName",
-      },
-      {
-        label: "鏁呴殰鐜拌薄",
-        align: "center",
-        prop: "remark",
-      },
-      {
-        label: "缁翠慨浜�",
-        align: "center",
-        prop: "maintenanceName",
-      },
-      {
-        label: "缁翠慨缁撴灉",
-        align: "center",
-        prop: "maintenanceResult",
-      },
-      {
-        label: "缁翠慨鏃ユ湡",
-        align: "center",
-        prop: "maintenanceTime",
-        formatData: (cell) => (cell ? dayjs(cell).format("YYYY-MM-DD") : ""),
-      },
-      {
-        label: "楠屾敹浜�",
-        align: "center",
-        prop: "acceptanceName",
-      },
-      {
-        label: "楠屾敹鏃堕棿",
-        align: "center",
-        prop: "acceptanceTime",
-        formatData: (cell) => (cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : ""),
       },
       {
         label: "鐘舵��",
@@ -269,127 +234,132 @@
         dataType: "slot",
         slot: "operation",
         align: "center",
-        width: "300px",
+        width: "320px",
       },
     ]
-);
+  );
 
-// type === 1 缁翠慨 2鎶ヤ慨闂�
-const handleDateChange = (value, type) => {
-  filters.maintenanceTimeStr = null
-  filters.c = null
-  if (type === 1) {
-    if (value) {
-      filters.maintenanceTimeStr = dayjs(value).format("YYYY-MM-DD");
+  // type === 1 缁翠慨 2鎶ヤ慨闂�
+  const handleDateChange = (value, type) => {
+    filters.maintenanceTimeStr = null;
+    filters.c = null;
+    if (type === 1) {
+      if (value) {
+        filters.maintenanceTimeStr = dayjs(value).format("YYYY-MM-DD");
+      }
+    } else {
+      if (value) {
+        filters.repairTimeStr = dayjs(value).format("YYYY-MM-DD");
+      }
     }
-  } else {
-    if (value) {
-      filters.repairTimeStr = dayjs(value).format("YYYY-MM-DD");
-    }
-  }
-  getTableData();
-};
+    getTableData();
+  };
 
-// 鎵撳紑闄勪欢寮圭獥
-const recordId =ref(0)
-const fileDialogVisible = ref(false)
+  // 鎵撳紑闄勪欢寮圭獥
+  const recordId = ref(0);
+  const fileDialogVisible = ref(false);
 
-const openFileDialog = async (row) => {
-  recordId.value = row.id
-  fileDialogVisible.value = true
-}
+  const openFileDialog = async row => {
+    recordId.value = row.id;
+    fileDialogVisible.value = true;
+  };
 
-// 澶氶�夊悗鍋氫粈涔�
-const handleSelectionChange = (selectionList) => {
-  multipleList.value = selectionList;
-};
+  // 澶氶�夊悗鍋氫粈涔�
+  const handleSelectionChange = selectionList => {
+    multipleList.value = selectionList;
+  };
 
-// 妫�鏌ラ�変腑鐨勮褰曚腑鏄惁鏈夊畬缁撶姸鎬佺殑
-const hasFinishedStatus = computed(() => {
-  return multipleList.value.some(item => item.status === 1)
-})
-
-// 鏂板鎶ヤ慨
-const addRepair = () => {
-  repairModalRef.value.openAdd();
-};
-
-// 缂栬緫鎶ヤ慨
-const editRepair = (id) => {
-  repairModalRef.value.openEdit(id);
-};
-
-// 鏂板缁翠慨
-const addMaintain = (row) => {
-  maintainModalRef.value.open(row.id, row);
-};
-
-// 鎵撳紑楠屾敹寮圭獥
-const openAcceptance = (row) => {
-  acceptanceModalRef.value.open(row);
-};
-
-const changePage = ({page, limit}) => {
-  pagination.currentPage = page;
-  pagination.pageSize = limit;
-  onCurrentChange(page);
-};
-
-// 鍗曡鍒犻櫎
-const delRepairByIds = async (ids) => {
-  // 妫�鏌ユ槸鍚︽湁瀹岀粨鐘舵�佺殑璁板綍
-  const idsArray = Array.isArray(ids) ? ids : [ids];
-  const hasFinished = idsArray.some(id => {
-    const record = dataList.value.find(item => item.id === id);
-    return record && record.status === 1;
+  // 妫�鏌ラ�変腑鐨勮褰曚腑鏄惁鏈夊畬缁撶姸鎬佺殑
+  const hasFinishedStatus = computed(() => {
+    return multipleList.value.some(item => item.status === 1);
   });
 
-  if (hasFinished) {
-    ElMessage.warning('涓嶈兘鍒犻櫎鐘舵�佷负瀹岀粨鐨勮褰�');
-    return;
-  }
+  // 鏂板鎶ヤ慨
+  const addRepair = () => {
+    repairModalRef.value.openAdd();
+  };
 
-  ElMessageBox.confirm("纭鍒犻櫎鎶ヤ慨鏁版嵁, 姝ゆ搷浣滀笉鍙��?", "璀﹀憡", {
-    confirmButtonText: "纭畾",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  }).then(async () => {
-    const {code} = await delRepair(ids);
-    if (code === 200) {
-      ElMessage.success("鍒犻櫎鎴愬姛");
-      getTableData();
+  // 璇︽儏鏌ョ湅
+  const viewRepair = id => {
+    repairModalRef.value.openView(id);
+  };
+
+  // 缂栬緫鎶ヤ慨
+  const editRepair = id => {
+    repairModalRef.value.openEdit(id);
+  };
+
+  // 鏂板缁翠慨
+  const addMaintain = row => {
+    maintainModalRef.value.open(row.id, row);
+  };
+
+  // 鎵撳紑楠屾敹寮圭獥
+  const openAcceptance = row => {
+    acceptanceModalRef.value.open(row);
+  };
+
+  const changePage = ({ page, limit }) => {
+    pagination.currentPage = page;
+    pagination.pageSize = limit;
+    onCurrentChange(page);
+  };
+
+  // 鍗曡鍒犻櫎
+  const delRepairByIds = async ids => {
+    // 妫�鏌ユ槸鍚︽湁瀹岀粨鐘舵�佺殑璁板綍
+    const idsArray = Array.isArray(ids) ? ids : [ids];
+    const hasFinished = idsArray.some(id => {
+      const record = dataList.value.find(item => item.id === id);
+      return record && record.status === 1;
+    });
+
+    if (hasFinished) {
+      ElMessage.warning("涓嶈兘鍒犻櫎鐘舵�佷负瀹岀粨鐨勮褰�");
+      return;
     }
-  });
-};
 
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+    ElMessageBox.confirm("纭鍒犻櫎鎶ヤ慨鏁版嵁, 姝ゆ搷浣滀笉鍙��?", "璀﹀憡", {
+      confirmButtonText: "纭畾",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    }).then(async () => {
+      const { code } = await delRepair(ids);
+      if (code === 200) {
+        ElMessage.success("鍒犻櫎鎴愬姛");
+        getTableData();
+      }
+    });
+  };
+
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
         proxy.download("/device/repair/export", {}, "璁惧鎶ヤ慨.xlsx");
       })
       .catch(() => {
         ElMessage.info("宸插彇娑�");
       });
-};
+  };
 
-onMounted(() => {
-  getTableData();
-});
+  onMounted(() => {
+    getTableData();
+  });
 </script>
 
 <style lang="scss" scoped>
-.table_list {
-  margin-top: unset;
-}
+  .table_list {
+    margin-top: unset;
+  }
 
-.actions {
-  display: flex;
-  justify-content: space-between;
-  margin-bottom: 10px;
-}
+  .actions {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 10px;
+  }
 </style>
diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index 01a513b..4251daa 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -303,6 +303,13 @@
         return params == "閿�鍞�" ? "閿�鍞�" : "鍐呴儴";
       },
     },
+    {
+      label: "閿�鍞悎鍚屽彿",
+      prop: "salesContractNo",
+      width: "200px",
+      dataType: "slot",
+      slot: "salesContractNo",
+    },
 
     {
       label: "浜у搧鍚嶇О",
@@ -328,7 +335,6 @@
       label: "鎵�闇�鏁伴噺",
       prop: "qtyRequired",
       width: "150px",
-      align: "right",
       dataType: "slot",
       slot: "qtyRequired",
       className: "volume-cell",
@@ -377,13 +383,7 @@
       className: "date-cell",
       formatData: cell => (cell ? dayjs(cell).format("YYYY-MM-DD") : ""),
     },
-    {
-      label: "閿�鍞悎鍚屽彿",
-      prop: "salesContractNo",
-      width: "200px",
-      dataType: "slot",
-      slot: "salesContractNo",
-    },
+
     {
       label: "瀹㈡埛鍚嶇О",
       prop: "customerName",
diff --git a/src/views/salesManagement/receiptPaymentLedger/index.vue b/src/views/salesManagement/receiptPaymentLedger/index.vue
index d92843d..f5a9d8f 100644
--- a/src/views/salesManagement/receiptPaymentLedger/index.vue
+++ b/src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -37,7 +37,7 @@
                              show-overflow-tooltip
                              width="200" />
             <el-table-column label="鍚堝悓閲戦(鍏�)"
-                             prop="invoiceTotal"
+                             prop="contractAmounts"
                              show-overflow-tooltip
                              :formatter="formattedNumber"
                              width="200" />
@@ -47,12 +47,12 @@
                              :formatter="formattedNumber"
                              width="200" />
             <el-table-column label="搴旀敹閲戦(鍏�)"
-                             prop="unReceiptPaymentAmount"
+                             prop="receiptableAmount"
                              show-overflow-tooltip
                              width="200">
               <template #default="{ row, column }">
                 <el-text type="danger">
-                  {{ formattedNumber(row, column, row.unReceiptPaymentAmount) }}
+                  {{ formattedNumber(row, column, row.receiptableAmount) }}
                 </el-text>
               </template>
             </el-table-column>
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index a757edc..2e58391 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -234,9 +234,13 @@
                          show-overflow-tooltip />
         <el-table-column fixed="right"
                          label="鎿嶄綔"
-                         width="130"
+                         width="220"
                          align="center">
           <template #default="scope">
+            <el-button link
+                       type="primary"
+                       @click="openForm('view', scope.row)">璇︽儏
+            </el-button>
             <el-button link
                        type="primary"
                        @click="openForm('edit', scope.row)"
@@ -257,7 +261,7 @@
                   @pagination="paginationChange" />
     </div>
     <FormDialog v-model="dialogFormVisible"
-                :title="operationType === 'add' ? '鏂板閿�鍞彴璐﹂〉闈�' : '缂栬緫閿�鍞彴璐﹂〉闈�'"
+                :title="operationType === 'add' ? '鏂板閿�鍞彴璐﹂〉闈�' : (operationType === 'edit' ? '缂栬緫閿�鍞彴璐﹂〉闈�' : '閿�鍞彴璐﹁鎯�')"
                 :width="'70%'"
                 :operation-type="operationType"
                 @close="closeDia"
@@ -291,7 +295,7 @@
                 <el-input v-model="form.salesContractNo"
                           :placeholder="form.autoGenerateContractNo ? '鑷姩鐢熸垚' : '璇疯緭鍏�'"
                           clearable
-                          :disabled="form.autoGenerateContractNo" />
+                          :disabled="form.autoGenerateContractNo || operationType === 'view'" />
               </div>
             </el-form-item>
           </el-col>
@@ -374,6 +378,7 @@
                          :reserve-keyword="false"
                          placeholder="璇烽�夋嫨"
                          clearable
+                         :disabled="operationType === 'view'"
                          @change="changs">
                 <el-option v-for="item in userList"
                            :key="item.userId"
@@ -391,7 +396,8 @@
                               format="YYYY-MM-DD"
                               type="date"
                               placeholder="璇烽�夋嫨"
-                              clearable />
+                              clearable
+                              :disabled="operationType === 'view'" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -405,7 +411,8 @@
                               format="YYYY-MM-DD"
                               type="date"
                               placeholder="璇烽�夋嫨"
-                              clearable />
+                              clearable
+                              :disabled="operationType === 'view'" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -493,11 +500,13 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+        <el-row v-if="operationType !== 'view'"
+                :gutter="30">
           <el-col :span="24">
             <el-form-item label="闄勪欢鏉愭枡锛�"
                           prop="salesLedgerFiles">
-              <FileUpload v-model:file-list="fileList" />
+              <FileUpload v-model:file-list="fileList"
+                          :disabled="operationType === 'view'" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -2071,286 +2080,286 @@
 
     // 鏋勫缓鎵撳嵃鍐呭
     let printContent = `
-                                                                  <!DOCTYPE html>
-                                                                  <html>
-                                                                  <head>
-                                                                    <meta charset="UTF-8">
-                                                                    <title>鎵撳嵃棰勮</title>
-                                                                    <style>
-                                                                      body {
-                                                                        margin: 0;
-                                                                        padding: 0;
-                                                                        font-family: "SimSun", serif;
-                                                                        background: white;
-                                                                      }
-                                                                                                                   .print-page {
-                                                                          width: 200mm;
-                                                                          height: 75mm;
-                                                                          padding: 10mm;
-                                                                          padding-left: 20mm;
-                                                                          background: white;
-                                                                          box-sizing: border-box;
-                                                                          page-break-after: always;
-                                                                          page-break-inside: avoid;
-                                                                        }
-                                                                       .print-page:last-child {
-                                                                         page-break-after: avoid;
-                                                                       }
-                                                                      .delivery-note {
-                                                                        width: 100%;
-                                                                        height: 100%;
-                                                                        font-size: 12px;
-                                                                        line-height: 1.2;
-                                                                        display: flex;
-                                                                        flex-direction: column;
-                                                                        color: #000;
-                                                                      }
-                                                                      .header {
-                                                                        text-align: center;
-                                                                        margin-bottom: 8px;
-                                                                      }
-                                                                      .company-name {
-                                                                        font-size: 18px;
-                                                                        font-weight: bold;
-                                                                        margin-bottom: 4px;
-                                                                      }
-                                                                      .document-title {
-                                                                        font-size: 16px;
-                                                                        font-weight: bold;
-                                                                      }
-                                                                      .info-section {
-                                                                        margin-bottom: 8px;
-                                                                        display: flex;
-                                                                        justify-content: space-between;
-                                                                        align-items: center;
-                                                                      }
-                                                                      .info-row {
-                                                                        line-height: 20px;
-                                                                      }
-                                                                      .label {
-                                                                        font-weight: bold;
-                                                                        width: 60px;
-                                                                        font-size: 12px;
-                                                                      }
-                                                                      .value {
-                                                                        margin-right: 20px;
-                                                                        min-width: 80px;
-                                                                        font-size: 12px;
-                                                                      }
-                                                                               .table-section {
-                                                                               margin-bottom: 40px;
-                                                                        //  flex: 0.6;
-                                                                       }
-                                                                      .product-table {
-                                                                        width: 100%;
-                                                                        border-collapse: collapse;
-                                                                        border: 1px solid #000;
-                                                                      }
-                                                                               .product-table th, .product-table td {
-                                                                         border: 1px solid #000;
-                                                                         padding: 6px;
-                                                                         text-align: center;
-                                                                         font-size: 12px;
-                                                                         line-height: 1.4;
-                                                                       }
-                                                                      .product-table th {
-                                                                        font-weight: bold;
-                                                                      }
-                                                                      .total-value {
-                                                                        font-weight: bold;
-                                                                      }
-                                                                      .footer-section {
-                                                                        margin-top: auto;
-                                                                      }
-                                                                      .footer-row {
-                                                                        display: flex;
-                                                                        margin-bottom: 3px;
-                                                                        line-height: 22px;
-                                                                        justify-content: space-between;
-                                                                      }
-                                                                      .footer-item {
-                                                                        display: flex;
-                                                                        margin-right: 20px;
-                                                                      }
-                                                                      .footer-item .label {
-                                                                        font-weight: bold;
-                                                                        width: 80px;
-                                                                        font-size: 12px;
-                                                                      }
-                                                                      .footer-item .value {
-                                                                        min-width: 80px;
-                                                                        font-size: 12px;
-                                                                      }
-                                                                      .address-item .address-value {
-                                                                        min-width: 200px;
-                                                                      }
-                                                                      @media print {
-                                                                        body {
-                                                                          margin: 0;
-                                                                          padding: 0;
-                                                                        }
-                                                                                   .print-page {
-                                                                           margin: 0;
-                                                                           padding: 10mm;
-                                                                           /* padding-left: 20mm; */
-                                                                           page-break-inside: avoid;
-                                                                           page-break-after: always;
-                                                                         }
-                                                                         .print-page:last-child {
-                                                                           page-break-after: avoid;
-                                                                         }
-                                                                      }
-                                                                    </style>
-                                                                  </head>
-                                                                  <body>
-                                                                `;
+                                                                                  <!DOCTYPE html>
+                                                                                  <html>
+                                                                                  <head>
+                                                                                    <meta charset="UTF-8">
+                                                                                    <title>鎵撳嵃棰勮</title>
+                                                                                    <style>
+                                                                                      body {
+                                                                                        margin: 0;
+                                                                                        padding: 0;
+                                                                                        font-family: "SimSun", serif;
+                                                                                        background: white;
+                                                                                      }
+                                                                                                                                   .print-page {
+                                                                                          width: 200mm;
+                                                                                          height: 75mm;
+                                                                                          padding: 10mm;
+                                                                                          padding-left: 20mm;
+                                                                                          background: white;
+                                                                                          box-sizing: border-box;
+                                                                                          page-break-after: always;
+                                                                                          page-break-inside: avoid;
+                                                                                        }
+                                                                                       .print-page:last-child {
+                                                                                         page-break-after: avoid;
+                                                                                       }
+                                                                                      .delivery-note {
+                                                                                        width: 100%;
+                                                                                        height: 100%;
+                                                                                        font-size: 12px;
+                                                                                        line-height: 1.2;
+                                                                                        display: flex;
+                                                                                        flex-direction: column;
+                                                                                        color: #000;
+                                                                                      }
+                                                                                      .header {
+                                                                                        text-align: center;
+                                                                                        margin-bottom: 8px;
+                                                                                      }
+                                                                                      .company-name {
+                                                                                        font-size: 18px;
+                                                                                        font-weight: bold;
+                                                                                        margin-bottom: 4px;
+                                                                                      }
+                                                                                      .document-title {
+                                                                                        font-size: 16px;
+                                                                                        font-weight: bold;
+                                                                                      }
+                                                                                      .info-section {
+                                                                                        margin-bottom: 8px;
+                                                                                        display: flex;
+                                                                                        justify-content: space-between;
+                                                                                        align-items: center;
+                                                                                      }
+                                                                                      .info-row {
+                                                                                        line-height: 20px;
+                                                                                      }
+                                                                                      .label {
+                                                                                        font-weight: bold;
+                                                                                        width: 60px;
+                                                                                        font-size: 12px;
+                                                                                      }
+                                                                                      .value {
+                                                                                        margin-right: 20px;
+                                                                                        min-width: 80px;
+                                                                                        font-size: 12px;
+                                                                                      }
+                                                                                               .table-section {
+                                                                                               margin-bottom: 40px;
+                                                                                        //  flex: 0.6;
+                                                                                       }
+                                                                                      .product-table {
+                                                                                        width: 100%;
+                                                                                        border-collapse: collapse;
+                                                                                        border: 1px solid #000;
+                                                                                      }
+                                                                                               .product-table th, .product-table td {
+                                                                                         border: 1px solid #000;
+                                                                                         padding: 6px;
+                                                                                         text-align: center;
+                                                                                         font-size: 12px;
+                                                                                         line-height: 1.4;
+                                                                                       }
+                                                                                      .product-table th {
+                                                                                        font-weight: bold;
+                                                                                      }
+                                                                                      .total-value {
+                                                                                        font-weight: bold;
+                                                                                      }
+                                                                                      .footer-section {
+                                                                                        margin-top: auto;
+                                                                                      }
+                                                                                      .footer-row {
+                                                                                        display: flex;
+                                                                                        margin-bottom: 3px;
+                                                                                        line-height: 22px;
+                                                                                        justify-content: space-between;
+                                                                                      }
+                                                                                      .footer-item {
+                                                                                        display: flex;
+                                                                                        margin-right: 20px;
+                                                                                      }
+                                                                                      .footer-item .label {
+                                                                                        font-weight: bold;
+                                                                                        width: 80px;
+                                                                                        font-size: 12px;
+                                                                                      }
+                                                                                      .footer-item .value {
+                                                                                        min-width: 80px;
+                                                                                        font-size: 12px;
+                                                                                      }
+                                                                                      .address-item .address-value {
+                                                                                        min-width: 200px;
+                                                                                      }
+                                                                                      @media print {
+                                                                                        body {
+                                                                                          margin: 0;
+                                                                                          padding: 0;
+                                                                                        }
+                                                                                                   .print-page {
+                                                                                           margin: 0;
+                                                                                           padding: 10mm;
+                                                                                           /* padding-left: 20mm; */
+                                                                                           page-break-inside: avoid;
+                                                                                           page-break-after: always;
+                                                                                         }
+                                                                                         .print-page:last-child {
+                                                                                           page-break-after: avoid;
+                                                                                         }
+                                                                                      }
+                                                                                    </style>
+                                                                                  </head>
+                                                                                  <body>
+                                                                                `;
 
     // 涓烘瘡鏉℃暟鎹敓鎴愭墦鍗伴〉闈�
     printData.value.forEach((item, index) => {
       printContent += `
-                                                                    <div class="print-page">
-                                                                      <div class="delivery-note">
-                                                                        <div class="header">
-                                                                          <div class="document-title">闆跺敭鍙戣揣鍗�</div>
-                                                                        </div>
-                                                                        
-                                                                        <div class="info-section">
-                                                                          <div class="info-row">
-                                                                            <div>
-                                                                              <span class="label">鍙戣揣鏃ユ湡锛�</span>
-                                                                              <span class="value">${formatDate(
-                                                                                item.createTime
-                                                                              )}</span>
-                                                                            </div>
-                                                                            <div>
-                                                                              <span class="label">瀹㈡埛鍚嶇О锛�</span>
-                                                                              <span class="value">${
-                                                                                item.customerName
-                                                                              }</span>
-                                                                            </div>
-                                                                          </div>
-                                                                          <div class="info-row">
-                                                                            <span class="label">鍗曞彿锛�</span>
-                                                                            <span class="value">${
-                                                                              item.salesContractNo ||
-                                                                              ""
-                                                                            }</span>
-                                                                          </div>
-                                                                        </div>
+                                                                                    <div class="print-page">
+                                                                                      <div class="delivery-note">
+                                                                                        <div class="header">
+                                                                                          <div class="document-title">闆跺敭鍙戣揣鍗�</div>
+                                                                                        </div>
 
-                                                                        <div class="table-section">
-                                                                          <table class="product-table">
-                                                                            <thead>
-                                                                              <tr>
-                                                                                <th>浜у搧鍚嶇О</th>
-                                                                                <th>瑙勬牸鍨嬪彿</th>
-                                                                                <th>鍗曚綅</th>
-                                                                                <th>鍗曚环</th>
-                                                                                <th>闆跺敭鏁伴噺</th>
-                                                                                <th>闆跺敭閲戦</th>
-                                                                              </tr>
-                                                                            </thead>
-                                                                            <tbody>
-                                                                              ${
-                                                                                item.products &&
-                                                                                item
-                                                                                  .products
-                                                                                  .length >
-                                                                                  0
-                                                                                  ? item.products
-                                                                                      .map(
-                                                                                        product => `
-                                                                                  <tr>
-                                                                                    <td>${
-                                                                                      product.productCategory ||
-                                                                                      ""
-                                                                                    }</td>
-                                                                                    <td>${
-                                                                                      product.specificationModel ||
-                                                                                      ""
-                                                                                    }</td>
-                                                                                    <td>${
-                                                                                      product.unit ||
-                                                                                      ""
-                                                                                    }</td>
-                                                                                    <td>${
-                                                                                      product.taxInclusiveUnitPrice ||
-                                                                                      "0"
-                                                                                    }</td>
-                                                                                    <td>${
-                                                                                      product.quantity ||
-                                                                                      "0"
-                                                                                    }</td>
-                                                                                    <td>${
-                                                                                      product.taxInclusiveTotalPrice ||
-                                                                                      "0"
-                                                                                    }</td>
-                                                                                  </tr>
-                                                                                `
-                                                                                      )
-                                                                                      .join(
-                                                                                        ""
-                                                                                      )
-                                                                                  : '<tr><td colspan="6" style="text-align: center; color: #999;">鏆傛棤浜у搧鏁版嵁</td></tr>'
-                                                                              }
-                                                                            </tbody>
-                                                                            <tfoot>
-                                                                              <tr>
-                                                                                <td class="label">鍚堣</td>
-                                                                                <td class="total-value"></td>
-                                                                                <td class="total-value"></td>
-                                                                                <td class="total-value"></td>
-                                                                                <td class="total-value">${getTotalQuantityForPrint(
-                                                                                  item.products
-                                                                                )}</td>
-                                                                                <td class="total-value">${getTotalAmountForPrint(
-                                                                                  item.products
-                                                                                )}</td>
-                                                                              </tr>
-                                                                            </tfoot>
-                                                                          </table>
-                                                                        </div>
+                                                                                        <div class="info-section">
+                                                                                          <div class="info-row">
+                                                                                            <div>
+                                                                                              <span class="label">鍙戣揣鏃ユ湡锛�</span>
+                                                                                              <span class="value">${formatDate(
+                                                                                                item.createTime
+                                                                                              )}</span>
+                                                                                            </div>
+                                                                                            <div>
+                                                                                              <span class="label">瀹㈡埛鍚嶇О锛�</span>
+                                                                                              <span class="value">${
+                                                                                                item.customerName
+                                                                                              }</span>
+                                                                                            </div>
+                                                                                          </div>
+                                                                                          <div class="info-row">
+                                                                                            <span class="label">鍗曞彿锛�</span>
+                                                                                            <span class="value">${
+                                                                                              item.salesContractNo ||
+                                                                                              ""
+                                                                                            }</span>
+                                                                                          </div>
+                                                                                        </div>
 
-                                                                        <div class="footer-section">
-                                                                          <div class="footer-row">
-                                                                            <div class="footer-item">
-                                                                              <span class="label">鏀惰揣鐢佃瘽锛�</span>
-                                                                              <span class="value"></span>
-                                                                            </div>
-                                                                            <div class="footer-item">
-                                                                              <span class="label">鏀惰揣浜猴細</span>
-                                                                              <span class="value"></span>
-                                                                            </div>
-                                                                            <div class="footer-item address-item">
-                                                                              <span class="label">鏀惰揣鍦板潃锛�</span>
-                                                                              <span class="value address-value"></span>
-                                                                            </div>
-                                                                          </div>
-                                                                          <div class="footer-row">
-                                                                            <div class="footer-item">
-                                                                              <span class="label">鎿嶄綔鍛橈細</span>
-                                                                              <span class="value">${
-                                                                                userStore.nickName ||
-                                                                                "鎾曞紑鍓�"
-                                                                              }</span>
-                                                                            </div>
-                                                                            <div class="footer-item">
-                                                                              <span class="label">鎵撳嵃鏃ユ湡锛�</span>
-                                                                              <span class="value">${formatDateTime(
-                                                                                new Date()
-                                                                              )}</span>
-                                                                            </div>
-                                                                          </div>
-                                                                        </div>
-                                                                      </div>
-                                                                    </div>
-                                                                  `;
+                                                                                        <div class="table-section">
+                                                                                          <table class="product-table">
+                                                                                            <thead>
+                                                                                              <tr>
+                                                                                                <th>浜у搧鍚嶇О</th>
+                                                                                                <th>瑙勬牸鍨嬪彿</th>
+                                                                                                <th>鍗曚綅</th>
+                                                                                                <th>鍗曚环</th>
+                                                                                                <th>闆跺敭鏁伴噺</th>
+                                                                                                <th>闆跺敭閲戦</th>
+                                                                                              </tr>
+                                                                                            </thead>
+                                                                                            <tbody>
+                                                                                              ${
+                                                                                                item.products &&
+                                                                                                item
+                                                                                                  .products
+                                                                                                  .length >
+                                                                                                  0
+                                                                                                  ? item.products
+                                                                                                      .map(
+                                                                                                        product => `
+                                                                                                  <tr>
+                                                                                                    <td>${
+                                                                                                      product.productCategory ||
+                                                                                                      ""
+                                                                                                    }</td>
+                                                                                                    <td>${
+                                                                                                      product.specificationModel ||
+                                                                                                      ""
+                                                                                                    }</td>
+                                                                                                    <td>${
+                                                                                                      product.unit ||
+                                                                                                      ""
+                                                                                                    }</td>
+                                                                                                    <td>${
+                                                                                                      product.taxInclusiveUnitPrice ||
+                                                                                                      "0"
+                                                                                                    }</td>
+                                                                                                    <td>${
+                                                                                                      product.quantity ||
+                                                                                                      "0"
+                                                                                                    }</td>
+                                                                                                    <td>${
+                                                                                                      product.taxInclusiveTotalPrice ||
+                                                                                                      "0"
+                                                                                                    }</td>
+                                                                                                  </tr>
+                                                                                                `
+                                                                                                      )
+                                                                                                      .join(
+                                                                                                        ""
+                                                                                                      )
+                                                                                                  : '<tr><td colspan="6" style="text-align: center; color: #999;">鏆傛棤浜у搧鏁版嵁</td></tr>'
+                                                                                              }
+                                                                                            </tbody>
+                                                                                            <tfoot>
+                                                                                              <tr>
+                                                                                                <td class="label">鍚堣</td>
+                                                                                                <td class="total-value"></td>
+                                                                                                <td class="total-value"></td>
+                                                                                                <td class="total-value"></td>
+                                                                                                <td class="total-value">${getTotalQuantityForPrint(
+                                                                                                  item.products
+                                                                                                )}</td>
+                                                                                                <td class="total-value">${getTotalAmountForPrint(
+                                                                                                  item.products
+                                                                                                )}</td>
+                                                                                              </tr>
+                                                                                            </tfoot>
+                                                                                          </table>
+                                                                                        </div>
+
+                                                                                        <div class="footer-section">
+                                                                                          <div class="footer-row">
+                                                                                            <div class="footer-item">
+                                                                                              <span class="label">鏀惰揣鐢佃瘽锛�</span>
+                                                                                              <span class="value"></span>
+                                                                                            </div>
+                                                                                            <div class="footer-item">
+                                                                                              <span class="label">鏀惰揣浜猴細</span>
+                                                                                              <span class="value"></span>
+                                                                                            </div>
+                                                                                            <div class="footer-item address-item">
+                                                                                              <span class="label">鏀惰揣鍦板潃锛�</span>
+                                                                                              <span class="value address-value"></span>
+                                                                                            </div>
+                                                                                          </div>
+                                                                                          <div class="footer-row">
+                                                                                            <div class="footer-item">
+                                                                                              <span class="label">鎿嶄綔鍛橈細</span>
+                                                                                              <span class="value">${
+                                                                                                userStore.nickName ||
+                                                                                                "鎾曞紑鍓�"
+                                                                                              }</span>
+                                                                                            </div>
+                                                                                            <div class="footer-item">
+                                                                                              <span class="label">鎵撳嵃鏃ユ湡锛�</span>
+                                                                                              <span class="value">${formatDateTime(
+                                                                                                new Date()
+                                                                                              )}</span>
+                                                                                            </div>
+                                                                                          </div>
+                                                                                        </div>
+                                                                                      </div>
+                                                                                    </div>
+                                                                                  `;
     });
 
     printContent += `
-                                                                  </body>
-                                                                  </html>
-                                                                `;
+                                                                                  </body>
+                                                                                  </html>
+                                                                                `;
 
     // 鍐欏叆鍐呭鍒版柊绐楀彛
     printWindow.document.write(printContent);

--
Gitblit v1.9.3