From cd0d850f896dad771cfc55cd31796bc363e6e6f3 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Fri, 14 Nov 2025 14:11:54 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=85=B3=E9=94=AE=E8=AF=8D=E6=8A=93?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/BrandSeriesService.php | 66 ++++++++++++++++-------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/app/admin/service/BrandSeriesService.php b/app/admin/service/BrandSeriesService.php index 594605b..7b12eec 100644 --- a/app/admin/service/BrandSeriesService.php +++ b/app/admin/service/BrandSeriesService.php @@ -330,35 +330,59 @@ class BrandSeriesService //懂车帝模糊搜索返回车系地址 $href = $crawlService->modelSearch($keyword); - $seriesId = $this->extractSeriesId($href); + $seriesId = $this->extractSeriesId($href); //懂车帝车系id - if (empty($seriesId)) { + if (empty($seriesId)) { //没有抓取到懂车帝系列id时,按关键词为品牌名抓取所有的系列名 + $crawlSeries = $crawlService->brandSeries($keyword); + } + + if (empty($seriesId) && empty($crawlSeries)) { throw new \Exception('抓取失败,未找到该系列车型'); } - //抓取品牌与系列 - $brandSeries = $crawlService->crawlBrandSeries($seriesId); - - - // 验证品牌是否存在 - $brand = Brand::where('brand_name', $brandSeries['brand'])->first(); - // 获取品牌信息 - $series = BrandSeries::where('series_name', $brandSeries['series'])->first(); - $result['brand'] = ['brand_name' => $brandSeries['brand'], 'exists' => $brand?1:0]; - if($brand){ - $result['brand']['id'] = $brand['id']; - } - $result['series'] = ['series_name' => $brandSeries['series'], 'exists' => $series?1:0]; - if($series){ - $result['series']['id'] = $series['id']; - if(empty($result['brand']['id'])){ - $result['brand']['id'] = $series['brand_id']; + $brandSerieses = []; + if(empty($seriesId) && !empty($crawlSeries)){ //关键词为品牌名时抓取所有车系的懂车帝id + $href = $crawlService->modelSearch($crawlSeries[0]); + $seriesId = $this->extractSeriesId($href); //懂车帝车系id + //抓取品牌与系列 + $brandSeries = $crawlService->crawlBrandSeries($seriesId); + foreach ($crawlSeries as $item) { +// $brandSerieses[] = $crawlService->brandSeries($keyword); + $brandSerieses[] = ['brand' => $brandSeries['brand'], 'series' => $item]; } + }elseif (!empty($seriesId) && empty($crawlSeries)){ + //抓取品牌与系列 + $brandSerieses[] = $crawlService->crawlBrandSeries($seriesId); } + $result = []; try { - //获取车型数据 - $result['model'] = $this->crawlSeriesModel($seriesId); + foreach ($brandSerieses as $brandSeries) { + $item = []; + // 验证品牌是否存在 + $brand = Brand::where('brand_name', $brandSeries['brand'])->first(); + // 获取品牌信息 + $series = BrandSeries::where('series_name', $brandSeries['series'])->first(); + $item['brand'] = ['brand_name' => $brandSeries['brand'], 'exists' => $brand ? 1 : 0]; + if ($brand) { + $item['brand']['id'] = $brand['id']; + } + $item['series'] = ['series_name' => $brandSeries['series'], 'exists' => $series ? 1 : 0]; + if ($series) { + $item['series']['id'] = $series['id']; + if (empty($item['brand']['id'])) { + $item['brand']['id'] = $series['brand_id']; + } + } + + //获取车型数据 + $item['model'] = []; + if (count($brandSerieses)<2) { + $item['model'] = $this->crawlSeriesModel($seriesId); + } + $result[] = $item; + } + return $result; } catch (\Exception $e) { throw new \Exception($e->getMessage()); From 3d96152ea95e011c5a790427d4c09884c353188d Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Fri, 14 Nov 2025 15:25:08 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=93=81=E7=89=8C=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E8=AF=8D=E6=8A=93=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/BrandSeriesService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/admin/service/BrandSeriesService.php b/app/admin/service/BrandSeriesService.php index 7b12eec..364be9d 100644 --- a/app/admin/service/BrandSeriesService.php +++ b/app/admin/service/BrandSeriesService.php @@ -383,7 +383,7 @@ class BrandSeriesService $result[] = $item; } - return $result; + return ['is_series' => (count($brandSerieses)<2)?1:0, 'data' => $result]; } catch (\Exception $e) { throw new \Exception($e->getMessage()); } From cb1b208190ae4d951759cacc89ef5f021bfbd462 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Mon, 17 Nov 2025 10:05:29 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/crm/controller/CustomerController.php | 6 ++++++ app/crmAdmin/controller/CustomerController.php | 6 +++++- app/crmAdmin/logic/CustomerLogic.php | 3 ++- app/crmAdmin/service/CustomerService.php | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/crm/controller/CustomerController.php b/app/crm/controller/CustomerController.php index 25b186e..13dad20 100644 --- a/app/crm/controller/CustomerController.php +++ b/app/crm/controller/CustomerController.php @@ -435,6 +435,11 @@ class CustomerController extends BaseController { $id = Util::getParam($request, 'id'); $scene = Util::getParam($request, 'scene',''); + $status_desc = Util::getParam($request, 'status_desc',''); + + if($scene == 'force' && empty($status_desc)){ + return $this->error( '移除原因不能为空'); + } $userId = $request->user->uid; $where = [ @@ -450,6 +455,7 @@ class CustomerController extends BaseController if ($scene == 'force') { //status=5:业务员自己删除 $customer->status = 5; + $customer->status_desc = $status_desc; $res = $customer->save(); }else{ $customer->user_id = 0; diff --git a/app/crmAdmin/controller/CustomerController.php b/app/crmAdmin/controller/CustomerController.php index 6104fcd..959d429 100644 --- a/app/crmAdmin/controller/CustomerController.php +++ b/app/crmAdmin/controller/CustomerController.php @@ -144,6 +144,11 @@ class CustomerController extends BaseController { try { $param = $request->all(); + $scene = $param['scene'] ?? ''; + + if($scene != 'force' && empty($param['status_desc'])){ + return $this->error( '移除原因不能为空'); + } if (empty($param['customer_id'])) { return $this->error('customer_id'.trans('not_null')); } @@ -153,7 +158,6 @@ class CustomerController extends BaseController if(!$query->exists()){ return $this->error( trans('fail')); } - $scene = $param['scene'] ?? ''; if ($scene === 'list') { //管理端客户列表移除 $res = $query->update(['status' => 4, 'deleted_at' => time()]); } elseif ($scene === 'force') { //强删除 diff --git a/app/crmAdmin/logic/CustomerLogic.php b/app/crmAdmin/logic/CustomerLogic.php index 13efe9c..5c4192a 100644 --- a/app/crmAdmin/logic/CustomerLogic.php +++ b/app/crmAdmin/logic/CustomerLogic.php @@ -21,12 +21,13 @@ class CustomerLogic return $res; } - public function forceDelete(int $id) + public function forceDelete(int $id ,string $status_desc = '') { $customer = Customer::withTrashed()->find($id); //强制删除 // $res = $customer->forceDelete(); $customer->status = 3; + $customer->status_desc = $status_desc; $res = $customer->save(); return $res; } diff --git a/app/crmAdmin/service/CustomerService.php b/app/crmAdmin/service/CustomerService.php index 6b5573a..ecd2a17 100644 --- a/app/crmAdmin/service/CustomerService.php +++ b/app/crmAdmin/service/CustomerService.php @@ -325,7 +325,7 @@ class CustomerService $audit->status = 3; $audit->save(); } - return $logic->forceDelete($params['id']); + return $logic->forceDelete($params['id'],$audit->remark); } else { if(!empty($audit)){ $audit->status = 2; From 6096f7ee01de07c26033a6bd2147bf9a9c4e6c36 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Mon, 17 Nov 2025 14:39:52 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/crmAdmin/controller/CustomerController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/crmAdmin/controller/CustomerController.php b/app/crmAdmin/controller/CustomerController.php index 959d429..161c4f7 100644 --- a/app/crmAdmin/controller/CustomerController.php +++ b/app/crmAdmin/controller/CustomerController.php @@ -145,6 +145,7 @@ class CustomerController extends BaseController try { $param = $request->all(); $scene = $param['scene'] ?? ''; + $status_desc = $param['status_desc'] ?? ''; if($scene != 'force' && empty($param['status_desc'])){ return $this->error( '移除原因不能为空'); @@ -159,11 +160,11 @@ class CustomerController extends BaseController return $this->error( trans('fail')); } if ($scene === 'list') { //管理端客户列表移除 - $res = $query->update(['status' => 4, 'deleted_at' => time()]); + $res = $query->update(['status' => 4, 'status_desc' => $status_desc, 'deleted_at' => time()]); } elseif ($scene === 'force') { //强删除 $res = $query->forceDelete(); } else { //公海软删除 - $res = $query->update(['status' => 3, 'deleted_at' => time()]); + $res = $query->update(['status' => 3, 'status_desc' => $status_desc, 'deleted_at' => time()]); } return $this->success($res); From 6bdcc73ee84c8772f1af47270efceab632042395 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Fri, 28 Nov 2025 16:12:10 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=A8=A1=E7=B3=8A=E6=8A=93=E5=8F=96?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/BrandSeriesService.php | 12 +++++++----- app/common/service/CrawlService.php | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/admin/service/BrandSeriesService.php b/app/admin/service/BrandSeriesService.php index 364be9d..9542378 100644 --- a/app/admin/service/BrandSeriesService.php +++ b/app/admin/service/BrandSeriesService.php @@ -328,20 +328,22 @@ class BrandSeriesService // 执行抓取 $crawlService = new CrawlService(); - //懂车帝模糊搜索返回车系地址 + //懂车帝模糊搜索返回车系地址|单个车系id抓取 $href = $crawlService->modelSearch($keyword); $seriesId = $this->extractSeriesId($href); //懂车帝车系id - if (empty($seriesId)) { //没有抓取到懂车帝系列id时,按关键词为品牌名抓取所有的系列名 - $crawlSeries = $crawlService->brandSeries($keyword); - } +// if (empty($seriesId)) { //没有抓取到懂车帝系列id时,按关键词为品牌名抓取所有的系列名 +// $crawlSeries = $crawlService->brandSeries($keyword); +// } + //按关键词为品牌名抓取所有的系列名 + $crawlSeries = $crawlService->brandSeries($keyword); if (empty($seriesId) && empty($crawlSeries)) { throw new \Exception('抓取失败,未找到该系列车型'); } $brandSerieses = []; - if(empty($seriesId) && !empty($crawlSeries)){ //关键词为品牌名时抓取所有车系的懂车帝id + if(empty($seriesId) && !empty($crawlSeries) || count($crawlSeries)>1){ //关键词为品牌名时抓取所有车系的懂车帝id $href = $crawlService->modelSearch($crawlSeries[0]); $seriesId = $this->extractSeriesId($href); //懂车帝车系id //抓取品牌与系列 diff --git a/app/common/service/CrawlService.php b/app/common/service/CrawlService.php index 53e7026..f437ba6 100644 --- a/app/common/service/CrawlService.php +++ b/app/common/service/CrawlService.php @@ -9,7 +9,7 @@ class CrawlService { public function brandSeries($brand) { - $url = "https://www.dongchedi.com/search?currTab=6&keyword=".$brand; + $url = "https://www.dongchedi.com/search?currTab=6&keyword=".$brand.'&from=search_tab_er&api_param={"en_qc":+0}'; $ql = QueryList::get($url ); $series = []; $ql->find('div.card-name')->texts()->map(function($item) use(&$series) { From 8a94de610db9d5ec16c265885dcb9b0e745b6ab9 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Sat, 29 Nov 2025 15:36:53 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E8=AF=A2=E7=9B=98=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InquiryTransmitConfigController.php | 33 +++ .../controller/InquiryTransmitController.php | 268 ++++++++++++++++++ .../logic/InquiryTransmitConfigLogic.php | 17 ++ app/common/logic/InquiryTransmitLogic.php | 17 ++ app/common/model/InquiryTransmit.php | 49 ++++ app/common/model/InquiryTransmitConfig.php | 49 ++++ .../service/InquiryTransmitConfigService.php | 31 ++ app/common/service/InquiryTransmitService.php | 31 ++ .../InquiryTransmitConfigValidate.php | 29 ++ .../validate/InquiryTransmitValidate.php | 29 ++ composer.json | 3 +- composer.lock | 72 ++++- config/route.php | 5 + 13 files changed, 631 insertions(+), 2 deletions(-) create mode 100644 app/admin/controller/InquiryTransmitConfigController.php create mode 100644 app/admin/controller/InquiryTransmitController.php create mode 100644 app/common/logic/InquiryTransmitConfigLogic.php create mode 100644 app/common/logic/InquiryTransmitLogic.php create mode 100644 app/common/model/InquiryTransmit.php create mode 100644 app/common/model/InquiryTransmitConfig.php create mode 100644 app/common/service/InquiryTransmitConfigService.php create mode 100644 app/common/service/InquiryTransmitService.php create mode 100644 app/common/validate/InquiryTransmitConfigValidate.php create mode 100644 app/common/validate/InquiryTransmitValidate.php diff --git a/app/admin/controller/InquiryTransmitConfigController.php b/app/admin/controller/InquiryTransmitConfigController.php new file mode 100644 index 0000000..87761bf --- /dev/null +++ b/app/admin/controller/InquiryTransmitConfigController.php @@ -0,0 +1,33 @@ +service = new InquiryTransmitConfigService(); + } + + /** + * 列表页数据格式化 + * + * @param array $data + * @return array + */ + // protected function indexFormat($data) + // { + // if (isset($data['created_at'])) + // $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); + // if (isset($data['updated_at'])) + // $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); + // return $data; + // } +} \ No newline at end of file diff --git a/app/admin/controller/InquiryTransmitController.php b/app/admin/controller/InquiryTransmitController.php new file mode 100644 index 0000000..ee789c2 --- /dev/null +++ b/app/admin/controller/InquiryTransmitController.php @@ -0,0 +1,268 @@ +service = new InquiryTransmitService(); + } + + /** + * 列表页数据格式化 + * + * @param array $data + * @return array + */ + // protected function indexFormat($data) + // { + // if (isset($data['created_at'])) + // $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); + // if (isset($data['updated_at'])) + // $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); + // return $data; + // } + + + // } + + public function form(Request $request, int $id) + { + try { + $params = $request->all(); + + if ($id == 1) { + $mailto = '1696136552@qq.com'; + $fromDomain = 'magicbridgeauto.com'; + } else { + $mailto = '1696136552@qq.com'; + $fromDomain = 'magicbridgeauto.com'; + } + + if ($request->method() == 'GET') { + $config = [ + 'iLang' => 'en', + 'Act' => 'Inquiry', + 'post_url' => getenv('MAIN_DOMAIN').'/form'.'?m=Data&a=save', + 'mailto' => $mailto, + 'fromDomain' => $fromDomain, + 'fromPath' => parse_url($params['fromlink'], PHP_URL_PATH), + 'm' => $params['m'], + 'a' => $params['a'], + 'tid' => $params['tid'], + 'cid' => $params['cid'], + 'version' => $params['version'], + 'fromlink' => $params['fromlink'] + ]; + + $html = match ($params['tid']) { + 'en-5-LP-pnx' => $this->formHmtl($config), + 'en-3-P-vdx' => $this->formHmtl2($config) + }; + + return json([ + 'code' => 200, + 'data' => [ + 'html' => $html + ], + 'message' => 'success' + ]); + } + + if ($request->method() == 'POST') { + $ip = $request->getRealIp($safe_mode=true); + $edata = [ + 'mailto' => $params['mailto'], + + 'Date' => date('Y-m-d H:i:s', time()), + 'Email' => $params['userEMail'], + 'Name' => $params['userName'], + 'Tel' => $params['userTel'], + 'Company' => '', + 'Country' => $params['uCountry'], + 'Form Url' => $params['fromlink'], + 'Message' => $params['Message'], + 'Ip' => $ip, + 'IpLocation' => ip2region($ip).'(仅供参考)', + + 'iLang' => $params['iLang'], + 'mailto' => $params['mailto'], + 'navigator_language' => $params['navigator_language'], + 'navigator_platform' => $params['navigator_platform'], + 'screen_width' => $params['screen_width'], + 'screen_height' => $params['screen_height'], + 'uCountry' => $params['uCountry'] + ]; + + $this->emailHtml($edata); + + return json([ + 'code' => 200, + 'data' => [], + 'message' => 'Thank you for your message! We will contact with you soon.' + ]); + } + } catch (\Throwable $th) { + Log::info('Data:'.date('Y-m-d H:i:s').':'.$th->getMessage().'|'.$th->getLine().'|'.$th->getFile()); + } + } + + public function formHmtl($config) + { + // https://v1.xzgoogle.com/form.php?m=Temp&a=getTpl&tid=en-5-LP-pnx&cid=760&version=v4&fromlink=https://magicbridgeauto.com/contact-us/ + $html = '
'; + return $html; + } + + public function formHmtl2($config) + { + // https://v1.xzgoogle.com/form.php?m=Temp&a=getTpl&tid=en-3-P-vdx&cid=760&version=v4&fromlink=https://magicbridgeauto.com/news/ + $html = '
'; + return $html; + } + + + public function emailHtml($data) + { + $html = ' + + + + Lead Preview + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Preview +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Date:'.$data['Date'].'
Email: + '.$data['Email'].' +
Name:'.$data['Name'].'
Tel:'.$data['Tel'].'
Company:
Country:'.$data['Country'].'
Form Url: + '.$data['Form Url'].' +
Message:'.$data['Message'].'
Ip:'.$data['Ip'].'
IpLocation:'.$data['IpLocation'].'
+
+
 
+
More
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
iLang:'.$data['iLang'].'
mailto: + '.$data['mailto'].' +
navigator_language:'.$data['navigator_language'].'
navigator_platform:'.$data['navigator_platform'].'
screen_width:'.$data['screen_width'].'
screen_height:'.$data['screen_height'].'
uCountry:'.$data['uCountry'].'
+
+ +
+ + '; + +// $email = new Email(); + //return $email->send($data['mailto'], 'Inquiry_Of_'.$data['Name'], $html); + return \app\common\utils\email\MailSend::send($data['mailto'], 'Inquiry_Of_'.$data['Name'], $html); + } +} \ No newline at end of file diff --git a/app/common/logic/InquiryTransmitConfigLogic.php b/app/common/logic/InquiryTransmitConfigLogic.php new file mode 100644 index 0000000..3c6782d --- /dev/null +++ b/app/common/logic/InquiryTransmitConfigLogic.php @@ -0,0 +1,17 @@ +validator; + } +} \ No newline at end of file diff --git a/app/common/service/InquiryTransmitService.php b/app/common/service/InquiryTransmitService.php new file mode 100644 index 0000000..a046056 --- /dev/null +++ b/app/common/service/InquiryTransmitService.php @@ -0,0 +1,31 @@ +validator; + } +} \ No newline at end of file diff --git a/app/common/validate/InquiryTransmitConfigValidate.php b/app/common/validate/InquiryTransmitConfigValidate.php new file mode 100644 index 0000000..f80ec8d --- /dev/null +++ b/app/common/validate/InquiryTransmitConfigValidate.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/common/validate/InquiryTransmitValidate.php b/app/common/validate/InquiryTransmitValidate.php new file mode 100644 index 0000000..58c120a --- /dev/null +++ b/app/common/validate/InquiryTransmitValidate.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/composer.json b/composer.json index 7ff8ace..693315e 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,8 @@ "phpmailer/phpmailer": "^6.10", "webman/gateway-worker": "^1.0", "mpdf/mpdf": "^8.2", - "jaeger/querylist": "^4.4" + "jaeger/querylist": "^4.4", + "zoujingli/ip2region": "3.0" }, "suggest": { "ext-event": "For better performance. " diff --git a/composer.lock b/composer.lock index c3a23c9..ba35bd5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "865e38bae84e7de0c95098cc87135440", + "content-hash": "ac2fa5a625069729975d072614509e1f", "packages": [ { "name": "aliyuncs/oss-sdk-php", @@ -6919,6 +6919,76 @@ } ], "time": "2025-06-12T13:34:04+00:00" + }, + { + "name": "zoujingli/ip2region", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/zoujingli/ip2region.git", + "reference": "fd31d7a023f28f4e2f3e63f46f1fd51f8b2672f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zoujingli/ip2region/zipball/fd31d7a023f28f4e2f3e63f46f1fd51f8b2672f6", + "reference": "fd31d7a023f28f4e2f3e63f46f1fd51f8b2672f6", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "suggest": { + "ext-opcache": "启用 OPcache 以获得更好的性能" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "files": [ + "ip2region.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Anyon", + "email": "zoujingli@qq.com", + "homepage": "https://thinkadmin.top" + } + ], + "description": "Ip2Region v3.0 for PHP - 企业级 IP 地理位置查询库,支持 IPv4/IPv6,分片文件管理,智能缓存,零依赖", + "homepage": "https://github.com/zoujingli/Ip2Region", + "keywords": [ + "IP", + "IP定位", + "Ip2Region", + "geoip", + "geolocation", + "ipv4", + "ipv6", + "location", + "企业级", + "分片数据库", + "压缩", + "地理位置", + "地理位置查询", + "缓存", + "高性能" + ], + "support": { + "issues": "https://github.com/zoujingli/ip2region/issues", + "source": "https://github.com/zoujingli/ip2region/tree/v3.0.0" + }, + "time": "2025-09-15T12:27:22+00:00" } ], "packages-dev": [], diff --git a/config/route.php b/config/route.php index c49f9dc..11631e4 100644 --- a/config/route.php +++ b/config/route.php @@ -194,6 +194,11 @@ Route::group('/admin', function () { Route::any('/update/sign', [app\admin\controller\UserController::class, 'updateSign']); }); + // 询单 + Route::group('/inquiry/transmit', function () { + Route::any('/form', [app\admin\controller\TransmitController::class, 'form']); + }); + // 询单 Route::group('/inquiry', function () { Route::any('/list', [app\inquiry\controller\InquiryLogController::class, 'index']);