Procházet zdrojové kódy

OwnerMaterialController 文件上传

ajun před 5 roky
rodič
revize
1be0abf3fe

+ 15 - 3
app/Http/Controllers/OwnerMaterialController.php

@@ -12,6 +12,8 @@ use App\UploadFile;
 use Faker\Provider\Uuid;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Storage;
 
 class OwnerMaterialController extends Controller
 {
@@ -32,7 +34,7 @@ class OwnerMaterialController extends Controller
         $params['initiator'] = Auth::user()['id'];
         try {
             $material = OwnerMaterial::query()->create($params);
-            if ($material) return ['success' => true,'data' => $material->loadMissing(['owner','material','initiator','uploadFile'])];
+            if ($material) return ['success' => true,'data' => $material->loadMissing(['owner','material','initiator','file'])];
             else return ['success' => false, 'message' => '添加失败'];
         } catch (\Exception $e) {
             return ['success' => false,'message' => $e->getMessage()];
@@ -46,7 +48,7 @@ class OwnerMaterialController extends Controller
         if(!$material)$this->error("对应的项目耗材没有找到");
         $bool = $material->update($request->all(['owner_id', 'material_id', 'material_code', 'size', 'special', 'specification']));
         if($bool==0)$this->error("更新异常");
-        $this->success($material->loadMissing(['owner','material','initiator','uploadFile']));
+        $this->success($material->loadMissing(['owner','material','initiator','file']));
     }
 
     public function destroyApi($id)
@@ -65,6 +67,7 @@ class OwnerMaterialController extends Controller
         if(!$ownerMaterial)$this->error('项目耗材不存在');
         try {
             $file = $request->file('file');
+            if(!$file)$this->error('请选择上传文件');
             $fileType = $file->getMimeType();// 文件类型
             $fileName = strtolower($file->getClientOriginalExtension());// 文件名
             $path = $file->storeAs("ownerMaterial", Uuid::uuid() . "." . $fileName);
@@ -75,9 +78,18 @@ class OwnerMaterialController extends Controller
                 'type' => $fileType,
                 "file_name" => $file->getClientOriginalName()
             ]);
-            $this->success($ownerMaterial->loadMissing(['owner', 'material', 'initiator', 'file']));
+            $ownerMaterial->loadMissing(['owner', 'material', 'initiator', 'file']);
+            $this->success($ownerMaterial);
         } catch (Exception $e) {
             $this->error($e->getMessage());
         }
     }
+
+    public function downFile(Request $request)
+    {
+        if(!Gate::allows('客户-查询'))return ['success'=>false,"data"=>"无权操作"];
+        $file = $request->input("file");
+        $name = $request->input("name");
+        return Storage::download($file,$name);
+    }
 }

+ 7 - 5
resources/views/maintenance/ownerMaterial/_table.blade.php

@@ -21,12 +21,14 @@
         <td>@{{ ownerMaterial.special }}</td>
         <td>@{{ ownerMaterial.specification }}</td>
         <td>
-            <div align="center" @mouseleave="hideFile('file_'+ownerMaterial.id)" @mouseenter="showFile('file_'+ownerMaterial.id,ownerMaterial.url)">
+            <div class="align-center text-center" >
                 @can('项目耗材-文件上传')
-                    <button type="button" class="btn btn-sm btn-outline-dark" v-if="!ownerMaterial.file" @click="uploadModal(ownerMaterial,i)">文件上传</button>
-                    <div v-else>
-                        <img  src="{{url('icon/img404-thumbnail.jpg')}}" :src="ownerMaterial.file.url" alt="项目耗材附件" title="项目耗材附件">
-                    </div>
+                    <span v-if="ownerMaterial.file">
+                        <a target='_blank' :href="getDownFileUrl(ownerMaterial)" class="text-primary text-decoration is-hover"  style="cursor: default" >
+                            <i class="fa fa-download"></i>&nbsp;@{{ ownerMaterial.file.file_name }}
+                        </a>
+                    </span>
+                    <button v-else type="button" class="btn btn-sm btn-outline-dark"  @click="uploadModal(ownerMaterial,i)">文件上传</button>
                 @endcan
             </div>
         </td>

+ 24 - 24
resources/views/maintenance/ownerMaterial/index.blade.php

@@ -42,7 +42,6 @@
             filterOwners:'',
             filterMaterials:'',
             uploadError: null,
-            url:'{{ url('') }}',
         },
         mounted(){
             $('#owner_material').removeClass('d-none');
@@ -50,26 +49,25 @@
             this.filterMaterials = JSON.parse(JSON.stringify(this.materials));
         },
         created(){
-            $.each(this.ownerMaterials,function(item){
-                if(item.file){
-                    let url = item.file.url;
-
-                }
-            });
+            let _this = this;
+            this.ownerMaterials.forEach(function(item){
+                _this.fileType(item);
+            })
         },
         methods:{
             fileType(ownerMaterial){
                 let file_types = [ 'gif','jpeg','jpg','png','svg'];
-                if(!ownerMaterial.file)ownerMaterial.isImg = false;
+                if(!ownerMaterial.file){
+                    ownerMaterial.isImg = false;
+                    return;
+                }
                 if(ownerMaterial.file.url){
-                    $.each(file_types,function(item){
-                        let start = item.length-target.length;
-                           let arr = str.substr(start,target.length);
-                           if(arr === target){
-                               ownerMaterial.isImg = true;
-                               return;
-                           }
-                    });
+                    let target = ownerMaterial.file.url;
+                    let index= target.lastIndexOf(".");
+                    let ext = target.substr(index+1);
+                    if(file_types.includes(ext)){
+                        ownerMaterial.isImg = true;
+                    }
                 }
             },
             destroy(id,index){
@@ -98,6 +96,7 @@
                 let url = '{{url('apiLocal/ownerMaterial/update')}}';
                 let params = this.editOwnerMaterial;
                 window.tempTip.postBasicRequest(url,params,res=>{
+                    this.fileType(res);
                     this.$set(this.ownerMaterials,this.index,res);
                     this.index = null;
                     this.editOwnerMaterial = {};
@@ -119,27 +118,28 @@
                 },true);
             },
             uploadModal(ownerMaterial,i){
-                this.editOwnerMaterial = ownerMaterial;
+                this.editOwnerMaterial = JSON.parse(JSON.stringify(ownerMaterial));
                 this.index = i;
                 $('#uploadFile').modal('show');
             },
-            hideFile(){
-
-            },
-            showFile(){
-
+            getDownFileUrl(ownerMaterial){
+                return '{{ url("maintenance/ownerMaterial/downFile?file=")}}'+ownerMaterial.file.url+'&name='+ownerMaterial.file.file_name;
             },
             uploadFile(){
                 let url = '{{url('apiLocal/ownerMaterial/uploadFile')}}';
                 let data = new FormData();
                 let file = this.$refs.file.files[0];
+                if(file===null){
+                    if (!confirm('请选则上传文件')) return;
+                }
                 data.append('file',file);
                 data.append('id',this.editOwnerMaterial.id);
                 window.tempTip.postBasicRequest(url,data,res=>{
-                    this.$set(this.ownerMaterials,this.ownerMaterials.length,res);
+                    this.fileType(res);
+                    this.$set(this.ownerMaterials,this.index,res);
                     this.editOwnerMaterial = {};
                     this.index = '';
-                    $("#add-ownerMaterial").modal('hide');
+                    $("#uploadFile").modal('hide');
                     return "上传成功";
                 },true);
             },

+ 4 - 1
routes/web.php

@@ -199,7 +199,10 @@ Route::group(['prefix'=>'maintenance'],function(){
     /** 耗材 */
     Route::get('material','MaterialController@index');;
     /** 项目耗材 */
-    Route::get('ownerMaterial','OwnerMaterialController@index');
+    Route::group(['prefix'=>"ownerMaterial"],function (){
+        Route::get("/",'OwnerMaterialController@index');
+        Route::get('downFile','OwnerMaterialController@downFile');
+    });
     /** 供应商 */
     Route::get('supplier','SupplierController@index');
     /** 系统配置 */