Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit da71a11

Browse files
committed
增加了聊天室功能
1 parent bb74474 commit da71a11

File tree

7 files changed

+452
-13
lines changed

7 files changed

+452
-13
lines changed
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Models\Admin;
6+
use Illuminate\Http\Request;
7+
use App\GatewayClient\Gateway;
8+
use Illuminate\Support\Facades\Auth;
9+
10+
class ChatController extends Controller
11+
{
12+
/**
13+
* Display a listing of the resource.
14+
*
15+
* @return \Illuminate\Http\Response
16+
*/
17+
// 进入聊天室
18+
/**
19+
* 1.广播给其他用户我已经我已经进入聊天室
20+
* 2.加入聊天室组
21+
* 3.返回连自己在内的所用用户
22+
*/
23+
public function register()
24+
{
25+
26+
$this->initGateWay();
27+
$client_id = $this->getWebsocketClientId();
28+
$user = Auth::user();
29+
$arr = Gateway::getClientSessionsByGroup("chat");
30+
$chatArr = array_keys($arr);
31+
if (count($arr)>=1){
32+
// 广播给其他用户
33+
$data = [
34+
'name' => $user->email,
35+
'avatar' => $user->avatar,
36+
'client_id' => $client_id,
37+
"type" => "chatUserLogin",
38+
"select" => "all"
39+
];
40+
Gateway::sendToGroup("chat",json_encode($data));
41+
}
42+
Gateway::joinGroup($client_id, "chat");
43+
// 返回已经在线的信息
44+
$otherUser = [];
45+
46+
foreach ($chatArr as $v) {
47+
$uid = Gateway::getUidByClientId($v);
48+
$otherUser[$uid] = $v;
49+
}
50+
51+
$existsData = [];
52+
foreach ($otherUser as $uid => $v) {
53+
$user = Admin::find($uid);
54+
$existsData [] = [
55+
'name' => $user->email,
56+
'avatar' => $user->avatar,
57+
'client_id' => $v
58+
];
59+
}
60+
return $this->successWithData($existsData);
61+
}
62+
63+
64+
// 取消注册
65+
66+
/**
67+
* 1.退出聊天的组
68+
* 2.获取剩下的聊天室成员
69+
* 3.发送数据去通知
70+
*/
71+
public function unRegister()
72+
{
73+
$this->initGateWay();
74+
$client_id = $this->getWebsocketClientId();
75+
Gateway::leaveGroup($client_id, "chat");
76+
$chatArray = Gateway::getClientSessionsByGroup("chat");
77+
$chatArr = array_keys($chatArray);
78+
$uid = Gateway::getUidByClientId($client_id);
79+
$user = Admin::find($uid);
80+
$data = [
81+
"client_id" => $client_id,
82+
"name" => $user->email,
83+
"type" => "chatUserLogout" ,
84+
"select" => "all"
85+
];
86+
Gateway::sendToAll(json_encode($data), $chatArr);
87+
return $this->success();
88+
}
89+
90+
/**
91+
* 发送信息给聊天室的其他用户
92+
* 从chat组中找出所有的额数据,去掉本人的,然后发给剩下所有的
93+
*/
94+
95+
public function sendDataToUser()
96+
{
97+
$data = request()->only(['name', 'content', 'avatar', 'time']);
98+
$client_id = $this->getWebsocketClientId();
99+
$this->initGateWay();
100+
$chatArray = Gateway::getClientSessionsByGroup("chat");
101+
$chatArr = array_keys($chatArray);
102+
// 删除自身
103+
unset($chatArr[array_search($client_id, $chatArr)]);
104+
$chatIds = array_values($chatArr);
105+
$data['type'] = "chatUserSay";
106+
$data['select'] = "all";
107+
Gateway::sendToAll(json_encode($data), $chatIds);
108+
return $this->successWithInfo("信息已经发送");
109+
}
110+
111+
protected function initGateWay()
112+
{
113+
$address = env('REGISTER_ADDRESS', '127.0.0.1:1680');
114+
Gateway::$registerAddress = $address;
115+
}
116+
117+
118+
public function index()
119+
{
120+
//
121+
}
122+
123+
/**
124+
* Store a newly created resource in storage.
125+
*
126+
* @param \Illuminate\Http\Request $request
127+
* @return \Illuminate\Http\Response
128+
*/
129+
public function store(Request $request)
130+
{
131+
//
132+
}
133+
134+
/**
135+
* Display the specified resource.
136+
*
137+
* @param int $id
138+
* @return \Illuminate\Http\Response
139+
*/
140+
public function show($id)
141+
{
142+
//
143+
}
144+
145+
/**
146+
* Update the specified resource in storage.
147+
*
148+
* @param \Illuminate\Http\Request $request
149+
* @param int $id
150+
* @return \Illuminate\Http\Response
151+
*/
152+
public function update(Request $request, $id)
153+
{
154+
//
155+
}
156+
157+
/**
158+
* Remove the specified resource from storage.
159+
*
160+
* @param int $id
161+
* @return \Illuminate\Http\Response
162+
*/
163+
public function destroy($id)
164+
{
165+
//
166+
}
167+
}

‎api/app/Http/Controllers/Admin/ServiceController.php‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use Illuminate\Http\Request;
77
use App\GatewayClient\Gateway;
88
use Illuminate\Support\Facades\Auth;
9-
use function React\Promise\all;
109

1110
class ServiceController extends Controller
1211
{

‎api/routes/api.php‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,22 @@
3939
Route::middleware(['auth:admin'])->prefix('admin')->namespace('Admin')->group(function(){
4040
Route::get('tables/list', 'TableController@getAllTable')->name("tables.list");
4141
Route::get('table_configs/columns', 'TableConfigController@getColumnByTable')->name("tables.column");
42+
// 客服功能
4243
Route::post('services/check','ServiceController@check')->name("services.check");
4344
Route::post('services/register','ServiceController@register')->name("services.register");
4445
Route::post('services/un_register','ServiceController@unRegister')->name("services.un_register");
4546
Route::get('services/customer', 'ServiceController@customer')->name("services.customer");
4647
Route::post('services/user_leave', 'ServiceController@leave')->name("services.leave");
4748
Route::post('services/send_data_to_customer', 'ServiceController@sendDataToCustomer')->name("services.send_data_to_customer");
4849
Route::post('services/send_data_to_user', 'ServiceController@sendDataToUser')->name("services.send_data_to_user");
50+
// 聊天室
51+
// 进入聊天室进行注册
52+
Route::post("chats/register", "ChatController@register")->name("chat.register");
53+
// 退出聊天室,广播到全部
54+
Route::post("chats/un_register", "ChatController@unRegister")->name("chat.un_register");
55+
// 用户发送信息到用户
56+
Route::post("chats/send_data_to_user", "ChatController@sendDataToUser")->name("chat.send_data_to_user");
57+
4958
});
5059

5160

‎element/src/api/chat.js‎

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,36 @@
1+
/*
2+
* @Author: wmhello 871228582@qq.com
3+
* @Date: 2021年10月12日 22:49:35
4+
* @LastEditors: wmhello 871228582@qq.com
5+
* @LastEditTime: 2022年08月21日 11:37:39
6+
* @FilePath: \element\src\api\chat.js
7+
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8+
*/
19
import request from '@/utils/request'
10+
const url = "/chats";
211

3-
export function sendChat(data) {
12+
export function register(data) {
413
return request({
5-
url: '/chat',
14+
url: `${url}/register`,
615
method: 'post',
716
data
817
})
918
}
1019

11-
export function getCustomer(){
12-
return new Promise((resolve, reject)=>{
13-
let data = {
14-
name: 'admin'
15-
}
16-
resolve(data)
20+
export function unRegister() {
21+
return request({
22+
url: `${url}/un_register`,
23+
method: 'post'
1724
})
1825
}
1926

20-
export function sendKefu(data) {
27+
export function sendDataToUser(data) {
2128
return request({
22-
url: '/kefu',
29+
url: `${url}/send_data_to_user`,
2330
method: 'post',
2431
data
2532
})
2633
}
34+
35+
36+

‎element/src/router/index.js‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,17 @@ export const asyncRoutes = [
268268
roles: ["serveices.menu"],
269269
icon: "list"
270270
}
271-
}
271+
},
272+
{
273+
path: "chat",
274+
name: "ChatIndex",
275+
component: () => import("@/views/message/chat/index"),
276+
meta: {
277+
title: "聊天室",
278+
roles: ["chats.menu"],
279+
icon: "list"
280+
}
281+
},
272282
]
273283
},
274284
{

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /