From 7619d415522ab3dc3299d6a2a9f5c9964a692d3f Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期三, 18 六月 2025 17:58:53 +0800
Subject: [PATCH] 添加生产管理接口及优化表格字段

---
 src/views/production/index.vue |  169 ++++++++++++++++++-------------------------------------
 1 files changed, 56 insertions(+), 113 deletions(-)

diff --git a/src/views/production/index.vue b/src/views/production/index.vue
index 531640a..4827925 100644
--- a/src/views/production/index.vue
+++ b/src/views/production/index.vue
@@ -22,59 +22,64 @@
         <el-button type="success" :icon="Plus" @click="openDialog('add')">
           鏂板鍔犲伐
         </el-button>
-        <el-button type="danger" :icon="Delete" :disabled="!selectedRows.length">
+        <el-button type="danger" :icon="Delete" :disabled="!selectedRows.length" @click="() => deleteSelected(delPM)">
           鍒犻櫎
         </el-button>
-      </div>
-
-      <!-- 鏁版嵁琛ㄦ牸 -->
+      </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 }">
+      >        <template #coal="{ row }">
           <div class="coal-tags">
             <el-tag v-for="coal in parseCoalArray(row.coal)" :key="coal" size="small">
-              {{ coal }}
+              {{ getCoalNameById(coal) }}
             </el-tag>
             <span v-if="!row.coal">--</span>
           </div>
         </template>
-      </ETable>
-
-      <!-- 鍒嗛〉缁勪欢 -->
+      </ETable>      <!-- 鍒嗛〉缁勪欢 -->
       <Pagination
+        :layout="'total, prev, pager, next, jumper'"
         :total="total"
-        :page="queryParams.current"
+        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"
     />
   </div>
 </template>
 
 <script setup>
-import { ref, reactive, onMounted } from "vue";
-import { ElMessage, ElMessageBox } from "element-plus";
+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 } from "@/api/production";
+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 = [
@@ -87,115 +92,53 @@
   { prop: "producer", label: "鐢熶骇浜�", minWidth: 150 },
 ];
 
-// 鍝嶅簲寮忔暟鎹�
-const tableData = ref([]);
-const loading = ref(false);
-const total = ref(0);
-const selectedRows = ref([]);
-const dialogVisible = ref(false);
-const dialogType = ref("add");
-const dialogRef = ref(null);
+// 浣跨敤琛ㄦ牸鏁版嵁缁勫悎寮忓嚱鏁�
+const {
+  tableData,
+  loading,
+  total,
+  selectedRows,
+  queryParams,
+  getList,
+  handleSearch,
+  handleReset,
+  handlePageChange,
+  handleSelectionChange,
+  deleteSelected
+} = useTableData(getProductionMasterList, { pageSize: 10 });
 
-// 鏌ヨ鍙傛暟
-const queryParams = reactive({
-  searchAll: "",
-  current: 1,
-  size: 10,
-});
+// 浣跨敤瀵硅瘽妗嗙粍鍚堝紡鍑芥暟
+const {
+  dialogVisible,
+  dialogType,
+  dialogRef,
+  openDialog,
+  handleDialogSuccess: onDialogSuccess
+} = useDialog();
 
-// 鑾峰彇琛ㄦ牸鏁版嵁
-// 鑾峰彇琛ㄦ牸鏁版嵁
-const getList = async () => {
-  loading.value = true;
-  try {
-    // 鏋勫缓姝g‘鐨勫垎椤靛弬鏁�
-    const params = {
-      searchAll: queryParams.searchAll,
-      // 灏濊瘯澶氱甯歌鐨勫垎椤靛弬鏁版牸寮�
-      current: queryParams.current,
-      size: queryParams.size,
-      page: queryParams.current,
-      pageSize: queryParams.size,
-      pageNum: queryParams.current,
-      limit: queryParams.size,
-      offset: (queryParams.current - 1) * queryParams.size
-    };
-    
-    console.log('鍙戦�佸垎椤靛弬鏁�:', params);
-    console.log(`绗�${queryParams.current}椤靛簲璇ユ樉绀虹${(queryParams.current - 1) * queryParams.size + 1}-${queryParams.current * queryParams.size}鏉℃暟鎹甡);
-    
-    const res = await getProductionMasterList(params);
-    tableData.value = res.data.records || [];
-    total.value = res.data.total || 0;
-    
-    console.log('鎺ユ敹鍒扮殑鏁版嵁:', {
-      褰撳墠椤�: queryParams.current,
-      杩斿洖鏉℃暟: tableData.value.length,
-      鎬绘潯鏁�: total.value
-    });
-  } catch (error) {
-    ElMessage.error("鑾峰彇鏁版嵁澶辫触");
-    console.error('API閿欒:', error);
-  } finally {
-    loading.value = false;
-  }
-};
+// 浣跨敤鐓ょ鏁版嵁缁勫悎寮忓嚱鏁�
+const { getCoalNameById, getCoalData } = useCoalData();
 
-// 鎼滅储鍜岄噸缃�
-const handleSearch = () => {
-  queryParams.current = 1;
-  getList();
-};
-
-const handleReset = () => {
-  queryParams.searchAll = "";
-  handleSearch();
-};
-
-// 鍒嗛〉澶勭悊
-const handlePageChange = ({ page }) => {
-  queryParams.current = page;
-  getList();
-};
-
-// 琛ㄦ牸閫夋嫨澶勭悊
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
-
-// 鎵撳紑瀵硅瘽妗� - 缁熶竴澶勭悊鏂板鍜岀紪杈�
-const openDialog = (type, row = null) => {
-  dialogType.value = type;
-  dialogVisible.value = true;
-  
-  if (type === 'add') {
-    dialogRef.value?.Initialization();
-  } else if (type === 'edit' && row) {
-    dialogRef.value?.editInitialization({ ...row });
+// 澶勭悊鐢熶骇鏁版嵁鏇存柊
+const handleProductionAndProcessing = (row, rows) => {
+  const index = tableData.value.findIndex(item => item.id === rows.id);
+  if (index !== -1) {
+    tableData.value[index] = { ...tableData.value[index], ...row };
   }
 };
 
 // 瀵硅瘽妗嗘垚鍔熷洖璋�
 const handleDialogSuccess = () => {
-  getList();
-  ElMessage.success("鎿嶄綔鎴愬姛");
+  onDialogSuccess(() => {
+    getList();
+    ElMessage.success("鎿嶄綔鎴愬姛");
+  });
 };
-
-// 瑙f瀽鐓ょ鏁扮粍 - 绠�鍖栭�昏緫
-const parseCoalArray = (coalString) => {
-  if (!coalString) return [];
-  
-  if (Array.isArray(coalString)) return coalString;
-  
-  return String(coalString)
-    .replace(/^\[|\]$/g, '')
-    .split(',')
-    .map(item => item.trim())
-    .filter(Boolean);
-};
-
 // 缁勪欢鎸傝浇鏃跺姞杞芥暟鎹�
-onMounted(getList);
+onMounted(async () => {
+  await getCoalData(); // 棰勫姞杞界叅绉嶆暟鎹�
+  getList();
+});
 </script>
 
 <style scoped lang="scss">

--
Gitblit v1.9.3