From 302acbc5ab84ab21ccac7445a4a13cfdd974d7ea Mon Sep 17 00:00:00 2001 From: "HESU\\HESU" <1696136552@qq.com> Date: Tue, 13 May 2025 15:29:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=93=E5=BA=93=E5=A4=9A=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/model/Location.php | 3 + app/service/TranslatorService.php | 8 +- .../app/controller/LocationController.php | 194 +++++++++++++----- .../app/controller/VehicleController.php | 56 ++++- plugin/admin/app/view/location/index.html | 32 +-- plugin/admin/app/view/location/update.html | 40 ++-- 6 files changed, 236 insertions(+), 97 deletions(-) diff --git a/app/model/Location.php b/app/model/Location.php index 6d2c789..4ca8a57 100644 --- a/app/model/Location.php +++ b/app/model/Location.php @@ -27,6 +27,9 @@ class Location extends Model */ public $timestamps = false; + //批量赋值黑名单 + protected $guarded = ['created_at', 'updated_at']; + /** * Get the vehicles for the location. */ diff --git a/app/service/TranslatorService.php b/app/service/TranslatorService.php index adb36f0..282e91d 100644 --- a/app/service/TranslatorService.php +++ b/app/service/TranslatorService.php @@ -14,11 +14,11 @@ class TranslatorService $this->xunfei = new Xunfei(); } - public function vehicle($vehicle, string $targetLang = 'en') { + public function vehicle($vehicle, string $targetLang = 'en', string $fromLang = 'cn') { $fields = ['brand', 'model', 'purchase_location', 'procedure_location', 'fbo_destination']; foreach ($vehicle as $k => $var) { if (in_array($k, $fields)) { - $rst_dst = $this->xunfei->fanyi($var, 'cn', $targetLang); + $rst_dst = $this->xunfei->fanyi($var, $fromLang, $targetLang); if ($rst_dst) { $vehicle[$k] = $rst_dst["trans_result"]["dst"]; } @@ -27,11 +27,11 @@ class TranslatorService return $vehicle; } - public function location($location, string $targetLang = 'en') { + public function location($location, string $targetLang = 'en', string $fromLang = 'cn') { $fields = ['name']; foreach ($location as $k => $var) { if (in_array($k, $fields)) { - $rst_dst = $this->xunfei->fanyi($var, 'cn', $targetLang); + $rst_dst = $this->xunfei->fanyi($var, $fromLang, $targetLang); if ($rst_dst) { $location[$k] = $rst_dst["trans_result"]["dst"]; } diff --git a/plugin/admin/app/controller/LocationController.php b/plugin/admin/app/controller/LocationController.php index 71ea791..4ef695b 100644 --- a/plugin/admin/app/controller/LocationController.php +++ b/plugin/admin/app/controller/LocationController.php @@ -54,6 +54,38 @@ class LocationController extends Crud ]); } + /** + * 查询后置处理,添加位置信息 + * @param mixed $items + * @return mixed + */ + protected function afterQuery($items) + { + $lang = session('lang', 'zh-cn'); + switch ($lang) { + case 'zh-cn': + $location = new \app\model\Location(); + break; + + case 'en': + $location = new \app\model\LocationEn(); + break; + + case 'ru': + $location = new \app\model\LocationRu(); + break; + case 'ar': + $location = new \app\model\LocationAr(); + break; + } + + foreach ($items as &$item) { + $item = $location::find($item['id']); + } + + return $items; + } + /** * 插入 * @param Request $request @@ -74,44 +106,45 @@ class LocationController extends Crud // 如果是 POST 请求,处理数据保存和翻译 if ($request->method() === 'POST') { - // 获取表单数据 - $data = $request->all(); - Log::info('location',$data); - - // 保存主表数据 - $location = new Location(); - $location->fill($data); - $location->save(); - - // 处理多语言翻译 - $languages = ['en', 'ar', 'ru']; - $translationModels = [ - 'en' => \app\model\LocationEn::class, - 'ar' => \app\model\LocationAr::class, - 'ru' => \app\model\LocationRu::class - ]; - - // 创建翻译服务实例 - $translatorService = new \app\service\TranslatorService(); - - foreach ($languages as $lang) { - $translationModel = $translationModels[$lang]; - $translation = new $translationModel(); - - // 复制主表数据 - $translation->fill($data); - $translation->id = $location->id; - - // 使用翻译服务处理需要翻译的字段 - $translatedData = $translatorService->location($data, $lang); - - // 更新翻译后的字段 - $translation->name = $translatedData['name'] ?? $data['name']; -// $translation->description = $translatedData['description'] ?? $data['description']; - - Log::info('location:'.$lang.':translatedData',$translatedData); - $translation->save(); - } + $this->save($request); +// // 获取表单数据 +// $data = $request->all(); +// Log::info('location',$data); +// +// // 保存主表数据 +// $location = new Location(); +// $location->fill($data); +// $location->save(); +// +// // 处理多语言翻译 +// $languages = ['en', 'ar', 'ru']; +// $translationModels = [ +// 'en' => \app\model\LocationEn::class, +// 'ar' => \app\model\LocationAr::class, +// 'ru' => \app\model\LocationRu::class +// ]; +// +// // 创建翻译服务实例 +// $translatorService = new \app\service\TranslatorService(); +// +// foreach ($languages as $lang) { +// $translationModel = $translationModels[$lang]; +// $translation = new $translationModel(); +// +// // 复制主表数据 +// $translation->fill($data); +// $translation->id = $location->id; +// +// // 使用翻译服务处理需要翻译的字段 +// $translatedData = $translatorService->location($data, $lang); +// +// // 更新翻译后的字段 +// $translation->name = $translatedData['name'] ?? $data['name']; +//// $translation->description = $translatedData['description'] ?? $data['description']; +// +// Log::info('location:'.$lang.':translatedData',$translatedData); +// $translation->save(); +// } } return view('location/insert', [ @@ -120,6 +153,66 @@ class LocationController extends Crud ]); } + /** + * 保存 + */ + public function save(Request $request) + { + // 获取表单数据 + $data = $request->all(); + + $lang = session('lang', 'zh-cn'); + + $locationModel = $this->getModel($lang); + + // 保存主表数据 + if(!empty($data['id'])){ + $location = $locationModel::find($data['id']); + }else{ + $location = $locationModel; + } + $location->fill($data); + + $location->save(); + + // 处理多语言翻译 + $languages = ['zh-cn' => 'cn', 'en' => 'en', 'ar' => 'ar', 'ru' => 'ru']; + $translationModels = [ + 'cn' => \app\model\Location::class, + 'en' => \app\model\LocationEn::class, + 'ar' => \app\model\LocationAr::class, + 'ru' => \app\model\LocationRu::class + ]; + //删除已保存的模型 + unset($translationModels[$lang]); + unset($languages[$lang]); + + // 创建翻译服务实例 + $translatorService = new \app\service\TranslatorService(); + + foreach ($languages as $language) { + $translationModel = $translationModels[$language]; + if(!empty($data['id'])){ + $translation = $translationModel::find($data['id']); + }else{ + $translation = new $translationModel(); + } + + // 复制主表数据 + $translation->fill($data); + $translation->id = $location->id; + + // 使用翻译服务处理需要翻译的字段 + $translatedData = $translatorService->location($data, $language,$lang); + log::info('$lang',[$language,$lang,$translatedData]); + + // 更新翻译后的字段 + $translation->name = $translatedData['name'] ?? $data['name']; + + $translation->save(); + } + } + /** * 更新 * @param Request $request @@ -129,7 +222,8 @@ class LocationController extends Crud public function update(Request $request): Response { if ($request->method() === 'POST') { - return parent::update($request); +// return parent::update($request); + $this->save($request); } // 获取当前语言 $lang = session('lang', 'zh-cn'); @@ -153,24 +247,32 @@ class LocationController extends Crud public function getAll() { $lang = session('lang', 'zh-cn'); - switch ($lang) { - case 'zh-cn': - $hz = new \app\model\Location(); - break; + $hz = $this->getModel($lang); + $locations = $hz::get(); + return Util::success($locations); + } + /** + * @param $lang + * @return \app\model\Location|\app\model\LocationAr|\app\model\LocationEn|\app\model\LocationRu + */ + protected function getModel($lang){ + + switch ($lang) { case 'en': $hz = new \app\model\LocationEn(); break; - case 'ru': $hz = new \app\model\LocationRu(); break; case 'ar': $hz = new \app\model\LocationAr(); break; + default: + $hz = new \app\model\Location(); + break; } - $locations = $hz::get(); - return Util::success($locations); + return $hz; } } diff --git a/plugin/admin/app/controller/VehicleController.php b/plugin/admin/app/controller/VehicleController.php index 583f494..8fb1144 100644 --- a/plugin/admin/app/controller/VehicleController.php +++ b/plugin/admin/app/controller/VehicleController.php @@ -192,32 +192,36 @@ class VehicleController extends Crud $data = $request->all(); $data['shipping_cycle'] = !empty($data['shipping_cycle'])?$data['shipping_cycle']:0; + $lang = session('lang', 'zh-cn'); + list($vehicleModel,$local) = $this->getModel($lang); // 保存主表数据 if(!empty($data['id'])){ - $vehicle = Vehicle::find($data['id']); + $vehicle = $vehicleModel::find($data['id']); }else{ - $vehicle = new Vehicle(); + $vehicle =$vehicleModel; } $vehicle->fill($data); -// return json($vehicle); $vehicle->save(); - Log::info('$request',$data); // 处理多语言翻译 - $languages = ['en', 'ar', 'ru']; + $languages = ['zh-cn' => 'cn', 'en' => 'en', 'ar' => 'ar', 'ru' => 'ru']; $translationModels = [ + 'cn' => Vehicle::class, 'en' => VehicleEn::class, 'ar' => VehicleAr::class, 'ru' => VehicleRu::class ]; + //删除已保存的模型 + unset($translationModels[$lang]); + unset($languages[$lang]); // 创建翻译服务实例 $translatorService = new \app\service\TranslatorService(); - foreach ($languages as $lang) { - $translationModel = $translationModels[$lang]; + foreach ($languages as $language) { + $translationModel = $translationModels[$language]; if(!empty($data['id'])){ // $vehicle = Vehicle::find($data['id']); $translation = $translationModel::find($data['id']); @@ -230,8 +234,8 @@ class VehicleController extends Crud $translation->id = $vehicle->id; // 使用翻译服务处理需要翻译的字段 - $translatedData = $translatorService->vehicle($data, $lang); - Log::info($lang.':'.$vehicle->id,$translatedData); + log::info('lang:',[$language,$lang]); + $translatedData = $translatorService->vehicle($data, $language,$lang); // 更新翻译后的字段 $translation->brand = $translatedData['brand'] ?? $data['brand']; @@ -407,6 +411,7 @@ class VehicleController extends Crud // $item->status = "已到达迪拜仓库"; $item->location_name = $location ? $location->name : ''; $final_location = $hz::find($item->final_locations_id); +// log::info('final_location_name:',[$item->final_locations_id]); $item->final_location_name = $final_location ? $final_location->name : ''; $fbo_location = $hz::find($item->fbo_locations_id); $item->fbo_location_name = $fbo_location ? $fbo_location->name : ''; @@ -415,8 +420,8 @@ class VehicleController extends Crud $item->location_name = $location ? $location->name : ''; // $car = $vehicle::find($item->id); // $item->status = $car ? $car->status : $item->status; - $location = $hz::find($item->final_location_id); - $item->final_location_name = $location ? $location->name : ''; +// $location = $hz::find($item->final_location_id); +// $item->final_location_name = $location ? $location->name : ''; $location = $hz::find($item->fbo_locations_id); $item->fbo_location_name = $location ? $location->name : ''; @@ -447,7 +452,36 @@ class VehicleController extends Crud return $items; } + /** + * @param $lang + * @return array + */ + protected function getModel($lang){ + + switch ($lang) { + case 'en': + $vehicle = new \app\model\VehicleEn(); + $hz = new \app\model\LocationEn(); + break; + + case 'ru': + $vehicle = new \app\model\VehicleRu(); + $hz = new \app\model\LocationRu(); + break; + case 'ar': + $vehicle = new \app\model\VehicleAr(); + $hz = new \app\model\LocationAr(); + break; + default: + $vehicle = new \app\model\Vehicle(); + $hz = new \app\model\Location(); + break; + } + return array($vehicle, $hz); + } + + /** * 获取翻译 * @param Request $request * @return Response diff --git a/plugin/admin/app/view/location/index.html b/plugin/admin/app/view/location/index.html index b6b6585..5b16c75 100644 --- a/plugin/admin/app/view/location/index.html +++ b/plugin/admin/app/view/location/index.html @@ -79,18 +79,18 @@ align: "center", field: "name", },{ - title: translations.name_en, - align: "center", - field: "name_en", - },{ - title: translations.address, - align: "center", - field: "address", - },{ - title: translations.area, - align: "center", - field: "area", - },{ + // title: translations.name_en, + // align: "center", + // field: "name_en", + // },{ + // title: translations.address, + // align: "center", + // field: "address", + // },{ + // title: translations.area, + // align: "center", + // field: "area", + // },{ title: translations.type, align: "center", field: "type", @@ -104,10 +104,10 @@ return util.escape(items.join(",")); } },{ - title: translations.num, - align: "center", - field: "num", - },{ + // title: translations.num, + // align: "center", + // field: "num", + // },{ title: translations.created_at, align: "center", field: "created_at", diff --git a/plugin/admin/app/view/location/update.html b/plugin/admin/app/view/location/update.html index 1cb974d..67548b7 100644 --- a/plugin/admin/app/view/location/update.html +++ b/plugin/admin/app/view/location/update.html @@ -51,26 +51,26 @@ -