1
0

Article.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace app\api\controller;
  3. use app\model\CustomerClue;
  4. use think\facade\Request;
  5. use app\model\VideoType;
  6. use app\model\UserCollect;
  7. use app\model\Article as ArticleModel;
  8. class Article extends Base
  9. {
  10. /**
  11. * 文章列表
  12. */
  13. public function list($page, $limit, $type = '', $label = '', $keyword = '', $order = 'uploadtime', $desc = 'desc')
  14. {
  15. $order = !$order ? 'uploadtime' : $order;
  16. $desc = !$desc ? 'desc' : $desc;
  17. // $order = $order.' '.$desc;
  18. $condition[] = ['root_id', '=', request()->token['root_org']];
  19. $condition[] = ['publish', '=', 1];
  20. $condition[] = ['delete_time', '=', 0];
  21. empty($label) ?: $condition[] = ['label', '=', $label];
  22. empty($type) ?: $condition[] = ['type', '=', $type];
  23. empty($keyword) ?: $condition[] = ['title', 'like', '%' . $keyword . '%'];
  24. // 获取数据
  25. $data = ArticleModel::where($condition)->withAttr('content', function ($value, $data) {
  26. $value = htmlspecialchars_decode($value);
  27. $value = preg_replace('/\s/', '', $value);
  28. $value = str_replace("&nbsp;", "", $value);
  29. $value = strip_tags($value);
  30. $text = mb_substr($value, 0, 40, "utf-8");
  31. return $text;
  32. })->field('id,title,content,cover_img,uploadtime,shared_times,cover_share_img');
  33. if ($order == 'clue_number') {
  34. $data = $data->select()->toArray();
  35. } else {
  36. $data = $data->page($page, $limit)->order($order . ' ' . $desc)->select()->toArray();
  37. }
  38. $count = ArticleModel::where($condition)->count();
  39. $user_id = $this->request->token['uid'];
  40. if (!empty($user_id)) {
  41. $article_id = array_column($data, 'id');
  42. $article_id = implode(',', $article_id);
  43. $user_foot = UserCollect::where([['content_type', '=', 'article'], ['content_id', 'in', $article_id], ['user_id', '=', $user_id]])->column('user_id', 'content_id');
  44. }
  45. foreach ($data as &$val) {
  46. $val['isCollection'] = false;
  47. if (!empty($user_id)) {
  48. $val['isCollection'] = isset($user_foot[$val['id']]) ? true : false;
  49. }
  50. $val['clue_number'] = CustomerClue::where([['pipe_type', '=', 'article'], ['pipe_id', '=', $val['id']]])->count();
  51. /** -----乐尚企业演示,线索数量进行调整按照分享量的三分之一展示,正式使用系统时删除此代码 ------*/
  52. if(request()->token['root_org'] == 1793) {
  53. $val['clue_number'] = floor($val['shared_times'] > 0 ? $val['shared_times']/3 : 0);
  54. }
  55. /*------------------------------------------------------------------------*/
  56. }
  57. // 排序
  58. if ($order == 'clue_number') {
  59. $sort = $desc == 'desc' ? SORT_DESC : SORT_ASC;
  60. array_multisort(array_column($data, $order), $sort, array_column($data, 'uploadtime'), SORT_DESC, $data);
  61. $data = array_slice($data, ($page-1) * $limit, $limit);
  62. }
  63. return json(['code' => 0, 'data' => $data, 'count' => $count, 'msg' => '获取成功']);
  64. }
  65. /**
  66. * 类型获取
  67. */
  68. public function type()
  69. {
  70. $type = VideoType::field('id,name')->where(['pid' => 0, 'type' => 'article', 'root_id' => request()->token['root_org']])->select()->toArray();
  71. $label = VideoType::field('id,pid,name')->where([['pid', '>', 0], ['type', '=', 'article'], ['root_id', '=', request()->token['root_org']]])->select()->toArray();
  72. foreach ($type as &$val) {
  73. $val['sonLabel'] = [];
  74. foreach ($label as $typeVal) {
  75. if ($val['id'] == $typeVal['pid']) {
  76. $val['sonLabel'][] = $typeVal;
  77. }
  78. }
  79. }
  80. return json(['code' => 0, 'data' => $type, 'msg' => '获取成功']);
  81. }
  82. /**
  83. * 获取所有标签
  84. */
  85. public function get_all_label(){
  86. $label = VideoType::field('id,pid,name')->where([['pid', '>', 0], ['type', '=', 'article'], ['root_id', '=', request()->token['root_org']]])->select()->toArray();
  87. return json(['code' => 0, 'data' => $label, 'msg' => '获取成功']);
  88. }
  89. /**
  90. * 获取文章详情
  91. */
  92. public function info($article_id)
  93. {
  94. $article = ArticleModel::field('id,title,content,cover_img,cover_share_img')->where(['id' => $article_id, 'publish' => 1, 'delete_time' => 0, 'root_id' => request()->token['root_org']])->find();
  95. if (empty($article)) {
  96. $article = [
  97. 'title' => '该文章不存在',
  98. 'content' => '您访问的内容不存在',
  99. 'cover_img' => ''
  100. ];
  101. }
  102. $user_id = $this->request->token['uid'];
  103. $collect = UserCollect::where(['user_id' => $user_id, 'content_type' => 'article', 'content_id' => $article_id])->count();
  104. $article['collect'] = $collect > 0 ? true : false;
  105. return json(['code' => 0, 'msg' => '获取成功', 'data' => $article]);
  106. }
  107. /**
  108. * 收藏
  109. */
  110. public function collect($id)
  111. {
  112. $user_id = $this->request->token['uid'];
  113. $had = UserCollect::where(['user_id' => $user_id, 'content_type' => 'article', 'content_id' => $id])->count();
  114. if ($had > 0) return json(['code' => 1, 'msg' => '您已收藏']);
  115. UserCollect::insert(['user_id' => $user_id, 'content_type' => 'article', 'content_id' => $id]);
  116. return json(['code' => 0, 'msg' => '收藏成功']);
  117. }
  118. /**
  119. * 取消收藏
  120. */
  121. public function collectCancel($id)
  122. {
  123. $user_id = $this->request->token['uid'];
  124. UserCollect::where(['user_id' => $user_id, 'content_type' => 'article', 'content_id' => $id])->delete();
  125. return json(['code' => 0, 'msg' => '取消收藏']);
  126. }
  127. }