From 80b6ea20767b4f06a9652f173e8e47dfa178787e Mon Sep 17 00:00:00 2001 From: "HESU\\HESU" <1696136552@qq.com> Date: Thu, 22 May 2025 09:26:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/VehicleNewAlbumController.php | 81 ++++++++ .../VehicleNewAlbumTranslationController.php | 81 ++++++++ .../controller/VehicleNewAskedController.php | 81 ++++++++ .../VehicleNewAskedTranslationController.php | 81 ++++++++ .../VehicleNewContentController.php | 81 ++++++++ ...VehicleNewContentTranslationController.php | 81 ++++++++ .../controller/VehicleNewController.php | 92 +++++++++ .../controller/VehicleNewTraitController.php | 81 ++++++++ .../VehicleNewTraitTranslationController.php | 81 ++++++++ .../VehicleNewTranslationController.php | 81 ++++++++ app/console/model/VehicleNewAlbumModel.php | 72 +++++++ .../model/VehicleNewAlbumTranslationModel.php | 56 ++++++ app/console/model/VehicleNewAskedModel.php | 80 ++++++++ .../model/VehicleNewAskedTranslationModel.php | 56 ++++++ app/console/model/VehicleNewContentModel.php | 72 +++++++ .../VehicleNewContentTranslationModel.php | 56 ++++++ app/console/model/VehicleNewModel.php | 118 ++++++++++++ app/console/model/VehicleNewTraitModel.php | 72 +++++++ .../model/VehicleNewTraitTranslationModel.php | 56 ++++++ .../model/VehicleNewTranslationModel.php | 56 ++++++ .../service/VehicleNewAlbumService.php | 64 +++++++ .../VehicleNewAlbumTranslationService.php | 59 ++++++ .../service/VehicleNewAskedService.php | 66 +++++++ .../VehicleNewAskedTranslationService.php | 59 ++++++ .../service/VehicleNewContentService.php | 59 ++++++ .../VehicleNewContentTranslationService.php | 59 ++++++ app/console/service/VehicleNewService.php | 180 ++++++++++++++++++ .../service/VehicleNewTraitService.php | 59 ++++++ .../VehicleNewTraitTranslationService.php | 65 +++++++ .../service/VehicleNewTranslationService.php | 59 ++++++ .../VehicleNewAlbumTranslationValidator.php | 29 +++ .../validate/VehicleNewAlbumValidator.php | 29 +++ .../VehicleNewAskedTranslationValidator.php | 29 +++ .../validate/VehicleNewAskedValidator.php | 29 +++ .../VehicleNewContentTranslationValidator.php | 29 +++ .../validate/VehicleNewContentValidator.php | 29 +++ .../VehicleNewTraitTranslationValidator.php | 29 +++ .../validate/VehicleNewTraitValidator.php | 29 +++ .../VehicleNewTranslationValidator.php | 29 +++ app/console/validate/VehicleNewValidator.php | 29 +++ app/mzl/modules/translation/config/trans.php | 30 ++- config/route.php | 8 + 42 files changed, 2571 insertions(+), 1 deletion(-) create mode 100644 app/console/controller/VehicleNewAlbumController.php create mode 100644 app/console/controller/VehicleNewAlbumTranslationController.php create mode 100644 app/console/controller/VehicleNewAskedController.php create mode 100644 app/console/controller/VehicleNewAskedTranslationController.php create mode 100644 app/console/controller/VehicleNewContentController.php create mode 100644 app/console/controller/VehicleNewContentTranslationController.php create mode 100644 app/console/controller/VehicleNewController.php create mode 100644 app/console/controller/VehicleNewTraitController.php create mode 100644 app/console/controller/VehicleNewTraitTranslationController.php create mode 100644 app/console/controller/VehicleNewTranslationController.php create mode 100644 app/console/model/VehicleNewAlbumModel.php create mode 100644 app/console/model/VehicleNewAlbumTranslationModel.php create mode 100644 app/console/model/VehicleNewAskedModel.php create mode 100644 app/console/model/VehicleNewAskedTranslationModel.php create mode 100644 app/console/model/VehicleNewContentModel.php create mode 100644 app/console/model/VehicleNewContentTranslationModel.php create mode 100644 app/console/model/VehicleNewModel.php create mode 100644 app/console/model/VehicleNewTraitModel.php create mode 100644 app/console/model/VehicleNewTraitTranslationModel.php create mode 100644 app/console/model/VehicleNewTranslationModel.php create mode 100644 app/console/service/VehicleNewAlbumService.php create mode 100644 app/console/service/VehicleNewAlbumTranslationService.php create mode 100644 app/console/service/VehicleNewAskedService.php create mode 100644 app/console/service/VehicleNewAskedTranslationService.php create mode 100644 app/console/service/VehicleNewContentService.php create mode 100644 app/console/service/VehicleNewContentTranslationService.php create mode 100644 app/console/service/VehicleNewService.php create mode 100644 app/console/service/VehicleNewTraitService.php create mode 100644 app/console/service/VehicleNewTraitTranslationService.php create mode 100644 app/console/service/VehicleNewTranslationService.php create mode 100644 app/console/validate/VehicleNewAlbumTranslationValidator.php create mode 100644 app/console/validate/VehicleNewAlbumValidator.php create mode 100644 app/console/validate/VehicleNewAskedTranslationValidator.php create mode 100644 app/console/validate/VehicleNewAskedValidator.php create mode 100644 app/console/validate/VehicleNewContentTranslationValidator.php create mode 100644 app/console/validate/VehicleNewContentValidator.php create mode 100644 app/console/validate/VehicleNewTraitTranslationValidator.php create mode 100644 app/console/validate/VehicleNewTraitValidator.php create mode 100644 app/console/validate/VehicleNewTranslationValidator.php create mode 100644 app/console/validate/VehicleNewValidator.php diff --git a/app/console/controller/VehicleNewAlbumController.php b/app/console/controller/VehicleNewAlbumController.php new file mode 100644 index 0000000..21ba72a --- /dev/null +++ b/app/console/controller/VehicleNewAlbumController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewAlbumTranslationController.php b/app/console/controller/VehicleNewAlbumTranslationController.php new file mode 100644 index 0000000..db08db7 --- /dev/null +++ b/app/console/controller/VehicleNewAlbumTranslationController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewAskedController.php b/app/console/controller/VehicleNewAskedController.php new file mode 100644 index 0000000..8b3d835 --- /dev/null +++ b/app/console/controller/VehicleNewAskedController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewAskedTranslationController.php b/app/console/controller/VehicleNewAskedTranslationController.php new file mode 100644 index 0000000..03ac132 --- /dev/null +++ b/app/console/controller/VehicleNewAskedTranslationController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewContentController.php b/app/console/controller/VehicleNewContentController.php new file mode 100644 index 0000000..28d25a4 --- /dev/null +++ b/app/console/controller/VehicleNewContentController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewContentTranslationController.php b/app/console/controller/VehicleNewContentTranslationController.php new file mode 100644 index 0000000..cfe52b7 --- /dev/null +++ b/app/console/controller/VehicleNewContentTranslationController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewController.php b/app/console/controller/VehicleNewController.php new file mode 100644 index 0000000..203ab2f --- /dev/null +++ b/app/console/controller/VehicleNewController.php @@ -0,0 +1,92 @@ +getService()->add($request->all()) + ? $this->successResponse() + : $this->errorResponse(); + } catch (\Throwable $th) { + return $this->errorResponse($th->getMessage().$th->getLine().$th->getFile()); + } + } + + /** + * 分页 + * + * @param Request $request 请求对象 + * @return Response 响应对象 + */ + public function index(Request $request, string $scene = 'default'): Response + { + try { + return parent::index($request, $scene); + } catch (\Throwable $th) { + return $this->errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewTraitController.php b/app/console/controller/VehicleNewTraitController.php new file mode 100644 index 0000000..aa72c2a --- /dev/null +++ b/app/console/controller/VehicleNewTraitController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewTraitTranslationController.php b/app/console/controller/VehicleNewTraitTranslationController.php new file mode 100644 index 0000000..1e06604 --- /dev/null +++ b/app/console/controller/VehicleNewTraitTranslationController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/controller/VehicleNewTranslationController.php b/app/console/controller/VehicleNewTranslationController.php new file mode 100644 index 0000000..3a51378 --- /dev/null +++ b/app/console/controller/VehicleNewTranslationController.php @@ -0,0 +1,81 @@ +errorResponse($th->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/console/model/VehicleNewAlbumModel.php b/app/console/model/VehicleNewAlbumModel.php new file mode 100644 index 0000000..ef88fee --- /dev/null +++ b/app/console/model/VehicleNewAlbumModel.php @@ -0,0 +1,72 @@ +hasOne(VehicleNewAlbumTranslationModel::class, 'album_id')->where('locale', locale()); + } + + /** + * 多条翻译 + */ + public function translations() + { + return $this->hasMany(VehicleNewAlbumTranslationModel::class, 'album_id'); + } +} \ No newline at end of file diff --git a/app/console/model/VehicleNewAlbumTranslationModel.php b/app/console/model/VehicleNewAlbumTranslationModel.php new file mode 100644 index 0000000..997da96 --- /dev/null +++ b/app/console/model/VehicleNewAlbumTranslationModel.php @@ -0,0 +1,56 @@ +hasOne(VehicleNewAskedTranslationModel::class, 'asked_id')->where('locale', locale()); + } + + /** + * 多条翻译 + */ + public function translations() + { + return $this->hasMany(VehicleNewAskedTranslationModel::class, 'asked_id'); + } +} \ No newline at end of file diff --git a/app/console/model/VehicleNewAskedTranslationModel.php b/app/console/model/VehicleNewAskedTranslationModel.php new file mode 100644 index 0000000..c590c45 --- /dev/null +++ b/app/console/model/VehicleNewAskedTranslationModel.php @@ -0,0 +1,56 @@ +hasOne(VehicleNewContentTranslationModel::class, 'content_id')->where('locale', locale()); + } + + /** + * 多条翻译 + */ + public function translations() + { + return $this->hasMany(VehicleNewContentTranslationModel::class, 'content_id'); + } +} \ No newline at end of file diff --git a/app/console/model/VehicleNewContentTranslationModel.php b/app/console/model/VehicleNewContentTranslationModel.php new file mode 100644 index 0000000..1389fee --- /dev/null +++ b/app/console/model/VehicleNewContentTranslationModel.php @@ -0,0 +1,56 @@ +hasOne(VehicleNewTranslationModel::class, 'vehicle_id')->where('locale', locale()); + } + + /** + * 多条翻译 + */ + public function translations() + { + return $this->hasMany(VehicleNewTranslationModel::class, 'vehicle_id'); + } + + public function brand() + { + return $this->belongsTo(BrandModel::class, 'brand'); + } + + public function models() + { + return $this->belongsTo(ModelModel::class, 'model'); + } + + public function location() + { + return $this->belongsTo(LocationModel::class, 'location'); + } + + public function types() + { + return $this->belongsTo(TypesModel::class, 'type', 'id'); + } + + public function energy() + { + return $this->belongsTo(EnergyModel::class, 'energy', 'id'); + } + + public function album() + { + return $this->hasMany(VehicleNewAlbumModel::class, 'vehicle_id', 'id'); + } + + public function asked() + { + return $this->hasMany(VehicleNewAskedModel::class, 'vehicle_id', 'id'); + } + + public function trait() + { + return $this->hasMany(VehicleNewTraitModel::class, 'vehicle_id', 'id'); + } + + public function content() + { + return $this->hasMany(VehicleNewContentModel::class, 'vehicle_id', 'id'); + } +} \ No newline at end of file diff --git a/app/console/model/VehicleNewTraitModel.php b/app/console/model/VehicleNewTraitModel.php new file mode 100644 index 0000000..a5b293e --- /dev/null +++ b/app/console/model/VehicleNewTraitModel.php @@ -0,0 +1,72 @@ +hasOne(VehicleNewTraitTranslationModel::class, 'trait_id')->where('locale', locale()); + } + + /** + * 多条翻译 + */ + public function translations() + { + return $this->hasMany(VehicleNewTraitTranslationModel::class, 'trait_id'); + } +} \ No newline at end of file diff --git a/app/console/model/VehicleNewTraitTranslationModel.php b/app/console/model/VehicleNewTraitTranslationModel.php new file mode 100644 index 0000000..d9b367d --- /dev/null +++ b/app/console/model/VehicleNewTraitTranslationModel.php @@ -0,0 +1,56 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } + + // 声明需要多语言翻译 + protected array $translatable = [ + 'alt', + ]; +} \ No newline at end of file diff --git a/app/console/service/VehicleNewAlbumTranslationService.php b/app/console/service/VehicleNewAlbumTranslationService.php new file mode 100644 index 0000000..d9a7d88 --- /dev/null +++ b/app/console/service/VehicleNewAlbumTranslationService.php @@ -0,0 +1,59 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } +} \ No newline at end of file diff --git a/app/console/service/VehicleNewAskedService.php b/app/console/service/VehicleNewAskedService.php new file mode 100644 index 0000000..5a03b45 --- /dev/null +++ b/app/console/service/VehicleNewAskedService.php @@ -0,0 +1,66 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } + + + // 声明需要多语言翻译 + protected array $translatable = [ + 'title', + 'content', + ]; +} \ No newline at end of file diff --git a/app/console/service/VehicleNewAskedTranslationService.php b/app/console/service/VehicleNewAskedTranslationService.php new file mode 100644 index 0000000..1a21323 --- /dev/null +++ b/app/console/service/VehicleNewAskedTranslationService.php @@ -0,0 +1,59 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } +} \ No newline at end of file diff --git a/app/console/service/VehicleNewContentService.php b/app/console/service/VehicleNewContentService.php new file mode 100644 index 0000000..cc9795d --- /dev/null +++ b/app/console/service/VehicleNewContentService.php @@ -0,0 +1,59 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } +} \ No newline at end of file diff --git a/app/console/service/VehicleNewContentTranslationService.php b/app/console/service/VehicleNewContentTranslationService.php new file mode 100644 index 0000000..656894e --- /dev/null +++ b/app/console/service/VehicleNewContentTranslationService.php @@ -0,0 +1,59 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } +} \ No newline at end of file diff --git a/app/console/service/VehicleNewService.php b/app/console/service/VehicleNewService.php new file mode 100644 index 0000000..bc7813f --- /dev/null +++ b/app/console/service/VehicleNewService.php @@ -0,0 +1,180 @@ + function ($params) { + $keyword = $params['keyword'] ?? ''; + return [ + 'filters' => [ +// ['field' => '***', 'operator' => '=', 'value' => '***'] + ], + 'fields' => ['id', 'vin', 'brand', 'cover', 'price', 'type', 'energy', 'model', 'video', 'views', 'created_at', 'updated_at'], + 'relations' => [ + 'translation' => ['vehicle_id', 'locale', 'condition_desc', 'location'], + 'asked' => ['id', 'vehicle_id', 'status', 'sort'], + 'asked.translation' => ['id', 'asked_id', 'locale', 'title', 'content'], + 'trait' => ['id', 'vehicle_id', 'status', 'sort'], + 'trait.translation' => ['id', 'trait_id', 'locale', 'title', 'content'], + 'album' => ['id', 'vehicle_id', 'status', 'sort'], + 'album.translation' => ['id', 'album_id', 'locale', 'alt'], + 'content' => ['id', 'vehicle_id', 'status', 'sort'], + 'content.translation' => ['id', 'content_id', 'locale', 'content'], + ], + 'sorts' => [ + ['field' => 'id', 'direction' => 'desc'] + ], + 'pagination' => [ + 'page' => $params['page'] ?? 1, + 'per_page' => $params['per_page'] ?? 10, + ] + ]; + } + ]; + } + + + // 声明需要多语言翻译 + protected array $translatable = [ + 'condition_desc', + ]; + + public function add(array $params) + { + $sourceLocale = locale(); + $sourceFields = $this->extractSourceFields($params); + + if (empty($sourceFields)) { + throw new \InvalidArgumentException("请传递至少一条 {$sourceLocale} 语言的翻译字段"); + }; + + $askeds = $params['asked']; + unset($params['asked']); + $traits = $params['trait']; + unset($params['trait']); + $albums = $params['album']; + unset($params['album']); + $contents = $params['content']; + unset($params['content']); + + $VehicleNewAskedService = new VehicleNewAskedService(new VehicleNewAskedModel()); + $VehicleNewTraitService = new VehicleNewTraitService(new VehicleNewTraitModel()); + $VehicleNewAlbumService = new VehicleNewAlbumService(new VehicleNewAlbumModel()); + $VehicleNewContentService = new VehicleNewContentService(new VehicleNewContentModel()); + + Db::beginTransaction(); + try { + $info = $this->create($params); + if (!$info) { + throw new BusinessException('提交失败'); + } + + // 异步翻译并写入 hs_vehicle_data_translation 表 + (new TranslationService())->queueTranslations( + 'vehicleNew', + $info->id, + $sourceLocale, + $sourceFields + ); + + foreach ($askeds as $asked) { + $askedsourceFields = $VehicleNewAskedService->extractSourceFields($asked); + $asked['vehicle_id'] = $info->id; + $asked_res = $VehicleNewAskedService->create($asked); + if (!$asked_res) { + throw new BusinessException('提交失败'); + } +// $askedsourceFields['asked_id'] = $asked_res->id; + (new TranslationService())->queueTranslations( + 'vehicleNewAsked', + $asked_res->id, + $sourceLocale, + $askedsourceFields + ); + } + + foreach ($traits as $trait) { + $traitsourceFields = $VehicleNewTraitService->extractSourceFields($trait); + $trait['vehicle_id'] = $info->id; + $trait_res = $VehicleNewTraitService->create($trait); + if (!$trait_res) { + throw new BusinessException('提交失败'); + } + + (new TranslationService())->queueTranslations( + 'vehicleNewTrait', + $trait_res->id, + $sourceLocale, + $traitsourceFields + ); + } + + foreach ($albums as $album) { + $albumsourceFields = $VehicleNewAlbumService->extractSourceFields($album); + $album['vehicle_id'] = $info->id; + $trait_res = $VehicleNewAlbumService->create($trait); + if (!$trait_res) { + throw new BusinessException('提交失败'); + } + + (new TranslationService())->queueTranslations( + 'vehicleNewTrait', + $trait_res->id, + $sourceLocale, + $albumsourceFields + ); + } + + foreach ($contents as $content) { + $contentsourceFields = $VehicleNewContentService->extractSourceFields($content); + $content['vehicle_id'] = $info->id; + $trait_res = $VehicleNewContentService->create($content); + if (!$trait_res) { + throw new BusinessException('提交失败'); + } + + (new TranslationService())->queueTranslations( + 'vehicleNewContent', + $trait_res->id, + $sourceLocale, + $contentsourceFields + ); + } + + Db::commit(); + return true; + } catch (\Throwable $th) { + Db::rollBack(); + throw $th; + } + } +} \ No newline at end of file diff --git a/app/console/service/VehicleNewTraitService.php b/app/console/service/VehicleNewTraitService.php new file mode 100644 index 0000000..b6d454e --- /dev/null +++ b/app/console/service/VehicleNewTraitService.php @@ -0,0 +1,59 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } +} \ No newline at end of file diff --git a/app/console/service/VehicleNewTraitTranslationService.php b/app/console/service/VehicleNewTraitTranslationService.php new file mode 100644 index 0000000..dd308cd --- /dev/null +++ b/app/console/service/VehicleNewTraitTranslationService.php @@ -0,0 +1,65 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } + + // 声明需要多语言翻译 + protected array $translatable = [ + 'title', + 'content', + ]; +} \ No newline at end of file diff --git a/app/console/service/VehicleNewTranslationService.php b/app/console/service/VehicleNewTranslationService.php new file mode 100644 index 0000000..53150c0 --- /dev/null +++ b/app/console/service/VehicleNewTranslationService.php @@ -0,0 +1,59 @@ + function ($params) { + // $keyword = $params['keyword'] ?? ''; + // return [ + // 'filters' => [ + // ['field' => '***', 'operator' => '=', 'value' => '***'] + // ], + // 'fields' => ['id'], + // 'relations' => [], + // 'custom' => function(Builder $q) use ($keyword) { + // // 示例 + // if ($keyword) { + // $q->where(function($q2) use($keyword) { + // $q2->whereHas('***', function($q3) use($keyword) { + // $q3->where('***', 'like', "%{$keyword}%"); + // })->orWhereHas('***', function($q4) use($keyword) { + // $q4->where('***', 'like', "%{$keyword}%"); + // }); + // }); + // } + // }, + // 'sorts' => [ + // ['field' => 'created_at', 'direction' => 'desc'] + // ], + // 'pagination' => [ + // 'page' => $params['page'] ?? 1, + // 'per_page' => $params['per_page'] ?? 10, + // ] + // ]; + // } + ]; + } +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewAlbumTranslationValidator.php b/app/console/validate/VehicleNewAlbumTranslationValidator.php new file mode 100644 index 0000000..8348092 --- /dev/null +++ b/app/console/validate/VehicleNewAlbumTranslationValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewAlbumValidator.php b/app/console/validate/VehicleNewAlbumValidator.php new file mode 100644 index 0000000..f07fed0 --- /dev/null +++ b/app/console/validate/VehicleNewAlbumValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewAskedTranslationValidator.php b/app/console/validate/VehicleNewAskedTranslationValidator.php new file mode 100644 index 0000000..1dc2221 --- /dev/null +++ b/app/console/validate/VehicleNewAskedTranslationValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewAskedValidator.php b/app/console/validate/VehicleNewAskedValidator.php new file mode 100644 index 0000000..ec7810c --- /dev/null +++ b/app/console/validate/VehicleNewAskedValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewContentTranslationValidator.php b/app/console/validate/VehicleNewContentTranslationValidator.php new file mode 100644 index 0000000..d2f3e31 --- /dev/null +++ b/app/console/validate/VehicleNewContentTranslationValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewContentValidator.php b/app/console/validate/VehicleNewContentValidator.php new file mode 100644 index 0000000..de6747c --- /dev/null +++ b/app/console/validate/VehicleNewContentValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewTraitTranslationValidator.php b/app/console/validate/VehicleNewTraitTranslationValidator.php new file mode 100644 index 0000000..fef61d8 --- /dev/null +++ b/app/console/validate/VehicleNewTraitTranslationValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewTraitValidator.php b/app/console/validate/VehicleNewTraitValidator.php new file mode 100644 index 0000000..cc94dea --- /dev/null +++ b/app/console/validate/VehicleNewTraitValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewTranslationValidator.php b/app/console/validate/VehicleNewTranslationValidator.php new file mode 100644 index 0000000..4e936a8 --- /dev/null +++ b/app/console/validate/VehicleNewTranslationValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/console/validate/VehicleNewValidator.php b/app/console/validate/VehicleNewValidator.php new file mode 100644 index 0000000..ff81a86 --- /dev/null +++ b/app/console/validate/VehicleNewValidator.php @@ -0,0 +1,29 @@ + [ + + ], + + 'update' => [ + + ] + ]; +} \ No newline at end of file diff --git a/app/mzl/modules/translation/config/trans.php b/app/mzl/modules/translation/config/trans.php index 7c55644..751ccbc 100644 --- a/app/mzl/modules/translation/config/trans.php +++ b/app/mzl/modules/translation/config/trans.php @@ -38,7 +38,35 @@ return [ 'location' => [ 'translation_model' => \app\console\model\LocationTranslationModel::class, 'foreign_key' => 'location_id', - ] + ], + 'seo' => [ + 'translation_model' => \app\console\model\SeoInfoTranslationModel::class, + 'foreign_key' => 'seo_id', + ], + 'drafts' => [ + 'translation_model' => \app\applet\model\DraftsDataTranslationModel::class, + 'foreign_key' => 'drafts_id', + ], + 'vehicleNew' => [ + 'translation_model' => \app\console\model\VehicleNewTranslationModel::class, + 'foreign_key' => 'vehicle_id', + ], + 'vehicleNewAsked' => [ + 'translation_model' => \app\console\model\VehicleNewAskedTranslationModel::class, + 'foreign_key' => 'asked_id', + ], + 'vehicleNewTrait' => [ + 'translation_model' => \app\console\model\VehicleNewTraitTranslationModel::class, + 'foreign_key' => 'trait_id', + ], + 'vehicleNewAlbum' => [ + 'translation_model' => \app\console\model\VehicleNewAlbumTranslationModel::class, + 'foreign_key' => 'album_id', + ], + 'vehicleNewContent' => [ + 'translation_model' => \app\console\model\VehicleNewContentTranslationModel::class, + 'foreign_key' => 'content_id', + ], ], // 默认支持的目标语种列表 diff --git a/config/route.php b/config/route.php index df425a2..73cede1 100644 --- a/config/route.php +++ b/config/route.php @@ -168,6 +168,14 @@ Route::group('/console', function() { Route::any('/vehicle/data/{id}/delete', [\app\console\controller\VehicleDataController::class, 'destroy']); Route::any('/vehicle/data/{id}/detail', [\app\console\controller\VehicleDataController::class, 'detail']); + // 新车管理 + Route::any('/vehicle/new/list', [\app\console\controller\VehicleNewController::class, 'index']); + Route::any('/vehicle/new/add', [\app\console\controller\VehicleNewController::class, 'add']); +// Route::any('/vehicle/{id}/update', [\app\console\controller\VehicleNewController::class, 'edit']); +// Route::any('/vehicle/new/{id}/do', [\app\console\controller\VehicleNewController::class, 'doSaled']); +// Route::any('/vehicle/new/{id}/delete', [\app\console\controller\VehicleNewController::class, 'destroy']); +// Route::any('/vehicle/new/{id}/detail', [\app\console\controller\VehicleNewController::class, 'detail']); + // 上传 Route::any('/upload/image', [\app\mzl\modules\upload\controller\UploadController::class, 'uploadImage']);