智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

239 lines
6.7 KiB

<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\sys;
use app\dict\poster\ComponentDict;
use app\model\sys\Poster;
use app\service\core\poster\CorePosterService;
use core\base\BaseAdminService;
use core\exception\AdminException;
use Exception;
use think\db\exception\DbException;
use think\facade\Db;
/**
* 自定义海报服务类
* Class AgreementService
* @package app\service\admin\sys
*/
class PosterService extends BaseAdminService
{
public function __construct()
{
parent::__construct();
$this->model = new Poster();
}
/**
* 获取自定义海报分页列表
* @param array $where
* @return array
* @throws DbException
*/
public function getPage(array $where = [])
{
$field = 'id, name, type, channel, value, status,is_default, create_time, update_time, addon';
$order = "update_time desc";
$search_model = $this->model->where([ [ 'id', '>', 0 ] ])->withSearch([ 'name', 'type' ], $where)->field($field)->order($order)->append([ 'type_name' ]);
return $this->pageQuery($search_model);
}
/**
* 获取自定义海报列表
* @param array $where
* @param string $field
* @return mixed
*/
public function getList(array $where = [], $field = 'id, name, type, channel, value, status,is_default, create_time, update_time, addon')
{
$order = "update_time desc";
return $this->model->where([ [ 'id', ">", 0 ] ])->withSearch([ "name", 'type' ], $where)->field($field)->order($order)->select()->toArray();
}
/**
* 获取自定义海报信息
* @param int $id
* @param string $field
* @return mixed
*/
public function getInfo(int $id, $field = 'id, name, type, channel, value, status,is_default, create_time, update_time, addon')
{
return $this->model->field($field)->where([ [ 'id', '=', $id ] ])->findOrEmpty()->toArray();
}
/**
* 添加自定义海报
* @param array $data
* @return mixed
*/
public function add(array $data)
{
$res = $this->model->create($data);
return $res->id;
}
/**
* 编辑自定义海报
* @param int $id
* @param array $data
* @return bool
*/
public function edit(int $id, array $data)
{
$this->model->where([ [ 'id', '=', $id ] ])->update($data);
return true;
}
/**
* 删除自定义海报
* @param int $id
* @return bool
*/
public function del(int $id)
{
return $this->model->where([ [ 'id', '=', $id ] ])->delete();
}
/**
* 修改自定义海报启用状态
* @param $data
* @return mixed
*/
public function modifyStatus($data)
{
return $this->model->where([
[ 'id', '=', $data[ 'id' ] ],
])->update([ 'status' => $data[ 'status' ] ]);
}
/**
* 将自定义海报修改为默认海报
* @param $data
* @return mixed
*/
public function modifyDefault($data)
{
try {
$info = $this->getInfo($data[ 'id' ]);
if (empty($info)) {
return false;
}
Db::startTrans();
$this->model->where([ [ 'type', '=', $info[ 'type' ] ] ])->update([ 'is_default' => 0 ]);
$this->model->where([ [ 'id', '=', $data[ 'id' ] ] ])->update([ 'is_default' => 1, 'update_time' => time() ]);
Db::commit();
return true;
} catch (Exception $e) {
Db::rollback();
throw new AdminException($e->getMessage());
}
}
/**
* 查询海报类型
* @param string $type
* @return array
*/
public function getType($type = '')
{
return ( new CorePosterService() )->getType($type);
}
/**
* 查询海报模板
* @param string $addon
* @param string $type
* @return array|null
*/
public function getTemplateList($addon = '', $type = '')
{
return ( new CorePosterService() )->getTemplateList($addon, $type);
}
/**
* 获取组件列表
* @param array $params 查询指定条件的海报组件
* @return array
*/
public function getComponentList($params = [])
{
$data = ComponentDict::getComponent();
foreach ($data as $k => $v) {
// 该分组下若没有组件则清空
if (empty($v[ 'list' ])) {
unset($data[ $k ]);
continue;
}
// 查询组件支持的页面
if (!empty($v[ 'support' ])) {
if ($params[ 'type' ] != $k && !empty($params[ 'type' ]) && !empty($v[ 'support' ]) && !in_array($params[ 'type' ], $v[ 'support' ])) {
unset($data[ $k ]);
continue;
}
}
$sort_arr = [];
foreach ($v[ 'list' ] as $ck => $cv) {
$sort_arr[] = $cv[ 'sort' ];
unset($data[ $k ][ 'list' ][ $ck ][ 'sort' ]);
}
array_multisort($sort_arr, SORT_ASC, $data[ $k ][ 'list' ]); //排序,根据 sort 排序
}
return $data;
}
/**
* 页面加载初始化
* @param array $params
* @return array
* @throws DbException
*/
public function getInit(array $params = [])
{
$data = [
'id' => 0,
'name' => $params[ 'name' ],
'type' => $params[ 'type' ],
'channel' => '',
'value' => '',
'status' => 1,
'is_default' => 0,
'addon' => ''
];
if (!empty($params[ 'id' ])) {
$field = 'id, name, type, channel, value, status,is_default, addon';
$info = $this->getInfo($params[ 'id' ], $field);
if (!empty($info)) {
$data = $info;
}
}
$data[ 'poster_type' ] = ( new CorePosterService() )->getType($data[ 'type' ]);
if (empty($data[ 'addon' ])) {
$data[ 'addon' ] = $data[ 'poster_type' ][ 'addon' ];
}
$data[ 'component' ] = $this->getComponentList([ 'type' => $data[ 'type' ] ]);
return $data;
}
}