From 8bf0984a9c2e71be9f39029ff579ff19f50f0c0b Mon Sep 17 00:00:00 2001 From: mzl Date: Thu, 20 Aug 2026 09:20:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E8=AF=A6=E6=83=85=E5=90=8C=E6=AD=A5=E6=98=BE?= =?UTF-8?q?=E7=A4=BAWhatsApp=E5=AF=BC=E5=85=A5=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit crmAdmin 的 getCustomer() 增加与业务端相同的截图键->签名转换 (列表/详情弹窗 v-html 渲染)。注:Excel 导出走 strip_tags, 截图键文本将不再出现在导出文件中(私有图片本也无法嵌入Excel)。 Co-Authored-By: Claude --- app/crmAdmin/service/CustomerService.php | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/app/crmAdmin/service/CustomerService.php b/app/crmAdmin/service/CustomerService.php index ecd2a17..622d9d6 100644 --- a/app/crmAdmin/service/CustomerService.php +++ b/app/crmAdmin/service/CustomerService.php @@ -463,9 +463,36 @@ class CustomerService $customer['enter_user_name'] = empty($customer['enter_user_id']) ? '' : User::where('id',$customer['enter_user_id'])->value('name'); $customer['user_name'] = empty($customer['user_id']) ? '公海' : User::where('id',$customer['user_id'])->value('name'); + // WhatsApp导入截图:desc_collect 里的 OSS 对象键 -> 带签名 (前端 v-html 渲染) + $customer['desc_collect'] = self::signScreenshotImages((string)($customer['desc_collect'] ?? '')); + return $customer; } + /** + * 将 desc_collect 中 crm_whatsapp 截图的 OSS 对象键替换为带签名的 标签。 + * 键按原文匹配签名(历史记录为双斜杠键,对象即存于该键,不可归一)。 + */ + private static function signScreenshotImages(string $desc): string + { + if ($desc === '' || strpos($desc, 'crm_whatsapp/') === false) { + return $desc; + } + return preg_replace_callback( + '/([A-Za-z0-9_\-]+(?:\/[A-Za-z0-9_\-]+)*\/+crm_whatsapp\/[A-Za-z0-9_\-\.]+\.(?:png|jpe?g|webp))/', + function ($m) { + try { + $url = (new OssService())->generatePrivateUrl($m[1], 7 * 86400); + return ''; + } catch (\Throwable $e) { + return $m[0]; + } + }, + $desc + ); + } + public function detail($params) {