From 7726b6cdab80596d2e2f7dd3fe1ec3dfbdeee155 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期五, 12 六月 2026 09:42:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro_河南鹤壁' into dev_pro_河南鹤壁

---
 src/views/procurementManagement/procurementLedger/index.vue | 1172 +++++++++++++++++++++++++---------------------------------
 1 files changed, 512 insertions(+), 660 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 1991342..9bbe87e 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -2,49 +2,37 @@
   <div class="app-container">
     <div class="search_form">
       <div>
-        <el-form :model="searchForm"
-                 :inline="true">
+        <el-form :model="searchForm" :inline="true">
           <el-form-item label="渚涘簲鍟嗗悕绉帮細">
-            <el-input v-model="searchForm.supplierName"
-                      placeholder="璇疯緭鍏�"
-                      clearable
-                      prefix-icon="Search"
-                      @change="handleQuery"/>
+            <el-input v-model="searchForm.supplierName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+              @change="handleQuery" />
           </el-form-item>
           <el-form-item label="閲囪喘鍚堝悓鍙凤細">
-            <el-input v-model="searchForm.purchaseContractNumber"
-                      style="width: 240px"
-                      placeholder="璇疯緭鍏�"
-                      @change="handleQuery"
-                      clearable
-                      :prefix-icon="Search"/>
+            <el-input v-model="searchForm.purchaseContractNumber" style="width: 240px" placeholder="璇疯緭鍏�"
+              @change="handleQuery" clearable :prefix-icon="Search" />
           </el-form-item>
-          <el-form-item label="閿�鍞悎鍚屽彿锛�">
-            <el-input v-model="searchForm.salesContractNo"
-                      placeholder="璇疯緭鍏�"
-                      clearable
-                      prefix-icon="Search"
-                      @change="handleQuery"/>
+          <el-form-item v-if="showSalesContractBinding" label="閿�鍞悎鍚屽彿锛�">
+            <el-input v-model="searchForm.salesContractNo" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+              @change="handleQuery" />
           </el-form-item>
           <el-form-item label="椤圭洰鍚嶇О锛�">
-            <el-input v-model="searchForm.projectName"
-                      placeholder="璇疯緭鍏�"
-                      clearable
-                      prefix-icon="Search"
-                      @change="handleQuery"/>
+            <el-input v-model="searchForm.projectName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+              @change="handleQuery" />
           </el-form-item>
           <el-form-item label="褰曞叆鏃ユ湡锛�">
-            <el-date-picker v-model="searchForm.entryDate"
-                            value-format="YYYY-MM-DD"
-                            format="YYYY-MM-DD"
-                            type="daterange"
-                            placeholder="璇烽�夋嫨"
-                            clearable
-                            @change="changeDaterange"/>
+            <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD"
+              type="daterange" placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
+          </el-form-item>
+          <el-form-item label="鍏ュ簱鐘舵�侊細">
+            <el-select v-model="searchForm.stockInStatus" placeholder="璇烽�夋嫨" clearable style="width: 240px"
+              @change="handleQuery">
+              <el-option label="寰呭叆搴�" value="寰呭叆搴�" />
+              <el-option label="鍏ュ簱涓�" value="鍏ュ簱涓�" />
+              <el-option label="瀹屽叏鍏ュ簱" value="瀹屽叏鍏ュ簱" />
+            </el-select>
           </el-form-item>
           <el-form-item>
-            <el-button type="primary"
-                       @click="handleQuery"> 鎼滅储
+            <el-button type="primary" @click="handleQuery"> 鎼滅储
             </el-button>
           </el-form-item>
         </el-form>
@@ -52,407 +40,225 @@
     </div>
     <div class="table_list">
       <div style="display: flex;justify-content: flex-end;margin-bottom: 20px;">
-        <el-button type="primary"
-                   @click="openForm('add')">鏂板鍙拌处</el-button>
+        <el-button type="primary" @click="openForm('add')">鏂板鍙拌处</el-button>
         <el-button type="primary" plain @click="handleImport">瀵煎叆</el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
-        <el-button type="danger"
-                   plain
-                   @click="handleDelete">鍒犻櫎
+        <el-button type="danger" plain @click="handleDelete">鍒犻櫎
         </el-button>
       </div>
-      <el-table :data="tableData"
-                border
-                v-loading="tableLoading"
-                @selection-change="handleSelectionChange"
-                :expand-row-keys="expandedRowKeys"
-                :row-key="(row) => row.id"
-                show-summary
-                :summary-method="summarizeMainTable"
-                @expand-change="expandChange"
-                height="calc(100vh - 21.5em)">
-        <el-table-column align="center"
-                         type="selection"
-                         width="55"/>
+      <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
+        :expand-row-keys="expandedRowKeys" :row-key="(row) => row.id" show-summary :summary-method="summarizeMainTable"
+        @expand-change="expandChange" height="calc(100vh - 21.5em)">
+        <el-table-column align="center" type="selection" width="55" />
         <el-table-column type="expand">
           <template #default="props">
-            <el-table :data="props.row.children"
-                      border
-                      show-summary
-                      :summary-method="summarizeChildrenTable">
-              <el-table-column align="center"
-                               label="搴忓彿"
-                               type="index"
-                               width="60"/>
-              <el-table-column label="浜у搧澶х被"
-                               prop="productCategory"/>
-              <el-table-column label="瑙勬牸鍨嬪彿"
-                               prop="specificationModel"/>
-              <el-table-column label="鍗曚綅"
-                               prop="unit"/>
-              <el-table-column label="鏁伴噺"
-                               prop="quantity"/>
-              <el-table-column label="鍙敤鏁伴噺"
-                               prop="availableQuality"/>
-              <el-table-column label="閫�璐ф暟閲�"
-                               prop="returnQuality"/>
-
-              <el-table-column label="绋庣巼(%)"
-                               prop="taxRate"/>
-              <el-table-column label="鍚◣鍗曚环(鍏�)"
-                               prop="taxInclusiveUnitPrice"
-                               :formatter="formattedNumber"/>
-              <el-table-column label="鍚◣鎬讳环(鍏�)"
-                               prop="taxInclusiveTotalPrice"
-                               :formatter="formattedNumber"/>
-              <el-table-column label="涓嶅惈绋庢�讳环(鍏�)"
-                               prop="taxExclusiveTotalPrice"
-                               :formatter="formattedNumber"/>
+            <el-table :data="props.row.children" border show-summary :summary-method="summarizeChildrenTable">
+              <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+              <el-table-column label="浜у搧澶х被" prop="productCategory" />
+              <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
+              <el-table-column label="鍗曚綅" prop="unit" />
+              <el-table-column label="鍏ュ簱瀹℃牳鐘舵��" prop="stockInApprovalStatus" width="120">
+                <template #default="scope">
+                  <el-tag :type="getStockInApprovalStatusType(scope.row.stockInApprovalStatus)" size="small">
+                    {{ scope.row.stockInApprovalStatus || '--' }}
+                  </el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column label="鏁伴噺" prop="quantity" />
+              <el-table-column label="鍙敤鏁伴噺" prop="availableQuality" />
+              <el-table-column label="閫�璐ф暟閲�" prop="returnQuality" />
+              <el-table-column label="绋庣巼(%)" prop="taxRate" />
+              <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
+              <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
+              <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
             </el-table>
           </template>
         </el-table-column>
-        <el-table-column align="center"
-                         label="搴忓彿"
-                         type="index"
-                         width="60"/>
-        <el-table-column label="閲囪喘鍚堝悓鍙�"
-                         prop="purchaseContractNumber"
-                         width="160"
-                         show-overflow-tooltip/>
-        <el-table-column label="閿�鍞悎鍚屽彿"
-                         prop="salesContractNo"
-                         width="160"
-                         show-overflow-tooltip/>
-        <el-table-column label="渚涘簲鍟嗗悕绉�"
-                         prop="supplierName"
-                         width="160"
-                         show-overflow-tooltip/>
-        <el-table-column label="椤圭洰鍚嶇О"
-                         prop="projectName"
-                         width="320"
-                         show-overflow-tooltip/>
-        <el-table-column label="瀹℃壒鐘舵��"
-                         prop="approvalStatus"
-                         width="100"
-                         show-overflow-tooltip>
+        <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+        <el-table-column label="閲囪喘鍚堝悓鍙�" prop="purchaseContractNumber" width="160" show-overflow-tooltip />
+        <el-table-column v-if="showSalesContractBinding" label="閿�鍞悎鍚屽彿" prop="salesContractNo" width="160" show-overflow-tooltip />
+        <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="160" show-overflow-tooltip />
+        <el-table-column label="椤圭洰鍚嶇О" prop="projectName" width="320" show-overflow-tooltip />
+        <el-table-column label="瀹℃壒鐘舵��" prop="approvalStatus" width="100" show-overflow-tooltip>
           <template #default="scope">
-            <el-tag
-                :type="getApprovalStatusType(scope.row.approvalStatus)"
-                size="small">
+            <el-tag :type="getApprovalStatusType(scope.row.approvalStatus)" size="small">
               {{ approvalStatusText[scope.row.approvalStatus] || '鏈煡鐘舵��' }}
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column label="绛捐鏃ユ湡"
-                         prop="executionDate"
-                         width="100"
-                         show-overflow-tooltip/>
-        <el-table-column label="浠樻鏂瑰紡"
-                         width="100"
-                         prop="paymentMethod"
-                         show-overflow-tooltip/>
-        <el-table-column label="鍚堝悓閲戦(鍏�)"
-                         prop="contractAmount"
-                         width="200"
-                         show-overflow-tooltip
-                         :formatter="formattedNumber"/>
-        <el-table-column label="褰曞叆浜�"
-                         prop="recorderName"
-                         width="120"
-                         show-overflow-tooltip/>
-        <el-table-column label="褰曞叆鏃ユ湡"
-                         prop="entryDate"
-                         width="100"
-                         show-overflow-tooltip/>
-        <el-table-column label="澶囨敞"
-                         prop="remarks"
-                         width="200"
-                         show-overflow-tooltip/>
-        <el-table-column fixed="right"
-                         label="鎿嶄綔"
-                         width="120"
-                         align="center">
+        <el-table-column label="鍏ュ簱鐘舵��" prop="stockInStatus" width="100" show-overflow-tooltip>
           <template #default="scope">
-            <el-button link
-                       type="primary"
-                       @click="openForm('edit', scope.row)"
-                       :disabled="scope.row.approvalStatus !== 1 && scope.row.approvalStatus !== 4">缂栬緫
+            <el-tag :type="getStockInStatusType(scope.row.stockInStatus)" size="small">
+              {{ scope.row.stockInStatus || '--' }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="绛捐鏃ユ湡" prop="executionDate" width="100" show-overflow-tooltip />
+        <el-table-column label="浠樻鏂瑰紡" width="100" prop="paymentMethod" show-overflow-tooltip />
+        <el-table-column label="鍚堝悓閲戦(鍏�)" prop="contractAmount" width="200" show-overflow-tooltip
+          :formatter="formattedNumber" />
+        <el-table-column label="褰曞叆浜�" prop="recorderName" width="120" show-overflow-tooltip />
+        <el-table-column label="褰曞叆鏃ユ湡" prop="entryDate" width="100" show-overflow-tooltip />
+        <el-table-column label="澶囨敞" prop="remarks" width="200" show-overflow-tooltip />
+        <el-table-column fixed="right" label="鎿嶄綔" width="180" align="center">
+          <template #default="scope">
+            <el-button link type="primary" @click="openForm('detail', scope.row)">璇︽儏
             </el-button>
-            <el-button link
-                       type="primary"
-                       @click="openFileDialog(scope.row)">闄勪欢</el-button>
+            <el-button link type="primary" @click="openForm('edit', scope.row)"
+              :disabled="scope.row.stockInStatus === '瀹屽叏鍏ュ簱'">缂栬緫
+            </el-button>
+            <el-button link type="primary" @click="openFileDialog(scope.row)">闄勪欢</el-button>
           </template>
         </el-table-column>
       </el-table>
-      <pagination v-show="total > 0"
-                  :total="total"
-                  layout="total, sizes, prev, pager, next, jumper"
-                  :page="page.current"
-                  :limit="page.size"
-                  @pagination="paginationChange"/>
+      <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
+        :page="page.current" :limit="page.size" @pagination="paginationChange" />
     </div>
     <FormDialog v-model="dialogFormVisible"
-                :title="operationType === 'add' ? '鏂板閲囪喘鍙拌处椤甸潰' : '缂栬緫閲囪喘鍙拌处椤甸潰'"
-                :width="'70%'"
-                :operation-type="operationType"
-                @close="closeDia"
-                @confirm="submitForm"
-                @cancel="closeDia">
-      <el-form :model="form"
-               label-width="140px"
-               label-position="top"
-               :rules="rules"
-               ref="formRef">
+      :title="operationType === 'add' ? '鏂板閲囪喘鍙拌处椤甸潰' : operationType === 'edit' ? '缂栬緫閲囪喘鍙拌处椤甸潰' : '閲囪喘鍙拌处璇︽儏'" :width="'70%'"
+      :operation-type="operationType" @close="closeDia" @confirm="submitForm" @cancel="closeDia">
+      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="閲囪喘鍚堝悓鍙凤細"
-                          prop="purchaseContractNumber">
-              <el-input v-model="form.purchaseContractNumber"
-                        placeholder="璇疯緭鍏�"
-                        clearable/>
+            <el-form-item label="閲囪喘鍚堝悓鍙凤細" prop="purchaseContractNumber">
+              <el-input v-model="form.purchaseContractNumber" placeholder="璇疯緭鍏�" clearable />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="閿�鍞悎鍚屽彿锛�"
-                          prop="salesLedgerId">
-              <el-select v-model="form.salesLedgerId"
-                         placeholder="璇烽�夋嫨"
-                         filterable
-                         clearable
-                         @change="salesLedgerChange">
-                <el-option v-for="item in salesContractList"
-                           :key="item.id"
-                           :label="item.salesContractNo"
-                           :value="item.id"/>
+          <el-col v-if="showSalesContractBinding" :span="12">
+            <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesLedgerId">
+              <el-select v-model="form.salesLedgerId" placeholder="璇烽�夋嫨" filterable clearable @change="salesLedgerChange">
+                <el-option v-for="item in salesContractList" :key="item.id" :label="item.salesContractNo" :value="item.id" />
               </el-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="渚涘簲鍟嗗悕绉帮細"
-                          prop="supplierId">
-              <el-select v-model="form.supplierId"
-                         placeholder="璇烽�夋嫨"
-                         filterable
-                         clearable>
-                <el-option v-for="item in supplierList"
-                           :key="item.id"
-                           :label="item.supplierName"
-                           :value="item.id">{{ item.supplierName + '---' + item.supplierType }}
-                </el-option>
+            <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="supplierId">
+              <el-select v-model="form.supplierId" placeholder="璇烽�夋嫨" filterable clearable>
+                <el-option v-for="item in supplierList" :key="item.id" :label="item.supplierName" :value="item.id">{{ item.supplierName + '---' + item.supplierType }}</el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="椤圭洰鍚嶇О"
-                          prop="projectName">
-              <el-input v-model="form.projectName"
-                        placeholder="璇疯緭鍏�"
-                        clearable/>
+            <el-form-item label="椤圭洰鍚嶇О" prop="projectName">
+              <el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="浠樻鏂瑰紡">
-              <el-input v-model="form.paymentMethod"
-                        placeholder="璇疯緭鍏�"
-                        clearable/>
+              <el-input v-model="form.paymentMethod" placeholder="璇疯緭鍏�" clearable />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="绛捐鏃ユ湡锛�"
-                          prop="executionDate">
-              <el-date-picker style="width: 100%"
-                              v-model="form.executionDate"
-                              value-format="YYYY-MM-DD"
-                              format="YYYY-MM-DD"
-                              type="date"
-                              placeholder="璇烽�夋嫨"
-                              clearable/>
+            <el-form-item label="绛捐鏃ユ湡锛�" prop="executionDate">
+              <el-date-picker style="width: 100%" v-model="form.executionDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨" clearable />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="褰曞叆浜猴細"
-                          prop="recorderId">
-              <el-input v-model="form.recorderName" placeholder="鑷姩濉厖" disabled/>
+            <el-form-item label="褰曞叆浜猴細" prop="recorderId">
+              <el-select v-model="form.recorderId" placeholder="璇烽�夋嫨" clearable filterable>
+                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="褰曞叆鏃ユ湡锛�"
-                          prop="entryDate">
-              <el-date-picker style="width: 100%"
-                              v-model="form.entryDate"
-                              value-format="YYYY-MM-DD"
-                              format="YYYY-MM-DD"
-                              type="date"
-                              placeholder="璇烽�夋嫨"
-                              clearable/>
+            <el-form-item label="褰曞叆鏃ユ湡锛�" prop="entryDate">
+              <el-date-picker style="width: 100%" v-model="form.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨" clearable />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
-          <el-form-item label="浜у搧淇℃伅锛�"
-                        prop="entryDate">
-            <el-button type="primary"
-                       @click="openProductForm('add')">娣诲姞
-            </el-button>
-            <el-button plain
-                       type="danger"
-                       @click="deleteProduct">鍒犻櫎
-            </el-button>
+          <el-form-item label="浜у搧淇℃伅锛�" prop="entryDate">
+            <el-button type="primary" @click="openProductForm('add')">娣诲姞</el-button>
+            <el-button plain type="danger" @click="deleteProduct">鍒犻櫎</el-button>
           </el-form-item>
-          <div class="select-button-group"
-               style="width: 500px; margin: 20px 0;"
-               v-if="operationType === 'add'">
-            <el-select filterable
-                       allow-create
-                       :reserve-keyword="true"
-                       :default-first-option="false"
-                       clearable
-                       v-model="templateName"
-                       :input-value="filterInputValue"
-                       @filter-change="onTemplateFilterChange"
-                       @change="onTemplateChange"
-                       @focus="getTemplateList"
-                       style="width: 500px;"
-                       placeholder="璇烽�夋嫨妯$増鎴栬�呰緭鍏ユ柊鐨勬ā鐗堝悕绉板悗閫夋嫨"
-                       class="no-arrow-select">
-              <el-option v-for="item in templateList"
-                         :key="item.id || item.value"
-                         :label="item.templateName"
-                         :value="item.templateName">
+          <div class="select-button-group" style="width: 500px; margin: 20px 0;" v-if="operationType === 'add'">
+            <el-select filterable allow-create :reserve-keyword="true" :default-first-option="false" clearable
+              v-model="templateName" :input-value="filterInputValue" @filter-change="onTemplateFilterChange"
+              @change="onTemplateChange" @focus="getTemplateList" style="width: 500px;" placeholder="璇烽�夋嫨妯$増鎴栬�呰緭鍏ユ柊鐨勬ā鐗堝悕绉板悗閫夋嫨"
+              class="no-arrow-select">
+              <el-option v-for="item in templateList" :key="item.id || item.value" :label="item.templateName"
+                :value="item.templateName">
                 <div style="display: flex; justify-content: space-between; align-items: center;">
                   <span>{{ item.templateName }}</span>
-                  <el-icon
-                      v-if="item.id"
-                      class="delete-icon"
-                      @click.stop="handleDeleteTemplate(item)"
-                      style="cursor: pointer; color: #f56c6c; font-size: 14px; margin-left: 8px;">
-                    <Delete/>
+                  <el-icon v-if="item.id" class="delete-icon" @click.stop="handleDeleteTemplate(item)"
+                    style="cursor: pointer; color: #f56c6c; font-size: 14px; margin-left: 8px;">
+                    <Delete />
                   </el-icon>
                 </div>
               </el-option>
             </el-select>
             <!-- 鎸夐挳锛氫笌 Select 楂樺害鍖归厤锛屽幓鎺夊乏渚ц竟妗嗭紝鏃犵紳琛旀帴 -->
-            <el-button size="small"
-                       style="height: 32px;margin-left: 8px;"
-                       @click="handleButtonClick"
-                       :disabled="!templateName || templateName.trim() === '' || (!currentTemplateId && isTemplateNameDuplicate)">
+            <el-button size="small" style="height: 32px;margin-left: 8px;" @click="handleButtonClick"
+              :disabled="!templateName || templateName.trim() === '' || (!currentTemplateId && isTemplateNameDuplicate)">
               淇濆瓨
             </el-button>
           </div>
         </el-row>
-        <el-table :data="productData"
-                  border
-                  @selection-change="productSelected"
-                  show-summary
-                  :summary-method="summarizeProTable">
-          <el-table-column align="center"
-                           type="selection"
-                           width="55"/>
-          <el-table-column align="center"
-                           label="搴忓彿"
-                           type="index"
-                           width="60"/>
-          <el-table-column label="浜у搧澶х被"
-                           prop="productCategory"/>
-          <el-table-column label="瑙勬牸鍨嬪彿"
-                           prop="specificationModel"/>
-          <el-table-column label="鍗曚綅"
-                           prop="unit"
-                           width="70"/>
-          <el-table-column label="鏁伴噺"
-                           prop="quantity"
-                           width="70"/>
-          <el-table-column label="搴撳瓨棰勮鏁伴噺"
-                           prop="warnNum"
-                           width="120"
-                           show-overflow-tooltip/>
-          <el-table-column label="绋庣巼(%)"
-                           prop="taxRate"
-                           width="80"/>
-          <el-table-column label="鍚◣鍗曚环(鍏�)"
-                           prop="taxInclusiveUnitPrice"
-                           :formatter="formattedNumber"
-                           width="150"/>
-          <el-table-column label="鍚◣鎬讳环(鍏�)"
-                           prop="taxInclusiveTotalPrice"
-                           :formatter="formattedNumber"
-                           width="150"/>
-          <el-table-column label="涓嶅惈绋庢�讳环(鍏�)"
-                           prop="taxExclusiveTotalPrice"
-                           :formatter="formattedNumber"
-                           width="150"/>
-          <el-table-column label="鏄惁璐ㄦ"
-                           prop="isChecked"
-                           width="150">
+        <el-table :data="productData" border @selection-change="productSelected" show-summary
+          :summary-method="summarizeProTable">
+          <el-table-column align="center" type="selection" width="55" />
+          <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+          <el-table-column label="浜у搧澶х被" prop="productCategory" />
+          <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
+          <el-table-column label="鍗曚綅" prop="unit" width="70" />
+          <el-table-column label="鏁伴噺" prop="quantity" width="70" />
+          <el-table-column label="搴撳瓨棰勮鏁伴噺" prop="warnNum" width="120" show-overflow-tooltip />
+          <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" />
+          <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" width="150" />
+          <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" width="150" />
+          <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" width="150" />
+          <el-table-column label="鏄惁璐ㄦ" prop="isChecked" width="150">
             <template #default="scope">
               <el-tag :type="scope.row.isChecked ? 'success' : 'info'">
                 {{ scope.row.isChecked ? '鏄�' : '鍚�' }}
               </el-tag>
             </template>
           </el-table-column>
-          <el-table-column fixed="right"
-                           label="鎿嶄綔"
-                           min-width="60"
-                           align="center">
+          <el-table-column label="鍏ュ簱瀹℃牳鐘舵��" prop="stockInApprovalStatus" width="120">
             <template #default="scope">
-              <el-button link
-                         type="primary"
-                         @click="openProductForm('edit', scope.row, scope.$index)">缂栬緫
+              <el-tag :type="getStockInApprovalStatusType(scope.row.stockInApprovalStatus)" size="small">
+                {{ scope.row.stockInApprovalStatus || '--' }}
+              </el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center">
+            <template #default="scope">
+              <el-button link type="primary"
+                @click="openProductForm('edit', scope.row, scope.$index)"
+                :disabled="scope.row.stockInApprovalStatus === '瀹屽叏鍏ュ簱'">缂栬緫
               </el-button>
             </template>
           </el-table-column>
         </el-table>
         <el-row :gutter="30">
           <el-col :span="24">
-            <el-form-item label="澶囨敞路锛�"
-                          prop="remarks">
-              <el-input v-model="form.remarks"
-                        placeholder="璇疯緭鍏�"
-                        clearable
-                        type="textarea"
-                        :rows="2"/>
+            <el-form-item label="澶囨敞路锛�" prop="remarks">
+              <el-input v-model="form.remarks" placeholder="璇疯緭鍏�" clearable type="textarea" :rows="2" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="24">
-            <el-form-item label="闄勪欢鏉愭枡锛�"
-                          prop="purchaseLedgerFiles">
-              <FileUpload v-model:file-list="fileList"/>
+            <el-form-item label="闄勪欢鏉愭枡锛�" prop="purchaseLedgerFiles">
+              <FileUpload v-model:file-list="fileList" />
             </el-form-item>
           </el-col>
         </el-row>
       </el-form>
     </FormDialog>
     <!-- 瀵煎叆寮圭獥 -->
-    <FormDialog
-        v-model="importUpload.open"
-        :title="importUpload.title"
-        :width="'600px'"
-        @close="importUpload.open = false"
-        @confirm="submitImportFile"
-        @cancel="importUpload.open = false"
-    >
-      <el-upload
-          ref="importUploadRef"
-          :limit="1"
-          accept=".xlsx,.xls"
-          :action="importUpload.url"
-          :headers="importUpload.headers"
-          :before-upload="importUpload.beforeUpload"
-          :on-success="importUpload.onSuccess"
-          :on-error="importUpload.onError"
-          :on-progress="importUpload.onProgress"
-          :on-change="importUpload.onChange"
-          :auto-upload="false"
-          drag
-      >
+    <FormDialog v-model="importUpload.open" :title="importUpload.title" :width="'600px'"
+      @close="importUpload.open = false" @confirm="submitImportFile" @cancel="importUpload.open = false">
+      <el-upload ref="importUploadRef" :limit="1" accept=".xlsx,.xls" :action="importUpload.url"
+        :headers="importUpload.headers" :before-upload="importUpload.beforeUpload" :on-success="importUpload.onSuccess"
+        :on-error="importUpload.onError" :on-progress="importUpload.onProgress" :on-change="importUpload.onChange"
+        :auto-upload="false" drag>
         <i class="el-icon-upload"></i>
         <div class="el-upload__text">
           灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em>
@@ -465,225 +271,162 @@
         </template>
       </el-upload>
     </FormDialog>
-    <FormDialog v-model="productFormVisible"
-                :title="productOperationType === 'add' ? '鏂板浜у搧' : '缂栬緫浜у搧'"
-                :width="'40%'"
-                :operation-type="productOperationType"
-                @close="closeProductDia"
-                @confirm="submitProduct"
-                @cancel="closeProductDia">
-      <el-form :model="productForm"
-               label-width="140px"
-               label-position="top"
-               :rules="productRules"
-               ref="productFormRef">
+    <FormDialog v-model="productFormVisible" :title="productOperationType === 'add' ? '鏂板浜у搧' : '缂栬緫浜у搧'" :width="'40%'"
+      :operation-type="productOperationType" @close="closeProductDia" @confirm="submitProduct"
+      @cancel="closeProductDia">
+      <el-form :model="productForm" label-width="140px" label-position="top" :rules="productRules" ref="productFormRef">
         <el-row :gutter="30">
           <el-col :span="24">
-            <el-form-item label="浜у搧澶х被锛�"
-                          prop="productId">
-              <el-tree-select v-model="productForm.productId"
-                              placeholder="璇烽�夋嫨"
-                              clearable
-                              filterable
-                              check-strictly
-                              @change="getModels"
-                              :data="productOptions"
-                              :render-after-expand="false"
-                              style="width: 100%"/>
+            <el-form-item label="浜у搧澶х被锛�" prop="productId">
+              <el-tree-select v-model="productForm.productId" placeholder="璇烽�夋嫨" clearable filterable check-strictly
+                @change="getModels" :data="productOptions" :render-after-expand="false" style="width: 100%" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="24">
-            <el-form-item label="瑙勬牸鍨嬪彿锛�"
-                          prop="productModelId">
-              <el-select v-model="productForm.productModelId"
-                         placeholder="璇烽�夋嫨"
-                         filterable
-                         clearable
-                         @change="getProductModel">
-                <el-option v-for="item in modelOptions"
-                           :key="item.id"
-                           :label="item.model"
-                           :value="item.id"/>
+            <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
+              <el-select v-model="productForm.productModelId" placeholder="璇烽�夋嫨" filterable clearable
+                @change="getProductModel">
+                <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" />
               </el-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="鍗曚綅锛�"
-                          prop="unit">
-              <el-input v-model="productForm.unit"
-                        placeholder="璇疯緭鍏�"
-                        clearable/>
+            <el-form-item label="鍗曚綅锛�" prop="unit">
+              <el-input v-model="productForm.unit" placeholder="璇疯緭鍏�" clearable />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="绋庣巼(%)锛�"
-                          prop="taxRate">
-              <el-select v-model="productForm.taxRate"
-                         placeholder="璇烽�夋嫨"
-                         clearable
-                         @change="mathNum">
-                <el-option label="1"
-                           value="1"/>
-                <el-option label="6"
-                           value="6"/>
-                <el-option label="13"
-                           value="13"/>
+            <el-form-item label="绋庣巼(%)锛�" prop="taxRate">
+              <el-select v-model="productForm.taxRate" placeholder="璇烽�夋嫨" clearable @change="mathNum">
+                <el-option v-for="dict in tax_rate" :key="dict.value" :label="dict.label" :value="dict.value" />
               </el-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="鍚◣鍗曚环(鍏�)锛�"
-                          prop="taxInclusiveUnitPrice">
-              <el-input-number v-model="productForm.taxInclusiveUnitPrice"
-                               :precision="2"
-                               :step="0.1"
-                               :min="0"
-                               clearable
-                               style="width: 100%"
-                               @change="mathNum"/>
+            <el-form-item label="鍚◣鍗曚环(鍏�)锛�" prop="taxInclusiveUnitPrice">
+              <el-input-number v-model="productForm.taxInclusiveUnitPrice" :precision="2" :step="0.1" :min="0" clearable
+                style="width: 100%" @change="mathNum" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鏁伴噺锛�"
-                          prop="quantity">
-              <el-input-number :step="0.1"
-                               clearable
-                               :precision="2"
-                               :min="0"
-                               style="width: 100%"
-                               v-model="productForm.quantity"
-                               placeholder="璇疯緭鍏�"
-                               @change="mathNum"/>
+            <el-form-item label="鏁伴噺锛�" prop="quantity">
+              <el-input-number :step="0.1" clearable :precision="2" :min="0" style="width: 100%"
+                v-model="productForm.quantity" placeholder="璇疯緭鍏�" @change="mathNum" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="鍚◣鎬讳环(鍏�)锛�"
-                          prop="taxInclusiveTotalPrice">
-              <el-input-number v-model="productForm.taxInclusiveTotalPrice"
-                               :precision="2"
-                               :step="0.1"
-                               :min="0"
-                               clearable
-                               style="width: 100%"
-                               @change="reverseMathNum('taxInclusiveTotalPrice')"/>
+            <el-form-item label="鍚◣鎬讳环(鍏�)锛�" prop="taxInclusiveTotalPrice">
+              <el-input-number v-model="productForm.taxInclusiveTotalPrice" :precision="2" :step="0.1" :min="0"
+                clearable style="width: 100%" @change="reverseMathNum('taxInclusiveTotalPrice')" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="涓嶅惈绋庢�讳环(鍏�)锛�"
-                          prop="taxExclusiveTotalPrice">
-              <el-input-number v-model="productForm.taxExclusiveTotalPrice"
-                               :precision="2"
-                               :step="0.1"
-                               :min="0"
-                               clearable
-                               style="width: 100%"
-                               @change="reverseMathNum('taxExclusiveTotalPrice')"/>
+            <el-form-item label="涓嶅惈绋庢�讳环(鍏�)锛�" prop="taxExclusiveTotalPrice">
+              <el-input-number v-model="productForm.taxExclusiveTotalPrice" :precision="2" :step="0.1" :min="0"
+                clearable style="width: 100%" @change="reverseMathNum('taxExclusiveTotalPrice')" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="鍙戠エ绫诲瀷锛�"
-                          prop="invoiceType">
-              <el-select v-model="productForm.invoiceType"
-                         placeholder="璇烽�夋嫨"
-                         clearable>
-                <el-option label="澧炴櫘绁�"
-                           value="澧炴櫘绁�"/>
-                <el-option label="澧炰笓绁�"
-                           value="澧炰笓绁�"/>
+            <el-form-item label="鍙戠エ绫诲瀷锛�" prop="invoiceType">
+              <el-select v-model="productForm.invoiceType" placeholder="璇烽�夋嫨" clearable>
+                <el-option label="澧炴櫘绁�" value="澧炴櫘绁�" />
+                <el-option label="澧炰笓绁�" value="澧炰笓绁�" />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="搴撳瓨棰勮鏁伴噺锛�"
-                          prop="warnNum">
-              <el-input-number v-model="productForm.warnNum"
-                               :precision="2"
-                               :step="0.1"
-                               :min="0"
-                               clearable
-                               style="width: 100%"/>
+            <el-form-item label="搴撳瓨棰勮鏁伴噺锛�" prop="warnNum">
+              <el-input-number v-model="productForm.warnNum" :precision="2" :step="0.1" :min="0" clearable
+                style="width: 100%" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="鏄惁璐ㄦ锛�"
-                          prop="isChecked">
+            <el-form-item label="鏄惁璐ㄦ锛�" prop="isChecked">
               <el-radio-group v-model="productForm.isChecked">
-                <el-radio label="鏄�"
-                          :value="true"/>
-                <el-radio label="鍚�"
-                          :value="false"/>
+                <el-radio label="鏄�" :value="true" />
+                <el-radio label="鍚�" :value="false" />
               </el-radio-group>
             </el-form-item>
           </el-col>
         </el-row>
       </el-form>
     </FormDialog>
-    <FileList v-if="fileListDialogVisible"  v-model:visible="fileListDialogVisible" record-type="purchase_ledger" :record-id="recordId"  />
+    <FileList v-if="fileListDialogVisible" v-model:visible="fileListDialogVisible" record-type="purchase_ledger"
+      :record-id="recordId" />
+    <Detail ref="detailRef" />
   </div>
 </template>
 
 <script setup>
-import {Search, Delete} from "@element-plus/icons-vue";
-import FormDialog from '@/components/Dialog/FormDialog.vue';
-import FileListDialog from '@/components/Dialog/FileListDialog.vue';
-  import { getToken } from "@/utils/auth";
-  import pagination from "@/components/PIMTable/Pagination.vue";
-  import {
-    ref,
-    onMounted,
-    reactive,
-    toRefs,
-    getCurrentInstance,
-    nextTick,
-  } from "vue";
-  import { Search, Delete } from "@element-plus/icons-vue";
-  import { ElMessageBox, ElMessage } from "element-plus";
-  import {
-    addOrUpdateSalesLedgerProduct,
-    delProduct,
-    delLedgerFile,
-    getProductInfoByContractNo,
-  } from "@/api/salesManagement/salesLedger.js";
-  import {
-    addOrEditPurchase,
-    addPurchaseTemplate,
-    updatePurchaseTemplate,
-    createPurchaseNo,
-    delPurchase,
-    getSalesNo,
-    purchaseListPage,
-    productList,
-    getPurchaseById,
-    getOptions,
-    getPurchaseTemplateList,
-    delPurchaseTemplate,
-  } from "@/api/procurementManagement/procurementLedger.js";
-  import useFormData from "@/hooks/useFormData.js";
-  const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
+import FormDialog from "@/components/Dialog/FormDialog.vue";
+import FileListDialog from "@/components/Dialog/FileListDialog.vue";
+import Detail from "./detail.vue";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/PIMTable/Pagination.vue";
+import {
+  ref,
+  onMounted,
+  reactive,
+  toRefs,
+  getCurrentInstance,
+  nextTick,
+} from "vue";
+import { Search, Delete } from "@element-plus/icons-vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import { userListNoPage } from "@/api/system/user.js";
+import {
+  addOrUpdateSalesLedgerProduct,
+  delProduct,
+  delLedgerFile,
+  getProductInfoByContractNo,
+} from "@/api/salesManagement/salesLedger.js";
+import {
+  addOrEditPurchase,
+  addPurchaseTemplate,
+  updatePurchaseTemplate,
+  createPurchaseNo,
+  delPurchase,
+  getSalesNo,
+  purchaseListPage,
+  productList,
+  getPurchaseById,
+  getOptions,
+  getPurchaseTemplateList,
+  delPurchaseTemplate,
+} from "@/api/procurementManagement/procurementLedger.js";
+import useFormData from "@/hooks/useFormData.js";
+const FileList = defineAsyncComponent(() =>
+  import("@/components/Dialog/FileList.vue")
+);
 
-const {proxy} = getCurrentInstance();
+const detailRef = ref(null);
+
+const { proxy } = getCurrentInstance();
+const { tax_rate } = proxy.useDict("tax_rate");
 const tableData = ref([]);
 const productData = ref([]);
 const selectedRows = ref([]);
 const productSelectedRows = ref([]);
 const modelOptions = ref([]);
+const userList = ref([]);
 const productOptions = ref([]);
 const salesContractList = ref([]);
 const supplierList = ref([]);
 const tableLoading = ref(false);
-const fileListDialogVisible = ref(false)
+const recordId = ref();
+const fileListDialogVisible = ref(false);
 const page = reactive({
   current: 1,
   size: 100,
@@ -691,11 +434,14 @@
 const total = ref(0);
 const fileList = ref([]);
 import useUserStore from "@/store/modules/user";
-import {modelList, productTreeList} from "@/api/basicData/product.js";
+import { modelList, productTreeList } from "@/api/basicData/product.js";
 import dayjs from "dayjs";
 import FileUpload from "@/components/AttachmentUpload/file/index.vue";
 
 const userStore = useUserStore();
+
+// 鏄惁鏄剧ず閿�鍞悎鍚屽彿缁戝畾
+const showSalesContractBinding = false;
 
 // 璁㈠崟瀹℃壒鐘舵�佹樉绀烘枃鏈�
 const approvalStatusText = {
@@ -706,12 +452,32 @@
 };
 
 // 鑾峰彇瀹℃壒鐘舵�佹爣绛剧被鍨�
-const getApprovalStatusType = (status) => {
+const getApprovalStatusType = status => {
   const typeMap = {
-    1: "info",      // 寰呭鏍� - 鐏拌壊
-    2: "warning",   // 瀹℃壒涓� - 姗欒壊
-    3: "success",   // 瀹℃壒閫氳繃 - 缁胯壊
-    4: "danger",    // 瀹℃壒澶辫触 - 绾㈣壊
+    1: "info", // 寰呭鏍� - 鐏拌壊
+    2: "warning", // 瀹℃壒涓� - 姗欒壊
+    3: "success", // 瀹℃壒閫氳繃 - 缁胯壊
+    4: "danger", // 瀹℃壒澶辫触 - 绾㈣壊
+  };
+  return typeMap[status] || "";
+};
+
+// 鑾峰彇鍏ュ簱鐘舵�佹爣绛剧被鍨�
+const getStockInStatusType = status => {
+  const typeMap = {
+    "寰呭叆搴�": "info", // 寰呭叆搴� - 鐏拌壊
+    "鍏ュ簱涓�": "warning", // 鍏ュ簱涓� - 姗欒壊
+    "瀹屽叏鍏ュ簱": "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
+  };
+  return typeMap[status] || "";
+};
+
+// 鑾峰彇鍏ュ簱瀹℃牳鐘舵�佹爣绛剧被鍨�
+const getStockInApprovalStatusType = status => {
+  const typeMap = {
+    "寰呭叆搴�": "info", // 寰呭叆搴� - 鐏拌壊
+    "鍏ュ簱涓�": "warning", // 鍏ュ簱涓� - 姗欒壊
+    "瀹屽叏鍏ュ簱": "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
   };
   return typeMap[status] || "";
 };
@@ -730,10 +496,17 @@
     return false;
   }
   const isDuplicate = templateList.value.some(
-      item => item.templateName === name.trim()
+    item => item.templateName === name.trim()
   );
   isTemplateNameDuplicate.value = isDuplicate;
   return isDuplicate;
+};
+
+// 鍒ゆ柇鏂囦欢鏄惁涓哄浘鐗�
+const isImage = (filename) => {
+  if (!filename) return false;
+  const ext = filename.substring(filename.lastIndexOf('.')).toLowerCase();
+  return ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp'].includes(ext);
 };
 
 // 闃叉姈瀹氭椂鍣�
@@ -771,7 +544,7 @@
 
   // 杩囨护鏁版嵁锛屾煡鎵惧尮閰嶇殑妯℃澘
   const matchedTemplate = templateList.value.find(
-      item => item.templateName === val
+    item => item.templateName === val
   );
 
   if (matchedTemplate?.id) {
@@ -793,12 +566,13 @@
       form.value.paymentMethod = matchedTemplate.paymentMethod;
     }
     // 妯℃澘鏁版嵁涓殑浜у搧瀛楁鏄� productList锛岄渶瑕佽浆鎹负 productData
-    productData.value = matchedTemplate.productList || matchedTemplate.productData || [];
+    productData.value =
+      matchedTemplate.productList || matchedTemplate.productData || [];
   } else {
     // 鏈尮閰嶅埌宸叉湁妯℃澘锛岃涓烘柊妯℃澘
     currentTemplateId.value = null;
     // 濡傛灉娌℃湁鎵惧埌妯℃澘锛岄噸缃〃鍗曪紙淇濇寔褰撳墠琛ㄥ崟鐘舵�侊級
-    const currentFormData = {...form.value};
+    const currentFormData = { ...form.value };
     const currentProductData = [...productData.value];
 
     // 濡傛灉瀵硅瘽妗嗘湭鎵撳紑锛屽厛鎵撳紑
@@ -835,7 +609,6 @@
     salesLedgerId: "",
     projectName: "",
     recorderId: "",
-    recorderName: "",
     entryDate: "",
     productData: [],
     supplierName: "",
@@ -846,18 +619,18 @@
   },
   rules: {
     purchaseContractNumber: [
-      {required: true, message: "璇疯緭鍏�", trigger: "blur"},
+      { required: true, message: "璇疯緭鍏�", trigger: "blur" },
     ],
     projectName: [
-      {required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur"},
+      { required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur" },
     ],
-    supplierId: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
-    entryDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
-    executionDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+    supplierId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    entryDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+    executionDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
   },
 });
-const {form, rules} = toRefs(data);
-const {form: searchForm} = useFormData({
+const { form, rules } = toRefs(data);
+const { form: searchForm } = useFormData({
   ...data.searchForm,
   // 璁剧疆褰曞叆鏃ユ湡鑼冨洿涓哄綋澶�
   entryDate: [
@@ -890,31 +663,31 @@
     isChecked: false,
   },
   productRules: {
-    productId: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
-    productModelId: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
-    unit: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
-    quantity: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    productId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+    productModelId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+    unit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     taxInclusiveUnitPrice: [
-      {required: true, message: "璇疯緭鍏�", trigger: "blur"},
+      { required: true, message: "璇疯緭鍏�", trigger: "blur" },
     ],
-    taxRate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
-    warnNum: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+    taxRate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+    warnNum: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
     taxInclusiveTotalPrice: [
-      {required: true, message: "璇疯緭鍏�", trigger: "blur"},
+      { required: true, message: "璇疯緭鍏�", trigger: "blur" },
     ],
     taxExclusiveTotalPrice: [
-      {required: true, message: "璇疯緭鍏�", trigger: "blur"},
+      { required: true, message: "璇疯緭鍏�", trigger: "blur" },
     ],
-    invoiceType: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
-    isChecked: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+    invoiceType: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+    isChecked: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
   },
 });
-const {productForm, productRules} = toRefs(productFormData);
+const { productForm, productRules } = toRefs(productFormData);
 const upload = reactive({
   // 涓婁紶鐨勫湴鍧�
   url: import.meta.env.VITE_APP_BASE_API + "/file/upload",
   // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-  headers: {Authorization: "Bearer " + getToken()},
+  headers: { Authorization: "Bearer " + getToken() },
 });
 
 // 瀵煎叆鐩稿叧
@@ -923,9 +696,9 @@
   title: "瀵煎叆閲囪喘鍙拌处",
   open: false,
   url: import.meta.env.VITE_APP_BASE_API + "/purchase/ledger/import",
-  headers: {Authorization: "Bearer " + getToken()},
+  headers: { Authorization: "Bearer " + getToken() },
   isUploading: false,
-  beforeUpload: (file) => {
+  beforeUpload: file => {
     const isExcel = file.name.endsWith(".xlsx") || file.name.endsWith(".xls");
     const isLt10M = file.size / 1024 / 1024 < 10;
     if (!isExcel) {
@@ -974,7 +747,11 @@
 
 // 涓嬭浇瀵煎叆妯℃澘锛堝鍚庣璺緞涓嶅悓锛屽彲鍦ㄦ澶勮皟鏁达級
 const downloadTemplate = () => {
-  proxy.download("/purchase/ledger/exportTemplate", {}, "閲囪喘鍙拌处瀵煎叆妯℃澘.xlsx");
+  proxy.download(
+    "/purchase/ledger/exportTemplate",
+    {},
+    "閲囪喘鍙拌处瀵煎叆妯℃澘.xlsx"
+  );
 };
 
 const submitImportFile = () => {
@@ -1039,8 +816,8 @@
   // 妫�鏌ユ槸鍚︽湁浜у搧鏁版嵁
   if (!productData.value || productData.value.length === 0) {
     ElMessage({
-      message: '璇峰厛娣诲姞浜у搧淇℃伅',
-      type: 'warning',
+      message: "璇峰厛娣诲姞浜у搧淇℃伅",
+      type: "warning",
     });
     return;
   }
@@ -1051,11 +828,15 @@
       supplierId: form.value.supplierId,
       paymentMethod: form.value.paymentMethod,
       recorderId: form.value.recorderId,
-      recorderName: form.value.recorderName,
       projectName: form.value.projectName,
       templateName: templateName.value.trim(),
     };
-    console.log("template params ===>", params, "currentTemplateId:", currentTemplateId.value);
+    console.log(
+      "template params ===>",
+      params,
+      "currentTemplateId:",
+      currentTemplateId.value
+    );
 
     // 濡傛灉 currentTemplateId 鏈夊�硷紝璇存槑褰撳墠鏄�滅紪杈戝凡鏈夋ā鏉库�� 鈫� 璋冪敤鏇存柊鎺ュ彛
     // 鍚﹀垯涓衡�滄柊寤烘ā鏉库�� 鈫� 璋冪敤鏂板鎺ュ彛
@@ -1099,20 +880,20 @@
 // 瀛愯〃鍚堣鏂规硶
 const summarizeChildrenTable = param => {
   return proxy.summarizeTable(
-      param,
-      [
-        "taxInclusiveUnitPrice",
-        "taxInclusiveTotalPrice",
-        "taxExclusiveTotalPrice",
-        "ticketsNum",
-        "ticketsAmount",
-        "futureTickets",
-        "futureTicketsAmount",
-      ],
-      {
-        ticketsNum: {noDecimal: true}, // 涓嶄繚鐣欏皬鏁�
-        futureTickets: {noDecimal: true}, // 涓嶄繚鐣欏皬鏁�
-      }
+    param,
+    [
+      "taxInclusiveUnitPrice",
+      "taxInclusiveTotalPrice",
+      "taxExclusiveTotalPrice",
+      "ticketsNum",
+      "ticketsAmount",
+      "futureTickets",
+      "futureTicketsAmount",
+    ],
+    {
+      ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+      futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+    }
   );
 };
 const paginationChange = obj => {
@@ -1122,24 +903,24 @@
 };
 const getList = () => {
   tableLoading.value = true;
-  const {entryDate, ...rest} = searchForm;
-  purchaseListPage({...rest, ...page})
-      .then(res => {
-        tableLoading.value = false;
-        // tableData.value = res.data.records;
-        tableData.value = res.data.records.map(record => ({
-          ...record,
-        }));
-        // 鍒濆鍖栧瓙鏁版嵁鏁扮粍
-        tableData.value.forEach(item => {
-          item.children = [];
-        });
-        total.value = res.data.total;
-        expandedRowKeys.value = [];
-      })
-      .catch(() => {
-        tableLoading.value = false;
+  const { entryDate, ...rest } = searchForm;
+  purchaseListPage({ ...rest, ...page })
+    .then(res => {
+      tableLoading.value = false;
+      // tableData.value = res.data.records;
+      tableData.value = res.data.records.map(record => ({
+        ...record,
+      }));
+      // 鍒濆鍖栧瓙鏁版嵁鏁扮粍
+      tableData.value.forEach(item => {
+        item.children = [];
       });
+      total.value = res.data.total;
+      expandedRowKeys.value = [];
+    })
+    .catch(() => {
+      tableLoading.value = false;
+    });
 };
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const handleSelectionChange = selection => {
@@ -1154,7 +935,7 @@
   if (expandedRows.length > 0) {
     expandedRowKeys.value = [];
     try {
-      const res = await productList({salesLedgerId: row.id, type: 2});
+      const res = await productList({ salesLedgerId: row.id, type: 2 });
       const index = tableData.value.findIndex(item => item.id === row.id);
       if (index > -1) {
         tableData.value[index].children = res.data || [];
@@ -1187,15 +968,22 @@
 };
 // 鎵撳紑寮规
 const openForm = async (type, row) => {
-  // 缂栬緫鏃舵鏌ュ鏍哥姸鎬侊紝鍙湁寰呭鏍�(1)鍜屽鎵瑰け璐�(4)鎵嶈兘缂栬緫
+  if (type === 'detail') {
+    detailRef.value.open(row.id);
+    return;
+  }
+  // 缂栬緫鏃舵鏌ュ叆搴撶姸鎬侊紝瀹屽叏鍏ュ簱鏃朵笉鑳界紪杈�
   if (type === "edit" && row) {
-    if (row.approvalStatus !== 1 && row.approvalStatus !== 4) {
-      proxy.$modal.msgWarning("鍙湁寰呭鏍稿拰瀹℃壒澶辫触鐘舵�佺殑璁板綍鎵嶈兘缂栬緫");
+    if (row.stockInStatus === '瀹屽叏鍏ュ簱') {
+      proxy.$modal.msgWarning("瀹屽叏鍏ュ簱鐘舵�佺殑璁板綍涓嶈兘缂栬緫");
       return;
     }
   }
 
   await getTemplateList();
+  await userListNoPage().then(res => {
+    userList.value = res.data;
+  });
   operationType.value = type;
   form.value = {};
   productData.value = [];
@@ -1213,11 +1001,9 @@
     salesContractList.value = salesRes || [];
     // 渚涘簲鍟嗚繃婊ゅ嚭isWhite=0 鐨勬暟鎹�
     supplierList.value = (supplierRes.data || []).filter(
-        item => item.isWhite === 0
+      item => item.isWhite === 0
     );
 
-    // 璁剧疆榛樿鍊�
-    form.value.recorderName = userStore.nickName;
     form.value.entryDate = getCurrentDate();
 
     if (type === "add") {
@@ -1235,10 +1021,12 @@
       // 缂栬緫鏃跺姞杞芥暟鎹�
       currentId.value = row.id;
       try {
-        const purchaseRes = await getPurchaseById({id: row.id, type: 2});
-        form.value = {...purchaseRes};
-        productData.value = purchaseRes.productData || [];
+        const purchaseRes = await getPurchaseById({ id: row.id, type: 2 });
+        form.value = { ...purchaseRes, stockInStatus: row.stockInStatus };
         fileList.value = purchaseRes.storageBlobVOS || [];
+        // 浣跨敤 productList 鎺ュ彛鑾峰彇浜у搧鍒楄〃锛屼互鑾峰彇鍏ュ簱瀹℃牳鐘舵��
+        const productRes = await productList({ salesLedgerId: row.id, type: 2 });
+        productData.value = productRes.data || [];
       } catch (error) {
         console.error("鍔犺浇閲囪喘鍙拌处鏁版嵁澶辫触:", error);
         proxy.$modal.msgError("鍔犺浇鏁版嵁澶辫触");
@@ -1249,7 +1037,6 @@
     if (form.value.salesLedgerId == -1) {
       form.value.salesLedgerId = null;
     }
-    console.log(form.value, "form.value===========");
     dialogFormVisible.value = true;
   } catch (error) {
     console.error("鎵撳紑琛ㄥ崟澶辫触:", error);
@@ -1317,7 +1104,7 @@
         let processedProductData = productData.value;
         if (operationType.value === "add") {
           processedProductData = productData.value.map(product => {
-            const {id, ...rest} = product;
+            const { id, ...rest } = product;
             return rest;
           });
         }
@@ -1335,7 +1122,7 @@
       }
 
       // 鏂板鏃朵笉浼犻�抜d
-      const submitData = {...form.value};
+      const submitData = { ...form.value };
       if (operationType.value === "add") {
         delete submitData.id;
       }
@@ -1355,6 +1142,12 @@
 };
 // 鎵撳紑浜у搧寮规
 const openProductForm = async (type, row, index) => {
+  // 缂栬緫鏃舵鏌ヤ骇鍝佸叆搴撳鏍哥姸鎬侊紝瀹屽叏鍏ュ簱鏃朵笉鑳界紪杈�
+  if (type === "edit" && row && row.stockInApprovalStatus === '瀹屽叏鍏ュ簱') {
+    proxy.$modal.msgWarning("瀹屽叏鍏ュ簱鐘舵�佺殑浜у搧涓嶈兘缂栬緫");
+    return;
+  }
+
   productOperationType.value = type;
   productOperationIndex.value = index;
   productForm.value = {};
@@ -1373,7 +1166,7 @@
 
   if (type === "edit") {
     // 澶嶅埗琛屾暟鎹�
-    productForm.value = {...row};
+    productForm.value = { ...row };
 
     // 濡傛灉鏄粠妯℃澘鍔犺浇鐨勬暟鎹紝鍙兘娌℃湁 productId 鍜� productModelId
     // 闇�瑕佹牴鎹� productCategory 鍜� specificationModel 鏉ユ煡鎵惧搴旂殑 ID
@@ -1385,27 +1178,36 @@
             return nodes[i].value;
           }
           if (nodes[i].children && nodes[i].children.length > 0) {
-            const found = findProductIdByCategory(nodes[i].children, categoryName);
+            const found = findProductIdByCategory(
+              nodes[i].children,
+              categoryName
+            );
             if (found) return found;
           }
         }
         return null;
       };
 
-      const productId = findProductIdByCategory(productOptions.value, productForm.value.productCategory);
+      const productId = findProductIdByCategory(
+        productOptions.value,
+        productForm.value.productCategory
+      );
       if (productId) {
         productForm.value.productId = productId;
         // 鑾峰彇鍨嬪彿鍒楄〃骞剁瓑寰呭畬鎴�
-        const modelRes = await modelList({id: productId});
+        const modelRes = await modelList({ id: productId });
         modelOptions.value = modelRes;
 
         // 绛夊緟 DOM 鏇存柊
         await nextTick();
 
         // 鏍规嵁 specificationModel 鏌ユ壘 productModelId
-        if (productForm.value.specificationModel && modelOptions.value.length > 0) {
+        if (
+          productForm.value.specificationModel &&
+          modelOptions.value.length > 0
+        ) {
           const modelItem = modelOptions.value.find(
-              item => item.model === productForm.value.specificationModel
+            item => item.model === productForm.value.specificationModel
           );
           if (modelItem) {
             productForm.value.productModelId = modelItem.id;
@@ -1439,8 +1241,8 @@
 const getModels = value => {
   if (value) {
     productForm.value.productCategory =
-        findNodeById(productOptions.value, value) || "";
-    return modelList({id: value}).then(res => {
+      findNodeById(productOptions.value, value) || "";
+    return modelList({ id: value }).then(res => {
       modelOptions.value = res;
       return res;
     });
@@ -1477,7 +1279,7 @@
 
 function convertIdToValue(data) {
   return data.map(item => {
-    const {id, children, ...rest} = item;
+    const { id, children, ...rest } = item;
     const newItem = {
       ...rest,
       value: id, // 灏� id 鏀逛负 value
@@ -1498,7 +1300,7 @@
         submitProductEdit();
       } else {
         if (productOperationType.value === "add") {
-          productData.value.push({...productForm.value});
+          productData.value.push({ ...productForm.value });
           console.log("productData.value---", productData.value);
         } else {
           productData.value[productOperationIndex.value] = {
@@ -1516,8 +1318,9 @@
   addOrUpdateSalesLedgerProduct(productForm.value).then(res => {
     proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
     closeProductDia();
-    getPurchaseById({id: currentId.value, type: 2}).then(res => {
-      productData.value = res.productData;
+    // 浣跨敤 productList 鎺ュ彛鍒锋柊浜у搧鍒楄〃锛屼互鑾峰彇鍏ュ簱瀹℃牳鐘舵��
+    productList({ salesLedgerId: currentId.value, type: 2 }).then(res => {
+      productData.value = res.data || [];
     });
   });
 };
@@ -1527,15 +1330,19 @@
     proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
     return;
   }
+  // 妫�鏌ラ�変腑鐨勪骇鍝佷腑鏄惁鏈夊畬鍏ㄥ叆搴撶殑
+  const hasFullyStocked = productSelectedRows.value.some(
+    row => row.stockInApprovalStatus === '瀹屽叏鍏ュ簱'
+  );
+  if (hasFullyStocked) {
+    proxy.$modal.msgWarning("閫変腑鐨勪骇鍝佷腑鍖呭惈瀹屽叏鍏ュ簱鐨勪骇鍝侊紝鏃犳硶鍒犻櫎");
+    return;
+  }
   if (operationType.value === "add") {
-    productSelectedRows.value.forEach(selectedRow => {
-      const index = productData.value.findIndex(
-          product => product.id === selectedRow.id
-      );
-      if (index !== -1) {
-        productData.value.splice(index, 1);
-      }
-    });
+    productData.value = productData.value.filter(
+      item => !productSelectedRows.value.includes(item)
+    );
+    productSelectedRows.value = [];
   } else {
     let ids = [];
     if (productSelectedRows.value.length > 0) {
@@ -1546,20 +1353,19 @@
       cancelButtonText: "鍙栨秷",
       type: "warning",
     })
-        .then(() => {
-          delProduct(ids).then(res => {
-            proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-            closeProductDia();
-            getPurchaseById({id: currentId.value, type: 2}).then(
-                res => {
-                  productData.value = res.productData;
-                }
-            );
+      .then(() => {
+        delProduct(ids).then(res => {
+          proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+          closeProductDia();
+          // 浣跨敤 productList 鎺ュ彛鍒锋柊浜у搧鍒楄〃锛屼互鑾峰彇鍏ュ簱瀹℃牳鐘舵��
+          productList({ salesLedgerId: currentId.value, type: 2 }).then(res => {
+            productData.value = res.data || [];
           });
-        })
-        .catch(() => {
-          proxy.$modal.msg("宸插彇娑�");
         });
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
   }
 };
 // 鍏抽棴浜у搧寮规
@@ -1574,18 +1380,20 @@
     cancelButtonText: "鍙栨秷",
     type: "warning",
   })
-      .then(() => {
-        proxy.download("/purchase/ledger/export", {}, "閲囪喘鍙拌处.xlsx");
-      })
-      .catch(() => {
-        proxy.$modal.msg("宸插彇娑�");
-      });
+    .then(() => {
+      proxy.download("/purchase/ledger/export", {}, "閲囪喘鍙拌处.xlsx");
+    })
+    .catch(() => {
+      proxy.$modal.msg("宸插彇娑�");
+    });
 };
 // 鍒犻櫎
 const handleDelete = () => {
   let ids = [];
   if (selectedRows.value.length > 0) {
-    ids = selectedRows.value.filter(item => item.salesLedgerId === null).map(item => item.id);
+    ids = selectedRows.value
+      .filter(item => item.salesLedgerId === null)
+      .map(item => item.id);
   } else {
     proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
     return;
@@ -1595,15 +1403,15 @@
     cancelButtonText: "鍙栨秷",
     type: "warning",
   })
-      .then(() => {
-        delPurchase(ids).then(res => {
-          proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-          getList();
-        });
-      })
-      .catch(() => {
-        proxy.$modal.msg("宸插彇娑�");
+    .then(() => {
+      delPurchase(ids).then(res => {
+        proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+        getList();
       });
+    })
+    .catch(() => {
+      proxy.$modal.msg("宸插彇娑�");
+    });
 };
 
 // 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
@@ -1628,17 +1436,17 @@
   }
   // 鍚◣鎬讳环璁$畻
   productForm.value.taxInclusiveTotalPrice =
-      proxy.calculateTaxIncludeTotalPrice(
-          productForm.value.taxInclusiveUnitPrice,
-          productForm.value.quantity
-      );
+    proxy.calculateTaxIncludeTotalPrice(
+      productForm.value.taxInclusiveUnitPrice,
+      productForm.value.quantity
+    );
   if (productForm.value.taxRate) {
     // 涓嶅惈绋庢�讳环璁$畻
     productForm.value.taxExclusiveTotalPrice =
-        proxy.calculateTaxExclusiveTotalPrice(
-            productForm.value.taxInclusiveTotalPrice,
-            productForm.value.taxRate
-        );
+      proxy.calculateTaxExclusiveTotalPrice(
+        productForm.value.taxInclusiveTotalPrice,
+        productForm.value.taxRate
+      );
   }
 };
 const reverseMathNum = field => {
@@ -1651,8 +1459,8 @@
 
   // 纭繚杈撳叆鍊间笉涓鸿礋鏁�
   if (
-      field === "taxInclusiveTotalPrice" ||
-      field === "taxExclusiveTotalPrice"
+    field === "taxInclusiveTotalPrice" ||
+    field === "taxExclusiveTotalPrice"
   ) {
     const value = Number(productForm.value[field]);
     if (value < 0) {
@@ -1666,8 +1474,8 @@
     // 宸茬煡鍚◣鎬讳环鍜屾暟閲忥紝鍙嶇畻鍚◣鍗曚环
     if (productForm.value.quantity) {
       productForm.value.taxInclusiveUnitPrice = (
-          Number(productForm.value.taxInclusiveTotalPrice) /
-          Number(productForm.value.quantity)
+        Number(productForm.value.taxInclusiveTotalPrice) /
+        Number(productForm.value.quantity)
       ).toFixed(2);
       // 纭繚缁撴灉涓嶄负璐熸暟
       if (Number(productForm.value.taxInclusiveUnitPrice) < 0) {
@@ -1677,8 +1485,8 @@
     // 宸茬煡鍚◣鎬讳环鍜屽惈绋庡崟浠凤紝鍙嶇畻鏁伴噺
     else if (productForm.value.taxInclusiveUnitPrice) {
       productForm.value.quantity = (
-          Number(productForm.value.taxInclusiveTotalPrice) /
-          Number(productForm.value.taxInclusiveUnitPrice)
+        Number(productForm.value.taxInclusiveTotalPrice) /
+        Number(productForm.value.taxInclusiveUnitPrice)
       ).toFixed(2);
       // 纭繚缁撴灉涓嶄负璐熸暟
       if (Number(productForm.value.quantity) < 0) {
@@ -1687,8 +1495,8 @@
     }
     // 鍙嶇畻涓嶅惈绋庢�讳环
     productForm.value.taxExclusiveTotalPrice = (
-        Number(productForm.value.taxInclusiveTotalPrice) /
-        (1 + taxRate / 100)
+      Number(productForm.value.taxInclusiveTotalPrice) /
+      (1 + taxRate / 100)
     ).toFixed(2);
     // 纭繚缁撴灉涓嶄负璐熸暟
     if (Number(productForm.value.taxExclusiveTotalPrice) < 0) {
@@ -1697,8 +1505,8 @@
   } else if (field === "taxExclusiveTotalPrice") {
     // 鍙嶇畻鍚◣鎬讳环
     productForm.value.taxInclusiveTotalPrice = (
-        Number(productForm.value.taxExclusiveTotalPrice) *
-        (1 + taxRate / 100)
+      Number(productForm.value.taxExclusiveTotalPrice) *
+      (1 + taxRate / 100)
     ).toFixed(2);
     // 纭繚缁撴灉涓嶄负璐熸暟
     if (Number(productForm.value.taxInclusiveTotalPrice) < 0) {
@@ -1707,8 +1515,8 @@
     // 宸茬煡鏁伴噺锛屽弽绠楀惈绋庡崟浠�
     if (productForm.value.quantity) {
       productForm.value.taxInclusiveUnitPrice = (
-          Number(productForm.value.taxInclusiveTotalPrice) /
-          Number(productForm.value.quantity)
+        Number(productForm.value.taxInclusiveTotalPrice) /
+        Number(productForm.value.quantity)
       ).toFixed(2);
       // 纭繚缁撴灉涓嶄负璐熸暟
       if (Number(productForm.value.taxInclusiveUnitPrice) < 0) {
@@ -1718,8 +1526,8 @@
     // 宸茬煡鍚◣鍗曚环锛屽弽绠楁暟閲�
     else if (productForm.value.taxInclusiveUnitPrice) {
       productForm.value.quantity = (
-          Number(productForm.value.taxInclusiveTotalPrice) /
-          Number(productForm.value.taxInclusiveUnitPrice)
+        Number(productForm.value.taxInclusiveTotalPrice) /
+        Number(productForm.value.taxInclusiveUnitPrice)
       ).toFixed(2);
       // 纭繚缁撴灉涓嶄负璐熸暟
       if (Number(productForm.value.quantity) < 0) {
@@ -1730,16 +1538,14 @@
 };
 // 閿�鍞悎鍚岄�夋嫨鏀瑰彉鏂规硶
 const salesLedgerChange = async row => {
-  console.log("row", row);
   var index = salesContractList.value.findIndex(item => item.id == row);
-  console.log("index", index);
   if (index > -1) {
     await querygProductInfoByContractNo();
   }
 };
 
 const querygProductInfoByContractNo = async () => {
-  const {code, data} = await getProductInfoByContractNo({
+  const { code, data } = await getProductInfoByContractNo({
     contractNo: form.value.salesLedgerId,
   });
   if (code == 200) {
@@ -1756,13 +1562,13 @@
 };
 
 // 鎵撳紑闄勪欢寮规
-const openFileDialog = async (row) => {
-  recordId.value = row.id
-  fileListDialogVisible.value = true
-}
+const openFileDialog = async row => {
+  recordId.value = row.id;
+  fileListDialogVisible.value = true;
+};
 
 // 鍒犻櫎妯℃澘
-const handleDeleteTemplate = async (item) => {
+const handleDeleteTemplate = async item => {
   if (!item.id) {
     proxy.$modal.msgWarning("鏃犳硶鍒犻櫎璇ユā鏉�");
     return;
@@ -1770,13 +1576,13 @@
 
   try {
     await ElMessageBox.confirm(
-        `纭畾瑕佸垹闄ゆā鏉�"${item.templateName}"鍚楋紵`,
-        "鍒犻櫎纭",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning",
-        }
+      `纭畾瑕佸垹闄ゆā鏉�"${item.templateName}"鍚楋紵`,
+      "鍒犻櫎纭",
+      {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      }
     );
 
     const res = await delPurchaseTemplate([item.id]);
@@ -1827,7 +1633,53 @@
 }
 
 .no-arrow-select {
-  --el-select-suffix-icon-color: transparent; /* 闅愯棌榛樿涓嬫媺绠ご */
+  --el-select-suffix-icon-color: transparent;
+  /* 闅愯棌榛樿涓嬫媺绠ご */
+}
+
+.readonly-text {
+  display: inline-block;
+  width: 100%;
+  padding: 0 15px;
+  height: 32px;
+  line-height: 32px;
+  background-color: var(--el-fill-color-light);
+  border-radius: var(--el-border-radius-base);
+  color: var(--el-text-color-regular);
+  font-size: var(--el-font-size-base);
+  box-sizing: border-box;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.readonly-text-area {
+  width: 100%;
+  min-height: 52px;
+  padding: 5px 15px;
+  background-color: var(--el-fill-color-light);
+  border-radius: var(--el-border-radius-base);
+  color: var(--el-text-color-regular);
+  font-size: var(--el-font-size-base);
+  box-sizing: border-box;
+  white-space: pre-wrap;
+  word-break: break-all;
+}
+
+.detail-file-list {
+  width: 100%;
+  padding: 10px 15px;
+  background-color: var(--el-fill-color-light);
+  border-radius: var(--el-border-radius-base);
+}
+
+.detail-file-item {
+  line-height: 24px;
+  margin-bottom: 5px;
+}
+
+.detail-file-item:last-child {
+  margin-bottom: 0;
 }
 
 .select-button-group {

--
Gitblit v1.9.3