diff --git a/app/common/controller/AuthController.php b/app/common/controller/AuthController.php index a568b82..f85d520 100644 --- a/app/common/controller/AuthController.php +++ b/app/common/controller/AuthController.php @@ -32,7 +32,7 @@ class AuthController extends BaseController public function feishuScope(Request $request) { try { - $result = (new AuthService())->feishuAuthorize($request->get('app_id'), $request->system_code, $request->is_mob); + $result = (new AuthService())->feishuAuthorize($request->get('app_id'), $request->system_code, $request->get('is_pc','0')); return $this->success($result); } catch (\Throwable $e) { return $this->error($e->getMessage().$e->getLine().$e->getFile()); diff --git a/app/common/controller/UsedCarController.php b/app/common/controller/UsedCarController.php index 489a906..a766a6e 100644 --- a/app/common/controller/UsedCarController.php +++ b/app/common/controller/UsedCarController.php @@ -99,7 +99,8 @@ class UsedCarController extends BaseController foreach ($attachments as $attachment){ $attachment_pull[] = [ 'name'=>$attachment['name'], - 'src'=>$ossService->generatePrivateUrl($attachment['src']) + 'src'=>$attachment['src'], + 'src_pull'=>$ossService->generatePrivateUrl($attachment['src']), ]; } $data['attachment_pull'] = $attachment_pull; @@ -174,7 +175,7 @@ class UsedCarController extends BaseController $field['currency'] = $this->currency[$currency]; $data = $this->fanyi($data, $lang);//车辆字段翻译外文 $contactField = $this->contact($lang); //名片相关外文 - $pdf = (new MpdfDriver())->exportUsedCarPdf($field,$data,$user,$contactField,$contact); + $pdf = (new MpdfDriver())->exportUsedCarPdf($field,$data,$user,$contactField,$contact,$lang); UsedCar::where('id', $data['id'])->update(['pdf_src' => $pdf]); array_map('unlink', glob(runtime_path('pdf/images/*.jpg'))); @@ -257,7 +258,7 @@ class UsedCarController extends BaseController 'body_color' => 'Body Color', 'created_at' => 'Created At', 'condition_desc' => 'Vehicle Condition', - 'images' => 'Images', + 'images' => 'Product image', ], 'ru' => [ @@ -283,7 +284,7 @@ class UsedCarController extends BaseController 'body_color' => 'Color de la carrocería', 'created_at' => 'Fecha de creación', 'condition_desc' => 'Estado del vehículo', - 'images' => 'Imágenes', + 'images' => 'Imagen del producto', ], 'ar' => [ @@ -296,7 +297,7 @@ class UsedCarController extends BaseController 'body_color' => 'لون الهيكل', 'created_at' => 'تاريخ الإنشاء', 'condition_desc' => 'حالة السيارة', - 'images' => 'صور المنتج', + 'images' => 'خريطة المنتج', ], ]; return $field[$to]; @@ -322,6 +323,8 @@ class UsedCarController extends BaseController 'phone' => '电话', 'WhatsApp' => 'WhatsApp', 'code' => '二维码', + 'left' => '扫码即可联系本人', + 'right' => '本资料随PDF自动生成', ], 'en' => [ @@ -331,6 +334,8 @@ class UsedCarController extends BaseController 'phone' => 'Phone', 'WhatsApp' => 'WhatsApp', 'code' => 'QR Code', + 'left' => 'Scan the code to contact me', + 'right' => 'This information is automatically generated with the PDF', ], 'ru' => [ @@ -340,6 +345,8 @@ class UsedCarController extends BaseController 'phone' => 'Телефон', 'WhatsApp' => 'WhatsApp', 'code' => 'QR-код', + 'left' => 'Код позволяет связаться с самим собой.', + 'right' => 'Эта информация автоматически генерируется с помощью PDF', ], 'es' => [ @@ -349,6 +356,8 @@ class UsedCarController extends BaseController 'phone' => 'Teléfono', 'WhatsApp' => 'WhatsApp', 'code' => 'Código QR', + 'left' => 'Escanee el Código para contactarme.', + 'right' => 'Esta información se genera automáticamente con pdf', ], 'ar' => [ @@ -358,6 +367,8 @@ class UsedCarController extends BaseController 'phone' => 'الهاتف', 'WhatsApp' => 'واتساب', 'code' => 'رمز QR', + 'left' => 'اكتساح رمز الاتصال بي', + 'right' => 'هذه المعلومات تلقائيا مع قوات الدفاع الشعبي', ], ]; @@ -387,7 +398,7 @@ class UsedCarController extends BaseController } // 返回访问地址 - $baseUrl = 'http://' . request()->header('host'); + $baseUrl = 'https://' . request()->header('host'); $url = $baseUrl . '/pdf/' . $raw['pdf_src']; return $this->success([ @@ -399,4 +410,41 @@ class UsedCarController extends BaseController } } + /** + * 预览pdf + */ + function previewPdf($request) { + try { + $raw = $this->service->serviceShow($request); + $filePath = runtime_path('pdf') . '/' . $raw['pdf_src']; + + if (empty($raw['pdf_src']) || !file_exists($filePath)) { + throw new BusinessException('文件不存在'); + } + + // 确保 public/pdf 存在 + $publicDir = public_path('pdf'); + if (!is_dir($publicDir)) { + mkdir($publicDir, 0755, true); + } + + // 拷贝到 public 目录 + $publicFile = $publicDir . '/' . $raw['pdf_src']; + if (!file_exists($publicFile)) { + copy($filePath, $publicFile); + } + + $path = public_path('pdf/' . basename($raw['pdf_src'])); + + return response(file_get_contents($path), 200, [ + 'Content-Type' => 'application/pdf', + 'Access-Control-Allow-Origin' => '*', // 或指定前端域名 + 'Access-Control-Allow-Methods' => 'GET, OPTIONS', + 'Access-Control-Allow-Headers' => '*', + ]); + } catch (\Throwable $e) { + return $this->error($e->getMessage()); + } + } + } \ No newline at end of file diff --git a/app/common/controller/UserController.php b/app/common/controller/UserController.php index cdaa385..7febc31 100644 --- a/app/common/controller/UserController.php +++ b/app/common/controller/UserController.php @@ -88,9 +88,9 @@ class UserController extends BaseController unset($data['app_id']); $ossservice = new OssService(); - $data['user']['avatar_pull'] = $data['user']['avatar']; - if(!str_contains($data['user']['avatar'], 'http') && !str_contains($data['user']['avatar'], 'www.') && !empty($data['user']['avatar'])){ - $data['user']['avatar_pull'] = $ossservice->generatePrivateUrl($data['user']['avatar']); + $data['avatar_pull'] = $data['avatar']; + if(!str_contains($data['avatar'], 'http') && !str_contains($data['avatar'], 'www.') && !empty($data['user']['avatar'])){ + $data['avatar_pull'] = $ossservice->generatePrivateUrl($data['avatar']); } return $data; } diff --git a/app/common/logic/AuthLogic.php b/app/common/logic/AuthLogic.php index 8339ecb..1157f67 100644 --- a/app/common/logic/AuthLogic.php +++ b/app/common/logic/AuthLogic.php @@ -312,10 +312,12 @@ class AuthLogic public function feishuAppInfo(string $app_id, string $systemCode='') { $fsAppInfo = CorpFeishuApp::where('app_id', $app_id)->first(); + return [ 'app_id' => $fsAppInfo->app_id, 'app_secret' => $fsAppInfo->app_secret, 'r_url' => $fsAppInfo->r_url, + 'm_url' => $fsAppInfo->m_url, 'scope' => $fsAppInfo->scopes, 'state' => $fsAppInfo->state, ]; diff --git a/app/common/model/UsedCar.php b/app/common/model/UsedCar.php index 6e3c005..ef61776 100644 --- a/app/common/model/UsedCar.php +++ b/app/common/model/UsedCar.php @@ -41,6 +41,7 @@ class UsedCar extends Model * 允许自动填充模型字段 */ protected $fillable = ['id','code', 'user_id', 'product_name', 'vin', 'price', 'source_place', 'plate_place', 'plate_time', 'displacement','mileage','power', 'body_color', 'images', 'condition_desc', 'attachment', 'crawl_title', 'crawl_brand', 'crawl_brand_id', 'crawl_series', 'crawl_series_id', 'crawl_year', 'crawl_msrp', 'crawl_car_id', 'status', 'sort', 'created_at', 'updated_at']; + /** * 不允许自动填充模型字段 */ diff --git a/app/common/service/AuthService.php b/app/common/service/AuthService.php index a6a352c..4d00200 100644 --- a/app/common/service/AuthService.php +++ b/app/common/service/AuthService.php @@ -13,12 +13,12 @@ class AuthService /** * 飞书授权 */ - public function feishuAuthorize(string $app_id, string $systemCcode, $mobile) + public function feishuAuthorize(string $app_id, string $systemCcode, $is_pc) { $logic = new AuthLogic(); $certificate = $logic->feishuAppInfo($app_id, $systemCcode); $feishu = new Feishu($certificate['app_id'], $certificate['app_secret'], 'xinyouhe'); - return ['auth_url' => $feishu->authorize($certificate, $mobile)]; + return ['auth_url' => $feishu->authorize($certificate, $is_pc)]; } /** diff --git a/app/common/utils/Feishu.php b/app/common/utils/Feishu.php index 39c9121..9673cea 100644 --- a/app/common/utils/Feishu.php +++ b/app/common/utils/Feishu.php @@ -92,11 +92,12 @@ class Feishu /** * 授权 */ - public function authorize($certificate,$mobile, $url = 'authen/v1/authorize') + public function authorize($certificate,$is_pc, $url = 'authen/v1/authorize') { + $redirect_uri = $is_pc==1?$certificate['r_url']:$certificate['m_url']; $arr = [ 'app_id' => $certificate['app_id'], - 'redirect_uri' => $certificate['r_url'], + 'redirect_uri' => $redirect_uri, 'scope' => $certificate['scope'], 'state' => $certificate['state'] ]; diff --git a/app/common/utils/pdf/service/MpdfDriver.php b/app/common/utils/pdf/service/MpdfDriver.php index 08981d7..c25d0f9 100644 --- a/app/common/utils/pdf/service/MpdfDriver.php +++ b/app/common/utils/pdf/service/MpdfDriver.php @@ -116,7 +116,7 @@ class MpdfDriver return [$css, $html]; } - public function exportUsedCarPdf($field,$car,$user,$contactField,$contact) + public function exportUsedCarPdf($field,$car,$user,$contactField,$contact,$lang) { /*$car = [ 'title' => '奥迪Q3 2013款 35 TFSI 舒适型', @@ -186,7 +186,7 @@ class MpdfDriver $pdf = $mpdf->Output('车辆详情.pdf', 'S'); $dir = runtime_path('pdf'); if (!is_dir($dir)) mkdir($dir, 0777, true); - $pdfName = 'invoice-' . date('YmdHis').'-'.$car['id'] . '.pdf'; + $pdfName = 'invoice-' . date('YmdHis').'-'.$car['id'] . '-' . $lang . '.pdf'; $path = $dir . '/' . $pdfName; file_put_contents($path, $pdf); diff --git a/app/common/utils/pdf/template/contactCard.stub b/app/common/utils/pdf/template/contactCard.stub index 493f73f..3c4f76c 100644 --- a/app/common/utils/pdf/template/contactCard.stub +++ b/app/common/utils/pdf/template/contactCard.stub @@ -77,7 +77,7 @@