mirror of
https://gitee.com/ulthon/ulthon_information.git
synced 2026-03-03 16:24:28 +08:00
完成评论
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: liu21st <liu21st@gmail.com>
|
||||
// +----------------------------------------------------------------------
|
||||
declare (strict_types = 1);
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app;
|
||||
|
||||
@@ -24,147 +24,151 @@ use think\exception\HttpResponseException;
|
||||
*/
|
||||
abstract class BaseController
|
||||
{
|
||||
/**
|
||||
* Request实例
|
||||
* @var \think\Request
|
||||
*/
|
||||
protected $request;
|
||||
/**
|
||||
* Request实例
|
||||
* @var \think\Request
|
||||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* 应用实例
|
||||
* @var \think\App
|
||||
*/
|
||||
protected $app;
|
||||
/**
|
||||
* 应用实例
|
||||
* @var \think\App
|
||||
*/
|
||||
protected $app;
|
||||
|
||||
/**
|
||||
* 是否批量验证
|
||||
* @var bool
|
||||
*/
|
||||
protected $batchValidate = false;
|
||||
/**
|
||||
* 是否批量验证
|
||||
* @var bool
|
||||
*/
|
||||
protected $batchValidate = false;
|
||||
|
||||
/**
|
||||
* 控制器中间件
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [];
|
||||
/**
|
||||
* 控制器中间件
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [];
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
* @access public
|
||||
* @param App $app 应用对象
|
||||
*/
|
||||
public function __construct(App $app)
|
||||
{
|
||||
$this->app = $app;
|
||||
$this->request = $this->app->request;
|
||||
/**
|
||||
* 构造方法
|
||||
* @access public
|
||||
* @param App $app 应用对象
|
||||
*/
|
||||
public function __construct(App $app)
|
||||
{
|
||||
$this->app = $app;
|
||||
$this->request = $this->app->request;
|
||||
|
||||
// 控制器初始化
|
||||
$this->initialize();
|
||||
// 控制器初始化
|
||||
$this->initialize();
|
||||
}
|
||||
|
||||
// 初始化
|
||||
protected function initialize()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证数据
|
||||
* @access protected
|
||||
* @param array $data 数据
|
||||
* @param string|array $validate 验证器名或者验证规则数组
|
||||
* @param array $message 提示信息
|
||||
* @param bool $batch 是否批量验证
|
||||
* @return array|string|true
|
||||
* @throws ValidateException
|
||||
*/
|
||||
protected function validate(array $data, $validate, array $message = [], bool $batch = false)
|
||||
{
|
||||
if (is_array($validate)) {
|
||||
$v = new Validate();
|
||||
$v->rule($validate);
|
||||
} else {
|
||||
if (strpos($validate, '.')) {
|
||||
// 支持场景
|
||||
list($validate, $scene) = explode('.', $validate);
|
||||
}
|
||||
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
|
||||
$v = new $class();
|
||||
if (!empty($scene)) {
|
||||
$v->scene($scene);
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化
|
||||
protected function initialize()
|
||||
{}
|
||||
$v->message($message);
|
||||
|
||||
/**
|
||||
* 验证数据
|
||||
* @access protected
|
||||
* @param array $data 数据
|
||||
* @param string|array $validate 验证器名或者验证规则数组
|
||||
* @param array $message 提示信息
|
||||
* @param bool $batch 是否批量验证
|
||||
* @return array|string|true
|
||||
* @throws ValidateException
|
||||
*/
|
||||
protected function validate(array $data, $validate, array $message = [], bool $batch = false)
|
||||
{
|
||||
if (is_array($validate)) {
|
||||
$v = new Validate();
|
||||
$v->rule($validate);
|
||||
} else {
|
||||
if (strpos($validate, '.')) {
|
||||
// 支持场景
|
||||
list($validate, $scene) = explode('.', $validate);
|
||||
}
|
||||
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
|
||||
$v = new $class();
|
||||
if (!empty($scene)) {
|
||||
$v->scene($scene);
|
||||
}
|
||||
}
|
||||
|
||||
$v->message($message);
|
||||
|
||||
// 是否批量验证
|
||||
if ($batch || $this->batchValidate) {
|
||||
$v->batch(true);
|
||||
}
|
||||
|
||||
return $v->failException(true)->check($data);
|
||||
// 是否批量验证
|
||||
if ($batch || $this->batchValidate) {
|
||||
$v->batch(true);
|
||||
}
|
||||
|
||||
public function success($msg = '操作成功',$jump_to_url = null,$code = 200,$params = [])
|
||||
{
|
||||
return $v->failException(true)->check($data);
|
||||
}
|
||||
|
||||
if(is_null($jump_to_url)){
|
||||
$jump_to_url = \request()->server('HTTP_REFERER');
|
||||
}else{
|
||||
if($jump_to_url instanceof Url){
|
||||
public function success($msg = '操作成功', $jump_to_url = null, $code = 200, $params = [])
|
||||
{
|
||||
$jump_to_url = $this->parseJumpUrl($jump_to_url);
|
||||
$data = [
|
||||
'msg' => $msg,
|
||||
'jump_to_url' => $jump_to_url,
|
||||
'params' => $params
|
||||
];
|
||||
|
||||
$jump_to_url = $jump_to_url;
|
||||
}else{
|
||||
$jump_to_url = url($jump_to_url);
|
||||
}
|
||||
}
|
||||
|
||||
$data = [
|
||||
'msg'=>$msg,
|
||||
'jump_to_url'=>$jump_to_url,
|
||||
'params'=>$params
|
||||
];
|
||||
|
||||
if(\request()->isAjax()){
|
||||
$data['jump_to_url'] = (string)$jump_to_url;
|
||||
if($code == 200){
|
||||
$code = 0;
|
||||
}
|
||||
throw new HttpResponseException(json_message($data,$code,$msg));
|
||||
}
|
||||
|
||||
View::assign($data);
|
||||
throw new HttpResponseException(response(View::fetch('common@tpl/success'),$code));
|
||||
}
|
||||
public function error($msg = '操作失败',$jump_to_url = null,$code = 200,$params = [])
|
||||
{
|
||||
|
||||
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 = [
|
||||
'msg'=>$msg,
|
||||
'jump_to_url'=>$jump_to_url,
|
||||
'params'=>$params
|
||||
];
|
||||
|
||||
if(\request()->isAjax()){
|
||||
$data['jump_to_url'] = (string)$jump_to_url;
|
||||
if($code == 200){
|
||||
$code = 500;
|
||||
}
|
||||
throw new HttpResponseException(json_message($data,$code,$msg));
|
||||
}
|
||||
|
||||
View::assign($data);
|
||||
throw new HttpResponseException(response(View::fetch('common@tpl/error'),$code));
|
||||
if (\request()->isAjax()) {
|
||||
$data['jump_to_url'] = $jump_to_url;
|
||||
if ($code == 200) {
|
||||
$code = 0;
|
||||
}
|
||||
throw new HttpResponseException(json_message($data, $code, $msg));
|
||||
}
|
||||
|
||||
View::assign($data);
|
||||
throw new HttpResponseException(response(View::fetch('common@tpl/success'), $code));
|
||||
}
|
||||
public function error($msg = '操作失败', $jump_to_url = null, $code = 200, $params = [])
|
||||
{
|
||||
|
||||
$jump_to_url = $this->parseJumpUrl($jump_to_url);
|
||||
|
||||
$data = [
|
||||
'msg' => $msg,
|
||||
'jump_to_url' => $jump_to_url,
|
||||
'params' => $params
|
||||
];
|
||||
|
||||
if (\request()->isAjax()) {
|
||||
$data['jump_to_url'] = $jump_to_url;
|
||||
if ($code == 200) {
|
||||
$code = 500;
|
||||
}
|
||||
throw new HttpResponseException(json_message($data, $code, $msg));
|
||||
}
|
||||
|
||||
View::assign($data);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
101
app/admin/controller/PostComment.php
Normal file
101
app/admin/controller/PostComment.php
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,7 @@ class ColumnFormat
|
||||
|
||||
public static function integer($name)
|
||||
{
|
||||
return Column::make($name,'integer')
|
||||
return Column::bigInteger($name)
|
||||
->setDefault(0)
|
||||
->setLimit(20)
|
||||
->setSigned(false);
|
||||
|
||||
@@ -5,8 +5,11 @@ namespace app\index\controller;
|
||||
use app\model\Category;
|
||||
use app\model\Nav;
|
||||
use app\model\Post;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Session;
|
||||
use think\facade\View;
|
||||
use think\helper\Str;
|
||||
use UserHub\Client;
|
||||
|
||||
class Common extends BaseController
|
||||
{
|
||||
@@ -14,7 +17,6 @@ class Common extends BaseController
|
||||
{
|
||||
parent::initialize();
|
||||
|
||||
|
||||
$list_nav_slide = Nav::where('type', 3)->order('sort asc')->where('status', 1)->select();
|
||||
View::assign('list_nav_slide', $list_nav_slide);
|
||||
$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();
|
||||
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);
|
||||
$list_nav_more = Nav::where('type', 8)->order('sort asc')->where('status', 1)->select();
|
||||
View::assign('list_nav_more', $list_nav_more);
|
||||
|
||||
$top_posts = Post::where('is_top',1)->limit(8)->where('type',3)->select();
|
||||
View::assign('top_posts',$top_posts);
|
||||
$top_posts = Post::where('is_top', 1)->limit(8)->where('type', 3)->select();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace app\index\controller;
|
||||
use app\model\Category;
|
||||
use app\model\Post;
|
||||
use app\model\PostCategory;
|
||||
use think\facade\Session;
|
||||
use think\facade\View;
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示创建资源表单页.
|
||||
*
|
||||
|
||||
@@ -6,6 +6,7 @@ namespace app\index\controller;
|
||||
|
||||
use app\model\Post as ModelPost;
|
||||
use think\facade\View;
|
||||
use think\model\Relation;
|
||||
use think\Request;
|
||||
|
||||
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;
|
||||
|
||||
|
||||
118
app/index/controller/PostComment.php
Normal file
118
app/index/controller/PostComment.php
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -34,6 +34,11 @@ class Post extends Model
|
||||
return $this->hasMany(PostTag::class, 'post_id');
|
||||
}
|
||||
|
||||
public function comments()
|
||||
{
|
||||
return $this->hasMany(PostComment::class,'post_id');
|
||||
}
|
||||
|
||||
public function setPublishTimeAttr($value)
|
||||
{
|
||||
return strtotime($value);
|
||||
@@ -149,9 +154,9 @@ class Post extends Model
|
||||
{
|
||||
$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_desc%',$this->getAttr('desc'),$share_text);
|
||||
$share_text = str_replace('%post_url%',$this->getAttr('read_url'),$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_url%', $this->getAttr('read_url'), $share_text);
|
||||
|
||||
return $share_text;
|
||||
}
|
||||
|
||||
35
app/model/PostComment.php
Normal file
35
app/model/PostComment.php
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,8 @@
|
||||
"topthink/think-migration": "^3.0",
|
||||
"topthink/think-helper": "^3.1",
|
||||
"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": {
|
||||
"symfony/var-dumper": "^4.2"
|
||||
|
||||
@@ -23,10 +23,10 @@ return [
|
||||
'app_map' => [],
|
||||
// 域名绑定(自动多应用模式有效)
|
||||
'domain_bind' => [
|
||||
'*'=>'index',
|
||||
'www'=>'index',
|
||||
'admin'=>'admin',
|
||||
'api'=>'api',
|
||||
'*'=>'index',
|
||||
],
|
||||
// 应用默认域名(自动多应用模式有效,为空时采用domain_bind的设置键值对换,适合跨应用生成url)
|
||||
'app_default_doamin' => [],
|
||||
|
||||
@@ -13,7 +13,7 @@ return [
|
||||
// 存储连接标识 当type使用cache的时候有效
|
||||
'store' => null,
|
||||
// 过期时间
|
||||
'expire' => 1440,
|
||||
'expire' => 3600*24*7,
|
||||
// 前缀
|
||||
'prefix' => '',
|
||||
];
|
||||
|
||||
@@ -36,8 +36,8 @@ class CreateTablePost extends Migrator
|
||||
$table->addColumn(ColumnFormat::timestamp('create_time'));
|
||||
$table->addColumn(ColumnFormat::timestamp('update_time'));
|
||||
$table->addColumn(ColumnFormat::timestamp('delete_time'));
|
||||
$table->addColumn(Column::make('content','text'));
|
||||
$table->addColumn(Column::make('content_html','text'));
|
||||
$table->addColumn(Column::longText('content'));
|
||||
$table->addColumn(Column::longText('content_html'));
|
||||
$table->addColumn(ColumnFormat::stringLong('desc')->setDefault('描述'));
|
||||
$table->addColumn(ColumnFormat::integerTypeStatus('is_top')->setComment('是否置顶'));
|
||||
$table->addColumn(ColumnFormat::integerTypeStatus('status')->setComment('1:显示,0:不显示'));
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,9 @@
|
||||
<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>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
102
view/admin/post_comment/index.html
Normal file
102
view/admin/post_comment/index.html
Normal 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>
|
||||
@@ -2,256 +2,93 @@
|
||||
<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"}
|
||||
<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 = 'System';
|
||||
var currentLeftNavItem = 'others';
|
||||
</script>
|
||||
<style>
|
||||
.layui-form-pane .layui-form-label{
|
||||
width:160px
|
||||
}
|
||||
.layui-form-pane .layui-input-block{
|
||||
margin-left: 160px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
var currentHeaderNavItem = 'System';
|
||||
var currentLeftNavItem = 'others';
|
||||
</script>
|
||||
<style>
|
||||
.layui-form-pane .layui-form-label {
|
||||
width: 160px
|
||||
}
|
||||
|
||||
.layui-form-pane .layui-input-block {
|
||||
margin-left: 160px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="layui-layout-body">
|
||||
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
{include file="common/_header"}
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
{include file="common/_header"}
|
||||
|
||||
{include file="common/left_system"}
|
||||
{include file="common/left_system"}
|
||||
|
||||
<div class="layui-body">
|
||||
<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">
|
||||
<div class="layui-row">
|
||||
|
||||
<div class="layui-col-md6">
|
||||
<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>
|
||||
<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="qiniu_access_key" value="{:get_system_config('qiniu_access_key')}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">SecretKey</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="qiniu_secret_key" value="{:get_system_config('qiniu_secret_key')}" 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_bucket" value="{:get_system_config('qiniu_bucket')}" 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 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">
|
||||
<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 style="padding:15px">
|
||||
<div class="main-header">
|
||||
<span class="layui-breadcrumb">
|
||||
<a>首页</a>
|
||||
<a><cite>第三方管理</cite></a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="main-container">
|
||||
<div class="layui-row">
|
||||
|
||||
<div class="layui-col-md6">
|
||||
<fieldset class="layui-elem-field ">
|
||||
<legend>UserHub</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">key</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="user_hub_key" value="{:get_system_config('user_hub_key')}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">secret</div>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="user_hub_secret" value="{:get_system_config('user_hub_secret')}" 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="user_hub_host" value="{:get_system_config('user_hub_host')}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn layui-btn-fluid">保存</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{include file="common/_footer"}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['layer'],function(){
|
||||
var layer = layui.layer;
|
||||
|
||||
|
||||
})
|
||||
</script>
|
||||
{include file="common/_footer"}
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['layer'], function () {
|
||||
var layer = layui.layer;
|
||||
|
||||
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -40,6 +40,28 @@
|
||||
border-radius: 2px;
|
||||
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>
|
||||
</head>
|
||||
|
||||
@@ -64,8 +86,7 @@
|
||||
</div>
|
||||
{if !empty($post.jump_to_url) && $post.jump_to_url_status != 0}
|
||||
<div class="jump-container">
|
||||
<a href="{$post.jump_to_url}" class="layui-btn jump-btn"
|
||||
target="_blank">{$post.jump_to_btn_title|default='立即跳转'}</a>
|
||||
<a href="{$post.jump_to_url}" class="layui-btn jump-btn" target="_blank">{$post.jump_to_btn_title|default='立即跳转'}</a>
|
||||
</div>
|
||||
{if $post.jump_to_url_status == 2 }
|
||||
<script>
|
||||
@@ -110,6 +131,57 @@
|
||||
{:get_system_config('post_copyright')}
|
||||
</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>
|
||||
{include file='common/_right'/}
|
||||
@@ -121,6 +193,49 @@
|
||||
</div>
|
||||
<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) {
|
||||
|
||||
hljs.highlightBlock(e);
|
||||
|
||||
Reference in New Issue
Block a user