Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 69ae53f545 | |||
| 1500e39bb0 | |||
| a2b01ad9a1 | |||
| 7052f8128a | |||
| e78a1189ad | |||
| c8fdbd5773 | |||
| 4e3616e973 | |||
| e4aebe8ca7 | |||
| aac0d4be6a | |||
| 601c299c2b | |||
| 4ef9784559 | |||
| 4080bfca42 | |||
| 8ef4abded4 | |||
| a43cdd9ba1 | |||
| e84be2be04 | |||
| 494e66488a | |||
| 99d5c0c81d | |||
| 060c1a89c1 | |||
| 1c1b1dab23 | |||
| c04f60c7e4 | |||
| 20b394de65 | |||
| ea88566112 | |||
| a327b56d1b | |||
| ed479e026f | |||
| ef66ecbbef | |||
| fa4ade4b35 | |||
| 1ccaced113 | |||
| bfd458aeb7 | |||
| d42167bf14 | |||
| 7711b76ac3 | |||
| c9674a6ad9 | |||
| 7ab9151e4a | |||
| a8041c4785 |
Generated
-20
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="WEB_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/webman/." isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/webman/./app" isTestSource="false" packagePrefix="app\" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/webman/./app/view/components" isTestSource="false" packagePrefix="app\View\Components\" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/webman/vendor/composer" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/webman/vendor/monolog/monolog" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/webman/vendor/nikic/fast-route" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/webman/vendor/psr/container" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/webman/vendor/psr/log" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/webman/vendor/workerman/coroutine" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/webman/vendor/workerman/webman-framework" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/webman/vendor/workerman/workerman" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
@@ -47,24 +47,27 @@ class AreaController
|
|||||||
{
|
{
|
||||||
$list = RedisHelper::get("rpc_country");
|
$list = RedisHelper::get("rpc_country");
|
||||||
$list = null;
|
$list = null;
|
||||||
if(!$list){
|
// if(!$list){
|
||||||
$res = HttpClient::get(config('const.rpc_domain') . '/country/all');
|
// $res = HttpClient::get(config('const.rpc_domain') . '/country/all');
|
||||||
if ($res['code'] != 200 && $res['data']['code'] != 0){
|
// if ($res['code'] != 200 && $res['data']['code'] != 0){
|
||||||
Log::info('register_rpc',$res);
|
// Log::info('register_rpc',$res);
|
||||||
return Util::fail($res, trans('register_fail'));
|
// return Util::fail($res, trans('register_fail'));
|
||||||
}
|
// }
|
||||||
$list = $res['data']['data']['data'];
|
// $list = $res['data']['data']['data'];
|
||||||
RedisHelper::set("rpc_country", $list, 600);
|
// RedisHelper::set("rpc_country", $list, 600);
|
||||||
}
|
// }
|
||||||
|
|
||||||
// $list = Country::get()->toArray();
|
$list = Country::get()->toArray();
|
||||||
$language = 'en_addr';
|
$name = 'en_addr';
|
||||||
if($request->user['language'] == 'zh_CN'){
|
//$language = $request->user['language'];
|
||||||
$language = 'cn_addr';
|
//$language = 'zh_CN';
|
||||||
|
$language = $request->language;
|
||||||
|
if($language == 'zh_CN'){
|
||||||
|
$name = 'cn_addr';
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($list as &$row) {
|
foreach ($list as &$row) {
|
||||||
$row['name'] = $row[$language];
|
$row['name'] = $row[$name];
|
||||||
}
|
}
|
||||||
return Util::success($list);
|
return Util::success($list);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,14 @@ class CarTypeController
|
|||||||
{
|
{
|
||||||
$list = CarType::getAll();
|
$list = CarType::getAll();
|
||||||
|
|
||||||
if($request->user['language'] != 'zh_CN'){
|
//$language = $request->user['language'];
|
||||||
|
//$language = 'zh_CN';
|
||||||
|
$language = $request->language;
|
||||||
|
if($language == 'en'){
|
||||||
foreach ($list as &$value) {
|
foreach ($list as &$value) {
|
||||||
$value['name'] = $value['name_en'];
|
$value['name'] = $value['name_en'];
|
||||||
}
|
}
|
||||||
}elseif ($request->user['language'] == 'ru'){
|
}elseif ($language == 'ru'){
|
||||||
foreach ($list as &$value) {
|
foreach ($list as &$value) {
|
||||||
$value['name'] = $value['name_ru'];
|
$value['name'] = $value['name_ru'];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,16 @@
|
|||||||
namespace app\controller;
|
namespace app\controller;
|
||||||
|
|
||||||
use app\model\Channel;
|
use app\model\Channel;
|
||||||
|
use app\model\Corp;
|
||||||
use app\model\Customer;
|
use app\model\Customer;
|
||||||
use app\model\CustomerHis;
|
use app\model\CustomerHis;
|
||||||
use app\model\Follow;
|
use app\model\Follow;
|
||||||
|
use app\model\InquiryLog;
|
||||||
use app\model\User;
|
use app\model\User;
|
||||||
use app\service\UserService;
|
use app\service\UserService;
|
||||||
use app\util\Util;
|
use app\util\Util;
|
||||||
use config\constants\Constants;
|
use config\constants\Constants;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use support\Log;
|
use support\Log;
|
||||||
use support\Request;
|
use support\Request;
|
||||||
|
|
||||||
@@ -31,9 +34,13 @@ class CustomerController
|
|||||||
{
|
{
|
||||||
$grade = [];
|
$grade = [];
|
||||||
$gradeConstants = Constants::GRADE_EN;
|
$gradeConstants = Constants::GRADE_EN;
|
||||||
if($request->user['language'] == 'zh_CN'){
|
|
||||||
|
//$language = $request->user['language'];
|
||||||
|
//$language = 'zh_CN';
|
||||||
|
$language = $request->language;
|
||||||
|
if($language == 'zh_CN'){
|
||||||
$gradeConstants = Constants::GRADE;
|
$gradeConstants = Constants::GRADE;
|
||||||
}elseif ($request->user['language'] == 'ru'){
|
}elseif ($language == 'ru'){
|
||||||
$gradeConstants = Constants::GRADE_RU;
|
$gradeConstants = Constants::GRADE_RU;
|
||||||
}
|
}
|
||||||
foreach ($gradeConstants as $key => $value) {
|
foreach ($gradeConstants as $key => $value) {
|
||||||
@@ -54,9 +61,12 @@ class CustomerController
|
|||||||
{
|
{
|
||||||
$grade = [];
|
$grade = [];
|
||||||
$magnitudeConstants = Constants::MAGNITUDE_EN;
|
$magnitudeConstants = Constants::MAGNITUDE_EN;
|
||||||
if($request->user['language'] == 'zh_CN'){
|
//$language = $request->user['language'];
|
||||||
|
//$language = 'zh_CN';
|
||||||
|
$language = $request->language;
|
||||||
|
if($language == 'zh_CN'){
|
||||||
$magnitudeConstants = Constants::MAGNITUDE;
|
$magnitudeConstants = Constants::MAGNITUDE;
|
||||||
}elseif ($request->user['language'] == 'ru'){
|
}elseif ($language == 'ru'){
|
||||||
$magnitudeConstants = Constants::MAGNITUDE_RU;
|
$magnitudeConstants = Constants::MAGNITUDE_RU;
|
||||||
}
|
}
|
||||||
foreach ($magnitudeConstants as $key => $value) {
|
foreach ($magnitudeConstants as $key => $value) {
|
||||||
@@ -77,15 +87,18 @@ class CustomerController
|
|||||||
{
|
{
|
||||||
$list = Channel::getAll();
|
$list = Channel::getAll();
|
||||||
|
|
||||||
if($request->user['language'] != 'zh_CN'){
|
//$language = $request->user['language'];
|
||||||
foreach ($list as &$value) {
|
//$language = 'zh_CN';
|
||||||
$value['name'] = $value['name_en'];
|
// $language = $request->language;
|
||||||
}
|
// if($language != 'zh_CN'){
|
||||||
}elseif ($request->user['language'] == 'ru'){
|
// foreach ($list as &$value) {
|
||||||
foreach ($list as &$value) {
|
// $value['name'] = $value['name_en'];
|
||||||
$value['name'] = $value['name_ru'];
|
// }
|
||||||
}
|
// }elseif ($language == 'ru'){
|
||||||
}
|
// foreach ($list as &$value) {
|
||||||
|
// $value['name'] = $value['name_ru'];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
return Util::success($list);
|
return Util::success($list);
|
||||||
|
|
||||||
@@ -140,6 +153,7 @@ class CustomerController
|
|||||||
$keyword = $request->input('keyword', ''); //follow_last
|
$keyword = $request->input('keyword', ''); //follow_last
|
||||||
$follow_last = $request->input('follow_last', ''); //最后跟进:1:当天跟进客户,2:近三天跟进客户,3:近七天跟进客户
|
$follow_last = $request->input('follow_last', ''); //最后跟进:1:当天跟进客户,2:近三天跟进客户,3:近七天跟进客户
|
||||||
$tagId = $request->input('tag_id', ''); //打有某个标签的客户
|
$tagId = $request->input('tag_id', ''); //打有某个标签的客户
|
||||||
|
$countryId = $request->input('country_id', ''); //打有某个标签的客户
|
||||||
$seas = $request->input('seas', ''); //公海客户
|
$seas = $request->input('seas', ''); //公海客户
|
||||||
|
|
||||||
$where = [];
|
$where = [];
|
||||||
@@ -154,6 +168,10 @@ class CustomerController
|
|||||||
}else{
|
}else{
|
||||||
$where[] = ['user_id', $userId];
|
$where[] = ['user_id', $userId];
|
||||||
}
|
}
|
||||||
|
$where[] = ['status', 1];
|
||||||
|
if (!empty($countryId)){
|
||||||
|
$where[] = ['country_id', $countryId];
|
||||||
|
}
|
||||||
//验证权限
|
//验证权限
|
||||||
// if ($request->user['role'] != 1) {
|
// if ($request->user['role'] != 1) {
|
||||||
// $where[] =['user_id',$userId] ;
|
// $where[] =['user_id',$userId] ;
|
||||||
@@ -178,14 +196,20 @@ class CustomerController
|
|||||||
|
|
||||||
// 执行分页查询 //关联标签tags //关联标签及分组tags.group
|
// 执行分页查询 //关联标签tags //关联标签及分组tags.group
|
||||||
$query = Customer::with('tags')->where($where)
|
$query = Customer::with('tags')->where($where)
|
||||||
->orderBy('customer.id', 'desc');
|
->orderBy('crm_customer.id', 'desc');
|
||||||
if(!empty($tagId)){
|
if(!empty($tagId)){
|
||||||
// $query->with(['tags' => function($query) use ($tagId){
|
//查询有$tagId 里任意一个标签的客户
|
||||||
|
// $query->whereHas('tags', function($query) use ($tagId){
|
||||||
// $query->where('tag.id', $tagId);
|
// $query->where('tag.id', $tagId);
|
||||||
// }]);
|
// });
|
||||||
$query->whereHas('tags', function($query) use ($tagId){
|
|
||||||
$query->where('tag.id', $tagId);
|
//查询有$tagId 里所有标签的客户
|
||||||
});
|
$tagId = explode(',', $tagId);
|
||||||
|
foreach ($tagId as $id) {
|
||||||
|
$query->whereHas('tags', function($query) use ($id){
|
||||||
|
$query->where('tag_id', $id);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!Util::isEmpty($keyword)) {
|
if (!Util::isEmpty($keyword)) {
|
||||||
$query->where(function ($query) use ($keyword) {
|
$query->where(function ($query) use ($keyword) {
|
||||||
@@ -198,16 +222,31 @@ class CustomerController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$recycle = Util::getParam($request,'recycle', '');
|
$recycle = Util::getParam($request,'recycle', '');
|
||||||
if ($recycle == 'recycle' || $seas == 'seas') {
|
if ($recycle == 'recycle') {
|
||||||
$query->onlyTrashed();
|
$query->onlyTrashed();
|
||||||
}
|
}
|
||||||
|
if ($seas == 'seas') {
|
||||||
|
$user = User::where('id', $userId)->first();
|
||||||
|
$corpId = $user?$user->corp_id:0;
|
||||||
|
if($corpId == 1){
|
||||||
|
$query->whereIn('channel_id', [1,2,3,4,5,6,7,8]);
|
||||||
|
} elseif($corpId == 3) {
|
||||||
|
$query->whereIn('channel_id', [9,10,11]);
|
||||||
|
} else{
|
||||||
|
$query->whereIn('channel_id', [0]);
|
||||||
|
}
|
||||||
|
$query->withTrashed();
|
||||||
|
}
|
||||||
|
|
||||||
$data = $query->paginate($perPage, ['*'], 'page', $page);
|
$data = $query->paginate($perPage, ['*'], 'page', $page);
|
||||||
|
|
||||||
foreach ($data->items() as &$value) {
|
foreach ($data->items() as &$value) {
|
||||||
$value = Customer::getCustomer($value, $request);
|
$value = Customer::getCustomer($value, $request);
|
||||||
if($seas == 'seas'){
|
if($seas == 'seas'){
|
||||||
$value['seas_time'] = time()-strtotime($value['deleted_at']);
|
$value['phone'] = Util::mask($value['phone']);
|
||||||
|
$value['email'] = Util::mask($value['email']);
|
||||||
|
$value['WhatsApp'] = Util::mask($value['WhatsApp']);
|
||||||
|
$value['seas_time'] = time()-(empty($value['deleted_at'])?strtotime($value['updated_at']):strtotime($value['deleted_at']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,10 +320,10 @@ class CustomerController
|
|||||||
if (Util::isEmpty($country_id)) {
|
if (Util::isEmpty($country_id)) {
|
||||||
// return Util::fail([],'country_id'.trans('not_null'));
|
// return Util::fail([],'country_id'.trans('not_null'));
|
||||||
}
|
}
|
||||||
$car_type_id = Util::getParam($request, 'car_type_id');
|
// $car_type_id = Util::getParam($request, 'car_type_id');
|
||||||
if (Util::isEmpty($car_type_id)) {
|
// if (Util::isEmpty($car_type_id)) {
|
||||||
return Util::fail([], trans('car_type_not_null'));
|
// return Util::fail([], trans('car_type_not_null'));
|
||||||
}
|
// }
|
||||||
$contacts = Util::getParam($request, 'contacts');
|
$contacts = Util::getParam($request, 'contacts');
|
||||||
$email = Util::getParam($request, 'email');
|
$email = Util::getParam($request, 'email');
|
||||||
$phone = Util::getParam($request, 'phone');
|
$phone = Util::getParam($request, 'phone');
|
||||||
@@ -292,16 +331,19 @@ class CustomerController
|
|||||||
return Util::fail([], trans('contacts_not_null'));
|
return Util::fail([], trans('contacts_not_null'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$user = User::where(['id' => $request->user['id']])->first();
|
||||||
|
$whatsApp = Util::getParam($request, 'WhatsApp', '');
|
||||||
$data = [
|
$data = [
|
||||||
'user_id' => $request->user['id'],
|
'user_id' => $request->user['id'],
|
||||||
|
'corp_id' => $user->corp_id,
|
||||||
'grade' => Util::getParam($request, 'grade', 0),
|
'grade' => Util::getParam($request, 'grade', 0),
|
||||||
'channel_id' => $channel_id,
|
'channel_id' => $channel_id,
|
||||||
'country_id' => $country_id,
|
'country_id' => $country_id,
|
||||||
'car_type_id' => $car_type_id,
|
// 'car_type_id' => $car_type_id,
|
||||||
'magnitude' => Util::getParam($request, 'magnitude', 0),
|
'magnitude' => Util::getParam($request, 'magnitude', 0),
|
||||||
'email' => $email,
|
'email' => $email,
|
||||||
'phone' => $phone,
|
'phone' => $phone,
|
||||||
'WhatsApp' => Util::getParam($request, 'WhatsApp', ''),
|
'WhatsApp' => $whatsApp,
|
||||||
'contacts' => $contacts,
|
'contacts' => $contacts,
|
||||||
'describe' => Util::getParam($request, 'describe'),
|
'describe' => Util::getParam($request, 'describe'),
|
||||||
'lat' => Util::getParam($request, 'lat', 0),
|
'lat' => Util::getParam($request, 'lat', 0),
|
||||||
@@ -311,6 +353,16 @@ class CustomerController
|
|||||||
];
|
];
|
||||||
|
|
||||||
if (Util::isEmpty($id)) {
|
if (Util::isEmpty($id)) {
|
||||||
|
$data['enter_user_id'] = $request->user->uid;
|
||||||
|
$distinct = [
|
||||||
|
'email' => $email,
|
||||||
|
'phone' => $phone,
|
||||||
|
'whatsapp' => $whatsApp,
|
||||||
|
];
|
||||||
|
$dis = $this->distinct($distinct, $user->corp_id);
|
||||||
|
if($dis){
|
||||||
|
return Util::fail([], '客户线索重复,已经有人在跟进');
|
||||||
|
}
|
||||||
$res = Customer::create($data);
|
$res = Customer::create($data);
|
||||||
} else {
|
} else {
|
||||||
unset($data['grade']);
|
unset($data['grade']);
|
||||||
@@ -327,6 +379,26 @@ class CustomerController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function distinct($params, $corpId){
|
||||||
|
|
||||||
|
$customer = Customer::where('corp_id', $corpId)
|
||||||
|
->where((function (Builder $query) use ($params) {
|
||||||
|
if(!empty($params['email']))
|
||||||
|
$query->Orwhere('email', '=', $params['email']);
|
||||||
|
if(!empty($params['phone']))
|
||||||
|
$query->Orwhere('phone', '=', $params['phone']);
|
||||||
|
if(!empty($params['whatsApp']))
|
||||||
|
$query->Orwhere('whatsApp', '=', $params['whatsApp']);
|
||||||
|
return $query;
|
||||||
|
}))
|
||||||
|
->first();
|
||||||
|
if (!empty($customer)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 领取公海客户
|
* 领取公海客户
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
@@ -339,8 +411,11 @@ class CustomerController
|
|||||||
if (Util::isEmpty($customerId)) {
|
if (Util::isEmpty($customerId)) {
|
||||||
return Util::fail([], trans('customer_id').trans('not_null'));
|
return Util::fail([], trans('customer_id').trans('not_null'));
|
||||||
}
|
}
|
||||||
|
$user = User::where(['id' => $userId])->first();
|
||||||
$data = [
|
$data = [
|
||||||
'user_id' => $request->user['id']
|
'user_id' => $request->user['id'],
|
||||||
|
'obtain' => time(),
|
||||||
|
'corp_id' => $user->corp_id,
|
||||||
];
|
];
|
||||||
$customer= Customer::withTrashed()->find($customerId);
|
$customer= Customer::withTrashed()->find($customerId);
|
||||||
|
|
||||||
@@ -357,6 +432,7 @@ class CustomerController
|
|||||||
'user_his' => 0,
|
'user_his' => 0,
|
||||||
'user_id' => $userId,
|
'user_id' => $userId,
|
||||||
]);
|
]);
|
||||||
|
self::inquiryUpdate($customer,$request->user['id']);
|
||||||
|
|
||||||
if ($res) {
|
if ($res) {
|
||||||
return Util::success($res, trans('success'));
|
return Util::success($res, trans('success'));
|
||||||
@@ -366,6 +442,36 @@ class CustomerController
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 询单修改
|
||||||
|
*/
|
||||||
|
public static function inquiryUpdate($customer,$userId = null)
|
||||||
|
{
|
||||||
|
if(empty($customer->sn) || $customer->type!=1){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$inquiryLog = InquiryLog::where('order_no', $customer->sn)->first();
|
||||||
|
if(empty($inquiryLog)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$userId = $userId??$customer->user_id;
|
||||||
|
|
||||||
|
if ($userId == 0){
|
||||||
|
$inquiryLog->recipient = 0;
|
||||||
|
$inquiryLog->t_time = time();
|
||||||
|
$inquiryLog->status = 1;
|
||||||
|
$inquiryLog->r_time = time();
|
||||||
|
$inquiryLog->save();
|
||||||
|
}else {
|
||||||
|
$inquiryLog->recipient = $customer->user_id;
|
||||||
|
$inquiryLog->t_time = time();
|
||||||
|
$inquiryLog->save();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量转让
|
* 批量转让
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
@@ -374,25 +480,21 @@ class CustomerController
|
|||||||
public function cede(Request $request)
|
public function cede(Request $request)
|
||||||
{
|
{
|
||||||
$customerId = Util::getParam($request, 'customer_id');
|
$customerId = Util::getParam($request, 'customer_id');
|
||||||
$user_sn = Util::getParam($request, 'user_sn');
|
$userId = Util::getParam($request, 'user_id');
|
||||||
$userId = $request->user['id'];
|
$selfId = $request->user['id'];
|
||||||
if (Util::isEmpty($user_sn)) {
|
if (Util::isEmpty($userId)) {
|
||||||
return Util::fail([], 'ID'.trans('not_null'));
|
return Util::fail([], 'user_id'.trans('not_null'));
|
||||||
|
}
|
||||||
|
if (Util::isEmpty($customerId)) {
|
||||||
|
return Util::fail([], 'customer_id'.trans('not_null'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = User::where(['sn' => $user_sn])->first();
|
$user = User::where(['id' => $userId])->first();
|
||||||
if (Util::isEmpty($user)) {
|
if (Util::isEmpty($user)) {
|
||||||
return Util::fail(null, trans('user_none'));
|
return Util::fail(null, trans('user_none'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Util::isEmpty($customerId)){
|
$query= Customer::where('user_id',$selfId)->where('id',$customerId);
|
||||||
$data = [
|
|
||||||
'user_id' => $userId
|
|
||||||
];
|
|
||||||
$query= Customer::where($data);
|
|
||||||
}else{
|
|
||||||
$query= Customer::whereIn('id',explode(',',$customerId));
|
|
||||||
}
|
|
||||||
$customer = $query->get();
|
$customer = $query->get();
|
||||||
|
|
||||||
foreach ($customer as $item) {
|
foreach ($customer as $item) {
|
||||||
@@ -402,8 +504,14 @@ class CustomerController
|
|||||||
'user_his' => $item->user_id,
|
'user_his' => $item->user_id,
|
||||||
'user_id' => $user['id'],
|
'user_id' => $user['id'],
|
||||||
]);
|
]);
|
||||||
|
self::inquiryUpdate($customer,$user->id);
|
||||||
}
|
}
|
||||||
$res = $query->update(['user_id' => $user->id]);
|
|
||||||
|
$data = [
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'obtain' => time(),
|
||||||
|
];
|
||||||
|
$res = $query->update($data);
|
||||||
|
|
||||||
|
|
||||||
if ($res) {
|
if ($res) {
|
||||||
|
|||||||
@@ -55,9 +55,7 @@ class FollowController
|
|||||||
if(Util::isEmpty($userId)){
|
if(Util::isEmpty($userId)){
|
||||||
return Util::fail(['user_id'=>$userId],trans('user_none'));
|
return Util::fail(['user_id'=>$userId],trans('user_none'));
|
||||||
}
|
}
|
||||||
if($request->user['role']!=1){
|
$where['user_id'] = $userId;
|
||||||
$where['user_id'] = $userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
//跟进id
|
//跟进id
|
||||||
$id = Util::getParam($request,'id');
|
$id = Util::getParam($request,'id');
|
||||||
@@ -123,10 +121,13 @@ class FollowController
|
|||||||
if(Util::isEmpty($type)){
|
if(Util::isEmpty($type)){
|
||||||
return Util::fail([],'type'.trans('not_null'));
|
return Util::fail([],'type'.trans('not_null'));
|
||||||
}
|
}
|
||||||
$picture = Util::getParam($request,'picture');
|
|
||||||
if(Util::isEmpty($picture)){
|
$picture = Util::getParam($request,'picture');
|
||||||
return Util::fail([],trans('picture_not_null'));
|
$audio_text = Util::getParam($request,'audio_text');
|
||||||
}
|
$remark = Util::getParam($request,'remark');
|
||||||
|
if(Util::isEmpty($picture) && Util::isEmpty($audio_text) && Util::isEmpty($remark)){
|
||||||
|
return Util::fail([],trans('follow_not_null'));
|
||||||
|
}
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'user_id'=>$request->user['id'],
|
'user_id'=>$request->user['id'],
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ class TagGroupController
|
|||||||
{
|
{
|
||||||
$list = TagGroup::with('tags')->get();
|
$list = TagGroup::with('tags')->get();
|
||||||
$languageArr = Constants::LANGUAGE;
|
$languageArr = Constants::LANGUAGE;
|
||||||
$language = $request->user['language'];
|
// $language = $request->user['language'];
|
||||||
|
//$language = 'zh_CN';
|
||||||
|
$language = $request->language;
|
||||||
foreach ($list as &$item) {
|
foreach ($list as &$item) {
|
||||||
$item['names'] = unserialize($item['names']);
|
$item['names'] = unserialize($item['names']);
|
||||||
if (in_array($language, $languageArr)) {
|
if (in_array($language, $languageArr)) {
|
||||||
|
|||||||
@@ -2,16 +2,19 @@
|
|||||||
|
|
||||||
namespace app\controller;
|
namespace app\controller;
|
||||||
|
|
||||||
|
use app\model\Corp;
|
||||||
use app\model\Country;
|
use app\model\Country;
|
||||||
use app\model\FeishuUser;
|
use app\model\FeishuUser;
|
||||||
use app\model\User;
|
use app\model\User;
|
||||||
use app\model\UserSn;
|
use app\model\UserSn;
|
||||||
|
use app\service\AuthService;
|
||||||
use app\service\MailService;
|
use app\service\MailService;
|
||||||
use app\service\UserService;
|
use app\service\UserService;
|
||||||
use app\util\HttpClient;
|
use app\util\HttpClient;
|
||||||
use app\util\JwtUtil;
|
use app\util\JwtUtil;
|
||||||
use app\util\Util;
|
use app\util\Util;
|
||||||
use config\constants\Constants;
|
use config\constants\Constants;
|
||||||
|
use support\exception\BusinessException;
|
||||||
use support\Log;
|
use support\Log;
|
||||||
use support\Redis;
|
use support\Redis;
|
||||||
use support\Request;
|
use support\Request;
|
||||||
@@ -21,24 +24,40 @@ class UserController
|
|||||||
/**
|
/**
|
||||||
* 不需要登录的方法
|
* 不需要登录的方法
|
||||||
*/
|
*/
|
||||||
protected $noNeedLogin = ['login', 'sendCode', 'register', 'step'];
|
protected $noNeedLogin = ['login', 'sendCode', 'register', 'step', 'savePassword'];
|
||||||
|
|
||||||
public function login(Request $request)
|
public function login(Request $request)
|
||||||
{
|
{
|
||||||
$email = Util::getParam($request, 'email');
|
$email = Util::getParam($request, 'email');
|
||||||
|
$corpAbbr = Util::getParam($request, 'abbr');
|
||||||
$language = Util::getParam($request, 'language');
|
$language = Util::getParam($request, 'language');
|
||||||
if (Util::isEmpty($email)) {
|
if (Util::isEmpty($email)) {
|
||||||
return Util::fail([], trans('required_not_null'));
|
return Util::fail([], trans('required_not_null'));
|
||||||
}
|
}
|
||||||
|
if (Util::isEmpty($corpAbbr)) {
|
||||||
|
return Util::fail([], 'abbr'.trans('not_null'));
|
||||||
|
}
|
||||||
$password = Util::getParam($request, 'password');
|
$password = Util::getParam($request, 'password');
|
||||||
if (Util::isEmpty($password)) {
|
if (Util::isEmpty($password)) {
|
||||||
return Util::fail([], trans('required_not_null'));
|
return Util::fail([], trans('required_not_null'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = User::select(['id', 'name', 'sex', 'role', 'avatar', 'email', 'password'])
|
// 获取企业ID
|
||||||
->where('status', 0)
|
$corpInfo = Corp::where('abbr', $corpAbbr)->first();
|
||||||
->where('email', $request->post('email'))
|
if (!$corpInfo) {
|
||||||
|
return Util::fail([], '公司不存在');
|
||||||
|
}
|
||||||
|
$corpId = $corpInfo->id;
|
||||||
|
|
||||||
|
$user = User::where('status', 0)
|
||||||
|
// ->where('email', $request->post('email'))
|
||||||
|
->where('corp_id', $corpId)
|
||||||
|
->OrWhere(['email' => $request->post('email'),'phone' => $request->post('email')])
|
||||||
->first();
|
->first();
|
||||||
|
// $builder = User::where('status', 0)
|
||||||
|
// ->where('email', $request->post('email'));
|
||||||
|
// $sql = str_replace(['?'], ['\'%s\''], $builder->toSql());
|
||||||
|
// $fullSql = vsprintf($sql, $builder->getBindings());
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return Util::fail(['user' => $user], trans('user_none'));
|
return Util::fail(['user' => $user], trans('user_none'));
|
||||||
}
|
}
|
||||||
@@ -47,14 +66,20 @@ class UserController
|
|||||||
$userPassword = $user['password'];
|
$userPassword = $user['password'];
|
||||||
|
|
||||||
//加密
|
//加密
|
||||||
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
// $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
||||||
|
|
||||||
//验证密码
|
//验证密码
|
||||||
// if (!password_verify($userPassword, $hashedPassword)) {
|
// if (!password_verify($userPassword, $hashedPassword)) {
|
||||||
if ($userPassword == $hashedPassword) {
|
// if ($userPassword == $hashedPassword) {
|
||||||
|
|
||||||
|
if (!password_verify($password, $userPassword)) {
|
||||||
locale($language);
|
locale($language);
|
||||||
return Util::fail([], trans('password_error'));
|
return Util::fail([], trans('password_error'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($user['status'] != 1) {
|
||||||
|
return Util::fail([], '账号已禁用',403);
|
||||||
|
}
|
||||||
$userId = $user['id']; // 实际从数据库获取
|
$userId = $user['id']; // 实际从数据库获取
|
||||||
|
|
||||||
|
|
||||||
@@ -65,17 +90,29 @@ class UserController
|
|||||||
$result = $user;
|
$result = $user;
|
||||||
unset($result['password']);
|
unset($result['password']);
|
||||||
$result['token'] = $token;
|
$result['token'] = $token;
|
||||||
$result['feishu_openid'] = FeishuUser::where('user_id', $userId)->value('open_id');
|
// $result['feishu_openid'] = FeishuUser::where('user_id', $userId)->value('open_id');
|
||||||
|
$result['feishu_openid'] = $result['openid']??'';
|
||||||
|
|
||||||
if (!Util::isEmpty($language)) {
|
if (!Util::isEmpty($language)) {
|
||||||
User::where('id', $userId)
|
// User::where('id', $userId)
|
||||||
->update(['language' => $language]);
|
// ->update(['language' => $language]);
|
||||||
locale($language);
|
locale($language);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Util::success($result, trans('login_success'));
|
return Util::success($result, trans('login_success'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function loginNew(Request $request)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$authService = new AuthService();
|
||||||
|
$result = $authService->uPwdLogin($request->all());
|
||||||
|
return Util::success($result, '登录成功');
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
Util::fail([],$e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送邮箱验证码
|
* 发送邮箱验证码
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
@@ -114,12 +151,13 @@ class UserController
|
|||||||
*/
|
*/
|
||||||
public function register(Request $request)
|
public function register(Request $request)
|
||||||
{
|
{
|
||||||
$email = Util::getParam($request, 'email', 'asdf');
|
$email = Util::getParam($request, 'email', '');
|
||||||
$code = Util::getParam($request, 'code');
|
$code = Util::getParam($request, 'code');
|
||||||
$sex = Util::getParam($request, 'sex', 0);
|
$sex = Util::getParam($request, 'sex', 0);
|
||||||
$name = Util::getParam($request, 'name', '');
|
$name = Util::getParam($request, 'name', '');
|
||||||
$password = Util::getParam($request, 'password');
|
$password = Util::getParam($request, 'password');
|
||||||
$mobile = Util::getParam($request, 'mobile');
|
$mobile = Util::getParam($request, 'mobile');
|
||||||
|
$corpAbbr = Util::getParam($request, 'abbr');
|
||||||
$id = Util::getParam($request, 'id');
|
$id = Util::getParam($request, 'id');
|
||||||
$language = Util::getParam($request, 'language');
|
$language = Util::getParam($request, 'language');
|
||||||
|
|
||||||
@@ -143,7 +181,7 @@ class UserController
|
|||||||
if ($code != $verification_code) {
|
if ($code != $verification_code) {
|
||||||
return Util::fail([], trans('code_error'));
|
return Util::fail([], trans('code_error'));
|
||||||
}
|
}
|
||||||
if(strlen($password) < 6) {
|
if(strlen($password) < 8) {
|
||||||
return Util::fail([], trans('password_short'));
|
return Util::fail([], trans('password_short'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,36 +189,33 @@ class UserController
|
|||||||
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'mobile' => $mobile,
|
'phone' => $mobile,
|
||||||
'email' => $email,
|
'email' => $email,
|
||||||
'name' => '用户_'.rand(111111, 999999),
|
'name' => '用户_'.rand(111111, 999999),
|
||||||
'sex' => $sex,
|
'sex' => $sex,
|
||||||
'role' => 1,
|
|
||||||
'password' => $hashedPassword,
|
'password' => $hashedPassword,
|
||||||
'status' => 0,
|
'status' => 1,
|
||||||
'avatar' => 'lingke_crm/logo.png'
|
'avatar' => ''
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// 获取可用用户编号
|
||||||
if (Util::isEmpty($id)) {
|
$userSnModel = new UserSn();
|
||||||
$option = ['email' => $email];
|
$sn = $userSnModel->where('user_id', '=', 0)->inRandomOrder()->first();
|
||||||
$userService = new UserService;
|
if (!$sn) {
|
||||||
$res = $userService->createOrquery($option);
|
Log::error('用户注册时未找到适用编号');
|
||||||
Log::info('register_rpc',$res);
|
return Util::fail([], '未找到适用编号');
|
||||||
// return Util::fail($res, trans('register_fail'));
|
|
||||||
if ($res['code'] != 200 && $res['data']['code'] != 0){
|
|
||||||
return Util::fail($res, trans('register_fail'));
|
|
||||||
}
|
|
||||||
$data['sn'] = $res['data']['data']['sn'];
|
|
||||||
$data['id'] = $res['data']['data']['uid'];
|
|
||||||
$res = User::firstOrCreate(['sn' => $data['sn']],$data);
|
|
||||||
$res['id'] = $data['id'];
|
|
||||||
} else {
|
|
||||||
$res = User::where('id', $id)
|
|
||||||
->update($data);
|
|
||||||
// Log::info('update', ['res' => $res]);
|
|
||||||
(!$res) ?: $res = User::find($id)->toArray();
|
|
||||||
}
|
}
|
||||||
|
$data['sn'] = $sn->user_sn;
|
||||||
|
|
||||||
|
|
||||||
|
// 获取企业ID
|
||||||
|
$corpInfo = Corp::where('abbr', $corpAbbr)->first();
|
||||||
|
if (!$corpInfo) {
|
||||||
|
return Util::fail([], '公司不存在');
|
||||||
|
}
|
||||||
|
$data['corp_id'] = $corpInfo->id;
|
||||||
|
|
||||||
|
$res = User::create($data);
|
||||||
|
|
||||||
unset($res['password']);
|
unset($res['password']);
|
||||||
locale($language);
|
locale($language);
|
||||||
@@ -221,10 +256,11 @@ class UserController
|
|||||||
->first();
|
->first();
|
||||||
$user->toArray();
|
$user->toArray();
|
||||||
unset($user->password);
|
unset($user->password);
|
||||||
$user['feishu_openid'] = FeishuUser::where('user_id', $userId)->value('open_id');
|
// $user['feishu_openid'] = FeishuUser::where('user_id', $userId)->value('open_id');
|
||||||
|
$user['feishu_openid'] = $user['openid']??'';
|
||||||
$user['country_name'] = Country::where('id', $user['country_id'])->value('cn_addr');
|
$user['country_name'] = Country::where('id', $user['country_id'])->value('cn_addr');
|
||||||
$ossservice = new \app\service\OssService();
|
$ossservice = new \app\service\OssService();
|
||||||
$user['avatar_url'] = $user['avatar'] ? $ossservice->generatePrivateUrl($user['avatar']) : '';
|
$user['avatar_url'] = $user['avatar'];
|
||||||
$user['socialize_pic_url'] = $user['socialize_pic'] ? $ossservice->generatePrivateUrl($user['socialize_pic']) : '';
|
$user['socialize_pic_url'] = $user['socialize_pic'] ? $ossservice->generatePrivateUrl($user['socialize_pic']) : '';
|
||||||
|
|
||||||
// 重构数组
|
// 重构数组
|
||||||
@@ -233,6 +269,21 @@ class UserController
|
|||||||
return Util::success($user, trans('success'));
|
return Util::success($user, trans('success'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getUsers(Request $request)
|
||||||
|
{
|
||||||
|
$userId = $request->user['id'];
|
||||||
|
$abbr = $request->input('abbr');
|
||||||
|
if(empty($abbr)){
|
||||||
|
return Util::fail([], 'abbr'.trans('not_null'));
|
||||||
|
}
|
||||||
|
$corpId = Corp::where('abbr', $abbr)->value('id');
|
||||||
|
$where[] = ['corp_id' , $corpId];
|
||||||
|
$where[] = ['status' , 1];
|
||||||
|
$user = User::select('id','name')->where($where)
|
||||||
|
->get();
|
||||||
|
return Util::success($user, trans('success'));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改
|
* 修改
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
@@ -287,16 +338,24 @@ class UserController
|
|||||||
$email = Util::getParam($request, 'email');
|
$email = Util::getParam($request, 'email');
|
||||||
$code = Util::getParam($request, 'code');
|
$code = Util::getParam($request, 'code');
|
||||||
$verification_code = Redis::get("verification_code:{$email}");
|
$verification_code = Redis::get("verification_code:{$email}");
|
||||||
$id = $request->user['id'];
|
// $id = $request->user->uid;
|
||||||
|
|
||||||
if ($code != $verification_code) {
|
if ($code != $verification_code) {
|
||||||
return Util::fail([], trans('code_error'));
|
return Util::fail([], trans('code_error'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$res = User::where('id', $id)
|
// $res = User::where('id', $id)
|
||||||
|
// ->first();
|
||||||
|
// if($res['email'] != $email) {
|
||||||
|
// return Util::fail([], trans('email_consistent'));
|
||||||
|
// }
|
||||||
|
|
||||||
|
$user = User::where('status', 0)
|
||||||
|
// ->where('corp_id', $corpId)
|
||||||
|
->OrWhere(['email' => $request->post('email'),'phone' => $request->post('email')])
|
||||||
->first();
|
->first();
|
||||||
if($res['email'] != $email) {
|
if(!$user) {
|
||||||
return Util::fail([], trans('email_consistent'));
|
return Util::fail([], trans('user_none'));
|
||||||
}
|
}
|
||||||
|
|
||||||
//加密
|
//加密
|
||||||
@@ -306,9 +365,11 @@ class UserController
|
|||||||
$data = [
|
$data = [
|
||||||
'password' => $hashedPassword
|
'password' => $hashedPassword
|
||||||
];
|
];
|
||||||
|
$user->password = $hashedPassword;
|
||||||
|
$res = $user->save();
|
||||||
|
|
||||||
$res = User::where('id', $id)
|
// $res = User::where('id', $id)
|
||||||
->update($data);
|
// ->update($data);
|
||||||
|
|
||||||
if ($res) {
|
if ($res) {
|
||||||
return Util::success($res, trans('save_success'));
|
return Util::success($res, trans('save_success'));
|
||||||
@@ -334,7 +395,7 @@ class UserController
|
|||||||
return Util::fail([], trans('param_error'));
|
return Util::fail([], trans('param_error'));
|
||||||
}
|
}
|
||||||
$data = [
|
$data = [
|
||||||
'language' => $language,
|
// 'language' => $language,
|
||||||
];
|
];
|
||||||
|
|
||||||
$res = User::where('id', $id)
|
$res = User::where('id', $id)
|
||||||
|
|||||||
@@ -77,17 +77,19 @@ class AuthMiddleware implements MiddlewareInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
$userId = $decoded->sub;
|
$userId = $decoded->sub;
|
||||||
$user = User::select(['id','name','sex','role','avatar','email','password','language','created_at'])
|
$user = User::find($userId);
|
||||||
->find($userId);
|
|
||||||
if(!$user){
|
if(!$user){
|
||||||
return Util::fail(['user'=>$user],trans('user_none'));
|
return Util::fail(['user'=>$userId],trans('user_none'));
|
||||||
}
|
}
|
||||||
$user = $user->toArray();
|
$user = $user->toArray();
|
||||||
|
|
||||||
// 将用户ID存入请求对象,供后续使用
|
// 将用户ID存入请求对象,供后续使用
|
||||||
// $request->user = ['id' => $userId];
|
// $request->user = ['id' => $userId];
|
||||||
$request->user = $user;
|
$request->user = $user;
|
||||||
locale($user['language']);
|
$request->language = $request->header('fdesk-language');
|
||||||
|
|
||||||
|
// locale($user['language']);
|
||||||
|
locale($request->language);
|
||||||
return $handler($request);
|
return $handler($request);
|
||||||
} catch (BusinessException $e) {
|
} catch (BusinessException $e) {
|
||||||
return json(['code' => 401, 'msg' => $e->getMessage()]);
|
return json(['code' => 401, 'msg' => $e->getMessage()]);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class Channel extends Model
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $table = 'channel';
|
protected $table = 'inquiry_channel';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The primary key associated with the table.
|
* The primary key associated with the table.
|
||||||
@@ -42,7 +42,7 @@ class Channel extends Model
|
|||||||
|
|
||||||
public static function getAll()
|
public static function getAll()
|
||||||
{
|
{
|
||||||
$list = self::get()->select('id','name','name_en','status')->where('status',0)->toArray();
|
$list = self::get()->select('id','name','name_en','status')->where('status',1)->toArray();
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\model;
|
||||||
|
|
||||||
|
|
||||||
|
use app\util\Util;
|
||||||
|
use config\constants\Constants;
|
||||||
|
use DateTimeInterface;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
use support\Model;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
|
class Corp extends Model
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The table associated with the model.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $table = 'corp';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The primary key associated with the table.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $primaryKey = 'id';
|
||||||
|
|
||||||
|
//设置黑名单
|
||||||
|
protected $guarded = ['id','created_at','updated_at'];
|
||||||
|
|
||||||
|
// 指定日期字段存储格式为时间戳
|
||||||
|
protected $dateFormat = 'U';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the model should be timestamped.
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
public $timestamps = true;
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@ class Customer extends Model
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $table = 'customer';
|
protected $table = 'crm_customer';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The primary key associated with the table.
|
* The primary key associated with the table.
|
||||||
@@ -67,8 +67,11 @@ class Customer extends Model
|
|||||||
*/
|
*/
|
||||||
public static function getCustomer($customer, $request, $tag = false)
|
public static function getCustomer($customer, $request, $tag = false)
|
||||||
{
|
{
|
||||||
$language = $request->user['language'] ?: 'en';
|
//$language = $request->user['language'] ?: 'en';
|
||||||
|
//$language = 'zh_CN';
|
||||||
|
$language = $request->language;
|
||||||
$customer['grade_txt'] = Util::language($language, Constants::GRADE_EN[$customer['grade']], Constants::GRADE[$customer['grade']], Constants::GRADE_RU[$customer['grade']]);
|
$customer['grade_txt'] = Util::language($language, Constants::GRADE_EN[$customer['grade']], Constants::GRADE[$customer['grade']], Constants::GRADE_RU[$customer['grade']]);
|
||||||
|
$customer['magnitude'] = ($customer['magnitude']==0)?1:$customer['magnitude'];
|
||||||
$customer['magnitude_txt'] = Util::language($language, Constants::MAGNITUDE_EN[$customer['magnitude']], Constants::MAGNITUDE[$customer['magnitude']], Constants::MAGNITUDE_RU[$customer['magnitude']]);
|
$customer['magnitude_txt'] = Util::language($language, Constants::MAGNITUDE_EN[$customer['magnitude']], Constants::MAGNITUDE[$customer['magnitude']], Constants::MAGNITUDE_RU[$customer['magnitude']]);
|
||||||
$customer['sex_txt'] = Util::language($language, Constants::SEX_EN[$customer['sex']], Constants::SEX[$customer['sex']], Constants::SEX_RU[$customer['sex']]);
|
$customer['sex_txt'] = Util::language($language, Constants::SEX_EN[$customer['sex']], Constants::SEX[$customer['sex']], Constants::SEX_RU[$customer['sex']]);
|
||||||
|
|
||||||
@@ -97,6 +100,7 @@ class Customer extends Model
|
|||||||
|
|
||||||
$customer = Util::formatDate($customer,['follow_last']);
|
$customer = Util::formatDate($customer,['follow_last']);
|
||||||
$nameLang = $language=='en'?'name_en':($language=='ru'?'name_ru':'name');
|
$nameLang = $language=='en'?'name_en':($language=='ru'?'name_ru':'name');
|
||||||
|
$nameLang = 'name';
|
||||||
$countryLang = $language=='en'?'en_addr':'cn_addr';
|
$countryLang = $language=='en'?'en_addr':'cn_addr';
|
||||||
$customer['car_type_name'] = empty($customer['car_type_id'])?'':CarType::where(['id'=>$customer['car_type_id']])->value($nameLang);
|
$customer['car_type_name'] = empty($customer['car_type_id'])?'':CarType::where(['id'=>$customer['car_type_id']])->value($nameLang);
|
||||||
$customer['country_name'] = empty($customer['country_id'])?'':Country::where(['id'=>$customer['country_id']])->value($countryLang);
|
$customer['country_name'] = empty($customer['country_id'])?'':Country::where(['id'=>$customer['country_id']])->value($countryLang);
|
||||||
@@ -118,7 +122,7 @@ class Customer extends Model
|
|||||||
*/
|
*/
|
||||||
public function tags()
|
public function tags()
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(Tag::class, 'customer_tag', 'customer_id', 'tag_id')
|
return $this->belongsToMany(Tag::class, 'crm_customer_tag', 'customer_id', 'tag_id')
|
||||||
->withTimestamps(); // 如果需要记录关联时间
|
->withTimestamps(); // 如果需要记录关联时间
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class CustomerHis extends Model
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $table = 'customer_his';
|
protected $table = 'crm_customer_his';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The primary key associated with the table.
|
* The primary key associated with the table.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class CustomerTag extends Model
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $table = 'customer_tag';
|
protected $table = 'crm_customer_tag';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The primary key associated with the table.
|
* The primary key associated with the table.
|
||||||
|
|||||||
+11
-7
@@ -16,7 +16,7 @@ class Follow extends Model
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $table = 'follow';
|
protected $table = 'crm_follow';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The primary key associated with the table.
|
* The primary key associated with the table.
|
||||||
@@ -38,8 +38,6 @@ class Follow extends Model
|
|||||||
*/
|
*/
|
||||||
public $timestamps = true;
|
public $timestamps = true;
|
||||||
|
|
||||||
protected $dates = ['created_at', 'updated_at', 'follow_time'];
|
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'updated_at' => 'datetime:Y-m-d H:i:s', // 指定序列化格式
|
'updated_at' => 'datetime:Y-m-d H:i:s', // 指定序列化格式
|
||||||
'created_at' => 'datetime:Y-m-d H:i:s', // 指定序列化格式
|
'created_at' => 'datetime:Y-m-d H:i:s', // 指定序列化格式
|
||||||
@@ -51,10 +49,16 @@ class Follow extends Model
|
|||||||
public static function getFollow($follow,$domain = 'https://vehicle-album.oss-cn-beijing.aliyuncs.com')
|
public static function getFollow($follow,$domain = 'https://vehicle-album.oss-cn-beijing.aliyuncs.com')
|
||||||
{
|
{
|
||||||
$follow['type_txt'] = Constants::FOLLOW[$follow['type']];
|
$follow['type_txt'] = Constants::FOLLOW[$follow['type']];
|
||||||
$follow['firstFollowtime'] = $follow['follow_time'];
|
$follow['firstFollowtime'] = $follow['follow_time'];
|
||||||
$ossservice = new OssService();
|
if (isset($follow['picture']) && !empty($follow['picture'])) {
|
||||||
$oss_picture = $ossservice->generatePrivateUrl($follow['picture'],86400);
|
$ossservice = new OssService();
|
||||||
$follow['oss_picture'] = $oss_picture;
|
$oss_picture = $ossservice->generatePrivateUrl($follow['picture'],86400);
|
||||||
|
$follow['oss_picture'] = $oss_picture;
|
||||||
|
}else {
|
||||||
|
$follow['oss_picture'] = '';
|
||||||
|
}
|
||||||
|
$follow['created_at'] = (!empty($follow['created_at']))?date('Y-m-d H:i:s',strtotime($follow['created_at'])+(3600*8)):'';
|
||||||
|
$follow['updated_at'] = (!empty($follow['updated_at']))?date('Y-m-d H:i:s',strtotime($follow['updated_at'])+(3600*8)):'';
|
||||||
// $follow = Util::formatDate($follow);
|
// $follow = Util::formatDate($follow);
|
||||||
return $follow;
|
return $follow;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\model;
|
||||||
|
|
||||||
|
use support\Model;
|
||||||
|
|
||||||
|
class InquiryLog extends Model
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The connection name for the model.
|
||||||
|
*
|
||||||
|
* @var string|null
|
||||||
|
*/
|
||||||
|
protected $connection = 'mysql';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The table associated with the model.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $table = 'inquiry_log';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The primary key associated with the table.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $primaryKey = 'id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the model should be timestamped.
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
public $timestamps = true;
|
||||||
|
|
||||||
|
|
||||||
|
protected $dateFormat = 'U';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 允许自动填充模型字段
|
||||||
|
*/
|
||||||
|
protected $fillable = [
|
||||||
|
'id', 'order_no', 'enter_user_id', 'recipient',
|
||||||
|
'quality', 'channel', 'email', 'tel', 'whatsapp',
|
||||||
|
'country', 'contacts', 'content', 'status',
|
||||||
|
'r_time', 't_time', 'created_at', 'updated_at'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不允许自动填充模型字段
|
||||||
|
*/
|
||||||
|
protected $guarded = [];
|
||||||
|
|
||||||
|
|
||||||
|
public function enter()
|
||||||
|
{
|
||||||
|
return $this->hasOne(User::class, 'id', 'enter_user_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
// public function recipientInfo()
|
||||||
|
// {
|
||||||
|
// return $this->hasOne(User::class, 'id', 'recipient')->where('status', 1);
|
||||||
|
// }
|
||||||
|
public function recipientInfo()
|
||||||
|
{
|
||||||
|
return $this->hasOne(User::class, 'id', 'recipient');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function countryInfo()
|
||||||
|
{
|
||||||
|
return $this->hasOne(Country::class, 'id', 'country');
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -17,7 +17,7 @@ class Tag extends Model
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $table = 'tag';
|
protected $table = 'crm_tag';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The primary key associated with the table.
|
* The primary key associated with the table.
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class TagGroup extends Model
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $table = 'tag_group';
|
protected $table = 'crm_tag_group';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The primary key associated with the table.
|
* The primary key associated with the table.
|
||||||
|
|||||||
@@ -16,62 +16,6 @@ class Task
|
|||||||
|
|
||||||
public function onWorkerStart()
|
public function onWorkerStart()
|
||||||
{
|
{
|
||||||
// 每半小时执行一次
|
|
||||||
new Crontab('0 */30 * * * *', function(){
|
|
||||||
echo date('Y-m-d H:i:s') . "\n";
|
|
||||||
Log::info('send follow start',[time()]);
|
|
||||||
// FeishuController::send('xinyouhe','ou_e33bb3017ada6c4781398a68e55a4696', '跟进提醒', '您有新的跟进提醒', '');
|
|
||||||
// $customer = Customer::where(['follow_next', '<=', time() + 3600])
|
|
||||||
// ->where(['follow_next', '>', time()])
|
|
||||||
// ->where(['warn', '<', 1])
|
|
||||||
// ->get();
|
|
||||||
// foreach ($customer as $item) {
|
|
||||||
// $feishuUser = FeishuUser::where(['user_id' => $item->user_id])->first();
|
|
||||||
// if ($feishuUser) {
|
|
||||||
// // 获取凭证
|
|
||||||
// $certificate = config($this->config);
|
|
||||||
// // 使用parse_url解析URL
|
|
||||||
// $parsedUrl = parse_url($certificate['rUrl']);
|
|
||||||
// // 获取域名和端口
|
|
||||||
// $host = $parsedUrl['host'];
|
|
||||||
// $port = isset($parsedUrl['port']) ? ':' . $parsedUrl['port'] : '';
|
|
||||||
// $url = $host .$port. '/pages/customer/detile?id='.$customer->id;
|
|
||||||
// $item->warn = 1;
|
|
||||||
// $item->update();
|
|
||||||
// $user = User::first()->where('id', $item->user_id);
|
|
||||||
// Log::info('send',['open_id'=>$item['open_id'],'url'=>$url]);
|
|
||||||
// // FeishuController::send('xinyouhe','ou_e33bb3017ada6c4781398a68e55a4696', '跟进提醒', '您有新的跟进提醒', $url);
|
|
||||||
// FeishuController::send($user->sign,$feishuUser->open_id, '跟进提醒', '您有新的跟进提醒', $url);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
$where = [
|
|
||||||
['follow_next', '<=', time() + 3600],
|
|
||||||
['follow_next', '>', time()],
|
|
||||||
['warn', '<', 1]
|
|
||||||
];
|
|
||||||
$customer = Customer::where($where)->get();
|
|
||||||
foreach ($customer as $item) {
|
|
||||||
$feishuUser = FeishuUser::where(['user_id' => $item->user_id])->first();
|
|
||||||
if ($feishuUser) {
|
|
||||||
// 获取凭证
|
|
||||||
$certificate = config('feishu.'.$feishuUser->sign);
|
|
||||||
// 使用parse_url解析URL
|
|
||||||
$parsedUrl = parse_url($certificate['rUrl']);
|
|
||||||
// 获取域名和端口
|
|
||||||
$host = $parsedUrl['host'];
|
|
||||||
$port = isset($parsedUrl['port']) ? ':' . $parsedUrl['port'] : '';
|
|
||||||
$url = 'http://'. $host .$port. '/pages/customer/detile?id='.$item->id;
|
|
||||||
$item->warn = 1;
|
|
||||||
$item->update();
|
|
||||||
Log::info('send',['open_id'=>$item['open_id'],'url'=>$url]);
|
|
||||||
FeishuController::send($feishuUser->sign, $feishuUser->open_id, '跟进提醒', '您有新的跟进提醒', $url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Log::info('send follow start',[time()]);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// 每小时执行一次
|
// 每小时执行一次
|
||||||
new Crontab('0 10 * * * *', function(){
|
new Crontab('0 10 * * * *', function(){
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ class OssService
|
|||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->accessKeyId = 'LTAI5tAGiH7bkVkmrniXnfkA';
|
$this->accessKeyId = getenv('OSS_ACCESSID');
|
||||||
$this->accessKeySecret = 'nqklJBft6t3S0A4ZvxF4ci9ni91kmm';
|
$this->accessKeySecret = getenv('OSS_ACCESSSECRET');
|
||||||
$this->bucket = 'vehicle-album';
|
$this->bucket = getenv('OSS_BUCKET');
|
||||||
$this->endpoint = 'https://oss-cn-beijing.aliyuncs.com';
|
$this->endpoint = getenv('OSS_ENDPOINT');
|
||||||
$this->ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
|
$this->ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,4 +118,12 @@ class Util
|
|||||||
return $en;
|
return $en;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function mask($str)
|
||||||
|
{
|
||||||
|
if(empty($str)){
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return substr($str, 0, 3) . '****' . substr($str, -4);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<p>© 2024 河南晋海科技环保有限公司. 保留所有权利。</p>
|
<p>© 2024 河南新友合科技环保有限公司. 保留所有权利。</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
<p>2. 如因本协议产生争议,双方应友好协商解决;协商不成的,任何一方可向 管辖地 有管辖权的人民法院提起诉讼。</p>
|
<p>2. 如因本协议产生争议,双方应友好协商解决;协商不成的,任何一方可向 管辖地 有管辖权的人民法院提起诉讼。</p>
|
||||||
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<p>© 2024 河南晋海科技环保有限公司. 保留所有权利。</p>
|
<p>© 2024 河南新友合科技有限公司. 保留所有权利。</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
+3
-3
@@ -36,12 +36,12 @@
|
|||||||
"firebase/php-jwt": "^6.11",
|
"firebase/php-jwt": "^6.11",
|
||||||
"illuminate/database": "^11.44",
|
"illuminate/database": "^11.44",
|
||||||
"phpmailer/phpmailer": "^6.9",
|
"phpmailer/phpmailer": "^6.9",
|
||||||
"shopwwi/webman-filesystem": "^2.0",
|
|
||||||
"iidestiny/flysystem-oss": "^4",
|
|
||||||
"vlucas/phpdotenv": "^5.6",
|
"vlucas/phpdotenv": "^5.6",
|
||||||
"guzzlehttp/guzzle": "^7.9",
|
"guzzlehttp/guzzle": "^7.9",
|
||||||
"webman/cache": "^2.1",
|
"webman/cache": "^2.1",
|
||||||
"workerman/crontab": "^1.0"
|
"workerman/crontab": "^1.0",
|
||||||
|
"shopwwi/webman-filesystem": "1.1",
|
||||||
|
"shopwwi/filesystem-oss": "^1.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-event": "For better performance. "
|
"ext-event": "For better performance. "
|
||||||
|
|||||||
Generated
+1403
-327
File diff suppressed because it is too large
Load Diff
@@ -37,9 +37,9 @@ class Constants
|
|||||||
];
|
];
|
||||||
|
|
||||||
//客户重要性
|
//客户重要性
|
||||||
public const CUSTOMER_MAGNITUDE_INITIAL = 0; // 金牌商机
|
public const CUSTOMER_MAGNITUDE_INITIAL = 1; // 金牌商机
|
||||||
public const CUSTOMER_MAGNITUDE_COMMUNICATE = 1; // 银牌商机
|
public const CUSTOMER_MAGNITUDE_COMMUNICATE = 2; // 银牌商机
|
||||||
public const CUSTOMER_MAGNITUDE_PLAN = 2; // 铜牌商机
|
public const CUSTOMER_MAGNITUDE_PLAN = 3; // 铜牌商机
|
||||||
|
|
||||||
public const MAGNITUDE = [
|
public const MAGNITUDE = [
|
||||||
self::CUSTOMER_MAGNITUDE_INITIAL => '金牌商机',
|
self::CUSTOMER_MAGNITUDE_INITIAL => '金牌商机',
|
||||||
|
|||||||
@@ -1,4 +1,17 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
*-------------------------------------------------------------------------p*
|
||||||
|
* 配置文件
|
||||||
|
*-------------------------------------------------------------------------h*
|
||||||
|
* @copyright Copyright (c) 2015-2022 Shopwwi Inc. (http://www.shopwwi.com)
|
||||||
|
*-------------------------------------------------------------------------c*
|
||||||
|
* @license http://www.shopwwi.com s h o p w w i . c o m
|
||||||
|
*-------------------------------------------------------------------------e*
|
||||||
|
* @link http://www.shopwwi.com by 象讯科技 phcent.com
|
||||||
|
*-------------------------------------------------------------------------n*
|
||||||
|
* @since shopwwi象讯·PHP商城系统Pro
|
||||||
|
*-------------------------------------------------------------------------t*
|
||||||
|
*/
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'enable' => true,
|
'enable' => true,
|
||||||
@@ -64,21 +77,18 @@ return [
|
|||||||
],
|
],
|
||||||
'oss' => [
|
'oss' => [
|
||||||
'driver' => \Shopwwi\WebmanFilesystem\Adapter\AliyunOssAdapterFactory::class,
|
'driver' => \Shopwwi\WebmanFilesystem\Adapter\AliyunOssAdapterFactory::class,
|
||||||
// 'accessId' => 'OSS_ACCESS_ID',
|
// 'accessKey' => getenv('OSS_ACCESSID'),
|
||||||
// 'accessSecret' => 'OSS_ACCESS_SECRET',
|
// 'secretKey' => getenv('OSS_ACCESSSECRET'),
|
||||||
// 'bucket' => 'OSS_BUCKET',
|
// 'bucket' => getenv('OSS_BUCKET'),
|
||||||
// 'endpoint' => 'OSS_ENDPOINT',
|
// 'endpoint' => getenv('OSS_ENDPOINT'),
|
||||||
// 'url' => '', // 静态文件访问域名
|
'accessId' => getenv('OSS_ACCESSID'),
|
||||||
|
'accessSecret' => getenv('OSS_ACCESSSECRET'),
|
||||||
'accessKey' => 'LTAI5tAGiH7bkVkmrniXnfkA',
|
'bucket' => getenv('OSS_BUCKET'),
|
||||||
'secretKey' => 'nqklJBft6t3S0A4ZvxF4ci9ni91kmm',
|
'endpoint' => getenv('OSS_ENDPOINT'),
|
||||||
'bucket' => 'vehicle-album',
|
'url' => '' // 静态文件访问域名
|
||||||
'endpoint' => 'https://oss-cn-beijing.aliyuncs.com',
|
|
||||||
'url' => '', // 静态文件访问域名
|
|
||||||
// 'timeout' => 3600,
|
// 'timeout' => 3600,
|
||||||
// 'connectTimeout' => 10,
|
// 'connectTimeout' => 10,
|
||||||
'isCName' => false,
|
// 'isCName' => false,
|
||||||
'prefix' => '',
|
|
||||||
// 'token' => null,
|
// 'token' => null,
|
||||||
// 'proxy' => null,
|
// 'proxy' => null,
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -22,12 +22,13 @@ return [
|
|||||||
'param_error' => ' param error',
|
'param_error' => ' param error',
|
||||||
'required_not_null' => ' required not_ ull',
|
'required_not_null' => ' required not_ ull',
|
||||||
'picture_not_null' => ' picture not null',
|
'picture_not_null' => ' picture not null',
|
||||||
|
'follow_not_null' => ' The image and follow-up content cannot be empty at the same time',
|
||||||
'contacts_not_null' => ' Contact person, email, and phone cannot be empty at the same time',
|
'contacts_not_null' => ' Contact person, email, and phone cannot be empty at the same time',
|
||||||
'car_type_not_null' => ' preference_not_null',
|
'car_type_not_null' => ' preference_not_null',
|
||||||
'channel_not_null' => ' channel not null',
|
'channel_not_null' => ' channel not null',
|
||||||
'email_consistent' => ' Inconsistent email addresses',
|
'email_consistent' => ' Inconsistent email addresses',
|
||||||
'sign_not_null' => ' No affiliated company has been set',
|
'sign_not_null' => ' No affiliated company has been set',
|
||||||
'password_short' => ' Password cannot be less than 6 characters',
|
'password_short' => ' Password cannot be less than 8 characters',
|
||||||
'id_empty' => ' ID cannot be empty',
|
'id_empty' => ' ID cannot be empty',
|
||||||
'customer_id' => ' customer ID',
|
'customer_id' => ' customer ID',
|
||||||
'tag_group_id' => ' tag group ID',
|
'tag_group_id' => ' tag group ID',
|
||||||
|
|||||||
@@ -22,12 +22,13 @@ return [
|
|||||||
'param_error' => ' Ошибка параметра',
|
'param_error' => ' Ошибка параметра',
|
||||||
'required_not_null' => ' Обязательное заполнение не может быть пустым.',
|
'required_not_null' => ' Обязательное заполнение не может быть пустым.',
|
||||||
'picture_not_null' => ' Фотографии не могут быть пустыми',
|
'picture_not_null' => ' Фотографии не могут быть пустыми',
|
||||||
|
'follow_not_null' => ' Изображение и последующий контент не могут быть пустыми одновременно.X',
|
||||||
'contacts_not_null' => ' Контакты, почтовый ящик, телефон не может быть одновременно пустым',
|
'contacts_not_null' => ' Контакты, почтовый ящик, телефон не может быть одновременно пустым',
|
||||||
'car_type_not_null' => ' Предпочтения не могут быть пустыми',
|
'car_type_not_null' => ' Предпочтения не могут быть пустыми',
|
||||||
'channel_not_null' => ' Каналы не могут быть пустыми',
|
'channel_not_null' => ' Каналы не могут быть пустыми',
|
||||||
'email_consistent' => ' Почтовый ящик не совпадает',
|
'email_consistent' => ' Почтовый ящик не совпадает',
|
||||||
'sign_not_null' => ' Компания не создана',
|
'sign_not_null' => ' Компания не создана',
|
||||||
'password_short' => ' Пароль не может быть меньше 6.',
|
'password_short' => ' Пароль не может быть меньше 8.',
|
||||||
'id_empty' => ' ID не может быть пустым',
|
'id_empty' => ' ID не может быть пустым',
|
||||||
'customer_id' => ' Идентификатор клиента',
|
'customer_id' => ' Идентификатор клиента',
|
||||||
'tag_group_id' => ' Идентификатор группы меток',
|
'tag_group_id' => ' Идентификатор группы меток',
|
||||||
|
|||||||
@@ -22,12 +22,13 @@ return [
|
|||||||
'param_error' => ' 参数错误',
|
'param_error' => ' 参数错误',
|
||||||
'required_not_null' => ' 必填项不能为空',
|
'required_not_null' => ' 必填项不能为空',
|
||||||
'picture_not_null' => ' 图片不能为空',
|
'picture_not_null' => ' 图片不能为空',
|
||||||
|
'follow_not_null' => ' 图片与跟进内容不能同时为空',
|
||||||
'contacts_not_null' => ' 联系人,邮箱,电话不能同时为空',
|
'contacts_not_null' => ' 联系人,邮箱,电话不能同时为空',
|
||||||
'car_type_not_null' => ' 偏好不能为空',
|
'car_type_not_null' => ' 偏好不能为空',
|
||||||
'channel_not_null' => ' 渠道不能为空',
|
'channel_not_null' => ' 渠道不能为空',
|
||||||
'email_consistent' => ' 邮箱不一致',
|
'email_consistent' => ' 邮箱不一致',
|
||||||
'sign_not_null' => ' 未设置所属公司',
|
'sign_not_null' => ' 未设置所属公司',
|
||||||
'password_short' => ' 密码不能少于6位',
|
'password_short' => ' 密码不能少于8位',
|
||||||
'id_empty' => ' id不能为空',
|
'id_empty' => ' id不能为空',
|
||||||
'customer_id' => ' 客户ID',
|
'customer_id' => ' 客户ID',
|
||||||
'tag_group_id' => ' 标签组ID',
|
'tag_group_id' => ' 标签组ID',
|
||||||
|
|||||||
Reference in New Issue
Block a user