瀏覽代碼

添加卸货导入功能模块,待完善

ajun 4 年之前
父節點
當前提交
74b2feac05

+ 13 - 0
app/Http/Controllers/DischargeTaskController.php

@@ -7,12 +7,15 @@ use App\Facilitator;
 use App\DischargeTask;
 use App\Filters\DischargeTaskFilters;
 use App\Http\Requests\DischargeTask\DischargeTaskRequest;
+use App\Imports\CommodityImport;
+use App\Imports\DischargeTaskImport;
 use App\Services\common\ExportService;
 use App\Services\OwnerService;
 use App\Warehouse;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
+use Maatwebsite\Excel\Facades\Excel;
 use function Sodium\compare;
 
 class DischargeTaskController extends Controller
@@ -144,6 +147,16 @@ class DischargeTaskController extends Controller
         return view('personnel.discharge.task.receipt',compact('task'));
     }
 
+    public function importApi(Request $request)
+    {
+
+        $extension=$request->file()['file']->getClientOriginalExtension();
+        $extension[0] = strtoupper($extension[0]);
+        Excel::import(new DischargeTaskImport(), $request->file()['file']->path(),null,$extension);
+
+    }
+
+
     public function show(DischargeTask $dischargeTask)
     {
     }

+ 10 - 0
app/Http/Requests/DischargeTask/DischargeTaskRequest.php

@@ -69,6 +69,12 @@ class DischargeTaskRequest extends FormRequest
         'expenditure_unit.required' => '单位为必选项',
         'expenditure_unit_price.required' => '单价为必填项',
     ];
+    protected $uploadApiRule = [
+        'file' => 'required',
+    ];
+    protected $uploadApiMessage = [
+        'file' => 'required',
+    ];
 
     public function authorize(): bool
     {
@@ -88,6 +94,8 @@ class DischargeTaskRequest extends FormRequest
                 return $this->updateApiRules;
             case 'discharge.updateTaskFacilitatorApi':
                 return $this->updateTaskFacilitatorApiRules;
+            case 'discharge.importApi':
+                return $this->uploadApiRule;
             default :
                 return [];
         }
@@ -106,6 +114,8 @@ class DischargeTaskRequest extends FormRequest
                 return $this->updateApiMessage;
             case 'discharge.updateTaskFacilitatorApi':
                 return $this->updateTaskFacilitatorApiMessage;
+            case 'discharge.importApi':
+                return $this->uploadApiMessage;
             default :
                 return [];
         }

+ 23 - 0
app/Imports/DischargeTaskImport.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Imports;
+
+use Illuminate\Support\Collection;
+use Maatwebsite\Excel\Concerns\ToCollection;
+use Maatwebsite\Excel\Concerns\WithHeadingRow;
+use Maatwebsite\Excel\Imports\HeadingRowFormatter;
+
+HeadingRowFormatter::default('none');
+class DischargeTaskImport implements ToCollection,WithHeadingRow
+{
+    /**
+    * @param Collection $collection
+    */
+    public function collection(Collection $collection)
+    {
+        dd($collection->first());
+//        foreach ($collection as $item) {
+
+//        }
+    }
+}

+ 34 - 0
resources/views/personnel/discharge/task/_import.blade.php

@@ -0,0 +1,34 @@
+<div class="modal fade" id="importModal">
+    <div class="modal-dialog modal-dialog-centered modal-lg">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">
+                    卸货任务导入
+                </h5>
+                <button type="button" class="close" data-dismiss="modal">
+                    <span>&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form>
+                    <div class="form-group">
+                        <label for="importFile">导入文件</label>
+                        <input type="file" ref="file" name="file" :class="uploadError.length >0 ? 'is-invalid' :''" id="importFile">
+                        <div class="invalid-feedback">
+                            @{{ uploadError ? uploadError[0] :'' }}
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <small>文件大小不能超过10MB</small>
+                    </div>
+                    <div class="form-group">
+                        <small>字段:*货主,*预约日期,*作业名称,*仓库,*入库单,*数量,*单位,*单价,备注(非必填)</small>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button class="btn btn-success" @click="importTask">导入</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 36 - 1
resources/views/personnel/discharge/task/index.blade.php

@@ -22,12 +22,20 @@
                     <a class="dropdown-item" @click="dischargeTaskExport(true)" href="javascript:">导出所有页</a>
                 </div>
             </span>
+
             <span class="ml-1">
                 @can('人事管理-卸货-创建')
                 <button type="button" class="btn btn-outline-dark btn-sm form-control-sm tooltipTarget" @click="showCreateTaskModal(true)" style="background: #dad7e8;">创建任务</button>
                 @endcan
             </span>
+
+            <span class="ml-1">
+                  <button type="button" class="btn btn-outline-primary btn-sm form-control-sm tooltipTarget"
+                          @click="importModal"
+                  >批量导入</button>
+            </span>
         </div>
+        @include('personnel.discharge.task._import')
         @include('personnel.discharge.task._table')
         @can('人事管理-卸货-创建')
         @include('personnel.discharge.task._createTask')
@@ -54,6 +62,7 @@
                 addTask: {income_at:null},
                 executingTack: {},
                 taskError:{},
+                uploadError:[],
                 taskTypes: [
                     {name: 0, value: "装车"},
                     {name: 1, value: "卸车"},
@@ -353,8 +362,34 @@
                 },
                 showReceipt(task){
                     window.open(this.getReceiptUrl(task.id));
-                }
+                },
+                // 文件上传
+                importDischarge(){
+                    window.tempTip.setIndex(1999);
 
+                    let formData = new FormData();
+                    let file = document.querySelector('#importFile').file[0];
+                    if(file==null){
+                        window.tempTip.show('请选择上传文件');
+                    }
+                    formData.append('file',file);
+                    let url = '{{url('apiLocal/personnel/discharge/import')}}';
+                    window.axios.post(url,formData,{
+                        'Content-Type': 'multipart/form-data'
+                    }).then(res=>{
+                        if(res.data.success){
+                            window.tempTip.showSuccess(res.data.message ? res.data.message : '导入成功!刷新页面显示');
+                            return ;
+                        }
+                        window.tempTip.show('导入失败!'+(res.data.message ? res.data.message : ''));
+                    }).catch(err=>{
+                        window.tempTip.show(err);
+                    });
+                },
+                importModal(){
+                    document.querySelector('#importFile').file = [];
+                    $('#importModal').modal('show');
+                }
 
             }
         })

+ 2 - 0
routes/apiLocal.php

@@ -47,6 +47,7 @@ Route::group(['prefix' => 'personnel'], function () {
             Route::put('update', 'DischargeTaskController@updateApi')->name('discharge.updateApi');
             Route::put('updateFacilitator', 'DischargeTaskController@updateTaskFacilitatorApi')->name('discharge.updateTaskFacilitatorApi');
             Route::put('updateColumn', 'DischargeTaskController@updateApi')->name('facilitator.updateColumnApi');
+            Route::put('import', 'DischargeTaskController@importApi')->name('discharge.importApi');
         });
     });
 });
@@ -157,6 +158,7 @@ Route::group(['prefix' => 'configuration'],function(){
     Route::delete('{id}','ConfigurationController@destroyApi')->name('configuration.destroyApi');
 });
 
+
 /** 装卸队 */
 Route::group(['prefix' => 'facilitator'], function () {
     Route::post('store', 'FacilitatorController@storeApi')->name('facilitator.storeApi');