From 5da536668e047dbaefbb79731ab2cacfdf70dc56 Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期二, 22 七月 2025 17:36:38 +0800
Subject: [PATCH] 1、提交配煤计算器 解除煤种限制 2、增加销售出库的导出功能 3、库存管理正式库的导出功能 4、文档管理优化 5、优化设备管理模块

---
 src/views/warehouseManagement/index.vue |  723 ++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 495 insertions(+), 228 deletions(-)

diff --git a/src/views/warehouseManagement/index.vue b/src/views/warehouseManagement/index.vue
index b7bd8a4..02d226f 100644
--- a/src/views/warehouseManagement/index.vue
+++ b/src/views/warehouseManagement/index.vue
@@ -1,25 +1,25 @@
 <template>
   <div class="app-container">
     <el-form :inline="true" :model="queryParams" class="search-form">
-			<el-form-item label="鐧昏鏃ユ湡">
-				<el-date-picker
-					v-model="queryParams.registrationDate"
-					type="date"
-					value-format="YYYY-MM-DD"
-					format="YYYY-MM-DD"
-					clearable
-					style="width: 100%"
-					placeholder="璇烽�夋嫨鏃ユ湡"
-				/>
-			</el-form-item>
-			<el-form-item label="鐓ょ">
-				<el-input
-					v-model="queryParams.coal"
-					placeholder="璇疯緭鍏ョ叅绉�"
-					clearable
-					:style="{ width: '100%' }"
-				/>
-			</el-form-item>
+      <el-form-item label="鐧昏鏃ユ湡">
+        <el-date-picker
+          v-model="queryParams.registrationDate"
+          type="date"
+          value-format="YYYY-MM-DD"
+          format="YYYY-MM-DD"
+          clearable
+          style="width: 100%"
+          placeholder="璇烽�夋嫨鏃ユ湡"
+        />
+      </el-form-item>
+      <el-form-item label="鐓ょ">
+        <el-input
+          v-model="queryParams.coal"
+          placeholder="璇疯緭鍏ョ叅绉�"
+          clearable
+          :style="{ width: '100%' }"
+        />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="handleQuery">鏌ヨ</el-button>
         <el-button @click="resetQuery">閲嶇疆</el-button>
@@ -28,56 +28,158 @@
     <el-card>
       <!-- 鏍囩椤� -->
       <el-tabs
-          v-model="activeTab"
-          class="info-tabs"
-          @tab-click="handleTabClick"
+        v-model="activeTab"
+        class="info-tabs"
+        @tab-click="handleTabClick"
       >
         <el-tab-pane
-            v-for="tab in tabs"
-            :key="tab.name"
-            :label="tab.label"
-            :name="tab.name"
+          v-for="tab in tabs"
+          :key="tab.name"
+          :label="tab.label"
+          :name="tab.name"
         />
       </el-tabs>
       <!-- 鎿嶄綔鎸夐挳鍖� -->
       <el-space>
-<!--        <el-button type="danger" :icon="Delete">鍒犻櫎</el-button>-->
+        <!--        <el-button type="danger" :icon="Delete">鍒犻櫎</el-button>-->
         <!-- <el-button type="info" plain :icon="Download">瀵煎嚭</el-button>  -->
-        <el-button type="success" plain :icon="Refresh" v-if="activeTab=== 'officialInventory'" @click="mergeRows('merge')">鍚堝苟</el-button>
+        <el-button
+          type="success"
+          plain
+          :icon="Refresh"
+          v-if="activeTab === 'officialInventory'"
+          @click="mergeRows('merge')"
+          >鍚堝苟</el-button
+        >
+        <el-button
+          type="info"
+          plain
+          :icon="Download"
+          v-if="activeTab === 'officialInventory'"
+          @click="handleExport"
+          >瀵煎嚭</el-button
+        >
       </el-space>
       <div>
-        <el-table :data="tableData" border @selection-change="selectionChange" style="width: 100%;height: calc(100vh - 30em)" show-summary :summary-method="summarizeChildrenTable">
+        <el-table
+          :data="tableData"
+          border
+          @selection-change="selectionChange"
+          style="width: 100%; height: calc(100vh - 30em)"
+          show-summary
+          :summary-method="summarizeChildrenTable"
+        >
           <el-table-column type="selection" width="55" align="center" />
-          <el-table-column label="搴忓彿" type="index" width="60" align="center" />
-          <el-table-column prop="supplierName" label="渚涜揣鍟嗗悕绉�" width="180" sortable/>
-          <el-table-column prop="coal" label="鐓ょ" sortable/>
-          <el-table-column prop="unit" label="鍗曚綅" width="70"/>
-          <el-table-column prop="inventoryQuantity" label="搴撳瓨鏁伴噺" sortable min-width="110"/>
-          <el-table-column prop="priceIncludingTax" label="鍗曚环(鍚◣)" sortable width="130"/>
-          <el-table-column prop="totalPriceIncludingTax" label="鎬讳环(鍚◣)" width="130" />
-          <el-table-column prop="priceExcludingTax" label="鍗曚环(涓嶅惈绋�)" width="130" />
-          <el-table-column prop="totalPriceExcludingTax" label="鎬讳环(涓嶅惈绋�)" width="130" />
-          <el-table-column prop="pendingReplenishment" label="寰呰ˉ搴�" width="130" v-if="activeTab=== 'officialInventory'"/>
-          <el-table-column label="鐓よ川" align="center" v-if="activeTab=== 'officialInventory'" width="600">
-            <el-table-column v-for="col in columnTitle" :key="col.prop" :prop="col.prop" :label="col.label" align="center" sortable min-width="200"/>
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            width="60"
+            align="center"
+          />
+          <el-table-column
+            prop="supplierName"
+            label="渚涜揣鍟嗗悕绉�"
+            width="180"
+            sortable
+          />
+          <el-table-column prop="coal" label="鐓ょ" sortable />
+          <el-table-column prop="unit" label="鍗曚綅" width="70" />
+          <el-table-column
+            prop="inventoryQuantity"
+            label="搴撳瓨鏁伴噺"
+            sortable
+            min-width="110"
+          />
+          <el-table-column
+            prop="priceIncludingTax"
+            label="鍗曚环(鍚◣)"
+            sortable
+            width="130"
+          />
+          <el-table-column
+            prop="totalPriceIncludingTax"
+            label="鎬讳环(鍚◣)"
+            width="130"
+          />
+          <el-table-column
+            prop="priceExcludingTax"
+            label="鍗曚环(涓嶅惈绋�)"
+            width="130"
+          />
+          <el-table-column
+            prop="totalPriceExcludingTax"
+            label="鎬讳环(涓嶅惈绋�)"
+            width="130"
+          />
+          <el-table-column
+            prop="pendingReplenishment"
+            label="寰呰ˉ搴�"
+            width="130"
+            v-if="activeTab === 'officialInventory'"
+          />
+          <el-table-column
+            label="鐓よ川"
+            align="center"
+            v-if="activeTab === 'officialInventory'"
+            width="600"
+          >
+            <el-table-column
+              v-for="col in columnTitle"
+              :key="col.prop"
+              :prop="col.prop"
+              :label="col.label"
+              align="center"
+              sortable
+              min-width="200"
+            />
           </el-table-column>
-          <el-table-column prop="registrant" label="鐧昏浜�" width="180"/>
-          <el-table-column prop="registrationDate" label="鐧昏鏃ユ湡" width="180"/>
-          <el-table-column fixed="right" label="鎿嶄綔" min-width="100" align="center">
+          <el-table-column prop="registrant" label="鐧昏浜�" width="180" />
+          <el-table-column
+            prop="registrationDate"
+            label="鐧昏鏃ユ湡"
+            width="180"
+          />
+          <el-table-column
+            fixed="right"
+            label="鎿嶄綔"
+            min-width="100"
+            align="center"
+          >
             <template #default="scope">
-              <el-button link type="primary" size="small" @click="reviewDia(scope.row)" v-if="activeTab !== 'officialInventory'">瀹℃牳</el-button>
-              <el-button link type="primary" size="small" @click="mergeRows('edit', scope.row)" v-if="activeTab === 'officialInventory'">缂栬緫</el-button>
-              <el-button link type="primary" size="small" @click="mergeRows('view', scope.row)" v-if="activeTab === 'officialInventory'">璇︽儏</el-button>
+              <el-button
+                link
+                type="primary"
+                size="small"
+                @click="reviewDia(scope.row)"
+                v-if="activeTab !== 'officialInventory'"
+                >瀹℃牳</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                size="small"
+                @click="mergeRows('edit', scope.row)"
+                v-if="activeTab === 'officialInventory'"
+                >缂栬緫</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                size="small"
+                @click="mergeRows('view', scope.row)"
+                v-if="activeTab === 'officialInventory'"
+                >璇︽儏</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
         <pagination
-            v-if="total>0"
-            :page="pageNum"
-            :limit="pageSize"
-            :total="total"
-            @pagination="handlePagination"
-            :layout="'total, prev, pager, next, jumper'"
+          v-if="total > 0"
+          :page="pageNum"
+          :limit="pageSize"
+          :total="total"
+          @pagination="handlePagination"
+          :layout="'total, prev, pager, next, jumper'"
         />
       </div>
     </el-card>
@@ -88,14 +190,24 @@
           <el-col :span="12">
             <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierId">
               <el-select v-model="form.supplierId" placeholder="璇烽�夋嫨渚涘簲鍟�">
-                <el-option :label="item.label" v-for="item in supplyList" :key="item.value" :value="item.value"/>
+                <el-option
+                  :label="item.label"
+                  v-for="item in supplyList"
+                  :key="item.value"
+                  :value="item.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鐓ょ" prop="coalId">
               <el-select v-model="form.coalId" placeholder="璇烽�夋嫨鐓ょ">
-                <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.value"/>
+                <el-option
+                  :label="item.label"
+                  v-for="item in coalList"
+                  :key="item.value"
+                  :value="item.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
@@ -103,48 +215,78 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚綅" prop="unit">
-              <el-input v-model="form.unit" placeholder="璇疯緭鍏ュ崟浣�" maxlength="30" />
+              <el-input
+                v-model="form.unit"
+                placeholder="璇疯緭鍏ュ崟浣�"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="搴撳瓨鏁伴噺" prop="inventoryQuantity">
-              <el-input v-model="form.inventoryQuantity" placeholder="璇疯緭鍏ュ簱瀛樻暟閲�" :max="inventoryQuantity" type="number"/>
+              <el-input
+                v-model="form.inventoryQuantity"
+                placeholder="璇疯緭鍏ュ簱瀛樻暟閲�"
+                :max="inventoryQuantity"
+                type="number"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
-              <el-input v-model="form.priceIncludingTax" placeholder="璇疯緭鍏ュ崟浠�(鍚◣)" maxlength="30" />
+              <el-input
+                v-model="form.priceIncludingTax"
+                placeholder="璇疯緭鍏ュ崟浠�(鍚◣)"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax">
-              <el-input v-model="form.totalPriceIncludingTax" placeholder="璇疯緭鍏ユ�讳环(鍚◣)" maxlength="30" />
+              <el-input
+                v-model="form.totalPriceIncludingTax"
+                placeholder="璇疯緭鍏ユ�讳环(鍚◣)"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
-              <el-input v-model="form.priceExcludingTax" placeholder="璇疯緭鍏ユ垚鏈崟浠�" maxlength="30" />
+              <el-input
+                v-model="form.priceExcludingTax"
+                placeholder="璇疯緭鍏ユ垚鏈崟浠�"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax">
-              <el-input v-model="form.totalPriceExcludingTax" placeholder="璇疯緭鍏ユ垚鏈崟浠�" maxlength="30" />
+              <el-input
+                v-model="form.totalPriceExcludingTax"
+                placeholder="璇疯緭鍏ユ垚鏈崟浠�"
+                maxlength="30"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鐓よ川鏂规" prop="coalPlanId">
-              <el-select v-model="form.coalPlanId" placeholder="璇烽�夋嫨" @change="coalPlanByIdList" clearable>
+              <el-select
+                v-model="form.coalPlanId"
+                placeholder="璇烽�夋嫨"
+                @change="coalPlanByIdList"
+                clearable
+              >
                 <el-option
-                    v-for="dict in qualityPlanOption"
-                    :key="dict.id"
-                    :label="dict.plan"
-                    :value="dict.id"
+                  v-for="dict in qualityPlanOption"
+                  :key="dict.id"
+                  :label="dict.plan"
+                  :value="dict.id"
                 ></el-option>
               </el-select>
             </el-form-item>
@@ -167,20 +309,47 @@
       </template>
     </el-dialog>
     <!-- 鍚堝苟鏁版嵁寮规 -->
-    <el-dialog :title="operationType.value === 'edit' ? '缂栬緫搴撳瓨' : '鍚堝苟搴撳瓨'" v-model="mergeVisible" width="800px">
-      <el-form :model="mergeForm" :rules="mergeRules" ref="mergeRef" label-width="100px">
+    <el-dialog
+      :title="operationType.value === 'edit' ? '缂栬緫搴撳瓨' : '鍚堝苟搴撳瓨'"
+      v-model="mergeVisible"
+      width="800px"
+    >
+      <el-form
+        :model="mergeForm"
+        :rules="mergeRules"
+        ref="mergeRef"
+        label-width="100px"
+      >
         <el-row>
           <el-col :span="12">
             <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierId">
-              <el-select v-model="mergeForm.supplierId" placeholder="璇烽�夋嫨渚涘簲鍟�" :disabled="operationType === 'view'">
-                <el-option :label="item.label" v-for="item in supplyList" :key="item.value" :value="item.value"/>
+              <el-select
+                v-model="mergeForm.supplierId"
+                placeholder="璇烽�夋嫨渚涘簲鍟�"
+                :disabled="operationType === 'view'"
+              >
+                <el-option
+                  :label="item.label"
+                  v-for="item in supplyList"
+                  :key="item.value"
+                  :value="item.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鐓ょ" prop="coalId">
-              <el-select v-model="mergeForm.coalId" placeholder="璇烽�夋嫨鐓ょ" :disabled="operationType === 'view'">
-                <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.value"/>
+              <el-select
+                v-model="mergeForm.coalId"
+                placeholder="璇烽�夋嫨鐓ょ"
+                :disabled="operationType === 'view'"
+              >
+                <el-option
+                  :label="item.label"
+                  v-for="item in coalList"
+                  :key="item.value"
+                  :value="item.value"
+                />
               </el-select>
             </el-form-item>
           </el-col>
@@ -188,48 +357,85 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚綅" prop="unit">
-              <el-input v-model="mergeForm.unit" placeholder="璇疯緭鍏ュ崟浣�" maxlength="30" :disabled="operationType === 'view'"/>
+              <el-input
+                v-model="mergeForm.unit"
+                placeholder="璇疯緭鍏ュ崟浣�"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="搴撳瓨鏁伴噺" prop="inventoryQuantity">
-              <el-input v-model="mergeForm.inventoryQuantity" placeholder="璇疯緭鍏ュ簱瀛樻暟閲�" :max="inventoryQuantity" type="number" :disabled="operationType === 'view'"/>
+              <el-input
+                v-model="mergeForm.inventoryQuantity"
+                placeholder="璇疯緭鍏ュ簱瀛樻暟閲�"
+                :max="inventoryQuantity"
+                type="number"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
-              <el-input v-model="mergeForm.priceIncludingTax" placeholder="璇疯緭鍏ュ崟浠�(鍚◣)" maxlength="30" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm.priceIncludingTax"
+                placeholder="璇疯緭鍏ュ崟浠�(鍚◣)"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax">
-              <el-input v-model="mergeForm.totalPriceIncludingTax" placeholder="璇疯緭鍏ユ�讳环(鍚◣)" maxlength="30" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm.totalPriceIncludingTax"
+                placeholder="璇疯緭鍏ユ�讳环(鍚◣)"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
-              <el-input v-model="mergeForm.priceExcludingTax" placeholder="璇疯緭鍏ュ崟浠�(涓嶅惈绋�)" maxlength="30" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm.priceExcludingTax"
+                placeholder="璇疯緭鍏ュ崟浠�(涓嶅惈绋�)"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax">
-              <el-input v-model="mergeForm.totalPriceExcludingTax" placeholder="璇疯緭鍏ユ�讳环(涓嶅惈绋�)" maxlength="30" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm.totalPriceExcludingTax"
+                placeholder="璇疯緭鍏ユ�讳环(涓嶅惈绋�)"
+                maxlength="30"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="鐓よ川鏂规" prop="coalPlanId">
-              <el-select v-model="mergeForm.coalPlanId" placeholder="璇烽�夋嫨" @change="coalPlanByIdList" clearable :disabled="operationType === 'view'">
+              <el-select
+                v-model="mergeForm.coalPlanId"
+                placeholder="璇烽�夋嫨"
+                @change="coalPlanByIdList"
+                clearable
+                :disabled="operationType === 'view'"
+              >
                 <el-option
-                    v-for="dict in qualityPlanOption"
-                    :key="dict.id"
-                    :label="dict.plan"
-                    :value="dict.id"
+                  v-for="dict in qualityPlanOption"
+                  :key="dict.id"
+                  :label="dict.plan"
+                  :value="dict.id"
                 ></el-option>
               </el-select>
             </el-form-item>
@@ -239,7 +445,10 @@
         <el-row>
           <el-col :span="12" v-for="item in filteredList" :key="item.id">
             <el-form-item :label="item.fieldName">
-              <el-input v-model="mergeForm[item.fields]" :disabled="operationType === 'view'" />
+              <el-input
+                v-model="mergeForm[item.fields]"
+                :disabled="operationType === 'view'"
+              />
             </el-form-item>
           </el-col>
         </el-row>
@@ -255,25 +464,28 @@
 </template>
 
 <script setup>
-import {onMounted, ref} from "vue";
-import {Delete, Download, Refresh} from "@element-plus/icons-vue";
+import { onMounted, ref } from "vue";
+import { Delete, Download, Refresh } from "@element-plus/icons-vue";
 import Pagination from "@/components/Pagination/index.vue";
 import {
   addOrEditCoalValue,
-  coalFieldList, coalPlanById,
-  coalPlanList, officialInventoryList,
-  pendingInventoryList
+  coalFieldList,
+  coalPlanById,
+  coalPlanList,
+  officialInventoryList,
+  pendingInventoryList,
 } from "@/api/warehouseManagement/index.js";
-import {editOfficial, merge} from "../../api/warehouseManagement/index.js";
-import {getSupplyList} from "@/api/procureMent/index.js";
-import {getCoalInfoList} from "@/api/production/index.js";
+import { editOfficial, merge } from "../../api/warehouseManagement/index.js";
+import { getSupplyList } from "@/api/procureMent/index.js";
+import { getCoalInfoList } from "@/api/production/index.js";
+import { ElMessage } from "element-plus";
 
-const { proxy } = getCurrentInstance()
+const { proxy } = getCurrentInstance();
 
-const tableData = ref([])
-const selectedRows = ref([])
-const qualityPlanOption = ref([])
-const filteredList = ref([])
+const tableData = ref([]);
+const selectedRows = ref([]);
+const qualityPlanOption = ref([]);
+const filteredList = ref([]);
 const tableLoading = ref(false);
 const total = ref(0);
 const pageNum = ref(1);
@@ -285,50 +497,58 @@
 // 瀹℃牳寮规
 const reviewVisible = ref(false);
 // 鍚堝苟寮规
-const mergeVisible = ref(false)
-const operationType = ref('')
+const mergeVisible = ref(false);
+const operationType = ref("");
 const data = reactive({
   form: {
-    supplierName: '',
-    coal: '',
-    unit: '',
-    inventoryQuantity: '',
-    priceIncludingTax: '',
-    totalPriceIncludingTax: '',
-    priceExcludingTax: '',
-    totalPriceExcludingTax: '',
-    coalPlanId: '',
-    pId: '',
+    supplierName: "",
+    coal: "",
+    unit: "",
+    inventoryQuantity: "",
+    priceIncludingTax: "",
+    totalPriceIncludingTax: "",
+    priceExcludingTax: "",
+    totalPriceExcludingTax: "",
+    coalPlanId: "",
+    pId: "",
   },
   mergeForm: {
-    supplierId: '',
-    coalId: '',
-    unit: '',
-    inventoryQuantity: '',
-    priceIncludingTax: '',
-    totalPriceIncludingTax: '',
-    priceExcludingTax: '',
-    totalPriceExcludingTax: '',
-    coalPlanId: '',
-    pId: '',
+    supplierId: "",
+    coalId: "",
+    unit: "",
+    inventoryQuantity: "",
+    priceIncludingTax: "",
+    totalPriceIncludingTax: "",
+    priceExcludingTax: "",
+    totalPriceExcludingTax: "",
+    coalPlanId: "",
+    pId: "",
   },
   rules: {
-    supplierName: [{ required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" }],
+    supplierName: [
+      { required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" },
+    ],
     coal: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }],
     unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
     coalPlanId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    supplierId: [{ required: true, message: "璇烽�夋嫨渚涘簲鍟�", trigger: "change" }],
+    supplierId: [
+      { required: true, message: "璇烽�夋嫨渚涘簲鍟�", trigger: "change" },
+    ],
   },
   mergeRules: {
-    supplierName: [{ required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" }],
+    supplierName: [
+      { required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" },
+    ],
     coal: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }],
     unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
     coalPlanId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-    supplierId: [{ required: true, message: "璇烽�夋嫨渚涘簲鍟�", trigger: "change" }],
-  }
-})
+    supplierId: [
+      { required: true, message: "璇烽�夋嫨渚涘簲鍟�", trigger: "change" },
+    ],
+  },
+});
 
-const { form, rules, mergeForm, mergeRules } = toRefs(data)
+const { form, rules, mergeForm, mergeRules } = toRefs(data);
 // 褰撳墠鏍囩
 const activeTab = ref("pendingInbound");
 const tabName = ref("pendingInbound");
@@ -339,10 +559,10 @@
 ]);
 // 鏌ヨ鍙傛暟
 const queryParams = reactive({
-	registrationDate: "",
-	coal: "",
-})
-const columnTitle = ref([])
+  registrationDate: "",
+  coal: "",
+});
+const columnTitle = ref([]);
 const supplyList = ref([]);
 const coalList = ref([]);
 
@@ -380,52 +600,66 @@
   getList();
 };
 const summarizeChildrenTable = (param) => {
-  return proxy.summarizeTable(param, ['inventoryQuantity', 'priceIncludingTax', 'totalPriceIncludingTax','priceExcludingTax','totalPriceExcludingTax']);
-}
+  return proxy.summarizeTable(param, [
+    "inventoryQuantity",
+    "priceIncludingTax",
+    "totalPriceIncludingTax",
+    "priceExcludingTax",
+    "totalPriceExcludingTax",
+  ]);
+};
 // 鐐瑰嚮鏌ヨ
 const handleQuery = () => {
-  pageNum.value = 1
-  pageSize.value = 10
-  getList()
-}
+  pageNum.value = 1;
+  pageSize.value = 10;
+  getList();
+};
 // 鍒嗛〉澶勭悊
 const handlePagination = (val) => {
-	pageNum.value = val.page;
-	pageSize.value = val.limit;
-	getList();
+  pageNum.value = val.page;
+  pageSize.value = val.limit;
+  getList();
 };
 const getList = () => {
   tableLoading.value = true;
   // 璧嬪�肩叅璐ㄨ〃澶村睍绀哄瓧娈�
   if (tabName.value === "pendingInbound") {
-    pendingInventoryList({ ...queryParams, current: pageNum.value, size: pageSize.value }).then(res => {
+    pendingInventoryList({
+      ...queryParams,
+      current: pageNum.value,
+      size: pageSize.value,
+    }).then((res) => {
       tableLoading.value = false;
       tableData.value = res.data.records;
       total.value = res.data.total;
-    })
+    });
   } else {
-    officialInventoryList({ ...queryParams, current: pageNum.value, size: pageSize.value }).then(res => {
+    officialInventoryList({
+      ...queryParams,
+      current: pageNum.value,
+      size: pageSize.value,
+    }).then((res) => {
       tableLoading.value = false;
       const result = flattenFields(res.data.records);
       tableData.value = result;
       total.value = res.data.total;
-      coalFieldListOption()
-    })
+      coalFieldListOption();
+    });
   }
 };
 // 鎵佸钩鍖栧鐞嗗嚱鏁�
 const flattenFields = (data) => {
-  return data.map(item => {
+  return data.map((item) => {
     const mergedFields = item.fields.reduce((acc, obj) => {
       const key = Object.keys(obj)[0];
       acc[key] = obj[key];
       return acc;
     }, {});
-    
+
     // 鍚堝苟涓诲璞′笌鎻愬彇鍑虹殑 fields 瀛楁
     return {
       ...item,
-      ...mergedFields
+      ...mergedFields,
     };
   });
 };
@@ -440,66 +674,91 @@
 };
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const selectionChange = (rows) => {
-  selectedRows.value = rows
-}
+  selectedRows.value = rows;
+};
 // 鎵撳紑瀹℃牳寮规
 const reviewDia = (row) => {
-  reviewVisible.value = true
-  filteredList.value = []
-  form.value = {...row}
-  form.value.pId = row.id
-  inventoryQuantity.value = row.inventoryQuantity
-  getDropdownData()
-  coalPlanListOptions()
-}
+  reviewVisible.value = true;
+  filteredList.value = [];
+  form.value = { ...row };
+  form.value.pId = row.id;
+  inventoryQuantity.value = row.inventoryQuantity;
+  getDropdownData();
+  coalPlanListOptions();
+};
 // 鏌ヨ鐓よ川鏂规涓嬫媺妗�
 const coalPlanListOptions = () => {
-  coalPlanList().then(res => {
-    qualityPlanOption.value = res.data
-  })
-}
+  coalPlanList().then((res) => {
+    qualityPlanOption.value = res.data;
+  });
+};
 // 鏌ヨ鐓よ川鏂规瀛楁
 const coalPlanByIdList = (id) => {
-  coalPlanById({id: id}).then(res => {
-    filteredList.value = res.data
-    if(!id) {
-      filteredList.value = []
+  coalPlanById({ id: id }).then((res) => {
+    filteredList.value = res.data;
+    if (!id) {
+      filteredList.value = [];
     }
-  })
-}
+  });
+};
 // 鏌ヨ鐓よ川瀛楁
 const coalFieldListOption = () => {
-  coalFieldList().then(res => {
-    filteredList.value = res.data
-    columnTitle.value = res.data.map(item => {
+  coalFieldList().then((res) => {
+    filteredList.value = res.data;
+    columnTitle.value = res.data.map((item) => {
       return {
         prop: item.fields,
-        label: item.fieldName // 浣跨敤 fieldName 浣滀负 label
+        label: item.fieldName, // 浣跨敤 fieldName 浣滀负 label
       };
     });
-  })
-}
+  });
+};
+const handleExport = () => {
+  const config = { api: "/officialInventory/export", name: "姝e紡搴�" };
+  proxy.$modal
+    .confirm(
+      "鏄惁瑕佸鍑�" +
+        (selectedRows.value.length > 0
+          ? `閫変腑鐨�${selectedRows.value.length}鏉
+          : "鍏ㄩ儴") +
+        "鏁版嵁锛�"
+    )
+    .then((res) => {
+      if (res) {
+        ElMessage.success("姝e湪瀵煎嚭鏁版嵁锛岃绋嶅��...");
+        exportData(config.api, config.name);
+      }
+    })
+    .catch(() => {});
+};
+const exportData = (api, name) => {
+  proxy.download(
+    api,
+    { exportIds: selectedRows.value.map((row) => row.id) },
+    `${new Date().getTime()}${name}${new Date().toLocaleDateString("en-CA")}.xlsx`
+  );
+};
 // 鍚堝苟搴撳瓨鏁版嵁鏂规硶
-const mergeRows = (type,row) => {
-  getDropdownData()
-  coalPlanListOptions()
-  if (type === 'edit') {
+const mergeRows = (type, row) => {
+  getDropdownData();
+  coalPlanListOptions();
+  if (type === "edit") {
     mergeVisible.value = true;
   }
   operationType.value = type;
-  if (type !== 'merge') {
-    mergeForm.value = {...row}
+  if (type !== "merge") {
+    mergeForm.value = { ...row };
   } else {
     if (selectedRows.value.length < 2) {
-      proxy.$modal.msgWarning('璇疯嚦灏戦�夋嫨涓ゆ潯鏁版嵁')
-      return
+      proxy.$modal.msgWarning("璇疯嚦灏戦�夋嫨涓ゆ潯鏁版嵁");
+      return;
     }
     mergeVisible.value = true;
-    filteredList.value.forEach(item => {
-      mergeForm.value[item.fields] = ''
-    })
-    const data = selectedRows.value
-    const selectedIds = selectedRows.value.map(row => row.id);
+    filteredList.value.forEach((item) => {
+      mergeForm.value[item.fields] = "";
+    });
+    const data = selectedRows.value;
+    const selectedIds = selectedRows.value.map((row) => row.id);
     // 鍒濆鍖栧悎璁″拰鍧囧�煎彉閲�
     let totalInventory = 0;
     let totalPriceIncludingTax = 0;
@@ -507,7 +766,7 @@
     let priceIncludingTaxSum = 0;
     let priceExcludingTaxSum = 0;
     // 閬嶅巻鎵�鏈夐�変腑鏁版嵁锛岀疮鍔犺绠�
-    data.forEach(row => {
+    data.forEach((row) => {
       totalInventory += parseFloat(row.inventoryQuantity) || 0;
       priceIncludingTaxSum += parseFloat(row.priceIncludingTax) || 0;
       totalPriceIncludingTax += parseFloat(row.totalPriceIncludingTax) || 0;
@@ -515,10 +774,18 @@
       totalPriceExcludingTax += parseFloat(row.totalPriceExcludingTax) || 0;
     });
     // 璁$畻骞冲潎鍊煎苟淇濈暀涓や綅灏忔暟
-    const avgPriceIncludingTax = Number((priceIncludingTaxSum / data.length).toFixed(2));
-    const avgTotalPriceIncludingTax = Number((totalPriceIncludingTax / data.length).toFixed(2));
-    const avgPriceExcludingTax = Number((priceExcludingTaxSum / data.length).toFixed(2));
-    const avgTotalPriceExcludingTax = Number((totalPriceExcludingTax / data.length).toFixed(2));
+    const avgPriceIncludingTax = Number(
+      (priceIncludingTaxSum / data.length).toFixed(2)
+    );
+    const avgTotalPriceIncludingTax = Number(
+      (totalPriceIncludingTax / data.length).toFixed(2)
+    );
+    const avgPriceExcludingTax = Number(
+      (priceExcludingTaxSum / data.length).toFixed(2)
+    );
+    const avgTotalPriceExcludingTax = Number(
+      (totalPriceExcludingTax / data.length).toFixed(2)
+    );
     // 璁剧疆琛ㄥ崟鏄剧ず
     mergeForm.value.inventoryQuantity = totalInventory;
     mergeForm.value.priceIncludingTax = avgPriceIncludingTax;
@@ -527,81 +794,81 @@
     mergeForm.value.totalPriceExcludingTax = avgTotalPriceExcludingTax;
     mergeForm.value.ids = selectedIds;
   }
-}
+};
 // 鎻愪氦鍚堝苟琛ㄥ崟
 const submitForm = () => {
-  proxy.$refs.mergeRef.validate(valid => {
+  proxy.$refs.mergeRef.validate((valid) => {
     if (valid) {
-      delete mergeForm.value.createTime
-      delete mergeForm.value.updateTime
-      if (operationType.value === 'edit') {
+      delete mergeForm.value.createTime;
+      delete mergeForm.value.updateTime;
+      if (operationType.value === "edit") {
         mergeForm.value.fields = filteredList.value.reduce((acc, item) => {
           const key = item.fields;
           const value = mergeForm.value[key];
           // 鍒ゆ柇鏄惁鏈夊�硷紙浣犲彲浠ユ牴鎹渶瑕佷慨鏀瑰垽鏂潯浠讹級
-          if (value !== null && value !== undefined && value !== '') {
+          if (value !== null && value !== undefined && value !== "") {
             acc.push({ [key]: value });
           }
           return acc;
         }, []);
         editOfficial(mergeForm.value).then(() => {
-          cancel()
-          proxy.$modal.msgSuccess('淇敼鎴愬姛')
-          handleQuery()
-        })
+          cancel();
+          proxy.$modal.msgSuccess("淇敼鎴愬姛");
+          handleQuery();
+        });
       } else {
         mergeForm.value.fields = filteredList.value.reduce((acc, item) => {
           const key = item.fields;
           const value = mergeForm.value[key];
           // 鍒ゆ柇鏄惁鏈夊�硷紙浣犲彲浠ユ牴鎹渶瑕佷慨鏀瑰垽鏂潯浠讹級
-          if (value !== null && value !== undefined && value !== '') {
+          if (value !== null && value !== undefined && value !== "") {
             acc.push({ [key]: value });
           }
           return acc;
         }, []);
-        mergeForm.value.type = 2
+        mergeForm.value.type = 2;
         merge(mergeForm.value).then(() => {
-          cancel()
-          proxy.$modal.msgSuccess('鍚堝苟鎴愬姛')
-          handleQuery()
-        })
+          cancel();
+          proxy.$modal.msgSuccess("鍚堝苟鎴愬姛");
+          handleQuery();
+        });
       }
     }
-  })
-}
+  });
+};
 // 鍏抽棴鍚堝苟琛ㄥ崟
 const cancel = () => {
   proxy.$refs.mergeRef.resetFields();
-  mergeVisible.value = false
-}
+  mergeVisible.value = false;
+};
 // 鎻愪氦瀹℃牳琛ㄥ崟
 const submitReviewForm = () => {
   proxy.$refs.formRef.validate((valid) => {
     if (valid) {
-      delete form.value.registrationTime
-      delete form.value.createTime
-      delete form.value.updateTime
-      form.value.type = 1
-      form.value.fieldValue = filteredList.value.map(item => ({
-        [item.fields]: form.value[item.fields]
-      }))
+      delete form.value.registrationTime;
+      delete form.value.createTime;
+      delete form.value.updateTime;
+      form.value.type = 1;
+      form.value.fieldValue = filteredList.value.map((item) => ({
+        [item.fields]: form.value[item.fields],
+      }));
       addOrEditCoalValue(form.value).then(() => {
-        cancelReview()
-        proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
-        handleQuery()
-      })
+        cancelReview();
+        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        handleQuery();
+      });
     }
-  })
-}
+  });
+};
 // 鍏抽棴瀹℃牳寮规
 const cancelReview = () => {
-  proxy.$refs.formRef.resetFields()
-  reviewVisible.value = false
-}
+  proxy.$refs.formRef.resetFields();
+  reviewVisible.value = false;
+};
 </script>
 
 <style scoped>
 :deep(.el-table) {
   margin: 20px 0;
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3