diff --git a/catch/wechat/controller/Graphic.php b/catch/wechat/controller/Graphic.php index ef90e0a..4ff7fca 100644 --- a/catch/wechat/controller/Graphic.php +++ b/catch/wechat/controller/Graphic.php @@ -8,3 +8,56 @@ // +---------------------------------------------------------------------- // | Author: JaguarJack [ njphper@gmail.com ] // +---------------------------------------------------------------------- +namespace catchAdmin\wechat\controller; + +use catchAdmin\wechat\repository\WechatGraphicRepository; +use catchAdmin\wechat\repository\WechatUsersRepository; +use catcher\base\CatchController; +use catcher\base\CatchRequest; +use catcher\CatchResponse; +use catcher\library\WeChat; +use catcher\Utils; +use think\facade\Console; +use think\Request; + +class Graphic extends CatchController +{ + protected $graphic; + + public function __construct(WechatGraphicRepository $graphic) + { + $this->graphic = $graphic; + } + + /** + * list + * + * @time 2020年06月27日 + * @param CatchRequest $request + * @return \think\response\Json + */ + public function index(CatchRequest $request) + { + return CatchResponse::paginate($this->graphic->getList($request->param())); + } + + public function read($id) + { + return CatchResponse::success($this->graphic->findBy($id)); + } + + public function save(CatchRequest $request) + { + return CatchResponse::success($this->graphic->storeBy($request->param())); + } + + public function update($id, Request $request) + { + return CatchResponse::success($this->graphic->updateBy($id, $request->param())); + } + + public function delete($id) + { + return CatchResponse::success($this->graphic->deleteBy($id)); + } +} \ No newline at end of file diff --git a/catch/wechat/database/migrations/20200627025905_wechat_graphic.php b/catch/wechat/database/migrations/20200627025905_wechat_graphic.php new file mode 100644 index 0000000..1831794 --- /dev/null +++ b/catch/wechat/database/migrations/20200627025905_wechat_graphic.php @@ -0,0 +1,43 @@ +table('wechat_graphic', ['engine' => 'InnoDB', 'collation' => 'utf8mb4_general_ci', 'comment' => '微信图文管理' ,'id' => 'id','signed' => true ,'primary_key' => ['id']]); + $table->addColumn('title', 'string', ['limit' => 255, 'comment' => '标题',]) ->addColumn('author', 'string', ['default' => 'admin', 'limit' => 20,'signed' => true,'comment' => '作者']) + ->addColumn('parent_id', 'integer', ['default' => 0, 'limit' => MysqlAdapter::INT_REGULAR,'signed' => true,'comment' => '图文第一篇']) + ->addColumn('cover', 'string', ['limit' => 255,'signed' => true,'comment' => '封面']) + ->addColumn('content', 'text', ['comment' => '内容']) + ->addColumn('creator_id', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => true,'comment' => '创建人ID',]) + ->addColumn('created_at', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => true,'comment' => '创建时间',]) + ->addColumn('updated_at', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => true,'comment' => '更新时间',]) + ->addColumn('deleted_at', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => true,'comment' => '软删除',]) + ->create(); + } +} diff --git a/catch/wechat/database/seeds/permissionSeed.php b/catch/wechat/database/seeds/permissionSeed.php new file mode 100644 index 0000000..ea9dc9f --- /dev/null +++ b/catch/wechat/database/seeds/permissionSeed.php @@ -0,0 +1,146 @@ +getPermissions(), 'permissions', 'parent_id'); + } + + protected function getPermissions() + { + return array ( + 0 => + array ( + 'id' => 66, + 'permission_name' => '微信管理', + 'parent_id' => 0, + 'level' => '', + 'route' => '/wechat', + 'icon' => 'wechat', + 'module' => 'wechat', + 'creator_id' => 1, + 'method' => 'get', + 'permission_mark' => 'wechat', + 'component' => 'routeView', + 'redirect' => '', + 'hide_children_in_menu' => 2, + 'keepalive' => 1, + 'type' => 1, + 'status' => 1, + 'sort' => 1, + 'created_at' => 1591603025, + 'updated_at' => 1593044101, + 'deleted_at' => 0, + 'children' => + array ( + 0 => + array ( + 'id' => 67, + 'permission_name' => '微信菜单', + 'parent_id' => 66, + 'level' => '66', + 'route' => '/wechat/menus', + 'icon' => 'table', + 'module' => 'wechat', + 'creator_id' => 1, + 'method' => 'get', + 'permission_mark' => 'menus', + 'component' => 'menus', + 'redirect' => '', + 'hide_children_in_menu' => 2, + 'keepalive' => 1, + 'type' => 1, + 'status' => 1, + 'sort' => 1, + 'created_at' => 1591603088, + 'updated_at' => 1591603427, + 'deleted_at' => 0, + ), + 1 => + array ( + 'id' => 75, + 'permission_name' => '用户管理', + 'parent_id' => 66, + 'level' => '66', + 'route' => '/wechat/users', + 'icon' => 'team', + 'module' => 'wechat', + 'creator_id' => 1, + 'method' => 'get', + 'permission_mark' => 'users', + 'component' => 'pageView', + 'redirect' => '', + 'hide_children_in_menu' => 2, + 'keepalive' => 1, + 'type' => 1, + 'status' => 1, + 'sort' => 1, + 'created_at' => 1592624761, + 'updated_at' => 1592631716, + 'deleted_at' => 0, + 'children' => + array ( + 0 => + array ( + 'id' => 76, + 'permission_name' => '微信用户', + 'parent_id' => 75, + 'level' => '66-75', + 'route' => '/wechat/users', + 'icon' => 'user', + 'module' => 'wechat', + 'creator_id' => 1, + 'method' => 'get', + 'permission_mark' => 'users', + 'component' => 'wechatUsers', + 'redirect' => '', + 'hide_children_in_menu' => 2, + 'keepalive' => 1, + 'type' => 1, + 'status' => 1, + 'sort' => 1, + 'created_at' => 1592624799, + 'updated_at' => 1592624799, + 'deleted_at' => 0, + ), + 1 => + array ( + 'id' => 77, + 'permission_name' => '微信标签', + 'parent_id' => 75, + 'level' => '66-75', + 'route' => '/wechat/tags', + 'icon' => 'tags', + 'module' => 'wechat', + 'creator_id' => 1, + 'method' => 'get', + 'permission_mark' => 'wechatTags', + 'component' => 'wechatTags', + 'redirect' => '', + 'hide_children_in_menu' => 2, + 'keepalive' => 1, + 'type' => 1, + 'status' => 1, + 'sort' => 1, + 'created_at' => 1592722634, + 'updated_at' => 1592812960, + 'deleted_at' => 0, + ), + ), + ), + ), + ), +); + } +} diff --git a/catch/wechat/model/WechatGraphic.php b/catch/wechat/model/WechatGraphic.php new file mode 100644 index 0000000..ce7f78c --- /dev/null +++ b/catch/wechat/model/WechatGraphic.php @@ -0,0 +1,35 @@ +wechatGraphic = $graphic; + } + + protected function model() + { + return $this->wechatGraphic; + } + + /** + * 获取 + * + * @time 2020年06月27日 + * @param array $params + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @return mixed + */ + public function getList(array $params) + { + // 父级 + $list = $this->wechatGraphic + ->where('parent_id', 0) + ->paginate(); + // 子级 + $subList = $this->wechatGraphic + ->whereIn('parent_id', $list->column('id')) + ->select(); + + foreach ($list as &$item) { + $item->children = $subList->where('parent_id', $item->id); + } + + return $list; + } + + /** + * 更新 + * + * @time 2020年06月27日 + * @param array $data + * @return mixed + */ + public function storeBy(array $data) + { + $creatorId = $data['creator_id']; + $articles = $data['articles']; + + $first = array_shift($articles); + $first['creator_id'] = $creatorId; + $parentId = parent::storeBy($first); + + foreach ($articles as &$article) { + $article['parent_id'] = $parentId; + $article['creator_id'] = $creatorId; + $article['created_at'] = $article['updated_at'] = time(); + } + + return $this->wechatGraphic->insertAll($articles); + } + + /** + * 查找 + * + * @time 2020年06月28日 + * @param int $id + * @param array|string[] $column + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @return array + */ + public function findBy(int $id, array $column = ['*']) + { + $field = ['id', 'title', 'author', 'cover', 'content']; + + $article = [parent::findBy($id, $field)->toArray()]; + + return array_merge($article, $this->wechatGraphic->field($field)->where('parent_id', $id)->select()->toArray()); + } + + /** + * 更新 + * + * @time 2020年06月28日 + * @param int $id + * @param array $data + * @return bool + */ + public function updateBy(int $id, array $data) + { + $articles = $data['articles']; + $this->wechatGraphic->startTrans(); + $updateStatus = true; + foreach ($articles as $article) { + $id = $article['id']; + unset($article['id']); + if ($this->wechatGraphic->where('id', $id) + ->update($article) === false) { + $updateStatus = false; + break; + } + } + + if (!$updateStatus) { + $this->wechatGraphic->rollback(); + throw new FailedException('更新失败'); + } + + $this->wechatGraphic->commit(); + return true; + } + + + /** + * 删除 + * + * @time 2020年06月28日 + * @param int $id + * @return bool + */ + public function deleteBy(int $id) + { + if (parent::deleteBy($id)) { + return $this->wechatGraphic + ->where('parent_id', $id) + ->delete(); + } + throw new FailedException('删除失败'); + } +} \ No newline at end of file diff --git a/catch/wechat/route.php b/catch/wechat/route.php index 00b252f..16c881a 100644 --- a/catch/wechat/route.php +++ b/catch/wechat/route.php @@ -28,6 +28,10 @@ $router->group('wechat', function () use ($router){ $router->resource('', '\catchAdmin\wechat\controller\Menus'); $router->post('sync', '\catchAdmin\wechat\controller\Menus@sync'); }); + // 图文管理 + $router->group('official/graphic', function () use ($router){ + $router->resource('', '\catchAdmin\wechat\controller\Graphic'); + }); })->middleware('auth'); // 消息