master
2022-12-27 14:49:23 +08:00
parent 5e38247ce8
commit 18251dde89
3 changed files with 590 additions and 687 deletions

View File

@ -64,4 +64,11 @@ export function getTalk(talkId) {
params
});
}
// 从商品页点击 客服 跳转 获取聊天记录
export function jumpObtain(skuId, goodsId) {
return http.request({
url: `${api.im}/goods/goods/sku/${goodsId}/${skuId}`,
method: Method.GET,
});
}

View File

@ -37,8 +37,7 @@
<!-- 接收人消息 -->
<view v-else class="flex-row-start margin-left margin-top one-show">
<view class="chat-img flex-row-center">
<u-avatar :src="toUser.face" :text="toUser.face ? '' : toUser.name"
bg-color="#DDDDDD"></u-avatar>
<u-avatar :src="toUser.face" :text="toUser.face ? '' : toUser.name" bg-color="#DDDDDD"></u-avatar>
<!-- <u-image style="height: 100rpx;width: 100rpx;" shape="circle"
:src="toUser.face || 'https://avatars.dicebear.com/api/initials/' + toUser.name + '.svg?fontSize=38'"
mode="aspectFit"></u-image> -->
@ -46,8 +45,7 @@
<view class="flex" style="width: 500rpx;">
<view>
<view class="other-name">{{ toUser.name }}</view>
<view class="margin-left padding-chat flex-column-start bg-to-color"
style="border-radius: 35rpx;">
<view class="margin-left padding-chat flex-column-start bg-to-color" style="border-radius: 35rpx;">
<text style="word-break: break-all;">{{ item.text }}</text>
</view>
</view>
@ -106,12 +104,12 @@ var l
var wh
//
var mgUpHeight
import { getTalkMessage, getTalkByUser } from "@/api/im.js";
import { getTalkMessage, getTalkByUser, jumpObtain } from "@/api/im.js";
import SocketService from "@/utils/socket_service.js";
import storage from "@/utils/storage.js";
import { beautifyTime } from "@/utils/filters.js"
export default {
onLoad(options) {
onLoad (options) {
// msgList
//
// ,
@ -150,7 +148,7 @@ export default {
this.ws.connect();
},
onPullDownRefresh() {
onPullDownRefresh () {
this.params.pageNumber = this.params.pageNumber + 1
this.getTalkMessage()
console.log('下拉事件');
@ -161,7 +159,7 @@ export default {
components: {
beautifyTime
},
data() {
data () {
return {
msgLoad: false,
anData: {},
@ -202,7 +200,7 @@ export default {
methods: {
beautifyTime,
// (-->bug)
goPag(kh) {
goPag (kh) {
this.upTowmn(0, 250)
if (this.keyHeight != 0) {
if (kh - this.keyHeight > 0) {
@ -212,7 +210,7 @@ export default {
}
},
//
msgMove(x, t) {
msgMove (x, t) {
var animation = uni.createAnimation({
duration: t,
timingFunction: 'linear',
@ -225,7 +223,7 @@ export default {
this.anData = animation.export()
},
//
msgGo(type) {
msgGo (type) {
const query = uni.createSelectorQuery()
// 100ms
setTimeout(() => {
@ -265,12 +263,12 @@ export default {
}, 100)
},
//
answer(id) {
answer (id) {
// id,index
console.log(id)
},
sendMsg() {
sendMsg () {
console.log("发送")
//
if (this.msg == "") {
@ -308,7 +306,7 @@ export default {
// // }, 2000)
// },
//
ckAdd() {
ckAdd () {
if (!this.showTow) {
this.upTowmn(-180, 350)
} else {
@ -316,11 +314,11 @@ export default {
}
this.showTow = !this.showTow
},
hideKey() {
hideKey () {
uni.hideKeyboard()
},
// /
upTowmn(x, t) {
upTowmn (x, t) {
var animation = uni.createAnimation({
duration: t,
@ -333,7 +331,7 @@ export default {
this.animationData = animation.export()
},
async getTalkMessage() {
async getTalkMessage () {
let type = '';
await getTalkMessage(this.params).then(res => {
if (res.data.success) {
@ -353,14 +351,14 @@ export default {
})
this.msgGo(type)
},
touchmovemsg(e) {
touchmovemsg (e) {
if (e.target.scrollTop == 0) {
this.params.pageNumber = this.params.pageNumber + 1
this.getTalkMessage()
}
},
async getTalk(userId) {
async getTalk (userId) {
getTalkByUser(userId).then(res => {
if (res.data.success) {
this.toUser = res.data.result
@ -369,7 +367,7 @@ export default {
})
},
//
compareTime(index, datetime) {
compareTime (index, datetime) {
if (datetime == undefined) {
return false;
}
@ -409,7 +407,7 @@ export default {
* @param format 转换格式
* @returns {*|string}
*/
unixToDate(unix, format) {
unixToDate (unix, format) {
if (!unix) return unix;
let _format = format || "yyyy-MM-dd hh:mm:ss";
const d = new Date(unix);

View File

@ -6,55 +6,27 @@
<!-- 仅h5有效 打开App -->
<!-- 分享 -->
<shares
v-if="enableShare && goodsDetail.id"
:skuId="this.routerVal.id"
:goodsId="this.routerVal.goodsId"
:link="
<shares v-if="enableShare && goodsDetail.id" :skuId="this.routerVal.id" :goodsId="this.routerVal.goodsId" :link="
'/pages/product/goods?id=' +
this.routerVal.id +
'&goodsId=' +
this.routerVal.goodsId
"
:thumbnail="goodsDetail.thumbnail"
:goodsName="goodsDetail.goodsName"
type="goods"
@close="enableShare = false"
/>
<popups
v-model="popupsSwitch"
@tapPopup="handleNavbarList"
:popData="navbarListData"
:x="navbarListX"
:y="navbarListY"
placement="top-start"
/>
" :thumbnail="goodsDetail.thumbnail" :goodsName="goodsDetail.goodsName" type="goods" @close="enableShare = false" />
<popups v-model="popupsSwitch" @tapPopup="handleNavbarList" :popData="navbarListData" :x="navbarListX"
:y="navbarListY" placement="top-start" />
<view class="index">
<!-- topBar -->
<u-navbar
:background="navbar"
:is-back="false"
:class="headerFlag ? 'header' : 'header bg-none scroll-hide'"
>
<u-navbar :background="navbar" :is-back="false" :class="headerFlag ? 'header' : 'header bg-none scroll-hide'">
<div class="headerRow">
<div class="backs">
<u-icon @click="back()" name="arrow-left" class="icon-back"></u-icon>
<u-icon
name="list"
@click="popupsSwitch = !popupsSwitch"
class="icon-list"
></u-icon>
<u-icon name="list" @click="popupsSwitch = !popupsSwitch" class="icon-list"></u-icon>
</div>
<div class="headerList" :class="headerFlag ? 'tab-bar' : 'tab-bar scroll-hide'">
<div class="headerRow">
<div
class="nav-item"
v-for="header in headerList"
:key="header.id"
:class="{ cur: scrollId === header.id }"
@click="headerTab(header.id)"
>
<div class="nav-item" v-for="header in headerList" :key="header.id"
:class="{ cur: scrollId === header.id }" @click="headerTab(header.id)">
{{ header.text }}
</div>
</div>
@ -62,57 +34,26 @@
</div>
</u-navbar>
<u-navbar
:border-bottom="false"
v-show="!headerFlag"
class="header-only-back"
:background="navbarOnlyBack"
:is-back="false"
>
<u-navbar :border-bottom="false" v-show="!headerFlag" class="header-only-back" :background="navbarOnlyBack"
:is-back="false">
<div>
<div class="bg-back">
<u-icon
size="40"
@click="back()"
name="arrow-left"
class="icon-back"
></u-icon>
<u-icon
size="40"
@click="popupsSwitch = !popupsSwitch"
name="list"
class="icon-list"
></u-icon>
<u-icon size="40" @click="back()" name="arrow-left" class="icon-back"></u-icon>
<u-icon size="40" @click="popupsSwitch = !popupsSwitch" name="list" class="icon-list"></u-icon>
</div>
</div>
</u-navbar>
</view>
<view
class="product-container"
:style="{ height: productRefHeight }"
ref="productRef"
id="productRef"
>
<scroll-view
scroll-anchoring
enableBackToTop="true"
scroll-with-animation
scroll-y
class="scroll-page"
:scroll-top="tabScrollTop"
@scroll="pageScroll"
>
<view class="product-container" :style="{ height: productRefHeight }" ref="productRef" id="productRef">
<scroll-view scroll-anchoring enableBackToTop="true" scroll-with-animation scroll-y class="scroll-page"
:scroll-top="tabScrollTop" @scroll="pageScroll">
<view>
<!-- 轮播图 -->
<GoodsSwiper id="main1" :res="imgList" />
<!-- 促销活动条 -->
<PromotionAssembleLayout
v-if="PromotionList"
:detail="goodsDetail"
:res="PromotionList"
/>
<PromotionAssembleLayout v-if="PromotionList" :detail="goodsDetail" :res="PromotionList" />
<view class="card-box top-radius-0" id="main2">
<!-- 活动不显示价钱 -->
@ -122,15 +63,11 @@
{{ goodsDetail.goodsName || "" }}
</view>
<view class="favorite" @click="clickFavorite(goodsDetail.id)">
<u-icon
size="30"
:color="favorite ? '#f2270c' : '#262626'"
:name="favorite ? 'heart-fill' : 'heart'"
>
<u-icon size="30" :color="favorite ? '#f2270c' : '#262626'" :name="favorite ? 'heart-fill' : 'heart'">
</u-icon>
<view :style="{ color: favorite ? '#f2270c' : '#262626' }">{{
favorite ? "已收藏" : "收藏"
}}</view>
}}</view>
</view>
</view>
<!-- 商品描述 -->
@ -145,14 +82,23 @@
<!-- 如果有积分显示积分 -->
<view class="-goods-price" v-if="goodsDetail.price != undefined">
<span >
<span>
<span v-if="wholesaleList.length">
<span>¥</span><span class="price">{{ $options.filters.goodsFormatPrice(wholesaleList[wholesaleList.length-1].price)[0] }}</span>.{{ $options.filters.goodsFormatPrice(wholesaleList[wholesaleList.length-1].price)[1] }}
<span>¥</span><span class="price">{{
$options.filters.goodsFormatPrice(wholesaleList[wholesaleList.length - 1].price)[0]
}}</span>.{{
$options.filters.goodsFormatPrice(wholesaleList[wholesaleList.length - 1].price)[1]
}}
~
<span>¥</span><span class="price">{{ $options.filters.goodsFormatPrice(wholesaleList[0].price)[0] }}</span>.{{ $options.filters.goodsFormatPrice(wholesaleList[0].price)[1] }}
<span>¥</span><span class="price">{{
$options.filters.goodsFormatPrice(wholesaleList[0].price)[0]
}}</span>.{{
$options.filters.goodsFormatPrice(wholesaleList[0].price)[1]
}}
</span>
<span v-else>
<span>¥</span><span class="price">{{ $options.filters.goodsFormatPrice(goodsDetail.price)[0] }}</span>.{{ $options.filters.goodsFormatPrice(goodsDetail.price)[1] }}
<span>¥</span><span class="price">{{ $options.filters.goodsFormatPrice(goodsDetail.price)[0]
}}</span>.{{ $options.filters.goodsFormatPrice(goodsDetail.price)[1] }}
</span>
</span>
</view>
@ -165,14 +111,11 @@
<view>分享</view>
</view>
<view class="icons" @click="clickFavorite(goodsDetail.id)">
<u-icon
size="30"
:color="favorite ? '#f2270c' : '#262626'"
:name="favorite ? 'heart-fill' : 'heart'"
></u-icon>
<u-icon size="30" :color="favorite ? '#f2270c' : '#262626'"
:name="favorite ? 'heart-fill' : 'heart'"></u-icon>
<view :style="{ color: favorite ? '#f2270c' : '#262626' }">{{
favorite ? "已收藏" : "收藏"
}}</view>
}}</view>
</view>
</view>
<view class="-goods-name desc-bold">
@ -199,22 +142,16 @@
</view>
<!-- 拼团用户列表 -->
<PromotionAssembleListLayout
v-if="isGroup"
@to-assemble-buy-now="toAssembleBuyNow"
:res="PromotionList"
/>
<PromotionAssembleListLayout v-if="isGroup" @to-assemble-buy-now="toAssembleBuyNow" :res="PromotionList" />
<!-- 配置地址 如果是虚拟产品的时候不展示 -->
<view class="card-box" v-if="goodsDetail.goodsType != 'VIRTUAL_GOODS'">
<view class="card-flex" @click="shutMask(4)">
<view class="card-title"> 已选 </view>
<view class="card-content">
<span v-if="selectedGoods.spec"
>{{ selectedGoods.spec.specName }}-{{
<span v-if="selectedGoods.spec">{{ selectedGoods.spec.specName }}-{{
selectedGoods.spec.specValue
}}</span
>
}}</span>
<span v-else></span>
</view>
<view class="card-bottom">
@ -226,7 +163,7 @@
<view class="card-content">
<span v-if="delivery">{{
delivery.consigneeAddressPath | clearStrComma
}}</span>
}}</span>
<span v-else></span>
</view>
<view class="card-bottom">
@ -239,21 +176,11 @@
<Evaluation id="main5" :goodsDetail="goodsDetail" />
<!-- 店铺推荐 -->
<storeLayout
id="main7"
:storeDetail="storeDetail"
:goodsDetail="goodsDetail"
:res="recommendList"
/>
<storeLayout id="main7" :storeDetail="storeDetail" :goodsDetail="goodsDetail" :res="recommendList" />
<!-- 宝贝详情 -->
<GoodsIntro
id="main9"
:res="goodsDetail"
:goodsParams="goodsParams"
:goodsId="goodsDetail.goodsId"
v-if="goodsDetail.id"
/>
<GoodsIntro id="main9" :res="goodsDetail" :goodsParams="goodsParams" :goodsId="goodsDetail.goodsId"
v-if="goodsDetail.id" />
<!-- 宝贝推荐 -->
<GoodsRecommend id="main11" :res="likeGoodsList" />
@ -278,13 +205,8 @@
</view>
<!-- 正常结算页面 -->
<view class="detail-btn" v-if="!isGroup">
<view
class="to-store-car to-store-btn"
v-if="goodsDetail.goodsType != 'VIRTUAL_GOODS'"
@click="shutMask(4)"
>
加入购物车</view
>
<view class="to-store-car to-store-btn" v-if="goodsDetail.goodsType != 'VIRTUAL_GOODS'" @click="shutMask(4)">
加入购物车</view>
<view class="to-buy to-store-btn" @click="shutMask(4, 'buy')">立即购买</view>
<view class="to-store-car to-store-btn" v-if="startTimer"></view>
</view>
@ -303,15 +225,8 @@
<!-- 规格-模态层弹窗 -->
<view class="spec">
<!-- 促销弹窗 -->
<u-popup
v-model="promotionShow"
:height="setup.height"
:mode="setup.mode"
:border-radius="setup.radius"
@close="promotionShow = false"
:mask-close-able="setup.close"
closeable
>
<u-popup v-model="promotionShow" :height="setup.height" :mode="setup.mode" :border-radius="setup.radius"
@close="promotionShow = false" :mask-close-able="setup.close" closeable>
<view class="header-title">优惠</view>
<view class="cuxiao">
<scroll-view class="scroll_mask" :scroll-y="true">
@ -328,31 +243,14 @@
</u-popup>
<!-- 配送地址弹窗 -->
<popupAddress
@closeAddress="closePopupAddress"
@deliveryData="deliveryFun"
v-if="goodsDetail.id"
:goodsId="goodsDetail.id"
:addressFlag="addressFlag"
/>
<popupAddress @closeAddress="closePopupAddress" @deliveryData="deliveryFun" v-if="goodsDetail.id"
:goodsId="goodsDetail.id" :addressFlag="addressFlag" />
<!-- 商品规格 商品详情以及默认参与活动的id-->
<popupGoods
:addr="delivery"
ref="popupGoods"
@changed="changedGoods"
@closeBuy="closePopupBuy"
@queryCart="cartCount()"
:goodsDetail="goodsDetail"
:goodsSpec="goodsSpec"
:isGroup="isGroup"
:id="productId"
v-if="goodsDetail.id"
:pointDetail="pointDetail"
:wholesaleList="wholesaleList"
@handleClickSku="selectSku"
:buyMask="buyMask"
/>
<popupGoods :addr="delivery" ref="popupGoods" @changed="changedGoods" @closeBuy="closePopupBuy"
@queryCart="cartCount()" :goodsDetail="goodsDetail" :goodsSpec="goodsSpec" :isGroup="isGroup" :id="productId"
v-if="goodsDetail.id" :pointDetail="pointDetail" :wholesaleList="wholesaleList" @handleClickSku="selectSku"
:buyMask="buyMask" />
</view>
</view>
</div>
@ -402,7 +300,7 @@ export default {
popupGoods,
popupAddress,
},
data() {
data () {
return {
setup,
promotionShow: false, //
@ -445,7 +343,7 @@ export default {
enableShare: false,
selectedGoods: "", //
isGroup: false, //
isSeckill:false, //
isSeckill: false, //
pointDetail: "", //
assemble: "", //sku
navbarOnlyBack: {
@ -524,19 +422,19 @@ export default {
routerVal: "",
IMLink: "", // IM
wholesaleList:[]
wholesaleList: []
};
},
computed: {
// udesk IM
IM() {
IM () {
return this.IMLink + this.storeDetail.merchantEuid;
},
},
watch: {
isGroup(val) {
isGroup (val) {
if (val) {
let timer = setInterval(() => {
this.$refs.popupGoods.buyType = "PINTUAN";
@ -547,7 +445,7 @@ export default {
}
},
},
mounted() {
mounted () {
const { windowHeight } = uni.getSystemInfoSync();
let bottomHeight = 0;
let topHeight = 0;
@ -577,7 +475,7 @@ export default {
this.productRefHeight = windowHeight - bottomHeight + "px";
},
async onLoad(options) {
async onLoad (options) {
this.routerVal = options;
// #ifdef MP-WEIXIN
//
@ -587,7 +485,7 @@ export default {
});
// #endif
},
async onShow() {
async onShow () {
this.goodsDetail = {};
//ids
if (this.routerVal.scene) {
@ -603,20 +501,20 @@ export default {
},
methods: {
share() {
share () {
return `/pages/product/goods?id=${this.routerVal.id}&goodsId=${this.routerVal.goodsId}`;
},
/**
* 导航栏列表栏
*/
handleNavbarList(val) {
handleNavbarList (val) {
modelNavigateTo({ url: val });
},
/**
* 循环出当前促销是否为空
*/
emptyPromotion() {
emptyPromotion () {
if (
this.PromotionList == "" ||
this.PromotionList == null ||
@ -625,13 +523,13 @@ export default {
return true;
}
},
selectSku(idObj) {
selectSku (idObj) {
this.init(idObj.skuId, idObj.goodsId);
},
/**
* 初始化信息
*/
async init(id, goodsId, distributionId = "") {
async init (id, goodsId, distributionId = "") {
this.isGroup = false; //
this.productId = id; // skuId
//
@ -693,18 +591,18 @@ export default {
// this.getIMDetailMethods();
},
async getIMDetailMethods() {
async getIMDetailMethods () {
let res = await getIMDetail();
if (res.data.success) {
this.IMLink = res.data.result;
}
},
linkMsgDetail() {
linkMsgDetail () {
// lili
uni.navigateTo({
url: `/pages/mine/im/index?userId=`+this.goodsDetail.storeId,
url: `/pages/mine/im/index?userId=${this.goodsDetail.storeId}&goodsid=${this.routerVal.goodsId}&skuid=${this.routerVal.id}`
});
// udesk
@ -746,37 +644,37 @@ export default {
},
/**选择商品 */
changedGoods(val) {
changedGoods (val) {
this.selectedGoods = val;
},
/** 点击子级地址回调参数*/
deliveryFun(val) {
deliveryFun (val) {
this.delivery = val;
},
/**
* 地址子级关闭回调
*/
closePopupAddress(val) {
closePopupAddress (val) {
this.addressFlag = val;
// this.maskFlag = false;
},
/**
* 商品规格子级关闭回调
*/
closePopupBuy(val) {
closePopupBuy (val) {
this.buyMask = val;
// this.maskFlag = false;
},
/** 参与拼团 创建拼团 */
toAssembleBuyNow(order) {
toAssembleBuyNow (order) {
this.shutMask(4, "PINTUAN", order);
},
/**
* 查看购物车
*/
reluchToCart() {
reluchToCart () {
let obj = {
from: "product",
id: this.productId,
@ -790,7 +688,7 @@ export default {
/**
* 查询购物车总数量
*/
cartCount() {
cartCount () {
if (storage.getHasLogin()) {
API_trade.getCartNum().then((res) => {
this.nums = res.data.result;
@ -801,7 +699,7 @@ export default {
/**
* 返回
*/
back() {
back () {
if (getCurrentPages().length == 1) {
uni.switchTab({
url: "/pages/tabbar/home/index",
@ -814,7 +712,7 @@ export default {
/**
* 获取店铺信息
*/
getStoreBaseInfoFun(id) {
getStoreBaseInfoFun (id) {
API_store.getStoreBaseInfo(id).then((res) => {
if (res.data.success) {
this.storeDetail = res.data.result;
@ -825,7 +723,7 @@ export default {
/**
* 删除收藏店铺
*/
deleteGoodsCollectionFun(id) {
deleteGoodsCollectionFun (id) {
API_Members.deleteGoodsCollection(id).then((res) => {
if (res.statusCode == 200) {
uni.showToast({
@ -840,7 +738,7 @@ export default {
/**
* 获取商品是否已被收藏
*/
getGoodsCollectionFun(goodsId) {
getGoodsCollectionFun (goodsId) {
if (storage.getHasLogin()) {
API_Members.getGoodsIsCollect("GOODS", goodsId).then((res) => {
this.favorite = res.data.result;
@ -851,7 +749,7 @@ export default {
/**
* 获取店铺推荐商品列表
*/
getStoreRecommend() {
getStoreRecommend () {
getGoodsList({
pageNumber: 1,
pageSize: 6,
@ -866,7 +764,7 @@ export default {
* 获取相似商品列表
*
*/
getOtherLikeGoods() {
getOtherLikeGoods () {
getGoodsList({
pageNumber: 1,
pageSize: 10,
@ -880,7 +778,7 @@ export default {
/**
* 领取优惠券
*/
receiveCouponsFun(id) {
receiveCouponsFun (id) {
API_Members.receiveCoupons(id).then((res) => {
uni.showToast({
title: res.data.message,
@ -892,7 +790,7 @@ export default {
/**
* 跳转到店铺页面
*/
navigateToStore(store_id) {
navigateToStore (store_id) {
uni.navigateTo({
url: `/pages/product/shopPage?id=` + store_id,
});
@ -901,14 +799,14 @@ export default {
/**
* 获取优惠券按钮
*/
getCoupon(item) {
getCoupon (item) {
this.receiveCouponsFun(item.id);
},
/**
* 规格弹窗开关
*/
shutMask(flag, buyFlag, type) {
shutMask (flag, buyFlag, type) {
this.promotionShow = false;
this.buyMask = false;
this.addressFlag = false;
@ -943,7 +841,7 @@ export default {
/**
* 收藏
*/
clickFavorite(id) {
clickFavorite (id) {
if (this.favorite) {
//
this.deleteGoodsCollectionFun(id);
@ -963,7 +861,7 @@ export default {
/**
* 顶部header显示或隐藏
*/
pageScroll(e) {
pageScroll (e) {
if (this.scrollFlag) {
this.calcSize();
}
@ -991,7 +889,7 @@ export default {
/**
* 计算每个要跳转到的模块高度信息
*/
calcSize() {
calcSize () {
let h = 0;
let that = this;
let arr = [
@ -1036,7 +934,7 @@ export default {
/**
* 点击顶部跳转到对应位置
*/
headerTab(id) {
headerTab (id) {
if (this.scrollFlag) {
this.calcSize();
}
@ -1050,7 +948,7 @@ export default {
/**
* 点击分享
*/
async shareChange() {
async shareChange () {
this.enableShare = true;
},
},