mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2025-05-21 22:39:16 +08:00
调整文章模块
This commit is contained in:
parent
504f4b3f03
commit
6fc60bd054
@ -4,6 +4,7 @@ namespace app\data\controller;
|
||||
|
||||
use app\data\service\NewsService;
|
||||
use think\admin\Controller;
|
||||
use think\admin\extend\CodeExtend;
|
||||
|
||||
/**
|
||||
* 文章内容管理
|
||||
@ -92,6 +93,9 @@ class NewsItem extends Controller
|
||||
*/
|
||||
protected function _form_filter(array &$data)
|
||||
{
|
||||
if (empty($data['code'])) {
|
||||
$data['code'] = CodeExtend::uniqidDate(15, 'A');
|
||||
}
|
||||
if ($this->request->isGet()) {
|
||||
$query = $this->app->db->name('DataNewsMark')->where(['deleted' => 0, 'status' => 1]);
|
||||
$this->mark = $query->order('sort desc,id desc')->select()->toArray();
|
||||
|
@ -33,17 +33,17 @@ class News extends Controller
|
||||
*/
|
||||
public function getItem()
|
||||
{
|
||||
if (($id = intval(input('id', 0))) > 0) {
|
||||
$this->app->db->name('DataNewsItem')->where(['id' => $id])->update([
|
||||
if ($code = input('code', '')) {
|
||||
$this->app->db->name('DataNewsItem')->where(['code' => $code])->update([
|
||||
'num_read' => $this->app->db->raw('`num_read`+1'),
|
||||
]);
|
||||
if (input('mid', 0) > 0) {
|
||||
$history = ['mid' => input('mid'), 'cid' => $id];
|
||||
$this->app->db->name('DataNewsXHistory')->where($history)->delete();
|
||||
$this->app->db->name('DataNewsXHistory')->insert($history);
|
||||
if (($mid = input('mid', 0)) > 0) {
|
||||
$data = ['mid' => $mid, 'code' => $code, 'type' => 3];
|
||||
$this->app->db->name('DataNewsXCollect')->where($data)->delete();
|
||||
$this->app->db->name('DataNewsXCollect')->insert($data);
|
||||
}
|
||||
}
|
||||
$query = $this->_query('DataNewsItem')->like('name,mark')->equal('id');
|
||||
$query = $this->_query('DataNewsItem')->like('name,mark')->equal('id,code');
|
||||
$query->where(['deleted' => 0, 'status' => 1])->withoutField('sort,status,deleted');
|
||||
$result = $query->order('sort desc,id desc')->page(true, false, false, 15);
|
||||
NewsService::instance()->buildListState($result['list'], input('mid', 0));
|
||||
@ -58,10 +58,10 @@ class News extends Controller
|
||||
*/
|
||||
public function getComment()
|
||||
{
|
||||
$map = $this->_vali(['cid.require' => '文章不能为空!']);
|
||||
$map = $this->_vali(['code.require' => '文章不能为空!']);
|
||||
$query = $this->_query('DataNewsXComment')->where($map);
|
||||
$result = $query->order('id desc')->page(false, false, false, 5);
|
||||
NewsService::instance()->buildListByCidAndMid($result['list']);
|
||||
NewsService::instance()->buildListByMinAndCode($result['list']);
|
||||
$this->success('获取文章评论成功!', $result);
|
||||
}
|
||||
|
||||
|
@ -20,11 +20,11 @@ class News extends Auth
|
||||
{
|
||||
$data = $this->_vali([
|
||||
'mid.value' => $this->mid,
|
||||
'cid.require' => '文章不能为空!',
|
||||
'code.require' => '文章不能为空!',
|
||||
'content.require' => '内容不能为空!',
|
||||
]);
|
||||
if ($this->app->db->name('DataNewsXComment')->insert($data) !== false) {
|
||||
NewsService::instance()->syncNewsTotal($data['cid']);
|
||||
NewsService::instance()->syncNewsTotal($data['code']);
|
||||
$this->success('添加评论成功!');
|
||||
} else {
|
||||
$this->error('添加评论失败!');
|
||||
@ -39,10 +39,10 @@ class News extends Auth
|
||||
*/
|
||||
public function getComment()
|
||||
{
|
||||
$map = $this->_vali(['mid.value' => $this->mid, 'cid.require' => '文章不能为空!']);
|
||||
$map = $this->_vali(['mid.value' => $this->mid, 'code.require' => '文章不能为空!']);
|
||||
$result = $this->_query('DataNewsXComment')->where($map)->order('id desc')->page(true, false);
|
||||
if (count($result['list']) > 0) {
|
||||
NewsService::instance()->buildListByCidAndMid($result);
|
||||
NewsService::instance()->buildListByMinAndCode($result);
|
||||
}
|
||||
$this->success('获取评论列表成功', $result);
|
||||
}
|
||||
@ -54,9 +54,9 @@ class News extends Auth
|
||||
public function delComment()
|
||||
{
|
||||
$map = $this->_vali([
|
||||
'mid.value' => $this->mid,
|
||||
'cid.require' => '文章ID不能为空!',
|
||||
'id.require' => '评论ID不能为空!',
|
||||
'mid.value' => $this->mid,
|
||||
'id.require' => '评论ID不能为空!',
|
||||
'code.require' => '文章CODE不能为空!',
|
||||
]);
|
||||
if ($this->app->db->name('DataNewsXComment')->where($map)->delete() !== false) {
|
||||
$this->success('评论删除成功!');
|
||||
@ -76,7 +76,7 @@ class News extends Auth
|
||||
$this->success('您已收藏!');
|
||||
}
|
||||
if ($this->app->db->name('DataNewsXCollect')->insert($map) !== false) {
|
||||
NewsService::instance()->syncNewsTotal($map['cid']);
|
||||
NewsService::instance()->syncNewsTotal($map['code']);
|
||||
$this->success('收藏成功!');
|
||||
} else {
|
||||
$this->error('收藏失败!');
|
||||
@ -91,7 +91,7 @@ class News extends Auth
|
||||
{
|
||||
$map = $this->_getCollectWhere(1);
|
||||
if ($this->app->db->name('DataNewsXCollect')->where($map)->delete() !== false) {
|
||||
NewsService::instance()->syncNewsTotal($map['cid']);
|
||||
NewsService::instance()->syncNewsTotal($map['code']);
|
||||
$this->success('取消收藏成功!');
|
||||
} else {
|
||||
$this->error('取消收藏失败!');
|
||||
@ -108,7 +108,7 @@ class News extends Auth
|
||||
$query = $this->_query('DataNewsXCollect')->where($map);
|
||||
$result = $query->order('id desc')->page(true, false, false, 15);
|
||||
if (count($result['list']) > 0) {
|
||||
NewsService::instance()->buildListByCidAndMid($result['list']);
|
||||
NewsService::instance()->buildListByMinAndCode($result['list']);
|
||||
}
|
||||
$this->success('获取收藏记录成功!', $result);
|
||||
}
|
||||
@ -124,7 +124,7 @@ class News extends Auth
|
||||
$this->success('您已点赞!');
|
||||
}
|
||||
if ($this->app->db->name('DataNewsXCollect')->insert($map) !== false) {
|
||||
NewsService::instance()->syncNewsTotal($map['cid']);
|
||||
NewsService::instance()->syncNewsTotal($map['code']);
|
||||
$this->success('点赞成功!');
|
||||
} else {
|
||||
$this->error('点赞失败!');
|
||||
@ -139,7 +139,7 @@ class News extends Auth
|
||||
{
|
||||
$map = $this->_getCollectWhere(2);
|
||||
if ($this->app->db->name('DataNewsXCollect')->where($map)->delete() !== false) {
|
||||
NewsService::instance()->syncNewsTotal($map['cid']);
|
||||
NewsService::instance()->syncNewsTotal($map['code']);
|
||||
$this->success('取消点赞成功!');
|
||||
} else {
|
||||
$this->error('取消点赞失败!');
|
||||
@ -152,12 +152,9 @@ class News extends Auth
|
||||
*/
|
||||
public function getLike()
|
||||
{
|
||||
$map = ['mid' => $this->mid, 'type' => 2];
|
||||
$query = $this->_query('DataNewsXCollect')->where($map);
|
||||
$result = $query->order('id desc')->page(true, false, false, 15);
|
||||
if (count($result['list']) > 0) {
|
||||
NewsService::instance()->buildListByCidAndMid($result['list']);
|
||||
}
|
||||
$query = $this->_query('DataNewsXCollect')->order('id desc');
|
||||
$result = $query->where(['mid' => $this->mid, 'type' => 2])->page(true, false, false, 15);
|
||||
NewsService::instance()->buildListByMinAndCode($result['list']);
|
||||
$this->success('获取点赞记录成功!', $result);
|
||||
}
|
||||
|
||||
@ -169,12 +166,9 @@ class News extends Auth
|
||||
*/
|
||||
public function getHistory()
|
||||
{
|
||||
$map = ['mid' => $this->mid];
|
||||
$query = $this->_query('DataNewsXHistory')->where($map);
|
||||
$result = $query->order('id desc')->page(true, false, false, 15);
|
||||
if (count($result['list']) > 0) {
|
||||
NewsService::instance()->buildListByCidAndMid($result['list']);
|
||||
}
|
||||
$query = $this->_query('DataNewsXCollect')->order('id desc');
|
||||
$result = $query->where(['mid' => $this->mid, 'type' => 3])->page(true, false, false, 15);
|
||||
NewsService::instance()->buildListByMinAndCode($result['list']);
|
||||
$this->success('获取浏览历史成功!', $result);
|
||||
}
|
||||
|
||||
@ -183,12 +177,12 @@ class News extends Auth
|
||||
* @param integer $type 数据类型
|
||||
* @return array
|
||||
*/
|
||||
private function _getCollectWhere($type = 1): array
|
||||
private function _getCollectWhere(int $type = 1): array
|
||||
{
|
||||
return $this->_vali([
|
||||
'mid.value' => $this->mid,
|
||||
'type.value' => $type,
|
||||
'cid.require' => '文章不能为空!',
|
||||
'mid.value' => $this->mid,
|
||||
'type.value' => $type,
|
||||
'code.require' => '编号不能为空!',
|
||||
]);
|
||||
}
|
||||
|
||||
|
1813
app/data/data.sql
1813
app/data/data.sql
File diff suppressed because one or more lines are too long
@ -13,43 +13,43 @@ class NewsService extends Service
|
||||
{
|
||||
/**
|
||||
* 同步文章数据统计
|
||||
* @param integer $cid 文章ID
|
||||
* @param integer $code 文章编号
|
||||
* @throws \think\db\exception\DbException
|
||||
*/
|
||||
public function syncNewsTotal(int $cid): void
|
||||
public function syncNewsTotal(int $code): void
|
||||
{
|
||||
[$map, $total] = [['cid' => $cid], []];
|
||||
[$map, $total] = [['code' => $code], []];
|
||||
$query = $this->app->db->name('DataNewsXCollect')->field('count(1) count,type');
|
||||
$query->where($map)->group('type')->select()->map(function ($item) use (&$total) {
|
||||
$total[$item['type']] = $item['count'];
|
||||
});
|
||||
$this->app->db->name('DataNewsItem')->where(['id' => $cid])->update([
|
||||
$this->app->db->name('DataNewsItem')->where(['code' => $code])->update([
|
||||
'num_collect' => $total[2] ?? 0, 'num_like' => $total[1] ?? 0,
|
||||
'num_comment' => $this->app->db->name('DataNewsXComment')->where($map)->count(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据CID绑定列表数据
|
||||
* 根据code绑定列表数据
|
||||
* @param array $list 数据列表
|
||||
* @return array
|
||||
*/
|
||||
public function buildListByCidAndMid(array &$list = []): array
|
||||
public function buildListByMinAndCode(array &$list = []): array
|
||||
{
|
||||
if (count($list) > 0) {
|
||||
/*! 读取文章内容 */
|
||||
$cids = array_unique(array_column($list, 'cid'));
|
||||
$cols = 'id,name,cover,mark,status,deleted,create_at,num_like,num_read,num_comment,num_collect';
|
||||
$items = $this->app->db->name('DataNewsItem')->whereIn('id', $cids)->column($cols, 'id');
|
||||
$codes = array_unique(array_column($list, 'code'));
|
||||
$colls = 'id,code,name,cover,mark,status,deleted,create_at,num_like,num_read,num_comment,num_collect';
|
||||
$items = $this->app->db->name('DataNewsItem')->whereIn('code', $codes)->column($colls, 'code');
|
||||
$marks = $this->app->db->name('DataNewsMark')->where(['status' => 1])->column('name');
|
||||
foreach ($items as &$vo) $vo['mark'] = str2arr($vo['mark'] ?: '', ',', $marks);
|
||||
/*! 绑定会员数据 */
|
||||
$mids = array_unique(array_column($list, 'mid'));
|
||||
$cols = 'id,phone,nickname,username,headimg,status';
|
||||
$users = $this->app->db->name('DataMember')->whereIn('id', $mids)->column($cols, 'id');
|
||||
$colls = 'id,phone,nickname,username,headimg,status';
|
||||
$users = $this->app->db->name('DataMember')->whereIn('id', $mids)->column($colls, 'id');
|
||||
foreach ($list as &$vo) {
|
||||
$vo['record'] = $items[$vo['cid']] ?? [];
|
||||
$vo['member'] = $users[$vo['mid']] ?? [];
|
||||
$vo['record'] = $items[$vo['code']] ?? [];
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
@ -64,17 +64,17 @@ class NewsService extends Service
|
||||
public function buildListState(array &$list, int $mid = 0): array
|
||||
{
|
||||
if (count($list) > 0) {
|
||||
[$cid1s, $cid2s, $marks] = [[], [], []];
|
||||
[$code2, $code1, $marks] = [[], [], []];
|
||||
if ($mid > 0) {
|
||||
$map = [['mid', '=', $mid], ['cid', 'in', array_unique(array_column($list, 'id'))]];
|
||||
$map = [['mid', '=', $mid], ['code', 'in', array_unique(array_column($list, 'code'))]];
|
||||
$marks = $this->app->db->name('DataNewsMark')->where(['status' => 1])->column('name');
|
||||
$cid1s = $this->app->db->name('DataNewsXCollect')->where($map)->where(['type' => 2])->column('cid');
|
||||
$cid2s = $this->app->db->name('DataNewsXCollect')->where($map)->where(['type' => 1])->column('cid');
|
||||
$code1 = $this->app->db->name('DataNewsXCollect')->where($map)->where(['type' => 1])->column('code');
|
||||
$code2 = $this->app->db->name('DataNewsXCollect')->where($map)->where(['type' => 2])->column('code');
|
||||
}
|
||||
foreach ($list as &$vo) {
|
||||
$vo['mark'] = str2arr($vo['mark'] ?: '', ',', $marks);
|
||||
$vo['my_like_state'] = in_array($vo['id'], $cid1s) ? 1 : 0;
|
||||
$vo['my_coll_state'] = in_array($vo['id'], $cid2s) ? 1 : 0;
|
||||
$vo['my_like_state'] = in_array($vo['code'], $code2) ? 1 : 0;
|
||||
$vo['my_coll_state'] = in_array($vo['code'], $code1) ? 1 : 0;
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
|
@ -40,18 +40,20 @@
|
||||
<textarea class="layui-textarea" placeholder="请输入文章内容" name="content">{$vo.content|default=''}</textarea>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="hr-line-dashed"></div>
|
||||
{notempty name='vo.id'}<input type='hidden' value='{$vo.id}' name='id'>{/notempty}
|
||||
{notempty name='vo.code'}<input type='hidden' value='{$vo.code}' name='code'>{/notempty}
|
||||
|
||||
<div class="layui-form-item text-center">
|
||||
<button type="submit" class="layui-btn">保存数据</button>
|
||||
<button type='button' class="layui-btn layui-btn-danger" data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
require(['ckeditor'], function () {
|
||||
window.createEditor('[name=content]', {height: 300});
|
||||
});
|
||||
</script>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
require(['ckeditor'], function () {
|
||||
window.createEditor('[name=content]', {height: 300});
|
||||
});
|
||||
</script>
|
||||
{/block}
|
@ -25,6 +25,7 @@
|
||||
<th class='list-table-sort-td'>
|
||||
<button type="button" data-reload class="layui-btn layui-btn-xs">刷 新</button>
|
||||
</th>
|
||||
<th class="text-left nowrap">文章编号</th>
|
||||
<th class="text-left nowrap">文章名称</th>
|
||||
<th class="text-left nowrap">搜索标签</th>
|
||||
<th class="text-left nowrap">文章状态</th>
|
||||
@ -42,6 +43,7 @@
|
||||
<td class='list-table-sort-td'>
|
||||
<label><input data-action-blur="{:request()->url()}" data-value="id#{$vo.id};action#sort;sort#{value}" data-loading="false" value="{$vo.sort}" class="list-sort-input"></label>
|
||||
</td>
|
||||
<td class="text-left nowrap">{$vo.code|default=''}</td>
|
||||
<td class="text-left nowrap">{$vo.name|default=''}</td>
|
||||
<td class="text-left nowrap">{notempty name='vo.mark'}{foreach $vo.mark as $tag}<span data-tips-text="热搜标签" class="margin-right-5 layui-badge layui-bg-cyan">{$tag}</span>{/foreach}{/notempty}<br></td>
|
||||
<td class="text-left nowrap">{if $vo.status eq 0}<span class="color-red">已禁用</span>{elseif $vo.status eq 1}<span class="color-green">已激活</span>{/if}</td>
|
||||
|
Loading…
x
Reference in New Issue
Block a user