request->isGet) { return $this->error('请求方式错误'); } $mall_id = $this->mall_id; $course_id = \Yii::$app->request->get('course_id'); // 列表形式,1:普通列表,2:树形列表 $list_type = \Yii::$app->request->get('list_type', 1); if (empty($course_id) || empty($list_type)) { return $this->error('参数错误'); } if (1 == $list_type) { $list = AddonsCourseDirectorys::getList($mall_id, $course_id, 'id,name,course_id,parent_id,sort'); } elseif (2 == $list_type) { $list = AddonsCourseDirectorys::getDirTreeList($mall_id, $course_id, 'id,name,course_id,parent_id,sort'); if (!empty($list)) { foreach ($list['tree'] as $lk => $lv) { $list['tree'][$lk]['label'] = $lv['name']; unset($list['tree'][$lk]['name']); if (!empty($lv['sub_dir'])) { foreach ($lv['sub_dir'] as $sk => $sv) { $list['tree'][$lk]['children'][] = $sv; $list['tree'][$lk]['children'][$sk]['label'] = $sv['name']; unset($list['tree'][$lk]['sub_dir'], $list['tree'][$lk]['children'][$sk]['name']); } } } } } return $this->success('success', $list); } /** * @name: * @msg: 添加目录 * @param {int} course_id 课程 id * @param {int} parent_id 父级目录 id * @param {string} name 目录名称 * @return {*} */ public function actionAddDir() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $post = \Yii::$app->request->post(); if (empty($post['dir_type']) || !in_array($post['dir_type'], [1, 2])) { return $this->error('参数错误'); } if (1 == $post['dir_type']) { // 添加一级目录 $rules = [ [['course_id', 'name'], 'required'], ['course_id', 'integer'], ['name', 'string', 'max' => 50], ]; } else { // 添加子级目录 $rules = [ [['course_id', 'name', 'parent_id'], 'required'], [['course_id', 'parent_id'], 'integer'], ['name', 'string', 'max' => 50], ['level', 'safe'], ]; $post['level'] = 2; } $res = \Yii::$app->services->validate->validate($post, $rules); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); if (empty($post['parent_id'])) { $parent_dir_id = 0; $level = 1; } else { $parent_dir_id = $post['parent_id']; $level = 2; } $post['sort'] = AddonsCourseDirectorys::getLastSort($this->mall_id, $post['course_id'], $parent_dir_id ?? 0, $level); // dd($post, $post['sort'], $parent_dir_id); $res = AddonsCourseDirectorys::setData($this->mall_id, $post, 'addSubDir'); if (false === $res) { return $this->error(AddonsCourseDirectorys::getStaticError()); } return $this->success('添加成功'); } /** * @name: * @msg: 目录改名称 * @param {*} * @return {*} */ public function actionRename() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $id = \Yii::$app->request->post('id'); $name = \Yii::$app->request->post('name'); $course_id = \Yii::$app->request->post('course_id'); if (empty($id) || empty($name) || empty($course_id)) { return $this->error('参数错误'); } $dir_names = AddonsCourseDirectorys::find() ->select('name') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'course_id' => $course_id]) ->asArray() ->column(); if (in_array($name, $dir_names)) { return $this->error('目录名称已经存在'); } $params = [ 'id' => $id, 'name' => $name, ]; $res = AddonsCourseDirectorys::setData($this->mall_id, $params, 'rename'); if (false === $res) { return $this->error(AddonsCourseDirectorys::getStaticError()); } return $this->success('添加成功'); } /** * @name: * @msg: 目录改变排序,只能相邻两个互换排序,不能拖动跳过多个进行排序 * @param {int} id 目录 id * @param {int} type 操作类型,1:上移,2:下移 * @return {*} */ public function actionSortDir() { if (!\Yii::$app->request->isGet) { return $this->error('请求方式错误'); } $id = \Yii::$app->request->get('id'); $type = \Yii::$app->request->get('type', 1); if (empty($id) || (empty($type) && !in_array($type, [1, 2]))) { return $this->error('参数错误'); } $res = AddonsCourseDirectorys::switchDirSort($id, $this->mall_id, $type); if (false === $res) { return $this->error('更改排序失败:' . AddonsCourseDirectorys::getStaticError()); } else { return $this->success('更改排序成功'); } } /** * @name: * @msg: 删除目录,目录下有章节时不能删除,目录下有子级目录时不能删除 * @param {int} id 目录 id * @return {*} */ public function actionDelete() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $id = \Yii::$app->request->post('id'); if (empty($id)) { return $this->error('参数错误'); } $dirs = AddonsCourseDirectorys::findOne(['mall_id' => $this->mall_id, 'parent_id' => $id, 'status' => StatusEnum::ENABLED]); if (!empty($dirs)) { return $this->error('该目录下尚有子级目录,不能删除'); } $chapter = AddonsCourseChapter::findOne(['mall_id' => $this->mall_id, 'dir_id' => $id, 'status' => StatusEnum::ENABLED]); if (!empty($chapter)) { return $this->error('该目录下尚有课程章节,不能删除'); } $res = AddonsCourseDirectorys::findOne(['mall_id' => $this->mall_id, 'id' => $id, 'status' => StatusEnum::ENABLED])->delete(); if ($res) { return $this->success('删除成功'); } else { return $this->error('删除失败'); } } /** * @name: * @msg: 移动一个或者多个章节到一个目录里,不能跨课程移动!!!!!! * @param {integer} $course_id 课程 id * @param {integer|array} $chapter_ids 一个或者多个章节 id * @param {integer} $target_dir_id 目标目录 id,只能是一个 * @return {*} */ public function actionMoveChapters() { if (!\Yii::$app->request->isPost || !\Yii::$app->request->isAjax) { return $this->error('请求方式错误'); } $course_id = \Yii::$app->request->post('course_id'); // 章节id,一个或者多个,如果是多个放数组内 $chapter_ids = \Yii::$app->request->post('chapter_id'); // 目标目录 id,只能是移动到一个目录里 $target_dir_id = \Yii::$app->request->post('target_dir_id'); if (empty($course_id) || empty($chapter_ids) || (empty($target_dir_id) && $target_dir_id != 0)) { return $this->error('参数错误'); } $res = AddonsCourseChapter::updateAll(['dir_id' => $target_dir_id], ['mall_id' => $this->mall_id, 'course_id' => $course_id, 'id' => $chapter_ids]); if (false !== $res) { return $this->success('移动成功'); } else { return $this->error('移动失败'); } } }