From 3d9d458e631d8d6a070d579b2e3e260aea45ac58 Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期二, 24 六月 2025 13:54:51 +0800
Subject: [PATCH] 优化文档管理 优化采购管理渲染数据匹配接口字段 上传第一版主页

---
 src/views/index.vue                                         | 1605 ++++++++----------------
 src/views/production/components/ProductionDetailsTable.vue  |  163 +-
 src/views/production/components/useDialog.js                |   90 
 src/views/production/index.vue                              |   91 
 src/views/archiveManagement/index.vue                       |  207 +-
 src/views/basicInformation/mould/supplier.vue               |   74 
 src/views/production/components/useTableData.js             |  236 +-
 src/views/basicInformation/mould/customer.vue               |   94 
 src/views/production/components/ProductionDialog.vue        |  213 +-
 src/views/basicInformation/index.vue                        |  205 +-
 src/views/procureMent/index.vue                             |   69 
 src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue  |   56 
 src/views/archiveManagement/mould/archiveDialog.vue         |   77 
 src/views/procureMent/components/ProductionDialog.vue       |  160 +-
 src/views/basicInformation/mould/coal.vue                   |  253 ++-
 package.json                                                |    2 
 src/components/FileUpload/index.vue                         |    3 
 src/views/production/components/useCoalData.js              |  152 +-
 src/views/basicInformation/mould/coalQualityMaintenance.vue |   49 
 19 files changed, 1,657 insertions(+), 2,142 deletions(-)

diff --git a/package.json b/package.json
index d69c048..822f0f8 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
     "axios": "0.28.1",
     "clipboard": "2.0.11",
     "default-passive-events": "^4.0.0",
-    "echarts": "5.5.1",
+    "echarts": "^5.6.0",
     "element-china-area-data": "^6.1.0",
     "element-plus": "2.7.6",
     "file-saver": "2.0.5",
diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue
index 6801d90..735fc22 100644
--- a/src/components/FileUpload/index.vue
+++ b/src/components/FileUpload/index.vue
@@ -231,10 +231,11 @@
   }
   // 妗岄潰绔笅杞�
   const link = document.createElement("a");
-  link.href = url;
+  link.href = file.downloadUrl;
   link.download = file.bucketFilename || file.key;
   link.click();
 };
+
 // 涓婁紶鍓嶆牎楠�
 const handleBeforeUpload = (file) => {
   // 鏍¢獙鏂囦欢鍚嶇壒娈婂瓧绗�
diff --git a/src/views/archiveManagement/index.vue b/src/views/archiveManagement/index.vue
index 7e7c65d..28a4d06 100644
--- a/src/views/archiveManagement/index.vue
+++ b/src/views/archiveManagement/index.vue
@@ -4,84 +4,87 @@
       <div class="left-content">
         <div class="tree-header">
           <h3>鏂囨。绠$悊</h3>
-          <el-button type="primary" size="small" @click="append('')" icon="Plus"
-            >鏂板</el-button
+          <el-button icon="Plus" size="small" type="primary" @click="append('')"
+          >鏂板
+          </el-button
           >
         </div>
 
         <!-- 鎼滅储妗� -->
         <div class="search-box">
           <el-input
-            v-model="filterText"
-            placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�"
-            size="small"
-            clearable
-            @input="handleFilter"
+              v-model="filterText"
+              clearable
+              placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�"
+              size="small"
+              @input="handleFilter"
           >
             <template #prefix>
-              <el-icon><Search /></el-icon>
+              <el-icon>
+                <Search/>
+              </el-icon>
             </template>
           </el-input>
         </div>
 
         <div class="tree-container">
           <el-tree
-            ref="treeRef"
-            :data="treeData"
-            :props="props"
-            :filter-node-method="filterNode"
-            :expand-on-click-node="false"
-            :default-expand-all="false"
-            node-key="id"
-            @node-click="handleNodeClick"
-            class="custom-tree"
+              ref="treeRef"
+              :data="treeData"
+              :default-expand-all="false"
+              :expand-on-click-node="false"
+              :filter-node-method="filterNode"
+              :props="props"
+              class="custom-tree"
+              node-key="id"
+              @node-click="handleNodeClick"
           >
             <template #default="{ node, data }">
               <div class="tree-node-content" @dblclick="headerDbClick(data)">
                 <div class="node-icon">
                   <el-icon
-                    v-if="!node.isLeaf"
-                    :class="{ expanded: node.expanded }"
+                      v-if="!node.isLeaf"
+                      :class="{ expanded: node.expanded }"
                   >
-                    <Folder />
+                    <Folder/>
                   </el-icon>
                   <el-icon v-else>
-                    <Document />
+                    <Document/>
                   </el-icon>
                 </div>
 
                 <div class="node-label">
                   <span v-if="!data.isEdit" class="label-text">{{
-                    node.label
-                  }}</span>
+                      node.label
+                    }}</span>
                   <el-input
-                    v-else
-                    :ref="(el) => setInputRef(el, data)"
-                    placeholder="璇疯緭鍏ヨ妭鐐瑰悕绉�"
-                    v-model="newName"
-                    @blur="($event) => handleInputBlur($event, data, node)"
-                    @keyup.enter="
-                      ($event) => handleInputBlur($event, data, node)
+                      v-else
+                      :ref="(el) => setInputRef(el, data)"
+                      v-model="newName"
+                      autofocus
+                      class="tree-input"
+                      placeholder="璇疯緭鍏ヨ妭鐐瑰悕绉�"
+                      size="small"
+                      @blur="(event) => handleInputBlur(event, data, node)"
+                      @keyup.enter="
+                      (event) => handleInputBlur(event, data, node)
                     "
-                    size="small"
-                    class="tree-input"
-                    autofocus
                   />
                 </div>
-                <div class="node-actions" v-show="!data.isEdit">
+                <div v-show="!data.isEdit" class="node-actions">
                   <el-button
-                    link
-                    size="small"
-                    @click.stop="append(data)"
-                    icon="Plus"
-                    title="鏂板瀛愯妭鐐�"
+                      icon="Plus"
+                      link
+                      size="small"
+                      title="鏂板瀛愯妭鐐�"
+                      @click.stop="append(data)"
                   ></el-button>
                   <el-button
-                    link
-                    size="small"
-                    @click.stop="remove(node, data)"
-                    icon="Delete"
-                    title="鍒犻櫎"
+                      icon="Delete"
+                      link
+                      size="small"
+                      title="鍒犻櫎"
+                      @click.stop="remove(node, data)"
                   ></el-button>
                 </div>
               </div>
@@ -92,71 +95,64 @@
     </div>
     <div class="right">
       <el-row :gutter="24">
-        <el-col :span="2" :offset="20"
-          ><el-button :icon="Delete" type="danger" @click="delHandler">鍒犻櫎</el-button></el-col
+        <el-col :offset="20" :span="2"
+        >
+          <el-button :icon="Delete" type="danger" @click="delHandler">鍒犻櫎</el-button>
+        </el-col
         >
         <el-col :span="2"
-          ><el-button
-            :icon="Plus"
-            type="primary"
-            @click="add"
-            :disabled="!tableData.length"
-            >鏂板</el-button
-          ></el-col
+        >
+          <el-button
+              :disabled="!tableSwitch"
+              :icon="Plus"
+              type="primary"
+              @click="add"
+          >鏂板
+          </el-button
+          >
+        </el-col
         >
       </el-row>
       <ETable
-        :maxHeight="1200"
-        :loading="loading"
-        :table-data="tableData"
-        :columns="columns"
-        @selection-change="handleSelectionChange"
-        @edit="handleEdit"
-        :show-selection="true"
-        :border="true"
+          :border="true"
+          :columns="columns"
+          :loading="loading"
+          :maxHeight="1200"
+          :show-selection="true"
+          :table-data="tableData"
+          @edit="handleEdit"
+          @selection-change="handleSelectionChange"
       >
       </ETable>
       <Pagination
-        :total="total"
-        :page="queryParams.current"
-        :limit="queryParams.pageSize"
-        :show-total="true"
-        @pagination="handlePageChange"
-        :layout="'total, prev, pager, next, jumper'"
+          :layout="'total, prev, pager, next, jumper'"
+          :limit="queryParams.pageSize"
+          :page="queryParams.current"
+          :show-total="true"
+          :total="total"
+          @pagination="handlePageChange"
       ></Pagination>
     </div>
     <archiveDialog
-      v-model:centerDialogVisible="dialogVisible"
-      @centerDialogVisible="centerDialogVisible"
-      :row="row"
-      @submitForm="submitForm"
-      ref="archiveDialogs"
+        ref="archiveDialogs"
+        v-model:centerDialogVisible="dialogVisible"
+        :row="row"
+        @centerDialogVisible="centerDialogVisible"
+        @submitForm="submitForm"
 
     >
     </archiveDialog>
   </el-card>
 </template>
 <script setup>
-import { onMounted, ref, nextTick, reactive } from "vue";
+import {nextTick, onMounted, reactive, ref} from "vue";
 import ETable from "@/components/Table/ETable.vue";
-import { ElButton, ElInput, ElIcon, ElMessage } from "element-plus";
+import {ElButton, ElIcon, ElInput, ElMessage} from "element-plus";
 import archiveDialog from "./mould/archiveDialog.vue";
 import Pagination from "@/components/Pagination/index.vue";
-import {
-  Plus,
-  Search,
-  Folder,
-  Document,
-  Delete,
-} from "@element-plus/icons-vue";
-import {
-  getTree,
-  addOrEditTree,
-  delTree,
-  getArchiveList,
-  addOrEditArchive,
-  delArchive,
-} from "@/api/archiveManagement";
+import {Delete, Document, Folder, Plus, Search,} from "@element-plus/icons-vue";
+import {addOrEditTree, delArchive, delTree, getArchiveList, getTree,} from "@/api/archiveManagement";
+
 const dialogVisible = ref(false); // 鎺у埗褰掓。瀵硅瘽妗嗘樉绀�
 const loading = ref(false);
 const tableData = ref([]);
@@ -167,9 +163,9 @@
 const treeRef = ref(); // 鏍戠粍浠跺紩鐢�
 const total = ref(0); // 鎬昏褰曟暟
 const columns = [
-  { prop: "name", label: "鍚嶇О", minWidth: 180 },
-  { prop: "type", label: "绫诲瀷", minWidth: 120 },
-  { prop: "status", label: "鐘舵��", minWidth: 100 },
+  {prop: "name", label: "鍚嶇О", minWidth: 180},
+  {prop: "type", label: "绫诲瀷", minWidth: 120},
+  {prop: "status", label: "鐘舵��", minWidth: 100},
 ];
 const selectedRows = reactive([]); // 瀛樺偍閫変腑琛屾暟鎹�
 const handleSelectionChange = (selection) => {
@@ -192,7 +188,6 @@
 };
 const submitForm = async (res) => {
   if (res && res.code === 200) {
-    ElMessage.success("鎿嶄綔鎴愬姛");
     // 鍒锋柊鍒楄〃鏁版嵁
     await getArchiveListData();
   } else {
@@ -201,8 +196,10 @@
 }
 const centerDialogVisible = (val) => {
 };
+const tableSwitch = ref(false);
 // 澶勭悊鑺傜偣鐐瑰嚮
-const handleNodeClick = async (data) => {
+const handleNodeClick = (data) => {
+  tableSwitch.value = true;
   // 鍒囨崲鑺傜偣鏃堕噸缃埌绗竴椤�
   queryParams.current = 1;
   queryParams.treeId = data.id;
@@ -217,7 +214,7 @@
   archiveDialogs.value.initForm(); // 閲嶇疆琛ㄥ崟
 };
 // 澶勭悊鍒嗛〉鍙樺寲
-const handlePageChange = ({ page }) => {
+const handlePageChange = ({page}) => {
   queryParams.current = page;
   // pageSize 鍥哄畾涓�20锛屼笉鍐嶄粠鍙傛暟涓幏鍙�
   getArchiveListData();
@@ -238,7 +235,6 @@
       total.value = 0;
       return;
     }
-
     tableData.value = res.data?.records || res.data || [];
     total.value = res.data?.total || 0;
     // 纭繚鍒嗛〉鍙傛暟姝g‘鏇存柊
@@ -262,7 +258,7 @@
   }
   try {
     const ids = selectedRows.map((row) => row.id);
-    const { code, msg } = await delArchive(ids);
+    const {code, msg} = await delArchive(ids);
     if (code !== 200) {
       ElMessage.warning("鍒犻櫎澶辫触: " + msg);
     } else {
@@ -303,6 +299,7 @@
 // 澶勭悊杈撳叆妗嗗け鐒�
 const handleInputBlur = async (event, comeTreeData, node) => {
   if (!comeTreeData.isEdit) return; // 濡傛灉涓嶆槸缂栬緫鐘舵�侊紝鐩存帴杩斿洖
+  console.log("handleInputBlur", event, comeTreeData, node);
   if (event.relatedTarget && event.relatedTarget.tagName === "BUTTON") {
     return;
   }
@@ -344,7 +341,7 @@
   if (!data || !data.id) {
     return;
   }
-  let { code, msg } = await delTree([data.id]);
+  let {code, msg} = await delTree([data.id]);
   if (code !== 200) {
     ElMessage.warning("鍒犻櫎澶辫触, " + msg);
   } else {
@@ -378,9 +375,9 @@
     const isExpanded = node?.expanded; // 濡傛灉鏈夊瓙绾т笖鏈睍寮�锛屽厛灞曞紑鑺傜偣
     if (hasChildren && !isExpanded) {
       if (
-        treeRef.value &&
-        treeRef.value.store &&
-        treeRef.value.store.nodesMap[nodeKey]
+          treeRef.value &&
+          treeRef.value.store &&
+          treeRef.value.store.nodesMap[nodeKey]
       ) {
         treeRef.value.store.nodesMap[nodeKey].expanded = true;
       }
@@ -439,7 +436,7 @@
   }
 };
 </script>
-<style scoped lang="scss">
+<style lang="scss" scoped>
 .custom-tree-node {
   flex: 1;
   display: flex;
@@ -630,11 +627,13 @@
     }
   }
 }
+
 .el-card {
   width: calc(100% - 40px);
   height: calc(100vh - 130px);
   margin: 20px;
   box-sizing: border-box;
+
   .left {
     width: 30%;
     height: calc(100vh - 160px);
@@ -651,13 +650,15 @@
       flex-direction: column;
     }
   }
+
   .right {
     width: 70%;
     height: calc(100vh - 160px);
-    padding: 0px 10px;
+    padding: 0 10px;
     float: left;
   }
 }
+
 .archive-management-card {
   margin: 0;
 }
diff --git a/src/views/archiveManagement/mould/archiveDialog.vue b/src/views/archiveManagement/mould/archiveDialog.vue
index 793d222..55c359c 100644
--- a/src/views/archiveManagement/mould/archiveDialog.vue
+++ b/src/views/archiveManagement/mould/archiveDialog.vue
@@ -1,28 +1,28 @@
 <template>
   <el-dialog v-model="centerDialogVisible" title="鏂囨。绠$悊" width="500" center>
     <el-form
-      ref="ruleFormRef"
-      style="max-width: 600px"
-      :model="ruleForm"
-      :rules="rules"
-      label-width="auto"
+        ref="ruleFormRef"
+        style="max-width: 600px"
+        :model="ruleForm"
+        :rules="rules"
+        label-width="auto"
     >
       <el-form-item label="鍚嶇О" prop="name">
-        <el-input v-model="ruleForm.name" placeholder="璇疯緭鍏ユ枃妗e悕绉�" />
+        <el-input v-model="ruleForm.name" placeholder="璇疯緭鍏ユ枃妗e悕绉�"/>
       </el-form-item>
       <el-form-item label="璇疯緭鍏ユ枃妗g被鍨�" prop="type">
         <el-select v-model="ruleForm.type" placeholder="璇疯緭鍏ユ枃妗g被鍨�">
-          <el-option label="鍚堝悓" value="鍚堝悓" />
-          <el-option label="鎶ュ憡" value="鎶ュ憡" />
+          <el-option label="鍚堝悓" value="鍚堝悓"/>
+          <el-option label="鎶ュ憡" value="鎶ュ憡"/>
         </el-select>
       </el-form-item>
       <el-form-item label="璇疯緭鍏ユ枃妗g姸鎬�" prop="status">
         <el-select v-model="ruleForm.status" placeholder="璇疯緭鍏ユ枃妗g姸鎬�">
           <el-option
-            v-for="option in options"
-            :key="option.value"
-            :label="option.label"
-            :value="option.value"
+              v-for="option in options"
+              :key="option.value"
+              :label="option.label"
+              :value="option.value"
           />
         </el-select>
       </el-form-item>
@@ -31,26 +31,26 @@
       <el-row>
         <el-col :span="24" style="text-align: right">
           <el-button @click="centerDialogVisible = false">鍙� 娑�</el-button>
-          <el-button type="primary" @click="submit"> 纭� 瀹� </el-button>
+          <el-button type="primary" @click="submit"> 纭� 瀹�</el-button>
         </el-col>
       </el-row>
     </template>
     <fileUpload
-      ref="fileUploadRef"
-      :fileSize="1024"
-      :fileType="['pdf', 'docx', 'txt', 'xlsx', 'pptx....']"
-      :limit="10"
-      :drag="false"
-      v-model:modelValue="modelValue"
+        ref="fileUploadRef"
+        :fileSize="1024"
+        :fileType="['pdf', 'docx', 'txt', 'xlsx', 'pptx....']"
+        :limit="10"
+        :drag="false"
+        v-model:modelValue="modelValue"
     />
   </el-dialog>
 </template>
 
 <script setup>
-import { ref, watch } from "vue";
-import { addOrEditArchive } from "@/api/archiveManagement";
+import {ref, watch, nextTick} from "vue";
+import {addOrEditArchive} from "@/api/archiveManagement";
 import fileUpload from "@/components/FileUpload/index.vue";
-import { ElMessage } from "element-plus";
+import {ElMessage} from "element-plus";
 
 const centerDialogVisible = defineModel("centerDialogVisible", {
   type: Boolean,
@@ -85,22 +85,24 @@
 const copyForm = ref();
 // 鐩戝惉 row 鐨勫彉鍖栵紝鏇存柊 ruleForm
 watch(
-  () => props.row,
-  (newRow) => {
-    copyForm.value = initFormData(newRow);
-    ruleForm.value = JSON.parse(JSON.stringify(copyForm.value));
-  },
-  { deep: true }
+    () => props.row,
+    (newRow) => {
+      copyForm.value = initFormData(newRow);
+      ruleForm.value = JSON.parse(JSON.stringify(copyForm.value));
+    },
+    {deep: true}
 );
 const rules = {
-  name: [{ required: true, message: "璇疯緭鍏ユ枃妗e悕绉�", trigger: "blur" }],
-  type: [{ required: true, message: "璇烽�夋嫨鏂囨。绫诲瀷", trigger: "blur" }],
-  status: [{ required: true, message: "璇烽�夋嫨鏂囨。鐘舵��", trigger: "blur" }],
+  name: [{required: true, message: "璇疯緭鍏ユ枃妗e悕绉�", trigger: "blur"}],
+  type: [{required: true, message: "璇烽�夋嫨鏂囨。绫诲瀷", trigger: "blur"}],
+  status: [{required: true, message: "璇烽�夋嫨鏂囨。鐘舵��", trigger: "blur"}],
 };
 const fileUploadRef = ref(null);
 const initForm = () => {
   ruleForm.value = {};
-  fileUploadRef.value.init();
+  nextTick(() => {
+    fileUploadRef.value.init();
+  });
 };
 const editForm = (val) => {
   ruleForm.value = copyForm.value;
@@ -113,9 +115,9 @@
   editForm,
 });
 const options = [
-  { value: "鏈夋晥", label: "鏈夋晥" },
-  { value: "鏃犳晥", label: "鏃犳晥" },
-  { value: "浣滃簾", label: "浣滃簾" },
+  {value: "鏈夋晥", label: "鏈夋晥"},
+  {value: "鏃犳晥", label: "鏃犳晥"},
+  {value: "浣滃簾", label: "浣滃簾"},
 ];
 const emit = defineEmits(["submitForm", "update:modelValue"]);
 const modelValue = ref([]);
@@ -132,10 +134,6 @@
     // 璋冪敤 API
     try {
       const res = await addOrEditArchive(ruleForm.value);
-      ElMessage({
-        type: "success",
-        message: res.msg || "鎿嶄綔鎴愬姛",
-      });
       emit("submitForm", res);
     } catch (error) {
       ElMessage({
@@ -147,6 +145,7 @@
     // 鍙戦�� emit 浜嬩欢
 
     // 鍏抽棴瀵硅瘽妗�
+    ElMessage.success("鎿嶄綔鎴愬姛");
     centerDialogVisible.value = false;
   } catch (error) {
     ElMessage({
diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue
index fda5d65..21558f7 100644
--- a/src/views/basicInformation/index.vue
+++ b/src/views/basicInformation/index.vue
@@ -1,7 +1,8 @@
 <template>
-  <div> <el-form :inline="true" :model="queryParams" class="search-form">
-      <el-form-item label="鎼滅储" v-if="shouldShowSearch">
-        <el-input v-model="queryParams.searchAll" :placeholder="searchPlaceholder" clearable />
+  <div>
+    <el-form :inline="true" :model="queryParams" class="search-form">
+      <el-form-item v-if="shouldShowSearch" label="鎼滅储">
+        <el-input v-model="queryParams.searchAll" :placeholder="searchPlaceholder" clearable/>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="search">鏌ヨ</el-button>
@@ -11,58 +12,62 @@
     <el-card>
       <!-- 鏍囩椤� -->
       <el-tabs 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" />
+        <el-tab-pane 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" @click="handleAdd">鏂板缓</el-button>
-        <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
-        <el-button type="info" :icon="Download" @click="handleExport" v-show="canExport">瀵煎嚭</el-button>
+        <el-button :icon="Plus" type="primary" @click="handleAdd">鏂板缓</el-button>
+        <el-button :icon="Delete" type="danger" @click="handleDelete">鍒犻櫎</el-button>
+        <el-button @click="jump">admins</el-button>
+        <el-button v-show="canExport" :icon="Download" type="info" @click="handleExport">瀵煎嚭</el-button>
       </el-row> <!-- 琛ㄦ牸缁勪欢 -->
       <div>
-        <data-table :loading="loading" :table-data="tableData" :columns="columns"
-          @selection-change="handleSelectionChange" @edit="handleEdit" :show-selection="true" :border="true">          <!-- 瀛楁鍚嶇О鍒楃殑鑷畾涔夋彃妲� - 鏄剧ず涓烘爣绛� -->
+        <data-table :border="true" :columns="columns" :loading="loading"
+                    :show-selection="true" :table-data="tableData" @edit="handleEdit" @selection-change="handleSelectionChange">
+          <!-- 瀛楁鍚嶇О鍒楃殑鑷畾涔夋彃妲� - 鏄剧ず涓烘爣绛� -->
           <template v-if="tabName === 'coalQualityMaintenance'" #fieldIds="{ row }">
             <template v-if="typeof row.fieldIds === 'string' && row.fieldIds.includes(',')">
-              <el-tag v-for="(field, index) in row.fieldIds.split(',')" :key="index" type="primary" size="small"
-                style="margin-right: 4px; margin-bottom: 2px;">
+              <el-tag v-for="(field, index) in row.fieldIds.split(',')" :key="index" size="small" style="margin-right: 4px; margin-bottom: 2px;"
+                      type="primary">
                 {{ getFieldDisplayName(field.trim()) }}
               </el-tag>
             </template>
             <template v-else>
-              <el-tag type="primary" size="small">
+              <el-tag size="small" type="primary">
                 {{ getFieldDisplayName(row.fieldIds) || '--' }}
               </el-tag>
             </template>
           </template>
         </data-table>
       </div>
-      <pagination v-if="total > 0" :page="pageNum" :limit="pageSizes" :total="total" @pagination="handPagination"
-        :layout="'total, prev, pager, next, jumper'" />
+      <pagination v-if="total > 0" :layout="'total, prev, pager, next, jumper'" :limit="pageSizes" :page="pageNum" :total="total"
+                  @pagination="handPagination"/>
       <Supplier v-if="tabName === 'supplier'" v-model:copyForm="copyForm"
-        v-model:supplierDialogFormVisible="dialogFormVisible" :form="form" :title="title" @submit="handleSubmit"
-        @beforeClose="handleBeforeClose" @update:dialogFormVisible="handleDialogFormVisible" :addOrEdit="addOrEdit" />
+                v-model:supplierDialogFormVisible="dialogFormVisible" :addOrEdit="addOrEdit" :form="form" :title="title"
+                @beforeClose="handleBeforeClose" @submit="handleSubmit"
+                @update:dialogFormVisible="handleDialogFormVisible"/>
       <Customer v-if="tabName === 'customer'" v-model:copyForm="copyForm"
-        v-model:customerDialogFormVisible="dialogFormVisible" :form="form" :title="title" @submit="handleSubmit"
-        :addOrEdit="addOrEdit" @beforeClose="handleBeforeClose" />
-      <Coal v-if="tabName === 'coal'" v-model:copyForm="copyForm" v-model:coalDialogFormVisible="dialogFormVisible"
-        :form="form" :title="title" :addOrEdit="addOrEdit" @submit="handleSubmit" />
-      <coalQualityMaintenance v-if="tabName === 'coalQualityMaintenance'" v-model:copyForm="copyForm"
-        v-model:coalQualityMaintenanceDialogFormVisible="dialogFormVisible" :form="form" :title="title"
-        :addOrEdit="addOrEdit" @submit="handleSubmit" />
-      <coalMeiZhiZiDuanWeiHu v-if="tabName === 'coalMeiZhiZiDuanWeiHu'" v-model:copyForm="copyForm"
-        v-model:coalMaintenanceFieldDialogVisible="dialogFormVisible" :form="form" :title="title" :addOrEdit="addOrEdit"
-        @submit="handleSubmit" />
+                v-model:customerDialogFormVisible="dialogFormVisible" :addOrEdit="addOrEdit" :form="form" :title="title"
+                @beforeClose="handleBeforeClose" @submit="handleSubmit"/>
+      <Coal v-if="tabName === 'coal'" v-model:coalDialogFormVisible="dialogFormVisible" v-model:copyForm="copyForm"
+            :addOrEdit="addOrEdit" :form="form" :title="title" @submit="handleSubmit"/>
+      <coalQualityMaintenance v-if="tabName === 'coalQualityMaintenance'" v-model:coalQualityMaintenanceDialogFormVisible="dialogFormVisible"
+                              v-model:copyForm="copyForm" :addOrEdit="addOrEdit"
+                              :form="form"
+                              :title="title" @submit="handleSubmit"/>
+      <coalMeiZhiZiDuanWeiHu v-if="tabName === 'coalMeiZhiZiDuanWeiHu'" v-model:coalMaintenanceFieldDialogVisible="dialogFormVisible"
+                             v-model:copyForm="copyForm" :addOrEdit="addOrEdit" :form="form"
+                             :title="title"
+                             @submit="handleSubmit"/>
     </el-card>
   </div>
 </template>
 
 <script setup>
-// ===== 鏍稿績渚濊禆瀵煎叆 =====
-import { ref, reactive, onMounted, computed, getCurrentInstance } from "vue";
-import { ElMessage, ElMessageBox } from "element-plus";
-import { Plus, Edit, Delete, Download } from "@element-plus/icons-vue";
+import {computed, getCurrentInstance, onMounted, reactive, ref, nextTick} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {Delete, Download, Plus} from "@element-plus/icons-vue";
 
 // ===== 缁勪欢瀵煎叆 =====
 import DataTable from "@/components/Table/ETable.vue";
@@ -74,18 +79,20 @@
 import coalMeiZhiZiDuanWeiHu from "./mould/coalMeiZhiZiDuanWeiHu.vue";
 
 // ===== API 鏈嶅姟瀵煎叆 =====
-import { getSupply, delSupply } from "@/api/basicInformation/supplier.js";
-import { getCoalInfo, delCoalInfo } from "@/api/basicInformation/coal.js";
-import { testUserList } from "@/api/tool/publicInterface.js";
-import { getAreaOptions } from "@/api/system/area.js";
-import { getCustomerList, delCustomer } from "@/api/basicInformation/customer.js";
-import { coalField, deleteCoalField } from "@/api/basicInformation/coalFieldMaintenance.js";
-import { getCoalFieldList, getCoalPlanList } from "@/api/basicInformation/coalQualityMaintenance";
+import {delSupply, getSupply} from "@/api/basicInformation/supplier.js";
+import {delCoalInfo, getCoalInfo} from "@/api/basicInformation/coal.js";
+import {testUserList} from "@/api/tool/publicInterface.js";
+import {getAreaOptions} from "@/api/system/area.js";
+import {delCustomer, getCustomerList} from "@/api/basicInformation/customer.js";
+import {coalField, deleteCoalField} from "@/api/basicInformation/coalFieldMaintenance.js";
+import {getCoalFieldList, getCoalPlanList} from "@/api/basicInformation/coalQualityMaintenance";
 
-const { proxy } = getCurrentInstance();
+const {proxy} = getCurrentInstance();
+import router from "@/router";
 
 // ===== 鍝嶅簲寮忕姸鎬佺鐞� =====
-
+const jump = () => {
+};
 // 寮圭獥鎺у埗鐘舵��
 const dialogFormVisible = ref(false);
 const form = ref({});
@@ -124,11 +131,11 @@
 
 // 鏍囩椤甸厤缃�
 const tabs = reactive([
-  { name: "supplier", label: "渚涘簲鍟嗕俊鎭�" },
-  { name: "customer", label: "瀹㈡埛淇℃伅" },
-  { name: "coal", label: "鐓ょ淇℃伅" },
-  { name: "coalQualityMaintenance", label: "鐓よ川鏂规" },
-  { name: "coalMeiZhiZiDuanWeiHu", label: "鐓よ川瀛楁" }
+  {name: "supplier", label: "渚涘簲鍟嗕俊鎭�"},
+  {name: "customer", label: "瀹㈡埛淇℃伅"},
+  {name: "coal", label: "鐓ょ淇℃伅"},
+  {name: "coalQualityMaintenance", label: "鐓よ川鏂规"},
+  {name: "coalMeiZhiZiDuanWeiHu", label: "鐓よ川瀛楁"}
 ]);
 
 // ===== 宸ュ叿鍑芥暟 =====
@@ -178,18 +185,18 @@
  * @description 灏嗗湴鍧�ID鏁扮粍杞崲涓哄彲璇荤殑鍦板潃瀛楃涓�
  */
 const formatAddressArray = (addressIds) => {
-  if (!addressMap.value || Object.keys(addressMap.value).length === 0 || 
-      !addressIds || !Array.isArray(addressIds) || addressIds.length === 0 || 
+  if (!addressMap.value || Object.keys(addressMap.value).length === 0 ||
+      !addressIds || !Array.isArray(addressIds) || addressIds.length === 0 ||
       addressIds.every(id => !id)) {
     return '--';
   }
-  
+
   const addressNames = addressIds.map(id => addressMap.value[id]?.name || '--');
-  
+
   if (addressNames.every(name => name === '--')) {
     return '--';
   }
-  
+
   return addressNames.filter(name => name !== '--').join(' / ');
 };
 
@@ -217,7 +224,7 @@
  */
 const coalFieldData = async () => {
   try {
-    const { data, code } = await getCoalFieldList();
+    const {data, code} = await getCoalFieldList();
     if (code === 200) {
       coalFieldList.value = data;
     }
@@ -234,10 +241,10 @@
  */
 const getFieldDisplayName = (fieldId) => {
   if (!fieldId) return '--';
-  
+
   const numId = parseInt(fieldId);
   const matchedField = coalFieldList.value.find(item => item.id === numId);
-  
+
   return matchedField ? matchedField.fieldName : numId;
 };
 
@@ -256,7 +263,7 @@
 const searchPlaceholder = computed(() => {
   const placeholderMap = {
     supplier: "渚涘簲鍟�/璇嗗埆鐮�/璇︾粏鍦板潃",
-    customer: "渚涘簲鍟�/璇嗗埆鐮�/璇︾粏鍦板潃", 
+    customer: "渚涘簲鍟�/璇嗗埆鐮�/璇︾粏鍦板潃",
     coal: "璇疯緭鍏ユ悳绱俊鎭�",
     coalQualityMaintenance: "璇疯緭鍏ユ悳绱俊鎭�",
     coalMeiZhiZiDuanWeiHu: "璇疯緭鍏ユ悳绱俊鎭�"
@@ -268,7 +275,7 @@
  * 鏄惁鏄剧ず鎼滅储妗�
  */
 const shouldShowSearch = computed(() => {
-  return ['supplier', 'customer', 'coal', 'coalQualityMaintenance','coalMeiZhiZiDuanWeiHu'].includes(tabName.value);
+  return ['supplier', 'customer', 'coal', 'coalQualityMaintenance', 'coalMeiZhiZiDuanWeiHu'].includes(tabName.value);
 });
 
 /**
@@ -287,8 +294,8 @@
  * 渚涘簲鍟嗚〃鏍煎垪閰嶇疆
  */
 const supplierColumns = ref([
-  { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 100 },
-  { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 170 },
+  {prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 100},
+  {prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 170},
   {
     prop: "bids",
     label: "缁忚惀鍦板潃",
@@ -299,10 +306,10 @@
       return formatAddressArray(addressIds);
     }
   },
-  { prop: "businessAddress", label: "缁忚惀璇︾粏鍦板潃", minWidth: 150 },
-  { prop: "bankAccount", label: "寮�鎴疯", minWidth: 120 },
-  { prop: "bankName", label: "閾惰璐﹀彿", minWidth: 150 },
-  { prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100 },
+  {prop: "businessAddress", label: "缁忚惀璇︾粏鍦板潃", minWidth: 150},
+  {prop: "bankAccount", label: "寮�鎴疯", minWidth: 120},
+  {prop: "bankName", label: "閾惰璐﹀彿", minWidth: 150},
+  {prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100},
   {
     prop: "cids",
     label: "鑱旂郴浜哄湴鍧�",
@@ -313,16 +320,16 @@
       return formatAddressArray(addressIds);
     }
   },
-  { prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 120 },
-  { prop: "updateTime", label: "缁存姢鏃ユ湡", minWidth: 120 },
+  {prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 120},
+  {prop: "updateTime", label: "缁存姢鏃ユ湡", minWidth: 120},
 ]);
 
 /**
  * 瀹㈡埛琛ㄦ牸鍒楅厤缃�
  */
 const customerColumns = ref([
-  { prop: "customerName", label: "瀹㈡埛鍚嶇О", minWidth: 100 },
-  { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 },
+  {prop: "customerName", label: "瀹㈡埛鍚嶇О", minWidth: 100},
+  {prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120},
   {
     prop: "bids",
     label: "缁忚惀鍦板潃",
@@ -333,11 +340,11 @@
       return formatAddressArray(addressIds);
     }
   },
-  { prop: "businessAddress", label: "璇︾粏鍦板潃", minWidth: 150 },
-  { prop: "bankName", label: "寮�鎴疯", minWidth: 120 },
-  { prop: "bankAccount", label: "閾惰璐﹀彿", minWidth: 150 },
-  { prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100 },
-  { prop: "contactPhone", label: "鑱旂郴浜虹數璇�", minWidth: 100 },
+  {prop: "businessAddress", label: "璇︾粏鍦板潃", minWidth: 150},
+  {prop: "bankName", label: "寮�鎴疯", minWidth: 120},
+  {prop: "bankAccount", label: "閾惰璐﹀彿", minWidth: 150},
+  {prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100},
+  {prop: "contactPhone", label: "鑱旂郴浜虹數璇�", minWidth: 100},
   {
     prop: "cids",
     label: "鑱旂郴浜哄湴鍧�",
@@ -348,15 +355,15 @@
       return formatAddressArray(addressIds);
     }
   },
-  { prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 150 },
-  { prop: "updateTime", label: "缁存姢鏃ユ湡", minWidth: 100 },
+  {prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 150},
+  {prop: "updateTime", label: "缁存姢鏃ユ湡", minWidth: 100},
 ]);
 
 /**
  * 鐓ょ琛ㄦ牸鍒楅厤缃�
  */
 const coalColumns = ref([
-  { prop: "coal", label: "鐓ょ鍚嶇О", minWidth: 200 },
+  {prop: "coal", label: "鐓ょ鍚嶇О", minWidth: 200},
   {
     prop: "maintainerId",
     label: "缁存姢浜�",
@@ -371,14 +378,14 @@
       return userMap.value[cellValue] || '--';
     }
   },
-  { prop: "maintenanceDate", label: "缁存姢鏃ユ湡", minWidth: 150 },
+  {prop: "maintenanceDate", label: "缁存姢鏃ユ湡", minWidth: 150},
 ]);
 
 /**
  * 鐓よ川鏂规琛ㄦ牸鍒楅厤缃�
  */
 const coalQualityMaintenanceColumns = ref([
-  { prop: "plan", label: "鏂规鍚嶇О", minWidth: 100 },
+  {prop: "plan", label: "鏂规鍚嶇О", minWidth: 100},
   {
     prop: "fieldIds",
     label: "瀛楁鍚嶇О",
@@ -392,15 +399,15 @@
       return cellValue || '--';
     }
   },
-  { prop: "schemeDesc", label: "瀛楁鎻忚堪", minWidth: 100 },
+  {prop: "schemeDesc", label: "瀛楁鎻忚堪", minWidth: 100},
 ]);
 
 /**
  * 鐓よ川瀛楁琛ㄦ牸鍒楅厤缃�
  */
 const coalMeiZhiZiDuanWeiHuColumns = ref([
-  { prop: "fieldName", label: "瀛楁鍚嶇О", minWidth: 200 },
-  { prop: "fieldDescription", label: "瀛楁鎻忚堪", minWidth: 200 },
+  {prop: "fieldName", label: "瀛楁鍚嶇О", minWidth: 200},
+  {prop: "fieldDescription", label: "瀛楁鎻忚堪", minWidth: 200},
 ]);
 // ===== 浜嬩欢澶勭悊鍑芥暟 =====
 
@@ -489,10 +496,10 @@
  */
 const handleAddEdit = (currentTabName) => {
   const actionText = addOrEdit.value === "add" ? "鏂板" : "缂栬緫";
-  
+
   const tabTitleMap = {
     supplier: "渚涘簲鍟嗕俊鎭�",
-    customer: "瀹㈡埛淇℃伅", 
+    customer: "瀹㈡埛淇℃伅",
     coal: "鐓ょ淇℃伅",
     coalQualityMaintenance: "鐓よ川鏂规缁存姢",
     coalMeiZhiZiDuanWeiHu: "鐓よ川瀛楁缁存姢"
@@ -561,27 +568,27 @@
  */
 const handleEdit = (row) => {
   form.value = JSON.parse(JSON.stringify(row));
-  
+
   // 鏋勫缓渚涘簲鍟嗕笟鍔″湴鍧�鏁扮粍
   if (form.value.bprovinceId && form.value.bdistrictId && form.value.bcityId) {
     form.value.bids = [row.bprovinceId, row.bcityId, row.bdistrictId];
   }
-  
+
   // 鏋勫缓渚涘簲鍟嗚仈绯诲湴鍧�鏁扮粍
   if (form.value.cprovinceId && form.value.cdistrictId && form.value.ccityId) {
     form.value.cids = [row.cprovinceId, row.ccityId, row.cdistrictId];
   }
-  
+
   // 鏋勫缓瀹㈡埛涓氬姟鍦板潃鏁扮粍
   if (form.value.businessCityId && form.value.businessDistrictId && form.value.businessProvinceId) {
     form.value.bids = [row.businessProvinceId, row.businessCityId, row.businessDistrictId];
   }
-  
+
   // 鏋勫缓瀹㈡埛鑱旂郴鍦板潃鏁扮粍
   if (form.value.cityId && form.value.districtId && form.value.provinceId) {
     form.value.cids = [row.provinceId, row.cityId, row.districtId];
   }
-  
+
   addOrEdit.value = "edit";
   handleAddEdit(tabName.value);
 };
@@ -597,7 +604,7 @@
   }
 
   const deleteIds = selectedRows.value.map(item => item.id);
-  
+
   try {
     await ElMessageBox.confirm("纭畾鍒犻櫎閫変腑鐨勬暟鎹悧锛�", "鎻愮ず", {
       confirmButtonText: "纭畾",
@@ -608,7 +615,9 @@
     const deleteApiMap = {
       supplier: delSupply,
       coal: delCoalInfo,
-      coalQualityMaintenance: () => { throw new Error('delCoalQuality API not imported'); },
+      coalQualityMaintenance: () => {
+        throw new Error('delCoalQuality API not imported');
+      },
       customer: delCustomer,
       coalMeiZhiZiDuanWeiHu: deleteCoalField
     };
@@ -620,12 +629,12 @@
     }
     console.log(deleteIds)
     const res = await deleteApi(deleteIds);
-    
+
     if (res.code !== 200 && res.msg !== "鎿嶄綔鎴愬姛") {
       ElMessage.error("鍒犻櫎澶辫触锛�" + res.msg);
       return;
     }
-    
+
     ElMessage.success("鍒犻櫎鎴愬姛");
     await getList();
   } catch (error) {
@@ -653,10 +662,10 @@
  */
 const handleExport = () => {
   const exportConfig = {
-    supplier: { api: "/supply/export", name: "渚涘簲鍟嗕俊鎭�" },
-    customer: { api: "/customer/export", name: "瀹㈡埛淇℃伅" },
-    coal: { api: "/supply/export", name: "鐓ょ淇℃伅" },
-    coalQualityMaintenance: { api: "/supply/export", name: "鐓よ川缁存姢淇℃伅" }
+    supplier: {api: "/supply/export", name: "渚涘簲鍟嗕俊鎭�"},
+    customer: {api: "/customer/export", name: "瀹㈡埛淇℃伅"},
+    coal: {api: "/supply/export", name: "鐓ょ淇℃伅"},
+    coalQualityMaintenance: {api: "/supply/export", name: "鐓よ川缁存姢淇℃伅"}
   };
 
   const config = exportConfig[tabName.value];
@@ -671,7 +680,7 @@
  * @param {string} name - 瀵煎嚭鏂囦欢鍚嶅墠缂�
  */
 const exportData = (api, name) => {
-  proxy.download(api, { ...queryParams }, `${name}${new Date().getTime()}.xlsx`);
+  proxy.download(api, {...queryParams}, `${name}${new Date().getTime()}.xlsx`);
   ElMessage.success("瀵煎嚭鏁版嵁锛�" + name);
 };
 // ===== 鏁版嵁鑾峰彇鍑芥暟 =====
@@ -707,13 +716,13 @@
 const getList = async () => {
   try {
     loading.value = true;
-    const { data, code } = await selectInterface();
-    
+    const {data, code} = await selectInterface();
+
     if (code !== 200) {
       ElMessage.error("鑾峰彇鏁版嵁澶辫触锛�" + (data?.msg || '鏈煡閿欒'));
       return;
     }
-    
+
     tableData.value = data.records || [];
     total.value = data.total || 0;
   } catch (error) {
@@ -733,7 +742,7 @@
   try {
     // 骞惰鎵ц鍒濆鍖栨搷浣�
     await Promise.all([
-      handleTabClick({ props: { name: "supplier" } }),
+      handleTabClick({props: {name: "supplier"}}),
       fetchAreaOptions(),
       getUserList()
     ]);
@@ -778,7 +787,7 @@
 
 /* 琛ㄦ牸宸ュ叿鏍� */
 .table-toolbar,
-.table-toolbar>* {
+.table-toolbar > * {
   margin: 0 0 0 0 !important;
 }
 
diff --git a/src/views/basicInformation/mould/coal.vue b/src/views/basicInformation/mould/coal.vue
index a0454a3..36e599e 100644
--- a/src/views/basicInformation/mould/coal.vue
+++ b/src/views/basicInformation/mould/coal.vue
@@ -1,73 +1,77 @@
 <template>
-    <div>
-        <el-dialog
-            v-model="dialogVisible"
-            :title="title"
-            width="500"
-            :close-on-click-modal="false"
-            :before-close="handleClose"
-        >            <el-form
-                ref="formRef"
-                style="max-width: 600px; margin: 0 auto"
-                :model="formData"
-                :rules="rules"
-                label-width="120px"
-            >
-                <el-form-item label="鐓ょ鍚嶇О" prop="coal">
-                    <el-input
-                        v-model="formData.coal"
-                        placeholder="璇疯緭鍏ョ叅绉嶅悕绉�"
-                    />
-                </el-form-item>                <el-form-item label="缁存姢浜哄鍚�" prop="maintainerId">
-                    <el-input
-                        :value="userStore.name || ''"
-                        placeholder="缁存姢浜哄鍚�"
-                        disabled
-                    />
-                </el-form-item>                <el-form-item label="缁存姢鏃ユ湡" prop="maintenanceDate">
-                    <el-input
-                        :value="getCurrentDate()"
-                        placeholder="缁存姢鏃ユ湡"
-                        disabled
-                    />
-                </el-form-item>
-                    
-                <el-form-item class="dialog-footer">
-                    <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
-                    <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
-                    <el-button type="primary" @click="submitForm">
-                        纭畾
-                    </el-button>
-                </el-form-item>
-            </el-form>
-        </el-dialog>
-    </div>
+  <div>
+    <el-dialog
+        v-model="dialogVisible"
+        :title="title"
+        width="500"
+        :close-on-click-modal="false"
+        :before-close="handleClose"
+    >
+      <el-form
+          ref="formRef"
+          style="max-width: 600px; margin: 0 auto"
+          :model="formData"
+          :rules="rules"
+          label-width="120px"
+      >
+        <el-form-item label="鐓ょ鍚嶇О" prop="coal">
+          <el-input
+              v-model="formData.coal"
+              placeholder="璇疯緭鍏ョ叅绉嶅悕绉�"
+          />
+        </el-form-item>
+        <el-form-item label="缁存姢浜哄鍚�" prop="maintainerId">
+          <el-input
+              :value="userStore.name || ''"
+              placeholder="缁存姢浜哄鍚�"
+              disabled
+          />
+        </el-form-item>
+        <el-form-item label="缁存姢鏃ユ湡" prop="maintenanceDate">
+          <el-input
+              :value="getCurrentDate()"
+              placeholder="缁存姢鏃ユ湡"
+              disabled
+          />
+        </el-form-item>
+
+        <el-form-item class="dialog-footer">
+          <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
+          <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
+          <el-button type="primary" @click="submitForm">
+            纭畾
+          </el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
 </template>
 
 <script setup>
-import { ref, watch, defineProps, reactive, onMounted } from 'vue'
-import { addOrEditCoalInfo } from '@/api/basicInformation/coal'
+import {ref, watch, defineProps, reactive, onMounted} from 'vue'
+import {addOrEditCoalInfo} from '@/api/basicInformation/coal'
 import useUserStore from '@/store/modules/user'
 
 const userStore = useUserStore()
 
 const props = defineProps({
-    beforeClose: {
-        type: Function,
-        default: () => {}
-    },
-    form: {
-        type: Object,
-        default: () => ({})
-    },
-    addOrEdit: {
-        type: String,
-        default: 'add'
-    },
-    title: {
-        type: String,
-        default: ''
-    },
+  beforeClose: {
+    type: Function,
+    default: () => {
+    }
+  },
+  form: {
+    type: Object,
+    default: () => ({})
+  },
+  addOrEdit: {
+    type: String,
+    default: 'add'
+  },
+  title: {
+    type: String,
+    default: ''
+  },
 })
 const copyForm = defineModel("copyForm", {
   required: true,
@@ -75,99 +79,100 @@
 });
 // 鍦ㄧ粍浠舵寕杞芥椂鑾峰彇鐢ㄦ埛淇℃伅
 onMounted(async () => {
-    // 濡傛灉store涓病鏈夌敤鎴蜂俊鎭紝鍒欒幏鍙栫敤鎴蜂俊鎭�
-    if (!userStore.name) {
-        try {
-            await userStore.getInfo()
-            // 鑷姩濉厖缁存姢浜篒D
-            if (props.addOrEdit === 'add') {
-                formData.value.maintainerId = userStore.id
-            }
-        } catch (error) {
-            console.error('鑾峰彇鐢ㄦ埛淇℃伅澶辫触:', error)
-        }
-    } else {
-        // 鑷姩濉厖缁存姢浜篒D
-        if (props.addOrEdit === 'add') {
-            formData.value.maintainerId = userStore.id
-        }
+  // 濡傛灉store涓病鏈夌敤鎴蜂俊鎭紝鍒欒幏鍙栫敤鎴蜂俊鎭�
+  if (!userStore.name) {
+    try {
+      await userStore.getInfo()
+      // 鑷姩濉厖缁存姢浜篒D
+      if (props.addOrEdit === 'add') {
+        formData.value.maintainerId = userStore.id
+      }
+    } catch (error) {
+      console.error('鑾峰彇鐢ㄦ埛淇℃伅澶辫触:', error)
     }
+  } else {
+    // 鑷姩濉厖缁存姢浜篒D
+    if (props.addOrEdit === 'add') {
+      formData.value.maintainerId = userStore.id
+    }
+  }
 })
 
-const emit = defineEmits(['submit', 'handleBeforeClose','update:coalDialogFormVisible'])
+const emit = defineEmits(['submit', 'handleBeforeClose', 'update:coalDialogFormVisible'])
 // 琛ㄥ崟寮曠敤
 const formRef = ref(null)
 // 琛ㄥ崟鏁版嵁
-const formData = ref({ ...props.form })
+const formData = ref({...props.form})
 // 寮圭獥鍙鎬�
-const dialogVisible = defineModel("coalDialogFormVisible",{required:true,type:Boolean})
+const dialogVisible = defineModel("coalDialogFormVisible", {required: true, type: Boolean})
 
 // 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖�
 watch(() => props.form, (newVal) => {
-    formData.value = { ...newVal }
-    // 濡傛灉鏄柊澧炴ā寮忥紝璁剧疆缁存姢浜�
-    if (props.addOrEdit === 'add' && userStore.id) {
-        formData.value.maintainerId = userStore.id
-    }
-}, { deep: true })
+  formData.value = {...newVal}
+  // 濡傛灉鏄柊澧炴ā寮忥紝璁剧疆缁存姢浜�
+  if (props.addOrEdit === 'add' && userStore.id) {
+    formData.value.maintainerId = userStore.id
+  }
+}, {deep: true})
 
 // 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖�
 watch(() => dialogVisible.value, (newVal) => {
-    emit('update:coalDialogFormVisible', newVal)
+  emit('update:coalDialogFormVisible', newVal)
 })
 
 // 鎻愪氦琛ㄥ崟
 const submitForm = async () => {
-    if (!formRef.value) return
-    await formRef.value.validate(async (valid, fields) => {
-        if (valid) {
-            delete formData.value.maintainerName // 鍒犻櫎鏄剧ず鐢ㄧ殑瀛楁锛屽彧淇濈暀ID
-            
-            // 纭繚maintainerId鏈夊��
-            if (!formData.value.maintainerId) {
-                formData.value.maintainerId = userStore.id
-            }
-            
-            // 璁剧疆缁存姢鏃ユ湡
-            formData.value.maintenanceDate = getCurrentDate()
-            
-            let result = await addOrEditCoalInfo({
-                ...formData.value,
-            })
-            let obj = {
-                title: props.title,
-                result,
-            }
-            emit('submit', obj)
-        }
-    })
+  if (!formRef.value) return
+  await formRef.value.validate(async (valid, fields) => {
+    if (valid) {
+      delete formData.value.maintainerName // 鍒犻櫎鏄剧ず鐢ㄧ殑瀛楁锛屽彧淇濈暀ID
+
+      // 纭繚maintainerId鏈夊��
+      if (!formData.value.maintainerId) {
+        formData.value.maintainerId = userStore.id
+      }
+
+      // 璁剧疆缁存姢鏃ユ湡
+      formData.value.maintenanceDate = getCurrentDate()
+
+      let result = await addOrEditCoalInfo({
+        ...formData.value,
+      })
+      let obj = {
+        title: props.title,
+        result,
+      }
+      emit('submit', obj)
+    }
+  })
 }
 // 鍙栨秷琛ㄥ崟
 const cancelForm = () => {
-    emit('update:coalDialogFormVisible', false)
-    formData.value = {}
+  emit('update:coalDialogFormVisible', false)
+  formData.value = {}
 }
 // 閲嶇疆琛ㄥ崟
 const resetForm = () => {
-    if (!formRef.value) return
+  if (!formRef.value) return
   formData.value = JSON.parse(JSON.stringify(copyForm.value));
-    // formRef.value.resetFields()
+  // formRef.value.resetFields()
 }
 // 鍏抽棴寮圭獥
 const handleClose = () => {
-    // 瑙﹀彂鐖剁粍浠剁殑鍏抽棴鍑芥暟
-    emit("handleBeforeClose")
-    emit('update:coalDialogFormVisible', false)
+  // 瑙﹀彂鐖剁粍浠剁殑鍏抽棴鍑芥暟
+  emit("handleBeforeClose")
+  emit('update:coalDialogFormVisible', false)
 }
 const rules = reactive({
   supplierName: [
-    { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur"},
   ],
   identifyNumber: [
-    { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
-    { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
+    {required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur"},
+    {min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur"},
   ],
 });
+
 // 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
 function getCurrentDate() {
   const today = new Date();
@@ -180,9 +185,9 @@
 
 <style lang="scss" scoped>
 .dialog-footer {
-    display: flex;
-    margin-top: 20px;
-    flex-direction: column;
-    align-items: flex-end;
+  display: flex;
+  margin-top: 20px;
+  flex-direction: column;
+  align-items: flex-end;
 }
 </style>
\ No newline at end of file
diff --git a/src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue b/src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue
index c7de9c3..8dddf2b 100644
--- a/src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue
+++ b/src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue
@@ -1,35 +1,38 @@
 <template>
   <div>
     <el-dialog
-      v-model="dialogVisible"
-      :title="title"
-      width="600"
-      :close-on-click-modal="false"
-      :before-close="handleClose"
+        v-model="dialogVisible"
+        :title="title"
+        width="600"
+        :close-on-click-modal="false"
+        :before-close="handleClose"
     >
       <el-form
-        ref="formRef"
-        style="max-width: 400px; margin: 0 auto"
-        :model="formData"
-        :rules="rules"
-        label-width="auto"
+          ref="formRef"
+          style="max-width: 400px; margin: 0 auto"
+          :model="formData"
+          :rules="rules"
+          label-width="auto"
       >
         <el-form-item label="瀛楁鍚嶇О" prop="fieldName">
           <el-input
-            v-model="formData.fieldName"
-            placeholder="璇疯緭鍏ュ瓧娈靛悕绉�"
+              v-model="formData.fieldName"
+              placeholder="璇疯緭鍏ュ瓧娈靛悕绉�"
           />
-        </el-form-item>        <el-form-item label="瀛楁鎻忚堪" prop="fieldDescription">
-          <el-input v-model="formData.fieldDescription" type="textarea" placeholder="璇疯緭鍏ュ瓧娈垫弿杩�" />
+        </el-form-item>
+        <el-form-item label="瀛楁鎻忚堪" prop="fieldDescription">
+          <el-input v-model="formData.fieldDescription" type="textarea" placeholder="璇疯緭鍏ュ瓧娈垫弿杩�"/>
         </el-form-item>
         <el-form-item class="dialog-footer">
           <el-button v-if="addOrEdit === 'edit'" @click="resetForm"
-            >閲嶇疆</el-button
+          >閲嶇疆
+          </el-button
           >
           <el-button v-if="addOrEdit === 'add'" @click="cancelForm"
-            >鍙栨秷</el-button
+          >鍙栨秷
+          </el-button
           >
-          <el-button type="primary" @click="submitForm"> 纭畾 </el-button>
+          <el-button type="primary" @click="submitForm"> 纭畾</el-button>
         </el-form-item>
       </el-form>
     </el-dialog>
@@ -37,8 +40,9 @@
 </template>
 
 <script setup>
-import { ref, reactive, watch, defineProps } from "vue";
-import { addOrEditCoalField } from "@/api/basicInformation/coalFieldMaintenance.js";
+import {ref, reactive, watch, defineProps} from "vue";
+import {addOrEditCoalField} from "@/api/basicInformation/coalFieldMaintenance.js";
+
 const props = defineProps({
   form: {
     type: Object,
@@ -61,12 +65,12 @@
 const formRef = ref();
 const emit = defineEmits(["submit", "handleBeforeClose"]);
 // 琛ㄥ崟鏁版嵁
-const formData = ref({ ...props.form });
+const formData = ref({...props.form});
 
 // 鐩戝惉props.form鐨勫彉鍖栵紝鏇存柊formData
 watch(() => props.form, (newForm) => {
-  formData.value = { ...newForm };
-}, { deep: true, immediate: true });
+  formData.value = {...newForm};
+}, {deep: true, immediate: true});
 // 寮圭獥鍙鎬�
 const dialogVisible = defineModel("coalMaintenanceFieldDialogVisible", {
   required: true,
@@ -82,8 +86,8 @@
       console.log("鎻愪氦琛ㄥ崟", formData.value);
       if (props.title.includes('鏂板')) {
         let result = await addOrEditCoalField(
-         {...formData.value}
-          ,)
+            {...formData.value}
+            ,)
         console.log(result);
         obj.value = {
           title: "鏂板",
@@ -111,7 +115,7 @@
 };
 // 閲嶇疆琛ㄥ崟
 const resetForm = () => {
-    if (!formRef.value) return
+  if (!formRef.value) return
   formData.value = JSON.parse(JSON.stringify(copyForm.value));
 }
 // 鍏抽棴寮圭獥
@@ -122,7 +126,7 @@
 };
 const rules = reactive({
   fieldName: [
-    { required: true, message: "璇疯緭鍏ョ叅绉嶅悕绉�", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ョ叅绉嶅悕绉�", trigger: "blur"},
   ],
 });
 </script>
diff --git a/src/views/basicInformation/mould/coalQualityMaintenance.vue b/src/views/basicInformation/mould/coalQualityMaintenance.vue
index 64373b0..1b3d911 100644
--- a/src/views/basicInformation/mould/coalQualityMaintenance.vue
+++ b/src/views/basicInformation/mould/coalQualityMaintenance.vue
@@ -1,25 +1,26 @@
 <!-- 鐓よ川鏂规缁存姢寮圭獥缁勪欢 -->
 <template>
   <el-dialog v-model="dialogVisible" :title="title" width="600" :close-on-click-modal="false"
-    :before-close="handleClose">
+             :before-close="handleClose">
     <!-- 琛ㄥ崟鍖哄煙 -->
     <el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px"
-      style="max-width: 400px; margin: 0 auto">
+             style="max-width: 400px; margin: 0 auto">
       <!-- 鏂规鍚嶇О杈撳叆妗� -->
       <el-form-item label="鐓よ川鏂规鍚嶇О" prop="plan">
-        <el-input v-model="formData.plan" placeholder="璇疯緭鍏ョ叅璐ㄦ柟妗堝悕绉�" clearable />
+        <el-input v-model="formData.plan" placeholder="璇疯緭鍏ョ叅璐ㄦ柟妗堝悕绉�" clearable/>
       </el-form-item>
 
       <!-- 鐓よ川瀛楁澶氶�変笅鎷夋 -->
       <el-form-item label="鐓よ川鏂规绫诲瀷" prop="coalFieldList">
-        <el-select v-model="formData.coalFieldList" placeholder="璇烽�夋嫨鐓よ川鏂规绫诲瀷" style="width: 100%" clearable multiple>
-          <el-option v-for="item in fieldOptions" :key="item.id" :label="item.label" :value="item" />
+        <el-select v-model="formData.coalFieldList" placeholder="璇烽�夋嫨鐓よ川鏂规绫诲瀷" style="width: 100%" clearable
+                   multiple>
+          <el-option v-for="item in fieldOptions" :key="item.id" :label="item.label" :value="item"/>
         </el-select>
       </el-form-item>
 
       <!-- 鏂规鎻忚堪鏂囨湰鍩� -->
       <el-form-item label="鐓よ川鏂规鎻忚堪" prop="schemeDesc">
-        <el-input v-model="formData.schemeDesc" type="textarea" placeholder="璇疯緭鍏ョ叅璐ㄦ柟妗堟弿杩�" :rows="3" />
+        <el-input v-model="formData.schemeDesc" type="textarea" placeholder="璇疯緭鍏ョ叅璐ㄦ柟妗堟弿杩�" :rows="3"/>
       </el-form-item>
 
       <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
@@ -32,15 +33,16 @@
   </el-dialog>
 </template>
 <script setup>
-import { ref, reactive, watch, computed, onMounted } from "vue";
-import { getCoalFieldList, addOrEditCoalPlan } from "@/api/basicInformation/coalQualityMaintenance";
+import {ref, reactive, watch, computed, onMounted} from "vue";
+import {getCoalFieldList, addOrEditCoalPlan} from "@/api/basicInformation/coalQualityMaintenance";
 
 // ===== 缁勪欢灞炴�у畾涔� =====
 const props = defineProps({
   /** 鍏抽棴寮圭獥鍓嶇殑鍥炶皟鍑芥暟 */
   beforeClose: {
     type: Function,
-    default: () => { },
+    default: () => {
+    },
   },
   /** 琛ㄥ崟鏁版嵁 */
   form: {
@@ -58,7 +60,10 @@
     default: "",
   },
 });
-
+const copyForm = defineModel("copyForm", {
+  required: true,
+  type: Object,
+});
 // ===== 浜嬩欢瀹氫箟 =====
 const emit = defineEmits(["submit", "handleBeforeClose"]);
 
@@ -85,10 +90,10 @@
 // ===== 琛ㄥ崟楠岃瘉瑙勫垯 =====
 const formRules = reactive({
   plan: [
-    { required: true, message: "璇疯緭鍏ユ柟妗堝悕绉�", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ユ柟妗堝悕绉�", trigger: "blur"},
   ],
   coalFieldList: [
-    { required: true, message: "璇烽�夋嫨鏂规绫诲瀷", trigger: "blur" },
+    {required: true, message: "璇烽�夋嫨鏂规绫诲瀷", trigger: "blur"},
   ],
 });
 
@@ -99,9 +104,9 @@
 const parseCoalFields = (coalFieldsStr) => {
   if (!coalFieldsStr || typeof coalFieldsStr !== 'string') return [];
   return coalFieldsStr
-    .split(',')
-    .map(id => parseInt(id.trim()))
-    .filter(id => !isNaN(id));
+      .split(',')
+      .map(id => parseInt(id.trim()))
+      .filter(id => !isNaN(id));
 };
 
 /**
@@ -117,7 +122,7 @@
  * @param {Object} newForm - 鏂扮殑琛ㄥ崟鏁版嵁
  */
 const initFormData = (newForm) => {
-  formData.value = { ...newForm };
+  formData.value = {...newForm};
   // 澶勭悊 coalFieldList 瀛楁锛氱紪杈戞椂闇�瑕佸皢瀛楃涓茶浆鎹负鏁扮粍渚涘閫夌粍浠朵娇鐢�
   if (newForm.fieldIds) {
     if (typeof newForm.fieldIds === 'string') {
@@ -125,7 +130,7 @@
       const ids = parseCoalFields(newForm.fieldIds);
       formData.value.coalFieldList = ids.map(id => {
         const option = fieldOptions.find(opt => opt.value === id);
-        return option || { fields: `瀛楁${id}`, value: id };
+        return option || {fields: `瀛楁${id}`, value: id};
       });
     } else if (Array.isArray(newForm.coalFieldList)) {
       // 纭繚鏁扮粍涓殑鍊奸兘鏄纭殑瀵硅薄鏍煎紡
@@ -136,7 +141,7 @@
           // 濡傛灉鏄函ID锛岄渶瑕佸尮閰嶅搴旂殑閫夐」
           const id = parseInt(item);
           const option = fieldOptions.find(opt => opt.value === id);
-          return option || { fields: `瀛楁${id}`, value: id };
+          return option || {fields: `瀛楁${id}`, value: id};
         }
       });
     }
@@ -152,13 +157,13 @@
  */
 onMounted(async () => {
   try {
-    const { data, code } = await getCoalFieldList();
+    const {data, code} = await getCoalFieldList();
     if (code === 200) {
       // 鏋勫缓閫夐」鏁版嵁锛屾牸寮忓寲涓簕 label, value }
       fieldOptions.push(...data.map(item => ({
         label: item.fieldName,
         value: item.id,
-        fields:item.fields
+        fields: item.fields
       })));
     } else {
       console.error("鑾峰彇鐓よ川瀛楁鍒楄〃澶辫触", data);
@@ -248,8 +253,8 @@
  * 閲嶇疆琛ㄥ崟
  */
 const resetForm = () => {
-  if (!formRef.value) return;
-  formRef.value.resetFields();
+  formData.value = JSON.parse(JSON.stringify(copyForm.value));
+  initFormData(formData.value);
 };
 
 /**
diff --git a/src/views/basicInformation/mould/customer.vue b/src/views/basicInformation/mould/customer.vue
index 0aa5a62..db4d96b 100644
--- a/src/views/basicInformation/mould/customer.vue
+++ b/src/views/basicInformation/mould/customer.vue
@@ -1,44 +1,47 @@
 <template>
   <div>
     <el-dialog v-model="dialogVisible" :title="title" width="600" :close-on-click-modal="false"
-      :before-close="handleClose">
-      <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules" label-width="auto">
+               :before-close="handleClose">
+      <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules"
+               label-width="auto">
         <el-form-item label="瀹㈡埛鍚嶇О" prop="customerName">
-          <el-input v-model="formData.customerName" placeholder="璇疯緭鍏ュ鎴峰悕绉�" />
+          <el-input v-model="formData.customerName" placeholder="璇疯緭鍏ュ鎴峰悕绉�"/>
         </el-form-item>
         <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="taxpayerId">
-          <el-input v-model="formData.taxpayerId" placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�" />
+          <el-input v-model="formData.taxpayerId" placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�"/>
         </el-form-item>
         <el-form-item label="缁忚惀鍦板潃" prop="bids">
-          <el-cascader placeholder="璇烽�夋嫨缁忚惀鍦板潃" size="default" :options="addressSelectOptions" v-model="formData.bids"
-           :props="cascaderProps" @change="handleChange">
+          <el-cascader placeholder="璇烽�夋嫨缁忚惀鍦板潃" size="default" :options="addressSelectOptions"
+                       v-model="formData.bids"
+                       :props="cascaderProps" @change="handleChange">
           </el-cascader>
         </el-form-item>
         <el-form-item label="缁忚惀璇︾粏鍦板潃" prop="businessAddress">
-          <el-input v-model="formData.businessAddress" placeholder="璇疯緭鍏ョ粡钀ヨ缁嗗湴鍧�" />
+          <el-input v-model="formData.businessAddress" placeholder="璇疯緭鍏ョ粡钀ヨ缁嗗湴鍧�"/>
         </el-form-item>
         <el-form-item label="寮�鎴疯" prop="bankName">
-          <el-input v-model="formData.bankName" placeholder="璇疯緭鍏ュ紑鎴疯" />
+          <el-input v-model="formData.bankName" placeholder="璇疯緭鍏ュ紑鎴疯"/>
         </el-form-item>
         <el-form-item label="閾惰璐︽埛" prop="bankAccount">
-          <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" />
+          <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ラ摱琛岃处鎴�"/>
         </el-form-item>
         <el-form-item label="鑱旂郴浜�" prop="contactPerson">
-          <el-input v-model="formData.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉" />
+          <el-input v-model="formData.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉"/>
         </el-form-item>
         <el-form-item label="鑱旂郴鐢佃瘽" prop="contactPhone">
-          <el-input v-model="formData.contactPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+          <el-input v-model="formData.contactPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"/>
         </el-form-item>
-  
+
         <el-form-item label="鑱旂郴浜哄湴鍧�" prop="cids">
-          <el-cascader placeholder="璇烽�夋嫨鑱旂郴浜哄湴鍧�" size="default" :options="addressSelectOptions" v-model="formData.cids"
-            :props="cascaderProps" @change="handleChange">
+          <el-cascader placeholder="璇烽�夋嫨鑱旂郴浜哄湴鍧�" size="default" :options="addressSelectOptions"
+                       v-model="formData.cids"
+                       :props="cascaderProps" @change="handleChange">
           </el-cascader>
         </el-form-item>
         <el-form-item label="鑱旂郴浜鸿缁�" prop="contactAddress">
-          <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉璇︾粏鍦板潃" />
+          <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉璇︾粏鍦板潃"/>
         </el-form-item>
-        <el-form-item class="dialog-footer"> 
+        <el-form-item class="dialog-footer">
           <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
           <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
           <el-button type="primary" @click="submitForm">
@@ -51,15 +54,16 @@
 </template>
 
 <script setup>
-import { ref, watch, onMounted } from "vue";
-import { getAreaOptions } from "@/api/system/area.js";
+import {ref, watch, onMounted} from "vue";
+import {getAreaOptions} from "@/api/system/area.js";
 import addressList from "@/api/jsonApi/areaList.json";
-import { addOrEditCustomer } from "@/api/basicInformation/customer";
+import {addOrEditCustomer} from "@/api/basicInformation/customer";
 
 const props = defineProps({
   beforeClose: {
     type: Function,
-    default: () => { },
+    default: () => {
+    },
   },
   form: {
     type: Object,
@@ -111,7 +115,7 @@
 // 琛ㄥ崟寮曠敤
 const formRef = ref(null);
 // 琛ㄥ崟鏁版嵁
-const formData = ref({ ...props.form });
+const formData = ref({...props.form});
 // 寮圭獥鍙鎬�
 const dialogVisible = defineModel("customerDialogFormVisible", {
   required: true,
@@ -120,26 +124,26 @@
 
 // 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖�
 watch(
-  () => props.form,
-  (newVal) => {
-    formData.value = { ...newVal };
-  },
-  { deep: true }
+    () => props.form,
+    (newVal) => {
+      formData.value = {...newVal};
+    },
+    {deep: true}
 );
 watch(
-  () => props.form,
-  (newVal) => {
-    formData.value = { ...newVal };
-  },
-  { deep: true }
+    () => props.form,
+    (newVal) => {
+      formData.value = {...newVal};
+    },
+    {deep: true}
 );
 
 // 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖�
 watch(
-  () => dialogVisible.value,
-  (newVal) => {
-    emit("update:customerDialogFormVisible", newVal);
-  }
+    () => dialogVisible.value,
+    (newVal) => {
+      emit("update:customerDialogFormVisible", newVal);
+    }
 );
 
 // 鎻愪氦琛ㄥ崟
@@ -191,11 +195,11 @@
 };
 const rules = reactive({
   customerName: [
-    { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur"},
   ],
   taxpayerId: [
-    { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
-    { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
+    {required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur"},
+    {min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur"},
   ],
   address: [
     {
@@ -204,14 +208,14 @@
       trigger: "change",
     },
   ],
-  bankAccount: [{ required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur" }],
-  bankName: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
-  contactPerson: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
-  cids: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
-  bids: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
+  bankAccount: [{required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur"}],
+  bankName: [{required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur"}],
+  contactPerson: [{required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur"}],
+  cids: [{required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur"}],
+  bids: [{required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur"}],
   contactPhone: [
-    { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" },
-    { min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur"},
+    {min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur"},
   ],
 });
 </script>
diff --git a/src/views/basicInformation/mould/supplier.vue b/src/views/basicInformation/mould/supplier.vue
index 15ac14d..88a2192 100644
--- a/src/views/basicInformation/mould/supplier.vue
+++ b/src/views/basicInformation/mould/supplier.vue
@@ -1,41 +1,44 @@
 <template>
   <div>
     <el-dialog v-model="dialogVisible" :title="title" width="600" :close-on-click-modal="false"
-      :before-close="handleClose">
-      <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules" label-width="auto">
+               :before-close="handleClose">
+      <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules"
+               label-width="auto">
         <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName">
-          <el-input v-model="formData.supplierName" placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О" />
+          <el-input v-model="formData.supplierName" placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О"/>
         </el-form-item>
         <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="taxpayerId">
-          <el-input v-model="formData.taxpayerId" placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�" />
+          <el-input v-model="formData.taxpayerId" placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�"/>
         </el-form-item>
         <el-form-item label="缁忚惀鍦板潃" prop="bids">
-          <el-cascader placeholder="璇烽�夋嫨缁忚惀鍦板潃" size="default" :options="addressSelectOptions" v-model="formData.bids"
-            :props="cascaderProps" @change="handleChange">
+          <el-cascader placeholder="璇烽�夋嫨缁忚惀鍦板潃" size="default" :options="addressSelectOptions"
+                       v-model="formData.bids"
+                       :props="cascaderProps" @change="handleChange">
           </el-cascader>
         </el-form-item>
         <el-form-item label="璇︾粏鍦板潃" prop="businessAddress">
-          <el-input v-model="formData.businessAddress" placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�" />
+          <el-input v-model="formData.businessAddress" placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�"/>
         </el-form-item>
         <el-form-item label="寮�鎴疯" prop="bankAccount">
-          <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ュ紑鎴疯" />
+          <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ュ紑鎴疯"/>
         </el-form-item>
         <el-form-item label="閾惰璐︽埛" prop="bankName">
-          <el-input v-model="formData.bankName" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" />
+          <el-input v-model="formData.bankName" placeholder="璇疯緭鍏ラ摱琛岃处鎴�"/>
         </el-form-item>
         <el-form-item label="鑱旂郴浜�" prop="contactPerson">
-          <el-input v-model="formData.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉" />
+          <el-input v-model="formData.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉"/>
         </el-form-item>
         <el-form-item label="鑱旂郴浜虹數璇�" prop="contactPhone">
-          <el-input v-model="formData.contactPhone" placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽" />
+          <el-input v-model="formData.contactPhone" placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽"/>
         </el-form-item>
         <el-form-item label="鑱旂郴浜哄湴鍧�" prop="cids">
-          <el-cascader placeholder="璇烽�夋嫨鑱旂郴浜哄湴鍧�" size="default" :options="addressSelectOptions" v-model="formData.cids"
-            :props="cascaderProps" @change="handleChange">
+          <el-cascader placeholder="璇烽�夋嫨鑱旂郴浜哄湴鍧�" size="default" :options="addressSelectOptions"
+                       v-model="formData.cids"
+                       :props="cascaderProps" @change="handleChange">
           </el-cascader>
         </el-form-item>
         <el-form-item label="鑱旂郴浜鸿缁嗗湴鍧�" prop="contactAddress">
-          <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉鍦板潃" />
+          <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉鍦板潃"/>
         </el-form-item>
         <el-form-item class="dialog-footer">
           <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
@@ -48,9 +51,9 @@
 </template>
 
 <script setup>
-import { ref, watch, defineProps, onMounted } from "vue";
-import { addOrEditSupply } from "@/api/basicInformation/supplier";
-import { getAreaOptions } from "@/api/system/area.js";
+import {ref, watch, defineProps, onMounted} from "vue";
+import {addOrEditSupply} from "@/api/basicInformation/supplier";
+import {getAreaOptions} from "@/api/system/area.js";
 
 const props = defineProps({
   beforeClose: {
@@ -111,7 +114,7 @@
 // 琛ㄥ崟寮曠敤
 const formRef = ref(null);
 // 琛ㄥ崟鏁版嵁
-const formData = ref({ ...props.form });
+const formData = ref({...props.form});
 // 寮圭獥鍙鎬�
 const dialogVisible = defineModel("supplierDialogFormVisible", {
   required: true,
@@ -119,19 +122,19 @@
 });
 // 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖�
 watch(
-  () => props.form,
-  (newVal) => {
-    formData.value = { ...newVal };
-  },
-  { deep: true }
+    () => props.form,
+    (newVal) => {
+      formData.value = {...newVal};
+    },
+    {deep: true}
 );
 
 // 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖�
 watch(
-  () => dialogVisible.value,
-  (newVal) => {
-    emit("update:supplierDialogFormVisible", newVal);
-  }
+    () => dialogVisible.value,
+    (newVal) => {
+      emit("update:supplierDialogFormVisible", newVal);
+    }
 );
 // 澶勭悊鍦板潃閫夋嫨鍙樺寲
 const handleChange = (value) => {
@@ -175,7 +178,6 @@
 const resetForm = () => {
   if (!formRef.value) return;
   formData.value = JSON.parse(JSON.stringify(copyForm.value));
-  // formRef.value.resetFields();
 };
 // 鍏抽棴寮圭獥
 const handleClose = () => {
@@ -185,11 +187,11 @@
 };
 const rules = reactive({
   supplierName: [
-    { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur"},
   ],
   taxpayerId: [
-    { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
-    { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
+    {required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur"},
+    {min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur"},
   ],
   // bids: [
   //   {
@@ -198,12 +200,12 @@
   //     trigger: "change",
   //   },
   // ],
-  bankName: [{ required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur" }],
-  bankAccount: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
-  contactPerson: [{ required: true, message: "鑱旂郴浜�", trigger: "blur" }],
+  bankName: [{required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur"}],
+  bankAccount: [{required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur"}],
+  contactPerson: [{required: true, message: "鑱旂郴浜�", trigger: "blur"}],
   contactPhone: [
-    { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" },
-    { min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur"},
+    {min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur"},
   ],
 });
 </script>
diff --git a/src/views/index.vue b/src/views/index.vue
index 76688c0..60dba1c 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -1,1095 +1,550 @@
 <template>
-  <div class="app-container home">
-    <el-row :gutter="20">
-      <el-col :sm="24" :lg="12" style="padding-left: 20px">
-        <h2>鑻ヤ緷鍚庡彴绠$悊妗嗘灦</h2>
-        <p>
-          涓�鐩存兂鍋氫竴娆惧悗鍙扮鐞嗙郴缁燂紝鐪嬩簡寰堝浼樼鐨勫紑婧愰」鐩絾鏄彂鐜版病鏈夊悎閫傝嚜宸辩殑銆備簬鏄埄鐢ㄧ┖闂蹭紤鎭椂闂村紑濮嬭嚜宸卞啓涓�濂楀悗鍙扮郴缁熴�傚姝ゆ湁浜嗚嫢渚濈鐞嗙郴缁燂紝濂瑰彲浠ョ敤浜庢墍鏈夌殑Web搴旂敤绋嬪簭锛屽缃戠珯绠$悊鍚庡彴锛岀綉绔欎細鍛樹腑蹇冿紝CMS锛孋RM锛孫A绛夌瓑锛屽綋鐒讹紝鎮ㄤ篃鍙互瀵瑰ス杩涜娣卞害瀹氬埗锛屼互鍋氬嚭鏇村己绯荤粺銆傛墍鏈夊墠绔悗鍙颁唬鐮佸皝瑁呰繃鍚庡崄鍒嗙簿绠�鏄撲笂鎵嬶紝鍑洪敊姒傜巼浣庛�傚悓鏃舵敮鎸佺Щ鍔ㄥ鎴风璁块棶銆傜郴缁熶細闄嗙画鏇存柊涓�浜涘疄鐢ㄥ姛鑳姐��
-        </p>
-        <p>
-          <b>褰撳墠鐗堟湰:</b> <span>v{{ version }}</span>
-        </p>
-        <p>
-          <el-tag type="danger">&yen;鍏嶈垂寮�婧�</el-tag>
-        </p>
-        <p>
-          <el-button
-            type="primary"
-            icon="Cloudy"
-            plain
-            @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
-            >璁块棶鐮佷簯</el-button
-          >
-          <el-button
-            icon="HomeFilled"
-            plain
-            @click="goTarget('http://ruoyi.vip')"
-            >璁块棶涓婚〉</el-button
-          >
-        </p>
-      </el-col>
-
-      <el-col :sm="24" :lg="12" style="padding-left: 50px">
-        <el-row>
-          <el-col :span="12">
-            <h2>鎶�鏈�夊瀷</h2>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="6">
-            <h4>鍚庣鎶�鏈�</h4>
-            <ul>
-              <li>SpringBoot</li>
-              <li>Spring Security</li>
-              <li>JWT</li>
-              <li>MyBatis</li>
-              <li>Druid</li>
-              <li>Fastjson</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-          <el-col :span="6">
-            <h4>鍓嶇鎶�鏈�</h4>
-            <ul>
-              <li>Vue</li>
-              <li>Vuex</li>
-              <li>Element-ui</li>
-              <li>Axios</li>
-              <li>Sass</li>
-              <li>Quill</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-        </el-row>
-      </el-col>
-    </el-row>
-    <el-divider />
-    <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <template v-slot:header>
-            <div class="clearfix">
-              <span>鑱旂郴淇℃伅</span>
-            </div>
-          </template>
-          <div class="body">
-            <p>
-              <i class="el-icon-s-promotion"></i> 瀹樼綉锛�<el-link
-                href="http://www.ruoyi.vip"
-                target="_blank"
-                >http://www.ruoyi.vip</el-link
-              >
-            </p>
-            <p>
-              <i class="el-icon-user-solid"></i> QQ缇わ細<s> 婊�937441 </s> <s> 婊�887144332 </s>
-              <s> 婊�180251782 </s> <s> 婊�104180207 </s> <s> 婊�186866453 </s> <s> 婊�201396349 </s>
-              <s> 婊�101456076 </s> <s> 婊�101539465 </s> <s> 婊�264312783 </s> <s> 婊�167385320 </s> 
-              <s> 婊�104748341 </s> <s> 婊�160110482 </s> <s> 婊�170801498 </s> <s> 婊�108482800 </s> 
-              <s> 婊�101046199 </s> <s> 婊�136919097 </s> <s> 婊�143961921 </s> <s> 婊�174951577 </s> 
-              <s> 婊�161281055 </s> <s> 婊�138988063 </s> <s> 婊�151450850 </s> <s> 婊�224622315 </s>
-              <s> 婊�287842588 </s> <s> 婊�187944233 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G6r5KGCaa3pqdbUSXNIgYloyb8e0_L0D&authKey=4w8tF1eGW7%2FedWn%2FHAypQksdrML%2BDHolQSx7094Agm7Luakj9EbfPnSTxSi2T1LQ&noverify=0&group_code=228578329" target="_blank">228578329</a>
-            </p>
-            <p>
-              <i class="el-icon-chat-dot-round"></i> 寰俊锛�<a
-                href="javascript:;"
-                >/ *鑻ヤ緷</a
-              >
-            </p>
-            <p>
-              <i class="el-icon-money"></i> 鏀粯瀹濓細<a
-                href="javascript:;"
-                class="鏀粯瀹濅俊鎭�"
-                >/ *鑻ヤ緷</a
-              >
-            </p>
+  <div class="dashboard">
+    <!-- 椤堕儴缁熻鍗$墖 -->
+    <div class="top-cards">
+      <div class="stat-card revenue">
+        <div class="card-icon">
+          <i class="el-icon-money"></i>
+        </div>
+        <div class="card-content">
+          <div class="card-title">钀ユ敹閲戦</div>
+          <div class="card-value">楼1,234,567</div>
+          <div class="card-trend">
+            <span class="trend-label">杈冩槰鏃�</span>
+            <span class="trend-value up">+12.5%</span>
           </div>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <template v-slot:header>
-            <div class="clearfix">
-              <span>鏇存柊鏃ュ織</span>
-            </div>
-          </template>
-          <el-collapse accordion>
-            <el-collapse-item title="v3.8.9 - 2024-12-30">
-              <ol>
-                <li>鐢ㄦ埛绠$悊鏀寔鍒嗘爮鎷栧姩</li>
-                <li>淇敼涓婚鏍峰紡鏈湴璇诲彇</li>
-                <li>鐢ㄦ埛澶村儚http(s)閾炬帴鏀寔</li>
-                <li>鐢ㄦ埛绠$悊杩囨护鎺夊凡绂佺敤閮ㄩ棬</li>
-                <li>鏀寔鑷畾涔夋樉绀篍xcel灞炴�у垪</li>
-                <li>鎿嶄綔鏃ュ織璁板綍DELETE璇锋眰鍙傛暟</li>
-                <li>鐧藉悕鍗曟敮鎸佸閫氶厤绗﹁矾寰勫尮閰�</li>
-                <li>鏍℃鏂囦欢鍚嶆槸鍚﹀寘鍚壒娈婂瓧绗�</li>
-                <li>浠g爜鐢熸垚鍒涘缓琛ㄥ睆钄借繚瑙勭殑瀛楃</li>
-                <li>鑿滃崟闈㈠寘灞戝鑸敮鎸佸灞傜骇鏄剧ず</li>
-                <li>Excel娉ㄨВ鏀寔wrapText鏄惁鍏佽鍐呭鎹㈣</li>
-                <li>浠g爜鐢熸垚鏂板閰嶇疆鏄惁鍏佽鏂囦欢瑕嗙洊鍒版湰鍦�</li>
-                <li>淇瑙掕壊绂佺敤鏉冮檺涓嶅け鏁堥棶棰�</li>
-                <li>淇浠g爜鐢熸垚涓婄骇鑿滃崟鏄剧ず闂</li>
-                <li>淇瀵煎嚭瀛愬垪琛ㄥ璞″彧鑳藉湪鏈�鍚庣殑闂</li>
-                <li>淇TopNav鏃犳硶姝g‘鑾峰彇active鐨勯棶棰�</li>
-                <li>淇榛樿鍏抽棴Tags-Views鍐呴摼椤甸潰鎵撲笉寮�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.6.5</li>
-                <li>鍗囩骇tomcat鍒版渶鏂扮増鏈�9.0.96</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.53</li>
-                <li>鍗囩骇logback鍒版渶鏂扮増鏈�1.2.13</li>
-                <li>鍗囩骇spring-framework鍒版渶鏂扮増鏈�5.3.39</li>
-                <li>鍗囩骇quill鍒版渶鏂扮増鏈�2.0.2</li>
-                <li>鍗囩骇axios鍒版渶鏂扮増鏈�0.28.1</li>
-                <li>浼樺寲韬唤璇佽劚鏁忔鍒�</li>
-                <li>浼樺寲鏉冮檺鏇存柊鍚庡悓姝ョ紦瀛�</li>
-                <li>浼樺寲鏌ヨ鏃堕棿鑼冨洿鏃ユ湡鏍煎紡</li>
-                <li>浼樺寲鍙傛暟閿�兼洿鎹负澶氳鏂囨湰</li>
-                <li>浼樺寲瀵煎叆甯︽爣棰樻枃浠跺叧闂竻鐞�</li>
-                <li>浼樺寲涓婁紶鍥剧墖甯﹀煙鍚嶄笉澧炲姞鍓嶇紑</li>
-                <li>浼樺寲鐗规畩瀛楃瀵嗙爜淇敼澶辫触闂</li>
-                <li>浼樺寲鏃犵敤鎴风紪鍙蜂笉鏍¢獙鏁版嵁鏉冮檺</li>
-                <li>浼樺寲TopNav鍐呴摼鑿滃崟鐐瑰嚮娌℃湁楂樹寒</li>
-                <li>浼樺寲鑿滃崟绠$悊鍒囨崲Mini甯冨眬閿欎贡闂</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.8 - 2024-06-30">
-              <ol>
-                <li>鑿滃崟绠$悊鏂板璺敱鍚嶇О</li>
-                <li>鏂板鏁版嵁鑴辨晱杩囨护娉ㄨВ</li>
-                <li>鐢ㄦ埛瀵嗙爜鏂板闈炴硶瀛楃楠岃瘉</li>
-                <li>闄愬埗鐢ㄦ埛鎿嶄綔鏁版嵁鏉冮檺鑼冨洿</li>
-                <li>浠g爜鐢熸垚鏂板鍒涘缓琛ㄧ粨鏋勫姛鑳�</li>
-                <li>瀹氭椂浠诲姟鐧藉悕鍗曢厤缃寖鍥寸缉灏�</li>
-                <li>浼樺寲浠g爜鐢熸垚涓诲瓙琛ㄥ叧鑱旀煡璇㈡柟寮�</li>
-                <li>Excel娉ㄨВ鏂板灞炴�omboReadDict</li>
-                <li>Excel娉ㄨВColumnType绫诲瀷鏂板鏂囨湰</li>
-                <li>鏂板鍥介檯鍖栬祫婧愭枃浠堕厤缃�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.6.1</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.23</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.37.1</li>
-                <li>鏇存柊HttpUtils涓殑User-Agent</li>
-                <li>鏇存柊compressionPlugin鍒�6.1.2浠ュ吋瀹筺ode18+</li>
-                <li>鍗囩骇spring-security鍒板畨鍏ㄧ増鏈紝闃叉婕忔礊椋庨櫓</li>
-                <li>鍗囩骇spring-framework鍒板畨鍏ㄧ増鏈紝闃叉婕忔礊椋庨櫓</li>
-                <li>浼樺寲鑷畾涔塜SS娉ㄨВ鍖归厤鏂瑰紡</li>
-                <li>浼樺寲缂撳瓨鐩戞帶閿悕鍒楄〃鎺掑簭鏄剧ず</li>
-                <li>浼樺寲瀹氭椂浠诲姟鏃ュ織榛樿鎸夋椂闂存帓搴�</li>
-                <li>浼樺寲榛樿鏂囦欢澶у皬瓒呰繃2G鏃犳晥鐨勯棶棰�</li>
-                <li>浼樺寲鏌ヨ〃鐗规畩瀛楃浣跨敤鍙嶆枩鏉犺繘琛岃浆涔�</li>
-                <li>浼樺寲瀹氭椂浠诲姟cron琛ㄨ揪寮忓皬鏃堕厤缃樉绀洪敊璇棶棰�</li>
-                <li>浼樺寲澶氫釜鑷畾鏁版嵁鏉冮檺浣跨敤in鏌ヨ,閬垮厤澶氭鎷兼帴</li>
-                <li>浼樺寲瀵煎叆Excel鏃惰缃甦ictType灞炴�ч噸澶嶆煡缂撳瓨闂</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.7 - 2023-12-08">
-              <ol>
-                <li>鎿嶄綔鏃ュ織璁板綍閮ㄩ棬鍚嶇О</li>
-                <li>鍏ㄥ眬鏁版嵁瀛樺偍鐢ㄦ埛缂栧彿</li>
-                <li>鏂板缂栫▼寮忓垽鏂祫婧愯闂潈闄�</li>
-                <li>鎿嶄綔鏃ュ織鍒楄〃鏂板IP鍦板潃鏌ヨ</li>
-                <li>瀹氭椂浠诲姟鏂板椤靛幓闄ょ姸鎬侀�夐」</li>
-                <li>浠g爜鐢熸垚鏀寔閫夋嫨鍓嶇妯℃澘绫诲瀷</li>
-                <li>鏄鹃殣鍒楃粍浠舵敮鎸佸閫夋寮瑰嚭绫诲瀷</li>
-                <li>閫氱敤鎺掑簭灞炴�rderBy鍙傛暟闄愬埗闀垮害</li>
-                <li>Excel鑷畾涔夋暟鎹鐞嗗櫒澧炲姞鍗曞厓鏍�/宸ヤ綔绨垮璞�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.8</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.20</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.43</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.7</li>
-                <li>鍗囩骇commons.io鍒版渶鏂扮増鏈�2.13.0</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.14</li>
-                <li>淇浜旂骇璺敱缂撳瓨鏃犳晥闂</li>
-                <li>淇澶栭摼甯︾鍙e嚭鐜扮殑寮傚父</li>
-                <li>淇鏍戞ā鏉跨埗绾х紪鐮佸彉閲忛敊璇�</li>
-                <li>淇瀛楀吀琛ㄨ鎯呴〉闈㈡悳绱㈤棶棰�</li>
-                <li>淇鍐呴摼iframe娌℃湁浼犻�掑弬鏁伴棶棰�</li>
-                <li>淇鑷畾涔夊瓧鍏告牱寮忎笉鐢熸晥鐨勯棶棰�</li>
-                <li>淇瀛楀吀缂撳瓨鍒犻櫎鏂规硶鍙傛暟閿欒闂</li>
-                <li>淇Excel瀵煎叆鏁版嵁涓存椂鏂囦欢鏃犳硶鍒犻櫎闂</li>
-                <li>淇鏈櫥褰曞甫鍙傛暟璁块棶鎴愬姛鍚庡弬鏁颁涪澶遍棶棰�</li>
-                <li>淇HeaderSearch缁勪欢璺宠浆query鍙傛暟涓㈠け闂</li>
-                <li>淇浠g爜鐢熸垚瀵煎叆鍚庡繀濉」涓庢暟鎹簱涓嶅尮閰嶉棶棰�</li>
-                <li>淇Excels瀵煎叆鏃舵棤娉曡幏鍙栧埌dictType瀛楀吀鍊奸棶棰�</li>
-                <li>浼樺寲涓嬭浇zip鏂规硶鏂板閬僵灞�</li>
-                <li>浼樺寲澶村儚涓婁紶鍙傛暟鏂板鏂囦欢鍚嶇О</li>
-                <li>浼樺寲瀛楀吀鏍囩鏀寔鑷畾涔夊垎闅旂</li>
-                <li>浼樺寲鑿滃崟绠$悊绫诲瀷涓烘寜閽姸鎬佸彲閫�</li>
-                <li>浼樺寲鍓嶇闃查噸澶嶆彁浜ゆ暟鎹ぇ灏忛檺鍒�</li>
-                <li>浼樺寲TopNav鑿滃崟娌℃湁鍥炬爣svg涓嶆樉绀�</li>
-                <li>浼樺寲鏁板瓧閲戦澶у啓杞崲绮惧害涓㈠け闂</li>
-                <li>浼樺寲瀵屾枃鏈珽ditor缁勪欢妫�楠屽浘鐗囨牸寮�</li>
-                <li>浼樺寲椤电鍦‵irefox娴忚鍣ㄨ閬尅鐨勯棶棰�</li>
-                <li>浼樺寲涓汉涓績/鍩烘湰璧勬枡淇敼鏃舵暟鎹樉绀洪棶棰�</li>
-                <li>浼樺寲缂撳瓨鐩戞帶鍥捐〃鏀寔璺熼殢灞忓箷澶у皬鑷�傚簲璋冩暣</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.6 - 2023-06-30">
-              <ol>
-                <li>鏀寔鐧诲綍IP榛戝悕鍗曢檺鍒�</li>
-                <li>鏂板鐩戞帶椤甸潰鍥炬爣鏄剧ず</li>
-                <li>鎿嶄綔鏃ュ織鏂板娑堣�楁椂闂村睘鎬�</li>
-                <li>灞忚斀瀹氭椂浠诲姟bean杩濊鐨勫瓧绗�</li>
-                <li>鏃ュ織绠$悊浣跨敤绱㈠紩鎻愬崌鏌ヨ鎬ц兘</li>
-                <li>鏃ュ織娉ㄨВ鏀寔鎺掗櫎鎸囧畾鐨勮姹傚弬鏁�</li>
-                <li>鏀寔鑷畾涔夐殣钘忓睘鎬у垪杩囨护瀛愬璞�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.3</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.16</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.34</li>
-                <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.15</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.13</li>
-                <li>绉婚櫎apache/commons-fileupload渚濊禆</li>
-                <li>淇椤甸潰鍒囨崲鏃跺竷灞�閿欎贡鐨勯棶棰�</li>
-                <li>淇鍖垮悕娉ㄨВAnonymous绌烘寚閽堥棶棰�</li>
-                <li>淇璺敱璺宠浆琚樆姝㈡椂鍐呴儴浜х敓鎶ラ敊淇℃伅闂</li>
-                <li>淇isMatchedIp鐨勫弬鏁板垽鏂骇鐢熺┖鎸囬拡鐨勯棶棰�</li>
-                <li>淇鐢ㄦ埛澶氳鑹叉暟鎹潈闄愬彲鑳藉嚭鐜版潈闄愭姮鍗囩殑鎯呭喌</li>
-                <li>淇寮�鍚疶opNav鍚庝竴绾ц彍鍗曡矾鐢卞弬鏁拌缃棤鏁堥棶棰�</li>
-                <li>淇DictTag缁勪欢value娌℃湁鍖归厤鐨勫�兼椂鍒欏睍绀簐alue</li>
-                <li>浼樺寲鏂囦欢涓嬭浇鍑虹幇鐨勫紓甯�</li>
-                <li>浼樺寲閫夋嫨鍥炬爣缁勪欢楂樹寒鍥炴樉</li>
-                <li>浼樺寲寮圭獥鍚庡鑸爮鍋忕Щ鐨勯棶棰�</li>
-                <li>浼樺寲淇敼瀵嗙爜鏃ュ織瀛樺偍鏄庢枃闂</li>
-                <li>浼樺寲椤电鏍忓叧闂叾浠栧嚭鐜扮殑寮傚父闂</li>
-                <li>浼樺寲椤电鍏抽棴宸︿晶閫夐」鎺掗櫎棣栭〉閫夐」</li>
-                <li>浼樺寲鍏抽棴褰撳墠tab椤佃烦杞渶鍙充晶tab椤�</li>
-                <li>浼樺寲缂撳瓨鍒楄〃娓呴櫎鎿嶄綔鎻愮ず涓嶅彉鐨勯棶棰�</li>
-                <li>浼樺寲瀛楃鏈娇鐢ㄤ笅鍒掔嚎涓嶈繘琛岄┘宄板紡澶勭悊</li>
-                <li>浼樺寲鐢ㄦ埛瀵煎叆鏇存柊鏃堕渶鑾峰彇鐢ㄦ埛缂栧彿闂</li>
-                <li>浼樺寲渚ц竟鏍忕殑骞冲彴鏍囬涓嶸UE_APP_TITLE淇濇寔鍚屾</li>
-                <li>浼樺寲瀵煎嚭Excel鏃惰缃甦ictType灞炴�ч噸澶嶆煡缂撳瓨闂</li>
-                <li>杩炴帴姹燚ruid鏀寔鏂扮殑閰嶇疆connectTimeout鍜宻ocketTimeout</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.5 - 2023-01-01">
-              <ol>
-                <li>瀹氭椂浠诲姟杩濊鐨勫瓧绗�</li>
-                <li>閲嶇疆鏃跺彇娑堥儴闂ㄩ�変腑</li>
-                <li>鏂板杩斿洖璀﹀憡娑堟伅鎻愮ず</li>
-                <li>蹇界暐涓嶅繀瑕佺殑灞炴�ф暟鎹繑鍥�</li>
-                <li>淇敼鍙傛暟閿悕鏃剁Щ闄ゅ墠缂撳瓨閰嶇疆</li>
-                <li>瀵煎叆鏇存柊鐢ㄦ埛鏁版嵁鍓嶆牎楠屾暟鎹潈闄�</li>
-                <li>鍏煎Excel涓嬫媺妗嗗唴瀹硅繃澶氭棤娉曟樉绀虹殑闂</li>
-                <li>鍗囩骇echarts鍒版渶鏂扮増鏈�5.4.0</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.25.3</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.0</li>
-                <li>鍗囩骇kaptcha鍒版渶鏂扮増2.3.3</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.15</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.20</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.6</li>
-                <li>浼樺寲寮圭獥鍐呭杩囧灞曠ず涓嶅叏闂</li>
-                <li>浼樺寲swagger-ui闈欐�佽祫婧愪娇鐢ㄧ紦瀛�</li>
-                <li>寮�鍚疶opNav娌℃湁瀛愯彍鍗曢殣钘忎晶杈规爮</li>
-                <li>鍒犻櫎fuse鏃犳晥閫夐」maxPatternLength</li>
-                <li>浼樺寲瀵煎嚭瀵硅薄鐨勫瓙鍒楄〃涓虹┖浼氬嚭鐜癧]闂</li>
-                <li>浼樺寲缂栬緫澶村儚鏃堕�忔槑閮ㄥ垎浼氬彉鎴愰粦鑹查棶棰�</li>
-                <li>浼樺寲灏忓睆骞曚笂淇敼澶村儚鐣岄潰甯冨眬閿欎綅鐨勯棶棰�</li>
-                <li>淇浠g爜鐢熸垚鍕鹃�夊睘鎬ф棤鏁堥棶棰�</li>
-                <li>淇鏂囦欢涓婁紶缁勪欢鏍煎紡楠岃瘉闂</li>
-                <li>淇鍥炴樉鏁版嵁瀛楀吀鏁扮粍寮傚父闂</li>
-                <li>淇sheet瓒呭嚭鏈�澶ц鏁板紓甯搁棶棰�</li>
-                <li>淇Log娉ㄨВGET璇锋眰璁板綍涓嶅埌鍙傛暟闂</li>
-                <li>淇璋冨害鏃ュ織鐐瑰嚮澶氭鏁版嵁涓嶅彉鍖栫殑闂</li>
-                <li>淇涓婚棰滆壊鍦―rawer缁勪欢涓嶄細鍔犺浇闂</li>
-                <li>淇鏂囦欢鍚嶅寘鍚壒娈婂瓧绗︾殑鏂囦欢鏃犳硶涓嬭浇闂</li>
-                <li>淇table涓洿澶氭寜閽垏鎹富棰樿壊鏈敓鏁堜慨澶嶉棶棰�</li>
-                <li>淇鏌愪簺鐗规�х殑鐜鐢熸垚浠g爜鍙樹贡鐮乀XT鏂囦欢闂</li>
-                <li>淇浠g爜鐢熸垚鍥剧墖/鏂囦欢/鍗曢�夋椂閫夋嫨蹇呭~鏃犳硶鏍¢獙闂</li>
-                <li>淇鏌愪簺鐗规�х殑鎯呭喌鐢ㄦ埛缂栬緫瀵硅瘽妗嗕腑瑙掕壊鍜岄儴闂ㄦ棤娉曚慨鏀归棶棰�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.4 - 2022-09-26">
-              <ol>
-                <li>鏁版嵁閫昏緫鍒犻櫎涓嶈繘琛屽敮涓�楠岃瘉</li>
-                <li>Excel娉ㄨВ鏀寔瀵煎嚭瀵硅薄鐨勫瓙鍒楄〃鏂规硶</li>
-                <li>Excel娉ㄨВ鏀寔鑷畾涔夐殣钘忓睘鎬у垪</li>
-                <li>Excel娉ㄨВ鏀寔backgroundColor灞炴�ц缃儗鏅壊</li>
-                <li>鏀寔閰嶇疆瀵嗙爜鏈�澶ч敊璇鏁�/閿佸畾鏃堕棿</li>
-                <li>鐧诲綍鏃ュ織鏂板瑙i攣璐︽埛鍔熻兘</li>
-                <li>閫氱敤涓嬭浇鏂规硶鏂板config閰嶇疆閫夐」</li>
-                <li>鏀寔澶氭潈闄愬瓧绗﹀尮閰嶈鑹叉暟鎹潈闄�</li>
-                <li>椤甸潰鍐呭祵iframe鍒囨崲tab涓嶅埛鏂版暟鎹�</li>
-                <li>鎿嶄綔鏃ュ織璁板綍鏀寔鎺掗櫎鏁忔劅灞炴�у瓧娈�</li>
-                <li>淇澶氭枃浠朵笂浼犳姤閿欏嚭鐜扮殑寮傚父闂</li>
-                <li>淇鍥剧墖棰勮缁勪欢src灞炴�т负null鍊兼帶鍒跺彴鎶ラ敊闂</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.2.2</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.14</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.3</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.25.2</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.10</li>
-                <li>浼樺寲浠诲姟杩囨湡涓嶆墽琛岃皟搴�</li>
-                <li>浼樺寲瀛楀吀鏁版嵁浣跨敤store瀛樺彇</li>
-                <li>浼樺寲淇敼璧勬枡澶村儚琚鐩栫殑闂</li>
-                <li>浼樺寲淇敼鐢ㄦ埛鐧诲綍璐﹀彿閲嶅楠岃瘉</li>
-                <li>浼樺寲浠g爜鐢熸垚鍚屾鍚庡�糔ULL闂</li>
-                <li>浼樺寲瀹氭椂浠诲姟鏀寔鎵ц鐖剁被鏂规硶</li>
-                <li>浼樺寲鐢ㄦ埛涓汉淇℃伅鎺ュ彛闃叉淇敼閮ㄩ棬</li>
-                <li>浼樺寲甯冨眬璁剧疆浣跨敤el-drawer鎶藉眽鏄剧ず</li>
-                <li>浼樺寲娌℃湁鏉冮檺鐨勭敤鎴风紪杈戦儴闂ㄧ己灏戞暟鎹�</li>
-                <li>浼樺寲鏃ュ織娉ㄨВ璁板綍闄愬埗璇锋眰鍦板潃鐨勯暱搴�</li>
-                <li>浼樺寲excel/scale灞炴�у鍑哄崟鍏冩牸鏁板�肩被鍨�</li>
-                <li>浼樺寲鏃ュ織鎿嶄綔涓噸缃寜閽椂閲嶅鏌ヨ鐨勯棶棰�</li>
-                <li>浼樺寲澶氫釜鐩稿悓瑙掕壊鏁版嵁瀵艰嚧鏉冮檺SQL閲嶅闂</li>
-                <li>浼樺寲琛ㄦ牸涓婂彸渚у伐鍏锋潯锛堟悳绱㈡寜閽樉闅�&鍙充晶鏍峰紡鍑稿嚭锛�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.3 - 2022-06-27">
-              <ol>
-                <li>鏂板缂撳瓨鍒楄〃鑿滃崟鍔熻兘</li>
-                <li>浠g爜鐢熸垚鏍戣〃鏂板(灞曞紑/鎶樺彔)</li>
-                <li>Excel娉ㄨВ鏀寔color瀛椾綋棰滆壊</li>
-                <li>鏂板Anonymous鍖垮悕璁块棶涓嶉壌鏉冩敞瑙�</li>
-                <li>鐢ㄦ埛澶村儚涓婁紶闄愬埗鍙兘涓哄浘鐗囨牸寮�</li>
-                <li>鎺ュ彛浣跨敤娉涘瀷浣垮叾鐪嬪埌鍝嶅簲灞炴�у瓧娈�</li>
-                <li>妫�鏌ュ畾鏃朵换鍔ean鎵�鍦ㄥ寘鍚嶆槸鍚︿负鐧藉悕鍗曢厤缃�</li>
-                <li>娣诲姞椤电openPage鏀寔浼犻�掑弬鏁�</li>
-                <li>鐢ㄦ埛缂撳瓨淇℃伅娣诲姞閮ㄩ棬ancestors绁栫骇鍒楄〃</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.8</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.1.6</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.11</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.8</li>
-                <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.14</li>
-                <li>闄嶇骇jsencrypt鐗堟湰鍏煎IE娴忚鍣�</li>
-                <li>鍒犻櫎澶氫綑鐨剆alt瀛楁</li>
-                <li>鏂板鑾峰彇涓嶅甫鍚庣紑鏂囦欢鍚嶇О鏂规硶</li>
-                <li>鏂板鑾峰彇閰嶇疆鏂囦欢涓殑灞炴�у�兼柟娉�</li>
-                <li>鏂板鍐呭缂栫爜/瑙g爜鏂逛究鎻掍欢闆嗘垚浣跨敤</li>
-                <li>瀛楀吀绫诲瀷蹇呴』浠ュ瓧姣嶅紑澶达紝涓斿彧鑳戒负锛堝皬鍐欏瓧姣嶏紝鏁板瓧锛屼笅婊戠嚎锛�</li>
-                <li>浼樺寲璁剧疆鍒嗛〉鍙傛暟榛樿鍊�</li>
-                <li>浼樺寲瀵圭┖瀛楃涓插弬鏁板鐞嗙殑杩囨护</li>
-                <li>浼樺寲鏄剧ず椤哄簭orderNum绫诲瀷涓烘暣鍨�</li>
-                <li>浼樺寲琛ㄥ崟鏋勫缓鎸夐挳涓嶆樉绀烘鍒欐牎楠�</li>
-                <li>浼樺寲瀛楀吀鏁版嵁鍥炴樉鏍峰紡涓嬫媺妗嗘樉绀哄��</li>
-                <li>浼樺寲R鍝嶅簲鎴愬姛鐘舵�佺爜涓庡叏灞�淇濇寔涓�鑷�</li>
-                <li>浼樺寲druid寮�鍚痺all杩囨护鍣ㄥ嚭鐜扮殑寮傚父闂</li>
-                <li>浼樺寲鐢ㄦ埛绠$悊宸︿晶鏍戝瀷缁勪欢澧炲姞閫変腑楂樹寒淇濇寔</li>
-                <li>浼樺寲鏂板鐢ㄦ埛涓庤鑹蹭俊鎭�&鐢ㄦ埛涓庡矖浣嶄俊鎭�昏緫</li>
-                <li>浼樺寲榛樿涓嶅惎鐢ㄥ帇缂╂枃浠剁紦瀛橀槻姝ode_modules杩囧ぇ</li>
-                <li>淇瀛楀吀鏁版嵁鏄剧ず涓嶅叏闂</li>
-                <li>淇鎿嶄綔鏃ュ織鏌ヨ绫诲瀷鏉′欢涓�0鏃朵細鏌ュ埌鎵�鏈夋暟鎹�</li>
-                <li>淇Excel娉ㄨВprompt/combo鍚屾椂浣跨敤涓嶇敓鏁堥棶棰�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.2 - 2022-04-01">
-              <ol>
-                <li>鍓嶇鏀寔璁剧疆鏄惁闇�瑕侀槻姝㈡暟鎹噸澶嶆彁浜�</li>
-                <li>寮�鍚疶opNav娌℃湁瀛愯彍鍗曟儏鍐甸殣钘忎晶杈规爮</li>
-                <li>渚ц竟鏍忚彍鍗曞悕绉拌繃闀挎偓鍋滄樉绀烘爣棰�</li>
-                <li>鐢ㄦ埛璁块棶鎺у埗鏃舵牎楠屾暟鎹潈闄愶紝闃叉瓒婃潈</li>
-                <li>瀵煎嚭Excel鏃跺睆钄藉叕寮忥紝闃叉CSV娉ㄥ叆椋庨櫓</li>
-                <li>缁勪欢ImagePreview鏀寔澶氬浘棰勮鏄剧ず</li>
-                <li>缁勪欢ImageUpload鏀寔澶氬浘鍚屾椂閫夋嫨涓婁紶</li>
-                <li>缁勪欢FileUpload鏀寔澶氭枃浠跺悓鏃堕�夋嫨涓婁紶</li>
-                <li>鏈嶅姟鐩戞帶鏂板杩愯鍙傛暟淇℃伅鏄剧ず</li>
-                <li>瀹氭椂浠诲姟鐩爣瀛楃涓茶繃婊ょ壒娈婂瓧绗�</li>
-                <li>瀹氭椂浠诲姟鐩爣瀛楃涓查獙璇佸寘鍚嶇櫧鍚嶅崟</li>
-                <li>浠g爜鐢熸垚鍒楄〃鍥剧墖鏀寔棰勮</li>
-                <li>浠g爜鐢熸垚缂栬緫淇敼鎵撳紑鏂伴〉绛�</li>
-                <li>浠g爜鐢熸垚鏂板Java绫诲瀷Boolean</li>
-                <li>浠g爜鐢熸垚瀛愯〃鏀寔鏃ユ湡/瀛楀吀閰嶇疆</li>
-                <li>浠g爜鐢熸垚鍚屾淇濈暀蹇呭~/绫诲瀷閫夐」</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.1.2</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.80</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.1</li>
-                <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.11</li>
-                <li>鍗囩骇spring-boot-mybatis鍒版渶鏂扮増2.2.2</li>
-                <li>娣诲姞閬楁紡鐨勫垎椤靛弬鏁板悎鐞嗗寲灞炴��</li>
-                <li>淇敼npm鍗冲皢杩囨湡鐨勬敞鍐屾簮鍦板潃</li>
-                <li>淇鍒嗛〉缁勪欢璇锋眰涓ゆ闂</li>
-                <li>淇閫氱敤鏂囦欢涓嬭浇鎺ュ彛璺ㄥ煙闂</li>
-                <li>淇Xss娉ㄨВ瀛楁鍊间负绌烘椂鐨勫紓甯搁棶棰�</li>
-                <li>淇閫夐」鍗$偣鍑诲彸閿埛鏂颁涪澶卞弬鏁伴棶棰�</li>
-                <li>淇琛ㄥ崟娓呴櫎鍏冪礌浣嶇疆鏈瀭鐩村眳涓棶棰�</li>
-                <li>淇鏈嶅姟鐩戞帶涓繍琛屽弬鏁版樉绀烘潯浠堕敊璇�</li>
-                <li>淇瀵煎叆Excel鏃跺瓧鍏稿瓧娈电被鍨嬩负Long杞箟涓虹┖闂</li>
-                <li>淇鐧诲綍瓒呮椂鍒锋柊椤甸潰璺宠浆鐧诲綍椤甸潰杩樻彁绀洪噸鏂扮櫥褰曢棶棰�</li>
-                <li>浼樺寲鍔犺浇瀛楀吀缂撳瓨鏁版嵁</li>
-                <li>浼樺寲IP鍦板潃鑾峰彇鍒板涓殑闂</li>
-                <li>浼樺寲浠诲姟闃熷垪婊℃椂浠诲姟鎷掔粷绛栫暐</li>
-                <li>浼樺寲鏂囦欢涓婁紶鍏煎Weblogic鐜</li>
-                <li>浼樺寲瀹氭椂浠诲姟榛樿淇濆瓨鍒板唴瀛樹腑鎵ц</li>
-                <li>浼樺寲閮ㄩ棬淇敼缂╂斁鍚庡嚭鐜扮殑閿欎綅闂</li>
-                <li>浼樺寲Excel鏍煎紡鍖栦笉鍚岀被鍨嬬殑鏃ユ湡瀵硅薄</li>
-                <li>浼樺寲鑿滃崟琛ㄥ叧閿瓧瀵艰嚧鐨勬彃浠舵姤閿欓棶棰�</li>
-                <li>浼樺寲Oracle鐢ㄦ埛澶村儚鍒椾负绌烘椂涓嶆樉绀洪棶棰�</li>
-                <li>浼樺寲椤甸潰鑻ユ湭鍖归厤鍒板瓧鍏告爣绛惧垯杩斿洖鍘熷瓧鍏稿��</li>
-                <li>浼樺寲淇鐧诲綍澶辨晥鍚庡娆¤姹傛彁绀哄娆″脊绐楅棶棰�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.1 - 2022-01-01">
-              <ol>
-                <li>鏂板Vue3鍓嶇浠g爜鐢熸垚妯℃澘</li>
-                <li>鏂板鍥剧墖棰勮缁勪欢</li>
-                <li>鏂板鍘嬬缉鎻掍欢瀹炵幇鎵撳寘Gzip</li>
-                <li>鑷畾涔墄ss鏍¢獙娉ㄨВ瀹炵幇</li>
-                <li>鑷畾涔夋枃瀛楀鍒跺壀璐存寚浠�</li>
-                <li>浠g爜鐢熸垚棰勮鏀寔澶嶅埗鍐呭</li>
-                <li>璺敱鏀寔鍗曠嫭閰嶇疆鑿滃崟鎴栬鑹叉潈闄�</li>
-                <li>鐢ㄦ埛绠$悊閮ㄩ棬鏌ヨ閫夋嫨鑺傜偣鍚庡垎椤靛弬鏁板垵濮�</li>
-                <li>淇鐢ㄦ埛鍒嗛厤瑙掕壊灞炴�ч敊璇�</li>
-                <li>淇鎵撳寘鍚庡瓧浣撳浘鏍囧伓鐜扮殑涔辩爜闂</li>
-                <li>淇鑿滃崟绠$悊閲嶇疆琛ㄥ崟鍑虹幇鐨勯敊璇�</li>
-                <li>淇鐗堟湰宸紓瀵艰嚧鐨勬噿鍔犺浇鎶ラ敊闂</li>
-                <li>淇Cron缁勪欢涓懆鍥炴樉闂</li>
-                <li>淇瀹氭椂浠诲姟澶氬弬鏁伴�楀彿鍒嗛殧鐨勯棶棰�</li>
-                <li>淇鏍规嵁ID鏌ヨ鍒楄〃鍙兘鍑虹幇鐨勪富閿孩鍑洪棶棰�</li>
-                <li>淇tomcat閰嶇疆鍙傛暟宸茶繃鏈熼棶棰�</li>
-                <li>鍗囩骇clipboard鍒版渶鏂扮増鏈�2.0.8</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.6</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.79</li>
-                <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.8</li>
-                <li>鍗囩骇log4j2鍒�2.17.1锛岄槻姝㈡紡娲為闄�</li>
-                <li>浼樺寲涓嬭浇瑙f瀽blob寮傚父鎻愮ず</li>
-                <li>浼樺寲浠g爜鐢熸垚瀛楀吀缁勯噸澶嶉棶棰�</li>
-                <li>浼樺寲鏌ヨ鐢ㄦ埛鐨勮鑹茬粍&宀椾綅缁勪唬鐮�</li>
-                <li>浼樺寲瀹氭椂浠诲姟cron琛ㄨ揪寮忓皬鏃惰缃�24</li>
-                <li>浼樺寲鐢ㄦ埛瀵煎叆鎻愮ず婧㈠嚭鍒欐樉绀烘粴鍔ㄦ潯</li>
-                <li>浼樺寲闃查噸澶嶆彁浜ゆ爣璇嗙粍鍚堜负(key+url+header)</li>
-                <li>浼樺寲鍒嗛〉鏂规硶璁剧疆鎴愰�氱敤鏂逛究鐏垫椿璋冪敤</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.0 - 2021-12-01">
-              <ol>
-                <li>鏂板閰嶅骞跺悓姝ョ殑Vue3鍓嶇鐗堟湰</li>
-                <li>鏂板閫氱敤鏂规硶绠�鍖栨ā鎬�/缂撳瓨/涓嬭浇/鏉冮檺/椤电浣跨敤</li>
-                <li>浼樺寲瀵煎嚭鏁版嵁/浣跨敤閫氱敤涓嬭浇鏂规硶</li>
-                <li>Excel娉ㄨВ鏀寔鑷畾涔夋暟鎹鐞嗗櫒</li>
-                <li>Excel娉ㄨВ鏀寔瀵煎叆瀵煎嚭鏍囬淇℃伅</li>
-                <li>Excel瀵煎叆鏀寔@Excels娉ㄨВ</li>
-                <li>鏂板缁勪欢data-dict锛岀畝鍖栨暟鎹瓧鍏镐娇鐢�</li>
-                <li>鏂板Jaxb渚濊禆锛岄槻姝dk8浠ヤ笂鍑虹幇鐨勫吋瀹归敊璇�</li>
-                <li>鐢熶骇鐜浣跨敤璺敱鎳掑姞杞芥彁鍗囬〉闈㈠搷搴旈�熷害</li>
-                <li>淇浜旂骇浠ヤ笂鑿滃崟鍑虹幇鐨�404闂</li>
-                <li>闃查噸鎻愪氦娉ㄨВ鏀寔閰嶇疆闂撮殧鏃堕棿/鎻愮ず娑堟伅</li>
-                <li>鏃ュ織娉ㄨВ鏂板鏄惁淇濆瓨鍝嶅簲鍙傛暟</li>
-                <li>浠诲姟灞忚斀杩濊瀛楃&鍙傛暟蹇界暐鍙屽紩鍙蜂腑鐨勯�楀彿</li>
-                <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.5.6</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.0</li>
-                <li>鍗囩骇spring-boot-mybatis鍒版渶鏂扮増2.2.0</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.2</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増1.2.8</li>
-                <li>鍗囩骇velocity鍒版渶鏂扮増鏈�2.3</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.78</li>
-                <li>鍗囩骇axios鍒版渶鏂扮増鏈�0.24.0</li>
-                <li>鍗囩骇dart-sass鍒扮増鏈�1.32.13</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.19.1</li>
-                <li>鍗囩骇jsencrypt鍒版渶鏂扮増鏈�3.2.1</li>
-                <li>鍗囩骇js-cookie鍒版渶鏂扮増鏈�3.0.1</li>
-                <li>鍗囩骇file-saver鍒版渶鏂扮増鏈�2.0.5</li>
-                <li>鍗囩骇sass-loader鍒版渶鏂扮増鏈�10.1.1</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.6</li>
-                <li>鏂板sendGet鏃犲弬璇锋眰鏂规硶</li>
-                <li>绂佺敤el-tag缁勪欢鐨勬笎鍙樺姩鐢�</li>
-                <li>浠g爜鐢熸垚鐐瑰嚮棰勮閲嶇疆婵�娲籺ab</li>
-                <li>AjaxResult閲嶅啓put鏂规硶锛屼互鏂逛究閾惧紡璋冪敤</li>
-                <li>浼樺寲鐧诲綍/楠岃瘉鐮佽姹俬eaders涓嶈缃畉oken</li>
-                <li>浼樺寲鐢ㄦ埛涓汉淇℃伅鎺ュ彛闃叉淇敼鐢ㄦ埛鍚�</li>
-                <li>浼樺寲Cron琛ㄨ揪寮忕敓鎴愬櫒鍏抽棴鏃堕攢姣侀伩鍏嶇紦瀛�</li>
-                <li>浼樺寲娉ㄥ唽鎴愬姛鎻愮ず娑堟伅绫诲瀷success</li>
-                <li>浼樺寲aop璇硶锛屼娇鐢╯pring鑷姩娉ㄥ叆娉ㄨВ</li>
-                <li>浼樺寲璁板綍鐧诲綍淇℃伅锛岀Щ闄や笉蹇呰鐨勪慨鏀�</li>
-                <li>浼樺寲mybatis鍏ㄥ眬榛樿鐨勬墽琛屽櫒</li>
-                <li>浼樺寲Excel瀵煎叆鍥剧墖鍙兘鍑虹幇鐨勫紓甯�</li>
-                <li>淇浠g爜鐢熸垚妯℃澘涓诲瓙琛ㄥ垹闄ょ己灏戜簨鍔�</li>
-                <li>淇鏃ュ織璁板綍鍙兘鍑虹幇鐨勮浆鎹㈠紓甯�</li>
-                <li>淇浠g爜鐢熸垚澶嶉�夋瀛楀吀閬楁紡闂</li>
-                <li>淇鍏抽棴xss鍔熻兘瀵艰嚧鍙噸澶嶈RepeatableFilter澶辨晥</li>
-                <li>淇瀛楃涓叉棤娉曡鍙嶈浆涔夐棶棰�</li>
-                <li>淇鍚庣涓诲瓙琛ㄤ唬鐮佹ā鏉挎柟娉曞悕鐢熸垚閿欒闂</li>
-                <li>淇xss杩囨护鍚庢牸寮忓嚭鐜扮殑寮傚父</li>
-                <li>淇swagger娌℃湁鎸囧畾dataTypeClass瀵艰嚧鍚姩鍑虹幇warn鏃ュ織</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.7.0 - 2021-09-13">
-              <ol>
-                <li>鍙傛暟绠$悊鏀寔閰嶇疆楠岃瘉鐮佸紑鍏�</li>
-                <li>鏂板鏄惁寮�鍚敤鎴锋敞鍐屽姛鑳�</li>
-                <li>瀹氭椂浠诲姟鏀寔鍦ㄧ嚎鐢熸垚cron琛ㄨ揪寮�</li>
-                <li>鑿滃崟绠$悊鏀寔閰嶇疆璺敱鍙傛暟</li>
-                <li>鏀寔鑷畾涔夋敞瑙e疄鐜版帴鍙i檺娴�</li>
-                <li>Excel娉ㄨВ鏀寔Image鍥剧墖瀵煎叆</li>
-                <li>鑷畾涔夊脊灞傛孩鍑烘粴鍔ㄦ牱寮�</li>
-                <li>鑷畾涔夊彲鎷栧姩寮圭獥瀹藉害鎸囦护</li>
-                <li>鑷畾涔夊彲鎷栧姩寮圭獥楂樺害鎸囦护</li>
-                <li>淇浠绘剰璐︽埛瓒婃潈闂</li>
-                <li>淇敼鏃舵鏌ョ敤鎴锋暟鎹潈闄愯寖鍥�</li>
-                <li>淇淇濆瓨閰嶇疆涓婚棰滆壊澶辨晥闂</li>
-                <li>鏂板鏆楄壊鑿滃崟椋庢牸涓婚</li>
-                <li>鑿滃崟&閮ㄩ棬鏂板灞曞紑/鎶樺彔鍔熻兘</li>
-                <li>椤电鏂板鍏抽棴宸︿晶&娣诲姞鍥炬爣</li>
-                <li>椤堕儴鑿滃崟鎺掗櫎闅愯棌鐨勯粯璁よ矾鐢�</li>
-                <li>椤堕儴鑿滃崟鍚屾绯荤粺涓婚鏍峰紡</li>
-                <li>璺宠浆璺敱楂樹寒鐩稿搴旂殑鑿滃崟鏍�</li>
-                <li>浠g爜鐢熸垚涓诲瓙琛ㄥ閫夎鏁版嵁</li>
-                <li>鏃ユ湡鑼冨洿鏀寔娣诲姞澶氱粍</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.5</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.0</li>
-                <li>鍗囩骇commons.io鍒版渶鏂扮増鏈瑅2.11.0</li>
-                <li>瀹氭椂浠诲姟灞忚斀ldap杩滅▼璋冪敤</li>
-                <li>瀹氭椂浠诲姟灞忚斀http(s)杩滅▼璋冪敤</li>
-                <li>琛ュ厖瀹氭椂浠诲姟琛ㄥ瓧娈垫敞閲�</li>
-                <li>瀹氭椂浠诲姟瀵规鏌ュ紓甯歌繘琛屼簨鍔″洖婊�</li>
-                <li>鍚敤鐖堕儴闂ㄧ姸鎬佹帓闄ら《绾ц妭鐐�</li>
-                <li>瀵屾枃鏈柊澧炰笂浼犳枃浠跺ぇ灏忛檺鍒�</li>
-                <li>榛樿棣栭〉浣跨敤keep-alive缂撳瓨</li>
-                <li>淇敼浠g爜鐢熸垚瀛楀吀鍥炴樉鏍峰紡</li>
-                <li>鑷畾涔夊垎椤靛悎鐞嗗寲浼犲叆鍙傛暟</li>
-                <li>淇瀛楀吀缁勪欢鍊间负鏁村舰涓嶆樉绀洪棶棰�</li>
-                <li>淇瀹氭椂浠诲姟鏃ュ織鎵ц鐘舵�佹樉绀�</li>
-                <li>瑙掕壊&鑿滃崟鏂板瀛楁灞炴�ф彁绀轰俊鎭�</li>
-                <li>淇瑙掕壊鍒嗛厤鐢ㄦ埛椤甸潰鍙傛暟绫诲瀷閿欒鎻愰啋</li>
-                <li>浼樺寲甯冨眬璁剧疆鍔ㄧ敾鐗规晥</li>
-                <li>浼樺寲寮傚父澶勭悊淇℃伅</li>
-                <li>浼樺寲閿欒token瀵艰嚧鐨勮В鏋愬紓甯�</li>
-                <li>瀵嗙爜妗嗘柊澧炴樉绀哄垏鎹㈠瘑鐮佸浘鏍�</li>
-                <li>瀹氭椂浠诲姟鏂板鏇村鎿嶄綔</li>
-                <li>鏇村鎿嶄綔鎸夐挳娣诲姞鏉冮檺鎺у埗</li>
-                <li>瀵煎叆鐢ㄦ埛鏍峰紡浼樺寲</li>
-                <li>鎻愬彇閫氱敤鏂规硶鍒板熀绫绘帶鍒跺櫒</li>
-                <li>浼樺寲浣跨敤鏉冮檺宸ュ叿鑾峰彇鐢ㄦ埛淇℃伅</li>
-                <li>浼樺寲鐢ㄦ埛涓嶈兘鍒犻櫎鑷繁</li>
-                <li>浼樺寲XSS璺ㄧ珯鑴氭湰杩囨护</li>
-                <li>浼樺寲浠g爜鐢熸垚妯℃澘</li>
-                <li>楠岃瘉鐮侀粯璁�20s瓒呮椂</li>
-                <li>BLOB涓嬭浇鏃舵竻闄RL瀵硅薄寮曠敤</li>
-                <li>浠g爜鐢熸垚瀵煎叆琛ㄦ寜鍒涘缓鏃堕棿鎺掑簭</li>
-                <li>淇浠g爜鐢熸垚椤甸潰鏁版嵁缂栬緫淇濆瓨涔嬪悗鎬绘槸璺宠浆绗竴椤电殑闂</li>
-                <li>淇甯afari娴忚鍣ㄦ棤娉曟牸寮忓寲utc鏃ユ湡鏍煎紡yyyy-MM-dd'T'HH:mm:ss.SSS闂</li>
-                <li>澶氬浘涓婁紶缁勪欢绉婚櫎澶氫綑鐨刟pi鍦板潃&楠岃瘉澶辫触瀵艰嚧鍥剧墖鍒犻櫎闂&鏃犳硶鍒犻櫎鐩稿簲鍥剧墖淇</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.6.0 - 2021-07-12">
-              <ol>
-                <li>瑙掕壊绠$悊鏂板鍒嗛厤鐢ㄦ埛鍔熻兘</li>
-                <li>鐢ㄦ埛绠$悊鏂板鍒嗛厤瑙掕壊鍔熻兘</li>
-                <li>鏃ュ織鍒楄〃鏀寔鎺掑簭鎿嶄綔</li>
-                <li>浼樺寲鍙傛暟&瀛楀吀缂撳瓨鎿嶄綔</li>
-                <li>绯荤粺甯冨眬閰嶇疆鏀寔鍔ㄦ�佹爣棰樺紑鍏�</li>
-                <li>鑿滃崟璺敱閰嶇疆鏀寔鍐呴摼璁块棶</li>
-                <li>榛樿璁块棶鍚庣棣栭〉鏂板鎻愮ず璇�</li>
-                <li>瀵屾枃鏈粯璁や笂浼犺繑鍥瀠rl绫诲瀷</li>
-                <li>鏂板鑷畾涔夊脊绐楁嫋鎷芥寚浠�</li>
-                <li>鍏ㄥ眬娉ㄥ唽甯哥敤閫氱敤缁勪欢</li>
-                <li>鍏ㄥ眬鎸傝浇瀛楀吀鏍囩缁勪欢</li>
-                <li>ImageUpload缁勪欢鏀寔澶氬浘鐗囦笂浼�</li>
-                <li>FileUpload缁勪欢鏀寔澶氭枃浠朵笂浼�</li>
-                <li>鏂囦欢涓婁紶缁勪欢娣诲姞鏁伴噺闄愬埗灞炴��</li>
-                <li>瀵屾枃鏈紪杈戠粍浠舵坊鍔犵被鍨嬪睘鎬�</li>
-                <li>瀵屾枃鏈粍浠跺伐鍏锋爮閰嶇疆瑙嗛</li>
-                <li>灏佽閫氱敤iframe缁勪欢</li>
-                <li>闄愬埗瓒呯骇绠$悊鍛樹笉鍏佽鎿嶄綔</li>
-                <li>鐢ㄦ埛淇℃伅闀垮害鏍¢獙闄愬埗</li>
-                <li>鍒嗛〉缁勪欢鏂板pagerCount灞炴��</li>
-                <li>娣诲姞bat鑴氭湰鎵ц搴旂敤</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.7.4</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.2</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.3.1</li>
-                <li>鍗囩骇commons.io鍒版渶鏂扮増鏈瑅2.10.0</li>
-                <li>鍗囩骇commons.fileupload鍒版渶鏂扮増鏈瑅1.4</li>
-                <li>鍗囩骇swagger鍒版渶鏂扮増鏈瑅3.0.0</li>
-                <li>淇鍏抽棴confirm鎻愮ず妗嗘帶鍒跺彴鎶ラ敊闂</li>
-                <li>淇瀛樺湪鐨凷QL娉ㄥ叆婕忔礊闂</li>
-                <li>瀹氭椂浠诲姟灞忚斀rmi杩滅▼璋冪敤</li>
-                <li>淇鐢ㄦ埛鎼滅储鍒嗛〉鍙橀噺閿欒</li>
-                <li>淇瀵煎嚭瑙掕壊鏁版嵁鑼冨洿缈昏瘧缂哄皯浠呮湰浜�</li>
-                <li>淇琛ㄥ崟鏋勫缓閫夋嫨涓嬫媺閫夋嫨鎺у埗鍙版姤閿欓棶棰�</li>
-                <li>浼樺寲鍥剧墖宸ュ叿绫昏鍙栨枃浠�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.5.0 - 2021-05-25">
-              <ol>
-                <li>鏂板鑿滃崟瀵艰埅鏄剧ず椋庢牸TopNav锛坒alse涓哄乏渚у鑸彍鍗曪紝true涓洪《閮ㄥ鑸彍鍗曪級</li>
-                <li>甯冨眬璁剧疆鏀寔淇濆瓨&閲嶇疆閰嶇疆</li>
-                <li>淇鏍戣〃鏁版嵁鏄剧ず涓嶅叏&鍔犺浇鎱㈤棶棰�</li>
-                <li>鏂板IE娴忚鍣ㄧ増鏈繃浣庢彁绀洪〉闈�</li>
-                <li>鐢ㄦ埛鐧诲綍鍚庤褰曟渶鍚庣櫥褰旾P&鏃堕棿</li>
-                <li>椤甸潰瀵煎嚭鎸夐挳鐐瑰嚮涔嬪悗娣诲姞閬僵</li>
-                <li>瀵屾枃鏈紪杈戝櫒鏀寔鑷畾涔変笂浼犲湴鍧�</li>
-                <li>瀵屾枃鏈紪杈戠粍浠舵柊澧瀝eadOnly灞炴��</li>
-                <li>椤电TagsView鏂板鍏抽棴鍙充晶鍔熻兘</li>
-                <li>鏄鹃殣鍒楃粍浠跺姞杞藉垵濮嬮粯璁ら殣钘忓垪</li>
-                <li>鍏抽棴澶村儚涓婁紶绐楀彛杩樺師榛樿鍥剧墖</li>
-                <li>涓汉淇℃伅娣诲姞鎵嬫満&閭閲嶅楠岃瘉</li>
-                <li>浠g爜鐢熸垚妯℃澘瀵煎嚭鎸夐挳鐐瑰嚮鍚庢坊鍔犻伄缃�</li>
-                <li>浠g爜鐢熸垚妯℃澘鏍戣〃鎿嶄綔鍒楁坊鍔犳柊澧炴寜閽�</li>
-                <li>浠g爜鐢熸垚妯℃澘淇涓诲瓙琛ㄥ瓧娈甸噸鍚嶉棶棰�</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.76</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.6</li>
-                <li>鍗囩骇mybatis鍒版渶鏂扮増3.5.6 闃绘杩滅▼浠g爜鎵ц婕忔礊</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.6.0</li>
-                <li>velocity鍓旈櫎commons-collections鐗堟湰锛岄槻姝�3.2.1鐗堟湰鐨勫弽搴忓垪鍖栨紡娲�</li>
-                <li>鏁版嵁鐩戞帶椤甸粯璁よ处鎴峰瘑鐮侀槻姝㈣秺鏉冭闂�</li>
-                <li>淇firefox涓嬭〃鍗曟瀯寤烘嫋鎷戒細鏂版墦鍗′竴涓�夐」鍗�</li>
-                <li>淇鍚庣瀵煎叆琛ㄦ潈闄愭爣璇�</li>
-                <li>淇鍓嶇鎿嶄綔鏃ュ織&鐧诲綍鏃ュ織鏉冮檺鏍囪瘑</li>
-                <li>璁剧疆Redis閰嶇疆HashKey搴忓垪鍖�</li>
-                <li>鍒犻櫎鎿嶄綔鏃ュ織璁板綍淇℃伅</li>
-                <li>涓婁紶濯掍綋绫诲瀷娣诲姞瑙嗛鏍煎紡</li>
-                <li>淇璇锋眰褰㈠弬鏈紶鍊艰褰曟棩蹇楀紓甯搁棶棰�</li>
-                <li>浼樺寲xss鏍¢獙json璇锋眰鏉′欢</li>
-                <li>鏍戠骇缁撴瀯鏇存柊瀛愯妭鐐逛娇鐢╮eplaceFirst</li>
-                <li>浼樺寲ExcelUtil绌哄�煎鐞�</li>
-                <li>鏃ュ織璁板綍杩囨护BindingResult瀵硅薄锛岄槻姝㈠紓甯�</li>
-                <li>淇敼涓婚鍚巑ini绫诲瀷鎸夐挳鏃犳晥闂</li>
-                <li>浼樺寲閫氱敤涓嬭浇瀹屾垚鍚庡垹闄よ妭鐐�</li>
-                <li>閫氱敤Controller娣诲姞鍝嶅簲杩斿洖娑堟伅</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.4.0 - 2021-02-22">
-              <ol>
-                <li>浠g爜鐢熸垚妯℃澘鏀寔涓诲瓙琛�</li>
-                <li>琛ㄦ牸鍙充晶宸ュ叿鏍忕粍浠舵敮鎸佹樉闅愬垪</li>
-                <li>鍥剧墖缁勪欢娣诲姞棰勮&绉婚櫎鍔熻兘</li>
-                <li>Excel娉ㄨВ鏀寔Image鍥剧墖瀵煎嚭</li>
-                <li>鎿嶄綔鎸夐挳缁勮皟鏁翠负鏈寸礌鎸夐挳鏍峰紡</li>
-                <li>浠g爜鐢熸垚鏀寔鏂囦欢涓婁紶缁勪欢</li>
-                <li>浠g爜鐢熸垚鏃ユ湡鎺т欢鍖哄垎鑼冨洿</li>
-                <li>浠g爜鐢熸垚鏁版嵁搴撴枃鏈被鍨嬬敓鎴愯〃鍗曟枃鏈煙</li>
-                <li>鐢ㄦ埛鎵嬫満閭&鑿滃崟缁勪欢淇敼鍏佽绌哄瓧绗︿覆</li>
-                <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.2.13 鎻愬崌鍚姩閫熷害</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.4</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.75</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.0</li>
-                <li>淇IE11娴忚鍣ㄦ姤閿欓棶棰�</li>
-                <li>浼樺寲澶氱骇鑿滃崟涔嬮棿鍒囨崲鏃犳硶缂撳瓨鐨勯棶棰�</li>
-                <li>淇鍥涚骇鑿滃崟鏃犳硶鏄剧ず闂</li>
-                <li>淇渚ц竟鏍忛潤鎬佽矾鐢变涪澶遍棶棰�</li>
-                <li>淇瑙掕壊绠$悊-缂栬緫瑙掕壊-鍔熻兘鏉冮檺鏄剧ず寮傚父</li>
-                <li>閰嶇疆鏂囦欢鏂板redis鏁版嵁搴撶储寮曞睘鎬�</li>
-                <li>鏉冮檺宸ュ叿绫诲鍔燼dmin鍒ゆ柇</li>
-                <li>瑙掕壊闈炶嚜瀹氫箟鏉冮檺鑼冨洿娓呯┖閫夋嫨鍊�</li>
-                <li>淇瀵煎叆鏁版嵁涓鸿礋娴偣鏁版椂涓㈠け绮惧害闂</li>
-                <li>绉婚櫎path-to-regexp姝e垯鍖归厤鎻掍欢</li>
-                <li>淇鐢熸垚鏍戣〃浠g爜寮傚父</li>
-                <li>淇敼ip瀛楁闀垮害闃叉ipv6鍦板潃闀垮害涓嶅</li>
-                <li>闃叉get璇锋眰鍙傛暟鍊间负false鎴�0绛夌壒娈婂�间細瀵艰嚧鏃犳硶姝g‘鐨勪紶鍙�</li>
-                <li>鐧诲綍鍚巔ush娣诲姞catch闃叉鍑虹幇妫�鏌ラ敊璇�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.3.0 - 2020-12-14">
-              <ol>
-                <li>鏂板缂撳瓨鐩戞帶鍔熻兘</li>
-                <li>鏀寔涓婚椋庢牸閰嶇疆</li>
-                <li>淇澶氱骇鑿滃崟涔嬮棿鍒囨崲鏃犳硶缂撳瓨鐨勯棶棰�</li>
-                <li>澶氱骇鑿滃崟鑷姩閰嶇疆缁勪欢</li>
-                <li>浠g爜鐢熸垚棰勮鏀寔楂樹寒鏄剧ず</li>
-                <li>鏀寔Get璇锋眰鏄犲皠Params鍙傛暟</li>
-                <li>鍒犻櫎鐢ㄦ埛鍜岃鑹茶В缁戝叧鑱�</li>
-                <li>鍘婚櫎鐢ㄦ埛鎵嬫満閭閮ㄩ棬蹇呭~楠岃瘉</li>
-                <li>Excel鏀寔娉ㄨВalign瀵归綈鏂瑰紡</li>
-                <li>Excel鏀寔瀵煎叆Boolean鍨嬫暟鎹�</li>
-                <li>浼樺寲澶村儚鏍峰紡锛岄紶鏍囩Щ鍏ユ偓鍋滈伄缃�</li>
-                <li>浠g爜鐢熸垚棰勮鎻愪緵婊氬姩鏈哄埗</li>
-                <li>浠g爜鐢熸垚鍒犻櫎澶氫綑鐨勬暟瀛梖loat绫诲瀷</li>
-                <li>淇杞崲瀛楃涓茬殑鐩爣瀛楃闆嗗睘鎬�</li>
-                <li>鍥炴樉鏁版嵁瀛楀吀闃叉绌哄�兼姤閿�</li>
-                <li>鏃ュ織璁板綍澧炲姞杩囨护澶氭枃浠跺満鏅�</li>
-                <li>淇敼缂撳瓨Set鏂规硶鍙兘瀵艰嚧宓屽鐨勯棶棰�</li>
-                <li>绉婚櫎鍓嶇涓�浜涘浣欑殑渚濊禆</li>
-                <li>闃叉瀹夊叏鎵弿YUI鍑虹幇鐨勯闄╂彁绀�</li>
-                <li>淇敼node-sass涓篸art-sass</li>
-                <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.1.18</li>
-                <li>鍗囩骇poi鍒版渶鏂扮増鏈�4.1.2</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.3.6</li>
-                <li>鍗囩骇bitwalker鍒版渶鏂扮増鏈�1.21</li>
-                <li>鍗囩骇axios鍒版渶鏂扮増鏈�0.21.0</li>
-                <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.14.1</li>
-                <li>鍗囩骇vue鍒版渶鏂扮増鏈�2.6.12</li>
-                <li>鍗囩骇vuex鍒版渶鏂扮増鏈�3.6.0</li>
-                <li>鍗囩骇vue-cli鍒扮増鏈�4.5.9</li>
-                <li>鍗囩骇vue-router鍒版渶鏂扮増鏈�3.4.9</li>
-                <li>鍗囩骇vue-cli鍒版渶鏂扮増鏈�4.4.6</li>
-                <li>鍗囩骇vue-cropper鍒版渶鏂扮増鏈�0.5.5</li>
-                <li>鍗囩骇clipboard鍒版渶鏂扮増鏈�2.0.6</li>
-                <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.8.1</li>
-                <li>鍗囩骇echarts鍒版渶鏂扮増鏈�4.9.0</li>
-                <li>鍗囩骇file-saver鍒版渶鏂扮増鏈�2.0.4</li>
-                <li>鍗囩骇fuse.js鍒版渶鏂扮増鏈�6.4.3</li>
-                <li>鍗囩骇js-beautify鍒版渶鏂扮増鏈�1.13.0</li>
-                <li>鍗囩骇js-cookie鍒版渶鏂扮増鏈�2.2.1</li>
-                <li>鍗囩骇path-to-regexp鍒版渶鏂扮増鏈�6.2.0</li>
-                <li>鍗囩骇quill鍒版渶鏂扮増鏈�1.3.7</li>
-                <li>鍗囩骇screenfull鍒版渶鏂扮増鏈�5.0.2</li>
-                <li>鍗囩骇sortablejs鍒版渶鏂扮増鏈�1.10.2</li>
-                <li>鍗囩骇vuedraggable鍒版渶鏂扮増鏈�2.24.3</li>
-                <li>鍗囩骇chalk鍒版渶鏂扮増鏈�4.1.0</li>
-                <li>鍗囩骇eslint鍒版渶鏂扮増鏈�7.15.0</li>
-                <li>鍗囩骇eslint-plugin-vue鍒版渶鏂扮増鏈�7.2.0</li>
-                <li>鍗囩骇lint-staged鍒版渶鏂扮増鏈�10.5.3</li>
-                <li>鍗囩骇runjs鍒版渶鏂扮増鏈�4.4.2</li>
-                <li>鍗囩骇sass-loader鍒版渶鏂扮増鏈�10.1.0</li>
-                <li>鍗囩骇script-ext-html-webpack-plugin鍒版渶鏂扮増鏈�2.1.5</li>
-                <li>鍗囩骇svg-sprite-loader鍒版渶鏂扮増鏈�5.1.1</li>
-                <li>鍗囩骇vue-template-compiler鍒版渶鏂扮増鏈�2.6.12</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.1 - 2020-11-18">
-              <ol>
-                <li>闃绘浠绘剰鏂囦欢涓嬭浇婕忔礊</li>
-                <li>浠g爜鐢熸垚鏀寔涓婁紶鎺т欢</li>
-                <li>鏂板鍥剧墖涓婁紶缁勪欢</li>
-                <li>璋冩暣榛樿棣栭〉</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.2</li>
-                <li>mapperLocations閰嶇疆鏀寔鍒嗛殧绗�</li>
-                <li>鏉冮檺淇℃伅璋冩暣</li>
-                <li>璋冩暣sql榛樿鏃堕棿</li>
-                <li>瑙e喅浠g爜鐢熸垚娌℃湁bit绫诲瀷鐨勯棶棰�</li>
-                <li>鍗囩骇pagehelper鍒版渶鏂扮増1.3.0</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.0 - 2020-10-10">
-              <ol>
-                <li>鍗囩骇springboot鐗堟湰鍒�2.1.17 鎻愬崌瀹夊叏鎬�</li>
-                <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.2.5</li>
-                <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.1</li>
-                <li>鍗囩骇jjwt鍒扮増鏈�0.9.1</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.74</li>
-                <li>淇敼sass涓簄ode-sass锛岄伩鍏峞l-icon鍥炬爣涔辩爜</li>
-                <li>浠g爜鐢熸垚鏀寔鍚屾鏁版嵁搴�</li>
-                <li>浠g爜鐢熸垚鏀寔瀵屾枃鏈帶浠�</li>
-                <li>浠g爜鐢熸垚椤甸潰鏃朵笉蹇界暐remark灞炴��</li>
-                <li>浠g爜鐢熸垚娣诲姞select蹇呭~閫夐」</li>
-                <li>Excel瀵煎嚭绫诲瀷NUMERIC鏀寔绮惧害娴偣绫诲瀷</li>
-                <li>Excel瀵煎嚭targetAttr浼樺寲鑾峰彇鍊硷紝闃叉get鏂规硶涓嶈鑼�</li>
-                <li>Excel娉ㄨВ鏀寔鑷姩缁熻鏁版嵁鎬诲拰</li>
-                <li>Excel娉ㄨВ鏀寔璁剧疆BigDecimal绮惧害&鑸嶅叆瑙勫垯</li>
-                <li>鑿滃崟&鏁版嵁鏉冮檺鏂板锛堝睍寮�/鎶樺彔 鍏ㄩ��/鍏ㄤ笉閫� 鐖跺瓙鑱斿姩锛�</li>
-                <li>鍏佽鐢ㄦ埛鍒嗛厤鍒伴儴闂ㄧ埗鑺傜偣</li>
-                <li>鑿滃崟鏂板鏄惁缂撳瓨keep-alive</li>
-                <li>琛ㄦ牸鎿嶄綔鍒楅棿璺濊皟鏁�</li>
-                <li>闄愬埗绯荤粺鍐呯疆鍙傛暟涓嶅厑璁稿垹闄�</li>
-                <li>瀵屾枃鏈粍浠朵紭鍖栵紝鏀寔鑷畾涔夐珮搴�&鍥剧墖鍐茬獊闂</li>
-                <li>瀵屾枃鏈伐鍏锋爮鏍峰紡瀵归綈</li>
-                <li>瀵煎叆excel鏁村舰鍊兼牎楠屼紭鍖�</li>
-                <li>淇椤电鍏抽棴鎵�鏈夋椂鍥哄畾鏍囩璺敱涓嶅埛鏂伴棶棰�</li>
-                <li>琛ㄥ崟鏋勫缓甯冨眬鍨嬬粍浠舵柊澧炴寜閽�</li>
-                <li>宸︿晶鑿滃崟鏂囧瓧杩囬暱鏄剧ず鐪佺暐鍙�</li>
-                <li>淇鏍硅妭鐐逛负瀛愰儴闂ㄦ椂锛屾爲鐘剁粨鏋勬樉绀洪棶棰�</li>
-                <li>淇璋冪敤鐩爣瀛楃涓叉渶澶ч暱搴�</li>
-                <li>淇鑿滃崟鎻愮ず淇℃伅閿欒</li>
-                <li>淇瀹氭椂浠诲姟鎵ц涓�娆℃潈闄愭爣璇�</li>
-                <li>淇鏁版嵁搴撳瓧绗︿覆绫诲瀷nvarchar</li>
-                <li>浼樺寲閫掑綊瀛愯妭鐐�</li>
-                <li>浼樺寲鏁版嵁鏉冮檺鍒ゆ柇</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v3.1.0 - 2020-08-13">
-              <ol>
-                <li>琛ㄦ牸宸ュ叿鏍忓彸渚ф坊鍔犲埛鏂�&鏄鹃殣鏌ヨ缁勪欢</li>
-                <li>鍚庣鏀寔CORS璺ㄥ煙璇锋眰</li>
-                <li>浠g爜鐢熸垚鏀寔閫夋嫨涓婄骇鑿滃崟</li>
-                <li>浠g爜鐢熸垚鏀寔鑷畾涔夎矾寰�</li>
-                <li>浠g爜鐢熸垚鏀寔澶嶉�夋</li>
-                <li>Excel瀵煎嚭瀵煎叆鏀寔dictType瀛楀吀绫诲瀷</li>
-                <li>Excel鏀寔鍒嗗壊瀛楃涓茬粍鍐呭</li>
-                <li>楠岃瘉鐮佺被鍨嬫敮鎸侊紙鏁扮粍璁$畻銆佸瓧绗﹂獙璇侊級</li>
-                <li>鍗囩骇vue-cli鐗堟湰鍒�4.4.4</li>
-                <li>淇敼 node-sass 涓� dart-sass</li>
-                <li>琛ㄥ崟绫诲瀷涓篒nteger/Long璁剧疆鏁村舰榛樿鍊�</li>
-                <li>浠g爜鐢熸垚鍣ㄩ粯璁apper璺緞涓庨粯璁apperScan璺緞涓嶄竴鑷�</li>
-                <li>浼樺寲闃查噸澶嶆彁浜ゆ嫤鎴櫒</li>
-                <li>浼樺寲涓婄骇鑿滃崟涓嶈兘閫夋嫨鑷繁</li>
-                <li>淇瑙掕壊鐨勬潈闄愬垎閰嶅悗锛屾湭瀹炴椂鐢熸晥闂</li>
-                <li>淇鍦ㄧ嚎鐢ㄦ埛鏃ュ織璁板綍绫诲瀷</li>
-                <li>淇瀵屾枃鏈┖鏍煎拰缂╄繘淇濆瓨鍚庝笉鐢熸晥闂</li>
-                <li>淇鍦ㄧ嚎鐢ㄦ埛鍒ゆ柇閫昏緫</li>
-                <li>鍞竴闄愬埗鏉′欢鍙繑鍥炲崟鏉℃暟鎹�</li>
-                <li>娣诲姞鑾峰彇褰撳墠鐨勭幆澧冮厤缃柟娉�</li>
-                <li>瓒呮椂鐧诲綍鍚庨〉闈㈣烦杞埌棣栭〉</li>
-                <li>鍏ㄥ眬寮傚父鐘舵�佹眽鍖栨嫤鎴鐞�</li>
-                <li>HTML杩囨护鍣ㄦ敼涓哄皢html杞箟</li>
-                <li>妫�鏌ュ瓧绗︽敮鎸佸皬鏁扮偣&闄嶇骇鏀规垚寮傚父鎻愰啋</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v3.0.0 - 2020-07-20">
-              <ol>
-                <li>鍗曞簲鐢ㄨ皟鏁翠负澶氭ā鍧楅」鐩�</li>
-                <li>鍗囩骇element-ui鐗堟湰鍒�2.13.2</li>
-                <li>鍒犻櫎babel锛屾彁楂樼紪璇戦�熷害銆�</li>
-                <li>鏂板鑿滃崟榛樿涓荤被鐩�</li>
-                <li>缂栫爜鏂囦欢鍚嶄慨鏀逛负uuid鏂瑰紡</li>
-                <li>瀹氭椂浠诲姟cron琛ㄨ揪寮忛獙璇�</li>
-                <li>瑙掕壊鏉冮檺淇敼鏃跺凡鏈夋潈闄愭湭鑷姩鍕鹃�夊紓甯镐慨澶�</li>
-                <li>闃叉鍒囨崲鏉冮檺鐢ㄦ埛鍚庣櫥褰曞嚭鐜�404</li>
-                <li>Excel鏀寔sort瀵煎嚭鎺掑簭</li>
-                <li>鍒涘缓鐢ㄦ埛涓嶅厑璁搁�夋嫨瓒呯骇绠$悊鍛樿鑹�</li>
-                <li>淇浠g爜鐢熸垚瀵煎叆琛ㄧ粨鏋勫嚭鐜板紓甯搁〉闈笉鎻愰啋闂</li>
-                <li>淇浠g爜鐢熸垚鐐瑰嚮澶氭琛ㄤ慨鏀规暟鎹笉鍙樺寲鐨勯棶棰�</li>
-                <li>淇澶村儚涓婁紶鎴愬姛浜屾鎵撳紑鏃犳硶鏀瑰彉瑁佸壀妗嗗ぇ灏忓拰浣嶇疆闂</li>
-                <li>淇甯冨眬涓簊mall鑰卪ini鐢ㄦ埛琛ㄥ崟鏄剧ず閿欎綅闂</li>
-                <li>淇鐑儴缃插鑷寸殑寮烘崲寮傚父闂</li>
-                <li>淇敼鐢ㄦ埛绠$悊澶嶉�夋瀹藉害锛岄槻姝㈤儴鍒嗘祻瑙堝櫒鍑虹幇鐪佺暐鍙�</li>
-                <li>IpUtils宸ュ叿锛屾竻闄ss鐗规畩瀛楃锛岄槻姝ff娉ㄥ叆鏀诲嚮</li>
-                <li>鐢熸垚domain 濡傛灉鏄诞鐐瑰瀷 缁熶竴鐢˙igDecimal</li>
-                <li>瀹氭椂浠诲姟璋冩暣label-width锛岄槻姝㈤儴缃插嚭鐜伴敊浣�</li>
-                <li>璋冩暣琛ㄥご鍥哄畾鍒楅粯璁ゆ牱寮�</li>
-                <li>浠g爜鐢熸垚妯℃澘璋冩暣锛屽瓧娈典负String骞朵笖蹇呭~鍒欏姞绌轰覆鏉′欢</li>
-                <li>浠g爜鐢熸垚瀛楀吀Integer/Long浣跨敤parseInt</li>
-                <li>
-                  淇dict_sort涓嶅彲update涓�0鐨勯棶棰�&鏌ヨ杩斿洖澧炲姞dict_sort鍗囧簭鎺掑簭
-                </li>
-                <li>淇宀椾綅瀵煎嚭鏉冮檺娉ㄨВ</li>
-                <li>绂佹鍔犲瘑瀵嗘枃杩斿洖鍓嶇</li>
-                <li>淇浠g爜鐢熸垚椤甸潰涓殑鏌ヨ鏉′欢鍒涘缓鏃堕棿鏈敓鏁堢殑闂</li>
-                <li>淇棣栭〉鎼滅储鑿滃崟澶栭摼鏃犳硶鐐瑰嚮璺宠浆闂</li>
-                <li>淇鑿滃崟绠$悊閫夋嫨鍥炬爣锛宐ackspace鍒犻櫎鏃朵笉杩囨护鏁版嵁</li>
-                <li>鐢ㄦ埛绠$悊閮ㄩ棬鍒嗘敮鑺傜偣涓嶅彲妫�鏌�&鏄剧ず璁℃暟</li>
-                <li>鏁版嵁鑼冨洿杩囨护灞炴�ц皟鏁�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.3.0 - 2020-06-01">
-              <ol>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.70 淇楂樺嵄瀹夊叏婕忔礊</li>
-                <li>dev鍚姩榛樿鎵撳紑娴忚鍣�</li>
-                <li>vue-cli浣跨敤榛樿source-map</li>
-                <li>slidebar eslint鎶ラ敊浼樺寲</li>
-                <li>褰搕ags-view婊氬姩鍏抽棴鍙抽敭鑿滃崟</li>
-                <li>瀛楀吀绠$悊娣诲姞缂撳瓨璇诲彇</li>
-                <li>鍙傛暟绠$悊鏀寔缂撳瓨鎿嶄綔</li>
-                <li>鏀寔涓�绾ц彍鍗曪紙鍜屼富椤靛悓绾э級鍦╩ain鍖哄煙鏄剧ず</li>
-                <li>闄愬埗澶栭摼鍦板潃蹇呴』浠ttp(s)寮�澶�</li>
-                <li>tagview & sidebar 涓婚棰滆壊涓巈lement ui(鍏ㄥ眬)鍚屾</li>
-                <li>淇敼鏁版嵁婧愮被鍨嬩紭鍏堢骇锛屽厛鏍规嵁鏂规硶锛屽啀鏍规嵁绫�</li>
-                <li>鏀寔鏄惁闇�瑕佽缃畉oken灞炴�э紝鑷畾涔夎繑鍥炵爜娑堟伅銆�</li>
-                <li>swagger璇锋眰鍓嶇紑鍔犲叆閰嶇疆銆�</li>
-                <li>鐧诲綍鍦扮偣璁剧疆鍐呭杩囬暱鍒欓殣钘忔樉绀�</li>
-                <li>淇瀹氭椂浠诲姟鎵ц涓�娆℃寜閽悗涓嶆彁绀烘秷鎭棶棰�</li>
-                <li>淇敼涓婄骇閮ㄩ棬锛堥�夋嫨椤规帓闄ゆ湰韬拰涓嬬骇锛�</li>
-                <li>閫氱敤http鍙戦�佹柟娉曞鍔犲弬鏁� contentType 缂栫爜绫诲瀷</li>
-                <li>鏇存崲IP鍦板潃鏌ヨ鎺ュ彛</li>
-                <li>淇椤电鍙橀噺undefined</li>
-                <li>娣诲姞鏍¢獙閮ㄩ棬鍖呭惈鏈仠鐢ㄧ殑瀛愰儴闂�</li>
-                <li>淇敼瀹氭椂浠诲姟璇︽儏涓嬫鎵ц鏃堕棿鏃ユ湡鏄剧ず閿欒</li>
-                <li>瑙掕壊绠$悊鏌ヨ璁剧疆榛樿鎺掑簭瀛楁</li>
-                <li>swagger娣诲姞enable鍙傛暟鎺у埗鏄惁鍚敤</li>
-                <li>鍙json绫诲瀷璇锋眰鏋勫缓鍙噸澶嶈鍙杋nputStream鐨剅equest</li>
-                <li>淇敼浠g爜鐢熸垚瀛楀吀瀛楁int绫诲瀷娌℃湁鑷姩閫変腑闂</li>
-                <li>vuex鐢ㄦ埛鍚嶅彇鍊间慨姝�</li>
-                <li>琛ㄦ牸鏍戞ā鏉垮幓鎺夊浣欑殑)</li>
-                <li>浠g爜鐢熸垚搴忓彿淇</li>
-                <li>鍏ㄥ睆鎯呭喌涓嬩笉璋冩暣涓婂杈硅窛</li>
-                <li>浠g爜鐢熸垚Date瀛楁娣诲姞榛樿鏍煎紡</li>
-                <li>鐢ㄦ埛绠$悊瑙掕壊閫夋嫨鏉冮檺鎺у埗</li>
-                <li>淇璺敱鎳掑姞杞芥姤閿欓棶棰�</li>
-                <li>妯℃澘sql.vm娣诲姞鑿滃崟鐘舵��</li>
-                <li>璁剧疆鐢ㄦ埛鍚嶇О涓嶈兘淇敼</li>
-                <li>dialog娣诲姞append-to-body灞炴�э紝闃叉ie閬僵</li>
-                <li>鑿滃崟鍖哄垎鐘舵�佸拰鏄剧ず闅愯棌鍔熻兘</li>
-                <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.68 淇瀹夊叏鍔犲浐</li>
-                <li>淇浠g爜鐢熸垚濡傛灉閫夋嫨瀛楀吀绫诲瀷缂哄け閫楀彿闂</li>
-                <li>鐧诲綍璇锋眰params鏇存崲涓篸ata锛岄槻姝㈡毚闇瞮rl</li>
-                <li>鏃ュ織杩斿洖鏃堕棿鏍煎紡澶勭悊</li>
-                <li>娣诲姞handle鎺у埗鍏佽鎷栧姩鐨勫厓绱�</li>
-                <li>甯冨眬璁剧疆鐐瑰嚮鎵╁ぇ鑼冨洿</li>
-                <li>浠g爜鐢熸垚鍒楀睘鎬ф帓搴忔煡璇�</li>
-                <li>浠g爜鐢熸垚鍒楁敮鎸佹嫋鍔ㄦ帓搴�</li>
-                <li>淇鏃堕棿鏍煎紡涓嶆敮鎸乮os闂</li>
-                <li>琛ㄥ崟鏋勫缓娣诲姞鐖剁骇class锛岄槻姝㈠啿绐�</li>
-                <li>瀹氭椂浠诲姟骞跺彂灞炴�т慨姝�</li>
-                <li>瑙掕壊绂佺敤&鑿滃崟闅愯棌涓嶆煡璇㈡潈闄�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.2.0 - 2020-03-18">
-              <ol>
-                <li>绯荤粺鐩戞帶鏂板瀹氭椂浠诲姟鍔熻兘</li>
-                <li>娣诲姞涓�涓墦鍖匴eb宸ョ▼bat</li>
-                <li>淇椤电榧犳爣婊氳疆鎸変笅鐨勬椂鍊欙紝鍙互鍏抽棴涓嶅彲鍏抽棴鐨則ag</li>
-                <li>淇鐐瑰嚮閫�鍑虹櫥褰曟湁鏃朵細鏃犳彁绀洪棶棰�</li>
-                <li>淇闃查噸澶嶆彁浜ゆ敞瑙f棤鏁堥棶棰�</li>
-                <li>淇閫氱煡鍏憡鎵归噺鍒犻櫎寮傚父闂</li>
-                <li>娣诲姞鑿滃崟鏃惰矾鐢卞湴鍧�蹇呭~闄愬埗</li>
-                <li>浠g爜鐢熸垚瀛楁鎻忚堪鍙紪杈�</li>
-                <li>淇鐢ㄦ埛淇敼涓汉淇℃伅瀵艰嚧缂撳瓨涓嶈繃鏈熼棶棰�</li>
-                <li>涓汉淇℃伅鍒涘缓鏃堕棿鑾峰彇姝g‘灞炴�у��</li>
-                <li>鎿嶄綔鏃ュ織璇︾粏鏄剧ず姝g‘绫诲瀷</li>
-                <li>瀵煎叆琛ㄥ崟鍑昏鏁版嵁鏃堕�変腑瀵瑰簲鐨勫閫夋</li>
-                <li>鎵归噺鏇挎崲琛ㄥ墠缂�閫昏緫璋冩暣</li>
-                <li>鍥哄畾閲嶅畾鍚戣矾寰勮〃杈惧紡</li>
-                <li>鍗囩骇element-ui鐗堟湰鍒�2.13.0</li>
-                <li>鎿嶄綔鏃ュ織鎺掑簭璋冩暣</li>
-                <li>淇charts鍒囨崲渚ц竟鏍忔垨鑰呯缉鏀剧獥鍙f樉绀篵ug</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.1.0 - 2020-02-24">
-              <ol>
-                <li>鏂板琛ㄥ崟鏋勫缓</li>
-                <li>浠g爜鐢熸垚鏀寔鏍戣〃缁撴瀯</li>
-                <li>鏂板鐢ㄦ埛瀵煎叆</li>
-                <li>淇鍔ㄦ�佸姞杞借矾鐢遍〉闈㈠埛鏂伴棶棰�</li>
-                <li>淇鍦板潃寮�鍏虫棤鏁堥棶棰�</li>
-                <li>姹夊寲閿欒鎻愮ず椤甸潰</li>
-                <li>浠g爜鐢熸垚宸茬煡闂淇敼</li>
-                <li>淇澶氭暟鎹簮涓嬮厤缃叧闂嚭鐜板紓甯稿鐞�</li>
-                <li>娣诲姞HTML杩囨护鍣紝鐢ㄤ簬鍘婚櫎XSS婕忔礊闅愭偅</li>
-                <li>淇涓婁紶澶村儚鎺у埗鍙板嚭鐜板紓甯�</li>
-                <li>淇敼鐢ㄦ埛绠$悊鍒嗛〉涓嶆纭殑闂</li>
-                <li>淇楠岃瘉鐮佽褰曟彁绀洪敊璇�</li>
-                <li>淇request.js缂哄皯Message寮曠敤</li>
-                <li>淇琛ㄦ牸鏃堕棿涓虹┖鍑虹幇鐨勫紓甯�</li>
-                <li>娣诲姞Jackson鏃ユ湡鍙嶅簭鍒楀寲鏃跺尯閰嶇疆</li>
-                <li>璋冩暣鏍规嵁鐢ㄦ埛鏉冮檺鍔犺浇鑿滃崟鏁版嵁鏍戝舰缁撴瀯</li>
-                <li>璋冩暣鎴愬姛鐧诲綍涓嶆仮澶嶆寜閽紝闃叉澶氭鐐瑰嚮</li>
-                <li>淇敼鐢ㄦ埛涓汉璧勬枡鍚屾缂撳瓨淇℃伅</li>
-                <li>淇椤甸潰鍚屾椂鍑虹幇el-upload鍜孍ditor涓嶆樉绀哄鐞�</li>
-                <li>淇鍦ㄨ鑹茬鐞嗛〉淇敼鑿滃崟鏉冮檺鍋跺皵鏈�変腑闂</li>
-                <li>閰嶇疆鏂囦欢鏂板redis瀵嗙爜灞炴��</li>
-                <li>璁剧疆mybatis鍏ㄥ眬鐨勯厤缃枃浠�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.0.0 - 2019-12-02">
-              <ol>
-                <li>鏂板浠g爜鐢熸垚</li>
-                <li>鏂板@RepeatSubmit娉ㄨВ锛岄槻姝㈤噸澶嶆彁浜�</li>
-                <li>鏂板鑿滃崟涓荤洰褰曟坊鍔�/鍒犻櫎鎿嶄綔</li>
-                <li>鏃ュ織璁板綍杩囨护鐗规畩瀵硅薄锛岄槻姝㈣浆鎹㈠紓甯�</li>
-                <li>淇敼浠g爜鐢熸垚璺敱鑴氭湰閿欒</li>
-                <li>鐢ㄦ埛涓婁紶澶村儚瀹炴椂鍚屾缂撳瓨锛屾棤闇�閲嶆柊鐧诲綍</li>
-                <li>璋冩暣鍒囨崲椤电鍚庝笉閲嶆柊鍔犺浇鏁版嵁</li>
-                <li>娣诲姞jsencrypt瀹炵幇鍙傛暟鐨勫墠绔姞瀵�</li>
-                <li>绯荤粺閫�鍑哄垹闄ょ敤鎴风紦瀛樿褰�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.1.0 - 2019-11-11">
-              <ol>
-                <li>鏂板鍦ㄧ嚎鐢ㄦ埛绠$悊</li>
-                <li>鏂板鎸夐挳缁勫姛鑳藉疄鐜帮紙鎵归噺鍒犻櫎銆佸鍑恒�佹竻绌猴級</li>
-                <li>鏂板鏌ヨ鏉′欢閲嶇疆鎸夐挳</li>
-                <li>鏂板Swagger鍏ㄥ眬Token閰嶇疆</li>
-                <li>鏂板鍚庣鍙傛暟鏍¢獙</li>
-                <li>淇瀛楀吀绠$悊椤甸潰鐨勬棩鏈熸煡璇㈠紓甯�</li>
-                <li>淇敼鏃堕棿鍑芥暟鍛藉悕闃叉鍐茬獊</li>
-                <li>鍘婚櫎鑿滃崟涓婄骇鏍¢獙锛岄粯璁や负椤剁骇</li>
-                <li>淇鐢ㄦ埛瀵嗙爜鏃犳硶淇敼闂</li>
-                <li>淇鑿滃崟绫诲瀷涓烘寜閽椂涓嶆樉绀烘潈闄愭爣璇�</li>
-                <li>鍏朵粬缁嗚妭浼樺寲</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.0.0 - 2019-10-08">
-              <ol>
-                <li>鑻ヤ緷鍓嶅悗绔垎绂荤郴缁熸寮忓彂甯�</li>
-              </ol>
-            </el-collapse-item>
-          </el-collapse>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <template v-slot:header>
-            <div class="clearfix">
-              <span>鎹愯禒鏀寔</span>
-            </div>
-          </template>
-          <div class="body">
-            <img
-              src="@/assets/images/pay.png"
-              alt="donate"
-              style="width:100%"
-            />
-            <span style="display: inline-block; height: 30px; line-height: 30px"
-              >浣犲彲浠ヨ浣滆�呭枬鏉挅鍟¤〃绀洪紦鍔�</span
-            >
+        </div>
+      </div>
+      
+      <div class="stat-card supply">
+        <div class="card-icon">
+          <i class="el-icon-truck"></i>
+        </div>
+        <div class="card-content">
+          <div class="card-title">渚涘簲閲�</div>
+          <div class="card-value">8,965 鍚�</div>
+          <div class="card-trend">
+            <span class="trend-label">杈冩槰鏃�</span>
+            <span class="trend-value up">+8.2%</span>
           </div>
-        </el-card>
-      </el-col>
-    </el-row>
+        </div>
+      </div>
+    </div>
+
+    <!-- 涓棿鍥捐〃鍖哄煙 -->
+    <div class="chart-section">
+      <div class="chart-container">
+        <div class="chart-title">钀ユ敹鍒嗗竷</div>
+        <div ref="pieChart" class="chart-content pie-chart"></div>
+      </div>
+      
+      <div class="chart-container">
+        <div class="chart-title">渚涘簲閲忚秼鍔�</div>
+        <div ref="areaChart" class="chart-content area-chart"></div>
+      </div>
+    </div>
+
+    <!-- 搴曢儴涓夋爮甯冨眬 -->
+    <div class="bottom-section">
+      <!-- 搴撳瓨缁熻 -->
+      <div class="bottom-card inventory">
+        <div class="card-header">
+          <h3>搴撳瓨缁熻</h3>
+        </div>
+        <div class="inventory-items">
+          <div class="inventory-item">
+            <div class="item-name">鍘熺叅</div>
+            <div class="item-value">15,432 鍚�</div>
+            <div class="item-status normal">姝e父</div>
+          </div>
+          <div class="inventory-item">
+            <div class="item-name">绮剧叅</div>
+            <div class="item-value">8,765 鍚�</div>
+            <div class="item-status normal">姝e父</div>
+          </div>
+          <div class="inventory-item">
+            <div class="item-name">鐒︾叅</div>
+            <div class="item-value">3,241 鍚�</div>
+            <div class="item-status low">鍋忎綆</div>
+          </div>
+          <div class="inventory-item">
+            <div class="item-name">鍧楃叅</div>
+            <div class="item-value">6,789 鍚�</div>
+            <div class="item-status normal">姝e父</div>
+          </div>
+        </div>
+      </div>
+
+      <!-- 鏌辩姸鍥� -->
+      <div class="bottom-card chart">
+        <div class="card-header">
+          <h3>鏈堝害瀵规瘮</h3>
+        </div>
+        <div ref="barChart" class="chart-content bar-chart"></div>
+      </div>
+
+      <!-- 閿�鍞暟鎹〃鏍� -->
+      <div class="bottom-card table">
+        <div class="card-header">
+          <h3>閿�鍞暟鎹�</h3>
+        </div>
+        <el-table 
+          :data="salesData" 
+          style="width: 100%"
+          :header-cell-style="tableHeaderStyle"
+        >
+          <el-table-column prop="product" label="浜у搧" width="80"></el-table-column>
+          <el-table-column prop="quantity" label="鏁伴噺" width="80"></el-table-column>
+          <el-table-column prop="amount" label="閲戦" width="90"></el-table-column>
+          <el-table-column prop="status" label="鐘舵��" width="70">
+            <template #default="scope">
+              <el-tag 
+                :type="scope.row.status === '宸插畬鎴�' ? 'success' : 'warning'"
+                size="small"
+              >
+                {{ scope.row.status }}
+              </el-tag>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
   </div>
 </template>
 
-<script setup name="Index">
-const version = ref('3.8.9')
+<script>
+import * as echarts from 'echarts'
 
-function goTarget(url) {
-  window.open(url, '__blank')
+export default {
+  name: 'Dashboard',
+  data() {
+    return {
+      salesData: [
+        { product: '鍘熺叅', quantity: '1,234鍚�', amount: '楼456,789', status: '宸插畬鎴�' },
+        { product: '绮剧叅', quantity: '567鍚�', amount: '楼234,567', status: '宸插畬鎴�' },
+        { product: '鐒︾叅', quantity: '890鍚�', amount: '楼345,678', status: '杩涜涓�' },
+        { product: '鍧楃叅', quantity: '432鍚�', amount: '楼123,456', status: '宸插畬鎴�' },
+        { product: '鐓ゆ偿', quantity: '678鍚�', amount: '楼234,567', status: '杩涜涓�' }
+      ],
+      tableHeaderStyle: {
+        backgroundColor: '#f5f7fa',
+        color: '#606266',
+        fontSize: '12px'
+      }
+    }
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.initCharts()
+    })
+  },
+  methods: {
+    initCharts() {
+      this.initPieChart()
+      this.initAreaChart()
+      this.initBarChart()
+    },
+    
+    initPieChart() {
+      const chart = echarts.init(this.$refs.pieChart)
+      const option = {
+        tooltip: {
+          trigger: 'item',
+          formatter: '{a} <br/>{b}: {c} ({d}%)'
+        },
+        legend: {
+          orient: 'vertical',
+          left: 'right',
+          top: 'center',
+          textStyle: {
+            fontSize: 12
+          }
+        },
+        series: [
+          {
+            name: '钀ユ敹鍒嗗竷',
+            type: 'pie',
+            radius: ['30%', '70%'],
+            center: ['40%', '50%'],
+            avoidLabelOverlap: false,
+            label: {
+              show: false,
+              position: 'center'
+            },
+            emphasis: {
+              label: {
+                show: true,
+                fontSize: '16',
+                fontWeight: 'bold'
+              }
+            },
+            labelLine: {
+              show: false
+            },
+            data: [
+              { value: 335, name: '鍘熺叅', itemStyle: { color: '#409EFF' } },
+              { value: 310, name: '绮剧叅', itemStyle: { color: '#67C23A' } },
+              { value: 234, name: '鐒︾叅', itemStyle: { color: '#E6A23C' } },
+              { value: 135, name: '鍧楃叅', itemStyle: { color: '#F56C6C' } },
+              { value: 155, name: '鍏朵粬', itemStyle: { color: '#909399' } }
+            ]
+          }
+        ]
+      }
+      chart.setOption(option)
+      
+      // 鍝嶅簲寮�
+      window.addEventListener('resize', () => {
+        chart.resize()
+      })
+    },
+    
+    initAreaChart() {
+      const chart = echarts.init(this.$refs.areaChart)
+      const option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'cross',
+            label: {
+              backgroundColor: '#6a7985'
+            }
+          }
+        },
+        legend: {
+          data: ['渚涘簲閲�'],
+          top: 10
+        },
+        grid: {
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          containLabel: true
+        },
+        xAxis: [
+          {
+            type: 'category',
+            boundaryGap: false,
+            data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '5鏈�', '6鏈�', '7鏈�'],
+            axisLabel: {
+              fontSize: 12
+            }
+          }
+        ],
+        yAxis: [
+          {
+            type: 'value',
+            axisLabel: {
+              fontSize: 12
+            }
+          }
+        ],
+        series: [
+          {
+            name: '渚涘簲閲�',
+            type: 'line',
+            stack: 'Total',
+            areaStyle: {
+              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                { offset: 0, color: 'rgba(64, 158, 255, 0.3)' },
+                { offset: 1, color: 'rgba(64, 158, 255, 0.1)' }
+              ])
+            },
+            emphasis: {
+              focus: 'series'
+            },
+            data: [1200, 1320, 1010, 1340, 900, 1230, 1100],
+            lineStyle: {
+              color: '#409EFF'
+            },
+            itemStyle: {
+              color: '#409EFF'
+            }
+          }
+        ]
+      }
+      chart.setOption(option)
+      
+      // 鍝嶅簲寮�
+      window.addEventListener('resize', () => {
+        chart.resize()
+      })
+    },
+    
+    initBarChart() {
+      const chart = echarts.init(this.$refs.barChart)
+      const option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow'
+          }
+        },
+        grid: {
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          containLabel: true
+        },
+        xAxis: {
+          type: 'category',
+          data: ['鍘熺叅', '绮剧叅', '鐒︾叅', '鍧楃叅', '鐓ゆ偿'],
+          axisLabel: {
+            fontSize: 11
+          }
+        },
+        yAxis: {
+          type: 'value',
+          axisLabel: {
+            fontSize: 11
+          }
+        },
+        series: [
+          {
+            name: '閿�閲�',
+            type: 'bar',
+            data: [320, 302, 301, 334, 290],
+            itemStyle: {
+              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                { offset: 0, color: '#409EFF' },
+                { offset: 1, color: '#79bbff' }
+              ])
+            },
+            barWidth: '60%'
+          }
+        ]
+      }
+      chart.setOption(option)
+      
+      // 鍝嶅簲寮�
+      window.addEventListener('resize', () => {
+        chart.resize()
+      })
+    }
+  }
 }
 </script>
 
-<style scoped lang="scss">
-.home {
-  blockquote {
-    padding: 10px 20px;
-    margin: 0 0 20px;
-    font-size: 17.5px;
-    border-left: 5px solid #eee;
-  }
-  hr {
-    margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;
-  }
-  .col-item {
-    margin-bottom: 20px;
-  }
+<style scoped>
+.dashboard {
+  padding: 20px;
+  background-color: #f5f7fa;
+  min-height: 100vh;
+}
 
-  ul {
-    padding: 0;
-    margin: 0;
+/* 椤堕儴缁熻鍗$墖 */
+.top-cards {
+  display: flex;
+  gap: 20px;
+  margin-bottom: 20px;
+}
+
+.stat-card {
+  flex: 1;
+  background: white;
+  border-radius: 8px;
+  padding: 20px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+  display: flex;
+  align-items: center;
+  gap: 15px;
+}
+
+.card-icon {
+  width: 60px;
+  height: 60px;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 24px;
+  color: white;
+}
+
+.revenue .card-icon {
+  background: linear-gradient(135deg, #409EFF, #79bbff);
+}
+
+.supply .card-icon {
+  background: linear-gradient(135deg, #67C23A, #95d475);
+}
+
+.card-content {
+  flex: 1;
+}
+
+.card-title {
+  font-size: 14px;
+  color: #909399;
+  margin-bottom: 8px;
+}
+
+.card-value {
+  font-size: 24px;
+  font-weight: bold;
+  color: #303133;
+  margin-bottom: 5px;
+}
+
+.card-trend {
+  font-size: 12px;
+}
+
+.trend-label {
+  color: #909399;
+  margin-right: 5px;
+}
+
+.trend-value.up {
+  color: #67C23A;
+}
+
+/* 涓棿鍥捐〃鍖哄煙 */
+.chart-section {
+  display: flex;
+  gap: 20px;
+  margin-bottom: 20px;
+}
+.el-scrollbar__view{
+  width: 100%;
+}
+.chart-container {
+  flex: 1;
+  background: white;
+  border-radius: 8px;
+  padding: 20px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+.chart-title {
+  font-size: 16px;
+  font-weight: bold;
+  color: #303133;
+  margin-bottom: 15px;
+  padding-bottom: 10px;
+  border-bottom: 2px solid #f0f0f0;
+}
+
+.chart-content {
+  height: 280px;
+}
+
+/* 搴曢儴涓夋爮甯冨眬 */
+.bottom-section {
+  display: flex;
+  gap: 20px;
+}
+
+.bottom-card {
+  flex: 1;
+  background: white;
+  border-radius: 8px;
+  padding: 20px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+.card-header {
+  margin-bottom: 15px;
+  padding-bottom: 10px;
+  border-bottom: 2px solid #f0f0f0;
+}
+
+.card-header h3 {
+  margin: 0;
+  font-size: 16px;
+  font-weight: bold;
+  color: #303133;
+}
+
+/* 搴撳瓨缁熻鏍峰紡 */
+.inventory-items {
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
+}
+
+.inventory-item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 12px;
+  background: #f8f9fa;
+  border-radius: 6px;
+  border-left: 3px solid #409EFF;
+}
+
+.item-name {
+  font-weight: bold;
+  color: #303133;
+}
+
+.item-value {
+  color: #606266;
+  font-size: 14px;
+}
+
+.item-status {
+  padding: 2px 8px;
+  border-radius: 12px;
+  font-size: 12px;
+  font-weight: bold;
+}
+
+.item-status.normal {
+  background: #f0f9ff;
+  color: #67C23A;
+}
+
+.item-status.low {
+  background: #fef0e6;
+  color: #E6A23C;
+}
+
+/* 鏌辩姸鍥惧鍣� */
+.bar-chart {
+  height: 200px;
+}
+
+/* 琛ㄦ牸鏍峰紡璋冩暣 */
+.bottom-card.table {
+  min-width: 320px;
+}
+
+.bottom-card.table .el-table {
+  font-size: 12px;
+}
+
+.bottom-card.table .el-table td,
+.bottom-card.table .el-table th {
+  padding: 8px 0;
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 1200px) {
+  .bottom-section {
+    flex-direction: column;
   }
-
-  font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  color: #676a6c;
-  overflow-x: hidden;
-
-  ul {
-    list-style-type: none;
+  
+  .chart-section {
+    flex-direction: column;
   }
+}
 
-  h4 {
-    margin-top: 0px;
+@media (max-width: 768px) {
+  .top-cards {
+    flex-direction: column;
   }
-
-  h2 {
-    margin-top: 10px;
-    font-size: 26px;
-    font-weight: 100;
+  
+  .dashboard {
+    padding: 10px;
   }
-
-  p {
-    margin-top: 10px;
-
-    b {
-      font-weight: 700;
-    }
+  
+  .stat-card {
+    padding: 15px;
   }
-
-  .update-log {
-    ol {
-      display: block;
-      list-style-type: decimal;
-      margin-block-start: 1em;
-      margin-block-end: 1em;
-      margin-inline-start: 0;
-      margin-inline-end: 0;
-      padding-inline-start: 40px;
-    }
+  
+  .card-value {
+    font-size: 20px;
   }
 }
 </style>
-
diff --git a/src/views/procureMent/components/ProductionDialog.vue b/src/views/procureMent/components/ProductionDialog.vue
index e420fbe..3c03cbb 100644
--- a/src/views/procureMent/components/ProductionDialog.vue
+++ b/src/views/procureMent/components/ProductionDialog.vue
@@ -1,57 +1,48 @@
 <template>
   <div>
     <el-dialog
-      v-model="dialogFormVisible"
-      :title="title"
-      width="600"
-      :close-on-click-modal="false"
-      @close="handleClose"
+        v-model="dialogFormVisible"
+        :title="title"
+        width="600"
+        :close-on-click-modal="false"
+        @close="handleClose"
     >
       <el-form
-        ref="formRef"
-        :model="form"
-        :rules="rules"
-        label-width="auto"
-        class="production-form"
-        label-position="right"
-        style="max-width: 400px; margin: 0 auto"
+          ref="formRef"
+          :model="form"
+          :rules="rules"
+          label-width="auto"
+          class="production-form"
+          label-position="right"
+          style="max-width: 400px; margin: 0 auto"
       >
         <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-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-form-item label="鍗曚綅" prop="unit">
-          <el-select
-            v-model="form.unit"
-            placeholder="璇烽�夋嫨鍗曚綅"
-            clearable
-            style="width: 100%"
-          >
-            <el-option label="鍚�" value="鍚�" />
-            <el-option label="鍗冨厠" value="鍗冨厠" />
+            <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.value"/>
           </el-select>
         </el-form-item>
         <el-form-item label="閲囪喘鏁伴噺" prop="purchaseQuantity">
           <el-input
-            v-model.number="form.purchaseQuantity"
-            placeholder="璇疯緭鍏�"
-            @blur="handleQuantityBlur"
+              v-model.number="form.purchaseQuantity"
+              placeholder="璇疯緭鍏�"
+              @blur="handleQuantityBlur"
           >
             <template v-slot:suffix>
-              <i style="font-style: normal">{{ form.unit ? form.unit : "" }}</i>
+              <i style="font-style: normal">鍚�</i>
             </template>
-          </el-input> </el-form-item
-        ><el-form-item label="绋庣巼" prop="taxRate">
+          </el-input>
+        </el-form-item
+        >
+        <el-form-item label="绋庣巼" prop="taxRate">
           <el-input
-            v-model.number="form.taxRate"
-            placeholder="璇疯緭鍏ョ◣鐜�"
-            @blur="handleTaxRateBlur"
+              v-model.number="form.taxRate"
+              placeholder="璇疯緭鍏ョ◣鐜�"
+              @blur="handleTaxRateBlur"
           >
             <template v-slot:suffix>
               <i style="font-style: normal">%</i>
@@ -60,9 +51,9 @@
         </el-form-item>
         <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
           <el-input
-            v-model.number="form.priceExcludingTax"
-            placeholder="璇疯緭鍏�"
-            @blur="handlePriceBlur"
+              v-model.number="form.priceExcludingTax"
+              placeholder="璇疯緭鍏�"
+              @blur="handlePriceBlur"
           >
             <template v-slot:suffix>
               <i style="font-style: normal">鍏�</i>
@@ -71,8 +62,8 @@
         </el-form-item>
         <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
           <el-input
-            v-model.number="form.priceIncludingTax"
-            placeholder="鑷姩璁$畻"
+              v-model.number="form.priceIncludingTax"
+              placeholder="鑷姩璁$畻"
           >
             <template v-slot:suffix>
               <i style="font-style: normal">鍏�</i>
@@ -81,8 +72,8 @@
         </el-form-item>
         <el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax">
           <el-input
-            v-model.number="form.totalPriceExcludingTax"
-            placeholder="鑷姩璁$畻"
+              v-model.number="form.totalPriceExcludingTax"
+              placeholder="鑷姩璁$畻"
           >
             <template v-slot:suffix>
               <i style="font-style: normal">鍏�</i>
@@ -91,8 +82,8 @@
         </el-form-item>
         <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax">
           <el-input
-            v-model.number="form.totalPriceIncludingTax"
-            placeholder="鑷姩璁$畻"
+              v-model.number="form.totalPriceIncludingTax"
+              placeholder="鑷姩璁$畻"
           >
             <template v-slot:suffix>
               <i style="font-style: normal">鍏�</i>
@@ -100,16 +91,16 @@
           </el-input>
         </el-form-item>
         <el-form-item label="鐧昏浜�" prop="registrantId">
-          <el-input v-model="form.registrantId" disabled placeholder="璇疯緭鍏�" />
+          <el-input v-model="form.registrantId" disabled placeholder="璇疯緭鍏�"/>
         </el-form-item>
         <el-form-item label="鐧昏鏃ユ湡" prop="registrationDate">
           <el-date-picker
-            disabled
-            v-model="form.registrationDate"
-            type="date"
-            placeholder="YYYY-MM-DD"
-            style="width: 100%"
-            value-format="YYYY-MM-DD"
+              disabled
+              v-model="form.registrationDate"
+              type="date"
+              placeholder="YYYY-MM-DD"
+              style="width: 100%"
+              value-format="YYYY-MM-DD"
           />
         </el-form-item>
       </el-form>
@@ -117,10 +108,12 @@
         <div class="dialog-footer">
           <!-- 閲嶇疆鍜屽彇娑� -->
           <el-button @click="handleClose" v-if="title.includes('鏂板')"
-            >鍙栨秷</el-button
+          >鍙栨秷
+          </el-button
           >
           <el-button @click="handleReset" v-if="title.includes('缂栬緫')"
-            >閲嶇疆</el-button
+          >閲嶇疆
+          </el-button
           >
           <el-button type="primary" @click="handleSubmit">纭</el-button>
         </div>
@@ -130,12 +123,11 @@
 </template>
 
 <script setup name="ProductionDialog">
-import { ref, defineProps, watch, onMounted, nextTick, computed } from "vue";
-import { ElMessage } from "element-plus";
+import {ref, defineProps, watch, onMounted, nextTick, computed} from "vue";
+import {ElMessage} from "element-plus";
 import useUserStore from "@/store/modules/user";
-import { addOrEditPR,getSupplyList, getCoalInfoList } from "@/api/procureMent";
-import { getSupply } from "@/api/basicInformation/supplier";
-import { getCoalInfo } from "@/api/basicInformation/coal";
+import {addOrEditPR, getSupplyList, getCoalInfoList} from "@/api/procureMent";
+
 const props = defineProps({
   title: {
     type: String,
@@ -164,7 +156,6 @@
       getSupplyList(),
       getCoalInfoList(),
     ]);
-    console.log(supplyRes, coalRes);
     let supplyData = supplyRes.data;
     let coalData = coalRes.data;
     supplyList.value = supplyData.map((item) => ({
@@ -188,8 +179,8 @@
     return 0;
   }
   return (
-    Math.floor(parseFloat(num) * Math.pow(10, precision)) /
-    Math.pow(10, precision)
+      Math.floor(parseFloat(num) * Math.pow(10, precision)) /
+      Math.pow(10, precision)
   );
 };
 // 鍚◣鍗曚环璁$畻
@@ -250,9 +241,9 @@
 // 澶勭悊绋庣巼杈撳叆妗嗗け鐒︼紝纭繚绮惧害
 const handleTaxRateBlur = () => {
   if (
-    form.value.taxRate !== null &&
-    form.value.taxRate !== undefined &&
-    form.value.taxRate !== ""
+      form.value.taxRate !== null &&
+      form.value.taxRate !== undefined &&
+      form.value.taxRate !== ""
   ) {
     form.value.taxRate = toFixed(parseFloat(form.value.taxRate), 2);
   }
@@ -261,13 +252,13 @@
 // 澶勭悊涓嶅惈绋庡崟浠疯緭鍏ユ澶辩劍锛岀‘淇濈簿搴�
 const handlePriceBlur = () => {
   if (
-    form.value.priceExcludingTax !== null &&
-    form.value.priceExcludingTax !== undefined &&
-    form.value.priceExcludingTax !== ""
+      form.value.priceExcludingTax !== null &&
+      form.value.priceExcludingTax !== undefined &&
+      form.value.priceExcludingTax !== ""
   ) {
     form.value.priceExcludingTax = toFixed(
-      parseFloat(form.value.priceExcludingTax),
-      2
+        parseFloat(form.value.priceExcludingTax),
+        2
     );
   }
 };
@@ -275,13 +266,13 @@
 // 澶勭悊閲囪喘鏁伴噺杈撳叆妗嗗け鐒︼紝纭繚绮惧害
 const handleQuantityBlur = () => {
   if (
-    form.value.purchaseQuantity !== null &&
-    form.value.purchaseQuantity !== undefined &&
-    form.value.purchaseQuantity !== ""
+      form.value.purchaseQuantity !== null &&
+      form.value.purchaseQuantity !== undefined &&
+      form.value.purchaseQuantity !== ""
   ) {
     form.value.purchaseQuantity = toFixed(
-      parseFloat(form.value.purchaseQuantity),
-      3
+        parseFloat(form.value.purchaseQuantity),
+        3
     ); // 鏁伴噺淇濈暀3浣嶅皬鏁�
   }
 };
@@ -293,30 +284,29 @@
 });
 const rules = {
   supplierName: [
-    { required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur"},
   ],
-  coal: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }],
-  unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
+  coal: [{required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur"}],
   purchaseQuantity: [
-    { required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "blur" },
-    { type: "number", message: "閲囪喘鏁伴噺蹇呴』涓烘暟瀛�", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "blur"},
+    {type: "number", message: "閲囪喘鏁伴噺蹇呴』涓烘暟瀛�", trigger: "blur"},
   ],
   priceExcludingTax: [
-    { required: true, message: "璇疯緭鍏ュ崟浠�", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ュ崟浠�", trigger: "blur"},
   ],
   totalPriceExcludingTax: [
-    { required: true, message: "璇疯緭鍏ユ�讳环", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ユ�讳环", trigger: "blur"},
   ],
   priceIncludingTax: [
-    { required: true, message: "璇疯緭鍏ュ惈绋庡崟浠�", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ュ惈绋庡崟浠�", trigger: "blur"},
   ],
   totalPriceIncludingTax: [
-    { required: true, message: "璇疯緭鍏ュ惈绋庢�讳环", trigger: "blur" },
+    {required: true, message: "璇疯緭鍏ュ惈绋庢�讳环", trigger: "blur"},
   ],
-  taxRate: [{ required: true, message: "璇疯緭鍏ョ◣鐜�", trigger: "blur" }],
-  registrantId: [{ required: true, message: "璇疯緭鍏ョ櫥璁颁汉", trigger: "blur" }],
+  taxRate: [{required: true, message: "璇疯緭鍏ョ◣鐜�", trigger: "blur"}],
+  registrantId: [{required: true, message: "璇疯緭鍏ョ櫥璁颁汉", trigger: "blur"}],
   registrationDate: [
-    { required: true, message: "璇烽�夋嫨鐧昏鏃ユ湡", trigger: "change" },
+    {required: true, message: "璇烽�夋嫨鐧昏鏃ユ湡", trigger: "change"},
   ],
 };
 // 鍏抽棴寮圭獥
diff --git a/src/views/procureMent/index.vue b/src/views/procureMent/index.vue
index 644b3a8..793267a 100644
--- a/src/views/procureMent/index.vue
+++ b/src/views/procureMent/index.vue
@@ -18,12 +18,11 @@
       <!-- 鎿嶄綔鎸夐挳鍖� -->
       <el-row :gutter="24" class="table-toolbar">
         <el-button type="primary" :icon="Plus" @click="handleAdd"
-          >鏂板缓</el-button
-        >
+          >鏂板缓
+        </el-button>
         <el-button type="danger" :icon="Delete" @click="handleDelete"
-          >鍒犻櫎</el-button
-        >
-        <!-- <el-button type="info" :icon="Download" @click="handleExport">瀵煎嚭</el-button> -->
+          >鍒犻櫎
+        </el-button>
       </el-row>
       <!-- 琛ㄦ牸缁勪欢 -->
       <data-table
@@ -66,7 +65,12 @@
 import DataTable from "@/components/Table/ETable.vue";
 import Pagination from "@/components/Pagination";
 import ProductionDialog from "./components/ProductionDialog.vue";
-import { purchaseRegistration } from "@/api/procureMent";
+import {
+  purchaseRegistration,
+  getSupplyList,
+  getCoalInfoList,
+} from "@/api/procureMent";
+
 import useUserStore from "@/store/modules/user";
 // 寮曞叆瀛楀吀鏁版嵁
 const { proxy } = getCurrentInstance();
@@ -117,9 +121,22 @@
 
 // supplier 渚涘簲鍟嗘暟鎹�
 const columns = ref([
-  { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 200 },
-  { prop: "coal", label: "鐓ょ绫诲瀷", minWidth: 120 },
-  { prop: "unit", label: "鍗曚綅", minWidth: 150 },
+  {
+    prop: "supplierId",
+    label: "渚涘簲鍟嗗悕绉�",
+    minWidth: 200,
+    formatter: (row) => {
+      return MatchQuery(row.supplierId, "supplyRes") || "鏈煡渚涘簲鍟�";
+    },
+  },
+  {
+    prop: "coalId",
+    label: "鐓ょ绫诲瀷",
+    minWidth: 120,
+    formatter: (row) => {
+      return MatchQuery(row.coalId, "coalRes") || "鏈煡鐓ょ";
+    },
+  },
   { prop: "purchaseQuantity", label: "閲囪喘鏁伴噺", minWidth: 100 },
   { prop: "priceIncludingTax", label: "鍗曚环锛堝惈绋庯級", minWidth: 150 },
   { prop: "totalPriceIncludingTax", label: "鎬讳环锛堝惈绋庯級", minWidth: 100 },
@@ -128,6 +145,16 @@
   { prop: "registrantId", label: "鐧昏浜�", minWidth: 100 },
   { prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 },
 ]);
+
+// 鍖归厤鏌ヨ瀛楁
+const MatchQuery = (data, name) => {
+  const list = name === "supplyRes" ? supplyRes.value.data : coalRes.value.data;
+  const item = list.find((items) => items.id == data);
+  return item ? item.coal || item.supplierName  : "";
+};
+// 鑾峰彇渚涘簲鍟嗗垪琛�
+const supplyRes = ref([]);
+const coalRes = ref([]);
 
 // 閲嶇疆鏌ヨ
 const resetQuery = () => {
@@ -167,7 +194,7 @@
   form.value = {
     supplierName: "",
     coal: "",
-    unit: "",
+    unit: "鍚�",
     purchaseQuantity: "",
     priceExcludingTax: "",
     totalPriceExcludingTax: "",
@@ -227,17 +254,6 @@
 const handleDeleteSuccess = (row) => {
   ElMessage.success("鍒犻櫎鎴愬姛锛�" + row.supplierName);
 };
-// 瀵煎嚭
-const handleExport = (row) => {
-  proxy.download(
-    "system/post/export",
-    {
-      ...queryParams.value,
-    },
-    `post_${new Date().getTime()}.xlsx`
-  );
-  ElMessage.success("瀵煎嚭鏁版嵁锛�" + row.supplierName);
-};
 // 鎴愬姛
 const handleSuccess = (val) => {
   tableData.value.push(val);
@@ -248,6 +264,10 @@
 const getList = async () => {
   loading.value = true;
   try {
+    [supplyRes.value, coalRes.value] = await Promise.all([
+      getSupplyList(),
+      getCoalInfoList(),
+    ]);
     // 浼犻�掑垎椤靛弬鏁�
     let res = await purchaseRegistration({
       current: current.value,
@@ -271,6 +291,7 @@
 .app-container {
   box-sizing: border-box;
 }
+
 .search-form {
   background-color: #fff;
   padding: 20px 20px 0 20px;
@@ -278,6 +299,7 @@
   border-radius: 4px;
   box-shadow: var(--el-box-shadow-light);
 }
+
 .search-form :deep(.el-form-item) {
   margin-bottom: 16px;
   width: 100%;
@@ -289,11 +311,13 @@
     width: 50%;
   }
 }
+
 @media screen and (min-width: 1200px) {
   .search-form :deep(.el-form-item) {
     width: 18%;
   }
 }
+
 .table-toolbar {
   margin-bottom: 20px;
   display: flex;
@@ -306,15 +330,18 @@
   .table-toolbar {
     flex-direction: column;
   }
+
   .table-toolbar .el-button {
     width: 100%;
   }
 }
+
 /* 琛ㄦ牸宸ュ叿鏍� */
 .table-toolbar,
 .table-toolbar > * {
   margin: 0 0 0 0 !important;
 }
+
 .table-toolbar {
   margin-bottom: 20px !important;
 }
diff --git a/src/views/production/components/ProductionDetailsTable.vue b/src/views/production/components/ProductionDetailsTable.vue
index 7a87b17..1db3794 100644
--- a/src/views/production/components/ProductionDetailsTable.vue
+++ b/src/views/production/components/ProductionDetailsTable.vue
@@ -1,20 +1,20 @@
 <template>
-  <el-table :data="tableData" :border="border" style="width: 100%">    
+  <el-table :data="tableData" :border="border" style="width: 100%">
     <el-table-column label="鐓ょ" min-width="120">
       <template #default="{ row, $index }">
-        <el-select 
-          clearable 
-          :model-value="getCoalNameById(row.coalId) || row.coalId"
-          placeholder="璇烽�夋嫨鐓ょ"
-          @change="(value) => handleCoalSelectChange(row, value)"
-          filterable
-          :key="`coalId-select-${$index}-${weekList.length}`"
+        <el-select
+            clearable
+            :model-value="getCoalNameById(row.coalId) || row.coalId"
+            placeholder="璇烽�夋嫨鐓ょ"
+            @change="(value) => handleCoalSelectChange(row, value)"
+            filterable
+            :key="`coalId-select-${$index}-${weekList.length}`"
         >
           <el-option
-            v-for="(item, index) of weekList"
-            :key="`option-${index}-${item.key}`"
-            :label="item.value"
-            :value="item.value"
+              v-for="(item, index) of weekList"
+              :key="`option-${index}-${item.key}`"
+              :label="item.value"
+              :value="item.value"
           />
         </el-select>
       </template>
@@ -22,10 +22,10 @@
     <el-table-column label="鐢熶骇鏁伴噺" min-width="120">
       <template #default="{ row, $index }">
         <el-input
-          v-model="row.productionQuantity"
-          placeholder="璇疯緭鍏ョ敓浜ф暟閲�"
-          type="number"
-          @input="handleInput('productionQuantity', $index, $event)"
+            v-model="row.productionQuantity"
+            placeholder="璇疯緭鍏ョ敓浜ф暟閲�"
+            type="number"
+            @input="handleInput('productionQuantity', $index, $event)"
         />
       </template>
     </el-table-column>
@@ -33,10 +33,10 @@
     <el-table-column label="浜哄伐鎴愭湰" min-width="120">
       <template #default="{ row, $index }">
         <el-input
-          v-model="row.laborCost"
-          placeholder="璇疯緭鍏ヤ汉宸ユ垚鏈�"
-          type="number"
-          @input="handleInput('laborCost', $index, $event)"
+            v-model="row.laborCost"
+            placeholder="璇疯緭鍏ヤ汉宸ユ垚鏈�"
+            type="number"
+            @input="handleInput('laborCost', $index, $event)"
         >
           <template #suffix>
             <i style="font-style: normal">鍏�</i>
@@ -48,10 +48,10 @@
     <el-table-column label="鑳借�楁垚鏈�" min-width="120">
       <template #default="{ row, $index }">
         <el-input
-          v-model="row.energyConsumptionCost"
-          placeholder="璇疯緭鍏ヨ兘鑰楁垚鏈�"
-          type="number"
-          @input="handleInput('energyConsumptionCost', $index, $event)"
+            v-model="row.energyConsumptionCost"
+            placeholder="璇疯緭鍏ヨ兘鑰楁垚鏈�"
+            type="number"
+            @input="handleInput('energyConsumptionCost', $index, $event)"
         >
           <template #suffix>
             <i style="font-style: normal">鍏�</i>
@@ -63,10 +63,10 @@
     <el-table-column label="璁惧鎶樻棫" min-width="120">
       <template #default="{ row, $index }">
         <el-input
-          v-model="row.equipmentDepreciation"
-          placeholder="璇疯緭鍏ヨ澶囨姌鏃�"
-          type="number"
-          @input="handleInput('equipmentDepreciation', $index, $event)"
+            v-model="row.equipmentDepreciation"
+            placeholder="璇疯緭鍏ヨ澶囨姌鏃�"
+            type="number"
+            @input="handleInput('equipmentDepreciation', $index, $event)"
         >
           <template #suffix>
             <i style="font-style: normal">鍏�</i>
@@ -78,10 +78,10 @@
     <el-table-column label="閲囪喘鍗曚环" min-width="120">
       <template #default="{ row, $index }">
         <el-input
-          v-model="row.purchasePrice"
-          placeholder="璇疯緭鍏ラ噰璐崟浠�"
-          type="number"
-          @input="handleInput('purchasePrice', $index, $event)"
+            v-model="row.purchasePrice"
+            placeholder="璇疯緭鍏ラ噰璐崟浠�"
+            type="number"
+            @input="handleInput('purchasePrice', $index, $event)"
         >
           <template #suffix>
             <i style="font-style: normal">鍏�</i>
@@ -93,12 +93,12 @@
     <el-table-column label="鎬绘垚鏈�" min-width="120">
       <template #default="{ row, $index }">
         <el-input
-          disabled
-          v-model="row.totalCost"
-          placeholder="鎬绘垚鏈�"
-          type="number"
-          :readonly="autoCalculate"
-          @input="handleInput('totalCost', $index, $event)"
+            disabled
+            v-model="row.totalCost"
+            placeholder="鎬绘垚鏈�"
+            type="number"
+            :readonly="autoCalculate"
+            @input="handleInput('totalCost', $index, $event)"
         >
           <template #suffix>
             <i style="font-style: normal">鍏�</i>
@@ -109,34 +109,34 @@
     <el-table-column label="鐢熶骇浜�" min-width="120">
       <template #default="{ row, $index }">
         <el-select
-          clearable
-          :model-value="getUserNameById(row.producer) || row.producer"
-          placeholder="璇烽�夋嫨鐢熶骇浜�"
-          @change="(value) => handleUserSelectChange(row, value)"
-          filterable
-          :key="`producer-select-${$index}-${userList.length}`"
+            clearable
+            :model-value="getUserNameById(row.producer) || row.producer"
+            placeholder="璇烽�夋嫨鐢熶骇浜�"
+            @change="(value) => handleUserSelectChange(row, value)"
+            filterable
+            :key="`producer-select-${$index}-${userList.length}`"
         >
           <el-option
-            v-for="(item, index) of userList"
-            :key="`option-${index}-${item.key}`"
-            :label="item.value"
-            :value="item.value"
+              v-for="(item, index) of userList"
+              :key="`option-${index}-${item.key}`"
+              :label="item.value"
+              :value="item.value"
           />
         </el-select>
       </template>
     </el-table-column>
     <el-table-column
-      v-if="showOperations"
-      label="鎿嶄綔"
-      width="120"
-      fixed="right"
+        v-if="showOperations"
+        label="鎿嶄綔"
+        width="120"
+        fixed="right"
     >
       <template #default="{ $index }">
         <el-button
-          type="danger"
-          size="small"
-          @click="handleDelete($index)"
-          :icon="Delete"
+            type="danger"
+            size="small"
+            @click="handleDelete($index)"
+            :icon="Delete"
         >
           鍒犻櫎
         </el-button>
@@ -146,11 +146,12 @@
 </template>
 
 <script setup name="ProductionDetailsTable">
-import { ref, computed, watch, onMounted, nextTick } from "vue";
-import { Delete } from "@element-plus/icons-vue";
-import { getCoalFieldList } from "@/api/basicInformation/coalQualityMaintenance";
-import { getCoalInfoList } from "@/api/production";
-import { userListAll } from "@/api/publicApi";
+import {ref, computed, watch, onMounted, nextTick} from "vue";
+import {Delete} from "@element-plus/icons-vue";
+import {getCoalFieldList} from "@/api/basicInformation/coalQualityMaintenance";
+import {getCoalInfoList} from "@/api/production";
+import {userListAll} from "@/api/publicApi";
+
 const props = defineProps({
   modelValue: {
     type: Array,
@@ -189,19 +190,19 @@
 
   // 濡傛灉寮�鍚嚜鍔ㄨ绠楁�绘垚鏈�
   if (
-    props.autoCalculate &&
-    [
-      "laborCost",
-      "energyCost",
-      "equipmentDepreciation",
-      "purchasePrice",
-    ].includes(field)
+      props.autoCalculate &&
+      [
+        "laborCost",
+        "energyCost",
+        "equipmentDepreciation",
+        "purchasePrice",
+      ].includes(field)
   ) {
     calculateTotalCost(newData[index]);
   }
 
   tableData.value = newData;
-  emit("input-change", { field, index, value, row: newData[index] });
+  emit("input-change", {field, index, value, row: newData[index]});
 };
 
 // 璁$畻鎬绘垚鏈�
@@ -212,10 +213,10 @@
   const purchasePrice = parseFloat(row.purchasePrice) || 0;
 
   row.totalCost = (
-    laborCost +
-    energyCost +
-    equipmentDepreciation +
-    purchasePrice
+      laborCost +
+      energyCost +
+      equipmentDepreciation +
+      purchasePrice
   ).toFixed(2);
 };
 
@@ -254,7 +255,7 @@
   if (newValue && weekList.value.length > 0) {
     // 褰撴暟鎹姞杞藉畬鎴愪笖weekList宸茶幏鍙栨椂锛岀‘淇濇樉绀烘纭�
   }
-}, { deep: true });
+}, {deep: true});
 
 // 鐩戝惉weekList鍙樺寲锛屽綋涓嬫媺鏁版嵁鍔犺浇瀹屾垚鍚庡鐞嗘樉绀�
 watch(weekList, (newList) => {
@@ -266,23 +267,23 @@
       tableData.value = tempData;
     });
   }
-}, { deep: true });
+}, {deep: true});
 
-onMounted(async()=>{
+onMounted(async () => {
   let res = await getCoalInfoList()
   console.log(res);
   res.data.forEach(item => {
     let obj = {};
     obj.value = item.coal;
     obj.key = item.id;
-    weekList.value.push(obj); 
+    weekList.value.push(obj);
   });
   let ress = await userListAll();
   ress.data.forEach(item => {
     let obj = {};
     obj.value = item.nickName;
     obj.key = item.userId;
-    userList.value.push(obj); 
+    userList.value.push(obj);
   });
   // 閫氱煡鐖剁粍浠秝eekList宸插姞杞藉畬鎴�
   nextTick(() => {
@@ -302,7 +303,7 @@
   }
 };
 const userList = ref([]);
-const getUserList = (async()=>{
+const getUserList = (async () => {
   let res = await userListAll();
   if (res.code === 200) {
     userList.value = res.data.map((item) => ({
@@ -318,7 +319,7 @@
   if (newValue && userList.value.length > 0) {
     // 褰撴暟鎹姞杞藉畬鎴愪笖weekList宸茶幏鍙栨椂锛岀‘淇濇樉绀烘纭�
   }
-}, { deep: true });
+}, {deep: true});
 
 // 鐩戝惉userList鍙樺寲锛屽綋涓嬫媺鏁版嵁鍔犺浇瀹屾垚鍚庡鐞嗘樉绀�
 watch(userList, (newList) => {
@@ -330,7 +331,7 @@
       tableData.value = tempData;
     });
   }
-}, { deep: true });
+}, {deep: true});
 
 const getUserNameById = (id) => {
   const producer = userList.value.find(item => item.key == id);
diff --git a/src/views/production/components/ProductionDialog.vue b/src/views/production/components/ProductionDialog.vue
index 0cd330e..124e32f 100644
--- a/src/views/production/components/ProductionDialog.vue
+++ b/src/views/production/components/ProductionDialog.vue
@@ -1,25 +1,30 @@
 <template>
   <el-dialog
-    v-model="dialogVisible"
-    :title="dialogType === 'add' ? '鏂板鐢熶骇鍔犲伐' : '缂栬緫鐢熶骇鍔犲伐'"
-    width="1200px"
-    :close-on-click-modal="false"
-    @close="handleClose"
+      v-model="dialogVisible"
+      :title="dialogType === 'add' ? '鏂板鐢熶骇鍔犲伐' : '缂栬緫鐢熶骇鍔犲伐'"
+      width="1200px"
+      :close-on-click-modal="false"
+      @close="handleClose"
   >
     <el-row :gutter="10" style="margin-bottom: 10px">
       <el-col :span="3">
         <el-button type="primary" @click="handlData"
-          ><el-icon> <Plus /> </el-icon>閫夋嫨鏁版嵁</el-button
+        >
+          <el-icon>
+            <Plus/>
+          </el-icon>
+          閫夋嫨鏁版嵁
+        </el-button
         >
       </el-col>
       <el-col :span="4">
         <el-button
-          type="danger"
-          @click="removeSelectedData"
-          :disabled="tableData.length === 0"
+            type="danger"
+            @click="removeSelectedData"
+            :disabled="tableData.length === 0"
         >
           <el-icon>
-            <Delete />
+            <Delete/>
           </el-icon>
           娓呯┖宸查��
         </el-button>
@@ -34,15 +39,15 @@
       </el-col>
     </el-row>
     <ETableModify
-      :columns="columns"
-      :showOperations="false"
-      height="200"
-      @cell-edit="handleCellEdit"
-      :tableData="tableData"
-      :showOverflowTooltip="false"
-      @row-click="handleRowClick"
-      :editableColumns="['usedQuantity']"
-      @delete="handleRemoveItem"
+        :columns="columns"
+        :showOperations="false"
+        height="200"
+        @cell-edit="handleCellEdit"
+        :tableData="tableData"
+        :showOverflowTooltip="false"
+        @row-click="handleRowClick"
+        :editableColumns="['usedQuantity']"
+        @delete="handleRemoveItem"
     />
     <div class="empty-table">
       <h1>鐢熶骇鏄庣粏</h1>
@@ -50,7 +55,7 @@
         <el-col :span="2">
           <el-button type="primary" @click="addNewRow">
             <el-icon>
-              <Plus />
+              <Plus/>
             </el-icon>
             鏂板
           </el-button>
@@ -65,60 +70,62 @@
         </el-col> -->
       </el-row>
       <ProductionDetailsTable
-        v-model="detailsTableData"
-        :border="false"
-        :show-operations="true"
-        :auto-calculate="true"
-        @input-change="handleDetailsChange"
-        @delete-row="handleDeleteRow"
+          v-model="detailsTableData"
+          :border="false"
+          :show-operations="true"
+          :auto-calculate="true"
+          @input-change="handleDetailsChange"
+          @delete-row="handleDeleteRow"
       />
     </div>
 
     <template #footer>
       <div class="dialog-footer">
         <el-button
-          @click="handleClose"
-          v-if="dialogType === 'add' || dialogType === 'edit'"
-          >鍙� 娑�</el-button
+            @click="handleClose"
+            v-if="dialogType === 'add' || dialogType === 'edit'"
+        >鍙� 娑�
+        </el-button
         >
         <!-- <el-button @click="handleReset" v-if="dialogType === 'edit'"
           >閲� 缃�</el-button
         > -->
         <el-button type="primary" :loading="loading" @click="handleSubmit"
-          >纭� 瀹�</el-button
+        >纭� 瀹�
+        </el-button
         >
       </div>
     </template>
   </el-dialog>
   <el-dialog
-    v-model="innerVisible"
-    width="1000"
-    title="閫夋嫨閰嶇疆鏁版嵁"
-    center
-    append-to-body
+      v-model="innerVisible"
+      width="1000"
+      title="閫夋嫨閰嶇疆鏁版嵁"
+      center
+      append-to-body
   >
     <div style="margin-bottom: 10px">
       <el-alert
-        v-if="tableData.length > 0"
-        :title="`褰撳墠宸查�夋嫨 ${tableData.length} 鏉℃暟鎹甡"
-        type="info"
-        :closable="false"
-        show-icon
+          v-if="tableData.length > 0"
+          :title="`褰撳墠宸查�夋嫨 ${tableData.length} 鏉℃暟鎹甡"
+          type="info"
+          :closable="false"
+          show-icon
       />
     </div>
     <ETable
-      :showIndex="false"
-      :showOverflowTooltip="false"
-      @selection-change="handleSelectionChange"
-      :showOperations="false"
-      ref="etableRef"
-      :columns="formalDatabaseColumns"
-      :tableData="formalDatabaseData"
-      :defaultSelectedIds="selectedIds"
-      :rowKey="'id'"
-      height="400"
-      @cell-edit="handleCellEdit"
-      :show-selection="true"
+        :showIndex="false"
+        :showOverflowTooltip="false"
+        @selection-change="handleSelectionChange"
+        :showOperations="false"
+        ref="etableRef"
+        :columns="formalDatabaseColumns"
+        :tableData="formalDatabaseData"
+        :defaultSelectedIds="selectedIds"
+        :rowKey="'id'"
+        height="400"
+        @cell-edit="handleCellEdit"
+        :show-selection="true"
     />
     <el-row :gutter="24" style="margin-top: 15px">
       <el-col :span="12">
@@ -129,9 +136,9 @@
       <el-col :span="12" style="text-align: right">
         <el-button @click="innerVisible = false">鍙栨秷</el-button>
         <el-button
-          type="primary"
-          @click="handleSelectData"
-          :disabled="formalDatabaseSelectedData.length === 0"
+            type="primary"
+            @click="handleSelectData"
+            :disabled="formalDatabaseSelectedData.length === 0"
         >
           纭畾娣诲姞
         </el-button>
@@ -141,34 +148,34 @@
 </template>
 
 <script setup>
-import { ref, reactive, watch, onMounted, nextTick, computed } from "vue";
+import {ref, reactive, watch, onMounted, nextTick, computed} from "vue";
 import ETable from "@/components/Table/ETable.vue";
 import ETableModify from "@/components/Table/EtableModify.vue";
 import ProductionDetailsTable from "./ProductionDetailsTable.vue";
-import { ElMessage, ElMessageBox, ElAlert, ElText } from "element-plus";
-import { Delete, Warning, Plus } from "@element-plus/icons-vue";
+import {ElMessage, ElMessageBox, ElAlert, ElText} from "element-plus";
+import {Delete, Warning, Plus} from "@element-plus/icons-vue";
 import {
   getOfficialAll,
   addOrEditPM,
   deleteProductionInventory,
 } from "@/api/production/index.js";
-import { validateFormData, validateNumber, deepClone, createDefaultProductionRow } from "@/utils/production";
-import { useCoalData } from "./useCoalData";
+import {validateFormData, validateNumber, deepClone, createDefaultProductionRow} from "@/utils/production";
+import {useCoalData} from "./useCoalData";
 import useUserStore from "@/store/modules/user";
 
 // Props 鍜� Emits
 const props = defineProps({
-  visible: { type: Boolean, default: false },
-  type: { type: String, default: "add" },
-  rowData: { type: Object, default: () => ({}) },
+  visible: {type: Boolean, default: false},
+  type: {type: String, default: "add"},
+  rowData: {type: Object, default: () => ({})},
 });
 
-const dialogVisible = defineModel("visible", { type: Boolean, default: false });
+const dialogVisible = defineModel("visible", {type: Boolean, default: false});
 const emit = defineEmits(["update:visible", "success", "update:productionAndProcessing"]);
 
 // 鐢ㄦ埛淇℃伅鍜岀叅绉嶆暟鎹�
 const userStore = useUserStore();
-const { getCoalNameById } = useCoalData();
+const {getCoalNameById} = useCoalData();
 let userInfo;
 
 // 瀵硅瘽妗嗙姸鎬�
@@ -187,8 +194,8 @@
 const copyForm = ref(null);
 // 琛ㄦ牸鍒楅厤缃�
 const columns = [
-  { label: "鐓ょ", prop: "coal", minwidth: 120 },
-  { label: "搴撳瓨鏁伴噺", prop: "inventoryQuantity", minwidth: 100 },
+  {label: "鐓ょ", prop: "coal", minwidth: 120},
+  {label: "搴撳瓨鏁伴噺", prop: "inventoryQuantity", minwidth: 100},
   {
     label: "浣跨敤鏁伴噺",
     prop: "usedQuantity",
@@ -199,18 +206,18 @@
 ];
 
 const formalDatabaseColumns = ref([
-  { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minwidth: 150 },
-  { prop: "coal", label: "鐓ょ绫诲瀷", minwidth: 60 },
-  { prop: "inventoryQuantity", label: "搴撳瓨鏁伴噺", minwidth: 80 },
-  { prop: "unit", label: "鍗曚綅", minwidth: 20 },
-  { prop: "priceExcludingTax", label: "鍗曚环锛堜笉鍚◣锛�", minwidth: 80 },
-  { prop: "createTime", label: "鐧昏鏃ユ湡", width: 200 },
+  {prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minwidth: 150},
+  {prop: "coal", label: "鐓ょ绫诲瀷", minwidth: 60},
+  {prop: "inventoryQuantity", label: "搴撳瓨鏁伴噺", minwidth: 80},
+  {prop: "unit", label: "鍗曚綅", minwidth: 20},
+  {prop: "priceExcludingTax", label: "鍗曚环锛堜笉鍚◣锛�", minwidth: 80},
+  {prop: "createTime", label: "鐧昏鏃ユ湡", width: 200},
 ]);
 // 宸ュ叿鍑芥暟
 const debugIdMatching = () => {
   if (formalDatabaseData.value.length > 0 && selectedIds.value.length > 0) {
     const matchedRows = formalDatabaseData.value.filter((row) =>
-      selectedIds.value.includes(row.id)
+        selectedIds.value.includes(row.id)
     );
   }
 };
@@ -226,8 +233,8 @@
   if (res.code === 200) {
     formalDatabaseData.value = res.data;
     const existingOfficialIds = tableData.value
-      .map((item) => item.officialId)
-      .filter((id) => id);
+        .map((item) => item.officialId)
+        .filter((id) => id);
     selectedIds.value = existingOfficialIds;
     debugIdMatching();
     nextTick(() => {
@@ -252,7 +259,7 @@
       try {
         etableRef.value.clearSelection();
         const rowsToSelect = formalDatabaseData.value.filter((row) =>
-          ids.includes(row.id)
+            ids.includes(row.id)
         );
         if (rowsToSelect.length > 0) {
           etableRef.value.setRowsSelection(rowsToSelect, true);
@@ -277,8 +284,8 @@
   detailsTableData.value = data.productionList || [];
   dialogType.value = "edit";
   const existingOfficialIds = tableData.value
-    .map((item) => item.officialId)
-    .filter((id) => id);
+      .map((item) => item.officialId)
+      .filter((id) => id);
   selectedIds.value = existingOfficialIds;
 };
 // 鐩戝惉瀵硅瘽妗嗙姸鎬侊紝鍦ㄦ墦寮�鏃惰缃�変腑鐘舵��
@@ -319,8 +326,8 @@
 
   // 鏇存柊selectedIds锛岀‘淇濆寘鍚墍鏈夊綋鍓峵ableData涓殑officialId
   const allOfficialIds = tableData.value
-    .map((item) => item.officialId)
-    .filter((id) => id);
+      .map((item) => item.officialId)
+      .filter((id) => id);
   selectedIds.value = allOfficialIds;
 
   // 鍏抽棴閫夋嫨瀵硅瘽妗�
@@ -348,13 +355,13 @@
   // 楠岃瘉鐢熶骇鏄庣粏鏁版嵁
   const detailsValidation = validateFormData(detailsTableData.value, [
     "coalId",
-    "productionQuantity", 
+    "productionQuantity",
     "laborCost",
     "energyConsumptionCost",
     "equipmentDepreciation",
     "purchasePrice"
   ]);
-  
+
   if (!detailsValidation.isValid) {
     ElMessage.warning(detailsValidation.message);
     return;
@@ -400,13 +407,13 @@
 const handleCellEdit = (row, prop, value) => {
   if (prop === "usedQuantity") {
     const validation = validateNumber(value, 0, Number(row.inventoryQuantity));
-    
+
     if (!validation.isValid) {
       ElMessage.warning(validation.message);
       row.usedQuantity = validation.value;
       return;
     }
-    
+
     row.usedQuantity = validation.value;
   }
 };
@@ -445,15 +452,15 @@
 // 鍒犻櫎鍗曚釜宸查�夋暟鎹」
 const handleRemoveItem = (row) => {
   const index = tableData.value.findIndex(
-    (item) => item.officialId === row.officialId
+      (item) => item.officialId === row.officialId
   );
   if (index > -1) {
     tableData.value.splice(index, 1);
 
     // 鏇存柊selectedIds
     const updatedOfficialIds = tableData.value
-      .map((item) => item.officialId)
-      .filter((id) => id);
+        .map((item) => item.officialId)
+        .filter((id) => id);
     selectedIds.value = updatedOfficialIds;
     ElMessage.success("宸插垹闄ら�変腑椤�");
   }
@@ -470,21 +477,22 @@
     cancelButtonText: "鍙栨秷",
     type: "warning",
   })
-    .then(async () => {
-      if (dialogType.value === "edit") {
-        let res = await deleteProductionInventory({
-          productionInventoryList: tableData.value,
-        });
-        emit("update:productionAndProcessing", tableData.value, copyForm.value);
-      }
-      // [Vue warn]: Component emitted event "update:productionAndProcessing" but it is neither declared in the emits option nor as an "onUpdate:productionAndProcessing" prop.
+      .then(async () => {
+        if (dialogType.value === "edit") {
+          let res = await deleteProductionInventory({
+            productionInventoryList: tableData.value,
+          });
+          emit("update:productionAndProcessing", tableData.value, copyForm.value);
+        }
+        // [Vue warn]: Component emitted event "update:productionAndProcessing" but it is neither declared in the emits option nor as an "onUpdate:productionAndProcessing" prop.
 
-      formalDatabaseSelectedData.value = [];
-      tableData.value = [];
-      selectedIds.value = [];
-      ElMessage.success("宸叉竻绌烘墍鏈夋暟鎹�");
-    })
-    .catch(() => {});
+        formalDatabaseSelectedData.value = [];
+        tableData.value = [];
+        selectedIds.value = [];
+        ElMessage.success("宸叉竻绌烘墍鏈夋暟鎹�");
+      })
+      .catch(() => {
+      });
 };
 
 // 璁$畻鎬讳娇鐢ㄩ噺
@@ -507,6 +515,7 @@
 .el-row > .el-col > h1 {
   font-weight: bolder;
 }
+
 .empty-table > .el-row {
   margin-bottom: 12px;
 }
diff --git a/src/views/production/components/useCoalData.js b/src/views/production/components/useCoalData.js
index 37b2245..9a86b81 100644
--- a/src/views/production/components/useCoalData.js
+++ b/src/views/production/components/useCoalData.js
@@ -2,9 +2,9 @@
  * 鐓ょ鏁版嵁绠$悊缁勫悎寮忓嚱鏁�
  * 鎻愪緵鐓ょ鏁版嵁鐨勮幏鍙栥�佺紦瀛樸�佽浆鎹㈢瓑鍔熻兘
  */
-import { ref, computed, watch } from 'vue';
-import { getCoalInfoList } from "@/api/production";
-import { ElMessage } from 'element-plus';
+import {ref, computed, watch} from 'vue';
+import {getCoalInfoList} from "@/api/production";
+import {ElMessage} from 'element-plus';
 
 // 鍏ㄥ眬鐓ょ鏁版嵁缂撳瓨
 const coalData = ref([]);
@@ -12,85 +12,85 @@
 const isLoaded = ref(false);
 
 export function useCoalData() {
-  
-  // 鑾峰彇鐓ょ鏁版嵁
-  const getCoalData = async (forceRefresh = false) => {
-    if (isLoaded.value && !forceRefresh) {
-      return coalData.value;
-    }
 
-    if (isLoading.value) {
-      // 濡傛灉姝e湪鍔犺浇锛岀瓑寰呭姞杞藉畬鎴�
-      return new Promise((resolve) => {
-        const unwatch = watch(isLoading, (loading) => {
-          if (!loading) {
-            unwatch();
-            resolve(coalData.value);
-          }
-        });
-      });
-    }
+    // 鑾峰彇鐓ょ鏁版嵁
+    const getCoalData = async (forceRefresh = false) => {
+        if (isLoaded.value && !forceRefresh) {
+            return coalData.value;
+        }
 
-    isLoading.value = true;
-    try {
-      const res = await getCoalInfoList();
-      if (res.code === 200) {
-        coalData.value = res.data;
-        isLoaded.value = true;
-        return coalData.value;
-      } else {
-        ElMessage.error('鑾峰彇鐓ょ鏁版嵁澶辫触');
-        return [];
-      }
-    } catch (error) {
-      ElMessage.error('鑾峰彇鐓ょ鏁版嵁澶辫触');
-      console.error('鐓ょ鏁版嵁鑾峰彇閿欒:', error);
-      return [];
-    } finally {
-      isLoading.value = false;
-    }
-  };
+        if (isLoading.value) {
+            // 濡傛灉姝e湪鍔犺浇锛岀瓑寰呭姞杞藉畬鎴�
+            return new Promise((resolve) => {
+                const unwatch = watch(isLoading, (loading) => {
+                    if (!loading) {
+                        unwatch();
+                        resolve(coalData.value);
+                    }
+                });
+            });
+        }
 
-  // 鏍规嵁ID鑾峰彇鐓ょ鍚嶇О
-  const getCoalNameById = (id) => {
-    if (!id || coalData.value.length === 0) return id;
-    const coal = coalData.value.find(item => item.id == id);
-    return coal ? coal.coal : id;
-  };
+        isLoading.value = true;
+        try {
+            const res = await getCoalInfoList();
+            if (res.code === 200) {
+                coalData.value = res.data;
+                isLoaded.value = true;
+                return coalData.value;
+            } else {
+                ElMessage.error('鑾峰彇鐓ょ鏁版嵁澶辫触');
+                return [];
+            }
+        } catch (error) {
+            ElMessage.error('鑾峰彇鐓ょ鏁版嵁澶辫触');
+            console.error('鐓ょ鏁版嵁鑾峰彇閿欒:', error);
+            return [];
+        } finally {
+            isLoading.value = false;
+        }
+    };
 
-  // 鏍规嵁鍚嶇О鑾峰彇鐓ょID
-  const getCoalIdByName = (name) => {
-    if (!name || coalData.value.length === 0) return '';
-    const coal = coalData.value.find(item => item.coal === name);
-    return coal ? coal.id : '';
-  };
+    // 鏍规嵁ID鑾峰彇鐓ょ鍚嶇О
+    const getCoalNameById = (id) => {
+        if (!id || coalData.value.length === 0) return id;
+        const coal = coalData.value.find(item => item.id == id);
+        return coal ? coal.coal : id;
+    };
 
-  // 鐢熸垚涓嬫媺閫夐」
-  const coalOptions = computed(() => {
-    return coalData.value.map(item => ({
-      label: item.coal,
-      value: item.coal,
-      key: item.id
-    }));
-  });
+    // 鏍规嵁鍚嶇О鑾峰彇鐓ょID
+    const getCoalIdByName = (name) => {
+        if (!name || coalData.value.length === 0) return '';
+        const coal = coalData.value.find(item => item.coal === name);
+        return coal ? coal.id : '';
+    };
 
-  // 鐢熸垚key-value鏄犲皠
-  const coalMap = computed(() => {
-    const map = {};
-    coalData.value.forEach(item => {
-      map[item.id] = item.coal;
+    // 鐢熸垚涓嬫媺閫夐」
+    const coalOptions = computed(() => {
+        return coalData.value.map(item => ({
+            label: item.coal,
+            value: item.coal,
+            key: item.id
+        }));
     });
-    return map;
-  });
 
-  return {
-    coalData: computed(() => coalData.value),
-    coalOptions,
-    coalMap,
-    isLoading: computed(() => isLoading.value),
-    isLoaded: computed(() => isLoaded.value),
-    getCoalData,
-    getCoalNameById,
-    getCoalIdByName
-  };
+    // 鐢熸垚key-value鏄犲皠
+    const coalMap = computed(() => {
+        const map = {};
+        coalData.value.forEach(item => {
+            map[item.id] = item.coal;
+        });
+        return map;
+    });
+
+    return {
+        coalData: computed(() => coalData.value),
+        coalOptions,
+        coalMap,
+        isLoading: computed(() => isLoading.value),
+        isLoaded: computed(() => isLoaded.value),
+        getCoalData,
+        getCoalNameById,
+        getCoalIdByName
+    };
 }
diff --git a/src/views/production/components/useDialog.js b/src/views/production/components/useDialog.js
index c3694b3..23eb8ad 100644
--- a/src/views/production/components/useDialog.js
+++ b/src/views/production/components/useDialog.js
@@ -2,55 +2,55 @@
  * 瀵硅瘽妗嗙鐞嗙粍鍚堝紡鍑芥暟
  * 鎻愪緵瀵硅瘽妗嗙殑鎵撳紑銆佸叧闂�佹暟鎹鐞嗙瓑鍔熻兘
  */
-import { ref } from 'vue';
+import {ref} from 'vue';
 
 export function useDialog() {
-  const dialogVisible = ref(false);
-  const dialogType = ref('add');
-  const dialogRef = ref(null);
-  const currentRowData = ref(null);
+    const dialogVisible = ref(false);
+    const dialogType = ref('add');
+    const dialogRef = ref(null);
+    const currentRowData = ref(null);
 
-  // 鎵撳紑瀵硅瘽妗�
-  const openDialog = (type = 'add', rowData = null) => {
-    dialogType.value = type;
-    currentRowData.value = rowData;
-    dialogVisible.value = true;
-    
-    // 璋冪敤瀵硅瘽妗嗙粍浠剁殑鍒濆鍖栨柟娉�
-    if (dialogRef.value) {
-      if (type === 'add') {
-        dialogRef.value.Initialization?.();
-      } else if (type === 'edit' && rowData) {
-        dialogRef.value.editInitialization?.(rowData);
-      }
-    }
-  };
+    // 鎵撳紑瀵硅瘽妗�
+    const openDialog = (type = 'add', rowData = null) => {
+        dialogType.value = type;
+        currentRowData.value = rowData;
+        dialogVisible.value = true;
 
-  // 鍏抽棴瀵硅瘽妗�
-  const closeDialog = () => {
-    dialogVisible.value = false;
-    dialogType.value = 'add';
-    currentRowData.value = null;
-  };
+        // 璋冪敤瀵硅瘽妗嗙粍浠剁殑鍒濆鍖栨柟娉�
+        if (dialogRef.value) {
+            if (type === 'add') {
+                dialogRef.value.Initialization?.();
+            } else if (type === 'edit' && rowData) {
+                dialogRef.value.editInitialization?.(rowData);
+            }
+        }
+    };
 
-  // 瀵硅瘽妗嗘垚鍔熷洖璋�
-  const handleDialogSuccess = (callback) => {
-    closeDialog();
-    if (typeof callback === 'function') {
-      callback();
-    }
-  };
+    // 鍏抽棴瀵硅瘽妗�
+    const closeDialog = () => {
+        dialogVisible.value = false;
+        dialogType.value = 'add';
+        currentRowData.value = null;
+    };
 
-  return {
-    // 鐘舵��
-    dialogVisible,
-    dialogType,
-    dialogRef,
-    currentRowData,
-    
-    // 鏂规硶
-    openDialog,
-    closeDialog,
-    handleDialogSuccess
-  };
+    // 瀵硅瘽妗嗘垚鍔熷洖璋�
+    const handleDialogSuccess = (callback) => {
+        closeDialog();
+        if (typeof callback === 'function') {
+            callback();
+        }
+    };
+
+    return {
+        // 鐘舵��
+        dialogVisible,
+        dialogType,
+        dialogRef,
+        currentRowData,
+
+        // 鏂规硶
+        openDialog,
+        closeDialog,
+        handleDialogSuccess
+    };
 }
diff --git a/src/views/production/components/useTableData.js b/src/views/production/components/useTableData.js
index ccdd846..4f48ef6 100644
--- a/src/views/production/components/useTableData.js
+++ b/src/views/production/components/useTableData.js
@@ -2,131 +2,131 @@
  * 琛ㄦ牸鏁版嵁绠$悊缁勫悎寮忓嚱鏁�
  * 鎻愪緵鍒嗛〉銆佹悳绱€�侀�夋嫨绛夐�氱敤鍔熻兘
  */
-import { ref, reactive } from 'vue';
-import { ElMessage, ElMessageBox } from 'element-plus';
+import {ref, reactive} from 'vue';
+import {ElMessage, ElMessageBox} from 'element-plus';
 
 export function useTableData(apiFunction, options = {}) {
-  const {
-    pageSize = 10,
-    searchField = 'searchAll'
-  } = options;
+    const {
+        pageSize = 10,
+        searchField = 'searchAll'
+    } = options;
 
-  // 鍝嶅簲寮忔暟鎹�
-  const tableData = ref([]);
-  const loading = ref(false);
-  const total = ref(0);
-  const selectedRows = ref([]);
+    // 鍝嶅簲寮忔暟鎹�
+    const tableData = ref([]);
+    const loading = ref(false);
+    const total = ref(0);
+    const selectedRows = ref([]);
 
-  // 鏌ヨ鍙傛暟
-  const queryParams = reactive({
-    [searchField]: '',
-    current: 1,
-    size: pageSize,
-  });
+    // 鏌ヨ鍙傛暟
+    const queryParams = reactive({
+        [searchField]: '',
+        current: 1,
+        size: pageSize,
+    });
 
-  // 鑾峰彇鍒楄〃鏁版嵁
-  const getList = async () => {
-    loading.value = true;
-    try {
-      const params = {
-        [searchField]: queryParams[searchField],
-        current: queryParams.current,
-        size: queryParams.size,
-      };
-      console.log('鏌ヨ鍙傛暟:', params);
-      const res = await apiFunction(params);
-      tableData.value = res.data.records || [];
-      total.value = res.data.total || 0;
-    } catch (error) {
-      ElMessage.error('鑾峰彇鏁版嵁澶辫触');
-      console.error('API閿欒:', error);
-    } finally {
-      loading.value = false;
-    }
-  };
-
-  // 鎼滅储
-  const handleSearch = () => {
-    queryParams.current = 1;
-    getList();
-  };
-
-  // 閲嶇疆鎼滅储
-  const handleReset = () => {
-    queryParams[searchField] = '';
-    console.log('閲嶇疆鎼滅储鍙傛暟:', queryParams);
-    handleSearch();
-  };
-
-  // 鍒嗛〉澶勭悊
-  const handlePageChange = ({ page, limit }) => {
-    if (page && page !== queryParams.current) {
-      queryParams.current = page;
-    }
-    if (limit && limit !== queryParams.size) {
-      queryParams.size = limit;
-      queryParams.current = 1; // 鏀瑰彉姣忛〉澶у皬鏃跺洖鍒扮涓�椤�
-    }
-    getList();
-  };
-
-  // 琛ㄦ牸閫夋嫨澶勭悊
-  const handleSelectionChange = (selection) => {
-    selectedRows.value = selection;
-  };
-
-  // 鎵归噺鍒犻櫎
-  const deleteSelected = async (deleteFunction) => {
-    if (selectedRows.value.length === 0) {
-      ElMessage.warning('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁');
-      return;
-    }
-
-    try {
-      await ElMessageBox.confirm(
-        `纭鍒犻櫎閫変腑鐨� ${selectedRows.value.length} 鏉℃暟鎹悧锛焋,
-        '鍒犻櫎纭',
-        {
-          confirmButtonText: '纭畾',
-          cancelButtonText: '鍙栨秷',
-          type: 'warning'
+    // 鑾峰彇鍒楄〃鏁版嵁
+    const getList = async () => {
+        loading.value = true;
+        try {
+            const params = {
+                [searchField]: queryParams[searchField],
+                current: queryParams.current,
+                size: queryParams.size,
+            };
+            console.log('鏌ヨ鍙傛暟:', params);
+            const res = await apiFunction(params);
+            tableData.value = res.data.records || [];
+            total.value = res.data.total || 0;
+        } catch (error) {
+            ElMessage.error('鑾峰彇鏁版嵁澶辫触');
+            console.error('API閿欒:', error);
+        } finally {
+            loading.value = false;
         }
-      );
+    };
 
-      const ids = selectedRows.value.map(row => row.id);
-      await deleteFunction(ids);
-      
-      ElMessage.success('鍒犻櫎鎴愬姛');
-      selectedRows.value = [];
-      getList();
-    } catch (error) {
-      if (error !== 'cancel') {
-        ElMessage.error('鍒犻櫎澶辫触');
-        console.error('鍒犻櫎閿欒:', error);
-      }
-    }
-  };
+    // 鎼滅储
+    const handleSearch = () => {
+        queryParams.current = 1;
+        getList();
+    };
 
-  // 鍒锋柊鏁版嵁
-  const refresh = () => {
-    getList();
-  };
+    // 閲嶇疆鎼滅储
+    const handleReset = () => {
+        queryParams[searchField] = '';
+        console.log('閲嶇疆鎼滅储鍙傛暟:', queryParams);
+        handleSearch();
+    };
 
-  return {
-    // 鏁版嵁
-    tableData,
-    loading,
-    total,
-    selectedRows,
-    queryParams,
-    
-    // 鏂规硶
-    getList,
-    handleSearch,
-    handleReset,
-    handlePageChange,
-    handleSelectionChange,
-    deleteSelected,
-    refresh
-  };
+    // 鍒嗛〉澶勭悊
+    const handlePageChange = ({page, limit}) => {
+        if (page && page !== queryParams.current) {
+            queryParams.current = page;
+        }
+        if (limit && limit !== queryParams.size) {
+            queryParams.size = limit;
+            queryParams.current = 1; // 鏀瑰彉姣忛〉澶у皬鏃跺洖鍒扮涓�椤�
+        }
+        getList();
+    };
+
+    // 琛ㄦ牸閫夋嫨澶勭悊
+    const handleSelectionChange = (selection) => {
+        selectedRows.value = selection;
+    };
+
+    // 鎵归噺鍒犻櫎
+    const deleteSelected = async (deleteFunction) => {
+        if (selectedRows.value.length === 0) {
+            ElMessage.warning('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁');
+            return;
+        }
+
+        try {
+            await ElMessageBox.confirm(
+                `纭鍒犻櫎閫変腑鐨� ${selectedRows.value.length} 鏉℃暟鎹悧锛焋,
+                '鍒犻櫎纭',
+                {
+                    confirmButtonText: '纭畾',
+                    cancelButtonText: '鍙栨秷',
+                    type: 'warning'
+                }
+            );
+
+            const ids = selectedRows.value.map(row => row.id);
+            await deleteFunction(ids);
+
+            ElMessage.success('鍒犻櫎鎴愬姛');
+            selectedRows.value = [];
+            getList();
+        } catch (error) {
+            if (error !== 'cancel') {
+                ElMessage.error('鍒犻櫎澶辫触');
+                console.error('鍒犻櫎閿欒:', error);
+            }
+        }
+    };
+
+    // 鍒锋柊鏁版嵁
+    const refresh = () => {
+        getList();
+    };
+
+    return {
+        // 鏁版嵁
+        tableData,
+        loading,
+        total,
+        selectedRows,
+        queryParams,
+
+        // 鏂规硶
+        getList,
+        handleSearch,
+        handleReset,
+        handlePageChange,
+        handleSelectionChange,
+        deleteSelected,
+        refresh
+    };
 }
diff --git a/src/views/production/index.vue b/src/views/production/index.vue
index 8ab5e23..8108dd7 100644
--- a/src/views/production/index.vue
+++ b/src/views/production/index.vue
@@ -4,9 +4,9 @@
     <el-form :inline="true" :model="queryParams" class="search-form">
       <el-form-item label="鎼滅储">
         <el-input
-          v-model="queryParams.searchAll"
-          placeholder="璇疯緭鍏ュ叧閿瘝"
-          clearable
+            v-model="queryParams.searchAll"
+            placeholder="璇疯緭鍏ュ叧閿瘝"
+            clearable
         />
       </el-form-item>
       <el-form-item>
@@ -27,18 +27,19 @@
         </el-button>
       </div>      <!-- 鏁版嵁琛ㄦ牸 -->
       <ETable
-        :showOverflowTooltip="false"
-        :loading="loading"
-        :table-data="tableData"
-        :columns="columns"
-        :current-page="queryParams.current"
-        :page-size="queryParams.size"
-        @selection-change="handleSelectionChange"
-        @edit="row => openDialog('edit', row)"
-        :show-selection="true"
-        :border="true"
-        :maxHeight="480"
-      >        <template #coal="{ row }">
+          :showOverflowTooltip="false"
+          :loading="loading"
+          :table-data="tableData"
+          :columns="columns"
+          :current-page="queryParams.current"
+          :page-size="queryParams.size"
+          @selection-change="handleSelectionChange"
+          @edit="row => openDialog('edit', row)"
+          :show-selection="true"
+          :border="true"
+          :maxHeight="480"
+      >
+        <template #coal="{ row }">
           <div class="coal-tags">
             <el-tag v-for="coal in parseCoalArray(row.coal)" :key="coal" size="small">
               {{ getCoalNameById(coal) }}
@@ -48,47 +49,47 @@
         </template>
       </ETable>      <!-- 鍒嗛〉缁勪欢 -->
       <Pagination
-        :layout="'total, prev, pager, next, jumper'"
-        :total="total"
-        v-model:page="queryParams.current"
-        :limit="queryParams.size"
-        @pagination="handlePageChange"
+          :layout="'total, prev, pager, next, jumper'"
+          :total="total"
+          v-model:page="queryParams.current"
+          :limit="queryParams.size"
+          @pagination="handlePageChange"
       />
     </el-card>
 
     <!-- 鐢熶骇瀵硅瘽妗� -->
     <!-- handleProductionAndProcessing -->
     <ProductionDialog
-      v-model:visible="dialogVisible"
-      ref="dialogRef"
-      :type="dialogType"
-      @update:productionAndProcessing="handleProductionAndProcessing"
-      @success="handleDialogSuccess"
+        v-model:visible="dialogVisible"
+        ref="dialogRef"
+        :type="dialogType"
+        @update:productionAndProcessing="handleProductionAndProcessing"
+        @success="handleDialogSuccess"
     />
   </div>
 </template>
 
 <script setup>
-import { onMounted } from "vue";
-import { ElMessage } from "element-plus";
-import { Plus, Delete } from "@element-plus/icons-vue";
+import {onMounted} from "vue";
+import {ElMessage} from "element-plus";
+import {Plus, Delete} from "@element-plus/icons-vue";
 import ProductionDialog from "./components/ProductionDialog.vue";
 import ETable from "@/components/Table/ETable.vue";
 import Pagination from "@/components/Pagination/index.vue";
-import { getProductionMasterList, delPM } from "@/api/production";
-import { parseCoalArray } from "@/utils/production";
-import { useTableData } from "./components/useTableData.js";
-import { useDialog } from "./components/useDialog.js";
-import { useCoalData } from "./components/useCoalData.js";
+import {getProductionMasterList, delPM} from "@/api/production";
+import {parseCoalArray} from "@/utils/production";
+import {useTableData} from "./components/useTableData.js";
+import {useDialog} from "./components/useDialog.js";
+import {useCoalData} from "./components/useCoalData.js";
 
 // 琛ㄦ牸鍒楅厤缃�
 const columns = [
-  { prop: "coal", label: "鐓ょ", minWidth: 150, slot: 'coal' },
-  { prop: "productionQuantity", label: "鐢熶骇鏁伴噺", minWidth: 120 },
-  { prop: "laborCost", label: "浜哄伐鎴愭湰", minWidth: 150 },
-  { prop: "energyConsumptionCost", label: "鑳借�楁垚鏈�", minWidth: 120 },
-  { prop: "equipmentDepreciation", label: "璁惧鎶樻棫", minWidth: 143 },
-  { prop: "totalCost", label: "鎬绘垚鏈�", minWidth: 150 },
+  {prop: "coal", label: "鐓ょ", minWidth: 150, slot: 'coal'},
+  {prop: "productionQuantity", label: "鐢熶骇鏁伴噺", minWidth: 120},
+  {prop: "laborCost", label: "浜哄伐鎴愭湰", minWidth: 150},
+  {prop: "energyConsumptionCost", label: "鑳借�楁垚鏈�", minWidth: 120},
+  {prop: "equipmentDepreciation", label: "璁惧鎶樻棫", minWidth: 143},
+  {prop: "totalCost", label: "鎬绘垚鏈�", minWidth: 150},
 ];
 
 // 浣跨敤琛ㄦ牸鏁版嵁缁勫悎寮忓嚱鏁�
@@ -104,7 +105,7 @@
   handlePageChange,
   handleSelectionChange,
   deleteSelected
-} = useTableData(getProductionMasterList, { pageSize: 10 });
+} = useTableData(getProductionMasterList, {pageSize: 10});
 
 // 浣跨敤瀵硅瘽妗嗙粍鍚堝紡鍑芥暟
 const {
@@ -116,13 +117,13 @@
 } = useDialog();
 
 // 浣跨敤鐓ょ鏁版嵁缁勫悎寮忓嚱鏁�
-const { getCoalNameById, getCoalData } = useCoalData();
+const {getCoalNameById, getCoalData} = useCoalData();
 
 // 澶勭悊鐢熶骇鏁版嵁鏇存柊
 const handleProductionAndProcessing = (row, rows) => {
   const index = tableData.value.findIndex(item => item.id === rows.id);
   if (index !== -1) {
-    tableData.value[index] = { ...tableData.value[index], ...row };
+    tableData.value[index] = {...tableData.value[index], ...row};
   }
 };
 
@@ -158,6 +159,7 @@
     width: 20%;
   }
 }
+
 .search-form {
   display: flex;
   justify-content: space-between;
@@ -172,15 +174,16 @@
     margin-left: 10px;
   }
 }
+
 .coal-tags {
   display: flex;
   flex-wrap: wrap;
   gap: 4px;
-  
+
   .el-tag {
     margin-right: 4px;
     margin-bottom: 4px;
-    
+
     &:last-child {
       margin-right: 0;
     }

--
Gitblit v1.9.3