.
This commit is contained in:
parent
2f9e3297ab
commit
80e34d7c2c
110
apidoc.html
Normal file
110
apidoc.html
Normal file
File diff suppressed because one or more lines are too long
1
apidoc.json
Normal file
1
apidoc.json
Normal file
File diff suppressed because one or more lines are too long
@ -3,12 +3,21 @@
|
|||||||
<application port="5002">
|
<application port="5002">
|
||||||
|
|
||||||
<!-- 详细配置说明见: http://redkale.org/redkale.html#redkale_confxml -->
|
<!-- 详细配置说明见: http://redkale.org/redkale.html#redkale_confxml -->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
|
<listener value="com.lxyer.redim.RedbbsListener"/>
|
||||||
|
<group name="ALL">
|
||||||
|
<node addr="192.168.227.1" port="7070"/>
|
||||||
|
<node addr="192.168.227.138" port="7070"/>
|
||||||
|
<!--<node addr="120.24.230.60" port="7070"/>-->
|
||||||
|
</group>
|
||||||
<source name="redis" value="org.redkalex.cache.RedisCacheSource" xxx="16">
|
<source name="redis" value="org.redkalex.cache.RedisCacheSource" xxx="16">
|
||||||
<node addr="redishost" port="6379" password="pwd123"/>
|
<node addr="redishost" port="6379" password="hello"/>
|
||||||
</source>
|
</source>
|
||||||
|
|
||||||
|
<!--<source name="mongo" value="com.lxyer.bbs.base.TaskQueue">
|
||||||
|
<node addr="redishost" port="27017"/>
|
||||||
|
</source>-->
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<property name="mongo.host" value="redishost"/>
|
<property name="mongo.host" value="redishost"/>
|
||||||
<property name="mongo.database" value="redbbs"/>
|
<property name="mongo.database" value="redbbs"/>
|
||||||
@ -33,18 +42,32 @@
|
|||||||
|
|
||||||
<servlets path="" autoload="true"/>
|
<servlets path="" autoload="true"/>
|
||||||
|
|
||||||
<resource-servlet webroot="root" index="index.html">
|
<!--<resource-servlet webroot="root" index="index.html">
|
||||||
<cache limit="2M" lengthmax="1M" watch="false"/>
|
<cache limit="2M" lengthmax="1M" watch="false"/>
|
||||||
|
|
||||||
<!--<rewrite type="location" match="^/([^-]+)-[^-\.]+\.png(.*)" forward="/$1.png"/>-->
|
<rewrite type="location" match="^/([^-]+)-[^-\.]+\.png(.*)" forward="/$1.png"/>
|
||||||
</resource-servlet>
|
</resource-servlet>-->
|
||||||
<!--
|
<!--
|
||||||
【节点在<server>中唯一】
|
【节点在<server>中唯一】
|
||||||
当Server为HTTP协议时,render才有效. 指定输出引擎的实现类
|
当Server为HTTP协议时,render才有效. 指定输出引擎的实现类
|
||||||
value: 输出引擎的实现类, 必须是org.redkale.net.http.HttpRender的子类
|
value: 输出引擎的实现类, 必须是org.redkale.net.http.HttpRender的子类
|
||||||
-->
|
-->
|
||||||
<render value="com.lxyer.bbs.base.EnjoyRender">
|
<render value="com.lxyer.bbs.base.EnjoyRender"/>
|
||||||
</render>
|
|
||||||
</server>
|
</server>
|
||||||
|
|
||||||
|
<!-- SNCP 监听 Server -->
|
||||||
|
<server protocol="SNCP" port="7070">
|
||||||
|
<services autoload="true" groups="ALL">
|
||||||
|
<!--<service name="hs" value="com.lxyer.service.HelloService" />-->
|
||||||
|
<!-- 有WebSocketServlet的服务必须配置WebSocketNodeService,且Redkale同时会自动创建一个同名(ws_notify)的 CacheSource -->
|
||||||
|
<!--<service name="ws_notify" value="org.redkale.service.WebSocketNodeService"/>-->
|
||||||
|
<!-- 存在DataSource必须配置DataSourceService -->
|
||||||
|
<!--<service name="demodb" value="org.redkale.service.DataSourceService"/>-->
|
||||||
|
<!-- 存放用户HTTP session信息的CacheSource -->
|
||||||
|
<!--<service name="usersessions" value="org.redkale.service.CacheSourceService">
|
||||||
|
<property name="key-type" value="java.lang.String"/>
|
||||||
|
<property name="value-type" value="java.lang.Integer"/>
|
||||||
|
</service>-->
|
||||||
|
</services>
|
||||||
|
</server>
|
||||||
</application>
|
</application>
|
||||||
|
@ -5,10 +5,14 @@
|
|||||||
<persistence-unit name="redbbs" transaction-type="RESOURCE_LOCAL">
|
<persistence-unit name="redbbs" transaction-type="RESOURCE_LOCAL">
|
||||||
<shared-cache-mode>ALL</shared-cache-mode>
|
<shared-cache-mode>ALL</shared-cache-mode>
|
||||||
<properties>
|
<properties>
|
||||||
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://mysqlhost:3306/?autoReconnect=true&characterEncoding=utf8"/>
|
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://558cfc37a10ef.sh.cdb.myqcloud.com:3817/?autoReconnect=true&characterEncoding=utf8&useSSL=true"/>
|
||||||
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
|
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
|
||||||
<property name="javax.persistence.jdbc.user" value="guest"/>
|
<property name="javax.persistence.jdbc.user" value="cdb_outerroot"/>
|
||||||
<property name="javax.persistence.jdbc.password" value="hello"/>
|
<property name="javax.persistence.jdbc.password" value="l237809796"/>
|
||||||
|
<!--<property name="javax.persistence.jdbc.url" value="jdbc:mysql://mysqlhost:3306/?autoReconnect=true&characterEncoding=utf8"/>
|
||||||
|
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
|
||||||
|
<property name="javax.persistence.jdbc.user" value="root"/>
|
||||||
|
<property name="javax.persistence.jdbc.password" value="*hello9796!"/>-->
|
||||||
</properties>
|
</properties>
|
||||||
</persistence-unit>
|
</persistence-unit>
|
||||||
|
|
||||||
|
19
root/404.html
Normal file
19
root/404.html
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<!--- Created by JUECHENG at 2018/7/27 11:42. --->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>404</title>
|
||||||
|
</head>
|
||||||
|
<body style="padding: 50px">
|
||||||
|
<h1>由于网站被攻击,已暂停访问</h1>
|
||||||
|
<p>
|
||||||
|
黑客把数据全部清空了,数据库有半个月没做备案了(失误),但是有所有一切操作的日志记录,
|
||||||
|
包括黑客的攻击数据,ip,当然也有这十多天的文章提交数据,所以理论上,所有数据能够恢复,
|
||||||
|
待恢复后再开做开放访问;谢谢你的关注和支持;
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
----------- 绝尘,QQ237809796
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
11
root/admin/index.html
Normal file
11
root/admin/index.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<!--- Created by JUECHENG at 2018/7/19 10:38. --->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
96
root/res/layui/css/modules/layim/html/chatlog.html
Normal file
96
root/res/layui/css/modules/layim/html/chatlog.html
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
|
<title>聊天记录</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="http://local.res.layui.com/layui/src/css/layui.css">
|
||||||
|
<style>
|
||||||
|
body .layim-chat-main{height: auto;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="layim-chat-main">
|
||||||
|
<ul id="LAY_view"></ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="LAY_page" style="margin: 0 10px;"></div>
|
||||||
|
|
||||||
|
|
||||||
|
<textarea title="消息模版" id="LAY_tpl" style="display:none;">
|
||||||
|
{{# layui.each(d.data, function(index, item){
|
||||||
|
if(item.id == parent.layui.layim.cache().mine.id){ }}
|
||||||
|
<li class="layim-chat-mine"><div class="layim-chat-user"><img src="{{ item.avatar }}"><cite><i>{{ layui.data.date(item.timestamp) }}</i>{{ item.username }}</cite></div><div class="layim-chat-text">{{ layui.layim.content(item.content) }}</div></li>
|
||||||
|
{{# } else { }}
|
||||||
|
<li><div class="layim-chat-user"><img src="{{ item.avatar }}"><cite>{{ item.username }}<i>{{ layui.data.date(item.timestamp) }}</i></cite></div><div class="layim-chat-text">{{ layui.layim.content(item.content) }}</div></li>
|
||||||
|
{{# }
|
||||||
|
}); }}
|
||||||
|
</textarea>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
上述模版采用了 laytpl 语法,不了解的同学可以去看下文档:http://www.layui.com/doc/modules/laytpl.html
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<script src="http://local.res.layui.com/layui/src/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
layui.use(['layim', 'laypage'], function(){
|
||||||
|
var layim = layui.layim
|
||||||
|
,layer = layui.layer
|
||||||
|
,laytpl = layui.laytpl
|
||||||
|
,$ = layui.jquery
|
||||||
|
,laypage = layui.laypage;
|
||||||
|
|
||||||
|
//聊天记录的分页此处不做演示,你可以采用laypage,不了解的同学见文档:http://www.layui.com/doc/modules/laypage.html
|
||||||
|
|
||||||
|
|
||||||
|
//开始请求聊天记录
|
||||||
|
var param = location.search //获得URL参数。该窗口url会携带会话id和type,他们是你请求聊天记录的重要凭据
|
||||||
|
|
||||||
|
//实际使用时,下述的res一般是通过Ajax获得,而此处仅仅只是演示数据格式
|
||||||
|
,res = {
|
||||||
|
code: 0
|
||||||
|
,msg: ''
|
||||||
|
,data: [{
|
||||||
|
username: '纸飞机'
|
||||||
|
,id: 100000
|
||||||
|
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.512.512.180/8693225ajw8f2rt20ptykj20e80e8weu.jpg'
|
||||||
|
,timestamp: 1480897882000
|
||||||
|
,content: 'face[抱抱] face[心] 你好啊小美女'
|
||||||
|
}, {
|
||||||
|
username: 'Z_子晴'
|
||||||
|
,id: 108101
|
||||||
|
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.512.512.180/8693225ajw8f2rt20ptykj20e80e8weu.jpg'
|
||||||
|
,timestamp: 1480897892000
|
||||||
|
,content: '你没发错吧?face[微笑]'
|
||||||
|
},{
|
||||||
|
username: 'Z_子晴'
|
||||||
|
,id: 108101
|
||||||
|
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.512.512.180/8693225ajw8f2rt20ptykj20e80e8weu.jpg'
|
||||||
|
,timestamp: 1480897898000
|
||||||
|
,content: '你是谁呀亲。。我爱的是贤心!我爱的是贤心!我爱的是贤心!重要的事情要说三遍~'
|
||||||
|
},{
|
||||||
|
username: 'Z_子晴'
|
||||||
|
,id: 108101
|
||||||
|
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.512.512.180/8693225ajw8f2rt20ptykj20e80e8weu.jpg'
|
||||||
|
,timestamp: 1480897908000
|
||||||
|
,content: '注意:这些都是模拟数据,实际使用时,需将其中的模拟接口改为你的项目真实接口。\n该模版文件所在目录(相对于layui.js):\n/css/modules/layim/html/chatlog.html'
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
//console.log(param)
|
||||||
|
|
||||||
|
var html = laytpl(LAY_tpl.value).render({
|
||||||
|
data: res.data
|
||||||
|
});
|
||||||
|
$('#LAY_view').html(html);
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
38
root/res/layui/css/modules/layim/html/find.html
Normal file
38
root/res/layui/css/modules/layim/html/find.html
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
|
<title>发现</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="http://local.res.layui.com/layui/src/css/layui.css">
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div style="margin: 15px;">
|
||||||
|
<blockquote class="layui-elem-quote">此为自定义的【查找】页面,因需求不一,所以官方暂不提供该模版结构与样式,实际使用时,可移至该文件到你的项目中,对页面自行把控。
|
||||||
|
<br>文件所在目录(相对于layui.js):/css/modules/layim/html/find.html</blockquote>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="http://local.res.layui.com/layui/src/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
layui.use(['layim', 'laypage'], function(){
|
||||||
|
var layim = layui.layim
|
||||||
|
,layer = layui.layer
|
||||||
|
,laytpl = layui.laytpl
|
||||||
|
,$ = layui.jquery
|
||||||
|
,laypage = layui.laypage;
|
||||||
|
|
||||||
|
//一些添加好友请求之类的交互参见文档
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
87
root/res/layui/css/modules/layim/html/getmsg.json
Normal file
87
root/res/layui/css/modules/layim/html/getmsg.json
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
"code": 0,
|
||||||
|
"pages": 1,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 76,
|
||||||
|
"content": "申请添加你为好友",
|
||||||
|
"uid": 168,
|
||||||
|
"from": 166488,
|
||||||
|
"from_group": 0,
|
||||||
|
"type": 1,
|
||||||
|
"remark": "有问题要问",
|
||||||
|
"href": null,
|
||||||
|
"read": 1,
|
||||||
|
"time": "刚刚",
|
||||||
|
"user": {
|
||||||
|
"id": 166488,
|
||||||
|
"avatar": "http://q.qlogo.cn/qqapp/101235792/B704597964F9BD0DB648292D1B09F7E8/100",
|
||||||
|
"username": "李彦宏",
|
||||||
|
"sign": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 75,
|
||||||
|
"content": "申请添加你为好友",
|
||||||
|
"uid": 168,
|
||||||
|
"from": 347592,
|
||||||
|
"from_group": 0,
|
||||||
|
"type": 1,
|
||||||
|
"remark": "你好啊!",
|
||||||
|
"href": null,
|
||||||
|
"read": 1,
|
||||||
|
"time": "刚刚",
|
||||||
|
"user": {
|
||||||
|
"id": 347592,
|
||||||
|
"avatar": "http://q.qlogo.cn/qqapp/101235792/B78751375E0531675B1272AD994BA875/100",
|
||||||
|
"username": "麻花疼",
|
||||||
|
"sign": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 62,
|
||||||
|
"content": "雷军 拒绝了你的好友申请",
|
||||||
|
"uid": 168,
|
||||||
|
"from": null,
|
||||||
|
"from_group": null,
|
||||||
|
"type": 1,
|
||||||
|
"remark": null,
|
||||||
|
"href": null,
|
||||||
|
"read": 1,
|
||||||
|
"time": "10天前",
|
||||||
|
"user": {
|
||||||
|
"id": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 60,
|
||||||
|
"content": "马小云 已经同意你的好友申请",
|
||||||
|
"uid": 168,
|
||||||
|
"from": null,
|
||||||
|
"from_group": null,
|
||||||
|
"type": 1,
|
||||||
|
"remark": null,
|
||||||
|
"href": null,
|
||||||
|
"read": 1,
|
||||||
|
"time": "10天前",
|
||||||
|
"user": {
|
||||||
|
"id": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 61,
|
||||||
|
"content": "贤心 已经同意你的好友申请",
|
||||||
|
"uid": 168,
|
||||||
|
"from": null,
|
||||||
|
"from_group": null,
|
||||||
|
"type": 1,
|
||||||
|
"remark": null,
|
||||||
|
"href": null,
|
||||||
|
"read": 1,
|
||||||
|
"time": "10天前",
|
||||||
|
"user": {
|
||||||
|
"id": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
208
root/res/layui/css/modules/layim/html/msgbox.html
Normal file
208
root/res/layui/css/modules/layim/html/msgbox.html
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
|
<title>消息盒子</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../layui.css?v=1">
|
||||||
|
<style>
|
||||||
|
.layim-msgbox{margin: 15px;}
|
||||||
|
.layim-msgbox li{position: relative; margin-bottom: 10px; padding: 0 130px 10px 60px; padding-bottom: 10px; line-height: 22px; border-bottom: 1px dotted #e2e2e2;}
|
||||||
|
.layim-msgbox .layim-msgbox-tips{margin: 0; padding: 10px 0; border: none; text-align: center; color: #999;}
|
||||||
|
.layim-msgbox .layim-msgbox-system{padding: 0 10px 10px 10px;}
|
||||||
|
.layim-msgbox li p span{padding-left: 5px; color: #999;}
|
||||||
|
.layim-msgbox li p em{font-style: normal; color: #FF5722;}
|
||||||
|
|
||||||
|
.layim-msgbox-avatar{position: absolute; left: 0; top: 0; width: 50px; height: 50px;}
|
||||||
|
.layim-msgbox-user{padding-top: 5px;}
|
||||||
|
.layim-msgbox-content{margin-top: 3px;}
|
||||||
|
.layim-msgbox .layui-btn-small{padding: 0 15px; margin-left: 5px;}
|
||||||
|
.layim-msgbox-btn{position: absolute; right: 0; top: 12px; color: #999;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<ul class="layim-msgbox" id="LAY_view"></ul>
|
||||||
|
|
||||||
|
<div style="margin: 0 15px;">
|
||||||
|
<blockquote class="layui-elem-quote">注意:这些都是模拟数据,实际使用时,需将其中的模拟接口改为你的项目真实接口。
|
||||||
|
<br>该模版文件所在目录(相对于layui.js):/css/modules/layim/html/msgbox.html</blockquote>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<textarea title="消息模版" id="LAY_tpl" style="display:none;">
|
||||||
|
{{# layui.each(d.data, function(index, item){
|
||||||
|
if(item.from){ }}
|
||||||
|
<li data-uid="{{ item.from }}" data-fromGroup="{{ item.from_group }}">
|
||||||
|
<a href="/u/{{ item.from }}/" target="_blank">
|
||||||
|
<img src="{{ item.user.avatar }}" class="layui-circle layim-msgbox-avatar">
|
||||||
|
</a>
|
||||||
|
<p class="layim-msgbox-user">
|
||||||
|
<a href="/u/{{ item.from }}/" target="_blank">{{ item.user.username||'' }}</a>
|
||||||
|
<span>{{ item.time }}</span>
|
||||||
|
</p>
|
||||||
|
<p class="layim-msgbox-content">
|
||||||
|
{{ item.content }}
|
||||||
|
<span>{{ item.remark ? '附言: '+item.remark : '' }}</span>
|
||||||
|
</p>
|
||||||
|
<p class="layim-msgbox-btn">
|
||||||
|
<button class="layui-btn layui-btn-small" data-type="agree">同意</button>
|
||||||
|
<button class="layui-btn layui-btn-small layui-btn-primary" data-type="refuse">拒绝</button>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
{{# } else { }}
|
||||||
|
<li class="layim-msgbox-system">
|
||||||
|
<p><em>系统:</em>{{ item.content }}<span>{{ item.time }}</span></p>
|
||||||
|
</li>
|
||||||
|
{{# }
|
||||||
|
}); }}
|
||||||
|
</textarea>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
上述模版采用了 laytpl 语法,不了解的同学可以去看下文档:http://www.layui.com/doc/modules/laytpl.html
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../../layui.js?v=1"></script>
|
||||||
|
<script>
|
||||||
|
layui.use(['layim', 'flow'], function(){
|
||||||
|
var layim = layui.layim
|
||||||
|
,layer = layui.layer
|
||||||
|
,laytpl = layui.laytpl
|
||||||
|
,$ = layui.jquery
|
||||||
|
,flow = layui.flow;
|
||||||
|
|
||||||
|
var cache = {}; //用于临时记录请求到的数据
|
||||||
|
|
||||||
|
//请求消息
|
||||||
|
var renderMsg = function(page, callback){
|
||||||
|
|
||||||
|
//实际部署时,请将下述 getmsg.json 改为你的接口地址
|
||||||
|
|
||||||
|
$.get('getmsg.json', {
|
||||||
|
page: page || 1
|
||||||
|
}, function(res){
|
||||||
|
if(res.code != 0){
|
||||||
|
return layer.msg(res.msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
//记录来源用户信息
|
||||||
|
layui.each(res.data, function(index, item){
|
||||||
|
cache[item.from] = item.user;
|
||||||
|
});
|
||||||
|
|
||||||
|
callback && callback(res.data, res.pages);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//消息信息流
|
||||||
|
flow.load({
|
||||||
|
elem: '#LAY_view' //流加载容器
|
||||||
|
,isAuto: false
|
||||||
|
,end: '<li class="layim-msgbox-tips">暂无更多新消息</li>'
|
||||||
|
,done: function(page, next){ //加载下一页
|
||||||
|
renderMsg(page, function(data, pages){
|
||||||
|
var html = laytpl(LAY_tpl.value).render({
|
||||||
|
data: data
|
||||||
|
,page: page
|
||||||
|
});
|
||||||
|
next(html, page < pages);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//打开页面即把消息标记为已读
|
||||||
|
/*
|
||||||
|
$.post('/message/read', {
|
||||||
|
type: 1
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
//操作
|
||||||
|
var active = {
|
||||||
|
//同意
|
||||||
|
agree: function(othis){
|
||||||
|
var li = othis.parents('li')
|
||||||
|
,uid = li.data('uid')
|
||||||
|
,from_group = li.data('fromGroup')
|
||||||
|
,user = cache[uid];
|
||||||
|
|
||||||
|
//选择分组
|
||||||
|
parent.layui.layim.setFriendGroup({
|
||||||
|
type: 'friend'
|
||||||
|
,username: user.username
|
||||||
|
,avatar: user.avatar
|
||||||
|
,group: parent.layui.layim.cache().friend //获取好友分组数据
|
||||||
|
,submit: function(group, index){
|
||||||
|
|
||||||
|
//将好友追加到主面板
|
||||||
|
parent.layui.layim.addList({
|
||||||
|
type: 'friend'
|
||||||
|
,avatar: user.avatar //好友头像
|
||||||
|
,username: user.username //好友昵称
|
||||||
|
,groupid: group //所在的分组id
|
||||||
|
,id: uid //好友ID
|
||||||
|
,sign: user.sign //好友签名
|
||||||
|
});
|
||||||
|
parent.layer.close(index);
|
||||||
|
othis.parent().html('已同意');
|
||||||
|
|
||||||
|
|
||||||
|
//实际部署时,请开启下述注释,并改成你的接口地址
|
||||||
|
/*
|
||||||
|
$.post('/im/agreeFriend', {
|
||||||
|
uid: uid //对方用户ID
|
||||||
|
,from_group: from_group //对方设定的好友分组
|
||||||
|
,group: group //我设定的好友分组
|
||||||
|
}, function(res){
|
||||||
|
if(res.code != 0){
|
||||||
|
return layer.msg(res.msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
//将好友追加到主面板
|
||||||
|
parent.layui.layim.addList({
|
||||||
|
type: 'friend'
|
||||||
|
,avatar: user.avatar //好友头像
|
||||||
|
,username: user.username //好友昵称
|
||||||
|
,groupid: group //所在的分组id
|
||||||
|
,id: uid //好友ID
|
||||||
|
,sign: user.sign //好友签名
|
||||||
|
});
|
||||||
|
parent.layer.close(index);
|
||||||
|
othis.parent().html('已同意');
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//拒绝
|
||||||
|
,refuse: function(othis){
|
||||||
|
var li = othis.parents('li')
|
||||||
|
,uid = li.data('uid');
|
||||||
|
|
||||||
|
layer.confirm('确定拒绝吗?', function(index){
|
||||||
|
$.post('/im/refuseFriend', {
|
||||||
|
uid: uid //对方用户ID
|
||||||
|
}, function(res){
|
||||||
|
if(res.code != 0){
|
||||||
|
return layer.msg(res.msg);
|
||||||
|
}
|
||||||
|
layer.close(index);
|
||||||
|
othis.parent().html('<em>已拒绝</em>');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$('body').on('click', '.layui-btn', function(){
|
||||||
|
var othis = $(this), type = othis.data('type');
|
||||||
|
active[type] ? active[type].call(this, othis) : '';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
2
root/res/layui/css/modules/layim/layim.css
Normal file
2
root/res/layui/css/modules/layim/layim.css
Normal file
File diff suppressed because one or more lines are too long
2
root/res/layui/css/modules/layim/mobile/layim.css
Normal file
2
root/res/layui/css/modules/layim/mobile/layim.css
Normal file
File diff suppressed because one or more lines are too long
BIN
root/res/layui/css/modules/layim/skin/1.jpg
Normal file
BIN
root/res/layui/css/modules/layim/skin/1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
root/res/layui/css/modules/layim/skin/2.jpg
Normal file
BIN
root/res/layui/css/modules/layim/skin/2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
root/res/layui/css/modules/layim/skin/3.jpg
Normal file
BIN
root/res/layui/css/modules/layim/skin/3.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
root/res/layui/css/modules/layim/skin/4.jpg
Normal file
BIN
root/res/layui/css/modules/layim/skin/4.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
BIN
root/res/layui/css/modules/layim/skin/5.jpg
Normal file
BIN
root/res/layui/css/modules/layim/skin/5.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
root/res/layui/css/modules/layim/skin/logo.jpg
Normal file
BIN
root/res/layui/css/modules/layim/skin/logo.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
0
root/res/layui/css/modules/layim/voice/default.mp3
Normal file
0
root/res/layui/css/modules/layim/voice/default.mp3
Normal file
3
root/res/layui/lay/modules/layim.js
Normal file
3
root/res/layui/lay/modules/layim.js
Normal file
File diff suppressed because one or more lines are too long
2
root/res/layui/lay/modules/rate.js
Normal file
2
root/res/layui/lay/modules/rate.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/** layui-v2.3.0 MIT License By https://www.layui.com */
|
||||||
|
;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='<ul class="layui-rate" '+(i.readonly?"readonly":"")+">",u=1;u<=i.length;u++){var r='<li class="layui-inline"><i class="layui-icon '+(u>Math.floor(i.value)?o:s)+'" '+l+"></i></li>";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'<li><i class="layui-icon layui-icon-rate-half" '+l+"></i></li>":n+=r}n+="</ul>"+(i.text?'<span class="layui-inline">'+i.value+"星":"")+"</span>";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)});
|
BIN
root/res/wangEditor/fonts/w-e-icon.woff
Normal file
BIN
root/res/wangEditor/fonts/w-e-icon.woff
Normal file
Binary file not shown.
411
root/res/wangEditor/wangEditor.css
Normal file
411
root/res/wangEditor/wangEditor.css
Normal file
File diff suppressed because one or more lines are too long
4674
root/res/wangEditor/wangEditor.js
Normal file
4674
root/res/wangEditor/wangEditor.js
Normal file
File diff suppressed because one or more lines are too long
1
root/res/wangEditor/wangEditor.min.css
vendored
Normal file
1
root/res/wangEditor/wangEditor.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
root/res/wangEditor/wangEditor.min.js
vendored
Normal file
4
root/res/wangEditor/wangEditor.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
root/res/wangEditor/wangEditor.min.js.map
Normal file
1
root/res/wangEditor/wangEditor.min.js.map
Normal file
File diff suppressed because one or more lines are too long
16
src/com/lxyer/redim/RedbbsListener.java
Normal file
16
src/com/lxyer/redim/RedbbsListener.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package com.lxyer.redim;
|
||||||
|
|
||||||
|
import com.lxyer.redim.impl.ImFriendServiceImpl;
|
||||||
|
import org.redkale.boot.Application;
|
||||||
|
import org.redkale.boot.ApplicationListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: liangxianyou at 2018/8/10 22:51.
|
||||||
|
*/
|
||||||
|
public class RedbbsListener implements ApplicationListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preStart(Application application) {
|
||||||
|
ImFriendServiceImpl.application = application;
|
||||||
|
}
|
||||||
|
}
|
119
src/com/lxyer/redim/impl/ImFriendServiceImpl.java
Normal file
119
src/com/lxyer/redim/impl/ImFriendServiceImpl.java
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
package com.lxyer.redim.impl;
|
||||||
|
|
||||||
|
import com.jfinal.kit.Kv;
|
||||||
|
import com.lxyer.base.JBean;
|
||||||
|
import com.lxyer.bbs.base.BaseService;
|
||||||
|
import com.lxyer.bbs.base.user.UserInfo;
|
||||||
|
import com.lxyer.bbs.base.user.UserRecord;
|
||||||
|
import com.lxyer.bbs.base.user.UserService;
|
||||||
|
import com.lxyer.redim.service.ImFriendService;
|
||||||
|
import org.redkale.boot.Application;
|
||||||
|
import org.redkale.net.TransportFactory;
|
||||||
|
import org.redkale.net.TransportGroupInfo;
|
||||||
|
import org.redkale.net.http.RestService;
|
||||||
|
import org.redkale.source.FilterExpress;
|
||||||
|
import org.redkale.source.FilterNode;
|
||||||
|
import org.redkale.util.ResourceType;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ResourceType(ImFriendService.class)
|
||||||
|
@RestService(name = "imfriend",automapping = true, comment = "好友管理")
|
||||||
|
public class ImFriendServiceImpl extends BaseService implements ImFriendService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
UserService userService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
public static Application application;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JBean friends(String sessionid) {
|
||||||
|
List<UserRecord> records = source.queryList(UserRecord.class, FilterNode.create("status", FilterExpress.NOTEQUAL, -10));
|
||||||
|
|
||||||
|
Kv data = Kv.create();
|
||||||
|
|
||||||
|
//mine
|
||||||
|
Kv mine = Kv.by("username", "游客").set("id", "0").set("sign","").set("status", "online").set("avatar", "/res/images/avatar/13.jpg");
|
||||||
|
UserInfo userInfo = userService.current(sessionid);
|
||||||
|
if (userInfo != null){
|
||||||
|
mine.set("username", userInfo.getNickname());
|
||||||
|
mine.set("id", userInfo.getUserid());
|
||||||
|
mine.set("sign", userInfo.getSign());
|
||||||
|
mine.set("avatar", userInfo.getAvatar());
|
||||||
|
mine.set("status", "online");
|
||||||
|
}
|
||||||
|
|
||||||
|
//friend
|
||||||
|
List<Kv> friend = new ArrayList<>();
|
||||||
|
List<Kv> group = new ArrayList<>();
|
||||||
|
|
||||||
|
List list = new ArrayList();
|
||||||
|
records.forEach(x->{
|
||||||
|
Kv _friend = Kv.by("id", x.getUserid());
|
||||||
|
_friend.set("username", x.getNickname());
|
||||||
|
_friend.set("sign", x.getSign());
|
||||||
|
_friend.set("avatar", x.getAvatar());
|
||||||
|
_friend.set("status", "online");
|
||||||
|
list.add(_friend);
|
||||||
|
});
|
||||||
|
|
||||||
|
friend.add(Kv.by("groupname", "默认分组").set("id", 1).set("online", list.size()).set("list", list));
|
||||||
|
group.add(Kv.by("groupname", "默认分组").set("id", 1).set("avatar", "/res/images/avatar/13.jpg"));
|
||||||
|
|
||||||
|
data.set("mine", mine).set("friend", friend).set("group", group);
|
||||||
|
|
||||||
|
return JBean.by(Kv.by("code", 0).set("msg", "").set("data", data));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JBean friendList(String sessionid) {
|
||||||
|
|
||||||
|
/*SncpClient sncpClient = new SncpClient("", ImFriendService.class, this, transportFactory,
|
||||||
|
true, this.getClass(), new InetSocketAddress("192.168.227.1", 7070));*/
|
||||||
|
|
||||||
|
|
||||||
|
TransportFactory sncpTransportFactory = application.getSncpTransportFactory();
|
||||||
|
TransportGroupInfo groupInfo = sncpTransportFactory.findGroupInfo("ALL");
|
||||||
|
|
||||||
|
System.out.println(groupInfo.toString());
|
||||||
|
|
||||||
|
groupInfo.putAddress(new InetSocketAddress("120.24.230.60", 7070));
|
||||||
|
|
||||||
|
|
||||||
|
//sncpTransportFactory.addGroupInfo(groupInfo);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return friends(sessionid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JBean groups(String sessionid) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JBean itemSave(String sessionid) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JBean addFriend(String sessionid) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JBean groupSave(String sessionid) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JBean addGroup(String sessionid) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
93
src/com/lxyer/redim/impl/ImMsgServiceImpl.java
Normal file
93
src/com/lxyer/redim/impl/ImMsgServiceImpl.java
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
package com.lxyer.redim.impl;
|
||||||
|
|
||||||
|
import com.lxyer.base.JBean;
|
||||||
|
import com.lxyer.bbs.base.BaseService;
|
||||||
|
import com.lxyer.bbs.base.user.UserRecord;
|
||||||
|
import com.lxyer.redim.entity.MsgRecord;
|
||||||
|
import com.lxyer.redim.info.MsgInfo;
|
||||||
|
import com.lxyer.redim.service.ImMsgService;
|
||||||
|
import org.redkale.net.http.RestService;
|
||||||
|
import org.redkale.source.FilterNode;
|
||||||
|
import org.redkale.util.ResourceType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: liangxianyou at 2018/8/12 13:10.
|
||||||
|
*/
|
||||||
|
@ResourceType(ImMsgService.class)
|
||||||
|
@RestService(name = "immsg",automapping = true, comment = "聊天记录管理")
|
||||||
|
public class ImMsgServiceImpl extends BaseService implements ImMsgService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息入库
|
||||||
|
*
|
||||||
|
* @param msg
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JBean insert(MsgRecord... msg) {
|
||||||
|
source.insertAsync(msg);
|
||||||
|
return JBean.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息修改
|
||||||
|
*
|
||||||
|
* @param msg
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JBean update(MsgRecord ... msg) {
|
||||||
|
source.updateAsync(msg);
|
||||||
|
return JBean.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 历史消息
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JBean list() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建消息体
|
||||||
|
*
|
||||||
|
* @param msg
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JBean<MsgInfo> createMsgInfo(MsgRecord msg) {
|
||||||
|
MsgInfo info = new MsgInfo();
|
||||||
|
int fromuserid = msg.getFromuserid();
|
||||||
|
|
||||||
|
UserRecord userRecord;
|
||||||
|
if (fromuserid > 0){
|
||||||
|
userRecord = source.find(UserRecord.class, fromuserid);
|
||||||
|
info.setUsername(userRecord.getUsername());
|
||||||
|
info.setAvatar(userRecord.getAvatar());
|
||||||
|
info.setType("friend");
|
||||||
|
}else {
|
||||||
|
info.setUsername("游客");
|
||||||
|
info.setAvatar("/res/images/avatar/12.jpg");
|
||||||
|
info.setType("friend");
|
||||||
|
}
|
||||||
|
|
||||||
|
info.setId(msg.getFromuserid());
|
||||||
|
info.setContent(msg.getContent());
|
||||||
|
info.setCid(msg.getMsgid());
|
||||||
|
info.setMine(false);
|
||||||
|
info.setFromid(msg.getFromuserid());
|
||||||
|
info.setTimestamp(msg.getCreatetime());
|
||||||
|
|
||||||
|
return JBean.by(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JBean<List<MsgRecord>> offlineMsg(int userid) {
|
||||||
|
List<MsgRecord> records = source.queryList(MsgRecord.class, FilterNode.create("touserid", userid).and("status", 10));
|
||||||
|
return JBean.by(records);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
0
tmp/excel/tmp_cp.xls
Normal file
0
tmp/excel/tmp_cp.xls
Normal file
68
work_redbbs.md
Normal file
68
work_redbbs.md
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
======================
|
||||||
|
redbbs
|
||||||
|
redoss
|
||||||
|
redbbs-app
|
||||||
|
redim
|
||||||
|
redtimer
|
||||||
|
redexcel
|
||||||
|
jfly
|
||||||
|
|
||||||
|
待办:
|
||||||
|
1、redtimer 文档编写
|
||||||
|
|
||||||
|
|
||||||
|
# redbbs
|
||||||
|
|
||||||
|
1. √文章编辑加入未保存浏览器缓存
|
||||||
|
2. √文章编辑标题加入长度检查
|
||||||
|
3. 注册邮箱验证--
|
||||||
|
4. √加入管理员功能
|
||||||
|
5. 丰富个人中心
|
||||||
|
6. 加入资源模块--
|
||||||
|
7. √|-|管理员浏览文章阅读数不做增长
|
||||||
|
8. √个人中心-收藏数据不对
|
||||||
|
9. √管理员查询不到用户未公开帖子
|
||||||
|
10. √注册/资料修改 成功后未提示
|
||||||
|
11. √首页帖子用户头像链接地址错误
|
||||||
|
12. +帖子访客记录
|
||||||
|
13. 指定好友帖子权限--指定好友可见
|
||||||
|
14. ~项目更新记录页使用时光线展示
|
||||||
|
15. +SEO设置
|
||||||
|
16. +标签
|
||||||
|
17. +访问日志记录
|
||||||
|
18. +管理后台
|
||||||
|
19. +读书频道
|
||||||
|
20. +网站自动升级功能
|
||||||
|
21. +灵感说
|
||||||
|
22. +工作簿
|
||||||
|
|
||||||
|
|
||||||
|
社区升级
|
||||||
|
1、表字段统一小写,
|
||||||
|
2、表模块划分
|
||||||
|
3、表状态等字段统一smallint
|
||||||
|
4、部分字段值重新定义
|
||||||
|
|
||||||
|
升级程序实录:
|
||||||
|
1.导出表结构
|
||||||
|
mysqldump -u root -d -p redbbs > redbbs-t-06.17.sql
|
||||||
|
2.导出数据
|
||||||
|
mysqldump -u root -t -p redbbs > redbbs-t-06.17.sql
|
||||||
|
3.创建数据库
|
||||||
|
create database redbbs_dev default charset utf8;
|
||||||
|
4.导入数据库
|
||||||
|
mysql -u root -p redbbs_dev < redbbs-t-06.17.sql
|
||||||
|
|
||||||
|
|
||||||
|
echo '[mongodb-org-3.6]
|
||||||
|
name=MongoDB Repository
|
||||||
|
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
|
||||||
|
gpgcheck=1
|
||||||
|
enabled=1
|
||||||
|
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc'
|
||||||
|
>> /etc/yum.repos.d/mongodb-org-3.6.repo
|
||||||
|
|
||||||
|
灵感说功能
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user