@ -0,0 +1,3 @@ |
|||
> 1% |
|||
last 2 versions |
|||
not dead |
|||
@ -0,0 +1,8 @@ |
|||
# just a flag |
|||
NODE_ENV = 'development' |
|||
|
|||
# base api |
|||
VUE_APP_BASE_API = '192.168.66.16:8007' |
|||
|
|||
#VUE_CLI_BABEL_TRANSPILE_MODULES:true是为了路由懒加载 |
|||
VUE_CLI_BABEL_TRANSPILE_MODULES = true |
|||
@ -0,0 +1,26 @@ |
|||
.DS_Store |
|||
node_modules |
|||
/dist |
|||
|
|||
|
|||
# local env files |
|||
.env.local |
|||
.env.*.local |
|||
|
|||
# Log files |
|||
npm-debug.log* |
|||
yarn-debug.log* |
|||
yarn-error.log* |
|||
pnpm-debug.log* |
|||
|
|||
# Editor directories and files |
|||
.idea |
|||
.vscode |
|||
*.suo |
|||
*.ntvs* |
|||
*.njsproj |
|||
*.sln |
|||
*.sw? |
|||
|
|||
#Electron-builder output |
|||
/dist_electron |
|||
@ -0,0 +1,201 @@ |
|||
Apache License |
|||
Version 2.0, January 2004 |
|||
http://www.apache.org/licenses/ |
|||
|
|||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |
|||
|
|||
1. Definitions. |
|||
|
|||
"License" shall mean the terms and conditions for use, reproduction, |
|||
and distribution as defined by Sections 1 through 9 of this document. |
|||
|
|||
"Licensor" shall mean the copyright owner or entity authorized by |
|||
the copyright owner that is granting the License. |
|||
|
|||
"Legal Entity" shall mean the union of the acting entity and all |
|||
other entities that control, are controlled by, or are under common |
|||
control with that entity. For the purposes of this definition, |
|||
"control" means (i) the power, direct or indirect, to cause the |
|||
direction or management of such entity, whether by contract or |
|||
otherwise, or (ii) ownership of fifty percent (50%) or more of the |
|||
outstanding shares, or (iii) beneficial ownership of such entity. |
|||
|
|||
"You" (or "Your") shall mean an individual or Legal Entity |
|||
exercising permissions granted by this License. |
|||
|
|||
"Source" form shall mean the preferred form for making modifications, |
|||
including but not limited to software source code, documentation |
|||
source, and configuration files. |
|||
|
|||
"Object" form shall mean any form resulting from mechanical |
|||
transformation or translation of a Source form, including but |
|||
not limited to compiled object code, generated documentation, |
|||
and conversions to other media types. |
|||
|
|||
"Work" shall mean the work of authorship, whether in Source or |
|||
Object form, made available under the License, as indicated by a |
|||
copyright notice that is included in or attached to the work |
|||
(an example is provided in the Appendix below). |
|||
|
|||
"Derivative Works" shall mean any work, whether in Source or Object |
|||
form, that is based on (or derived from) the Work and for which the |
|||
editorial revisions, annotations, elaborations, or other modifications |
|||
represent, as a whole, an original work of authorship. For the purposes |
|||
of this License, Derivative Works shall not include works that remain |
|||
separable from, or merely link (or bind by name) to the interfaces of, |
|||
the Work and Derivative Works thereof. |
|||
|
|||
"Contribution" shall mean any work of authorship, including |
|||
the original version of the Work and any modifications or additions |
|||
to that Work or Derivative Works thereof, that is intentionally |
|||
submitted to Licensor for inclusion in the Work by the copyright owner |
|||
or by an individual or Legal Entity authorized to submit on behalf of |
|||
the copyright owner. For the purposes of this definition, "submitted" |
|||
means any form of electronic, verbal, or written communication sent |
|||
to the Licensor or its representatives, including but not limited to |
|||
communication on electronic mailing lists, source code control systems, |
|||
and issue tracking systems that are managed by, or on behalf of, the |
|||
Licensor for the purpose of discussing and improving the Work, but |
|||
excluding communication that is conspicuously marked or otherwise |
|||
designated in writing by the copyright owner as "Not a Contribution." |
|||
|
|||
"Contributor" shall mean Licensor and any individual or Legal Entity |
|||
on behalf of whom a Contribution has been received by Licensor and |
|||
subsequently incorporated within the Work. |
|||
|
|||
2. Grant of Copyright License. Subject to the terms and conditions of |
|||
this License, each Contributor hereby grants to You a perpetual, |
|||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
|||
copyright license to reproduce, prepare Derivative Works of, |
|||
publicly display, publicly perform, sublicense, and distribute the |
|||
Work and such Derivative Works in Source or Object form. |
|||
|
|||
3. Grant of Patent License. Subject to the terms and conditions of |
|||
this License, each Contributor hereby grants to You a perpetual, |
|||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
|||
(except as stated in this section) patent license to make, have made, |
|||
use, offer to sell, sell, import, and otherwise transfer the Work, |
|||
where such license applies only to those patent claims licensable |
|||
by such Contributor that are necessarily infringed by their |
|||
Contribution(s) alone or by combination of their Contribution(s) |
|||
with the Work to which such Contribution(s) was submitted. If You |
|||
institute patent litigation against any entity (including a |
|||
cross-claim or counterclaim in a lawsuit) alleging that the Work |
|||
or a Contribution incorporated within the Work constitutes direct |
|||
or contributory patent infringement, then any patent licenses |
|||
granted to You under this License for that Work shall terminate |
|||
as of the date such litigation is filed. |
|||
|
|||
4. Redistribution. You may reproduce and distribute copies of the |
|||
Work or Derivative Works thereof in any medium, with or without |
|||
modifications, and in Source or Object form, provided that You |
|||
meet the following conditions: |
|||
|
|||
(a) You must give any other recipients of the Work or |
|||
Derivative Works a copy of this License; and |
|||
|
|||
(b) You must cause any modified files to carry prominent notices |
|||
stating that You changed the files; and |
|||
|
|||
(c) You must retain, in the Source form of any Derivative Works |
|||
that You distribute, all copyright, patent, trademark, and |
|||
attribution notices from the Source form of the Work, |
|||
excluding those notices that do not pertain to any part of |
|||
the Derivative Works; and |
|||
|
|||
(d) If the Work includes a "NOTICE" text file as part of its |
|||
distribution, then any Derivative Works that You distribute must |
|||
include a readable copy of the attribution notices contained |
|||
within such NOTICE file, excluding those notices that do not |
|||
pertain to any part of the Derivative Works, in at least one |
|||
of the following places: within a NOTICE text file distributed |
|||
as part of the Derivative Works; within the Source form or |
|||
documentation, if provided along with the Derivative Works; or, |
|||
within a display generated by the Derivative Works, if and |
|||
wherever such third-party notices normally appear. The contents |
|||
of the NOTICE file are for informational purposes only and |
|||
do not modify the License. You may add Your own attribution |
|||
notices within Derivative Works that You distribute, alongside |
|||
or as an addendum to the NOTICE text from the Work, provided |
|||
that such additional attribution notices cannot be construed |
|||
as modifying the License. |
|||
|
|||
You may add Your own copyright statement to Your modifications and |
|||
may provide additional or different license terms and conditions |
|||
for use, reproduction, or distribution of Your modifications, or |
|||
for any such Derivative Works as a whole, provided Your use, |
|||
reproduction, and distribution of the Work otherwise complies with |
|||
the conditions stated in this License. |
|||
|
|||
5. Submission of Contributions. Unless You explicitly state otherwise, |
|||
any Contribution intentionally submitted for inclusion in the Work |
|||
by You to the Licensor shall be under the terms and conditions of |
|||
this License, without any additional terms or conditions. |
|||
Notwithstanding the above, nothing herein shall supersede or modify |
|||
the terms of any separate license agreement you may have executed |
|||
with Licensor regarding such Contributions. |
|||
|
|||
6. Trademarks. This License does not grant permission to use the trade |
|||
names, trademarks, service marks, or product names of the Licensor, |
|||
except as required for reasonable and customary use in describing the |
|||
origin of the Work and reproducing the content of the NOTICE file. |
|||
|
|||
7. Disclaimer of Warranty. Unless required by applicable law or |
|||
agreed to in writing, Licensor provides the Work (and each |
|||
Contributor provides its Contributions) on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
|||
implied, including, without limitation, any warranties or conditions |
|||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |
|||
PARTICULAR PURPOSE. You are solely responsible for determining the |
|||
appropriateness of using or redistributing the Work and assume any |
|||
risks associated with Your exercise of permissions under this License. |
|||
|
|||
8. Limitation of Liability. In no event and under no legal theory, |
|||
whether in tort (including negligence), contract, or otherwise, |
|||
unless required by applicable law (such as deliberate and grossly |
|||
negligent acts) or agreed to in writing, shall any Contributor be |
|||
liable to You for damages, including any direct, indirect, special, |
|||
incidental, or consequential damages of any character arising as a |
|||
result of this License or out of the use or inability to use the |
|||
Work (including but not limited to damages for loss of goodwill, |
|||
work stoppage, computer failure or malfunction, or any and all |
|||
other commercial damages or losses), even if such Contributor |
|||
has been advised of the possibility of such damages. |
|||
|
|||
9. Accepting Warranty or Additional Liability. While redistributing |
|||
the Work or Derivative Works thereof, You may choose to offer, |
|||
and charge a fee for, acceptance of support, warranty, indemnity, |
|||
or other liability obligations and/or rights consistent with this |
|||
License. However, in accepting such obligations, You may act only |
|||
on Your own behalf and on Your sole responsibility, not on behalf |
|||
of any other Contributor, and only if You agree to indemnify, |
|||
defend, and hold each Contributor harmless for any liability |
|||
incurred by, or claims asserted against, such Contributor by reason |
|||
of your accepting any such warranty or additional liability. |
|||
|
|||
END OF TERMS AND CONDITIONS |
|||
|
|||
APPENDIX: How to apply the Apache License to your work. |
|||
|
|||
To apply the Apache License to your work, attach the following |
|||
boilerplate notice, with the fields enclosed by brackets "[]" |
|||
replaced with your own identifying information. (Don't include |
|||
the brackets!) The text should be enclosed in the appropriate |
|||
comment syntax for the file format. We also recommend that a |
|||
file or class name and description of purpose be included on the |
|||
same "printed page" as the copyright notice for easier |
|||
identification within third-party archives. |
|||
|
|||
Copyright [yyyy] [name of copyright owner] |
|||
|
|||
Licensed under the Apache License, Version 2.0 (the "License"); |
|||
you may not use this file except in compliance with the License. |
|||
You may obtain a copy of the License at |
|||
|
|||
http://www.apache.org/licenses/LICENSE-2.0 |
|||
|
|||
Unless required by applicable law or agreed to in writing, software |
|||
distributed under the License is distributed on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
See the License for the specific language governing permissions and |
|||
limitations under the License. |
|||
@ -0,0 +1,191 @@ |
|||
# IM即时聊天 |
|||
|
|||
### 介绍 |
|||
Raingad-IM是一个开源的即时通信demo,需要前后端配合使用,主要用于学习交流,为大家提供即时通讯的开发思路,许多功能需要自行开发,开发的初衷旨在快速建立企业内部通讯系统、内网交流、社区交流。 |
|||
|
|||
| 类型 | 链接 |备注| |
|||
| --------- | ---- |---- | |
|||
| 前端源码(含后台管理) | https://gitee.com/raingad/im-chat-front | 只维护后台管理 | |
|||
| 后端源码(已编译前端) | https://gitee.com/raingad/im-instant-chat | | |
|||
| web端演示 | http://im.raingad.com/index.html | | |
|||
| 移动端H5演示 | http://im.raingad.com/h5 | | |
|||
| 桌面端/安卓端 | 请进前端演示页下载 | 持续更新 | |
|||
|
|||
体验账号:13800000002 密码:123456 |
|||
|
|||
尾号2、3、4......18、19、20 都是 |
|||
|
|||
体验账号:13800000020 密码:123456 |
|||
|
|||
### 支持功能 |
|||
|
|||
- 支持单聊和群聊,支持发送表情、图片、语音、视频和文件消息 |
|||
- 单聊支持消息已读未读的状态显示,在线状态显示 |
|||
- 群聊创建、删除和群成员管理、群公告、群禁言、@群成员等 |
|||
- 支持置顶联系人,消息免打扰; |
|||
- 支持设置新消息声音提醒,浏览器通知 |
|||
- 支持管理员撤回群成员消息,支持群成员不能互相添加好友 |
|||
- 支持一对一音视频通话(已打通web端和移动端,小程序不支持) |
|||
- 支持文件、图片和绝大部分媒体文件在线预览 |
|||
- 支持移动端(由uniapp开发,可打包H5、APP和小程序) |
|||
- 全新支持企业模式和社区模式,社区模式支持注册、添加好友功能 |
|||
- APP支持通知栏消息推送(需要开启unipush模块,并开启手机通知权限,仅支持APP在线推送) |
|||
- 支持简易后台管理,包括用户管理、群组管理、系统设置等 |
|||
|
|||
### 最新更新 |
|||
请查看右侧发行版更新日志 |
|||
|
|||
**v6.0.0** (2025年5月20日) |
|||
|
|||
1. 新增移动端和桌面端国际化,可以自由新增语言。 |
|||
2. 新增群头像、消息已读、消息转发等消息队列处理;采用默认头像,取消后台生成文字头像,提升性能。 |
|||
3. 新增定时清理消息可以删除文件,避免文件占用太大空间。 |
|||
4. 移动端调整大量的UI界面和配色,更换了导航栏图标。 |
|||
5. 移动端更换了新的保活插件,支持IOS,支持APP提示直接去系统设置消息通知权限和调整省电策略。 |
|||
6. 移动端会话列表支持下拉刷新消息,支持双击导航栏消息图标,快速定位未读会话和@我的会话。 |
|||
7. 移动端聊天记录列表采用虚拟列表,再多的数据也不对卡顿,采用z-paging,可以丝滑加载更多聊天记录。 |
|||
8. 移动端聊天记录滚动时,可以看到新消息数量。 |
|||
9. web端后台管理新增建议用户数据统计,可以查看在线用户数和设备数。 |
|||
10. 桌面端新增音视频通话窗口移动,支持最小化到右下角,让聊天无遮挡,通话体验更佳! |
|||
11. 优化Lemon-IMUI组件的国际化,以及更新chatarea组件为最新版本。 |
|||
12. 修复若干BUG! |
|||
|
|||
### 软件架构 |
|||
|
|||
后端技术栈:`thinkphp6+workerman+redis` |
|||
|
|||
前端技术栈:`vue2+Lemon-IMUI+element-UI` |
|||
|
|||
桌面端:`vue2+Lemon-IMUI+element-UI + electron` |
|||
|
|||
移动端:`uniapp for vue3 + pinia` |
|||
|
|||
### 安装教程 |
|||
1. 克隆代码到本地: |
|||
``` |
|||
git clone https://gitee.com/raingad/im-chat-front.git |
|||
``` |
|||
2. 进入项目目录,执行: |
|||
``` |
|||
npm install |
|||
``` |
|||
3. 开发调试 |
|||
``` |
|||
npm run serve |
|||
``` |
|||
|
|||
4. 修改服务端域名 |
|||
|
|||
修改项目根目录下的 `.env.development` 文件,将VUE_APP_BASE_API的值改为自己的后端域名,构建后放服务端在运行时直接获取服务端的域名。 |
|||
|
|||
|
|||
5. 构建 |
|||
``` |
|||
npm run build |
|||
``` |
|||
|
|||
6. 将打包好的文件(dist目录)里面的所有文件覆盖到后端的public目录下即可。 |
|||
|
|||
### 音视频通话组件 |
|||
> 新的音视频通话组件已上线,完全开源,纯原生webrtc实现,不依赖任何第三方通讯组件,可以和移动端进行互通,这里就不在介绍了,自己看源码,下面将介绍旧版的音视频组件,采用的是peerjs组件。 |
|||
|
|||
> peer音视频通话是一个独立的组件(@/components/message/webrtc/peer.vue),仅支持点对点通话,JS部分已加密且未开源,仅用于效果展示和学习,也可以将组件用到其他项目,但是依赖于element-ui。如果需要未加密源码,请进行捐赠并向作者(进交流群)索取未加密的源码,捐赠金额:200元/次! |
|||
|
|||
#### 使用方法 |
|||
|
|||
引入组件 |
|||
``` javascript |
|||
//组件依赖于peerjs,需要在index.html中引入 |
|||
|
|||
<script src="https://unpkg.com/peerjs@1.4.7/dist/peerjs.min.js"></script> |
|||
|
|||
// 在需要用到组件的地方导入组件,最好是全局的 |
|||
import webrtc from "@/components/webrtc"; |
|||
``` |
|||
|
|||
注册组件 |
|||
|
|||
``` javascript |
|||
export default { |
|||
name: "app", |
|||
components: { |
|||
webrtc |
|||
}, |
|||
``` |
|||
使用组件 |
|||
``` javascript |
|||
<webrtc :contact="currentChat" :config="webrtcConfig" alias="raingad" :userInfo="user" ref="webrtc" :key="componentKey"></webrtc> |
|||
``` |
|||
|
|||
#### 组件参数 |
|||
|
|||
| 参数 | 类型 | 备注 | |
|||
| --------- | ---- | ---- | |
|||
| contact | 对象 | 当前窗口的联系人 | |
|||
| userInfo | 对象 | 当前登录用户 | |
|||
| config | 对象 | peer的配置信息,用于点对点传输 | |
|||
| alias | 字符串 | 用于生成唯一通讯id的前缀 | |
|||
|
|||
#### 组件方法 |
|||
|
|||
``` javascript |
|||
//参数为true时表示视频通话,为false时为语音通话。 |
|||
this.$refs.webrtc.called(true); |
|||
``` |
|||
#### 已知BUG |
|||
1、由于浏览器限制,如果登录进聊天系统没有进行过交互,音视频通话无法播放响铃,导致通话无法正常进行。 |
|||
|
|||
### 安装部署服务 |
|||
|
|||
服务器要求: |
|||
| 所需环境 | 版本 | 备注 | 推荐版本 | |
|||
| --------- | ---- | ---- | ---| |
|||
| linux | >= 7.0 | 以下的版本未做测试 | 7.9 | |
|||
| nginx | >= 1.17 | | 最新的 | |
|||
| php | >= 7.1 | 不兼容8和7.4 | 7.3 | |
|||
| mysql | >= 5.7 | 必须要5.7及以上 | 5.7 | |
|||
| redis | >= 5.0 | | 7.0 | |
|||
|
|||
前端项目运行要求: |
|||
|
|||
| 所需环境 | 版本 | 备注 | |
|||
| --------- | ---- | ---- | |
|||
| node | >= 14.0.0 | 14以下的版本未做测试 | |
|||
| npm | >= 7.0.0 | | |
|||
|
|||
|
|||
作者提供本系统的安装服务,包括后端和前端部署到线上,可手把手教学,保证项目的完美运行,200元/次,安装服务可赠送详细的安装教程以及接口文档,如有需要可以进群联系作者! |
|||
|
|||
### 交流群 |
|||
|
|||
请先认真查看本页文档,如果有什么问题,可以留言,有购买移动端需求可以加入我们的QQ群。 |
|||
|
|||
【仅限有问题或者购买移动端需求才可以申请加入交流群(长时间不活跃的将被定期清理),加群前请先点Star,否则不予通过】 |
|||
|
|||
[QQ 交流群:1031495465](https://qm.qq.com/q/RgHdvLGiMk) |
|||
|
|||
### 部分截图 |
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
@ -0,0 +1,3 @@ |
|||
module.exports = { |
|||
presets: ["@vue/cli-plugin-babel/preset"], |
|||
}; |
|||
@ -0,0 +1,214 @@ |
|||
x64: |
|||
firstOrDefaultFilePatterns: |
|||
- '!**/node_modules' |
|||
- '!electron_output{,/**/*}' |
|||
- '**' |
|||
- 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: |
|||
- '**/*' |
|||
- '**' |
|||
nsis: |
|||
script: |- |
|||
!include "E:\Projects\im-chat-front\node_modules\app-builder-lib\templates\nsis\include\StdUtils.nsh" |
|||
!addincludedir "E:\Projects\im-chat-front\node_modules\app-builder-lib\templates\nsis\include" |
|||
!macro _isUpdated _a _b _t _f |
|||
${StdUtils.TestParameter} $R9 "updated" |
|||
StrCmp "$R9" "true" `${_t}` `${_f}` |
|||
!macroend |
|||
!define isUpdated `"" isUpdated ""` |
|||
|
|||
!macro _isForceRun _a _b _t _f |
|||
${StdUtils.TestParameter} $R9 "force-run" |
|||
StrCmp "$R9" "true" `${_t}` `${_f}` |
|||
!macroend |
|||
!define isForceRun `"" isForceRun ""` |
|||
|
|||
!macro _isKeepShortcuts _a _b _t _f |
|||
${StdUtils.TestParameter} $R9 "keep-shortcuts" |
|||
StrCmp "$R9" "true" `${_t}` `${_f}` |
|||
!macroend |
|||
!define isKeepShortcuts `"" isKeepShortcuts ""` |
|||
|
|||
!macro _isNoDesktopShortcut _a _b _t _f |
|||
${StdUtils.TestParameter} $R9 "no-desktop-shortcut" |
|||
StrCmp "$R9" "true" `${_t}` `${_f}` |
|||
!macroend |
|||
!define isNoDesktopShortcut `"" isNoDesktopShortcut ""` |
|||
|
|||
!macro _isDeleteAppData _a _b _t _f |
|||
${StdUtils.TestParameter} $R9 "delete-app-data" |
|||
StrCmp "$R9" "true" `${_t}` `${_f}` |
|||
!macroend |
|||
!define isDeleteAppData `"" isDeleteAppData ""` |
|||
|
|||
!macro _isForAllUsers _a _b _t _f |
|||
${StdUtils.TestParameter} $R9 "allusers" |
|||
StrCmp "$R9" "true" `${_t}` `${_f}` |
|||
!macroend |
|||
!define isForAllUsers `"" isForAllUsers ""` |
|||
|
|||
!macro _isForCurrentUser _a _b _t _f |
|||
${StdUtils.TestParameter} $R9 "currentuser" |
|||
StrCmp "$R9" "true" `${_t}` `${_f}` |
|||
!macroend |
|||
!define isForCurrentUser `"" isForCurrentUser ""` |
|||
|
|||
!macro addLangs |
|||
!insertmacro MUI_LANGUAGE "English" |
|||
!insertmacro MUI_LANGUAGE "German" |
|||
!insertmacro MUI_LANGUAGE "French" |
|||
!insertmacro MUI_LANGUAGE "SpanishInternational" |
|||
!insertmacro MUI_LANGUAGE "SimpChinese" |
|||
!insertmacro MUI_LANGUAGE "TradChinese" |
|||
!insertmacro MUI_LANGUAGE "Japanese" |
|||
!insertmacro MUI_LANGUAGE "Korean" |
|||
!insertmacro MUI_LANGUAGE "Italian" |
|||
!insertmacro MUI_LANGUAGE "Dutch" |
|||
!insertmacro MUI_LANGUAGE "Danish" |
|||
!insertmacro MUI_LANGUAGE "Swedish" |
|||
!insertmacro MUI_LANGUAGE "Norwegian" |
|||
!insertmacro MUI_LANGUAGE "Finnish" |
|||
!insertmacro MUI_LANGUAGE "Russian" |
|||
!insertmacro MUI_LANGUAGE "Portuguese" |
|||
!insertmacro MUI_LANGUAGE "PortugueseBR" |
|||
!insertmacro MUI_LANGUAGE "Polish" |
|||
!insertmacro MUI_LANGUAGE "Ukrainian" |
|||
!insertmacro MUI_LANGUAGE "Czech" |
|||
!insertmacro MUI_LANGUAGE "Slovak" |
|||
!insertmacro MUI_LANGUAGE "Hungarian" |
|||
!insertmacro MUI_LANGUAGE "Arabic" |
|||
!insertmacro MUI_LANGUAGE "Turkish" |
|||
!insertmacro MUI_LANGUAGE "Thai" |
|||
!insertmacro MUI_LANGUAGE "Vietnamese" |
|||
!macroend |
|||
|
|||
!addplugindir /x86-unicode "C:\Users\Administrator\AppData\Local\electron-builder\Cache\nsis\nsis-resources-3.4.1\plugins\x86-unicode" |
|||
!include "C:\Users\ADMINI~1\AppData\Local\Temp\t-bbX3fY\1-messages.nsh" |
|||
!include "C:\Users\ADMINI~1\AppData\Local\Temp\t-bbX3fY\0-messages.nsh" |
|||
|
|||
Var newStartMenuLink |
|||
Var oldStartMenuLink |
|||
Var newDesktopLink |
|||
Var oldDesktopLink |
|||
Var oldShortcutName |
|||
Var oldMenuDirectory |
|||
|
|||
!include "common.nsh" |
|||
!include "MUI2.nsh" |
|||
!include "multiUser.nsh" |
|||
!include "allowOnlyOneInstallerInstance.nsh" |
|||
|
|||
!ifdef INSTALL_MODE_PER_ALL_USERS |
|||
!ifdef BUILD_UNINSTALLER |
|||
RequestExecutionLevel user |
|||
!else |
|||
RequestExecutionLevel admin |
|||
!endif |
|||
!else |
|||
RequestExecutionLevel user |
|||
!endif |
|||
|
|||
!ifdef BUILD_UNINSTALLER |
|||
SilentInstall silent |
|||
!else |
|||
Var appExe |
|||
Var launchLink |
|||
!endif |
|||
|
|||
!ifdef ONE_CLICK |
|||
!include "oneClick.nsh" |
|||
!else |
|||
!include "assistedInstaller.nsh" |
|||
!endif |
|||
|
|||
!insertmacro addLangs |
|||
|
|||
!ifmacrodef customHeader |
|||
!insertmacro customHeader |
|||
!endif |
|||
|
|||
Function .onInit |
|||
SetOutPath $INSTDIR |
|||
${LogSet} on |
|||
|
|||
!ifmacrodef preInit |
|||
!insertmacro preInit |
|||
!endif |
|||
|
|||
!ifdef DISPLAY_LANG_SELECTOR |
|||
!insertmacro MUI_LANGDLL_DISPLAY |
|||
!endif |
|||
|
|||
!ifdef BUILD_UNINSTALLER |
|||
WriteUninstaller "${UNINSTALLER_OUT_FILE}" |
|||
!insertmacro quitSuccess |
|||
!else |
|||
!insertmacro check64BitAndSetRegView |
|||
|
|||
!ifdef ONE_CLICK |
|||
!insertmacro ALLOW_ONLY_ONE_INSTALLER_INSTANCE |
|||
!else |
|||
${IfNot} ${UAC_IsInnerInstance} |
|||
!insertmacro ALLOW_ONLY_ONE_INSTALLER_INSTANCE |
|||
${EndIf} |
|||
!endif |
|||
|
|||
!insertmacro initMultiUser |
|||
|
|||
!ifmacrodef customInit |
|||
!insertmacro customInit |
|||
!endif |
|||
|
|||
!ifmacrodef addLicenseFiles |
|||
InitPluginsDir |
|||
!insertmacro addLicenseFiles |
|||
!endif |
|||
!endif |
|||
FunctionEnd |
|||
|
|||
!ifndef BUILD_UNINSTALLER |
|||
!include "installUtil.nsh" |
|||
!endif |
|||
|
|||
Section "install" |
|||
!ifndef BUILD_UNINSTALLER |
|||
# If we're running a silent upgrade of a per-machine installation, elevate so extracting the new app will succeed. |
|||
# For a non-silent install, the elevation will be triggered when the install mode is selected in the UI, |
|||
# but that won't be executed when silent. |
|||
!ifndef INSTALL_MODE_PER_ALL_USERS |
|||
!ifndef ONE_CLICK |
|||
${if} $hasPerMachineInstallation == "1" # set in onInit by initMultiUser |
|||
${andIf} ${Silent} |
|||
${ifNot} ${UAC_IsAdmin} |
|||
ShowWindow $HWNDPARENT ${SW_HIDE} |
|||
!insertmacro UAC_RunElevated |
|||
${Switch} $0 |
|||
${Case} 0 |
|||
${Break} |
|||
${Case} 1223 ;user aborted |
|||
${Break} |
|||
${Default} |
|||
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Unable to elevate, error $0" |
|||
${Break} |
|||
${EndSwitch} |
|||
Quit |
|||
${else} |
|||
!insertmacro setInstallModePerAllUsers |
|||
${endIf} |
|||
${endIf} |
|||
!endif |
|||
!endif |
|||
!include "installSection.nsh" |
|||
!endif |
|||
SectionEnd |
|||
|
|||
!ifdef BUILD_UNINSTALLER |
|||
!include "uninstaller.nsh" |
|||
!endif |
|||
@ -0,0 +1,26 @@ |
|||
directories: |
|||
output: electron_output |
|||
buildResources: build |
|||
app: dist_electron/bundled |
|||
files: |
|||
- filter: |
|||
- '**' |
|||
extends: null |
|||
productName: Raingad-IM |
|||
appId: 8007:16.66.168.192 |
|||
copyright: 0.0.0.1 |
|||
asar: false |
|||
nsis: |
|||
oneClick: false |
|||
allowElevation: false |
|||
allowToChangeInstallationDirectory: true |
|||
installerIcon: ./public/logo.ico |
|||
uninstallerIcon: ./public/logo.ico |
|||
installerHeaderIcon: ./public/logo.ico |
|||
createStartMenuShortcut: true |
|||
createDesktopShortcut: true |
|||
shortcutName: Raingad-IM |
|||
runAfterFinish: false |
|||
win: |
|||
icon: ./public/logo.ico |
|||
electronVersion: 13.6.9 |
|||
@ -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. |
|||
@ -0,0 +1 @@ |
|||
.group-box[data-v-1ff2f4fa]{display:flex;flex-direction:column;height:calc(100vh - 104px);background:#fff;border:1px solid #e6e6e6}.group-box .group-box-header[data-v-1ff2f4fa]{display:flex;justify-content:space-between;align-items:center;padding:0 15px;height:60px;border-bottom:1px solid #e6e6e6}.group-box .group-box-list[data-v-1ff2f4fa]{flex:1;overflow:auto}.group-box .group-box-page[data-v-1ff2f4fa]{padding-top:15px;height:48px}.chat-item[data-v-1ff2f4fa]{display:flex;align-items:center;padding:10px;cursor:pointer}.chat-item.active[data-v-1ff2f4fa],.chat-item[data-v-1ff2f4fa]:hover{background:#f5f5f5}.chat-item .chat-avatar[data-v-1ff2f4fa]{margin-right:10px}.chat-item .chat-avatar img[data-v-1ff2f4fa]{width:44px;height:44px;border-radius:50%}.chat-item .chat-content[data-v-1ff2f4fa]{flex-grow:1;display:flex;flex-direction:column}.chat-item .chat-content .chat-message[data-v-1ff2f4fa]{margin-top:5px}.chat-item .chat-content .chat-name[data-v-1ff2f4fa]{font-weight:700;margin-right:10px}.chat-item .chat-time[data-v-1ff2f4fa]{font-size:12px;color:#999}.group-user-box[data-v-1ff2f4fa]{border-left:none}.member-list[data-v-1ff2f4fa]{display:flex;justify-content:flex-start;flex-wrap:wrap;padding:20px 0 20px 20px}.member-list .member-item[data-v-1ff2f4fa]{display:flex;align-items:center;flex-wrap:wrap;padding:10px;width:200px;border:1px solid #eee;border-radius:8px;margin-right:20px;margin-bottom:20px}.member-list .member-item[data-v-1ff2f4fa]:last-child{margin-right:0}.member-list .member-item .member-avatar[data-v-1ff2f4fa]{margin-right:10px}.member-list .member-item .member-avatar img[data-v-1ff2f4fa]{width:44px;height:44px;border-radius:50%}.member-list .member-item .member-content[data-v-1ff2f4fa]{flex-grow:1;display:flex;justify-content:space-between}.member-list .member-item .member-content .member-header[data-v-1ff2f4fa]{display:flex;align-items:flex-start;flex-direction:column}.member-list .member-item .member-content .member-header .member-name[data-v-1ff2f4fa]{font-weight:700;margin-right:10px}.member-list .member-item .member-content .member-header .member-role[data-v-1ff2f4fa]{font-size:12px;color:#999}.member-list .member-item .member-content .member-actions[data-v-1ff2f4fa]{display:flex;justify-content:flex-end}.mt-3[data-v-1ff2f4fa]{margin-top:3px}[data-v-1ff2f4fa] .el-card__body{padding:0!important} |
|||
@ -0,0 +1 @@ |
|||
.error-wrapper{position:absolute;top:40%;left:50%;transform:translate(-50%,-50%)}.error-wrapper .error-content .pic-error{float:left;width:120%;overflow:hidden;opacity:0;animation-name:slideUp;animation-duration:.5s;animation-delay:.3s;animation-fill-mode:forwards}.error-wrapper .error-content .pic-error img{width:100%;height:100%}.error-wrapper .error-content .bullshit{position:relative;float:left;width:300px;padding:30px 0;overflow:hidden}.error-wrapper .error-content .bullshit-oops{margin-bottom:20px;font-size:32px;font-weight:700;line-height:40px;color:#175cff;opacity:0;animation-name:slideUp;animation-duration:.5s;animation-fill-mode:forwards}.error-wrapper .error-content .bullshit-headline{margin-bottom:10px;font-size:20px;font-weight:700;line-height:24px;color:#222;opacity:0;animation-name:slideUp;animation-duration:.5s;animation-delay:.1s;animation-fill-mode:forwards}.error-wrapper .error-content .bullshit-info{margin-bottom:30px;font-size:13px;line-height:21px;color:rgba(0,0,0,.65);opacity:0;animation-name:slideUp;animation-duration:.5s;animation-delay:.2s;animation-fill-mode:forwards}.error-wrapper .error-content .bullshit-return-home{display:block;float:left;width:110px;height:36px;font-size:14px;line-height:36px;color:#fff;text-align:center;cursor:pointer;background:#175cff;border-radius:100px;opacity:0;animation-name:slideUp;animation-duration:.5s;animation-delay:.3s;animation-fill-mode:forwards}@keyframes slideUp{0%{opacity:0;transform:translateY(60px)}to{opacity:1;transform:translateY(0)}} |
|||
@ -0,0 +1 @@ |
|||
.main-file-item{height:calc(100vh - 102px)} |
|||
@ -0,0 +1 @@ |
|||
.im-statistic-title[data-v-1052b203]{font-size:12px;color:#999;margin-bottom:10px;display:flex;align-items:center}.im-statistic-tips[data-v-1052b203]{margin-left:5px}.im-statistic-content[data-v-1052b203]{font-size:20px;color:#333}.im-statistic-content-value[data-v-1052b203]{font-weight:700}.im-statistic-content-prefix[data-v-1052b203]{margin-right:5px}.im-statistic-content-suffix[data-v-1052b203]{margin-left:5px;font-size:12px}.im-statistic-description[data-v-1052b203]{margin-top:10px;color:#999}.dark .im-statistic-content[data-v-1052b203]{color:#d0d0d0}.item-background[data-v-053b496d]{color:#666;line-height:1.8}.welcome .logo[data-v-053b496d]{text-align:center}.welcome .logo img[data-v-053b496d]{vertical-align:bottom;width:80px;height:80px;margin-bottom:20px}.welcome .logo h2[data-v-053b496d]{font-size:24px;font-weight:400;display:flex;align-items:center;justify-content:center}.tips[data-v-053b496d]{margin-top:20px}.tips-item[data-v-053b496d]{display:flex;align-items:center;justify-content:center;padding-bottom:10px}.tips-item-icon[data-v-053b496d]{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:18px;margin-right:20px;color:var(--el-color-primary);background:hsla(0,0%,71%,.1)}.tips-item-message[data-v-053b496d]{flex:1;font-size:14px}.actions[data-v-053b496d]{text-align:center;margin:20px 0 20px 0}.stop-task[data-v-053b496d]:hover{color:#f56c6c}.start-task[data-v-053b496d]{color:#409eff}.task-name[data-v-053b496d]{font-weight:600}.task-log[data-v-053b496d]{background:#000;color:#fff;white-space:break-spaces;letter-spacing:1px} |
|||
@ -0,0 +1 @@ |
|||
.avater-components .el-avatar--square{border-radius:8px}.avatar{height:24px}.logo-center[data-v-1956f8c4]{display:inline-block}.user-img[data-v-1956f8c4]{margin-right:8px;vertical-align:middle}.search-lists[data-v-1956f8c4]{padding:5px 0;height:200px;overflow:auto}.colleagues-list[data-v-1956f8c4]{padding:5px 0;display:block;margin-left:0;display:flex!important;align-items:center!important;align-content:center}.xh-user[data-v-1956f8c4]{color:#333;font-size:12px}.xh-user__hd[data-v-1956f8c4]{padding:0 15px;height:40px;line-height:40px;border-bottom:1px solid #c2c2c2}.xh-user__bd[data-v-1956f8c4]{padding:10px 12px}.xh-user__ft[data-v-1956f8c4]{padding:5px 12px;background:#f7f8fa;border-top:1px solid #c2c2c2}.xh-user__ft .el-button[data-v-1956f8c4]{font-size:12px}.select-info[data-v-1956f8c4]{display:inline-block;width:calc(100% - 30px)}.select-info--num[data-v-1956f8c4]{color:#175cff}.el-checkbox-group[data-v-1956f8c4]{overflow-x:hidden}.el-checkbox[data-v-1956f8c4] .el-checkbox__label{color:#333;display:flex;align-items:center;margin-right:10px}.all-check[data-v-1956f8c4]{padding:5px 0;display:flex;align-items:center}.search-input[data-v-1956f8c4] .el-input__inner{background-color:#f4f4f4;border:none}.wk-user-select[data-v-08cfcd80]{box-sizing:border-box;height:32px;position:relative;border-radius:4px;font-size:13px;background-color:#fff;border:1px solid #e6e6e6;color:#333;padding:0 20px 0 5px;cursor:pointer}.wk-user-select .user-item[data-v-08cfcd80]{padding:3px 15px 3px 5px;background-color:#f3f7ff;border-radius:4px;margin:3px;max-width:80px;position:relative}.wk-user-select .user-item.is-hide[data-v-08cfcd80]{background-color:#f2f2f2;color:#999}.wk-user-select .user-placeholder[data-v-08cfcd80]{color:#ddd;line-height:32px;cursor:pointer}.wk-user-select .delete-icon[data-v-08cfcd80]{color:#999;cursor:pointer;position:absolute;top:6px;right:2px}.wk-user-select .delete-icon[data-v-08cfcd80]:hover{color:#175cff}.wk-user-select[data-v-08cfcd80]:hover{border-color:#c0c4cc}.wk-user-select.is_disabled[data-v-08cfcd80]{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed}.wk-user-select.is_disabled .user-item[data-v-08cfcd80]{background-color:rgba(240,244,248,.918);color:#c0c4cc;cursor:not-allowed}.wk-user-select.is_disabled .delete-icon[data-v-08cfcd80],.wk-user-select.is_disabled .user-placeholder[data-v-08cfcd80]{color:#c0c4cc;cursor:not-allowed}.wk-user-select.is_valid[data-v-08cfcd80]:hover{border-color:#c0c4cc}.wk-user-select.is_focus[data-v-08cfcd80]{border-color:#175cff!important}.el-select__tags[data-v-08cfcd80]{padding-right:30px}.el-icon-more[data-v-08cfcd80]{position:absolute;top:3px;right:20px;padding:6px 10px;font-size:12px;background-color:#f3f7ff;color:#666;border-radius:4px}.el-icon-more[data-v-08cfcd80]:hover{background-color:#175cff;color:#fff}.el-icon-arrow-up[data-v-08cfcd80]{position:absolute;top:calc(50% - 7px);right:5px;color:#c0c4cc;font-size:14px;transition:transform .3s;transform:rotate(180deg);cursor:pointer}.el-icon-arrow-up.is-reverse[data-v-08cfcd80]{transform:rotate(0deg)}[data-v-5a260d74] .avatar-uploader .el-upload{border:1px dashed #d9d9d9;border-radius:6px;cursor:pointer;position:relative;overflow:hidden}[data-v-5a260d74] .avatar-uploader .el-upload:hover{border-color:#409eff}[data-v-5a260d74] .avatar-uploader-icon{font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar[data-v-5a260d74]{width:120px;height:120px;display:block} |
|||
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 312 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 29 KiB |
@ -0,0 +1 @@ |
|||
"use strict";(self["webpackChunkRaingad_IM"]=self["webpackChunkRaingad_IM"]||[]).push([[154],{2154:function(s,t,a){a.r(t),a.d(t,{default:function(){return h}});var e=function(){var s=this,t=s._self._c;return t("div",{staticClass:"error-wrapper"},[t("div",{staticClass:"error-content"},[t("el-row",{attrs:{gutter:15}},[t("el-col",{attrs:{xs:24,sm:24,md:12,lg:12,xl:12}},[t("div",{staticClass:"pic-error"},[t("img",{attrs:{src:a(6664),alt:"401"}})])]),t("el-col",{attrs:{xs:24,sm:24,md:12,lg:12,xl:12}},[t("div",{staticClass:"bullshit"},[t("div",{staticClass:"bullshit-oops"},[s._v("抱歉!")]),t("div",{staticClass:"bullshit-headline"},[s._v(s._s(s.msg))]),t("div",{staticClass:"bullshit-info"},[s._v(s._s(s.des))]),s.role>0?t("a",{staticClass:"bullshit-return-home",attrs:{href:"#/manage/index"}},[s._v("返回首页")]):t("a",{staticClass:"bullshit-return-home",attrs:{href:"/"}},[s._v("返回首页")])])])],1)],1)])},l=[],r=a(3214),i=a.n(r);const n=i().get("UserInfo");var u={name:"Page404",data(){return{msg:"当前页面不存在...",des:"",role:n.role}},mounted(){let s=this.$route.query;this.msg=s.msg,""==this.msg&&(this.des="请检查您输入的网址是否正确,或点击下面的按钮返回首页!")}},o=u,c=a(1656),d=(0,c.A)(o,e,l,!1,null,null,null),h=d.exports},6664:function(s,t,a){s.exports=a.p+"assets/img/404.42feab21.png"}}]); |
|||
@ -0,0 +1 @@ |
|||
"use strict";(self["webpackChunkRaingad_IM"]=self["webpackChunkRaingad_IM"]||[]).push([[440],{7440:function(t,e,n){n.r(e),n.d(e,{default:function(){return d}});var i=function(){var t=this,e=t._self._c;return e("div",{staticClass:"pd-20 main-file-item"},[e("fileItems",{attrs:{isAll:1}})],1)},s=[],l=n(5772),a={components:{fileItems:l.A},data(){return{}},methods:{openFolder(t){this.active=t.id}}},u=a,r=n(1656),c=(0,r.A)(u,i,s,!1,null,null,null),d=c.exports}}]); |
|||