修改:工程简单重构

This commit is contained in:
2023-04-29 23:30:44 +08:00
parent ea8e9f70bd
commit 68f4e2b479
53 changed files with 1869 additions and 1474 deletions

472
root/_tpl/layout.html Normal file
View File

@@ -0,0 +1,472 @@
<!-- Created by Lxy at 2017/11/25 17:36. -->
#define columned(e)
#if(e == column??"") layui-this #end
#end
#define keywords(str)
#if(str)
#(str)、redkale社区
#else
架构设计、问题解答、经验分享、redkale社区、#(str)
#end
#end
#define description(str)
#if(str)
#(str)、redkale社区
#else
架构设计、问题解答、经验分享、redkale社区、#(str)
#end
#end
#define layout()
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>#if(title)#(title) - #end Redbbs社区</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta name="keywords" content="#@keywords(bean.title??'')">
<meta name="description" content="#@description(bean.title??'')">
<link rel="stylesheet" href="/res/layui/css/layui.css">
<link rel="stylesheet" href="/res/css/global.css">
<!--background-color: #4a184c;-->
<style>
.layui-bg-black,.layui-btn,.layui-laypage .layui-laypage-curr .layui-laypage-em{background-image: linear-gradient(350deg, #330335, #AB5D7C);}
.laypage-main{border:1px solid #a25677!important;}
.laypage-main *{border-right:#a25677;border-bottom:#a25677;}
.layui-nav *{font-size:16px}
.layui-nav-tree .layui-nav-child dd.layui-this, .layui-nav-tree .layui-nav-child dd.layui-this a, .layui-nav-tree .layui-this, .layui-nav-tree .layui-this>a, .layui-nav-tree .layui-this>a:hover
{background-color:#4a184c;}
</style>
#@css?()
</head>
<body>
<div class="fly-header layui-bg-black">
<div class="layui-container">
<a class="fly-logo" href="/" style="font-size: 30px;color: #fff;">
Redbbs
<!--<img src="/res/images/logo.png" alt="优乐园社区">-->
</a>
<ul class="layui-nav fly-nav layui-hide-xs">
<li class="layui-nav-item layui-this">
<a href="/">社区</a>
</li>
<li class="layui-nav-item">
<a href="/project">项目</a>
</li>
<li class="layui-nav-item">
<a href="http://redkale.org/" target="_blank">Redkale框架</a>
</li>
<!--<li class="layui-nav-item">
<a href="http://redkale.org/articles.html" target="_blank">技术文章</a>
</li>-->
</ul>
<ul class="layui-nav fly-nav-user">
#if(mine)<!-- 登入后的状态 -->
<li class="layui-nav-item">
<a class="fly-nav-avatar" href="javascript:;">
<cite class="layui-hide-xs">#(mine.nickname)</cite>
<!--
<i class="iconfont icon-renzheng layui-hide-xs" title="认证信息layui 作者"></i>
<i class="layui-badge fly-badge-vip layui-hide-xs">VIP3</i>
-->
<img src="#(mine.avatar)">
</a>
<dl class="layui-nav-child">
<dd><a href="/user/set"><i class="layui-icon">&#xe620;</i>基本设置</a></dd>
<!--
<dd><a href="/user/message"><i class="iconfont icon-tongzhi" style="top: 4px;"></i>我的消息</a></dd>
-->
<dd><a href="/user"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe68e;</i>我的主页</a></dd>
<hr style="margin: 5px 0;">
<dd><a href="javascript:;" class="logout" style="text-align: center;">退出</a></dd>
</dl>
</li>
#else<!-- 未登入的状态 -->
<li class="layui-nav-item">
<a class="iconfont icon-touxiang layui-hide-xs" href="/user/login"></a>
</li>
<li class="layui-nav-item">
<a href="/user/login.html">登入</a>
</li>
<li class="layui-nav-item">
<a href="/user/reg.html">注册</a>
</li>
<!--<li class="layui-nav-item layui-hide-xs">
<a href="/app/qq/" onclick="layer.msg('正在通过QQ登入', {icon:16, shade: 0.1, time:0})" title="QQ登入" class="iconfont icon-qq"></a>
</li>
<li class="layui-nav-item layui-hide-xs">
<a href="/app/weibo/" onclick="layer.msg('正在通过微博登入', {icon:16, shade: 0.1, time:0})" title="微博登入" class="iconfont icon-weibo"></a>
</li>-->
#end
</ul>
</div>
</div>
<!--main-->
#@main?()
<div class="fly-footer">
<p>
<a href="http://1216.top" target="_blank">Redbbs 2017 &copy; http://1216.top</a>
<a href='https://gitee.com/tc608/redbbs' target="_blank"><img src='https://gitee.com/tc608/redbbs/badge/star.svg?theme=white' alt='star'/></a>
</p>
#define x()
<p>
<a href="http://fly.layui.com/jie/3147/" target="_blank">付费计划</a>
<a href="http://fly.layui.com/jie/8157/" target="_blank">获取Fly社区模版</a>
<a href="http://fly.layui.com/jie/2461/" target="_blank">微信公众号</a>
</p>
#end
</div>
<script src="/res/layui/layui.js"></script>
#@js?()
<!--layim-->
<script>
if(!/^http(s*):\/\//.test(location.href)){
alert('请部署到localhost上查看该演示');
}
layui.use('layim', function(layim){
var $ = layui.jquery;//
var target = 'ws://127.0.0.1/os/ws/chat?token=#(token)';
var ws;
if ('WebSocket' in window) {
ws = new WebSocket(target);
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket(target);
} else {
alert('WebSocket is not supported by this browser.');
return;
}
ws.onopen = function () {
console.log('Info: WebSocket connection opened.');
};
//接收信息
ws.onmessage = function (event) {
console.log(event);
var data = eval("("+event.data+")");
layim.getMessage(data);
//flashTitle();
};
ws.onclose = function (event) {
console.log('Info: WebSocket connection closed, Code: ' + event.code + (event.reason == "" ? "" : ", Reason: " + event.reason));
};
//监听发送消息
layim.on('sendMessage', function(data){
//发送消息倒Socket服务
var msg = {
text:{
msg:{
touserid:data.to.id
,content:data.mine.content
}
}
};
ws.send(JSON.stringify(msg));
});
//---------------------完美分割线--------------------
//基础配置
layim.config({
//初始化接口
init: {
url: '/imx/friends?token=#(token)'
,data: {}
}
/*init: {
url: '/tmp/json/getList.json'
,data: {}
}*/
//或采用以下方式初始化接口
/*
,init: {
mine: {
"username": "LayIM体验者" //我的昵称
,"id": "100000123" //我的ID
,"status": "online" //在线状态 online在线、hide隐身
,"remark": "在深邃的编码世界,做一枚轻盈的纸飞机" //我的签名
,"avatar": "a.jpg" //我的头像
}
,friend: []
,group: []
}
*/
//查看群员接口
,members: {
url: '/tmp/json/getMembers.json'
,data: {}
}
//上传图片接口
/*,uploadImage: {
url: 'http://localhost/os/chat/upload/'//'/upload/image' //(返回的数据格式见下文)
,type: '' //默认post
}*/
//上传文件接口
/*,uploadFile: {
url: '/os/chat/upload' //(返回的数据格式见下文)
,type: '' //默认post
}*/
,isAudio: true //开启聊天工具栏音频
,isVideo: true //开启聊天工具栏视频
//扩展工具栏
,tool: [{
alias: 'code'
,title: '代码'
,icon: '&#xe64e;'
}]
//,brief: true //是否简约模式(若开启则不显示主面板)
//,title: 'WebIM' //自定义主面板最小化时的标题
//,right: '100px' //主面板相对浏览器右侧距离
//,minRight: '90px' //聊天面板最小化时相对浏览器右侧距离
,initSkin: '5.jpg' //1-5 设置初始背景
//,skin: ['aaa.jpg'] //新增皮肤
//,isfriend: false //是否开启好友
,isgroup: false //是否开启群组
,min: true //是否始终最小化主面板默认false
,notice: true //是否开启桌面消息提醒默认false
//,voice: false //声音提醒默认开启声音文件为default.mp3
//,msgbox: layui.cache.dir + 'css/modules/layim/html/msgbox.html' //消息盒子页面地址,若不开启,剔除该项即可
//,find: layui.cache.dir + 'css/modules/layim/html/find.html' //发现页面地址,若不开启,剔除该项即可
//,chatLog: layui.cache.dir + 'css/modules/layim/html/chatlog.html' //聊天记录页面地址,若不开启,剔除该项即可
,copyright:true
});
/*
layim.chat({
name: '在线客服-小苍'
,type: 'kefu'
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.180.180.180/7f5f6861jw1e8qgp5bmzyj2050050aa8.jpg'
,id: -1
});
layim.chat({
name: '在线客服-心心'
,type: 'kefu'
,avatar: 'http://tva1.sinaimg.cn/crop.219.144.555.555.180/0068iARejw8esk724mra6j30rs0rstap.jpg'
,id: -2
});
layim.setChatMin();*/
//监听在线状态的切换事件
layim.on('online', function(data){
//console.log(data);
});
//监听签名修改
layim.on('sign', function(value){
$.post("/os/user/update",{
bean:JSON.stringify({sign:value})
,columns:JSON.stringify(['sign'])
},function (res) {
if(res.retcode == 0){
layer.msg("操作成功");
}
});
});
//监听自定义工具栏点击,以添加代码为例
layim.on('tool(code)', function(insert){
layer.prompt({
title: '插入代码'
,formType: 2
,shade: 0
}, function(text, index){
layer.close(index);
insert('[pre class=layui-code]' + text + '[/pre]'); //将内容插入到编辑器
});
});
//监听layim建立就绪
layim.on('ready', function(res){
//console.log(res.mine);
//layim.msgbox(5); //模拟消息盒子有新消息,实际使用时,一般是动态获得
//添加好友如果检测到该socket
layim.addList({
type: 'group'
,avatar: "http://tva3.sinaimg.cn/crop.64.106.361.361.50/7181dbb3jw8evfbtem8edj20ci0dpq3a.jpg"
,groupname: 'Angular开发'
,id: "12333333"
,members: 0
});
/*layim.addList({
type: 'friend'
,avatar: "http://tp2.sinaimg.cn/2386568184/180/40050524279/0"
,username: '冲田杏梨'
,groupid: 2
,id: "1233333312121212"
,remark: "本人冲田杏梨将结束AV女优的工作"
});*/
if (false)
setTimeout(function(){
//接受消息如果检测到该socket
layim.getMessage({
username: "Hi"
,avatar: "http://qzapp.qlogo.cn/qzapp/100280987/56ADC83E78CEC046F8DF2C5D0DD63CDE/100"
,id: "10000111"
,type: "friend"
,content: "临时:"+ new Date().getTime()
});
/*layim.getMessage({
username: "贤心"
,avatar: "http://tp1.sinaimg.cn/1571889140/180/40030060651/1"
,id: "100001"
,type: "friend"
,content: "嗨你好欢迎体验LayIM。演示标记"+ new Date().getTime()
});*/
}, 3000);
});
//监听发送消息
layim.on('sendMessage', function(data){
//var To = data.to;
/*if(To.type === 'friend'){
layim.setChatStatus('<span style="color:#FF5722;">对方正在输入。。。</span>');
}*/
//演示自动回复
if (false)
setTimeout(function(){
var obj = {};
if(To.type === 'group'){
obj = {
username: '模拟群员'+(Math.random()*100|0)
,avatar: layui.cache.dir + 'images/face/'+ (Math.random()*72|0) + '.gif'
,id: To.id
,type: To.type
,content: autoReplay[Math.random()*9|0]
}
} else {
obj = {
username: To.name
,avatar: To.avatar
,id: To.id
,type: To.type
,content: autoReplay[Math.random()*9|0]
}
layim.setChatStatus('<span style="color:#FF5722;">在线</span>');
}
layim.getMessage(obj);
}, 1000);
});
//监听查看群员
layim.on('members', function(data){
//console.log(data);
});
//监听聊天窗口的切换
layim.on('chatChange', function(res){
var type = res.data.type;
console.log(res.data.id)
if(type === 'friend'){
//模拟标注好友状态
//layim.setChatStatus('<span style="color:#FF5722;">在线</span>');
} else if(type === 'group'){
//模拟系统消息
layim.getMessage({
system: true
,id: res.data.id
,type: "group"
,content: '模拟群员'+(Math.random()*100|0) + '加入群聊'
});
}
});
});
</script>
</body>
</html>
#end
#define flyColumn()
<div class="fly-panel fly-column">
<div class="layui-container">
<ul class="layui-clear">
<li class="layui-hide-xs #@columned('')"><a href="/column/">全部</a></li>
<li class="#@columned('qz')"><a href="/column/qz">求助</a></li>
<li class="#@columned('fx')"><a href="/column/fx">分享<!--<span class="layui-badge-dot"></span>--></a></li>
<!--
<li class="#@columned('jy')"><a href="/column/jy">建议</a></li>
<li class="#@columned('gg')"><a href="/column/gg">公告</a></li>
-->
<li class="#@columned('dt')"><a href="/column/dt">动态</a></li>
<li class="layui-hide-xs layui-hide-sm layui-show-md-inline-block"><span class="fly-mid"></span></li>
<!-- 用户登入后显示 -->
<li class="layui-hide-xs layui-hide-sm layui-show-md-inline-block"><a href="/user?#index">我发表的贴</a>
</li>
<li class="layui-hide-xs layui-hide-sm layui-show-md-inline-block"><a href="/user?#collection">我收藏的贴</a></li>
</ul>
<div class="fly-column-right layui-hide-xs">
<span class="fly-search"><i class="layui-icon"></i></span>
<a href="/jie/add" class="layui-btn">发表新帖</a>
</div>
<div class="layui-hide-sm layui-show-xs-block" style="margin-top: -10px; padding-bottom: 10px; text-align: center;">
<a href="/jie/add" class="layui-btn">发表新帖</a>
</div>
</div>
</div>
#end
#define user_side(e)
<ul class="layui-nav layui-nav-tree layui-inline" lay-filter="user">
<li class="layui-nav-item #if(e == '') layui-this #end">
<a href="/user/#(mine.userid)">
<i class="layui-icon">&#xe609;</i>
我的主页
</a>
</li>
<li class="layui-nav-item #if(e == 'index') layui-this #end">
<a href="/user/">
<i class="layui-icon">&#xe612;</i>
用户中心
</a>
</li>
<li class="layui-nav-item #if(e == 'set') layui-this #end">
<a href="/user/set">
<i class="layui-icon">&#xe620;</i>
基本设置
</a>
</li>
<!--<li class="layui-nav-item #if(e == 'message') layui-this #end">
<a href="message.html">
<i class="layui-icon">&#xe611;</i>
我的消息
</a>
</li>-->
</ul>
#end