From 0958c545a2291acadeb9296ea9db4db00efba326 Mon Sep 17 00:00:00 2001 From: gongfuxiang Date: Thu, 26 Dec 2024 23:13:17 +0800 Subject: [PATCH] =?UTF-8?q?diy=E9=A2=84=E8=A7=88=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=90=84=E7=AB=AF=E4=BA=8C=E7=BB=B4=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/Diy.php | 2 +- app/admin/view/default/diy/preview.html | 24 ++- app/lang/cht.php | 2 - app/lang/en.php | 2 - app/lang/spa.php | 2 - app/lang/zh.php | 2 - app/service/DiyService.php | 195 ++++++++++++++++-- .../static/admin/default/css/diy.preview.css | 2 +- public/static/common/js/common.js | 8 +- 9 files changed, 206 insertions(+), 33 deletions(-) diff --git a/app/admin/controller/Diy.php b/app/admin/controller/Diy.php index 110950c69..7431ee9b9 100644 --- a/app/admin/controller/Diy.php +++ b/app/admin/controller/Diy.php @@ -65,7 +65,7 @@ class Diy extends Base */ public function Preview() { - MyViewAssign('data', DiyService::DiyPreviewUrl($this->data_detail)); + MyViewAssign('data', DiyService::DiyPreviewData($this->data_detail)); return MyView(); } diff --git a/app/admin/view/default/diy/preview.html b/app/admin/view/default/diy/preview.html index 4635e3e4e..ed883be9b 100644 --- a/app/admin/view/default/diy/preview.html +++ b/app/admin/view/default/diy/preview.html @@ -3,14 +3,24 @@
{{if $data.code eq 0}} - -
-
-
- {{:MyLang('common_service.diy.preview_scan_tips')}} - {{:MyLang('common_service.diy.preview_url_copy_name')}} + {{if empty($data['data']['h5_url'])}} +
{{:MyLang('common_service.diy.preview_url_tips')}}
+ {{else /}} + + {{/if}} + {{if !empty($data['data']['qrcode']) and is_array($data['data']['qrcode'])}} +
+ {{foreach $data.data.qrcode as $v}} + +
+ {{$v.name}} + {{if !empty($v['url'])}} + {{:MyLang('copy_title')}} + {{/if}} +
+ {{/foreach}}
-
+ {{/if}} {{else /}} {{:ModuleInclude('public/not_data', ['msg'=>$data['msg']])}} {{/if}} diff --git a/app/lang/cht.php b/app/lang/cht.php index 55e7c95ec..4ad310736 100644 --- a/app/lang/cht.php +++ b/app/lang/cht.php @@ -1707,8 +1707,6 @@ return [ 'upload_config_file_handle_fail_tips' => '設定檔處理失敗', 'upload_invalid_packet_tips' => '無效數据包', 'preview_url_tips' => '請在後臺[ 手機->基礎配寘 ]先配寘手機端h5地址(h5端需要使用uniapp版本打包)', - 'preview_url_copy_name' => '複製連結', - 'preview_scan_tips' => '掃碼預覽效果', 'form_item_desc' => '描述', 'form_item_desc_message' => '描述內容格式2~60個字元', 'form_item_apply_version' => '適用系統版本', diff --git a/app/lang/en.php b/app/lang/en.php index b3d0912d6..c8954e56f 100644 --- a/app/lang/en.php +++ b/app/lang/en.php @@ -1704,8 +1704,6 @@ return [ 'upload_config_file_handle_fail_tips' => 'Configuration file processing failed', 'upload_invalid_packet_tips' => 'Invalid data packet', 'preview_url_tips' => 'Please configure the H5 address on the mobile end in the background [Phone ->Basic Configuration] first (H5 end needs to be packaged using Uniapp version)', - 'preview_url_copy_name' => 'Copy link', - 'preview_scan_tips' => 'Scan code preview effect', 'form_item_desc' => 'describe', 'form_item_desc_message' => 'Describe content format 2-60 characters', 'form_item_apply_version' => 'Applicable system version', diff --git a/app/lang/spa.php b/app/lang/spa.php index 55d8c51c6..53e44b0f6 100644 --- a/app/lang/spa.php +++ b/app/lang/spa.php @@ -1708,8 +1708,6 @@ return [ 'upload_config_file_handle_fail_tips' => 'Falló el procesamiento del archivo de configuración', 'upload_invalid_packet_tips' => 'Paquete de datos no válido', 'preview_url_tips' => 'Por favor, configure la dirección h5 del teléfono móvil en segundo plano [teléfono móvil - > configuración básica] primero (el lado h5 necesita ser empaquetado con la versión uniapp)', - 'preview_url_copy_name' => 'Copiar enlace', - 'preview_scan_tips' => 'Efecto de previsualización del Código de escaneo', 'form_item_desc' => 'Descripción', 'form_item_desc_message' => 'Formato de contenido de descripción de 2 a 60 caracteres', 'form_item_apply_version' => 'Versión del sistema aplicable', diff --git a/app/lang/zh.php b/app/lang/zh.php index 5b3e50029..1dbdf9929 100755 --- a/app/lang/zh.php +++ b/app/lang/zh.php @@ -1710,8 +1710,6 @@ return [ 'upload_config_file_handle_fail_tips' => '配置文件处理失败', 'upload_invalid_packet_tips' => '无效数据包', 'preview_url_tips' => '请在后台[ 手机->基础配置 ]先配置手机端h5地址(h5端需要使用uniapp版本打包)', - 'preview_url_copy_name' => '复制链接', - 'preview_scan_tips' => '扫码预览效果', 'form_item_desc' => '描述', 'form_item_desc_message' => '描述内容格式2~60个字符', 'form_item_apply_version' => '适用系统版本', diff --git a/app/service/DiyService.php b/app/service/DiyService.php index 56353caff..647453817 100644 --- a/app/service/DiyService.php +++ b/app/service/DiyService.php @@ -15,6 +15,7 @@ use app\module\DiyModule; use app\service\ResourcesService; use app\service\AttachmentService; use app\service\StoreService; +use app\service\AppMiniUserService; /** * DIY装修服务层 @@ -867,7 +868,7 @@ class DiyService } /** - * 预览地址 + * 预览数据 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 @@ -875,24 +876,194 @@ class DiyService * @desc description * @param [array] $data [diy数据] */ - public static function DiyPreviewUrl($data = []) + public static function DiyPreviewData($data = []) { - // h5地址 - $h5_url = MyC('common_app_h5_url'); - if(empty($h5_url)) - { - return DataReturn(MyLang('common_service.diy.preview_url_tips'), -1); - } - // 数据 if(empty($data)) { return DataReturn(MyLang('no_data'), -1); } - // 预览地址 - $h5_url .= 'pages/diy/diy?id='.$data['id']; - return DataReturn('success', 0, $h5_url); + // h5地址 + $h5_url = MyC('common_app_h5_url'); + + // 生成各平台二维码 + $qrcode = []; + $platform = MyConst('common_platform_type'); + if(!empty($platform) && is_array($platform)) + { + // 自定义路径和名称 + $time_dir = date('Y/m/d', is_numeric($data['add_time']) ? $data['add_time'] : strtotime($data['add_time'])); + $filename = $data['id'].'.png'; + + // 地址信息 + $page = 'pages/diy/diy'; + $query = 'id='.$data['id']; + foreach($platform as $v) + { + // 存储信息 + $path = 'download'.DS.'diy'.DS.'qrcode'.DS.$v['value'].DS.$time_dir.DS; + // 二维码处理参数 + $dir_params = [ + 'path' => DS.$path, + 'filename' => $filename, + 'dir' => ROOT.'public'.DS.$path.$filename, + ]; + $status = false; + if(!file_exists($dir_params['dir'])) + { + // 根据平台处理 + switch($v['value']) + { + // h5 + case 'h5' : + if(!empty($h5_url)) + { + $ret = (new \base\Qrcode())->Create(array_merge($dir_params, ['content'=>$h5_url])); + if($ret['code'] == 0) + { + $status = true; + } + } + break; + + // 微信 + case 'weixin' : + $appid = AppMiniUserService::AppMiniConfig('common_app_mini_weixin_appid'); + $appsecret = AppMiniUserService::AppMiniConfig('common_app_mini_weixin_appsecret'); + if(!empty($appid) && !empty($appsecret)) + { + $request_params = [ + 'page' => $page, + 'scene' => $query, + 'width' => 300, + ]; + $ret = (new \base\Wechat($appid, $appsecret))->MiniQrCodeCreate($request_params); + if($ret['code'] == 0) + { + if(\base\FileUtil::CreateDir(ROOT.'public'.DS.$path)) + { + if(@file_put_contents($dir_params['dir'], $ret['data']) !== false) + { + $status = true; + } + } + } + } + break; + + // 支付宝小程序 + case 'alipay' : + $appid = AppMiniUserService::AppMiniConfig('common_app_mini_alipay_appid'); + if(!empty($appid)) + { + $request_params = [ + 'appid' => $appid, + 'page' => $page, + 'scene' => $query, + 'width' => 300, + ]; + $ret = (new \base\Alipay())->MiniQrCodeCreate($request_params); + if($ret['code'] == 0) + { + if(\base\FileUtil::CreateDir(ROOT.'public'.DS.$path)) + { + if(@file_put_contents($dir_params['dir'], RequestGet($ret['data'])) !== false) + { + $status = true; + } + } + } + } + break; + + // 头条小程序 + case 'toutiao' : + $config = [ + 'appid' => AppMiniUserService::AppMiniConfig('common_app_mini_toutiao_appid'), + 'secret' => AppMiniUserService::AppMiniConfig('common_app_mini_toutiao_appsecret'), + ]; + if(!empty($config['appid']) && !empty($config['secret'])) + { + $request_params = [ + 'page' => $page, + 'scene' => $query, + 'width' => 300, + ]; + $ret = (new \base\Toutiao($config))->MiniQrCodeCreate($request_params); + if($ret['code'] == 0) + { + if(\base\FileUtil::CreateDir(ROOT.'public'.DS.$path)) + { + if(@file_put_contents($dir_params['dir'], $ret['data']) !== false) + { + $status = true; + } + } + } + } + break; + + // 百度小程序 + case 'baidu' : + $config = [ + 'appid' => AppMiniUserService::AppMiniConfig('common_app_mini_baidu_appid'), + 'key' => AppMiniUserService::AppMiniConfig('common_app_mini_baidu_appkey'), + 'secret' => AppMiniUserService::AppMiniConfig('common_app_mini_baidu_appsecret'), + ]; + if(!empty($config['appid']) && !empty($config['key']) && !empty($config['secret'])) + { + $request_params = [ + 'page' => $page, + 'scene' => $query, + 'width' => 300, + ]; + $ret = (new \base\Baidu($config))->MiniQrCodeCreate($request_params); + if($ret['code'] == 0) + { + if(\base\FileUtil::CreateDir(ROOT.'public'.DS.$path)) + { + if(@file_put_contents($dir_params['dir'], $ret['data']) !== false) + { + $status = true; + } + } + } + } + break; + + // 快手小程序 + case 'kuaishou' : + $appid = AppMiniUserService::AppMiniConfig('common_app_mini_kuaishou_appid'); + if(!empty($appid)) + { + $url = 'kwai://miniapp?appId='.$appid.'&KSMP_source=011012&KSMP_internal_source=011012&path='.urlencode($page.'?'.$query); + $ret = (new \base\Qrcode())->Create(array_merge($dir_params, ['content'=>$url])); + if($ret['code'] == 0) + { + $status = true; + } + } + break; + } + } else { + $status = true; + } + if($status) + { + $qrcode[] = [ + 'name' => $v['name'], + 'type' => $v['value'], + 'url' => ($v['value'] == 'h5') ? $h5_url .= $page.'?'.$query : '', + 'qrcode' => ResourcesService::AttachmentPathViewHandle($dir_params['path'].$dir_params['filename']), + ]; + } + } + } + return DataReturn('success', 0, [ + 'qrcode' => $qrcode, + 'h5_url' => $h5_url, + ]); } /** diff --git a/public/static/admin/default/css/diy.preview.css b/public/static/admin/default/css/diy.preview.css index cc538940e..be423cea8 100644 --- a/public/static/admin/default/css/diy.preview.css +++ b/public/static/admin/default/css/diy.preview.css @@ -8,7 +8,7 @@ body { } .qrcode-content { position: absolute; - top: 20%; + top: 2rem; left: calc(50% + 25rem); } .mobile-iframe, diff --git a/public/static/common/js/common.js b/public/static/common/js/common.js index 26c196c91..7a467781d 100755 --- a/public/static/common/js/common.js +++ b/public/static/common/js/common.js @@ -3839,16 +3839,16 @@ function VoiceNotice (mp3) { */ function AnnexView (type, value, obj) { if ((value || null) != null) { - var title = null; + var title = (typeof (obj) == 'object') ? (obj.attr('data-title') || null) : null; var html = null; var style = 'max-width:100%; max-height:calc(90vh - 4.5rem); margin: 0 auto;'; switch (type) { case 'video': - title = window['lang_video_preview_title'] || '视频预览'; + title = title || window['lang_video_preview_title'] || '视频预览'; html = ''; break; default: - title = window['lang_images_preview_title'] || '图片预览'; + title = title || window['lang_images_preview_title'] || '图片预览'; html = ''; } // 是否存在元素对象 @@ -3865,7 +3865,7 @@ function AnnexView (type, value, obj) { config: {}, style: 'max-width: 80%; max-height: 90%; left: auto; min-width: 12rem;', content_style: 'padding: 0; border-bottom: 0;', - content: html, + content: '
'+html+'
', }); } }