Merge branch 'dev'

This commit is contained in:
2026-01-15 13:33:47 +08:00
11 changed files with 70 additions and 18 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ class AuthController extends BaseController
public function feishuScope(Request $request) public function feishuScope(Request $request)
{ {
try { 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); return $this->success($result);
} catch (\Throwable $e) { } catch (\Throwable $e) {
return $this->error($e->getMessage().$e->getLine().$e->getFile()); return $this->error($e->getMessage().$e->getLine().$e->getFile());
+54 -6
View File
@@ -99,7 +99,8 @@ class UsedCarController extends BaseController
foreach ($attachments as $attachment){ foreach ($attachments as $attachment){
$attachment_pull[] = [ $attachment_pull[] = [
'name'=>$attachment['name'], 'name'=>$attachment['name'],
'src'=>$ossService->generatePrivateUrl($attachment['src']) 'src'=>$attachment['src'],
'src_pull'=>$ossService->generatePrivateUrl($attachment['src']),
]; ];
} }
$data['attachment_pull'] = $attachment_pull; $data['attachment_pull'] = $attachment_pull;
@@ -174,7 +175,7 @@ class UsedCarController extends BaseController
$field['currency'] = $this->currency[$currency]; $field['currency'] = $this->currency[$currency];
$data = $this->fanyi($data, $lang);//车辆字段翻译外文 $data = $this->fanyi($data, $lang);//车辆字段翻译外文
$contactField = $this->contact($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]); UsedCar::where('id', $data['id'])->update(['pdf_src' => $pdf]);
array_map('unlink', glob(runtime_path('pdf/images/*.jpg'))); array_map('unlink', glob(runtime_path('pdf/images/*.jpg')));
@@ -257,7 +258,7 @@ class UsedCarController extends BaseController
'body_color' => 'Body Color', 'body_color' => 'Body Color',
'created_at' => 'Created At', 'created_at' => 'Created At',
'condition_desc' => 'Vehicle Condition', 'condition_desc' => 'Vehicle Condition',
'images' => 'Images', 'images' => 'Product image',
], ],
'ru' => [ 'ru' => [
@@ -283,7 +284,7 @@ class UsedCarController extends BaseController
'body_color' => 'Color de la carrocería', 'body_color' => 'Color de la carrocería',
'created_at' => 'Fecha de creación', 'created_at' => 'Fecha de creación',
'condition_desc' => 'Estado del vehículo', 'condition_desc' => 'Estado del vehículo',
'images' => 'Imágenes', 'images' => 'Imagen del producto',
], ],
'ar' => [ 'ar' => [
@@ -296,7 +297,7 @@ class UsedCarController extends BaseController
'body_color' => 'لون الهيكل', 'body_color' => 'لون الهيكل',
'created_at' => 'تاريخ الإنشاء', 'created_at' => 'تاريخ الإنشاء',
'condition_desc' => 'حالة السيارة', 'condition_desc' => 'حالة السيارة',
'images' => 'صور المنتج', 'images' => 'خريطة المنتج',
], ],
]; ];
return $field[$to]; return $field[$to];
@@ -322,6 +323,8 @@ class UsedCarController extends BaseController
'phone' => '电话', 'phone' => '电话',
'WhatsApp' => 'WhatsApp', 'WhatsApp' => 'WhatsApp',
'code' => '二维码', 'code' => '二维码',
'left' => '扫码即可联系本人',
'right' => '本资料随PDF自动生成',
], ],
'en' => [ 'en' => [
@@ -331,6 +334,8 @@ class UsedCarController extends BaseController
'phone' => 'Phone', 'phone' => 'Phone',
'WhatsApp' => 'WhatsApp', 'WhatsApp' => 'WhatsApp',
'code' => 'QR Code', 'code' => 'QR Code',
'left' => 'Scan the code to contact me',
'right' => 'This information is automatically generated with the PDF',
], ],
'ru' => [ 'ru' => [
@@ -340,6 +345,8 @@ class UsedCarController extends BaseController
'phone' => 'Телефон', 'phone' => 'Телефон',
'WhatsApp' => 'WhatsApp', 'WhatsApp' => 'WhatsApp',
'code' => 'QR-код', 'code' => 'QR-код',
'left' => 'Код позволяет связаться с самим собой.',
'right' => 'Эта информация автоматически генерируется с помощью PDF',
], ],
'es' => [ 'es' => [
@@ -349,6 +356,8 @@ class UsedCarController extends BaseController
'phone' => 'Teléfono', 'phone' => 'Teléfono',
'WhatsApp' => 'WhatsApp', 'WhatsApp' => 'WhatsApp',
'code' => 'Código QR', 'code' => 'Código QR',
'left' => 'Escanee el Código para contactarme.',
'right' => 'Esta información se genera automáticamente con pdf',
], ],
'ar' => [ 'ar' => [
@@ -358,6 +367,8 @@ class UsedCarController extends BaseController
'phone' => 'الهاتف', 'phone' => 'الهاتف',
'WhatsApp' => 'واتساب', 'WhatsApp' => 'واتساب',
'code' => 'رمز QR', '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']; $url = $baseUrl . '/pdf/' . $raw['pdf_src'];
return $this->success([ 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());
}
}
} }
+3 -3
View File
@@ -88,9 +88,9 @@ class UserController extends BaseController
unset($data['app_id']); unset($data['app_id']);
$ossservice = new OssService(); $ossservice = new OssService();
$data['user']['avatar_pull'] = $data['user']['avatar']; $data['avatar_pull'] = $data['avatar'];
if(!str_contains($data['user']['avatar'], 'http') && !str_contains($data['user']['avatar'], 'www.') && !empty($data['user']['avatar'])){ if(!str_contains($data['avatar'], 'http') && !str_contains($data['avatar'], 'www.') && !empty($data['user']['avatar'])){
$data['user']['avatar_pull'] = $ossservice->generatePrivateUrl($data['user']['avatar']); $data['avatar_pull'] = $ossservice->generatePrivateUrl($data['avatar']);
} }
return $data; return $data;
} }
+2
View File
@@ -312,10 +312,12 @@ class AuthLogic
public function feishuAppInfo(string $app_id, string $systemCode='') public function feishuAppInfo(string $app_id, string $systemCode='')
{ {
$fsAppInfo = CorpFeishuApp::where('app_id', $app_id)->first(); $fsAppInfo = CorpFeishuApp::where('app_id', $app_id)->first();
return [ return [
'app_id' => $fsAppInfo->app_id, 'app_id' => $fsAppInfo->app_id,
'app_secret' => $fsAppInfo->app_secret, 'app_secret' => $fsAppInfo->app_secret,
'r_url' => $fsAppInfo->r_url, 'r_url' => $fsAppInfo->r_url,
'm_url' => $fsAppInfo->m_url,
'scope' => $fsAppInfo->scopes, 'scope' => $fsAppInfo->scopes,
'state' => $fsAppInfo->state, 'state' => $fsAppInfo->state,
]; ];
+1
View File
@@ -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']; 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'];
/** /**
* 不允许自动填充模型字段 * 不允许自动填充模型字段
*/ */
+2 -2
View File
@@ -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(); $logic = new AuthLogic();
$certificate = $logic->feishuAppInfo($app_id, $systemCcode); $certificate = $logic->feishuAppInfo($app_id, $systemCcode);
$feishu = new Feishu($certificate['app_id'], $certificate['app_secret'], 'xinyouhe'); $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)];
} }
/** /**
+3 -2
View File
@@ -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 = [ $arr = [
'app_id' => $certificate['app_id'], 'app_id' => $certificate['app_id'],
'redirect_uri' => $certificate['r_url'], 'redirect_uri' => $redirect_uri,
'scope' => $certificate['scope'], 'scope' => $certificate['scope'],
'state' => $certificate['state'] 'state' => $certificate['state']
]; ];
+2 -2
View File
@@ -116,7 +116,7 @@ class MpdfDriver
return [$css, $html]; return [$css, $html];
} }
public function exportUsedCarPdf($field,$car,$user,$contactField,$contact) public function exportUsedCarPdf($field,$car,$user,$contactField,$contact,$lang)
{ {
/*$car = [ /*$car = [
'title' => '奥迪Q3 2013款 35 TFSI 舒适型', 'title' => '奥迪Q3 2013款 35 TFSI 舒适型',
@@ -186,7 +186,7 @@ class MpdfDriver
$pdf = $mpdf->Output('车辆详情.pdf', 'S'); $pdf = $mpdf->Output('车辆详情.pdf', 'S');
$dir = runtime_path('pdf'); $dir = runtime_path('pdf');
if (!is_dir($dir)) mkdir($dir, 0777, true); 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; $path = $dir . '/' . $pdfName;
file_put_contents($path, $pdf); file_put_contents($path, $pdf);
@@ -77,7 +77,7 @@
</div> </div>
<div class="tip"> <div class="tip">
扫码即可联系本人 | 本资料随 PDF 自动生成 <?= $contactField['left'] ?> | <?= $contactField['right'] ?>
</div> </div>
</body> </body>
-1
View File
@@ -40,7 +40,6 @@ class XunfeiFanyi
$header = curl_getinfo($ch); $header = curl_getinfo($ch);
curl_close($ch); curl_close($ch);
$data = array('header' => $header,'body' => $response); $data = array('header' => $header,'body' => $response);
var_dump($data);
return $data; return $data;
} }
+1
View File
@@ -60,6 +60,7 @@ Route::group('/common', function () {
Route::any('/produce/pdf', [app\common\controller\UsedCarController::class, 'producePdf']); Route::any('/produce/pdf', [app\common\controller\UsedCarController::class, 'producePdf']);
Route::any('/download/pdf', [app\common\controller\UsedCarController::class, 'downloadPdf']); Route::any('/download/pdf', [app\common\controller\UsedCarController::class, 'downloadPdf']);
Route::any('/pdf', [app\common\controller\UsedCarController::class, 'getPdf']); Route::any('/pdf', [app\common\controller\UsedCarController::class, 'getPdf']);
Route::any('/preview/pdf', [app\common\controller\UsedCarController::class, 'previewPdf']);
Route::any('/show', [app\common\controller\UsedCarController::class, 'show']); Route::any('/show', [app\common\controller\UsedCarController::class, 'show']);
Route::any('/store', [app\common\controller\UsedCarController::class, 'store']); Route::any('/store', [app\common\controller\UsedCarController::class, 'store']);
Route::any('/update', [app\common\controller\UsedCarController::class, 'update']); Route::any('/update', [app\common\controller\UsedCarController::class, 'update']);