From d113d6125b98537aaeca6c5a2b5d988f99fcb5dc Mon Sep 17 00:00:00 2001 From: ZF sun <34314687@qq.com> Date: Thu, 7 May 2026 15:12:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(components):=20=E5=9C=A8=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E4=B8=AD=E6=B7=BB=E5=8A=A0=E9=95=BF=E6=8C=89?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E8=8F=9C=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/mixin/image-longpress.js | 38 +++++ components-diy/diy-article.vue | 2 +- components-diy/diy-audio.vue | 2 +- components-diy/diy-bargain.vue | 10 +- components-diy/diy-category-item.vue | 16 +-- components-diy/diy-category.vue | 10 +- components-diy/diy-channel-video.vue | 2 +- components-diy/diy-fenxiao-goods-list.vue | 2 +- components-diy/diy-goods-brand.vue | 2 +- components-diy/diy-goods-list.vue | 12 +- components-diy/diy-goods-recommend.vue | 2 +- components-diy/diy-groupbuy.vue | 6 +- components-diy/diy-index-page.vue | 20 +-- components-diy/diy-kefu.vue | 2 +- components-diy/diy-listmenu.vue | 2 +- components-diy/diy-live.vue | 2 +- components-diy/diy-member-info.vue | 12 +- components-diy/diy-member-my-order.vue | 10 +- components-diy/diy-merch-list.vue | 2 +- components-diy/diy-notes.vue | 4 +- components-diy/diy-picture.vue | 4 +- components-diy/diy-pinfan.vue | 6 +- components-diy/diy-pintuan.vue | 16 +-- components-diy/diy-presale.vue | 6 +- components-diy/diy-search.vue | 4 +- components-diy/diy-seckill.vue | 16 +-- components-diy/diy-store.vue | 8 +- components-diy/diy-text.vue | 16 +-- components-diy/diy-video-list.vue | 6 +- components/chat-message/chat-message.vue | 20 +-- components/hover-nav/hover-nav.vue | 4 +- .../mescroll/components/mescroll-top.vue | 2 +- components/ns-adv/ns-adv.vue | 4 +- components/ns-chat/ns-chat-goods.vue | 4 +- components/ns-chat/ns-chat-order.vue | 4 +- components/ns-chat/ns-chat-receiveGoods.vue | 2 +- components/ns-copyright/ns-copyright.vue | 2 +- components/ns-empty/ns-empty.vue | 2 +- components/ns-form/ns-form.vue | 2 +- .../ns-goods-sku/ns-goods-sku-category.vue | 4 +- components/ns-goods-sku/ns-goods-sku.vue | 8 +- components/ns-image/ns-image.vue | 80 +++++++++++ components/ns-login/ns-login.vue | 6 +- components/ns-navbar/ns-navbar.vue | 4 +- components/to-top/to-top.vue | 2 +- pages/index/index.vue | 8 +- .../goods-detail-view/goods-detail-view.vue | 14 +- .../ns-goods-promotion/ns-goods-promotion.vue | 12 +- .../pengpai-fadein-out/pengpai-fadein-out.vue | 2 +- pages_goods/cart.vue | 14 +- pages_goods/detail.vue | 16 +-- .../common-payment/common-payment.vue | 10 +- pages_order/detail.vue | 18 +-- pages_order/detail_point.vue | 2 +- pages_order/list.vue | 8 +- pages_promotion/fenxiao/apply.vue | 14 +- pages_promotion/fenxiao/bill.vue | 4 +- pages_promotion/fenxiao/child_fenxiao.vue | 4 +- pages_promotion/fenxiao/goods_list.vue | 2 +- pages_promotion/fenxiao/index.vue | 30 ++-- pages_promotion/fenxiao/level.vue | 2 +- pages_promotion/fenxiao/order.vue | 2 +- pages_promotion/fenxiao/order_detail.vue | 2 +- pages_promotion/fenxiao/promote.vue | 6 +- pages_promotion/fenxiao/ranking_list.vue | 4 +- pages_promotion/fenxiao/relation.vue | 2 +- pages_promotion/fenxiao/team.vue | 4 +- pages_promotion/fenxiao/withdraw_apply.vue | 10 +- pages_promotion/merch/detail.vue | 14 +- pages_promotion/merch/merchcategory.vue | 6 +- pages_promotion/point/detail.vue | 8 +- pages_promotion/point/goods_list.vue | 2 +- pages_promotion/point/list.vue | 20 +-- pages_promotion/point/order_list.vue | 6 +- pages_promotion/point/payment.vue | 10 +- pages_promotion/point/result.vue | 2 +- .../_components/img-cropping/img-cropping.vue | 2 +- .../ns-birthday-gift/ns-birthday-gift.vue | 4 +- .../_components/ns-new-gift/ns-new-gift.vue | 4 +- .../_components/ns-newform/ns-newform.vue | 2 +- pages_tool/ai-chat/ai-chat-message.vue | 18 ++- pages_tool/article/list.vue | 2 +- pages_tool/cases/index.vue | 4 +- pages_tool/contact/contact.vue | 12 +- pages_tool/files/list.vue | 2 +- pages_tool/goods/brand.vue | 2 +- pages_tool/goods/coupon.vue | 2 +- pages_tool/goods/coupon_receive.vue | 2 +- pages_tool/goods/evaluate.vue | 8 +- pages_tool/goods/not_exist.vue | 2 +- pages_tool/index/diy.vue | 4 +- pages_tool/login/find.vue | 2 +- pages_tool/member/account.vue | 2 +- pages_tool/member/address.vue | 2 +- pages_tool/member/apply_withdrawal.vue | 8 +- pages_tool/member/balance_detail.vue | 4 +- pages_tool/member/cancelrefuse.vue | 2 +- pages_tool/member/cancelsuccess.vue | 2 +- pages_tool/member/card.vue | 4 +- pages_tool/member/card_buy.vue | 6 +- pages_tool/member/contact.vue | 2 +- pages_tool/member/coupon.vue | 2 +- pages_tool/member/footprint.vue | 4 +- pages_tool/member/index.vue | 4 +- pages_tool/member/info.vue | 2 +- pages_tool/member/info_edit.vue | 6 +- pages_tool/member/invite_friends.vue | 14 +- pages_tool/member/level.vue | 18 +-- pages_tool/member/level_growth_rules.vue | 8 +- pages_tool/member/modify_face.vue | 4 +- pages_tool/member/point.vue | 2 +- pages_tool/order/activist.vue | 2 +- pages_tool/order/evaluate.vue | 4 +- pages_tool/order/logistics.vue | 4 +- pages_tool/order/refund.vue | 2 +- pages_tool/order/refund_batch.vue | 2 +- pages_tool/order/refund_detail.vue | 2 +- pages_tool/order/refund_goods_select.vue | 2 +- pages_tool/pay/result.vue | 10 +- pages_tool/pay/wx_pay.vue | 2 +- pages_tool/seal/structure.vue | 2 +- pages_tool/storeclose/storeclose.vue | 2 +- scripts/add-longpress-to-images.js | 130 ++++++++++++++++++ .../mp-html/components/mp-html/node/node.vue | 8 +- .../uni-grid-item/uni-grid-item.vue | 2 +- 125 files changed, 622 insertions(+), 368 deletions(-) create mode 100644 common/mixin/image-longpress.js create mode 100644 components/ns-image/ns-image.vue create mode 100644 scripts/add-longpress-to-images.js diff --git a/common/mixin/image-longpress.js b/common/mixin/image-longpress.js new file mode 100644 index 0000000..148f474 --- /dev/null +++ b/common/mixin/image-longpress.js @@ -0,0 +1,38 @@ +/** + * 微信小程序图片长按识别二维码 mixin + * 自动为页面中的所有 image 组件添加 show-menu-by-longpress 属性 + */ +export default { + data() { + return { + // 需要排除的图片类名(不需要长按识别的) + excludeImageClass: ['no-longpress', 'swiper-image', 'banner-image'] + } + }, + mounted() { + // #ifdef MP-WEIXIN + this.$nextTick(() => { + this.addLongpressToImages() + }) + // #endif + }, + methods: { + /** + * 为页面中的所有 image 添加长按识别支持 + */ + addLongpressToImages() { + // 获取当前页面所有 image 组件 + const images = document.querySelectorAll && document.querySelectorAll('image') + if (images) { + images.forEach(img => { + // 检查是否需要排除 + const className = img.className || '' + const shouldExclude = this.excludeImageClass.some(cls => className.includes(cls)) + if (!shouldExclude) { + img.setAttribute('show-menu-by-longpress', 'true') + } + }) + } + } + } +} diff --git a/components-diy/diy-article.vue b/components-diy/diy-article.vue index 71b3888..f3d1f4d 100644 --- a/components-diy/diy-article.vue +++ b/components-diy/diy-article.vue @@ -12,7 +12,7 @@ + @error="imgError(index)" show-menu-by-longpress/> {{ item.article_title }} diff --git a/components-diy/diy-audio.vue b/components-diy/diy-audio.vue index 316c3e7..8629a2b 100644 --- a/components-diy/diy-audio.vue +++ b/components-diy/diy-audio.vue @@ -17,7 +17,7 @@ - + {{ value.text }} diff --git a/components-diy/diy-bargain.vue b/components-diy/diy-bargain.vue index ef68915..5c39456 100644 --- a/components-diy/diy-bargain.vue +++ b/components-diy/diy-bargain.vue @@ -10,7 +10,7 @@ :style="{ fontSize: value.titleStyle.fontSize * 2 + 'rpx', color: value.titleStyle.textColor, fontWeight: value.titleStyle.fontWeight ? 'bold' : '' }"> {{ value.titleStyle.leftText }} - + 低至0元免费拿 + @error="imageError(index)" show-menu-by-longpress/> @@ -41,7 +41,7 @@ + :src="$util.img('public/uniapp/bargain/progress_bar_01.png')" show-menu-by-longpress/> @@ -89,7 +89,7 @@ + @error="imageError(index)" :lazy-load="true" show-menu-by-longpress/> @@ -134,7 +134,7 @@ + @error="imageError(dataIndex)" :lazy-load="true" show-menu-by-longpress/> diff --git a/components-diy/diy-category-item.vue b/components-diy/diy-category-item.vue index 2f78391..14509db 100644 --- a/components-diy/diy-category-item.vue +++ b/components-diy/diy-category-item.vue @@ -2,7 +2,7 @@ - + @@ -11,7 +11,7 @@ - + {{ one.category_name }} @@ -25,7 +25,7 @@ - + {{ two.category_name }} @@ -102,11 +102,11 @@ - + + mode="widthFix" show-menu-by-longpress/> @@ -158,7 +158,7 @@ - + - + diff --git a/components-diy/diy-fenxiao-goods-list.vue b/components-diy/diy-fenxiao-goods-list.vue index 812d82c..aab5fd8 100644 --- a/components-diy/diy-fenxiao-goods-list.vue +++ b/components-diy/diy-fenxiao-goods-list.vue @@ -5,7 +5,7 @@ :class="[value.ornament.type]" :style="goodsItemCss"> + :src="$util.img(item.goods_image, { size: 'mid' })" mode="widthFix" @error="imgError(index)" show-menu-by-longpress/> diff --git a/components-diy/diy-goods-brand.vue b/components-diy/diy-goods-brand.vue index 54845df..c4f5209 100644 --- a/components-diy/diy-goods-brand.vue +++ b/components-diy/diy-goods-brand.vue @@ -9,7 +9,7 @@ + :style="itemCss" show-menu-by-longpress/> diff --git a/components-diy/diy-goods-list.vue b/components-diy/diy-goods-list.vue index 3c3f931..452354b 100644 --- a/components-diy/diy-goods-list.vue +++ b/components-diy/diy-goods-list.vue @@ -49,9 +49,9 @@ + :src="$util.img('public/uniapp/index/VIP.png')" show-menu-by-longpress/> + :src="$util.img('public/uniapp/index/discount.png')" show-menu-by-longpress/> + :src="$util.img('public/uniapp/index/VIP.png')" show-menu-by-longpress/> + :src="$util.img('public/uniapp/index/discount.png')" show-menu-by-longpress/> + :src="$util.img('public/uniapp/index/VIP.png')" show-menu-by-longpress/> + :src="$util.img('public/uniapp/index/discount.png')" show-menu-by-longpress/> + mode="widthFix" show-menu-by-longpress/> {{ goodsValue.labelStyle.title }} diff --git a/components-diy/diy-groupbuy.vue b/components-diy/diy-groupbuy.vue index 0550dc1..813bc87 100644 --- a/components-diy/diy-groupbuy.vue +++ b/components-diy/diy-groupbuy.vue @@ -7,7 +7,7 @@ + @error="imageError(index)" show-menu-by-longpress> + @error="imageError(index)" show-menu-by-longpress/> + @error="imageError(dataIndex)" show-menu-by-longpress/> + mode="aspectFill" show-menu-by-longpress/> + mode="aspectFill" show-menu-by-longpress/> {{ item.category_name }} @@ -73,9 +73,9 @@ :key="index" @tap.stop="toCateGoodsList(item.category_id_2, 2)"> + mode="aspectFill" show-menu-by-longpress/> + mode="aspectFill" show-menu-by-longpress/> {{ item.category_name }} @@ -88,7 +88,7 @@ :key="index" v-if="index >= (page - 1) * 10 && index < page * 10" @tap.stop="toCateGoodsList(item.category_id_2, 2)"> - + {{ item.category_name }} @@ -104,19 +104,19 @@ + :src="$util.img(cateList[pageIndex].image_adv)" mode="widthFix" show-menu-by-longpress/> + @error="imgError(index)" show-menu-by-longpress/> {{ goodsTag(item) }} - + @@ -133,11 +133,11 @@ + mode="widthFix" show-menu-by-longpress/> + mode="widthFix" show-menu-by-longpress/> diff --git a/components-diy/diy-kefu.vue b/components-diy/diy-kefu.vue index 6f1b0d8..b3498fb 100644 --- a/components-diy/diy-kefu.vue +++ b/components-diy/diy-kefu.vue @@ -3,7 +3,7 @@ - + diff --git a/components-diy/diy-listmenu.vue b/components-diy/diy-listmenu.vue index 302bcf4..a6e6b78 100644 --- a/components-diy/diy-listmenu.vue +++ b/components-diy/diy-listmenu.vue @@ -1,7 +1,7 @@