Browse Source

1. 优化入库记录界面

2.	优化入库操作界面
3.	新增入库记录页面导出功能
dw 11 hours ago
parent
commit
aa7c761394
2 changed files with 618 additions and 37 deletions
  1. 122
    7
      src/views/sto/record/inRecord.vue
  2. 496
    30
      src/views/sto/ware/InStore.vue

+ 122
- 7
src/views/sto/record/inRecord.vue View File

@@ -18,7 +18,7 @@
18 18
         <el-row :gutter="24">
19 19
           <el-col :span="6">
20 20
             <el-form-item label="仓库名称">
21
-              <el-input v-model="query.wareName" placeholder="请输入仓库ID" clearable></el-input>
21
+              <el-input v-model="query.wareName" placeholder="请输入仓库名称" clearable></el-input>
22 22
             </el-form-item>
23 23
           </el-col>
24 24
           <el-col :span="6">
@@ -93,9 +93,8 @@
93 93
           <el-col :span="8">
94 94
             <el-button type="primary" @click="handleSearch">查询</el-button>
95 95
             <el-button @click="reset">重置</el-button>
96
-            <el-button @click="exportExcel">下载模板</el-button>
97
-            <el-button @click="exportExcel">导出</el-button>
98
-            <el-button @click="importExcel">导入</el-button>
96
+<!--            <el-button type="danger" @click="exportExcel">删除</el-button>-->
97
+            <el-button type="success" @click="exportExcel">导出</el-button>
99 98
           </el-col>
100 99
         </el-row>
101 100
       </el-form>
@@ -124,7 +123,9 @@
124 123
           :data="tableData"
125 124
           border
126 125
           highlight-current-row
126
+          @selection-change="handleSelectionChange"
127 127
       >
128
+        <el-table-column type="selection" :selectable="selectable" width="55" />
128 129
         <el-table-column type="index" label="序号" align="center" width="60">
129 130
           <template #default="scope">
130 131
             <span>{{ scope.$index + 1}}</span>
@@ -155,7 +156,21 @@
155 156
             {{ row.ST_GRADE ?? row.stGrade ?? '-' }}
156 157
           </template>
157 158
         </el-table-column>
158
-        <el-table-column prop="inDtm" label="入库时间" min-width="180" header-align="center" align="center" show-overflow-tooltip />
159
+        <el-table-column label="捆绑包号" min-width="140" header-align="center" align="center" show-overflow-tooltip>
160
+          <template #default="{ row }">
161
+            {{ row.bundleNumber ?? '-' }}
162
+          </template>
163
+        </el-table-column>
164
+        <el-table-column label="规格" min-width="160" header-align="center" align="center" show-overflow-tooltip>
165
+          <template #default="{ row }">
166
+            {{ row.specification ?? '-' }}
167
+          </template>
168
+        </el-table-column>
169
+        <el-table-column prop="inDtm" label="入库时间" min-width="180" header-align="center" align="center" show-overflow-tooltip >
170
+          <template #default="{ row }">
171
+            {{ formatDateTime(row.inDtm) ?? '-' }}
172
+          </template>
173
+        </el-table-column>
159 174
         <el-table-column prop="ownerCompany" label="货权公司" min-width="160" header-align="center" align="center" show-overflow-tooltip />
160 175
         <el-table-column prop="receivingCompany" label="收货公司" min-width="160" header-align="center" align="center" show-overflow-tooltip />
161 176
         <el-table-column label="最终客户公司" min-width="180" header-align="center" align="center" show-overflow-tooltip>
@@ -185,9 +200,18 @@
185 200
           </template>
186 201
         </el-table-column>
187 202
         <el-table-column prop="deliveryAddress" label="收货地址" min-width="200" header-align="center" align="center" show-overflow-tooltip />
203
+        <el-table-column label="产地" width="200" header-align="center" align="center">
204
+          <template #default="{ row }">
205
+            {{ row.placeOfOrigin ?? '-' }}
206
+          </template>
207
+        </el-table-column>
208
+        <el-table-column label="入库理货人员" min-width="120" header-align="center" align="center" show-overflow-tooltip>
209
+          <template #default="{ row }">
210
+            {{ row.inUserName ?? '-' }}
211
+          </template>
212
+        </el-table-column>
188 213
       </el-table>
189 214
     </el-card>
190
-
191 215
     <el-card :body-style="cardBodyStyle">
192 216
       <el-pagination
193 217
           :current-page="pageNum"
@@ -208,6 +232,8 @@ import {getCurrentInstance, onMounted, reactive, ref} from 'vue'
208 232
 import tools from '@/tools'
209 233
 import ButtonBox from '@/components/ButtonBox.vue'
210 234
 import SearchBox from '@/components/SearchBox.vue'
235
+import {ElMessage} from "element-plus";
236
+import axios from "axios";
211 237
 
212 238
 const {proxy} = getCurrentInstance()
213 239
 
@@ -226,7 +252,7 @@ const pageSize = ref(10)
226 252
 let pageNum = ref(1)
227 253
 const listUrl = ref('sto/InRecord/query')
228 254
 const statisticsUrl = ref('sto/InRecord/statistics')
229
-
255
+const multipleSelection = ref([])
230 256
 const PopupMenuTreeRef = ref(null)
231 257
 const showPop = () => {
232 258
   PopupMenuTreeRef.value?.show?.()
@@ -449,6 +475,10 @@ const shutdwon = () => {
449 475
   console.warn('shutdwon action is not implemented yet.')
450 476
 }
451 477
 
478
+const handleSelectionChange = (val) => {
479
+  multipleSelection.value = val
480
+}
481
+
452 482
 const flagLabel = (val) => {
453 483
   if (val === '1' || val === 1) return '正常'
454 484
   if (val === '2' || val === 2) return '取消入库'
@@ -460,6 +490,91 @@ const flagTagType = (val) => {
460 490
   return 'info'
461 491
 }
462 492
 
493
+// 字段映射转换函数
494
+const convertExportData = (selectedData) => {
495
+  return selectedData.map(item => {
496
+    return {
497
+      // 仓库相关
498
+      wareName: item.inWareName || item.wareName || '',          // 仓库名称
499
+      stackName: item.inStackName || item.stackName || '',      // 垛位号
500
+      layerNo: item.inLayerNo || item.layerNo || '',           // 层号
501
+
502
+      // 物料信息
503
+      materialName: item.materialName || '',                    // 物料名称
504
+      stGrade: item.ST_GRADE || item.stGrade || '',            // 钢种
505
+      attrib03: item.specification || item.attrib03 || '',     // 规格
506
+      quantity: item.IN_QUANTITY || item.inQuantity || 0,      // 数量
507
+      weight: item.IN_WEIGHT || item.inWeight || 0,            // 重量(默认吨)
508
+
509
+      // 运输信息
510
+      inTruckNo: item.carNo || item.inTruckNo || '',           // 入库车号
511
+
512
+      // 公司信息
513
+      ownerCompany: item.ownerCompany || '',                   // 货权公司
514
+      receivingCompany: item.receivingCompany || '',           // 收货公司
515
+      // 注意:前端表格中有"最终客户公司",但Excel中没有对应字段
516
+
517
+      // 编号信息
518
+      prodNo: item.prodNo || '',                               // 材料号
519
+      attrib01: item.orderNo || item.attrib01 || '',           // 订单号
520
+      attrib02: item.contractNo || item.attrib02 || '',        // 合约号
521
+      attrib04: item.bundleNumber || item.attrib04 || '',          // 捆绑包号
522
+
523
+      // 地址和产地
524
+      deliveryAddress: item.deliveryAddress || '',             // 收货地址
525
+      attrib05: item.placeOfOrigin || item.attrib05 || '',            // 产地
526
+
527
+      // 备注信息
528
+      remark1: item.remark || item.remark1 || '',              // 备注
529
+      remark2: item.stackRemark || item.remark2 || '',         // 垛位备注
530
+
531
+      // 人员信息
532
+      inUser: item.inUserName || '',                               // 入库/理货人员
533
+
534
+      // 其他可能需要但Excel中没有的字段
535
+      inDtm: item.inDtm || '',                                 // 入库时间(Excel中没有)
536
+      inFlag: item.inFlag || '',                               // 入库标记(Excel中没有)
537
+      customerCompany: item.customerCompany || item.CustomerCompany || '' // 最终客户公司
538
+    };
539
+  });
540
+};
541
+
542
+// 修改导出函数
543
+const exportExcel = () => {
544
+  if (multipleSelection.value.length === 0) {
545
+    ElMessage.warning('请选择要导出的数据');
546
+    return;
547
+  }
548
+
549
+  // 转换数据格式
550
+  const exportData = convertExportData(multipleSelection.value);
551
+
552
+  axios({
553
+    method: 'POST',
554
+    url: '/sto/InRecord/exportInRecode',
555
+    data: exportData,  // 使用转换后的数据
556
+    responseType: 'blob',
557
+    headers: {
558
+      'Content-Type': 'application/json'
559
+    }
560
+  }).then((response) => {
561
+    // 创建下载链接
562
+    const url = window.URL.createObjectURL(new Blob([response.data]));
563
+    const link = document.createElement('a');
564
+    link.href = url;
565
+    link.setAttribute('download', `入库记录_${new Date().getTime()}.xlsx`);
566
+    document.body.appendChild(link);
567
+    link.click();
568
+    link.remove();
569
+    window.URL.revokeObjectURL(url);
570
+
571
+    ElMessage.success('导出成功');
572
+  }).catch((error) => {
573
+    console.error('导出失败:', error);
574
+    ElMessage.error('导出失败,请重试');
575
+  });
576
+};
577
+
463 578
 onMounted(() => {
464 579
   getTableData()
465 580
   getStatistics()

+ 496
- 30
src/views/sto/ware/InStore.vue View File

@@ -1,13 +1,10 @@
1 1
 <template>
2
-<!--  <el-button @click="exportExcel">下载模板</el-button>-->
3
-
4
-<!--  <el-button @click="batchInStore">批量入库</el-button>-->
5 2
   <el-card :body-style="cardBodyStyle">
6 3
     <el-form v-model="query" :inline="true" :label-width="100" >
7 4
       <el-row :gutter="24">
8 5
         <el-col :span="6">
9 6
           <el-form-item label="仓库名称">
10
-            <el-input v-model="query.wareName" placeholder="请输入仓库ID" clearable></el-input>
7
+            <el-input v-model="query.wareName" placeholder="请输入仓库名称" clearable></el-input>
11 8
           </el-form-item>
12 9
         </el-col>
13 10
         <el-col :span="6">
@@ -78,16 +75,17 @@
78 75
           </el-form-item>
79 76
         </el-col>
80 77
       </el-row>
81
-      <el-row :gutter="24">
82
-        <el-col :span="8">
83
-          <el-button type="primary" @click="handleSearch">查询</el-button>
84
-          <el-button @click="reset">重置</el-button>
85
-          <el-button @click="exportExcel">下载模板</el-button>
86
-          <el-button @click="exportExcel">导出</el-button>
87
-          <el-button @click="importExcel">导入</el-button>
88
-        </el-col>
89
-      </el-row>
90 78
     </el-form>
79
+    <el-row :gutter="24">
80
+      <el-col :span="8">
81
+        <el-button type="primary" @click="handleSearch">查询</el-button>
82
+        <el-button @click="reset">重置</el-button>
83
+        <!--          <el-button @click="exportExcel">导出</el-button>-->
84
+        <el-button type="success" @click="singleInStore">新增</el-button>
85
+        <el-button type="danger" @click="cancelInStore">取消入库</el-button>
86
+        <el-button @click="importExcel">导入</el-button>
87
+      </el-col>
88
+    </el-row>
91 89
   </el-card>
92 90
   <el-card :body-style="cardBodyStyle" class="summary-card">
93 91
     <el-row :gutter="20">
@@ -142,7 +140,22 @@
142 140
           {{ row.ST_GRADE ?? row.stGrade ?? '-' }}
143 141
         </template>
144 142
       </el-table-column>
145
-      <el-table-column prop="inDtm" label="入库时间" min-width="180" header-align="center" align="center" show-overflow-tooltip />
143
+
144
+      <el-table-column label="捆绑包号" min-width="140" header-align="center" align="center" show-overflow-tooltip>
145
+        <template #default="{ row }">
146
+          {{ row.bundleNumber ?? '-' }}
147
+        </template>
148
+      </el-table-column>
149
+      <el-table-column label="规格" min-width="160" header-align="center" align="center" show-overflow-tooltip>
150
+        <template #default="{ row }">
151
+          {{ row.specification ?? '-' }}
152
+        </template>
153
+      </el-table-column>
154
+      <el-table-column prop="inDtm" label="入库时间" min-width="180" header-align="center" align="center" show-overflow-tooltip >
155
+        <template #default="{ row }">
156
+          {{ formatDateTime(row.inDtm) ?? '-' }}
157
+        </template>
158
+      </el-table-column>
146 159
       <el-table-column prop="ownerCompany" label="货权公司" min-width="160" header-align="center" align="center" show-overflow-tooltip />
147 160
       <el-table-column prop="receivingCompany" label="收货公司" min-width="160" header-align="center" align="center" show-overflow-tooltip />
148 161
       <el-table-column label="最终客户公司" min-width="180" header-align="center" align="center" show-overflow-tooltip>
@@ -172,6 +185,16 @@
172 185
         </template>
173 186
       </el-table-column>
174 187
       <el-table-column prop="deliveryAddress" label="收货地址" min-width="200" header-align="center" align="center" show-overflow-tooltip />
188
+      <el-table-column label="产地" width="200" header-align="center" align="center">
189
+        <template #default="{ row }">
190
+          {{ row.placeOfOrigin ?? '-' }}
191
+        </template>
192
+      </el-table-column>
193
+      <el-table-column label="入库理货人员" min-width="120" header-align="center" align="center" show-overflow-tooltip>
194
+        <template #default="{ row }">
195
+          {{ row.inUserName ?? '-' }}
196
+        </template>
197
+      </el-table-column>
175 198
     </el-table>
176 199
   </el-card>
177 200
 
@@ -187,7 +210,7 @@
187 210
         @current-change="handleCurrentChange"
188 211
     />
189 212
   </el-card>
190
-<!--  批量入库 -->
213
+  <!--  批量入库 -->
191 214
   <el-dialog
192 215
       v-model="disable"
193 216
       title="导入"
@@ -195,19 +218,31 @@
195 218
       :destroy-on-close="true"
196 219
       @close="handleClose"
197 220
   >
198
-      <div style="display: flex">
199
-        <el-upload
200
-            class="upload-demo"
201
-            :auto-upload="false"
202
-            :on-change="handleFileChange"
203
-            :show-file-list="true"
204
-            accept=".xls,.xlsx"
205
-            action=""
206
-            :limit="1">
207
-          <el-button type="primary">选择文件</el-button>
208
-        </el-upload>
209
-        <el-button type="success" style="margin-left: 0.5%" @click="saveExcel">保存</el-button>
221
+    <div class="upload-controls">
222
+      <div class="upload-section">
223
+        <div style="display: flex">
224
+          <el-upload
225
+              class="upload-demo"
226
+              :auto-upload="false"
227
+              :on-change="handleFileChange"
228
+              :show-file-list="true"
229
+              accept=".xls,.xlsx"
230
+              action=""
231
+              :limit="1">
232
+            <el-button type="primary">选择文件</el-button>
233
+          </el-upload>
234
+        </div>
235
+        <!-- 显示选中文件名,限制长度并添加省略号 -->
236
+  <!--        <div v-if="selectedFileName" class="file-name-preview">-->
237
+  <!--          <span class="file-name-text" :title="selectedFileName">{{ selectedFileName }}</span>-->
238
+  <!--        </div>-->
239
+      </div>
240
+
241
+      <div class="button-group">
242
+        <el-button @click="exportExcel">下载模板</el-button>
243
+        <el-button type="success" @click="saveExcel">保存</el-button>
210 244
       </div>
245
+    </div>
211 246
     <div>
212 247
       <el-progress :percentage="progress" v-if="prog"/>
213 248
     </div>
@@ -251,11 +286,250 @@
251 286
       <el-table-column prop="deliveryAddress" label="收货地址" width="180" show-overflow-tooltip></el-table-column>
252 287
       <el-table-column prop="attrib05" label="产地" width="120" show-overflow-tooltip></el-table-column>
253 288
       <el-table-column prop="remark1" label="备注" width="150" show-overflow-tooltip></el-table-column>
254
-      <el-table-column prop="remark2" label="垛位备注" width="150" show-overflow-tooltip></el-table-column>
289
+  <!--      <el-table-column prop="remark2" label="垛位备注" width="150" show-overflow-tooltip></el-table-column>-->
255 290
       <el-table-column prop="inUser" label="入库/理货人员" width="150" show-overflow-tooltip></el-table-column>
256 291
     </el-table>
257 292
   </el-dialog>
258
-<!--  单张入库-->
293
+  <!--  单张入库-->
294
+  <el-dialog
295
+      v-model="singLoading"
296
+      title="新增入库记录"
297
+      width="1000px"
298
+      :destroy-on-close="true"
299
+      @close="handleClose"
300
+  >
301
+    <el-form
302
+        ref="inStoreFormRef"
303
+        :model="inStoreForm"
304
+        :rules="inStoreRules"
305
+        label-width="140px"
306
+        :inline="false"
307
+        status-icon
308
+    >
309
+      <el-row :gutter="20">
310
+        <el-col :span="12">
311
+          <el-form-item label="仓库名称" prop="wareName">
312
+            <el-input
313
+                v-model="inStoreForm.wareName"
314
+                placeholder="请输入仓库名称"
315
+                clearable
316
+            />
317
+          </el-form-item>
318
+        </el-col>
319
+
320
+        <el-col :span="12">
321
+          <el-form-item label="垛位号" prop="stackName">
322
+            <el-input
323
+                v-model="inStoreForm.stackName"
324
+                placeholder="请输入垛位号"
325
+                clearable
326
+            />
327
+          </el-form-item>
328
+        </el-col>
329
+      </el-row>
330
+
331
+      <el-row :gutter="20">
332
+        <el-col :span="12">
333
+          <el-form-item label="层号" prop="layerNo">
334
+            <el-input
335
+                v-model="inStoreForm.layerNo"
336
+                placeholder="请输入层号"
337
+                clearable
338
+            />
339
+          </el-form-item>
340
+        </el-col>
341
+
342
+        <el-col :span="12">
343
+          <el-form-item label="物料名称" prop="materialName">
344
+            <el-input
345
+                v-model="inStoreForm.materialName"
346
+                placeholder="请输入物料名称"
347
+                clearable
348
+            />
349
+          </el-form-item>
350
+        </el-col>
351
+      </el-row>
352
+
353
+      <el-row :gutter="20">
354
+        <el-col :span="12">
355
+          <el-form-item label="钢种" prop="stGrade">
356
+            <el-input
357
+                v-model="inStoreForm.stGrade"
358
+                placeholder="请输入钢种"
359
+                clearable
360
+            />
361
+          </el-form-item>
362
+        </el-col>
363
+
364
+        <el-col :span="12">
365
+          <el-form-item label="规格" prop="attrib03">
366
+            <el-input
367
+                v-model="inStoreForm.attrib03"
368
+                placeholder="请输入规格"
369
+                clearable
370
+            />
371
+          </el-form-item>
372
+        </el-col>
373
+      </el-row>
374
+
375
+      <el-row :gutter="20">
376
+        <el-col :span="12">
377
+          <el-form-item label="数量" prop="quantity">
378
+            <el-input-number
379
+                v-model="inStoreForm.quantity"
380
+                :precision="2"
381
+                :min="0"
382
+                :step="1"
383
+                placeholder="请输入数量"              style="width: 100%"
384
+            />
385
+          </el-form-item>
386
+        </el-col>
387
+
388
+        <el-col :span="12">
389
+          <el-form-item label="重量(吨)" prop="weight">
390
+            <el-input-number
391
+                v-model="inStoreForm.weight"
392
+                :precision="3"
393
+                :min="0"
394
+                :step="0.001"
395
+                placeholder="请输入重量"              style="width: 100%"
396
+            />
397
+          </el-form-item>
398
+        </el-col>
399
+      </el-row>
400
+
401
+      <el-row :gutter="20">
402
+        <el-col :span="12">
403
+          <el-form-item label="入库车号" prop="inTruckNo">
404
+            <el-input
405
+                v-model="inStoreForm.inTruckNo"
406
+                placeholder="请输入入库车号"
407
+                clearable
408
+            />
409
+          </el-form-item>
410
+        </el-col>
411
+
412
+        <el-col :span="12">
413
+          <el-form-item label="货权公司" prop="ownerCompany">
414
+            <el-input
415
+                v-model="inStoreForm.ownerCompany"
416
+                placeholder="请输入货权公司"
417
+                clearable
418
+            />
419
+          </el-form-item>
420
+        </el-col>
421
+      </el-row>
422
+
423
+      <el-row :gutter="20">
424
+        <el-col :span="12">
425
+          <el-form-item label="收货公司" prop="receivingCompany">
426
+            <el-input
427
+                v-model="inStoreForm.receivingCompany"
428
+                placeholder="请输入收货公司"
429
+                clearable
430
+            />
431
+          </el-form-item>
432
+        </el-col>
433
+
434
+        <el-col :span="12">
435
+          <el-form-item label="材料号" prop="prodNo">
436
+            <el-input
437
+                v-model="inStoreForm.prodNo"
438
+                placeholder="请输入材料号"
439
+                clearable
440
+            />
441
+          </el-form-item>
442
+        </el-col>
443
+      </el-row>
444
+
445
+      <el-row :gutter="20">
446
+        <el-col :span="12">
447
+          <el-form-item label="订单号" prop="attrib01">
448
+            <el-input
449
+                v-model="inStoreForm.attrib01"
450
+                placeholder="请输入订单号"
451
+                clearable
452
+            />
453
+          </el-form-item>
454
+        </el-col>
455
+
456
+        <el-col :span="12">
457
+          <el-form-item label="合约号" prop="attrib02">
458
+            <el-input
459
+                v-model="inStoreForm.attrib02"
460
+                placeholder="请输入合约号"
461
+                clearable
462
+            />
463
+          </el-form-item>
464
+        </el-col>
465
+      </el-row>
466
+
467
+      <el-row :gutter="20">
468
+        <el-col :span="12">
469
+          <el-form-item label="捆绑包号" prop="attrib04">
470
+            <el-input
471
+                v-model="inStoreForm.attrib04"
472
+                placeholder="请输入捆绑包号"
473
+                clearable
474
+            />
475
+          </el-form-item>
476
+        </el-col>
477
+
478
+        <el-col :span="12">
479
+          <el-form-item label="收货地址" prop="deliveryAddress">
480
+            <el-input
481
+                v-model="inStoreForm.deliveryAddress"
482
+                placeholder="请输入收货地址"
483
+                clearable
484
+            />
485
+          </el-form-item>
486
+        </el-col>
487
+      </el-row>
488
+
489
+      <el-row :gutter="20">
490
+        <el-col :span="12">
491
+          <el-form-item label="产地" prop="attrib05">
492
+            <el-input
493
+                v-model="inStoreForm.attrib05"
494
+                placeholder="请输入产地"
495
+                clearable
496
+            />
497
+          </el-form-item>
498
+        </el-col>
499
+
500
+        <el-col :span="12">
501
+          <el-form-item label="入库/理货人员" prop="inUser">
502
+            <el-input
503
+                v-model="inStoreForm.inUser"
504
+                placeholder="请输入入库/理货人员"
505
+                clearable
506
+            />
507
+          </el-form-item>
508
+        </el-col>
509
+      </el-row>
510
+
511
+      <el-row :gutter="20">
512
+        <el-col :span="24">
513
+          <el-form-item label="备注" prop="remark1">
514
+            <el-input
515
+                v-model="inStoreForm.remark1"
516
+                type="textarea"
517
+                :rows="3"
518
+                placeholder="请输入备注信息"
519
+                clearable
520
+            />
521
+          </el-form-item>
522
+        </el-col>
523
+      </el-row>
524
+    </el-form>
525
+
526
+    <template #footer>
527
+      <div class="dialog-footer">
528
+        <el-button @click="handleSingClose">取消</el-button>
529
+        <el-button type="primary" @click="submitForm">保存</el-button>
530
+      </div>
531
+    </template>
532
+  </el-dialog>
259 533
 </template>
260 534
 <script setup>
261 535
 import {getCurrentInstance, onMounted, reactive, ref} from 'vue'
@@ -522,8 +796,18 @@ const exportExcel = () => {
522 796
 let fileUpload = ref([]);
523 797
 let progress = ref(0)
524 798
 let prog = ref(false)
799
+// 添加文件名状态
800
+const selectedFileName = ref('')
525 801
 // 处理文件选择变化
802
+// 更新文件变更处理函数
526 803
 const handleFileChange = async (file, fileList) => {
804
+  // 更新选中的文件名
805
+  if (fileList.length > 0) {
806
+    selectedFileName.value = fileList[fileList.length - 1].name
807
+  } else {
808
+    selectedFileName.value = ''
809
+  }
810
+
527 811
   // 只处理最新的文件
528 812
   if (fileList.length > 1) {
529 813
     fileList.splice(0, 1);
@@ -633,6 +917,133 @@ const batchInStore = () => {
633 917
     }
634 918
   })
635 919
 };
920
+// =====================================单张入库====================================
921
+let singLoading = ref(false)
922
+const inStoreFormRef = ref(null)
923
+// 新增表单数据
924
+const inStoreForm = reactive({
925
+  wareName: '',
926
+  stackName: '',
927
+  layerNo: '',
928
+  materialName: '',
929
+  stGrade: '',
930
+  attrib03: '',
931
+  quantity: null,
932
+  weight: null,
933
+  inTruckNo: '',
934
+  ownerCompany: '',
935
+  receivingCompany: '',
936
+  prodNo: '',
937
+  attrib01: '',
938
+  attrib02: '',
939
+  attrib04: '',
940
+  deliveryAddress: '',
941
+  attrib05: '',
942
+  remark1: '',
943
+  inUser: ''
944
+})
945
+// 表单验证规则(全部必填)
946
+const inStoreRules = {
947
+  wareName: [
948
+    { required: true, message: '请输入仓库名称', trigger: 'blur' }
949
+  ],
950
+  stackName: [
951
+    { required: true, message: '请输入垛位号', trigger: 'blur' }
952
+  ],
953
+  layerNo: [
954
+    { required: true, message: '请输入层号', trigger: 'blur' }
955
+  ],
956
+  materialName: [
957
+    { required: true, message: '请输入物料名称', trigger: 'blur' }
958
+  ],
959
+  stGrade: [
960
+    { required: true, message: '请输入钢种', trigger: 'blur' }
961
+  ],
962
+  attrib03: [
963
+    { required: true, message: '请输入规格', trigger: 'blur' }
964
+  ],
965
+  quantity: [
966
+    { required: true, message: '请输入数量', trigger: 'blur' },
967
+    { type: 'number', min: 0, message: '数量不能小于0', trigger: 'blur' }
968
+  ],
969
+  weight: [
970
+    { required: true, message: '请输入重量', trigger: 'blur' },
971
+    { type: 'number', min: 0, message: '重量不能小于0', trigger: 'blur' }
972
+  ],
973
+  inTruckNo: [
974
+    { required: true, message: '请输入入库车号', trigger: 'blur' }
975
+  ],
976
+  ownerCompany: [
977
+    { required: true, message: '请输入货权公司', trigger: 'blur' }
978
+  ],
979
+  receivingCompany: [
980
+    { required: true, message: '请输入收货公司', trigger: 'blur' }
981
+  ],
982
+  prodNo: [
983
+    { required: true, message: '请输入材料号', trigger: 'blur' }
984
+  ],
985
+  attrib01: [
986
+    { required: true, message: '请输入订单号', trigger: 'blur' }
987
+  ],
988
+  attrib02: [
989
+    { required: true, message: '请输入合约号', trigger: 'blur' }
990
+  ],
991
+  attrib04: [
992
+    { required: true, message: '请输入捆绑包号', trigger: 'blur' }
993
+  ],
994
+  deliveryAddress: [
995
+    { required: true, message: '请输入收货地址', trigger: 'blur' }
996
+  ],
997
+  attrib05: [
998
+    { required: true, message: '请输入产地', trigger: 'blur' }
999
+  ],
1000
+  inUser: [
1001
+    { required: true, message: '请输入入库/理货人员', trigger: 'blur' }
1002
+  ]
1003
+}
1004
+const singleInStore = () => {
1005
+  singLoading.value = true
1006
+  fileUpload.value = []
1007
+}
1008
+// 重置表单
1009
+const resetForm = () => {
1010
+  Object.assign(inStoreForm, {
1011
+    wareName: '',
1012
+    stackName: '',
1013
+    layerNo: '',
1014
+    materialName: '',
1015
+    stGrade: '',
1016
+    attrib03: '',
1017
+    quantity: null,
1018
+    weight: null,
1019
+    inTruckNo: '',
1020
+    ownerCompany: '',
1021
+    receivingCompany: '',
1022
+    prodNo: '',
1023
+    attrib01: '',
1024
+    attrib02: '',
1025
+    attrib04: '',
1026
+    deliveryAddress: '',
1027
+    attrib05: '',
1028
+    remark1: '',
1029
+    inUser: ''
1030
+  })
1031
+}
1032
+const handleSingClose = () => {
1033
+  singLoading.value = false
1034
+  resetForm()
1035
+  fileUpload.value = []
1036
+}
1037
+const submitForm = ()=>{
1038
+  inStoreFormRef.value.validate((valid) => {
1039
+    if (valid) {
1040
+      fileUpload.value.push(inStoreForm)
1041
+      batchInStore()
1042
+    } else {
1043
+      return ElMessage.error('请填写所有必填项')
1044
+    }
1045
+  })
1046
+}
636 1047
 // =======================================导入=====================================
637 1048
 // 进度条控制
638 1049
 let disable = ref(false)
@@ -651,9 +1062,64 @@ const handleClose = ()=>{
651 1062
   progress.value = 0
652 1063
   prog.value = false
653 1064
 }
1065
+// ========================================取消入库=====================================
1066
+const cancelInStore = () => {
1067
+
1068
+}
1069
+// ========================================生命周期=====================================
654 1070
 onMounted(() => {
655 1071
   getTableData()
656 1072
 })
657 1073
 </script>
658 1074
 <style scoped>
659
-</style>
1075
+.upload-controls {
1076
+  display: flex;
1077
+  justify-content: space-between;
1078
+  align-items: center;
1079
+  margin-bottom: 16px;
1080
+  flex-wrap: wrap;
1081
+  gap: 12px;
1082
+}
1083
+
1084
+.upload-section {
1085
+  display: flex;
1086
+  align-items: center;
1087
+  flex: 1;
1088
+  min-width: 200px; /* 最小宽度确保在小屏幕上也能正常显示 */
1089
+}
1090
+
1091
+.file-name-preview {
1092
+  margin-left: 12px;
1093
+  padding: 4px 8px;
1094
+  background-color: #f5f7fa;
1095
+  border-radius: 4px;
1096
+  border: 1px solid #dcdfe6;
1097
+  max-width: 200px;
1098
+}
1099
+
1100
+.file-name-text {
1101
+  max-width: 100%;
1102
+  overflow: hidden;
1103
+  text-overflow: ellipsis;
1104
+  white-space: nowrap;
1105
+  font-size: 12px;
1106
+  color: #606266;
1107
+}
1108
+
1109
+.button-group {
1110
+  display: flex;
1111
+  gap: 8px;
1112
+}
1113
+
1114
+/* 在较小屏幕上的适配 */
1115
+@media (max-width: 768px) {
1116
+  .upload-controls {
1117
+    flex-direction: column;
1118
+    align-items: stretch;
1119
+  }
1120
+
1121
+  .button-group {
1122
+    justify-content: center;
1123
+  }
1124
+}
1125
+</style>

Loading…
Cancel
Save