From ffb1bd190e9d4263c8c7d6c0096e0ec844cb3b52 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 19 六月 2025 17:30:55 +0800
Subject: [PATCH] 1.系统管理样式修改

---
 src/views/production/index.vue |  322 +++++++++++++++++++++--------------------------------
 1 files changed, 127 insertions(+), 195 deletions(-)

diff --git a/src/views/production/index.vue b/src/views/production/index.vue
index d298680..4827925 100644
--- a/src/views/production/index.vue
+++ b/src/views/production/index.vue
@@ -1,224 +1,142 @@
 <template>
   <div class="production-container">
-        <el-form :inline="true" :model="queryParams" class="search-form" style="width: 100%">
-          <el-form-item label="鎼滅储">
-            <el-input v-model="queryParams.searchAll" placeholder="璇疯緭鍏ュ叧閿瘝" clearable />
-          </el-form-item>
-          <el-form-item>
-            <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
-            <el-button @click="handleReset">閲嶇疆</el-button>
-          </el-form-item>
-        </el-form>
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form :inline="true" :model="queryParams" class="search-form">
+      <el-form-item label="鎼滅储">
+        <el-input
+          v-model="queryParams.searchAll"
+          placeholder="璇疯緭鍏ュ叧閿瘝"
+          clearable
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
+        <el-button @click="handleReset">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <!-- 涓昏鍐呭鍖哄煙 -->
     <el-card>
-      <el-button type="success" :icon="Plus" @click="handleAddBatch">鏂板鍔犲伐</el-button>
-      <el-button type="danger" :icon="Delete">鍒犻櫎</el-button>
-      <el-button type="info" :icon="Download">瀵煎嚭</el-button>
-      <ETable :loading="loading" :table-data="tableData" :columns="columns" @selection-change="handleSelectionChange"
-        @edit="handleEdit" @view-detail="handleViewDetail" :show-selection="true" :border="true" :maxHeight="480" />
+      <!-- 鎿嶄綔鎸夐挳 -->
+      <div class="toolbar">
+        <el-button type="success" :icon="Plus" @click="openDialog('add')">
+          鏂板鍔犲伐
+        </el-button>
+        <el-button type="danger" :icon="Delete" :disabled="!selectedRows.length" @click="() => deleteSelected(delPM)">
+          鍒犻櫎
+        </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 }">
+          <div class="coal-tags">
+            <el-tag v-for="coal in parseCoalArray(row.coal)" :key="coal" size="small">
+              {{ getCoalNameById(coal) }}
+            </el-tag>
+            <span v-if="!row.coal">--</span>
+          </div>
+        </template>
+      </ETable>      <!-- 鍒嗛〉缁勪欢 -->
       <Pagination
-        :total="total"
-        :page="queryParams.current"
-        :limit="queryParams.size"
-        :show-total="true"
-        @pagination="handlePageChange"
         :layout="'total, prev, pager, next, jumper'"
-      ></Pagination>
+        :total="total"
+        v-model:page="queryParams.current"
+        :limit="queryParams.size"
+        @pagination="handlePageChange"
+      />
     </el-card>
-    <ProductionDialog v-model:visible="dialogVisible"  ref="childRef" :type="dialogType"
-      @success="handleDialogSuccess" />
+
+    <!-- 鐢熶骇瀵硅瘽妗� -->
+    <!-- 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 { Plus, Delete, Download, List } 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 } from "@/api/production";
-const childRef = ref(null);
+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: "category", label: "鐓ょ", minWidth: 150 },
-  { prop: "unit", label: "鍗曚綅", minWidth: 120 },
-  { prop: "productionVolume", label: "鐢熶骇鏁伴噺", minWidth: 150 },
+  { prop: "coal", label: "鐓ょ", minWidth: 150, slot: 'coal' },
+  { prop: "productionQuantity", label: "鐢熶骇鏁伴噺", minWidth: 120 },
   { prop: "laborCost", label: "浜哄伐鎴愭湰", minWidth: 150 },
-  { prop: "materialCost", label: "鍘熸枡鎴愭湰", minWidth: 120 },
-  { prop: "equipmentCost", label: "璁惧璐圭敤", minWidth: 143 },
+  { prop: "energyConsumptionCost", label: "鑳借�楁垚鏈�", minWidth: 120 },
+  { prop: "equipmentDepreciation", label: "璁惧鎶樻棫", minWidth: 143 },
   { prop: "totalCost", label: "鎬绘垚鏈�", minWidth: 150 },
-  { prop: "totalPrice", label: "鎬诲敭浠�", minWidth: 150 },
-  { prop: "profit", label: "鍒╂鼎", minWidth: 100 },
-  { prop: "reviewer", label: "澶嶈浜�", minWidth: 120 },
-  { prop: "date", label: "鏃ユ湡", minWidth: 150 },
+  { prop: "producer", label: "鐢熶骇浜�", minWidth: 150 },
 ];
 
-// 鎼滅储琛ㄥ崟鏁版嵁
+// 浣跨敤琛ㄦ牸鏁版嵁缁勫悎寮忓嚱鏁�
+const {
+  tableData,
+  loading,
+  total,
+  selectedRows,
+  queryParams,
+  getList,
+  handleSearch,
+  handleReset,
+  handlePageChange,
+  handleSelectionChange,
+  deleteSelected
+} = useTableData(getProductionMasterList, { pageSize: 10 });
 
-// 琛ㄦ牸鏁版嵁
-const tableData = ref([]);
-const loading = ref(false);
-const total = ref(0);
+// 浣跨敤瀵硅瘽妗嗙粍鍚堝紡鍑芥暟
+const {
+  dialogVisible,
+  dialogType,
+  dialogRef,
+  openDialog,
+  handleDialogSuccess: onDialogSuccess
+} = useDialog();
 
-const queryParams = reactive({
-  searchAll:"",
-  current: 1,
-  size: 10, // 鍥哄畾姣忛〉10鏉�
-});
-const handlePageChange = ({ page }) => {
-  console.log("鍒嗛〉鍙樺寲:", { page });
-  queryParams.current = page;
-  getList();
-};
-// 閫変腑鐨勮鏁版嵁
-const selectedRows = ref([]);
+// 浣跨敤鐓ょ鏁版嵁缁勫悎寮忓嚱鏁�
+const { getCoalNameById, getCoalData } = useCoalData();
 
-// 寮圭獥鐩稿叧
-const dialogVisible = ref(false);
-const dialogType = ref("add");
-const currentRow = ref(null);
-
-// 鐢熶骇鏄庣粏瀵硅瘽妗嗘帶鍒�
-const detailDialogVisible = ref(false);
-const currentDetailRow = ref(null);
-
-// 鑾峰彇琛ㄦ牸鏁版嵁
-const getList = async () => {
-  loading.value = true;
-  try {
-    const res = await getProductionMasterList({...queryParams});
-    tableData.value = res.data.records || [];
-    total.value = res.data.total || 0;
-  } catch (error) {
-    ElMessage.error("鑾峰彇鏁版嵁澶辫触");
-  } finally {
-    loading.value = false;
+// 澶勭悊鐢熶骇鏁版嵁鏇存柊
+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 handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
-
-// 鎼滅储鏂规硶
-const handleSearch = () => {
-  pagination.currentPage = 1;
-  getList();
-};
-
-// 閲嶇疆鎼滅储
-const handleReset = () => {
-  handleSearch();
-};
-
-// 鏂板鍔犲伐
-const handleAddBatch = () => {
-  dialogType.value = "add";
-  dialogVisible.value = true;
-  childRef.value.Initialization();
-};
-
-// 缂栬緫
-const handleEdit = (row) => {
-  currentRow.value = row;
-  dialogType.value = "edit";
-  dialogVisible.value = true;
-};
-
-// 鎵撳紑鐢熶骇鏄庣粏瀵硅瘽妗�
-const handleViewDetail = (row) => {
-  currentDetailRow.value = row;
-  detailDialogVisible.value = true;
-};
-
-// 澶勭悊寮圭獥鎻愪氦
-const handleDialogSuccess = async (formData) => {
-  try {
-    if (dialogType.value === "add") {
-      await addProduction(formData);
-      ElMessage.success("鏂板鎴愬姛");
-    } else {
-      await updateProduction({
-        ...formData,
-        id: currentRow.value.id,
-      });
-      ElMessage.success("鏇存柊鎴愬姛");
-    }
+// 瀵硅瘽妗嗘垚鍔熷洖璋�
+const handleDialogSuccess = () => {
+  onDialogSuccess(() => {
     getList();
-  } catch (error) {
-    ElMessage.error(dialogType.value === "add" ? "鏂板澶辫触" : "鏇存柊澶辫触");
-  }
+    ElMessage.success("鎿嶄綔鎴愬姛");
+  });
 };
-
-// 澶勭悊鐢熶骇鏄庣粏寮圭獥鎻愪氦
-const handleDetailDialogSuccess = async (formData) => {
-  try {
-    ElMessage.success("淇濆瓨鎴愬姛");
-    getList();
-  } catch (error) {
-    ElMessage.error("淇濆瓨澶辫触");
-  }
-};
-
-// 鍒犻櫎
-const handleDelete = (row) => {
-  ElMessageBox.confirm("纭鍒犻櫎璇ヨ褰曞悧锛�", "鎻愮ず", {
-    confirmButtonText: "纭畾",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-    .then(async () => {
-      try {
-        await deleteProduction(row.id);
-        ElMessage.success("鍒犻櫎鎴愬姛");
-        getList();
-      } catch (error) {
-        console.error("鍒犻櫎澶辫触:", error);
-        ElMessage.error("鍒犻櫎澶辫触");
-      }
-    })
-    .catch(() => {
-      ElMessage.info("宸插彇娑堝垹闄�");
-    });
-};
-
-// 瀵煎嚭
-const handleExport = async (row) => {
-  try {
-    const res = await exportProduction({ id: row.id });
-    const blob = new Blob([res], { type: "application/vnd.ms-excel" });
-    const fileName = `鐢熶骇鍔犲伐璁板綍_${new Date().getTime()}.xlsx`;
-    if ("download" in document.createElement("a")) {
-      const elink = document.createElement("a");
-      elink.download = fileName;
-      elink.style.display = "none";
-      elink.href = URL.createObjectURL(blob);
-      document.body.appendChild(elink);
-      elink.click();
-      URL.revokeObjectURL(elink.href);
-      document.body.removeChild(elink);
-    } else {
-      navigator.msSaveBlob(blob, fileName);
-    }
-  } catch (error) {
-    ElMessage.error("瀵煎嚭澶辫触");
-  }
-};
-
-// 澶勭悊姣忛〉鏄剧ず鏁伴噺鍙樺寲
-const handleSizeChange = (val) => {
-  pagination.size = val;
-  getList();
-};
-
-// 澶勭悊椤电爜鍙樺寲
-const handleCurrentChange = (val) => {
-  pagination.currentPage = val;
-  getList();
-};
-
 // 缁勪欢鎸傝浇鏃跺姞杞芥暟鎹�
-onMounted(() => {
+onMounted(async () => {
+  await getCoalData(); // 棰勫姞杞界叅绉嶆暟鎹�
   getList();
 });
 </script>
@@ -241,7 +159,7 @@
     width: 20%;
   }
 }
-.search-form{
+.search-form {
   display: flex;
   justify-content: space-between;
   align-items: center;
@@ -255,4 +173,18 @@
     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;
+    }
+  }
+}
 </style>

--
Gitblit v1.9.3