hasPagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->data((new QywxPromotionContactApiService())->tagOptions())); } public function createTag() { if (!$this->hasBasePagePermission()) { return $this->fail('权限不足'); } if (!$this->request->isPost()) { return $this->fail('请使用 POST 创建标签'); } $name = $this->request->post('name', ''); if (!is_string($name)) { return $this->fail('标签名称格式不正确'); } return $this->run(fn () => $this->data((new QywxPromotionContactApiService())->createTag($name))); } public function uploadWelcomeMedia() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->data((new QywxPromotionMediaService())->upload( $this->request->file('file'), (string) $this->request->post('type', ''), $this->adminId ))); } public function overview() { if (!$this->hasPagePermission()) { return $this->fail('权限不足,无法访问企业微信获客助手'); } return $this->run(fn () => $this->data(WecomPromotionLogic::overview( $this->adminId, $this->adminInfo, $this->request->domain() ))); } public function savePool() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } $params = $this->request->post(); if ((int) ($params['id'] ?? 0) <= 0 && !$this->hasBasePagePermission()) { return $this->fail('共享操作人只能编辑已授权方案,不能新建分流方案'); } return $this->run(fn () => $this->success('分流方案已保存', WecomPromotionLogic::savePool( $params, $this->adminId, $this->adminInfo ))); } public function batchUpdatePools() { if (!$this->hasBasePagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->success('分流方案配置已批量更新', WecomPromotionLogic::batchUpdatePools( $this->request->post(), $this->adminId, $this->adminInfo ))); } public function saveWidget() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->success('浮窗配置已保存', WecomPromotionLogic::saveWidget( $this->request->post(), $this->adminId, $this->adminInfo ))); } public function batchSetOperators() { if (!$this->hasBasePagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->success('方案操作人已批量更新', WecomPromotionLogic::batchSetOperators( $this->request->post(), $this->adminId, $this->adminInfo ))); } public function deletePool() { if (!$this->hasBasePagePermission()) { return $this->fail('权限不足'); } $id = (int) $this->request->post('id', 0); return $this->run(function () use ($id) { WecomPromotionLogic::deletePool($id, $this->adminId, $this->adminInfo); return $this->success('分流方案及企业微信官方获客链接已永久删除'); }); } public function saveLink() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->success('获客助手链接已保存', WecomPromotionLogic::saveLink( $this->request->post(), $this->adminId, $this->adminInfo ))); } public function saveMember() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->success('成员分流规则已保存', WecomPromotionLogic::saveMember( $this->request->post(), $this->adminId, $this->adminInfo ))); } public function toggleMember() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } $id = (int) $this->request->post('id', 0); $status = (int) $this->request->post('status', 0); return $this->run(fn () => $this->success( '成员状态已更新', WecomPromotionLogic::toggleMember($id, $status, $this->adminId, $this->adminInfo) )); } public function checkApiPermission() { if (!$this->hasBasePagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->success('获客助手 API 权限验证通过', WecomPromotionLogic::checkApiPermission())); } /** 推送当前方案的可用成员,不导入其他官方链接。 */ public function syncMemberRange() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } if (!$this->request->isPost()) { return $this->fail('请使用 POST 同步成员范围'); } $poolId = (int) $this->request->post('pool_id', 0); return $this->run(fn () => $this->data(WecomPromotionLogic::syncMemberRange( $poolId, $this->adminId, $this->adminInfo ))); } public function syncRemoteLinks() { if (!$this->hasBasePagePermission()) { return $this->fail('权限不足'); } $poolId = (int) $this->request->post('pool_id', 0); return $this->run(fn () => $this->success('企业微信获客链接同步完成', WecomPromotionLogic::syncRemoteLinks( $poolId, $this->adminId, $this->adminInfo ))); } public function remoteLinkDetail() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } $id = (int) $this->request->get('id', 0); return $this->run(fn () => $this->data(WecomPromotionLogic::remoteLinkDetail( $id, $this->adminId, $this->adminInfo ))); } public function deleteRemoteLink() { if (!$this->hasBasePagePermission()) { return $this->fail('权限不足'); } $id = (int) $this->request->post('id', 0); return $this->run(function () use ($id) { WecomPromotionLogic::deleteRemoteLink($id, $this->adminId, $this->adminInfo); return $this->success('企业微信获客链接已永久删除,本地审计记录已保留'); }); } public function syncCustomers() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->success('获客客户同步完成', WecomAcquisitionCustomerLogic::sync( $this->request->post(), $this->adminId, $this->adminInfo ))); } public function customerStatistics() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } return $this->run(fn () => $this->data(WecomAcquisitionCustomerLogic::statistics( $this->request->get(), $this->adminId, $this->adminInfo ))); } public function toggleLink() { if (!$this->hasPagePermission()) { return $this->fail('权限不足'); } $id = (int) $this->request->post('id', 0); $status = (int) $this->request->post('status', 0); return $this->run(function () use ($id, $status) { WecomPromotionLogic::toggleLink($id, $status, $this->adminId, $this->adminInfo); return $this->success('状态已更新'); }); } public function deleteLink() { if (!$this->hasBasePagePermission()) { return $this->fail('权限不足'); } $id = (int) $this->request->post('id', 0); return $this->run(function () use ($id) { WecomPromotionLogic::deleteLink($id, $this->adminId, $this->adminInfo); return $this->success('获客助手链接已删除'); }); } private function run(callable $callback) { try { return $callback(); } catch (\Throwable $e) { return $this->fail($e->getMessage()); } } private function hasPagePermission(): bool { return QywxPromotionOperatorAccess::hasPagePermission($this->adminId, $this->adminInfo); } private function hasBasePagePermission(): bool { return QywxPromotionOperatorAccess::hasBasePagePermission($this->adminId, $this->adminInfo); } }