新增微信图文

This commit is contained in:
JaguarJack 2020-06-28 08:33:49 +08:00
parent 7152661210
commit 1c9e98ff2a
6 changed files with 424 additions and 0 deletions

View File

@ -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));
}
}

View File

@ -0,0 +1,43 @@
<?php
use think\migration\Migrator;
use think\migration\db\Column;
use Phinx\Db\Adapter\MysqlAdapter;
class WechatGraphic extends Migrator
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
*
* The following commands can be used in this method and Phinx will
* automatically reverse them when rolling back:
*
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* addForeignKey
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change()
{
$table = $this->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();
}
}

View File

@ -0,0 +1,146 @@
<?php
use think\migration\Seeder;
class PermissionSeed extends Seeder
{
/**
* Run Method.
*
* Write your database seeder using this method.
*
* More information on writing seeders is available here:
* http://docs.phinx.org/en/latest/seeding.html
*/
public function run()
{
\catcher\Utils::importTreeData($this->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,
),
),
),
),
),
);
}
}

View File

@ -0,0 +1,35 @@
<?php
// +----------------------------------------------------------------------
// | CatchAdmin [Just Like ]
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2020 http://catchadmin.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://github.com/yanwenwu/catch-admin/blob/master/LICENSE.txt )
// +----------------------------------------------------------------------
// | Author: JaguarJack [ njphper@gmail.com ]
// +----------------------------------------------------------------------
namespace catchAdmin\wechat\model;
use catcher\base\CatchModel as Model;
use catcher\traits\db\BaseOptionsTrait;
class WechatGraphic extends Model
{
protected $name = 'wechat_graphic';
protected $field = [
'id', //
'title', // 标题
'author', // 作者
'parent_id', // 图文第一篇
'cover', // 封面
'content', // 内容
'creator_id', // 创建人ID
'created_at', // 创建时间
'updated_at', // 更新时间
'deleted_at', // 软删除
];
}

View File

@ -8,3 +8,146 @@
// +----------------------------------------------------------------------
// | Author: JaguarJack [ njphper@gmail.com ]
// +----------------------------------------------------------------------
namespace catchAdmin\wechat\repository;
use catcher\base\CatchRepository;
use catchAdmin\wechat\model\WechatGraphic;
use catcher\exceptions\FailedException;
class WechatGraphicRepository extends CatchRepository
{
protected $wechatGraphic;
public function __construct(WechatGraphic $graphic)
{
$this->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('删除失败');
}
}

View File

@ -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');
// 消息