update niucloud

This commit is contained in:
全栈小学生 2023-07-01 16:20:54 +08:00
parent 509de0cd05
commit e0b9bb5804
104 changed files with 2053 additions and 479 deletions

View File

@ -1,9 +1,11 @@
<?php <?php
return [ return [
'recharge_success' => [ 'recharge_success' => [
'temp_key' => '111', 'tid' => '111',
'content' => [ 'content' => [
['消息内容', '{name}', 'keyword1'], ['消息内容', '{name}', 'keyword1'],
], ],
'kid_list' => [1, 3, 4, 2],
'scene_desc' => ''
] ]
]; ];

View File

@ -0,0 +1,56 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\adminapi\controller\applet;
use app\model\applet\AppletSiteVersion;
use app\service\admin\applet\AppletVersionService;
use app\service\admin\applet\AppletVersionSiteService;
use core\base\BaseAdminController;
use think\Response;
/**
* 站点小程序版本升级下载控制器
*/
class SiteVersion extends BaseAdminController
{
/**
* 列表
* @return Response
*/
public function lists()
{
$data = $this->request->params([
]);
return success(( new AppletVersionSiteService())->getPage($data));
}
/**
* 详情
* @param int $id
*/
public function info(int $id)
{
return success(( new AppletVersionSiteService() )->getInfo($id));
}
/**
* 查询最后一个下载或升级的版本
* @param string $type
* @return Response
*/
public function getLastVersion(string $type){
return success(( new AppletVersionSiteService() )->getLastVersion($type));
}
}

View File

@ -0,0 +1,110 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\adminapi\controller\applet;
use app\service\admin\applet\AppletVersionService;
use core\base\BaseAdminController;
use think\Response;
/**
* 小程序版本管理控制器
*/
class Version extends BaseAdminController
{
/**
* 列表
* @return Response
*/
public function lists()
{
$data = $this->request->params([
]);
return success(( new AppletVersionService() )->getPage($data));
}
/**
* 详情
* @param int $id
*/
public function info(int $id)
{
return success(( new AppletVersionService() )->getInfo($id));
}
/**
* 添加
* @return Response
*/
public function add()
{
$data = $this->request->params([
[ 'type', '' ],
[ 'desc', '' ],
[ 'status', '' ],
[ 'path', '' ],
[ 'version', '' ],
]);
$id = ( new AppletVersionService() )->add($data);
return success('ADD_SUCCESS');
}
/**
* 编辑
* @param int $id
* @return Response
*/
public function edit(int $id)
{
$data = $this->request->params([
[ 'desc', '' ],
[ 'status', '' ],
[ 'path', '' ],
[ 'version', '' ],
]);
( new AppletVersionService() )->edit($id, $data);
return success('EDIT_SUCCESS');
}
/**
* 删除
* @param int $id
*/
public function del(int $id)
{
( new AppletVersionService() )->del($id);
return success('DELETE_SUCCESS');
}
/**
* 设置状态
* @param int $id
* @param $type
* @return Response
*/
public function setStatus(int $id, $status){
( new AppletVersionService() )->setStatus($id, $status);
return success('EDIT_SUCCESS');
}
/**
* 小程序包上传
* @return Response
* @throws \Exception
*/
public function upload(){
$data = $this->request->params([
['file', 'file'],
], true);
return success(data:( new AppletVersionService() )->upload($data['file']));
}
}

View File

@ -0,0 +1,33 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\adminapi\controller\applet;
use app\service\admin\applet\AppletDownloadService;
use core\base\BaseAdminController;
/**
* 小程序版本下载控制器
*/
class VersionDownload extends BaseAdminController
{
/**
* 下载
* @param $id
* @return mixed
*/
public function download($id){
return (new AppletDownloadService())->download($id);
}
}

View File

@ -31,6 +31,7 @@ class Diy extends BaseAdminController
$data = $this->request->params([ $data = $this->request->params([
[ "title", "" ], [ "title", "" ],
[ "type", "" ], [ "type", "" ],
[ 'mode', '' ]
]); ]);
return success(( new DiyService() )->getPage($data)); return success(( new DiyService() )->getPage($data));
} }
@ -70,9 +71,10 @@ class Diy extends BaseAdminController
[ "name", "" ], [ "name", "" ],
[ "type", "" ], [ "type", "" ],
[ 'template', '' ], [ 'template', '' ],
[ 'mode', 'diy' ], [ 'mode', 'diy' ], // 页面展示模式diy自定义fixed固定
[ "value", "" ], [ "value", "" ],
[ 'is_default', 0 ] [ 'is_default', 0 ],
[ 'is_change', '' ]
]); ]);
$this->validate($data, 'app\validate\diy\Diy.add'); $this->validate($data, 'app\validate\diy\Diy.add');

View File

@ -25,13 +25,13 @@ class Attachment extends BaseAdminController
public function lists() public function lists()
{ {
$data = $this->request->params([ $data = $this->request->params([
['att_type', ''], [ 'att_type', '' ],
['cate_id', 0], [ 'cate_id', 0 ],
['real_name', ''], [ 'real_name', '' ],
['page', 0], [ 'page', 0 ],
['limit', 0], [ 'limit', 0 ],
]); ]);
return success((new AttachmentService())->getPage($data)); return success(( new AttachmentService() )->getPage($data));
} }
/** /**
@ -48,11 +48,12 @@ class Attachment extends BaseAdminController
* 批量删除 * 批量删除
* @return Response * @return Response
*/ */
public function batchDel(){ public function batchDel()
{
$data = $this->request->params([ $data = $this->request->params([
['att_ids', []], [ 'att_ids', [] ],
]); ]);
(new AttachmentService())->delAll($data['att_ids']); ( new AttachmentService() )->delAll($data[ 'att_ids' ]);
return success('DELETE_SUCCESS'); return success('DELETE_SUCCESS');
} }
@ -63,11 +64,11 @@ class Attachment extends BaseAdminController
public function addCategory() public function addCategory()
{ {
$data = $this->request->params([ $data = $this->request->params([
['type', FileDict::IMAGE], [ 'type', FileDict::IMAGE ],
['name', ''] [ 'name', '' ]
]); ]);
$this->validate($data, 'app\validate\sys\AttachmentCategory.add'); $this->validate($data, 'app\validate\sys\AttachmentCategory.add');
(new AttachmentService())->addCategory($data); ( new AttachmentService() )->addCategory($data);
return success('ADD_SUCCESS'); return success('ADD_SUCCESS');
} }
@ -77,10 +78,10 @@ class Attachment extends BaseAdminController
public function categoryLists() public function categoryLists()
{ {
$data = $this->request->params([ $data = $this->request->params([
['type', ''], [ 'type', '' ],
['name', ''], [ 'name', '' ],
]); ]);
return success((new AttachmentService())->getCategoryList($data)); return success(( new AttachmentService() )->getCategoryList($data));
} }
/** /**
@ -90,10 +91,10 @@ class Attachment extends BaseAdminController
public function editCategory($id) public function editCategory($id)
{ {
$data = $this->request->params([ $data = $this->request->params([
['name', ''] [ 'name', '' ]
]); ]);
$this->validate($data, 'app\validate\sys\AttachmentCategory.edit'); $this->validate($data, 'app\validate\sys\AttachmentCategory.edit');
(new AttachmentService())->editCategory($id, $data); ( new AttachmentService() )->editCategory($id, $data);
return success('EDIT_SUCCESS'); return success('EDIT_SUCCESS');
} }
@ -104,7 +105,7 @@ class Attachment extends BaseAdminController
*/ */
public function deleteCategory($id) public function deleteCategory($id)
{ {
(new AttachmentService())->delCategory($id); ( new AttachmentService() )->delCategory($id);
return success('DELETE_SUCCESS'); return success('DELETE_SUCCESS');
} }
@ -115,9 +116,9 @@ class Attachment extends BaseAdminController
public function moveCategory($att_id) public function moveCategory($att_id)
{ {
$data = $this->request->params([ $data = $this->request->params([
['cate_id', ''] [ 'cate_id', '' ]
]); ]);
(new AttachmentService())->modifyCategory($att_id, $data['cate_id']); ( new AttachmentService() )->modifyCategory($att_id, $data[ 'cate_id' ]);
return success('SUCCESS'); return success('SUCCESS');
} }
@ -129,11 +130,36 @@ class Attachment extends BaseAdminController
public function batchMoveCategory() public function batchMoveCategory()
{ {
$data = $this->request->params([ $data = $this->request->params([
['cate_id', ''], [ 'cate_id', '' ],
['att_ids', []] [ 'att_ids', [] ]
]); ]);
(new AttachmentService())->batchModifyCategory($data['att_ids'], $data['cate_id']); ( new AttachmentService() )->batchModifyCategory($data[ 'att_ids' ], $data[ 'cate_id' ]);
return success('SUCCESS'); return success('SUCCESS');
} }
/**
* 获取图标库分类列表
*/
public function getIconCategoryList()
{
$data = $this->request->params([
[ 'name', '' ],
]);
return success(( new AttachmentService() )->getIconCategoryList($data));
}
/**
* 获取图标库列表
*/
public function getIconList()
{
$data = $this->request->params([
[ 'page', 0 ],
[ 'limit', 0 ],
[ 'cate_id', 0 ],
[ 'real_name', '' ],
]);
return success(( new AttachmentService() )->getIconList($data));
}
} }

View File

@ -0,0 +1,39 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\adminapi\controller\sys;
use app\dict\sys\DateDict;
use core\base\BaseAdminController;
/**
* 公共数据字典
*/
class Common extends BaseAdminController
{
/**
* 月份
* @return \think\Response
*/
public function getMonth(){
return success((new DateDict())->getMonth());
}
/**
* 星期
* @return \think\Response
*/
public function getWeek(){
return success((new DateDict())->getWeek());
}
}

View File

@ -33,6 +33,13 @@ class Schedule extends BaseAdminController
} }
/**
* 计划任务模板
* @return \think\Response
*/
public function template(){
return success(data:(new ScheduleService())->getTemplateList());
}
/** /**
* 获取任务模式 * 获取任务模式
@ -62,6 +69,7 @@ class Schedule extends BaseAdminController
[ 'time', [] ], [ 'time', [] ],
[ 'status', ScheduleDict::OFF ], [ 'status', ScheduleDict::OFF ],
]); ]);
$this->validate($data, 'app\validate\sys\Schedule.add');
( new ScheduleService() )->add($data); ( new ScheduleService() )->add($data);
return success('ADD_SUCCESS'); return success('ADD_SUCCESS');
} }
@ -74,7 +82,7 @@ class Schedule extends BaseAdminController
public function edit(int $id) public function edit(int $id)
{ {
$data = $this->request->params([ $data = $this->request->params([
[ 'key', '' ], // [ 'key', '' ],
[ 'time', [] ], [ 'time', [] ],
[ 'status', ScheduleDict::OFF ], [ 'status', ScheduleDict::OFF ],
]); ]);
@ -100,8 +108,15 @@ class Schedule extends BaseAdminController
*/ */
public function del(int $id) public function del(int $id)
{ {
( new ScheduleService() )->del($id); ( new ScheduleService() )->del($id);
return success('DELETE_SUCCESS'); return success('DELETE_SUCCESS');
} }
/**
* 时间间隔类型
* @return \think\Response
*/
public function getDateType(){
return success(data:ScheduleDict::getDateType());
}
} }

View File

@ -12,7 +12,7 @@
namespace app\adminapi\controller\upload; namespace app\adminapi\controller\upload;
use app\dict\sys\StorageDict; use app\dict\sys\StorageDict;
use app\service\admin\file\StorageConfigService; use app\service\admin\upload\StorageConfigService;
use core\base\BaseAdminController; use core\base\BaseAdminController;
use core\exception\AdminException; use core\exception\AdminException;
use think\Response; use think\Response;

View File

@ -11,8 +11,8 @@
namespace app\adminapi\controller\upload; namespace app\adminapi\controller\upload;
use app\service\admin\file\UploadConfigService; use app\service\admin\upload\UploadConfigService;
use app\service\admin\file\UploadService; use app\service\admin\upload\UploadService;
use core\base\BaseAdminController; use core\base\BaseAdminController;
use think\Response; use think\Response;
@ -56,7 +56,7 @@ class Upload extends BaseAdminController
['file', 'file'], ['file', 'file'],
], true); ], true);
$upload_service = new UploadService(); $upload_service = new UploadService();
return success($upload_service->document($data['file'], $type, true)); return success($upload_service->document($data['file'], $type));
} }
/** /**

View File

@ -0,0 +1,35 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\adminapi\controller\weapp;
use app\service\admin\weapp\WeappConfigService;
use core\base\BaseAdminController;
use think\Response;
class Package extends BaseAdminController
{
public function lists(){
return success();
}
public function add(){
$data = $this->request->params([
['version', ''],
['path', ''],
['desc', ''],
['config', []],
]);
}
}

View File

@ -0,0 +1,54 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
use app\adminapi\middleware\AdminCheckRole;
use app\adminapi\middleware\AdminCheckToken;
use app\adminapi\middleware\AdminLog;
use think\facade\Route;
/**
* 路由
*/
Route::group('applet', function () {
/***************************************************** 小程序版本 ****************************************************/
//列表
Route::get('version', 'applet.Version/lists');
//详情
Route::get('version/:id', 'applet.Version/info');
//创建版本
Route::post('version', 'applet.Version/add');
//编辑
Route::put('version/:id', 'applet.Version/edit');
//删除
Route::delete('version/:id', 'applet.Version/del');
//设置状态
Route::put('version/status/:id/:status', 'applet.Version/setStatus');
//上传
Route::post('upload', 'applet.Version/upload');
/***************************************************** 站点下载或升级版本记录 ****************************************************/
//列表
Route::get('site/version', 'applet.SiteVersion/lists');
//详情
Route::get('site/version/:id', 'applet.SiteVersion/info');
//最后一个升级的版本
Route::post('site/version/last', 'applet.SiteVersion/getLastVersion');
//下载
Route::post('version/download/:id', 'applet.VersionDownload/download');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);

View File

@ -122,6 +122,10 @@ Route::group('sys', function () {
Route::put('upload/config', 'upload.Upload/setUploadConfig'); Route::put('upload/config', 'upload.Upload/setUploadConfig');
//获取上传设置 //获取上传设置
Route::get('upload/config', 'upload.Upload/getUploadConfig'); Route::get('upload/config', 'upload.Upload/getUploadConfig');
// 获取图标库列表
Route::get('attachment/icon_category', 'sys.Attachment/getIconCategoryList');
// 获取图标库列表
Route::get('attachment/icon', 'sys.Attachment/getIconList');
/***************************************************** 协议管理 ****************************************************/ /***************************************************** 协议管理 ****************************************************/
//消息列表 //消息列表
Route::get('agreement', 'sys.Agreement/lists'); Route::get('agreement', 'sys.Agreement/lists');
@ -167,13 +171,19 @@ Route::group('sys', function () {
Route::delete('schedule/:id', 'sys.Schedule/del'); Route::delete('schedule/:id', 'sys.Schedule/del');
//任务模式 //任务模式
Route::get('schedule/type', 'sys.Schedule/getType'); Route::get('schedule/type', 'sys.Schedule/getType');
//任务模板
Route::get('schedule/template', 'sys.Schedule/template');
//任务时间间隔
Route::get('schedule/datetype', 'sys.Schedule/getDateType');
/***************************************************** 应用管理 ****************************************************/ /***************************************************** 应用管理 ****************************************************/
Route::get('applist', 'sys.App/getAppList'); Route::get('applist', 'sys.App/getAppList');
/***************************************************** 清理缓存-刷新菜单 ****************************************************/ /***************************************************** 清理缓存-刷新菜单 ****************************************************/
Route::post('schema/clear', 'sys.System/schemaCache'); Route::post('schema/clear', 'sys.System/schemaCache');
/***************************************************** 公共字典数据 ****************************************************/
Route::get('date/month', 'sys.Common/getMonth');
Route::get('date/week', 'sys.Common/getWeek');
})->middleware([ })->middleware([
AdminCheckToken::class, AdminCheckToken::class,

View File

@ -19,6 +19,10 @@ use core\base\BaseApiController;
class Upload extends BaseApiController class Upload extends BaseApiController
{ {
/**
* 图片上传
* @return \think\Response
*/
public function image(){ public function image(){
$data = $this->request->params([ $data = $this->request->params([
['file', 'file'], ['file', 'file'],
@ -27,6 +31,10 @@ class Upload extends BaseApiController
return success($upload_service->image($data['file'])); return success($upload_service->image($data['file']));
} }
/**
* 远程图片拉取
* @return \think\Response
*/
public function imageFetch(){ public function imageFetch(){
$data = $this->request->params([ $data = $this->request->params([
['url', ''], ['url', ''],
@ -36,7 +44,10 @@ class Upload extends BaseApiController
} }
/**
* base64图片上传
* @return \think\Response
*/
public function imageBase64(){ public function imageBase64(){
$data = $this->request->params([ $data = $this->request->params([
['content', ''], ['content', ''],

View File

@ -11,6 +11,7 @@
namespace app\api\controller\weapp; namespace app\api\controller\weapp;
use app\service\api\notice\NoticeService;
use app\service\api\weapp\WeappAuthService; use app\service\api\weapp\WeappAuthService;
use core\base\BaseApiController; use core\base\BaseApiController;
use EasyWeChat\Kernel\Exceptions\InvalidArgumentException; use EasyWeChat\Kernel\Exceptions\InvalidArgumentException;
@ -44,4 +45,10 @@ class Weapp extends BaseApiController
$weapp_auth_service = new WeappAuthService(); $weapp_auth_service = new WeappAuthService();
return success($weapp_auth_service->register($data['openid'], $data['mobile'], $data['mobile_code'])); return success($weapp_auth_service->register($data['openid'], $data['mobile'], $data['mobile_code']));
} }
public function subscribeMessage(){
$data = $this->request->params([ ['keys', ''] ]);
return success((new NoticeService())->getWeappNoticeTemplateId($data['keys']));
}
} }

View File

@ -40,10 +40,7 @@ class ApiChannel
if (in_array($request->rule()->getRule(), $channel_rules)) { if (in_array($request->rule()->getRule(), $channel_rules)) {
$site_id = $request->param('site_id', -1); $site_id = $request->param('site_id', -1);
if ($site_id != -1) { if ($site_id != -1) {
$site_info = (new CoreSiteService())->getSiteCache($site_id); $request->pushHeader([ system_name('api_site_id_name') => $site_id ]);
if(empty($site_info)) throw new AuthException('SITE_NOT_EXIST');
$site_code = $site_info['code'] ?? '';
$request->pushHeader([ system_name('api_site_id_name') => $site_code ]);
} }
} }
return $next($request); return $next($request);

View File

@ -40,6 +40,8 @@ Route::group(function() {
Route::post('weapp/login', 'weapp.Weapp/login'); Route::post('weapp/login', 'weapp.Weapp/login');
//小程序通过code注册 //小程序通过code注册
Route::post('weapp/register', 'weapp.Weapp/register'); Route::post('weapp/register', 'weapp.Weapp/register');
// 获取小程序订阅消息模板id
Route::get('weapp/subscribemsg', 'weapp.Weapp/subscribeMessage');
//登录 //登录
Route::get('login', 'login.Login/login'); Route::get('login', 'login.Login/login');
//第三方绑定 //第三方绑定

View File

@ -6,6 +6,7 @@ use think\facade\Lang;
use think\facade\Queue; use think\facade\Queue;
use think\facade\Cache; use think\facade\Cache;
use core\util\Snowflake; use core\util\Snowflake;
use app\service\core\upload\CoreImageService;
// 应用公共文件 // 应用公共文件
/** /**
@ -369,11 +370,11 @@ function filter($string)
*/ */
function create_no(string $prefix = '', string $tag = '') function create_no(string $prefix = '', string $tag = '')
{ {
$dataCenterId = 1; $data_center_id = 1;
$machineId = 2; $machine_id = 2;
$snowflake = new Snowflake($dataCenterId, $machineId); $snowflake = new Snowflake($data_center_id, $machine_id);
$id = $snowflake->generateId(); $id = $snowflake->generateId();
return $prefix.$tag.$id; return $prefix.date('YmdHi').$tag.$id;
} }
/** /**
@ -706,4 +707,74 @@ function cache_remember(string $name = null, $value = '', $tag = null, $options
*/ */
function project_path() { function project_path() {
return dirname(root_path()) . DIRECTORY_SEPARATOR; return dirname(root_path()) . DIRECTORY_SEPARATOR;
} }
/**
* 图片转base64
* @param string $path
* @param $is_delete 转换后是否删除原图
* @return void
*/
function image_to_base64(string $path, $is_delete = false) {
if (!file_exists($path)) return 'image not exist';
$mime = getimagesize($path)['mime'];
$image_data = file_get_contents($path);
// 将图片转换为 base64
$base64_data = base64_encode($image_data);
if ($is_delete) @unlink($path);
return "data:{$mime};base64,{$base64_data}";
}
/**
* 获取缩略图
* @param $site_id
* @param $image
* @param $thumb_type
* @return mixed
* @throws Exception
*/
function get_thumb_images($site_id, $image, $thumb_type = 'all', bool $is_throw_exception = false){
return (new CoreImageService())->thumb($site_id, $image, $thumb_type, $is_throw_exception);
}
/**
* 版本号转整数 例如1.0.0=001.000.000=001000000=1000000
* @param string $ver
* @return int
*/
function version_to_int($version) {
$version_array = explode(".", $version);
$v1 = sprintf('%03s', (int) $version_array[0] ?? 0);
$v2 = sprintf('%03s', (int) $version_array[1] ?? 0);
$v3 = sprintf('%03s', (int) $version_array[2] ?? 0);
return (int) "{$v1}{$v2}{$v3}";
}
/**
* 整数版本号转字符串例如 1000000=001000000=001.000.000=1.0.0
* @param int $ver
* @return string
*/
function version_to_string($ver) {
if($ver > 999) {
if($ver > 999999) {
$ver = $ver . "";
$v3 = (int) substr($ver, -3);
$v2 = (int) substr($ver, -6, 3);
$v1 = (int) substr($ver, 0, strlen($ver) - 6);
} else {
$ver = $ver . "";
$v3 = (int) substr($ver, -3);
$v2 = (int) substr($ver, 0, strlen($ver) - 3);
$v1 = 0;
}
} else {
$v3 = $ver;
$v2 = 0;
$v1 = 0;
}
return "{$v1}.{$v2}.{$v3}";
}

View File

@ -0,0 +1,43 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\dict\applet;
/**
* 小程序版本
* Class ChannelDict
* @package app\dict\common
*/
class AppletlDict
{
const ON = '1';//草稿
//微信公众号
const OFF = '2';
const PUBLISHED = '3';
const DOWNLOAD = 'download';//下载
const UPGRADE = 'upgrade';//升级
/**
* 小程序版本状态
* @return array
*/
public static function getStatus(){
$data = [
self::ON => get_lang('dict_applet.channel_weapp'),//启用
self::OFF => get_lang('dict_applet.channel_wechat'),//下架
];
return $data;
}
}

View File

@ -21,10 +21,6 @@ use core\dict\DictLoader;
class ComponentDict class ComponentDict
{ {
/**
* 获取组件
* @return array|null
*/
public static function getComponent() public static function getComponent()
{ {
$system_components = [ $system_components = [

View File

@ -20,10 +20,6 @@ use core\dict\DictLoader;
*/ */
class LinkDict class LinkDict
{ {
/**
* 获取链接
* @return array
*/
public static function getLink() public static function getLink()
{ {
$system_links = [ $system_links = [

View File

@ -21,11 +21,6 @@ use core\dict\DictLoader;
class PagesDict class PagesDict
{ {
/**
* 获取页面数据
* @param array $params
* @return array|string|null
*/
public static function getPages($params = []) public static function getPages($params = [])
{ {
$system_pages = [ $system_pages = [
@ -258,14 +253,74 @@ class PagesDict
] ]
], ],
// 'tourism' => [ // 'tourism' => [
// "title" => "旅游", // 页面名称 // "title" => "固定模板示例", // 页面名称
// 'cover' => 'static/resource/images/diy/template/tourism_cover.png', // 页面封面图 // 'cover' => 'static/resource/images/diy/template/tourism_cover.png', // 页面封面图
// 'preview' => '', // 页面预览图 // 'preview' => '', // 页面预览图
// 'desc' => '酒店旅游住宿门票景点', // 页面描述 // 'desc' => '描述固定模板', // 页面描述
// 'mode' => 'fixed', // 页面模式diy自定义fixed固定 // 'mode' => 'fixed', // 页面模式diy自定义fixed固定
// 'data' => [ // 'data' => [
// 'component' => 'tourism-index', // 模板组件名称 // "global" => [
// 'link' => '' // 装修链接 // "title" => "固定模板示例",
// "pageBgColor" => "#F8F8F8",
// 'bgUrl' => '',
// 'imgWidth' => '',
// 'imgHeight' => '',
// "bottomTabBarSwitch" => true,
// "template" => [
// 'textColor' => "#303133",
// "pageBgColor" => "",
// "componentBgColor" => "",
// "topRounded" => 0,
// "bottomRounded" => 0,
// "elementBgColor" => "",
// "topElementRounded" => 0,
// "bottomElementRounded" => 0,
// "margin" => [
// "top" => 0,
// "bottom" => 0,
// "both" => 0
// ]
// ],
// 'topStatusBar' => [
// 'bgColor' => "#ffffff",
// 'isTransparent' => false,
// 'isShow' => true,
// 'style' => 'style-1',
// 'textColor' => "#333333",
// 'textAlign' => 'center',
// ],
// 'popWindow' => [
// 'imgUrl' => "",
// 'imgWidth' => '',
// 'imgHeight' => '',
// 'count' => -1,
// 'show' => 0,
// 'link' => [
// 'name' => ""
// ],
// ]
// ],
// "value" => [
// [
// "id" => "524jcssmp8c0",
// "componentName" => "DemoIndex",
// "componentTitle" => "固定模板示例",
// "uses" => 0,
// "ignore" => [],
// "pageBgColor" => "",
// "componentBgColor" => "rgba(255, 255, 255, 1)",
// "topRounded" => 0,
// "bottomRounded" => 0,
// "elementBgColor" => "",
// "topElementRounded" => 0,
// "bottomElementRounded" => 0,
// "margin" => [
// "top" => 0,
// "bottom" => 0,
// "both" => 0
// ]
// ]
// ]
// ] // ]
// ] // ]
], ],
@ -932,6 +987,7 @@ class PagesDict
// ] // ]
] ]
]; ];
$pages = ( new DictLoader("UniappPages") )->load($system_pages); $pages = ( new DictLoader("UniappPages") )->load($system_pages);
if (!empty($params[ 'type' ])) { if (!empty($params[ 'type' ])) {
if (!empty($pages[ $params[ 'type' ] ])) { if (!empty($pages[ $params[ 'type' ] ])) {
@ -943,12 +999,11 @@ class PagesDict
} }
} }
} }
return $temp;
} else { } else {
return []; return [];
} }
return $temp;
} }
return $pages; return $pages;

View File

@ -21,11 +21,6 @@ use core\dict\DictLoader;
class TemplateDict class TemplateDict
{ {
/**
* 获取页面模板
* @param array $params
* @return array|string|null
*/
public static function getTemplate($params = []) public static function getTemplate($params = [])
{ {
$system_pages = [ $system_pages = [

View File

@ -458,6 +458,19 @@
'sort' => 20, 'sort' => 20,
'status' => 1, 'status' => 1,
'is_show' => 1, 'is_show' => 1,
],
[
'menu_name' => '小程序平台',
'menu_key' => 'setting_oplatform',
'menu_type' => 1,
'icon' => 'iconfont-iconweixin',
'api_url' => 'sys/weapp',
'router_path' => 'weapp',
'view_path' => 'setting/weapp',
'methods' => 'get',
'sort' => 20,
'status' => 1,
'is_show' => 1,
] ]
] ]
], ],

View File

@ -485,7 +485,7 @@ return
'is_show' => 1, 'is_show' => 1,
'children' => [ 'children' => [
[ [
'menu_name' => '账单管理', 'menu_name' => '财务流水',
'menu_key' => 'site_account_list', 'menu_key' => 'site_account_list',
'menu_type' => 1, 'menu_type' => 1,
'icon' => 'element-Postcard', 'icon' => 'element-Postcard',

View File

@ -1,12 +1,14 @@
<?php <?php
return [ return [
'recharge_success' => [ 'recharge_success' => [
'temp_key' => '755', 'tid' => '755',
'content' => [ 'content' => [
['交易单号', '{trade_no}', 'keyword1'], ['交易单号', '{trade_no}', 'keyword1'],
['充值金额', '{price}', 'keyword2'], ['充值金额', '{price}', 'keyword2'],
['账户余额', '{balance}', 'keyword3'], ['账户余额', '{balance}', 'keyword3'],
['充值时间', '{time}', 'keyword4'], ['充值时间', '{time}', 'keyword4'],
], ],
'kid_list' => [1, 3, 4, 2],
'scene_desc' => ''
] ]
]; ];

View File

@ -19,6 +19,8 @@ class ScheduleDict
const ON = 1; const ON = 1;
const OFF = 2; const OFF = 2;
/** /**
* 任务模式 * 任务模式
* @return array * @return array
@ -40,4 +42,19 @@ class ScheduleDict
self::OFF => get_lang('dict_schedule.off'),//关闭 self::OFF => get_lang('dict_schedule.off'),//关闭
]; ];
} }
const MIN = 'min';//每隔几分钟
const HOUR = 'hour';//每隔几小时
const DAY = 'day';//每隔几天
const WEEK = 'week';//每周
const MONTH = 'month';//每月
public static function getDateType(){
return [
self::MIN => get_lang('dict_schedule.min'),
self::HOUR => get_lang('dict_schedule.hour'),
self::DAY => get_lang('dict_schedule.day'),
self::WEEK => get_lang('dict_schedule.week'),
self::MONTH => get_lang('dict_schedule.month'),
];
}
} }

View File

@ -50,7 +50,7 @@ class FileDict
const WECHAT = 'wechat';//微信支付 const WECHAT = 'wechat';//微信支付
const APPLET = 'applet';//小程序上传
/** /**
* 获取上传的场景 * 获取上传的场景
@ -62,6 +62,23 @@ class FileDict
self::ALIYUN,//阿里云相关上传 self::ALIYUN,//阿里云相关上传
self::IMAGE,//图片上传 self::IMAGE,//图片上传
self::VIDEO,//视频上传 self::VIDEO,//视频上传
self::APPLET,//小程序包上传
];
}
const BIG = 'big';
const MID = 'mid';
const SMALL = 'small';
/**
* 缩略图规格
* @return string[]
*/
public static function getThumbType(){
return [
self::BIG,//微信相关上传
self::MID,//阿里云相关上传
self::SMALL,//图片上传
]; ];
} }
} }

View File

@ -0,0 +1,31 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\dict\sys;
use core\dict\DictLoader;
/**
* 获取图标
* Class IconDict
* @package app\dict\sys
*/
class IconDict
{
public static function getIcon($params = [])
{
$system_pages = [];
$pages = ( new DictLoader("Icon") )->load($system_pages);
return $pages;
}
}

View File

@ -39,7 +39,8 @@ $system_event = [
//退款成功 //退款成功
'RefundSuccess' => [ 'app\listener\pay\RefundSuccessListener' ], 'RefundSuccess' => [ 'app\listener\pay\RefundSuccessListener' ],
//转账成功 //转账成功
'TransferSuccess' => [ 'app\listener\pay\TransferSuccessListener' ], 'SiteIndex' => [ 'TransferSuccess' => [ 'app\listener\pay\TransferSuccessListener' ],
'SiteIndex' => [
'app\listener\system\SiteIndexListener' 'app\listener\system\SiteIndexListener'
], ],

View File

@ -344,7 +344,7 @@ class Index extends BaseInstall
]); ]);
} }
//修改自增主键默认值 //修改自增主键默认值
Db::execute("alter table ".env('database.prefix', '')."site auto_increment = 1"); Db::execute("alter table ".env('database.prefix', '')."site auto_increment = 100000");
//获取默认套餐 //获取默认套餐
$group_id = (new SiteGroupService())->addAllMenuGroup(); $group_id = (new SiteGroupService())->addAllMenuGroup();

View File

@ -28,6 +28,36 @@ CREATE TABLE `addon_log` (
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件日志表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='插件日志表';
DROP TABLE IF EXISTS `applet_site_version`;
CREATE TABLE `applet_site_version` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
`version_id` int(11) NOT NULL DEFAULT '0' COMMENT '版本id',
`type` varchar(20) NOT NULL DEFAULT '' COMMENT '小程序类型',
`action` varchar(20) NOT NULL DEFAULT '' COMMENT '操作方式 download 下载 upgrade 更新',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='站点小程序版本表';
DROP TABLE IF EXISTS `applet_version`;
CREATE TABLE `applet_version` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`config` varchar(255) NOT NULL DEFAULT '' COMMENT '配置信息',
`type` varchar(20) NOT NULL DEFAULT '' COMMENT '小程序类型',
`desc` text COMMENT '插件描述',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 下架 上架',
`uid` varchar(40) NOT NULL DEFAULT '' COMMENT '发布者',
`path` varchar(255) NOT NULL DEFAULT '' COMMENT '小程序包地址',
`version` varchar(20) NOT NULL DEFAULT '' COMMENT '版本号',
`version_num` varchar(20) NOT NULL DEFAULT '' COMMENT '版本号数字(用于排序)',
`release_version` varchar(20) NOT NULL DEFAULT '' COMMENT '发布线上版本号',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`site_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小程序版本表';
DROP TABLE IF EXISTS `article`; DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` ( CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文章id', `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文章id',
@ -88,6 +118,7 @@ CREATE TABLE `diy_page` (
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自定义页面'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自定义页面';
DROP TABLE IF EXISTS `diy_route`; DROP TABLE IF EXISTS `diy_route`;
CREATE TABLE `diy_route` ( CREATE TABLE `diy_route` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
@ -108,13 +139,13 @@ CREATE TABLE `generate_column` (
`column_name` varchar(100) NOT NULL DEFAULT '' COMMENT '字段名称', `column_name` varchar(100) NOT NULL DEFAULT '' COMMENT '字段名称',
`column_comment` varchar(300) NOT NULL DEFAULT '' COMMENT '字段描述', `column_comment` varchar(300) NOT NULL DEFAULT '' COMMENT '字段描述',
`column_type` varchar(100) NOT NULL DEFAULT '' COMMENT '字段类型', `column_type` varchar(100) NOT NULL DEFAULT '' COMMENT '字段类型',
`is_required` tinyint(4) DEFAULT '0' COMMENT '是否必填 0-非必填 1-必填', `is_required` tinyint(1) DEFAULT '0' COMMENT '是否必填 0-非必填 1-必填',
`is_pk` tinyint(4) DEFAULT '0' COMMENT '是否为主键 0-不是 1-是', `is_pk` tinyint(1) DEFAULT '0' COMMENT '是否为主键 0-不是 1-是',
`is_insert` tinyint(4) DEFAULT '0' COMMENT '是否为插入字段 0-不是 1-是', `is_insert` tinyint(1) DEFAULT '0' COMMENT '是否为插入字段 0-不是 1-是',
`is_update` tinyint(4) DEFAULT '0' COMMENT '是否为更新字段 0-不是 1-是', `is_update` tinyint(1) DEFAULT '0' COMMENT '是否为更新字段 0-不是 1-是',
`is_lists` tinyint(4) DEFAULT '1' COMMENT '是否为列表字段 0-不是 1-是', `is_lists` tinyint(1) DEFAULT '1' COMMENT '是否为列表字段 0-不是 1-是',
`is_query` tinyint(4) DEFAULT '1' COMMENT '是否为查询字段 0-不是 1-是', `is_query` tinyint(1) DEFAULT '1' COMMENT '是否为查询字段 0-不是 1-是',
`is_search` tinyint(4) DEFAULT '1' COMMENT '是否搜索字段', `is_search` tinyint(1) DEFAULT '1' COMMENT '是否搜索字段',
`query_type` varchar(100) DEFAULT '=' COMMENT '查询类型', `query_type` varchar(100) DEFAULT '=' COMMENT '查询类型',
`view_type` varchar(100) DEFAULT 'input' COMMENT '显示类型', `view_type` varchar(100) DEFAULT 'input' COMMENT '显示类型',
`dict_type` varchar(255) DEFAULT '' COMMENT '字典类型', `dict_type` varchar(255) DEFAULT '' COMMENT '字典类型',
@ -140,10 +171,10 @@ CREATE TABLE `jobs` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`queue` varchar(255) NOT NULL, `queue` varchar(255) NOT NULL,
`payload` longtext NOT NULL, `payload` longtext NOT NULL,
`attempts` tinyint(3) unsigned NOT NULL DEFAULT '0', `attempts` tinyint(4) unsigned NOT NULL DEFAULT '0',
`reserve_time` int(10) unsigned DEFAULT '0', `reserve_time` int(11) unsigned DEFAULT '0',
`available_time` int(10) unsigned NOT NULL DEFAULT '0', `available_time` int(11) unsigned DEFAULT '0',
`create_time` int(10) unsigned NOT NULL DEFAULT '0', `create_time` int(11) unsigned DEFAULT '0',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `queue` (`queue`) KEY `queue` (`queue`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息队列任务表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息队列任务表';
@ -350,6 +381,7 @@ CREATE TABLE `pay` (
`main_id` int(11) NOT NULL DEFAULT '0' COMMENT '支付会员id', `main_id` int(11) NOT NULL DEFAULT '0' COMMENT '支付会员id',
`out_trade_no` varchar(255) NOT NULL DEFAULT '' COMMENT '支付流水号', `out_trade_no` varchar(255) NOT NULL DEFAULT '' COMMENT '支付流水号',
`trade_type` varchar(255) NOT NULL DEFAULT '' COMMENT '业务类型', `trade_type` varchar(255) NOT NULL DEFAULT '' COMMENT '业务类型',
`trade_id` int(11) NOT NULL DEFAULT '0' COMMENT '业务id',
`trade_no` varchar(255) NOT NULL DEFAULT '' COMMENT '交易单号', `trade_no` varchar(255) NOT NULL DEFAULT '' COMMENT '交易单号',
`body` varchar(1000) NOT NULL DEFAULT '' COMMENT '支付主体', `body` varchar(1000) NOT NULL DEFAULT '' COMMENT '支付主体',
`money` decimal(10,2) NOT NULL COMMENT '支付金额', `money` decimal(10,2) NOT NULL COMMENT '支付金额',
@ -516,7 +548,6 @@ CREATE TABLE `recharge_order_log` (
DROP TABLE IF EXISTS `site`; DROP TABLE IF EXISTS `site`;
CREATE TABLE `site` ( CREATE TABLE `site` (
`site_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `site_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`site_code` varchar(32) NOT NULL DEFAULT '' COMMENT '站点code码',
`site_name` varchar(50) NOT NULL DEFAULT '' COMMENT '站点名称', `site_name` varchar(50) NOT NULL DEFAULT '' COMMENT '站点名称',
`group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID(0:不限制)', `group_id` int(11) NOT NULL DEFAULT '0' COMMENT '分组ID(0:不限制)',
`keywords` varchar(255) NOT NULL DEFAULT '' COMMENT '关键字', `keywords` varchar(255) NOT NULL DEFAULT '' COMMENT '关键字',
@ -542,9 +573,9 @@ CREATE TABLE `site` (
PRIMARY KEY (`site_id`), PRIMARY KEY (`site_id`),
KEY `create_time` (`create_time`), KEY `create_time` (`create_time`),
KEY `group_id` (`group_id`) KEY `group_id` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 AVG_ROW_LENGTH=1365 COMMENT='站点表'; ) ENGINE=InnoDB AUTO_INCREMENT=100000 DEFAULT CHARSET=utf8mb4 COMMENT='站点表';
INSERT INTO `site` VALUES ('1', '11000001', 'niucloud-admin', '0', '', 'admin', '', '', '1', '', '', '0', '0', '0', '', '', '', '', '0', '0', '', '', '', '0'); INSERT INTO `site` VALUES ('1', 'niucloud-admin', '0', '', 'admin', '', '', '1', '', '', '0', '0', '0', '', '', '', '', '0', '0', '', '', '', '0');
DROP TABLE IF EXISTS `site_account_log`; DROP TABLE IF EXISTS `site_account_log`;
CREATE TABLE `site_account_log` ( CREATE TABLE `site_account_log` (
@ -4333,7 +4364,7 @@ CREATE TABLE `sys_menu` (
`view_path` varchar(255) NOT NULL DEFAULT '' COMMENT '菜单文件地址', `view_path` varchar(255) NOT NULL DEFAULT '' COMMENT '菜单文件地址',
`methods` varchar(10) NOT NULL DEFAULT '' COMMENT '提交方式POST GET PUT DELETE', `methods` varchar(10) NOT NULL DEFAULT '' COMMENT '提交方式POST GET PUT DELETE',
`sort` tinyint(4) NOT NULL DEFAULT '1' COMMENT '排序', `sort` tinyint(4) NOT NULL DEFAULT '1' COMMENT '排序',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '正常,禁用(禁用后不允许访问)', `status` tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '正常,禁用(禁用后不允许访问)',
`is_show` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否显示', `is_show` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否显示',
`create_time` int(11) NOT NULL DEFAULT '0', `create_time` int(11) NOT NULL DEFAULT '0',
`delete_time` int(11) NOT NULL DEFAULT '0', `delete_time` int(11) NOT NULL DEFAULT '0',
@ -4342,7 +4373,7 @@ CREATE TABLE `sys_menu` (
KEY `is_show` (`is_show`), KEY `is_show` (`is_show`),
KEY `menu_key` (`menu_key`,`app_type`), KEY `menu_key` (`menu_key`,`app_type`),
KEY `parent_key` (`parent_key`) KEY `parent_key` (`parent_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AVG_ROW_LENGTH=406 COMMENT='菜单表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';
DROP TABLE IF EXISTS `sys_notice`; DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice` ( CREATE TABLE `sys_notice` (
@ -4369,15 +4400,15 @@ CREATE TABLE `sys_notice_log` (
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id', `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
`key` varchar(255) DEFAULT '' COMMENT '消息key', `key` varchar(255) DEFAULT '' COMMENT '消息key',
`notice_type` varchar(50) DEFAULT 'sms' COMMENT '消息类型sms,wechat.weapp', `notice_type` varchar(50) DEFAULT 'sms' COMMENT '消息类型sms,wechat.weapp',
`uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '通知的用户id', `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '通知的用户id',
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '消息的会员id', `member_id` int(11) NOT NULL DEFAULT '0' COMMENT '消息的会员id',
`nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '接收人用户昵称或姓名', `nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '接收人用户昵称或姓名',
`receiver` varchar(255) NOT NULL DEFAULT '' COMMENT '接收人对应手机号openid', `receiver` varchar(255) NOT NULL DEFAULT '' COMMENT '接收人对应手机号openid',
`content` text COMMENT '消息数据', `content` text COMMENT '消息数据',
`is_click` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '点击次数', `is_click` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '点击次数',
`is_visit` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '访问次数', `is_visit` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '访问次数',
`visit_time` int(11) NOT NULL DEFAULT '0' COMMENT '访问时间', `visit_time` int(11) NOT NULL DEFAULT '0' COMMENT '访问时间',
`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '消息时间', `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '消息时间',
`result` varchar(1000) NOT NULL DEFAULT '' COMMENT '结果', `result` varchar(1000) NOT NULL DEFAULT '' COMMENT '结果',
`params` text, `params` text,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
@ -4411,7 +4442,7 @@ CREATE TABLE `sys_role` (
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id', `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
`role_name` varchar(255) NOT NULL DEFAULT '' COMMENT '角色名称', `role_name` varchar(255) NOT NULL DEFAULT '' COMMENT '角色名称',
`rules` text COMMENT '角色权限(menus_id)', `rules` text COMMENT '角色权限(menus_id)',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态', `status` tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '状态',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后修改时间', `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后修改时间',
PRIMARY KEY (`role_id`), PRIMARY KEY (`role_id`),
@ -4445,11 +4476,11 @@ CREATE TABLE `sys_user` (
`password` varchar(100) NOT NULL DEFAULT '' COMMENT '用户密码', `password` varchar(100) NOT NULL DEFAULT '' COMMENT '用户密码',
`real_name` varchar(16) NOT NULL DEFAULT '' COMMENT '实际姓名', `real_name` varchar(16) NOT NULL DEFAULT '' COMMENT '实际姓名',
`last_ip` varchar(16) NOT NULL DEFAULT '' COMMENT '最后一次登录ip', `last_ip` varchar(16) NOT NULL DEFAULT '' COMMENT '最后一次登录ip',
`last_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后一次登录时间', `last_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '最后一次登录时间',
`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间', `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间',
`login_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '登录次数', `login_count` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '登录次数',
`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '后台管理员状态 1有效0无效', `status` tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '后台管理员状态 1有效0无效',
`is_del` tinyint(3) unsigned NOT NULL DEFAULT '0', `is_del` tinyint(4) unsigned NOT NULL DEFAULT '0',
`delete_time` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除时间', `delete_time` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间', `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
PRIMARY KEY (`uid`), PRIMARY KEY (`uid`),
@ -4458,7 +4489,7 @@ CREATE TABLE `sys_user` (
KEY `is_del` (`is_del`), KEY `is_del` (`is_del`),
KEY `password` (`password`), KEY `password` (`password`),
KEY `update_time` (`update_time`) KEY `update_time` (`update_time`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 AVG_ROW_LENGTH=372 COMMENT='后台管理员表'; ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='后台管理员表';
INSERT INTO `sys_user` VALUES ('1', '', '', '', '', '', '0', '0', '0', '1', '0', '0', '0'); INSERT INTO `sys_user` VALUES ('1', '', '', '', '', '', '0', '0', '0', '1', '0', '0', '0');
@ -4467,12 +4498,12 @@ CREATE TABLE `sys_user_log` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '管理员操作记录ID', `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '管理员操作记录ID',
`ip` varchar(16) NOT NULL DEFAULT '' COMMENT '登录IP', `ip` varchar(16) NOT NULL DEFAULT '' COMMENT '登录IP',
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id', `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
`uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '管理员id', `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '管理员id',
`username` varchar(64) NOT NULL DEFAULT '' COMMENT '管理员姓名', `username` varchar(64) NOT NULL DEFAULT '' COMMENT '管理员姓名',
`url` varchar(128) NOT NULL DEFAULT '' COMMENT '链接', `url` varchar(128) NOT NULL DEFAULT '' COMMENT '链接',
`params` text COMMENT '参数', `params` text COMMENT '参数',
`type` varchar(32) NOT NULL DEFAULT '' COMMENT '请求方式', `type` varchar(32) NOT NULL DEFAULT '' COMMENT '请求方式',
`create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '操作时间', `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '操作时间',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `create_time` (`create_time`), KEY `create_time` (`create_time`),
KEY `site_id` (`site_id`), KEY `site_id` (`site_id`),
@ -4491,7 +4522,7 @@ CREATE TABLE `sys_user_role` (
KEY `create_time` (`create_time`), KEY `create_time` (`create_time`),
KEY `site_id` (`site_id`), KEY `site_id` (`site_id`),
KEY `uid` (`uid`) KEY `uid` (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 AVG_ROW_LENGTH=481 COMMENT='用户权限表'; ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='用户权限表';
INSERT INTO `sys_user_role` VALUES ('1', '1', '0', '', '0', '1'); INSERT INTO `sys_user_role` VALUES ('1', '1', '0', '', '0', '1');
@ -4542,11 +4573,11 @@ CREATE TABLE `wechat_reply` (
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id', `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
`keyword` varchar(64) NOT NULL DEFAULT '' COMMENT '关键词', `keyword` varchar(64) NOT NULL DEFAULT '' COMMENT '关键词',
`reply_type` tinyint(4) NOT NULL COMMENT '回复类型 subscribe-关注回复 keyword-关键字回复 default-默认回复', `reply_type` tinyint(4) NOT NULL COMMENT '回复类型 subscribe-关注回复 keyword-关键字回复 default-默认回复',
`matching_type` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '匹配方式1-全匹配2-模糊匹配', `matching_type` tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '匹配方式1-全匹配2-模糊匹配',
`content_type` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '内容类型1-文本', `content_type` tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '内容类型1-文本',
`content` text NOT NULL COMMENT '回复内容', `content` text NOT NULL COMMENT '回复内容',
`status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '启动状态1-启动0-关闭', `status` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '启动状态1-启动0-关闭',
`sort` int(10) unsigned NOT NULL DEFAULT '50' COMMENT '排序', `sort` int(11) unsigned NOT NULL DEFAULT '50' COMMENT '排序',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间', `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间', `delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',

View File

@ -44,13 +44,13 @@
</div> </div>
<a href="javascript:void(0)" class="other-links-text" >站点后台</a> <a href="javascript:void(0)" class="other-links-text" >站点后台</a>
</li> </li>
<li class="other-links-item" onclick="window.open('{$root_url}/web/11000012/')"> <li class="other-links-item" onclick="window.open('{$root_url}/web/100000/')">
<div class="other-links-pic"> <div class="other-links-pic">
<img src="INSTALL_IMG/site_web.png" alt=""> <img src="INSTALL_IMG/site_web.png" alt="">
</div> </div>
<a href="javascript:void(0)" class="other-links-text" >站点电脑端</a> <a href="javascript:void(0)" class="other-links-text" >站点电脑端</a>
</li> </li>
<li class="other-links-item" onclick="window.open('{$root_url}/wap/11000012/')"> <li class="other-links-item" onclick="window.open('{$root_url}/wap/100000/')">
<div class="other-links-pic"> <div class="other-links-pic">
<img src="INSTALL_IMG/site_h5.png" alt=""> <img src="INSTALL_IMG/site_h5.png" alt="">
</div> </div>

View File

@ -31,7 +31,7 @@ class Notice extends BaseJob
//通过业务获取模板变量属于以及发送对象 //通过业务获取模板变量属于以及发送对象
$result = event('NoticeData', ['site_id' => $site_id, 'key' => $key, 'data' => $data, 'template' => $template]); $result = event('NoticeData', ['site_id' => $site_id, 'key' => $key, 'data' => $data, 'template' => $template]);
$notice_data = array_values(array_filter($result))[0] ?? []; $notice_data = array_values(array_filter($result))[0] ?? [];
if(empty($notice_data)) throw new NoticeException(); if(empty($notice_data)) throw new NoticeException('NOTICE_TEMPLATE_IS_NOT_EXIST');
event('Notice', ['site_id' => $site_id, 'key' => $key, 'to' => $notice_data['to'], 'vars' => $notice_data['vars'], 'template' => $template]); event('Notice', ['site_id' => $site_id, 'key' => $key, 'to' => $notice_data['to'], 'vars' => $notice_data['vars'], 'template' => $template]);
return true; return true;
} }

View File

@ -76,7 +76,7 @@ return [
'OSS_TYPE_NOT_EXIST' => '云存储类型不存在', 'OSS_TYPE_NOT_EXIST' => '云存储类型不存在',
'URL_FILE_NOT_EXIST' => '获取不到网址指向的文件', 'URL_FILE_NOT_EXIST' => '获取不到网址指向的文件',
'PLEACE_SELECT_IMAGE' => '请选择要删除的图片', 'PLEACE_SELECT_IMAGE' => '请选择要删除的图片',
'CERT_TYPE_ERROR' => '不是有效的证书类型', 'UPLOAD_TYPE_ERROR' => '不是有效的上传类型',
//消息管理 //消息管理
@ -121,5 +121,6 @@ return [
500000 => '你选择的支付方式未启用', 500000 => '你选择的支付方式未启用',
//站点相关 //站点相关
'SITE_GROUP_IS_EXIST' => '站点分组已存在站点,请调整站点后重试', 'SITE_GROUP_IS_EXIST' => '站点分组已存在站点,请调整站点后重试',
//小程序版本
'APPLET_VERSION_NOT_EXISTS' => 'applet version not exists',
]; ];

View File

@ -102,7 +102,13 @@ return [
'type_cron' => 'time work', 'type_cron' => 'time work',
'type_crond' => 'period work', 'type_crond' => 'period work',
'on' => 'on', 'on' => 'on',
'off' => 'off' 'off' => 'off',
//时间间隔
'min' => 'every few minutes',
'hour' => 'every few hours',
'day' => 'every few day',
'week' => 'weekly',
'month' => 'monthly',
], ],
//支付相关 //支付相关
'dict_pay' => [ 'dict_pay' => [

View File

@ -131,5 +131,10 @@ return [
'appid_require' => 'appid is require', 'appid_require' => 'appid is require',
'appsecret_require' => 'appsecret is require', 'appsecret_require' => 'appsecret is require',
], ],
//计划任务
'validate_schedule' => [
'schedule_require' => 'schedule is require',
'schedule_unique' => 'schedule is exist',
'not_exit_schedule_type' => 'not exit schedule type',
],
]; ];

View File

@ -88,7 +88,7 @@ return [
'OSS_TYPE_NOT_EXIST' => '云存储类型不存在', 'OSS_TYPE_NOT_EXIST' => '云存储类型不存在',
'URL_FILE_NOT_EXIST' => '获取不到网址指向的文件', 'URL_FILE_NOT_EXIST' => '获取不到网址指向的文件',
'PLEACE_SELECT_IMAGE' => '请选择要删除的图片', 'PLEACE_SELECT_IMAGE' => '请选择要删除的图片',
'CERT_TYPE_ERROR' => '不是有效的上传类型', 'UPLOAD_TYPE_ERROR' => '不是有效的上传类型',
'OSS_FILE_URL_NOT_EXIST' => '远程资源文件地址不能为空', 'OSS_FILE_URL_NOT_EXIST' => '远程资源文件地址不能为空',
'BASE_IMAGE_FILE_NOT_EXIST' => 'base图片资源不能为空', 'BASE_IMAGE_FILE_NOT_EXIST' => 'base图片资源不能为空',
'UPLOAD_TYPE_NOT_SUPPORT' => '不支持的上传类型', 'UPLOAD_TYPE_NOT_SUPPORT' => '不支持的上传类型',
@ -108,6 +108,7 @@ return [
'NOTICE_NOT_OPEN_SMS' => '当前消息未开启短信发送', 'NOTICE_NOT_OPEN_SMS' => '当前消息未开启短信发送',
'NOTICE_SMS_EMPTY' => '手机号为空', 'NOTICE_SMS_EMPTY' => '手机号为空',
'NOTICE_SMS_NOT_OPEN' => '短信未启用', 'NOTICE_SMS_NOT_OPEN' => '短信未启用',
'NOTICE_TEMPLATE_IS_NOT_EXIST' => '消息不存在',
//会员相关 //会员相关
'MOBILE_IS_EXIST' => '当前手机号已绑定账号', 'MOBILE_IS_EXIST' => '当前手机号已绑定账号',
@ -159,8 +160,6 @@ return [
'WEAPP_EMPOWER_NOT_EXIST' => '微信小程序授信信息不存在', 'WEAPP_EMPOWER_NOT_EXIST' => '微信小程序授信信息不存在',
'WEAPP_EMPOWER_TEL_NOT_EXIST' => '微信小程序授信手机号不存在', 'WEAPP_EMPOWER_TEL_NOT_EXIST' => '微信小程序授信手机号不存在',
//支付相关
//站点相关 //站点相关
'SITE_GROUP_IS_EXIST' => '当前套餐存在站点,请调整站点对应套餐后重试', 'SITE_GROUP_IS_EXIST' => '当前套餐存在站点,请调整站点对应套餐后重试',
'SITE_EXPIRE' => '站点已过期', 'SITE_EXPIRE' => '站点已过期',
@ -185,11 +184,13 @@ return [
'CHANNEL_MARK_INVALID' => '无效的渠道标识', 'CHANNEL_MARK_INVALID' => '无效的渠道标识',
'TEMPLATE_NOT_EXIST' => '模板不存在', 'TEMPLATE_NOT_EXIST' => '模板不存在',
'IS_EXIST_TEMPLATE_NOT_MODIFY' => '已存在的支付模板不支持修改支付类型', 'IS_EXIST_TEMPLATE_NOT_MODIFY' => '已存在的支付模板不支持修改支付类型',
'ONLY_PAYING_CAN_PAY' => '只有待支付的订单可以支付',
//退款相关 //退款相关
'REFUND_NOT_EXIST' => '退款单据不存在', 'REFUND_NOT_EXIST' => '退款单据不存在',
//订单相关 8*** //订单相关 8***
'ORDER_NOT_EXIST' => '订单不存在', 'ORDER_NOT_EXIST' => '订单不存在',
'ORDER_CLOSED' => '订单已关闭', 'ORDER_CLOSED' => '订单已关闭',
'DOCUMENT_IS_PAID' => '单据已支付',
// 退款相关 // 退款相关
'NOT_ALLOW_APPLY_REFUND' => '该订单不允许退款', 'NOT_ALLOW_APPLY_REFUND' => '该订单不允许退款',
@ -207,4 +208,8 @@ return [
'JOB_NOT_EXISTS' => '任务类不存在', 'JOB_NOT_EXISTS' => '任务类不存在',
'JOB_CREATE_FAIL' => '任务创建失败', 'JOB_CREATE_FAIL' => '任务创建失败',
//小程序版本
'APPLET_VERSION_NOT_EXISTS' => '小程序版本不存在',
]; ];

View File

@ -137,7 +137,14 @@ return [
'type_cron' => '定时任务', 'type_cron' => '定时任务',
'type_crond' => '周期任务', 'type_crond' => '周期任务',
'on' => '启用', 'on' => '启用',
'off' => '关闭' 'off' => '关闭',
'min' => '每隔几分钟',
'hour' => '每隔几小时',
'day' => '每隔几天',
'week' => '每周',
'month' => '每月',
], ],
//支付相关 //支付相关
'dict_pay' => [ 'dict_pay' => [

View File

@ -171,5 +171,11 @@ return [
'not_support_account_type' => '该账户不支持提现', 'not_support_account_type' => '该账户不支持提现',
'not_support_transfer_type' => '不支持该提现方式', 'not_support_transfer_type' => '不支持该提现方式',
'account_id_require' => '请选择提现账户' 'account_id_require' => '请选择提现账户'
] ],
//计划任务
'validate_schedule' => [
'schedule_require' => '计划任务必须选择',
'schedule_unique' => '当前计划任务已存在',
'not_exit_schedule_type' => '不是有效的任务类型',
],
]; ];

View File

@ -39,11 +39,7 @@ class Weapp
} }
$weapp_data[$v[2]]['value'] = $search_content; $weapp_data[$v[2]]['value'] = $search_content;
} }
$url = ''; $url = $vars['__weapp_page'] ?? '';
if(!empty($url)){
//todo 拼装h5端的链接
$url = $vars['__weapp_page'];
}
$log_data = array( $log_data = array(
'key' => $key, 'key' => $key,
'message_type' => NoticeTypeDict::WEAPP, 'message_type' => NoticeTypeDict::WEAPP,

View File

@ -5,6 +5,7 @@ namespace app\listener\notice;
use app\dict\notice\NoticeTypeDict; use app\dict\notice\NoticeTypeDict;
use app\service\core\member\CoreMemberService; use app\service\core\member\CoreMemberService;
use app\service\core\notice\CoreNoticeLogService; use app\service\core\notice\CoreNoticeLogService;
use app\service\core\weapp\CoreWeappConfigService;
use core\exception\NoticeException; use core\exception\NoticeException;
use core\template\TemplateLoader; use core\template\TemplateLoader;
@ -20,36 +21,33 @@ class Wechat
$to = $data['to'];//发送对象主题 $to = $data['to'];//发送对象主题
//完全信任消息的设置, 不再依赖support_type //完全信任消息的设置, 不再依赖support_type
if($template['is_wechat']){ if ($template['is_wechat']) {
$member_id = $to['member_id'] ?? 0; $member_id = $to['member_id'] ?? 0;
//会员的 //会员的
if($member_id > 0){//查询openid if ($member_id > 0) {//查询openid
$info = (new CoreMemberService())->getInfoByMemberId($site_id, $member_id); $info = (new CoreMemberService())->getInfoByMemberId($site_id, $member_id);
$openid = $info['wx_openid'] ?? ''; $openid = $info['wx_openid'] ?? '';
$nickname = $info['nickname'] ?? ''; $nickname = $info['nickname'] ?? '';
} }
//或者还有用户的 //或者还有用户的
if(!empty($openid)){ if (!empty($openid)) {
$wechat_template_id = $template['wechat_template_id']; $wechat_template_id = $template['wechat_template_id'];
$wechat = $template['wechat']; $wechat = $template['wechat'];
$wechat_content = $wechat['content']; $wechat_content = $wechat['content'];
$wechat_data = []; $wechat_data = [];
foreach($wechat_content as $k => $v){ foreach ($wechat_content as $k => $v) {
$search_content = $v[1]; $search_content = $v[1];
foreach($vars as $item_k => $item_v){ foreach ($vars as $item_k => $item_v) {
$search_content = str_replace('{'.$item_k.'}', $item_v, $search_content); $search_content = str_replace('{' . $item_k . '}', $item_v, $search_content);
} }
$wechat_data[$v[2]] = $search_content; $wechat_data[$v[2]] = $search_content;
} }
$first = $wechat['wechat_first'] ?? ''; $first = $wechat['wechat_first'] ?? '';
$remark = $wechat['wechat_remark'] ?? ''; $remark = $wechat['wechat_remark'] ?? '';
if(!empty($first)) $vars['first'] = $first; if (!empty($first)) $vars['first'] = $first;
if(!empty($remark)) $vars['remark'] = $remark; if (!empty($remark)) $vars['remark'] = $remark;
$url = ''; //todo 拼装h5端的链接
if(!empty($url)){ $url = $vars['__wechat_page'] ?? '';
//todo 拼装h5端的链接
$url = $vars['__wechat_page'];
}
//消息日志 //消息日志
$log_data = array( $log_data = array(
'key' => $key, 'key' => $key,
@ -62,23 +60,35 @@ class Wechat
'content' => $wechat 'content' => $wechat
); );
try{ $weapp_page = $vars['__weapp_page'] ?? '';
(new TemplateLoader(NoticeTypeDict::WECHAT, ['site_id' => $site_id]))->send( if (!empty($weapp_page)) {
[ $appid = (new CoreWeappConfigService())->getWeappConfig($site_id)['app_id'] ?? '';
'template_id' => $wechat_template_id, if (!empty($appid)) {
'first' => $remark, $miniprogram = array(
'remark' => $remark, 'appid' => $appid,
'data' => $wechat_data, 'pagepath' => $weapp_page
'openid' => $openid, );
'url' => $url, }
'miniprogram' => $miniprogram ?? '', }
]); try {
$send_data = [
'template_id' => $wechat_template_id,
'first' => $remark,
'remark' => $remark,
'data' => $wechat_data,
'openid' => $openid,
'url' => $url,
];
if (!empty($miniprogram)) {
$send_data['miniprogram'] = $miniprogram;
}
(new TemplateLoader(NoticeTypeDict::WECHAT, ['site_id' => $site_id]))->send($send_data);
(new CoreNoticeLogService())->add($site_id, $log_data); (new CoreNoticeLogService())->add($site_id, $log_data);
}catch(NoticeException $e){ } catch ( NoticeException $e ) {
$log_data['result'] = $e->getMessage(); $log_data['result'] = $e->getMessage();
(new CoreNoticeLogService())->add($site_id, $log_data); (new CoreNoticeLogService())->add($site_id, $log_data);
//这儿决定要不要抛出 //这儿决定要不要抛出
if(!$template['async']){ if (!$template['async']) {
throw new NoticeException($e->getMessage()); throw new NoticeException($e->getMessage());
} }
} }

View File

@ -0,0 +1,45 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\model\applet;
use app\model\article\Article;
use core\base\BaseModel;
/**
* 小程序包 站点版本模型
*/
class AppletSiteVersion extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'applet_site_version';
/**
* 版本主表
* @return \think\model\relation\HasOne
*/
public function appletVersion()
{
return $this->hasOne( AppletVersion::class, 'id', 'version_id')->joinType('left')
->withField('desc, status, version, version_num, release_version')
->bind([ 'desc', 'status', 'version', 'version_num', 'release_version']);
}
}

View File

@ -0,0 +1,38 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\model\applet;
use app\model\article\Article;
use core\base\BaseModel;
/**
* 小程序包版本模型
*/
class AppletVersion extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'applet_version';
}

View File

@ -11,6 +11,7 @@
namespace app\model\article; namespace app\model\article;
use app\dict\sys\FileDict;
use app\model\site\Site; use app\model\site\Site;
use core\base\BaseModel; use core\base\BaseModel;
use think\db\Query; use think\db\Query;
@ -100,16 +101,31 @@ class Article extends BaseModel
} }
public function getArticleUrlAttr($value, $data) { public function getArticleUrlAttr($value, $data) {
$site = Site::find($data['site_id']);
$site_tag = $site['site_code'];
$wap_domain = !empty(env("system.wap_domain")) ? preg_replace('#/$#', '', env("system.wap_domain")) : request()->domain(); $wap_domain = !empty(env("system.wap_domain")) ? preg_replace('#/$#', '', env("system.wap_domain")) : request()->domain();
$web_domain = !empty(env("system.web_domain")) ? preg_replace('#/$#', '', env("system.web_domain")) : request()->domain(); $web_domain = !empty(env("system.web_domain")) ? preg_replace('#/$#', '', env("system.web_domain")) : request()->domain();
return [ return [
'wap_url' => $wap_domain . "/wap/" . $site_tag . "/pages/article/detail?id={$data['id']}", 'wap_url' => $wap_domain . "/wap/" . $data['site_id'] . "/pages/article/detail?id={$data['id']}",
'web_url' => $web_domain . "/web/" . $site_tag . "/article/detail?id={$data['id']}" 'web_url' => $web_domain . "/web/" . $data['site_id'] . "/article/detail?id={$data['id']}"
]; ];
} }
public function getImageThumbBigAttr($value, $data) {
if($data['image'] != ''){
return get_thumb_images($data['site_id'], $data['image'], FileDict::BIG);
}
}
public function getImageThumbMidAttr($value, $data) {
if($data['image'] != ''){
return get_thumb_images($data['site_id'], $data['image'], FileDict::MID);
}
}
public function getImageThumbSmallAttr($value, $data) {
if($data['image'] != ''){
return get_thumb_images($data['site_id'], $data['image'], FileDict::SMALL);
}
}
} }

View File

@ -136,6 +136,18 @@ class Diy extends BaseModel
} }
} }
/**
* 搜索器:页面展示模式diy自定义fixed固定
* @param $value
* @param $data
*/
public function searchModeAttr($query, $value, $data)
{
if ($value) {
$query->where("mode", $value);
}
}
/** /**
* 搜索器:自定义页面数据json格式 * 搜索器:自定义页面数据json格式
* @param $value * @param $value

View File

@ -14,6 +14,7 @@ namespace app\model\sys;
use app\dict\sys\MenuDict; use app\dict\sys\MenuDict;
use app\dict\sys\MenuTypeDict; use app\dict\sys\MenuTypeDict;
use core\base\BaseModel; use core\base\BaseModel;
use think\model\concern\SoftDelete;
/** /**
* 菜单模型 * 菜单模型
@ -22,6 +23,7 @@ use core\base\BaseModel;
*/ */
class SysMenu extends BaseModel class SysMenu extends BaseModel
{ {
use SoftDelete;
/** /**
* 数据表主键 * 数据表主键
* @var string * @var string

View File

@ -0,0 +1,44 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\applet;
use app\model\article\Article;
use app\service\core\applet\CoreAppletDownloadService;
use app\service\core\applet\CoreAppletVersionService;
use core\base\BaseAdminService;
/**
* 小程序下载服务层
*/
class AppletDownloadService extends BaseAdminService
{
public function __construct()
{
parent::__construct();
}
/**
* 小程序下载
* @param int $id
* @return \think\response\File
*/
public function download(int $id)
{
$core_applet_download_service = new CoreAppletDownloadService($id);
return $core_applet_download_service->download($this->site_id);
}
}

View File

@ -0,0 +1,124 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\applet;
use app\dict\applet\AppletlDict;
use app\dict\sys\FileDict;
use app\model\applet\AppletVersion;
use app\model\article\Article;
use app\service\core\applet\CoreAppletVersionService;
use app\service\core\upload\CoreUploadService;
use core\base\BaseAdminService;
/**
* 文章服务层
* Class ArticleService
* @package app\service\admin\article
*/
class AppletVersionService extends BaseAdminService
{
protected $core_applet_version_service;
public function __construct()
{
parent::__construct();
$this->model = new AppletVersion();
$this->core_applet_version_service = new CoreAppletVersionService;
}
/**
* 获取列表
* @param array $where
* @param string $order
*/
public function getPage(array $where = [])
{
return $this->core_applet_version_service->getPage($where);
}
/**
* 获取信息
* @param int $id
*/
public function getInfo(int $id)
{
return $this->core_applet_version_service->getInfo($id);
}
/**
* 添加
* @param array $data
* @return true
*/
public function add(array $data)
{
$data['version_num'] = version_to_int($data['version']);//版本号数字
$data['uid'] = $this->uid;//发布者
$data['status'] = AppletlDict::OFF;
$this->model->create($data);
return true;
}
/**
* 上传小程序包
* @param $file
* @return true
* @throws \Exception
*/
public function upload($file){
$core_upload_service = new CoreUploadService();
$type = FileDict::APPLET;
$dir = '/applet/'.$type.'/version/';
return $core_upload_service->document($file, $this->site_id, $type, $dir, FileDict::LOCAL);
}
/**
* 设置版本状态
* @param $id
* @param $status
* @return true
*/
public function setStatus(int $id, $status){
$data = array(
'status' => $status
);
$where = array(
['id', '=', $id]
);
$this->model->where($where)->update($data);
return true;
}
/**
* 编辑
* @param int $id
* @param array $data
*/
public function edit(int $id, array $data)
{
$data['version_num'] = version_to_int($data['version']);//版本号数字
$data['status'] = AppletlDict::OFF;
$data['update_time'] = time();
$this->model->where([['id', '=', $id]])->create($data);
return true;
}
/**
* 删除
* @param int $id
* @return true
*/
public function del(int $id){
$this->model->where([['id', '=', $id]])->delete();
return true;
}
}

View File

@ -0,0 +1,73 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\applet;
use app\dict\applet\AppletlDict;
use app\dict\sys\FileDict;
use app\model\article\Article;
use app\service\core\applet\CoreAppletSiteVersionService;
use app\service\core\applet\CoreAppletVersionService;
use app\service\core\upload\CoreUploadService;
use core\base\BaseAdminService;
/**
* 文章服务层
*/
class AppletVersionSiteService extends BaseAdminService
{
protected $core_applet_site_version_service;
public function __construct()
{
parent::__construct();
$this->core_applet_site_version_service = new CoreAppletSiteVersionService();
}
/**
* 获取列表
* @param array $where
* @return mixed
*/
public function getPage(array $where = [])
{
return $this->core_applet_site_version_service->getPage($this->site_id, $where);
}
/**
* 获取信息
* @param int $id
* @return array
*/
public function getInfo(int $id)
{
return $this->core_applet_site_version_service->getInfo($this->site_id, $id);
}
/**
* 查询最后一个下载或升级的版本
* @param string $type
* @return mixed|string
*/
public function getLastVersion(string $type){
return $this->core_applet_site_version_service->getLastVersion($this->site_id, $type);
}
/**
* 查询可升级的版本
* @param string $type
* @return null
*/
public function getUpgradeVersion(string $type){
return $this->core_applet_site_version_service->getUpgradeVersion($this->site_id, $type);
}
}

View File

@ -38,7 +38,7 @@ class ArticleService extends BaseAdminService
$where[] = [ 'site_id', '=', $this->site_id ]; $where[] = [ 'site_id', '=', $this->site_id ];
$field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time'; $field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time';
$order = 'create_time desc'; $order = 'create_time desc';
$search_model = $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ 'title', 'category_id', 'is_show'], $where)->with('articleCategory')->field($field)->order($order)->append(['article_url']); $search_model = $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ 'title', 'category_id', 'is_show'], $where)->with('articleCategory')->field($field)->order($order)->append(['article_url','image_thumb_small']);
return $this->pageQuery($search_model); return $this->pageQuery($search_model);
} }
@ -50,7 +50,7 @@ class ArticleService extends BaseAdminService
{ {
$field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time'; $field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time';
return $this->model->where([ [ 'id', '=', $id ], [ 'site_id', '=', $this->site_id ] ])->with('articleCategory')->field($field)->findOrEmpty()->toArray(); return $this->model->where([ [ 'id', '=', $id ], [ 'site_id', '=', $this->site_id ] ])->with('articleCategory')->field($field)->append(['image_thumb_small'])->findOrEmpty()->toArray();
} }
/** /**

View File

@ -36,12 +36,11 @@ class AuthService extends BaseAdminService
* @param $site_id * @param $site_id
*/ */
public function checkSiteAuth(Request $request){ public function checkSiteAuth(Request $request){
$site_code = $request->adminSiteId(); $site_id = $request->adminSiteId();
//todo 将站点编号转化为站点id //todo 将站点编号转化为站点id
$site_info = (new CoreSiteService())->getSiteInfoBySiteCode($site_code); $site_info = (new CoreSiteService())->getSiteCache($site_id);
//站点不存在 //站点不存在
if(empty($site_info)) throw new AuthException('SITE_NOT_EXIST'); if(empty($site_info)) throw new AuthException('SITE_NOT_EXIST');
$site_id = $site_info['site_id'];
//没有当前站点的信息 //没有当前站点的信息
if(!$this->getAuthRole($site_id)) throw new AuthException('NO_SITE_PERMISSION'); if(!$this->getAuthRole($site_id)) throw new AuthException('NO_SITE_PERMISSION');

View File

@ -16,7 +16,6 @@ use app\dict\diy\LinkDict;
use app\dict\diy\PagesDict; use app\dict\diy\PagesDict;
use app\dict\diy\TemplateDict; use app\dict\diy\TemplateDict;
use app\model\diy\Diy; use app\model\diy\Diy;
use app\model\site\Site;
use app\service\admin\sys\SystemService; use app\service\admin\sys\SystemService;
use core\base\BaseAdminService; use core\base\BaseAdminService;
use Exception; use Exception;
@ -45,8 +44,8 @@ class DiyService extends BaseAdminService
{ {
$where[] = [ 'site_id', '=', $this->site_id ]; $where[] = [ 'site_id', '=', $this->site_id ];
$field = 'id,site_id,title,name,template,type,mode,is_default,share,visit_count,create_time,update_time'; $field = 'id,site_id,title,name,template,type,mode,is_default,share,visit_count,create_time,update_time';
$order = "is_default desc,update_time desc"; $order = "update_time desc";
$search_model = $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ "title", "type" ], $where)->field($field)->order($order)->append([ 'type_name' ]); $search_model = $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ "title", "type", 'mode' ], $where)->field($field)->order($order)->append([ 'type_name' ]);
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
} }
@ -62,7 +61,7 @@ class DiyService extends BaseAdminService
*/ */
public function getList(array $where = [], $field = 'id,site_id,title,name,template,type,mode,is_default,share,visit_count,create_time,update_time') public function getList(array $where = [], $field = 'id,site_id,title,name,template,type,mode,is_default,share,visit_count,create_time,update_time')
{ {
$order = "is_default desc,update_time desc"; $order = "update_time desc";
$list = $this->model->where([ [ [ 'site_id', '=', $this->site_id ] ] ])->withSearch([ "title", "type", 'mode' ], $where)->field($field)->select()->order($order)->toArray(); $list = $this->model->where([ [ [ 'site_id', '=', $this->site_id ] ] ])->withSearch([ "title", "type", 'mode' ], $where)->field($field)->select()->order($order)->toArray();
return $list; return $list;
} }
@ -74,14 +73,14 @@ class DiyService extends BaseAdminService
*/ */
public function getInfo(int $id) public function getInfo(int $id)
{ {
$field = 'id,site_id,title,name,template,type,mode,value,is_default,share,visit_count'; $field = 'id,site_id,title,name,template,type,mode,value,is_default,is_change,share,visit_count';
$info = $this->model->field($field)->where([ [ 'id', '=', $id ], [ 'site_id', '=', $this->site_id ] ])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([ [ 'id', '=', $id ], [ 'site_id', '=', $this->site_id ] ])->findOrEmpty()->toArray();
return $info; return $info;
} }
public function getInfoByName(string $name) public function getInfoByName(string $name)
{ {
$field = 'id,site_id,title,name,template,type,mode,value,is_default,share,visit_count'; $field = 'id,site_id,title,name,template,type,mode,value,is_default,is_change,share,visit_count';
$info = $this->model->field($field)->where([ [ 'name', '=', $name ], [ 'site_id', '=', $this->site_id ], [ 'is_default', '=', 1 ] ])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([ [ 'name', '=', $name ], [ 'site_id', '=', $this->site_id ], [ 'is_default', '=', 1 ] ])->findOrEmpty()->toArray();
return $info; return $info;
} }
@ -188,7 +187,6 @@ class DiyService extends BaseAdminService
if (!empty($data)) { if (!empty($data)) {
// 编辑赋值 // 编辑赋值
if (isset($template[ $data[ 'type' ] ])) { if (isset($template[ $data[ 'type' ] ])) {
$page = $template[ $data[ 'type' ] ]; $page = $template[ $data[ 'type' ] ];
$data[ 'type_name' ] = $page[ 'title' ]; $data[ 'type_name' ] = $page[ 'title' ];
@ -260,8 +258,6 @@ class DiyService extends BaseAdminService
} }
$data[ 'component' ] = $this->getComponentList($data[ 'type' ]); $data[ 'component' ] = $this->getComponentList($data[ 'type' ]);
$data[ 'domain_url' ] = ( new SystemService() )->getUrl(); $data[ 'domain_url' ] = ( new SystemService() )->getUrl();
$site = Site::find($this->site_id);
$data[ 'site_id' ] = $site[ 'site_code' ];
return $data; return $data;
} }
@ -408,7 +404,7 @@ class DiyService extends BaseAdminService
foreach ($template as $k => $v) { foreach ($template as $k => $v) {
// 查询我的微页面 // 查询我的微页面
$template[ $k ][ 'my_page' ] = $this->getList([ 'type' => $k, 'mode' => 'diy' ], 'id,title,name,template,type,is_default,mode'); $template[ $k ][ 'my_page' ] = $this->getList([ 'type' => $k ], 'id,title,name,template,type,is_default,mode');
$template[ $k ][ 'domain_url' ] = ( new SystemService() )->getUrl(); $template[ $k ][ 'domain_url' ] = ( new SystemService() )->getUrl();
// 查询默认页面数据 // 查询默认页面数据
@ -432,28 +428,30 @@ class DiyService extends BaseAdminService
if (!empty($info)) { if (!empty($info)) {
$use_template[ 'id' ] = $info[ 'id' ]; $use_template[ 'id' ] = $info[ 'id' ];
$use_template[ 'title' ] = $info[ 'title' ]; $use_template[ 'title' ] = $info[ 'title' ];
$use_template[ 'template' ] = $info[ 'template' ];
// 检测模板是否存在 $use_template[ 'mode' ] = $info[ 'mode' ];
if (!empty($info[ 'template' ])) { $use_template[ 'hope' ] = $info[ 'mode' ] == 'fixed' ? 'template' : $info[ 'mode' ];
if (in_array($info[ 'template' ], array_keys($v[ 'template' ]))) {
$use_template[ 'template' ] = $info[ 'template' ];
$use_template[ 'mode' ] = $info[ 'mode' ];
$use_template[ 'hope' ] = $info[ 'mode' ] == 'fixed' ? 'template' : $info[ 'mode' ];
}
}
$use_template[ 'preview' ] = ''; // 默认图 $use_template[ 'preview' ] = ''; // 默认图
$use_template[ 'desc' ] = '通过自定义装修的页面'; $use_template[ 'desc' ] = '通过自定义装修的页面';
// 查询模板页面数 // 查询模板页面数
$page_data = $this->getPageData($k, $use_template[ 'template' ]); $page_data = $this->getPageData($k, $use_template[ 'template' ]);
if (!empty($page_data)) { if (!empty($page_data)) {
$use_template[ 'cover' ] = $page_data[ 'cover' ]; // 默认图 if ($info[ 'is_change' ] == 1) {
$use_template[ 'desc' ] = $page_data[ 'desc' ]; // 修改过模板,预览实际内容
$use_template[ 'url' ] = '/' . $v[ 'page' ] . '?id=' . $info[ 'id' ];
} else {
$use_template[ 'cover' ] = $page_data[ 'cover' ]; // 默认图
$use_template[ 'desc' ] = $page_data[ 'desc' ];
}
} else { } else {
// 自定义页面,实时预览效果 // 自定义页面,实时预览效果
$site = Site::find($this->site_id); $use_template[ 'url' ] = '/pages/index/diy?id=' . $info[ 'id' ];
$use_template[ 'url' ] = '/pages/index/diy?&mode=preview&site_id=' . $site[ 'site_code' ] . '&id=' . $info[ 'id' ]; // 清空模板信息
$use_template[ 'cover' ] = ''; // 默认图
$use_template[ 'template' ] = '';
$use_template[ 'mode' ] = 'diy';
$use_template[ 'hope' ] = $use_template[ 'mode' ];
} }
} }
$template[ $k ][ 'use_template' ] = $use_template; $template[ $k ][ 'use_template' ] = $use_template;

View File

@ -15,7 +15,7 @@
/** /**
* {CLASS_COMMENT} * {CLASS_COMMENT}
* Class {UCASE_NAME}Controller * Class {UCASE_CLASS_NAME}
* @package app\adminapi\controller{PACKAGE_NAME} * @package app\adminapi\controller{PACKAGE_NAME}
*/ */
class {UCASE_CLASS_NAME} extends BaseAdminController class {UCASE_CLASS_NAME} extends BaseAdminController

View File

@ -3,7 +3,7 @@
<el-card class="box-card !border-none" shadow="never"> <el-card class="box-card !border-none" shadow="never">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<span class="text-[24px]">{{pageName}}</span> <span class="text-[20px]">{{pageName}}</span>
<el-button type="primary" class="w-[100px]" @click="addEvent"> <el-button type="primary" class="w-[100px]" @click="addEvent">
{{ t('addArticle') }} {{ t('addArticle') }}
</el-button> </el-button>

View File

@ -17,6 +17,7 @@ use app\service\admin\sys\MenuService;
use app\service\core\menu\CoreMenuService; use app\service\core\menu\CoreMenuService;
use core\base\BaseAdminService; use core\base\BaseAdminService;
use think\facade\Cache; use think\facade\Cache;
use think\facade\Db;
/** /**
* 系统安装 * 系统安装
@ -48,7 +49,8 @@ class InstallSystemService extends BaseAdminService
$admin_menus = $this->loadMenu(AppTypeDict::ADMIN); $admin_menus = $this->loadMenu(AppTypeDict::ADMIN);
$site_menus = $this->loadMenu(AppTypeDict::SITE); $site_menus = $this->loadMenu(AppTypeDict::SITE);
$menus = array_merge($admin_menus, $site_menus); $menus = array_merge($admin_menus, $site_menus);
$sys_menu->where([ [ 'id', '>', 0 ] ])->delete(); Db::name("sys_menu")->where([ [ 'id', '>', 0 ] ])->delete();
//$sys_menu->where([ [ 'id', '>', 0 ] ])->force(true)->delete();
$sys_menu->replace()->insertAll($menus); $sys_menu->replace()->insertAll($menus);
//插件菜单 //插件菜单
(new CoreMenuService())->refreshAllAddonMenu(); (new CoreMenuService())->refreshAllAddonMenu();

View File

@ -67,7 +67,7 @@ class ScheduleService extends BaseAdminService
public function add(array $data) public function add(array $data)
{ {
$res = (new CoreScheduleService())->add($data); $res = (new CoreScheduleService())->add($data);
return $res->id; return true;
} }
@ -75,6 +75,7 @@ class ScheduleService extends BaseAdminService
* 编辑 * 编辑
* @param int $id * @param int $id
* @param array $data * @param array $data
* @return true
*/ */
public function edit(int $id, array $data) public function edit(int $id, array $data)
{ {
@ -85,9 +86,19 @@ class ScheduleService extends BaseAdminService
/** /**
* 删除 * 删除
* @param int $id * @param int $id
* @return true
*/ */
public function del(int $id) public function del(int $id)
{ {
return (new CoreScheduleService())->del($id); (new CoreScheduleService())->del($id);
return true;
}
/**
* 计划任务模板
* @return array|null
*/
public function getTemplateList(){
return (new CoreScheduleService())->getTemplateList();
} }
} }

View File

@ -46,7 +46,7 @@ class SiteService extends BaseAdminService
{ {
$field = 'site_id, site_name, front_end_name, front_end_logo, app_type, keywords, logo, icon, `desc`, status, latitude, longitude, province_id, city_id, $field = 'site_id, site_name, front_end_name, front_end_logo, app_type, keywords, logo, icon, `desc`, status, latitude, longitude, province_id, city_id,
district_id, address, full_address, phone, business_hours, create_time, expire_time, group_id, site_code'; district_id, address, full_address, phone, business_hours, create_time, expire_time, group_id';
$search_model = $this->model->where([ [ 'app_type', '<>', 'admin' ] ])->withSearch([ 'create_time', 'expire_time', 'keywords', 'status', 'group_id' ], $where)->with('groupName')->field($field)->append([ 'status_name' ])->order('create_time desc'); $search_model = $this->model->where([ [ 'app_type', '<>', 'admin' ] ])->withSearch([ 'create_time', 'expire_time', 'keywords', 'status', 'group_id' ], $where)->with('groupName')->field($field)->append([ 'status_name' ])->order('create_time desc');
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
@ -60,7 +60,7 @@ class SiteService extends BaseAdminService
public function getInfo(int $site_id) public function getInfo(int $site_id)
{ {
$field = 'site_id, site_name, front_end_name, front_end_logo, app_type, keywords, logo, icon, `desc`, status, latitude, longitude, province_id, city_id, $field = 'site_id, site_name, front_end_name, front_end_logo, app_type, keywords, logo, icon, `desc`, status, latitude, longitude, province_id, city_id,
district_id, address, full_address, phone, business_hours, create_time, expire_time, group_id, site_code'; district_id, address, full_address, phone, business_hours, create_time, expire_time, group_id';
return $this->model->where([ [ 'site_id', '=', $site_id ] ])->with('groupName')->field($field)->append([ 'status_name' ])->findOrEmpty()->toArray(); return $this->model->where([ [ 'site_id', '=', $site_id ] ])->with('groupName')->field($field)->append([ 'status_name' ])->findOrEmpty()->toArray();
} }
@ -88,7 +88,6 @@ class SiteService extends BaseAdminService
try { try {
$site = $this->model->create($data_site); $site = $this->model->create($data_site);
$site_id = $site->site_id; $site_id = $site->site_id;
$this->model->where([ [ 'site_id', '=', $site_id ] ])->update([ 'site_code' => $this->createSiteCodeBySiteId($site_id) ]);
//添加用户 //添加用户
$data_user = [ $data_user = [
'username' => $data[ 'username' ], 'username' => $data[ 'username' ],
@ -112,24 +111,6 @@ class SiteService extends BaseAdminService
} }
} }
/**
* 通过站点id生成站点code
* @param int $site_id
*/
public function createSiteCodeBySiteId(int $site_id)
{
return ( $site_id + 1000000 ) * 11 + 1;
}
/**
* 通过站点code获取站点id
* @param $site_code
*/
public function getSiteIdBySiteCode($site_code)
{
return ( $site_code - 1 ) / 11 - 1000000;
}
/** /**
* 修改站点 * 修改站点
* @param int $site_id * @param int $site_id
@ -168,7 +149,7 @@ class SiteService extends BaseAdminService
$where = [ $where = [
[ 'site_id', '=', $site_id ], [ 'site_id', '=', $site_id ],
]; ];
$site = $this->model->where($where)->field('site_id, app_type,site_name,front_end_name,front_end_logo,logo,icon,group_id, status, expire_time, site_code')->append([ 'status_name' ])->findOrEmpty(); $site = $this->model->where($where)->field('site_id, app_type,site_name,front_end_name,front_end_logo,logo,icon,group_id, status, expire_time')->append([ 'status_name' ])->findOrEmpty();
return $site->toArray(); return $site->toArray();
}, },
self::$cache_tag_name . $site_id self::$cache_tag_name . $site_id

View File

@ -40,64 +40,9 @@ class SiteStatService extends BaseAdminService
*/ */
public function getIndexData(){ public function getIndexData(){
$data = [ $data = [
'today_data' => [
'member_count' => 1,
'order_money' => 1388.5,
'visit_count' => 650,
'total_member_count' => 0,
'total_order_money' => 13851.12,
'total_visit_count' => 6580,
'total_order_count' => 29
],
'system' => [],
'version' => [],
'visit_stat' => [
'date' => [],
'value' => []
],
'member_stat' => [
'type' => ['男','女','未知'],
'value' => []
],
'site_info' => '', 'site_info' => '',
'about' => [
[
'name' => 'Niucloud官方公众号',
'image' => 'static/resource/icon/index_icon/wx_qrcode.jpg',
'desc' => '微信扫码关注'
],
[
'name' => '添加企业微信群',
'image' => 'static/resource/icon/index_icon/wework_qrcode.png',
'desc' => '更多内容请扫码加入'
]
]
]; ];
$data['today_data']['total_member_count'] = (new MemberService())->getCount([['create_time', '>=', Carbon::today()->timestamp]]);
$data['today_data']['total_order_money'] = $this->orderMoney(Carbon::today()->timestamp, time());
$data['today_data']['total_order_count'] = $this->orderCount(Carbon::today()->timestamp, time());
$data['today_data']['total_visit_count'] = (new MemberService())->getCount([['last_visit_time', '>=', Carbon::today()->timestamp]]);
$data['today_data']['today_member_visit_count'] = (new CoreMemberService())->getCount(['site_id' => $this->site_id,'last_visit_time' => get_start_and_end_time_by_day()]);
$data['total_data']['total_member_count'] = (new MemberService())->getCount();
$data['total_data']['total_order_money'] = number_format($this->orderMoney(0, time()), 2);
$data['total_data']['total_order_count'] = $this->orderCount(0, time());
$data['total_data']['total_visit_count'] = (new MemberService())->getCount();
$data['system'] = (new SystemService())->getInfo();
$data['version'] = $data['system']['version'] ?? [];
$time = time();
for ($i=1; $i<=7; $i++){
$time_data = date('Y-m-d', strtotime( '+' . $i-7 .' days', $time));
$data['visit_stat']['date'][] = $time_data;
$time_arr = get_start_and_end_time_by_day($time_data);
$data['visit_stat']['value'][] = (new MemberService())->getCount([[ '', 'exp', Db::raw('(`create_time` >= ' . $time_arr[0] . ') and (`create_time` < ' . $time_arr[1] . ')') ]]);
}
$member_count = (new MemberService())->getCount();
$man_count = (new MemberService())->getCount([ ['sex', '=', '1'] ]);
$woman_count = (new MemberService())->getCount([ ['sex', '=', '2'] ]);
$data['member_stat']['value'] = [$man_count, $woman_count, (int)($member_count - $man_count - $woman_count)];
$data['site_info'] = (new SiteService())->getInfo($this->site_id); $data['site_info'] = (new SiteService())->getInfo($this->site_id);
$site_create_time = strtotime($data['site_info']['create_time']); $site_create_time = strtotime($data['site_info']['create_time']);
$site_expire_time = strtotime($data['site_info']['expire_time']); $site_expire_time = strtotime($data['site_info']['expire_time']);

View File

@ -124,7 +124,7 @@ class AreaService extends BaseAdminService
public function getAreaId($name, $level){ public function getAreaId($name, $level){
$field = 'id'; $field = 'id';
$info = $this->model->field($field)->where([['name', 'like', '%' . $name . '%' ], ['level', '=', $level]])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['name', 'like', '%' . $name . '%' ], ['level', '=', $level]])->findOrEmpty()->toArray();
return $info; return $info['id'];
} }
/** /**

View File

@ -11,6 +11,8 @@
namespace app\service\admin\sys; namespace app\service\admin\sys;
use app\dict\sys\FileDict;
use app\dict\sys\IconDict;
use app\model\sys\SysAttachment; use app\model\sys\SysAttachment;
use app\model\sys\SysAttachmentCategory; use app\model\sys\SysAttachmentCategory;
use app\service\core\sys\CoreAttachmentService; use app\service\core\sys\CoreAttachmentService;
@ -39,7 +41,7 @@ class AttachmentService extends BaseAdminService
*/ */
public function add(array $data) public function add(array $data)
{ {
$data['site_id'] = $this->site_id; $data[ 'site_id' ] = $this->site_id;
return $this->core_attachment_service->add($data); return $this->core_attachment_service->add($data);
} }
@ -63,11 +65,11 @@ class AttachmentService extends BaseAdminService
*/ */
public function modifyCategory($att_id, $cate_id) public function modifyCategory($att_id, $cate_id)
{ {
$where = array( $where = array (
['att_id', '=', $att_id], [ 'att_id', '=', $att_id ],
['site_id', '=', $this->site_id], [ 'site_id', '=', $this->site_id ],
); );
$this->model->where($where)->update(['cate_id' => $cate_id, 'update_time' => time()]); $this->model->where($where)->update([ 'cate_id' => $cate_id, 'update_time' => time() ]);
return true; return true;
} }
@ -80,11 +82,11 @@ class AttachmentService extends BaseAdminService
public function batchModifyCategory($att_ids, $cate_id) public function batchModifyCategory($att_ids, $cate_id)
{ {
$where = array( $where = array (
['att_id', 'in', is_string($att_ids) ? explode($att_ids) : $att_ids], [ 'att_id', 'in', is_string($att_ids) ? explode($att_ids) : $att_ids ],
['site_id', '=', $this->site_id], [ 'site_id', '=', $this->site_id ],
); );
$this->model->where($where)->update(['cate_id' => $cate_id, 'update_time' => time()]); $this->model->where($where)->update([ 'cate_id' => $cate_id, 'update_time' => time() ]);
return true; return true;
} }
@ -115,19 +117,22 @@ class AttachmentService extends BaseAdminService
*/ */
public function getPage(array $data) public function getPage(array $data)
{ {
$where = array( $where = array (
['site_id', '=', $this->site_id] [ 'site_id', '=', $this->site_id ]
); );
if (!empty($data['att_type'])) { if (!empty($data[ 'att_type' ])) {
$where[] = ['att_type', '=', $data['att_type']]; $where[] = [ 'att_type', '=', $data[ 'att_type' ] ];
} }
if (!empty($data['cate_id'])) { if (!empty($data[ 'cate_id' ])) {
$where[] = ['cate_id', '=', $data['cate_id']]; $where[] = [ 'cate_id', '=', $data[ 'cate_id' ] ];
} }
if (!empty($data['real_name'])) { if (!empty($data[ 'real_name' ])) {
$where[] = ['real_name', 'like', '%' . $data['real_name'] . '%']; $where[] = [ 'real_name', 'like', '%' . $data[ 'real_name' ] . '%' ];
} }
return $this->getPageList($this->model, $where, 'att_id,path,real_name,att_type,url', 'att_id desc'); return $this->getPageList($this->model, $where, 'att_id,path,real_name,att_type,url', 'att_id desc', each:function($item, $key)
{
$item[ 'thumb' ] = get_thumb_images($this->site_id, $item[ 'url' ], FileDict::SMALL);
});
} }
/** /**
@ -136,7 +141,7 @@ class AttachmentService extends BaseAdminService
*/ */
public function addCategory(array $data) public function addCategory(array $data)
{ {
$data['site_id'] = $this->site_id; $data[ 'site_id' ] = $this->site_id;
$category_model = new SysAttachmentCategory(); $category_model = new SysAttachmentCategory();
$attachment = $category_model->create($data); $attachment = $category_model->create($data);
if (!$attachment->id) if (!$attachment->id)
@ -151,9 +156,9 @@ class AttachmentService extends BaseAdminService
*/ */
public function findCategory(int $site_id, int $id) public function findCategory(int $site_id, int $id)
{ {
$where = array( $where = array (
['site_id', '=', $site_id], [ 'site_id', '=', $site_id ],
['id', '=', $id] [ 'id', '=', $id ]
); );
$category_model = new SysAttachmentCategory(); $category_model = new SysAttachmentCategory();
$category = $category_model->where($where)->findOrEmpty(); $category = $category_model->where($where)->findOrEmpty();
@ -169,9 +174,9 @@ class AttachmentService extends BaseAdminService
*/ */
public function editCategory(int $id, array $data) public function editCategory(int $id, array $data)
{ {
$where = array( $where = array (
['site_id', '=', $this->site_id], [ 'site_id', '=', $this->site_id ],
['id', '=', $id] [ 'id', '=', $id ]
); );
$category_model = new SysAttachmentCategory(); $category_model = new SysAttachmentCategory();
return $category_model->where($where)->update($data); return $category_model->where($where)->update($data);
@ -186,7 +191,7 @@ class AttachmentService extends BaseAdminService
{ {
//查询是否有下级菜单或按钮 //查询是否有下级菜单或按钮
$category = $this->findCategory($this->site_id, $id); $category = $this->findCategory($this->site_id, $id);
if ($this->model->where([['cate_id', '=', $id]])->count() > 0) if ($this->model->where([ [ 'cate_id', '=', $id ] ])->count() > 0)
throw new AdminException('ATTACHMENT_GROUP_HAS_IMAGE'); throw new AdminException('ATTACHMENT_GROUP_HAS_IMAGE');
//下级存在图片不能删除 //下级存在图片不能删除
@ -203,16 +208,16 @@ class AttachmentService extends BaseAdminService
*/ */
public function getCategoryPage(array $data) public function getCategoryPage(array $data)
{ {
$where = array( $where = array (
['site_id', '=', $this->site_id] [ 'site_id', '=', $this->site_id ]
); );
if (!empty($data['type'])) { if (!empty($data[ 'type' ])) {
$where[] = ['type', '=', $data['type']]; $where[] = [ 'type', '=', $data[ 'type' ] ];
} }
if (!empty($data['name'])) { if (!empty($data[ 'name' ])) {
$where[] = ['name', 'like', '%' . $data['name'] . '%']; $where[] = [ 'name', 'like', '%' . $data[ 'name' ] . '%' ];
} }
return $this->getPageList((new SysAttachmentCategory()), $where, 'id,name', 'id desc'); return $this->getPageList(( new SysAttachmentCategory() ), $where, 'id,name', 'id desc');
} }
/** /**
@ -222,16 +227,90 @@ class AttachmentService extends BaseAdminService
*/ */
public function getCategoryList(array $data) public function getCategoryList(array $data)
{ {
$where = array( $where = array (
['site_id', '=', $this->site_id] [ 'site_id', '=', $this->site_id ]
); );
if (!empty($data['type'])) { if (!empty($data[ 'type' ])) {
$where[] = ['type', '=', $data['type']]; $where[] = [ 'type', '=', $data[ 'type' ] ];
} }
if (!empty($data['name'])) { if (!empty($data[ 'name' ])) {
$where[] = ['name', 'like', '%' . $data['name'] . '%']; $where[] = [ 'name', 'like', '%' . $data[ 'name' ] . '%' ];
} }
return SysAttachmentCategory::where($where)->field('id,name,type')->order('id desc')->select()->toArray(); return SysAttachmentCategory::where($where)->field('id,name,type')->order('id desc')->select()->toArray();
} }
/**
* 获取图标库分类列表
* @param array $data
* @return array|null
*/
public function getIconCategoryList(array $data)
{
$icon_list = IconDict::getIcon();
foreach ($icon_list as $k => $v) {
unset($icon_list[ $k ][ 'glyphs' ]);
if (!empty($data[ 'name' ]) && strpos($v[ 'name' ], $data[ 'name' ]) === false) {
unset($icon_list[ $k ]);
}
}
$icon_list = array_values($icon_list);
return $icon_list;
}
/**
* 获取图标库列表
* @param array $data
* @return array|null
*/
public function getIconList(array $data)
{
$icon_list = IconDict::getIcon();
$res = [
'current_page' => intval($data[ 'page' ]),
'per_page' => intval($data[ 'limit' ]),
'data' => [],
'total' => 0
];
$temp_data = [];
foreach ($icon_list as $k => $v) {
$icon = $icon_list[ $k ][ 'glyphs' ]; // 图标列表
foreach ($icon as $ck => $cv) {
// 素材表中数据保持要一致
$icon[ $ck ][ 'att_id' ] = $cv[ 'icon_id' ];
$icon[ $ck ][ 'url' ] = $icon_list[ $k ][ 'font_family' ] . '-' . $icon_list[ $k ][ 'css_prefix_text' ] . $cv[ 'font_class' ];
$icon[ $ck ][ 'real_name' ] = $cv[ 'name' ];
// 查询名称
if (!empty($data[ 'real_name' ]) && strpos($cv[ 'name' ], $data[ 'real_name' ]) === false) {
unset($icon[ $ck ]);
}
}
$icon = array_values($icon);
if (!empty($data[ 'cate_id' ]) && $data[ 'cate_id' ] == $v[ 'id' ]) {
// 查询指定分类下的图标
$temp_data = $icon;
break;
} else {
// 查询全部图标
$temp_data = array_merge($temp_data, $icon);
}
}
// 手动分页
$res[ 'total' ] = count($temp_data); // 总数量
$start = ( $res[ 'current_page' ] - 1 ) * $res[ 'per_page' ]; // 数组下标从0 开始
$icon_list = array_slice($temp_data, $start, $res[ 'per_page' ]);
$res[ 'data' ] = $icon_list;
return $res;
}
} }

View File

@ -164,6 +164,31 @@ class ConfigService extends BaseAdminService
$config['value'] = [ $config['value'] = [
'view_path' => 'index/site_index' 'view_path' => 'index/site_index'
]; ];
}else{
$result = event("SiteIndex");
$index_list = [];
foreach ($result as $k => $v)
{
$index_list = empty($index_list) ? $v: array_merge($index_list, $v);
}
$tag = 0;
$view_path = $config['value']['view_path'];
foreach ($index_list as $k => $v)
{
$v_view_path = $v['view_path'] ?? '';
if($view_path == $v_view_path)
{
$tag = 1;
break;
}
}
if($tag == 0)
{
$config['value'] = [
'view_path' => 'index/site_index'
];
}
} }
return $config['value']['view_path']; return $config['value']['view_path'];
} }
@ -235,9 +260,16 @@ class ConfigService extends BaseAdminService
$menu = $config['value'] ?? []; $menu = $config['value'] ?? [];
if(!empty($menu)){ if(!empty($menu)){
$menu_service = new MenuService(); $menu_service = new MenuService();
foreach($menu as &$v){ foreach($menu as $k => &$v){
$item_router_path = $v['router_path'] ?? ''; $menu_key = $v['menu_key'] ?? '';
if(!$item_router_path) $v['router_path'] = $menu_service->getFullRouterPath($v['menu_key']); if($menu_key != ''){
$item_router_path = $menu_service->getFullRouterPath($menu_key);
if(empty($item_router_path)){
unset($v[$k]);
}else{
$v['router_path'] = $item_router_path;
}
}
} }
} }
return $menu; return $menu;

View File

@ -380,7 +380,8 @@ class MenuService extends BaseAdminService
* @return string * @return string
*/ */
public function getFullRouterPath($menu_key){ public function getFullRouterPath($menu_key){
$menu = $this->find($menu_key); $menu = $this->model->where([['menu_key', '=', $menu_key]])->findOrEmpty($menu_key);
if($menu->isEmpty()) return '';
$parents = []; $parents = [];
$this->getParentDirectory($menu, $parents); $this->getParentDirectory($menu, $parents);
$parents = array_reverse($parents); $parents = array_reverse($parents);

View File

@ -48,16 +48,13 @@ class SystemService extends BaseAdminService
*/ */
public function getUrl() public function getUrl()
{ {
$site = Site::find($this->site_id);
$site_tag = $site[ 'site_code' ];
$wap_domain = !empty(env("system.wap_domain")) ? preg_replace('#/$#', '', env("system.wap_domain")) : request()->domain(); $wap_domain = !empty(env("system.wap_domain")) ? preg_replace('#/$#', '', env("system.wap_domain")) : request()->domain();
$web_domain = !empty(env("system.web_domain")) ? preg_replace('#/$#', '', env("system.web_domain")) : request()->domain(); $web_domain = !empty(env("system.web_domain")) ? preg_replace('#/$#', '', env("system.web_domain")) : request()->domain();
$data = [ $data = [
'wap_domain' => env("system.wap_domain"), 'wap_domain' => env("system.wap_domain"),
'wap_url' => $wap_domain . "/wap/" . $site_tag, 'wap_url' => $wap_domain . "/wap/" . $this->site_id,
'web_url' => $web_domain . "/web/" . $site_tag, 'web_url' => $web_domain . "/web/" . $this->site_id,
]; ];
return $data; return $data;
} }

View File

@ -9,7 +9,7 @@
// | Author: Niucloud Team // | Author: Niucloud Team
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace app\service\admin\file; namespace app\service\admin\upload;
use app\dict\sys\StorageDict; use app\dict\sys\StorageDict;
use app\service\core\upload\CoreStorageService; use app\service\core\upload\CoreStorageService;

View File

@ -9,7 +9,7 @@
// | Author: Niucloud Team // | Author: Niucloud Team
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace app\service\admin\file; namespace app\service\admin\upload;
use app\model\sys\SysConfig; use app\model\sys\SysConfig;
use app\service\core\upload\CoreUploadConfigService; use app\service\core\upload\CoreUploadConfigService;

View File

@ -9,7 +9,7 @@
// | Author: Niucloud Team // | Author: Niucloud Team
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace app\service\admin\file; namespace app\service\admin\upload;
use app\dict\sys\FileDict; use app\dict\sys\FileDict;
use app\dict\sys\StorageDict; use app\dict\sys\StorageDict;
@ -29,8 +29,8 @@ class UploadService extends BaseAdminService
/** /**
* 附件库上传图片 * 附件库上传图片
* @param $file
* @param int $cate_id * @param int $cate_id
* @param string $dir
* @return array * @return array
*/ */
public function image($file, int $cate_id = 0){ public function image($file, int $cate_id = 0){
@ -55,14 +55,14 @@ class UploadService extends BaseAdminService
/** /**
* 文件上传 * 文件上传
* @param $file * @param $file
* @param bool $is_local * @param string $type
* @return array * @return array
*/ */
public function document($file, string $type,bool $is_local = false){ public function document($file, string $type){
if(!in_array($type, FileDict::getSceneType())) if(!in_array($type, FileDict::getSceneType()))
throw new UploadFileException('CERT_TYPE_ERROR'); throw new UploadFileException('UPLOAD_TYPE_ERROR');
$dir = $this->root_path.'/document/'.$type.'/'.$this->site_id.'/'.date('Ym').'/'.date('d'); $dir = $this->root_path.'/document/'.$type.'/'.$this->site_id.'/'.date('Ym').'/'.date('d');
$core_upload_service = new CoreUploadService(); $core_upload_service = new CoreUploadService();
return $core_upload_service->document($file, $this->site_id, $type, $dir, StorageDict::LOCAL, true); return $core_upload_service->document($file, $this->site_id, $type, $dir, StorageDict::LOCAL);
} }
} }

View File

@ -0,0 +1,35 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\weapp;
use app\model\sys\SysMenu;
use app\service\core\weapp\CoreWeappConfigService;
use core\base\BaseAdminService;
/**
* 小程序包版本发布
*/
class WeappPackageService extends BaseAdminService
{
public function __construct()
{
parent::__construct();
$this->model = new Applet();
}
public function add(array $data)
{
$data['version_num'] = version_to_int($data['version']);//版本号数字
$data['u'] = $this->uid;//发布者
$data['status'] = '';
}
}

View File

@ -69,15 +69,15 @@ class WeappTemplateService extends BaseAdminService
public function syncItem($item){ public function syncItem($item){
$key = $item['key'] ?? ''; $key = $item['key'] ?? '';
$weapp = $item['weapp'] ?? []; $weapp = $item['weapp'] ?? [];
$temp_key = $weapp['temp_key'] ?? ''; $tid = $weapp['tid'] ?? '';
if(empty($temp_key)) $error = 'WECHAT_TEMPLATE_NEED_NO'; if(empty($tid)) $error = 'WECHAT_TEMPLATE_NEED_NO';
$weapp_template_id = $item['weapp_template_id']; $weapp_template_id = $item['weapp_template_id'];
//删除原来的消息模板 //删除原来的消息模板
$template_loader = (new TemplateLoader(NoticeTypeDict::WEAPP, ['site_id' => $this->site_id])); $template_loader = (new TemplateLoader(NoticeTypeDict::WEAPP, ['site_id' => $this->site_id]));
$template_loader->delete(['template_id' => $weapp_template_id ]); $template_loader->delete(['template_id' => $weapp_template_id ]);
// (new CoreWeappTemplateService())->deleteTemplate($this->site_id, $weapp_template_id); // (new CoreWeappTemplateService())->deleteTemplate($this->site_id, $weapp_template_id);
//新的消息模板 //新的消息模板
$tid = $weapp['tid'] ?? '';
$kid_list = $weapp['kid_list'] ?? []; $kid_list = $weapp['kid_list'] ?? [];
$scene_desc = $weapp['scene_desc'] ?? ''; $scene_desc = $weapp['scene_desc'] ?? '';
// $res = (new CoreWeappTemplateService())->addTemplate($this->site_id, $tid, $kid_list, $scene_desc); // $res = (new CoreWeappTemplateService())->addTemplate($this->site_id, $tid, $kid_list, $scene_desc);

View File

@ -38,7 +38,7 @@ class ArticleService extends BaseApiService
$where[] = [ 'site_id', '=', $this->site_id ]; $where[] = [ 'site_id', '=', $this->site_id ];
$field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time'; $field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time';
$order = 'create_time desc'; $order = 'create_time desc';
$search_model = $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ 'title', 'category_id'], $where)->with('articleCategory')->field($field)->order($order); $search_model = $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ 'title', 'category_id'], $where)->with('articleCategory')->field($field)->order($order)->append(['image_thumb_mid']);
return $this->pageQuery($search_model); return $this->pageQuery($search_model);
} }
@ -54,7 +54,7 @@ class ArticleService extends BaseApiService
$where[] = [ 'site_id', '=', $this->site_id ]; $where[] = [ 'site_id', '=', $this->site_id ];
$field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time'; $field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time';
$order = 'create_time desc'; $order = 'create_time desc';
return $this->model->where([ [ 'site_id', '=', $this->site_id ] , ['is_show', '=', 1]])->withSearch([ 'title', 'category_id', 'ids' ], $where)->limit($limit)->with('articleCategory')->field($field)->order($order)->select()->toArray(); return $this->model->where([ [ 'site_id', '=', $this->site_id ] , ['is_show', '=', 1]])->withSearch([ 'title', 'category_id', 'ids' ], $where)->limit($limit)->with('articleCategory')->field($field)->append(['image_thumb_mid'])->order($order)->select()->toArray();
} }
/** /**
@ -65,7 +65,7 @@ class ArticleService extends BaseApiService
{ {
$field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time'; $field = 'id, category_id, site_id, title, intro, summary, image, author, content, visit, visit_virtual, is_show, sort, create_time, update_time';
return $this->model->with('articleCategory')->field($field)->where([ [ 'id', '=', $id ], [ 'site_id', '=', $this->site_id ] ])->findOrEmpty()->toArray(); return $this->model->with('articleCategory')->field($field)->where([ [ 'id', '=', $id ], [ 'site_id', '=', $this->site_id ] ])->append(['image_thumb_big'])->findOrEmpty()->toArray();
} }
} }

View File

@ -50,14 +50,13 @@ class AuthService extends BaseApiService
* @return true * @return true
*/ */
public function checkSite(Request $request){ public function checkSite(Request $request){
$site_code = $request->apiSiteId();//todo 可以是依赖传值,也可以通过domain域名来获取site_id $site_id = $request->apiSiteId();//todo 可以是依赖传值,也可以通过domain域名来获取site_id
$site_info = (new CoreSiteService())->getSiteInfoBySiteCode($site_code); $site_info = (new CoreSiteService())->getSiteCache($site_id);
if(empty($site_info)) throw new AuthException('SITE_NOT_EXIST'); if(empty($site_info)) throw new AuthException('SITE_NOT_EXIST');
if($site_info['status'] == SiteDict::CLOSE){ if($site_info['status'] == SiteDict::CLOSE){
$rule = trim(strtolower($request->rule()->getRule())); $rule = trim(strtolower($request->rule()->getRule()));
if($rule != 'site') throw new AuthException('SITE_CLOSE_NOT_ALLOW'); if($rule != 'site') throw new AuthException('SITE_CLOSE_NOT_ALLOW');
} }
$site_id = $site_info['site_id'];
$request->siteId($site_id); $request->siteId($site_id);
return true; return true;
} }

View File

@ -11,6 +11,7 @@
namespace app\service\api\notice; namespace app\service\api\notice;
use app\model\sys\SysNotice;
use core\base\BaseApiService; use core\base\BaseApiService;
/** /**
@ -36,4 +37,14 @@ class NoticeService extends BaseApiService
{ {
return ( new \app\service\core\notice\NoticeService() )->send($this->site_id, $key, $data); return ( new \app\service\core\notice\NoticeService() )->send($this->site_id, $key, $data);
} }
/**
* 获取微信小程序订阅消息模板id
* @param string $keywords
* @return void
*/
public function getWeappNoticeTemplateId(string $keys) {
$column = (new SysNotice())->where([ ['site_id', '=', $this->site_id], ['key', 'in', explode(',', $keys) ], ['weapp_template_id', '<>', ''], ['is_weapp', '=', 1] ])->column('weapp_template_id');
return $column;
}
} }

View File

@ -11,9 +11,11 @@
namespace app\service\api\upload; namespace app\service\api\upload;
use app\dict\sys\FileDict;
use app\dict\sys\StorageDict; use app\dict\sys\StorageDict;
use app\service\core\upload\CoreUploadService; use app\service\core\upload\CoreUploadService;
use core\base\BaseApiService; use core\base\BaseApiService;
use core\exception\UploadFileException;
/** /**
* 用户服务层 * 用户服务层
@ -54,13 +56,14 @@ class UploadService extends BaseApiService
/** /**
* 文件上传 * 文件上传
* @param $file * @param $file
* @param bool $is_local
* @return array * @return array
*/ */
public function document($file, bool $is_local = false) public function document($file, string $type = '')
{ {
$dir = $this->root_path . '/' . 'document' . '/' . $this->site_id . '/' . date('Ym') . '/' . date('d'); if(!in_array($type, FileDict::getSceneType()))
throw new UploadFileException('UPLOAD_TYPE_ERROR');
$dir = $this->root_path.'/document/'.$type.'/'.$this->site_id.'/'.date('Ym').'/'.date('d');
$core_upload_service = new CoreUploadService(); $core_upload_service = new CoreUploadService();
return $core_upload_service->document($file, $this->site_id, '', $dir, StorageDict::LOCAL); return $core_upload_service->document($file, $this->site_id, $type, $dir, StorageDict::LOCAL);
} }
} }

View File

@ -40,13 +40,13 @@ class CoreAddonInstallService extends CoreAddonBaseService
'wap' => [], 'wap' => [],
'resource' => [] 'resource' => []
]; ];
//安装流程
// 安装流程
private $flow_path = [ private $flow_path = [
'file', 'file',
'sql', 'sql',
'menu', 'menu',
'diy', 'diy'
''
]; ];
/** /**
@ -60,12 +60,12 @@ class CoreAddonInstallService extends CoreAddonBaseService
]; ];
private $addon; private $addon;
private $install_addon_path;//待安装的插件目录 private $install_addon_path;// 待安装的插件目录
//对象实例 // 对象实例
public static $instance; public static $instance;
//状态关键字 // 状态关键字
const WAIT_INSTALL = 'wait_install'; const WAIT_INSTALL = 'wait_install';
const DIR_INSTALLED = 'dir_installed'; const DIR_INSTALLED = 'dir_installed';
@ -73,6 +73,7 @@ class CoreAddonInstallService extends CoreAddonBaseService
const SQL_INSTALLED = 'sql_installed'; const SQL_INSTALLED = 'sql_installed';
const MENU_INSTALLED = 'menu_installed'; const MENU_INSTALLED = 'menu_installed';
const SCHEDULE_INSTALLED = 'schedule_installed'; const SCHEDULE_INSTALLED = 'schedule_installed';
const WAIT_DEPEND = 'wait_depend'; const WAIT_DEPEND = 'wait_depend';
@ -101,7 +102,6 @@ class CoreAddonInstallService extends CoreAddonBaseService
return self::$instance; return self::$instance;
} }
public function __construct($addon) public function __construct($addon)
{ {
parent::__construct(); parent::__construct();
@ -122,11 +122,13 @@ class CoreAddonInstallService extends CoreAddonBaseService
$from_web_dir = $this->install_addon_path . "web" . DIRECTORY_SEPARATOR; $from_web_dir = $this->install_addon_path . "web" . DIRECTORY_SEPARATOR;
$from_wap_dir = $this->install_addon_path . "uni-app" . DIRECTORY_SEPARATOR; $from_wap_dir = $this->install_addon_path . "uni-app" . DIRECTORY_SEPARATOR;
$from_resource_dir = $this->install_addon_path . "resource" . DIRECTORY_SEPARATOR; $from_resource_dir = $this->install_addon_path . "resource" . DIRECTORY_SEPARATOR;
// 放入的文件 // 放入的文件
$to_admin_dir = $this->root_path . "admin" . DIRECTORY_SEPARATOR; $to_admin_dir = $this->root_path . "admin" . DIRECTORY_SEPARATOR;
$to_web_dir = $this->root_path . "web" . DIRECTORY_SEPARATOR; $to_web_dir = $this->root_path . "web" . DIRECTORY_SEPARATOR;
$to_wap_dir = $this->root_path . "uni-app" . DIRECTORY_SEPARATOR; $to_wap_dir = $this->root_path . "uni-app" . DIRECTORY_SEPARATOR;
$to_resource_dir = public_path() . "addon" . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR; $to_resource_dir = public_path() . "addon" . DIRECTORY_SEPARATOR . $this->addon . DIRECTORY_SEPARATOR;
// 配置文件 // 配置文件
$package_path = $this->install_addon_path . 'package' . DIRECTORY_SEPARATOR; $package_path = $this->install_addon_path . 'package' . DIRECTORY_SEPARATOR;
$package_file = []; $package_file = [];
@ -172,7 +174,7 @@ class CoreAddonInstallService extends CoreAddonBaseService
array_column($data[ 'runtime' ], 'status'), array_column($data[ 'runtime' ], 'status'),
[ $data[ 'job_normal' ] ] [ $data[ 'job_normal' ] ]
); );
if (count($data['conflict_files'])) array_push($check_res, false); if (count($data[ 'conflict_files' ])) array_push($check_res, false);
// 是否通过校验 // 是否通过校验
$data[ 'is_pass' ] = !in_array(false, $check_res); $data[ 'is_pass' ] = !in_array(false, $check_res);
@ -216,7 +218,6 @@ class CoreAddonInstallService extends CoreAddonBaseService
} }
} }
//检测wap的uniapp文件 //检测wap的uniapp文件
if (is_dir($from_wap_dir)) { if (is_dir($from_wap_dir)) {
search_dir($from_wap_dir, $this->install_files[ "wap" ]); search_dir($from_wap_dir, $this->install_files[ "wap" ]);
@ -441,6 +442,7 @@ class CoreAddonInstallService extends CoreAddonBaseService
$from_web_dir = $this->install_addon_path . "web" . DIRECTORY_SEPARATOR; $from_web_dir = $this->install_addon_path . "web" . DIRECTORY_SEPARATOR;
$from_wap_dir = $this->install_addon_path . "uni-app" . DIRECTORY_SEPARATOR; $from_wap_dir = $this->install_addon_path . "uni-app" . DIRECTORY_SEPARATOR;
$from_resource_dir = $this->install_addon_path . "resource" . DIRECTORY_SEPARATOR; $from_resource_dir = $this->install_addon_path . "resource" . DIRECTORY_SEPARATOR;
// 放入的文件 // 放入的文件
$to_admin_dir = $this->root_path . "admin" . DIRECTORY_SEPARATOR; $to_admin_dir = $this->root_path . "admin" . DIRECTORY_SEPARATOR;
$to_web_dir = $this->root_path . "web" . DIRECTORY_SEPARATOR; $to_web_dir = $this->root_path . "web" . DIRECTORY_SEPARATOR;
@ -450,6 +452,8 @@ class CoreAddonInstallService extends CoreAddonBaseService
// 安装admin管理端 // 安装admin管理端
if (file_exists($from_admin_dir)) { if (file_exists($from_admin_dir)) {
dir_copy($from_admin_dir, $to_admin_dir, $this->files[ 'admin' ]); dir_copy($from_admin_dir, $to_admin_dir, $this->files[ 'admin' ]);
// 编译后台图标库文件
$this->compileAdminIcon();
} }
// 安装电脑端 // 安装电脑端
@ -466,6 +470,7 @@ class CoreAddonInstallService extends CoreAddonBaseService
if (file_exists($from_resource_dir)) { if (file_exists($from_resource_dir)) {
dir_copy($from_resource_dir, $to_resource_dir, $this->files[ 'resource' ]); dir_copy($from_resource_dir, $to_resource_dir, $this->files[ 'resource' ]);
} }
$this->state = self::DIR_INSTALLED; $this->state = self::DIR_INSTALLED;
return true; return true;
} }
@ -502,7 +507,6 @@ class CoreAddonInstallService extends CoreAddonBaseService
} }
} }
Db::commit(); Db::commit();
// 返回订单信息
return true; return true;
} catch (PDOException $e) { } catch (PDOException $e) {
Db::rollback(); Db::rollback();
@ -559,16 +563,20 @@ class CoreAddonInstallService extends CoreAddonBaseService
if (empty($core_addon_service->getInfoByKey($this->addon))) throw new AddonException('NOT_UNINSTALL'); if (empty($core_addon_service->getInfoByKey($this->addon))) throw new AddonException('NOT_UNINSTALL');
if (!$this->uninstallSql()) throw new AddonException(); if (!$this->uninstallSql()) throw new AddonException();
if (!$this->uninstallDir()) throw new AddonException(); if (!$this->uninstallDir()) throw new AddonException();
// 卸载菜单 // 卸载菜单
$this->uninstallMenu(); $this->uninstallMenu();
// 卸载计划任务 // 卸载计划任务
$this->uninstallSchedule(); $this->uninstallSchedule();
// 卸载wap // 卸载wap
$this->uninstallWap(); $this->uninstallWap();
$core_addon_service = new CoreAddonService(); $core_addon_service = new CoreAddonService();
$core_addon_service->delByKey($this->addon); $core_addon_service->delByKey($this->addon);
Cache::set("local_install_addons", []); Cache::set("local_install_addons", []);
//清理缓存 //清理缓存
Cache::tag(self::$cache_tag_name)->clear(); Cache::tag(self::$cache_tag_name)->clear();
return true; return true;
@ -585,12 +593,10 @@ class CoreAddonInstallService extends CoreAddonBaseService
$from_web_dir = $this->install_addon_path . "web" . DIRECTORY_SEPARATOR; $from_web_dir = $this->install_addon_path . "web" . DIRECTORY_SEPARATOR;
$from_wap_dir = $this->install_addon_path . "uni-app" . DIRECTORY_SEPARATOR; $from_wap_dir = $this->install_addon_path . "uni-app" . DIRECTORY_SEPARATOR;
search_dir($from_admin_dir, $from_admin_dirs, $from_admin_dir); search_dir($from_admin_dir, $from_admin_dirs, $from_admin_dir);
search_dir($from_web_dir, $from_web_dirs, $from_web_dir); search_dir($from_web_dir, $from_web_dirs, $from_web_dir);
search_dir($from_wap_dir, $from_wap_dirs, $from_wap_dir); search_dir($from_wap_dir, $from_wap_dirs, $from_wap_dir);
// 将要删除的根目录 // 将要删除的根目录
$to_admin_dir = $this->root_path . "admin" . DIRECTORY_SEPARATOR; $to_admin_dir = $this->root_path . "admin" . DIRECTORY_SEPARATOR;
$to_web_dir = $this->root_path . "web" . DIRECTORY_SEPARATOR; $to_web_dir = $this->root_path . "web" . DIRECTORY_SEPARATOR;
@ -600,6 +606,8 @@ class CoreAddonInstallService extends CoreAddonBaseService
// 卸载admin管理端 // 卸载admin管理端
if (file_exists($from_admin_dir)) { if (file_exists($from_admin_dir)) {
dir_remove($to_admin_dir, $from_admin_dirs ?? []); dir_remove($to_admin_dir, $from_admin_dirs ?? []);
// 编译后台图标库文件
$this->compileAdminIcon();
} }
// 卸载pc端 // 卸载pc端
@ -772,7 +780,7 @@ class CoreAddonInstallService extends CoreAddonBaseService
*/ */
public function installSchedule() public function installSchedule()
{ {
( new CoreScheduleInstallService())->installAddonSchedule($this->addon); ( new CoreScheduleInstallService() )->installAddonSchedule($this->addon);
$this->state = self::SCHEDULE_INSTALLED; $this->state = self::SCHEDULE_INSTALLED;
return true; return true;
} }
@ -783,7 +791,32 @@ class CoreAddonInstallService extends CoreAddonBaseService
*/ */
public function uninstallSchedule() public function uninstallSchedule()
{ {
( new CoreScheduleInstallService())->uninstallAddonSchedule($this->addon); ( new CoreScheduleInstallService() )->uninstallAddonSchedule($this->addon);
return true;
}
/**
* 编译后台图标库文件
* 图标开发注意事项,不能占用 iconfont、icon 关键词(会跟系统图标冲突),建议增加业务前缀,比如 旅游业tourism
* @return bool
*/
public function compileAdminIcon()
{
$compile_path = $this->root_path . str_replace('/', DIRECTORY_SEPARATOR, 'admin/src/styles/icon/');
$content = "";
$root_path = $compile_path . 'addon'; // 插件图标根目录
$file_arr = getFileMap($root_path);
if (!empty($file_arr)) {
foreach ($file_arr as $ck => $cv) {
if (strpos($cv, '.css') !== false) {
$path = str_replace($root_path . '/', '', $ck);
$path = str_replace('/.css', '', $path);
$content .= "@import \"addon/{$path}\";\n";
}
}
}
$res = file_put_contents($compile_path . 'addon-iconfont.css', $content);
return true; return true;
} }

View File

@ -35,6 +35,7 @@ trait WapTrait
$content .= " <view v-for=\"(component, index) in data.value\" :key=\"component.id\"\n"; $content .= " <view v-for=\"(component, index) in data.value\" :key=\"component.id\"\n";
$content .= " @click=\"diyStore.changeCurrentIndex(index, component)\" class=\"draggable-element relative cursor-move\"\n"; $content .= " @click=\"diyStore.changeCurrentIndex(index, component)\" class=\"draggable-element relative cursor-move\"\n";
$content .= " :class=\"{ selected: diyStore.currentIndex == index,decorate : diyStore.mode == 'decorate' }\" :style=\"component.pageStyle\">\n"; $content .= " :class=\"{ selected: diyStore.currentIndex == index,decorate : diyStore.mode == 'decorate' }\" :style=\"component.pageStyle\">\n";
$content .= " <fixed-group :component=\"component\" :index=\"index\" :pullDownRefresh=\"props.pullDownRefresh\"></fixed-group>\n";
$root_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'components/diy'); // 扩展组件根目录 $root_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'components/diy'); // 扩展组件根目录
$file_arr = getFileMap($root_path); $file_arr = getFileMap($root_path);
@ -58,9 +59,9 @@ trait WapTrait
$name = implode('', $name_arr); $name = implode('', $name_arr);
$file_name = 'diy-' . $path; $file_name = 'diy-' . $path;
$content .= " <template v-if=\"component.componentName == '{$name}'\">\n"; $content .= " <template v-if=\"component.componentName == '{$name}'\">\n";
$content .= " <$file_name :component=\"component\" :index=\"index\"></$file_name>\n"; $content .= " <$file_name :component=\"component\" :index=\"index\" :pullDownRefresh=\"props.pullDownRefresh\"></$file_name>\n";
$content .= " </template>\n"; $content .= " </template>\n";
} }
} }
} }
@ -75,11 +76,11 @@ trait WapTrait
$content .= "<script lang=\"ts\" setup>\n"; $content .= "<script lang=\"ts\" setup>\n";
$content .= " import useDiyStore from '@/stores/diy';\n"; $content .= " import useDiyStore from '@/stores/diy';\n";
$content .= " import { onMounted, nextTick, computed, ref } from 'vue';\n"; $content .= " import { onMounted, nextTick, computed, ref,watch } from 'vue';\n";
$content .= " import Sortable from 'sortablejs';\n"; $content .= " import Sortable from 'sortablejs';\n";
$content .= " import { range } from 'lodash-es';\n"; $content .= " import { range } from 'lodash-es';\n";
$content .= " const props = defineProps(['data']);\n"; $content .= " const props = defineProps(['data','pullDownRefresh']);\n";
$content .= " const diyStore = useDiyStore();\n\n"; $content .= " const diyStore = useDiyStore();\n\n";
$content .= " const data = computed(() => {\n"; $content .= " const data = computed(() => {\n";
@ -161,8 +162,8 @@ trait WapTrait
$name = implode('', $name_arr); $name = implode('', $name_arr);
$file_name = 'fixed-' . $path; $file_name = 'fixed-' . $path;
$content .= " <template v-if=\"data.component == '{$name}'\">\n"; $content .= " <template v-if=\"props.component.componentName == '{$name}'\">\n";
$content .= " <$file_name :data=\"data\"></$file_name>\n"; $content .= " <$file_name :component=\"props.component\" :index=\"props.index\" :pullDownRefresh=\"props.pullDownRefresh\"></$file_name>\n";
$content .= " </template>\n"; $content .= " </template>\n";
} }
} }
@ -172,12 +173,8 @@ trait WapTrait
$content .= "</template>\n"; $content .= "</template>\n";
$content .= "<script lang=\"ts\" setup>\n"; $content .= "<script lang=\"ts\" setup>\n";
$content .= " import { computed } from 'vue';\n"; $content .= " import { computed,watch } from 'vue';\n";
$content .= " const props = defineProps(['data']);\n"; $content .= " const props = defineProps(['component','index','pullDownRefresh']);\n";
$content .= " const data = computed(() => {\n";
$content .= " return props.data.value;\n";
$content .= " })\n\n";
$content .= "</script>\n"; $content .= "</script>\n";
$content .= "<style lang=\"scss\" scoped>\n"; $content .= "<style lang=\"scss\" scoped>\n";
@ -189,7 +186,7 @@ trait WapTrait
} }
/** /**
* 编译 pages.json 页面路由代码文件 * 编译 pages.json 页面路由代码文件// {{PAGE}}
* @param $compile_path * @param $compile_path
* @return bool|int|void * @return bool|int|void
*/ */

View File

@ -0,0 +1,106 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\core\applet;
use app\dict\applet\AppletlDict;
use app\service\core\applet\CoreAppletVersionService;
use core\base\BaseCoreService;
use core\exception\CommonException;
/**
* 小程序包下载
*/
class CoreAppletDownloadService extends BaseCoreService
{
protected $replace;//替换文件以及替换的文本变量
protected $version;//版本号
protected $version_id;//版本id
protected $type;//小程序类型
protected $path;
protected $root_path = 'upload';
public function __construct(string $version_id)
{
parent::__construct();
//查询这个版本的信息
$version_info = (new CoreAppletVersionService())->getInfo($version_id);
if(empty($version_info)) throw new CommonException();//不存在的版本
$this->version_id = $version_id;
$this->version = $version_info['version'];
$this->type = $version_info['type'];
$this->path = $version_info['path'];
}
public function setReplace($replace)
{
$this->replace = $replace;
// [
// [
// 'path' => '',
// 'variable' => [
// 'site_name' => '牛'
// ]
// ]
// ];
return $this;
}
/**
* 下载小程序包
* @param int $site_id
* @return \think\response\File
*/
public function download(int $site_id)
{
$zip = new \ZipArchive;
$file_name = $site_id.'.zip';
$dir = $this->root_path .'/applet/'. $this->type.'/'.$this->version.'/';
//新生成一个当前站点这个版本的压缩包,如果已存在就直接下载
$file = $dir.$file_name;
if(!file_exists($file)){
if(!copy($this->path, $file)) throw new CommonException();//文件拷贝失败
if ($zip->open($file) === true) {
//编译
$this->compile($zip);
//关闭
$zip->close();
} else {
throw new CommonException();
}
}
//新增下载记录
(new CoreAppletSiteVersionService())->add($site_id, $this->version_id, AppletlDict::DOWNLOAD);
return download($file, $this->version);
}
/**
* 编译替换
* @param $zip
* @return void
*/
public function compile($zip)
{
foreach ($this->replace as $k => $v) {
$item_path = $v['path'];
$item_variable = $v['variable'];
//Read contents into memory
$old_contents = $zip->getFromName($item_path);
//Modify contents:
foreach($item_variable as $variable_k => $variable_v){
$new_contents = str_replace($variable_k, $variable_v, $old_contents);
}
//Delete the old...
$zip->deleteName($item_path);
//Write the new...
$zip->addFromString($item_path, $new_contents);
}
}
}

View File

@ -0,0 +1,118 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\core\applet;
use app\dict\applet\AppletlDict;
use app\dict\sys\FileDict;
use app\model\applet\AppletSiteVersion;
use app\model\applet\AppletVersion;
use app\service\core\upload\CoreUploadService;
use core\base\BaseCoreService;
use core\exception\CommonException;
/**
* 小程序包 站点
*/
class CoreAppletSiteVersionService extends BaseCoreService
{
public function __construct()
{
parent::__construct();
$this->model = new AppletSiteVersion();
}
/**
* 版本升级列表
* @param int $site_id
* @param array $where
* @return mixed
*/
public function getPage(int $site_id, array $where = [])
{
if ($site_id > 0) {
$where[] = ['site_id', '=', $site_id];
}
$field = 'id, site_id, version_id, type, action, version, version_num, create_time';
$search_model = $this->model->where($where)->field($field)->order('version_num desc')->with(['appletVersion']);
return $this->pageQuery($search_model);
}
/**
* 获取版本升级信息
* @param int $id
*/
public function getInfo(int $site_id, int $id)
{
$field = 'id, site_id, version_id, type, action, version, version_num, create_time';
return $this->model->where([['id', '=', $id], ['site_id', '=', $site_id]])->field($field)->with(['appletVersion'])->findOrEmpty()->toArray();
}
/**
* 添加版本升级记录
* @param int $site_id
* @param string $action
* @param array $data
* @return true
*/
public function add(int $site_id, int $version_id, string $action)
{
$version_info = (new CoreAppletVersionService())->getInfo($version_id);
if ($version_info) throw new CommonException('APPLET_VERSION_NOT_EXISTS');
$data['site_id'] = $site_id;
$data['type'] = $version_info['type'];
$data['create_time'] = time();
$data['version_id'] = $version_info['id'];
$data['action'] = $action;//操作方式
$this->model->create($data);
return true;
}
/**
* 获取最后一个下载或升级的版本
* @param int $site_id
* @param string $type
* @param string $action
* @return mixed|string
*/
public function getLastVersion(int $site_id, string $type, string $action = '')
{
$where = [['site_id', '=', $site_id], ['type', '=', $type]];
$list = $this->model->where($where)->with(['appletVersion'])->select()->toArray();
$list = array_column($list, null, 'version_num');
ksort($list);
$site_version = reset($list);
return $site_version['version'] ?? '';
}
/**
* 获取当前站点最新可升级的小程序版本
* @param int $site_id
* @param string $type
* @return void
*/
public function getUpgradeVersion(int $site_id, string $type)
{
//查询下一次升级或下载的版本
$version = $this->getLastVersion($site_id, $type);
$where = [['type', '=', $type]];
if (!$version) {
$version_num = version_to_int($version);
$where[] = ['version_num', '>', $version_num];
}
//查询比这个版本号大的版本号
return (new AppletVersion())->where($where)->order('version_num desc')->findOrEmpty();
}
}

View File

@ -0,0 +1,67 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\core\applet;
use app\dict\applet\AppletlDict;
use app\dict\sys\FileDict;
use app\model\applet\AppletVersion;
use app\service\core\upload\CoreUploadService;
use core\base\BaseCoreService;
use core\exception\CommonException;
/**
* 小程序包发布版本
*/
class CoreAppletVersionService extends BaseCoreService
{
public function __construct()
{
parent::__construct();
$this->model = new AppletVersion();
}
/**
* 获取版本列表
* @param array $where
* @param string $order
*/
public function getPage(array $where = [])
{
$field = 'id, site_id, type, uid, version, version_num, path, create_time, update_time,desc, config';
$search_model = $this->model->where($where)->field($field)->order('create_time desc');
return $this->pageQuery($search_model);
}
/**
* 获取版本信息
* @param int $id
*/
public function getInfo(int $id)
{
$field = 'id, site_id, type, uid, version, version_num, path, create_time, update_time,desc, config';
return $this->model->where([[ 'id', '=', $id ]])->field($field)->findOrEmpty()->toArray();
}
/**
* 通过版本号查询版本内容
* @param string $version
* @return array
*/
public function getInfoByVersion(string $version, string $type){
return $this->model->where([['version', '=', $version], ['type', '=', $type]])->findOrEmpty()->toArray();
}
}

View File

@ -18,6 +18,7 @@ use app\service\admin\sys\MenuService;
use core\dict\DictLoader; use core\dict\DictLoader;
use core\base\BaseCoreService; use core\base\BaseCoreService;
use think\facade\Cache; use think\facade\Cache;
use think\facade\Db;
/** /**
* 系统菜单 * 系统菜单
@ -95,13 +96,13 @@ class CoreMenuService extends BaseCoreService
} }
/** /**
* 删除插件菜单 * 删除插件菜单(强删除)
* @param string $addon * @param string $addon
* @return true * @return true
*/ */
public function deleteByAddon(string $addon){ public function deleteByAddon(string $addon){
Db::name("sys_menu")->where([['addon', '=', $addon]])->delete();
$this->model->where([['addon', '=', $addon]])->delete(); //$this->model->where([['addon', '=', $addon]])->delete();
return true; return true;
} }

View File

@ -41,6 +41,6 @@ class NoticeService extends BaseCoreService
$template = (new CoreNoticeService())->getInfo($site_id, $key); $template = (new CoreNoticeService())->getInfo($site_id, $key);
if(empty($template)) return false; if(empty($template)) return false;
return Notice::invoke(['site_id' => $site_id, 'key' => $key, 'data' => $data, 'template' => $template], is_async:false); return Notice::invoke(['site_id' => $site_id, 'key' => $key, 'data' => $data, 'template' => $template], is_async:$template['async']);
} }
} }

View File

@ -202,6 +202,7 @@ class CorePayEventService extends BaseCoreService
$total = $total * 100; $total = $total * 100;
} }
return $this->app('refund')->refund([ return $this->app('refund')->refund([
'site_id' => $this->site_id,
'out_trade_no' => $out_trade_no, 'out_trade_no' => $out_trade_no,
'money' => $money, 'money' => $money,
'total' => $total, 'total' => $total,

View File

@ -197,7 +197,7 @@ class CoreRefundService extends BaseCoreService
])->update([ ])->update([
'status' => RefundDict::SUCCESS 'status' => RefundDict::SUCCESS
]); ]);
$pay = (new CorePayService())->getInfoByOutTradeNo($out_trade_no); $pay = (new CorePayService())->findPayInfoByOutTradeNo($site_id, $out_trade_no);
$result = event('RefundSuccess', ['refund_no' => $refund_no, 'trade_type' => $pay->trade_type, 'site_id' => $site_id]); $result = event('RefundSuccess', ['refund_no' => $refund_no, 'trade_type' => $pay->trade_type, 'site_id' => $site_id]);
if(!check_event_result($result)){ if(!check_event_result($result)){
return false; return false;

View File

@ -14,6 +14,8 @@ namespace app\service\core\paytype;
use app\dict\member\MemberAccountChangeTypeDict; use app\dict\member\MemberAccountChangeTypeDict;
use app\dict\member\MemberAccountTypeDict; use app\dict\member\MemberAccountTypeDict;
use app\dict\pay\PayDict; use app\dict\pay\PayDict;
use app\dict\pay\RefundDict;
use app\model\pay\Refund;
use app\service\core\member\CoreMemberAccountService; use app\service\core\member\CoreMemberAccountService;
use app\service\core\pay\CorePayService; use app\service\core\pay\CorePayService;
use core\base\BaseCoreService; use core\base\BaseCoreService;
@ -89,7 +91,7 @@ class CoreBalanceService extends BaseCoreService
$site_id = $params['site_id']; $site_id = $params['site_id'];
$refund_no = $params['refund_no']; $refund_no = $params['refund_no'];
$core_pay_service = new CorePayService(); $core_pay_service = new CorePayService();
$pay = $core_pay_service->getInfoByOutTradeNo($out_trade_no); $pay = $core_pay_service->findPayInfoByOutTradeNo($site_id, $out_trade_no);
$main_id = $pay['main_id']; $main_id = $pay['main_id'];
$main_type = $pay['main_type']; $main_type = $pay['main_type'];
@ -106,8 +108,24 @@ class CoreBalanceService extends BaseCoreService
break; break;
} }
return true; return [
'status' => RefundDict::SUCCESS,
'refund_no' => $refund_no,
'out_trade_no' => $out_trade_no
];
} }
/**
* 获取退款信息
* @param string|null $out_trade_no
* @param string|null $refund_no
* @return Refund|array|mixed|\think\Model
*/
public function getRefund(?string $out_trade_no, ?string $refund_no = '') {
return (new Refund())->where([
['refund_no', '=', $refund_no],
])->findOrEmpty();
}
} }

View File

@ -102,7 +102,8 @@ class CoreScheduleService extends BaseCoreService
protected function getCrontabContent($data): string protected function getCrontabContent($data): string
{ {
$content = ''; $content = '';
switch ($data['type']) { $type = $data['type'] ?? '';
switch ($type) {
case 'min':// 每隔几分 case 'min':// 每隔几分
$content = '每隔'.$data['min'].'分钟执行一次'; $content = '每隔'.$data['min'].'分钟执行一次';
break; break;

View File

@ -45,7 +45,7 @@ class CoreSiteService extends BaseCoreService
$where = [ $where = [
[ 'site_id', '=', $site_id ], [ 'site_id', '=', $site_id ],
]; ];
$site = $this->model->where($where)->field('site_id, app_type,site_name,logo,front_end_name,front_end_logo,group_id, status, expire_time, site_code')->append([ 'status_name' ])->findOrEmpty(); $site = $this->model->where($where)->field('site_id, app_type,site_name,logo,front_end_name,front_end_logo,group_id, status, expire_time')->append([ 'status_name' ])->findOrEmpty();
return $site->toArray(); return $site->toArray();
}, },
self::$cache_tag_name . $site_id self::$cache_tag_name . $site_id
@ -94,26 +94,4 @@ class CoreSiteService extends BaseCoreService
return true; return true;
} }
/**
* 通过站点编号获取站点信息
* @param $site_code
* @return mixed|string
*/
public function getSiteInfoBySiteCode($site_code){
$cache_name = 'site_id_cache';
return cache_remember(
$cache_name . $site_code,
function() use ($site_code) {
$site_info = $this->model->where([[
'site_code', '=', $site_code
]])->findOrEmpty();
if(!$site_info->isEmpty()){
return $site_info->toArray();
}
return [];
}
);
}
} }

View File

@ -33,15 +33,12 @@ class CoreSysConfigService extends BaseCoreService
* @return array * @return array
*/ */
public function getSceneDomain(int $site_id){ public function getSceneDomain(int $site_id){
$site = Site::find($site_id);
$site_tag = $site[ 'site_code' ];
$wap_domain = !empty(env("system.wap_domain")) ? preg_replace('#/$#', '', env("system.wap_domain")) : request()->domain(); $wap_domain = !empty(env("system.wap_domain")) ? preg_replace('#/$#', '', env("system.wap_domain")) : request()->domain();
$web_domain = !empty(env("system.web_domain")) ? preg_replace('#/$#', '', env("system.web_domain")) : request()->domain(); $web_domain = !empty(env("system.web_domain")) ? preg_replace('#/$#', '', env("system.web_domain")) : request()->domain();
return [ return [
'wap_url' => $wap_domain . "/wap/" . $site_tag . "/", 'wap_url' => $wap_domain . "/wap/" . $site_id . "/",
'web_url' => $web_domain . "/web/" . $site_tag . "/" 'web_url' => $web_domain . "/web/" . $site_id . "/"
]; ];
} }

View File

@ -27,12 +27,12 @@ class CoreBase64Service extends CoreFileService
} }
/** /**
* 图片上传 * base64图片上传
* @param $site_id * @param string $content
* @param $cate_id * @param int $site_id
* @param $app_type * @param string $file_dir
* @param $file_path
* @return array * @return array
* @throws \Exception
*/ */
public function image(string $content, int $site_id, string $file_dir) public function image(string $content, int $site_id, string $file_dir)
{ {

View File

@ -40,7 +40,7 @@ class CoreFileService extends BaseCoreService
/** /**
* 实例化上传引擎 * 实例化上传引擎
* @param int $site_id * @param int $site_id
* @param bool $is_local * @param string $storage_type
* @return UploadLoader * @return UploadLoader
* @throws \Exception * @throws \Exception
*/ */
@ -54,6 +54,8 @@ class CoreFileService extends BaseCoreService
$storage_config = $core_storage_service->getDefaultStorage($this->request->defaultSiteId()); $storage_config = $core_storage_service->getDefaultStorage($this->request->defaultSiteId());
self::$storage_type = $storage_config['storage_type']; self::$storage_type = $storage_config['storage_type'];
} }
$storage_config = $storage_config ?? [];
$storage_config['storage_type'] = self::$storage_type;
//查询启用的上传方式 //查询启用的上传方式
return new UploadLoader(self::$storage_type, $storage_config ?? []); return new UploadLoader(self::$storage_type, $storage_config ?? []);
} }

View File

@ -17,9 +17,7 @@ use app\service\core\sys\CoreAttachmentService;
use core\exception\UploadFileException; use core\exception\UploadFileException;
/** /**
* 图片服务层 * 图片处理层
* Class CoreUploadService
* @package app\service\core\file
*/ */
class CoreImageService extends CoreFileService class CoreImageService extends CoreFileService
{ {
@ -29,31 +27,46 @@ class CoreImageService extends CoreFileService
* @param int $site_id * @param int $site_id
* @param string $file_path * @param string $file_path
* @param $thumb_type 裁剪的图片规格 * @param $thumb_type 裁剪的图片规格
* @param bool $is_throw_exception 是否要抛出错误
* @return mixed * @return mixed
* @throws \Exception * @throws \Exception
*/ */
public function thumb(int $site_id, string $file_path, $thumb_type = 'all') public function thumb(int $site_id, string $file_path, $thumb_type = 'all', bool $is_throw_exception = false)
{ {
$file_parse = parse_url($file_path); $file_parse = parse_url($file_path);
$file_domain = $file_parse['scheme'] . '://' . $file_parse['host']; $scheme = $file_parse['scheme'] ?? '';
$host = $file_parse['host'] ?? '';
$file_domain = $scheme . '://' . $host;
//判断是哪个云上传的实例 //判断是哪个云上传的实例
$storage_type_list = (new CoreStorageService())->getStorageConfigList(); $storage_type_list = (new CoreStorageService())->getStorageConfigList();
foreach($storage_type_list as $k => $v){ foreach($storage_type_list as $k => $v){
$item_params = $v['params'] ?? []; $item_params = $v['params'] ?? [];
$item_domain = $item_params['domain'] ?? ''; $item_domain = $item_params['domain'] ?? '';
if($item_domain == $file_domain){ $item_storage_type = $v['storage_type'];
$this->upload_driver = $this->driver($site_id, $v['storage_type']); if(str_contains($file_path, $item_storage_type.'_')){
$this->upload_driver = $this->driver($site_id, $item_storage_type);
}else{
if($item_domain == $file_domain){
$this->upload_driver = $this->driver($site_id, $item_storage_type);
}
} }
} }
//没有云上传就用本地上传 //没有云上传就用本地上传
if(empty($this->upload_driver)){ if(empty($this->upload_driver)){
$this->upload_driver = $this->driver($site_id, StorageDict::LOCAL); $this->upload_driver = $this->driver($site_id, StorageDict::LOCAL);
} }
//如果是网络图片,可以将网络图片拉取到本地 //todo 如果是网络图片,可以将网络图片拉取到本地
try { try {
return $this->upload_driver->thumb($file_path, $thumb_type); $thumb_list = $this->upload_driver->thumb($file_path, $thumb_type);
return count($thumb_list) > 1 ? $thumb_list : $thumb_list[$thumb_type] ?? '';
} catch (\Throwable $e) { } catch (\Throwable $e) {
throw new UploadFileException($e->getMessage()); if($is_throw_exception){
throw new UploadFileException($e->getMessage());
}else{
return '';
}
} }
} }

View File

@ -23,7 +23,7 @@ class CoreStorageService extends BaseCoreService
/** /**
* 获取当前启用的存储方式以及配置 * 获取当前启用的存储方式以及配置
* @param $site_id * @param int $site_id
* @return void * @return void
*/ */
public function getDefaultStorage(int $site_id = 0) public function getDefaultStorage(int $site_id = 0)
@ -57,7 +57,7 @@ class CoreStorageService extends BaseCoreService
} }
/** /**
* 获取存储配置 * 获取存储配置
* @param $site_id * @param int $site_id
* @return void * @return void
*/ */
public function getStorageConfig(int $site_id){ public function getStorageConfig(int $site_id){
@ -69,8 +69,10 @@ class CoreStorageService extends BaseCoreService
} }
/** /**
* 获取云存储列表 * 获取云存储列表
* @param int $site_id
* @return array * @return array
*/ */
public function getStorageList(int $site_id = 0) public function getStorageList(int $site_id = 0)

View File

@ -27,7 +27,7 @@ class CoreUploadConfigService extends BaseCoreService
/** /**
* 上传配置 * 上传配置
* @param $site_id * @param int $site_id
* @return mixed|string[] * @return mixed|string[]
*/ */
public function getUploadConfig(int $site_id) public function getUploadConfig(int $site_id)

View File

@ -17,8 +17,6 @@ use app\service\core\sys\CoreAttachmentService;
/** /**
* 上传服务层 * 上传服务层
* Class CoreUploadService
* @package app\service\core\file
*/ */
class CoreUploadService extends CoreFileService class CoreUploadService extends CoreFileService
{ {
@ -70,19 +68,18 @@ class CoreUploadService extends CoreFileService
* 上传文件 * 上传文件
* @param string $file * @param string $file
* @param int $site_id * @param int $site_id
* @param string $type
* @param string $file_dir * @param string $file_dir
* @param bool $is_local 是否强制本地化 * @param string $storage_type
* @param bool $is_rename 是否重命名
* @return array * @return array
* @throws \Exception
*/ */
public function document(string $file, int $site_id, string $type, string $file_dir, bool $storage_type, bool $is_rename = true) public function document(string $file, int $site_id, string $type, string $file_dir, string $storage_type)
{ {
//实例化上传引擎 //实例化上传引擎
$this->upload_driver = $this->driver($site_id, $storage_type); $this->upload_driver = $this->driver($site_id, $storage_type);
//读取上传附件的信息用于后续得校验和数据写入 //读取上传附件的信息用于后续得校验和数据写入
$this->upload_driver->read($file, $is_rename); $this->upload_driver->read($file);
return $this->after($site_id, $file_dir, $type); return $this->after($site_id, $file_dir, $type);
} }
@ -92,11 +89,11 @@ class CoreUploadService extends CoreFileService
* 上传 * 上传
* @param int $site_id * @param int $site_id
* @param string $file_dir * @param string $file_dir
* @param $type * @param string $type
* @param $cate_id * @param int $cate_id
* @return array * @return array
*/ */
public function after(int $site_id, string $file_dir, string $type, $cate_id = 0){ public function after(int $site_id, string $file_dir, string $type, int $cate_id = 0){
$file_info = $this->upload_driver->getFileInfo(); $file_info = $this->upload_driver->getFileInfo();
@ -122,7 +119,6 @@ class CoreUploadService extends CoreFileService
'cate_id' => $cate_id, 'cate_id' => $cate_id,
); );
$att_id = $core_attachment_service->add($site_id, $data); $att_id = $core_attachment_service->add($site_id, $data);
} }
$return_array = [ $return_array = [
'url' => $url 'url' => $url

View File

@ -0,0 +1,49 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\validate\sys;
use app\service\core\schedule\CoreScheduleService;
use think\Validate;
/**
* Class Schedule
*/
class Schedule extends Validate
{
//用户名或密码的规范可能是从数据库中获取的
protected $rule = [
'key' => 'require|unique:sys_schedule|checkKeyType',
];
protected $message = [
'key.require' => 'validate_schedule.schedule_require',
'key.unique' => 'validate_schedule.schedule_unique',
];
protected $scene = [
'add' => ['key'],
'edit' => [],
];
/**
* 自定义验证 任务类型
* @param $value
* @param $rule
* @param array $data
* @return bool|string
*/
protected function checkKeyType($value, $rule, $data = [])
{
$temp = array_column((new CoreScheduleService())->getTemplateList(), null, 'key');
return isset($temp[$value]) ? true : get_lang("validate_schedule.not_exit_schedule_type");
}
}

View File

@ -54,20 +54,28 @@ return [
], ],
'size' => 2097152 'size' => 2097152
], ],
'applet' => [
'ext' => ['zip', 'rar'],
'mime' => [
'application/zip',
'application/vnd.rar'
],
'size' => 2097152
]
], ],
'thumb' => [ 'thumb' => [
'thumb_type' => [ 'thumb_type' => [
'big' => [ 'big' => [
'width' => 800,
'height' => 800,
],
'mid' => [
'width' => 400, 'width' => 400,
'height' => 400, 'height' => 400,
], ],
'mid' => [
'width' => 100,
'height' => 100,
],
'small' => [ 'small' => [
'width' => 50, 'width' => 200,
'height' => 50, 'height' => 200,
], ],
] ]

View File

@ -1,6 +1,6 @@
<?php <?php
return [ return [
'version' => '1.0.3', 'version' => '1.0.5',
'code' => '202306080001' 'code' => '202307010001'
]; ];

View File

@ -37,7 +37,7 @@ abstract class BaseDict extends Storage
*/ */
protected function getLocalAddons() protected function getLocalAddons()
{ {
if(!file_exists("../install.lock")) if(!file_exists(root_path()."install.lock"))
{ {
//尚未安装不加载插件 //尚未安装不加载插件
return []; return [];

View File

@ -0,0 +1,50 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace core\dict;
/**
* 图标
* Class Icon
* @package core\dict
*/
class Icon extends BaseDict
{
/**
* @param array $data
* @return array
*/
public function load(array $data) : array
{
$sys_path = dirname(app()->getRootPath()) . str_replace('/', DIRECTORY_SEPARATOR, '/admin/src/styles/icon');
$file_arr = getFileMap($sys_path);
$icon_arr = [];
if (!empty($file_arr)) {
foreach ($file_arr as $ck => $cv) {
if (strpos($cv, '.json') !== false) {
$json_string = file_get_contents($ck);
$icon = json_decode($json_string, true);
$icon_arr[] = $icon;
}
}
}
if (count($icon_arr) > 1) {
$last_icon = array_pop($icon_arr); // 最后一个
$first_icon = array_shift($icon_arr); // 第一个
array_unshift($icon_arr, $last_icon); // 将系统图标放到第一位置
$icon_arr[] = $first_icon; // 交换位置
}
return $icon_arr;
}
}

View File

@ -17,10 +17,10 @@ use core\loader\Loader;
* @see \core\template\TemplateLoader * @see \core\template\TemplateLoader
* @package think\facade * @package think\facade
* @mixin \core\template\Wechat * @mixin \core\template\Wechat
* @method string|null send(string $phone, string $templateId, array $data) 发送短信 * @method string|null send(array $data) 发送
* @method mixed open(null|string $name = null, mixed $default = null) 开启服务 * @method mixed addTemplate(array $data) 增加
* @method mixed apply(string $title, string $content, int $type) 申请模板 * @method mixed delete(array $data) 删除
* @method mixed applys(int $tempType, int $page, int $limit) 模板记录 * @method mixed get() 模板记录
*/ */
class TemplateLoader extends Loader class TemplateLoader extends Loader
{ {

View File

@ -57,7 +57,7 @@ class Weapp extends BaseTemplate
* @return mixed|void * @return mixed|void
*/ */
public function addTemplate(array $data){ public function addTemplate(array $data){
return $this->template()->addTemplate($data['tid'], $data['kidList'], $data['sceneDesc']); return $this->template()->addTemplate($data['tid'], $data['kid_list'], $data['scene_desc']);
} }
/** /**

View File

@ -98,7 +98,7 @@ class Aliyun extends BaseUpload
$height = $v['height']; $height = $v['height'];
//拼装缩略路径 //拼装缩略路径
$item_thumb = $file_path. '?x-oss-process=image/resize,h_' . $height . ',w_' . $width; $item_thumb = $file_path. '?x-oss-process=image/resize,h_' . $height . ',w_' . $width;
$thumb_data[] = $item_thumb; $thumb_data[$k] = $item_thumb;
} }
} }

Some files were not shown because too many files have changed in this diff Show More