mirror of
https://gitee.com/ulthon/layui-ul.git
synced 2026-07-01 10:32:49 +08:00
完成基本框架的搭建
This commit is contained in:
@@ -36,22 +36,16 @@ class Login extends Common
|
||||
});
|
||||
|
||||
if(!$validate->check($post_data)){
|
||||
Session::set('admin_id',1);
|
||||
return json_message();
|
||||
return json_message($validate->getError());
|
||||
}
|
||||
|
||||
$model_admin = Admin::where('account',$post_data['account'])->find();
|
||||
|
||||
if(empty($model_admin)){
|
||||
Session::set('admin_id',1);
|
||||
return json_message();
|
||||
return json_message('帐号不存在');
|
||||
}
|
||||
|
||||
if($model_admin->getData('password') !== md5($post_data['password'].$model_admin->getData('salt'))){
|
||||
Session::set('admin_id',1);
|
||||
return json_message();
|
||||
return json_message('密码错误');
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,23 @@ class Index extends Common
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function index()
|
||||
public function index($post_id = 0)
|
||||
{
|
||||
//
|
||||
|
||||
$list_post = Post::where('status', 1)->order('sort desc')->select();
|
||||
|
||||
if (empty($post_id)) {
|
||||
$model_post = $list_post->first();
|
||||
} else {
|
||||
$model_post = $list_post->where('id', $post_id)->first();
|
||||
}
|
||||
|
||||
|
||||
View::assign('model_post', $model_post);
|
||||
|
||||
View::assign('list_post', $list_post);
|
||||
|
||||
return View::fetch();
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace app\model;
|
||||
|
||||
use think\facade\App;
|
||||
use think\Model;
|
||||
use think\model\concern\SoftDelete;
|
||||
|
||||
@@ -15,8 +16,8 @@ class Post extends Model
|
||||
//
|
||||
|
||||
public static $stausNameList = [
|
||||
0=>'不发布',
|
||||
1=>'发布'
|
||||
0 => '不发布',
|
||||
1 => '发布'
|
||||
];
|
||||
|
||||
use SoftDelete;
|
||||
@@ -25,12 +26,12 @@ class Post extends Model
|
||||
|
||||
public function categorys()
|
||||
{
|
||||
return $this->hasMany(PostCategory::class,'post_id');
|
||||
return $this->hasMany(PostCategory::class, 'post_id');
|
||||
}
|
||||
|
||||
public function tags()
|
||||
{
|
||||
return $this->hasMany(PostTag::class,'post_id');
|
||||
return $this->hasMany(PostTag::class, 'post_id');
|
||||
}
|
||||
|
||||
public function setPublishTimeAttr($value)
|
||||
@@ -41,22 +42,22 @@ class Post extends Model
|
||||
{
|
||||
|
||||
$value = $this->getData('publish_time');
|
||||
return date('Y-m-d',$value);
|
||||
return date('Y-m-d', $value);
|
||||
}
|
||||
public function getPublishTimeDatetimeAttr()
|
||||
{
|
||||
|
||||
$value = $this->getData('publish_time');
|
||||
return date('Y-m-d H:i:s',$value);
|
||||
return date('Y-m-d H:i:s', $value);
|
||||
}
|
||||
|
||||
public function getCategorysListAttr()
|
||||
{
|
||||
$list_post_categorys = $this->getAttr('categorys');
|
||||
|
||||
$list = array_column($list_post_categorys->append(['category'])->toArray(),'category');
|
||||
$list = array_column($list_post_categorys->append(['category'])->toArray(), 'category');
|
||||
|
||||
$list = array2level($list,0,0);
|
||||
$list = array2level($list, 0, 0);
|
||||
|
||||
return $list;
|
||||
}
|
||||
@@ -65,7 +66,7 @@ class Post extends Model
|
||||
{
|
||||
$list_post_tags = $this->getAttr('tags');
|
||||
|
||||
$list = array_column($list_post_tags->append(['tag'])->toArray(),'tag');
|
||||
$list = array_column($list_post_tags->append(['tag'])->toArray(), 'tag');
|
||||
|
||||
return $list;
|
||||
}
|
||||
@@ -74,8 +75,8 @@ class Post extends Model
|
||||
{
|
||||
$desc = $this->getData('desc');
|
||||
|
||||
if(strlen($desc) > 100){
|
||||
$desc = mb_substr($desc,0,100).'...';
|
||||
if (strlen($desc) > 100) {
|
||||
$desc = mb_substr($desc, 0, 100) . '...';
|
||||
}
|
||||
|
||||
return $desc;
|
||||
@@ -85,7 +86,7 @@ class Post extends Model
|
||||
{
|
||||
$desc = $this->getData('desc');
|
||||
|
||||
if(empty($desc)){
|
||||
if (empty($desc)) {
|
||||
return '';
|
||||
}
|
||||
$list = explode("\n", $desc);
|
||||
@@ -97,11 +98,11 @@ class Post extends Model
|
||||
{
|
||||
$desc = $this->getData('desc');
|
||||
|
||||
if(empty($desc)){
|
||||
if (empty($desc)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return str_replace("\n",'<br>',$desc);
|
||||
return str_replace("\n", '<br>', $desc);
|
||||
}
|
||||
|
||||
public function getStatusNameAttr()
|
||||
@@ -125,15 +126,31 @@ class Post extends Model
|
||||
|
||||
public function getContentAttr($value)
|
||||
{
|
||||
return json_decode($value,true);
|
||||
return json_decode($value, true);
|
||||
}
|
||||
|
||||
public function getPosterAttr($value)
|
||||
{
|
||||
if(empty($value)){
|
||||
if (empty($value)) {
|
||||
$value = '/static/images/avatar.png';
|
||||
}
|
||||
|
||||
return get_source_link($value);
|
||||
}
|
||||
|
||||
public function getDemoPageAttr()
|
||||
{
|
||||
if (empty($this->getData('tpl_name'))) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$base_dir = App::getRootPath() . '/demo/';
|
||||
|
||||
$file_path = $base_dir . $this->getData('tpl_name') . '.html';
|
||||
if (!file_exists($file_path)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return file_get_contents($file_path);
|
||||
}
|
||||
}
|
||||
|
||||
6
demo/list.html
Normal file
6
demo/list.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
<legend>用户列表</legend>
|
||||
<div class="layui-field-box">
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
24
public/cdn/layui-ul.css
Normal file
24
public/cdn/layui-ul.css
Normal file
@@ -0,0 +1,24 @@
|
||||
.ul-nav-tree{
|
||||
border-right: 1px solid #bbb;
|
||||
}
|
||||
.ul-nav-tree-item{
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
cursor: pointer;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.ul-nav-tree-item-title{
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
|
||||
.ul-nav-tree-item-desc{
|
||||
font-size: 14px;
|
||||
color: #999;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
.ul-padding-md{
|
||||
padding: 15px;
|
||||
}
|
||||
@@ -39,21 +39,21 @@
|
||||
<label class="layui-form-label">用户名</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="account" required lay-verify="required"
|
||||
placeholder="请输入用户名" value="test(直接登陆即可)" autocomplete="off" class="layui-input">
|
||||
placeholder="请输入用户名" value="" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">密码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="password" name="password" required lay-verify="required"
|
||||
placeholder="请输入密码" value="test(直接登陆即可)" autocomplete="off" class="layui-input">
|
||||
placeholder="请输入密码" value="" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">验证码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="captcha" required lay-verify="required"
|
||||
placeholder="请输入验证码" autocomplete="off" value="test(直接登陆即可)" class="layui-input">
|
||||
placeholder="请输入验证码" autocomplete="off" value="" class="layui-input">
|
||||
<img class="captcha" src="/api/Captcha/build" onclick="this.src = '/api/Captcha/build?v='+Math.random()" style="cursor: pointer;width:
|
||||
100%;" alt="">
|
||||
</div>
|
||||
|
||||
@@ -139,57 +139,7 @@
|
||||
<input type="radio" name="status" value="0" title="不发布" checked>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">发表时间</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="publish_time" class="layui-input publish-time">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">分类</div>
|
||||
<div class="layui-input-block ">
|
||||
<div class="category-list"></div>
|
||||
|
||||
|
||||
<div class="quick-input-item sm-quick-input-item">
|
||||
<div class="new-category-option-list">
|
||||
<select name="" lay-verify="">
|
||||
<option value="0">选择父分类</option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<div class="">
|
||||
|
||||
<input type="text" name="" placeholder="输入新分类名称" id="new-category" class="layui-input">
|
||||
<div class="layui-btn create-category">新增</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">标签</div>
|
||||
<div class="layui-input-block ">
|
||||
<div class="tag-list">
|
||||
|
||||
</div>
|
||||
<div class="quick-input-item sm-quick-input-item" title="输入新标签,使用空格分隔可一次添加多个标签">
|
||||
<div class="">
|
||||
<input type="text" name="" placeholder="输入新标签" autocomplete="off" id="new-tags"
|
||||
class="layui-input">
|
||||
<div class="layui-btn create-tags">新增</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">是否置顶</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_top" value="1" title="置顶">
|
||||
<input type="radio" name="is_top" value="0" title="不置顶" checked>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">跳转链接</div>
|
||||
<div class="layui-input-block">
|
||||
@@ -216,11 +166,7 @@
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">模板</div>
|
||||
<div class="layui-input-block">
|
||||
<select name="tpl_name">
|
||||
{volist name=':config("view_type.post")' id='tpl_name'}
|
||||
<option value="{$key}">{$tpl_name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
<input type="text" name="tpl_name" class="layui-input" value="{$post->tpl_name}" id="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -50,8 +50,7 @@
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">标题</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" required lay-verify="required" value="{$post->title}"
|
||||
class="layui-input">
|
||||
<input type="text" name="title" required lay-verify="required" value="{$post->title}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -141,63 +140,11 @@
|
||||
<input type="radio" name="status" value="0" title="不发布">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">发表时间</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="publish_time" value="{$post->publish_time_datetime}"
|
||||
class="layui-input publish-time">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">分类</div>
|
||||
<div class="layui-input-block ">
|
||||
<div class="category-list"></div>
|
||||
|
||||
|
||||
<div class="quick-input-item sm-quick-input-item">
|
||||
<div class="new-category-option-list">
|
||||
<select name="" lay-verify="">
|
||||
<option value="0">选择父分类</option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<div class="">
|
||||
|
||||
<input type="text" name="" placeholder="输入新分类名称" id="new-category" class="layui-input">
|
||||
<div class="layui-btn create-category">新增</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">标签</div>
|
||||
<div class="layui-input-block ">
|
||||
<div class="tag-list">
|
||||
|
||||
</div>
|
||||
<div class="quick-input-item sm-quick-input-item" title="输入新标签,使用空格分隔可一次添加多个标签">
|
||||
<div class="">
|
||||
<input type="text" name="" placeholder="输入新标签" autocomplete="off" id="new-tags"
|
||||
class="layui-input">
|
||||
<div class="layui-btn create-tags">新增</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">是否置顶</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_top" value="1" title="置顶">
|
||||
<input type="radio" name="is_top" value="0" title="不置顶">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">跳转链接</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="jump_to_url" value="{$post->getData('jump_to_url')}"
|
||||
class="layui-input">
|
||||
<input type="text" name="jump_to_url" value="{$post->getData('jump_to_url')}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -220,11 +167,7 @@
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">模板</div>
|
||||
<div class="layui-input-block">
|
||||
<select name="tpl_name">
|
||||
{volist name=':config("view_type.post")' id='tpl_name'}
|
||||
<option value="{$key}">{$tpl_name}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
<input type="text" name="tpl_name" class="layui-input" value="{$post->tpl_name}" id="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
12
view/index/common/_require.html
Normal file
12
view/index/common/_require.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<link rel="stylesheet" href="/static/css/reset.css">
|
||||
<link rel="stylesheet" href="/static/css/pagination.css">
|
||||
<link rel="stylesheet" href="/static/lib/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="/static/css/{$Request.cookie.skin_name|default='skin-1'}.css">
|
||||
<link rel="stylesheet" href="/static/css/common.css">
|
||||
<link rel="stylesheet" href="/cdn/layui-ul.css">
|
||||
<script src="/static/lib/jquery/jquery-3.4.1.min.js"></script>
|
||||
<script src="/static/lib/jquery/jquery.cookie.js"></script>
|
||||
<script src="/static/lib/layui/layui.js"></script>
|
||||
<script src="/static/js/common.js"></script>
|
||||
|
||||
{:get_system_config('site_tongji')}
|
||||
@@ -6,28 +6,64 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>{:get_system_config('site_name')}</title>
|
||||
{:get_system_config('site_tongji')}
|
||||
{include file='common/_require'/}
|
||||
<link rel="stylesheet" href="/static/lib/quill/quill.snow.css">
|
||||
|
||||
<style>
|
||||
.ql-editor {
|
||||
padding: 15px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<textarea id="README" style="display: none">
|
||||
{:file_get_contents(app()->getRootPath().'README.md')}
|
||||
</textarea>
|
||||
|
||||
<div id="README-PRE" style="max-width: 800px;margin: 0 auto">
|
||||
<div class="layui-container">
|
||||
<div class="layui-row ul-padding-md">
|
||||
<div style="font-size: 22px;">
|
||||
{:get_system_config('site_name')}
|
||||
</div>
|
||||
<div style="font-size: 18px;">
|
||||
{:get_system_config('site_desc')}
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-row layui-col-space6 " style="margin-top: 15px;">
|
||||
<div class="layui-col-md3">
|
||||
<div class="ul-nav-tree ul-padding-md">
|
||||
{volist name='list_post' id='post'}
|
||||
<a href="{:url('Index/index',['post_id'=>$post.id])}" class="ul-nav-tree-item">
|
||||
<div class="ul-nav-tree-item-title">
|
||||
{$post.title}
|
||||
</div>
|
||||
<div class="ul-nav-tree-item-desc">
|
||||
{$post.desc}
|
||||
</div>
|
||||
</a>
|
||||
{/volist}
|
||||
|
||||
</div>
|
||||
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
|
||||
<script src="https://cdn.bootcss.com/markdown-it/9.1.0/markdown-it.min.js"></script>
|
||||
</div>
|
||||
<div class="layui-col-md9">
|
||||
<div class="main-content ul-padding-md">
|
||||
<div class="">
|
||||
<span class="layui-breadcrumb" lay-separator="/">
|
||||
<a href="{:url('Index/index')}">首页</a>
|
||||
<a><cite>{$model_post->title}</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="ql-editor">{$model_post->content_html|raw}</div>
|
||||
<div class="demo-page">
|
||||
{$model_post->demo_page|raw}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var md = window.markdownit();
|
||||
var result = md.render($('#README').val());
|
||||
$('#README-PRE').html(result)
|
||||
|
||||
layui.use(['element'])
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user