Merge branch 'develop' into feature/mzl_dev_curd

This commit is contained in:
mzl
2025-07-21 15:10:14 +08:00
parent 45679bc5e4
commit 149de9d6fb
35 changed files with 2112 additions and 16 deletions
+100
View File
@@ -34,4 +34,104 @@ class Constants
self::TICKET_STATUS['REJECTED'] => 'Закрыть',
];
//客户分级 USTOMER_GRADE
public const GRADE = [
'INITIAL' => 0, // 初步接触
'COMMUNICATE' => 1, // 需求沟通
'PLAN' => 2, // 方案推进
'DEAL' => 3, // 成交阶段
'SALES' => 4, // 售后阶段
'LOSS' => 5, // 停滞或流失
];
public const GRADE_ZH = [
self::GRADE['INITIAL'] => '初步接触',
self::GRADE['COMMUNICATE'] => '需求沟通',
self::GRADE['PLAN'] => '方案推进',
self::GRADE['DEAL'] => '成交阶段',
self::GRADE['SALES'] => '售后阶段',
self::GRADE['LOSS'] => '停滞或流失',
];
public const GRADE_EN = [
self::GRADE['INITIAL'] => 'Initial contact',
self::GRADE['COMMUNICATE'] => 'Demand Chat',
self::GRADE['PLAN'] => 'promotion of the plan',
self::GRADE['DEAL'] => 'Transaction Stage',
self::GRADE['SALES'] => 'After Sales',
self::GRADE['LOSS'] => 'Stagnation or loss',
];
public const GRADE_RU = [
self::GRADE['INITIAL'] => 'Первоначальные контакты',
self::GRADE['COMMUNICATE'] => 'Потребности в общении',
self::GRADE['PLAN'] => 'Продвижение программы',
self::GRADE['DEAL'] => 'Этап сделки',
self::GRADE['SALES'] => 'Послепродажный этап',
self::GRADE['LOSS'] => 'Застой или потеря',
];
//客户重要性
public const CUSTOMER_MAGNITUDE_INITIAL = 0; // 金牌商机
public const CUSTOMER_MAGNITUDE_COMMUNICATE = 1; // 银牌商机
public const CUSTOMER_MAGNITUDE_PLAN = 2; // 铜牌商机
public const MAGNITUDE = [
self::CUSTOMER_MAGNITUDE_INITIAL => '金牌商机',
self::CUSTOMER_MAGNITUDE_COMMUNICATE => '银牌商机',
self::CUSTOMER_MAGNITUDE_PLAN => '铜牌商机',
];
public const MAGNITUDE_EN = [
self::CUSTOMER_MAGNITUDE_INITIAL => 'Gold Medal',
self::CUSTOMER_MAGNITUDE_COMMUNICATE => 'Silver Medal',
self::CUSTOMER_MAGNITUDE_PLAN => 'Bronze Medal',
];
public const MAGNITUDE_RU = [
self::CUSTOMER_MAGNITUDE_INITIAL => 'Золотой бизнес',
self::CUSTOMER_MAGNITUDE_COMMUNICATE => 'Серебряный бизнес',
self::CUSTOMER_MAGNITUDE_PLAN => 'Бронзовый бизнес.',
];
//跟进类型
public const CUSTOMER_FOLLOW_VISIT = 0; // 线下拜访
public const CUSTOMER_FOLLOW_UP = 1; // 线上跟进
public const FOLLOW = [
self::CUSTOMER_FOLLOW_VISIT => '线下拜访',
self::CUSTOMER_FOLLOW_UP => '线上跟进',
];
public const FOLLOW_EN = [
self::CUSTOMER_FOLLOW_VISIT => 'Visit',
self::CUSTOMER_FOLLOW_UP => 'On line',
];
//跟进类型
public const CUSTOMER_SEX_UNKNOWN = 0; // 未知
public const CUSTOMER_SEX_MAN = 1; // 男
public const CUSTOMER_SEX_WOMAN = 2; // 女
public const SEX = [
self::CUSTOMER_SEX_UNKNOWN => '未知',
self::CUSTOMER_SEX_MAN => '男',
self::CUSTOMER_SEX_WOMAN => '女',
];
public const SEX_EN = [
self::CUSTOMER_SEX_UNKNOWN => 'unknown',
self::CUSTOMER_SEX_MAN => 'man',
self::CUSTOMER_SEX_WOMAN => 'woman',
];
public const SEX_RU = [
self::CUSTOMER_SEX_UNKNOWN => 'неизвестный',
self::CUSTOMER_SEX_MAN => 'мужской',
self::CUSTOMER_SEX_WOMAN => 'женский',
];
public const SIGN = [
['id' => 'xinyouhe', 'name' => '新友合'],
['id' => 'mbaf', 'name' => 'MAGIC BRIDGE AUTO FZE']
];
public const LANGUAGE = ['en', 'zh_CN','ru'];
}
+32 -2
View File
@@ -25,8 +25,6 @@ use Webman\Route;
// POST /admin/user/{user_id}/kickout // body: {"tokens": ["..."]} // 踢下线
// POST /admin/user/{user_id}/kickout_all // 一键踢全部
// 调试
Route::any('/perm', [app\controller\IndexController::class, 'perm']);
// 公共
Route::group('/common', function () {
@@ -43,6 +41,7 @@ Route::group('/common', function () {
Route::group('/user', function () {
Route::any('/info', [app\common\controller\UserController::class, 'info']);
Route::any('/get', [app\common\controller\UserController::class, 'getUser']);
});
Route::group('/preset', function () {
@@ -98,3 +97,34 @@ Route::group('/ticket', function () {
});
//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']);
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']);
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']);
Route::any('/user/edit', [app\common\controller\UserController::class, 'edit']);
Route::any('/user/savePassword', [app\common\controller\UserController::class, 'savePassword']);
});