Merge branch 'dev'
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
|
||||
@@ -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'];
|
||||
|
||||
/**
|
||||
* 不允许自动填充模型字段
|
||||
*/
|
||||
|
||||
@@ -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)];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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']
|
||||
];
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -40,7 +40,6 @@ class XunfeiFanyi
|
||||
$header = curl_getinfo($ch);
|
||||
curl_close($ch);
|
||||
$data = array('header' => $header,'body' => $response);
|
||||
var_dump($data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
@@ -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']);
|
||||
|
||||
Reference in New Issue
Block a user