From a7e3f9bafb5887f1d8948b666adf8f0c7168713a Mon Sep 17 00:00:00 2001
From: dy <dingyang@lnfxkj.tech>
Date: 星期三, 09 四月 2025 15:24:25 +0800
Subject: [PATCH] 零件计划管理页面提交

---
 src/components/HxlhTable/index.vue |    9 
 src/views/partPlan/index.vue       |  911 +++++++++++++++++++-------------------------------------
 2 files changed, 311 insertions(+), 609 deletions(-)

diff --git a/src/components/HxlhTable/index.vue b/src/components/HxlhTable/index.vue
index b7ce6c7..eb4d866 100644
--- a/src/components/HxlhTable/index.vue
+++ b/src/components/HxlhTable/index.vue
@@ -137,7 +137,6 @@
 
 const tableForm = ref([]);
 
-const height = ref(document.documentElement.clientHeight - 120 + "px;")
 // const url = computed(() => props.src)
 const emit = defineEmits();
 
@@ -198,25 +197,23 @@
   if (!props.page) {
     return;
   }
-  console.log(props.page.total);
   return {
     total: props.page.total,
     currentPage: props.page.current,
     pageSize: props.page.size,
     align: 'left',
     pageSizes: [10, 20, 50, 100, 500],
-    layouts: ['PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total']
+    layouts: ['PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total'],
+    perfect: true
   };
 });
-
-console.log(tablePage);
 
 // 瀹氫箟 footData 璁$畻灞炴��
 const footData = computed(() => props.mxTableFootData);
 
 </script>
 
-<style lang="scss">
+<style lang="less">
   .hxlh-table .vxe-toolbar .vxe-tools--operate {
     margin-top: -23px;
   }
diff --git a/src/views/partPlan/index.vue b/src/views/partPlan/index.vue
index 9b5ae3b..2b62880 100644
--- a/src/views/partPlan/index.vue
+++ b/src/views/partPlan/index.vue
@@ -1,273 +1,62 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="涓昏鍒掑憳" prop="masterPlanner">
-        <el-input
-          v-model="queryParams.masterPlanner"
-          placeholder="璇疯緭鍏ヤ富璁″垝鍛�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <!-- <el-form-item label="鍛ㄦ棩" prop="weekDay">
-        <el-date-picker clearable
-          v-model="queryParams.weekDay"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="璇烽�夋嫨鍛ㄦ棩">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="鍛ㄥ害" prop="weekCycle">
-        <el-input
-          v-model="queryParams.weekCycle"
-          placeholder="璇疯緭鍏ュ懆搴�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="涓讳欢鏂欏彿" prop="mainPartNumber">
-        <el-input
-          v-model="queryParams.mainPartNumber"
-          placeholder="璇疯緭鍏ヤ富浠舵枡鍙�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="涓讳欢鍥惧彿" prop="mainPartDrawingNumber">
-        <el-input
-          v-model="queryParams.mainPartDrawingNumber"
-          placeholder="璇疯緭鍏ヤ富浠跺浘鍙�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item> -->
-      <el-form-item label="瀹㈡埛鍚嶇О" prop="customer">
-        <el-input
-          v-model="queryParams.customer"
-          placeholder="璇疯緭鍏ュ鎴峰悕绉�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <!-- <el-form-item label="鍗曟嵁鍙�" prop="documentNumber">
-        <el-input
-          v-model="queryParams.documentNumber"
-          placeholder="璇疯緭鍏ュ崟鎹彿"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏂欏彿" prop="itemNumber">
-        <el-input
-          v-model="queryParams.itemNumber"
-          placeholder="璇疯緭鍏ユ枡鍙�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍥惧彿" prop="drawingNo">
-        <el-input
-          v-model="queryParams.drawingNo"
-          placeholder="璇疯緭鍏ュ浘鍙�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鐗堟湰鍙�" prop="versionNumber">
-        <el-input
-          v-model="queryParams.versionNumber"
-          placeholder="璇疯緭鍏ョ増鏈彿"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鐢熶骇鏁伴噺" prop="productionQuantity">
-        <el-input
-          v-model="queryParams.productionQuantity"
-          placeholder="璇疯緭鍏ョ敓浜ф暟閲�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鑹搧鏁伴噺" prop="goodProductsQuantity">
-        <el-input
-          v-model="queryParams.goodProductsQuantity"
-          placeholder="璇疯緭鍏ヨ壇鍝佹暟閲�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="宸ュ簭鍙�" prop="processNumber">
-        <el-input
-          v-model="queryParams.processNumber"
-          placeholder="璇疯緭鍏ュ伐搴忓彿"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="宸ヤ綔涓績" prop="workCenter">
-        <el-input
-          v-model="queryParams.workCenter"
-          placeholder="璇疯緭鍏ュ伐浣滀腑蹇�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鎵�灞為儴闂�" prop="department">
-        <el-input
-          v-model="queryParams.department"
-          placeholder="璇疯緭鍏ユ墍灞為儴闂�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item> -->
-      <el-form-item label="璁″垝寮�宸ユ棩" style="width: 308px">
-        <el-date-picker
-          v-model="daterangePlanStartDay"
-          value-format="YYYY-MM-DD"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item label="璁″垝瀹屽伐鏃�" style="width: 308px">
-        <el-date-picker
-          v-model="daterangePlanEndDay"
-          value-format="YYYY-MM-DD"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item label="澶囨枡鏂欏彿" prop="standbyNumber">
-        <el-input
-          v-model="queryParams.standbyNumber"
-          placeholder="璇疯緭鍏ュ鏂欐枡鍙�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="澶囨枡鍚嶇О" prop="standbyName">
-        <el-input
-          v-model="queryParams.standbyName"
-          placeholder="璇疯緭鍏ュ鏂欏悕绉�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="澶囨枡搴撳瓨" prop="standbyStock">
-        <el-input
-          v-model="queryParams.standbyStock"
-          placeholder="璇疯緭鍏ュ鏂欏簱瀛�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="涓嬮亾宸ュ簭鎵�灞為儴闂�" prop="nextProcessDeparment">
-        <el-input
-          v-model="queryParams.nextProcessDeparment"
-          placeholder="璇疯緭鍏ヤ笅閬撳伐搴忔墍灞為儴闂�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏄惁鎸傝捣" prop="isSuspended">
-        <el-input
-          v-model="queryParams.isSuspended"
-          placeholder="璇疯緭鍏ユ槸鍚︽寕璧�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="澶栧崗鏍囪瘑" prop="isOutsourcing">
-        <el-input
-          v-model="queryParams.isOutsourcing"
-          placeholder="璇疯緭鍏ュ鍗忔爣璇�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="璐﹀" prop="account">
-        <el-input
-          v-model="queryParams.account"
-          placeholder="璇疯緭鍏ヨ处濂�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="涓婇樁鐗╂枡" prop="advancedMaterials">
-        <el-input
-          v-model="queryParams.advancedMaterials"
-          placeholder="璇疯緭鍏ヤ笂闃剁墿鏂�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="涓婇樁鍗曟嵁鍙�" prop="advancedDocumentNumber">
-        <el-input
-          v-model="queryParams.advancedDocumentNumber"
-          placeholder="璇疯緭鍏ヤ笂闃跺崟鎹彿"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="涓婇樁闇�姹傛棩鏈�" prop="advancedRequirementDay">
-        <el-date-picker clearable
-          v-model="queryParams.advancedRequirementDay"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="璇烽�夋嫨涓婇樁闇�姹傛棩鏈�">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="璁″垝榻愬" prop="isPlanComplete">
-        <el-input
-          v-model="queryParams.isPlanComplete"
-          placeholder="璇疯緭鍏ヨ鍒掗綈濂�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="搴撳瓨榻愬" prop="isStockComplete">
-        <el-input
-          v-model="queryParams.isStockComplete"
-          placeholder="璇疯緭鍏ュ簱瀛橀綈濂�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏄惁鏈夋姌杩斿伐搴�" prop="hasTurnback">
-        <el-input
-          v-model="queryParams.hasTurnback"
-          placeholder="璇疯緭鍏ユ槸鍚︽湁鎶樿繑宸ュ簭"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="椋庨櫓鏍囪瘑" prop="hasRisk">
-        <el-input
-          v-model="queryParams.hasRisk"
-          placeholder="璇疯緭鍏ラ闄╂爣璇�"
-          clearable
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
+    <el-row :gutter="20">
+      <el-col>
+        <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="90px">
+          <el-form-item label="璁″垝寮�宸ユ棩" style="width: 350px">
+            <el-date-picker
+              v-model="daterangePlanStartDay"
+              value-format="YYYY-MM-DD"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="寮�濮嬫棩鏈�"
+              end-placeholder="缁撴潫鏃ユ湡"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="璁″垝瀹屽伐鏃�" style="width: 350px">
+            <el-date-picker
+              v-model="daterangePlanEndDay"
+              value-format="YYYY-MM-DD"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="寮�濮嬫棩鏈�"
+              end-placeholder="缁撴潫鏃ユ湡"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="鍗曟嵁鍙�" prop="documentNumber">
+            <el-input
+              v-model="queryParams.documentNumber"
+              placeholder="璇疯緭鍏ュ崟鎹彿"
+              clearable
+              @keyup.enter="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="瀹㈡埛鍚嶇О" prop="customer">
+            <el-input
+              v-model="queryParams.customer"
+              placeholder="璇疯緭鍏ュ鎴峰悕绉�"
+              clearable
+              @keyup.enter="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+            <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+    
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
           type="primary"
           plain
           icon="Plus"
-          @click="handleAdd"
+          :disabled="single"
+          @click="plannedStart"
           v-hasPermi="['partPlan:add']"
-        >鏂板</el-button>
+        >鎵归噺淇敼璁″垝寮�宸ユ棩</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -275,19 +64,18 @@
           plain
           icon="Edit"
           :disabled="single"
-          @click="handleUpdate"
+          @click="plannedEnd"
           v-hasPermi="['partPlan:edit']"
-        >淇敼</el-button>
+        >鎵归噺淇敼璁″垝瀹屽伐鏃�</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['partPlan:remove']"
-        >鍒犻櫎</el-button>
+        <el-button 
+          type="info" 
+          plain 
+          icon="Upload" 
+          @click="handleImport" 
+          v-hasPermi="['partPlan:import']"
+          >瀵煎叆</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -301,198 +89,35 @@
       <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="planList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="涓昏鍒掑憳" align="center" prop="masterPlanner" />
-      <el-table-column label="鍛ㄦ棩" align="center" prop="weekDay" width="180">
-        <template #default="scope">
-          <span>{{ parseTime(scope.row.weekDay, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="鍛ㄥ害" align="center" prop="weekCycle" />
-      <el-table-column label="涓讳欢鏂欏彿" align="center" prop="mainPartNumber" />
-      <el-table-column label="涓讳欢鍥惧彿" align="center" prop="mainPartDrawingNumber" />
-      <el-table-column label="瀹㈡埛鍚嶇О" align="center" prop="customer" />
-      <el-table-column label="涓氬姟绫诲瀷" align="center" prop="businessType" />
-      <el-table-column label="鍗曟嵁鍙�" align="center" prop="documentNumber" />
-      <el-table-column label="闇�姹傚垎绫�" align="center" prop="requirementType" />
-      <el-table-column label="鍗曟嵁鐘舵��" align="center" prop="documentStatus" />
-      <el-table-column label="鏂欏彿" align="center" prop="itemNumber" />
-      <el-table-column label="鍥惧彿" align="center" prop="drawingNo" />
-      <el-table-column label="鐗堟湰鍙�" align="center" prop="versionNumber" />
-      <el-table-column label="鐢熶骇鏁伴噺" align="center" prop="productionQuantity" />
-      <el-table-column label="鑹搧鏁伴噺" align="center" prop="goodProductsQuantity" />
-      <el-table-column label="宸ュ簭鍙�" align="center" prop="processNumber" />
-      <el-table-column label="宸ヤ綔涓績" align="center" prop="workCenter" />
-      <el-table-column label="鎵�灞為儴闂�" align="center" prop="department" />
-      <el-table-column label="璁″垝寮�宸ユ棩" align="center" prop="planStartDay" width="180">
-        <template #default="scope">
-          <span>{{ parseTime(scope.row.planStartDay, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="璁″垝瀹屽伐鏃�" align="center" prop="planEndDay" width="180">
-        <template #default="scope">
-          <span>{{ parseTime(scope.row.planEndDay, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="澶囨枡鏂欏彿" align="center" prop="standbyNumber" />
-      <el-table-column label="澶囨枡鍚嶇О" align="center" prop="standbyName" />
-      <el-table-column label="澶囨枡搴撳瓨" align="center" prop="standbyStock" />
-      <el-table-column label="涓嬮亾宸ュ簭鎵�灞為儴闂�" align="center" prop="nextProcessDeparment" />
-      <el-table-column label="鏄惁鎸傝捣" align="center" prop="isSuspended" />
-      <el-table-column label="澶栧崗鏍囪瘑" align="center" prop="isOutsourcing" />
-      <el-table-column label="璐﹀" align="center" prop="account" />
-      <el-table-column label="涓婇樁鐗╂枡" align="center" prop="advancedMaterials" />
-      <el-table-column label="涓婇樁鍗曟嵁鍙�" align="center" prop="advancedDocumentNumber" />
-      <el-table-column label="涓婇樁闇�姹傛棩鏈�" align="center" prop="advancedRequirementDay" width="180">
-        <template #default="scope">
-          <span>{{ parseTime(scope.row.advancedRequirementDay, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="璁″垝榻愬" align="center" prop="isPlanComplete" />
-      <el-table-column label="搴撳瓨榻愬" align="center" prop="isStockComplete" />
-      <el-table-column label="鏄惁鏈夋姌杩斿伐搴�" align="center" prop="hasTurnback" />
-      <el-table-column label="椋庨櫓鏍囪瘑" align="center" prop="hasRisk" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template #default="scope">
-          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['partPlan:plan:edit']">淇敼</el-button>
-          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['partPlan:plan:remove']">鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
+    <HxlhTable
+        style="width: 100%"
+        :columns="columns"
+        :data="planList"
+        :loading="loading"
+        :height="height"
+        @on-checkbox="handleCheckboxChange"
+    >
+    </HxlhTable>
 
-    <!-- 娣诲姞鎴栦慨鏀归浂浠惰鍒掔鐞嗗璇濇 -->
-    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
-      <el-form ref="planRef" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="涓婚敭id" prop="id">
-          <el-input v-model="form.id" placeholder="璇疯緭鍏ヤ富閿甶d" />
-        </el-form-item>
-        <el-form-item label="涓昏鍒掑憳" prop="masterPlanner">
-          <el-input v-model="form.masterPlanner" placeholder="璇疯緭鍏ヤ富璁″垝鍛�" />
-        </el-form-item>
-        <el-form-item label="鍛ㄦ棩" prop="weekDay">
-          <el-date-picker clearable
-            v-model="form.weekDay"
-            type="date"
-            value-format="YYYY-MM-DD"
-            placeholder="璇烽�夋嫨鍛ㄦ棩">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="鍛ㄥ害" prop="weekCycle">
-          <el-input v-model="form.weekCycle" placeholder="璇疯緭鍏ュ懆搴�" />
-        </el-form-item>
-        <el-form-item label="涓讳欢鏂欏彿" prop="mainPartNumber">
-          <el-input v-model="form.mainPartNumber" placeholder="璇疯緭鍏ヤ富浠舵枡鍙�" />
-        </el-form-item>
-        <el-form-item label="涓讳欢鍥惧彿" prop="mainPartDrawingNumber">
-          <el-input v-model="form.mainPartDrawingNumber" placeholder="璇疯緭鍏ヤ富浠跺浘鍙�" />
-        </el-form-item>
-        <el-form-item label="瀹㈡埛鍚嶇О" prop="customer">
-          <el-input v-model="form.customer" placeholder="璇疯緭鍏ュ鎴峰悕绉�" />
-        </el-form-item>
-        <el-form-item label="鍗曟嵁鍙�" prop="documentNumber">
-          <el-input v-model="form.documentNumber" placeholder="璇疯緭鍏ュ崟鎹彿" />
-        </el-form-item>
-        <el-form-item label="鏂欏彿" prop="itemNumber">
-          <el-input v-model="form.itemNumber" placeholder="璇疯緭鍏ユ枡鍙�" />
-        </el-form-item>
-        <el-form-item label="鍥惧彿" prop="drawingNo">
-          <el-input v-model="form.drawingNo" placeholder="璇疯緭鍏ュ浘鍙�" />
-        </el-form-item>
-        <el-form-item label="鐗堟湰鍙�" prop="versionNumber">
-          <el-input v-model="form.versionNumber" placeholder="璇疯緭鍏ョ増鏈彿" />
-        </el-form-item>
-        <el-form-item label="鐢熶骇鏁伴噺" prop="productionQuantity">
-          <el-input v-model="form.productionQuantity" placeholder="璇疯緭鍏ョ敓浜ф暟閲�" />
-        </el-form-item>
-        <el-form-item label="鑹搧鏁伴噺" prop="goodProductsQuantity">
-          <el-input v-model="form.goodProductsQuantity" placeholder="璇疯緭鍏ヨ壇鍝佹暟閲�" />
-        </el-form-item>
-        <el-form-item label="宸ュ簭鍙�" prop="processNumber">
-          <el-input v-model="form.processNumber" placeholder="璇疯緭鍏ュ伐搴忓彿" />
-        </el-form-item>
-        <el-form-item label="宸ヤ綔涓績" prop="workCenter">
-          <el-input v-model="form.workCenter" placeholder="璇疯緭鍏ュ伐浣滀腑蹇�" />
-        </el-form-item>
-        <el-form-item label="鎵�灞為儴闂�" prop="department">
-          <el-input v-model="form.department" placeholder="璇疯緭鍏ユ墍灞為儴闂�" />
-        </el-form-item>
-        <el-form-item label="璁″垝寮�宸ユ棩" prop="planStartDay">
-          <el-date-picker clearable
-            v-model="form.planStartDay"
-            type="date"
-            value-format="YYYY-MM-DD"
-            placeholder="璇烽�夋嫨璁″垝寮�宸ユ棩">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="璁″垝瀹屽伐鏃�" prop="planEndDay">
-          <el-date-picker clearable
-            v-model="form.planEndDay"
-            type="date"
-            value-format="YYYY-MM-DD"
-            placeholder="璇烽�夋嫨璁″垝瀹屽伐鏃�">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="澶囨枡鏂欏彿" prop="standbyNumber">
-          <el-input v-model="form.standbyNumber" placeholder="璇疯緭鍏ュ鏂欐枡鍙�" />
-        </el-form-item>
-        <el-form-item label="澶囨枡鍚嶇О" prop="standbyName">
-          <el-input v-model="form.standbyName" placeholder="璇疯緭鍏ュ鏂欏悕绉�" />
-        </el-form-item>
-        <el-form-item label="澶囨枡搴撳瓨" prop="standbyStock">
-          <el-input v-model="form.standbyStock" placeholder="璇疯緭鍏ュ鏂欏簱瀛�" />
-        </el-form-item>
-        <el-form-item label="涓嬮亾宸ュ簭鎵�灞為儴闂�" prop="nextProcessDeparment">
-          <el-input v-model="form.nextProcessDeparment" placeholder="璇疯緭鍏ヤ笅閬撳伐搴忔墍灞為儴闂�" />
-        </el-form-item>
-        <el-form-item label="鏄惁鎸傝捣" prop="isSuspended">
-          <el-input v-model="form.isSuspended" placeholder="璇疯緭鍏ユ槸鍚︽寕璧�" />
-        </el-form-item>
-        <el-form-item label="澶栧崗鏍囪瘑" prop="isOutsourcing">
-          <el-input v-model="form.isOutsourcing" placeholder="璇疯緭鍏ュ鍗忔爣璇�" />
-        </el-form-item>
-        <el-form-item label="璐﹀" prop="account">
-          <el-input v-model="form.account" placeholder="璇疯緭鍏ヨ处濂�" />
-        </el-form-item>
-        <el-form-item label="涓婇樁鐗╂枡" prop="advancedMaterials">
-          <el-input v-model="form.advancedMaterials" placeholder="璇疯緭鍏ヤ笂闃剁墿鏂�" />
-        </el-form-item>
-        <el-form-item label="涓婇樁鍗曟嵁鍙�" prop="advancedDocumentNumber">
-          <el-input v-model="form.advancedDocumentNumber" placeholder="璇疯緭鍏ヤ笂闃跺崟鎹彿" />
-        </el-form-item>
-        <el-form-item label="涓婇樁闇�姹傛棩鏈�" prop="advancedRequirementDay">
-          <el-date-picker clearable
-            v-model="form.advancedRequirementDay"
-            type="date"
-            value-format="YYYY-MM-DD"
-            placeholder="璇烽�夋嫨涓婇樁闇�姹傛棩鏈�">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="璁″垝榻愬" prop="isPlanComplete">
-          <el-input v-model="form.isPlanComplete" placeholder="璇疯緭鍏ヨ鍒掗綈濂�" />
-        </el-form-item>
-        <el-form-item label="搴撳瓨榻愬" prop="isStockComplete">
-          <el-input v-model="form.isStockComplete" placeholder="璇疯緭鍏ュ簱瀛橀綈濂�" />
-        </el-form-item>
-        <el-form-item label="鏄惁鏈夋姌杩斿伐搴�" prop="hasTurnback">
-          <el-input v-model="form.hasTurnback" placeholder="璇疯緭鍏ユ槸鍚︽湁鎶樿繑宸ュ簭" />
-        </el-form-item>
-        <el-form-item label="椋庨櫓鏍囪瘑" prop="hasRisk">
-          <el-input v-model="form.hasRisk" placeholder="璇疯緭鍏ラ闄╂爣璇�" />
-        </el-form-item>
-      </el-form>
+    <!-- 鐢ㄦ埛瀵煎叆瀵硅瘽妗� -->
+    <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>
+          </div>
+        </template>
+      </el-upload>
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-          <el-button @click="cancel">鍙� 娑�</el-button>
+          <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
+          <el-button @click="upload.open = false">鍙� 娑�</el-button>
         </div>
       </template>
     </el-dialog>
@@ -501,69 +126,233 @@
 
 <script setup name="Plan">
 import { listPlan, getPlan, delPlan, addPlan, updatePlan } from "@/api/partPlan/plan";
+import HxlhTable from '@/components/HxlhTable'
+import { getToken } from "@/utils/auth";
 
 const { proxy } = getCurrentInstance();
 
 const planList = ref([]);
-const open = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
-const ids = ref([]);
 const single = ref(true);
-const multiple = ref(true);
 const total = ref(0);
-const title = ref("");
 const daterangePlanStartDay = ref([]);
 const daterangePlanEndDay = ref([]);
+const vxeTable = ref(null);
+const height = ref(document.documentElement.clientHeight - 260 + "px;")
+
+/*** 鐢ㄦ埛瀵煎叆鍙傛暟 */
+const upload = reactive({
+  // 鏄惁鏄剧ず寮瑰嚭灞傦紙鐢ㄦ埛瀵煎叆锛�
+  open: false,
+  // 寮瑰嚭灞傛爣棰橈紙鐢ㄦ埛瀵煎叆锛�
+  title: "",
+  // 鏄惁绂佺敤涓婁紶
+  isUploading: false,
+  // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
+  updateSupport: 0,
+  // 璁剧疆涓婁紶鐨勮姹傚ご閮�
+  headers: { Authorization: "Bearer " + getToken() },
+  // 涓婁紶鐨勫湴鍧�
+  url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData"
+});
+
+// 琛ㄦ牸閰嶇疆 
+const columns = ref([
+  { type: 'checkbox', width: 60, align:"center"},
+  { 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: 100,
+  },
+  {
+    title: '鍗曟嵁鍙�',
+    field: 'documentNumber',
+    width: 100,
+  },
+  {
+    title: '闇�姹傚垎绫�',
+    field: 'requirementType',
+    width: 100,
+  },
+  {
+    title: '鍗曟嵁鐘舵��',
+    field: 'documentStatus',
+    width: 100,
+  },
+  {
+    title: '鏂欏彿',
+    field: 'itemNumber',
+    width: 100,
+  },
+  {
+    title: '鍥惧彿',
+    field: 'drawingNo',
+    width: 100,
+  },
+  {
+    title: '鐗堟湰鍙�',
+    field: 'versionNumber',
+    width: 100,
+  },
+  {
+    title: '鐢熶骇鏁伴噺',
+    field: 'productionQuantity',
+    width: 100,
+  },
+  {
+    title: '鑹搧鏁伴噺',
+    field: 'goodProductsQuantity',
+    width: 100,
+  },
+  {
+    title: '宸ュ簭鍙�',
+    field: 'processNumber',
+    width: 100,
+  },
+  {
+    title: '宸ヤ綔涓績',
+    field: 'workCenter',
+    width: 100,
+  },
+  {
+    title: '鎵�灞為儴闂�',
+    field: 'department',
+    width: 100,
+  },
+  {
+    title: '璁″垝寮�宸ユ棩',
+    field: 'planStartDay',
+    width: 100,
+  },
+  {
+    title: '璁″垝瀹屽伐鏃�',
+    field: 'planEndDay',
+    width: 100,
+  },
+  {
+    title: '澶囨枡鏂欏彿',
+    field: 'standbyNumber',
+    width: 100,
+  },
+  {
+    title: '澶囨枡鍚嶇О',
+    field: 'standbyName',
+    width: 100,
+  },
+  {
+    title: '澶囨枡搴撳瓨',
+    field: 'standbyStock',
+    width: 100,
+  },
+  {
+    title: '涓嬮亾宸ュ簭鎵�灞為儴闂�',
+    field: 'nextProcessDeparment',
+    width: 100,
+  },
+  {
+    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: 100,
+  },
+  {
+    title: '璁″垝榻愬',
+    field: 'isPlanComplete',
+    width: 100,
+  },
+  {
+    title: '搴撳瓨榻愬',
+    field: 'isStockComplete',
+    width: 100,
+  },
+  {
+    title: '鏄惁鏈夋姌杩斿伐搴�',
+    field: 'hasTurnback',
+    width: 100,
+  },
+  {
+    title: '椋庨櫓鏍囪瘑',
+    field: 'hasRisk',
+    width: 100,
+  },
+]);
 
 const data = reactive({
-  form: {},
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    masterPlanner: null,
-    weekDay: null,
-    weekCycle: null,
-    mainPartNumber: null,
-    mainPartDrawingNumber: null,
-    customer: null,
-    businessType: null,
     documentNumber: null,
-    requirementType: null,
-    documentStatus: null,
-    itemNumber: null,
-    drawingNo: null,
-    versionNumber: null,
-    productionQuantity: null,
-    goodProductsQuantity: null,
-    processNumber: null,
-    workCenter: null,
-    department: null,
-    planStartDay: null,
-    planEndDay: null,
-    standbyNumber: null,
-    standbyName: null,
-    standbyStock: null,
-    nextProcessDeparment: null,
-    isSuspended: null,
-    isOutsourcing: null,
-    account: null,
-    advancedMaterials: null,
-    advancedDocumentNumber: null,
-    advancedRequirementDay: null,
-    isPlanComplete: null,
-    isStockComplete: null,
-    hasTurnback: null,
-    hasRisk: null
-  },
-  rules: {
-    // id: [
-    //   { required: true, message: "涓婚敭id涓嶈兘涓虹┖", trigger: "blur" }
-    // ],
+    customer: null,
   }
 });
 
-const { queryParams, form, rules } = toRefs(data);
+const { queryParams } = toRefs(data);
 
 /** 鏌ヨ闆朵欢璁″垝绠$悊鍒楄〃 */
 function getList() {
@@ -584,54 +373,6 @@
   });
 }
 
-// 鍙栨秷鎸夐挳
-function cancel() {
-  open.value = false;
-  reset();
-}
-
-// 琛ㄥ崟閲嶇疆
-function reset() {
-  form.value = {
-    id: null,
-    masterPlanner: null,
-    weekDay: null,
-    weekCycle: null,
-    mainPartNumber: null,
-    mainPartDrawingNumber: null,
-    customer: null,
-    businessType: null,
-    documentNumber: null,
-    requirementType: null,
-    documentStatus: null,
-    itemNumber: null,
-    drawingNo: null,
-    versionNumber: null,
-    productionQuantity: null,
-    goodProductsQuantity: null,
-    processNumber: null,
-    workCenter: null,
-    department: null,
-    planStartDay: null,
-    planEndDay: null,
-    standbyNumber: null,
-    standbyName: null,
-    standbyStock: null,
-    nextProcessDeparment: null,
-    isSuspended: null,
-    isOutsourcing: null,
-    account: null,
-    advancedMaterials: null,
-    advancedDocumentNumber: null,
-    advancedRequirementDay: null,
-    isPlanComplete: null,
-    isStockComplete: null,
-    hasTurnback: null,
-    hasRisk: null
-  };
-  proxy.resetForm("planRef");
-}
-
 /** 鎼滅储鎸夐挳鎿嶄綔 */
 function handleQuery() {
   queryParams.value.pageNum = 1;
@@ -647,61 +388,25 @@
 }
 
 // 澶氶�夋閫変腑鏁版嵁
-function handleSelectionChange(selection) {
-  ids.value = selection.map(item => item.id);
-  single.value = selection.length != 1;
-  multiple.value = !selection.length;
+const handleCheckboxChange = (data) => {
+  console.log(data);
+};
+
+/** 鎵归噺淇敼璁″垝寮�宸ユ棩鎸夐挳鎿嶄綔 */
+function plannedStart(row) {
+  
 }
 
-/** 鏂板鎸夐挳鎿嶄綔 */
-function handleAdd() {
-  reset();
-  open.value = true;
-  title.value = "娣诲姞闆朵欢璁″垝绠$悊";
+/** 鎵归噺淇敼璁″垝瀹屽伐鏃ユ寜閽搷浣� */
+function plannedEnd(row) {
+  
 }
 
-/** 淇敼鎸夐挳鎿嶄綔 */
-function handleUpdate(row) {
-  reset();
-  const _id = row.id || ids.value
-  getPlan(_id).then(response => {
-    form.value = response.data;
-    open.value = true;
-    title.value = "淇敼闆朵欢璁″垝绠$悊";
-  });
-}
-
-/** 鎻愪氦鎸夐挳 */
-function submitForm() {
-  proxy.$refs["planRef"].validate(valid => {
-    if (valid) {
-      if (form.value.id != null) {
-        updatePlan(form.value).then(response => {
-          proxy.$modal.msgSuccess("淇敼鎴愬姛");
-          open.value = false;
-          getList();
-        });
-      } else {
-        addPlan(form.value).then(response => {
-          proxy.$modal.msgSuccess("鏂板鎴愬姛");
-          open.value = false;
-          getList();
-        });
-      }
-    }
-  });
-}
-
-/** 鍒犻櫎鎸夐挳鎿嶄綔 */
-function handleDelete(row) {
-  const _ids = row.id || ids.value;
-  proxy.$modal.confirm('鏄惁纭鍒犻櫎闆朵欢璁″垝绠$悊缂栧彿涓�"' + _ids + '"鐨勬暟鎹」锛�').then(function() {
-    return delPlan(_ids);
-  }).then(() => {
-    getList();
-    proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-  }).catch(() => {});
-}
+/** 瀵煎叆鎸夐挳鎿嶄綔 */
+function handleImport() {
+  upload.title = "瀵煎叆";
+  upload.open = true;
+};
 
 /** 瀵煎嚭鎸夐挳鎿嶄綔 */
 function handleExport() {

--
Gitblit v1.9.3