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

Appearance settings

Commit 78db880

Browse filesBrowse files
committed
增加聊天室和客服功能
1 parent eb767b7 commit 78db880
Copy full SHA for 78db880
Expand file treeCollapse file tree

24 files changed

+693
-8
lines changed

‎README.md

Copy file name to clipboardExpand all lines: README.md
+16-2Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
> 4. 完善日志管理的API
1313
> 5. 利用showdoc完成文档构建
1414
> 6. 利用laravel-echo-server,集成websocket,当同一个用户多次登陆,前次登陆的页面,将自动退出。利用webasocket的消息推送来实现
15+
> 7. 利用laravel-echo-server,集成websocket,实现聊天室功能和客服功能
1516
1617
#### 前端:
1718
> 1. 前端element ui 更新到了2.7.2版本,请参照开发
@@ -20,18 +21,22 @@
2021
> 4. 增加了日志管理功能
2122
> 5. 增加了前端开发示列,商品订单管理,代码层面利用mixin功能优化书写
2223
> 6. 接收后端推送的消息,强制下线多次登陆的用户,保证同一个用户在什么时间与地点只能登陆一次。
24+
> 7. 增加了应用事例模块,把具有代表性的聊天室功能和客服功能集成到项目中
2325
2426
#### ToDo:
2527
> 1. 前端增加用户多角色动态切换功能
26-
> 2. 系统增加成员管理功能、增加成员注册和使用第三方用户登录的功能
28+
> 2. 增加成员管理功能,实现微信登录、qq登录等第三方用户登录的功能
29+
> 3. 增加成员注册和使用功能
2730
2831
## 2、系统概述
2932
项目依托laravel5.5与vue.js,采用了主流的前后端分离方式来构建,作为程序的起点,你可以在此基础上进行自身业务的扩展。
3033
后端(backend目录)负责OAuth认证、用户授权、第三方用户登录验证和提供API,在此基础上集成了跨域和excel文件的操作等基础功能,使用者只需专注于业务api的开发即可。
34+
后端(backend目录)整合了laravel-echo-server,实现了websocket。用于消息的实时推送、聊天室、客服等功能,是全网最好的laravel-echo-server教程。
3135
前端(frontend目录)负责页面的显示和前端用户权限的控制。项目已经引入了element UI框架,并已经对用户登录认证、路由、权限等基础功能进行了处理。
3236
前端用户的权限不但可以控制系统的导航菜单,而且可以控制到页面按钮、表格等内容的显示。使用者只需要专注于业务界面的开发即可。
3337
本项目使用广泛,已经在本人的多个项目中商用。
34-
> 第三方登录测试时,可以先进入系统创建一个用户,然后用github登录后绑定刚刚创建的新用户,之后就可以使用github来自动登录了
38+
> 第三方登录测试时,可以先进入系统创建一个用户,然后用github登录后绑定刚刚创建的新用户,之后就可以使用github来自动登录了(可以参考版本1,版本2因为项目调整的关系,之后才会增加)
39+
3540
## 3、项目演示与截图
3641
> 演示网站(http://front.ynxpyz.cn)
3742
> 管理员用户名和密码(871228582@qq.com/123456)
@@ -42,6 +47,15 @@
4247
#### 文档
4348
![系统文档](https://github.com/wmhello/laravel_template_with_vue/raw/master/Screenshots/doc.png)
4449

50+
#### 聊天室
51+
![聊天室](https://github.com/wmhello/laravel_template_with_vue/raw/master/Screenshots/chat.png)
52+
53+
#### 客服(普通用户界面 1对1)
54+
![客服界面1](https://github.com/wmhello/laravel_template_with_vue/raw/master/Screenshots/kefu-user.png)
55+
56+
#### 客服(客服界面 1对多)
57+
![客服界面2](https://github.com/wmhello/laravel_template_with_vue/raw/master/Screenshots/kefu-service.png)
58+
4559
#### 管理员面板
4660
![管理员面板](https://github.com/wmhello/laravel_template_with_vue/raw/master/Screenshots/v2-admin-dashboard.png)
4761

‎Screenshots/chat.png

Copy file name to clipboard
54.7 KB
Loading

‎Screenshots/kefu-service.png

Copy file name to clipboard
68.7 KB
Loading

‎Screenshots/kefu-user.png

Copy file name to clipboard
53.4 KB
Loading

‎backend/app/Events/Chat.php

Copy file name to clipboard
+38Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace App\Events;
4+
5+
use Illuminate\Broadcasting\Channel;
6+
use Illuminate\Queue\SerializesModels;
7+
use Illuminate\Broadcasting\PrivateChannel;
8+
use Illuminate\Broadcasting\PresenceChannel;
9+
use Illuminate\Foundation\Events\Dispatchable;
10+
use Illuminate\Broadcasting\InteractsWithSockets;
11+
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
12+
13+
class Chat implements ShouldBroadcast
14+
{
15+
use Dispatchable, InteractsWithSockets, SerializesModels;
16+
17+
/**
18+
* Create a new event instance.
19+
*
20+
* @return void
21+
*/
22+
public $msg;
23+
public function __construct($msg)
24+
{
25+
//
26+
$this->msg = $msg;
27+
}
28+
29+
/**
30+
* Get the channels the event should broadcast on.
31+
*
32+
* @return \Illuminate\Broadcasting\Channel|array
33+
*/
34+
public function broadcastOn()
35+
{
36+
return new PresenceChannel('chat');
37+
}
38+
}
+38Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace App\Events;
4+
5+
use Illuminate\Broadcasting\Channel;
6+
use Illuminate\Queue\SerializesModels;
7+
use Illuminate\Broadcasting\PrivateChannel;
8+
use Illuminate\Broadcasting\PresenceChannel;
9+
use Illuminate\Foundation\Events\Dispatchable;
10+
use Illuminate\Broadcasting\InteractsWithSockets;
11+
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
12+
13+
class CustomerService implements ShouldBroadcast
14+
{
15+
use Dispatchable, InteractsWithSockets, SerializesModels;
16+
17+
/**
18+
* Create a new event instance.
19+
*
20+
* @return void
21+
*/
22+
public $msg;
23+
public function __construct($msg)
24+
{
25+
//
26+
$this->msg = $msg;
27+
}
28+
29+
/**
30+
* Get the channels the event should broadcast on.
31+
*
32+
* @return \Illuminate\Broadcasting\Channel|array
33+
*/
34+
public function broadcastOn()
35+
{
36+
return new PresenceChannel('kefu');
37+
}
38+
}

‎backend/routes/api.php

Copy file name to clipboardExpand all lines: backend/routes/api.php
+11Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,17 @@
4646
Route::get('logs/show', 'LogController@show')->name('logs.show'); // 操作日志
4747
Route::get('logs/index', 'LogController@index')->name('logs.index'); // 登录日志
4848

49+
// 聊天室功能
50+
Route::post('/chat', function(){
51+
$msg = request()->only(['name', 'time', 'timezone', 'content']);
52+
broadcast(new \App\Events\Chat($msg))->toOthers();
53+
})->name('chat.index');
54+
55+
Route::post('/kefu', function(){
56+
$msg = request()->only(['sendName', 'receiveName', 'time', 'timezone', 'content']);
57+
broadcast(new \App\Events\CustomerService($msg))->toOthers();
58+
})->name('chat.kefu');
59+
4960
});
5061
Route::get('refresh', "Auth\LoginController@refresh")->name('users.refresh');
5162
Route::post('login', 'Auth\LoginController@login')->name('users.login');

‎backend/routes/channels.php

Copy file name to clipboardExpand all lines: backend/routes/channels.php
+10Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,13 @@
1818
Broadcast::channel('leave.{name}', function ($user, $name) {
1919
return $user->name === $name;
2020
});
21+
22+
Broadcast::channel('chat', function($user){
23+
return $user->name;
24+
});
25+
26+
Broadcast::channel('kefu', function($user){
27+
return $user->name;
28+
});
29+
30+

‎frontend/dist/index.html

Copy file name to clipboard
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=/favicon.ico><title>管理系统</title><link href=/static/css/chunk-elementUI.18b11d0e.css rel=stylesheet><link href=/static/css/chunk-libs.73eaa6e1.css rel=stylesheet><link href=/static/css/app.4c037a8a.css rel=stylesheet></head><body><noscript><strong>We're sorry but 管理系统 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=/static/js/chunk-elementUI.acadd045.js></script><script src=/static/js/chunk-libs.91f6a52c.js></script><script>(function(e){function n(n){for(var t,u,d=n[0],f=n[1],o=n[2],h=0,b=[];h<d.length;h++)u=d[h],r[u]&&b.push(r[u][0]),r[u]=0;for(t in f)Object.prototype.hasOwnProperty.call(f,t)&&(e[t]=f[t]);i&&i(n);while(b.length)b.shift()();return a.push.apply(a,o||[]),c()}function c(){for(var e,n=0;n<a.length;n++){for(var c=a[n],t=!0,u=1;u<c.length;u++){var d=c[u];0!==r[d]&&(t=!1)}t&&(a.splice(n--,1),e=f(f.s=c[0]))}return e}var t={},u={runtime:0},r={runtime:0},a=[];function d(e){return f.p+"static/js/"+({}[e]||e)+"."+{"chunk-18732e2c":"ee39d12f","chunk-2a50b93d":"b55ce574","chunk-2aed1171":"8540ba6a","chunk-4b0f6a4b":"d58c4386","chunk-57ebe89e":"369344c4","chunk-7202d7df":"07f41b11","chunk-79265b3b":"2446fd1f","chunk-80122322":"a4df921f","chunk-6552f2ab":"2dc911b6","chunk-834c1958":"783a3235","chunk-9e97c074":"a80d62b6","chunk-cb1ae208":"ecc6ed8f","chunk-e9f3ee7c":"52cf01a6","chunk-2d0ab800":"2280817b","chunk-2d0afe49":"09f7e5ce","chunk-2d0c798e":"0be8daae","chunk-2d0ccb97":"9bb22b24","chunk-2d0d43d7":"f69efaf2","chunk-2d21b84c":"931a1bbf","chunk-2d221c26":"57ab8eaa","chunk-2d22e189":"eda35163","chunk-7704ac42":"dbe8dde2","chunk-7e20d9b0":"1ae57c00","chunk-7e21e850":"cefc9297","chunk-9e76a64a":"7a0b0abe","chunk-b461012a":"02c2cb29","chunk-ed606062":"a63e6763","chunk-ed8a7108":"3ba3b308"}[e]+".js"}function f(n){if(t[n])return t[n].exports;var c=t[n]={i:n,l:!1,exports:{}};return e[n].call(c.exports,c,c.exports,f),c.l=!0,c.exports}f.e=function(e){var n=[],c={"chunk-18732e2c":1,"chunk-2a50b93d":1,"chunk-2aed1171":1,"chunk-57ebe89e":1,"chunk-7202d7df":1,"chunk-79265b3b":1,"chunk-80122322":1,"chunk-834c1958":1,"chunk-9e97c074":1,"chunk-cb1ae208":1,"chunk-e9f3ee7c":1};u[e]?n.push(u[e]):0!==u[e]&&c[e]&&n.push(u[e]=new Promise(function(n,c){for(var t="static/css/"+({}[e]||e)+"."+{"chunk-18732e2c":"b565ecf7","chunk-2a50b93d":"af40ef20","chunk-2aed1171":"e0a083b4","chunk-4b0f6a4b":"31d6cfe0","chunk-57ebe89e":"ab2f8884","chunk-7202d7df":"8861de3e","chunk-79265b3b":"2007eb23","chunk-80122322":"dd1d6337","chunk-6552f2ab":"31d6cfe0","chunk-834c1958":"f686d2bc","chunk-9e97c074":"1336a22b","chunk-cb1ae208":"b565ecf7","chunk-e9f3ee7c":"b565ecf7","chunk-2d0ab800":"31d6cfe0","chunk-2d0afe49":"31d6cfe0","chunk-2d0c798e":"31d6cfe0","chunk-2d0ccb97":"31d6cfe0","chunk-2d0d43d7":"31d6cfe0","chunk-2d21b84c":"31d6cfe0","chunk-2d221c26":"31d6cfe0","chunk-2d22e189":"31d6cfe0","chunk-7704ac42":"31d6cfe0","chunk-7e20d9b0":"31d6cfe0","chunk-7e21e850":"31d6cfe0","chunk-9e76a64a":"31d6cfe0","chunk-b461012a":"31d6cfe0","chunk-ed606062":"31d6cfe0","chunk-ed8a7108":"31d6cfe0"}[e]+".css",r=f.p+t,a=document.getElementsByTagName("link"),d=0;d<a.length;d++){var o=a[d],h=o.getAttribute("data-href")||o.getAttribute("href");if("stylesheet"===o.rel&&(h===t||h===r))return n()}var b=document.getElementsByTagName("style");for(d=0;d<b.length;d++){o=b[d],h=o.getAttribute("data-href");if(h===t||h===r)return n()}var i=document.createElement("link");i.rel="stylesheet",i.type="text/css",i.onload=n,i.onerror=function(n){var t=n&&n.target&&n.target.src||r,a=new Error("Loading CSS chunk "+e+" failed.\n("+t+")");a.code="CSS_CHUNK_LOAD_FAILED",a.request=t,delete u[e],i.parentNode.removeChild(i),c(a)},i.href=r;var k=document.getElementsByTagName("head")[0];k.appendChild(i)}).then(function(){u[e]=0}));var t=r[e];if(0!==t)if(t)n.push(t[2]);else{var a=new Promise(function(n,c){t=r[e]=[n,c]});n.push(t[2]=a);var o,h=document.createElement("script");h.charset="utf-8",h.timeout=120,f.nc&&h.setAttribute("nonce",f.nc),h.src=d(e),o=function(n){h.onerror=h.onload=null,clearTimeout(b);var c=r[e];if(0!==c){if(c){var t=n&&("load"===n.type?"missing":n.type),u=n&&n.target&&n.target.src,a=new Error("Loading chunk "+e+" failed.\n("+t+": "+u+")");a.type=t,a.request=u,c[1](a)}r[e]=void 0}};var b=setTimeout(function(){o({type:"timeout",target:h})},12e4);h.onerror=h.onload=o,document.head.appendChild(h)}return Promise.all(n)},f.m=e,f.c=t,f.d=function(e,n,c){f.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"===typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(f.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var t in e)f.d(c,t,function(n){return e[n]}.bind(null,t));return c},f.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(n,"a",n),n},f.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},f.p="/",f.oe=function(e){throw console.error(e),e};var o=window["webpackJsonp"]=window["webpackJsonp"]||[],h=o.push.bind(o);o.push=n,o=o.slice();for(var b=0;b<o.length;b++)n(o[b]);var i=h;c()})([]);</script><script src=/static/js/app.4f3701bc.js></script></body></html>
1+
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=/favicon.ico><title>管理系统</title><link href=/static/css/chunk-elementUI.18b11d0e.css rel=stylesheet><link href=/static/css/chunk-libs.73eaa6e1.css rel=stylesheet><link href=/static/css/app.4c037a8a.css rel=stylesheet></head><body><noscript><strong>We're sorry but 管理系统 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=/static/js/chunk-elementUI.acadd045.js></script><script src=/static/js/chunk-libs.91f6a52c.js></script><script>(function(e){function c(c){for(var t,u,f=c[0],d=c[1],h=c[2],o=0,b=[];o<f.length;o++)u=f[o],r[u]&&b.push(r[u][0]),r[u]=0;for(t in d)Object.prototype.hasOwnProperty.call(d,t)&&(e[t]=d[t]);k&&k(c);while(b.length)b.shift()();return a.push.apply(a,h||[]),n()}function n(){for(var e,c=0;c<a.length;c++){for(var n=a[c],t=!0,u=1;u<n.length;u++){var f=n[u];0!==r[f]&&(t=!1)}t&&(a.splice(c--,1),e=d(d.s=n[0]))}return e}var t={},u={runtime:0},r={runtime:0},a=[];function f(e){return d.p+"static/js/"+({}[e]||e)+"."+{"chunk-0f57c5eb":"eb40a29a","chunk-18732e2c":"ee39d12f","chunk-2a50b93d":"b55ce574","chunk-2aed1171":"8540ba6a","chunk-4b0f6a4b":"e7f6655b","chunk-57ebe89e":"369344c4","chunk-6fbffcf3":"52901836","chunk-7202d7df":"07f41b11","chunk-79265b3b":"8ad73d80","chunk-80122322":"a4df921f","chunk-6552f2ab":"2dc911b6","chunk-834c1958":"783a3235","chunk-9e97c074":"ccd233e0","chunk-cb1ae208":"ecc6ed8f","chunk-e9f3ee7c":"52cf01a6","chunk-2d0ab800":"2280817b","chunk-2d0afe49":"09f7e5ce","chunk-2d0c798e":"0be8daae","chunk-2d0ccb97":"9bb22b24","chunk-2d0d43d7":"f69efaf2","chunk-2d21b84c":"931a1bbf","chunk-2d21ee4a":"7667dc24","chunk-2d221c26":"57ab8eaa","chunk-2d22e189":"eda35163","chunk-7704ac42":"dbe8dde2","chunk-7e20d9b0":"1ae57c00","chunk-7e21e850":"cefc9297","chunk-9e76a64a":"7a0b0abe","chunk-b461012a":"02c2cb29","chunk-ed606062":"a63e6763","chunk-ed8a7108":"3ba3b308"}[e]+".js"}function d(c){if(t[c])return t[c].exports;var n=t[c]={i:c,l:!1,exports:{}};return e[c].call(n.exports,n,n.exports,d),n.l=!0,n.exports}d.e=function(e){var c=[],n={"chunk-0f57c5eb":1,"chunk-18732e2c":1,"chunk-2a50b93d":1,"chunk-2aed1171":1,"chunk-57ebe89e":1,"chunk-6fbffcf3":1,"chunk-7202d7df":1,"chunk-79265b3b":1,"chunk-80122322":1,"chunk-834c1958":1,"chunk-9e97c074":1,"chunk-cb1ae208":1,"chunk-e9f3ee7c":1};u[e]?c.push(u[e]):0!==u[e]&&n[e]&&c.push(u[e]=new Promise(function(c,n){for(var t="static/css/"+({}[e]||e)+"."+{"chunk-0f57c5eb":"bba064a1","chunk-18732e2c":"b565ecf7","chunk-2a50b93d":"af40ef20","chunk-2aed1171":"e0a083b4","chunk-4b0f6a4b":"31d6cfe0","chunk-57ebe89e":"ab2f8884","chunk-6fbffcf3":"52fdf3a8","chunk-7202d7df":"8861de3e","chunk-79265b3b":"2007eb23","chunk-80122322":"dd1d6337","chunk-6552f2ab":"31d6cfe0","chunk-834c1958":"f686d2bc","chunk-9e97c074":"1336a22b","chunk-cb1ae208":"b565ecf7","chunk-e9f3ee7c":"b565ecf7","chunk-2d0ab800":"31d6cfe0","chunk-2d0afe49":"31d6cfe0","chunk-2d0c798e":"31d6cfe0","chunk-2d0ccb97":"31d6cfe0","chunk-2d0d43d7":"31d6cfe0","chunk-2d21b84c":"31d6cfe0","chunk-2d21ee4a":"31d6cfe0","chunk-2d221c26":"31d6cfe0","chunk-2d22e189":"31d6cfe0","chunk-7704ac42":"31d6cfe0","chunk-7e20d9b0":"31d6cfe0","chunk-7e21e850":"31d6cfe0","chunk-9e76a64a":"31d6cfe0","chunk-b461012a":"31d6cfe0","chunk-ed606062":"31d6cfe0","chunk-ed8a7108":"31d6cfe0"}[e]+".css",r=d.p+t,a=document.getElementsByTagName("link"),f=0;f<a.length;f++){var h=a[f],o=h.getAttribute("data-href")||h.getAttribute("href");if("stylesheet"===h.rel&&(o===t||o===r))return c()}var b=document.getElementsByTagName("style");for(f=0;f<b.length;f++){h=b[f],o=h.getAttribute("data-href");if(o===t||o===r)return c()}var k=document.createElement("link");k.rel="stylesheet",k.type="text/css",k.onload=c,k.onerror=function(c){var t=c&&c.target&&c.target.src||r,a=new Error("Loading CSS chunk "+e+" failed.\n("+t+")");a.code="CSS_CHUNK_LOAD_FAILED",a.request=t,delete u[e],k.parentNode.removeChild(k),n(a)},k.href=r;var i=document.getElementsByTagName("head")[0];i.appendChild(k)}).then(function(){u[e]=0}));var t=r[e];if(0!==t)if(t)c.push(t[2]);else{var a=new Promise(function(c,n){t=r[e]=[c,n]});c.push(t[2]=a);var h,o=document.createElement("script");o.charset="utf-8",o.timeout=120,d.nc&&o.setAttribute("nonce",d.nc),o.src=f(e),h=function(c){o.onerror=o.onload=null,clearTimeout(b);var n=r[e];if(0!==n){if(n){var t=c&&("load"===c.type?"missing":c.type),u=c&&c.target&&c.target.src,a=new Error("Loading chunk "+e+" failed.\n("+t+": "+u+")");a.type=t,a.request=u,n[1](a)}r[e]=void 0}};var b=setTimeout(function(){h({type:"timeout",target:o})},12e4);o.onerror=o.onload=h,document.head.appendChild(o)}return Promise.all(c)},d.m=e,d.c=t,d.d=function(e,c,n){d.o(e,c)||Object.defineProperty(e,c,{enumerable:!0,get:n})},d.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.t=function(e,c){if(1&c&&(e=d(e)),8&c)return e;if(4&c&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(d.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&c&&"string"!=typeof e)for(var t in e)d.d(n,t,function(c){return e[c]}.bind(null,t));return n},d.n=function(e){var c=e&&e.__esModule?function(){return e["default"]}:function(){return e};return d.d(c,"a",c),c},d.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},d.p="/",d.oe=function(e){throw console.error(e),e};var h=window["webpackJsonp"]=window["webpackJsonp"]||[],o=h.push.bind(h);h.push=c,h=h.slice();for(var b=0;b<h.length;b++)c(h[b]);var k=o;n()})([]);</script><script src=/static/js/app.9d0ea778.js></script></body></html>

‎frontend/dist/static/css/chunk-0f57c5eb.bba064a1.css

Copy file name to clipboardExpand all lines: frontend/dist/static/css/chunk-0f57c5eb.bba064a1.css
+1Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎frontend/dist/static/css/chunk-6fbffcf3.52fdf3a8.css

Copy file name to clipboardExpand all lines: frontend/dist/static/css/chunk-6fbffcf3.52fdf3a8.css
+1Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎frontend/dist/static/js/app.4f3701bc.js renamed to ‎frontend/dist/static/js/app.9d0ea778.js

Copy file name to clipboardExpand all lines: frontend/dist/static/js/app.9d0ea778.js
+1-1Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.