You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
5.1 KiB
192 lines
5.1 KiB
<template>
|
|
<div class="interactionDiagramPage">
|
|
<div class="left">
|
|
<!-- 互动图 -->
|
|
<InteractionDiagramImage ref="interactionDiagramImage" @clickProductDetail="clickProductDetail"
|
|
v-loading="pageloading">
|
|
|
|
</InteractionDiagramImage>
|
|
</div>
|
|
<div class="right">
|
|
<!-- 商品信息列表 -->
|
|
<div class="productList">
|
|
<div class="product-detail" @click="clickProductDetail(point)" v-for="(point, index) in showPointList"
|
|
:key="index">
|
|
<div class="image-container">
|
|
<img class="product-image" v-if="point.product.image" :src="point.product.image" />
|
|
</div>
|
|
<div class="product-info">
|
|
<div class="product-name">{{ (point.product && point.product.productName) ? point.product.productName : '' }}
|
|
</div>
|
|
<div class="product-price">¥{{ (point.product && point.product.price) ? point.product.price : '' }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { getInteractionDiagramDetail, getProducts } from '@/api/interactionDiagram.js'
|
|
|
|
import InteractionDiagramImage from '@/views/interactionDiagram/components/interactionDiagramImage.vue'
|
|
|
|
export default {
|
|
name: 'interactionDiagramDetail',
|
|
components: {
|
|
InteractionDiagramImage
|
|
},
|
|
data() {
|
|
return {
|
|
pageloading: false,
|
|
interactionDiagramDetailData: {},
|
|
pointList: [],
|
|
showPointList: []
|
|
}
|
|
},
|
|
created() {
|
|
this.interactionDiagramId = JSON.parse(this.$route.query.interactionDiagramId)
|
|
this.getInteractionDiagramDetail()
|
|
},
|
|
methods: {
|
|
// 获取互动图详情
|
|
async getInteractionDiagramDetail() {
|
|
this.pageloading = true
|
|
const response = await getInteractionDiagramDetail({
|
|
interactionDiagramId: this.interactionDiagramId
|
|
})
|
|
const res = response.data
|
|
if (res.code === '200') {
|
|
this.interactionDiagramDetailData = res.data
|
|
if (this.interactionDiagramDetailData.pointData) {
|
|
this.pointList = JSON.parse(this.interactionDiagramDetailData.pointData);
|
|
}
|
|
this.showPointList = this.pointList.filter(item => item.product)
|
|
let productIdList = this.showPointList.map(item => item.product.productId)
|
|
const getProductsResponse = await getProducts({
|
|
ids: productIdList,
|
|
page: 1,
|
|
pageSize: productIdList.length
|
|
})
|
|
if (getProductsResponse.data.code === '200') {
|
|
let productList = getProductsResponse.data.data.list
|
|
if (productList) {
|
|
this.pointList.forEach(item => {
|
|
if (item.product) {
|
|
let newProduct = productList.find(newItem => newItem.productId == item.product.productId)
|
|
if (newProduct) {
|
|
item.product = newProduct
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
this.$refs.interactionDiagramImage.setParams(this.interactionDiagramDetailData, this.pointList)
|
|
this.pageloading = false
|
|
} else {
|
|
this.$message.error(res.message || '请求失败!')
|
|
}
|
|
},
|
|
clickProductDetail(product) {
|
|
let data = {
|
|
productId: product.productId,
|
|
skuId: product.skuId,
|
|
shopId: product.shopId
|
|
}
|
|
this.$router.push({
|
|
path: "/productDetail",
|
|
query: {
|
|
proData: JSON.stringify(data)
|
|
}
|
|
})
|
|
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.interactionDiagramPage {
|
|
background-color: #F5F5F5;
|
|
padding: 50px 0 50px 0;
|
|
display: flex;
|
|
flex-direction: row;
|
|
flex-wrap: nowrap;
|
|
align-content: flex-start;
|
|
justify-content: center;
|
|
align-items: flex-start;
|
|
|
|
.left {
|
|
flex: 1;
|
|
margin-right: 5px;
|
|
}
|
|
|
|
.right {
|
|
flex: 1;
|
|
margin-left: 5px;
|
|
|
|
.productList {
|
|
.product-detail {
|
|
display: flex;
|
|
flex-direction: row;
|
|
flex-wrap: nowrap;
|
|
align-content: flex-start;
|
|
justify-content: flex-start;
|
|
align-items: flex-start;
|
|
margin-bottom: 15px;
|
|
|
|
.image-container {
|
|
width: 80px;
|
|
height: 80px;
|
|
|
|
.product-image {
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: contain;
|
|
}
|
|
}
|
|
|
|
.product-info {
|
|
margin-left: 8px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex-wrap: nowrap;
|
|
align-content: flex-start;
|
|
justify-content: flex-start;
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.product-name {
|
|
width: 100%;
|
|
height: auto;
|
|
font-size: 16px;
|
|
font-family: Source Han Sans CN;
|
|
font-weight: bold;
|
|
color: #252744;
|
|
display: block;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
line-height: 20px;
|
|
text-align: left;
|
|
}
|
|
|
|
.product-price {
|
|
width: auto;
|
|
height: 20px;
|
|
line-height: 20px;
|
|
font-size: 14px;
|
|
font-family: Source Han Sans CN;
|
|
font-weight: bold;
|
|
color: #252744;
|
|
margin-top: 6px;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
</style>
|