diff --git a/sheep/components/s-block/s-block.vue b/sheep/components/s-block/s-block.vue index fc447866..efebe341 100644 --- a/sheep/components/s-block/s-block.vue +++ b/sheep/components/s-block/s-block.vue @@ -20,14 +20,14 @@ // 组件样式 const elBackground = computed(() => { if (props.styles) { - if (props.styles.bgType === 'color') + if (props.styles.bgType === 'color') { return { background: props.styles.bgColor }; - if (props.styles.bgType === 'img') + } + if (props.styles.bgType === 'img') { return { - background: `url(${sheep.$url.cdn( - props.styles.bgImg, - )}) no-repeat top center / 100% auto`, + background: `url(${sheep.$url.cdn(props.styles.bgImg)}) no-repeat top center / 100% auto`, }; + } } }); diff --git a/sheep/components/s-search-block/s-search-block.vue b/sheep/components/s-search-block/s-search-block.vue index 438b13de..0e7bff78 100644 --- a/sheep/components/s-search-block/s-search-block.vue +++ b/sheep/components/s-search-block/s-search-block.vue @@ -12,23 +12,28 @@ ]" :class="[{ 'border-content': navbar }]" > - - + {{ placeholder }} - - - + + + {{ item }} + > + {{ item }} @@ -157,9 +163,8 @@ } } - // TODO 后续需完善扫一扫功能 /** - * 扫一扫 + * 扫一扫功能 */ function onScan() { uni.scanCode({ @@ -172,23 +177,99 @@ fail: (err) => { console.error(err); uni.showToast({ - title: '扫码失败', - icon: 'none', + title: err.errMsg === 'scanCode:fail cancel' ? '操作已取消' : '扫码失败', + icon: 'error', }); }, }); } /** - * 展示扫码结果 - * @param text 扫码内容 + * 检测是否为有效URL + * @param {string} str 待检测字符串 + * @returns {boolean} 是否为有效URL + */ + function isValidUrl(str) { + try { + // 微信环境专用验证方式 + const url = str.trim(); + return ( + (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('ftp://')) && + // 简单长度验证 + url.length >= 10 + ); + } catch { + return false; + } + } + + /** + * 展示扫码结果并处理用户操作 + * @param {string} text 扫码得到的内容 */ function showScanResult(text) { + const isUrl = isValidUrl(text); + // 显示结果弹窗 uni.showModal({ title: '扫描结果', content: text, - showCancel: false, - confirmText: '知道了', + confirmText: isUrl ? '访问' : '复制', + cancelText: '取消', + success: (res) => { + if (res.confirm) { + if (isUrl) { + handleUrl(text); + } else { + handleCopy(text); + } + } + }, + }); + } + + /** + * 处理URL跳转 + * @param {string} url 要访问的URL + */ + function handleUrl(url) { + // 方案1:跳转到webview页面(推荐) + uni.navigateTo({ + url: `/pages/public/webview?url=${encodeURIComponent(url)}`, + }); + + // 方案2:直接复制链接(备选方案) + /* + uni.setClipboardData({ + data: url, + success: () => { + uni.showToast({ + title: '链接已复制,请在浏览器打开', + icon: 'success', + }); + }, + }); + */ + } + + /** + * 处理文本复制 + * @param {string} text 要复制的文本 + */ + function handleCopy(text) { + uni.setClipboardData({ + data: text, + success: () => { + uni.showToast({ + title: '已复制到剪贴板', + icon: 'success', + }); + }, + fail: () => { + uni.showToast({ + title: '复制失败,请重试', + icon: 'error', + }); + }, }); }