完成评论

This commit is contained in:
augushong
2021-01-03 21:52:54 +08:00
parent bcc07c301e
commit 3b5a56aef5
18 changed files with 815 additions and 383 deletions

View File

@@ -8,7 +8,7 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com> // | Author: liu21st <liu21st@gmail.com>
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
declare (strict_types = 1); declare(strict_types=1);
namespace app; namespace app;
@@ -64,7 +64,8 @@ abstract class BaseController
// 初始化 // 初始化
protected function initialize() protected function initialize()
{} {
}
/** /**
* 验证数据 * 验证数据
@@ -103,68 +104,71 @@ abstract class BaseController
return $v->failException(true)->check($data); return $v->failException(true)->check($data);
} }
public function success($msg = '操作成功',$jump_to_url = null,$code = 200,$params = []) public function success($msg = '操作成功', $jump_to_url = null, $code = 200, $params = [])
{ {
$jump_to_url = $this->parseJumpUrl($jump_to_url);
if(is_null($jump_to_url)){
$jump_to_url = \request()->server('HTTP_REFERER');
}else{
if($jump_to_url instanceof Url){
$jump_to_url = $jump_to_url;
}else{
$jump_to_url = url($jump_to_url);
}
}
$data = [ $data = [
'msg'=>$msg, 'msg' => $msg,
'jump_to_url'=>$jump_to_url, 'jump_to_url' => $jump_to_url,
'params'=>$params 'params' => $params
]; ];
if(\request()->isAjax()){ if (\request()->isAjax()) {
$data['jump_to_url'] = (string)$jump_to_url; $data['jump_to_url'] = $jump_to_url;
if($code == 200){ if ($code == 200) {
$code = 0; $code = 0;
} }
throw new HttpResponseException(json_message($data,$code,$msg)); throw new HttpResponseException(json_message($data, $code, $msg));
} }
View::assign($data); View::assign($data);
throw new HttpResponseException(response(View::fetch('common@tpl/success'),$code)); throw new HttpResponseException(response(View::fetch('common@tpl/success'), $code));
} }
public function error($msg = '操作失败',$jump_to_url = null,$code = 200,$params = []) public function error($msg = '操作失败', $jump_to_url = null, $code = 200, $params = [])
{ {
if(is_null($jump_to_url)){ $jump_to_url = $this->parseJumpUrl($jump_to_url);
$jump_to_url = \request()->server('HTTP_REFERER');
}else{
if($jump_to_url instanceof Url){
$jump_to_url = $jump_to_url;
}else{
$jump_to_url = url($jump_to_url);
}
}
$data = [ $data = [
'msg'=>$msg, 'msg' => $msg,
'jump_to_url'=>$jump_to_url, 'jump_to_url' => $jump_to_url,
'params'=>$params 'params' => $params
]; ];
if(\request()->isAjax()){ if (\request()->isAjax()) {
$data['jump_to_url'] = (string)$jump_to_url; $data['jump_to_url'] = $jump_to_url;
if($code == 200){ if ($code == 200) {
$code = 500; $code = 500;
} }
throw new HttpResponseException(json_message($data,$code,$msg)); throw new HttpResponseException(json_message($data, $code, $msg));
} }
View::assign($data); View::assign($data);
throw new HttpResponseException(response(View::fetch('common@tpl/error'),$code)); throw new HttpResponseException(response(View::fetch('common@tpl/error'), $code));
} }
public function redirect($jump_to_url, $code = 302)
{
$jump_to_url = $this->parseJumpUrl($jump_to_url);
throw new HttpResponseException(redirect($jump_to_url), $code);
}
public function parseJumpUrl($jump_to_url)
{
if (is_null($jump_to_url)) {
$jump_to_url = \request()->server('HTTP_REFERER');
} else {
if ($jump_to_url instanceof Url) {
$jump_to_url = (string)$jump_to_url;
} else {
if (strpos($jump_to_url, 'http') !== 0) {
$jump_to_url = url($jump_to_url);
}
}
}
return (string)$jump_to_url;
}
} }

View File

@@ -0,0 +1,101 @@
<?php
declare(strict_types=1);
namespace app\admin\controller;
use app\model\PostComment as ModelPostComment;
use think\facade\View;
use think\Request;
class PostComment extends Common
{
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{
//
$type = $this->request->param('type', 1);
$list = ModelPostComment::order('id desc')
->where('type', $type)
->paginate();
View::assign('list',$list);
return View::fetch();
}
/**
* 显示创建资源表单页.
*
* @return \think\Response
*/
public function create()
{
//
}
/**
* 保存新建的资源
*
* @param \think\Request $request
* @return \think\Response
*/
public function save(Request $request)
{
//
}
/**
* 显示指定的资源
*
* @param int $id
* @return \think\Response
*/
public function read($id)
{
//
}
/**
* 显示编辑资源表单页.
*
* @param int $id
* @return \think\Response
*/
public function edit($id)
{
//
}
/**
* 保存更新的资源
*
* @param \think\Request $request
* @param int $id
* @return \think\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* 删除指定资源
*
* @param int $id
* @return \think\Response
*/
public function delete($id)
{
//
ModelPostComment::destroy($id);
return json_message();
}
}

View File

@@ -56,7 +56,7 @@ class ColumnFormat
public static function integer($name) public static function integer($name)
{ {
return Column::make($name,'integer') return Column::bigInteger($name)
->setDefault(0) ->setDefault(0)
->setLimit(20) ->setLimit(20)
->setSigned(false); ->setSigned(false);

View File

@@ -5,8 +5,11 @@ namespace app\index\controller;
use app\model\Category; use app\model\Category;
use app\model\Nav; use app\model\Nav;
use app\model\Post; use app\model\Post;
use think\facade\Cache;
use think\facade\Session;
use think\facade\View; use think\facade\View;
use think\helper\Str; use think\helper\Str;
use UserHub\Client;
class Common extends BaseController class Common extends BaseController
{ {
@@ -14,7 +17,6 @@ class Common extends BaseController
{ {
parent::initialize(); parent::initialize();
$list_nav_slide = Nav::where('type', 3)->order('sort asc')->where('status', 1)->select(); $list_nav_slide = Nav::where('type', 3)->order('sort asc')->where('status', 1)->select();
View::assign('list_nav_slide', $list_nav_slide); View::assign('list_nav_slide', $list_nav_slide);
$list_nav_friend_url = Nav::where('type', 2)->order('sort asc')->where('status', 1)->select(); $list_nav_friend_url = Nav::where('type', 2)->order('sort asc')->where('status', 1)->select();
@@ -23,14 +25,64 @@ class Common extends BaseController
$list_header_nav = Nav::where('type', 11)->order('sort asc')->where('status', 1)->select(); $list_header_nav = Nav::where('type', 11)->order('sort asc')->where('status', 1)->select();
View::assign('list_header_nav', $list_header_nav); View::assign('list_header_nav', $list_header_nav);
$list_category_first_level = Category::where('level', 1)->where('status', 1)->where('type',3)->order('sort asc')->select(); $list_category_first_level = Category::where('level', 1)->where('status', 1)->where('type', 3)->order('sort asc')->select();
View::assign('list_category_first_level', $list_category_first_level); View::assign('list_category_first_level', $list_category_first_level);
$list_nav_more = Nav::where('type', 8)->order('sort asc')->where('status', 1)->select(); $list_nav_more = Nav::where('type', 8)->order('sort asc')->where('status', 1)->select();
View::assign('list_nav_more', $list_nav_more); View::assign('list_nav_more', $list_nav_more);
$top_posts = Post::where('is_top',1)->limit(8)->where('type',3)->select(); $top_posts = Post::where('is_top', 1)->limit(8)->where('type', 3)->select();
View::assign('top_posts',$top_posts); View::assign('top_posts', $top_posts);
$this->userHubLogin();
} }
public function userHubLogin()
{
$user_uid = Session::get('user_uid');
$user_info = [];
if (empty($user_uid)) {
$code = $this->request->param('code');
// 实例化客户端,传入相关参数
$user_hub_client = new Client([
'key' => get_system_config('user_hub_key'),
'secret' => get_system_config('user_hub_secret'),
'host' => get_system_config('user_hub_host'),
]);
if (empty($code)) {
// 跳转登录
$url = $user_hub_client->getBowserRedirectUrl($this->request->url(true));
View::assign('login_url',$url);
} else {
// 获取用户信息
$user_info = $user_hub_client->getUserinfoByCode($code);
Session::set('user_uid', $user_info['uid']);
}
}else{
$user_info = self::getUserInfo($user_uid);
}
View::assign('user_info',$user_info);
}
public static function getUserInfo($uid)
{
$cache_key = 'user_uid_'.$uid;
$user_info = Cache::get($cache_key);
if(is_null($user_info)){
// 实例化客户端,传入相关参数
$user_hub_client = new Client([
'key' => get_system_config('user_hub_key'),
'secret' => get_system_config('user_hub_secret'),
'host' => get_system_config('user_hub_host'),
]);
$user_info = $user_hub_client->getUserinfoByUid($uid);
Cache::set($cache_key,$user_info);
}
return $user_info;
}
} }

View File

@@ -5,6 +5,7 @@ namespace app\index\controller;
use app\model\Category; use app\model\Category;
use app\model\Post; use app\model\Post;
use app\model\PostCategory; use app\model\PostCategory;
use think\facade\Session;
use think\facade\View; use think\facade\View;
use think\Request; use think\Request;
@@ -63,6 +64,14 @@ class Index extends Common
} }
public function logout()
{
Session::clear();
$back_url = $this->request->param('back_url','/');
return $this->success('退出成功',$back_url);
}
/** /**
* 显示创建资源表单页. * 显示创建资源表单页.
* *

View File

@@ -6,6 +6,7 @@ namespace app\index\controller;
use app\model\Post as ModelPost; use app\model\Post as ModelPost;
use think\facade\View; use think\facade\View;
use think\model\Relation;
use think\Request; use think\Request;
class Post extends Common class Post extends Common
@@ -51,7 +52,11 @@ class Post extends Common
{ {
// //
$model_post = ModelPost::where('uid',$uid)->find(); $model_post = ModelPost::with([
'comments' => function (Relation $query) {
$query->order('id asc');
}
])->where('uid', $uid)->find();
$model_post->hits = $model_post->hits + 1; $model_post->hits = $model_post->hits + 1;

View File

@@ -0,0 +1,118 @@
<?php
declare(strict_types=1);
namespace app\index\controller;
use app\model\PostComment as ModelPostComment;
use think\facade\Session;
use think\facade\Validate;
use think\Request;
use think\validate\ValidateRule;
class PostComment extends Common
{
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{
//
}
/**
* 显示创建资源表单页.
*
* @return \think\Response
*/
public function create()
{
//
}
/**
* 保存新建的资源
*
* @param \think\Request $request
* @return \think\Response
*/
public function save(Request $request)
{
//
$user_uid = Session::get('user_uid');
if (empty($user_uid)) {
return json_message('请先登录');
}
$post_data = $request->post();
$validate = Validate::rule('post_id', ValidateRule::isRequire())
->rule('content|评论内容', ValidateRule::isRequire()->length('5,200', '评论字符长度需要在5-200之间'));
if (!$validate->check($post_data)) {
return json_message($validate->getError());
}
$post_data['type'] = 3;
$post_data['user_uid'] = $user_uid;
ModelPostComment::create($post_data);
return json_message();
}
/**
* 显示指定的资源
*
* @param int $id
* @return \think\Response
*/
public function read($id)
{
//
}
/**
* 显示编辑资源表单页.
*
* @param int $id
* @return \think\Response
*/
public function edit($id)
{
//
}
/**
* 保存更新的资源
*
* @param \think\Request $request
* @param int $id
* @return \think\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* 删除指定资源
*
* @param int $id
* @return \think\Response
*/
public function delete($id)
{
//
ModelPostComment::destroy($id);
return json_message();
}
}

View File

@@ -34,6 +34,11 @@ class Post extends Model
return $this->hasMany(PostTag::class, 'post_id'); return $this->hasMany(PostTag::class, 'post_id');
} }
public function comments()
{
return $this->hasMany(PostComment::class,'post_id');
}
public function setPublishTimeAttr($value) public function setPublishTimeAttr($value)
{ {
return strtotime($value); return strtotime($value);
@@ -149,9 +154,9 @@ class Post extends Model
{ {
$share_text = get_system_config('post_share_text_tpl'); $share_text = get_system_config('post_share_text_tpl');
$share_text = str_replace('%post_title%',$this->getAttr('title'),$share_text); $share_text = str_replace('%post_title%', $this->getAttr('title'), $share_text);
$share_text = str_replace('%post_desc%',$this->getAttr('desc'),$share_text); $share_text = str_replace('%post_desc%', $this->getAttr('desc'), $share_text);
$share_text = str_replace('%post_url%',$this->getAttr('read_url'),$share_text); $share_text = str_replace('%post_url%', $this->getAttr('read_url'), $share_text);
return $share_text; return $share_text;
} }

35
app/model/PostComment.php Normal file
View File

@@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
namespace app\model;
use app\index\controller\Common;
use think\Model;
/**
* @mixin \think\Model
*/
class PostComment extends Model
{
//
public function post()
{
return $this->belongsTo(Post::class, 'post_id');
}
public function getUserAttr()
{
return Common::getUserInfo($this->getData('user_uid'));
}
public function getReadUrlAttr()
{
$model_post = $this->getAttr('post');
$read_url = $model_post->read_url . '#comment-' . $this->getData('id');
return $read_url;
}
}

View File

@@ -25,7 +25,8 @@
"topthink/think-migration": "^3.0", "topthink/think-migration": "^3.0",
"topthink/think-helper": "^3.1", "topthink/think-helper": "^3.1",
"topthink/think-captcha": "^3.0", "topthink/think-captcha": "^3.0",
"topthink/think-multi-app": "^1.0" "topthink/think-multi-app": "^1.0",
"ulthon/user_hub_client": "^1.0"
}, },
"require-dev": { "require-dev": {
"symfony/var-dumper": "^4.2" "symfony/var-dumper": "^4.2"

View File

@@ -23,10 +23,10 @@ return [
'app_map' => [], 'app_map' => [],
// 域名绑定(自动多应用模式有效) // 域名绑定(自动多应用模式有效)
'domain_bind' => [ 'domain_bind' => [
'*'=>'index',
'www'=>'index', 'www'=>'index',
'admin'=>'admin', 'admin'=>'admin',
'api'=>'api', 'api'=>'api',
'*'=>'index',
], ],
// 应用默认域名(自动多应用模式有效,为空时采用domain_bind的设置键值对换,适合跨应用生成url // 应用默认域名(自动多应用模式有效,为空时采用domain_bind的设置键值对换,适合跨应用生成url
'app_default_doamin' => [], 'app_default_doamin' => [],

View File

@@ -13,7 +13,7 @@ return [
// 存储连接标识 当type使用cache的时候有效 // 存储连接标识 当type使用cache的时候有效
'store' => null, 'store' => null,
// 过期时间 // 过期时间
'expire' => 1440, 'expire' => 3600*24*7,
// 前缀 // 前缀
'prefix' => '', 'prefix' => '',
]; ];

View File

@@ -36,8 +36,8 @@ class CreateTablePost extends Migrator
$table->addColumn(ColumnFormat::timestamp('create_time')); $table->addColumn(ColumnFormat::timestamp('create_time'));
$table->addColumn(ColumnFormat::timestamp('update_time')); $table->addColumn(ColumnFormat::timestamp('update_time'));
$table->addColumn(ColumnFormat::timestamp('delete_time')); $table->addColumn(ColumnFormat::timestamp('delete_time'));
$table->addColumn(Column::make('content','text')); $table->addColumn(Column::longText('content'));
$table->addColumn(Column::make('content_html','text')); $table->addColumn(Column::longText('content_html'));
$table->addColumn(ColumnFormat::stringLong('desc')->setDefault('描述')); $table->addColumn(ColumnFormat::stringLong('desc')->setDefault('描述'));
$table->addColumn(ColumnFormat::integerTypeStatus('is_top')->setComment('是否置顶')); $table->addColumn(ColumnFormat::integerTypeStatus('is_top')->setComment('是否置顶'));
$table->addColumn(ColumnFormat::integerTypeStatus('status')->setComment('1:显示,0:不显示')); $table->addColumn(ColumnFormat::integerTypeStatus('status')->setComment('1:显示,0:不显示'));

View File

@@ -0,0 +1,45 @@
<?php
use app\common\ColumnFormat;
use think\migration\Migrator;
use think\migration\db\Column;
class CreateTablePostComment extends Migrator
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* addForeignKey
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change()
{
$table = $this->table('post_comment');
$table->addColumn(ColumnFormat::integer('post_id'))
->addColumn(ColumnFormat::stringNormal('user_uid'))
->addColumn(ColumnFormat::stringLong('content'))
->addColumn(ColumnFormat::timestamp('create_time'))
->addColumn(ColumnFormat::timestamp('update_time'))
->addColumn(ColumnFormat::timestamp('delete_time'))
->addColumn(ColumnFormat::stringShort('type')->setComment('类型,1:文章,有分类有标签,2:页面,无分类无标签,N:其他形式用,用于区分不同的用途'))
->addIndex('post_id');
$table->create();
}
}

View File

@@ -11,6 +11,9 @@
<li class="layui-nav-item layui-nav-itemed left-nav-item" data-name="tag-{$Request.param.type|default='1'}"> <li class="layui-nav-item layui-nav-itemed left-nav-item" data-name="tag-{$Request.param.type|default='1'}">
<a class="" href="{:url('Tag/index',['type'=>$Request.param.type])}">标签管理</a> <a class="" href="{:url('Tag/index',['type'=>$Request.param.type])}">标签管理</a>
</li> </li>
<li class="layui-nav-item layui-nav-itemed left-nav-item" data-name="comment-{$Request.param.type|default='1'}">
<a class="" href="{:url('PostComment/index',['type'=>$Request.param.type])}">评论管理</a>
</li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>应用管理</title>
{include file="common/_require"}
<script>
var currentHeaderNavItem = 'Post-{$Request.param.type|default="1"}';
var currentLeftNavItem = 'comment-{$Request.param.type|default="1"}';
</script>
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
{include file="common/_header"}
{include file="common/left_post"}
<div class="layui-body">
<div style="padding:15px">
<div class="main-header">
<span class="layui-breadcrumb">
<a>首页</a>
<a><cite>系统信息</cite></a>
</span>
</div>
<div class="main-container">
<table class="layui-table" lay-skin="line">
<thead>
<tr>
<th>ID</th>
<th>文章</th>
<th>评论</th>
<th>用户</th>
<th>评论时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{volist name='list' id='vo'}
<tr class="item" data-id="{$vo.id}">
<td>{$vo.id}</td>
<td>{$vo.post.title}</td>
<td>{$vo.content}</td>
<td>
<p>{$vo.user.nickname}</p>
<p>{$vo.user.account}</p>
</td>
<td>{$vo.create_time}</td>
<td>
<div class="layui-btn-container">
<a class="layui-btn layui-btn-sm" target="_blank" href="{$vo.read_url}">查看</a>
<div class="layui-btn layui-btn-sm delete">删除</div>
</div>
</td>
</tr>
{/volist}
{if condition="count($list) == 0" }
<tr>
<td colspan="7">暂无数据</td>
</tr>
{/if}
</tbody>
</table>
<div>
{$list|raw}
</div>
</div>
</div>
</div>
{include file="common/_footer"}
</div>
<script>
$('.delete').click(function () {
var item = this;
layer.confirm('确定要删除吗?', function () {
$.get('{:url("delete")}', {
id: $(item).parents('.item').data('id')
}, function (result) {
layer.msg('删除成功');
$(item).parents('.item').remove();
})
})
})
</script>
</body>
</html>

View File

@@ -13,10 +13,11 @@
var currentLeftNavItem = 'others'; var currentLeftNavItem = 'others';
</script> </script>
<style> <style>
.layui-form-pane .layui-form-label{ .layui-form-pane .layui-form-label {
width:160px width: 160px
} }
.layui-form-pane .layui-input-block{
.layui-form-pane .layui-input-block {
margin-left: 160px; margin-left: 160px;
} }
</style> </style>
@@ -42,108 +43,26 @@
<div class="layui-row"> <div class="layui-row">
<div class="layui-col-md6"> <div class="layui-col-md6">
<fieldset class="layui-elem-field " > <fieldset class="layui-elem-field ">
<legend>阿里OSS存储设置 <a href="https://www.aliyun.com/product/oss?source=5176.11533457&userCode=2fzx2rfo&type=copy" target="_blank"><i class="layui-icon layui-icon-help"></i></a></legend> <legend>UserHub</legend>
<div class="layui-field-box"> <div class="layui-field-box">
<form class="layui-form layui-form-pane" action="{:url('admin/System/update')}" method="post"> <form class="layui-form layui-form-pane" action="{:url('admin/System/update')}" method="post">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-form-label">AccessKey</div> <div class="layui-form-label">key</div>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="qiniu_access_key" value="{:get_system_config('qiniu_access_key')}" class="layui-input"> <input type="text" name="user_hub_key" value="{:get_system_config('user_hub_key')}" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-form-label">SecretKey</div> <div class="layui-form-label">secret</div>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="qiniu_secret_key" value="{:get_system_config('qiniu_secret_key')}" class="layui-input"> <input type="text" name="user_hub_secret" value="{:get_system_config('user_hub_secret')}" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-form-label">空间名称</div> <div class="layui-form-label">域名</div>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="qiniu_bucket" value="{:get_system_config('qiniu_bucket')}" class="layui-input"> <input type="text" name="user_hub_host" value="{:get_system_config('user_hub_host')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">空间域名</div>
<div class="layui-input-block">
<input type="text" name="qiniu_domain" value="{:get_system_config('qiniu_domain')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid">保存</button>
</div>
</form>
</div>
</fieldset>
</div>
</div>
<div class="layui-row">
<div class="layui-col-md6">
<fieldset class="layui-elem-field " >
<legend>阿里短信配置 <a href="https://www.aliyun.com/acts/alicomcloud/new-discount?userCode=2fzx2rfo" target="_blank"><i class="layui-icon layui-icon-help"></i></a></legend>
<div class="layui-field-box">
<form class="layui-form layui-form-pane" action="{:url('admin/System/update')}" method="post">
<div class="layui-form-item">
<div class="layui-form-label">AccessKey</div>
<div class="layui-input-block">
<input type="text" name="ali_msn_access_key" value="{:get_system_config('ali_msn_access_key')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">AccessSecret</div>
<div class="layui-input-block">
<input type="text" name="ali_msn_access_secret" value="{:get_system_config('ali_msn_access_secret')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">模板ID</div>
<div class="layui-input-block">
<input type="text" name="ali_msg_tpl_id" value="{:get_system_config('ali_msg_tpl_id')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid">保存</button>
</div>
</form>
</div>
</fieldset>
</div>
</div>
<div class="layui-row">
<div class="layui-col-md6">
<fieldset class="layui-elem-field " >
<legend>微信第三方平台配置</legend>
<div class="layui-field-box">
<form class="layui-form layui-form-pane" action="{:url('admin/System/update')}" method="post">
<div class="layui-form-item">
<div class="layui-form-label">AppID</div>
<div class="layui-input-block">
<input type="text" name="wx_open_app_id" value="{:get_system_config('wx_open_app_id')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">AppSecret</div>
<div class="layui-input-block">
<input type="text" name="wx_open_app_secret" value="{:get_system_config('wx_open_app_secret')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">消息校验Token</div>
<div class="layui-input-block">
<input type="text" name="wx_open_app_token" value="{:get_system_config('wx_open_app_token')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">消息加解密Key</div>
<div class="layui-input-block">
<input type="text" name="wx_open_app_aes_key" value="{:get_system_config('wx_open_app_aes_key')}" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@@ -155,89 +74,7 @@
</div> </div>
</div> </div>
<div class="layui-row">
<div class="layui-col-md6">
<fieldset class="layui-elem-field " >
<legend>微信公众号配置</legend>
<div class="layui-field-box">
<form class="layui-form layui-form-pane">
<div class="layui-form-item">
<div class="layui-form-label">公众号名称</div>
<div class="layui-input-block">
<input type="text" name="wx_app_name" class="layui-input" value="{:get_system_config('wx_app_name')}">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">AppID</div>
<div class="layui-input-block">
<input type="text" name="wx_app_id" class="layui-input" value="{:get_system_config('wx_app_id')}">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">AppSecret</div>
<div class="layui-input-block">
<input type="text" name="wx_app_secret" class="layui-input" value="{:get_system_config('wx_app_secret')}">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">Token</div>
<div class="layui-input-block">
<input type="text" name="wx_app_token" class="layui-input" value="{:get_system_config('wx_app_token')}">
</div>
</div>
<div class="layui-form-item">
<div class="layui-btn-container">
<div class="layui-btn layui-btn-fluid" >保存</div>
</div>
</div>
</form>
</div>
</fieldset>
</div>
</div>
<div class="layui-row">
<div class="layui-col-md6">
<fieldset class="layui-elem-field " >
<legend>微信支付配置<i class="layui-icon layui-icon-help" onmouseover="layer.tips('支付的公众号必须是上面授权的公众号',this)"></i></legend>
<div class="layui-field-box">
<form class="layui-form layui-form-pane" action="{:url('admin/System/update')}" method="post">
<div class="layui-form-item">
<div class="layui-form-label">商户ID</div>
<div class="layui-input-block">
<input type="text" name="wx_mch_id" value="{:get_system_config('wx_mch_id')}" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">商户秘钥</div>
<div class="layui-input-block">
<input type="text" name="wx_mch_secert" value="{:get_system_config('wx_mch_secert')}" class="layui-input" id="">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">商户key</div>
<div class="layui-input-block">
<input type="text" name="wx_mch_pen_key" readonly value="{:get_system_config('wx_mch_pen_key')}" class="layui-input" id="">
<div class="layui-btn">上传</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label">商户cert</div>
<div class="layui-input-block">
<input type="text" name="wx_mch_pem_cert" readonly value="{:get_system_config('wx_mch_pem_cert')}" class="layui-input" id="">
<div class="layui-btn">上传</div>
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid">授权</button>
</div>
</form>
</div>
</fieldset>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -246,7 +83,7 @@
{include file="common/_footer"} {include file="common/_footer"}
</div> </div>
<script> <script>
layui.use(['layer'],function(){ layui.use(['layer'], function () {
var layer = layui.layer; var layer = layui.layer;

View File

@@ -40,6 +40,28 @@
border-radius: 2px; border-radius: 2px;
cursor: pointer; cursor: pointer;
} }
.post-container {
margin-top: 15px;
}
.post-item {
display: flex;
justify-content: flex-start;
align-items: flex-start;
}
.post-item .left img {
width: 60px;
}
.post-item .right {
margin-left: 15px;
}
.post-item .content {
margin-top: 5px;
}
</style> </style>
</head> </head>
@@ -64,8 +86,7 @@
</div> </div>
{if !empty($post.jump_to_url) && $post.jump_to_url_status != 0} {if !empty($post.jump_to_url) && $post.jump_to_url_status != 0}
<div class="jump-container"> <div class="jump-container">
<a href="{$post.jump_to_url}" class="layui-btn jump-btn" <a href="{$post.jump_to_url}" class="layui-btn jump-btn" target="_blank">{$post.jump_to_btn_title|default='立即跳转'}</a>
target="_blank">{$post.jump_to_btn_title|default='立即跳转'}</a>
</div> </div>
{if $post.jump_to_url_status == 2 } {if $post.jump_to_url_status == 2 }
<script> <script>
@@ -110,6 +131,57 @@
{:get_system_config('post_copyright')} {:get_system_config('post_copyright')}
</div> </div>
</div> </div>
<div class="post-container">
<fieldset class="layui-elem-field layui-field-title">
<legend>评论</legend>
<div class="layui-field-box">
<div class="post-list">
{volist name='$post.comments' id='comment'}
<div class="post-item" id="comment-{$comment.id}" data-id="{$comment.id}">
<div class="left">
<img src="{$comment.user.avatar}" alt="">
</div>
<div class="right">
<div>{$comment.user.nickname|default=$comment.user.account}</div>
<div class="content">{$comment.content}</div>
{if !empty($user_info) && $user_info.uid == $comment.user_uid }
<div>
<div class="layui-btn layui-btn-xs delete" style="cursor: pointer;">删除</div>
</div>
{/if}
</div>
</div>
{/volist}
</div>
<div class="post-main">
<form action="" class="layui-form">
<input type="hidden" name="post_id" value="{$post.id}">
<div class="layui-form-item layui-form-text">
<textarea name="content" placeholder="请输入内容" class="layui-textarea" autocomplete="off"></textarea>
</div>
<div class="layui-form-item">
<button class="layui-btn" type="submit" lay-filter="postComment" lay-submit>发表评论</button>
{empty name='Request.session.user_uid'}
<a class="layui-word-aux" href="{$login_url|default=''}">点击登录</a>
{else /}
<a href="{:get_system_config('user_hub_host')}" target="_blank" class="layui-word-aux">{$user_info.nickname|default=$user_info.account}</a>
<a href="{:url('index/Logout',['back_url'=>$post.read_url])}" class="layui-word-aux">退出</a>
{/empty}
</div>
</form>
</div>
</div>
</fieldset>
</div>
</div> </div>
</div> </div>
{include file='common/_right'/} {include file='common/_right'/}
@@ -121,6 +193,49 @@
</div> </div>
<script> <script>
layui.use(['form'], function () {
var form = layui.form
form.on('submit(postComment)', function (data) {
$.post('{:url("PostComment/save")}',
data.field
, function (result) {
if (result.code == 0) {
layer.msg('发表评论成功')
setTimeout(() => {
location.reload()
}, 1200);
} else {
layer.msg(result.msg)
}
})
return false;
})
})
$('.post-item .delete').click(function () {
var item = this;
var parent = $(item).closest('.post-item')
layer.confirm('确定要删除吗?', function () {
$.post('{:url("PostComment/delete")}', {
id: $(parent).data('id')
}, function (result) {
if (result.code == 0) {
layer.msg('删除成功');
setTimeout(() => {
location.reload()
}, 1200);
} else {
layer.msg(result.msg)
}
})
})
})
$('.ql-editor pre').each(function (n, e) { $('.ql-editor pre').each(function (n, e) {
hljs.highlightBlock(e); hljs.highlightBlock(e);