FilesController.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?php
  2. namespace common\widgets\webuploader;
  3. use common\helpers\ArrayHelper;
  4. use common\models\common\AttachmentCate;
  5. use Yii;
  6. use yii\data\Pagination;
  7. use yii\web\Controller;
  8. use yii\filters\AccessControl;
  9. use common\enums\StatusEnum;
  10. use common\traits\BaseAction;
  11. use common\traits\MerchantCurd;
  12. use common\models\common\Attachment;
  13. use common\enums\AttachmentUploadTypeEnum;
  14. use common\helpers\ResultHelper;
  15. use common\helpers\UploadHelper;
  16. use common\traits\FileAction;
  17. /**
  18. * Class FilesController
  19. * @package common\widgets\webuploader
  20. */
  21. class FilesController extends Controller
  22. {
  23. use BaseAction, MerchantCurd, FileAction;
  24. /**
  25. * @var bool
  26. */
  27. public $enableCsrfValidation = false;
  28. /**
  29. * @var string
  30. */
  31. public $layout = "@backend/views/layouts/main";
  32. /**
  33. * @var Attachment
  34. */
  35. public $modelClass = Attachment::class;
  36. /**
  37. * 行为控制
  38. *
  39. * @return array
  40. */
  41. public function behaviors()
  42. {
  43. if (YII_DEBUG) {
  44. return [];
  45. }
  46. return [
  47. 'access' => [
  48. 'class' => AccessControl::class,
  49. 'rules' => [
  50. [
  51. 'allow' => true,
  52. 'roles' => ['@'],// 登录
  53. ],
  54. ],
  55. ],
  56. ];
  57. }
  58. /**
  59. * 资源选择器
  60. *
  61. * @param bool $json
  62. * @return array|string
  63. */
  64. public function actionSelector()
  65. {
  66. $this->layout = '@backend/views/layouts/blank';
  67. $pageSize = Yii::$app->request->get('per-page', 10);
  68. $uploadType = Yii::$app->request->get('upload_type', AttachmentUploadTypeEnum::IMAGES);
  69. $year = Yii::$app->request->get('year', '');
  70. $month = Yii::$app->request->get('month', '');
  71. $keyword = Yii::$app->request->get('keyword', '');
  72. $drive = Yii::$app->request->get('drive', '');
  73. $cateId = Yii::$app->request->get('cate_id', '');
  74. $data = Attachment::find()
  75. ->where(['status' => StatusEnum::ENABLED, 'upload_type' => $uploadType])
  76. ->andFilterWhere(['merchant_id' => $this->getMerchantId()])
  77. ->andFilterWhere(['store_id' => $this->getStoreId()])
  78. ->andFilterWhere(['drive' => $drive])
  79. ->andFilterWhere(['year' => $year])
  80. ->andFilterWhere(['month' => $month])
  81. ->andFilterWhere(['cate_id' => $cateId])
  82. ->andFilterWhere(['like', 'name', $keyword]);
  83. $pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $pageSize, 'validatePage' => false]);
  84. $models = $data->offset($pages->offset)
  85. ->orderBy('updated_at desc')
  86. ->limit($pages->limit)
  87. ->asArray()
  88. ->all();
  89. // 数量
  90. $groupByCateId = Attachment::find()
  91. ->select(['count(id) as count', 'cate_id'])
  92. ->where(['status' => StatusEnum::ENABLED, 'upload_type' => $uploadType])
  93. ->andFilterWhere(['merchant_id' => $this->getMerchantId()])
  94. ->andFilterWhere(['store_id' => $this->getStoreId()])
  95. ->groupBy('cate_id')
  96. ->asArray()
  97. ->all();
  98. $cateCountMap = ArrayHelper::map($groupByCateId, 'cate_id', 'count');
  99. // 如果是以文件形式上传的图片手动修改为图片类型显示
  100. foreach ($models as &$model) {
  101. $model['base_url'] = $model['url'];
  102. $model['upload_type'] = UploadHelper::formattingFileType($model['specific_type'], $model['extension'], $model['upload_type']);
  103. }
  104. // 选择上传类型
  105. if (empty($uploadDrive = Yii::$app->request->get('upload_drive'))) {
  106. $uploadDrive = Yii::$app->params['uploadConfig'][$uploadType]['drive'];
  107. }
  108. // 判断是否直接返回json格式(百度编辑器)
  109. if (Yii::$app->request->get('json') == true) {
  110. return ResultHelper::json(200, '获取成功', $models);
  111. }
  112. // 装修
  113. if (Yii::$app->request->get('decorate') == true) {
  114. return ResultHelper::json(200, '获取成功', [
  115. 'list' => $models,
  116. 'pages' => [
  117. 'totalCount' => $pages->totalCount,
  118. 'pageSize' => $pages->pageSize,
  119. ]
  120. ]);
  121. }
  122. return $this->render('@common/widgets/webuploader/views/selector', [
  123. 'models' => $models,
  124. 'pages' => $pages,
  125. 'uploadType' => $uploadType,
  126. 'uploadDrive' => $uploadDrive,
  127. 'multiple' => Yii::$app->request->get('multiple', true),
  128. 'boxId' => Yii::$app->request->get('box_id'),
  129. 'cates' => Yii::$app->services->attachmentCate->findAll($uploadType),
  130. 'cateId' => $cateId,
  131. 'cateCountMap' => $cateCountMap,
  132. 'year' => $year,
  133. 'month' => $month,
  134. 'keyword' => $keyword,
  135. 'drive' => $drive,
  136. ]);
  137. }
  138. /**
  139. * @return mixed|string|\yii\web\Response
  140. * @throws \yii\base\ExitException
  141. */
  142. public function actionAjaxEdit()
  143. {
  144. $id = Yii::$app->request->get('id');
  145. $type = Yii::$app->request->get('type');
  146. $model = Yii::$app->services->attachment->findById($id);
  147. // ajax 校验
  148. $this->activeFormValidate($model);
  149. if ($model->load(Yii::$app->request->post())) {
  150. return $model->save()
  151. ? $this->message('操作成功,请切换到第一页查看', $this->redirect(Yii::$app->request->referrer))
  152. : $this->message($this->getError($model), $this->redirect(Yii::$app->request->referrer), 'error');
  153. }
  154. return $this->renderAjax('@common/widgets/webuploader/views/ajax-edit', [
  155. 'model' => $model,
  156. 'cateMap' => Yii::$app->services->attachmentCate->getMap($type),
  157. ]);
  158. }
  159. /**
  160. * @return array|mixed|string|\yii\web\Response
  161. * @throws \yii\base\ExitException
  162. */
  163. public function actionCateAjaxEdit()
  164. {
  165. $type = Yii::$app->request->get('type');
  166. $model = new AttachmentCate();
  167. $model->loadDefaultValues();
  168. $model->type = $type;
  169. // ajax 校验
  170. $this->activeFormValidate($model);
  171. if ($model->load(Yii::$app->request->post())) {
  172. return $model->save()
  173. ? $this->message('操作成功', $this->redirect(Yii::$app->request->referrer))
  174. : $this->message($this->getError($model), $this->redirect(Yii::$app->request->referrer), 'error');
  175. }
  176. return $this->renderAjax('@common/widgets/webuploader/views/cate-ajax-edit', [
  177. 'model' => $model,
  178. 'type' => $type,
  179. ]);
  180. }
  181. }
粤ICP备19079148号