first commit

This commit is contained in:
编码猿
2024-09-27 02:06:13 +08:00
commit 852d94fbb9
36760 changed files with 3274413 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
const { Server } = require("socket.io");
//初始化
const io = new Server(3000, {
// 端口 路径 适配器 连接超时等等
});
//!!!数据分组!!!!
//群信息保存
var onlineUser = {
// "groupName":[
// {
// name:"",
// ronm:"",
// img:"",
// type:""//1群主 2管理 3成员
// }
// ]
}
//聊天记录八平村
var chatRecord = {
// "groupName":[
// {
// // name:"",
// // ronm:"",
// // img:"",
// // type:""//1群主 2管理 3成员
// }
// ]
}
//!!!前后端连接同样也要分组!!!!
io.on("connection", (socket) => {
console.log("客户端建立连接了...");
//监听登录页面
socket.on("UserLogin", function (arg) {
console.log(arg);
//群已存在 3群成员
if (onlineUser.hasOwnProperty(arg.room)) {
arg.type = 3
//创建群 1群主 建立群数组为空
} else {
arg.type = 1
onlineUser[arg.room] = []
}
//保存登陆数据
onlineUser[arg.room].push(arg);
//将客户端添加到相同的room里
socket.join(arg.room);
//系统消息 欢迎新人
io.in(arg.room).emit("SystemMessage", `欢迎${arg.name}加入群聊`);
// console.log("onlineUser",onlineUser);
});
//服务器监听消息发送消息
socket.on("sendMessage", (arg) => {
//判断聊天记录是否是第一次建立
if (!chatRecord.hasOwnProperty(arg.room)) {
//是 则追加一个room为空用于存储后续相关数据
chatRecord[arg.room] = []
}
//将聊天记录保存
chatRecord[arg.room].push(arg)
//服务器推送消息
//除开发送者将详细推送给房间内所有人
socket.to(arg.room).emit("PushMessage", arg);
})
//监听在线成员询问事件
socket.on("getOnlineUser", (arg) => {
io.in(arg.room).emit("PushOnlineUser", onlineUser[arg.room]);
})
//【2后端】服务器监听窗口抖动
socket.on("SetShake", (arg) => {
socket.to(arg.room).emit("PushShake");
});
socket.on("disconnect", () => {
console.log("客户端断开连接了...");
})
});

View File

@@ -0,0 +1,164 @@
{
"name": "backend",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@types/component-emitter": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
"integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
},
"@types/cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
"integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
},
"@types/cors": {
"version": "2.8.12",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
"integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
},
"@types/node": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz",
"integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ=="
},
"accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"requires": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
}
},
"base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
"integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
},
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
},
"cookie": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
"integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
},
"cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"engine.io": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
"integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
"requires": {
"@types/cookie": "^0.4.1",
"@types/cors": "^2.8.12",
"@types/node": ">=10.0.0",
"accepts": "~1.3.4",
"base64id": "2.0.0",
"cookie": "~0.4.1",
"cors": "~2.8.5",
"debug": "~4.3.1",
"engine.io-parser": "~5.0.3",
"ws": "~8.2.3"
},
"dependencies": {
"ws": {
"version": "8.2.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA=="
}
}
},
"engine.io-parser": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
"integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
},
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"requires": {
"mime-db": "1.52.0"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
},
"socket.io": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz",
"integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==",
"requires": {
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
"engine.io": "~6.2.0",
"socket.io-adapter": "~2.4.0",
"socket.io-parser": "~4.0.4"
}
},
"socket.io-adapter": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
"integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
},
"socket.io-parser": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz",
"integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==",
"requires": {
"@types/component-emitter": "^1.2.10",
"component-emitter": "~1.3.0",
"debug": "~4.3.1"
}
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
},
"ws": {
"version": "8.8.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz",
"integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ=="
}
}
}

View File

@@ -0,0 +1,16 @@
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node-dev index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"socket.io": "^4.5.1",
"ws": "^8.8.0"
}
}

View File

@@ -0,0 +1,17 @@
x64:
firstOrDefaultFilePatterns:
- '!**/node_modules'
- '!build{,/**/*}'
- '!build{,/**/*}'
- '*'
- package.json
- '!**/*.{iml,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,suo,xproj,cc,d.ts,pdb}'
- '!**/._*'
- '!**/electron-builder.{yaml,yml,json,json5,toml}'
- '!**/{.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,.DS_Store,thumbs.db,.gitignore,.gitkeep,.gitattributes,.npmignore,.idea,.vs,.flowconfig,.jshintrc,.eslintrc,.circleci,.yarn-integrity,.yarn-metadata.json,yarn-error.log,yarn.lock,package-lock.json,npm-debug.log,appveyor.yml,.travis.yml,circle.yml,.nyc_output}'
- '!.yarn{,/**/*}'
- '!.editorconfig'
- '!.yarnrc.yml'
nodeModuleFilePatterns:
- '**/*'
- '*'

View File

@@ -0,0 +1,16 @@
directories:
output: ./build
buildResources: build
appId: com.abandon.qq
productName: Abandon
asar: false
copyright: Copyright © 2022 abandon
extends: null
files:
- filter:
- ./*
win:
icon: ./logo.ico
target:
- msi
electronVersion: 19.0.8

View File

@@ -0,0 +1,21 @@
Copyright (c) Electron contributors
Copyright (c) 2013-2020 GitHub Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<textarea name="" placeholder="输入内容" id="" cols="30" rows="10"></textarea>
<button>发送</button>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
var ws = new WebSocket("ws://127.0.0.1:8080")
//以下三个均可省略不写,只需要一定要onmessage
// ws.onopen = function () {
// console.log("连接已经打开");
// }
// ws.onerror = function () {
// console.log("连接产生错误");
// }
// ws.onclose = function () {
// console.log("连接关闭");
// }
ws.onmessage = function (e) {
console.log("收到后端给的消息",e.data);
}
$("button").click(function (){
ws.send($("textarea").val())
console.log($("textarea").val());
})
</script>
</html>

View File

@@ -0,0 +1,42 @@
// main.js
// Modules to control application life and create native browser window
const { app, BrowserWindow } = require('electron')
const path = require('path')
const createWindow = () => {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
// and load the index.html of the app.
mainWindow.loadFile('index.html')
// Open the DevTools.
// mainWindow.webContents.openDevTools()
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
createWindow()
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit()
})

View File

@@ -0,0 +1,8 @@
{
"name": "frontend",
"version": "1.0.0",
"description": "",
"main": "main.js",
"author": "abandon",
"license": "ISC"
}

View File

@@ -0,0 +1 @@
{"file_format_version": "1.0.0", "ICD": {"library_path": ".\\vk_swiftshader.dll", "api_version": "1.0.5"}}

View File

@@ -0,0 +1,24 @@
body,h1,h2,h3,h4,h5,h6,ul,li,p {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
input {
border: none;
outline: none;
padding: 0;
}
a {
text-decoration: none;
color: #333;
}
img {
width: 100%;
}

View File

@@ -0,0 +1,207 @@
@font-face {
font-family: "iconfont"; /* Project id 2124975 */
src: url('iconfont.woff2?t=1657340639264') format('woff2'),
url('iconfont.woff?t=1657340639264') format('woff'),
url('iconfont.ttf?t=1657340639264') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-jinyan:before {
content: "\e60d";
}
.icon-smiling:before {
content: "\e63f";
}
.icon-shake:before {
content: "\e607";
}
.icon-gallery:before {
content: "\e62a";
}
.icon-zuijinliulan:before {
content: "\e62f";
}
.icon-fanhui:before {
content: "\e606";
}
.icon-weixin1:before {
content: "\e64f";
}
.icon-ziyuan:before {
content: "\e620";
}
.icon-zhuangtai:before {
content: "\e655";
}
.icon-eye:before {
content: "\e61b";
}
.icon-eye1:before {
content: "\e605";
}
.icon-goumai:before {
content: "\e73b";
}
.icon-tupian1:before {
content: "\e61e";
}
.icon-shipin:before {
content: "\e60c";
}
.icon-vip:before {
content: "\e6ba";
}
.icon-zongdailizhanghao:before {
content: "\e618";
}
.icon-zitiyanse:before {
content: "\ec85";
}
.icon-weixiao:before {
content: "\e603";
}
.icon-lahei:before {
content: "\e627";
}
.icon-xinbaniconshangchuan_huaban:before {
content: "\e602";
}
.icon-gif:before {
content: "\e70d";
}
.icon-zhendong:before {
content: "\e638";
}
.icon-tubiaozhizuomoban:before {
content: "\e601";
}
.icon-wushuju:before {
content: "\e642";
}
.icon-aixin:before {
content: "\e640";
}
.icon-xiangxia:before {
content: "\e636";
}
.icon-fenxiang:before {
content: "\e634";
}
.icon-xin:before {
content: "\e698";
}
.icon-clean:before {
content: "\e616";
}
.icon-qianjin-tongyong:before {
content: "\e610";
}
.icon-qianjin:before {
content: "\e604";
}
.icon-zuji:before {
content: "\e600";
}
.icon-guanyu:before {
content: "\e637";
}
.icon-xieyiguanli:before {
content: "\e6b2";
}
.icon-shengji:before {
content: "\e63c";
}
.icon-back1:before {
content: "\e619";
}
.icon-tuijian:before {
content: "\e60f";
}
.icon-huo:before {
content: "\e6c0";
}
.icon-home:before {
content: "\e617";
}
.icon-jigou:before {
content: "\e61a";
}
.icon-wo:before {
content: "\e611";
}
.icon-edit:before {
content: "\e696";
}
.icon-search:before {
content: "\e60a";
}
.icon-taozi1:before {
content: "\e61c";
}
.icon-taozi:before {
content: "\e89d";
}
.icon-me:before {
content: "\e61f";
}
.icon-gengduo:before {
content: "\e7ac";
}
.icon-dingwei:before {
content: "\e63e";
}

View File

@@ -0,0 +1,233 @@
body {
display: flex;
flex-direction: column;
background: rgb(245,246,247);
}
.header {
width: 100%;
height: 45px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 15px;
border-bottom: 1px solid #e8e8e8;
}
.header_left {
display: flex;
align-items: center;
}
.header_left img {
width: 30px;
height: 30px;
margin-right: 10px;
border-radius: 100%;
}
.content {
display: flex;
height: calc(100vh - 45px - 150px);
}
.content .content_left {
width: 80%;
height: 100%;
overflow-y: scroll;
padding: 15px;
border-right: 1px solid #e8e8e8;
}
.content .content_left li {
display: flex;
margin-bottom: 25px;
}
.content .content_left li .avth {
width: 30px;
height: 30px;
margin-right: 10px;
border-radius: 100%;
}
.content li .message {}
.content li .message .name {
font-size: 14px;
}
.content li .message .message_text {
overflow: hidden;
border-radius: 4px;
word-break: break-all;
max-width: calc(100vw - 274px);
background: #fff;
color: #000;
}
.message_text div{
padding: 5px 10px;
}
.content_left .right {
justify-content: flex-end;
}
.content_left .right .avth {
order: 2;
margin-right: 0 !important;
margin-left: 10px;
}
.content_left .right .name {
text-align: right;
}
.content_left .right .message_text {
color: #fff !important;
background: rgb(30,110,255) !important;
}
.content_left .system {
justify-content: center;
}
.content_left .system span {
background: #d8d3d3;
color: #878686;
padding: 2px 10px;
border-radius: 4px;
font-size: 12px;
}
.content_right {
width: 20%;
height: 100%;
padding: 6px 15px;
}
.content_rightTop{
display: flex;
}
.content_rightTop .title{
height: 45px;
line-height: 45px;
border-bottom: 1px solid #e8e8e8;
margin-bottom: 15px;
}
.content_rightTop i{
font-size: 18px;
margin-right: 20px;
cursor: pointer;
}
.content_right ul {
height: calc(100% - 60px);
overflow-y: scroll;
}
.content_right ul li {
display: flex;
height: 35px;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.content_right .user {}
.content_right i {}
.content_right .user img {
width: 25px;
height: 25px;
margin-right: 5px;
border-radius: 100%;
}
.content_right .user span {}
.footer {
padding: 0 15px;
border-top: 1px solid #e8e8e8;
height: 150px;
}
.footer_menu {
height: 35px;
display: flex;
align-items: center;
box-sizing: border-box;
position: relative;
}
.footer_menu i {
font-size: 18px;
margin-right: 20px;
cursor: pointer;
}
.footer_input {
outline: none;
width: 100%;
height: calc(150px - 36px);
font-size: 16px;
overflow-y: scroll;
line-height: 19px;
}
.footer_input .smiling_img {
width: 25px;
height: 25px;
}
.footer_input .gif_img {
width: 80px;
height: 80px;
vertical-align: bottom;
}
.footer_topmenu {
position: absolute;
width: 400px;
height: 246px;
background: #fff;
bottom: 35px;
left: -15px;
box-shadow: 1px -3px 10px #c3bebe;
border-radius: 4px;
}
.footer_topmenu .menu_title {
height: 40px;
line-height: 40px;
padding: 0 10px;
border-bottom: 1px solid #e8e8e8;
box-sizing: border-box;
}
.footer_topmenu .menu_content {
overflow-y: scroll;
padding: 0 10px;
width: 100%;
height: calc(100% - 75px);
}
.menu_content div {
display: none;
}
.menu_content .active {
display: block !important;
}
.footer_topmenu .menu_footer {
height: 35px;
display: flex;
align-items: center;
border-top: 1px solid #e8e8e8;
box-sizing: border-box;
}
.footer_topmenu .menu_footer li {
margin: 0px 10px;
cursor: pointer;
}
.menu_footer .active {
color: red;
}
.smiling {
padding: 10px 0;
}
.smiling img {
width: 25px;
height: 25px;
cursor: pointer;
}
.gif img {
width: 89px;
height: 89px;
}
.smiling_img {
width: 25px;
height: 25px;
}

View File

@@ -0,0 +1,27 @@
.login {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 0 30px;
height: 100vh;
}
.login img {
width: 100px;
border-radius: 100%;
margin-bottom: 30px;
}
.login input {
height: 40px;
width: 100%;
border-bottom: 1px solid #e8e8e8;
margin-bottom: 15px;
}
.login .enter {
margin-top: 20px;
font-size: 13px;
cursor: pointer;
}
.modal-body img {
width: 50px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

Some files were not shown because too many files have changed in this diff Show More