From 1a73c77e1d14205014f6a77a8954de480d436c0e Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期四, 05 六月 2025 16:05:31 +0800
Subject: [PATCH] 联调基础模块信息-》供应商-》客户信息-》煤种信息 采购信息 联调

---
 src/views/basicInformation/index.vue                  |  355 +++++++++++++--
 src/views/procureMent/index.vue                       |  113 ++--
 src/api/basicInformation/coalQualityMaintenance.js    |    9 
 src/api/procureMent/index.js                          |   29 +
 src/views/procureMent/components/ProductionDialog.vue |    8 
 src/views/basicInformation/mould/coal.vue             |   99 +++-
 src/api/basicInformation/coal.js                      |   14 
 src/api/basicInformation/customer.js                  |   27 +
 src/api/tool/publicInterface.js                       |    9 
 src/views/basicInformation/mould/supplier.vue         |  102 ++--
 src/components/Table/ETable.vue                       |  331 +++++++-------
 src/views/basicInformation/mould/customer.vue         |  182 ++++---
 12 files changed, 845 insertions(+), 433 deletions(-)

diff --git a/src/api/basicInformation/coal.js b/src/api/basicInformation/coal.js
index 9a62ed6..f519cfc 100644
--- a/src/api/basicInformation/coal.js
+++ b/src/api/basicInformation/coal.js
@@ -1,7 +1,7 @@
-// 鐓よ川缁存姢
+// 鐓ょ淇℃伅
 import request from '@/utils/request'
 
-// 鏌ヨ鐓よ川缁存姢鍒楄〃
+// 鏌ヨ鐓ょ淇℃伅鍒楄〃
 export function getCoalInfo(query) {
     return request({
         url: '/coalInfo/list',
@@ -10,7 +10,7 @@
     })
 }
 
-// 鏂板鎴栫紪杈戠叅璐ㄧ淮鎶�
+// 鏂板鎴栫紪杈戠叅绉嶄俊鎭�
 export function addOrEditCoalInfo(query) {
     return request({
         url: '/coalInfo/addOrEditCoalInfo',
@@ -18,4 +18,12 @@
         data: query
     })
 }
+// 鍒犻櫎鐓ょ淇℃伅鏁版嵁
+export function delCoalInfo(query) {
+    return request({
+        url: '/coalInfo/delCoalInfo',
+        method: 'delete',
+        data: query
+    })
+}
 
diff --git a/src/api/basicInformation/coalQualityMaintenance.js b/src/api/basicInformation/coalQualityMaintenance.js
index 4322044..6fdca98 100644
--- a/src/api/basicInformation/coalQualityMaintenance.js
+++ b/src/api/basicInformation/coalQualityMaintenance.js
@@ -17,4 +17,11 @@
         data: query
     })
 }
-
+// 鍒犻櫎鐓よ川缁存姢鏁版嵁
+export function delCoalQuality(query){
+    return request({
+        url: '/coalQuality/delCoalQuality',
+        method: 'delete',
+        data: query
+    })
+}
diff --git a/src/api/basicInformation/customer.js b/src/api/basicInformation/customer.js
new file mode 100644
index 0000000..968ae42
--- /dev/null
+++ b/src/api/basicInformation/customer.js
@@ -0,0 +1,27 @@
+// 瀹㈡埛淇℃伅
+import request from '@/utils/request'
+
+// 鑾峰彇瀹㈡埛淇℃伅鍒楄〃
+export function getCustomerList(query) {
+    return request({
+        url: '/customer/list',
+        method: 'get',
+        params: query
+    })
+}
+// 鏂板鎴栫紪杈戝鎴蜂俊鎭垪琛�
+export function addOrEditCustomer(query){
+    return request({
+        url: '/customer/addOrEditCustomer',
+        method: 'post',
+        data: query
+    })
+}
+// 鍒犻櫎瀹㈡埛淇℃伅鍒楄〃
+export function delCustomer(query){
+    return request({
+        url: '/customer/delCustomer',
+        method: 'delete',
+        data: query
+    })
+}
diff --git a/src/api/procureMent/index.js b/src/api/procureMent/index.js
new file mode 100644
index 0000000..effbecf
--- /dev/null
+++ b/src/api/procureMent/index.js
@@ -0,0 +1,29 @@
+// 閲囪喘绠$悊
+import request from '@/utils/request'
+
+// 鏌ヨ閲囪喘绠$悊鍒楄〃
+export function purchaseRegistration(query) {
+    return request({
+        url: '/purchaseRegistration/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 鏂板缂栬緫閲囪喘绠$悊
+export function addOrEditPR(query) {
+    return request({
+        url: '/purchaseRegistration/addOrEditPR',
+        method: 'post',
+        data: query
+    })
+}
+// 鍒犻櫎閲囪喘绠$悊
+export function delPR(query) {
+    return request({
+        url: '/purchaseRegistration/delPR',
+        method: 'delete',
+        data: query
+    })
+}
+
diff --git a/src/api/tool/publicInterface.js b/src/api/tool/publicInterface.js
new file mode 100644
index 0000000..0de140d
--- /dev/null
+++ b/src/api/tool/publicInterface.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 鑾峰彇璺敱
+export const testUserList = () => {
+  return request({
+    url: '/test/user/list',
+    method: 'get'
+  })
+}
\ No newline at end of file
diff --git a/src/components/Table/ETable.vue b/src/components/Table/ETable.vue
index b6bc89e..6fc7f1d 100644
--- a/src/components/Table/ETable.vue
+++ b/src/components/Table/ETable.vue
@@ -1,178 +1,169 @@
 <template>
-    <el-table
-      v-loading="loading"
-      :data="tableData"
-      :border="border"
-      :show-selection="showSelection"
-      :max-height="maxHeight"
-      :header-cell-style="{ background: '#EBEEF5', color: '#3D3D3D' }"
-      @selection-change="handleSelectionChange"
-      @row-click="handleRowClick"
-      @row-dblclick="handleRowDblClick"
-      @cell-click="handleCellClick"
-      :max-width="maxWidth"
-      @export="handleExport"
-    >
-      <el-table-column v-if="showSelection" type="selection" width="55" align="center" />
-      <el-table-column v-if="showIndex" label="搴忓彿" type="index" width="60" align="center"  />
-      <template v-for="col in columns" :key="col.prop">
-        <el-table-column
-          v-bind="col"
-          :show-overflow-tooltip="shouldShowTooltip(col, tableData)"
-          :formatter="(row, column, cellValue) => cellValue == null || cellValue === '' ? '--' : cellValue"
-          align="center"
-        >
-          <template v-if="col.slot" #default>
-            <slot></slot>
-          </template>
-        </el-table-column>
-      </template>
-      <!-- 鎿嶄綔鍒� -->
-      <el-table-column v-if="showOperations" :label="operationsLabel" :width="operationsWidth" fixed="right" align="center">
-        <template #default="scope">
-          <slot name="operations" :row="scope.row">
-            <el-button
-              v-if="operations.includes('edit')"
-              link
-              type="primary"
-              size="small"
-              @click="handleEdit(scope.row)"
-            >缂栬緫</el-button>
-<!--            <el-button-->
-<!--              v-if="operations.includes('delete')"-->
-<!--              link-->
-<!--              type="danger"-->
-<!--              size="small"-->
-<!--              @click="handleDelete(scope.row)"-->
-<!--            >鍒犻櫎</el-button>-->
-          </slot>
+  <el-table v-loading="loading" :data="tableData" :border="border" :show-selection="showSelection" :max-height="maxHeight"
+    :header-cell-style="{ background: '#EBEEF5', color: '#3D3D3D' }" @selection-change="handleSelectionChange"
+    @row-click="handleRowClick" @row-dblclick="handleRowDblClick" @cell-click="handleCellClick" :max-width="maxWidth"
+    @export="handleExport">
+    <el-table-column v-if="showSelection" type="selection" width="55" align="center" />
+    <el-table-column v-if="showIndex" label="搴忓彿" type="index" width="60" align="center" /> <template
+      v-for="col in columns" :key="col.prop">
+      <el-table-column v-bind="col" :show-overflow-tooltip="shouldShowTooltip(col, tableData)"
+        :formatter="col.formatter || defaultFormatter" align="center">
+        <template v-if="col.slot" #default>
+          <slot></slot>
         </template>
       </el-table-column>
-    </el-table>
-  </template>
+    </template>
+    <!-- 鎿嶄綔鍒� -->
+    <el-table-column v-if="showOperations" :label="operationsLabel" :width="operationsWidth" fixed="right" align="center">
+      <template #default="scope">
+        <slot name="operations" :row="scope.row">
+          <el-button v-if="operations.includes('edit')" link type="primary" size="small"
+            @click="handleEdit(scope.row)">缂栬緫</el-button>
+          <!--            <el-button-->
+          <!--              v-if="operations.includes('delete')"-->
+          <!--              link-->
+          <!--              type="danger"-->
+          <!--              size="small"-->
+          <!--              @click="handleDelete(scope.row)"-->
+          <!--            >鍒犻櫎</el-button>-->
+        </slot>
+      </template>
+    </el-table-column>
+  </el-table>
+</template>
   
   <script setup>
-  import { defineEmits } from 'vue'
-  import { ElMessage, ElMessageBox } from 'element-plus'
-  const props = defineProps({
-    // 鏈�澶у搴�
-    maxWidth: {
-      type: [String, Number],
-      default: 'auto'
-    },
-    handleCellClick: {
-      type: Function,
-      default: () => {}
-    },
-    handleRowClick: {
-      type: Function,
-      default: () => {}
-    },
-    handleExport: {
-      type: Function,
-      default: () => {}
-    },
-    handleRowDblClick: {
-      type: Function,
-      default: () => {}
-    },
-    // 楂樺害
-    maxHeight: {
-      type: [String, Number],
-      default: 'auto'
-    },
-    // 鍔犺浇鐘舵��
-    loading: {
-      type: Boolean,
-      default: false
-    },
-    //   border
-    border: {
-      type: Boolean,
-      default: false
-    },
-    // 琛ㄦ牸鏁版嵁
-    tableData: {
-      type: Array,
-      default: () => []
-    },
-    // 鏄惁鏄剧ず閫夋嫨鍒�
-    showSelection: {
-      type: Boolean,
-      default: true
-    },
-    // 鏄惁鏄剧ず搴忓彿鍒�
-    showIndex: {
-      type: Boolean,
-      default: true
-    },
-    // 鍒楅厤缃�
-    columns: {
-      type: Array,
-      default: () => []
-    },
-    // 鏄惁鏄剧ず鎿嶄綔鍒�
-    showOperations: {
-      type: Boolean,
-      default: true
-    },
-    // 鎿嶄綔鍒楁爣绛�
-    operationsLabel: {
-      type: String,
-      default: '鎿嶄綔'
-    },
-    // 鎿嶄綔鍒楀搴�
-    operationsWidth: {
-      type: [String, Number],
-      default: 100
-    },
-    // 鏄剧ず鍝簺鎿嶄綔鎸夐挳
-    operations: {
-      type: Array,
-      default: () => ['edit', 'delete', 'export']
-    },
-    // 鍒犻櫎纭淇℃伅
-    deleteConfirmText: {
-      type: String,
-      default: '纭鍒犻櫎璇ヨ褰曪紵'
-    }
-  })
-  // 妫�鏌ュ垪鏄惁闇�瑕佹樉绀簍ooltip
-  const shouldShowTooltip = (col, data) => {
+import { defineEmits } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+const props = defineProps({
+  // 鏈�澶у搴�
+  maxWidth: {
+    type: [String, Number],
+    default: 'auto'
+  },
+  handleCellClick: {
+    type: Function,
+    default: () => { }
+  },
+  handleRowClick: {
+    type: Function,
+    default: () => { }
+  },
+  handleExport: {
+    type: Function,
+    default: () => { }
+  },
+  handleRowDblClick: {
+    type: Function,
+    default: () => { }
+  },
+  // 楂樺害
+  maxHeight: {
+    type: [String, Number],
+    default: 'auto'
+  },
+  // 鍔犺浇鐘舵��
+  loading: {
+    type: Boolean,
+    default: false
+  },
+  //   border
+  border: {
+    type: Boolean,
+    default: false
+  },
+  // 琛ㄦ牸鏁版嵁
+  tableData: {
+    type: Array,
+    default: () => []
+  },
+  // 鏄惁鏄剧ず閫夋嫨鍒�
+  showSelection: {
+    type: Boolean,
+    default: true
+  },
+  // 鏄惁鏄剧ず搴忓彿鍒�
+  showIndex: {
+    type: Boolean,
+    default: true
+  },
+  // 鍒楅厤缃�
+  columns: {
+    type: Array,
+    default: () => []
+  },
+  // 鏄惁鏄剧ず鎿嶄綔鍒�
+  showOperations: {
+    type: Boolean,
+    default: true
+  },
+  // 鎿嶄綔鍒楁爣绛�
+  operationsLabel: {
+    type: String,
+    default: '鎿嶄綔'
+  },
+  // 鎿嶄綔鍒楀搴�
+  operationsWidth: {
+    type: [String, Number],
+    default: 100
+  },
+  // 鏄剧ず鍝簺鎿嶄綔鎸夐挳
+  operations: {
+    type: Array,
+    default: () => ['edit', 'delete', 'export']
+  },
+  // 鍒犻櫎纭淇℃伅
+  deleteConfirmText: {
+    type: String,
+    default: '纭鍒犻櫎璇ヨ褰曪紵'
+  }
+})
+// 妫�鏌ュ垪鏄惁闇�瑕佹樉绀簍ooltip
+const shouldShowTooltip = (col, data) => {
+  // 濡傛灉鍒楅厤缃腑鏄庣‘璁剧疆浜唖howOverflowTooltip锛屼娇鐢ㄨ璁剧疆
+  if (col.hasOwnProperty('showOverflowTooltip')) {
+    return col.showOverflowTooltip;
+  }
   // 濡傛灉娌℃湁prop锛岀洿鎺ヨ繑鍥瀎alse
   if (!col.prop) return false;
-  // 妫�鏌ヨ鍒楀湪鎵�鏈夋暟鎹腑鏄惁鏈夐潪绌哄��
+  // 妫�鏌ヨ鍒楀湪鎵�鏈夋暟鎹腑鏄惁鏈夐潪绌哄�硷紝榛樿鏄剧ずtooltip
   return data.some(row => row[col.prop] != null && row[col.prop] !== '');
 };
+
+// 榛樿鐨勬牸寮忓寲鍑芥暟
+const defaultFormatter = (row, column, cellValue) => {
+  return cellValue == null || cellValue === '' || cellValue === 0 ? '--' : cellValue;
+};
+
 // 澶勭悊閫夋嫨鍙樺寲銆佺紪杈戙�佸垹闄ゅ拰瀵煎嚭鎿嶄綔
-  const emit = defineEmits(['selection-change', 'edit', 'delete', 'export'])
-  const handleSelectionChange = (selection) => {
-    emit('selection-change', selection)
-  }
-  const handleEdit = (row) => {
-    emit('edit', row)
-  }
-  const handleDelete = (row) => {
-    ElMessageBox.confirm(
-      props.deleteConfirmText,
-      '璀﹀憡',
-      {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
-        type: 'warning'
-      }
-    ).then(() => {
-      emit('delete', row)
-    }).catch(() => {})
-  }
-  
-  const handleExport = (row) => {
-    emit('export', row)
-  }
-  </script>
+const emit = defineEmits(['selection-change', 'edit', 'delete', 'export'])
+const handleSelectionChange = (selection) => {
+  emit('selection-change', selection)
+}
+const handleEdit = (row) => {
+  emit('edit', row)
+}
+const handleDelete = (row) => {
+  ElMessageBox.confirm(
+    props.deleteConfirmText,
+    '璀﹀憡',
+    {
+      confirmButtonText: '纭畾',
+      cancelButtonText: '鍙栨秷',
+      type: 'warning'
+    }
+  ).then(() => {
+    emit('delete', row)
+  }).catch(() => { })
+}
+
+const handleExport = (row) => {
+  emit('export', row)
+}
+</script>
   
   <style scoped>
-  .el-table {
+.el-table {
     margin: 20px 0 !important;
   }
   
@@ -187,4 +178,16 @@
       overflow-x: auto;
     }
   }
-  </style> 
\ No newline at end of file
+  
+  /* 鏀寔鍦板潃鍒楁崲琛屾樉绀� */
+  :deep(.el-table .cell) {
+    white-space: normal !important;
+    word-break: break-all;
+    line-height: 1.4;
+  }
+  
+  /* 涓哄湴鍧�鍒楄缃渶灏忛珮搴︿互瀹圭撼澶氳鏂囨湰 */
+  :deep(.el-table td) {
+    padding: 8px 0;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue
index e2007e9..48dcbf6 100644
--- a/src/views/basicInformation/index.vue
+++ b/src/views/basicInformation/index.vue
@@ -1,12 +1,13 @@
 <template>
-  <div>
-    <el-form :inline="true" :model="queryParams" class="search-form">
-      <el-form-item label="渚涘簲鍟嗗悕绉�">
-        <el-input v-model="queryParams.searchAll" placeholder="璇疯緭鍏ュ叧閿瘝" clearable />
+  <div>    <el-form :inline="true" :model="queryParams" class="search-form" >
+      <el-form-item label="鎼滅储" v-if="tabName === 'supplier' || tabName === 'customer'">
+        <el-input v-model="queryParams.searchAll" placeholder="渚涘簲鍟�/璇嗗埆鐮�/璇︾粏鍦板潃" clearable />
       </el-form-item>
-  
+      <el-form-item label="鎼滅储" v-if="tabName === 'coal' || tabName === 'coalQualityMaintenance'">
+        <el-input v-model="queryParams.searchAll" placeholder="璇疯緭鍏ユ悳绱俊鎭�" clearable />
+      </el-form-item>
       <el-form-item>
-        <el-button type="primary" @click="getList">鏌ヨ</el-button>
+        <el-button type="primary" @click="search">鏌ヨ</el-button>
         <el-button @click="resetQuery">閲嶇疆</el-button>
       </el-form-item>
     </el-form>
@@ -20,13 +21,14 @@
       <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">瀵煎嚭</el-button>
+        <el-button type="info" :icon="Download" @click="handleExport" v-show="tabName === 'supplier' || tabName === 'customer'">瀵煎嚭</el-button>
       </el-row>
       <!-- 琛ㄦ牸缁勪欢 -->
       <div>
         <data-table :loading="loading" :table-data="tableData" :columns="columns"
           @selection-change="handleSelectionChange" @edit="handleEdit" :show-selection="true" :border="true" />
-      </div>      <pagination v-if="total>0" :page="pageNum" :limit="pageSizes" :total="total" @pagination="handPagination"
+      </div>
+      <pagination v-if="total>0" :page="pageNum" :limit="pageSizes" :total="total" @pagination="handPagination"
         :layout="'total, prev, pager, next, jumper'" />
       <Supplier v-if="tabName === 'supplier'" v-model:supplierDialogFormVisible="dialogFormVisible" :form="form"
         :title="title" @submit="handleSubmit" @beforeClose="handleBeforeClose"
@@ -43,7 +45,7 @@
 </template>
 
 <script setup>
-import { ref, reactive, onMounted } from "vue";
+import { ref, reactive, onMounted, computed } from "vue";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { Plus, Edit, Delete, Download } from "@element-plus/icons-vue";
 import DataTable from "@/components/Table/ETable.vue";
@@ -54,8 +56,12 @@
 import coalQualityMaintenance from "./mould/coalQualityMaintenance.vue";
 const { proxy } = getCurrentInstance()
 import { getSupply, addOrEditSupply, delSupply } from "@/api/basicInformation/supplier.js";
-import { getCoalInfo, addOrEditCoalInfo } from "@/api/basicInformation/coal.js";
-import { getCoalQuality, addOrEditCoalQuality } from "@/api/basicInformation/coalQualityMaintenance.js";
+import { getCoalInfo, delCoalInfo } from "@/api/basicInformation/coal.js";
+import { getCoalQuality, delCoalQuality } from "@/api/basicInformation/coalQualityMaintenance.js";
+import { testUserList } from "@/api/tool/publicInterface.js";
+import { getAreaOptions } from "@/api/system/area.js";
+import { getCustomerList, delCustomer } from "@/api/basicInformation/customer.js";
+
 // 寮圭獥
 const coalQualityMaintenanceDialogFormVisible = ref(false);
 const customerDialogFormVisible = ref(false);
@@ -65,6 +71,12 @@
 const form = ref({});
 const title = ref("");
 const copyForm = ref({});
+// 鐢ㄦ埛鍒楄〃鏁版嵁
+const userList = ref([]);
+// 鐢ㄦ埛鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵�
+const userMap = ref({});
+// 鍦板潃鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵惧湴鍧�鍚嶇О
+const addressMap = ref({});
 // 褰撳墠鏍囩
 const tabName = ref("supplier");
 // 鐘舵�佸彉閲�
@@ -76,13 +88,73 @@
 const selectedRows = ref([]);
 // 鏌ヨ鍙傛暟
 const queryParams = reactive({
-  searchText: "",
-  supplierName: "",
-  identifyNumber: "",
-  address: "",
 });
-onMounted(() => {
-  handleTabClick({ props: { name: "supplier" } });
+// 鍦板潃閫夋嫨鏁版嵁
+const addressSelectOptions = ref([]);
+const fetchAreaOptions = async () => {
+  addressSelectOptions.value = [];
+  const res = await getAreaOptions();
+  if (res.code === 200) {
+    addressSelectOptions.value = res.data;
+    buildAddressMap(res.data); // 鏋勫缓鍦板潃鏄犲皠琛�
+  }
+}
+
+// 鏋勫缓鍦板潃鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵惧湴鍧�鍚嶇О
+const buildAddressMap = (areaData) => {
+  const buildMap = (list, pathList = []) => {
+    list.forEach(item => {
+      const currentPath = [...pathList, item.label];
+      addressMap.value[item.id] = {
+        name: item.label,
+        fullPath: currentPath.join(' / ')
+      };
+      if (item.children && item.children.length > 0) {
+        buildMap(item.children, currentPath);
+      }
+    });
+  };
+  buildMap(areaData);
+};
+
+// 鍦板潃鏍煎紡鍖栧嚱鏁�
+const formatAddressArray = (addressIds) => {
+  // 濡傛灉鍦板潃鏄犲皠琛ㄨ繕娌℃湁鍑嗗濂斤紝鏄剧ず --
+  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 => {
+    return addressMap.value[id]?.name || '--';
+  });
+  
+  // 濡傛灉鎵�鏈夊湴鍧�鍚嶇О閮芥槸 '--'锛屽垯杩斿洖 '--'
+  if (addressNames.every(name => name === '--')) {
+    return '--';
+  }
+  
+  return addressNames.filter(name => name !== '--').join(' / ');
+};
+// 鑾峰彇鐢ㄦ埛鍒楄〃鏁版嵁
+const getUserList = async () => {
+  try {
+    const res = await testUserList();
+    if (res && res.data) {
+      userList.value = res.data;
+      userList.value.forEach(user => {
+        userMap.value[user.userId] = user.username;
+      });
+      console.log('鐢ㄦ埛鏄犲皠琛�:', userMap.value);
+    }
+  } catch (error) {
+    console.error('鑾峰彇鐢ㄦ埛鍒楄〃澶辫触:', error);
+  }
+};
+
+onMounted(async () => {
+  await handleTabClick({ props: { name: "supplier" } });
+  await fetchAreaOptions(); // 鍏堣幏鍙栧湴鍧�閫夋嫨鏁版嵁骞舵瀯寤烘槧灏勮〃
+  await getUserList(); // 鑾峰彇鐢ㄦ埛鍒楄〃
 });
 const columns = ref();
 // 鏍囩椤垫暟鎹�
@@ -96,40 +168,128 @@
 const addOrEdit = ref("add");
 // 琛ㄦ牸鏁版嵁
 const tableData = ref([]);
-// 鏌ヨ鏂规硶
-const handleQuery = () => {
-
-};
 // supplier 渚涘簲鍟嗘暟鎹�
 const supplierColumns = ref([
-  { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 200 },
-  { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 },
-  { prop: "businessAddress", label: "缁忚惀鍦板潃", minWidth: 150 },
-  { prop: "bids", label: "璇︾粏鍦板潃", minWidth: 150 },
+  { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 100 },
+  { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 170 },  { 
+    prop: "bids", 
+    label: "缁忚惀鍦板潃", 
+    minWidth: 150,
+    showOverflowTooltip: true,
+    formatter: (row, column, cellValue) => {
+      let arr = [
+        row.bprovinceId,
+        row.bcityId,
+        row.bdistrictId,
+      ]
+      return formatAddressArray(arr);
+    }
+  },
+  { prop: "businessAddress", label: "缁忚惀璇︾粏鍦板潃", minWidth: 150 },
   { prop: "bankAccount", label: "寮�鎴疯", minWidth: 120 },
   { prop: "bankName", label: "閾惰璐﹀彿", minWidth: 150 },
-  { prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100 },
-  { prop: "contactAddress", label: "鑱旂郴鍦板潃", minWidth: 150 },
-  { prop: "maintainer", label: "缁存姢浜�", minWidth: 100 },
-  { prop: "createTime", label: "缁存姢鏃ユ湡", minWidth: 100 },
+  { prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100 },  
+  { 
+    prop: "cids", 
+    label: "鑱旂郴浜哄湴鍧�", 
+    minWidth: 150,
+    showOverflowTooltip: true,
+    formatter: (row, column, cellValue) => {
+      let arr = [
+        row.cprovinceId,
+        row.ccityId,
+        row.cdistrictId,
+      ]
+      return formatAddressArray(arr);
+    }
+  },{ prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 120 },
+  // { 
+  //   prop: "maintainerId", 
+  //   label: "缁存姢浜�", 
+  //   minWidth: 80,
+  //   formatter: (row, column, cellValue) => {
+  //     // 濡傛灉鐢ㄦ埛鏄犲皠琛ㄨ繕娌℃湁鍑嗗濂斤紝鏄剧ず --
+  //     if (!userMap.value || Object.keys(userMap.value).length === 0) {
+  //       return '--';
+  //     }
+  //     // 濡傛灉鍊间负绌烘垨null锛屾樉绀� --
+  //     if (cellValue === null || cellValue === undefined || cellValue === '') {
+  //       return '--';
+  //     }
+  //     // 濡傛灉鐢ㄦ埛鏄犲皠琛ㄤ腑鏈夊搴旂殑鐢ㄦ埛鍚嶏紝杩斿洖鐢ㄦ埛鍚�
+  //     if (userMap.value[cellValue]) {
+  //       return userMap.value[cellValue];
+  //     }
+  //     // 濡傛灉娌℃湁鍖归厤鐨勭敤鎴凤紝鏄剧ず --
+  //     return '--';
+  //   }
+  // },
+  { prop: "createTime", label: "缁存姢鏃ユ湡", minWidth: 120 },
 ]);
 // customer 瀹㈡埛鏁版嵁
 const customerColumns = ref([
-  { prop: "customerName", label: "瀹㈡埛鍚嶇О", minWidth: 200 },
-  { prop: "identifyNumber", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 },
-  { prop: "address", label: "缁忚惀鍦板潃", minWidth: 150 },
-  { prop: "detailedaddress", label: "璇︾粏鍦板潃", minWidth: 150 },
-  { prop: "bank", label: "寮�鎴疯", minWidth: 120 },
-  { prop: "bankAccount", label: "閾惰璐﹀彿", minWidth: 150 },
-  { prop: "contacts", label: "鑱旂郴浜�", minWidth: 100 },
-  { prop: "contactAddress", label: "鑱旂郴鍦板潃", minWidth: 150 },
-  { prop: "maintainer", label: "缁存姢浜�", minWidth: 100 },
-  { prop: "maintainDate", label: "缁存姢鏃ユ湡", minWidth: 100 },
+  { prop: "customerName", label: "瀹㈡埛鍚嶇О", minWidth: 100 },
+  { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 },
+{ 
+    prop: "bids", 
+    label: "缁忚惀鍦板潃", 
+    minWidth: 150,
+    showOverflowTooltip: true,
+    formatter: (row, column, cellValue) => {
+      console.log(row, column, cellValue);
+      let arr = [
+        row.businessProvinceId,
+        row.businessCityId,
+        row.businessDistrictId,
+      ]
+      return formatAddressArray(arr);
+    }
+  },
+  { 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: "鑱旂郴浜哄湴鍧�", 
+    minWidth: 150,
+    showOverflowTooltip: true,
+    formatter: (row, column, cellValue) => {
+      let arr = [
+        row.provinceId,
+        row.cityId,
+        row.districtId,
+      ]
+      return formatAddressArray(arr);
+    }
+  },
+  { prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 150 },
+  { prop: "updateTime", label: "缁存姢鏃ユ湡", minWidth: 100 },
 ]);
 // coal 鐓ょ鏁版嵁
 const coalColumns = ref([
-  { prop: "coalName", label: "鐓ょ鍚嶇О", minWidth: 200 },
-  { prop: "maintainerId", label: "缁存姢浜�", minWidth: 120 },
+  { prop: "coal", label: "鐓ょ鍚嶇О", minWidth: 200 },  { 
+    prop: "maintainerId", 
+    label: "缁存姢浜�", 
+    minWidth: 120,
+    formatter: (row, column, cellValue) => {
+      // 濡傛灉鐢ㄦ埛鏄犲皠琛ㄨ繕娌℃湁鍑嗗濂斤紝鏄剧ず --
+      if (!userMap.value || Object.keys(userMap.value).length === 0) {
+        return '--';
+      }
+      // 濡傛灉鍊间负绌烘垨null锛屾樉绀� --
+      if (cellValue === null || cellValue === undefined || cellValue === '') {
+        return '--';
+      }
+      // 濡傛灉鐢ㄦ埛鏄犲皠琛ㄤ腑鏈夊搴旂殑鐢ㄦ埛鍚嶏紝杩斿洖鐢ㄦ埛鍚�
+      if (userMap.value[cellValue]) {
+        return userMap.value[cellValue];
+      }
+      // 濡傛灉娌℃湁鍖归厤鐨勭敤鎴凤紝鏄剧ず --
+      return '--';
+    }
+  },
   { prop: "maintenanceDate", label: "缁存姢鏃ユ湡", minWidth: 150 },
 ]);
 // coalQualityMaintenance 鐓よ川缁存姢鏁版嵁
@@ -181,6 +341,7 @@
       queryParams[key] = "";
     }
   });
+  getList()
 };
 // 鏂板
 const handleAdd = () => {
@@ -220,20 +381,20 @@
 };
 // 鍒嗛〉
 const handPagination = (val) => {
-  console.log("鍒嗛〉鍙傛暟锛�", val);
   pageNum.value = val.page;
   pageSizes.value = val.limit;
   getList();
 };
 // 鎻愪氦琛ㄥ崟
 const handleSubmit = async (val) => {
-  console.log(val)
-  if (val.code !== 200) {
-    ElMessage.error("鎿嶄綔澶辫触锛�" + result.msg);
+  console.log(val);
+  if (val.result.code !== 200) {
+    ElMessage.error("鎿嶄綔澶辫触锛�" + val.result.msg);
     return;
   }
-  ElMessage.success("鏂板鎴愬姛锛�" + result.msg);
+  ElMessage.success(val.title + val.result.msg);
   dialogFormVisible.value = false;
+  getList();
 };
 const handleDialogFormVisible = (value) => {
   dialogFormVisible.value = value;
@@ -245,6 +406,34 @@
 // 缂栬緫
 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);
 };
@@ -258,7 +447,6 @@
   selectedRows.value.forEach(element => {
     return arr.push(element.id);
   });
-  console.log("閫変腑鐨勬暟鎹甀D锛�", arr);
   ElMessageBox.confirm("纭畾鍒犻櫎閫変腑鐨勬暟鎹悧锛�", "鎻愮ず", {
     confirmButtonText: "纭畾",
     cancelButtonText: "鍙栨秷",
@@ -266,13 +454,27 @@
   })
     .then(async () => {
       try {
-        let res = await delSupply(arr)
-        console.log(res)
-        selectedRows.value = [];
-        getlist()
-      } catch {
+        let res;
+        if( tabName.value === "supplier" ) {
+          res = await delSupply(arr);
+        } else if (tabName.value === "coal") {
+          res = await delCoalInfo(arr);
+        } else if (tabName.value === "coalQualityMaintenance") {
+          res = await delCoalQuality(arr);
+        } else if( tabName.value === "customer") {
+          res = await delCustomer(arr);
+        }
+        if(res.code !== 200 && res.meg == "鎿嶄綔鎴愬姛") {
+          ElMessage.error("鍒犻櫎澶辫触锛�" + res.msg);
+          return;
+        }
+        ElMessage.success("鍒犻櫎鎴愬姛");
+        await getList(); 
+      } catch (e) {
+        console.error(e);
         ElMessage.error("鍒犻櫎澶辫触锛岃绋嶅悗鍐嶈瘯");
-        return;
+      } finally {
+        selectedRows.value = [];
       }
     }).catch(() => {
       ElMessage.info("宸插彇娑堝垹闄ゆ搷浣�");
@@ -283,11 +485,23 @@
   dialogFormVisible.value = false;
   form.value = {};
 };
-const handleExport = (row) => {
-  proxy.download("system/post/export", {
+const handleExport = () => {
+  if(tabName.value === "supplier") {
+    Export("/supply/export", "渚涘簲鍟嗕俊鎭�");
+  } else if (tabName.value === "customer") {
+    Export("/customer/export", "瀹㈡埛淇℃伅");
+  } else if (tabName.value === "coal") {
+    Export("/supply/export", "鐓ょ淇℃伅");
+  } else if (tabName.value === "coalQualityMaintenance") {
+    Export("/supply/export", "鐓よ川缁存姢淇℃伅");
+
+  }
+}
+const Export = (api,name) => {
+  proxy.download(api, {
     ...queryParams.value
-  }, `post_${new Date().getTime()}.xlsx`)
-  ElMessage.success("瀵煎嚭鏁版嵁锛�" + row.supplierName);
+  }, `${name}${new Date().getTime()}.xlsx`)
+  ElMessage.success("瀵煎嚭鏁版嵁锛�" + name);
 };
 // 閫夋嫨鎺ュ彛
 const selectInterface = () => {
@@ -298,26 +512,41 @@
       searchAll: queryParams.searchAll,
     });
   } else if (tabName.value === "customer") {
-    return getSupply({
+    return getCustomerList({
       current: pageNum.value,
       pageSize: pageSizes.value,
-      ...queryParams
+      searchAll: queryParams.searchAll,
     });
   } else if (tabName.value === "coal") {
-    console.log(addOrEdit.value)
-    return getCoalInfo();
+    return getCoalInfo({
+      current: pageNum.value,
+      pageSize: pageSizes.value,
+      searchAll: queryParams.searchAll,
+    });
   } else if (tabName.value === "coalQualityMaintenance") {
     return getCoalQuality({
       current: pageNum.value,
       pageSize: pageSizes.value,
-      ...queryParams
+      searchAll: queryParams.searchAll,
     });
   }
 }
+const search = () => {
+  pageNum.value = 1; // 閲嶇疆椤电爜
+  getList();
+};
+// 鑾峰彇鍒楄〃鏁版嵁
 const getList = async () => {
   loading.value = true;
+  /* if (Object.keys(addressMap.value).length === 0) {
+    await fetchAreaOptions();
+  } */
   let { data, code } = await selectInterface()
-  console.log(data)
+  if(code !== 200) {
+    ElMessage.error("鑾峰彇鏁版嵁澶辫触锛�" + data.msg);
+    loading.value = false;
+    return;
+  }
   tableData.value = data.records;
   total.value = data.total;
   loading.value = false;
diff --git a/src/views/basicInformation/mould/coal.vue b/src/views/basicInformation/mould/coal.vue
index b31e8bb..59eafad 100644
--- a/src/views/basicInformation/mould/coal.vue
+++ b/src/views/basicInformation/mould/coal.vue
@@ -6,29 +6,32 @@
             width="500"
             :close-on-click-modal="false"
             :before-close="handleClose"
-        >
-            <el-form
+        >            <el-form
                 ref="formRef"
                 style="max-width: 600px; margin: 0 auto"
                 :model="formData"
                 :rules="rules"
-                label-width="auto"
+                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-form-item>                <el-form-item label="缁存姢浜哄鍚�" prop="maintainerId">
                     <el-input
-                        v-model="formData.maintainerId"
-                        placeholder="璇疯緭鍏ョ淮鎶や汉濮撳悕"
+                        :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 label="缁存姢鏃ユ湡" prop="maintenanceDate">
-                    <el-input v-model="formData.maintenanceDate" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" />
-                </el-form-item>
+                    
                 <el-form-item>
                     <el-button type="primary" @click="submitForm">
                         纭畾
@@ -42,8 +45,11 @@
 </template>
 
 <script setup>
-import { ref, watch ,defineProps } from 'vue'
+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: {
@@ -64,8 +70,38 @@
     },
 })
 
-const emit = defineEmits(['submit', 'handleBeforeClose','update:coalDialogFormVisible'])
+// 鍦ㄧ粍浠舵寕杞芥椂鑾峰彇鐢ㄦ埛淇℃伅
+onMounted(async () => {
+    // 濡傛灉store涓病鏈夌敤鎴蜂俊鎭紝鍒欒幏鍙栫敤鎴蜂俊鎭�
+    if (!userStore.name) {
+        try {
+            await userStore.getInfo()
+            console.log('鐢ㄦ埛淇℃伅:', {
+                id: userStore.id,
+                name: userStore.name,
+                nickName: userStore.nickName
+            })
+            // 鑷姩濉厖缁存姢浜篒D
+            if (props.addOrEdit === 'add') {
+                formData.value.maintainerId = userStore.id
+            }
+        } catch (error) {
+            console.error('鑾峰彇鐢ㄦ埛淇℃伅澶辫触:', error)
+        }
+    } else {
+        console.log('鐢ㄦ埛淇℃伅:', {
+            id: userStore.id,
+            name: userStore.name,
+            nickName: userStore.nickName
+        })
+        // 鑷姩濉厖缁存姢浜篒D
+        if (props.addOrEdit === 'add') {
+            formData.value.maintainerId = userStore.id
+        }
+    }
+})
 
+const emit = defineEmits(['submit', 'handleBeforeClose','update:coalDialogFormVisible'])
 // 琛ㄥ崟寮曠敤
 const formRef = ref(null)
 // 琛ㄥ崟鏁版嵁
@@ -76,6 +112,10 @@
 // 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖�
 watch(() => props.form, (newVal) => {
     formData.value = { ...newVal }
+    // 濡傛灉鏄柊澧炴ā寮忥紝璁剧疆缁存姢浜�
+    if (props.addOrEdit === 'add' && userStore.id) {
+        formData.value.maintainerId = userStore.id
+    }
 }, { deep: true })
 
 // 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖�
@@ -88,7 +128,18 @@
     if (!formRef.value) return
     await formRef.value.validate(async (valid, fields) => {
         if (valid) {
-            formData.value.maintenanceDate = "2023-10-01" // 绀轰緥鏃ユ湡
+            delete formData.value.createTime
+            delete formData.value.updateTime
+            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,
             })
@@ -124,21 +175,15 @@
     { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
     { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
   ],
-  address: [
-    {
-      required: true,
-      message: "璇烽�夋嫨缁忚惀鍦板潃",
-      trigger: "change",
-    },
-  ],
-  bankAccount: [{ required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur" }],
-  bank: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
-  contacts: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
-  contactsPhone: [
-    { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" },
-    { min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur" },
-  ],
 });
+// 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
+function getCurrentDate() {
+  const today = new Date();
+  const year = today.getFullYear();
+  const month = String(today.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮�
+  const day = String(today.getDate()).padStart(2, '0');
+  return `${year}-${month}-${day}`;
+}
 </script>
 
 <style lang="sass" scoped>
diff --git a/src/views/basicInformation/mould/customer.vue b/src/views/basicInformation/mould/customer.vue
index 5dbd82f..4053cd7 100644
--- a/src/views/basicInformation/mould/customer.vue
+++ b/src/views/basicInformation/mould/customer.vue
@@ -1,70 +1,65 @@
 <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"
-            >
-                <el-form-item label="鍗¤儭" prop="supplierName">
-                    <el-input
-                        v-model="formData.supplierName"
-                        placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О"
-                    />
-                </el-form-item>
-                <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="identifyNumber">
-                    <el-input
-                        v-model="formData.identifyNumber"
-                        placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�"
-                    />
-                </el-form-item>
-                <el-form-item label="缁忚惀鍦板潃" prop="address">
-                      <el-cascader
-                        placeholder="璇烽�夋嫨缁忚惀鍦板潃"
-                        size="default"
-                        :options="addressSelectOptions"
-                        v-model="formData.address"
-                        @change="handleChange"
-                      >
-                      </el-cascader>
-                    </el-form-item>
-                    <el-form-item label="璇︾粏鍦板潃" prop="addressDetail">
-                      <el-input
-                        v-model="formData.addressDetail"
-                        placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�"
-                      />
-                    </el-form-item>
-                <el-form-item label="閾惰璐︽埛" prop="bankAccount">
-                    <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" />
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="primary" @click="submitForm">
-                        纭畾
-                    </el-button>
-                    <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
-                    <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
-                </el-form-item>
-            </el-form>
-        </el-dialog>
-    </div>
+  <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">
+        <el-form-item label="瀹㈡埛鍚嶇О" prop="customerName">
+          <el-input v-model="formData.customerName" placeholder="璇疯緭鍏ュ鎴峰悕绉�" />
+        </el-form-item>
+        <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="taxpayerId">
+          <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>
+        </el-form-item>
+        <el-form-item label="缁忚惀璇︾粏鍦板潃" prop="businessAddress">
+          <el-input v-model="formData.businessAddress" placeholder="璇疯緭鍏ョ粡钀ヨ缁嗗湴鍧�" />
+        </el-form-item>
+        <el-form-item label="寮�鎴疯" prop="bankName">
+          <el-input v-model="formData.bankName" placeholder="璇疯緭鍏ュ紑鎴疯" />
+        </el-form-item>
+        <el-form-item label="閾惰璐︽埛" prop="bankAccount">
+          <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" />
+        </el-form-item>
+        <el-form-item label="鑱旂郴浜�" prop="contactPerson">
+          <el-input v-model="formData.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉" />
+        </el-form-item>
+        <el-form-item label="鑱旂郴鐢佃瘽" prop="contactPhone">
+          <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>
+        </el-form-item>
+        <el-form-item label="鑱旂郴浜鸿缁�" prop="contactAddress">
+          <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉璇︾粏鍦板潃" />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="submitForm">
+            纭畾
+          </el-button>
+          <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
+          <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
 </template>
 
 <script setup>
 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";
 
 const props = defineProps({
   beforeClose: {
     type: Function,
-    default: () => {},
+    default: () => { },
   },
   form: {
     type: Object,
@@ -79,6 +74,7 @@
     default: "",
   },
 });
+
 const handleChange = (value) => {
   console.log(value);
 };
@@ -88,17 +84,25 @@
   "update:customerDialogFormVisible",
 ]);
 onMounted(() => {
-  addressSelectOptions.value = mapAddress(addressList);
-});
+  fetchAreaOptions()
+})
+
+// 淇敼鏍戝舰閫夋嫨鐨勬槧灏�
+const cascaderProps = ref({
+  value: 'id', // 鎸囧畾value瀛楁涓篿d
+  label: 'label', // 鎸囧畾label瀛楁
+  children: 'children' // 鎸囧畾瀛愯妭鐐瑰瓧娈�
+})
+
 // 鍦板潃閫夋嫨鏁版嵁
 const addressSelectOptions = ref([]);
-// 澶勭悊鍦板潃鏁版嵁杞崲
-function mapAddress(list) {
-  return list.map((item) => ({
-    value: item.no,
-    label: item.name,
-    children: item.children ? mapAddress(item.children) : undefined,
-  }));
+const fetchAreaOptions = async () => {
+  addressSelectOptions.value = [];
+
+  const res = await getAreaOptions();
+  if (res.code === 200) {
+    addressSelectOptions.value = res.data;
+  }
 }
 // 琛ㄥ崟寮曠敤
 const formRef = ref(null);
@@ -118,6 +122,13 @@
   },
   { deep: true }
 );
+watch(
+  () => props.form,
+  (newVal) => {
+    formData.value = { ...newVal };
+  },
+  { deep: true }
+);
 
 // 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖�
 watch(
@@ -130,9 +141,32 @@
 // 鎻愪氦琛ㄥ崟
 const submitForm = async () => {
   if (!formRef.value) return;
-  await formRef.value.validate((valid, fields) => {
+  await formRef.value.validate(async (valid, fields) => {
     if (valid) {
-      emit("submit", formData.value);
+      const obj = ref({});
+      if (props.title.includes('鏂板')) {
+        let result = await addOrEditCustomer({
+          ...formData.value,
+        })
+        obj.value = {
+          title: "鏂板",
+          ...formData.value,
+          result
+        };
+      } else {
+        delete formData.value.createTime
+        delete formData.value.updateTime
+        let result = await addOrEditCustomer({
+          ...formData.value,
+        })
+        console.log(result);
+        obj.value = {
+          title: "缂栬緫",
+          ...formData.value,
+          result
+        };
+      }
+      emit("submit", obj.value);
     }
   });
 };
@@ -153,10 +187,10 @@
   emit("update:customerDialogFormVisible", false);
 };
 const rules = reactive({
-  supplierName: [
+  customerName: [
     { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" },
   ],
-  identifyNumber: [
+  taxpayerId: [
     { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
     { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
   ],
@@ -168,9 +202,11 @@
     },
   ],
   bankAccount: [{ required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur" }],
-  bank: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
-  contacts: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
-  contactsPhone: [
+  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" },
   ],
diff --git a/src/views/basicInformation/mould/supplier.vue b/src/views/basicInformation/mould/supplier.vue
index 9819f41..9580ea2 100644
--- a/src/views/basicInformation/mould/supplier.vue
+++ b/src/views/basicInformation/mould/supplier.vue
@@ -1,39 +1,41 @@
 <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="contactAddress">
-          <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉鍦板潃"/>
+        <el-form-item label="鑱旂郴浜哄湴鍧�" prop="cids">
+          <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-form-item>
         <el-form-item>
           <el-button type="primary" @click="submitForm"> 纭畾</el-button>
@@ -46,9 +48,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: {
@@ -106,7 +108,7 @@
 // 琛ㄥ崟寮曠敤
 const formRef = ref(null);
 // 琛ㄥ崟鏁版嵁
-const formData = ref({...props.form});
+const formData = ref({ ...props.form });
 // 寮圭獥鍙鎬�
 const dialogVisible = defineModel("supplierDialogFormVisible", {
   required: true,
@@ -114,19 +116,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) => {
@@ -137,11 +139,13 @@
   if (!formRef.value) return;
   await formRef.value.validate(async (valid, fields) => {
     if (valid) {
+      const obj = ref({});
       if (props.title.includes('鏂板')) {
         let result = await addOrEditSupply({
           ...formData.value,
         })
-        let obj = {
+        obj.value = {
+          title: "鏂板",
           ...formData.value,
           result
         };
@@ -151,9 +155,13 @@
         let result = await addOrEditSupply({
           ...formData.value,
         })
-        console.log(result)
+        obj.value = {
+          title: "缂栬緫",
+          ...formData.value,
+          result
+        };
       }
-      emit("submit", obj);
+      emit("submit", obj.value);
     }
   });
 };
@@ -175,25 +183,25 @@
 };
 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: [
-    {
-      required: true,
-      message: "璇烽�夋嫨缁忚惀鍦板潃",
-      trigger: "change",
-    },
-  ],
-  bankName: [{required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur"}],
-  bankAccount: [{required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur"}],
-  contactPerson: [{required: true, message: "鑱旂郴浜�", trigger: "blur"}],
+  // bids: [
+  //   {
+  //     required: true,
+  //     message: "璇烽�夋嫨缁忚惀鍦板潃",
+  //     trigger: "change",
+  //   },
+  // ],
+  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/procureMent/components/ProductionDialog.vue b/src/views/procureMent/components/ProductionDialog.vue
index 1de700b..547129c 100644
--- a/src/views/procureMent/components/ProductionDialog.vue
+++ b/src/views/procureMent/components/ProductionDialog.vue
@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog
-      v-model="dialogVisible"
+      v-model="dialogFormVisible"
       :title="title"
       width="600"
       :close-on-click-modal="false"
@@ -81,8 +81,8 @@
     default: "",
   },
 });
-const emit = defineEmits(["update:visible", "success"]);
-const dialogVisible = defineModel("dialogFormVisible", {
+const emit = defineEmits(["update:dialogFormVisible", "success"]);
+const dialogFormVisible = defineModel("dialogFormVisible", {
   required: true,
   type: Boolean,
 });
@@ -109,7 +109,7 @@
 };
 // 鍏抽棴寮圭獥
 const handleClose = () => {
-  dialogVisible.value = false;
+  dialogFormVisible.value = false;
   console.log(form.value);
 };
 const handleReset = () => {
diff --git a/src/views/procureMent/index.vue b/src/views/procureMent/index.vue
index 790146a..b04a0f1 100644
--- a/src/views/procureMent/index.vue
+++ b/src/views/procureMent/index.vue
@@ -58,18 +58,15 @@
           :show-selection="true"
           :border="true"
           :maxHeight="440"
-        />
-      <pagination
+        />      <pagination
         v-if="total>0"
-        :page-num="pageNum"
-        :page-size="pageSize"
+        :page="pageNum"
+        :limit="pageSize"
         :total="total"
-        @pagination="handleQuery"
+        @pagination="handlePagination"
         :layout="'total, prev, pager, next, jumper'"
       />
-    </el-card>
-    <ProductionDialog
-        v-if="total>0"
+    </el-card>    <ProductionDialog
         v-model:dialogFormVisible="dialogFormVisible"
         :form="form"
         :title="title"
@@ -80,14 +77,14 @@
 </template>
 
 <script setup>
-import { ref, reactive, onMounted } from "vue";
+import { ref, reactive, onMounted, getCurrentInstance } from "vue";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { Plus, Edit, Delete, Download } from "@element-plus/icons-vue";
 import DataTable from "@/components/Table/ETable.vue";
 import Pagination from "@/components/Pagination";
-import ProductionDialog from "./components/ProductionDialog.vue";
+import ProductionDialog from './components/ProductionDialog.vue';
+import { purchaseRegistration } from "@/api/procureMent";
 const { proxy } = getCurrentInstance()
-
 const dialogFormVisible = ref(false);
 const form = ref({});
 const title = ref("");
@@ -103,7 +100,8 @@
   supplierName: "",
   identifyNumber: "",
   address: "",
-  
+  pageNum: 1,
+  pageSize: 10
 });
 // 鏄惁缂栬緫
 const addOrEdit = ref("add");
@@ -113,21 +111,30 @@
 const handleQuery = () => {
   loading.value = true;
   // 杩欓噷娣诲姞瀹為檯鐨勬煡璇㈤�昏緫
-  setTimeout(() => {
-    loading.value = false;
-  }, 500);
+  getList();
+};
+
+// 鍒嗛〉澶勭悊
+const handlePagination = (val) => {
+  console.log("鍒嗛〉鍙傛暟锛�", val);
+  pageNum.value = val.page;
+  pageSize.value = val.limit;
+  queryParams.pageNum = val.page;
+  queryParams.pageSize = val.limit;
+  getList();
 };
 
 // supplier 渚涘簲鍟嗘暟鎹�
 const columns = ref([
   { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 200 },
-  { prop: "category", label: "鐓ょ", minWidth: 120 },
   { prop: "unit", label: "鍗曚綅", minWidth: 150 },
-  { prop: "purchaseAmount", label: "閲囪喘鏁伴噺", minWidth: 120 },
-  { prop: "priceBeforeTax", label: "鍗曚环(绋庡墠)", minWidth: 150 },
-  { prop: "totalBeforeTax", label: "鎬讳环(绋庡墠)", minWidth: 100 },
-  { prop: "calorificValue", label: "鐑��", minWidth: 150 },
-  { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
+  { prop: "coal", label: "鐓ょ绫诲瀷", minWidth: 120 },
+  { prop: "purchaseQuantity", label: "閲囪喘鏁伴噺", minWidth: 100 },
+  { prop: "priceIncludingTax", label: "鍗曚环锛堝惈绋庯級", minWidth: 150 },
+  { prop: "totalPriceIncludingTax", label: "鎬讳环锛堝惈绋庯級", minWidth: 100 },
+  { prop: "taxRate", label: "绋庣巼", minWidth: 100 },
+  { prop: "priceExcludingTax", label: "涓嶅惈绋庡崟浠�", minWidth: 100 },
+  { prop: "registrantId", label: "鐧昏浜�", minWidth: 100 },
   { prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 },
 ]);
 
@@ -142,6 +149,7 @@
 };
 // 鏂板
 const handleAdd = () => {
+  console.log("鐐瑰嚮鏂板鎸夐挳");
   addOrEdit.value = "add";
   handleAddEdit();
 };
@@ -154,11 +162,24 @@
 // 鎵撳紑寮圭獥
 const openDialog = () => {
   if (addOrEdit.value === "edit") {
+    // 纭繚澶嶅埗涓�浠芥暟鎹紝閬垮厤鐩存帴寮曠敤
+    form.value = JSON.parse(JSON.stringify(form.value));
     dialogFormVisible.value = true;
     return;
   }
-  form.value = {};
-  dialogFormVisible.value = true;
+  // 鏂板缓鏃跺垵濮嬪寲琛ㄥ崟
+  form.value = {
+    supplierName: "",
+    category: "",
+    unit: "",
+    purchaseAmount: "",
+    priceBeforeTax: "",
+    totalBeforeTax: "",
+    calorificValue: "",
+    registrant: "",
+    registrationDate: new Date().toISOString().split('T')[0]
+  };  dialogFormVisible.value = true;
+  console.log("openDialog 璁剧疆 dialogFormVisible =", dialogFormVisible.value);
 };
 
 // 鎻愪氦琛ㄥ崟
@@ -221,36 +242,26 @@
   total.value = tableData.value.length;
   ElMessage.success("鎿嶄綔鎴愬姛");
 };
-const getList = () => {
+const getList = async () => {
   loading.value = true;
-  setTimeout(() => {
-    tableData.value = [
-      {
-        supplierName: "涓浗鐭虫补鍖栧伐鑲′唤鏈夐檺鍏徃",
-        category: "鐓�",
-        unit: "鍚�",
-        purchaseAmount: "1000",
-        priceBeforeTax: "100",
-        totalBeforeTax: "100000",
-        calorificValue: "5000",
-        registrant: "寮犱笁",
-        registrationDate: "2025-01-01",
-      },
-      {
-        supplierName: "涓浗涓煶鍖�",
-        category: "绮惧搧鐓�",
-        unit: "鍗冨厠",
-        purchaseAmount: "1000",
-        priceBeforeTax: "100",
-        totalBeforeTax: "100000",
-        calorificValue: "5000",
-        registrant: "鏉庡洓",
-        registrationDate: "2025-01-01",
-      }
-    ]
-    total.value = tableData.value.length;
+  try {
+    // 浼犻�掑垎椤靛弬鏁�
+    let res = await purchaseRegistration({
+      pageNum: pageNum.value,
+      pageSize: pageSize.value,
+      ...queryParams
+    });
+    console.log("API杩斿洖鏁版嵁:", res);
+    if (res && res.data) {
+      tableData.value = res.data.records || [];
+      total.value = res.data.total || 0;
+    }
+  } catch (error) {
+    console.error("鑾峰彇鏁版嵁澶辫触:", error);
+    ElMessage.error("鑾峰彇鏁版嵁澶辫触");
+  } finally {
     loading.value = false;
-  }, 500);
+  }
 };
 getList();
 </script>

--
Gitblit v1.9.3