diff --git a/app/model/Vehicle.php b/app/model/Vehicle.php index 6fca4bd..e4afff9 100644 --- a/app/model/Vehicle.php +++ b/app/model/Vehicle.php @@ -27,6 +27,9 @@ class Vehicle extends Model */ public $timestamps = false; + //批量赋值黑名单 + protected $guarded = ['created_at', 'updated_at']; + /** * Get the location that owns the vehicle. */ diff --git a/plugin/admin/app/controller/LocationController.php b/plugin/admin/app/controller/LocationController.php index 4ef695b..fe463aa 100644 --- a/plugin/admin/app/controller/LocationController.php +++ b/plugin/admin/app/controller/LocationController.php @@ -21,6 +21,12 @@ class LocationController extends Crud */ protected $model = null; + /** + * 不需要鉴权的方法 + * @var string[] + */ + protected $noNeedAuth = ['getAll']; + /** * 构造函数 * @return void @@ -241,6 +247,11 @@ class LocationController extends Crud ]); } +// public function updateLogistics(Request $request): Response +// { +// return $this->update($request); +// } + /** * 获取下拉选项接口 */ diff --git a/plugin/admin/app/controller/RuleController.php b/plugin/admin/app/controller/RuleController.php index 803ede0..2bac23f 100644 --- a/plugin/admin/app/controller/RuleController.php +++ b/plugin/admin/app/controller/RuleController.php @@ -145,6 +145,10 @@ class RuleController extends Crud $permissions[] = $code; } // $permissions = ["app.admin.vehicle.select","app.admin.vehicle.detail"]; +// $permissions[] = "app.admin.vehicle.select"; +// $permissions[] = "app.admin.vehicle.detail"; +// $permissions[] = "app.admin.vehicle.logistics"; +// $permissions[] = "app.admin.vehicle.updateLogistics"; return $this->json(0, 'ok', $permissions); } diff --git a/plugin/admin/app/controller/VehicleController.php b/plugin/admin/app/controller/VehicleController.php index 8fb1144..ebdba17 100644 --- a/plugin/admin/app/controller/VehicleController.php +++ b/plugin/admin/app/controller/VehicleController.php @@ -34,7 +34,7 @@ class VehicleController extends Crud * 不需要鉴权的方法 * @var string[] */ - protected $noNeedAuth = ['detail', 'status']; + protected $noNeedAuth = ['detail', 'status', 'updateLogistics']; protected $status = [ 'zh-cn' => ['未知','待发车','在途(发往fbo港口)','抵达发货港口','在途(发往目的地仓库)','抵达目的地','售出'], @@ -125,6 +125,66 @@ class VehicleController extends Crud 'translations' => $translations ]); } + /** + * 浏览 + * @return Response + */ + public function logistics(): Response + { + $lang = session('lang', 'zh-cn'); + $translations = (array)require __DIR__ . '/../lang/' . $lang . '/vehicle.php'; + $common = (array)require __DIR__ . '/../lang/' . $lang . '/common.php'; + $translations = array_merge($common, $translations); // 确保 common.php 的翻译优先 + + // 添加默认翻译,确保所有语言都有基本翻译 + $required_translations = [ + 'title' => $lang === 'zh-cn' ? '车辆管理' : 'Vehicle Management', // 确保title翻译存在 + 'brand' => $lang === 'zh-cn' ? '车辆品牌' : 'Vehicle Brand', + 'brand_placeholder' => $lang === 'zh-cn' ? '请输入车辆品牌' : 'Please enter vehicle brand', + 'model' => $lang === 'zh-cn' ? '车辆型号' : 'Vehicle Model', + 'model_placeholder' => $lang === 'zh-cn' ? '请输入车辆型号' : 'Please enter vehicle model', + 'vin' => 'VIN', + 'vin_placeholder' => $lang === 'zh-cn' ? '请输入车架号' : 'Please enter VIN', + 'status' => $lang === 'zh-cn' ? '车辆状态' : 'Status', + 'status_placeholder' => $lang === 'zh-cn' ? '请选择状态' : 'Please select status', + 'purchase_location' => $lang === 'zh-cn' ? '买车地点' : 'Purchase Location', + 'purchase_location_placeholder' => $lang === 'zh-cn' ? '请输入买车地点' : 'Please enter purchase location', + 'procedure_location' => $lang === 'zh-cn' ? '手续办理地' : 'Procedure Location', + 'procedure_location_placeholder' => $lang === 'zh-cn' ? '请输入手续办理地' : 'Please enter procedure location', + 'fbo_location' => 'FBO Location', + 'fbo_location_placeholder' => $lang === 'zh-cn' ? '请选择FBO目的地' : 'Please select FBO location', + 'current_location' => $lang === 'zh-cn' ? '车辆所在地' : 'Current Location', + 'current_location_placeholder' => $lang === 'zh-cn' ? '请选择车辆所在地' : 'Please select current location', + 'final_location' => $lang === 'zh-cn' ? '最终目的地' : 'Final Location', + 'final_location_placeholder' => $lang === 'zh-cn' ? '请选择最终目的地' : 'Please select final location', + 'departure_time' => $lang === 'zh-cn' ? 'FBO发车时间' : 'FBO Departure Time', + 'departure_time_placeholder' => $lang === 'zh-cn' ? '请选择发车时间' : 'Please select departure time', + 'arrival_time' => $lang === 'zh-cn' ? 'FBO到达时间' : 'FBO Arrival Time', + 'arrival_time_placeholder' => $lang === 'zh-cn' ? '请选择到达时间' : 'Please select arrival time', + 'shipping_cycle' => $lang === 'zh-cn' ? '运输周期' : 'Shipping Cycle', + 'shipping_cycle_placeholder' => $lang === 'zh-cn' ? '请输入运输周期' : 'Please enter shipping cycle', + 'img_url' => $lang === 'zh-cn' ? '图片' : 'Image', + 'img_url_placeholder' => $lang === 'zh-cn' ? '请输入图片URL' : 'Please enter image URL', + 'operation' => $lang === 'zh-cn' ? '操作' : 'Operation', + 'refresh' => $lang === 'zh-cn' ? '刷新' : 'Refresh', + 'filter' => $lang === 'zh-cn' ? '筛选' : 'Filter', + 'print' => $lang === 'zh-cn' ? '打印' : 'Print', + 'export' => $lang === 'zh-cn' ? '导出' : 'Export', + 'id' => 'ID', + 'created_at' => $lang === 'zh-cn' ? '创建时间' : 'Created At', + 'updated_at' => $lang === 'zh-cn' ? '更新时间' : 'Updated At' + ]; + + // 合并翻译,确保语言文件中的翻译优先 + $translations = array_merge($required_translations, $translations); + + + + return view('vehicle/logistics', [ + 'lang' => $lang, + 'translations' => $translations + ]); + } /** * 插入 @@ -314,6 +374,69 @@ class VehicleController extends Crud 'lang' => $lang, 'translations' => $translations ]); + } /** + * 更新 + * @param Request $request + * @return Response + * @throws BusinessException + */ + public function updateLogistics(Request $request): Response + { + $id = $request->input('id'); + $lang = session('lang', 'zh-cn'); + $translations = (array)require __DIR__ . '/../lang/' . $lang . '/vehicle.php'; + $common = (array)require __DIR__ . '/../lang/' . $lang . '/common.php'; + $translations = array_merge($translations, $common); + + // 只在中文时使用默认翻译 + if ($lang === 'zh-cn') { + $required_translations = [ + 'brand' => '车辆品牌', + 'brand_placeholder' => '请输入车辆品牌', + 'model' => '车辆型号', + 'model_placeholder' => '请输入车辆型号', + 'vin' => '车架号', + 'vin_placeholder' => '请输入车架号', + 'status' => '车辆状态', + 'status_placeholder' => '请选择状态', + 'purchase_location' => '买车地点', + 'purchase_location_placeholder' => '请输入买车地点', + 'procedure_location' => '手续办理地', + 'procedure_location_placeholder' => '请输入手续办理地', + 'fbo_location' => 'FBO目的地', + 'fbo_location_placeholder' => '请选择FBO目的地', + 'current_location' => '车辆所在地', + 'current_location_placeholder' => '请选择车辆所在地', + 'final_location' => '最终目的地', + 'final_location_placeholder' => '请选择最终目的地', + 'departure_time' => 'FBO发车时间', + 'departure_time_placeholder' => '请选择发车时间', + 'arrival_time' => 'FBO到达时间', + 'arrival_time_placeholder' => '请选择到达时间', + 'shipping_cycle' => '运输周期', + 'shipping_cycle_placeholder' => '请输入运输周期', + 'img_url' => '图片', + 'img_url_placeholder' => '请输入图片URL' + ]; + $translations = array_merge($required_translations, $translations); + } + + // 如果是 POST 请求,处理数据保存和翻译 + if ($request->method() === 'POST') { + $this->save($request); + } + + $data = Vehicle::where('id', $id)->first(); + if (!$data) { + return json(['code' => 1, 'msg' => $translations['data_not_found'] ?? '数据不存在']); + } + + return view('vehicle/updateLogistics', [ + 'id' => $id, + 'data' => $data, + 'lang' => $lang, + 'translations' => $translations + ]); } /** diff --git a/plugin/admin/app/view/vehicle/index.html b/plugin/admin/app/view/vehicle/index.html index 3951345..e2c64ef 100644 --- a/plugin/admin/app/view/vehicle/index.html +++ b/plugin/admin/app/view/vehicle/index.html @@ -40,6 +40,7 @@ + @@ -56,7 +57,8 @@ const INSERT_URL = "/app/admin/vehicle/insert"; const UPDATE_URL = "/app/admin/vehicle/update"; const DETAIL_URL = "/app/admin/vehicle/detail"; - + const LOGISTICS_URL = "/app/admin/vehicle/updateLogistics"; + // 翻译文本 const translations = = json_encode($translations) ?>; @@ -176,6 +178,8 @@ edit(obj); } else if (obj.event === "detail") { detail(obj); + } else if (obj.event === "updateLogistics") { + updateLogistics(obj); } }); @@ -325,6 +329,19 @@ content: DETAIL_URL + "?" + PRIMARY_KEY + "=" + value }); } + + // 查看数据 + let updateLogistics = function(obj) { + let value = obj.data[PRIMARY_KEY]; + layer.open({ + type: 2, + title: translations.edit, + shade: 0.1, + maxmin: true, + area: [common.isModile()?"100%":"800px", common.isModile()?"100%":"600px"], + content: LOGISTICS_URL + "?" + PRIMARY_KEY + "=" + value + }); + } }) diff --git a/plugin/admin/app/view/vehicle/logistics.html b/plugin/admin/app/view/vehicle/logistics.html new file mode 100644 index 0000000..1d82079 --- /dev/null +++ b/plugin/admin/app/view/vehicle/logistics.html @@ -0,0 +1,349 @@ + + +
+ +