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