ajun 5 лет назад
Родитель
Сommit
5bd4ba11f5

+ 2 - 1
app/Demand.php

@@ -3,16 +3,17 @@
 namespace App;
 
 use App\Traits\ModelLogChanging;
+use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\HasMany;
 use Illuminate\Database\Eloquent\Relations\HasOne;
-use Symfony\Component\HttpFoundation\File\File;
 use Illuminate\Database\Eloquent\Builder;
 
 class Demand extends Model
 {
     use ModelLogChanging;
+    use ModelTimeFormat;
 
     protected $fillable = ['authority_id', 'initiator', 'description', 'type', 'status', 'handler'];
 

+ 51 - 25
app/Http/Controllers/DemandController.php

@@ -2,16 +2,16 @@
 
 namespace App\Http\Controllers;
 
-use App\Components\AsyncResponse;
 use App\Demand;
+use App\Components\AsyncResponse;
 use App\Filters\DemandFilters;
 use App\Http\Requests\Demand\DemandRequest;
 use App\Services\DemandService;
 use Illuminate\Http\Request;
 use Illuminate\Contracts\Foundation\Application;
 use Illuminate\Contracts\View\Factory;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\View\View;
-use Ramsey\Uuid\Uuid;
 
 class DemandController extends Controller
 {
@@ -27,9 +27,8 @@ class DemandController extends Controller
     {
         // 查询权限
 
-        $demands = Demand::query()->with(['processes', 'initiator', 'handler', 'uploadFile'])->filter($filters)->sql();
-
         $demands = Demand::query()->with(['processes', 'initiator', 'handler', 'uploadFile'])->filter($filters)->paginate($request['paginate'] ?? 50);
+
         return view('maintenance.demand.index', compact('demands'));
     }
 
@@ -37,30 +36,33 @@ class DemandController extends Controller
      * @param DemandRequest $request
      * @param DemandService $service
      */
-    public function storeApi(DemandRequest $request,DemandService $service)
+    public function storeApi(DemandRequest $request, DemandService $service)
     {
-        // 创建权限
         /** @var Demand $demand */
-        $demand = Demand::query()->create($request->all());
+        $params = $request->all();
+        $params['initiator'] = Auth::user()['id'];
+
+        $demand = Demand::query()->create($params);
 
         if ($demand) {
 
             $file = $request->file('file');
-            if(isset($file))$service->saveUPLoadFile($demand,$file);
+            if (isset($file)) $service->saveUPLoadFile($demand, $file);
 
             $this->success($demand);
-        } else{
+        } else {
             $this->error('需求创建出现异常');
         }
     }
 
     /**
      * @param DemandRequest $request
-     * @param Demand $demand
      */
-    public function updateApi(DemandRequest $request, Demand $demand)
+    public function updateApi(DemandRequest $request)
     {
         // 编辑权限
+        $this->gate('需求管理-问题-编辑');
+        $demand = Demand::query()->find($request['id'])->first();
 
         $bool = $demand->update($request->all());
 
@@ -73,14 +75,15 @@ class DemandController extends Controller
 
     /**
      * @param DemandRequest $request
-     * @param Demand $demand
      * @param DemandService $service
      */
-    public function uploadFileApi(DemandRequest $request, Demand $demand,DemandService $service)
+    public function uploadFileApi(DemandRequest $request, DemandService $service)
     {
         // 文件上传
 
-        $service->saveUPLoadFile($demand,$request['file']);
+        $demand = Demand::query()->find($request['id'])->first();
+
+        $service->saveUPLoadFile($demand, $request->file('file'));
 
         $demand->loadMissing('authority', 'initiator', 'handler', 'uploadFile', 'processes');
 
@@ -90,31 +93,54 @@ class DemandController extends Controller
 
     /**
      * @param DemandRequest $request
-     * @param Demand $demand
      */
-    public function destroyApi(DemandRequest $request, Demand $demand)
+    public function destroyApi(DemandRequest $request)
     {
-        // 删除权限
+        $this->gate('需求管理-问题-删除');
 
+        $demand = Demand::query()->find($request['id']);
         try {
-            if ($demand->delete()) $this->success();
+            $bool = $demand->delete();
+            if ($bool) $this->success();
+            else $this->error('删除失败');
         } catch (\Exception $e) {
             $this->error($e->getMessage());
         }
     }
 
     /**
-     * 完结需求
+     * 完结问题
      *
      * @param DemandRequest $request
-     * @param Demand $demand
+     * @param DemandService $service
      */
-    public function finishApi(DemandRequest $request, Demand $demand)
+    public function finishApi(DemandRequest $request,DemandService $service)
     {
-        if($demand->update(['status','1']))
-            $this->success($demand);
-        else
-            $this->error('修改失败');
+        $demand = Demand::query()->find($request['id'])->first();
+
+        $result = $service->finishDemand($demand);
+        if($result['success']){
+            $this->success($result['data']);
+        }
+        $this->error($result['message']);
+    }
+
+    /**
+     * 问题认领
+     *
+     * @param DemandRequest $request
+     * @param DemandService $service
+     */
+    public function claimApi(DemandRequest $request,DemandService $service)
+    {
+        $demand = Demand::query()->find($request['id'])->first();
+        $handler = Auth::user()['id'];
+
+        $result = $service->claimDemand($demand,$handler);
+        if($result['success']){
+            $this->success($result['data']);
+        }
+        $this->error($result['message']);
     }
 
 }

+ 1 - 76
app/Http/Controllers/DemandProcessController.php

@@ -7,79 +7,4 @@ use Illuminate\Http\Request;
 
 class DemandProcessController extends Controller
 {
-    /**
-     * Display a listing of the resource.
-     *
-     * @return \Illuminate\Http\Response
-     */
-    public function index()
-    {
-        //
-    }
-
-    /**
-     * Show the form for creating a new resource.
-     *
-     * @return \Illuminate\Http\Response
-     */
-    public function create()
-    {
-        //
-    }
-
-    /**
-     * Store a newly created resource in storage.
-     *
-     * @param  \Illuminate\Http\Request  $request
-     * @return \Illuminate\Http\Response
-     */
-    public function store(Request $request)
-    {
-        //
-    }
-
-    /**
-     * Display the specified resource.
-     *
-     * @param  \App\DemandProcess  $demandProcess
-     * @return \Illuminate\Http\Response
-     */
-    public function show(DemandProcess $demandProcess)
-    {
-        //
-    }
-
-    /**
-     * Show the form for editing the specified resource.
-     *
-     * @param  \App\DemandProcess  $demandProcess
-     * @return \Illuminate\Http\Response
-     */
-    public function edit(DemandProcess $demandProcess)
-    {
-        //
-    }
-
-    /**
-     * Update the specified resource in storage.
-     *
-     * @param  \Illuminate\Http\Request  $request
-     * @param  \App\DemandProcess  $demandProcess
-     * @return \Illuminate\Http\Response
-     */
-    public function update(Request $request, DemandProcess $demandProcess)
-    {
-        //
-    }
-
-    /**
-     * Remove the specified resource from storage.
-     *
-     * @param  \App\DemandProcess  $demandProcess
-     * @return \Illuminate\Http\Response
-     */
-    public function destroy(DemandProcess $demandProcess)
-    {
-        //
-    }
-}
+ }

+ 53 - 10
app/Services/DemandService.php

@@ -5,12 +5,14 @@ namespace App\Services;
 use App\Traits\ServiceAppAop;
 use App\Demand;
 use Illuminate\Http\UploadedFile;
+use Illuminate\Support\Facades\Auth;
 use Ramsey\Uuid\Uuid;
 
 class DemandService
 {
     use ServiceAppAop;
-    protected $modelClass=Demand::class;
+
+    protected $modelClass = Demand::class;
 
     /**
      * saveUPLoadFile
@@ -18,14 +20,14 @@ class DemandService
      * @param UploadedFile $file
      * @return array
      */
-    public function saveUPLoadFile(Demand $demand,UploadedFile $file): array
+    public function saveUPLoadFile(Demand $demand, UploadedFile $file): array
     {
         $tmpFile = $file->getRealPath();
 
-        if (!$demand->uploadFile()) return ['success'=>false,'message'=>'该需求已有描述图片'];
-        if (!$file) return ['success'=>false,'message'=>'上传图片不得为空'];
-        if (!$file->isValid())  return ['success'=>false,'message'=>'找不到上传图片'];
-        if (!is_uploaded_file($tmpFile)) return ['success'=>false,'message'=>'文件错误'];
+        if (!$demand->uploadFile()) return ['success' => false, 'message' => '该需求已有描述图片'];
+        if (!$file) return ['success' => false, 'message' => '上传图片不得为空'];
+        if (!$file->isValid()) return ['success' => false, 'message' => '找不到上传图片'];
+        if (!is_uploaded_file($tmpFile)) return ['success' => false, 'message' => '文件错误'];
 
         $fileSuffix = $file->getClientOriginalExtension();
 
@@ -35,12 +37,53 @@ class DemandService
 
         $result = move_uploaded_file($tmpFile, $filePath);
 
-        if (!$result) return ['success'=>false,'message'=>'文件上传失败'];
+        if (!$result) return ['success' => false, 'message' => '文件上传失败'];
+
+        $upLoadFile = $demand->saveFile($fileName, $fileSuffix);
+        if (!$upLoadFile) return ['success' => false, 'message' => '文件上传失败'];
+
+        return ['success' => true, 'data' => $demand];
+    }
+
+    /**
+     * 完结问题
+     *
+     * @param Demand $demand
+     * @return array
+     */
+    public function finishDemand(Demand $demand): array
+    {
+        $currentId = Auth::user()['id'];
+
+        if ($currentId != $demand['initiator']) {
+            return ['success' => false, 'message' => '非当前问题处理人不能完结'];
+        }
 
-        $upLoadFile = $demand->saveFile($fileName,$fileSuffix);
-        if(!$upLoadFile)return ['success'=>false,'message'=>'文件上传失败'];
+        if ($demand->update(['status', '1']))
+            return ['success' => true, 'data' => $demand];
+        else
+            return ['success' => false, 'message' => '修改失败'];
+    }
+
+    /**
+     * 认领问题
+     *
+     * @param Demand $demand
+     * @param $handler
+     * @return array
+     */
+    public function claimDemand(Demand $demand, $handler): array
+    {
+        if($demand['status'] !== 0)
+            return ['success' => false, 'message' => '任务已被认领'];
 
-        return ['success'=>true,'data'=>$demand];
+        $bool = $demand->update(['handler' => $handler]);
+        if ($bool) {
+            $demand->loadMissing('authority', 'initiator', 'handler', 'uploadFile', 'processes');
+            return ['success' => true, 'data' => $demand];
+        }
+        return ['success' => false, 'message' => '任务认领失败'];
     }
 
+    
 }

+ 0 - 5
database/migrations/2021_04_06_092844_create_demand_authorities.php

@@ -7,11 +7,6 @@ class CreateDemandAuthorities extends Migration
 {
 
     private $authorities = [
-        '需求管理',
-        '需求管理-问题',
-        '需求管理-问题-查询',
-        '需求管理-问题-编辑',
-        '需求管理-问题-完结',
         '需求管理-问题-删除'
     ];
 

+ 3 - 2
resources/views/maintenance/demand/_table.blade.php

@@ -42,8 +42,9 @@
             <td>@{{ demand.created_at }}</td>
             <td>@{{ demand.status }}</td>
             <td>
-                <button class="btn btn-outline-success">完结</button>
-                <button class="btn btn-outline-danger">删</button>
+                <button class="btn btn-outline-success" @click="finishDemand(demand)"  v-if="demand.status === '处理中'">完结</button>
+                <button class="btn btn-outline-success" @click="claimDemand(demand,i)" v-if="demand.status === '未处理'">认领</button>
+                <button class="btn btn-outline-danger" @click="destroyDemand(demand,i)">删</button>
             </td>
         </tr>
     </template>

+ 23 - 1
resources/views/maintenance/demand/index.blade.php

@@ -56,6 +56,10 @@
                 form.init();
             },
             methods: {
+                initDemand(demand){
+                    demand['status'] = this.status[demand['status']]['value'] ?? '';
+                    demand['type'] = this.types[demand['type']]['value']  ?? '';
+                },
                 /** 完结需求 */
                 finishDemand(demand){
                     let url = '{{url('apiLocal/demand/finish')}}';
@@ -75,10 +79,12 @@
                 destroyDemand(demand,index){
                     if(!confirm('确定要删除当前需求吗?')){return ;}
 
+                    let url = '{{url('apiLocal/demand/destroy?id=')}}'+demand['id'];
+
                     window.tempTip.setDuration(3000);
-                    let url = '{{url('apiLocal/demand/destroy')}}'+'/'+demand['id'];
                     window.axios.delete(url).then(res=>{
                         if(res.data.success){
+                            window.tempTip.showSuccess('删除成功!');
                             this.$delete(this.demands,index);
                             return ;
                         }
@@ -98,6 +104,22 @@
                 /** 修改需求描述 */
                 updateDemand(demand,$e){
 
+                },
+                /** 问题认领 */
+                claimDemand(demand,index){
+                    let url = '{{url('apiLocal/demand/claim')}}';
+                    window.tempTip.setDuration(3000);
+                    window.axios.post(url,{id:demand['id']}).then(res=>{
+                        if(res.data.success){
+                            window.tempTip.showSuccess('认领成功!');
+                            this.initDemand(res.data.data);
+                            this.$set(this.demands,index,res.data.data);
+                            return ;
+                        }
+                        window.tempTip.show(res.data.message);
+                    }).catch(err=>{
+                        window.tempTip.show('认领出现异常'+err);
+                    });
                 }
             }
         });

+ 4 - 0
routes/apiLocal.php

@@ -163,4 +163,8 @@ Route::group(['prefix'=>'demand'],function(){
     Route::post('uploadFile','DemandController@uploadFileApi')->name('demand.uploadFileApi');
     Route::delete('destroy','DemandController@destroyApi')->name('demand.destroyApi');
     Route::post('finish','DemandController@finishApi')->name('demand.finishApi');
+    Route::post('claim','DemandController@claimApi')->name('demand.claimApi');
+    Route::group(['prefix'=>'process'],function (){
+        Route::post('store','DemandController@storeApi')->name('demand.process.storeApi');
+    });
 });