From 363359b765119b89031dd86117fac9c26a84a1da Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Wed, 2 Nov 2022 16:44:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=90=8E=E5=8F=B0=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=9F=BA=E5=9C=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 4 + .../AgriculturalBaseController.php | 102 +++++++++++++++ app/Admin/Form/Amap.php | 71 +++++++++++ app/Admin/bootstrap.php | 2 +- app/Admin/routes.php | 2 + app/Models/AgriculturalBase.php | 4 +- config/amap.php | 13 ++ ...025843_create_agricultural_bases_table.php | 4 +- dcat_admin_ide_helper.php | 3 +- lang/zh_CN/agricultural-base.php | 20 +++ resources/views/admin/form/amap.blade.php | 118 ++++++++++++++++++ 11 files changed, 337 insertions(+), 6 deletions(-) create mode 100644 app/Admin/Controllers/AgriculturalBaseController.php create mode 100644 app/Admin/Form/Amap.php create mode 100644 config/amap.php create mode 100644 lang/zh_CN/agricultural-base.php create mode 100644 resources/views/admin/form/amap.blade.php diff --git a/.env.example b/.env.example index e057235..20ccc5b 100644 --- a/.env.example +++ b/.env.example @@ -59,3 +59,7 @@ VITE_PUSHER_HOST="${PUSHER_HOST}" VITE_PUSHER_PORT="${PUSHER_PORT}" VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +AMAP_WEB_KEY= +AMAP_JS_KEY= +AMAP_JS_SECRET= diff --git a/app/Admin/Controllers/AgriculturalBaseController.php b/app/Admin/Controllers/AgriculturalBaseController.php new file mode 100644 index 0000000..9f424e9 --- /dev/null +++ b/app/Admin/Controllers/AgriculturalBaseController.php @@ -0,0 +1,102 @@ +model()->where('type', BaseType::Base); + // $grid->column('id')->sortable(); + $grid->column('name'); + $grid->column('person'); + $grid->column('address'); + $grid->column('address_lat'); + $grid->column('address_lng'); + // $grid->column('description'); + // $grid->column('map'); + $grid->column('areas'); + $grid->column('workforce'); + $grid->column('created_at')->sortable(); + + $grid->model()->orderBy('created_at', 'desc'); + + $grid->showCreateButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.agricultural_bases.create')); + $grid->showQuickEditButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.agricultural_bases.edit')); + $grid->showDeleteButton(! config('admin.permission.enable') || Admin::user()->can('dcat.admin.agricultural_bases.destroy')); + + $grid->filter(function (Grid\Filter $filter) { + $filter->like('name')->width(3); + + }); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + return Form::make(new AgriculturalBase(), function (Form $form) { + $model = $form->model(); + + $form->display('id'); + $form->text('name'); + $form->text('person'); + $form->number('areas'); + $form->number('workforce'); + $form->textarea('description'); + $form->amap('position') + ->key(config('amap.js.key')) + ->code(config('amap.js.secret')) + ->address(data_get($model, 'address')) + ->lng(data_get($model, 'address_lng', 105.287612)) + ->lat(data_get($model, 'address_lat', 29.339476)); + + $form->hidden('address'); + $form->hidden('address_lng'); + $form->hidden('address_lat'); + + $form->hidden('type')->value(BaseType::Base->value); + + $form->saving(function($form){ + $position = json_decode($form->position); + + $form->address = $position->address ?? ''; + $form->address_lng = $position->lng ?? ''; + $form->address_lat = $position->lat ?? ''; + + $form->deleteInput('position'); + }); + + $form->display('created_at'); + $form->display('updated_at'); + }); + } + + public function destroy($id) + { + $agriculturalBasic = AgriculturalBase::findOrFail($id); + + $agriculturalBasic->crops()->sync([]); + + return parent::destroy($id); + } +} diff --git a/app/Admin/Form/Amap.php b/app/Admin/Form/Amap.php new file mode 100644 index 0000000..e4dc215 --- /dev/null +++ b/app/Admin/Form/Amap.php @@ -0,0 +1,71 @@ + '', + // 高德地图应用 安全密钥 + 'security_code' => '', + 'address' => '', + 'lng' => '', + 'lat' => '', + ]; + + protected $view = 'admin.form.amap'; + + protected function formatFieldData($data) + { + // 获取到当前字段值 + // $value = parent::formatFieldData($data); + + $value = Arr::only($this->variables, ['address', 'lng', 'lat']); + + return $value; + } + + protected function prepareInputValue($value) + { + return json_decode($value); + } + + public function config($options) + { + return $this->addVariables($options); + } + + public function key($key) + { + return $this->addVariables(['key' => $key]); + } + + public function code($code) + { + return $this->addVariables(['security_code' => $code]); + } + + public function address($address) + { + return $this->addVariables(['address' => $address]); + } + + public function lng($lng) + { + return $this->addVariables(['lng' => $lng]); + } + + public function lat($lat) + { + return $this->addVariables(['lat' => $lat]); + } +} diff --git a/app/Admin/bootstrap.php b/app/Admin/bootstrap.php index 01497bd..b3ab379 100644 --- a/app/Admin/bootstrap.php +++ b/app/Admin/bootstrap.php @@ -4,6 +4,7 @@ use Dcat\Admin\Form; use Dcat\Admin\Grid; use Dcat\Admin\Show; use Dcat\Admin\Admin; +use App\Admin\Form\Amap; /** * Dcat-admin - admin builder based on Laravel. @@ -24,7 +25,6 @@ use Dcat\Admin\Admin; * Admin::js('/packages/prettydocs/js/main.js'); */ Form::extend('amap', Amap::class); -Form::extend('region', Region::class); Grid::resolving(function (Grid $grid) { $grid->disableRowSelector(); diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 9958f16..d88406e 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -14,4 +14,6 @@ Route::group([ $router->get('/', 'HomeController@index'); $router->resource('friend-links', 'FriendLinkController')->names('friend_links'); + + $router->resource('agricultural-bases', 'AgriculturalBaseController')->names('agricultural_bases'); }); diff --git a/app/Models/AgriculturalBase.php b/app/Models/AgriculturalBase.php index 062a907..26ff71a 100644 --- a/app/Models/AgriculturalBase.php +++ b/app/Models/AgriculturalBase.php @@ -5,11 +5,11 @@ namespace App\Models; use App\Enums\BaseType; use EloquentFilter\Filterable; use Illuminate\Database\Eloquent\Model; -use Peidikeji\Keywords\Models\Keywords; +use Dcat\Admin\Traits\HasDateTimeFormatter; class AgriculturalBase extends Model { - use Filterable; + use Filterable, HasDateTimeFormatter; protected $casts = [ 'type' => BaseType::class, diff --git a/config/amap.php b/config/amap.php new file mode 100644 index 0000000..697ef47 --- /dev/null +++ b/config/amap.php @@ -0,0 +1,13 @@ + [ + 'key' => env('AMAP_WEB_KEY'), + ], + // 地图 JS API + 'js' => [ + 'key' => env('AMAP_JS_KEY'), + 'secret' => env('AMAP_JS_SECRET'), + ], +]; diff --git a/database/migrations/2022_10_11_025843_create_agricultural_bases_table.php b/database/migrations/2022_10_11_025843_create_agricultural_bases_table.php index 7a57c46..bdd239a 100644 --- a/database/migrations/2022_10_11_025843_create_agricultural_bases_table.php +++ b/database/migrations/2022_10_11_025843_create_agricultural_bases_table.php @@ -20,8 +20,8 @@ return new class extends Migration $table->unsignedBigInteger('parent_id')->nullable()->default('父级'); $table->string('person')->nullable()->comment('负责人'); $table->string('address')->nullable()->comment('地址'); - $table->string('address_lat')->nullable()->comment('地址经度'); - $table->string('address_lng')->nullable()->comment('地址维度'); + $table->string('address_lat')->nullable()->comment('地址维度'); + $table->string('address_lng')->nullable()->comment('地址经度'); $table->text('description')->nullable()->comment('基地描述'); $table->string('map')->nullable()->comment('基地地图'); $table->decimal('areas', 12, 2)->nullable()->comment('基地面积'); diff --git a/dcat_admin_ide_helper.php b/dcat_admin_ide_helper.php index f08b661..34c3eff 100644 --- a/dcat_admin_ide_helper.php +++ b/dcat_admin_ide_helper.php @@ -503,7 +503,8 @@ namespace Dcat\Admin { class Show {} /** - + * @method \Amap amap(...$params) + * @method \Region region(...$params) */ class Form {} diff --git a/lang/zh_CN/agricultural-base.php b/lang/zh_CN/agricultural-base.php new file mode 100644 index 0000000..4b1fb35 --- /dev/null +++ b/lang/zh_CN/agricultural-base.php @@ -0,0 +1,20 @@ + [ + 'AgriculturalBase' => '基地数据', + 'agricultural-bases' => '基地数据', + ], + 'fields' => [ + 'name' => '基地名称', + 'person' => '基地负责人', + 'address' => '基地地址', + 'address_lat' => '地址维度', + 'address_lng' => '地址经度', + 'description' => '基地描述', + 'map' => '基地地图', + 'areas' => '基地面积', + 'workforce' => '职工数量', + ], + 'options' => [ + ], +]; diff --git a/resources/views/admin/form/amap.blade.php b/resources/views/admin/form/amap.blade.php new file mode 100644 index 0000000..4455149 --- /dev/null +++ b/resources/views/admin/form/amap.blade.php @@ -0,0 +1,118 @@ +