From 0f543ceab2001afbb82841000a22f368f27e70f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=94=E5=A7=AC=E6=A1=91?= Date: Sun, 12 Jul 2020 10:53:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E7=AE=80=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/updateTicket.php | 39 +++++++ .../Controllers/Admin/TicketController.php | 43 ++++++- app/Models/Ticket.php | 6 + app/Models/TicketReply.php | 8 +- app/Models/User.php | 2 + readme.md | 15 ++- resources/views/admin/config/system.blade.php | 2 +- resources/views/admin/layouts.blade.php | 4 +- .../views/admin/ticket/addTicket.blade.php | 77 ------------ .../views/admin/ticket/replyTicket.blade.php | 61 +--------- .../views/admin/ticket/ticketList.blade.php | 110 ++++++++++++++++-- resources/views/components/avatar.blade.php | 7 ++ resources/views/components/chatUnit.blade.php | 15 +++ .../views/user/components/avatar.blade.php | 7 -- resources/views/user/layouts.blade.php | 2 +- resources/views/user/profile.blade.php | 62 ++++------ resources/views/user/replyTicket.blade.php | 58 ++------- resources/views/user/ticketList.blade.php | 48 +++----- routes/web.php | 3 +- sql/db.sql | 6 +- sql/mod/20200711.sql | 7 ++ 21 files changed, 295 insertions(+), 287 deletions(-) create mode 100644 app/Console/Commands/updateTicket.php delete mode 100644 resources/views/admin/ticket/addTicket.blade.php create mode 100644 resources/views/components/avatar.blade.php create mode 100644 resources/views/components/chatUnit.blade.php delete mode 100644 resources/views/user/components/avatar.blade.php create mode 100644 sql/mod/20200711.sql diff --git a/app/Console/Commands/updateTicket.php b/app/Console/Commands/updateTicket.php new file mode 100644 index 00000000..73d04ec8 --- /dev/null +++ b/app/Console/Commands/updateTicket.php @@ -0,0 +1,39 @@ +whereIsAdmin(1)->get(); + foreach($adminList as $admin){ + Log::info('----------------------------【更新管理员'.$admin->id.'回复工单】开始----------------------------'); + // 获取该管理回复过的工单 + $replyList = TicketReply::query()->whereUserId($admin->id)->get(); + // 更新工单 + foreach($replyList as $reply){ + $ret = TicketReply::query()->whereId($reply->id)->update(['user_id' => 0, 'admin_id' => $admin->id]); + if($ret){ + Log::info('--- 管理员:'.$admin->email.'回复子单ID:'.$reply->id.' ---'); + }else{ + Log::error('更新回复子单ID:【'.$reply->id.'】 失败!'); + } + } + Log::info('----------------------------【更新管理员'.$admin->id.'回复工单】完成----------------------------'); + } + Log::info('----------------------------【更新工单】结束----------------------------'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Admin/TicketController.php b/app/Http/Controllers/Admin/TicketController.php index 11fbf739..9fa144b1 100644 --- a/app/Http/Controllers/Admin/TicketController.php +++ b/app/Http/Controllers/Admin/TicketController.php @@ -9,6 +9,7 @@ use App\Mail\closeTicket; use App\Mail\replyTicket; use App\Models\Ticket; use App\Models\TicketReply; +use App\Models\User; use Auth; use Illuminate\Http\Request; use Mail; @@ -32,7 +33,7 @@ class TicketController extends Controller { public function ticketList(Request $request) { $email = $request->input('email'); - $query = Ticket::query(); + $query = Ticket::query()->whereIn('admin_id', [0, Auth::id()]); if(isset($email)){ $query->whereHas('user', function($q) use ($email) { @@ -45,6 +46,40 @@ class TicketController extends Controller { return Response::view('admin.ticket.ticketList', $view); } + // 创建工单 + public function createTicket(Request $request) { + $id = $request->input('id'); + $email = $request->input('email'); + $title = $request->input('title'); + $content = $request->input('content'); + + $user = User::query()->find($id)?: User::query()->whereEmail($email)->first(); + + if(!$user){ + return Response::json(['status' => 'fail', 'message' => '用户不存在']); + }elseif($user == Auth::user()){ + return Response::json(['status' => 'fail', 'message' => '不能对自己发起工单']); + } + + if(empty($title) || empty($content)){ + return Response::json(['status' => 'fail', 'message' => '请输入标题和内容']); + } + + $obj = new Ticket(); + $obj->user_id = $user->id; + $obj->admin_id = Auth::id(); + $obj->title = $title; + $obj->content = $content; + $obj->status = 0; + $obj->save(); + + if($obj->id){ + return Response::json(['status' => 'success', 'message' => '工单创建成功']); + }else{ + return Response::json(['status' => 'fail', 'message' => '工单创建失败']); + } + } + // 回复工单 public function replyTicket(Request $request) { $id = $request->input('id'); @@ -56,7 +91,7 @@ class TicketController extends Controller { $obj = new TicketReply(); $obj->ticket_id = $id; - $obj->user_id = Auth::id(); + $obj->admin_id = Auth::id(); $obj->content = $content; $obj->save(); @@ -89,8 +124,8 @@ class TicketController extends Controller { return Response::json(['status' => 'fail', 'data' => '', 'message' => '回复失败']); } }else{ - $view['ticket'] = Ticket::query()->whereId($id)->with('user')->first(); - $view['replyList'] = TicketReply::query()->whereTicketId($id)->with('user')->orderBy('id')->get(); + $view['ticket'] = Ticket::query()->whereId($id)->first(); + $view['replyList'] = TicketReply::query()->whereTicketId($id)->orderBy('id')->get(); return Response::view('admin.ticket.replyTicket', $view); } diff --git a/app/Models/Ticket.php b/app/Models/Ticket.php index 86440e7d..36d68afd 100644 --- a/app/Models/Ticket.php +++ b/app/Models/Ticket.php @@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Model; * * @property int $id * @property int $user_id 用户ID + * @property int|null $admin_id 管理员ID * @property string $title 标题 * @property string $content 内容 * @property int $status 状态:0-待处理、1-已处理未关闭、2-已关闭 @@ -22,6 +23,7 @@ use Illuminate\Database\Eloquent\Model; * @method static Builder|Ticket newQuery() * @method static Builder|Ticket query() * @method static Builder|Ticket uid() + * @method static Builder|Ticket whereAdminId($value) * @method static Builder|Ticket whereContent($value) * @method static Builder|Ticket whereCreatedAt($value) * @method static Builder|Ticket whereId($value) @@ -43,6 +45,10 @@ class Ticket extends Model { return $this->hasOne(User::class, 'id', 'user_id'); } + function admin() { + return $this->hasOne(User::class, 'id', 'admin_id'); + } + function getStatusLabelAttribute() { switch($this->attributes['status']){ case 0: diff --git a/app/Models/TicketReply.php b/app/Models/TicketReply.php index 55a345e6..27e963f6 100644 --- a/app/Models/TicketReply.php +++ b/app/Models/TicketReply.php @@ -10,7 +10,8 @@ use Illuminate\Database\Eloquent\Model; * * @property int $id * @property int $ticket_id 工单ID - * @property int $user_id 回复用户的ID + * @property int $user_id 回复用户ID + * @property int $admin_id 管理员ID * @property string $content 回复内容 * @property \Illuminate\Support\Carbon|null $created_at 创建时间 * @property \Illuminate\Support\Carbon|null $updated_at 最后更新时间 @@ -18,6 +19,7 @@ use Illuminate\Database\Eloquent\Model; * @method static Builder|TicketReply newModelQuery() * @method static Builder|TicketReply newQuery() * @method static Builder|TicketReply query() + * @method static Builder|TicketReply whereAdminId($value) * @method static Builder|TicketReply whereContent($value) * @method static Builder|TicketReply whereCreatedAt($value) * @method static Builder|TicketReply whereId($value) @@ -33,4 +35,8 @@ class TicketReply extends Model { function user() { return $this->hasOne(User::class, 'id', 'user_id'); } + + function admin() { + return $this->hasOne(User::class, 'id', 'admin_id'); + } } diff --git a/app/Models/User.php b/app/Models/User.php index c600a910..ad4755ad 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -25,6 +25,7 @@ use Illuminate\Notifications\Notifiable; * @property int $enable 代理状态 * @property string $method 加密方式 * @property string $protocol 协议 + * @property string|null $protocol_param 协议参数 * @property string $obfs 混淆 * @property int $speed_limit 用户限速,为0表示不限速,单位Byte * @property string|null $wechat 微信 @@ -75,6 +76,7 @@ use Illuminate\Notifications\Notifiable; * @method static Builder|User wherePassword($value) * @method static Builder|User wherePort($value) * @method static Builder|User whereProtocol($value) + * @method static Builder|User whereProtocolParam($value) * @method static Builder|User whereQq($value) * @method static Builder|User whereReferralUid($value) * @method static Builder|User whereRegIp($value) diff --git a/readme.md b/readme.md index a742d9ee..6ccfb9b3 100644 --- a/readme.md +++ b/readme.md @@ -1,12 +1,15 @@ # ProxyPanel -Support but not limited to: Shadowsocks,ShadowsocksR,ShadowsocksRR,V2Ray,VNET +[简体中文](https://github.com/ZBrettonYe/ProxyPanel/wiki) -- [Demo](https://demo.proxypanel.ml/admin/userList) +Support but not limited to: Shadowsocks,ShadowsocksR,ShadowsocksRR,V2Ray,Trojan,VNET + +- [Demo](https://demo.proxypanel.ml/) - Account: test@test.com - Password: 123456 -- [Issues](https://github.com/ZBrettonYe/OtakuPanel_SSR/issues) -- [WIKI](https://github.com/ZBrettonYe/OtakuPanel_SSR/wiki) -- [Update Log](https://github.com/ZBrettonYe/OtakuPanel_SSR/wiki/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97) +- [Issues](https://github.com/ZBrettonYe/ProxyPanel/issues) +- [WIKI](https://github.com/ZBrettonYe/ProxyPanel/wiki) +- [Update Log](https://github.com/ZBrettonYe/ProxyPanel/wiki/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97) +- [Upcoming](https://github.com/ZBrettonYe/ProxyPanel/projects/2) - [Telegram](https://t.me/joinchat/GUrO5hZsT3FOd79HAa9pcA) ## Requirements @@ -39,4 +42,4 @@ Support but not limited to: Shadowsocks,ShadowsocksR,ShadowsocksRR,V2Ray,VNET ## License -ProxyPanel also is open-sourced software licensed under the MIT license. +ProxyPanel is open-sourced software licensed under the GPL-3.0 license. diff --git a/resources/views/admin/config/system.blade.php b/resources/views/admin/config/system.blade.php index 99a84a2b..dd177d8c 100644 --- a/resources/views/admin/config/system.blade.php +++ b/resources/views/admin/config/system.blade.php @@ -719,7 +719,7 @@ - 启用后登录、注册需要输入验证码 + 切换模式后旧数据不变,新的返利按新的模式计算
diff --git a/resources/views/admin/layouts.blade.php b/resources/views/admin/layouts.blade.php index 1c3c327e..7d78d29d 100644 --- a/resources/views/admin/layouts.blade.php +++ b/resources/views/admin/layouts.blade.php @@ -136,7 +136,7 @@ -