This commit is contained in:
lxyer 2017-12-05 11:59:58 +08:00
parent 5c708a3efd
commit 92d3f7a49e
50 changed files with 2396 additions and 1717 deletions

View File

@ -5,6 +5,9 @@
<!-- 详细配置说明见: http://redkale.org/redkale.html#redkale_confxml -->
<resources>
<source name="redis" value="org.redkalex.cache.RedisCacheSource" xxx="16">
<node addr="120.24.230.60" port="6379"/>
</source>
</resources>
<server protocol="HTTP" host="0.0.0.0" port="6060" root="root">

View File

@ -38,6 +38,12 @@
<version>3.3</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.3</version>
</dependency>
</dependencies>

View File

@ -4,15 +4,95 @@
<html>
<head>
<meta charset="utf-8">
<title>优乐园社区</title>
<title>#if(title)#(title) - #end优乐园社区</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="keywords" content="优乐园">
<meta name="description" content="优乐园社区">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta name="keywords" content="#(keywords??'优乐园')">
<meta name="description" content="#(description??'优乐园社区')">
<link rel="stylesheet" href="/res/layui/css/layui.css">
<link rel="stylesheet" href="/res/css/global.css">
</head>
<body>
<div class="fly-header layui-bg-black">
<div class="layui-container">
<a class="fly-logo" href="/">
<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="/">交流</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>
<div class="fly-panel fly-column">
<div class="layui-container">
<ul class="layui-clear">
<li class="layui-hide-xs layui-this"><a href="/">首页</a></li>
<li><a href="jie/index.html">求助</a></li>
<li><a href="jie/index.html">分享<span class="layui-badge-dot"></span></a></li>
<li><a href="jie/index.html">建议</a></li>
<li><a href="jie/index.html">公告</a></li>
<li><a href="jie/index.html">动态</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.html" 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.html" class="layui-btn">发表新帖</a>
</div>
</div>
</div>
#define xx()
<div class="header">
<div class="main">
<a class="logo" href="/" title="优乐园社区">优乐园社区</a>
@ -48,17 +128,18 @@
</div>
</div>
</div>
#end
<!--main-->
#@main?()
<div class="footer">
<p><a href="http://b.1216.top/">优乐园社区</a> 2017 &copy; <a href="http://www.layui.com/">1216.top</a></p>
#define tem()
<div class="fly-footer">
<p><a href="http://b.1216.top/" target="_blank">优乐园社区</a> 2017 &copy; <a href="http://1216.top/" target="_blank">http://1216.top</a></p>
#define x()
<p>
<a href="http://fly.layui.com/auth/get" target="_blank">产品授权</a>
<a href="http://fly.layui.com/jie/8157.html" target="_blank">获取Fly社区模版</a>
<a href="http://fly.layui.com/jie/2461.html" target="_blank">微信公众号</a>
<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>

View File

@ -1,151 +1,211 @@
#@layout()
#define main()
<div class="main layui-clear">
<div class="wrap">
<div class="content">
<div class="fly-tab fly-tab-index">
<span>
<a href="/jie">全部</a>
<a href="/jie/unsolved">未结帖</a>
<a href="/jie/solved">已采纳</a>
<a href="/jie/wonderful">精帖</a>
<a href="/user">我的帖</a>
</span>
<form action="https://www.baidu.com/s" class="fly-search">
<i class="iconfont icon-sousuo"></i>
<input class="layui-input" autocomplete="off" placeholder="搜索内容,回车跳转" type="text" name="wd">
</form>
<a href="/jie/add" class="layui-btn jie-add">发布帖子</a>
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-md8">
<!--置顶-->
<div class="fly-panel">
<div class="fly-panel-title fly-filter">
<a>置顶</a>
<a href="#signin" class="layui-hide-sm layui-show-xs-block fly-right" id="LAY_goSignin" style="color: #FF5722;">去签到</a>
</div>
<!--置顶贴-->
<ul class="fly-list fly-list-top">
<ul class="fly-list">
#for(x : top.rows??)
<li class="fly-list-li">
<a href="/user/home/#(x.userId??)" class="fly-list-avatar">
<img src="#(x.avatar??)" alt="">
<li>
<a href="/user/#(x.userId)" class="fly-avatar">
<img src="#(x.avatar)" alt="#(x.nickname)">
</a>
<h2 class="fly-tip">
<a href="/jie/detail/#(x.contentId??)">#(x.title??)</a>
#if(x.top == 1)
<span class="fly-tip-stick">置顶</span>
#end
#if(x.wonderful == 1)
<span class="fly-tip-jing">精帖</span>
#end
<h2>
<a class="layui-badge">动态</a>
<a href="/jie/detail/#(x.contentId)">#(x.title)</a>
</h2>
<p>
<span><a href="/user/home/#(x.userId??)">#(x.nickname??)</a></span>
<span>#(x.createTime??)</span>
<span>#(x.cateName??)</span>
<span class="fly-list-hint">
<i class="iconfont" title="回答">&#xe60c;</i> #(x.replyNum??)
<i class="iconfont" title="人气">&#xe60b;</i> #(x.viewNum??)
<div class="fly-list-info">
<a href="/user/#(x.userId)" link>
<cite>#(x.nickname)</cite>
<i class="iconfont icon-renzheng" title="认证信息XXX"></i>
<i class="layui-badge fly-badge-vip">VIP3</i>
</a>
<span>#(x.createTime)</span>
<span class="fly-list-kiss layui-hide-xs" title="悬赏飞吻"><i class="iconfont icon-kiss"></i> 60</span>
<span class="layui-badge fly-badge-accept layui-hide-xs">已结</span>
<span class="fly-list-nums">
<i class="iconfont icon-pinglun1" title="回答"></i> 66
</span>
</p>
</div>
<div class="fly-list-badge">
<!--
<span class="layui-badge layui-bg-black">置顶</span>
<span class="layui-badge layui-bg-red">精帖</span>
-->
</div>
</li>
#end
</ul>
</div>
<div class="fly-panel" style="margin-bottom: 0;">
<div class="fly-panel-title fly-filter">
<a href="" class="layui-this">综合</a>
<span class="fly-mid"></span>
<a href="">未结</a>
<span class="fly-mid"></span>
<a href="">已结</a>
<span class="fly-mid"></span>
<a href="">精华</a>
<span class="fly-filter-right layui-hide-xs">
<a href="" class="layui-this">按最新</a>
<span class="fly-mid"></span>
<a href="">按热议</a>
</span>
</div>
<!--帖子列表-->
<ul class="fly-list">
#for(x : contents.rows??)
<li class="fly-list-li">
<a href="/user/#(x.userId??)" class="fly-list-avatar">
<img src="#(x.avatar??)" alt="">
<li>
<a href="user/home.html" class="fly-avatar">
<img src="#(x.avatar)" alt="#(x.nickname)">
</a>
<h2 class="fly-tip">
<a href="/jie/detail/#(x.contentId??)">#(x.title??)</a>
#if(x.top == 1)
<span class="fly-tip-stick">置顶</span>
#end
#if(x.wonderful == 1)
<span class="fly-tip-jing">精帖</span>
#end
<h2>
<a class="layui-badge">动态</a>
<a href="/jie/detail/#(x.contentId)">#(x.title)</a>
</h2>
<p>
<span><a href="/user/home/#(x.userId??)">#(x.nickname??)</a></span>
<span>#(x.createTime??)</span>
<span>#(x.cateName??)</span>
<span class="fly-list-hint">
<i class="iconfont" title="回答">&#xe60c;</i> #(x.replyNum??)
<i class="iconfont" title="人气">&#xe60b;</i> #(x.viewNum??)
<div class="fly-list-info">
<a href="/user/#(x.userId)" link>
<cite>#(x.nickname)</cite>
<!--
<i class="iconfont icon-renzheng" title="认证信息XXX"></i>
<i class="layui-badge fly-badge-vip">VIP3</i>
-->
</a>
<span>#(x.createTime)</span>
<span class="fly-list-kiss layui-hide-xs" title="悬赏飞吻"><i class="iconfont icon-kiss"></i> 60</span>
<!--<span class="layui-badge fly-badge-accept layui-hide-xs">已结</span>-->
<span class="fly-list-nums">
<i class="iconfont icon-pinglun1" title="回答"></i> 66
</span>
</p>
</div>
<div class="fly-list-badge">
<!--<span class="layui-badge layui-bg-red">精帖</span>-->
</div>
</li>
#end
</ul>
<div style="text-align: center">
<div class="laypage-main">
<a href="/jie/all" class="laypage-next">更多帖子</a>
<a href="/jie/all" class="laypage-next">更多求解</a>
</div>
</div>
</div>
</div>
<div class="layui-col-md4">
#define tuijian() 暂时不需要
<div class="fly-panel">
<h3 class="fly-panel-title">温馨通道</h3>
<ul class="fly-panel-main fly-list-static">
<li>
<a href="http://fly.layui.com/jie/4281/" target="_blank">layui 的 GitHub 及 Gitee (码云) 仓库欢迎Star</a>
</li>
<li>
<a href="http://fly.layui.com/jie/5366/" target="_blank">
layui 常见问题的处理和实用干货集锦
</a>
</li>
<li>
<a href="http://fly.layui.com/jie/4281/" target="_blank">layui 的 GitHub 及 Gitee (码云) 仓库欢迎Star</a>
</li>
<li>
<a href="http://fly.layui.com/jie/5366/" target="_blank">
layui 常见问题的处理和实用干货集锦
</a>
</li>
<li>
<a href="http://fly.layui.com/jie/4281/" target="_blank">layui 的 GitHub 及 Gitee (码云) 仓库欢迎Star</a>
</li>
</ul>
</div>
#end
<div class="fly-panel fly-signin">
<div class="fly-panel-title">
签到
<i class="fly-mid"></i>
<a href="javascript:;" class="fly-link" id="LAY_signinHelp">说明</a>
<i class="fly-mid"></i>
<a href="javascript:;" class="fly-link" id="LAY_signinTop">活跃榜<span class="layui-badge-dot"></span></a>
<span class="fly-signin-days">已连续签到<cite>16</cite></span>
</div>
<div class="fly-panel-main fly-signin-main">
<button class="layui-btn layui-btn-danger" id="LAY_signin">今日签到</button>
<span>可获得<cite>5</cite>飞吻</span>
<!-- 已签到状态 -->
<!--
<button class="layui-btn layui-btn-disabled">今日已签到</button>
<span>获得了<cite>20</cite>飞吻</span>
-->
</div>
</div>
<div class="edge">
<!--最新加入-->
<div class="fly-panel leifeng-rank">
<h3 class="fly-panel-title">最新加入 - (总用户#(lastReg.total??0))</h3>
<div class="fly-panel fly-rank fly-rank-reply" id="LAY_replyRank">
<h3 class="fly-panel-title">最新加入</h3>
<dl>
<!--<i class="layui-icon fly-loading">&#xe63d;</i>-->
#for(x : lastReg.rows??)
<dd>
<a href="user/#(x.userId)">
<img src="#(x.avatar)">
<cite>#(x.nickname)</cite>
<i>#(x.time)</i>
<a href="/user/#(x.userId)">
<img src="#(x.avatar)"><cite>#(x.nickname)</cite><i>#(x.time)</i>
</a>
</dd>
#end
</dl>
</div>
<!--热帖-->
<dl class="fly-panel fly-list-one">
<dt class="fly-panel-title">最近热帖</dt>
#for(x : hotView.rows)
<dd>
<a href="/jie/detail/#(x.contentId)">#(x.title)</a>
<span><i class="iconfont">&#xe60b;</i> #(x.viewNum)</span>
</dd>
#end
</dl>
<!--热议-->
<dl class="fly-panel fly-list-one">
<dt class="fly-panel-title">近期热议</dt>
<dt class="fly-panel-title">本周热议</dt>
#for(x : hotReply.rows)
<dd>
<a href="/jie/detail/#(x.contentId)">#(x.title)</a>
<span><i class="iconfont">&#xe60c;</i> #(x.replyNum)</span>
<span><i class="iconfont icon-pinglun1"></i> #(x.replyNum)</span>
</dd>
#else
<div class="fly-none">没有相关数据</div>
#end
</dl>
<!--友情链接-->
#define tem()
#define AD()
<div class="fly-panel">
<div class="fly-panel-title">
这里可作为广告区域
</div>
<div class="fly-panel-main">
<a href="http://layim.layui.com/?from=fly" target="_blank" class="fly-zanzhu" time-limit="2017.09.25-2099.01.01" style="background-color: #5FB878;">LayIM 3.0 - layui 旗舰之作</a>
</div>
</div>
#end
#define link()
<div class="fly-panel fly-link">
<h3 class="fly-panel-title">友情链接</h3>
<dl>
<dd>
<a href="" target="_blank">xx</a>
</dd>
<dd>
<a href="" target="_blank">xxx</a>
</dd>
<dd>
<a href="" target="_blank">xxx</a>
</dd>
<dl class="fly-panel-main">
<dd><a href="http://www.layui.com/" target="_blank">layui</a><dd>
<dd><a href="http://layim.layui.com/" target="_blank">WebIM</a><dd>
<dd><a href="http://layer.layui.com/" target="_blank">layer</a><dd>
<dd><a href="http://www.layui.com/laydate/" target="_blank">layDate</a><dd>
<dd><a href="mailto:xianxin@layui-inc.com?subject=%E7%94%B3%E8%AF%B7Fly%E7%A4%BE%E5%8C%BA%E5%8F%8B%E9%93%BE" class="fly-link">申请友链</a><dd>
</dl>
</div>
#end
</div>
</div>
</div>
#end
@ -156,13 +216,13 @@
layui.cache.user = {
username: '游客'
,uid: -1
,avatar: '/res/images/avatar/00.jpg'
,avatar: '../res/images/avatar/00.jpg'
,experience: 83
,sex: '男'
};
layui.config({
version: "2.0.0"
,base: '/res/mods/'
version: "3.0.0"
,base: '../res/mods/' //这里实际使用时,建议改成绝对路径
}).extend({
fly: 'index'
}).use('fly');

View File

@ -1,57 +1,93 @@
#@layout()
#define main()
<div class="main layui-clear">
<div class="fly-panel" pad20>
<h2 class="page-title">发表问题</h2>
<!-- <div class="fly-none">并无权限</div> -->
<div class="layui-container fly-marginTop">
<div class="fly-panel" pad20 style="padding-top: 5px;">
<!--<div class="fly-none">没有权限</div>-->
<div class="layui-form layui-form-pane">
<div class="layui-tab layui-tab-brief" lay-filter="user">
<ul class="layui-tab-title">
<li class="layui-this">发表新帖<!-- 编辑帖子 --></li>
</ul>
<div class="layui-form layui-tab-content" id="LAY_ucm" style="padding: 20px 0;">
<div class="layui-tab-item layui-show">
<form action="" method="post">
<div class="layui-form-item">
<div class="layui-row layui-col-space15 layui-form-item">
<div class="layui-col-md3">
<label class="layui-form-label">所在专栏</label>
<div class="layui-input-block">
<select lay-verify="required" name="type">
<option></option>
<!--[内容栏目]10求助20分享30建议40公告50动态-->
<option value="10">求助</option>
<option value="20">分享</option>
<option value="30">建议</option>
<option value="40">公告</option>
<option value="50">动态</option>
</select>
</div>
</div>
<div class="layui-col-md9">
<label for="L_title" class="layui-form-label">标题</label>
<div class="layui-input-block">
<input type="hidden" name="contentId" value="#(bean.contentId??)">
<input type="text" id="L_title" name="title" value="#(bean.title??)" required lay-verify="required" autocomplete="off" class="layui-input">
<!-- <input type="hidden" name="id" value="{{d.edit.id}}"> -->
</div>
</div>
</div>
<div class="layui-row layui-col-space15 layui-form-item layui-hide" id="LAY_quiz">
<div class="layui-col-md3">
<label class="layui-form-label">所属产品</label>
<div class="layui-input-block">
<select name="project">
<option></option>
<option value="layui">layui</option>
<option value="独立版layer">独立版layer</option>
<option value="独立版layDate">独立版layDate</option>
<option value="LayIM">LayIM</option>
<option value="Fly社区模板">Fly社区模板</option>
</select>
</div>
</div>
<div class="layui-col-md3">
<label class="layui-form-label" for="L_version">版本号</label>
<div class="layui-input-block">
<input type="text" id="L_version" value="" name="version" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-col-md6">
<label class="layui-form-label" for="L_browser">浏览器</label>
<div class="layui-input-block">
<input type="text" id="L_browser" value="" name="browser" placeholder="浏览器名称及版本IE 11" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item layui-form-text">
<div class="layui-input-block">
<textarea id="L_content" name="content" required lay-verify="required" placeholder="请输入内容" class="layui-textarea fly-editor" style="height: 260px;">#(bean.content??)</textarea>
<textarea id="L_content" name="content" required lay-verify="required" placeholder="详细描述" class="layui-textarea fly-editor" style="height: 260px;">#(bean.content??)</textarea>
</div>
<label for="L_content" class="layui-form-label" style="top: -2px;">描述</label>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">所在类别</label>
<div class="layui-input-block">
<select lay-verify="required" name="cate">
<option></option>
<option value="1" #if(bean.cate?? == 1) selected #end>Redkale框架综合</option>
<option value="2" #if(bean.cate?? == 2) selected #end>JFinal框架综合</option>
<option value="3" #if(bean.cate?? == 3) selected #end>Layui框架综合</option>
<option value="4" #if(bean.cate?? == 4) selected #end>JSON解析</option>
<option value="9" #if(bean.cate?? == 5) selected #end>其他</option>
</select>
</div>
</div>
<!--<div class="layui-inline">
<label class="layui-form-label">悬赏飞吻</label>
<div class="layui-input-block">
<select name="experience">
<option value="5" selected>5</option>
<option value="20">20</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</div>
</div>-->
</div>
<!--<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">悬赏飞吻</label>
<div class="layui-input-inline" style="width: 190px;">
<select name="experience">
<option value="20">20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="60">60</option>
<option value="80">80</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux">发表后无法更改飞吻</div>
</div>
</div>
<div class="layui-form-item">
<label for="L_vercode" class="layui-form-label">人类验证</label>
<div class="layui-input-inline">
<input type="text" id="L_vercode" name="vercode" required lay-verify="required" placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
<input type="text" id="L_vercode" name="vercode" required lay-verify="required"
placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid">
<span style="color: #c00;">1+1=?</span>
@ -64,6 +100,9 @@
</div>
</div>
</div>
</div>
</div>
</div>
#end
#define js()

View File

@ -1,145 +1,109 @@
#set(title=bean.title)
#set(keywords=bean.title)
#set(description=bean.title)
#@layout()
#define main()
<div class="main layui-clear">
<div class="wrap">
<div class="content detail">
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-md8 content detail">
<!--内容-->
<div class="fly-panel detail-box">
<h1>#(bean.title??)</h1>
<div class="fly-tip fly-detail-hint" data-id="#(bean.contentId??)">
<h1>#(bean.title)</h1>
<div class="fly-detail-info">
<!-- <span class="layui-badge">审核中</span> -->
<span class="layui-badge layui-bg-green fly-detail-column">动态</span>
<span class="layui-badge" style="background-color: #999;">未结</span>
<!-- <span class="layui-badge" style="background-color: #5FB878;">已结</span> -->
#if(bean.top == 1)
<span class="fly-tip-stick">置顶帖</span>
<span class="layui-badge layui-bg-black">置顶</span>
#end
#if(bean.wonderful == 1)
<span class="fly-tip-jing">精帖</span>
<span class="layui-badge layui-bg-red">精帖</span>
#end
#if(bean.solved > 0)
<span class="fly-tip-jie">已采纳</span>
#if(mine.userId?? == 100001)
<div class="fly-admin-box" data-id="#(bean.contentId)">
<span class="layui-btn layui-btn-xs jie-admin" type="del">删除</span>
#if(bean.top == 1)
<span class="layui-btn layui-btn-xs jie-admin" type="set" field="stick" rank="0" style="background-color:#ccc;">取消置顶</span>
#else
<span class="layui-btn layui-btn-xs jie-admin" type="set" field="stick" rank="1">置顶</span>
#end
<span class="" style="background-color:#fff;"></span>
<!--
<span>未结贴</span>-->
<!-- <span class="jie-admin" type="del" style="margin-left: 20px;">删除</span>
<span class="jie-admin" type="set" field="stick" rank="1">置顶</span>
<span class="jie-admin" type="set" field="stick" rank="0" style="background-color:#ccc;">取消置顶</span>
<span class="jie-admin" type="set" field="status" rank="1">加精</span>
<span class="jie-admin" type="set" field="status" rank="0" style="background-color:#ccc;">取消加精</span> -->
<div class="fly-list-hint">
<i class="iconfont" title="回答">&#xe60c;</i> #(bean.replyNum??0)
<i class="iconfont" title="人气">&#xe60b;</i> #(bean.viewNum??1)
#if(bean.wonderful == 1)
<span class="layui-btn layui-btn-xs jie-admin" type="set" field="status" rank="0" style="background-color:#ccc;">取消加精</span>
#else
<span class="layui-btn layui-btn-xs jie-admin" type="set" field="status" rank="1">加精</span>
#end
</div>
#end
<span class="fly-list-nums">
<a href="#comment"><i class="iconfont" title="回答">&#xe60c;</i> #(bean.replyNum??0)</a>
<i class="iconfont" title="人气">&#xe60b;</i> #(bean.viewNum??1)
</span>
</div>
<div class="detail-about">
<a class="jie-user" href="/user/#(bean.userId)">
<img src="#(bean.avatar??)" alt="">
<cite>
#(bean.nickname??)
<em>#(bean.createTime??)</em>
</cite>
<a class="fly-avatar" href="/user/#(bean.userId)">
<img src="#(bean.avatar)" alt="#(bean.nickname)">
</a>
<div class="detail-hits" data-id="#(bean.contentId)">
<!--<span style="color:#FF7200">悬赏20飞吻</span>-->
#if(bean.userId == mine.userId??)
<span class="layui-btn layui-btn-mini jie-admin" type="edit"><a href="/jie/add/#(bean.contentId??)">编辑此贴</a></span>
#end
#if(bean.hadCollect == 1)
<span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="remove">取消收藏</span>
#else
<span class="layui-btn layui-btn-mini jie-admin " type="collect" data-type="add">收藏</span>
<div class="fly-detail-user">
<a href="/user/#(bean.userId)" class="fly-link">
<cite>#(bean.nickname)</cite>
<i class="iconfont icon-renzheng" title="认证信息:{{ rows.user.approve }}"></i>
<i class="layui-badge fly-badge-vip">VIP3</i>
</a>
<span>#(bean.createTime??)</span>
</div>
<div class="detail-hits" id="LAY_jieAdmin" data-id="123">
<span style="padding-right: 10px; color: #FF7200">悬赏60飞吻</span>
#if(bean.userId == mine.userId?? || mine.userId?? == 100001)
<span class="layui-btn layui-btn-xs jie-admin" type="edit"><a href="/jie/add/#(bean.contentId)">编辑此贴</a></span>
#end
</div>
</div>
<div class="detail-body photos" style="margin-bottom: 20px;">
<div class="detail-body photos">
#(bean.content??)
</div>
</div>
<div class="fly-panel detail-box" style="padding-top: 20px;">
<fieldset class="layui-elem-field layui-field-title" style="text-align: center;"> <legend>回帖</legend> </fieldset>
<a name="comment"></a>
<ul class="jieda photos" id="jieda">
<!--<li data-id="12" class="jieda-daan">
<a name="item-121212121212"></a>
<div class="detail-about detail-about-reply">
<a class="jie-user" href="">
<img src="../../res/images/avatar/default.png" alt="">
<cite>
<i>纸飞机</i>
<em>(楼主)</em>
<em style="color:#5FB878">(管理员)</em>
<em style="color:#FF9E3F">(活雷锋)</em>
<em style="color:#999">(该号已被封)</em>
</cite>
</a>
<div class="detail-hits">
<span>3分钟前</span>
</div>
<i class="iconfont icon-caina" title="最佳答案"></i>
</div>
<div class="detail-body jieda-body">
<p>么么哒</p>
</div>
<div class="jieda-reply">
<span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em></span>
<span type="reply"><i class="iconfont icon-svgmoban53"></i>回复</span>
<div class="jieda-admin">
<span type="edit">编辑</span>
<span type="del">删除</span>
<span class="jieda-accept" type="accept">采纳</span>
</div>
</div>
</li>-->
<!--<li data-id="13">
<a name="item-121212121212"></a>
<div class="detail-about detail-about-reply">
<a class="jie-user" href="">
<img src="../../res/images/avatar/default.png" alt="">
<cite>
<i>香菇</i>
<em style="color:#FF9E3F">活雷锋</em>
</cite>
</a>
<div class="detail-hits">
<span>刚刚</span>
</div>
</div>
<div class="detail-body jieda-body">
蓝瘦face[偷笑]
</div>
<div class="jieda-reply">
<span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i><em>0</em></span>
<span type="reply"><i class="iconfont icon-svgmoban53"></i>回复</span>
<div class="jieda-admin">
<span type="edit">编辑</span>
<span type="del">删除</span>
<span class="jieda-accept" type="accept">采纳</span>
</div>
</div>
</li>-->
<!--评论-->
<div class="fly-panel detail-box" id="flyReply">
<fieldset class="layui-elem-field layui-field-title" style="text-align: center;">
<legend>回帖</legend>
</fieldset>
<ul class="jieda" id="jieda">
#for(x : comments.rows??)
<li data-id="#(x.commentId)">
<a name="item-121212121212"></a>
<li data-id="111" class="jieda-daan">
<a name="item-1111111111"></a>
<div class="detail-about detail-about-reply">
<a class="jie-user" href="/user/#(x.userId)">
<img src="#(x.avatar??)" alt="">
<cite>
<i>#(x.nickname??)</i>
<!--<em style="color:#FF9E3F">活雷锋</em>-->
</cite>
<a class="fly-avatar" href="/user/#(x.userId)">
<img src="#(x.avatar)" alt="#(x.nickname)">
</a>
<div class="detail-hits">
<span>#(x.createTime??)</span>
<div class="fly-detail-user">
<a href="" class="fly-link">
<cite>#(x.nickname)</cite>
<i class="iconfont icon-renzheng" title="认证信息XXX"></i>
<i class="layui-badge fly-badge-vip">VIP3</i>
</a>
#if(x.userId == bean.userId??)
<span>(楼主)</span>
#end
<!--
<span style="color:#5FB878">(管理员)</span>
<span style="color:#FF9E3F">(社区之光)</span>
<span style="color:#999">(该号已被封)</span>
-->
</div>
<div class="detail-hits"><span>#(x.createTime??)</span></div>
#if(1>2)
<i class="iconfont icon-caina" title="最佳答案"></i>
#end
</div>
<div class="detail-body jieda-body">
#(x.content??)
<div class="detail-body jieda-body photos">
#(x.content)
</div>
<div class="jieda-reply">
#if(x.hadSupport == 1)
@ -148,59 +112,70 @@
<span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i><em>#(x.supportNum)</em></span>
#end
<span type="reply"><i class="iconfont icon-svgmoban53"></i>回复</span>
<!--<div class="jieda-admin">
<div class="jieda-admin">
#if(x.userId == mine.userId?? && false)
<span type="edit">编辑</span>
<span type="del">删除</span>
#end
#if(bean.userId == mine.userId??)
<span class="jieda-accept" type="accept">采纳</span>
</div>-->
#end
</div>
</div>
</li>
#else
<li class="fly-none">没有任何回答</li>
<li class="fly-none">消灭零回复</li>
#end
<!-- <li class="fly-none">没有任何回答</li> -->
</ul>
<div class="layui-form layui-form-pane">
<form action="/jie/reply/" method="post">
<div class="layui-form-item layui-form-text">
<a name="comment"></a>
<div class="layui-input-block">
<textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea>
<textarea id="L_content" name="content" required lay-verify="required" placeholder="请输入内容" class="layui-textarea fly-editor" style="height: 150px;"></textarea>
</div>
</div>
<div class="layui-form-item">
<input type="hidden" name="contentId" value="#(bean.contentId??)">
<input type="hidden" name="pid" value="0">
<button class="layui-btn" lay-filter="jie-reply" lay-submit>提交回</button>
<button class="layui-btn" lay-filter="jie-reply" lay-submit>提交回</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="edge">
<div class="layui-col-md4">
<!--热议-->
<dl class="fly-panel fly-list-one">
<dt class="fly-panel-title">最近热帖</dt>
#for(x : hotView.rows)
<dd>
<a href="/jie/detail/#(x.contentId)">#(x.title)</a>
<span><i class="iconfont">&#xe60b;</i> #(x.viewNum)</span>
</dd>
#end
</dl>
<dl class="fly-panel fly-list-one">
<dt class="fly-panel-title">近期热议</dt>
<dt class="fly-panel-title">本周热议</dt>
#for(x : hotReply.rows)
<dd>
<a href="/jie/detail/#(x.contentId)">#(x.title)</a>
<span><i class="iconfont">&#xe60c;</i> #(x.replyNum)</span>
<span><i class="iconfont icon-pinglun1"></i> #(x.replyNum)</span>
</dd>
#else
<div class="fly-none">没有相关数据</div>
#end
</dl>
#define xx()
<div class="fly-panel">
<div class="fly-panel-title">
这里可作为广告区域
</div>
<div class="fly-panel-main">
<a href="http://layim.layui.com/?from=fly" target="_blank" class="fly-zanzhu" time-limit="2017.09.25-2099.01.01" style="background-color: #5FB878;">LayIM 3.0 - layui 旗舰之作</a>
</div>
</div>
<div class="fly-panel" style="padding: 20px 0; text-align: center;">
<img src="../../res/images/weixin.jpg" style="max-width: 100%;" alt="layui">
<p style="position: relative; color: #666;">微信扫码关注 layui 公众号</p>
</div>
#end
</div>
</div>
</div>
#end

View File

@ -1,65 +1,117 @@
#@layout()
#define main()
<div class="main layui-clear">
<div class="wrap">
<div class="content" style="margin-right:0">
<div class="fly-tab">
<span>
<a href="/jie/all" class="all">全部</a>
<a href="/jie/unsolved" class="unsolved">未结帖</a>
<a href="/jie/solved" class="solved">已采纳</a>
<a href="/jie/wonderful" class="wonderful">精帖</a>
<a href="/user">我的帖</a>
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-md8">
<div class="fly-panel" style="margin-bottom: 0;">
<div class="fly-panel-title fly-filter">
<a href="" class="layui-this">综合</a>
<span class="fly-mid"></span>
<a href="">未结</a>
<span class="fly-mid"></span>
<a href="">已结</a>
<span class="fly-mid"></span>
<a href="">精华</a>
<span class="fly-filter-right layui-hide-xs">
<a href="" class="layui-this">按最新</a>
<span class="fly-mid"></span>
<a href="">按热议</a>
</span>
<form action="https://www.baidu.com/s" class="fly-search">
<i class="iconfont icon-sousuo"></i>
<input class="layui-input" autocomplete="off" placeholder="搜索内容,回车跳转" type="text" name="wd">
</form>
<a href="/jie/add" class="layui-btn jie-add">发布帖子</a>
</div>
<ul class="fly-list">
#for(x : contents.rows)
<li class="fly-list-li">
<a href="/user/home.html" class="fly-list-avatar">
<img src="#(x.avatar??)" alt="">
<li>
<a href="user/#(x.userId)" class="fly-avatar">
<img src="#(x.avatar??)" alt="#(x.nickname)">
</a>
<h2 class="fly-tip">
<h2>
<a class="layui-badge">分享</a>
<a href="/jie/detail/#(x.contentId)">#(x.title)</a>
</h2>
<div class="fly-list-info">
<a href="user/#(x.userId)" link>
<cite>#(x.nickname)</cite>
<!--
<i class="iconfont icon-renzheng" title="认证信息XXX"></i>
<i class="layui-badge fly-badge-vip">VIP3</i>
-->
</a>
<span>#(x.createTime)</span>
<span class="fly-list-kiss layui-hide-xs" title="悬赏飞吻"><i class="iconfont icon-kiss"></i> 60</span>
<!--<span class="layui-badge fly-badge-accept layui-hide-xs">已结</span>-->
<span class="fly-list-nums">
<i class="iconfont icon-pinglun1" title="回答"></i> #(x.replyNum??0)
</span>
</div>
<div class="fly-list-badge">
#if(x.top == 1)
<span class="fly-tip-stick">置顶</span>
<span class="layui-badge layui-bg-black">置顶</span>
#end
#if(x.wonderful == 1)
<span class="fly-tip-jing">精帖</span>
<span class="layui-badge layui-bg-red">精帖</span>
#end
</h2>
<p>
<span><a href="/user/home.html">#(x.nickname??"昵称")</a></span>
<span>#(x.createTime??)</span>
<span>#(x.cateName??)</span>
<span class="fly-list-hint">
<i class="iconfont" title="回答">&#xe60c;</i> #(x.replyNum??)
<i class="iconfont" title="人气">&#xe60b;</i> #(x.viewNum??)
</span>
</p>
</div>
</li>
#else
<li class="fly-none">没有任何帖子</li>
<div class="fly-none">没有相关数据</div>
#end
</ul>
<!-- <div class="fly-none">并无相关数据</div> -->
<div style="text-align: center">
<div id="jie-laypage"> <!--class="laypage-main"-->
<!--分页加载到这里-->
<div class="laypage-main"><span class="laypage-curr">1</span><a href="/jie/page/2/">2</a><a
href="/jie/page/3/">3</a><a href="/jie/page/4/">4</a><a
href="/jie/page/5/">5</a><span></span><a href="/jie/page/148/" class="laypage-last"
title="尾页">尾页</a><a href="/jie/page/2/"
class="laypage-next">下一页</a>
</div>
</div>
</div>
</div>
<div class="layui-col-md4">
<dl class="fly-panel fly-list-one">
<dt class="fly-panel-title">本周热议</dt>
#for(x : hotReply.rows??)
<dd>
<a href="/jie/detail/#(x.contentId)">#(x.title)</a>
<span><i class="iconfont icon-pinglun1"></i> #(x.replyNum)</span>
</dd>
#else
<div class="fly-none">没有相关数据</div>
#end
</dl>
<div class="fly-panel">
<div class="fly-panel-title">
这里可作为广告区域
</div>
<div class="fly-panel-main">
<a href="" target="_blank" class="fly-zanzhu" style="background-color: #393D49;">虚席以待</a>
</div>
</div>
#define x()
<div class="fly-panel fly-link">
<h3 class="fly-panel-title">友情链接</h3>
<dl class="fly-panel-main">
<dd><a href="http://www.layui.com/" target="_blank">layui</a></dd>
<dd><a href="http://layim.layui.com/" target="_blank">WebIM</a></dd>
<dd><a href="http://layer.layui.com/" target="_blank">layer</a></dd>
<dd><a href="http://www.layui.com/laydate/" target="_blank">layDate</a></dd>
<dd>
<a href="mailto:xianxin@layui-inc.com?subject=%E7%94%B3%E8%AF%B7Fly%E7%A4%BE%E5%8C%BA%E5%8F%8B%E9%93%BE"
class="fly-link">申请友链</a>
</dd>
</dl>
</div>
#end
</div>
</div>
</div>
#end

View File

@ -0,0 +1 @@
#功能模块

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
/** layui-v1.0.9_rls MIT License By http://www.layui.com */
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:30px;line-height:30px;border-bottom:1px solid #ddd}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #ddd;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}
/** layui-v2.2.3 MIT License By http://www.layui.com */
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
/** layui-v2.2.3 MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['<button class="layui-icon '+u+'" lay-type="sub">'+("updown"===n.anim?"&#xe619;":"&#xe603;")+"</button>",'<button class="layui-icon '+u+'" lay-type="add">'+("updown"===n.anim?"&#xe61a;":"&#xe602;")+"</button>"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['<div class="'+c+'"><ul>',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("<li"+(n.index===e?' class="layui-this"':"")+"></li>")}),i.join("")}(),"</ul></div>"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a<n.index&&e.slide("sub",n.index-a)})},m.prototype.slide=function(e,i){var n=this,l=n.elemItem,u=n.config,c=u.index,m=u.elem.attr("lay-filter");n.haveSlide||("sub"===e?(n.subIndex(i),l.eq(u.index).addClass(d),setTimeout(function(){l.eq(c).addClass(r),l.eq(u.index).addClass(r)},50)):(n.addIndex(i),l.eq(u.index).addClass(s),setTimeout(function(){l.eq(c).addClass(o),l.eq(u.index).addClass(o)},50)),setTimeout(function(){l.removeClass(a+" "+d+" "+s+" "+o+" "+r),l.eq(u.index).addClass(a),n.haveSlide=!1},300),n.elemInd.find("li").eq(u.index).addClass(a).siblings().removeClass(a),n.haveSlide=!0,layui.event.call(this,t,"change("+m+")",{index:u.index,prevIndex:c,item:l.eq(u.index)}))},m.prototype.events=function(){var e=this,i=e.config;i.elem.data("haveEvents")||(i.elem.on("mouseenter",function(){clearInterval(e.timer)}).on("mouseleave",function(){e.autoplay()}),i.elem.data("haveEvents",!0))},n.render=function(e){var i=new m(e);return i},e(t,n)});

View File

@ -1,2 +1,2 @@
/** layui-v1.0.9_rls MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var a=layui.jquery,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;")),c.html('<ol class="layui-code-ol"><li>'+o.replace(/[\r\t\n]+/g,"</li><li>")+"</li></ol>"),c.find(">.layui-code-h3")[0]||c.prepend('<h3 class="layui-code-h3">'+(c.attr("lay-title")||e.title||"code")+(e.about?'<a href="'+l+'" target="_blank">layui.code</a>':"")+"</h3>");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss");
/** layui-v2.2.3 MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;")),c.html('<ol class="layui-code-ol"><li>'+o.replace(/[\r\t\n]+/g,"</li><li>")+"</li></ol>"),c.find(">.layui-code-h3")[0]||c.prepend('<h3 class="layui-code-h3">'+(c.attr("lay-title")||e.title||"code")+(e.about?'<a href="'+l+'" target="_blank">layui.code</a>':"")+"</h3>");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss");

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
/** layui-v1.0.9_rls MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var l=layui.jquery,o=function(e){},t='<i class="layui-anim layui-anim-rotate layui-anim-loop layui-icon ">&#xe63e;</i>';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var u=l(e.elem);if(u[0]){var f=l(e.scrollElem||document),m=e.mb||50,s=!("isAuto"in e)||e.isAuto,y=e.end||"没有更多了",v=e.scrollElem&&e.scrollElem!==document,d="<cite>加载更多</cite>",h=l('<div class="layui-flow-more"><a href="javascript:;">'+d+"</a></div>");u.find(".layui-flow-more")[0]||u.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(y):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(f.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=v?e.height():l(window).height(),n=v?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=m&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var f=e.attr("lay-src");layui.img(f,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",f).removeAttr("lay-src"),l[0]&&u(l),i++})}},u=function(e,o){var u=a?(o||n).height():l(window).height(),f=n.scrollTop(),m=f+u;if(t.lazyimg.elem=l(r),e)c(e,u);else for(var s=0;s<t.lazyimg.elem.length;s++){var y=t.lazyimg.elem.eq(s),v=a?function(){return y.offset().top-n.offset().top+f}():y.offset().top;if(c(y,u),i=s,v>m)break}};if(u(),!o){var f;n.on("scroll",function(){var e=l(this);f&&clearTimeout(f),f=setTimeout(function(){u(null,e)},50)}),o=!0}return u},e("flow",new o)});
/** layui-v2.2.3 MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='<i class="layui-anim layui-anim-rotate layui-anim-loop layui-icon ">&#xe63e;</i>';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="<cite>加载更多</cite>",h=l('<div class="layui-flow-more"><a href="javascript:;">'+d+"</a></div>");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;s<t.lazyimg.elem.length;s++){var v=t.lazyimg.elem.eq(s),y=a?function(){return v.offset().top-n.offset().top+m}():v.offset().top;if(c(v,f),i=s,y>u)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
/** layui-v1.0.9_rls MIT License By http://www.layui.com */
;layui.define(function(a){"use strict";function t(a){new p(a)}var e=document,r="getElementById",n="getElementsByTagName",s=0,p=function(a){var t=this,e=t.config=a||{};e.item=s++,t.render(!0)};p.on=function(a,t,e){return a.attachEvent?a.attachEvent("on"+t,function(){e.call(a,window.even)}):a.addEventListener(t,e,!1),p},p.prototype.type=function(){var a=this.config;if("object"==typeof a.cont)return void 0===a.cont.length?2:3},p.prototype.view=function(){var a=this,t=a.config,e=[],r={};if(t.pages=0|t.pages,t.curr=0|t.curr||1,t.groups="groups"in t?0|t.groups:5,t.first="first"in t?t.first:"&#x9996;&#x9875;",t.last="last"in t?t.last:"&#x672B;&#x9875;",t.prev="prev"in t?t.prev:"&#x4E0A;&#x4E00;&#x9875;",t.next="next"in t?t.next:"&#x4E0B;&#x4E00;&#x9875;",t.pages<=1)return"";for(t.groups>t.pages&&(t.groups=t.pages),r.index=Math.ceil((t.curr+(t.groups>1&&t.groups!==t.pages?1:0))/(0===t.groups?1:t.groups)),t.curr>1&&t.prev&&e.push('<a href="javascript:;" class="layui-laypage-prev" data-page="'+(t.curr-1)+'">'+t.prev+"</a>"),r.index>1&&t.first&&0!==t.groups&&e.push('<a href="javascript:;" class="laypage_first" data-page="1" title="&#x9996;&#x9875;">'+t.first+"</a><span>&#x2026;</span>"),r.poor=Math.floor((t.groups-1)/2),r.start=r.index>1?t.curr-r.poor:1,r.end=r.index>1?function(){var a=t.curr+(t.groups-r.poor-1);return a>t.pages?t.pages:a}():t.groups,r.end-r.start<t.groups-1&&(r.start=r.end-t.groups+1);r.start<=r.end;r.start++)r.start===t.curr?e.push('<span class="layui-laypage-curr"><em class="layui-laypage-em" '+(/^#/.test(t.skin)?'style="background-color:'+t.skin+';"':"")+"></em><em>"+r.start+"</em></span>"):e.push('<a href="javascript:;" data-page="'+r.start+'">'+r.start+"</a>");return t.pages>t.groups&&r.end<t.pages&&t.last&&0!==t.groups&&e.push('<span>&#x2026;</span><a href="javascript:;" class="layui-laypage-last" title="&#x5C3E;&#x9875;" data-page="'+t.pages+'">'+t.last+"</a>"),r.flow=!t.prev&&0===t.groups,(t.curr!==t.pages&&t.next||r.flow)&&e.push(function(){return r.flow&&t.curr===t.pages?'<span class="layui-laypage-nomore" title="&#x5DF2;&#x6CA1;&#x6709;&#x66F4;&#x591A;">'+t.next+"</span>":'<a href="javascript:;" class="layui-laypage-next" data-page="'+(t.curr+1)+'">'+t.next+"</a>"}()),'<div class="layui-box layui-laypage layui-laypage-'+(t.skin?function(a){return/^#/.test(a)?"molv":a}(t.skin):"default")+'" id="layui-laypage-'+a.config.item+'">'+e.join("")+function(){return t.skip?'<span class="layui-laypage-total">&#x5230;&#x7B2C; <input type="number" min="1" onkeyup="this.value=this.value.replace(/\\D/, \'\');" value="'+t.curr+'" class="layui-laypage-skip"> &#x9875; <button type="button" class="layui-laypage-btn">&#x786e;&#x5b9a;</button></span>':""}()+"</div>"},p.prototype.jump=function(a){if(a){for(var t=this,e=t.config,r=a.children,s=a[n]("button")[0],i=a[n]("input")[0],u=0,o=r.length;u<o;u++)"a"===r[u].nodeName.toLowerCase()&&p.on(r[u],"click",function(){var a=0|this.getAttribute("data-page");e.curr=a,t.render()});s&&p.on(s,"click",function(){var a=0|i.value.replace(/\s|\D/g,"");a&&a<=e.pages&&(e.curr=a,t.render())})}},p.prototype.render=function(a){var t=this,n=t.config,s=t.type(),p=t.view();2===s?n.cont.innerHTML=p:3===s?n.cont.html(p):e[r](n.cont).innerHTML=p,n.jump&&n.jump(n,a),t.jump(e[r]("layui-laypage-"+n.item)),n.hash&&!a&&(location.hash="!"+n.hash+"="+n.curr)},a("laypage",t)});
/** layui-v2.2.3 MIT License By http://www.layui.com */
;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"&#x4E0A;&#x4E00;&#x9875;",a.next="next"in a?a.next:"&#x4E0B;&#x4E00;&#x9875;";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?'<a href="javascript:;" class="layui-laypage-prev'+(1==a.curr?" "+r:"")+'" data-page="'+(a.curr-1)+'">'+a.prev+"</a>":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push('<a href="javascript:;" class="layui-laypage-first" data-page="1" title="&#x9996;&#x9875;">'+(a.first||1)+"</a>");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r<t-1&&(r=u-t+1),a.first!==!1&&r>2&&e.push('<span class="layui-laypage-spr">&#x2026;</span>');r<=u;r++)r===a.curr?e.push('<span class="layui-laypage-curr"><em class="layui-laypage-em" '+(/^#/.test(a.theme)?'style="background-color:'+a.theme+';"':"")+"></em><em>"+r+"</em></span>"):e.push('<a href="javascript:;" data-page="'+r+'">'+r+"</a>");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1<a.pages&&e.push('<span class="layui-laypage-spr">&#x2026;</span>'),0!==t&&e.push('<a href="javascript:;" class="layui-laypage-last" title="&#x5C3E;&#x9875;" data-page="'+a.pages+'">'+(a.last||a.pages)+"</a>")),e.join("")}(),next:function(){return a.next?'<a href="javascript:;" class="layui-laypage-next'+(a.curr==a.pages?" "+r:"")+'" data-page="'+(a.curr+1)+'">'+a.next+"</a>":""}(),count:'<span class="layui-laypage-count">共 '+a.count+" 条</span>",limit:function(){var e=['<span class="layui-laypage-limits"><select lay-ignore>'];return layui.each(a.limits,function(t,n){e.push('<option value="'+n+'"'+(n===a.limit?"selected":"")+">"+n+" 条/页</option>")}),e.join("")+"</select></span>"}(),skip:function(){return['<span class="layui-laypage-skip">&#x5230;&#x7B2C;','<input type="text" min="1" value="'+a.curr+'" class="layui-input">','&#x9875;<button type="button" class="layui-laypage-btn">&#x786e;&#x5b9a;</button>',"</span>"].join("")}()};return['<div class="layui-box layui-laypage layui-laypage-'+(a.theme?/^#/.test(a.theme)?"molv":a.theme:"default")+'" id="layui-laypage-'+a.index+'">',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"</div>"].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;o<y;o++)"a"===r[o].nodeName.toLowerCase()&&s.on(r[o],"click",function(){var e=0|this.getAttribute("data-page");e<1||e>i.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)});

View File

@ -1,2 +1,2 @@
/** layui-v1.0.9_rls MIT License By http://www.layui.com */
;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},n={exp:function(e){return new RegExp(e,"g")},query:function(e,n,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return c((n||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;")},error:function(e,r){var n="Laytpl Error";return"object"==typeof console&&console.error(n+e+"\n"+(r||"")),n+e}},c=n.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=c("^"+r.open+"#",""),l=c(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(c(r.open+"#"),r.open+"# ").replace(c(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(/(?="|')/g,"\\").replace(n.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(n.query(1),function(e){var n='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(c(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),n='"+_escape_('),n+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,n.escape)}catch(u){return delete o.cache,n.error(u,p)}},t.pt.render=function(e,r){var c,t=this;return e?(c=t.cache?t.cache(e,n.escape):t.parse(t.tpl,e),r?void r(c):c):n.error("no data")};var o=function(e){return"string"!=typeof e?n.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var n in e)r[n]=e[n]},o.v="1.2.0",e("laytpl",o)});
/** layui-v2.2.3 MIT License By http://www.layui.com */
;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;")},error:function(e,r){var c="Laytpl Error";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
/** layui-v1.0.9_rls MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var o=layui.jquery,a=layui.hint(),r="layui-tree-enter",i=function(e){this.options=e},t={arrow:["&#xe623;","&#xe625;"],checkbox:["&#xe626;","&#xe627;"],radio:["&#xe62b;","&#xe62a;"],branch:["&#xe622;","&#xe624;"],leaf:"&#xe621;"};i.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},i.prototype.tree=function(e,a){var r=this,i=r.options,n=a||i.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o('<ul class="'+(n.spread?"layui-show":"")+'"></ul>'),s=o(["<li "+(n.spread?'data-spread="'+n.spread+'"':"")+">",function(){return l?'<i class="layui-icon layui-tree-spread">'+(n.spread?t.arrow[1]:t.arrow[0])+"</i>":""}(),function(){return i.check?'<i class="layui-icon layui-tree-check">'+("checkbox"===i.check?t.checkbox[0]:"radio"===i.check?t.radio[0]:"")+"</i>":""}(),function(){return'<a href="'+(n.href||"javascript:;")+'" '+(i.target&&n.href?'target="'+i.target+'"':"")+">"+('<i class="layui-icon layui-tree-'+(l?"branch":"leaf")+'">'+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"</i>")+("<cite>"+(n.name||"未命名")+"</cite></a>")}(),"</li>"].join(""));l&&(s.append(c),r.tree(c,n.children)),e.append(s),"function"==typeof i.click&&r.click(s,n),r.spread(s,n),i.drag&&r.drag(s,n)})},i.prototype.click=function(e,o){var a=this,r=a.options;e.children("a").on("click",function(e){layui.stope(e),r.click(o)})},i.prototype.spread=function(e,o){var a=this,r=(a.options,e.children(".layui-tree-spread")),i=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),i.removeClass("layui-show"),r.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),i.addClass("layui-show"),r.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};i[0]&&(r.on("click",l),n.on("dblclick",l))},i.prototype.on=function(e){var a=this,i=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),i.drag&&o(document).on("mousemove",function(e){var r=a.move;if(r.from){var i=(r.to,o('<div class="layui-box '+t+'"></div>'));e.preventDefault(),o("."+t)[0]||o("body").append(i);var n=o("."+t)[0]?o("."+t):i;n.addClass("layui-show").html(r.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(r),e.to&&e.to.elem.children("a").removeClass(r),a.move={},o("."+t).remove())})},i.prototype.move={},i.prototype.drag=function(e,a){var i=this,t=(i.options,e.children("a")),n=function(){var t=o(this),n=i.move;n.from&&(n.to={item:a,elem:e},t.addClass(r))};t.on("mousedown",function(){var o=i.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=i.move;a.from&&(delete a.to,e.removeClass(r))})},e("tree",function(e){var r=new i(e=e||{}),t=o(e.elem);return t[0]?void r.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})});
/** layui-v2.2.3 MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var o=layui.$,a=layui.hint(),i="layui-tree-enter",r=function(e){this.options=e},t={arrow:["&#xe623;","&#xe625;"],checkbox:["&#xe626;","&#xe627;"],radio:["&#xe62b;","&#xe62a;"],branch:["&#xe622;","&#xe624;"],leaf:"&#xe621;"};r.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},r.prototype.tree=function(e,a){var i=this,r=i.options,n=a||r.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o('<ul class="'+(n.spread?"layui-show":"")+'"></ul>'),s=o(["<li "+(n.spread?'data-spread="'+n.spread+'"':"")+">",function(){return l?'<i class="layui-icon layui-tree-spread">'+(n.spread?t.arrow[1]:t.arrow[0])+"</i>":""}(),function(){return r.check?'<i class="layui-icon layui-tree-check">'+("checkbox"===r.check?t.checkbox[0]:"radio"===r.check?t.radio[0]:"")+"</i>":""}(),function(){return'<a href="'+(n.href||"javascript:;")+'" '+(r.target&&n.href?'target="'+r.target+'"':"")+">"+('<i class="layui-icon layui-tree-'+(l?"branch":"leaf")+'">'+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"</i>")+("<cite>"+(n.name||"未命名")+"</cite></a>")}(),"</li>"].join(""));l&&(s.append(c),i.tree(c,n.children)),e.append(s),"function"==typeof r.click&&i.click(s,n),i.spread(s,n),r.drag&&i.drag(s,n)})},r.prototype.click=function(e,o){var a=this,i=a.options;e.children("a").on("click",function(e){layui.stope(e),i.click(o)})},r.prototype.spread=function(e,o){var a=this,i=(a.options,e.children(".layui-tree-spread")),r=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),r.removeClass("layui-show"),i.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),r.addClass("layui-show"),i.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};r[0]&&(i.on("click",l),n.on("dblclick",l))},r.prototype.on=function(e){var a=this,r=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),r.drag&&o(document).on("mousemove",function(e){var i=a.move;if(i.from){var r=(i.to,o('<div class="layui-box '+t+'"></div>'));e.preventDefault(),o("."+t)[0]||o("body").append(r);var n=o("."+t)[0]?o("."+t):r;n.addClass("layui-show").html(i.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(i),e.to&&e.to.elem.children("a").removeClass(i),a.move={},o("."+t).remove())})},r.prototype.move={},r.prototype.drag=function(e,a){var r=this,t=(r.options,e.children("a")),n=function(){var t=o(this),n=r.move;n.from&&(n.to={item:a,elem:e},t.addClass(i))};t.on("mousedown",function(){var o=r.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=r.move;a.from&&(delete a.to,e.removeClass(i))})},e("tree",function(e){var i=new r(e=e||{}),t=o(e.elem);return t[0]?void i.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})});

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
/** layui-v1.0.9_rls MIT License By http://www.layui.com */
;layui.define("jquery",function(l){"use strict";var o=layui.jquery,i={fixbar:function(l){l=l||{},l.bgcolor=l.bgcolor?"background-color:"+l.bgcolor:"";var i,a,c="layui-fixbar-top",t=[l.bar1===!0?"&#xe606;":l.bar1,l.bar2===!0?"&#xe607;":l.bar2,"&#xe604;"],r=o(['<ul class="layui-fixbar">',l.bar1?'<li class="layui-icon" lay-type="bar1" style="'+l.bgcolor+'">'+t[0]+"</li>":"",l.bar2?'<li class="layui-icon" lay-type="bar2" style="'+l.bgcolor+'">'+t[1]+"</li>":"",'<li class="layui-icon '+c+'" lay-type="top" style="'+l.bgcolor+'">'+t[2]+"</li>","</ul>"].join("")),e=r.find("."+c),s=function(){var i=o(document).scrollTop();i>=(l.showHeight||200)?a||(e.show(),a=1):a&&(e.hide(),a=0)};o(".layui-fixbar")[0]||("object"==typeof l.css&&r.css(l.css),o("body").append(r),s(),r.find("li").on("click",function(){var i=o(this),a=i.attr("lay-type");"top"===a&&o("html,body").animate({scrollTop:0},200),l.click&&l.click.call(this,a)}),o(document).on("scroll",function(){i&&clearTimeout(i),i=setTimeout(function(){s()},100)}))}};l("util",i)});
/** layui-v2.2.3 MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var t=layui.$,i={fixbar:function(e){var i,o,a="layui-fixbar",r="layui-fixbar-top",n=t(document),l=t("body");e=t.extend({showHeight:200},e),e.bar1=e.bar1===!0?"&#xe606;":e.bar1,e.bar2=e.bar2===!0?"&#xe607;":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var c=[e.bar1,e.bar2,"&#xe604;"],g=t(['<ul class="'+a+'">',e.bar1?'<li class="layui-icon" lay-type="bar1" style="'+e.bgcolor+'">'+c[0]+"</li>":"",e.bar2?'<li class="layui-icon" lay-type="bar2" style="'+e.bgcolor+'">'+c[1]+"</li>":"",'<li class="layui-icon '+r+'" lay-type="top" style="'+e.bgcolor+'">'+c[2]+"</li>","</ul>"].join("")),s=g.find("."+r),u=function(){var t=n.scrollTop();t>=e.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};t("."+a)[0]||("object"==typeof e.css&&g.css(e.css),l.append(g),u(),g.find("li").on("click",function(){var i=t(this),o=i.attr("lay-type");"top"===o&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,o)}),n.on("scroll",function(){clearTimeout(o),o=setTimeout(function(){u()},100)}))},countdown:function(e,t,i){var o=this,a="function"==typeof t,r=new Date(e).getTime(),n=new Date(!t||a?(new Date).getTime():t).getTime(),l=r-n,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=t);var g=setTimeout(function(){o.countdown(e,n+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,g),l<=0&&clearTimeout(g),g},timeAgo:function(e,t){var i=this,o=[[],[]],a=(new Date).getTime()-new Date(e).getTime();return a>6912e5?(a=new Date(e),o[0][0]=i.digit(a.getFullYear(),4),o[0][1]=i.digit(a.getMonth()+1),o[0][2]=i.digit(a.getDate()),t||(o[1][0]=i.digit(a.getHours()),o[1][1]=i.digit(a.getMinutes()),o[1][2]=i.digit(a.getSeconds())),o[0].join("-")+" "+o[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=12e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var o=e.length;o<t;o++)i+="0";return e<Math.pow(10,t)?i+(0|e):e},toDateString:function(e,t){var i=this,o=new Date(e||new Date),a=[i.digit(o.getFullYear(),4),i.digit(o.getMonth()+1),i.digit(o.getDate())],r=[i.digit(o.getHours()),i.digit(o.getMinutes()),i.digit(o.getSeconds())];return t=t||"yyyy-MM-dd HH:mm:ss",t.replace(/yyyy/g,a[0]).replace(/MM/g,a[1]).replace(/dd/g,a[2]).replace(/HH/g,r[0]).replace(/mm/g,r[1]).replace(/ss/g,r[2])}};e("util",i)});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

165
root/res/mods/case.js Normal file
View File

@ -0,0 +1,165 @@
/**
@Name: 案例
*/
layui.define(['laypage', 'fly'], function(exports){
var $ = layui.jquery;
var layer = layui.layer;
var util = layui.util;
var laytpl = layui.laytpl;
var form = layui.form;
var laypage = layui.laypage;
var upload = layui.upload;
var fly = layui.fly;
var device = layui.device();
//求解管理
var active = {
//提交案例
push: function(div){
layer.open({
type: 1
,id: 'LAY_pushcase'
,title: '提交案例'
,area: (device.ios || device.android) ? ($(window).width() + 'px') : '660px'
,content: ['<ul class="layui-form" style="margin: 20px;">'
,'<li class="layui-form-item">'
,'<label class="layui-form-label">案例名称</label>'
,'<div class="layui-input-block">'
,'<input required name="title" lay-verify="required" placeholder="一般为网站名称" value="" class="layui-input">'
,'</div>'
,'</li>'
,'<li class="layui-form-item">'
,'<label class="layui-form-label">案例网址</label>'
,'<div class="layui-input-block">'
,'<input required name="link" lay-verify="url" placeholder="必须是自己或自己参与过的项目" value="" class="layui-input">'
,'</div>'
,'</li>'
,'<li class="layui-form-item layui-form-text">'
,'<label class="layui-form-label">案例描述</label>'
,'<div class="layui-input-block layui-form-text">'
,'<textarea required name="desc" lay-verify="required" autocomplete="off" placeholder="大致介绍你的项目,也可以阐述你在该项目中使用 layui 的感受\n10-60个字" class="layui-textarea"></textarea>'
,'</div>'
,'</li>'
,'<li class="layui-form-item">'
,'<label class="layui-form-label">案例封面</label>'
,'<div class="layui-input-inline" style="width:auto;">'
,'<input type="hidden" name="cover" lay-verify="required" class="layui-input fly-case-image">'
,'<button type="button" class="layui-btn layui-btn-primary" id="caseUpload">'
,'<i class="layui-icon">&#xe67c;</i>上传图片'
,'</button>'
,'</div>'
,'<div class="layui-form-mid layui-word-aux" id="preview">推荐尺寸478*300大小不能超过 30kb</div>'
,'</li>'
,'<li class="layui-form-item">'
,'<label class="layui-form-label"> </label>'
,'<div class="layui-input-block">'
,'<input type="checkbox" name="agree" id="agree" title="我同意(如果你进行了刷赞行为,你的案例将被立马剔除)" lay-skin="primary">'
,'</div>'
,'</li>'
,'<li class="layui-form-item">'
,'<div class="layui-input-block">'
,'<button type="button" lay-submit lay-filter="pushCase" class="layui-btn">提交案例</button>'
,'</div>'
,'</li>'
,'</ul>'].join('')
,success: function(layero, index){
var image = layero.find('.fly-case-image')
,preview = $('#preview');
upload.render({
url: '/api/upload/case/'
,elem: '#caseUpload'
,size: 30
,done: function(res){
if(res.status == 0){
image.val(res.url);
preview.html('<a href="'+ res.url +'" target="_blank" style="color: #5FB878;">封面已上传,点击可预览</a>');
} else {
layer.msg(res.msg, {icon: 5});
}
}
});
form.render('checkbox').on('submit(pushCase)', function(data){
if(!data.field.agree){
return layer.tips('你需要同意才能提交', $('#agree').next(), {tips: 1});
}
fly.json('/case/push/', data.field, function(res){
layer.close(index);
layer.alert(res.msg, {
icon: 1
})
});
});
}
});
}
//点赞
,praise: function(othis){
var li = othis.parents('li')
,PRIMARY = 'layui-btn-primary'
,unpraise = !othis.hasClass(PRIMARY)
,numElem = li.find('.fly-case-nums')
fly.json('/case/praise/', {
id: li.data('id')
,unpraise: unpraise ? true : null
}, function(res){
numElem.html(res.praise);
if(unpraise){
othis.addClass(PRIMARY).html('点赞');
layer.tips('少了个赞囖', numElem, {
tips: 1
});
} else {
othis.removeClass(PRIMARY).html('已赞');
layer.tips('成功获得个赞', numElem, {
tips: [1, '#FF5722']
});
}
});
}
//查看点赞用户
,showPraise: function(othis){
var li = othis.parents('li');
if(othis.html() == 0) return layer.tips('该项目还没有收到赞', othis, {
tips: 1
});
fly.json('/case/praise_user/', {
id: li.data('id')
}, function(res){
var html = '';
layer.open({
type: 1
,title: '项目【'+ res.title + '】获得的赞'
,id: 'LAY_showPraise'
,shade: 0.8
,shadeClose: true
,area: '305px'
,skin: 'layer-ext-case'
,content: function(){
layui.each(res.data, function(_, item){
html += '<li><a href="/u/'+ 168*item.id +'/" target="_blank" title="'+ item.username +'"><img src="'+ item.avatar +'"></a></li>'
});
return '<ul class="layer-ext-ul">' + html + '</ul>';
}()
})
});
}
};
$('body').on('click', '.fly-case-active', function(){
var othis = $(this), type = othis.data('type');
active[type] && active[type].call(this, othis);
});
exports('case', {});
});

View File

@ -5,18 +5,22 @@
*/
layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','element'], function(exports){
layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util', 'face'], function(exports){
var $ = layui.jquery
,layer = layui.layer
,laytpl = layui.laytpl
,form = layui.form()
,form = layui.form
,element = layui.element
,upload = layui.upload
,util = layui.util
,device = layui.device()
,DISABLED = 'layui-btn-disabled';
//阻止IE7以下访问
if(device.ie && device.ie < 8){
layer.alert('如果您非得使用ie浏览Fly社区那么请使用ie8+');
layer.alert('如果您非得使用 IE 浏览器访问社区,那么请使用 IE8+');
}
layui.focusInsert = function(obj, str){
@ -33,49 +37,54 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
}
};
var gather = {
//数字前置补零
layui.laytpl.digit = function(num, length, end){
var str = '';
num = String(num);
length = length || 2;
for(var i = num.length; i < length; i++){
str += '0';
}
return num < Math.pow(10, length) ? str + (num|0) : num;
};
var fly = {
//Ajax
json: function(url, data, success, options){
var that = this;
var that = this, type = typeof data === 'function';
if(type){
options = success
success = data;
data = {};
}
options = options || {};
data = data || {};
return $.ajax({
type: options.type || 'post',
dataType: options.dataType || 'json',
data: data,
url: url,
success: function(res){
if(res.status === 0) {
if(typeof res === 'string'){
res = JSON.parse(res);
}
if(res.retcode === 0) {
success && success(res);
} else {
layer.msg(res.msg||res.code, {shift: 6});
layer.msg(res.retinfo || res.code, {shift: 6});
options.error && options.error();
}
}, error: function(e){
options.error || layer.msg('请求异常,请重试', {shift: 6});
layer.msg('请求异常,请重试', {shift: 6});
options.error && options.error(e);
}
});
}
//将普通对象按某个key排序
,sort: function(data, key, asc){
var obj = JSON.parse(JSON.stringify(data));
var compare = function (obj1, obj2) {
var value1 = obj1[key];
var value2 = obj2[key];
if (value2 < value1) {
return -1;
} else if (value2 > value1) {
return 1;
} else {
return 0;
}
};
obj.sort(compare);
if(asc) obj.reverse();
return obj;
}
//计算字符长度
,charLen: function(val){
var arr = val.split(''), len = 0;
@ -89,60 +98,18 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
//简易编辑器
,layEditor: function(options){
var html = '<div class="fly-edit">'
+'<span type="face" title="插入表情"><i class="iconfont icon-biaoqing"></i>表情</span>'
+'<span type="picture" title="插入图片img[src]"><i class="iconfont icon-tupian"></i>图片</span>'
+'<span type="href" title="超链接格式a(href)[text]"><i class="iconfont icon-lianjie"></i>链接</span>'
+'<span type="code" title="插入代码"><i class="iconfont icon-daima"></i>代码</span>'
+'<span type="yulan" title="预览"><i class="iconfont icon-yulan"></i>预览</span>'
+'</div>';
var log = {}, mod = {
picture: function(editor){ //插入图片
layer.open({
type: 1
,id: 'fly-jie-upload'
,title: '插入图片'
,area: 'auto'
,shade: false
,area: '465px'
,skin: 'layui-layer-border'
,content: ['<ul class="layui-form layui-form-pane" style="margin: 20px;">'
,'<li class="layui-form-item">'
,'<label class="layui-form-label">URL</label>'
,'<div class="layui-input-inline">'
,'<input required name="image" placeholder="支持直接粘贴远程图片地址" value="" class="layui-input">'
,'</div>'
,'<input required type="file" name="file" class="layui-upload-file" value="">'
,'</li>'
,'<li class="layui-form-item" style="text-align: center;">'
,'<button type="button" lay-submit lay-filter="uploadImages" class="layui-btn">确认</button>'
,'</li>'
,'</ul>'].join('')
,success: function(layero, index){
var image = layero.find('input[name="image"]');
layui.upload({
url: '/os/file/upload'
,elem: '#fly-jie-upload .layui-upload-file'
,success: function(res){
if(res.retcode == 0){
image.val(res.retinfo);
} else {
layer.msg(res.msg, {icon: 5});
}
}
});
var html = ['<div class="layui-unselect fly-edit">'
,'<span type="face" title="插入表情"><i class="iconfont icon-yxj-expression" style="top: 1px;"></i></span>'
,'<span type="picture" title="插入图片img[src]"><i class="iconfont icon-tupian"></i></span>'
,'<span type="href" title="超链接格式a(href)[text]"><i class="iconfont icon-lianjie"></i></span>'
,'<span type="code" title="插入代码或引用"><i class="iconfont icon-emwdaima" style="top: 1px;"></i></span>'
,'<span type="hr" title="插入水平线">hr</span>'
,'<span type="yulan" title="预览"><i class="iconfont icon-yulan1"></i></span>'
,'</div>'].join('');
form.on('submit(uploadImages)', function(data){
var field = data.field;
if(!field.image) return image.focus();
layui.focusInsert(editor[0], 'img['+ field.image + '] ');
layer.close(index);
});
}
});
}
,face: function(editor, self){ //插入表情
var str = '', ul, face = gather.faces;
var log = {}, mod = {
face: function(editor, self){ //插入表情
var str = '', ul, face = fly.faces;
for(var key in face){
str += '<li title="'+ key +'"><img src="'+ face[key] +'"></li>';
}
@ -160,10 +127,68 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
layui.focusInsert(editor[0], 'face' + title);
});
}
,picture: function(editor){ //插入图片
layer.open({
type: 1
,id: 'fly-jie-upload'
,title: '插入图片'
,area: 'auto'
,shade: false
,area: '465px'
,fixed: false
,offset: [
editor.offset().top - $(window).scrollTop() + 'px'
,editor.offset().left + 'px'
]
,skin: 'layui-layer-border'
,content: ['<ul class="layui-form layui-form-pane" style="margin: 20px;">'
,'<li class="layui-form-item">'
,'<label class="layui-form-label">URL</label>'
,'<div class="layui-input-inline">'
,'<input required name="image" placeholder="支持直接粘贴远程图片地址" value="" class="layui-input">'
,'</div>'
,'<button type="button" class="layui-btn layui-btn-primary" id="uploadImg"><i class="layui-icon">&#xe67c;</i>上传图片</button>'
,'</li>'
,'<li class="layui-form-item" style="text-align: center;">'
,'<button type="button" lay-submit lay-filter="uploadImages" class="layui-btn">确认</button>'
,'</li>'
,'</ul>'].join('')
,success: function(layero, index){
var image = layero.find('input[name="image"]');
//执行上传实例
upload.render({
elem: '#uploadImg'
,url: '/os/file/upload'
,size: 200
,done: function(res){
if(res.retcode == 0){
image.val(res.retinfo);
} else {
layer.msg(res.msg, {icon: 5});
}
}
});
form.on('submit(uploadImages)', function(data){
var field = data.field;
if(!field.image) return image.focus();
layui.focusInsert(editor[0], 'img['+ field.image + '] ');
layer.close(index);
});
}
});
}
,href: function(editor){ //超链接
layer.prompt({
title: '请输入合法链接'
,shade: false
,fixed: false
,id: 'LAY_flyedit_href'
,offset: [
editor.offset().top - $(window).scrollTop() + 'px'
,editor.offset().left + 'px'
]
}, function(val, index, elem){
if(!/^http(s*):\/\/[\S]/.test(val)){
layer.tips('这根本不是个链接,不要骗我。', elem, {tips:1})
@ -175,26 +200,31 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
}
,code: function(editor){ //插入代码
layer.prompt({
title: '请贴入代码'
title: '请贴入代码或任意文本'
,formType: 2
,maxlength: 10000
,shade: false
,area: ['830px', '390px']
,id: 'LAY_flyedit_code'
,area: ['800px', '360px']
}, function(val, index, elem){
layui.focusInsert(editor[0], '[pre]\n'+ val + '\n[/pre]');
layer.close(index);
});
}
,hr: function(editor){ //插入水平分割线
layui.focusInsert(editor[0], '[hr]');
}
,yulan: function(editor){ //预览
var content = editor.val();
content = /^\{html\}/.test(content)
? content.replace(/^\{html\}/, '')
: gather.content(content);
: fly.content(content);
layer.open({
type: 1
,title: '预览'
,shade: false
,area: ['100%', '100%']
,scrollbar: false
,content: '<div class="detail-body" style="margin:20px;">'+ content +'</div>'
@ -204,7 +234,7 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
layui.use('face', function(face){
options = options || {};
gather.faces = face;
fly.faces = face;
$(options.elem).each(function(index){
var that = this, othis = $(that), parent = othis.parent();
parent.prepend(html);
@ -229,60 +259,223 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
,content: function(content){
//支持的html标签
var html = function(end){
return new RegExp('\\['+ (end||'') +'(pre|div|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)\\]\\n*', 'g');
return new RegExp('\\n*\\['+ (end||'') +'(pre|hr|div|span|p|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)\\]\\n*', 'g');
};
content = gather.escape(content||'') //XSS
content = fly.escape(content||'') //XSS
.replace(/img\[([^\s]+?)\]/g, function(img){ //转义图片
return '<img src="' + img.replace(/(^img\[)|(\]$)/g, '') + '">';
}).replace(/@(\S+)(\s+?|$)/g, '@<a href="javascript:;" class="fly-aite">$1</a>$2') //转义@
.replace(/face\[([^\s\[\]]+?)\]/g, function(face){ //转义表情
var alt = face.replace(/^face/g, '');
return '<img alt="'+ alt +'" title="'+ alt +'" src="' + gather.faces[alt] + '">';
return '<img alt="'+ alt +'" title="'+ alt +'" src="' + fly.faces[alt] + '">';
}).replace(/a\([\s\S]+?\)\[[\s\S]*?\]/g, function(str){ //转义链接
var href = (str.match(/a\(([\s\S]+?)\)\[/)||[])[1];
var text = (str.match(/\)\[([\s\S]*?)\]/)||[])[1];
if(!href) return str;
var rel = /^(http(s)*:\/\/)\b(?!(\w+\.)*(sentsin.com|layui.com))\b/.test(href.replace(/\s/g, ''));
return '<a href="'+ href +'" target="_blank"'+ (rel ? ' rel="nofollow"' : '') +'>'+ (text||href) +'</a>';
}).replace(html(), '\<$1\>').replace(html('/'), '\</$1\>') //转移代码
}).replace(html(), '\<$1 $2\>').replace(html('/'), '\</$1\>') //转移HTML代码
.replace(/\n/g, '<br>') //转义换行
return content;
}
//新消息通知
,newmsg: function(){
if(layui.cache.user.uid !== -1){
gather.json('/message/nums/', {
var elemUser = $('.fly-nav-user');
if(layui.cache.user.uid !== -1 && elemUser[0]){
fly.json('/message/nums/', {
_: new Date().getTime()
}, function(res){
if(res.status === 0 && res.count > 0){
var msg = $('<a class="nav-message" href="javascript:;" title="您有'+ res.count +'条未阅读的消息">'+ res.count +'</a>');
$('.nav-user').append(msg);
var msg = $('<a class="fly-nav-msg" href="javascript:;">'+ res.count +'</a>');
elemUser.append(msg);
msg.on('click', function(){
gather.json('/message/read', {}, function(res){
fly.json('/message/read', {}, function(res){
if(res.status === 0){
location.href = '/user/message/';
}
});
});
layer.tips('你有 '+ res.count +' 条未读消息', msg, {
tips: 3
,tipsMore: true
,fixed: true
});
msg.on('mouseenter', function(){
layer.closeAll('tips');
})
}
});
}
return arguments.callee;
}
,cookie: function(e,o,t){
e=e||"";var n,i,r,a,c,p,s,d,u;if("undefined"==typeof o){if(p=null,document.cookie&&""!=document.cookie)for(s=document.cookie.split(";"),d=0;d<s.length;d++)if(u=$.trim(s[d]),u.substring(0,e.length+1)==e+"="){p=decodeURIComponent(u.substring(e.length+1));break}return p}t=t||{},null===o&&(o="",t.expires=-1),n="",t.expires&&("number"==typeof t.expires||t.expires.toUTCString)&&("number"==typeof t.expires?(i=new Date,i.setTime(i.getTime()+864e5*t.expires)):i=t.expires,n="; expires="+i.toUTCString()),r=t.path?"; path="+t.path:"",a=t.domain?"; domain="+t.domain:"",c=t.secure?"; secure":"",document.cookie=[e,"=",encodeURIComponent(o),n,r,a,c].join("");
}
};
//相册
/* layer.photos({
photos: '.photos'
,zIndex: 9999999999
,anim: -1
});*/
//签到
var tplSignin = ['{{# if(d.signed){ }}'
,'<button class="layui-btn layui-btn-disabled">今日已签到</button>'
,'<span>获得了<cite>{{ d.experience }}</cite>飞吻</span>'
,'{{# } else { }}'
,'<button class="layui-btn layui-btn-danger" id="LAY_signin">今日签到</button>'
,'<span>可获得<cite>{{ d.experience }}</cite>飞吻</span>'
,'{{# } }}'].join('')
,tplSigninDay = '已连续签到<cite>{{ d.days }}</cite>天'
,signRender = function(data){
laytpl(tplSignin).render(data, function(html){
elemSigninMain.html(html);
});
laytpl(tplSigninDay).render(data, function(html){
elemSigninDays.html(html);
});
}
,elemSigninHelp = $('#LAY_signinHelp')
,elemSigninTop = $('#LAY_signinTop')
,elemSigninMain = $('.fly-signin-main')
,elemSigninDays = $('.fly-signin-days');
if(elemSigninMain[0]){
/*
fly.json('/sign/status', function(res){
if(!res.data) return;
signRender.token = res.data.token;
signRender(res.data);
});
*/
}
$('body').on('click', '#LAY_signin', function(){
var othis = $(this);
if(othis.hasClass(DISABLED)) return;
fly.json('/sign/in', {
token: signRender.token || 1
}, function(res){
signRender(res.data);
}, {
error: function(){
othis.removeClass(DISABLED);
}
});
othis.addClass(DISABLED);
});
//签到说明
elemSigninHelp.on('click', function(){
layer.open({
type: 1
,title: '签到说明'
,area: '300px'
,shade: 0.8
,shadeClose: true
,content: ['<div class="layui-text" style="padding: 20px;">'
,'<blockquote class="layui-elem-quote">“签到”可获得社区飞吻,规则如下</blockquote>'
,'<table class="layui-table">'
,'<thead>'
,'<tr><th>连续签到天数</th><th>每天可获飞吻</th></tr>'
,'</thead>'
,'<tbody>'
,'<tr><td>5</td><td>5</td></tr>'
,'<tr><td>≥5</td><td>10</td></tr>'
,'<tr><td>≥15</td><td>15</td></tr>'
,'<tr><td>≥30</td><td>20</td></tr>'
,'</tbody>'
,'</table>'
,'<ul>'
,'<li>中间若有间隔,则连续天数重新计算</li>'
,'<li style="color: #FF5722;">不可利用程序自动签到,否则飞吻清零</li>'
,'</ul>'
,'</div>'].join('')
});
});
//签到活跃榜
var tplSigninTop = ['{{# layui.each(d.data, function(index, item){ }}'
,'<li>'
,'<a href="/u/{{item.uid}}" target="_blank">'
,'<img src="{{item.user.avatar}}">'
,'<cite class="fly-link">{{item.user.username}}</cite>'
,'</a>'
,'{{# var date = new Date(item.time); if(d.index < 2){ }}'
,'<span class="fly-grey">签到于 {{ layui.laytpl.digit(date.getHours()) + ":" + layui.laytpl.digit(date.getMinutes()) + ":" + layui.laytpl.digit(date.getSeconds()) }}</span>'
,'{{# } else { }}'
,'<span class="fly-grey">已连续签到 <i>{{ item.days }}</i> 天</span>'
,'{{# } }}'
,'</li>'
,'{{# }); }}'
,'{{# if(d.data.length === 0) { }}'
,'{{# if(d.index < 2) { }}'
,'<li class="fly-none fly-grey">今天还没有人签到</li>'
,'{{# } else { }}'
,'<li class="fly-none fly-grey">还没有签到记录</li>'
,'{{# } }}'
,'{{# } }}'].join('');
elemSigninTop.on('click', function(){
var loadIndex = layer.load(1, {shade: 0.8});
fly.json('../json/signin.js', function(res){ //实际使用,请将 url 改为真实接口
var tpl = $(['<div class="layui-tab layui-tab-brief" style="margin: 5px 0 0;">'
,'<ul class="layui-tab-title">'
,'<li class="layui-this">最新签到</li>'
,'<li>今日最快</li>'
,'<li>总签到榜</li>'
,'</ul>'
,'<div class="layui-tab-content fly-signin-list" id="LAY_signin_list">'
,'<ul class="layui-tab-item layui-show"></ul>'
,'<ul class="layui-tab-item">2</ul>'
,'<ul class="layui-tab-item">3</ul>'
,'</div>'
,'</div>'].join(''))
,signinItems = tpl.find('.layui-tab-item');
layer.close(loadIndex);
layui.each(signinItems, function(index, item){
var html = laytpl(tplSigninTop).render({
data: res.data[index]
,index: index
});
$(item).html(html);
});
layer.open({
type: 1
,title: '签到活跃榜 - TOP 20'
,area: '300px'
,shade: 0.8
,shadeClose: true
,id: 'layer-pop-signintop'
,content: tpl.prop('outerHTML')
});
}, {type: 'get'});
});
//回帖榜
var tplReply = ['{{# layui.each(d.data, function(index, item){ }}'
,'<dd>'
,'<a href="/u/{{item.uid}}">'
,'<img src="{{item.user.avatar}}">'
,'<cite>{{item.user.username}}</cite>'
,'<i>{{item["count(*)"]}}次回答</i>'
,'</a>'
,'</dd>'
,'{{# }); }}'].join('')
,elemReply = $('#LAY_replyRank');
if(elemReply[0]){
/*
fly.json('/top/reply/', {
limit: 20
}, function(res){
var html = laytpl(tplReply).render(res);
elemReply.find('dl').html(html);
});
*/
};
//相册
if($(window).width() > 750){
@ -299,17 +492,32 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
//搜索
$('.fly-search').submit(function(){
var input = $(this).find('input'), val = input.val();
$('.fly-search').on('click', function(){
layer.open({
type: 1
,title: false
,closeBtn: false
//,shade: [0.1, '#fff']
,shadeClose: true
,maxWidth: 10000
,skin: 'fly-layer-search'
,content: ['<form action="http://cn.bing.com/search">'
,'<input autocomplete="off" placeholder="搜索内容,回车跳转" type="text" name="q">'
,'</form>'].join('')
,success: function(layero){
var input = layero.find('input');
input.focus();
layero.find('form').submit(function(){
var val = input.val();
if(val.replace(/\s/g, '') === ''){
return false;
}
input.val(/*'site:1216.top '+ */input.val());
input.val('site:layui.com '+ input.val());
});
$('.icon-sousuo').on('click', function(){
$('.fly-search').submit();
}
})
});
//退出登录
$(".logout").on('click', function () {
$.post("/os/user/logout",{},function (data) {
@ -318,11 +526,11 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
});
//新消息通知
gather.newmsg();
fly.newmsg();
//发送激活邮件
gather.activate = function(email){
gather.json('/api/activate/', {}, function(res){
fly.activate = function(email){
fly.json('/api/activate/', {}, function(res){
if(res.status === 0){
layer.alert('已成功将激活链接发送到了您的邮箱,接受可能会稍有延迟,请注意查收。', {
icon: 1
@ -331,7 +539,7 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
});
};
$('#LAY-activate').on('click', function(){
gather.activate($(this).attr('email'));
fly.activate($(this).attr('email'));
});
//点击@
@ -350,12 +558,12 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
//表单提交
form.on('submit(*)', function(data){
var action = $(data.form).attr('action'), button = $(data.elem);
gather.json(action, data.field, function(res){
fly.json(action, data.field, function(res){
var end = function(){
if(res.action){
location.href = res.action;
} else {
gather.form[action||button.attr('key')](data.field, data.form);
fly.form[action||button.attr('key')](data.field, data.form);
}
};
if(res.status == 0){
@ -383,20 +591,10 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
}
//加载编辑器
gather.layEditor({
fly.layEditor({
elem: '.fly-editor'
});
//右下角固定Bar
util.fixbar({
bar1: false
,click: function(type){
if(type === 'bar1'){
layer.msg('bar1');
}
}
});
//手机设备的简单适配
var treeMobile = $('.site-tree-mobile')
,shadeMobile = $('.site-mobile-shade')
@ -409,14 +607,27 @@ layui.define(['layer', 'laytpl', 'form', 'upload', 'util', 'upload','face','elem
$('body').removeClass('site-mobile');
});
//图片懒加载
layui.use('flow', function(flow){
flow.lazyimg();
//获取统计数据
$('.fly-handles').each(function(){
var othis = $(this);
$.get('/api/handle?alias='+ othis.data('alias'), function(res){
othis.html('(下载量:'+ res.number +'');
})
});
//固定Bar
util.fixbar({
bar1: '&#xe642;'
,bgcolor: '#009688'
,click: function(type){
if(type === 'bar1'){
//layer.msg('打开 index.js开启发表新帖的路径');
location.href = '/jie/add';
}
}
});
exports('fly', gather);
exports('fly', fly);
});

View File

@ -4,15 +4,14 @@
*/
layui.define(['laypage', 'fly', 'form'], function(exports){
layui.define('fly', function(exports){
var $ = layui.jquery;
var layer = layui.layer;
var util = layui.util;
var laytpl = layui.laytpl;
var form = layui.form();
var form = layui.form;
var fly = layui.fly;
var laypage = layui.laypage;
var gather = {}, dom = {
jieda: $('#jieda')
@ -20,19 +19,41 @@ layui.define(['laypage', 'fly', 'form'], function(exports){
,jiedaCount: $('#jiedaCount')
};
//监听专栏选择
form.on('select(column)', function(obj){
var value = obj.value
,elemQuiz = $('#LAY_quiz')
,tips = {
tips: 1
,maxWidth: 250
,time: 10000
};
elemQuiz.addClass('layui-hide');
if(value === '0'){
layer.tips('下面的信息将便于您获得更好的答案', obj.othis, tips);
elemQuiz.removeClass('layui-hide');
} else if(value === '99'){
layer.tips('系统会对【分享】类型的帖子予以飞吻奖励,但我们需要审核,通过后方可展示', obj.othis, tips);
}
});
//提交回答
fly.form['/jie/reply/'] = function(data, required){
var tpl = '<li>\
<div class="detail-about detail-about-reply">\
<a class="jie-user" href="/user/">\
<a class="fly-avatar" href="/u/{{ layui.cache.mine.userId }}" target="_blank">\
<img src="{{= d.user.avatar}}" alt="{{= d.user.username}}">\
</a>\
<div class="fly-detail-user">\
<a href="/u/{{ layui.cache.user.uid }}" target="_blank" class="fly-link">\
<cite>{{d.user.username}}</cite>\
</a>\
</div>\
<div class="detail-hits">\
<span>刚刚</span>\
</div>\
</div>\
<div class="detail-body jieda-body">\
<div class="detail-body jieda-body photos">\
{{ d.content}}\
</div>\
</li>'
@ -84,13 +105,10 @@ layui.define(['laypage', 'fly', 'form'], function(exports){
//收藏
,collect: function(div){
var othis = $(this), type = othis.data('type');
$.post('/os/content/collect', {
fly.json('/os/content/collect', {
contentId: div.data('id')
,ok: type === 'add'? 1:-1
}, function(res){
res = JSON.parse(res);
console.log(res);
if(res.retcode == 0){
if(type === 'add'){
othis.data('type', 'remove').html('取消收藏').addClass('layui-btn-danger');
layer.msg("收藏成功");
@ -98,27 +116,24 @@ layui.define(['laypage', 'fly', 'form'], function(exports){
othis.data('type', 'add').html('收藏').removeClass('layui-btn-danger');
layer.msg("已取消收藏");
}
}else {
layer.msg(res.retinfo);
}
});
}
};
$('body').on('click', '.jie-admin', function(){
var othis = $(this), type = othis.attr('type');
gather.jieAdmin[type].call(this, othis.parent());
gather.jieAdmin[type] && gather.jieAdmin[type].call(this, othis.parent());
});
//异步渲染
var asyncRender = function(){
var div = $('.fly-detail-hint'), jieAdmin = $('#LAY_jieAdmin');
var div = $('.fly-admin-box'), jieAdmin = $('#LAY_jieAdmin');
//查询帖子是否收藏
if(jieAdmin[0] && layui.cache.user.uid != -1){
fly.json('/collection/find/', {
cid: div.data('id')
}, function(res){
jieAdmin.append('<span class="layui-btn layui-btn-mini jie-admin '+ (res.data.collection ? 'layui-btn-danger' : '') +'" type="collect" data-type="'+ (res.data.collection ? 'remove' : 'add') +'">'+ (res.data.collection ? '取消收藏' : '收藏') +'</span>');
jieAdmin.append('<span class="layui-btn layui-btn-xs jie-admin '+ (res.data.collection ? 'layui-btn-danger' : '') +'" type="collect" data-type="'+ (res.data.collection ? 'remove' : 'add') +'">'+ (res.data.collection ? '取消收藏' : '收藏') +'</span>');
});
}
}();
@ -127,24 +142,18 @@ layui.define(['laypage', 'fly', 'form'], function(exports){
gather.jiedaActive = {
zan: function(li){ //赞
var othis = $(this), ok = othis.hasClass('zanok');
$.post('/os/comment/support', {
ok: ok?-1:1
,commentId: li.data('id')
fly.json('/os/comment/support', {
commentId: li.data('id')
,ok: ok?-1:1
}, function(res){
res = JSON.parse(res);
console.log(res);
if(res.retcode === 0){
var zans = othis.find('em').html()|0;
othis[ok ? 'removeClass' : 'addClass']('zanok');
othis.find('em').html(ok ? (--zans) : (++zans));
} else {
layer.msg(res.retinfo);
}
});
}
,reply: function(li){ //回复
var val = dom.content.val();
var aite = '@'+ li.find('.jie-user cite i').text().replace(/\s/g, '');
var aite = '@'+ li.find('.fly-detail-user cite').text().replace(/\s/g, '');
dom.content.focus()
if(val.indexOf(aite) !== -1) return;
dom.content.val(aite +' ' + val);
@ -176,6 +185,13 @@ layui.define(['laypage', 'fly', 'form'], function(exports){
formType: 2
,value: data.content
,maxlength: 100000
,title: '编辑回帖'
,area: ['728px', '300px']
,success: function(layero){
fly.layEditor({
elem: layero.find('textarea')
});
}
}, function(value, index){
fly.json('/jie/updateDa/', {
id: li.data('id')
@ -208,11 +224,13 @@ layui.define(['laypage', 'fly', 'form'], function(exports){
});
}
};
$('.jieda-reply span').on('click', function(){
var othis = $(this), type = othis.attr('type');
gather.jiedaActive[type].call(this, othis.parents('li'));
});
form.on('submit(jie-add)', function(data){
var bean = {};
["contentId","title", "content", "cate"].forEach(function (value) {
@ -220,15 +238,9 @@ layui.define(['laypage', 'fly', 'form'], function(exports){
});
console.log(bean);
$.post("/os/content/save",{
fly.json("/os/content/save",{
bean:JSON.stringify(bean)
},function (res) {
res = JSON.parse(res);
if(res.retcode != 0){
layer.msg(res.retinfo);
return false;
}
layer.msg("发布成功",{time:2000},function () {
location.href = "/";
});
@ -242,15 +254,9 @@ layui.define(['laypage', 'fly', 'form'], function(exports){
});
console.log(bean);
$.post("/os/comment/save",{
fly.json("/os/comment/save",{
bean:JSON.stringify(bean)
},function (res) {
res = JSON.parse(res);
if(res.retcode != 0){
layer.msg(res.retinfo);
return false;
}
layer.msg("回复成功",{time:2000},function () {
//location.href = "/";
location.reload();

View File

@ -4,16 +4,18 @@
*/
layui.define(['laypage', 'fly','form', 'element'], function(exports){
layui.define(['laypage', 'fly', 'element', 'flow'], function(exports){
var $ = layui.jquery;
var layer = layui.layer;
var util = layui.util;
var laytpl = layui.laytpl;
var form = layui.form();
var form = layui.form;
var laypage = layui.laypage;
var fly = layui.fly;
var element = layui.element();
var flow = layui.flow;
var element = layui.element;
var upload = layui.upload;
var gather = {}, dom = {
mine: $('#LAY_mine')
@ -31,21 +33,26 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
'{{# for(var i = 0; i < d.rows.length; i++){ }}\
<li>\
{{# if(d.rows[i].collection_time){ }}\
<a class="jie-title" href="/jie/{{d.rows[i].id}}.html" target="_blank">{{= d.rows[i].title}}</a>\
<i>收藏于{{ d.rows[i].collection_time }}</i>\
<a class="jie-title" href="/jie/{{d.rows[i].id}}/" target="_blank">{{= d.rows[i].title}}</a>\
<i>{{ d.rows[i].collection_time }} 收藏</i>\
{{# } else { }}\
{{# if(d.rows[i].status == 1){ }}\
<span class="fly-jing"></span>\
<span class="fly-jing layui-hide-xs"></span>\
{{# } }}\
{{# if(d.rows[i].accept >= 0){ }}\
<span class="jie-status jie-status-ok">已解决</span>\
<span class="jie-status jie-status-ok">已结</span>\
{{# } else { }}\
<span class="jie-status">未结</span>\
{{# } }}\
<a class="jie-title" href="/jie/{{d.rows[i].id}}.html" target="_blank">{{= d.rows[i].title}}</a>\
<i>{{new Date(d.rows[i].time).toLocaleString()}}</i>\
{{# if(d.rows[i].status == -1){ }}\
<span class="jie-status">审核中</span>\
{{# } }}\
<a class="jie-title" href="/jie/{{d.rows[i].id}}/" target="_blank">{{= d.rows[i].title}}</a>\
<i class="layui-hide-xs">{{ layui.util.timeAgo(d.rows[i].time, 1) }}</i>\
{{# if(d.rows[i].accept == -1){ }}\
<a class="mine-edit" href="/jie/edit/{{d.rows[i].id}}">编辑</a>\
<a class="mine-edit layui-hide-xs" href="/jie/edit/{{d.rows[i].id}}" target="_blank">编辑</a>\
{{# } }}\
<em>{{d.rows[i].hits}}/{{d.rows[i].comment}}</em>\
<em class="layui-hide-xs">{{d.rows[i].hits}}/{{d.rows[i].comment}}</em>\
{{# } }}\
</li>\
{{# } }}'
@ -68,14 +75,14 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
fly.json(url, {}, function(res){
res.count = res.rows.length;
var rows = fly.sort(res.rows, 'collection_timestamp')
var rows = layui.sort(res.rows, 'collection_timestamp', 'desc')
,render = function(curr){
var data = []
,start = curr*nums - nums
,last = start + nums - 1;
if(last >= rows.length){
last = curr > 1 ? rows.length - (last - rows.length) : rows.length - 1;
last = curr > 1 ? start + (rows.length - start - 1) : rows.length - 1;
}
for(var i = start; i <= last; i++){
@ -90,10 +97,9 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
render(curr)
gather.minelog['collect-page-' + curr] = res;
now || laypage({
cont: 'LAY_page1'
,pages: Math.ceil(rows.length/nums) //得到总页数
,skin: 'fly'
now || laypage.render({
elem: 'LAY_page1'
,count: rows.length
,curr: curr
,jump: function(e, first){
if(!first){
@ -108,10 +114,9 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
}, function(res){
view(res);
gather.minelog['mine-jie-page-' + curr] = res;
now || laypage({
cont: 'LAY_page'
,pages: res.pages
,skin: 'fly'
now || laypage.render({
elem: 'LAY_page'
,count: res.count
,curr: curr
,jump: function(e, first){
if(!first){
@ -136,19 +141,22 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
});
}
//Hash地址的定位
var layid = location.hash.replace(/^#/, '');
element.tabChange('user', layid);
//显示当前tab
if(location.hash){
element.tabChange('user', location.hash.replace(/^#/, ''));
}
element.on('tab(user)', function(elem){
location.hash = ''+ $(this).attr('lay-id');
element.on('tab(user)', function(){
var othis = $(this), layid = othis.attr('lay-id');
if(layid){
location.hash = layid;
}
});
//根据ip获取城市
if($('#L_city').val() === ''){
$.getScript('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js', function(){
$('#L_city').val(remote_ip_info.city);
$('#L_city').val(remote_ip_info.city||'');
});
}
@ -156,25 +164,20 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
if($('.upload-img')[0]){
layui.use('upload', function(upload){
var avatarAdd = $('.avatar-add');
layui.upload({
elem: '.upload-img input'
,method: 'post'
upload.render({
elem: '.upload-img'
,url: '/os/file/upload'
,size: 50
,before: function(){
avatarAdd.find('.loading').show();
}
,success: function(res){
//res = JSON.parse(res);
,done: function(res){
if(res.retcode == 0){
$.post('/os/user/update', {
fly.json('/os/user/update', {
bean:JSON.stringify({avatar: res.retinfo})
,columns:JSON.stringify(["avatar"])
}, function(res){
res = JSON.parse(res);
if(res.retcode != 0){
layer.msg(res.retinfo);
return false;
}
location.reload();
});
} else {
@ -189,6 +192,73 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
});
}
//合作平台
if($('#LAY_coop')[0]){
//资源上传
$('#LAY_coop .uploadRes').each(function(index, item){
var othis = $(this);
upload.render({
elem: item
,url: '/os/file/upload?filename='+ othis.data('filename')
,accept: 'file'
,exts: 'zip'
,size: 30*1024
,before: function(){
layer.msg('正在上传', {
icon: 16
,time: -1
,shade: 0.7
});
}
,done: function(res){
if(res.code == 0){
layer.msg(res.msg, {icon: 6})
} else {
layer.msg(res.msg)
}
}
});
});
//成效展示
var effectTpl = ['{{# layui.each(d.data, function(index, item){ }}'
,'<tr>'
,'<td><a href="/u/{{ item.uid }}" target="_blank" style="color: #01AAED;">{{ item.uid }}</a></td>'
,'<td>{{ item.authProduct }}</td>'
,'<td>¥{{ item.rmb }}</td>'
,'<td>{{ item.create_time }}</td>'
,'</tr>'
,'{{# }); }}'].join('');
var effectView = function(res){
var html = laytpl(effectTpl).render(res);
$('#LAY_coop_effect').html(html);
$('#LAY_effect_count').html('你共有 <strong style="color: #FF5722;">'+ (res.count||0) +'</strong> 笔合作授权订单');
};
var effectShow = function(page){
fly.json('/cooperation/effect', {
page: page||1
}, function(res){
effectView(res);
laypage.render({
elem: 'LAY_effect_page'
,count: res.count
,curr: page
,jump: function(e, first){
if(!first){
effectShow(e.curr);
}
}
});
});
};
effectShow();
}
//提交成功后刷新
fly.form['set-mine'] = function(data, required){
layer.msg('修改成功', {
@ -198,7 +268,7 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
}, function(){
location.reload();
});
};
}
//表单验证
form.verify({
@ -328,7 +398,7 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
{{# for(var i = 0; i < len; i++){ }}\
<li data-id="{{d.rows[i].id}}">\
<blockquote class="layui-elem-quote">{{ d.rows[i].content}}</blockquote>\
<p><span>{{d.rows[i].time}}</span><a href="javascript:;" class="layui-btn layui-btn-small layui-btn-danger fly-delete"></a></p>\
<p><span>{{d.rows[i].time}}</span><a href="javascript:;" class="layui-btn layui-btn-sm layui-btn-danger fly-delete"></a></p>\
</li>\
{{# } }}\
</ul>\
@ -340,13 +410,15 @@ layui.define(['laypage', 'fly','form', 'element'], function(exports){
}
// fly.json('/message/find/', {}, function(res){
// var html = laytpl(tpl).render(res);
// dom.minemsg.html(html);
// if(res.rows.length > 0){
// delAll.removeClass('layui-hide');
// }
// });
/*
fly.json('/message/find/', {}, function(res){
var html = laytpl(tpl).render(res);
dom.minemsg.html(html);
if(res.rows.length > 0){
delAll.removeClass('layui-hide');
}
});
*/
//阅读后删除
dom.minemsg.on('click', '.mine-msg li .fly-delete', function(){

57
root/site.html Normal file
View File

@ -0,0 +1,57 @@
<style>
.fly-column{display: none;}
</style>
#@layout()
#define main()
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-row">
<div class="layui-col-xs12">
<div class="layui-carousel" id="test10">
<div carousel-item="">
<div><img src="//res.layui.com/images/layui/demo/1.png" style="width: 100%;height: 100%"></div>
<div><img src="//res.layui.com/images/layui/demo/2.png" style="width: 100%;height: 100%"></div>
<div><img src="//res.layui.com/images/layui/demo/3.png" style="width: 100%;height: 100%"></div>
<div><img src="//res.layui.com/images/layui/demo/4.png" style="width: 100%;height: 100%"></div>
<div><img src="//res.layui.com/images/layui/demo/5.png" style="width: 100%;height: 100%"></div>
<div><img src="//res.layui.com/images/layui/demo/6.png" style="width: 100%;height: 100%"></div>
<div><img src="//res.layui.com/images/layui/demo/7.png" style="width: 100%;height: 100%"></div>
</div>
</div>
</div>
<div class="layui-col-xs12">
</div>
</div>
</div>
</div>
#end
#define js()
<script>
layui.cache.page = '';
layui.cache.user = {
username: '游客'
,uid: -1
,avatar: '../res/images/avatar/00.jpg'
,experience: 83
,sex: '男'
};
layui.config({
version: "3.0.0"
,base: '../res/mods/' //这里实际使用时,建议改成绝对路径
}).extend({
fly: 'index'
}).use(['fly','carousel'],function () {
var carousel = layui.carousel;
carousel.render({
elem: '#test10'
,width: '100%'
,height: '330px'
,interval: 5000
});
});
</script>
#end

View File

@ -1,36 +1,12 @@
#@layout()
#define main()
<div class="fly-home" style="background-image: url();">
<img src="#(user.avatar??)" alt="#(user.nickname??)">
<h1>
#(user.nickname??)
<i class="iconfont icon-nan"></i>
<!-- <i class="iconfont icon-nv"></i> -->
<!-- <span style="color:#c00;">(超级码农)</span>
<span style="color:#5FB878;">(活雷锋)</span>
<span>(该号已被封)</span> -->
</h1>
<p class="fly-home-info">
<!--<i class="iconfont icon-zuichun" title="飞吻"></i><span style="color: #FF7200;">67206飞吻</span>-->
<i class="iconfont icon-shijian"></i><span>#(EJ.date(user.createTime??,"yyyy-MM-dd")) 加入</span>
<i class="iconfont icon-chengshi"></i><span>来自#(user.city?? "中国")</span>
</p>
<p class="fly-home-sign">#(user.sign) #if(user.sign == '')这个人懒得留下签名#end</p>
</div>
<div class="main fly-home-main">
<div class="layui-inline fly-home-jie">
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-md6 fly-home-jie">
<div class="fly-panel">
<h3 class="fly-panel-title">#(user.nickname??) 最近的提问</h3>
<h3 class="fly-panel-title">#(user.nickname) 最近的帖子</h3>
<ul class="jie-row">
<!--<li>
<span class="fly-jing"></span>
<a href="/jie/{{item.id}}.html" class="jie-title">使用 layui 秒搭后台大布局(基本结构)</a>
<i>1天前</i>
<em>1136阅/27答</em>
</li>-->
#for(x : contents.rows??)
<li>
#if(x.wonderful == 1)
@ -38,33 +14,19 @@
#end
<a href="/jie/detail/#(x.contentId)" class="jie-title">#(x.title)</a>
<i>#(x.createTime)</i>
<em>#(x.viewNum)阅/#(x.replyNum)答</em>
<em class="layui-hide-xs">#(x.viewNum)阅/#(x.replyNum)答</em>
</li>
#end
</ul>
<!-- <div class="fly-none" style="min-height: 50px; padding:30px 0; height:auto;"><i style="font-size:14px;">没有发表任何求解</i></div> -->
</ul>
</div>
</div>
<div class="layui-inline fly-home-da">
<div class="layui-col-md6 fly-home-da">
<div class="fly-panel">
<h3 class="fly-panel-title">#(user.nickname??) 最近的回答</h3>
<h3 class="fly-panel-title">#(user.nickname) 最近的回答</h3>
<ul class="home-jieda">
<!--<li>
<p>
<span>1分钟前</span>
<a href="" target="_blank">tips能同时渲染多个吗?</a>中回答:
</p>
<div class="home-dacontent">
尝试给layer.photos加上这个属性试试
<pre>
full: true
</pre>
文档没有提及
</div>
</li>-->
#for(x : comments.rows)
#for(x : contents.rows??)
<li>
<p>
<span>#(x.createTime)</span>
@ -74,13 +36,13 @@ full: true
#(x.content)
</div>
</li>
#else
<div class="fly-none" style="min-height: 50px; padding:30px 0; height:auto;"><span>没有回答任何问题</span></div>
#end
</ul>
<!-- <div class="fly-none" style="min-height: 50px; padding:30px 0; height:auto;"><span>没有回答任何问题</span></div> -->
</div>
</div>
</div>
</div>
#end

View File

@ -1,7 +1,7 @@
#@layout()
#define main()
<div class="main fly-user-main layui-clear">
<div class="layui-container fly-marginTop fly-user-main">
#@user_side("index")
<div class="site-tree-mobile layui-hide">
@ -9,6 +9,12 @@
</div>
<div class="site-mobile-shade"></div>
<div class="site-tree-mobile layui-hide">
<i class="layui-icon">&#xe602;</i>
</div>
<div class="site-mobile-shade"></div>
<div class="fly-panel fly-panel-user" pad20>
<!--
<div class="fly-msg" style="margin-top: 15px;">
@ -17,10 +23,8 @@
-->
<div class="layui-tab layui-tab-brief" lay-filter="user">
<ul class="layui-tab-title" id="LAY_mine">
<li data-type="mine-jie" lay-id="index" class="layui-this">
我发的帖(<span>#if(contents.total??0 < 1) 0 #else #(contents.total) #end</span></li>
<li data-type="collection" data-url="/collection/find/" lay-id="collection">
我收藏的帖(<span>#if(collects.total??0 < 1) 0 #else #(collects.total) #end</span></li>
<li data-type="mine-jie" lay-id="index" class="layui-this">我发的帖(<span>#if(contents.total??0 < 1) 0 #else #(contents.total) #end</span></li>
<li data-type="collection" data-url="/collection/find/" lay-id="collection">我收藏的帖(<span>#if(collects.total??0 < 1) 0 #else #(collects.total) #end</span></li>
</ul>
<div class="layui-tab-content" style="padding: 20px 0;">
<div class="layui-tab-item layui-show">
@ -43,7 +47,6 @@
<a class="jie-title" href="/jie/detail/#(x.contentId)" target="_blank">#(x.title)</a>
<i>收藏于#(x.createTime)</i>
</li>
#else
#end
</ul>
<div id="LAY_page1"></div>

View File

@ -1,8 +1,7 @@
#@layout()
#define main()
<div class="main layui-clear">
<div class="layui-container fly-marginTop">
<div class="fly-panel fly-panel-user" pad20>
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title">
@ -12,17 +11,17 @@
<div class="layui-form layui-tab-content" id="LAY_ucm" style="padding: 20px 0;">
<div class="layui-tab-item layui-show">
<div class="layui-form layui-form-pane">
<form method="post" class="layui-form" lay-filter="login">
<form method="post">
<div class="layui-form-item">
<label for="L_email" class="layui-form-label">邮箱</label>
<div class="layui-input-inline">
<input type="text" id="L_email" name="username" required lay-verify="required" autocomplete="off" class="layui-input">
<input type="text" id="L_email" name="username" required lay-verify="required" autocomplete="off" class="layui-input" value="lxy208@126.com">
</div>
</div>
<div class="layui-form-item">
<label for="L_pass" class="layui-form-label">密码</label>
<div class="layui-input-inline">
<input type="password" id="L_pass" name="password" required lay-verify="required" autocomplete="off" class="layui-input">
<input type="password" id="L_pass" name="password" required lay-verify="required" autocomplete="off" class="layui-input" value="1234567">
</div>
</div>
<!--<div class="layui-form-item">
@ -31,7 +30,7 @@
<input type="text" id="L_vercode" name="vercode" required lay-verify="required" placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid">
<span style="color: #c00;">1+1=?</span>
<span style="color: #c00;">{{d.vercode}}</span>
</div>
</div>-->
<div class="layui-form-item">
@ -42,8 +41,8 @@
</div>
<!--<div class="layui-form-item fly-form-app">
<span>或者使用社交账号登入</span>
<a href="http://fly.layui.com:8098/app/qq" onclick="layer.msg('正在通过QQ登入', {icon:16, shade: 0.1, time:0})" class="iconfont icon-qq" title="QQ登入"></a>
<a href="http://fly.layui.com:8098/app/weibo/" onclick="layer.msg('正在通过微博登入', {icon:16, shade: 0.1, time:0})" class="iconfont icon-weibo" title="微博登入"></a>
<a href="" onclick="layer.msg('正在通过QQ登入', {icon:16, shade: 0.1, time:0})" class="iconfont icon-qq" title="QQ登入"></a>
<a href="" onclick="layer.msg('正在通过微博登入', {icon:16, shade: 0.1, time:0})" class="iconfont icon-weibo" title="微博登入"></a>
</div>-->
</form>
</div>
@ -51,7 +50,6 @@
</div>
</div>
</div>
</div>
#end

View File

@ -1,12 +1,11 @@
#@layout()
#define main()
<div class="main layui-clear">
<div class="layui-container fly-marginTop">
<div class="fly-panel fly-panel-user" pad20>
<div class="layui-tab layui-tab-brief">
<div class="layui-tab layui-tab-brief" lay-filter="user">
<ul class="layui-tab-title">
<li><a href="login.html">登入</a></li>
<li><a href="/user/login.html">登入</a></li>
<li class="layui-this">注册</li>
</ul>
<div class="layui-form layui-tab-content" id="LAY_ucm" style="padding: 20px 0;">
@ -42,7 +41,8 @@
<!--<div class="layui-form-item">
<label for="L_vercode" class="layui-form-label">人类验证</label>
<div class="layui-input-inline">
<input type="text" id="L_vercode" name="vercode" required lay-verify="required" placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
<input type="text" id="L_vercode" name="vercode" required lay-verify="required"
placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid">
<span style="color: #c00;">{{d.vercode}}</span>
@ -53,8 +53,10 @@
</div>
<!--<div class="layui-form-item fly-form-app">
<span>或者直接使用社交账号快捷注册</span>
<a href="http://fly.layui.com:8098/app/qq" onclick="layer.msg('正在通过QQ登入', {icon:16, shade: 0.1, time:0})" class="iconfont icon-qq" title="QQ登入"></a>
<a href="http://fly.layui.com:8098/app/weibo/" onclick="layer.msg('正在通过微博登入', {icon:16, shade: 0.1, time:0})" class="iconfont icon-weibo" title="微博登入"></a>
<a href="" onclick="layer.msg('正在通过QQ登入', {icon:16, shade: 0.1, time:0})"
class="iconfont icon-qq" title="QQ登入"></a>
<a href="" onclick="layer.msg('正在通过微博登入', {icon:16, shade: 0.1, time:0})"
class="iconfont icon-weibo" title="微博登入"></a>
</div>-->
</form>
</div>

View File

@ -1,7 +1,7 @@
#@layout()
#define main()
<div class="main fly-user-main layui-clear">
<div class="layui-container fly-marginTop fly-user-main">
#@user_side("set")
<div class="site-tree-mobile layui-hide">
@ -9,6 +9,11 @@
</div>
<div class="site-mobile-shade"></div>
<div class="site-tree-mobile layui-hide">
<i class="layui-icon">&#xe602;</i>
</div>
<div class="site-mobile-shade"></div>
<div class="fly-panel fly-panel-user" pad20>
<div class="layui-tab layui-tab-brief" lay-filter="user">
<ul class="layui-tab-title" id="LAY_mine">
@ -62,10 +67,10 @@
<div class="layui-form layui-form-pane layui-tab-item">
<div class="layui-form-item">
<div class="avatar-add">
<p>建议尺寸168*168支持jpg、png、gif最大不能超过30KB</p>
<div class="upload-img">
<input type="file" name="file" id="LAY-file" lay-title="上传头像">
</div>
<p>建议尺寸168*168支持jpg、png、gif最大不能超过50KB</p>
<button type="button" class="layui-btn upload-img">
<i class="layui-icon">&#xe67c;</i>上传头像
</button>
<img src="#(mine.avatar??)">
<span class="loading"></span>
</div>

View File

@ -29,6 +29,9 @@ public class BaseServlet extends HttpServlet {
@Resource
protected UserService userService;
/*@Resource(name = "redis")
protected RedisCacheSource<String> cache;*/
private HttpRequest request;
private HttpResponse response;
private static final Kv _kv = Kv.create();
@ -53,6 +56,10 @@ public class BaseServlet extends HttpServlet {
_kv.set("mine", request.currentUser());
}
/*cache.set("a", "ABC");
String a = cache.get("a");
System.out.println(a);*/
this.request = request;
this.response = response;
String uri = request.getRequestURI();

View File

@ -29,7 +29,7 @@ public class EJ {
/*EJ ej = new EJ();
System.out.println(ej.date(1511682960591L));*/
List<Kv> list = asList(
/*List<Kv> list = asList(
Kv.by("k", 1).set("a", "1+1=?").set("q", 2)
, Kv.by("k", 2).set("a", "1*1=?").set("q", 1)
, Kv.by("k", 3).set("a", "3+2-5=?").set("q", 0)
@ -41,7 +41,7 @@ public class EJ {
System.out.println(System.currentTimeMillis());
System.out.println(kv.toString());
System.out.println(kv.getStr("q").equals("0"));
System.out.println(kv.getStr("q").equals("0"));*/
}

View File

@ -25,7 +25,7 @@ public class FileService extends BaseService {
String name = tmpFile.getName();
String suffix = name.substring(name.lastIndexOf("."));
String path = String.format(format, System.currentTimeMillis()) + suffix;
File destFile = new File((winos ? "E:/wk/_own/bbs/root/tem/" : dir) + path);
File destFile = new File((winos ? "E:/wk/redbbs/root/tem/" : dir) + path);
destFile.getParentFile().mkdir();
if (!tmpFile.renameTo(destFile)){
try{

View File

@ -17,9 +17,10 @@ import java.util.function.Supplier;
/**
* Created by Lxy at 2017/11/25 12:31.
*/
@WebServlet({"/"
@WebServlet({"/","/site"
,"/user", "/user/*"
,"/jie" ,"/jie/*"})
,"/jie" ,"/jie/*"
})
public class IndexServlet extends BaseServlet {
@Resource
@ -39,8 +40,8 @@ public class IndexServlet extends BaseServlet {
Sheet<ContentInfo> top = contentService.contentQuery(flipper, "top");
//热帖
Flipper flipper2 = new Flipper().limit(8).sort("viewNum DESC");
Sheet<ContentInfo> hotView = contentService.contentQuery(flipper2, "");
/*Flipper flipper2 = new Flipper().limit(8).sort("viewNum DESC");
Sheet<ContentInfo> hotView = contentService.contentQuery(flipper2, "");*/
//热议
Flipper flipper3 = new Flipper().limit(8).sort("replyNum DESC");
@ -49,10 +50,16 @@ public class IndexServlet extends BaseServlet {
//最新加入
Sheet<UserInfo> lastReg = userService.lastReg();
Kv kv = Kv.by("top", top).set("contents", contents).set("hotView", hotView).set("hotReply", hotReply).set("lastReg", lastReg);
Kv kv = Kv.by("top", top).set("contents", contents)/*.set("hotView", hotView)*/.set("hotReply", hotReply).set("lastReg", lastReg);
finish("index.html", kv);
}
@HttpMapping(url = "/site", auth = false, comment = "网站首页")
public void site(HttpRequest request, HttpResponse response){
finish("/site.html");
}
//====================================用户相关====================================
@HttpMapping(url = "/user/login", auth = false, comment = "前往登录页")
@ -171,8 +178,8 @@ public class IndexServlet extends BaseServlet {
Sheet<CommentInfo> comments = commentService.commentQuery(request.getSessionid(false) ,contentid, new Flipper().limit(30));
//热帖
Flipper flipper2 = new Flipper().limit(8).sort("viewNum DESC");
Sheet<ContentInfo> hotView = contentService.contentQuery(flipper2, "");
//Flipper flipper2 = new Flipper().limit(8).sort("viewNum DESC");
//Sheet<ContentInfo> hotView = contentService.contentQuery(flipper2, "");
//热议
Flipper flipper3 = new Flipper().limit(8).sort("replyNum DESC");
@ -187,7 +194,7 @@ public class IndexServlet extends BaseServlet {
}
});
Kv kv = Kv.by("bean", content).set("comments", comments).set("hotView", hotView).set("hotReply", hotReply);
Kv kv = Kv.by("bean", content).set("comments", comments)/*.set("hotView", hotView)*/.set("hotReply", hotReply);
finish("/jie/detail.html", kv);
}