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']);