From 370543415078ef2d145c50e02d7a634c4f5d85d4 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Thu, 13 Mar 2025 18:01:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=95=86=E5=88=86=E9=A1=B5/=E5=AF=BC=E5=87=BA/=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E8=A7=84=E6=A8=A1=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/Agent.php | 139 ++++++++++++++++++ app/admin/model/v1/AgentBusinessTypeModel.php | 19 +++ .../model/v1/AgentEnterpriseSizeTypeModel.php | 19 +++ app/admin/model/v1/AgentModel.php | 58 ++++++++ app/admin/route/v1.php | 12 ++ app/common/model/AgentBaseModel.php | 34 +++++ .../model/AgentBusinessTypeBaseModel.php | 28 ++++ .../AgentEnterpriseSizeTypeBaseModel.php | 28 ++++ .../20241224034202_create_agent.php | 11 +- ...41224035530_create_agent_business_type.php | 7 +- ...5543_create_agent_entryprice_size_type.php | 7 +- 11 files changed, 350 insertions(+), 12 deletions(-) create mode 100644 app/admin/controller/v1/Agent.php create mode 100644 app/admin/model/v1/AgentBusinessTypeModel.php create mode 100644 app/admin/model/v1/AgentEnterpriseSizeTypeModel.php create mode 100644 app/admin/model/v1/AgentModel.php create mode 100644 app/common/model/AgentBaseModel.php create mode 100644 app/common/model/AgentBusinessTypeBaseModel.php create mode 100644 app/common/model/AgentEnterpriseSizeTypeBaseModel.php diff --git a/app/admin/controller/v1/Agent.php b/app/admin/controller/v1/Agent.php new file mode 100644 index 00000000..29ced85b --- /dev/null +++ b/app/admin/controller/v1/Agent.php @@ -0,0 +1,139 @@ +language(request()->lang_id) + ->order(['sort' => 'asc', 'id' => 'desc']) + ->select(); + return success('获取成功', $types); + } + + // 分页 + public function index() + { + $param = request()->param([ + 'corp_name', + 'size_type', + 'created_at', + 'page/d' => 1, + 'size/d' => 10 + ]); + + $agents = AgentModel::field([ + 'id', + 'ip', + 'corp_name', + 'email', + 'phone', + 'business_type', + 'enterprise_size', + 'address', + 'message', + 'created_at' + ]) + ->with([ + 'businessType' => function ($query) { + $query->field(['name' => 'business_type_name', 'value']); + }, + 'enterpriseSizeType' => function ($query) { + $query->field(['name' => 'enterprise_size_name', 'value']); + } + ]) + ->withSearch(['corp_name', 'created_at'], [ + 'corp_name' => $param['corp_name'] ?? null, + 'created_at' => !empty($param['created_at']) ? explode(',', $param['created_at']) : null + ]) + ->language(request()->lang_id) + ->enterpriseSize($param['size_type'] ?? null) + ->order(['id' => 'desc']) + ->paginate([ + 'list_rows' => $param['size'], + 'page' => $param['page'], + ]) + ->bindAttr('businessType', ['business_type_name']) + ->bindAttr('enterpriseSizeType', ['enterprise_size_name']) + ->hidden(['business_type', 'businessType', 'enterprise_size', 'enterpriseSizeType']); + + return success('获取成功', $agents); + } + + // 导出 + public function export() + { + $schema = [ + 'id' => 'ID', + 'ip' => 'IP', + 'corp_name' => '公司名称', + 'email' => '邮箱', + 'phone' => '手机号', + 'business_type_name' => '业务类型', + 'enterprise_size_name' => '企业规模', + 'address' => '地址', + 'message' => '留言内容', + 'created_at' => '提交时间' + ]; + + // 获取要导出的代理商数据 + $agents = $this->getAgentExportData(); + + // 导出 + return xlsx_writer($agents, $schema); + } + // 获取要导出的代理商数据 + private function getAgentExportData() + { + $param = request()->param([ + 'corp_name', + 'size_type', + 'created_at' + ]); + + return AgentModel::field([ + 'id', + 'ip', + 'corp_name', + 'email', + 'phone', + 'business_type', + 'enterprise_size', + 'address', + 'message', + 'created_at' + ]) + ->with([ + 'businessType' => function ($query) { + $query->field(['name' => 'business_type_name', 'value']); + }, + 'enterpriseSizeType' => function ($query) { + $query->field(['name' => 'enterprise_size_name', 'value']); + } + ]) + ->withSearch(['corp_name', 'created_at'], [ + 'corp_name' => $param['corp_name'] ?? null, + 'created_at' => !empty($param['created_at']) ? explode(',', $param['created_at']) : null + ]) + ->language(request()->lang_id) + ->enterpriseSize($param['size_type'] ?? null) + ->order(['id' => 'desc']) + ->select() + ->bindAttr('businessType', ['business_type_name']) + ->bindAttr('enterpriseSizeType', ['enterprise_size_name']) + ->hidden(['business_type', 'businessType', 'enterprise_size', 'enterpriseSizeType']); + } +} diff --git a/app/admin/model/v1/AgentBusinessTypeModel.php b/app/admin/model/v1/AgentBusinessTypeModel.php new file mode 100644 index 00000000..0a12706d --- /dev/null +++ b/app/admin/model/v1/AgentBusinessTypeModel.php @@ -0,0 +1,19 @@ +where('language_id', '=', $value); + } +} diff --git a/app/admin/model/v1/AgentEnterpriseSizeTypeModel.php b/app/admin/model/v1/AgentEnterpriseSizeTypeModel.php new file mode 100644 index 00000000..cefe1f0c --- /dev/null +++ b/app/admin/model/v1/AgentEnterpriseSizeTypeModel.php @@ -0,0 +1,19 @@ +where('language_id', '=', $value); + } +} diff --git a/app/admin/model/v1/AgentModel.php b/app/admin/model/v1/AgentModel.php new file mode 100644 index 00000000..f668030c --- /dev/null +++ b/app/admin/model/v1/AgentModel.php @@ -0,0 +1,58 @@ +belongsTo(AgentBusinessTypeModel::class, 'business_type', 'value'); + } + + // 关联企业规模类型 + public function enterpriseSizeType() + { + return $this->belongsTo(AgentEnterpriseSizeTypeModel::class, 'enterprise_size', 'value'); + } + + // 按放言查询 + public function scopeLanguage($query, $value) + { + $query->where('language_id', '=', $value); + } + + // 按企业规模查询 + public function scopeEnterpriseSize($query, $value) + { + if (is_null($value)) return; + $query->where('enterprise_size', '=', $value); + } + + // 根据公司名称搜索 + public function searchCorpNameAttr($query, $value) + { + if (is_null($value)) return; + $query->where('corp_name', 'like', "%{$value}%"); + } + + // 根据提交时间搜索 + public function searchCreatedAtAttr($query, $value) + { + if (is_null($value)) return; + if (is_array($value)) { + if (count($value) > 1) { + $query->whereBetweenTime('created_at', $value[0], $value[1]); + } else { + $query->whereTime('created_at', '>=', $value[0]); + } + } + } +} diff --git a/app/admin/route/v1.php b/app/admin/route/v1.php index 55f559e0..d9e04322 100644 --- a/app/admin/route/v1.php +++ b/app/admin/route/v1.php @@ -537,6 +537,18 @@ Route::group('v1', function () { Route::get('export', 'BulkPurchaseInquiry/export'); }); + // 反馈管理 - 代理商申请列表 + Route::group('agent', function() { + // 代理商企业规模类型 + Route::get('enterprise_size_types', 'Agent/enterpriseSizeTypes'); + + // 代理商申请列表分页 + Route::get('index', 'Agent/index'); + + // 代理商申请列表导出 + Route::get('export', 'Agent/export'); + }); + // 配置项列表 Route::group('config', function() { // 配置分组 diff --git a/app/common/model/AgentBaseModel.php b/app/common/model/AgentBaseModel.php new file mode 100644 index 00000000..aeb9527d --- /dev/null +++ b/app/common/model/AgentBaseModel.php @@ -0,0 +1,34 @@ + 'int', + 'language_id' => 'int', + 'corp_name' => 'string', + 'email' => 'string', + 'phone' => 'string', + 'referer_url' => 'string', + 'website_url' => 'string', + 'business_type' => 'string', + 'enterprise_size' => 'string', + 'address' => 'string', + 'message' => 'string', + 'ip' => 'string', + 'created_at' => 'datetime' + ]; +} diff --git a/app/common/model/AgentBusinessTypeBaseModel.php b/app/common/model/AgentBusinessTypeBaseModel.php new file mode 100644 index 00000000..e4d19e63 --- /dev/null +++ b/app/common/model/AgentBusinessTypeBaseModel.php @@ -0,0 +1,28 @@ + 'int', + 'language_id' => 'int', + 'name' => 'string', + 'value' => 'string', + 'desc' => 'string', + 'sort' => 'int', + 'created_at' => 'datetime', + ]; +} diff --git a/app/common/model/AgentEnterpriseSizeTypeBaseModel.php b/app/common/model/AgentEnterpriseSizeTypeBaseModel.php new file mode 100644 index 00000000..bacdb898 --- /dev/null +++ b/app/common/model/AgentEnterpriseSizeTypeBaseModel.php @@ -0,0 +1,28 @@ + 'int', + 'language_id' => 'int', + 'name' => 'string', + 'value' => 'string', + 'desc' => 'string', + 'sort' => 'int', + 'created_at' => 'datetime', + ]; +} diff --git a/database/migrations/20241224034202_create_agent.php b/database/migrations/20241224034202_create_agent.php index c5cae676..839cbc68 100644 --- a/database/migrations/20241224034202_create_agent.php +++ b/database/migrations/20241224034202_create_agent.php @@ -32,14 +32,13 @@ class CreateAgent extends Migrator ->addColumn('corp_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '公司名称']) ->addColumn('email', 'string', ['limit' => 64, 'null' => false, 'comment' => '邮箱']) ->addColumn('phone', 'string', ['limit' => 64, 'null' => false, 'comment' => '电话']) - ->addColumn('website_url', 'string', ['limit' => 128, 'null' => false, 'comment' => '网站地址']) - ->addColumn('business_type', 'integer', ['null' => false, 'comment' => '业务类型']) - ->addColumn('enterprise_size', 'integer', ['null' => false, 'comment' => '企业规模']) - ->addColumn('province', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '省']) - ->addColumn('city', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '市']) - ->addColumn('district', 'string', ['limit' => 64, 'null' => true, 'default' => null, 'comment' => '区/县']) + ->addColumn('referer_url', 'string', ['limit' => 255, 'null' => false, 'comment' => '来源URL']) + ->addColumn('website_url', 'string', ['limit' => 255, 'null' => false, 'comment' => '网站URL']) + ->addColumn('business_type', 'string', ['limit' => 128, 'null' => false, 'comment' => '业务类型']) + ->addColumn('enterprise_size', 'string', ['limit' => 128, 'null' => false, 'comment' => '企业规模']) ->addColumn('address', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '地址']) ->addColumn('message', 'text', ['null' => true, 'default' => null, 'comment' => '留言']) + ->addColumn('ip', 'string', ['limit' => 64, 'null' => false, 'comment' => 'IP']) ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间']) ->create(); } diff --git a/database/migrations/20241224035530_create_agent_business_type.php b/database/migrations/20241224035530_create_agent_business_type.php index 85f5bdb7..f37eadbe 100644 --- a/database/migrations/20241224035530_create_agent_business_type.php +++ b/database/migrations/20241224035530_create_agent_business_type.php @@ -28,9 +28,10 @@ class CreateAgentBusinessType extends Migrator public function change() { $table = $this->table('agent_business_type', ['engine' => 'MyISAM', 'comment' => '代理商业务类型表']); - $table->addColumn('cn_name', 'string', ['limit' => 64, 'null' => false, 'comment' => '业务类型名称']) - ->addColumn('en_name', 'string', ['limit' => 128, 'null' => false, 'comment' => '英文名称']) - ->addColumn('desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '业务类型描述']) + $table->addColumn('language_id', 'integer', ['null' => false, 'default' => 0, 'comment' => '语言ID']) + ->addColumn('name', 'string', ['limit' => 64, 'null' => false, 'comment' => '类型名']) + ->addColumn('value', 'string', ['limit' => 64, 'null' => false, 'comment' => '类型值']) + ->addColumn('desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '描述']) ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序']) ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间']) ->create(); diff --git a/database/migrations/20241224035543_create_agent_entryprice_size_type.php b/database/migrations/20241224035543_create_agent_entryprice_size_type.php index ad77df8a..6c048660 100644 --- a/database/migrations/20241224035543_create_agent_entryprice_size_type.php +++ b/database/migrations/20241224035543_create_agent_entryprice_size_type.php @@ -28,9 +28,10 @@ class CreateAgentEntrypriceSizeType extends Migrator public function change() { $table = $this->table('agent_entryprice_size_type', ['engine' => 'MyISAM', 'comment' => '代理商企业规模类型表']); - $table->addColumn('cn_name', 'integer', ['signed' => false, 'null' => false, 'comment' => '中文类型名']) - ->addColumn('en_name', 'integer', ['signed' => false, 'null' => false, 'comment' => '英文类型名']) - ->addColumn('desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '描述信息']) + $table->addColumn('language_id', 'integer', ['null' => false, 'default' => 0, 'comment' => '语言ID']) + ->addColumn('name', 'string', ['limit' => 64, 'null' => false, 'comment' => '类型名']) + ->addColumn('value', 'string', ['limit' => 64, 'null' => false, 'comment' => '类型值']) + ->addColumn('desc', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '描述']) ->addColumn('sort', 'integer', ['null' => false, 'default' => 0, 'comment' => '排序']) ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间']) ->create();