From 3a61bac8079ae9cad52ecd4ceda99d9105d18647 Mon Sep 17 00:00:00 2001 From: dy <dingyang@lnfxkj.tech> Date: 星期四, 10 四月 2025 15:08:17 +0800 Subject: [PATCH] 零件页面代码提交 --- src/views/partPlan/index.vue | 435 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 399 insertions(+), 36 deletions(-) diff --git a/src/views/partPlan/index.vue b/src/views/partPlan/index.vue index 2b62880..3184793 100644 --- a/src/views/partPlan/index.vue +++ b/src/views/partPlan/index.vue @@ -100,24 +100,117 @@ </HxlhTable> <!-- 鐢ㄦ埛瀵煎叆瀵硅瘽妗� --> - <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"> - <div class="el-upload__tip"> - <el-checkbox v-model="upload.updateSupport" />鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹� - </div> - <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span> - <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">涓嬭浇妯℃澘</el-link> + <el-dialog :title="upload.title" v-model="upload.open" width="90%" append-to-body> + <el-row :gutter="10"> + <el-col> + <div style="border-bottom: 1px solid #ccc;" > + <p>涓婁紶Excel鏂囦欢锛屽寘鍚浂浠跺伐鍗曚俊鎭�傜郴缁熷皢瑙f瀽鏁版嵁骞朵繚瀛樺埌鏈湴锛岀敤浜庡叧鑱斿埌闆朵欢璁″垝涓��</p> </div> - </template> - </el-upload> + </el-col> + <el-col > + <div></div> + </el-col> + <!-- <el-col> + <div> + <h2>Excel妯℃澘</h2> + <h4>璇蜂笅杞藉苟浣跨敤姝ゆā鏉垮~鍐欏伐鑹鸿矾绾挎暟鎹�</h4> + </div> + </el-col> --> + </el-row> + + <el-row :gutter="10" style="margin-top: 20px;"> + <!-- <el-col :span="1.5"> + <el-button + type="primary" + plain + icon="Download" + @click="importTemplate" + v-hasPermi="['partPlan:add']" + >涓嬭浇Excel妯℃澘</el-button> + </el-col> --> + <!-- <el-col :span="1.5"> + <el-button + type="success" + plain + icon="Edit" + @click="buildEexample" + v-hasPermi="['partPlan:edit']" + >鐢熸垚绀轰緥鏁版嵁</el-button> + </el-col> --> + </el-row> + <!-- <el-row> + <el-col> + <div> + <h2>鏂囦欢涓婁紶</h2> + </div> + </el-col> + </el-row> --> + <el-row> + <el-col> + <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="true" 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"> + <!-- <div class="el-upload__tip"> + <el-checkbox v-model="upload.updateSupport" />鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹� + </div> --> + <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> + </el-col> + </el-row> + <el-row style="margin-top: 20px;"> + <el-col> + <div> + <el-button + type="success" + plain + icon="Check" + :disabled="planned" + @click="uploadParse" + v-hasPermi="['partPlan:edit']" + >涓婁紶骞惰В鏋�</el-button> + </div> + </el-col> + </el-row> + <el-row> + <el-col style="margin-top: 20px;"> + <div v-show="isVisible"> + <el-alert icon="Check" :show-icon="true" title="闆朵欢宸ュ崟鏁版嵁宸叉垚鍔熻В鏋�" type="success" :closable="false"/> + </div> + <div v-show="isError"> + <el-alert icon="Close" :show-icon="true" title="闆朵欢宸ュ崟鏁版嵁宸茶В鏋愬け璐�" type="error" :closable="false"/> + </div> + </el-col> + </el-row> + <el-row v-show="isVisible"> + <el-col> + <div> + <h2>鏁版嵁棰勮</h2> + </div> + <HxlhTable + style="width: 100%" + :columns="exampleColumns" + :data="exampleList" + :loading="loading" + :maxHeight="exampleHeight" + @on-checkbox="handleCheckboxChange" + > + </HxlhTable> + </el-col> + <el-col> + <div style="text-align: right;"> + <h4>鍏变笂浼�<span style="color: blue;">{{ total }}</span>鏉¢浂浠跺伐鍗曟暟鎹�</h4> + </div> + </el-col> + </el-row> <template #footer> <div class="dialog-footer"> - <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button> - <el-button @click="upload.open = false">鍙� 娑�</el-button> + <!-- <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button> --> + <el-button @click="dialogCancel">鍙� 娑�</el-button> </div> </template> </el-dialog> @@ -125,12 +218,15 @@ </template> <script setup name="Plan"> -import { listPlan, getPlan, delPlan, addPlan, updatePlan } from "@/api/partPlan/plan"; +import { listPlan, examplePlan, confirmPart, addPlan, updatePlan } from "@/api/partPlan/plan"; import HxlhTable from '@/components/HxlhTable' import { getToken } from "@/utils/auth"; +import { ref } from "vue"; +import { ElMessage } from 'element-plus' const { proxy } = getCurrentInstance(); +const exampleList = ref([]); const planList = ref([]); const loading = ref(true); const showSearch = ref(true); @@ -138,8 +234,13 @@ const total = ref(0); const daterangePlanStartDay = ref([]); const daterangePlanEndDay = ref([]); -const vxeTable = ref(null); const height = ref(document.documentElement.clientHeight - 260 + "px;") +const isVisible = ref(false); +const isError = ref(false); +const planned = ref(true); +const batchNumber = ref(null); +const exampleHeight = ref("500px"); +const uploadRef = ref(); /*** 鐢ㄦ埛瀵煎叆鍙傛暟 */ const upload = reactive({ @@ -154,8 +255,193 @@ // 璁剧疆涓婁紶鐨勮姹傚ご閮� headers: { Authorization: "Bearer " + getToken() }, // 涓婁紶鐨勫湴鍧� - url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData" + url: import.meta.env.VITE_APP_BASE_API + "/aps/partPlan/importData" }); + +// 琛ㄦ牸閰嶇疆 +const exampleColumns = ref([ + { type: 'seq', title: '搴忓彿', width: 60 }, + { + title: '涓昏鍒掑憳', + field: 'masterPlanner', + width: 100, + }, + { + title: '鍛ㄦ棩', + field: 'weekDay', + width: 100, + formatter: (({ cellValue, row, column }) => { + if (cellValue) { + const weekDay = new Date(cellValue); + const year = weekDay.getFullYear(); + const month = String(weekDay.getMonth() + 1).padStart(2, '0'); + const day = String(weekDay.getDate()).padStart(2, '0'); + return `${month}-${day}`; + } + return ''; + }) + }, + { + title: '鍛ㄥ害', + field: 'weekCycle', + width: 80, + }, + { + title: '涓讳欢鏂欏彿', + field: 'mainPartNumber', + width: 150, + }, + { + title: '涓讳欢鍥惧彿', + field: 'mainPartDrawingNumber', + width: 150, + }, + { + title: '瀹㈡埛鍚嶇О', + field: 'customer', + width: 200, + }, + { + title: '涓氬姟绫诲瀷', + field: 'businessType', + width: 150, + }, + { + title: '鍗曟嵁鍙�', + field: 'documentNumber', + width: 150, + }, + { + title: '闇�姹傚垎绫�', + field: 'requirementType', + width: 150, + }, + { + title: '鍗曟嵁鐘舵��', + field: 'documentStatus', + width: 100, + }, + { + title: '鏂欏彿', + field: 'itemNumber', + width: 150, + }, + { + title: '鍥惧彿', + field: 'drawingNo', + width: 150, + }, + { + title: '鐗堟湰鍙�', + field: 'versionNumber', + width: 100, + }, + { + title: '鐢熶骇鏁伴噺', + field: 'productionQuantity', + width: 100, + }, + { + title: '鑹搧鏁伴噺', + field: 'goodProductsQuantity', + width: 100, + }, + { + title: '宸ュ簭鍙�', + field: 'processNumber', + width: 150, + }, + { + title: '宸ヤ綔涓績', + field: 'workCenter', + width: 150, + }, + { + title: '鎵�灞為儴闂�', + field: 'department', + width: 100, + }, + { + title: '璁″垝寮�宸ユ棩', + field: 'planStartDay', + width: 100, + }, + { + title: '璁″垝瀹屽伐鏃�', + field: 'planEndDay', + width: 100, + }, + { + title: '澶囨枡鏂欏彿', + field: 'standbyNumber', + width: 100, + }, + { + title: '澶囨枡鍚嶇О', + field: 'standbyName', + width: 200, + }, + { + title: '澶囨枡搴撳瓨', + field: 'standbyStock', + width: 100, + }, + { + title: '涓嬮亾宸ュ簭鎵�灞為儴闂�', + field: 'nextProcessDeparment', + width: 150, + }, + { + title: '鏄惁鎸傝捣', + field: 'isSuspended', + width: 100, + }, + { + title: '澶栧崗鏍囪瘑', + field: 'isOutsourcing', + width: 100, + }, + { + title: '璐﹀', + field: 'account', + width: 100, + }, + { + title: '涓婇樁鐗╂枡', + field: 'advancedMaterials', + width: 100, + }, + { + title: '涓婇樁鍗曟嵁鍙�', + field: 'advancedDocumentNumber', + width: 100, + }, + { + title: '涓婇樁闇�姹傛棩鏈�', + field: 'advancedRequirementDay', + width: 150, + }, + { + title: '璁″垝榻愬', + field: 'isPlanComplete', + width: 100, + }, + { + title: '搴撳瓨榻愬', + field: 'isStockComplete', + width: 100, + }, + { + title: '鏄惁鏈夋姌杩斿伐搴�', + field: 'hasTurnback', + width: 150, + }, + { + title: '椋庨櫓鏍囪瘑', + field: 'hasRisk', + width: 100, + }, +]); // 琛ㄦ牸閰嶇疆 const columns = ref([ @@ -204,17 +490,17 @@ { title: '涓氬姟绫诲瀷', field: 'businessType', - width: 100, + width: 150, }, { title: '鍗曟嵁鍙�', field: 'documentNumber', - width: 100, + width: 150, }, { title: '闇�姹傚垎绫�', field: 'requirementType', - width: 100, + width: 150, }, { title: '鍗曟嵁鐘舵��', @@ -224,12 +510,12 @@ { title: '鏂欏彿', field: 'itemNumber', - width: 100, + width: 150, }, { title: '鍥惧彿', field: 'drawingNo', - width: 100, + width: 150, }, { title: '鐗堟湰鍙�', @@ -249,12 +535,12 @@ { title: '宸ュ簭鍙�', field: 'processNumber', - width: 100, + width: 150, }, { title: '宸ヤ綔涓績', field: 'workCenter', - width: 100, + width: 150, }, { title: '鎵�灞為儴闂�', @@ -279,7 +565,7 @@ { title: '澶囨枡鍚嶇О', field: 'standbyName', - width: 100, + width: 200, }, { title: '澶囨枡搴撳瓨', @@ -289,7 +575,7 @@ { title: '涓嬮亾宸ュ簭鎵�灞為儴闂�', field: 'nextProcessDeparment', - width: 100, + width: 150, }, { title: '鏄惁鎸傝捣', @@ -319,7 +605,7 @@ { title: '涓婇樁闇�姹傛棩鏈�', field: 'advancedRequirementDay', - width: 100, + width: 150, }, { title: '璁″垝榻愬', @@ -334,7 +620,7 @@ { title: '鏄惁鏈夋姌杩斿伐搴�', field: 'hasTurnback', - width: 100, + width: 150, }, { title: '椋庨櫓鏍囪瘑', @@ -345,14 +631,25 @@ const data = reactive({ queryParams: { - pageNum: 1, - pageSize: 10, documentNumber: null, customer: null, + batchNumber: null, } }); const { queryParams } = toRefs(data); + +/** 鏌ヨ闆朵欢璁″垝涓存椂绠$悊鍒楄〃 */ +function getExampleList() { + loading.value = true; + queryParams.value = {}; + queryParams.value.batchNumber = batchNumber.value; + examplePlan(queryParams.value).then(response => { + exampleList.value = response.rows; + total.value = response.total; + loading.value = false; + }); +} /** 鏌ヨ闆朵欢璁″垝绠$悊鍒楄〃 */ function getList() { @@ -368,7 +665,6 @@ } listPlan(queryParams.value).then(response => { planList.value = response.rows; - total.value = response.total; loading.value = false; }); } @@ -393,18 +689,18 @@ }; /** 鎵归噺淇敼璁″垝寮�宸ユ棩鎸夐挳鎿嶄綔 */ -function plannedStart(row) { +function plannedStart() { } /** 鎵归噺淇敼璁″垝瀹屽伐鏃ユ寜閽搷浣� */ -function plannedEnd(row) { - +function plannedEnd() { + } /** 瀵煎叆鎸夐挳鎿嶄綔 */ function handleImport() { - upload.title = "瀵煎叆"; + upload.title = "闆朵欢宸ュ崟鏁版嵁涓婁紶"; upload.open = true; }; @@ -415,5 +711,72 @@ }, `plan_${new Date().getTime()}.xlsx`) } +/** 涓嬭浇妯℃澘鎿嶄綔 */ +function importTemplate() { + proxy.download("system/user/importTemplate", { + }, `user_template_${new Date().getTime()}.xlsx`); +}; + +/** buildEexample */ +function buildEexample() { + proxy.$refs["uploadRef"].submit(); +}; + +/**鏂囦欢涓婁紶涓鐞� */ +const handleFileUploadProgress = (event, file, fileList) => { + upload.isUploading = true; +}; + +/** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */ +const handleFileSuccess = (response, file, fileList) => { + if(response.code == '200'){ + batchNumber.value = response.data; + isVisible.value = true; + planned.value = false; + isError.value = false; + getExampleList(); + }else{ + isError.value = true; + proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true }); + } + proxy.$refs["uploadRef"].handleRemove(file); + upload.isUploading = false; +}; + +/** 涓婁紶骞惰В鏋愭寜閽搷浣� */ +function uploadParse() { + queryParams.value.params = {}; + queryParams.value.params["batchNumber"] = batchNumber.value; + confirmPart(queryParams.value).then(response => { + exampleList.value = response.rows; + loading.value = false; + isVisible.value = false; + isError.value = false; + planned.value = true; + upload.open = false; + ElMessage({ + message: '闆朵欢宸ュ崟鏁版嵁宸叉垚鍔熶笂浼犲拰瑙f瀽', + type: 'success', + }) + getList(); + }); +} + +/** dialog鍙栨秷 */ +function dialogCancel(){ + if (uploadRef.value) { + uploadRef.value.clearFiles(); + } + isVisible.value = false; + isError.value = false; + planned.value = true; + upload.open = false; +} + getList(); </script> +<style lang="css" scoped> +h4 { + font-weight: bold; +} +</style> \ No newline at end of file -- Gitblit v1.9.3