ArticleComment.php 7.1 KB

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