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)
{
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());
+54 -6
View File
@@ -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());
}
}
}
+3 -3
View File
@@ -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;
}
+2
View File
@@ -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,
];
+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'];
/**
* 不允许自动填充模型字段
*/
+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();
$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)];
}
/**
+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 = [
'app_id' => $certificate['app_id'],
'redirect_uri' => $certificate['r_url'],
'redirect_uri' => $redirect_uri,
'scope' => $certificate['scope'],
'state' => $certificate['state']
];
+2 -2
View File
@@ -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);
@@ -77,7 +77,7 @@
</div>
<div class="tip">
扫码即可联系本人 | 本资料随 PDF 自动生成
<?= $contactField['left'] ?> | <?= $contactField['right'] ?>
</div>
</body>
-1
View File
@@ -40,7 +40,6 @@ class XunfeiFanyi
$header = curl_getinfo($ch);
curl_close($ch);
$data = array('header' => $header,'body' => $response);
var_dump($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('/download/pdf', [app\common\controller\UsedCarController::class, 'downloadPdf']);
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('/store', [app\common\controller\UsedCarController::class, 'store']);
Route::any('/update', [app\common\controller\UsedCarController::class, 'update']);