Browse Source

智能体讲解

master
jiazhipeng 5 months ago
parent
commit
7465746e53
  1. 2
      app.js
  2. 2
      pages/index/index.wxml
  3. 82
      pages/info/sceneProductInfo/index.js
  4. 11
      pages/info/sceneProductInfo/index.wxml
  5. 14
      pages/info/sceneProductInfo/index.wxss
  6. 59
      pages/order/orderList/index.js
  7. 43
      pages/order/orderList/index.wxml
  8. 76
      pages/order/orderList/index.wxss
  9. 51
      pages/order/scene/index.js
  10. 51
      pages/order/scene/index.wxml
  11. 59
      pages/order/scene/index.wxss
  12. 15
      pages/user/cartlist/list.js
  13. 6
      pages/user/order/list.js
  14. 17
      pages/user/order/list.wxml
  15. 25
      project.private.config.json

2
app.js

@ -38,7 +38,7 @@ App({
// 获取前端配置文件
commonApi._post("pbservice/Other/getClientConfig", {unique_key: "wechatxcx"}).then(res => {
let data = JSON.parse(res.data);
data.isTest = data.isTest150? true : false;
data.isTest = data.isTest151? true : false;
data.indexSeason = null
this.globalData.configJson = data
}).then(() => {

2
pages/index/index.wxml

@ -74,7 +74,7 @@
<!-- 苏城环游记 todo-->
<view class="small-swiper-box" wx:if="{{ztbanner.length>0 && func_data.tour_guide}}">
<swiper class="small-swiper" autoplay="{{true}}" interval="{{3000}}" duration="{{300}}"
bindchange="changeBannerIndex" data-keyname="ztBannerIndex">
bindchange="changeBannerIndex" data-keyname="ztBannerIndex" circular>
<block wx:for="{{ztbanner}}" wx:key="index">
<swiper-item bindtap="bannerClick" data-item="{{item}}">
<!-- 原 圆角77rpx,现改为13rpx -->

82
pages/info/sceneProductInfo/index.js

@ -62,6 +62,8 @@ Page({
skuShowDomId: "",
skuDays: 30,
advList: [],
},
/**
@ -211,6 +213,9 @@ Page({
}, 1)
this.BroswerRecord()
})
this.getAdv()
// 获取收藏的状态
if (wx.getStorageSync("jstrip_token")) {
commonApi.user_post("scene/is_scene_collection", {
@ -261,6 +266,83 @@ Page({
},
// 获取广告
getAdv() {
commonApi._post("adv/getAdv", {
position: 9,
type_id: 3,
scenic_id: this.data.id
}).then(res => {
try {
this.setData({advList: res.data || []})
} catch (error) {
console.log(error);
}
})
},
bannerClick: function(e) {
if (this.data.isTest) return;
let item = e.currentTarget.dataset.item;
switch (item.jump_type) {
case 0:
break;
case 1:
util.gotoDetail(item.product_model)
break;
case 2:
if (item.front_model && item.front_model.mini) {
wx.navigateTo({
url: "/" + item.front_model.mini
})
}
break;
case 3:
// 外部h5
console.log(item)
app.globalData.weburl = item.tdata.url;
wx.navigateTo({
url: "/pages/pbService/web/index?weburl=" + encodeURIComponent(item.tdata
.url)
})
break;
case 4:
if (item.tdata.appid == 'wxe5ca0f71e918e352' && wx.getStorageSync('jstrip_userid')) {
// 如果是苏心游的小程序 直接把authCode带过去
userApi.user_post("user/getJumpThirdAppCode", {}).then(res => {
let weburl = item.tdata.page
if (weburl.indexOf('?') != -1) {
weburl += '&authCode=' + res.data;
} else {
weburl += '?authCode=' + res.data
}
wx.navigateToMiniProgram({
appId: item.tdata.appid,
path: weburl
})
}).catch(err => {
wx.navigateToMiniProgram({
appId: item.tdata.appid,
path: item.tdata.page
})
})
} else {
wx.navigateToMiniProgram({
appId: item.tdata.appid,
path: item.tdata.page
})
}
break;
default:
break;
}
return;
},
// 获取日期
changeDate: function (e) {
// 2025-7-2 合并票日期变更 需要获取sku并重新赋值

11
pages/info/sceneProductInfo/index.wxml

@ -47,6 +47,17 @@
<view class="status-text{{info.garden_flag==0?' disable':''}}" wx:if="{{info.garden_flag_text && info.garden_flag!=1}}">{{info.garden_flag_text}}</view>
</view>
<view class="adv-container" wx:if="{{advList.length > 0 && info}}">
<swiper class="adv-swiper" indicator-dots="{{false}}" autoplay="{{true}}" circular interval="{{2000}}" duration="{{300}}">
<block wx:for="{{advList}}" wx:key="*this" >
<swiper-item>
<image lazy-load src="{{item.head_img}}" mode="aspectFill" bindtap="bannerClick" data-item="{{item}}"></image>
</swiper-item>
</block>
</swiper>
</view>
<view class="tab-info-container" wx:if="{{info}}">
<view class="tab-item {{showTabIndex==0?'active':''}}" bind:tap="changeTabIndex" data-value="0">预订</view>
<view class="tab-item {{showTabIndex==2?'active':''}}" bind:tap="changeTabIndex" data-value="2">详情/政策</view>

14
pages/info/sceneProductInfo/index.wxss

@ -1069,3 +1069,17 @@ line-height: 93rpx;
flex: 1;
height: 100rpx;
}
.adv-container{
padding-top: 20rpx;
width: 100%;
}
.adv-container image{
width: 672rpx;
height: 166.67rpx;
margin: 0 auto;
display: block;
}
.adv-swiper{
height: 166.67rpx;
}

59
pages/order/orderList/index.js

@ -30,6 +30,10 @@ Page({
finalPrice: 0,
showCoupon: true,
explainDataList: [],
showContent: null,
},
/**
@ -80,6 +84,8 @@ Page({
if (!this.data.kjId && !this.data.gp_id) {
this.couponCom = this.selectAllComponents("#coupon")[0];
}
this.getExplain()
},
handlePostData () {
@ -93,6 +99,15 @@ Page({
order: function (){
console.log(app.globalData.createDate);
let explainData = (this.data.explainDataList || []).filter(x=>x.selectExplain).map(x=>{
return {
product_id: x.product.id,
product_num: 1,
sku_id: x.sku.id,
type: x.product.type,
}
})
app.globalData.createDate.product_list = app.globalData.createDate.product_list.concat(explainData)
app.globalData.createDate.coupon_id= this.data.coupon ? this.data.coupon.id : null;
let service = "order/create", postData = {data: JSON.stringify(app.globalData.createDate)}
@ -147,6 +162,50 @@ Page({
})
},
// 讲解
getExplain () {
if (this.data.ticketList.length>0) {
let explainArr = []
let productId = this.data.ticketList.map(x=>x.product.id)
Promise.all(
productId.map(x=>commonApi._post("product/get_product_compose_list", {
product_id: x
}))
).then(res=>{
if (res) {
res.forEach(x=>{
if (x.data && x.data[0] && !explainArr.find(v=>v.sku.id == x.data[0].sku.id)) {
explainArr.push(x.data[0])
}
})
this.setData({
explainDataList: explainArr
})
}
console.log(res)
})
}
},
changeSeletExplain (e) {
let val = e.currentTarget.dataset.val;
let index = e.currentTarget.dataset.index;
let explainDataList = this.data.explainDataList
let explainData = this.data.explainDataList[index]
explainData.selectExplain = val
this.setData({
explainDataList: explainDataList
})
},
changeContent (e) {
let val = e.currentTarget.dataset.val;
this.setData({
showContent: val
})
},
/**

43
pages/order/orderList/index.wxml

@ -84,6 +84,28 @@
</view> -->
<coupon bind:getNewCoupon = 'getNewCoupon' id="coupon" wx:if="{{showCoupon && !kjId && !gp_id}}" money="{{showPrice + postFee}}" sku="{{sku_id}}"></coupon>
<view class="explain-box" wx:if="{{explainDataList.length>0}}">
<view class="explain-title">景点讲解服务</view>
<view class="explain-prod" wx:for="{{explainDataList}}" wx:key="index">
<image class="explain-img" src="{{item.product.headimg}}"></image>
<view class="explain-content">
<view class="explain-goods textOver2">{{item.product.title}}</view>
<view class="explain-sku textOver2">{{item.sku.sku_name}}</view>
<view class="explain-price">0</view>
</view>
<view class="explain-sku" style="font-size: 28rpx;" bind:tap="changeContent" data-val="{{item}}"
style="align-self: flex-start;flex-shrink: 0;padding: 0 20rpx 0 0;">
详情 >
</view>
<view style="align-self: flex-start;">
<view class="iconfont icon-quan" wx:if="{{!item.selectExplain}}" bind:tap="changeSeletExplain" data-val="{{true}}" data-index="{{index}}"></view>
<view class="iconfont icon-gou1" wx:else bind:tap="changeSeletExplain" data-val="{{false}}" data-index="{{index}}"></view>
</view>
</view>
</view>
<view class="fixed-bottom">
<view class="fixed-price-box">
@ -99,3 +121,24 @@
</view>
<view class="fixed-btn" bindtap="order">下一步</view>
</view>
<view class="mask" wx:if="{{showContent}}">
<view class="mask-bg" bind:tap="changeContent" data-val="{{null}}"></view>
<view class="mask-content2" >
<view class="iconfont icon-close" bind:tap="changeContent" data-val="{{null}}"></view>
<view style="text-align: center;padding: 20rpx 0;">产品详情</view>
<view style="max-height: 65vh;overflow-y: auto;">
<view style="width: 100%;padding:20rpx 20rpx 0;box-sizing: border-box;">
<image style="width: 100%;border-radius: 20rpx;height: 200rpx;" mode="widthFix" src="{{showContent.product.headimg}}"></image>
<view style="font-weight: bold;padding:20rpx 0">{{showContent.product.title}}</view>
</view>
<view style="height: 10rpx;background:#f2f2f2"></view>
<view style="padding:20rpx">
<view style="font-weight: bold;padding:0 0 20rpx">产品详情</view>
<rich-text class="detail" nodes="{{tool.formateRichText(showContent.product.content)}}"></rich-text>
</view>
<view style="height: 50rpx;"></view>
</view>
</view>
</view>

76
pages/order/orderList/index.wxss

@ -98,3 +98,79 @@ color: #666666;
color: #D62828;
font-weight: bold;
}
.explain-box{
width: 699rpx;
background: #FFFFFF;
border-radius: 9rpx;
margin: 0 auto;
padding: 26rpx 22rpx;
box-sizing: border-box;
}
.explain-box .explain-title{
font-weight: bold;
font-size: 32rpx;
color: #000000;
/* margin-bottom: 26rpx; */
}
.explain-box .explain-prod{
display: flex;
width: 100%;
align-items: center;
margin-top: 25rpx;
}
.explain-box .explain-img{
width: 135.33rpx;
height: 112rpx;
flex-shrink: 0;
}
.explain-box .explain-content{
flex: 1;
width: 1rpx;
padding: 0 36rpx;
box-sizing: border-box;
line-height: 1;
}
.explain-box .explain-goods{
font-weight: 500;
font-size: 31rpx;
color: #000000;
}
.explain-box .explain-sku{
font-weight: 500;
font-size: 24rpx;
color: #999999;
padding: 20rpx 0;
}
.explain-box .explain-price{
font-weight: 500;
font-size: 33.33rpx;
color: #E30000;
}
.explain-box .explain-price::before{
content: "¥";
font-size: 24rpx;
}
.icon-quan{
font-size: 33rpx;
}
.icon-gou1{
color: #D62828;
font-size: 33rpx;
}
.mask-content2 {
position: absolute;
left: 0;
right: 0;
bottom: 0;
width: 100%;
background: white;
border-radius: 12rpx;
min-height: 1100rpx;
}
.icon-close {
position: absolute;
top: 30rpx;
right: 30rpx;
}

51
pages/order/scene/index.js

@ -48,6 +48,10 @@ Page({
couponFlag:false,
skuDays: 30,
selectExplain: false,
explainData: null,
showContent: false,
},
/**
@ -115,7 +119,13 @@ Page({
// singlePrice: this.data.gp_id ? app.globalData.product.sku.event_price : app.globalData.product.sku.price
})
console.log(this.data.singlePrice);
this.getNewCoupon()
this.getExplain()
try {
this.getNewCoupon()
} catch (e) {}
// this.showAllPrice()
// console.log('********',this.data.product);
if (!this.data.kjId && !this.data.gp_id && this.data.product.isGroup != 1 && this.data.type!='museum') {
@ -513,6 +523,17 @@ Page({
team_id: app.globalData.team_id,
linkmanList:this.data.is_authentication == 1?this.data.linkmanList:[]
}
if (this.data.selectExplain && this.data.explainData) {
let explainData = this.data.explainData
let explain_prod = {
type: explainData.product.type,
product_id: explainData.product.id,
sku_id: explainData.sku.id,
product_num: 1,
}
data.product_list.push(explain_prod)
}
if (app.globalData.from) {
data.system_name = app.globalData.from;
}
@ -835,6 +856,34 @@ Page({
this.showAllPrice()
},
// 讲解
getExplain () {
console.log(this.data.product)
commonApi._post("product/get_product_compose_list", {
product_id: this.data.product.product.id
}).then(res => {
if (res.data && res.data.length>0) {
this.setData({
explainData: res.data[0]
})
}
})
},
changeSeletExplain (e) {
let val = e.currentTarget.dataset.val;
this.setData({
selectExplain: val
})
},
changeContent (e) {
let val = e.currentTarget.dataset.val;
this.setData({
showContent: val
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/

51
pages/order/scene/index.wxml

@ -1,4 +1,5 @@
<!--pages/order/scene/index.wxml-->
<wxs src="../../../utils/filter.wxs" module="tool" />
<view class="{{product && product.isGroup==1?'group-order':''}}">
<title title="订单填写"></title>
<!-- <view class="product-info" wx:if="{{product}}">
@ -80,7 +81,33 @@
</view>
</view> -->
<view style="{{type=='museum' || type=='activity'?'height:138rpx':'height:113rpx'}}"></view>
<!-- 景点讲解 -->
<view class="explain-box" wx:if="{{explainData && explainData.id}}">
<view class="explain-title">景点讲解服务</view>
<view class="explain-prod">
<image class="explain-img" src="{{explainData.product.headimg}}"></image>
<view class="explain-content">
<view class="explain-goods textOver2">{{explainData.product.title}}</view>
<view class="explain-sku textOver2">{{explainData.sku.sku_name}}</view>
<view class="explain-price">0</view>
</view>
<view class="explain-sku" style="font-size: 28rpx;" bind:tap="changeContent" data-val="{{true}}"
style="align-self: flex-start;flex-shrink: 0;padding: 0 20rpx 0 0;">
详情 >
</view>
<view style="align-self: flex-start;flex-shrink: 0;">
<view class="iconfont icon-quan" wx:if="{{!selectExplain}}" bind:tap="changeSeletExplain" data-val="{{true}}"></view>
<view class="iconfont icon-gou1" wx:else bind:tap="changeSeletExplain" data-val="{{false}}"></view>
</view>
</view>
</view>
<!-- <view style="{{type=='museum' || type=='activity'?'height:138rpx':'height:113rpx'}}"></view> -->
<view style="height:138rpx"></view>
<view class="fixed-bottom" wx:if="{{type!='museum' && type!='activity'}}">
<view class="fixed-price-box" wx:if="{{kjId || prizeId}}"><text>合计:</text><text class="price">¥0</text></view>
<!-- <view class="fixed-price-box" wx:elif="{{prizeId}}"><text>合计:</text><text class="price">¥0</text></view> -->
@ -150,4 +177,26 @@
</view>
</view>
</view>
<view class="mask" wx:if="{{showContent && explainData}}">
<view class="mask-bg" bind:tap="changeContent" data-val="{{false}}"></view>
<view class="mask-content2" style="min-height: 1100rpx;">
<view class="iconfont icon-close" bind:tap="changeContent" data-val="{{false}}"></view>
<view style="text-align: center;padding: 20rpx 0;">产品详情</view>
<view style="max-height: 65vh;overflow-y: auto;">
<view style="width: 100%;padding:20rpx 20rpx 0;box-sizing: border-box;">
<image style="width: 100%;border-radius: 20rpx;height: 200rpx;" mode="widthFix" src="{{explainData.product.headimg}}"></image>
<view style="font-weight: bold;padding:20rpx 0">{{explainData.product.title}}</view>
</view>
<view style="height: 10rpx;background:#f2f2f2"></view>
<view style="padding:20rpx">
<view style="font-weight: bold;padding:0 0 20rpx">产品详情</view>
<rich-text class="detail" nodes="{{tool.formateRichText(explainData.product.content)}}"></rich-text>
</view>
<view style="height: 50rpx;"></view>
</view>
</view>
</view>
</view>

59
pages/order/scene/index.wxss

@ -451,3 +451,62 @@ page {
content: "¥";
font-size: 24rpx;
}
.explain-box{
width: 699rpx;
background: #FFFFFF;
border-radius: 9rpx;
margin: 0 auto;
padding: 26rpx 22rpx;
box-sizing: border-box;
}
.explain-box .explain-title{
font-weight: bold;
font-size: 32rpx;
color: #000000;
margin-bottom: 26rpx;
}
.explain-box .explain-prod{
display: flex;
width: 100%;
align-items: center;
}
.explain-box .explain-img{
width: 135.33rpx;
height: 112rpx;
flex-shrink: 0;
}
.explain-box .explain-content{
flex: 1;
width: 1rpx;
padding: 0 36rpx;
box-sizing: border-box;
line-height: 1;
}
.explain-box .explain-goods{
font-weight: 500;
font-size: 31rpx;
color: #000000;
}
.explain-box .explain-sku{
font-weight: 500;
font-size: 24rpx;
color: #999999;
padding: 20rpx 0;
}
.explain-box .explain-price{
font-weight: 500;
font-size: 33.33rpx;
color: #E30000;
}
.explain-box .explain-price::before{
content: "¥";
font-size: 24rpx;
}
.icon-quan{
font-size: 33rpx;
}
.icon-gou1{
color: #D62828;
font-size: 33rpx;
}

15
pages/user/cartlist/list.js

@ -275,9 +275,18 @@ Page({
url: '/pages/order/postOrder/index?from=cart&flag=' + this.data.flag,
})
} else {
wx.navigateTo({
url: '/subPackages/gwcOrder/index?isCar=' + this.data.isCar,
})
if (this.data.isCar == "single") {
console.log("123")
wx.navigateTo({
url: '/pages/order/scene/index',
})
} else {
wx.navigateTo({
url: '/subPackages/gwcOrder/index?isCar=' + this.data.isCar,
})
}
}
}
})

6
pages/user/order/list.js

@ -94,7 +94,10 @@ Page({
res.data.list.map((item,index)=>{
let orderNum = 0;
item.order_product_list.map(order=>{
orderNum = orderNum + order.product_num;
if (!order.is_bind_agent) {
orderNum = orderNum + order.product_num;
}
///
// 景点线路场馆酒店四类产品的订单 如果是已支付未出票的显示出票中
if(order.state=='PAID' && (order.product_model=='venue' || order.product_model=='ticket' || order.product_model=='hotel' || order.product_model=='line')){
@ -118,7 +121,6 @@ Page({
if (item.is_order_card_product==1) {
item.order_product_list = [item.order_product_list[0]]
}
item.orderNum = orderNum;
})
console.log(ajaxes)

17
pages/user/order/list.wxml

@ -18,18 +18,21 @@
</view>
</view>
<view style="height:176rpx"></view>
<view class="order-item" bindtap="gotoDetail" data-item="{{item}}" wx:for="{{list}}">
<view class="order-item" bindtap="gotoDetail" data-item="{{item}}" wx:for="{{list}}" >
<view class="order-top">
<text>订单号:{{item.order_id}}</text>
<text class="status">{{item.orderStateText?item.orderStateText:orderState[item.state]}}</text>
</view>
<view data-item="{{item}}" class="order-info" wx:for="{{item.order_product_list}}">
<image lazy-load src="{{item.product_model=='movie'?item.product_img:item.sku_headimg}}" mode="aspectFill"></image>
<view class="sku-title textOver2">{{item.product_model=='movie'?item.product_title:(item.product_title+item.sku_name)}}</view>
<view class="sku-tips">
<view class="sku-price">¥{{item.product_price/100}}</view>
<view class="sku-number">x{{item.product_num}}</view>
<view data-item="{{order}}" wx:for="{{item.order_product_list}}" wx:for-item="order">
<view class="order-info" wx:if="{{!order.is_bind_agent}}">
<image lazy-load src="{{order.product_model=='movie'?order.product_img:order.sku_headimg}}" mode="aspectFill"></image>
<view class="sku-title textOver2">{{order.product_model=='movie'?order.product_title:(order.product_title+order.sku_name)}}</view>
<view class="sku-tips">
<view class="sku-price">¥{{order.product_price/100}}</view>
<view class="sku-number">x{{order.product_num}}</view>
</view>
</view>
</view>
<view style="text-align:right;font-size:28rpx;margin-right:30rpx;color:#333">
<text>共{{item.orderNum}}件商品</text>

25
project.private.config.json

@ -6,12 +6,33 @@
"condition": {
"miniprogram": {
"list": [
{
"name": "pages/pbService/web/index",
"pathName": "pages/pbService/web/index",
"query": "weburl=https://test.m.cloud.sz-trip.com/selectedHotels",
"scene": null,
"launchMode": "default"
},
{
"name": "pages/group/index",
"pathName": "pages/group/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "pages/info/sceneProductInfo/index",
"pathName": "pages/info/sceneProductInfo/index",
"query": "id=5257",
"launchMode": "default",
"scene": null
},
{
"name": "subPackages/postSearch/index",
"pathName": "subPackages/postSearch/index",
"query": "type_id=1&ids=",
"scene": null,
"launchMode": "default"
"launchMode": "default",
"scene": null
},
{
"name": "pages/info/postProductInfo/index",

Loading…
Cancel
Save