ANG YU 5 лет назад
Родитель
Сommit
59225a7a3c

+ 77 - 0
app/Http/Controllers/SendEmailsController.php

@@ -0,0 +1,77 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\MailEvent;
+use App\Role;
+use Illuminate\Http\Request;
+
+class SendEmailsController extends Controller
+{
+    //
+    public function index()
+    {
+        $roles = Role::all();
+        $emailEvents = MailEvent::query()->with('roles')->orderBy('id')->paginate();
+        foreach ($emailEvents as $emailEvent) {
+            $emailEvent->template = json_decode($emailEvent->template);
+            $emailEvent->remark_show = true;
+            $emailEvent->remark_edit = false;
+            $emailEvent->template_show = true;
+            $emailEvent->template_edit = false;
+            $emailEvent->role_selected = '';
+
+        }
+        return view('maintenance.emails.index', compact('roles', 'emailEvents'));
+    }
+
+    public function addRole(Request $request)
+    {
+        $roleId = $request->roleId;
+        $role = Role::find($roleId);
+        $eventMailId = $request->eventMailId;
+        if (MailEvent::query()->find($eventMailId)->roles()->where('roles.id', $roleId)->exists()) {
+            session()->flash('warning', '不能重复添加');
+            return ['success' => false, 'message' => '角色已存在'];
+        } else {
+            MailEvent::query()->find($eventMailId)->roles()->attach($role->id);
+            return ['success' => true, 'data' => ['role' => $role]];
+        }
+    }
+
+    public function deleteRole(Request $request)
+    {
+        $roleId = $request->roleId;
+        $role = Role::find($roleId);
+        $eventMailId = $request->eventMailId;
+        MailEvent::query()->find($eventMailId)->roles()->detach($role->id);
+        return ['success' => true, 'data' => $role];
+    }
+
+    public function updateTemplate(Request $request)
+    {
+        $model = MailEvent::query()->find($request->id);
+        $model->update([
+            'template' => $request->template,
+        ]);
+        return ['success' => true];
+    }
+
+    public function active(Request $request)
+    {
+        $model = MailEvent::query()->find($request->id);
+        $model->update([
+            'is_active' => !$model->is_active,
+        ]);
+        return ['success' => true, 'data' => !$model->is_active];
+    }
+
+    public function updateRemark(Request $request)
+    {
+        $model = MailEvent::query()->find($request->id);
+        $model->update([
+            'remark' => $request->remark,
+        ]);
+        return ['success' => true];
+    }
+}

+ 6 - 0
app/Http/Controllers/TestController.php

@@ -1448,4 +1448,10 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         event(new SendEmailEvent());
     }
 
+    public function y111()
+    {
+        $controller = new SendEmailsController();
+        $controller->index();
+    }
+
 }

+ 3 - 2
app/Notifications/SendEmailNotification.php

@@ -42,9 +42,10 @@ class SendEmailNotification extends Notification implements ShouldQueue
      */
     public function toMail($notifiable): MailMessage
     {
+        $template = json_decode($this->objToJson);
         return (new MailMessage)->view(
-            'emails.test', ['objToJson' => json_decode($this->objToJson)]
-        );
+            'emails.test', ['objToJson' => $template]
+        )->subject($template->title);
     }
 
     /**

+ 201 - 0
resources/views/maintenance/emails/index.blade.php

@@ -0,0 +1,201 @@
+@extends('layouts.app')
+@section('title')邮件@endsection
+@section('content')
+    <div id="nav2">
+        @component('maintenance.menu')@endcomponent
+        @component('maintenance.log.menu')@endcomponent
+    </div>
+    <div class="container-fluid" id="container">
+        <div class="card">
+            <div id="form_div"></div>
+            <div class="card-body">
+                @if(Session::has('successTip'))
+                    <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
+                @endif
+                <table class="table table-sm table-hover table-condensed">
+                    <tr>
+                        <th>序号</th>
+                        <th>事件名</th>
+                        <th>通知角色</th>
+                        <th>事件描述</th>
+                        <th>邮件模板</th>
+                        <th>操作</th>
+                    </tr>
+                    <tr v-for="(emailEvent,i) in emailEvents">
+                        <td width="50">@{{ i+1 }}</td>
+                        <td width="50">@{{ emailEvent.name }}</td>
+                        <td width="100">
+                            <table class="table table-sm">
+                                <tr colspan="2">
+                                    <td>
+                                        <select class="form-control form-control-sm" v-model="emailEvent.role_selected">
+                                            <option v-for="role in roles" :value="role.id"> @{{ role.name }}</option>
+                                        </select>
+                                    </td>
+                                    <td>
+                                        <button class="btn btn-sm btn-primary" @click="addRole(emailEvent)">添加</button>
+                                    </td>
+                                </tr>
+                                <tr v-for="(role,j) in emailEvent.roles" v-if="j<2 || emailEvent.isShowRole">
+                                    <td>@{{ role.name }}</td>
+                                    <td>
+                                        <button class="btn btn-sm btn-outline-danger"
+                                                @click="deleteRole(role,j,emailEvent)">
+                                            删除
+                                        </button>
+                                    </td>
+                                </tr>
+                                <tr>
+                                    <td>
+                                        <div class="row" @click="showRole(i)" v-if="emailEvent.roles.length > 2">
+                                            <label class="text-center mt-0 p-0 cursor-pointer offset-5">
+                                        <span class="fa"
+                                              :class="emailEvent.isShowRole ? 'fa-angle-double-down' : 'fa-angle-double-right'"></span>
+                                                &nbsp;<span v-if="emailEvent.isShowRole">收起</span><span
+                                                    v-if="!emailEvent.isShowRole">展开</span>共@{{ emailEvent.roles.length
+                                                }} 条角色
+                                            </label>
+                                        </div>
+                                    </td>
+                                </tr>
+                            </table>
+                        </td>
+                        <td width="150">
+                            <span class="w-auto" v-show="emailEvents[i].remark_show&&emailEvent.remark"
+                                  @click="remarkShow(i,$event)">@{{ emailEvent.remark }}</span>
+                            <span v-show="emailEvents[i].remark_edit||!emailEvent.remark">
+                                <textarea width="150" class="form-control" rows="5" type="text"
+                                          @blur="remarkShow(i,$event)">@{{ emailEvent.remark }}</textarea>
+                                <button class="btn btn-sm btn-primary"
+                                        @click="updateRemark(emailEvent,$event)">修改</button>
+                            </span>
+                        </td>
+                        <td width="150">
+                        <span v-show="emailEvents[i].template_show&&emailEvent.template" @click="templateShow(i,$event)"
+                              class="w-auto">@{{ emailEvent.template }}</span>
+                            <span v-show="emailEvents[i].template_edit||!emailEvent.template">
+                            <textarea width="150" class="form-control" rows="5" type="text"
+                                      @blur="templateShow(i,$event)">@{{ emailEvent.template }}</textarea>
+                            <button class="btn btn-sm btn-primary"
+                                    @click="updateTemplate(emailEvent,$event)">修改</button>
+                        </span>
+                        </td>
+                        <td width="50">
+                            <button class="btn btn-success" v-if="emailEvent.is_active===0" @click="active(emailEvent)">
+                                启用
+                            </button>
+                            <button class="btn btn-secondary" v-if="emailEvent.is_active===1"
+                                    @click="active(emailEvent)">
+                                禁用
+                            </button>
+                        </td>
+                    </tr>
+                </table>
+            </div>
+        </div>
+    </div>
+@stop
+@section('lastScript')
+    <script>
+        new Vue({
+            el: "#container",
+            data: {
+                emailEvents: {!!  $emailEvents->toJson() !!}['data'],
+                roles: {!!  $roles->toJson() !!},
+                addRolesFlag: false,
+            },
+            methods: {
+                addRole(emailEvent) {
+                    console.log(emailEvent);
+                    window.tempTip.postBasicRequest("{{url('maintenance/mail/addRole')}}", {
+                        roleId: emailEvent.role_selected,
+                        eventMailId: emailEvent.id
+                    }, res => {
+                        emailEvent.roles.push(res.role);
+                        return "添加关联角色:" + res.role.name + " 成功!";
+                    });
+                },
+                deleteRole(role, index, emailEvent) {
+                    window.tempTip.postBasicRequest("{{url('maintenance/mail/deleteRole')}}", {
+                        roleId: role.id,
+                        eventMailId: emailEvent.id
+                    }, res => {
+                        console.log(res);
+                        emailEvent.roles.splice(index, 1);
+                        return "取消关联角色:" + role.name + " 成功!";
+                    });
+                },
+                updateTemplate(emailEvent, e) {
+                    let textarre = $(e.target).prev().val();
+                    window.tempTip.postBasicRequest("{{url('maintenance/mail/updateTemplate')}}", {
+                        id: emailEvent.id,
+                        template: textarre,
+                    }, res => {
+                        emailEvent.template = textarre;
+                        emailEvent.template_show = true;
+                        emailEvent.template_edit = false;
+                        return "修改模板成功!";
+                    });
+
+                },
+                updateRemark(emailEvent, e) {
+                    let textarre = $(e.target).prev().val();
+                    window.tempTip.postBasicRequest("{{url('maintenance/mail/updateRemark')}}", {
+                        id: emailEvent.id,
+                        remark: textarre,
+                    }, res => {
+                        emailEvent.remark = textarre;
+                        emailEvent.remark_show = true;
+                        emailEvent.remark_edit = false;
+                        return "修改备注成功!";
+                    });
+
+                },
+                active(emailEvent) {
+                    window.tempTip.postBasicRequest("{{url('maintenance/mail/active')}}", {
+                        id: emailEvent.id,
+                    }, res => {
+                        if (res) {
+                            emailEvent.is_active = 0;
+                            return "模板启用禁用!";
+                        } else {
+                            emailEvent.is_active = 1;
+                            return "模板启用成功!";
+                        }
+                    });
+                },
+                showRole(index) {
+                    if (this.emailEvents[index].isShowRole) {
+                        this.emailEvents[index].isShowRole = false;
+                    } else {
+                        this.emailEvents[index].isShowRole = true;
+                    }
+                    this.$forceUpdate();
+                },
+                remarkShow(index, $event) {
+                    let _this = this;
+                    setTimeout(function () {
+                        _this.emailEvents[index].remark_show = !_this.emailEvents[index].remark_show;
+                        _this.emailEvents[index].remark_edit = !_this.emailEvents[index].remark_edit;
+                        setTimeout(function () {
+                            let find = $($event.target).parent().find('textarea');
+                            find.focus();
+                        }, 100)
+                    }, 100);
+
+                },
+                templateShow(index,$event) {
+                    let _this = this;
+                    setTimeout(function () {
+                        _this.emailEvents[index].template_show = !_this.emailEvents[index].template_show;
+                        _this.emailEvents[index].template_edit = !_this.emailEvents[index].template_edit;
+                        setTimeout(function () {
+                            let find = $($event.target).parent().find('textarea');
+                            find.focus();
+                        }, 100)
+                    }, 100);
+                },
+            }
+        })
+    </script>
+@stop

+ 12 - 0
resources/views/maintenance/emails/menu.blade.php

@@ -0,0 +1,12 @@
+
+<div class="container-fluid nav3">
+    <div class="card" >
+        <ul class="nav nav-pills">
+            @can('邮件-查询')
+            <li class="nav-item">
+                <a class="nav-link" href="{{url('maintenance/mail')}}" :class="{active:isActive('',3)}">查询</a>
+            </li> @endcan
+            {{$slot}}
+        </ul>
+    </div>
+</div>

+ 4 - 0
resources/views/maintenance/menu.blade.php

@@ -94,6 +94,10 @@
                 <li class="nav-item">
                     <a class="nav-link text-muted" href="{{url('maintenance/laborCompany')}}" :class="{active:isActive('laborCompany',2)}">劳务所</a>
                 </li> @endcan
+            {{--TODO 权限--}}
+                <li class="nav-item">
+                    <a class="nav-link text-muted" href="{{url('maintenance/mail')}}" :class="{active:isActive('mail',2)}">邮件</a>
+                </li>
             @can('日志')
                 <li class="nav-item">
                     <a class="nav-link text-muted" href="{{url('maintenance/log')}}" :class="{active:isActive('log',2)}">日志</a>

+ 6 - 0
routes/web.php

@@ -194,6 +194,12 @@ Route::group(['prefix'=>'maintenance'],function(){
     Route::resource('userOwnerGroup', 'UserOwnerGroupController');
     Route::resource('processMethod', 'ProcessMethodController');
     Route::resource('feature', 'FeatureController');
+    Route::resource('mail', 'SendEmailsController');
+    Route::post('mail/addRole', 'SendEmailsController@addRole')->name('mail.addRole');
+    Route::post('mail/deleteRole', 'SendEmailsController@deleteRole')->name('mail.deleteRole');
+    Route::post('mail/updateTemplate', 'SendEmailsController@updateTemplate')->name('mail.updateTemplate');
+    Route::post('mail/updateRemark', 'SendEmailsController@updateRemark')->name('mail.updateRemark');
+    Route::post('mail/active', 'SendEmailsController@active')->name('mail.active');
 });
 Route::get('maintenance', function () {return view('maintenance.index');});