463 lines
15 KiB
PHP
Executable File
463 lines
15 KiB
PHP
Executable File
<?php
|
||
|
||
namespace App\Http\Controllers\Api;
|
||
|
||
use App\Models\User;
|
||
use App\Module\Base;
|
||
use Request;
|
||
use Response;
|
||
|
||
/**
|
||
* @apiDefine system
|
||
*
|
||
* 系统
|
||
*/
|
||
class SystemController extends AbstractController
|
||
{
|
||
|
||
/**
|
||
* @api {get} api/system/setting 01. 获取设置、保存设置
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName setting
|
||
*
|
||
* @apiParam {String} type
|
||
* - get: 获取(默认)
|
||
* - save: 保存设置(参数:reg、login_code)
|
||
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function setting()
|
||
{
|
||
$type = trim(Request::input('type'));
|
||
if ($type == 'save') {
|
||
if (env("SYSTEM_SETTING") == 'disabled') {
|
||
return Base::retError('当前环境禁止修改');
|
||
}
|
||
$user = User::auth();
|
||
$user->isAdmin();
|
||
$all = Request::input();
|
||
foreach ($all AS $key => $value) {
|
||
if (!in_array($key, ['reg', 'login_code'])) {
|
||
unset($all[$key]);
|
||
}
|
||
}
|
||
$setting = Base::setting('system', Base::newTrim($all));
|
||
} else {
|
||
$setting = Base::setting('system');
|
||
}
|
||
//
|
||
$setting['reg'] = $setting['reg'] ?: 'open';
|
||
$setting['login_code'] = $setting['login_code'] ?: 'auto';
|
||
//
|
||
return Base::retSuccess('success', $setting ?: json_decode('{}'));
|
||
}
|
||
|
||
/**
|
||
* @api {post} api/system/priority 02. 获取优先级、保存优先级
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName priority
|
||
*
|
||
* @apiParam {Array} list 优先级数据,格式:[{name,color,days,priority}]
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function priority()
|
||
{
|
||
$type = trim(Request::input('type'));
|
||
if ($type == 'save') {
|
||
$user = User::auth();
|
||
$user->isAdmin();
|
||
$list = Base::getPostValue('list');
|
||
$array = [];
|
||
if (empty($list) || !is_array($list)) {
|
||
return Base::retError('参数错误');
|
||
}
|
||
foreach ($list AS $item) {
|
||
if (empty($item['name']) || empty($item['color']) || empty($item['days']) || empty($item['priority'])) {
|
||
continue;
|
||
}
|
||
$array[] = [
|
||
'name' => $item['name'],
|
||
'color' => $item['color'],
|
||
'days' => intval($item['days']),
|
||
'priority' => intval($item['priority']),
|
||
];
|
||
}
|
||
if (empty($array)) {
|
||
return Base::retError('参数为空');
|
||
}
|
||
$setting = Base::setting('priority', $array);
|
||
} else {
|
||
$setting = Base::setting('priority');
|
||
}
|
||
//
|
||
return Base::retSuccess('success', $setting);
|
||
}
|
||
|
||
/**
|
||
* @api {get} api/system/get/info 03. 获取终端详细信息
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName get__info
|
||
*
|
||
* @apiParam {String} key key值
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function get__info()
|
||
{
|
||
if (Request::input("key") !== env('APP_KEY')) {
|
||
return [];
|
||
}
|
||
return Base::retSuccess('success', [
|
||
'ip' => Base::getIp(),
|
||
'ip-info' => Base::getIpInfo(Base::getIp()),
|
||
'ip-gcj02' => Base::getIpGcj02(Base::getIp()),
|
||
'ip-iscn' => Base::isCnIp(Base::getIp()),
|
||
'header' => Request::header(),
|
||
'token' => Base::getToken(),
|
||
'url' => url('') . Base::getUrl(),
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* @api {get} api/system/get/ip 04. 获取IP地址
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName get__ip
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function get__ip() {
|
||
return Base::getIp();
|
||
}
|
||
|
||
/**
|
||
* @api {get} api/system/get/cnip 05. 是否中国IP地址
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName get__cnip
|
||
*
|
||
* @apiParam {String} ip IP值
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function get__cnip() {
|
||
return Base::isCnIp(Request::input('ip'));
|
||
}
|
||
|
||
/**
|
||
* @api {get} api/system/get/ipgcj02 06. 获取IP地址经纬度
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName get__ipgcj02
|
||
*
|
||
* @apiParam {String} ip IP值
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function get__ipgcj02() {
|
||
return Base::getIpGcj02(Request::input("ip"));
|
||
}
|
||
|
||
/**
|
||
* @api {get} api/system/get/ipinfo 07. 获取IP地址详细信息
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName get__ipinfo
|
||
*
|
||
* @apiParam {String} ip IP值
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function get__ipinfo() {
|
||
return Base::getIpInfo(Request::input("ip"));
|
||
}
|
||
|
||
/**
|
||
* @api {get} api/system/get/appinfo 08. 获取应用下载信息
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName get__appinfo
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function get__appinfo() {
|
||
$array = [
|
||
'name' => '',
|
||
'version' => '',
|
||
'list' => [],
|
||
];
|
||
//
|
||
$file = base_path("electron/package.json");
|
||
$dist = base_path("electron/dist");
|
||
if (file_exists($file)) {
|
||
$packageArray = json_decode(file_get_contents($file), true);
|
||
$array['name'] = $packageArray['name'] ?? 'No app';
|
||
$array['version'] = $packageArray['version'] ?? '';
|
||
//
|
||
$list = [
|
||
[
|
||
'icon' => 'logo-apple',
|
||
'name' => 'macOS Intel',
|
||
'file' => "{$array['name']}-{$array['version']}.dmg"
|
||
],
|
||
[
|
||
'icon' => 'logo-apple',
|
||
'name' => 'macOS M1',
|
||
'file' => "{$array['name']}-{$array['version']}-arm64.dmg"
|
||
],
|
||
[
|
||
'icon' => 'logo-windows',
|
||
'name' => 'Windows x64',
|
||
'file' => "{$array['name']} Setup {$array['version']}.exe"
|
||
]
|
||
];
|
||
foreach ($list as $item) {
|
||
if (file_exists("{$dist}/{$item['file']}")) {
|
||
$item['url'] = Base::fillUrl('api/system/get/appdown?file=' . urlencode($item['file']));
|
||
$item['size'] = filesize("{$dist}/{$item['file']}");
|
||
$array['list'][] = $item;
|
||
}
|
||
}
|
||
}
|
||
//
|
||
if (count($array['list']) == 0) {
|
||
return Base::retError('No file');
|
||
}
|
||
return Base::retSuccess('success', $array);
|
||
}
|
||
|
||
/**
|
||
* @api {get} api/system/get/appdown 09. 下载应用
|
||
*
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName get__appdown
|
||
*
|
||
* @apiParam {String} file 文件名称
|
||
*/
|
||
public function get__appdown() {
|
||
$file = Request::input("file");
|
||
$path = base_path("electron/dist/" . $file);
|
||
if (!file_exists($path)) {
|
||
return Base::ajaxError("No file");
|
||
}
|
||
return Response::download($path);
|
||
}
|
||
|
||
/**
|
||
* @api {post} api/system/imgupload 10. 上传图片
|
||
*
|
||
* @apiDescription 需要token身份
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName imgupload
|
||
*
|
||
* @apiParam {String} image64 图片base64
|
||
* @apiParam {String} filename 文件名
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function imgupload()
|
||
{
|
||
if (User::userid() === 0) {
|
||
return Base::retError('身份失效,等重新登录');
|
||
}
|
||
$scale = [intval(Request::input('width')), intval(Request::input('height'))];
|
||
if (!$scale[0] && !$scale[1]) {
|
||
$scale = [2160, 4160, -1];
|
||
}
|
||
$path = "uploads/picture/" . User::userid() . "/" . date("Ym") . "/";
|
||
$image64 = trim(Base::getPostValue('image64'));
|
||
$fileName = trim(Base::getPostValue('filename'));
|
||
if ($image64) {
|
||
$data = Base::image64save([
|
||
"image64" => $image64,
|
||
"path" => $path,
|
||
"fileName" => $fileName,
|
||
"scale" => $scale
|
||
]);
|
||
} else {
|
||
$data = Base::upload([
|
||
"file" => Request::file('image'),
|
||
"type" => 'image',
|
||
"path" => $path,
|
||
"fileName" => $fileName,
|
||
"scale" => $scale
|
||
]);
|
||
}
|
||
if (Base::isError($data)) {
|
||
return Base::retError($data['msg']);
|
||
} else {
|
||
return Base::retSuccess('success', $data['data']);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @api {get} api/system/get/imgview 11. 浏览图片空间
|
||
*
|
||
* @apiDescription 需要token身份
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName imgview
|
||
*
|
||
* @apiParam {String} path 路径
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function imgview()
|
||
{
|
||
if (User::userid() === 0) {
|
||
return Base::retError('身份失效,等重新登录');
|
||
}
|
||
$publicPath = "uploads/picture/" . User::userid() . "/";
|
||
$dirPath = public_path($publicPath);
|
||
$dirs = $files = [];
|
||
//
|
||
$path = Request::input('path');
|
||
if ($path && is_string($path)) {
|
||
$path = str_replace(array('||', '|'), '/', $path);
|
||
$path = trim($path, '/');
|
||
$path = str_replace('..', '', $path);
|
||
$path = Base::leftDelete($path, $publicPath);
|
||
if ($path) {
|
||
$path = $path . '/';
|
||
$dirPath .= $path;
|
||
//
|
||
$dirs[] = [
|
||
'type' => 'dir',
|
||
'title' => '...',
|
||
'path' => substr(substr($path, 0, -1), 0, strripos(substr($path, 0, -1), '/')),
|
||
'url' => '',
|
||
'thumb' => Base::fillUrl('images/other/dir.png'),
|
||
'inode' => 0,
|
||
];
|
||
}
|
||
} else {
|
||
$path = '';
|
||
}
|
||
$list = glob($dirPath . '*', GLOB_BRACE);
|
||
foreach ($list as $v) {
|
||
$filename = basename($v);
|
||
$pathTemp = $publicPath . $path . $filename;
|
||
if (is_dir($v)) {
|
||
$dirs[] = [
|
||
'type' => 'dir',
|
||
'title' => $filename,
|
||
'path' => $pathTemp,
|
||
'url' => Base::fillUrl($pathTemp),
|
||
'thumb' => Base::fillUrl('images/other/dir.png'),
|
||
'inode' => fileatime($v),
|
||
];
|
||
} elseif (!str_ends_with($filename, "_thumb.jpg")) {
|
||
$array = [
|
||
'type' => 'file',
|
||
'title' => $filename,
|
||
'path' => $pathTemp,
|
||
'url' => Base::fillUrl($pathTemp),
|
||
'thumb' => $pathTemp,
|
||
'inode' => fileatime($v),
|
||
];
|
||
//
|
||
$extension = pathinfo($dirPath . $filename, PATHINFO_EXTENSION);
|
||
if (in_array($extension, array('gif', 'jpg', 'jpeg', 'png', 'bmp'))) {
|
||
if (file_exists($dirPath . $filename . '_thumb.jpg')) {
|
||
$array['thumb'] .= '_thumb.jpg';
|
||
}
|
||
$array['thumb'] = Base::fillUrl($array['thumb']);
|
||
$files[] = $array;
|
||
}
|
||
}
|
||
}
|
||
if ($dirs) {
|
||
$inOrder = [];
|
||
foreach ($dirs as $key => $item) {
|
||
$inOrder[$key] = $item['title'];
|
||
}
|
||
array_multisort($inOrder, SORT_DESC, $dirs);
|
||
}
|
||
if ($files) {
|
||
$inOrder = [];
|
||
foreach ($files as $key => $item) {
|
||
$inOrder[$key] = $item['inode'];
|
||
}
|
||
array_multisort($inOrder, SORT_DESC, $files);
|
||
}
|
||
//
|
||
return Base::retSuccess('success', ['dirs' => $dirs, 'files' => $files]);
|
||
}
|
||
|
||
/**
|
||
* @api {post} api/system/fileupload 12. 上传文件
|
||
*
|
||
* @apiDescription 需要token身份
|
||
* @apiVersion 1.0.0
|
||
* @apiGroup system
|
||
* @apiName fileupload
|
||
*
|
||
* @apiParam {String} [image64] 图片base64
|
||
* @apiParam {String} filename 文件名
|
||
* @apiParam {String} [files] 文件名
|
||
*
|
||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||
* @apiSuccess {Object} data 返回数据
|
||
*/
|
||
public function fileupload()
|
||
{
|
||
if (User::userid() === 0) {
|
||
return Base::retError('身份失效,等重新登录');
|
||
}
|
||
$path = "uploads/files/" . User::userid() . "/" . date("Ym") . "/";
|
||
$image64 = trim(Base::getPostValue('image64'));
|
||
$fileName = trim(Base::getPostValue('filename'));
|
||
if ($image64) {
|
||
$data = Base::image64save([
|
||
"image64" => $image64,
|
||
"path" => $path,
|
||
"fileName" => $fileName,
|
||
]);
|
||
} else {
|
||
$data = Base::upload([
|
||
"file" => Request::file('files'),
|
||
"type" => 'file',
|
||
"path" => $path,
|
||
"fileName" => $fileName,
|
||
]);
|
||
}
|
||
//
|
||
return $data;
|
||
}
|
||
}
|