NoticeSearch.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: chenkuan
  5. * Date: 2017/11/6
  6. * Time: 下午3:09
  7. */
  8. namespace backend\models\searches;
  9. use backend\models\NoticeApi;
  10. use yii\data\ArrayDataProvider;
  11. use yii\data\Pagination;
  12. use yii\helpers\Url;
  13. class NoticeSearch extends DataTable
  14. {
  15. /**
  16. * @param array $params
  17. * @return ArrayDataProvider
  18. */
  19. public function search($params)
  20. {
  21. $this->setAttributes($params);
  22. // 初始化DataTable查询参数
  23. $this->initSearchParams();
  24. $pagination = new Pagination();
  25. $pagination->setPageSize($this->pageSize);
  26. $data['pageSize'] = $pagination->getPageSize();
  27. $data['page'] = $this->page;
  28. if ($this->orderBy) {
  29. $data['orderBy'] = $this->orderBy;
  30. }
  31. if (!empty($this->search['value']) && trim($this->search['value']) !== '') {
  32. $data['search'] = trim($this->search['value']);
  33. }
  34. $data['member_id'] = \Yii::$app->getUser()->getId();
  35. $data['is_admin'] = isset($params['is_admin']) ? intval($params['is_admin']) : 0;
  36. $data['type'] = isset($params['type']) ? intval($params['type']): '';
  37. if ($this->pageSize > 1000) {
  38. if (\Yii::$app->getRequest()->isAjax) {
  39. \Yii::$app->getResponse()->redirect(Url::current());
  40. } else {
  41. $this->exportXls($data);
  42. }
  43. \Yii::$app->end();
  44. }
  45. $api = new NoticeApi();
  46. $result = $api->getNoticeList($data);
  47. $models = [];
  48. if ($result['code'] == 1) {
  49. $models = (array)$result['data']['dataList'];
  50. $pagination->totalCount = (int)$result['data']['totalCount'];
  51. }
  52. $dataProvider = new ArrayDataProvider([
  53. 'models' => $models,
  54. 'pagination' => $pagination,
  55. 'totalCount' => $pagination->totalCount,
  56. ]);
  57. return $dataProvider;
  58. }
  59. /**
  60. * @param $data
  61. */
  62. private function exportXls($data)
  63. {
  64. \Yii::$app->getResponse()->setDownloadHeaders("公告记录_" . date('Y-m-d') . '.xls')->send();
  65. if (!ob_get_level()) {
  66. ob_start();
  67. }
  68. echo '<style>.num{mso-number-format:General;} .text{mso-number-format:"\@";/*force text*/}</style>';
  69. echo '<table border="1" cellpadding="0" cellspacing="0">';
  70. echo '<tr><th>ID</th><th>类型</th><th>标题</th><th>发布时间</th></tr>';
  71. $api = new NoticeApi();
  72. $leftSize = $this->pageSize;
  73. while ($leftSize > 0) {
  74. // 重新计算页数和分页大小 start
  75. $pageSize = $leftSize > 1000 ? 1000 : $leftSize;
  76. $data['pageSize'] = $pageSize;
  77. $data['page'] = ceil($this->start / $pageSize) + 1;
  78. // 重新计算页数和分页大小 end
  79. $result = $api->getNoticeList($data);
  80. if ($result['code'] == 1 && $result['data']['dataList']) {
  81. foreach ((array)$result['data']['dataList'] as $key => $row) {
  82. $str = '<tr>';
  83. $str .= "<td class='text'>{$row['id']}</td>";
  84. if ((int)$row['type'] == 0) {
  85. $str .= "<td class='text'>会员公告</td>";
  86. } elseif ((int)$row['type'] == 1) {
  87. $str .= "<td class='text'>代理商公告</td>";
  88. } elseif ((int)$row['type'] == 2) {
  89. $str .= "<td class='text'>用户帮助中心</td>";
  90. } else {
  91. $str .= "<td class='text'>代理帮助中心</td>";
  92. }
  93. $str .= "<td class='text'>{$row['title']}</td>";
  94. $str .= "<td class='text'>".date('Y-m-d H:i:s', intval($row['in_time'] / 1000))."</td>";
  95. $str .= "</tr>";
  96. echo $str;
  97. }
  98. ob_flush();
  99. flush();
  100. } else {
  101. break;
  102. }
  103. $this->start += $pageSize;
  104. $leftSize -= $pageSize;
  105. if ($this->start >= $result['data']['totalCount']) {
  106. break;
  107. }
  108. }
  109. echo "</table>";
  110. if (ob_get_level()) {
  111. ob_end_flush();
  112. }
  113. }
  114. }