From 50b6007b336a65b7deb6c77c9fdc608865067608 Mon Sep 17 00:00:00 2001
From: 张诺 <2864490065@qq.com>
Date: 星期五, 25 七月 2025 16:31:57 +0800
Subject: [PATCH] 昭德改善销售数量

---
 src/views/warehouseManagement/index.vue |  978 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 756 insertions(+), 222 deletions(-)

diff --git a/src/views/warehouseManagement/index.vue b/src/views/warehouseManagement/index.vue
index 1bdec21..32946d7 100644
--- a/src/views/warehouseManagement/index.vue
+++ b/src/views/warehouseManagement/index.vue
@@ -1,36 +1,23 @@
 <template>
   <div class="app-container">
     <el-form :inline="true" :model="queryParams" class="search-form">
-      <el-form-item label="鎼滅储">
-        <el-input
-            v-model="queryParams.searchText"
-            placeholder="璇疯緭鍏ュ叧閿瘝"
-            clearable
-            :style="{ width: '100%' }"
+      <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-form-item label="鐓ょ">
         <el-input
-            v-model="queryParams.supplierName"
-            placeholder="璇疯緭鍏�"
-            clearable
-            :style="{ width: '100%' }"
-        />
-      </el-form-item>
-      <el-form-item label="缁熶竴浜鸿瘑鍒彿">
-        <el-input
-            v-model="queryParams.identifyNumber"
-            placeholder="璇疯緭鍏�"
-            clearable
-            :style="{ width: '100%' }"
-        />
-      </el-form-item>
-      <el-form-item label="缁忚惀鍦板潃">
-        <el-input
-            v-model="queryParams.address"
-            placeholder="璇疯緭鍏�"
-            clearable
-            :style="{ width: '100%' }"
+          v-model="queryParams.coal"
+          placeholder="璇疯緭鍏ョ叅绉�"
+          clearable
+          :style="{ width: '100%' }"
         />
       </el-form-item>
       <el-form-item>
@@ -41,87 +28,427 @@
     <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-row :gutter="24" class="table-toolbar">
-        <el-button type="primary" :icon="Plus" >鏂板缓</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">鍚堝苟</el-button>
-      </el-row>
+      <el-space>
+        <!--        <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="info"
+          plain
+          :icon="Download"
+          v-if="activeTab === 'officialInventory'"
+          @click="handleExport"
+          >瀵煎嚭</el-button
+        >
+      </el-space>
       <div>
-        <el-table :data="tableData" border @selection-change="selectionChange">
+        <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="name" label="渚涜揣鍟嗗悕绉�" width="180" sortable/>
-          <el-table-column prop="type" label="鐓ょ" sortable/>
-          <el-table-column prop="unit" label="鍗曚綅" width="70"/>
-          <el-table-column prop="number" label="搴撳瓨鏁伴噺" sortable/>
-          <el-table-column prop="money" label="鍗曚环锛堝惈绋庯級" sortable width="130"/>
-          <el-table-column prop="money1" label="鎬讳环锛堝惈绋庯級" width="130" />
-          <el-table-column prop="money2" label="鎴愭湰鍗曚环" />
-          <el-table-column prop="money3" label="鍒╂鼎" />
-          <el-table-column prop="money4" label="鐓よ川" sortable/>
-          <el-table-column prop="createUser" label="鐧昏浜�" />
-          <el-table-column prop="createTime" label="鐧昏鏃ユ湡" />
-          <el-table-column fixed="right" label="鎿嶄綔" min-width="90" align="center">
-            <template #default>
-              <el-button link type="primary" size="small">缂栬緫</el-button>
-              <el-button link type="danger" size="small">鍒犻櫎</el-button>
+          <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"
+          >
+            <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
+              >
             </template>
           </el-table-column>
         </el-table>
         <pagination
-            v-if="total>0"
-            :page-num="pageNum"
-            :page-size="pageSize"
-            :total="total"
-            @pagination="handleQuery"
-            :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>
+    <!-- 瀹℃牳寰呭叆搴撳脊妗� -->
+    <el-dialog title="瀹℃牳鍏ュ簱" v-model="reviewVisible" width="1000px">
+      <el-form :model="form" :rules="rules" ref="formRef" label-width="180px">
+        <el-row>
+          <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-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-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鍗曚綅" prop="unit">
+              <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-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-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax">
+              <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-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax">
+              <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-option
+                  v-for="dict in qualityPlanOption"
+                  :key="dict.id"
+                  :label="dict.plan"
+                  :value="dict.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-divider></el-divider>
+        <el-row>
+          <el-col :span="12" v-for="item in filteredList" :key="item.id">
+            <el-form-item :label="item.fieldName">
+              <el-input v-model="form[item.fields]" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitReviewForm">纭� 瀹�</el-button>
+          <el-button @click="cancelReview">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
     <!-- 鍚堝苟鏁版嵁寮规 -->
-    <el-dialog title="鍚堝苟搴撳瓨" v-model="mergeVisible" width="800px">
-      <el-form :model="form" :rules="rules" ref="userRef" 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="userName">
-              <el-input v-model="form.userName" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" />
+            <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>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鐓ょ" prop="nickName">
-              <el-input v-model="form.nickName" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" />
+            <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>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="鍗曚环(鍚◣)" prop="userName">
-              <el-input v-model="form.userName" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" />
+            <el-form-item label="鍗曚綅" prop="unit">
+              <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="nickName">
-              <el-input v-model="form.nickName" placeholder="璇疯緭鍏ュ鍚�" maxlength="30" />
+            <el-form-item label="搴撳瓨鏁伴噺" prop="inventoryQuantity">
+              <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="userName">
-              <el-input v-model="form.userName" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="30" />
+            <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
+              <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-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-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-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-option
+                  v-for="dict in qualityPlanOption"
+                  :key="dict.id"
+                  :label="dict.plan"
+                  :value="dict.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-divider></el-divider>
+        <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-form-item>
           </el-col>
         </el-row>
@@ -137,32 +464,91 @@
 </template>
 
 <script setup>
-import {onMounted, ref} from "vue";
-import {Delete, Download, Plus, 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";
-const { proxy } = getCurrentInstance()
+import {
+  addOrEditCoalValue,
+  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 { ElMessage } from "element-plus";
 
-const tableData = ref([])
-const selectedRows = ref([])
-const columns = ref([])
+const { proxy } = getCurrentInstance();
+
+const tableData = ref([]);
+const selectedRows = ref([]);
+const qualityPlanOption = ref([]);
+const filteredList = ref([]);
 const tableLoading = ref(false);
 const total = ref(0);
 const pageNum = ref(1);
 const pageSize = ref(10);
+const inventoryQuantity = ref(0);
+const count = ref(0);
+const mean = ref(0);
+const totalPrice = ref(0);
+// 瀹℃牳寮规
+const reviewVisible = ref(false);
 // 鍚堝苟寮规
-const mergeVisible = ref(false)
+const mergeVisible = ref(false);
+const operationType = ref("");
 const data = reactive({
-  form: {},
+  form: {
+    supplierName: "",
+    coal: "",
+    unit: "",
+    inventoryQuantity: "",
+    priceIncludingTax: "",
+    totalPriceIncludingTax: "",
+    priceExcludingTax: "",
+    totalPriceExcludingTax: "",
+    coalPlanId: "",
+    pId: "",
+  },
+  mergeForm: {
+    supplierId: "",
+    coalId: "",
+    unit: "",
+    inventoryQuantity: "",
+    priceIncludingTax: "",
+    totalPriceIncludingTax: "",
+    priceExcludingTax: "",
+    totalPriceExcludingTax: "",
+    coalPlanId: "",
+    pId: "",
+  },
   rules: {
-    userName: [{ required: true, message: "鐧诲綍璐﹀彿涓嶈兘涓虹┖", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", trigger: "blur" }],
-    nickName: [{ required: true, message: "鐢ㄦ埛濮撳悕涓嶈兘涓虹┖", trigger: "blur" }],
-    roleIds: [{ required: true, message: "瑙掕壊涓嶈兘涓虹┖", trigger: "change" }],
-    deptId: [{ required: true, message: "閮ㄩ棬涓嶈兘涓虹┖", trigger: "change" }],
-    password: [{ required: true, message: "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" }, { min: 5, max: 20, message: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, 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" },
+    ],
+  },
+  mergeRules: {
+    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" },
+    ],
+  },
+});
 
-const { form, rules } = toRefs(data)
+const { form, rules, mergeForm, mergeRules } = toRefs(data);
 // 褰撳墠鏍囩
 const activeTab = ref("pendingInbound");
 const tabName = ref("pendingInbound");
@@ -173,54 +559,109 @@
 ]);
 // 鏌ヨ鍙傛暟
 const queryParams = reactive({
-  searchText: "",
-  supplierName: "",
-  identifyNumber: "",
-  address: "",
-})
+  registrationDate: "",
+  coal: "",
+});
+const columnTitle = ref([]);
+const supplyList = ref([]);
+const coalList = ref([]);
+
+// 鑾峰彇渚涘簲鍟嗕笅鎷夊拰鐓ょ涓嬫媺
+const getDropdownData = async () => {
+  try {
+    const [supplyRes, coalRes] = await Promise.all([
+      getSupplyList(),
+      getCoalInfoList(),
+    ]);
+    let supplyData = supplyRes.data;
+    let coalData = coalRes.data;
+    supplyList.value = supplyData.map((item) => ({
+      value: item.id,
+      label: item.supplierName,
+    }));
+    coalList.value = coalData.map((item) => ({
+      value: item.id,
+      label: item.coal,
+    }));
+  } catch (error) {
+    ElMessage.error("鑾峰彇涓嬫媺鏁版嵁澶辫触锛岃绋嶅悗閲嶈瘯");
+  }
+};
+defineExpose({
+  getDropdownData,
+});
 onMounted(() => {
-  handleTabClick({ props: { name: "supplier" } });
+  handleTabClick({ props: { name: "pendingInbound" } });
 });
 // 鏍囩椤电偣鍑�
 const handleTabClick = (tab) => {
-  getList();
-  tableLoading.value = true;
   tabName.value = tab.props.name;
   tableData.value = [];
   getList();
-  // switch (tabName.value) {
-  //   case "pendingInbound":
-  //     columns.value = pendingColumns;
-  //     break;
-  //   case "officialInventory":
-  //     columns.value = officialColumns;
-  //     break;
-  // }
-  setTimeout(() => {
-    tableLoading.value = false;
-  }, 500);
+};
+const summarizeChildrenTable = (param) => {
+  return proxy.summarizeTable(param, [
+    "inventoryQuantity",
+    "priceIncludingTax",
+    "totalPriceIncludingTax",
+    "priceExcludingTax",
+    "totalPriceExcludingTax",
+  ]);
 };
 // 鐐瑰嚮鏌ヨ
 const handleQuery = () => {
-  tableLoading.value = true;
-  setTimeout(() => {
-    tableLoading.value = false;
-  }, 500);
-}
+  pageNum.value = 1;
+  pageSize.value = 10;
+  getList();
+};
+// 鍒嗛〉澶勭悊
+const handlePagination = (val) => {
+  pageNum.value = val.page;
+  pageSize.value = val.limit;
+  getList();
+};
 const getList = () => {
   tableLoading.value = true;
-  setTimeout(() => {
-    // 鏆傛椂寮曞叆娴嬭瘯鏁版嵁
-    tableData.value = [
-      { name: "渚涘簲鍟咥", type: "鍔ㄥ姏鐓�", unit: "鍚�", number: 120, money: 500, money1: 200, money2: 200, money3: 300, money4: '楂樹綅', createUser: 'admin', createTime: '2025-06-01' },
-      { name: "渚涘簲鍟咥", type: "鍔ㄥ姏鐓�", unit: "鍚�", number: 100, money: 600, money1: 300, money2: 300, money3: 300, money4: '浣庝綅', createUser: 'admin', createTime: '2025-06-01' },
-      { name: "渚涘簲鍟咮", type: "鐒︾叅", unit: "鍚�", number: 300, money: 789,money1: 400, money2: 400, money3: 400, money4: '楂樹綅', createUser: 'admin', createTime: '2025-06-01'  },
-      { name: "渚涘簲鍟咮", type: "鐒︾叅", unit: "鍚�", number: 256, money: 800, money1: 420, money2: 420, money3: 420, money4: '浣庝綅', createUser: 'admin', createTime: '2025-06-01'  },
-      { name: "渚涘簲鍟咰", type: "鏃犵儫鐓�", unit: "鍚�", number: 256, money: 700, money1: 300, money2: 300, money3: 300, money4: '楂樹綅', createUser: 'admin', createTime: '2025-06-01'  }
-    ];
-    total.value = tableData.value.length;
-    tableLoading.value = false;
-  }, 500);
+  // 璧嬪�肩叅璐ㄨ〃澶村睍绀哄瓧娈�
+  if (tabName.value === "pendingInbound") {
+    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) => {
+      tableLoading.value = false;
+      const result = flattenFields(res.data.records);
+      tableData.value = result;
+      total.value = res.data.total;
+      coalFieldListOption();
+    });
+  }
+};
+// 鎵佸钩鍖栧鐞嗗嚱鏁�
+const flattenFields = (data) => {
+  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,
+    };
+  });
 };
 // 閲嶇疆鏌ヨ
 const resetQuery = () => {
@@ -231,111 +672,204 @@
   });
   handleQuery();
 };
-// 鍚堝苟鐩稿悓琛岀殑鏂规硶
-const mergeSameRows = ({ row, column, rowIndex, columnIndex }) => {
-  const fieldsToMerge = ['number', 'money', 'money1', 'money2', 'money3', 'money4', 'type', 'unit', 'name'];
-  
-  if (fieldsToMerge.includes(column.property)) {
-    const prevRow = tableData.value[rowIndex - 1]
-    const nextRow = tableData.value[rowIndex + 1]
-    // 鍒ゆ柇褰撳墠琛屽拰涓嬩竴琛屾槸鍚︾浉绛�
-    if (
-        (!prevRow || prevRow[column.property] !== row[column.property]) &&
-        (!nextRow || nextRow[column.property] === row[column.property])
-    ) {
-      let count = 1
-      while (
-          tableData.value[rowIndex + count] &&
-          tableData.value[rowIndex + count][column.property] === row[column.property]
-          ) {
-        count++
-      }
-      return { rowspan: count, colspan: 1 }
-    } else if (prevRow && prevRow[column.property] === row[column.property]) {
-      // 闅愯棌琚悎骞剁殑鍗曞厓鏍�
-      return { rowspan: 0, colspan: 0 }
-    }
-    return { rowspan: 1, colspan: 1 }
-  }
-  
-  // 鍏朵粬鍒椾笉鍚堝苟
-  return { rowspan: 1, colspan: 1 }
-}
 // 琛ㄦ牸閫夋嫨鏁版嵁
 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();
+};
+// 鏌ヨ鐓よ川鏂规涓嬫媺妗�
+const coalPlanListOptions = () => {
+  coalPlanList().then((res) => {
+    qualityPlanOption.value = res.data;
+  });
+};
+// 鏌ヨ鐓よ川鏂规瀛楁
+const coalPlanByIdList = (id) => {
+  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) => {
+      return {
+        prop: item.fields,
+        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) => {
+      console.log(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 = () => {
-  if (selectedRows.value.length < 2) {
-    proxy.$modal.msgWarning('璇疯嚦灏戦�夋嫨涓ゆ潯鏁版嵁')
-    return
+const mergeRows = (type, row) => {
+  getDropdownData();
+  coalPlanListOptions();
+  if (type === "edit" || type === "view") {
+    mergeVisible.value = true;
+  } 
+  operationType.value = type;
+  if (type !== "merge") {
+    mergeForm.value = { ...row };
+  } else {
+    if (selectedRows.value.length < 2) {
+      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);
+    // 鍒濆鍖栧悎璁″拰鍧囧�煎彉閲�
+    let totalInventory = 0;
+    let totalPriceIncludingTax = 0;
+    let totalPriceExcludingTax = 0;
+    let priceIncludingTaxSum = 0;
+    let priceExcludingTaxSum = 0;
+    // 閬嶅巻鎵�鏈夐�変腑鏁版嵁锛岀疮鍔犺绠�
+    data.forEach((row) => {
+      totalInventory += parseFloat(row.inventoryQuantity) || 0;
+      priceIncludingTaxSum += parseFloat(row.priceIncludingTax) || 0;
+      totalPriceIncludingTax += parseFloat(row.totalPriceIncludingTax) || 0;
+      priceExcludingTaxSum += parseFloat(row.priceExcludingTax) || 0;
+      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)
+    );
+    // 璁剧疆琛ㄥ崟鏄剧ず
+    mergeForm.value.inventoryQuantity = totalInventory;
+    mergeForm.value.priceIncludingTax = avgPriceIncludingTax;
+    mergeForm.value.totalPriceIncludingTax = avgTotalPriceIncludingTax;
+    mergeForm.value.priceExcludingTax = avgPriceExcludingTax;
+    mergeForm.value.totalPriceExcludingTax = avgTotalPriceExcludingTax;
+    mergeForm.value.ids = selectedIds;
   }
-  mergeVisible.value = true
-}
+};
 // 鎻愪氦鍚堝苟琛ㄥ崟
 const submitForm = () => {
-
-}
+  proxy.$refs.mergeRef.validate((valid) => {
+    if (valid) {
+      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 !== "") {
+            acc.push({ [key]: value });
+          }
+          return acc;
+        }, []);
+        editOfficial(mergeForm.value).then(() => {
+          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 !== "") {
+            acc.push({ [key]: value });
+          }
+          return acc;
+        }, []);
+        mergeForm.value.type = 2;
+        merge(mergeForm.value).then(() => {
+          cancel();
+          proxy.$modal.msgSuccess("鍚堝苟鎴愬姛");
+          handleQuery();
+        });
+      }
+    }
+  });
+};
 // 鍏抽棴鍚堝苟琛ㄥ崟
 const cancel = () => {
-  mergeVisible.value = false
-}
+  proxy.$refs.mergeRef.resetFields();
+  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],
+      }));
+      addOrEditCoalValue(form.value).then(() => {
+        cancelReview();
+        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        handleQuery();
+      });
+    }
+  });
+};
+// 鍏抽棴瀹℃牳寮规
+const cancelReview = () => {
+  proxy.$refs.formRef.resetFields();
+  reviewVisible.value = false;
+};
 </script>
 
 <style scoped>
-.search-form {
-  background-color: #fff;
-  padding: 20px 20px 0 20px;
-  margin-bottom: 20px;
-  border-radius: 4px;
-  box-shadow: var(--el-box-shadow-light);
-}
-.search-form :deep(.el-form-item) {
-  margin-bottom: 16px;
-  width: 100%;
-}
-
-/* 鍝嶅簲寮忓竷灞� */
-@media screen and (min-width: 768px) {
-  .search-form :deep(.el-form-item) {
-    width: 50%;
-  }
-}
-@media screen and (min-width: 1200px) {
-  .search-form :deep(.el-form-item) {
-    width: 18%;
-  }
-}
-
-.table-toolbar {
-  margin-bottom: 20px;
-  display: flex;
-  flex-wrap: wrap;
-  gap: 10px;
-}
-
 :deep(.el-table) {
-  margin-bottom: 20px;
-  overflow-x: auto;
+  margin: 20px 0;
 }
-
-:deep(.el-table th) {
-  background-color: #f5f7fa;
-}
-
-/* 鍝嶅簲寮忔牱寮� */
-@media screen and (max-width: 768px) {
-  :deep(.el-table) {
-    width: 100%;
-    overflow-x: auto;
-  }
-}
-/* 琛ㄦ牸宸ュ叿鏍� */
-.table-toolbar, .table-toolbar > * {
-  margin: 0 0 0 0 !important;
-}
-.table-toolbar{
-  margin-bottom: 20px !important;
-}
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3