From 8e2e817a4d4b58e9ae0d597504e19c40873c472f Mon Sep 17 00:00:00 2001
From: ZF sun <34314687@qq.com>
Date: Fri, 26 Dec 2025 15:23:28 +0800
Subject: [PATCH] =?UTF-8?q?chore(=E7=BB=84=E4=BB=B6):=20=E7=BB=84=E4=BB=B6?=
=?UTF-8?q?=E7=A7=BB=E5=8A=A8=E6=96=B9=E6=A1=88=E5=AE=9E=E6=96=BD=E5=8F=AF?=
=?UTF-8?q?=E8=A1=8C=E6=80=A7=E6=9C=80=E9=AB=98=E7=9A=84=E6=96=B9=E6=A1=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../components/goods-detail-view/detail.js | 465 ++++++++++++++++++
.../goods-detail-view/goods-detail-view.vue | 455 +++++++++++++++++
.../ns-goods-action-button.vue | 96 ++++
.../ns-goods-action-icon.vue | 146 ++++++
.../ns-goods-action/ns-goods-action.vue | 33 ++
.../ns-goods-promotion/ns-goods-promotion.vue | 125 +++++
pages_goods/detail.vue | 10 +-
pages_tool/article/list.vue | 2 +-
pages_tool/components/ns-adv/ns-adv.vue | 120 +++++
pages_tool/files/list.vue | 2 +-
pages_tool/goods/brand.vue | 2 +-
11 files changed, 1448 insertions(+), 8 deletions(-)
create mode 100644 pages_goods/components/goods-detail-view/detail.js
create mode 100644 pages_goods/components/goods-detail-view/goods-detail-view.vue
create mode 100644 pages_goods/components/ns-goods-action-button/ns-goods-action-button.vue
create mode 100644 pages_goods/components/ns-goods-action-icon/ns-goods-action-icon.vue
create mode 100644 pages_goods/components/ns-goods-action/ns-goods-action.vue
create mode 100644 pages_goods/components/ns-goods-promotion/ns-goods-promotion.vue
create mode 100644 pages_tool/components/ns-adv/ns-adv.vue
diff --git a/pages_goods/components/goods-detail-view/detail.js b/pages_goods/components/goods-detail-view/detail.js
new file mode 100644
index 0000000..45a3720
--- /dev/null
+++ b/pages_goods/components/goods-detail-view/detail.js
@@ -0,0 +1,465 @@
+// 商品详情业务
+import {
+ Weixin
+} from '@/common/js/wx-jssdk.js';
+
+export default {
+ data() {
+ return {
+ skuId: 0,
+ goodsId: 0,
+ isIphoneX: false, //判断手机是否是iphoneX以上
+ whetherCollection: 0,
+
+ //是否开启预览,0:不开启,1:开启
+ preview: 0,
+ videoContext: '',
+
+ // 媒体,图片,视频
+
+ // 解决每个商品SKU图片数量不同时,无法切换到第一个,导致轮播图显示不出来
+ swiperInterval: 1,
+ swiperAutoplay: false,
+ swiperCurrent: 1,
+ switchMedia: 'img',
+
+ //评价
+ goodsEvaluate: [{
+ member_headimg: '',
+ member_name: '',
+ content: '',
+ images: [],
+ create_time: 0,
+ sku_name: ''
+ }],
+ evaluateConfig: {
+ evaluate_audit: 1,
+ evaluate_show: 0,
+ evaluate_status: 1
+ },
+
+ // 是否可分享到好物圈
+ goodsCircle: false,
+ service: null,
+ shareUrl: '', // 分享链接
+ source_member: 0, //分享人的id
+ isCommunity: false, //社群弹窗
+
+ poster: "-1", //海报
+ posterMsg: "", //海报错误信息
+ posterHeight: 0,
+ posterParams: {}, //海报所需参数
+ goodsRoute: '',
+ posterApi: '',
+ goodsAttrShow: false, // 商品属性是否展开
+
+ //门店列表
+ storeList: {
+ data: [],
+ page: 1,
+ page_size: 10
+ },
+ isShowStore: false,
+ latitude: null, // 纬度
+ longitude: null, // 经度
+ evaluateCount: 0, // 商品评论数量
+ deliveryType: null, // 配送方式
+ isVirtual: 0 //是否为虚拟商品
+ }
+ },
+ created() {
+ this.isIphoneX = this.$util.uniappIsIPhoneX();
+
+ if (this.location) {
+ this.latitude = this.location.latitude;
+ this.longitude = this.location.longitude;
+ } else {
+ this.$util.getLocation();
+ }
+ this.getStoreData();
+ },
+ watch: {
+ location: function (nVal) {
+ if (nVal) {
+ this.latitude = nVal.latitude;
+ this.longitude = nVal.longitude;
+ this.getStoreData();
+ }
+ }
+ },
+ methods: {
+ init(params) {
+ this.skuId = params.sku_id;
+ this.goodsId = params.goods_id;
+ this.preview = params.preview;
+ this.source_member = params.source_member;
+ this.whetherCollection = params.whetherCollection;
+ this.posterParams = params.posterParams;
+
+ this.shareUrl = params.shareUrl;
+ this.goodsRoute = params.goodsRoute;
+ this.posterApi = params.posterApi;
+ this.isVirtual = params.isVirtual;
+ this.deliveryType = params.deliveryType;
+ this.evaluateConfig = params.evaluateConfig;
+
+ if (this.evaluateConfig.evaluate_show == 1) {
+ //商品评论
+ this.getGoodsEvaluate(params.evaluateList);
+ this.evaluateCount = params.evaluateCount;
+ }
+
+ for (let k in this.deliveryType) {
+ if (k == 'store') {
+ this.isShowStore = true;
+ }
+ }
+
+ this.getService();
+
+ this.videoContext = uni.createVideoContext('goodsVideo');
+
+ // #ifdef MP-WEIXIN
+ this.goodsSyncToGoodsCircle();
+ // #endif
+
+ },
+ swiperChange(e) {
+ this.swiperCurrent = e.detail.current + 1;
+ },
+
+ //-------------------------------------服务-------------------------------------
+
+ openMerchantsServicePopup() {
+ this.$refs.merchantsServicePopup.open();
+ },
+ closeMerchantsServicePopup() {
+ this.$refs.merchantsServicePopup.close();
+ },
+
+ //-------------------------------------门店列表-------------------------------------
+ openStoreListPopup() {
+ this.$refs.storeListPopup.open();
+ },
+ closeStoreListPopup() {
+ this.$refs.storeListPopup.close();
+ },
+ getStoreData() {
+ //门店列表
+ let data = {
+ page: this.storeList.page,
+ page_size: this.storeList.page_size
+ };
+ if (this.latitude && this.longitude) {
+ data.latitude = this.latitude;
+ data.longitude = this.longitude;
+ }
+ this.$api.sendRequest({
+ url: '/api/store/page',
+ data: data,
+ success: res => {
+ if (this.storeList.page == 1) this.storeList.data == [];
+ if (res.code >= 0 && res.data) {
+ this.storeList.data = this.storeList.data.concat(res.data.list);
+ } else {
+ this.$util.showToast({
+ title: res.message
+ });
+ }
+ }
+ });
+ },
+ selectStore(item) {
+ this.$util.redirectTo('/pages_tool/store/detail', {
+ store_id: item.store_id
+ });
+ this.closeStoreListPopup();
+ },
+ //-------------------------------------属性-------------------------------------
+
+ switchGoodsAttr() {
+ this.goodsAttrShow = !this.goodsAttrShow;
+ },
+ //-------------------------------------评价-------------------------------------
+ //商品评论列表
+ getGoodsEvaluate(list) {
+ if (list) {
+ this.goodsEvaluate = list;
+ this.goodsEvaluate.forEach((item, index) => {
+ if (this.goodsEvaluate[index].images) this.goodsEvaluate[index].images = this.goodsEvaluate[index].images.split(",");
+ if (this.goodsEvaluate[index].is_anonymous == 1) this.goodsEvaluate[index].member_name = this.goodsEvaluate[index].member_name.replace(this.goodsEvaluate[index].member_name.substring(1, this.goodsEvaluate[index].member_name.length - 1), '***')
+ })
+ // if (this.goodsEvaluate.images) this.goodsEvaluate.images = this.goodsEvaluate.images.split(",");
+ // if (this.goodsEvaluate.is_anonymous == 1) this.goodsEvaluate.member_name = this.goodsEvaluate.member_name.replace(
+ // this.goodsEvaluate.member_name.substring(1, this.goodsEvaluate.member_name.length - 1), '***')
+ }
+ },
+ // 预览评价图片
+ previewEvaluate(index, img_index, field) {
+ var paths = [];
+ for (let i = 0; i < this.goodsEvaluate[index][field].length; i++) {
+ paths.push(this.$util.img(this.goodsEvaluate[index][field][i]));
+ }
+ uni.previewImage({
+ current: img_index,
+ urls: paths
+ });
+ },
+ //-------------------------------------关注-------------------------------------
+ async collection() {
+ if (this.preview) return; // 开启预览,禁止任何操作和跳转
+
+ if (this.storeToken) {
+
+ //未关注添加关注
+ if (this.whetherCollection == 0) {
+ let res = await this.$api.sendRequest({
+ url: "/api/goodscollect/add",
+ data: {
+ sku_id: this.skuId,
+ goods_id: this.goodsSkuDetail.goods_id,
+ sku_name: this.goodsSkuDetail.sku_name,
+ sku_price: this.goodsSkuDetail.show_price,
+ sku_image: this.goodsSkuDetail.sku_image
+ },
+ async: false,
+ });
+ var data = res.data;
+ if (data > 0) {
+ this.whetherCollection = 1;
+ }
+ } else {
+ //已关注取消关注
+ let res = await this.$api.sendRequest({
+ url: "/api/goodscollect/delete",
+ data: {
+ goods_id: this.goodsSkuDetail.goods_id
+ },
+ async: false,
+ });
+ var data = res.data;
+ if (data > 0) {
+ this.whetherCollection = 0;
+ }
+ }
+ return this.whetherCollection;
+ } else {
+ if (this.source_member) {
+ this.$refs.login.open(this.shareUrl + '&source_member=' + this.source_member);
+ } else {
+ this.$refs.login.open(this.shareUrl);
+ }
+ }
+ },
+ //-------------------------------------分享-------------------------------------
+ // 打开分享弹出层
+ openSharePopup() {
+ this.$refs.sharePopup.open();
+ },
+ // 关闭分享弹出层
+ closeSharePopup() {
+ this.$refs.sharePopup.close();
+ },
+ copyUrl() {
+ let text = this.$config.h5Domain + this.shareUrl;
+ if (this.memberInfo && this.memberInfo.member_id) text += '&source_member=' + this.memberInfo.member_id;
+ this.$util.copy(text, () => {
+ this.closeSharePopup();
+ });
+ },
+
+ //-------------------------------------海报-------------------------------------
+ // 打开海报弹出层
+ openPosterPopup() {
+ this.getGoodsPoster();
+ this.$refs.sharePopup.close();
+ },
+ // 关闭海报弹出层
+ closePosterPopup() {
+ this.$refs.posterPopup.close();
+ this.poster = ''
+ },
+ //生成海报
+ getGoodsPoster() {
+ uni.showLoading({
+ 'title': '海报生成中...'
+ })
+ //活动海报信息
+ if (this.memberInfo && this.memberInfo.member_id) this.posterParams.source_member = this.memberInfo.member_id;
+
+ this.$api.sendRequest({
+ url: this.posterApi,
+ data: {
+ page: this.goodsRoute,
+ qrcode_param: JSON.stringify(this.posterParams)
+ },
+ success: res => {
+ if (res.code == 0) {
+ this.$refs.posterPopup.open();
+ this.poster = res.data.path + "?time=" + new Date().getTime();
+ } else {
+ this.posterMsg = res.message;
+ this.$util.showToast({
+ title: res.message
+ })
+ }
+ uni.hideLoading();
+ },
+ fail: err => {
+ uni.hideLoading();
+ }
+ });
+ },
+ // 预览图片
+ previewMedia(index) {
+ var paths = [];
+ for (let i = 0; i < this.goodsSkuDetail.sku_images.length; i++) {
+ paths.push(this.$util.img(this.goodsSkuDetail.sku_images[i], {
+ size: 'big'
+ }));
+ }
+ uni.previewImage({
+ current: index,
+ urls: paths,
+ // longPressActions: {
+ // itemList: ['发送给朋友', '保存图片', '关注'],
+ // success: function(data) {
+ // console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
+ // },
+ // fail: function(err) {
+ // console.log(err.errMsg);
+ // }
+ // }
+ });
+ },
+ swiperImageError(index) {
+ this.goodsSkuDetail.sku_images[index] = this.$util.getDefaultImage().goods;
+ this.$forceUpdate();
+ },
+ // #ifdef MP || APP-PLUS
+ //小程序中保存海报
+ saveGoodsPoster() {
+ let url = this.$util.img(this.poster);
+ uni.downloadFile({
+ url: url,
+ success: (res) => {
+ if (res.errMsg == "downloadFile:ok") {
+ uni.saveImageToPhotosAlbum({
+ filePath: res.tempFilePath,
+ success: () => {
+ this.$util.showToast({
+ title: "保存成功"
+ });
+ },
+ fail: (err) => {
+ this.$util.showToast({
+ title: "保存失败,请稍后重试"
+ });
+ }
+ });
+ }
+ },
+ fail: (err) => {
+ this.$util.showToast({
+ title: "保存失败,请稍后重试"
+ });
+ }
+ });
+ },
+ // #endif
+ //售后保障查询
+ getService() {
+ this.$api.sendRequest({
+ url: '/api/goods/aftersale',
+ success: res => {
+ if (res.code == 0 && res.data) {
+ this.service = res.data;
+ }
+ }
+ });
+ },
+
+ // #ifdef MP-WEIXIN
+ /**
+ * 将商品同步到微信圈子
+ */
+ goodsSyncToGoodsCircle() {
+ this.$api.sendRequest({
+ url: '/goodscircle/api/goods/sync',
+ data: {
+ goods_id: this.goodsSkuDetail.goods_id
+ },
+ success: res => {
+ if (res.code == 0) {
+ this.goodsCircle = true;
+ }
+ }
+ })
+ },
+ /**
+ * 将商品推荐到微信圈子
+ */
+ openBusinessView() {
+ if (wx.openBusinessView) {
+ wx.openBusinessView({
+ businessType: 'friendGoodsRecommend',
+ extraData: {
+ product: {
+ item_code: this.goodsSkuDetail.goods_id,
+ title: this.goodsSkuDetail.sku_name,
+ image_list: this.goodsSkuDetail.sku_images.map((ele) => {
+ return this.$util.img(ele);
+ })
+ }
+ },
+ success: function (res) {
+ console.log('success', res);
+ },
+ fail: function (res) {
+ console.log('fail', res);
+ }
+ })
+ }
+ },
+ // #endif
+ toEvaluateDetail(id) {
+ this.$util.redirectTo('/pages_tool/goods/evaluate', {
+ goods_id: id
+ });
+ },
+ showImg(e) {
+ //拿到图片的路径里面的内容放在我们数组中
+ let contentimg = e.target.dataset.nodes;
+ let arrImg = [];
+ for (var i = 0; i < contentimg.length; i++) {
+ var img = contentimg[i].children;
+ if (Array.isArray(img)) {
+ for (var j = 0; j < img.length; j++) {
+ if (img[j].attrs && img[j].name == "img") {
+ if (img[j].attrs.src) {
+ arrImg.push(img[j].attrs.src)
+ }
+ }
+ }
+ }
+ }
+ //最后一步就是把我们的所有图片放在预览的api中就可以了
+ uni.previewImage({
+ current: arrImg,
+ urls: arrImg,
+ })
+ },
+
+ //-------------------------------------社群-------------------------------------
+
+ //添加福利群
+ onCommunity() {
+ this.isCommunity = true
+ },
+ onCloseCommunity() {
+ this.isCommunity = false
+ },
+
+ }
+
+}
\ No newline at end of file
diff --git a/pages_goods/components/goods-detail-view/goods-detail-view.vue b/pages_goods/components/goods-detail-view/goods-detail-view.vue
new file mode 100644
index 0000000..7590573
--- /dev/null
+++ b/pages_goods/components/goods-detail-view/goods-detail-view.vue
@@ -0,0 +1,455 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ swiperCurrent }}
+ /{{ goodsSkuDetail.sku_images.length }}
+
+
+
+
+
+
+
+
+
+
+ {{ $lang('video') }}
+ {{ $lang('image') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$lang('send')}}
+
+
+
+ {{$lang('express')}}
+
+
+
+
+
+
+ 未配置
+
+
+
+
+
+
+
+ 服务
+
+
+
+
+
+
+
+
+ {{ item.service_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{goodsSkuDetail.merchinfo.merch_name}}
+ 官方认证商家,值得信赖!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 评价
+ ({{ evaluateCount }})
+
+ 暂无评价
+
+ 查看全部
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.member_name[0] }}***{{ item.member_name[item.member_name.length - 1] }}
+
+ {{ item.member_name }}
+
+
+
+
+
+ {{ $util.timeStampTurnTime(item.create_time) }}
+
+ {{ item.content }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 规格属性
+
+
+
+ {{ item.attr_name }}
+ {{ item.attr_value_name }}
+
+
+
+
+ 展开
+
+
+ 收起
+
+
+
+
+
+
+
+
+
+
+ {{$lang('details')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存图片
+
+
+ 长按图片进行保存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_goods/components/ns-goods-action-button/ns-goods-action-button.vue b/pages_goods/components/ns-goods-action-button/ns-goods-action-button.vue
new file mode 100644
index 0000000..7798141
--- /dev/null
+++ b/pages_goods/components/ns-goods-action-button/ns-goods-action-button.vue
@@ -0,0 +1,96 @@
+
+ {{ disabledText }}
+
+ {{ textPrice }}
+ {{ text }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages_goods/components/ns-goods-action-icon/ns-goods-action-icon.vue b/pages_goods/components/ns-goods-action-icon/ns-goods-action-icon.vue
new file mode 100644
index 0000000..f958edd
--- /dev/null
+++ b/pages_goods/components/ns-goods-action-icon/ns-goods-action-icon.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+ {{ text }}
+ {{ cornerMark > 99 ? '99+' : cornerMark }}
+
+
+
+
+
+
+
+
diff --git a/pages_goods/components/ns-goods-action/ns-goods-action.vue b/pages_goods/components/ns-goods-action/ns-goods-action.vue
new file mode 100644
index 0000000..4e9e0f5
--- /dev/null
+++ b/pages_goods/components/ns-goods-action/ns-goods-action.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/pages_goods/components/ns-goods-promotion/ns-goods-promotion.vue b/pages_goods/components/ns-goods-promotion/ns-goods-promotion.vue
new file mode 100644
index 0000000..d102e84
--- /dev/null
+++ b/pages_goods/components/ns-goods-promotion/ns-goods-promotion.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+ 限时折扣
+ 当前商品正在参加{{ item.promotion_name }}
+
+
+
+
+
+ 团购
+ 当前商品正在参加{{ item.promotion_name }}
+
+
+
+
+ 拼团
+ 当前商品正在参加{{ item.promotion_name }}
+
+
+
+
+ 秒杀
+ 当前商品正在参加{{ item.promotion_name }}
+
+
+
+
+ 专题活动
+ 当前商品正在参加{{ item.promotion_name }}
+
+
+
+
+ 砍价
+ 当前商品正在参加{{ item.promotion_name }}
+
+
+
+
+ 拼团返利
+ 当前商品正在参加{{ item.promotion_name }}
+
+
+
+
+
+
+
+
+
diff --git a/pages_goods/detail.vue b/pages_goods/detail.vue
index 101ce3f..6e7048c 100644
--- a/pages_goods/detail.vue
+++ b/pages_goods/detail.vue
@@ -522,18 +522,18 @@
+
+
\ No newline at end of file
diff --git a/pages_tool/files/list.vue b/pages_tool/files/list.vue
index d850b08..9c40ad4 100644
--- a/pages_tool/files/list.vue
+++ b/pages_tool/files/list.vue
@@ -68,7 +68,7 @@
}
},
components: {
- nsAdv: () => import('@/components/ns-adv/ns-adv.vue'),
+ nsAdv: () => import('@/pages_tool/components/ns-adv/ns-adv.vue'),
nsEmpty: () => import('@/components/ns-empty/ns-empty.vue'),
loadingCover: () => import('@/components/loading-cover/loading-cover.vue')
},
diff --git a/pages_tool/goods/brand.vue b/pages_tool/goods/brand.vue
index 4ba5448..33e5334 100644
--- a/pages_tool/goods/brand.vue
+++ b/pages_tool/goods/brand.vue
@@ -26,7 +26,7 @@