From 1a5d32ee47a086247dec5cd7f3fde28700c6b187 Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期三, 02 七月 2025 20:39:41 +0800
Subject: [PATCH] 提交设备管理模块

---
 src/views/basicInformation/index.vue                      |    4 
 src/views/equipment/management/index.vue                  |  548 ++++++---------------------------
 src/views/equipment/management/mould/managementDialog.vue |  361 +++++++++------------
 3 files changed, 263 insertions(+), 650 deletions(-)

diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue
index 26dc9b9..7d25b6a 100644
--- a/src/views/basicInformation/index.vue
+++ b/src/views/basicInformation/index.vue
@@ -891,7 +891,9 @@
     width: 16%;
   }
 }
-
+.app-container{
+  padding: 18px !important;
+}
 .table-toolbar {
   margin-bottom: 20px;
   display: flex;
diff --git a/src/views/equipment/management/index.vue b/src/views/equipment/management/index.vue
index 3481d2f..2ceb04b 100644
--- a/src/views/equipment/management/index.vue
+++ b/src/views/equipment/management/index.vue
@@ -36,13 +36,6 @@
         <el-button :icon="Delete" type="danger" @click="handleDelete"
           >鍒犻櫎</el-button
         >
-        <!-- <el-button
-          v-show="canExport"
-          :icon="Download"
-          type="info"
-          @click="handleExport"
-          >瀵煎嚭</el-button
-        > -->
       </el-row>
       <!-- 琛ㄦ牸缁勪欢 -->
       <div>
@@ -61,7 +54,7 @@
         >
           <!-- 瀛楁鍚嶇О鍒楃殑鑷畾涔夋彃妲� - 鏄剧ず涓烘爣绛� -->
           <template
-            v-if="tabName === 'coalQualityMaintenance'"
+            v-if="activeTab === 'coalQualityMaintenance'"
             #fieldIds="{ row }"
           >
             <template
@@ -76,12 +69,10 @@
                 style="margin-right: 4px; margin-bottom: 2px"
                 type="primary"
               >
-                {{ getFieldDisplayName(field.trim()) }}
               </el-tag>
             </template>
             <template v-else>
               <el-tag size="small" type="primary">
-                {{ getFieldDisplayName(row.fieldIds) || "--" }}
               </el-tag>
             </template>
           </template>
@@ -96,465 +87,180 @@
         @pagination="handPagination"
       />
       <managementDialog
-      
+        v-model:copyForm="copyForm"
+        v-model:managementFormDialog="manaDialog"
+        :addOrEdit="addOrEdit"
+        :form="form"
+        @submit="getList"
       ></managementDialog>
     </el-card>
   </div>
 </template>
 
 <script setup>
-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 { computed, onMounted, reactive, ref } from "vue";
+import { ElMessage } from "element-plus";
+import { Delete, Plus } from "@element-plus/icons-vue";
 
-// ===== 缁勪欢瀵煎叆 =====
+// 缁勪欢瀵煎叆
 import DataTable from "@/components/Table/ETable.vue";
 import Pagination from "@/components/Pagination";
 import managementDialog from "./mould/managementDialog.vue";
-// ===== API 鏈嶅姟瀵煎叆 =====
-import { delSupply, getSupply } from "@/api/basicInformation/supplier.js";
-import { useDelete } from "@/hooks/useDelete.js";
-import { testUserList } from "@/api/tool/publicInterface.js";
-const { proxy } = getCurrentInstance();
 
-// ===== 鍝嶅簲寮忕姸鎬佺鐞� =====
-const dialogFormVisible = ref(false);
+// API 鏈嶅姟瀵煎叆
+import { useDelete } from "@/hooks/useDelete.js";
+import { getManagementList, delEquipment } from "@/api/equipment/management/index.js";
+
+// 鍝嶅簲寮忕姸鎬佺鐞�
 const form = ref({});
 const title = ref("");
 const copyForm = ref({});
 const addOrEdit = ref("add");
-
-// 鏁版嵁缂撳瓨鏄犲皠
-const userList = ref([]);
-const userMap = ref({}); // 鐢ㄦ埛ID -> 鐢ㄦ埛鍚嶆槧灏勮〃
-const addressMap = ref({}); // 鍦板潃ID -> 鍦板潃淇℃伅鏄犲皠琛�
-const coalFieldList = ref([]); // 鐓よ川瀛楁鍒楄〃
-
-// 椤甸潰鐘舵�佹帶鍒�
-const tabName = ref("management");
+const manaDialog = ref(false);
 const loading = ref(false);
 const activeTab = ref("management");
+const selectedRows = ref([]);
+const tableData = ref([]);
 
-// 鍒嗛〉鐘舵�佺鐞�
+// 鍒嗛〉鐘舵��
 const pageNum = ref(1);
 const pageSizes = ref(10);
 const total = ref(0);
 
-// 琛ㄦ牸鐘舵�佺鐞�
-const selectedRows = ref([]);
-const tableData = ref([]);
-const columns = ref();
-
 // 鏌ヨ鍙傛暟
-const queryParams = reactive({});
-
-// 鍦板潃閫夋嫨鏁版嵁
-const addressSelectOptions = ref([]);
-
-// ===== 閰嶇疆甯搁噺 =====
-
-// 鏍囩椤甸厤缃�
-const tabs = reactive([
-  { name: "management", label: "渚涘簲鍟嗕俊鎭�" },
-  { name: "customer", label: "瀹㈡埛淇℃伅" },
-]);
-
-// ===== 宸ュ叿鍑芥暟 =====
-
-
-/**
- * 鏋勫缓鍦板潃鏄犲皠琛�
- * @param {Array} areaData - 鍦板潃鏁版嵁
- * @description 閫掑綊鏋勫缓鍦板潃鏄犲皠琛紝鏀寔澶氱骇鍦板潃鏌ユ壘
- */
-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);
-};
-
-/**
- * 鏍煎紡鍖栧湴鍧�鏁扮粍涓烘樉绀哄瓧绗︿覆
- * @param {Array} addressIds - 鍦板潃ID鏁扮粍
- * @returns {string} 鏍煎紡鍖栧悗鐨勫湴鍧�瀛楃涓�
- * @description 灏嗗湴鍧�ID鏁扮粍杞崲涓哄彲璇荤殑鍦板潃瀛楃涓�
- */
-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) => addressMap.value[id]?.name || "--"
-  );
-
-  if (addressNames.every((name) => name === "--")) {
-    return "--";
-  }
-
-  return addressNames.filter((name) => name !== "--").join(" / ");
-};
-
-/**
- * 鑾峰彇鐢ㄦ埛鍒楄〃鏁版嵁骞舵瀯寤烘槧灏勮〃
- * @description 鑾峰彇鐢ㄦ埛鏁版嵁骞舵瀯寤篒D鍒扮敤鎴峰悕鐨勬槧灏勫叧绯�
- */
-const getUserList = async () => {
-  try {
-    const res = await testUserList();
-    console.log("鑾峰彇鐢ㄦ埛鍒楄〃鏁版嵁:", res);
-    console.log("userMap:", userMap.value);
-    if (res && res.data) {
-      userList.value = res.data;
-      userList.value.forEach((user) => {
-        userMap.value[user.userId] = user.nickName;
-      });
-    }
-  } catch (error) {
-    console.error("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触:", error);
-  }
-};
-
-/**
- * 鏍规嵁瀛楁ID鑾峰彇瀛楁鏄剧ず鍚嶇О
- * @param {string|number} fieldId - 瀛楁ID
- * @returns {string} 瀛楁鏄剧ず鍚嶇О
- * @description 閫氳繃瀛楁ID鍖归厤瀵瑰簲鐨勫瓧娈靛悕绉�
- */
-const getFieldDisplayName = (fieldId) => {
-  if (!fieldId) return "--";
-
-  const numId = parseInt(fieldId);
-  const matchedField = coalFieldList.value.find((item) => item.id === numId);
-
-  return matchedField ? matchedField.fieldName : numId;
-};
-
-/**
- * 褰撳墠鏍囩椤垫槸鍚︽敮鎸佸鍑哄姛鑳�
- */
-const canExport = computed(() => {
-  return ["management"].includes(tabName.value);
+const queryParams = reactive({
+  searchAll: ""
 });
 
-/**
- * 鎼滅储妗嗗崰浣嶇鏂囨湰
- */
-const searchPlaceholder = computed(() => {
-  const placeholderMap = {
-    management: "渚涘簲鍟�/缁熶竴璇嗗埆鐮�/璇︾粏鍦板潃",
-  };
-  return placeholderMap[tabName.value] || "璇疯緭鍏ユ悳绱俊鎭�";
-});
+// 鏍囩椤甸厤缃� - 渚夸簬鍚庣画鎵╁睍
+const tabsConfig = {
+  management: {
+    label: "璁惧鍒楄〃",
+    searchPlaceholder: "璁惧缂栧彿/璁惧鍚嶇О/瑙勬牸鍨嬪彿",
+    showSearch: true,
+    api: getManagementList,
+    deleteApi: delEquipment,
+    columns: [
+      { prop: "equipmentId", label: "璁惧缂栧彿", minWidth: 100 },
+      { prop: "equipmentName", label: "璁惧鍚嶇О", minWidth: 100 },
+      { prop: "quantity", label: "鏁伴噺", minWidth: 100 },
+      { prop: "specification", label: "瑙勬牸鍨嬪彿", minWidth: 100 },
+      { 
+        prop: "usageStatus", 
+        label: "浣跨敤鐘舵��", 
+        minWidth: 100,
+        formatter: (row) => row.usageStatus == 1 ? "鍚敤" : "绂佺敤"
+      },
+      { prop: "usingDepartment", label: "浣跨敤閮ㄩ棬", minWidth: 100 },
+      { prop: "purchaseDate", label: "閲囪喘鏃ユ湡", minWidth: 100 },
+      { prop: "purchasePrice", label: "閲囪喘浠锋牸", minWidth: 100 },
+    ]
+  }
+  // 鍚庣画鍙互鍦ㄨ繖閲屾坊鍔犳柊鐨勬爣绛鹃〉閰嶇疆
+};
 
-/**
- * 鏄惁鏄剧ず鎼滅储妗�
- */
-const shouldShowSearch = computed(() => {
-  return [
-    "management",
-  ].includes(tabName.value);
-});
+// 鏍囩椤垫暟鎹�
+const tabs = reactive(
+  Object.entries(tabsConfig).map(([name, config]) => ({
+    name,
+    label: config.label
+  }))
+);
 
-/**
- * 褰撳墠閫変腑琛屾暟閲�
- */
+// 褰撳墠鏍囩椤甸厤缃�
+const currentTabConfig = computed(() => tabsConfig[activeTab.value]);
+
+// 璁$畻灞炴��
+const searchPlaceholder = computed(() => currentTabConfig.value?.searchPlaceholder || "璇疯緭鍏ユ悳绱俊鎭�");
+const shouldShowSearch = computed(() => currentTabConfig.value?.showSearch || false);
+const columns = computed(() => currentTabConfig.value?.columns || []);
 const selectedCount = computed(() => selectedRows.value.length);
 
-// ===== 琛ㄦ牸鍒楅厤缃� =====
-
-/**
- * 渚涘簲鍟嗚〃鏍煎垪閰嶇疆
- */
-const management = ref([
-  { prop: "equipmentId", label: "璁惧缂栧彿", minWidth: 100 },
-  { prop: "equipmentName", label: "璁惧鍚嶇О", minWidth: 100 },
-  { prop: "quantity", label: "鏁伴噺", minWidth: 100 },
-  { prop: "specification", label: "瑙勬牸鍨嬪彿", minWidth: 100 },
-  { prop: "usageStatus", label: "浣跨敤鐘舵��", minWidth: 100 },
-  { prop: "usingDepartment", label: "浣跨敤閮ㄩ棬", minWidth: 100 },
-  { prop: "userId", label: "浣跨敤浜�", minWidth: 100 },
-  { prop: "purchaseDate", label: "閲囪喘鏃ユ湡", minWidth: 100 },
-  { prop: "purchasePrice", label: "閲囪喘浠锋牸", minWidth: 100 },
-]);
-
-
-// ===== 浜嬩欢澶勭悊鍑芥暟 =====
-
-/**
- * 鏍囩椤靛垏鎹簨浠跺鐞�
- * @param {Object} tab - 鏍囩椤靛璞�
- * @description 澶勭悊鏍囩椤靛垏鎹紝閲嶇疆琛ㄥ崟鍜岀姸鎬侊紝鍔犺浇瀵瑰簲鏁版嵁
- */
+// 浜嬩欢澶勭悊鍑芥暟
 const handleTabClick = (tab) => {
-  // 閲嶇疆琛ㄥ崟鍜岀姸鎬�
+  activeTab.value = tab.props.name;
+  resetState();
+  getList();
+};
+
+const resetState = () => {
   form.value = {};
   addOrEdit.value = "add";
   loading.value = true;
-  tabName.value = tab.props.name;
   tableData.value = [];
   pageNum.value = 1;
   pageSizes.value = 10;
   total.value = 0;
   queryParams.searchAll = "";
-  // 鏍规嵁鏍囩椤电被鍨嬭缃搴旂殑鍒楅厤缃�
-  const tabConfig = {
-    management: () => {
-      columns.value = management.value;
-      getList();
-    },
-  };
-
-  // 鎵ц瀵瑰簲鐨勯厤缃嚱鏁�
-  const configFn = tabConfig[tabName.value];
-  if (configFn) {
-    configFn();
-  }
 };
 
-/**
- * 閲嶇疆鏌ヨ鏉′欢
- * @description 閲嶇疆鏌ヨ鍙傛暟骞堕噸鏂板姞杞芥暟鎹�
- */
 const resetQuery = () => {
-  Object.keys(queryParams).forEach((key) => {
-    if (key !== "pageNum" && key !== "pageSizes") {
-      queryParams[key] = "";
-    }
-  });
+  queryParams.searchAll = "";
+  pageNum.value = 1;
   getList();
 };
 
-/**
- * 鎼滅储鍔熻兘
- * @description 閲嶇疆椤电爜骞舵墽琛屾悳绱�
- */
 const search = () => {
   pageNum.value = 1;
   getList();
 };
 
-/**
- * 鏂板鎸夐挳鐐瑰嚮澶勭悊
- */
 const handleAdd = () => {
   addOrEdit.value = "add";
-  handleAddEdit(tabName.value);
+  form.value = {};
+  title.value = `鏂板${currentTabConfig.value.label}`;
+  manaDialog.value = true;
 };
 
-/**
- * 鏂板/缂栬緫寮圭獥澶勭悊
- * @param {string} currentTabName - 褰撳墠鏍囩椤靛悕绉�
- * @description 鏍规嵁鏍囩椤电被鍨嬭缃脊绐楁爣棰樺苟鎵撳紑寮圭獥
- */
-const handleAddEdit = (currentTabName) => {
-  const actionText =
-    addOrEdit.value === "add"
-      ? "鏂板"
-      : addOrEdit.value === "edit"
-      ? "缂栬緫"
-      : "鏌ョ湅";
-
-  const tabTitleMap = {
-    supplier: "渚涘簲鍟嗕俊鎭�",
-    customer: "瀹㈡埛淇℃伅",
-  };
-
-  title.value = `${actionText}${tabTitleMap[currentTabName] || ""}`;
-  openDialog();
+const handleEdit = (row) => {
+  form.value = { ...row };
+  addOrEdit.value = "edit";
+  title.value = `缂栬緫${currentTabConfig.value.label}`;
+  copyForm.value = { ...row };
+  manaDialog.value = true;
 };
 
-/**
- * 鎵撳紑寮圭獥
- * @description 鏍规嵁缂栬緫鐘舵�佸喅瀹氭槸鍚﹀鍒惰〃鍗曟暟鎹�
- */
-const openDialog = () => {
-  if (addOrEdit.value === "edit" || addOrEdit.value === "viewRow") {
-    copyForm.value = JSON.parse(JSON.stringify(form.value));
-  } else {
-    form.value = {};
-  }
-  dialogFormVisible.value = true;
+const handleView = (row) => {
+  form.value = { ...row };
+  addOrEdit.value = "viewRow";
+  title.value = `鏌ョ湅${currentTabConfig.value.label}`;
+  copyForm.value = { ...row };
+  manaDialog.value = true;
 };
 
-/**
- * 鍒嗛〉澶勭悊
- * @param {Object} val - 鍒嗛〉鍙傛暟瀵硅薄
- */
 const handPagination = (val) => {
   pageNum.value = val.page;
   pageSizes.value = val.limit;
   getList();
 };
 
-/**
- * 琛ㄥ崟鎻愪氦澶勭悊
- * @param {Object} val - 鎻愪氦缁撴灉瀵硅薄
- */
-const handleSubmit = async (val) => {
-  if (val.result.code !== 200) {
-    ElMessage.error("鎿嶄綔澶辫触锛�" + val.result.msg);
-    return;
-  }
-  ElMessage.success(val.title + val.result.msg);
-  dialogFormVisible.value = false;
-  getList();
-};
-
-/**
- * 寮圭獥鏄剧ず鐘舵�佸鐞�
- * @param {boolean} value - 鏄剧ず鐘舵��
- */
-const handleDialogFormVisible = (value) => {
-  dialogFormVisible.value = value;
-};
-
-/**
- * 琛ㄦ牸琛岄�夋嫨澶勭悊
- * @param {Array} selection - 閫変腑鐨勮鏁版嵁
- */
 const handleSelectionChange = (selection) => {
   selectedRows.value = selection;
 };
-/**
- * 缂栬緫鎸夐挳鐐瑰嚮澶勭悊
- * @param {Object} row - 琛屾暟鎹�
- * @description 澶勭悊缂栬緫鎿嶄綔锛屾瀯寤哄湴鍧�鏁扮粍骞舵墦寮�缂栬緫寮圭獥
- */
-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);
-};
 
 
-/**
- * 鎵归噺鍒犻櫎澶勭悊
- * @description 鎵归噺鍒犻櫎閫変腑鐨勮褰�
- */
-  const deleteApiMap = {
-      management: delSupply,
-    };
-const {handleDeleteBatch :handleDelete} = useDelete({
-  deleteApi: () => deleteApiMap[tabName.value],
+// 鍒犻櫎澶勭悊
+const { handleDeleteBatch: handleDelete } = useDelete({
+  deleteApi: () => currentTabConfig.value.deleteApi,
   selectedRows: selectedRows,
-  getList: () => getList,
+  getList: () => getList(),
   tableData: tableData,
   total: total,
   confirmText: "纭鍒犻櫎閫変腑鐨勬暟鎹悧锛�",
   successText: "鍒犻櫎鎴愬姛",
-})
+});
 
-/**
- * 鍏抽棴寮圭獥澶勭悊
- */
-const handleBeforeClose = () => {
-  dialogFormVisible.value = false;
-  form.value = {};
-};
-
-/**
- * 瀵煎嚭鏁版嵁
- * @param {string} api - 瀵煎嚭鎺ュ彛璺緞
- * @param {string} name - 瀵煎嚭鏂囦欢鍚嶅墠缂�
- */
-const exportData = (api, name) => {
-  proxy.download(
-    api,
-    { ...queryParams },
-    `${name}${new Date().getTime()}.xlsx`
-  );
-  ElMessage.success("瀵煎嚭鏁版嵁锛�" + name);
-};
-// ===== 鏁版嵁鑾峰彇鍑芥暟 =====
-
-/**
- * 鏍规嵁褰撳墠鏍囩椤甸�夋嫨瀵瑰簲鐨凙PI鎺ュ彛
- * @returns {Promise} API璋冪敤Promise
- * @description 缁熶竴鐨勬帴鍙i�夋嫨鍑芥暟锛屾牴鎹爣绛鹃〉绫诲瀷璋冪敤瀵瑰簲鐨凙PI
- */
-const selectInterface = () => {
-  const apiParams = {
-    current: pageNum.value,
-    pageSize: pageSizes.value,
-    searchAll: queryParams.searchAll,
-  };
-
-  const apiMap = {
-    management: () => getSupply(apiParams),
-    customer: () => getCustomerList(apiParams),
-    coal: () => getCoalInfo(apiParams),
-    coalQualityMaintenance: () => getCoalPlanList(apiParams),
-    coalMeiZhiZiDuanWeiHu: () => coalField(apiParams),
-  };
-
-  const apiFunction = apiMap[tabName.value];
-  return apiFunction
-    ? apiFunction()
-    : Promise.reject(new Error("鏈壘鍒板搴旂殑API鎺ュ彛"));
-};
-
-/**
- * 鑾峰彇鍒楄〃鏁版嵁
- * @description 缁熶竴鐨勬暟鎹幏鍙栧嚱鏁帮紝澶勭悊鍔犺浇鐘舵�佸拰閿欒澶勭悊
- */
+// 鏁版嵁鑾峰彇
 const getList = async () => {
   try {
     loading.value = true;
-    const { data, code } = await selectInterface();
+    const apiParams = {
+      current: pageNum.value,
+      pageSize: pageSizes.value,
+      searchAll: queryParams.searchAll,
+    };
+
+    const { data, code } = await currentTabConfig.value.api(apiParams);
 
     if (code !== 200) {
       ElMessage.error("鑾峰彇鏁版嵁澶辫触锛�" + (data?.msg || "鏈煡閿欒"));
@@ -564,63 +270,15 @@
     tableData.value = data.records || [];
     total.value = data.total || 0;
   } catch (error) {
-    console.error("鑾峰彇鍒楄〃鏁版嵁澶辫触:", error);
     ElMessage.error("鑾峰彇鏁版嵁澶辫触锛岃绋嶅悗鍐嶈瘯");
   } finally {
     loading.value = false;
   }
 };
 
-const handleView = (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 = "viewRow";
-  handleAddEdit(tabName.value);
-};
-
-
-// ===== 鐢熷懡鍛ㄦ湡閽╁瓙 =====
-
-/**
- * 缁勪欢鎸傝浇鍚庣殑鍒濆鍖栨搷浣�
- */
-onMounted(async () => {
-  try {
-    // 骞惰鎵ц鍒濆鍖栨搷浣�
-    await Promise.all([
-      handleTabClick({ props: { name: "management" } }),
-      getUserList(),
-    ]);
-  } catch (error) {
-    console.error("缁勪欢鍒濆鍖栧け璐�:", error);
-    ElMessage.error("椤甸潰鍒濆鍖栧け璐ワ紝璇峰埛鏂伴噸璇�");
-  }
+// 缁勪欢鎸傝浇
+onMounted(() => {
+  handleTabClick({ props: { name: "management" } });
 });
 </script>
 
@@ -644,7 +302,9 @@
   flex-wrap: wrap;
   gap: 10px;
 }
-
+.app-container{
+  padding: 18px !important;
+}
 /* 鍝嶅簲寮忚〃鏍� */
 @media screen and (max-width: 768px) {
   .table-toolbar {
diff --git a/src/views/equipment/management/mould/managementDialog.vue b/src/views/equipment/management/mould/managementDialog.vue
index f245902..b092d33 100644
--- a/src/views/equipment/management/mould/managementDialog.vue
+++ b/src/views/equipment/management/mould/managementDialog.vue
@@ -2,135 +2,118 @@
   <div>
     <el-dialog
       v-model="dialogVisible"
-      :title="title"
-      width="600"
+      :title="addOrEdit === 'edit' ? '缂栬緫' : '鏂板' + '璁惧'"
+      width="800"
+      :title-style="{ textAlign: 'center' }"
       :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="璇疯緭鍏ヤ緵璐у晢鍚嶇О"
-            :disabled="isViewMode"
-          />
-        </el-form-item>
-        <el-form-item
-          label="绾崇◣浜鸿瘑鍒彿"
-          prop="taxpayerId"
-        >
-          <el-input
-            v-model="formData.taxpayerId"
-            placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�"
-            :disabled="isViewMode"
-          />
-        </el-form-item>
-        <el-form-item
-          label="缁忚惀鍦板潃"
-          prop="bids"
-        >
-          <el-cascader
-            placeholder="璇烽�夋嫨缁忚惀鍦板潃"
-            size="default"
-            :options="addressSelectOptions"
-            v-model="formData.bids"
-            :props="cascaderProps"
-            @change="handleChange"
-            :disabled="isViewMode"
-          >
-          </el-cascader>
-        </el-form-item>
-        <el-form-item
-          label="璇︾粏鍦板潃"
-          prop="businessAddress"
-        >
-          <el-input
-            v-model="formData.businessAddress"
-            placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�"
-            :disabled="isViewMode"
-          />
-        </el-form-item>
-        <el-form-item
-          label="寮�鎴疯"
-          prop="bankAccount"
-        >
-          <el-input 
-            v-model="formData.bankAccount" 
-            placeholder="璇疯緭鍏ュ紑鎴疯" 
-            :disabled="isViewMode"
-          />
-        </el-form-item>
-        <el-form-item
-          label="閾惰璐︽埛"
-          prop="bankName"
-        >
-          <el-input 
-            v-model="formData.bankName" 
-            placeholder="璇疯緭鍏ラ摱琛岃处鎴�" 
-            :disabled="isViewMode"
-          />
-        </el-form-item>
-        <el-form-item
-          label="鑱旂郴浜�"
-          prop="contactPerson"
-        >
-          <el-input
-            v-model="formData.contactPerson"
-            placeholder="璇疯緭鍏ヨ仈绯讳汉"
-            :disabled="isViewMode"
-          />
-        </el-form-item>
-        <el-form-item
-          label="鑱旂郴浜虹數璇�"
-          prop="contactPhone"
-        >
-          <el-input
-            v-model="formData.contactPhone"
-            placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽"
-            :disabled="isViewMode"
-          />
-        </el-form-item>
-        <el-form-item
-          label="鑱旂郴浜哄湴鍧�"
-          prop="cids"
-        >
-          <el-cascader
-            placeholder="璇烽�夋嫨鑱旂郴浜哄湴鍧�"
-            size="default"
-            :options="addressSelectOptions"
-            v-model="formData.cids"
-            :props="cascaderProps"
-            @change="handleChange"
-            :disabled="isViewMode"
-          >
-          </el-cascader>
-        </el-form-item>
-        <el-form-item
-          label="鑱旂郴浜鸿缁嗗湴鍧�"
-          prop="contactAddress"
-        >
-          <el-input
-            v-model="formData.contactAddress"
-            placeholder="璇疯緭鍏ヨ仈绯讳汉鍦板潃"
-            :disabled="isViewMode"
-          />
-        </el-form-item>
+      >
+        <el-row :gutter="20">
+          <el-col :span="11">
+            <el-form-item label="璁惧缂栧彿" prop="equipmentId">
+              <el-input
+                v-model="formData.equipmentId"
+                placeholder="璇疯緭鍏ヨ澶囩紪鍙�"
+                :disabled="isViewMode"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="璁惧鍚嶇О" prop="equipmentName">
+              <el-input
+                v-model="formData.equipmentName"
+                placeholder="璇疯緭鍏ヨ澶囧悕绉�"
+                :disabled="isViewMode"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="鏁伴噺" prop="quantity">
+              <el-input
+                v-model="formData.quantity"
+                placeholder="璇疯緭鍏ユ暟閲�"
+                :disabled="isViewMode"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="瑙勬牸鍨嬪彿" prop="specification">
+              <el-input
+                v-model="formData.specification"
+                placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+                :disabled="isViewMode"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="浣跨敤鐘舵��" prop="usageStatus">
+              <el-select
+                v-model="formData.usageStatus"
+                placeholder="璇烽�夋嫨浣跨敤鐘舵��"
+                :disabled="isViewMode"
+              >
+                <el-option label="鍚敤" value="1" />
+                <el-option label="绂佺敤" value="0" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="浣跨敤閮ㄩ棬" prop="usingDepartment">
+              <el-input
+                v-model="formData.usingDepartment"
+                placeholder="璇疯緭鍏ヤ娇鐢ㄩ儴闂�"
+                :disabled="isViewMode"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="瀛樻斁浣嶇疆" prop="storageLocation">
+              <el-input
+                v-model="formData.storageLocation"
+                placeholder="璇疯緭鍏ュ瓨鏀句綅缃�"
+                :disabled="isViewMode"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="閲囪喘浠锋牸" prop="purchasePrice">
+              <el-input
+                v-model="formData.purchasePrice"
+                placeholder="璇疯緭鍏ラ噰璐环鏍�"
+                :disabled="isViewMode"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="閲囪喘鏃ユ湡" prop="purchaseDate">
+              <el-date-picker
+                v-model="formData.purchaseDate"
+                type="date"
+                placeholder="璇烽�夋嫨閲囪喘鏃ユ湡"
+                size="default"
+                :value-format="'YYYY-MM-DD'"
+                style="width: 100%;"
+                :disabled="isViewMode"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item class="dialog-footer">
-          <el-button v-if="addOrEdit === 'edit'" @click="resetForm"
-            >閲嶇疆</el-button
-          >
-          <el-button v-if="addOrEdit !== 'edit'||addOrEdit.includes('viewRow')" @click="cancelForm"
-            >鍙栨秷</el-button
-          >
-          <el-button type="primary" @click="submitForm" v-if="!isViewMode"> 纭畾</el-button>
+          <el-button v-if="!isViewMode" @click="cancelForm">鍙栨秷</el-button>
+          <el-button v-if="!isViewMode" type="primary" @click="submitForm">纭畾</el-button>
         </el-form-item>
       </el-form>
     </el-dialog>
@@ -138,9 +121,8 @@
 </template>
 
 <script setup>
-import { ref, watch, defineProps, onMounted, computed, reactive } from "vue";
-import { addOrEditSupply } from "@/api/basicInformation/supplier";
-import { getAreaOptions } from "@/api/system/area.js";
+import { ref, watch, computed, reactive } from "vue";
+import { addOrEditEquipment } from "@/api/equipment/management/index.js";
 
 const props = defineProps({
   beforeClose: {
@@ -161,121 +143,83 @@
   },
 });
 
-// 璁$畻灞炴�э細缁熶竴鎺у埗鏄惁绂佺敤
-const isViewMode = computed(() => props.addOrEdit === 'viewRow');
-
 const emit = defineEmits(["submit", "handleBeforeClose"]);
+
+// 璁$畻灞炴�э細缁熶竴鎺у埗鏄惁绂佺敤
+const isViewMode = computed(() => props.addOrEdit === "viewRow");
+
+// 琛ㄥ崟寮曠敤鍜屾暟鎹�
+const formRef = ref(null);
+const formData = ref({});
 const copyForm = defineModel("copyForm", {
   required: true,
   type: Object,
-});
-onMounted(() => {
-  fetchAreaOptions();
+  default: () => ({}),
 });
 
-// 淇敼鏍戝舰閫夋嫨鐨勬槧灏�
-const cascaderProps = ref({
-  value: "id", // 鎸囧畾value瀛楁涓篿d
-  label: "label", // 鎸囧畾label瀛楁
-  children: "children", // 鎸囧畾瀛愯妭鐐瑰瓧娈�
-});
-
-// 鍦板潃閫夋嫨鏁版嵁
-const addressSelectOptions = ref([]);
-const fetchAreaOptions = async () => {
-  addressSelectOptions.value = [];
-
-  const res = await getAreaOptions();
-  if (res.code === 200) {
-    addressSelectOptions.value = res.data;
-  }
-};
-
-// 澶勭悊鍦板潃鏁版嵁杞崲
-function mapAddress(list) {
-  return list.map((item) => ({
-    value: item.id,
-    label: item.name,
-    children: item.children ? mapAddress(item.children) : undefined,
-  }));
-}
-
-// 琛ㄥ崟寮曠敤
-const formRef = ref(null);
-// 琛ㄥ崟鏁版嵁
-const formData = ref({ ...props.form });
 // 寮圭獥鍙鎬�
-const dialogVisible = defineModel("supplierDialogFormVisible", {
+const dialogVisible = defineModel("managementFormDialog", {
   required: true,
   type: Boolean,
 });
-// 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖�
-watch(
-  () => props.form,
-  (newVal) => {
-    formData.value = { ...newVal };
-  },
-  { deep: true }
-);
 
-// 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖�
+// 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖栵紝鍚堝苟鐩戝惉閫昏緫
 watch(
-  () => dialogVisible.value,
-  (newVal) => {
-    emit("update:supplierDialogFormVisible", newVal);
-  }
+  [() => props.form, () => props.addOrEdit],
+  ([newForm, newAddOrEdit]) => {
+    formData.value = { ...newForm };
+  },
+  { deep: true, immediate: true }
 );
-// 澶勭悊鍦板潃閫夋嫨鍙樺寲
-const handleChange = (value) => {
-  console.log(value);
-};
 // 鎻愪氦琛ㄥ崟
 const submitForm = async () => {
   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,
-        });
-        obj.value = {
-          title: "鏂板",
-          ...formData.value,
-          result,
-        };
+  
+  await formRef.value.validate(async (valid) => {
+    if (!valid) return;
+    
+    try {
+      const result = await addOrEditEquipment({ ...formData.value });
+      const title = props.title.includes("鏂板") ? "鏂板" : "缂栬緫";
+      
+      if (result.code === 200 && result.msg) {
+        ElMessage.success(`${title}鎴愬姛锛�${result.msg}`);
+        emit("submit", { title, ...formData.value, result });
+        closeDialog();
       } else {
-        let result = await addOrEditSupply({
-          ...formData.value,
-        });
-        obj.value = {
-          title: "缂栬緫",
-          ...formData.value,
-          result,
-        };
+        ElMessage.error(`${title}澶辫触锛�${result.msg}`);
       }
-      emit("submit", obj.value);
+    } catch (error) {
+      console.error("鎻愪氦澶辫触:", error);
+      ElMessage.error("鎻愪氦澶辫触锛岃閲嶈瘯");
     }
   });
 };
-// 鍙栨秷琛ㄥ崟
-const cancelForm = () => {
-  emit("update:supplierDialogFormVisible", false);
+
+// 鍏抽棴寮圭獥鐨勭粺涓�鏂规硶
+const closeDialog = () => {
+  emit("update:managementFormDialog", false);
   formData.value = {};
 };
+
+// 鍙栨秷琛ㄥ崟
+const cancelForm = () => {
+  closeDialog();
+};
+
 // 閲嶇疆琛ㄥ崟
 const resetForm = () => {
   if (!formRef.value) return;
   formData.value = JSON.parse(JSON.stringify(copyForm.value));
 };
+
 // 鍏抽棴寮圭獥
 const handleClose = () => {
-  // 瑙﹀彂鐖剁粍浠剁殑鍏抽棴鍑芥暟
   emit("handleBeforeClose");
-  emit("update:supplierDialogFormVisible", false);
+  closeDialog();
 };
 const rules = reactive({
-  supplierName: [
+  equipmentId: [
     { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" },
   ],
 });
@@ -287,4 +231,11 @@
   margin-top: 20px;
   flex-direction: column;
 }
+
+// 鍙负dialog澶撮儴鍔犱笅鍒掔嚎
+:deep(.el-dialog__header) {
+  border-bottom: 1px solid #e8eaec;
+  padding: 0 20px 10px 0;
+  margin-bottom: 14px;
+}
 </style>

--
Gitblit v1.9.3