From 5d5e38361fcdfdba191b579323889a0d2efecbc3 Mon Sep 17 00:00:00 2001 From: Anyon Date: Wed, 2 Sep 2020 16:02:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95=E6=A1=88?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{ArticleContent.php => NewsItem.php} | 23 +- .../{ArticleTags.php => NewsMark.php} | 6 +- .../controller/api/{Article.php => News.php} | 39 ++-- .../api/member/{Article.php => News.php} | 65 +++--- app/data/data.sql | 203 +++++++++--------- app/data/service/ArticleService.php | 28 --- app/data/service/NewsService.php | 80 +++++++ app/data/view/config/slider.html | 6 +- .../{article_content => news_item}/form.html | 30 +-- .../{article_content => news_item}/index.html | 4 +- .../index_search.html | 2 +- .../select.html | 12 +- .../select_search.html | 0 .../{article_tags => news_mark}/form.html | 0 .../{article_tags => news_mark}/index.html | 13 +- .../index_search.html | 0 vendor/services.php | 2 +- 17 files changed, 260 insertions(+), 253 deletions(-) rename app/data/controller/{ArticleContent.php => NewsItem.php} (81%) rename app/data/controller/{ArticleTags.php => NewsMark.php} (94%) rename app/data/controller/api/{Article.php => News.php} (63%) rename app/data/controller/api/member/{Article.php => News.php} (57%) delete mode 100644 app/data/service/ArticleService.php create mode 100644 app/data/service/NewsService.php rename app/data/view/{article_content => news_item}/form.html (66%) rename app/data/view/{article_content => news_item}/index.html (95%) rename app/data/view/{article_content => news_item}/index_search.html (96%) rename app/data/view/{article_content => news_item}/select.html (79%) rename app/data/view/{article_content => news_item}/select_search.html (100%) rename app/data/view/{article_tags => news_mark}/form.html (100%) rename app/data/view/{article_tags => news_mark}/index.html (96%) rename app/data/view/{article_tags => news_mark}/index_search.html (100%) diff --git a/app/data/controller/ArticleContent.php b/app/data/controller/NewsItem.php similarity index 81% rename from app/data/controller/ArticleContent.php rename to app/data/controller/NewsItem.php index 832287369..554d7a194 100644 --- a/app/data/controller/ArticleContent.php +++ b/app/data/controller/NewsItem.php @@ -6,22 +6,16 @@ use think\admin\Controller; /** * 文章内容管理 - * Class ArticleContent + * Class NewsItem * @package app\data\controller */ -class ArticleContent extends Controller +class NewsItem extends Controller { /** * 绑定数据表 * @var string */ - private $table = 'DataArticleContent'; - - /** - * 平台标签配置 - * @var array - */ - protected $types = ['video' => '视频', 'article' => '文章', 'audio' => '音频']; + private $table = 'DataNewsItem'; /** * 文章内容管理 @@ -35,7 +29,7 @@ class ArticleContent extends Controller { $this->title = '文章内容管理'; $query = $this->_query($this->table); - $query->like('title,tags')->dateBetween('create_at'); + $query->like('title,mark')->dateBetween('create_at'); $query->where(['deleted' => 0])->order('sort desc,id desc')->page(); } @@ -58,7 +52,8 @@ class ArticleContent extends Controller protected function _page_filter(&$data) { foreach ($data as &$vo) { - $vo['tags'] = explode(',', trim($vo['tags'], ',')); + $vo['mark'] = trim($vo['mark'], ','); + $vo['mark'] = $vo['mark'] ? explode(',', $vo['mark']) : []; } } @@ -99,10 +94,10 @@ class ArticleContent extends Controller { if ($this->request->isGet()) { [$map, $sort] = [['deleted' => 0, 'status' => 1], 'sort desc,id desc']; - $this->tags = $this->app->db->name('DataArticleTags')->where($map)->order($sort)->select()->toArray(); - $data['tags'] = isset($data['tags']) && $data['tags'] ? explode(',', trim($data['tags'], ',')) : []; + $this->mark = $this->app->db->name('DataNewsMark')->where($map)->order($sort)->select()->toArray(); + $data['mark'] = isset($data['mark']) && $data['mark'] ? explode(',', trim($data['mark'], ',')) : []; } else { - $data['tags'] = ',' . join(',', isset($data['tags']) && is_array($data['tags']) ? $data['tags'] : []) . ','; + $data['mark'] = ',' . join(',', isset($data['mark']) && is_array($data['mark']) ? $data['mark'] : []) . ','; } } diff --git a/app/data/controller/ArticleTags.php b/app/data/controller/NewsMark.php similarity index 94% rename from app/data/controller/ArticleTags.php rename to app/data/controller/NewsMark.php index 19425c6d1..39ae9902b 100644 --- a/app/data/controller/ArticleTags.php +++ b/app/data/controller/NewsMark.php @@ -6,16 +6,16 @@ use think\admin\Controller; /** * 文章标签管理 - * Class ArticleTags + * Class NewsMark * @package app\data\controller */ -class ArticleTags extends Controller +class NewsMark extends Controller { /** * 绑定数据表 * @var string */ - private $table = 'DataArticleTags'; + private $table = 'DataNewsMark'; /** * 文章标签管理 diff --git a/app/data/controller/api/Article.php b/app/data/controller/api/News.php similarity index 63% rename from app/data/controller/api/Article.php rename to app/data/controller/api/News.php index 3ae81ad30..51209b104 100644 --- a/app/data/controller/api/Article.php +++ b/app/data/controller/api/News.php @@ -2,14 +2,15 @@ namespace app\data\controller\api; +use app\data\service\NewsService; use think\admin\Controller; /** * 文章接口控制器 - * Class Article + * Class News * @package app\data\controller\api */ -class Article extends Controller +class News extends Controller { /** * 获取文章标签列表 @@ -17,9 +18,9 @@ class Article extends Controller * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ - public function getTags() + public function getMark() { - $query = $this->_query('DataArticleTags')->like('title'); + $query = $this->_query('DataNewsMark')->like('title'); $query->where(['deleted' => 0, 'status' => 1])->withoutField('sort,status,deleted'); $this->success('获取文章标签列表', $query->order('sort desc,id desc')->page(false, false)); } @@ -30,22 +31,24 @@ class Article extends Controller * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ - public function getContent() + public function getItem() { if (($id = intval(input('id', 0))) > 0) { - $this->app->db->name('DataArticleContent')->where(['id' => $id])->update([ - 'number_reads' => $this->app->db->raw('`number_reads`+1'), + $this->app->db->name('DataNewsItem')->where(['id' => $id])->update([ + 'num_read' => $this->app->db->raw('`num_read`+1'), ]); if (input('mid') > 0) { $history = ['mid' => input('mid'), 'cid' => $id]; - $this->app->db->name('DataArticleHistory')->where($history)->delete(); - $this->app->db->name('DataArticleHistory')->insert($history); + $this->app->db->name('DataNewsHistory')->where($history)->delete(); + $this->app->db->name('DataNewsHistory')->insert($history); } } - $query = $this->_query('DataArticleContent')->equal('type,id')->like('title,tags'); + $query = $this->_query('DataNewsItem')->equal('id')->like('title,mark'); $query->where(['deleted' => 0, 'status' => 1])->withoutField('sort,status,deleted'); $result = $query->order('sort desc,id desc')->page(true, false, false, 15); - foreach ($result['list'] as &$vo) $vo['tags'] = trim($vo['tags'], ','); + if (count($result['list']) > 0 && input('mid') > 0) { + NewsService::instance()->buildListState($result['list'], input('mid')); + } $this->success('获取文章内容列表', $result); } @@ -58,13 +61,9 @@ class Article extends Controller public function getComment() { $data = $this->_vali(['cid.require' => '文章ID不能为空!']); - $query = $this->_query('DataArticleComment')->where($data); + $query = $this->_query('DataNewsXComment')->where($data); $result = $query->order('id desc')->page(false, false, false, 5); - if (count($result['list']) > 0) { - $ids = array_unique(array_column($result['list'], 'mid')); - $mems = $this->app->db->name('DataMember')->whereIn('id', $ids)->column('id,nickname,username,headimg', 'id'); - foreach ($result['list'] as &$vo) $vo['member'] = $mems[$vo['mid']] ?? []; - } + NewsService::instance()->buildListByMid($result['list']); $this->success('获取文章评论成功!', $result); } @@ -74,17 +73,17 @@ class Article extends Controller public function getLike() { $data = $this->_vali(['cid.require' => '文章ID不能为空!']); - $query = $this->app->db->name('DataArticleLike')->where($data); + $query = $this->app->db->name('DataNewsXLike')->where($data); $this->success('获取已点赞的会员', ['list' => $query->order('mid asc')->column('mid')]); } /** * 获取已收藏的会员 */ - public function getCollection() + public function getCollect() { $data = $this->_vali(['cid.require' => '文章ID不能为空!']); - $query = $this->app->db->name('DataArticleCollection')->where($data); + $query = $this->app->db->name('DataNewsXCollect')->where($data); $this->success('获取已收藏的会员', ['list' => $query->order('mid asc')->column('mid')]); } } \ No newline at end of file diff --git a/app/data/controller/api/member/Article.php b/app/data/controller/api/member/News.php similarity index 57% rename from app/data/controller/api/member/Article.php rename to app/data/controller/api/member/News.php index fc096b98c..8aac4b2da 100644 --- a/app/data/controller/api/member/Article.php +++ b/app/data/controller/api/member/News.php @@ -3,14 +3,14 @@ namespace app\data\controller\api\member; use app\data\controller\api\Member; -use app\data\service\ArticleService; +use app\data\service\NewsService; /** * 文章评论内容 - * Class Article + * Class News * @package app\data\controller\api\member */ -class Article extends Member +class News extends Member { /** * 会员评论内容 @@ -23,8 +23,8 @@ class Article extends Member 'cid.require' => '文章ID不能为空!', 'content.require' => '评论内容不能为空!', ]); - if ($this->app->db->name('DataArticleComment')->insert($data) !== false) { - ArticleService::instance()->syncTotal($data['cid']); + if ($this->app->db->name('DataNewsXComment')->insert($data) !== false) { + NewsService::instance()->syncTotal($data['cid']); $this->success('添加评论成功!'); } else { $this->error('添加评论失败!'); @@ -42,7 +42,7 @@ class Article extends Member 'id.require' => '评论ID不能为空', 'cid.require' => '文章ID不能为空!', ]); - if ($this->app->db->name('DataArticleComment')->where($data)->delete() !== false) { + if ($this->app->db->name('DataNewsXComment')->where($data)->delete() !== false) { $this->success('评论删除成功!'); } else { $this->error('认证删除失败!'); @@ -58,23 +58,22 @@ class Article extends Member public function getComment() { $data = $this->_vali(['mid.value' => $this->mid, 'cid.require' => '内容ID不能为空!']); - $this->success('获取评论列表成功', [ - 'list' => $this->app->db->name('DataArticleComment')->where($data)->order('id desc')->select()->toArray(), - ]); + $query = $this->app->db->name('DataNewsXComment')->where($data)->order('id desc'); + $this->success('获取评论列表成功', ['list' => $query->select()->toArray()]); } /** * 添加内容收藏 * @throws \think\db\exception\DbException */ - public function addCollection() + public function addCollect() { $data = $this->_vali(['mid.value' => $this->mid, 'cid.require' => '内容ID不能为空!']); - if ($this->app->db->name('DataArticleCollection')->where($data)->count() > 0) { + if ($this->app->db->name('DataNewsXCollect')->where($data)->count() > 0) { $this->success('您已收藏!'); } - if ($this->app->db->name('DataArticleCollection')->insert($data) !== false) { - ArticleService::instance()->syncTotal($data['cid']); + if ($this->app->db->name('DataNewsXCollect')->insert($data) !== false) { + NewsService::instance()->syncTotal($data['cid']); $this->success('收藏成功!'); } else { $this->error('收藏失败!'); @@ -85,11 +84,11 @@ class Article extends Member * 取消收藏文章 * @throws \think\db\exception\DbException */ - public function delCollection() + public function delCollect() { $data = $this->_vali(['mid.value' => $this->mid, 'cid.require' => '文章ID不能为空!']); - if ($this->app->db->name('DataArticleCollection')->where($data)->delete() !== false) { - ArticleService::instance()->syncTotal($data['cid']); + if ($this->app->db->name('DataNewsXCollect')->where($data)->delete() !== false) { + NewsService::instance()->syncTotal($data['cid']); $this->success('取消收藏成功!'); } else { $this->error('取消收藏失败!'); @@ -100,18 +99,12 @@ class Article extends Member * 获取我收藏的资讯 * @throws \think\db\exception\DbException */ - public function getMyCollection() + public function getMyCollect() { - $query = $this->_query('DataArticleCollection')->where(['mid' => $this->mid]); + $query = $this->_query('DataNewsXCollect')->where(['mid' => $this->mid]); $result = $query->order('id desc')->page(true, false, false, 15); - if (count($result['list']) > 0) { - $ids = array_unique(array_column($result['list'], 'cid')); - $fields = 'id,title,logo,source,number_likes,number_reads,number_comment,number_collection,status,deleted,create_at'; - $Articles = $this->app->db->name('DataArticleContent')->whereIn('id', $ids)->column($fields, 'id'); - foreach ($result['list'] as &$vo) $vo['record'] = $Articles[$vo['cid']] ?? []; - } + NewsService::instance()->buildListByCid($result['list']); $this->success('获取收藏记录成功!', $result); - } /** @@ -121,11 +114,11 @@ class Article extends Member public function addLike() { $data = $this->_vali(['mid.value' => $this->mid, 'cid.require' => '内容ID不能为空!']); - if ($this->app->db->name('DataArticleLike')->where($data)->count() > 0) { + if ($this->app->db->name('DataNewsXLike')->where($data)->count() > 0) { $this->success('您已点赞!'); } - if ($this->app->db->name('DataArticleLike')->insert($data) !== false) { - ArticleService::instance()->syncTotal($data['cid']); + if ($this->app->db->name('DataNewsXLike')->insert($data) !== false) { + NewsService::instance()->syncTotal($data['cid']); $this->success('点赞成功!'); } else { $this->error('点赞失败!'); @@ -139,8 +132,8 @@ class Article extends Member public function delLike() { $data = $this->_vali(['mid.value' => $this->mid, 'cid.require' => '内容ID不能为空!']); - if ($this->app->db->name('DataArticleLike')->where($data)->delete() !== false) { - ArticleService::instance()->syncTotal($data['cid']); + if ($this->app->db->name('DataNewsXLike')->where($data)->delete() !== false) { + NewsService::instance()->syncTotal($data['cid']); $this->success('取消点赞成功!'); } else { $this->error('取消点赞失败!'); @@ -155,14 +148,10 @@ class Article extends Member */ public function getHistory() { - $query = $this->_query('DataArticleHistory')->where(['mid' => $this->mid]); - $result = $query->order('id desc')->page(true, false, false, 15); - if (count($result['list']) > 0) { - $ids = array_unique(array_column($result['list'], 'cid')); - $fields = 'id,title,logo,source,number_likes,number_reads,number_comment,number_collection,status,deleted,create_at'; - $articles = $this->app->db->name('DataArticleContent')->whereIn('id', $ids)->column($fields, 'id'); - foreach ($result['list'] as &$vo) $vo['record'] = $articles[$vo['cid']] ?? []; - } + $query = $this->_query('DataNewsXHistory'); + $query->where(['mid' => $this->mid])->order('id desc'); + $result = $query->page(true, false, false, 15); + NewsService::instance()->buildListByCid($result['list']); $this->success('获取浏览历史成功!', $result); } diff --git a/app/data/data.sql b/app/data/data.sql index 9715f7707..c62fa43d9 100644 --- a/app/data/data.sql +++ b/app/data/data.sql @@ -11,114 +11,12 @@ Target Server Version : 50562 File Encoding : 65001 - Date: 13/07/2020 16:11:40 + Date: 02/09/2020 16:01:59 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; --- ---------------------------- --- Table structure for data_article_collection --- ---------------------------- -DROP TABLE IF EXISTS `data_article_collection`; -CREATE TABLE `data_article_collection` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `cid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章编号', - `mid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '会员MID', - `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '评论内容', - `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_data_article_comment_cid`(`cid`) USING BTREE, - INDEX `idx_data_article_comment_mid`(`mid`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-收藏' ROW_FORMAT = Compact; - --- ---------------------------- --- Table structure for data_article_comment --- ---------------------------- -DROP TABLE IF EXISTS `data_article_comment`; -CREATE TABLE `data_article_comment` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `cid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章编号', - `mid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '会员MID', - `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '评论内容', - `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_data_article_comment_cid`(`cid`) USING BTREE, - INDEX `idx_data_article_comment_mid`(`mid`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-评论' ROW_FORMAT = Compact; - --- ---------------------------- --- Table structure for data_article_content --- ---------------------------- -DROP TABLE IF EXISTS `data_article_content`; -CREATE TABLE `data_article_content` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '文章标题', - `type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '文章类型(video,article,audio)', - `logo` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '攻略图片', - `tags` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '文章标签', - `source` varchar(900) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '媒体资源', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注说明', - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '文章内容', - `number_likes` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章点赞数', - `number_reads` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章阅读数', - `number_comment` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章评论数', - `number_collection` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章收藏数', - `sort` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '排序权重', - `status` tinyint(1) UNSIGNED NULL DEFAULT 1 COMMENT '权限状态(1使用,0禁用)', - `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '删除状态(0未删,1已删)', - `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_data_article_content_type`(`type`) USING BTREE, - INDEX `idx_data_article_content_status`(`status`) USING BTREE, - INDEX `idx_data_article_content_deleted`(`deleted`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-内容' ROW_FORMAT = Compact; - --- ---------------------------- --- Table structure for data_article_history --- ---------------------------- -DROP TABLE IF EXISTS `data_article_history`; -CREATE TABLE `data_article_history` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `cid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章编号', - `mid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '会员MID', - `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_data_article_history_cid`(`cid`) USING BTREE, - INDEX `idx_data_article_history_mid`(`mid`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-历史' ROW_FORMAT = Compact; - --- ---------------------------- --- Table structure for data_article_like --- ---------------------------- -DROP TABLE IF EXISTS `data_article_like`; -CREATE TABLE `data_article_like` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `cid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章编号', - `mid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '会员MID', - `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_data_article_comment_cid`(`cid`) USING BTREE, - INDEX `idx_data_article_comment_mid`(`mid`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-点赞' ROW_FORMAT = Compact; - --- ---------------------------- --- Table structure for data_article_tags --- ---------------------------- -DROP TABLE IF EXISTS `data_article_tags`; -CREATE TABLE `data_article_tags` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '标签名称', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '标签说明', - `sort` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '排序权重', - `status` tinyint(1) UNSIGNED NULL DEFAULT 1 COMMENT '权限状态(1使用,0禁用)', - `deleted` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '删除状态', - `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_data_article_tags_status`(`status`) USING BTREE, - INDEX `idx_data_article_tags_deleted`(`deleted`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-标签' ROW_FORMAT = Compact; - -- ---------------------------- -- Table structure for data_member -- ---------------------------- @@ -194,4 +92,103 @@ CREATE TABLE `data_member_coin_used` ( INDEX `idx_data_member_coin_used_name`(`name`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据-会员-金币-消费' ROW_FORMAT = Compact; +-- ---------------------------- +-- Table structure for data_news_item +-- ---------------------------- +DROP TABLE IF EXISTS `data_news_item`; +CREATE TABLE `data_news_item` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '文章标题', + `mark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '文章标签', + `cover` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '文章封面', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注说明', + `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '文章内容', + `num_like` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章点赞数', + `num_read` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章阅读数', + `num_collect` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章收藏数', + `num_comment` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章评论数', + `sort` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '排序权重', + `status` tinyint(1) UNSIGNED NULL DEFAULT 1 COMMENT '权限状态(1使用,0禁用)', + `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '删除状态(0未删,1已删)', + `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_data_news_item_status`(`status`) USING BTREE, + INDEX `idx_data_news_item_deleted`(`deleted`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-内容' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Table structure for data_news_mark +-- ---------------------------- +DROP TABLE IF EXISTS `data_news_mark`; +CREATE TABLE `data_news_mark` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '标签名称', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '标签说明', + `sort` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '排序权重', + `status` tinyint(1) UNSIGNED NULL DEFAULT 1 COMMENT '权限状态(1使用,0禁用)', + `deleted` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '删除状态', + `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_data_news_mark_status`(`status`) USING BTREE, + INDEX `idx_data_news_mark_deleted`(`deleted`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-标签' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Table structure for data_news_x_collect +-- ---------------------------- +DROP TABLE IF EXISTS `data_news_x_collect`; +CREATE TABLE `data_news_x_collect` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `cid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章编号', + `mid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '会员MID', + `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '评论内容', + `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_data_news_x_collect_cid`(`cid`) USING BTREE, + INDEX `idx_data_news_x_collect_mid`(`mid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-会员-收藏' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Table structure for data_news_x_comment +-- ---------------------------- +DROP TABLE IF EXISTS `data_news_x_comment`; +CREATE TABLE `data_news_x_comment` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `cid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章编号', + `mid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '会员MID', + `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '评论内容', + `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_data_news_x_comment_cid`(`cid`) USING BTREE, + INDEX `idx_data_news_x_comment_mid`(`mid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-会员-评论' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Table structure for data_news_x_history +-- ---------------------------- +DROP TABLE IF EXISTS `data_news_x_history`; +CREATE TABLE `data_news_x_history` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `cid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章编号', + `mid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '会员MID', + `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_data_news_x_history_cid`(`cid`) USING BTREE, + INDEX `idx_data_news_x_history_mid`(`mid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-会员-历史' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Table structure for data_news_x_like +-- ---------------------------- +DROP TABLE IF EXISTS `data_news_x_like`; +CREATE TABLE `data_news_x_like` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `cid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '文章编号', + `mid` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '会员MID', + `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_data_news_x_like_cid`(`cid`) USING BTREE, + INDEX `idx_data_news_x_like_mid`(`mid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '数据-文章-会员-点赞' ROW_FORMAT = Compact; + SET FOREIGN_KEY_CHECKS = 1; diff --git a/app/data/service/ArticleService.php b/app/data/service/ArticleService.php deleted file mode 100644 index 0a73d5bde..000000000 --- a/app/data/service/ArticleService.php +++ /dev/null @@ -1,28 +0,0 @@ -app->db->name('DataArticleContent')->where(['id' => $cid])->update([ - 'number_likes' => $this->app->db->name('DataArticleLike')->where(['cid' => $cid])->count(), - 'number_comment' => $this->app->db->name('DataArticleComment')->where(['cid' => $cid])->count(), - 'number_collection' => $this->app->db->name('DataArticleCollection')->where(['cid' => $cid])->count(), - ]); - } - -} \ No newline at end of file diff --git a/app/data/service/NewsService.php b/app/data/service/NewsService.php new file mode 100644 index 000000000..279f113fa --- /dev/null +++ b/app/data/service/NewsService.php @@ -0,0 +1,80 @@ +app->db->name('DataNewsItem')->where(['id' => $cid])->update([ + 'num_like' => $this->app->db->name('DataNewsXLike')->where(['cid' => $cid])->count(), + 'num_comment' => $this->app->db->name('DataNewsXComment')->where(['cid' => $cid])->count(), + 'num_collect' => $this->app->db->name('DataNewsXCollect')->where(['cid' => $cid])->count(), + ]); + } + + /** + * 根据CID绑定列表数据 + * @param array $list + * @return array + */ + public function buildListByCid(array &$list = []): array + { + if (count($list) > 0) { + $cids = array_unique(array_column($list, 'cid')); + $cols = 'id,title,logo,status,deleted,create_at,num_like,num_read,num_comment,num_collect'; + $news = $this->app->db->name('DataNewsItem')->whereIn('id', $cids)->column($cols, 'id'); + foreach ($list as &$vo) $vo['record'] = $news[$vo['cid']] ?? []; + } + return $list; + } + + /** + * 根据MID绑定列表数据 + * @param array $list + * @return array + */ + public function buildListByMid(array &$list = []): array + { + if (count($list) > 0) { + $ids = array_unique(array_column($list, 'mid')); + $cols = 'id,phone,nickname,username,headimg,status'; + $mems = $this->app->db->name('DataMember')->whereIn('id', $ids)->column($cols, 'id'); + foreach ($list as &$vo) $vo['member'] = $mems[$vo['mid']] ?? []; + } + return $list; + } + + /** + * 获取列表状态 + * @param array $list + * @param integer $mid + * @return array + */ + public function buildListState(array &$list, int $mid = 0): array + { + if (count($list) > 0 && $mid > 0) { + $map = [['mid', '=', $mid], ['cid', 'in', array_column($list, 'id')]]; + $cid1s = $this->app->db->name('DataNewsXLike')->where($map)->column('cid'); + $cid2s = $this->app->db->name('DataNewsXCollect')->where($map)->column('cid'); + foreach ($list as &$vo) { + $vo['my_like_state'] = in_array($vo['id'], $cid1s) ? 1 : 0; + $vo['my_collect_state'] = in_array($vo['id'], $cid2s) ? 1 : 0; + } + } + return $list; + } + +} \ No newline at end of file diff --git a/app/data/view/config/slider.html b/app/data/view/config/slider.html index d1cbe9016..f94f79426 100644 --- a/app/data/view/config/slider.html +++ b/app/data/view/config/slider.html @@ -62,10 +62,10 @@ })(); /*! 轮播选项操作 */ $('[data-slider-box]').on('click', '[data-item-article]', function ($that) { - $that = $(this), top.setAttackId = function (id) { - $that.prevAll('input').val('article#{v}'.replace('{v}', id)); + $that = $(this), top.setNewsId = function (id) { + $that.prevAll('input').val('news#{v}'.replace('{v}', id)); }; - $.form.iframe('{:url("data/article_content/select")}', '选择文章', ['930px', '600px']); + $.form.iframe('{:url("data/news_item/select")}', '选择文章', ['930px', '600px']); }).on('click', '[data-item-add]', function () { addItem(); }).on('click', '[data-item-rm]', function () { diff --git a/app/data/view/article_content/form.html b/app/data/view/news_item/form.html similarity index 66% rename from app/data/view/article_content/form.html rename to app/data/view/news_item/form.html index 1aae92ddf..8b86f326a 100644 --- a/app/data/view/article_content/form.html +++ b/app/data/view/news_item/form.html @@ -5,42 +5,24 @@
-
- 文章类型 -
- {empty name='vo.type'}{assign name='vo.type' value='video'}{/empty} - {foreach $types as $key=>$type}{if isset($vo.type) and $key eq $vo.type} - - {else} - - {/if}{/foreach} -
-
文章标签
- {foreach $tags as $tag}{if isset($vo.tags) && is_array($vo.tags) && in_array($tag.title, $vo.tags)} - + {foreach $mark as $tag}{if isset($vo.mark) && is_array($vo.mark) && in_array($tag.title, $vo.mark)} + {else} - + {/if}{/foreach}
-
- 资源文件 - -
-
文章图片
diff --git a/app/data/view/article_content/index.html b/app/data/view/news_item/index.html similarity index 95% rename from app/data/view/article_content/index.html rename to app/data/view/news_item/index.html index c20eccf29..c0d1ae95d 100644 --- a/app/data/view/article_content/index.html +++ b/app/data/view/news_item/index.html @@ -14,7 +14,7 @@

演示接口文档:http://www.docway.net/project/1WkI0ZyQ7M1/share/1Wld0z7b1zE

- {include file='article_content/index_search'} + {include file='news_item/index_search'} {notempty name='list'} @@ -43,7 +43,7 @@ - +
{$vo.title|default=''}{notempty name='vo.tags'}{foreach $vo.tags as $tag}{$tag}{/foreach}{/notempty}
{notempty name='vo.mark'}{foreach $vo.mark as $tag}{$tag}{/foreach}{/notempty}
{if $vo.status eq 0}已禁用{elseif $vo.status eq 1}使用中{/if} {$vo.create_at|format_datetime} diff --git a/app/data/view/article_content/index_search.html b/app/data/view/news_item/index_search.html similarity index 96% rename from app/data/view/article_content/index_search.html rename to app/data/view/news_item/index_search.html index 53d210327..73e66c724 100644 --- a/app/data/view/article_content/index_search.html +++ b/app/data/view/news_item/index_search.html @@ -10,7 +10,7 @@
diff --git a/app/data/view/article_content/select.html b/app/data/view/news_item/select.html similarity index 79% rename from app/data/view/article_content/select.html rename to app/data/view/news_item/select.html index 5ca500bcb..fe89b22f8 100644 --- a/app/data/view/article_content/select.html +++ b/app/data/view/news_item/select.html @@ -2,7 +2,7 @@ {block name='content'}
- {include file='article_content/select_search'} + {include file='news_item/select_search'} {notempty name='list'} @@ -20,11 +20,7 @@ - + {/foreach} @@ -37,8 +33,8 @@
{$vo.title|default=''} {if $vo.status eq 0}已禁用{elseif $vo.status eq 1}使用中{/if} {$vo.create_at|format_datetime} - - 选择文章 - - 选择文章