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