From e4897e8a61146a1e7a5418373e31375a16366c46 Mon Sep 17 00:00:00 2001 From: yaowanxin <3588231647@qq.com> Date: 星期一, 11 八月 2025 15:26:25 +0800 Subject: [PATCH] 添加附件,调整数据 --- src/views/energyManagement/energyArea/index.vue | 142 +++++++++++++++------------- src/views/personnelManagement/contractManagement/index.vue | 141 ++++++++++++++++++++------- 2 files changed, 179 insertions(+), 104 deletions(-) diff --git a/src/views/energyManagement/energyArea/index.vue b/src/views/energyManagement/energyArea/index.vue index 72f5449..25ce083 100644 --- a/src/views/energyManagement/energyArea/index.vue +++ b/src/views/energyManagement/energyArea/index.vue @@ -4,7 +4,7 @@ <div> <el-input v-model="search" style="width: 210px" placeholder="杈撳叆鍏抽敭瀛楄繘琛屾悳绱�" @change="searchFilter" @clear="searchFilter" clearable prefix-icon="Search" /> - <el-button type="primary" @click="openModelDia('add')" style="margin-left: 10px">鏂板鍖哄煙</el-button> + <el-button type="primary" @click="openProDia('add')" style="margin-left: 10px">鏂板鐖跺尯鍩�</el-button> </div> <div ref="containerRef"> <el-tree ref="tree" v-loading="treeLoad" :data="list" @node-click="handleNodeClick" @@ -23,16 +23,14 @@ ? node.expanded ? 'FolderOpened' : 'Folder' : 'Tickets'" /> </el-icon> {{ data.fuId==null ? data.id : '' || data.areaName }} - - </span> <div> - <!-- <el-button type="primary" link @click="openProDia('edit', data)"> + <el-button v-if="node.level < 2" type="primary" link @click="openProDia('edit', data)"> 缂栬緫 - </el-button> --> - <el-button v-if="node.level < 2" type="primary" link @click="openProDia('add', data)" :disabled="node.level >= 3"> - 娣诲姞瀛愬尯鍩� </el-button> + <!-- <el-button v-if="node.level < 2" type="primary" link @click="openProDia('add', data)" :disabled="node.level >= 3"> + 娣诲姞瀛愬尯鍩� + </el-button> --> <!-- <el-button v-if="!node.childNodes.length" style="margin-left: 4px" type="danger" link @click="remove(node, data)"> 鍒犻櫎 @@ -44,10 +42,10 @@ </div> </div> <div class="right"> - <div style="margin-bottom: 10px" v-if="isShowButton"> - <!-- <el-button type="primary" @click="openModelDia('add')"> + <div style="margin-bottom: 10px"> + <el-button type="primary" @click="openModelDia('add')"> 鏂板鍖哄煙 - </el-button> --> + </el-button> <ImportExcel @uploadSuccess="getModelList" /> <el-button type="danger" @click="handleDelete" style="margin-left: 10px" plain> 鍒犻櫎 @@ -58,11 +56,11 @@ </div> <el-dialog v-model="productDia" title="鍖哄煙" width="400px" @keydown.enter.prevent> <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> - <el-row :gutter="30"> + <el-row> <el-col :span="24"> - <el-form-item label="鐖跺尯鍩燂細" prop="fuId"> - <el-select v-model="form.fuId" placeholder="璇烽�夋嫨鐖跺尯鍩�" clearable @keydown.enter.prevent> - <el-option v-for="item in list" :key="item.id" :label="item.label" :value="item.id" /> + <el-form-item label="鍖哄煙绫诲瀷锛�" prop="areaType"> + <el-select v-model="form.areaType" placeholder="璇烽�夋嫨鍖哄煙绫诲瀷" clearable @keydown.enter.prevent> + <el-option v-for="item in areaTypeList" :key="item" :label="item" :value="item" /> </el-select> </el-form-item> </el-col> @@ -71,6 +69,7 @@ <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitForm">纭</el-button> + <!-- <el-button type="primary" @click="submitModelForm">纭</el-button> --> <el-button @click="closeProDia">鍙栨秷</el-button> </div> </template> @@ -114,17 +113,9 @@ </template> <script setup> -import { ref } from "vue"; +import { ref, onMounted } from "vue"; import { ElMessageBox } from "element-plus"; import { areaListPage, areaDelete, areaAdd, areaUpdate } from "@/api/energyManagement/index.js"; -import { - addOrEditProduct, - addOrEditProductModel, - delProduct, - delProductModel, - modelListPage, - productTreeList, -} from "@/api/basicData/product.js"; // import ImportExcel from "../../../ImportExcel/index.vue"; const { proxy } = getCurrentInstance(); @@ -151,6 +142,10 @@ "鐗规畩鐢ㄧ數鍖哄煙" ]) const tableColumn = ref([ + { + label: "鍖哄煙缂栧彿", + prop: "id" + }, { label: "鍖哄煙鍚嶇О", prop: "areaName" @@ -185,7 +180,7 @@ const selectedRows = ref([]); const page = reactive({ current: 1, - size: 10, + size: 30, total: 0, }); const data = reactive({ @@ -196,39 +191,38 @@ fuId: "", sort: "" }, - - modelForm: { - areaName: "", - areaType: "", - fuId: "", - sort: "" - }, modelRules: { model: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], unit: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], }, }); -const { form, rules, modelForm, modelRules } = toRefs(data); - +const { form, rules, modelRules } = toRefs(data); +// const originalRecords = ref([]); +// const parentItems = ref([]); // 鏌ヨ浜у搧鏍� -const getProductTreeList = () => { +const getProductTeeList = () => { treeLoad.value = true; - areaListPage() + areaListPage({ + current: page.current, + size: page.size, + }) .then((res) => { const originalRecords = res.data.records; + console.log(originalRecords); // 绛涢�塮uId涓虹┖鐨勯」浣滀负鐖惰妭鐐� - const parentItems = originalRecords.filter(item => !item.fuId); + list.value = originalRecords.filter(item => !item.fuId); // 涓烘瘡涓埗鑺傜偣娣诲姞children骞跺尮閰嶅瓙鑺傜偣 - parentItems.forEach(parent => { + list.value.forEach(parent => { parent.children = originalRecords.filter(child => child.fuId === parent.id); }); - // 鏇存柊鍒楄〃鏁版嵁涓烘爲褰㈢粨鏋� - list.value = parentItems; + // // 鏇存柊鍒楄〃鏁版嵁涓烘爲褰㈢粨鏋� + // list.value = parentItems.value; + console.log('鏍戝舰缁撴瀯鏁版嵁:', list.value); - list.value.forEach((a) => { - expandedKeys.value.push(a.label); - }); + // list.value.forEach((a) => { + // expandedKeys.value.push(a.label); + // }); treeLoad.value = false; }) .catch((err) => { @@ -242,10 +236,16 @@ // 鎵撳紑浜у搧寮规 const openProDia = (type, data) => { operationType.value = type; + modelOperationType.value = type; + productDia.value = true; - form.value.fuId = ""; + form.value.areaType = ""; if (type === "edit") { form.value.id = data.id; + form.value.areaName = data.areaName; + form.value.areaType = data.areaType; + form.value.fuId = data.fuId; + form.value.sort = data.sort; } }; // 鎵撳紑瑙勬牸鍨嬪彿寮规 @@ -270,14 +270,17 @@ areaAdd(form.value).then((res) => { proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); closeProDia(); - getProductTreeList(); + getProductTeeList(); + getModelList(); + }); }else { form.value.id = currentId.value; areaUpdate(form.value).then((res) => { proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); closeProDia(); - getProductTreeList(); + getModelList(); + getProductTeeList(); }); } } @@ -300,10 +303,11 @@ }) .then(() => { tableLoading.value = true; - delProduct(ids) + areaDelete(ids) .then((res) => { proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); - getProductTreeList(); + getProductTeeList(); + getModelList(); }) .finally(() => { tableLoading.value = false; @@ -316,7 +320,7 @@ // 閫夋嫨浜у搧 const handleNodeClick = (val, node, el) => { // 鍒ゆ柇鏄惁涓哄彾瀛愯妭鐐� - isShowButton.value = !(val.children && val.children.length > 0); + // isShowButton.value = !(val.children && val.children.length > 0); // 鍙湁鍙跺瓙鑺傜偣鎵嶆墽琛屼互涓嬮�昏緫 currentId.value = val.id; currentParentId.value = val.parentId; @@ -327,13 +331,21 @@ const submitModelForm = () => { proxy.$refs.modelFormRef.validate((valid) => { if (valid) { - modelForm.value.productId = currentId.value; - areaUpdate(form.value).then((res) => { - proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); - closeModelDia(); - getModelList(); - getProductTreeList(); - }); + if (modelOperationType.value === "add") { + form.value.fuId = currentId.value; + areaAdd(form.value).then((res) => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + }); + } + else { + // form.value.id = currentId.value; + areaUpdate(form.value).then((res) => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + }); + } + closeModelDia(); + getModelList(); + getProductTeeList(); } }); }; @@ -347,21 +359,18 @@ selectedRows.value = selection; }; -// 鏌ヨ瑙勬牸鍨嬪彿 -const pagination = (obj) => { - page.current = obj.page; - page.size = obj.limit; - getModelList(); -}; +// 鏌ヨ鍖哄煙 const getModelList = () => { tableLoading.value = true; areaListPage({ - id: currentId.value, + fuId: currentId.value, current: page.current, size: page.size, }).then((res) => { console.log("res", res); - tableData.value = res.data.records; + const originalRecords = res.data.records; + // 绛涢�塮uId涓虹┖鐨勯」浣滀负鐖惰妭鐐� + tableData.value = originalRecords.filter(item => item.fuId === currentId.value); page.total = res.total; tableLoading.value = false; }); @@ -386,7 +395,7 @@ .then((res) => { proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); getModelList(); - getProductTreeList(); + getProductTeeList(); }) .finally(() => { tableLoading.value = false; @@ -432,7 +441,10 @@ // 娌″尮閰嶅埌杩斿洖false return false; }; -getProductTreeList(); +onMounted(() => { + getProductTeeList(); +}); + </script> <style scoped> diff --git a/src/views/personnelManagement/contractManagement/index.vue b/src/views/personnelManagement/contractManagement/index.vue index 57d7ec4..b52e083 100644 --- a/src/views/personnelManagement/contractManagement/index.vue +++ b/src/views/personnelManagement/contractManagement/index.vue @@ -3,51 +3,79 @@ <div class="search_form"> <div> <span class="search_title">濮撳悕锛�</span> - <el-input - v-model="searchForm.staffName" - style="width: 240px" - placeholder="璇疯緭鍏ュ鍚嶆悳绱�" - @change="handleQuery" - clearable - :prefix-icon="Search" - /> - <span style="margin-left: 10px" class="search_title">鍚堝悓缁撴潫鏃ユ湡锛�</span> - <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange" - placeholder="璇烽�夋嫨" clearable @change="changeDaterange" /> - <el-button type="primary" @click="handleQuery" style="margin-left: 10px" - >鎼滅储</el-button - > + <el-input v-model="searchForm.staffName" style="width: 240px" placeholder="璇疯緭鍏ュ鍚嶆悳绱�" @change="handleQuery" + clearable :prefix-icon="Search" /> + <span style="margin-left: 10px" class="search_title">鍚堝悓缁撴潫鏃ユ湡锛�</span> + <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange" + placeholder="璇烽�夋嫨" clearable @change="changeDaterange" /> + <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button> </div> <div> <!-- <el-button type="primary" @click="openForm('add')">鏂板鍏ヨ亴</el-button>--> + <el-button type="info" @click="handleImport">瀵煎叆</el-button> <el-button @click="handleOut">瀵煎嚭</el-button> <!-- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>--> </div> </div> <div class="table_list"> - <PIMTable - rowKey="id" - :column="tableColumn" - :tableData="tableData" - :page="page" - :isSelection="true" - @selection-change="handleSelectionChange" - :tableLoading="tableLoading" - @pagination="pagination" - :total="page.total" - ></PIMTable> + <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true" + @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination" + :total="page.total"></PIMTable> </div> <form-dia ref="formDia" @close="handleQuery"></form-dia> + + <!-- 鍚堝悓瀵煎叆瀵硅瘽妗� --> + <el-dialog + :title="upload.title" + v-model="upload.open" + width="400px" + append-to-body + > + <el-upload + ref="uploadRef" + :limit="1" + accept=".xlsx, .xls" + :headers="upload.headers" + :action="upload.url + '?updateSupport=' + upload.updateSupport" + :disabled="upload.isUploading" + :on-progress="handleFileUploadProgress" + :on-success="handleFileSuccess" + :auto-upload="false" + drag + > + <el-icon class="el-icon--upload"><upload-filled /></el-icon> + <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> + <template #tip> + <div class="el-upload__tip text-center"> + <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span> + <!-- <el-link + type="primary" + :underline="false" + style="font-size: 12px; vertical-align: baseline" + @click="importTemplate" + >涓嬭浇妯℃澘</el-link + > --> + </div> + </template> + </el-upload> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button> + <el-button @click="upload.open = false">鍙� 娑�</el-button> + </div> + </template> + </el-dialog> </div> </template> <script setup> import { Search } from "@element-plus/icons-vue"; -import {onMounted, ref} from "vue"; +import { onMounted, ref } from "vue"; import FormDia from "@/views/personnelManagement/contractManagement/components/formDia.vue"; -import {ElMessageBox} from "element-plus"; -import {staffOnJobListPage} from "@/api/personnelManagement/employeeRecord.js"; +import { ElMessageBox } from "element-plus"; +import { staffOnJobListPage } from "@/api/personnelManagement/employeeRecord.js"; import dayjs from "dayjs"; +import { getToken } from "@/utils/auth.js"; const data = reactive({ searchForm: { @@ -108,7 +136,7 @@ { label: "瀹跺涵浣忓潃", prop: "adress", - width:200 + width: 200 }, { label: "绗竴瀛﹀巻", @@ -117,12 +145,12 @@ { label: "涓撲笟", prop: "profession", - width:100 + width: 100 }, { label: "韬唤璇佸彿", prop: "identityCard", - width:200 + width: 200 }, { label: "骞撮緞", @@ -131,7 +159,7 @@ { label: "鑱旂郴鐢佃瘽", prop: "phone", - width:150 + width: 150 }, { label: "绱ф�ヨ仈绯讳汉", @@ -141,7 +169,7 @@ { label: "绱ф�ヨ仈绯讳汉鐢佃瘽", prop: "emergencyContactPhone", - width:150 + width: 150 }, { label: "鍚堝悓骞撮檺", @@ -234,12 +262,47 @@ cancelButtonText: "鍙栨秷", type: "warning", }) - .then(() => { - proxy.download("/staff/staffOnJob/export", {}, "鍚堝悓绠$悊.xlsx"); - }) - .catch(() => { - proxy.$modal.msg("宸插彇娑�"); - }); + .then(() => { + proxy.download("/staff/staffOnJob/export", {}, "鍚堝悓绠$悊.xlsx"); + }) + .catch(() => { + proxy.$modal.msg("宸插彇娑�"); + }); +}; +const upload = reactive({ + // 鏄惁鏄剧ず寮瑰嚭灞傦紙鍚堝悓瀵煎叆锛� + open: false, + // 寮瑰嚭灞傛爣棰橈紙鍚堝悓瀵煎叆锛� + title: "", + // 鏄惁绂佺敤涓婁紶 + isUploading: false, + // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹� + updateSupport: 1, + // 璁剧疆涓婁紶鐨勮姹傚ご閮� + headers: { Authorization: "Bearer " + getToken() }, + // 涓婁紶鐨勫湴鍧� + url: import.meta.env.VITE_APP_BASE_API + "/staff/staffOnJob/import", +}); +/** 瀵煎叆鎸夐挳鎿嶄綔 */ +function handleImport() { + upload.title = "鍚堝悓瀵煎叆"; + upload.open = true; +} +/** 鎻愪氦涓婁紶鏂囦欢 */ +function submitFileForm() { + console.log(upload.url + '?updateSupport=' + upload.updateSupport) + proxy.$refs["uploadRef"].submit(); +} +/**鏂囦欢涓婁紶涓鐞� */ +const handleFileUploadProgress = (event, file, fileList) => { + upload.isUploading = true; +}; +/** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */ +const handleFileSuccess = (response, file, fileList) => { + upload.open = false; + upload.isUploading = false; + proxy.$refs["uploadRef"].handleRemove(file); + getList(); }; onMounted(() => { getList(); -- Gitblit v1.9.3