2025-07-01 19:39:13 +08:00
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* This file is part of webman.
|
|
|
|
|
*
|
|
|
|
|
* Licensed under The MIT License
|
|
|
|
|
* For full copyright and license information, please see the MIT-LICENSE.txt
|
|
|
|
|
* Redistributions of files must retain the above copyright notice.
|
|
|
|
|
*
|
|
|
|
|
* @author walkor<walkor@workerman.net>
|
|
|
|
|
* @copyright walkor<walkor@workerman.net>
|
|
|
|
|
* @link http://www.workerman.net/
|
|
|
|
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
use Webman\Route;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 当前路由规则:/{业务域}/{模块}/{操作} (可扩展:/{业务域}/{版本号}/{模块}/{操作})
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 管理后台 API 样例
|
|
|
|
|
// GET /admin/user/{user_id}/tokens // 返回用户token+元信息
|
|
|
|
|
// POST /admin/user/{user_id}/kickout // body: {"tokens": ["..."]} // 踢下线
|
|
|
|
|
// POST /admin/user/{user_id}/kickout_all // 一键踢全部
|
|
|
|
|
|
|
|
|
|
|
2025-07-21 19:11:29 +08:00
|
|
|
Route::any('/c', [app\controller\IndexController::class, 'createResource']);
|
|
|
|
|
Route::any('/perm', [app\controller\IndexController::class, 'perm']);
|
|
|
|
|
|
2025-07-25 13:39:23 +08:00
|
|
|
// 飞书
|
|
|
|
|
Route::any('/feishu/event', [app\common\controller\NotifyController::class, 'feishuEvent']);
|
|
|
|
|
// 飞书回调
|
|
|
|
|
Route::any('/feishu/callback', [app\common\controller\NotifyController::class, 'feishuCallback']);
|
2025-07-28 18:49:33 +08:00
|
|
|
// 代理oss文件地址
|
|
|
|
|
Route::any('/proxy/ossurl', [app\common\controller\UploadController::class, 'proxy']);
|
2025-07-21 19:11:29 +08:00
|
|
|
|
2025-07-21 15:09:06 +08:00
|
|
|
// 公共
|
2025-07-01 19:39:13 +08:00
|
|
|
Route::group('/common', function () {
|
|
|
|
|
Route::group('/auth', function () {
|
2025-07-09 17:58:30 +08:00
|
|
|
Route::any('/login', [app\common\controller\AuthController::class, 'login']);
|
|
|
|
|
Route::any('/register', [app\common\controller\AuthController::class, 'register']);
|
|
|
|
|
Route::any('/feishu/scope', [app\common\controller\AuthController::class, 'feishuScope']);
|
2025-07-11 14:52:16 +08:00
|
|
|
Route::any('/refresh/token', [app\common\controller\AuthController::class, 'refresh']);
|
2025-07-09 17:58:30 +08:00
|
|
|
|
|
|
|
|
|
2025-07-10 14:06:01 +08:00
|
|
|
// // 调试
|
2025-07-11 14:52:16 +08:00
|
|
|
Route::any('/feishu/auth', [app\common\controller\AuthController::class, 'feishuAuth']);
|
2025-07-10 14:06:01 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Route::group('/user', function () {
|
|
|
|
|
Route::any('/info', [app\common\controller\UserController::class, 'info']);
|
2025-07-21 15:10:14 +08:00
|
|
|
Route::any('/get', [app\common\controller\UserController::class, 'getUser']);
|
2025-08-12 13:53:48 +08:00
|
|
|
Route::any('/team', [app\common\controller\UserController::class, 'team']);
|
|
|
|
|
Route::any('/resign', [app\common\controller\UserController::class, 'resignMember']);
|
2025-07-10 14:06:01 +08:00
|
|
|
});
|
2025-07-11 17:16:45 +08:00
|
|
|
|
|
|
|
|
Route::group('/preset', function () {
|
|
|
|
|
Route::any('/corps', [app\common\controller\PresetController::class, 'corps']);
|
|
|
|
|
Route::any('/feishu/app', [app\common\controller\PresetController::class, 'feishuApp']);
|
2025-07-21 16:58:22 +08:00
|
|
|
Route::any('/systems', [app\common\controller\PresetController::class, 'systems']);
|
2025-08-13 18:40:36 +08:00
|
|
|
Route::any('/roles', [app\common\controller\PresetController::class, 'roles']);
|
|
|
|
|
Route::any('/cache/clear', [app\common\controller\PresetController::class, 'cacheClear']);
|
2025-08-13 19:16:49 +08:00
|
|
|
Route::any('/menus', [app\common\controller\PresetController::class, 'menus']);
|
2025-07-11 17:16:45 +08:00
|
|
|
});
|
2025-07-10 14:06:01 +08:00
|
|
|
});
|
|
|
|
|
|
2025-07-21 15:09:06 +08:00
|
|
|
// 后台管理
|
2025-07-10 14:06:01 +08:00
|
|
|
Route::group('/admin', function () {
|
2025-07-21 15:09:06 +08:00
|
|
|
// 角色
|
2025-07-10 14:06:01 +08:00
|
|
|
Route::group('/role', function () {
|
2025-07-21 15:09:06 +08:00
|
|
|
Route::any('/list', [app\admin\controller\RoleController::class, 'index']);
|
|
|
|
|
Route::any('/show', [app\admin\controller\RoleController::class, 'show']);
|
|
|
|
|
Route::any('/store', [app\admin\controller\RoleController::class, 'store']);
|
2025-07-10 14:06:01 +08:00
|
|
|
Route::any('/update', [app\admin\controller\RoleController::class, 'update']);
|
2025-07-21 15:09:06 +08:00
|
|
|
Route::any('/destroy', [app\admin\controller\RoleController::class, 'destroy']);
|
2025-08-12 15:26:17 +08:00
|
|
|
Route::any('/menu/resource', [app\admin\controller\RoleController::class, 'menuResource']);
|
2025-07-01 19:39:13 +08:00
|
|
|
});
|
2025-08-05 17:19:12 +08:00
|
|
|
|
2025-07-21 15:09:06 +08:00
|
|
|
// 公司
|
2025-07-18 17:32:42 +08:00
|
|
|
Route::group('/corp', function () {
|
|
|
|
|
Route::any('/list', [app\admin\controller\CorpController::class, 'index']);
|
|
|
|
|
Route::any('/show', [app\admin\controller\CorpController::class, 'show']);
|
2025-07-21 15:09:06 +08:00
|
|
|
Route::any('/store', [app\admin\controller\CorpController::class, 'store']);
|
2025-07-18 17:32:42 +08:00
|
|
|
Route::any('/update', [app\admin\controller\CorpController::class, 'update']);
|
2025-07-21 15:09:06 +08:00
|
|
|
Route::any('/destroy', [app\admin\controller\CorpController::class, 'destroy']);
|
2025-07-18 17:32:42 +08:00
|
|
|
});
|
2025-07-22 15:13:27 +08:00
|
|
|
|
2025-08-11 20:09:28 +08:00
|
|
|
// 系统
|
|
|
|
|
Route::group('/systems', function () {
|
|
|
|
|
Route::any('/list', [app\admin\controller\SystemsController::class, 'index']);
|
|
|
|
|
Route::any('/show', [app\admin\controller\SystemsController::class, 'show']);
|
|
|
|
|
Route::any('/store', [app\admin\controller\SystemsController::class, 'store']);
|
|
|
|
|
Route::any('/update', [app\admin\controller\SystemsController::class, 'update']);
|
|
|
|
|
Route::any('/destroy', [app\admin\controller\SystemsController::class, 'destroy']);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 飞书应用
|
|
|
|
|
Route::group('/corp/feishu', function () {
|
|
|
|
|
Route::any('/list', [app\admin\controller\CorpFeishuAppController::class, 'index']);
|
|
|
|
|
Route::any('/show', [app\admin\controller\CorpFeishuAppController::class, 'show']);
|
|
|
|
|
Route::any('/store', [app\admin\controller\CorpFeishuAppController::class, 'store']);
|
|
|
|
|
Route::any('/update', [app\admin\controller\CorpFeishuAppController::class, 'update']);
|
|
|
|
|
Route::any('/destroy', [app\admin\controller\CorpFeishuAppController::class, 'destroy']);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 资源
|
|
|
|
|
Route::group('/resources', function () {
|
|
|
|
|
Route::any('/list/tree', [app\common\controller\ResourceController::class, 'listTree']);
|
|
|
|
|
Route::any('/show', [app\common\controller\ResourceController::class, 'show']);
|
|
|
|
|
Route::any('/store', [app\common\controller\ResourceController::class, 'store']);
|
|
|
|
|
Route::any('/update', [app\common\controller\ResourceController::class, 'update']);
|
|
|
|
|
Route::any('/destroy', [app\common\controller\ResourceController::class, 'destroy']);
|
|
|
|
|
Route::any('/list/menu', [app\common\controller\ResourceController::class, 'menuList']);
|
2025-08-12 15:26:17 +08:00
|
|
|
Route::any('/list/menu/tree', [app\common\controller\ResourceController::class, 'menuTreeList']);
|
2025-08-11 20:09:28 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 用户
|
|
|
|
|
Route::group('/user', function () {
|
|
|
|
|
Route::any('/list', [app\admin\controller\UserController::class, 'index']);
|
|
|
|
|
Route::any('/show', [app\admin\controller\UserController::class, 'show']);
|
|
|
|
|
Route::any('/update', [app\admin\controller\UserController::class, 'update']);
|
2025-08-14 10:33:45 +08:00
|
|
|
Route::any('/edit', [app\admin\controller\UserController::class, 'edit']);
|
2025-08-12 15:26:17 +08:00
|
|
|
Route::any('/authorize', [app\admin\controller\UserController::class, 'authorize']);
|
|
|
|
|
Route::any('/set/resources', [app\admin\controller\UserController::class, 'updateResources']);
|
2025-08-13 10:17:18 +08:00
|
|
|
Route::any('/update/password', [app\admin\controller\UserController::class, 'savePassword']);
|
2025-08-11 20:09:28 +08:00
|
|
|
});
|
|
|
|
|
|
2025-07-22 15:13:27 +08:00
|
|
|
// 询单
|
|
|
|
|
Route::group('/inquiry', function () {
|
|
|
|
|
Route::any('/list', [app\inquiry\controller\InquiryLogController::class, 'index']);
|
2025-07-23 15:02:09 +08:00
|
|
|
Route::any('/show', [app\inquiry\controller\InquiryLogController::class, 'show']);
|
|
|
|
|
Route::any('/store', [app\inquiry\controller\InquiryLogController::class, 'store']);
|
|
|
|
|
Route::any('/update', [app\inquiry\controller\InquiryLogController::class, 'update']);
|
|
|
|
|
Route::any('/destroy', [app\inquiry\controller\InquiryLogController::class, 'destroy']);
|
2025-07-23 17:06:48 +08:00
|
|
|
Route::any('/release', [app\inquiry\controller\InquiryLogController::class, 'release']);
|
|
|
|
|
Route::any('/allocation', [app\inquiry\controller\InquiryLogController::class, 'allocation']);
|
2025-08-06 18:55:37 +08:00
|
|
|
Route::any('/reallocation', [app\inquiry\controller\InquiryLogController::class, 'reAllocation']);
|
2025-08-04 14:03:57 +08:00
|
|
|
// 统计
|
|
|
|
|
Route::group('/statistics', function () {
|
|
|
|
|
Route::any('/whole', [app\inquiry\controller\StatisticsController::class, 'whole']);
|
|
|
|
|
Route::any('/channel/count', [app\inquiry\controller\StatisticsController::class, 'channelCount']);
|
|
|
|
|
Route::any('/country/count', [app\inquiry\controller\StatisticsController::class, 'countryCount']);
|
|
|
|
|
Route::any('/track/count', [app\inquiry\controller\StatisticsController::class, 'trackCount']);
|
|
|
|
|
Route::any('/day/count', [app\inquiry\controller\StatisticsController::class, 'dayCount']);
|
|
|
|
|
Route::any('/inquiry/count', [app\inquiry\controller\StatisticsController::class, 'inquiryCount']);
|
|
|
|
|
});
|
2025-07-22 15:13:27 +08:00
|
|
|
});
|
2025-08-01 14:20:12 +08:00
|
|
|
|
|
|
|
|
// crm
|
|
|
|
|
Route::group('/crm', function () {
|
|
|
|
|
Route::group('/customer', function () {
|
|
|
|
|
Route::any('/list', [app\crmAdmin\controller\CustomerController::class, 'list']);
|
|
|
|
|
Route::any('/export', [app\crmAdmin\controller\CustomerController::class, 'export']);
|
|
|
|
|
Route::any('/audit', [app\crmAdmin\controller\CustomerController::class, 'audit']);
|
2025-08-04 11:24:40 +08:00
|
|
|
Route::any('/transfer', [app\crmAdmin\controller\CustomerController::class, 'transfer']);
|
|
|
|
|
Route::any('/detail', [app\crmAdmin\controller\CustomerController::class, 'detail']);
|
2025-08-13 09:16:02 +08:00
|
|
|
Route::any('/delete', [app\crmAdmin\controller\CustomerController::class, 'delete']);
|
|
|
|
|
Route::any('/follow', [app\crmAdmin\controller\CustomerController::class, 'follow']);
|
2025-08-01 14:20:12 +08:00
|
|
|
});
|
|
|
|
|
});
|
2025-07-09 19:09:16 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Route::group('/ticket', function () {
|
|
|
|
|
//工单
|
|
|
|
|
Route::any('/ticket/add', [app\ticket\controller\TicketController::class, 'add']);
|
|
|
|
|
Route::any('/ticket/edit', [app\ticket\controller\TicketController::class, 'edit']);
|
|
|
|
|
Route::any('/ticket/list', [app\ticket\controller\TicketController::class, 'index']);
|
2025-07-11 15:13:44 +08:00
|
|
|
Route::any('/ticket/self', [app\ticket\controller\TicketController::class, 'self']);
|
2025-07-09 19:09:16 +08:00
|
|
|
Route::any('/ticket/status', [app\ticket\controller\TicketController::class, 'status']);
|
|
|
|
|
Route::any('/ticket/getStatus', [app\ticket\controller\TicketController::class, 'getStatus']);
|
|
|
|
|
|
|
|
|
|
Route::any('/upload', [app\common\controller\UploadController::class, 'uploadFile']);
|
|
|
|
|
Route::any('/upload/image', [app\common\controller\UploadController::class, 'uploadImage']);
|
|
|
|
|
|
|
|
|
|
//工单沟通记录
|
|
|
|
|
Route::any('/conversation/add', [app\ticket\controller\ConversationController::class, 'add']);
|
|
|
|
|
Route::any('/conversation/edit', [app\ticket\controller\ConversationController::class, 'edit']);
|
|
|
|
|
Route::any('/conversation/list', [app\ticket\controller\ConversationController::class, 'index']);
|
|
|
|
|
|
|
|
|
|
//工单分类
|
|
|
|
|
Route::any('/categorie/add', [app\ticket\controller\CategorieController::class, 'add']);
|
|
|
|
|
Route::any('/categorie/edit', [app\ticket\controller\CategorieController::class, 'edit']);
|
|
|
|
|
Route::any('/categorie/list', [app\ticket\controller\CategorieController::class, 'index']);
|
|
|
|
|
Route::any('/categorie/getAll', [app\ticket\controller\CategorieController::class, 'getAll']);
|
|
|
|
|
Route::any('/categorie/delete', [app\ticket\controller\CategorieController::class, 'delete']);
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
2025-07-21 15:10:14 +08:00
|
|
|
//crm
|
|
|
|
|
Route::group('/crm', function () {
|
|
|
|
|
//跟进
|
|
|
|
|
Route::any('/follow/list', [app\crm\controller\FollowController::class, 'list']);
|
|
|
|
|
Route::any('/follow/detail', [app\crm\controller\FollowController::class, 'detail']);
|
|
|
|
|
Route::any('/follow/add', [app\crm\controller\FollowController::class, 'save']);
|
|
|
|
|
Route::any('/follow/getFollowType', [app\crm\controller\FollowController::class, 'getFollowType']);
|
|
|
|
|
|
|
|
|
|
//客户
|
|
|
|
|
Route::any('/customer/list', [app\crm\controller\CustomerController::class, 'list']);
|
2025-08-08 15:52:13 +08:00
|
|
|
Route::any('/customer/index', [app\crm\controller\CustomerController::class, 'index']);
|
2025-07-21 15:10:14 +08:00
|
|
|
Route::any('/customer/detail', [app\crm\controller\CustomerController::class, 'detail']);
|
|
|
|
|
Route::any('/customer/add', [app\crm\controller\CustomerController::class, 'save']);
|
|
|
|
|
Route::any('/customer/claim', [app\crm\controller\CustomerController::class, 'claim']);
|
|
|
|
|
Route::any('/customer/restore', [app\crm\controller\CustomerController::class, 'restore']);
|
|
|
|
|
Route::any('/customer/delete', [app\crm\controller\CustomerController::class, 'delete']);
|
|
|
|
|
Route::any('/customer/waitFollow', [app\crm\controller\CustomerController::class, 'waitFollow']);
|
|
|
|
|
Route::any('/customer/statistics', [app\crm\controller\CustomerController::class, 'statistics']);
|
|
|
|
|
Route::any('/customer/getChannel', [app\crm\controller\CustomerController::class, 'getChannel']);
|
|
|
|
|
Route::any('/customer/getCountry', [app\crm\controller\CustomerController::class, 'getCountry']);
|
|
|
|
|
Route::any('/customer/followNext', [app\crm\controller\CustomerController::class, 'followNext']);
|
2025-08-01 17:18:08 +08:00
|
|
|
Route::any('/customer/report', [app\crm\controller\CustomerController::class, 'report']);
|
2025-07-21 15:10:14 +08:00
|
|
|
|
|
|
|
|
Route::any('/tagGroup/list', [app\crm\controller\TagGroupController::class, 'list']);
|
|
|
|
|
Route::any('/tagGroup/updatePivot', [app\crm\controller\TagGroupController::class, 'updatePivot']);
|
|
|
|
|
|
|
|
|
|
Route::any('/upload/image', [app\common\controller\UploadController::class, 'uploadImage']);
|
|
|
|
|
|
|
|
|
|
|
2025-08-14 10:09:56 +08:00
|
|
|
Route::any('/user/edit', [app\common\controller\UserController::class, 'edit']);
|
|
|
|
|
Route::any('/user/savePassword', [app\common\controller\UserController::class, 'savePassword']);
|
2025-07-21 15:10:14 +08:00
|
|
|
});
|
|
|
|
|
|