From 1d92c2668d9d9f5a777cfbb8db59e857b404b22f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=98=B1?= Date: Fri, 23 May 2025 12:40:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A3=80=E6=9F=A5=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=B7=B2=E5=AE=89=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ApproveController.php | 6 ++- app/Http/Controllers/Api/FileController.php | 45 +++++++++++++++++++ .../Controllers/Api/ProjectController.php | 13 ++++++ app/Http/Controllers/Api/SystemController.php | 33 +++++++++----- app/Tasks/BotReceiveMsgTask.php | 5 ++- language/original-api.txt | 1 + .../assets/js/pages/manage/approve/index.vue | 2 +- 7 files changed, 92 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/Api/ApproveController.php b/app/Http/Controllers/Api/ApproveController.php index fe5e70c07..c7c4479ff 100755 --- a/app/Http/Controllers/Api/ApproveController.php +++ b/app/Http/Controllers/Api/ApproveController.php @@ -20,6 +20,7 @@ use App\Models\ApproveProcInstHistory; use App\Exceptions\ApiException; use App\Models\UserDepartment; use App\Models\WebSocketDialogMsg; +use App\Module\Apps; use App\Module\BillMultipleExport; use Hhxsv5\LaravelS\Swoole\Task\Task; @@ -34,6 +35,9 @@ class ApproveController extends AbstractController public function __construct() { + if (!Apps::isInstalled('approve')) { + throw new ApiException('应用「Approval」未安装'); + } $this->flow_url = env('FLOW_URL') ?: 'http://approve'; } @@ -73,7 +77,7 @@ class ApproveController extends AbstractController * @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {Object} data 返回数据 */ - public function procdef__all() + public function procdef__all() { User::auth(); $data['name'] = Request::input('name'); diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index cbb00a39b..2a17c8416 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -11,6 +11,7 @@ use App\Models\FileContent; use App\Models\FileLink; use App\Models\FileUser; use App\Models\User; +use App\Module\Apps; use App\Module\Base; use App\Module\Timer; use App\Module\Ihttp; @@ -509,6 +510,23 @@ class FileController extends AbstractController 'update_at' => Carbon::parse($file->updated_at)->toDateTimeString() ]); } + // + if ($down != 'yes') { + // office + if (in_array($file->type, ['word', 'excel', 'ppt']) && !Apps::isInstalled('office')) { + return Base::retError('应用「OnlyOffice」未安装'); + } + // drawio + if ($file->type == 'drawio' && !Apps::isInstalled('drawio')) { + return Base::retError('应用「Drawio」未安装'); + } + // mind + if ($file->type == 'mind' && !Apps::isInstalled('minder')) { + return Base::retError('应用「Minder」未安装'); + } + } + // + // $builder = FileContent::whereFid($file->id); if ($history_id > 0) { @@ -577,10 +595,16 @@ class FileController extends AbstractController $contentArray = Base::json2array($content); $contentString = $contentArray['xml']; $file->ext = 'drawio'; + if (!Apps::isInstalled('drawio')) { + return Base::retError('应用「Drawio」未安装'); + } break; case 'mind': $contentString = $content; $file->ext = 'mind'; + if (!Apps::isInstalled('minder')) { + return Base::retError('应用「Minder」未安装'); + } break; case 'txt': case 'code': @@ -632,6 +656,10 @@ class FileController extends AbstractController { User::auth(); // + if (!Apps::isInstalled('office')) { + return Base::retError('应用「OnlyOffice」未安装'); + } + // $config = Request::input('config'); $token = \Firebase\JWT\JWT::encode($config, env('APP_KEY') ,'HS256'); return Base::retSuccess('成功', [ @@ -657,6 +685,10 @@ class FileController extends AbstractController { $user = User::auth(); // + if (!Apps::isInstalled('office')) { + return Base::retError('应用「OnlyOffice」未安装'); + } + // $id = intval(Request::input('id')); $status = intval(Request::input('status')); $key = Request::input('key'); @@ -776,6 +808,19 @@ class FileController extends AbstractController $history_id = intval(Request::input('history_id')); // $file = File::permissionFind($id, $user); + // office + if (in_array($file->type, ['word', 'excel', 'ppt']) && !Apps::isInstalled('office')) { + return Base::retError('应用「OnlyOffice」未安装'); + } + // drawio + if ($file->type == 'drawio' && !Apps::isInstalled('drawio')) { + return Base::retError('应用「Drawio」未安装'); + } + // mind + if ($file->type == 'mind' && !Apps::isInstalled('minder')) { + return Base::retError('应用「Minder」未安装'); + } + // $history = FileContent::whereFid($file->id)->whereId($history_id)->first(); if (empty($history)) { diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 61aea9337..4cc89560e 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -41,6 +41,7 @@ use App\Models\ProjectTaskFlowChange; use App\Models\ProjectTaskVisibilityUser; use App\Models\ProjectTaskTemplate; use App\Models\ProjectTag; +use App\Module\Apps; /** * @apiDefine project @@ -1831,6 +1832,18 @@ class ProjectController extends AbstractController 'update_at' => Carbon::parse($file->updated_at)->toDateTimeString() ]); } + // office + if (in_array($file->ext, ['docx', 'xlsx', 'pptx']) && !Apps::isInstalled('office')) { + return Base::retError('应用「OnlyOffice」未安装'); + } + // drawio + if ($file->ext == 'drawio' && !Apps::isInstalled('drawio')) { + return Base::retError('应用「Drawio」未安装'); + } + // mind + if ($file->ext == 'mind' && !Apps::isInstalled('minder')) { + return Base::retError('应用「Minder」未安装'); + } // $data = $file->toArray(); $data['path'] = $file->getRawOriginal('path'); diff --git a/app/Http/Controllers/Api/SystemController.php b/app/Http/Controllers/Api/SystemController.php index c1de6fdc0..e196fb8be 100755 --- a/app/Http/Controllers/Api/SystemController.php +++ b/app/Http/Controllers/Api/SystemController.php @@ -18,6 +18,7 @@ use LdapRecord\Container; use App\Module\BillExport; use Guanguans\Notify\Factory; use App\Models\UserCheckinRecord; +use App\Module\Apps; use App\Module\BillMultipleExport; use LdapRecord\LdapRecordException; use Guanguans\Notify\Messages\EmailMessage; @@ -301,6 +302,10 @@ class SystemController extends AbstractController { User::auth('admin'); // + if (!Apps::isInstalled('ai')) { + return Base::retError('应用「AI Robot」未安装'); + } + // $type = trim(Request::input('type')); $filter = trim(Request::input('filter')); $setting = Base::setting('aibotSetting'); @@ -450,17 +455,25 @@ class SystemController extends AbstractController if (!$botUser) { return Base::retError('创建签到机器人失败'); } - if (in_array('locat', $all['modes'])) { - if (empty($all['locat_bd_lbs_key'])) { - return Base::retError('请填写百度地图AK'); - } - if (!is_array($all['locat_bd_lbs_point'])) { - return Base::retError('请选择允许签到位置'); - } - $all['locat_bd_lbs_point']['radius'] = intval($all['locat_bd_lbs_point']['radius']); - if (empty($all['locat_bd_lbs_point']['lng']) || empty($all['locat_bd_lbs_point']['lat']) || empty($all['locat_bd_lbs_point']['radius'])) { - return Base::retError('请选择有效的签到位置'); + if (is_array($all['modes'])) { + if (in_array('locat', $all['modes'])) { + if (empty($all['locat_bd_lbs_key'])) { + return Base::retError('请填写百度地图AK'); + } + if (!is_array($all['locat_bd_lbs_point'])) { + return Base::retError('请选择允许签到位置'); + } + $all['locat_bd_lbs_point']['radius'] = intval($all['locat_bd_lbs_point']['radius']); + if (empty($all['locat_bd_lbs_point']['lng']) || empty($all['locat_bd_lbs_point']['lat']) || empty($all['locat_bd_lbs_point']['radius'])) { + return Base::retError('请选择有效的签到位置'); + } } + // 人脸识别 + if (in_array('face', $all['modes'])){ + if (!Apps::isInstalled('face')) { + return Base::retError('应用「Face check-in」未安装'); + } + } } } if ($all['modes']) { diff --git a/app/Tasks/BotReceiveMsgTask.php b/app/Tasks/BotReceiveMsgTask.php index 0246878f0..b4114b340 100644 --- a/app/Tasks/BotReceiveMsgTask.php +++ b/app/Tasks/BotReceiveMsgTask.php @@ -12,6 +12,7 @@ use App\Models\UserDepartment; use App\Models\WebSocketDialog; use App\Models\WebSocketDialogConfig; use App\Models\WebSocketDialogMsg; +use App\Module\Apps; use App\Module\Base; use App\Module\Doo; use App\Module\Ihttp; @@ -452,7 +453,9 @@ class BotReceiveMsgTask extends AbstractTask if (in_array($this->client['platform'], ['win', 'mac', 'web']) && !Base::judgeClientVersion("0.41.11", $this->client['version'])) { $errorContent = '当前客户端版本低(所需版本≥v0.41.11)。'; } - + if (!Apps::isInstalled('ai')) { + $errorContent = '应用「AI Robot」未安装'; + } if ($msg->reply_id > 0) { $replyCommand = $this->extractReplyCommand($msg->reply_id, $botUser); if (Base::isError($replyCommand)) { diff --git a/language/original-api.txt b/language/original-api.txt index ac40025ce..669073f6f 100644 --- a/language/original-api.txt +++ b/language/original-api.txt @@ -874,3 +874,4 @@ URL格式不正确 更新失败:(*) 应用列表正在更新中,请稍后再试 应用正在下载中,请稍后再试 +应用「*」未安装 \ No newline at end of file diff --git a/resources/assets/js/pages/manage/approve/index.vue b/resources/assets/js/pages/manage/approve/index.vue index cfd04c6fd..114e6846e 100644 --- a/resources/assets/js/pages/manage/approve/index.vue +++ b/resources/assets/js/pages/manage/approve/index.vue @@ -556,7 +556,7 @@ export default { } }).then(({data}) => { this.updateData('unread', data, type) - }).catch((msg) => { + }).catch(({msg}) => { $A.modalError(msg); }).finally(_ => { this.loadIng = false;