ArticleComment.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php namespace App\Http\Controllers\Admin;
  2. // use App\Http\Requests\Admin\Article as Request;
  3. // use App\Models\Article as Model;
  4. use App\Models\ArticleComment as ArticleCommentModel;
  5. use PhpOffice\PhpSpreadsheet\Cell\DataType;
  6. use PhpOffice\PhpSpreadsheet\IOFactory;
  7. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  8. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  9. use PhpOffice\PhpSpreadsheet\Style\Fill;
  10. // use App\Models\Custom as CustomModel;
  11. // use Illuminate\Support\Facades\DB;
  12. // use App\Models\City;
  13. /**
  14. * 分享设置
  15. *
  16. * @author huanglei
  17. *
  18. */
  19. class ArticleComment extends Auth{
  20. const EVENT_TYPE = [
  21. '1' => '阅读',
  22. '2' => '点赞',
  23. '3' => '分享',
  24. '4' => '推荐',
  25. '5' => '取消推荐',
  26. '6' => '取消点赞'
  27. ];
  28. protected function _initialize(){
  29. parent::_initialize();
  30. $this->assign('breadcrumb1','分享设置');
  31. $this->assign('breadcrumb2','内容分享>>数据');
  32. }
  33. /**
  34. * 数据列表
  35. *
  36. * */
  37. public function index(ArticleCommentModel $ArticleCommentModel){
  38. // 接受参数
  39. $tid = request('tid','');
  40. $c_type = request('c_type');
  41. $title = request('title');
  42. $startTime = request('start_time','');
  43. $endTime = request('end_time','');
  44. // 编码转ID
  45. // $id = $code ? $ArticleCommentModel->codeToId($code) : 0;
  46. // 查询条件
  47. $map = [];
  48. // 编码ID
  49. if( $tid ) $map[] = ['article_comment.article_id','=',$tid];
  50. if( $title ) $map[] = ['article.title','LIKE','%'.$title.'%'];
  51. if( $startTime ) $map[] = ['article_comment.start_time','>=',strtotime($startTime)];
  52. if( $endTime ) $map[] = ['article_comment.end_time','<=',strtotime($endTime)];
  53. if( !is_null($c_type) ) $map[] = ['article_comment.event_type','=',$c_type];
  54. // 查询数据
  55. $list = $ArticleCommentModel->query()
  56. ->join('custom','article_comment.uid','=','custom.uid')
  57. ->leftJoin('article','article_comment.article_id','=','article.id');
  58. $list = $list->where($map)
  59. ->orderByDesc('id')
  60. ->select([
  61. 'article_comment.*','custom.username as custom_name',
  62. 'article.title as title'
  63. ])
  64. ->paginate(request('limit',config('page_num',10)))->appends(request()->all());
  65. // 循环处理数据
  66. foreach ($list as $key => $value) {
  67. // id转编号
  68. $value['article_code'] = $ArticleCommentModel->idToCode($value['article_id']);
  69. // 事件类型:1阅读;2点赞;3分享;4推荐;5取消点赞;6取消推荐
  70. $value['event'] = self::EVENT_TYPE[$value['event_type']];
  71. // 重组
  72. $list[$key] = $value;
  73. }
  74. // 分配数据
  75. $this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
  76. $this->assign('list', $list);
  77. $this->assign('tid', $tid);
  78. // 加载模板
  79. return $this->fetch();
  80. }
  81. /**
  82. * 导出表格导入
  83. *
  84. * */
  85. public function down_excel(ArticleCommentModel $ArticleCommentModel){
  86. // 接受参数
  87. $tid = request('tid','');
  88. $c_type = request('c_type');
  89. $title = request('title');
  90. $startTime = request('start_time','');
  91. $endTime = request('end_time','');
  92. $map = [];
  93. // 编码ID
  94. if( $tid ) $map[] = ['article_comment.article_id','=',$tid];
  95. if( $title ) $map[] = ['article.title','LIKE','%'.$title.'%'];
  96. if( $startTime ) $map[] = ['article_comment.start_time','>=',strtotime($startTime)];
  97. if( $endTime ) $map[] = ['article_comment.end_time','<=',strtotime($endTime)];
  98. if( !is_null($c_type) ) $map[] = ['article_comment.event_type','=',$c_type];
  99. // 查询数据
  100. $list = $ArticleCommentModel->query()
  101. ->join('custom','article_comment.uid','=','custom.uid')
  102. ->leftJoin('article','article_comment.article_id','=','article.id');
  103. $list = $list->where($map)
  104. ->orderByDesc('id')
  105. ->select([
  106. 'article_comment.*',
  107. 'custom.username as custom_name',
  108. 'article.title as title',
  109. 'article.content as content',
  110. ])
  111. ->paginate(request('limit',config('page_num',10)))->appends(request()->all());
  112. // 返回结果
  113. $data = [];
  114. // 循环处理数据
  115. foreach ($list as $value) {
  116. // id转编号
  117. $value['article_id'] = $ArticleCommentModel->idToCode($value['article_id']);
  118. $value['content'] = $value['content']? $value['content'] : '';
  119. $value['comment'] = $value['comment']? $value['comment'] : '';
  120. $value['event'] = $value['event_type']? self::EVENT_TYPE[$value['event_type']]: '';
  121. $value['insert_time'] = $value['insert_time']? date('Y-m-d H:i:s',$value['insert_time']) : '';
  122. $value['update_time'] = $value['update_time']? date('Y-m-d H:i:s',$value['update_time']) : '';
  123. // 重组
  124. $data[] = $value;
  125. }
  126. try {
  127. // 去下载
  128. $this->toDown($data);
  129. } catch (\Throwable $th) {
  130. echo $th->getMessage();
  131. }
  132. }
  133. /**
  134. * 去下载
  135. */
  136. private function toDown($data){
  137. // 创建新的电子表格对象
  138. $spreadsheet = new Spreadsheet();
  139. // 设置合并单元格的行和列,例如合并A1到B2的单元格
  140. $sheet = $this->setStyle($spreadsheet);
  141. // 从第二行写入
  142. $row = 2;
  143. // 循环写入
  144. foreach ($data as $value) {
  145. // 单元格内容写入
  146. $sheet->setCellValue('A'.$row, $value['article_id']);
  147. $sheet->setCellValue('B'.$row, $value['comment']);
  148. $sheet->setCellValue('C'.$row, $value['custom_name']);
  149. $sheet->setCellValueExplicit('D'.$row, $value['event'],DataType::TYPE_STRING);
  150. $sheet->setCellValueExplicit('E'.$row, $value['content'],DataType::TYPE_STRING);
  151. // $sheet->setCellValueExplicit('C'.$row, $value['custom_name'],DataType::TYPE_STRING);
  152. $sheet->setCellValue('F'.$row, $value['insert_time']);
  153. $sheet->setCellValue('G'.$row, $value['update_time']);
  154. // 函数自增
  155. $row++;
  156. }
  157. // 创建内容
  158. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  159. header('Pragma: public');
  160. header('Content-type:application/vnd.ms-excel');
  161. header('Content-Disposition: inline;filename=内容分享数据.xlsx');
  162. // 输出数据流
  163. return $writer->save('php://output');
  164. }
  165. /**
  166. * 设置表格样式
  167. *
  168. */
  169. private function setStyle(Spreadsheet $spreadsheet){
  170. // 选择当前活动的工作表
  171. $sheet = $spreadsheet->getActiveSheet();
  172. // 宽
  173. $sheet->getColumnDimension('A')->setWidth(20);
  174. $sheet->getColumnDimension('B')->setWidth(30);
  175. $sheet->getColumnDimension('C')->setWidth(15);
  176. $sheet->getColumnDimension('D')->setWidth(15);
  177. $sheet->getColumnDimension('E')->setWidth(50);
  178. $sheet->getColumnDimension('F')->setWidth(25);
  179. $sheet->getColumnDimension('G')->setWidth(25);
  180. // 默认高度
  181. $sheet->getDefaultRowDimension()->setRowHeight(18);
  182. // 加粗第一行
  183. $sheet->getStyle('A:U')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
  184. $sheet->getStyle('A1:U1')->getFont()->setBold(true);
  185. $sheet->getStyle('A1:U1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FF00FF00'); // ARGB颜色代码,例如绿色
  186. // 设置表格标题
  187. $sheet
  188. ->setCellValue('A1', '文章ID')
  189. ->setCellValue('B1', '评论内容')
  190. ->setCellValue('C1', '用户名称')
  191. ->setCellValue('D1', '事件类型')
  192. ->setCellValue('E1', '文章内容')
  193. ->setCellValue('F1', '文章发布时间')
  194. ->setCellValue('G1', '操作时间');
  195. // 返回结果
  196. return $sheet;
  197. }
  198. }