商品详情,购物车

This commit is contained in:
itgaojian163 2023-02-13 17:59:45 +08:00
parent 339fada3e1
commit 4901d6c43f
18 changed files with 1139 additions and 488 deletions

207
app.json
View File

@ -1,104 +1,109 @@
{
"pages": [
"pages/index/index",
"pages/travel/travel",
"pages/resource/resource",
"pages/template/template",
"pages/train/train",
"pages/cultureMap/cultureMap",
"pages/order/order",
"pages/venue/venue",
"pages/center/center",
"pages/myFriendCircle/myFriendCircle",
"pages/friendCircle/friendCircle",
"pages/orderDetail/orderDetail",
"pages/broadcastList/broadcastList",
"pages/myVenueOrder/myVenueOrder",
"pages/broadcast/broadcast",
"pages/activityDialog/activityDialog",
"pages/teamDetail/teamDetail",
"pages/volunteerRegister/volunteerRegister",
"pages/volunteer/volunteer",
"pages/heritage/heritage",
"pages/broadcastDetail/broadcastDetail",
"pages/venueDetail/venueDetail",
"pages/book/book",
"pages/register/register",
"pages/login/login",
"pages/newVolunteerActivity/newVolunteerActivity",
"pages/newTeam/newTeam",
"pages/volunteerTeam/volunteerTeam",
"pages/cultureDetail/cultureDetail",
"pages/activitySign/activitySign",
"pages/activityDetail/activityDetail",
"pages/activity/activity",
"pages/newsDetail/newsDetail",
"pages/newsList/newsList",
"pages/myActivity/myActivity",
"pages/myVolunteerTeam/myVolunteerTeam",
"pages/myVolunteerActivity/myVolunteerActivity",
"pages/serviceActivityDetail/serviceActivityDetail",
"pages/shop/shopcategory"
],
"subPackages": [{
"root": "subpages/goodslist",
"pages": [
"goodslist"
]
}],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#9F1512",
"navigationBarTitleText": "日喀则市数字文化云",
"navigationBarTextStyle": "white"
},
"tabBar": {
"color": "#BBBBBB",
"borderStyle": "black",
"selectedColor": "#000000",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "images/index.png",
"text": "首页",
"selectedIconPath": "images/index-on.png"
},
{
"pagePath": "pages/activity/activity",
"iconPath": "images/activity.png",
"text": "活动",
"selectedIconPath": "images/activity-on.png"
},
{
"pagePath": "pages/venue/venue",
"iconPath": "images/venue.png",
"text": "场馆",
"selectedIconPath": "images/venue-on.png"
},
{
"pagePath": "pages/shop/shopcategory",
"iconPath": "images/culture.png",
"text": "商城",
"selectedIconPath": "images/culture-on.png"
},
{
"pagePath": "pages/center/center",
"iconPath": "images/center.png",
"text": "我的",
"selectedIconPath": "images/center-on.png"
}
]
},
"usingComponents": {
"page-loading": "/components/loading/pageloading"
},
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于您当前所在位置"
}
},
"requiredPrivateInfos": [
"getLocation"
],
"style": "v2",
"sitemapLocation": "sitemap.json"
"pages/index/index",
"pages/travel/travel",
"pages/resource/resource",
"pages/template/template",
"pages/train/train",
"pages/cultureMap/cultureMap",
"pages/order/order",
"pages/venue/venue",
"pages/center/center",
"pages/myFriendCircle/myFriendCircle",
"pages/friendCircle/friendCircle",
"pages/orderDetail/orderDetail",
"pages/broadcastList/broadcastList",
"pages/myVenueOrder/myVenueOrder",
"pages/broadcast/broadcast",
"pages/activityDialog/activityDialog",
"pages/teamDetail/teamDetail",
"pages/volunteerRegister/volunteerRegister",
"pages/volunteer/volunteer",
"pages/heritage/heritage",
"pages/broadcastDetail/broadcastDetail",
"pages/venueDetail/venueDetail",
"pages/book/book",
"pages/register/register",
"pages/login/login",
"pages/newVolunteerActivity/newVolunteerActivity",
"pages/newTeam/newTeam",
"pages/volunteerTeam/volunteerTeam",
"pages/cultureDetail/cultureDetail",
"pages/activitySign/activitySign",
"pages/activityDetail/activityDetail",
"pages/activity/activity",
"pages/newsDetail/newsDetail",
"pages/newsList/newsList",
"pages/myActivity/myActivity",
"pages/myVolunteerTeam/myVolunteerTeam",
"pages/myVolunteerActivity/myVolunteerActivity",
"pages/serviceActivityDetail/serviceActivityDetail",
"pages/shop/shopcategory",
"subpages/goodsdetail/goodsdetail",
"subpages/goodscar/goodscar"
],
"subPackages": [
{
"root": "subpages/goodslist",
"pages": [
"goodslist"
]
}
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#9F1512",
"navigationBarTitleText": "日喀则市数字文化云",
"navigationBarTextStyle": "white"
},
"tabBar": {
"color": "#BBBBBB",
"borderStyle": "black",
"selectedColor": "#000000",
"list": [
{
"pagePath": "pages/index/index",
"iconPath": "images/index.png",
"text": "首页",
"selectedIconPath": "images/index-on.png"
},
{
"pagePath": "pages/activity/activity",
"iconPath": "images/activity.png",
"text": "活动",
"selectedIconPath": "images/activity-on.png"
},
{
"pagePath": "pages/venue/venue",
"iconPath": "images/venue.png",
"text": "场馆",
"selectedIconPath": "images/venue-on.png"
},
{
"pagePath": "pages/shop/shopcategory",
"iconPath": "images/culture.png",
"text": "商城",
"selectedIconPath": "images/culture-on.png"
},
{
"pagePath": "pages/center/center",
"iconPath": "images/center.png",
"text": "我的",
"selectedIconPath": "images/center-on.png"
}
]
},
"usingComponents": {
"page-loading": "/components/loading/pageloading"
},
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于您当前所在位置"
}
},
"requiredPrivateInfos": [
"getLocation"
],
"style": "v2",
"sitemapLocation": "sitemap.json"
}

View File

@ -2,332 +2,338 @@
var app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
randomName: true,
showPhone: true,
gotCode: false,
restTime: 120,
timer: '',
userAvatar: '',
token: '',
userInfo: {},
usercenterUrl: app.usercenterUrl,
sourcePath: '/route/file/download/true/',
phone: '',
code: '',
isLoading: false
},
// 选择头像来源
changeAvatar: function () {
var self = this
wx.showActionSheet({
itemList: ['从相册中选择','拍照'],
success: function (res) {
if (!res.cancel) {
if (res.tapIndex == 0) {
self.chooseAvatar('album')
} else {
self.chooseAvatar('camera')
}
}
}
})
},
// 选择图片
chooseAvatar: function (type) {
var self = this
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: [type],
success: function (res) {
var avatar = res.tempFilePaths[0];
app.restAjax.file(app.restAjax.path('{usercenterUrl}/app/file/uploadimage', [app.usercenterUrl]), avatar, 'image', {
headers: {
token: self.data.token
}
}, function (code, data) {
var id = JSON.parse(data).data
self.uploadAvatar(id)
}, function (code, data) {
console.log(data)
})
self.setData({
userAvatar: avatar
})
}
})
},
// 上传
uploadAvatar: function (avatarId) {
var self = this
app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/user/updateuseravatar', [app.usercenterUrl]), {
avatar: avatarId
}, {
headers: {
token: self.data.token
}
}, function (code, data) {
wx.setStorageSync('token', data.data);
self.getUserInfo()
}, function (code, data) {
console.log(data)
})
},
// 获取token
getToken: function () {
var self = this
wx.getStorage({
key: 'token',
success: function(res) {
self.setData({
token: res.data
})
self.getUserInfo()
},
})
},
/**
* 跳转到我的活动
*/
toMyJoinActivity(){
wx.navigateTo({
url: '/pages/myActivity/myActivity',
})
},
/**
* 跳转到我的预订列表
*/
toMyOrder: function() {
wx.navigateTo({
url: '../order/order',
})
},
/**
* 跳转到我的志愿团队页面
*/
toMyTeam: function() {
wx.navigateTo({
url: '../myVolunteerTeam/myVolunteerTeam',
})
},
/**
* 跳转到我的志愿活动页面
*/
toMyVolunteerActivity: function() {
wx.navigateTo({
url: '../myVolunteerActivity/myVolunteerActivity',
})
},
/**
* 跳转到我发布的朋友圈页面
*/
toMyFirend: function () {
wx.navigateTo({
url: '../myFriendCircle/myFriendCircle',
})
},
/**
* 跳转到我预定的场馆页面
*/
toMyOrder: function () {
wx.navigateTo({
url: '../order/order',
})
},
// 获取输入的手机号
phoneNum: function (res) {
this.setData({
phone: res.detail.value
})
},
// 校验手机号
testPhone: function () {
var self = this
if (self.data.phone) {
if (!/^1(3|4|5|6|7|8|9)\d{9}$/.test(self.data.phone)) {
wx.showToast({
title: '请输入正确的手机号',
icon: 'none',
duration: 1500
})
} else {
self.getCode()
}
} else {
wx.showToast({
title: '手机号不能为空',
icon: 'none',
duration: 1500
})
}
},
// 提交绑定手机
submitPhone: function () {
var self = this;
self.setData({
isConfirm: true
})
app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/user/updateminiappdefaultusername', [app.usercenterUrl]), {
phone: self.data.phone
}, {
headers: {
token: self.data.token
}
}, function (code, data) {
wx.setStorageSync('token', data.data);
wx.setStorageSync('isRandomUsername', 0)
clearInterval(self.data.timer)
self.setData({
showPhone: false
})
wx.showTabBar();
self.getUserInfo()
}, function (code, data) {
app.dialog.msg(data.msg);
self.setData({
isConfirm: false
})
})
},
// // 验证码
// inputCode: function (e) {
// this.setData({
// code: e.detail.value
// })
// },
getPhoneNumber: function (e) {
var self = this
self.setData({
isLoading: true
})
console.log(e)
if (e.detail.errMsg == 'getPhoneNumber:ok') {
var info = {
encryptedData: e.detail.encryptedData,
iv: e.detail.iv
}
// app.dialog.loading('正在加载');
app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/miniapp/update-phone', [app.usercenterUrl]), info, {
headers: {
token: self.data.token
}
}, function (code, data) {
// wx.hideLoading();
self.setData({
isLoading: false
})
wx.setStorageSync('token', data.data);
wx.setStorageSync('isRandomUsername', '0');
self.setData({
randomName: false,
token: data.data
})
self.getUserInfo()
app.dialog.msg('绑定成功');
})
} else {
self.setData({
/**
* 页面的初始数据
*/
data: {
randomName: true,
showPhone: true,
gotCode: false,
restTime: 120,
timer: '',
userAvatar: '',
token: '',
userInfo: {},
usercenterUrl: app.usercenterUrl,
sourcePath: '/route/file/download/true/',
phone: '',
code: '',
isLoading: false
})
}
},
// 判断用户是否为随机名称
isRandomName: function () {
var self = this
wx.getStorage({
key: 'isRandomUsername',
success: function (res) {
if (res.data == 1) {
self.setData({
randomName: true
})
},
// 选择头像来源
changeAvatar: function () {
var self = this
wx.showActionSheet({
itemList: ['从相册中选择', '拍照'],
success: function (res) {
if (!res.cancel) {
if (res.tapIndex == 0) {
self.chooseAvatar('album')
} else {
self.chooseAvatar('camera')
}
}
}
})
},
// 选择图片
chooseAvatar: function (type) {
var self = this
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: [type],
success: function (res) {
var avatar = res.tempFilePaths[0];
app.restAjax.file(app.restAjax.path('{usercenterUrl}/app/file/uploadimage', [app.usercenterUrl]), avatar, 'image', {
headers: {
token: self.data.token
}
}, function (code, data) {
var id = JSON.parse(data).data
self.uploadAvatar(id)
}, function (code, data) {
console.log(data)
})
self.setData({
userAvatar: avatar
})
}
})
},
// 上传
uploadAvatar: function (avatarId) {
var self = this
app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/user/updateuseravatar', [app.usercenterUrl]), {
avatar: avatarId
}, {
headers: {
token: self.data.token
}
}, function (code, data) {
wx.setStorageSync('token', data.data);
self.getUserInfo()
}, function (code, data) {
console.log(data)
})
},
// 获取token
getToken: function () {
var self = this
wx.getStorage({
key: 'token',
success: function (res) {
self.setData({
token: res.data
})
self.getUserInfo()
},
})
},
// 购物车
toShopCar() {
wx.navigateTo({
url: '/subpages/goodscar/goodscar',
})
},
/**
* 跳转到我的活动
*/
toMyJoinActivity() {
wx.navigateTo({
url: '/pages/myActivity/myActivity',
})
},
/**
* 跳转到我的预订列表
*/
toMyOrder: function () {
wx.navigateTo({
url: '../order/order',
})
},
/**
* 跳转到我的志愿团队页面
*/
toMyTeam: function () {
wx.navigateTo({
url: '../myVolunteerTeam/myVolunteerTeam',
})
},
/**
* 跳转到我的志愿活动页面
*/
toMyVolunteerActivity: function () {
wx.navigateTo({
url: '../myVolunteerActivity/myVolunteerActivity',
})
},
/**
* 跳转到我发布的朋友圈页面
*/
toMyFirend: function () {
wx.navigateTo({
url: '../myFriendCircle/myFriendCircle',
})
},
/**
* 跳转到我预定的场馆页面
*/
toMyOrder: function () {
wx.navigateTo({
url: '../order/order',
})
},
// 获取输入的手机号
phoneNum: function (res) {
this.setData({
phone: res.detail.value
})
},
// 校验手机号
testPhone: function () {
var self = this
if (self.data.phone) {
if (!/^1(3|4|5|6|7|8|9)\d{9}$/.test(self.data.phone)) {
wx.showToast({
title: '请输入正确的手机号',
icon: 'none',
duration: 1500
})
} else {
self.getCode()
}
} else {
self.setData({
randomName: false
})
wx.showToast({
title: '手机号不能为空',
icon: 'none',
duration: 1500
})
}
}
})
},
// 获取用户信息
getUserInfo: function () {
var self = this
app.restAjax.get(app.restAjax.path('{usercenterUrl}/app/user/get-app-user', [app.usercenterUrl]), {}, {
headers: {
token: self.data.token
}
}, function (code, data) {
self.setData({
userInfo: data
})
}, function (code, data) {
app.dialog.msg(data.msg);
})
},
cancelPhone: function () {
this.setData({
showPhone: false
})
wx.showTabBar()
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.isRandomName();
this.getToken();
},
},
// 提交绑定手机
submitPhone: function () {
var self = this;
self.setData({
isConfirm: true
})
app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/user/updateminiappdefaultusername', [app.usercenterUrl]), {
phone: self.data.phone
}, {
headers: {
token: self.data.token
}
}, function (code, data) {
wx.setStorageSync('token', data.data);
wx.setStorageSync('isRandomUsername', 0)
clearInterval(self.data.timer)
self.setData({
showPhone: false
})
wx.showTabBar();
self.getUserInfo()
}, function (code, data) {
app.dialog.msg(data.msg);
self.setData({
isConfirm: false
})
})
},
// // 验证码
// inputCode: function (e) {
// this.setData({
// code: e.detail.value
// })
// },
getPhoneNumber: function (e) {
var self = this
self.setData({
isLoading: true
})
console.log(e)
if (e.detail.errMsg == 'getPhoneNumber:ok') {
var info = {
encryptedData: e.detail.encryptedData,
iv: e.detail.iv
}
// app.dialog.loading('正在加载');
app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/miniapp/update-phone', [app.usercenterUrl]), info, {
headers: {
token: self.data.token
}
}, function (code, data) {
// wx.hideLoading();
self.setData({
isLoading: false
})
wx.setStorageSync('token', data.data);
wx.setStorageSync('isRandomUsername', '0');
self.setData({
randomName: false,
token: data.data
})
self.getUserInfo()
app.dialog.msg('绑定成功');
})
} else {
self.setData({
isLoading: false
})
}
},
// 判断用户是否为随机名称
isRandomName: function () {
var self = this
wx.getStorage({
key: 'isRandomUsername',
success: function (res) {
if (res.data == 1) {
self.setData({
randomName: true
})
} else {
self.setData({
randomName: false
})
}
}
})
},
// 获取用户信息
getUserInfo: function () {
var self = this
app.restAjax.get(app.restAjax.path('{usercenterUrl}/app/user/get-app-user', [app.usercenterUrl]), {}, {
headers: {
token: self.data.token
}
}, function (code, data) {
self.setData({
userInfo: data
})
}, function (code, data) {
app.dialog.msg(data.msg);
})
},
cancelPhone: function () {
this.setData({
showPhone: false
})
wx.showTabBar()
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.isRandomName();
this.getToken();
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
}
})

View File

@ -41,10 +41,10 @@
<image src="../../images/team.png"></image>
<view class="title">我的志愿活动</view>
</view>
<!-- <view class="main-box">
<view class="main-box" bindtap="toShopCar">
<image src="../../images/share.png"></image>
<view class="title">我的分享</view>
</view> -->
<view class="title">购物车</view>
</view>
<!-- <view class="main-box">
<image src="../../images/setting.png"></image>
<view class="title">设置</view>

View File

@ -1,11 +1,11 @@
<view class="container-box" wx:if="{{isHidePageLoading}}">
<view class="left">
<scroll-view class="left" scroll-y="true">
<view bindtap="chooseOne" data-index="{{index}}" class="{{currentIndex==index ? 'category-item-active':'category-item-default'}}" wx:for="{{categoryOneList}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<view wx:if="{{currentIndex==index}}" class="line"></view>
<view class="category-one-name">{{item.name}}</view>
</view>
</view>
<view class="right">
</scroll-view>
<scroll-view class="right" scroll-y="true">
<view class="category-card" wx:for="{{categorySeconList}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<view class="category-two-name" bindtap="goList" data-id="{{item.id}}">
<view>{{item.name}}</view>
@ -13,7 +13,7 @@
</view>
<view class="category-thrid-box" wx:if="{{item.subList.length > 0}}">
<view class="category-thrid-item" wx:for="{{item.subList}}" wx:for-index="i" wx:for-item="it" wx:key="i" bindtap="goList" data-id="{{it.id}}">
<image src="../../images/avatar.png"></image>
<image src="{{it.icon==''? '/subpages/images/ic_goods_type_default.png':imgUrl+it.icon}}"></image>
<view>{{it.name}}</view>
</view>
</view>
@ -22,6 +22,6 @@
<text>暂无数据</text>
</view>
</view>
</view>
</scroll-view>
</view>
<page-loading wx:else></page-loading>

View File

@ -1,112 +1,122 @@
/* pages/shop/shopcat.wxss */
page {
height: 100%;
background: #f6f6f6;
height: 100%;
background: #f6f6f6;
}
.container-box {
display: flex;
flex-direction: row;
width: 100%;
height: 100%;
display: flex;
flex-direction: row;
width: 100%;
height: 100%;
}
.container-box .left {
display: flex;
flex-direction: column;
width: 35%;
height: 100%;
margin-top: 10rpx;
display: flex;
flex-direction: column;
width: 35%;
height: 100%;
margin-top: 10rpx;
position: fixed;
top: 0;
left: 0;
}
.category-item-default {
display: flex;
flex-direction: row;
padding: 10rpx 0rpx 5rpx 2rpx;
width: 100%;
display: flex;
flex-direction: row;
padding: 20rpx 0rpx 20rpx 2rpx;
width: 100%;
}
.category-item-active {
display: flex;
flex-direction: row;
padding: 10rpx 0rpx 5rpx 2rpx;
background: white;
width: 100%;
display: flex;
flex-direction: row;
padding: 20rpx 0rpx 20rpx 2rpx;
background: white;
width: 100%;
}
.category-one-name {
margin-left: 20rpx;
padding: 10rpx 0rpx;
flex: 1;
margin-left: 20rpx;
padding: 10rpx 0rpx;
flex: 1;
}
.line {
background: #e70101;
width: 10rpx;
height: 100%;
background: #e70101;
width: 10rpx;
height: 60rpx;
align-self: center;
}
.container-box .right {
display: flex;
flex-direction: column;
width: 65%;
display: flex;
flex-direction: column;
width: 65%;
position: absolute;
left: 35%;
}
.category-card {
margin: 10rpx 10rpx 10rpx 0rpx;
border-radius: 20rpx;
min-height: 300rpx;
background-color: white;
box-shadow: 5rpx 5rpx 5rpx 5rpx rgba(0, 0, 0, 0, 1);
padding: 10rpx;
margin: 10rpx 10rpx 10rpx 0rpx;
border-radius: 20rpx;
min-height: 300rpx;
background-color: white;
box-shadow: 5rpx 5rpx 5rpx 5rpx rgba(0, 0, 0, 0, 1);
padding: 10rpx;
}
.category-two-name {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 10rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 20rpx 5rpx;
}
.category-thrid-box {
display: flex;
flex-direction: row;
margin-top: 20rpx;
justify-content: flex-start;
align-items: center;
display: flex;
flex-direction: row;
margin-top: 20rpx;
justify-content: flex-start;
align-items: center;
flex-wrap: wrap;
}
.category-thrid-item {
width: 33%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 30rpx;
width: 30%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 30rpx;
margin: 10rpx 0rpx;
text-align: center;
}
.category-thrid-item image {
width: 96rpx;
height: 96rpx;
width: 82rpx;
height: 82rpx;
margin-bottom: 15rpx;
}
.category-empty {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
align-self: center;
font-size: 30rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
align-self: center;
font-size: 30rpx;
}
.category-empty image {
width: 96rpx;
height: 66rpx;
width: 96rpx;
height: 66rpx;
}

View File

@ -1,4 +1,7 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"libVersion": "2.30.0"
"libVersion": "2.30.0",
"setting": {
"urlCheck": false
}
}

View File

@ -0,0 +1,35 @@
// subpages/goodscar/goodscar.js
Page({
/**
* 页面的初始数据
*/
data: {
carList: [],
isHidePageloading: false,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
var _self = this;
try {
var value = wx.getStorageSync('carlist');
console.log(value)
if (value) {
_self.setData({
carList: value,
isHidePageloading: true
})
} else {
_self.setData({
isHidePageloading: true
})
}
} catch (e) {
}
},
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "购物车"
}

View File

@ -0,0 +1,21 @@
<!--subpages/goodscar/goodscar.wxml-->
<scroll-view wx:if="{{isHidePageloading}}">
<view wx:if="{{carList.length>0}}">
<block wx:for="{{carList}}" wx:for-item="item" wx:for-index="index" wx:key="index">
<view class="goods-item">
<image class="check" src="/subpages/images/ic_shop_car_icon.png" mode="aspectFill"></image>
<view class="goods">
<image class="goods-img"></image>
<view class="goods-content">
</view>
</view>
</view>
</block>
</view>
<view class="category-empty" wx:else>
<image src="../../images/ic_empty_data.png" mode="scaleToFill"></image>
<text class="hint">暂无数据</text>
</view>
</scroll-view>
<page-loading wx:else></page-loading>

View File

@ -0,0 +1,43 @@
/* subpages/goodscar/goodscar.wxss */
.category-empty {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
align-self: center;
position: fixed;
top: 50%;
left: 50%;
transform: translateX(-50%)translateY(-50%);
}
.category-empty image {
width: 180rpx;
height: 120rpx;
}
.category-empty .hint {
margin-top: 30rpx;
font-size: 32rpx;
}
.goods-item {}
.check {
width: 48rpx;
height: 48rpx;
}
.goods {
display: flex;
flex-direction: row;
justify-content: flex-start;
}
.goods .goods-img{}
.goods-content{
}

View File

@ -0,0 +1,129 @@
// subpages/goodsdetail/goodsdetail.js
var app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
goodsId: "",
isHidePageloading: false,
detailBean: {},
currentStandard: {},
standardList: [],
curStandardIndex: 0,
imgUrl: app.shopImgUrl,
carList: [],
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.setData({
goodsId: options.id
})
this.getGoodsDetail();
},
//获取商品详情
getGoodsDetail() {
var _self = this
app.restAjax.get(app.restAjax.path('{shopUrl}/app/shopgoods/getrelease/{goodsId}',
[app.shopUrl, _self.data.goodsId]),
null,
null,
function (code, data) {
if (data) {
if (data.goodsPhotos.length > 0) {
var photos = data.goodsPhotos.split(',');
data.photoList = photos;
} else {
data.photoList = []
}
data.goodsPrice = 0;
data.goodsStandarName = "";
data.goodsStandarId = "";
data.isCheck = false;
data.carAmount = 0;
_self.setData({
detailBean: data,
})
}
},
function (code, data) {
app.dialog.msg(data.msg);
},
function () {
_self.getGoodsStandardList();
})
},
// carAmount;
// goodsPrice;
// goodsStandarId;
// goodsStandarName;
// isCheck;
//获取商品附加信息
getGoodsStandardList() {
var _self = this
_self.data.detailBean.goodsPrice = 0;
_self.data.detailBean.goodsStandarName = "";
_self.data.detailBean.goodsStandarId = "";
_self.data.detailBean.isCheck = false;
_self.data.detailBean.carAmount = 0;
app.restAjax.get(app.restAjax.path('{shopUrl}/app/shopgoodsitem/listrelease/{goodsId}',
[app.shopUrl, _self.data.goodsId]),
null,
null,
function (code, data) {
if (data && data.length > 0) {
_self.data.detailBean.goodsPrice = data[0].goodsItemUnitPrice;
_self.data.detailBean.goodsStandarName = data[0].goodsItemName;
_self.data.detailBean.goodsStandarId = data[0].goodsItemId;
_self.setData({
standardList: data,
currentStandard: data[0],
isHidePageloading: true,
detailBean: _self.data.detailBean
})
} else {
_self.setData({
isHidePageloading: true
})
}
},
function (code, data) {
app.dialog.msg(data.msg);
_self.setData({
isHidePageloading: true
})
},
function () {
_self.setData({
isHidePageloading: true
})
})
},
doSelStandard(e) {
var item = e.currentTarget.dataset.item;
var index = e.currentTarget.dataset.index;
this.data.detailBean.goodsPrice = item.goodsItemUnitPrice;
this.data.detailBean.goodsStandarName = item.goodsItemName;
this.data.detailBean.goodsStandarId = item.goodsItemId;
this.setData({
currentStandard: item,
curStandardIndex: index,
detailBean: this.data.detailBean
})
},
// 添加购物车
addToCar() {
//判断购物车中是否存在该商品
var _self = this;
for (let i = 0; i < _self.data.carList.length; i++) {
var item = _self.data.carList[i];
}
}
})

View File

@ -0,0 +1,3 @@
{
"usingComponents": {}
}

View File

@ -0,0 +1,83 @@
<!--subpages/goodsdetail/goodsdetail.wxml-->
<scroll-view wx:if="{{isHidePageloading}}">
<view class="container-box">
<!-- 轮播图 -->
<swiper autoplay="true" class="banner" indicator-dots="true">
<block wx:for="{{detailBean.photoList}}" wx:for-item="item" wx:for-index="index" wx:key="index">
<swiper-item class="banner">
<image src="{{imgUrl+detailBean.photoList[index]}}" mode="aspectFill"></image>
</swiper-item>
</block>
</swiper>
<!-- 名称 -->
<view class="name-box">
<view class="type-box">
<view class="type-item">库存:{{currentStandard.goodsItemTotal}}</view>
<view class="type-item"> 销量:{{detailBean.goodsSalesVolume}}</view>
<view class="type-item">评分:{{detailBean.userEvaluate}}</view>
<view class="type-item">{{detailBean.goodsNotFreight==1? '包邮':'不包邮'}}</view>
</view>
<view class="goods-name">
{{detailBean.goodsName}}
</view>
<view class="shop-name">
{{detailBean.shopName}}
</view>
</view>
<!-- 规格 -->
<view class="standard-box">
<view class="title-item">
<view class="line"></view>
<view class="title-name">规格</view>
</view>
<view class="standard-content">
<block wx:for="{{standardList}}" wx:for-item="item" wx:for-index="index" wx:key="index">
<view class="{{index==curStandardIndex? 'standard-item-sel':'standard-item'}}" bindtap="doSelStandard" data-index="{{index}}" data-item="{{item}}">
<image src="{{imgUrl+item.goodsItemIcon}}" mode="aspectFill"></image>
<view class="name">{{item.goodsItemName}}</view>
</view>
</block>
</view>
</view>
<!-- 详情 -->
<view class="desc-box">
<view class="title-item">
<view class="line"></view>
<view class="title-name">详情</view>
</view>
<!-- 参数 -->
<view class="params-box">
<block wx:for="{{detailBean.shopGoodsParameterList}}" wx:for-item="it" wx:for-index="i" wx:key="i">
<view class="params-item">
<view class="params-title">{{it.parameterName}}</view>
<view class="params-content">{{it.shopGoodsParameterContent}}</view>
</view>
</block>
</view>
<view class="desc-video" wx:if="{{detailBean.goodsVideo.length>0}}">
<video style="width: 100%;" src="{{imgUrl+detailBean.goodsVideo}}" controls></video>
</view>
<rich-text class="desc-txt" nodes="{{detailBean.goodsSummary}}"></rich-text>
</view>
</view>
</scroll-view>
<page-loading wx:else></page-loading>
<view class="bottom-box">
<view class="bottom-content">
<view class="bottom-price">
<view class="price-icon">¥</view>
<view class="price-content">{{currentStandard.goodsItemUnitPrice}}</view>
</view>
<view class="icon-btn">
<view class="car-icon">
<view class="car">
<image src="/subpages/images/ic_shop_car_icon.png" mode="aspectFill"></image>
<view class="car-num ">{{carList.length}}</view>
</view>
<view>购物车</view>
</view>
<view class="car-add">添加购物车</view>
</view>
</view>
</view>

View File

@ -0,0 +1,296 @@
/* subpages/goodsdetail/goodsdetail.wxss */
page {
background: #f2f2f2;
}
.container-box {
width: 100%;
height: auto;
display: flex;
flex-direction: column;
margin-bottom: 150rpx;
}
.banner {
height: 500rpx;
}
.banner image {
width: 100%;
height: 500rpx;
}
.goods-type {
display: flex;
flex-direction: row;
margin-top: 10rpx;
}
.name-box {
padding: 30rpx;
display: flex;
flex-direction: column;
box-shadow: 10rpx 5rpx 10rpx #dfdfdf;
background: white;
margin: 20rpx;
border-radius: 10rpx;
}
.type-box {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-content: center;
}
.type-item {
background: #f2f2f2;
color: #e70606;
padding: 10rpx;
font-size: 28rpx;
}
.type-item:nth-of-type(n+2) {
margin-left: 20rpx;
}
.goods-name {
font-size: 32rpx;
color: black;
margin-top: 20rpx;
}
.shop-name {
margin-top: 20rpx;
font-size: 28rpx;
color: gray;
}
.standard-box {
padding: 30rpx;
display: flex;
flex-direction: column;
box-shadow: 10rpx 5rpx 10rpx #dfdfdf;
background: white;
margin: 20rpx;
border-radius: 10rpx;
}
.title-item {
display: flex;
flex-direction: row;
align-items: center;
}
.line {
height: 30rpx;
width: 10rpx;
background: #e70606;
}
.title-name {
margin-left: 30rpx;
}
.standard-content {
display: flex;
flex-direction: row;
}
.standard-item {
display: flex;
flex-direction: row;
border: 1rpx solid #dfdfdf;
border-radius: 3rpx;
margin: 10rpx;
text-align: center;
justify-content: center;
align-items: center;
padding: 0rpx 0rpx 0rpx 5rpx;
}
.name {
text-align: center;
margin: 0rpx 20rpx;
font-size: 28rpx;
}
.standard-item image {
width: 48rpx;
height: 48rpx;
}
.standard-item-sel {
display: flex;
flex-direction: row;
border: 1rpx solid #e70606;
border-radius: 3rpx;
margin: 10rpx;
text-align: center;
justify-content: center;
align-items: center;
padding: 0rpx 0rpx 0rpx 5rpx;
}
.standard-item-sel image {
width: 48rpx;
height: 48rpx;
}
.desc-box {
display: flex;
flex-direction: column;
margin: 20rpx;
box-shadow: 10rpx 5rpx 10rpx #dfdfdf;
background: white;
padding: 30rpx;
}
.desc-video {
margin-top: 20rpx;
width: 100%;
}
.desc-img {
margin-top: 20rpx;
}
.desc-txt {
margin-top: 20rpx;
}
.bottom-box {
display: flex;
flex-direction: column;
background: white;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
}
.bottom-content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin: 25rpx;
}
.bottom-price {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: baseline;
color: #e70606;
text-align: center;
font-weight: bold;
}
.price-icon {
font-size: 30rpx;
}
.price-content {
font-size: 55rpx;
}
.icon-btn {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.car-icon {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 30rpx;
}
.car-icon image {
width: 48rpx;
height: 48rpx;
align-items: center;
align-self: center;
margin-left: 25rpx;
margin-top: 10rpx;
}
.car {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
.car-num {
position: relative;
right: 10rpx;
top: -10rpx;
background: #e70606;
color: white;
width: 48rpx;
height: 48rpx;
border-radius: 50%;
text-align: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 25rpx;
}
.car-add {
background: linear-gradient(to right bottom, rgb(245, 74, 74), rgb(221, 5, 5) 70px);
color: white;
padding: 15rpx;
border-radius: 10rpx;
margin-left: 20rpx;
font-size: 32rpx;
}
.params-box {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-top: 20rpx;
}
.params-item {
display: flex;
flex-direction: row;
width: 100%;
}
.params-item:first-child {
border: 1rpx solid #6e6e6e;
}
.params-item:nth-of-type(n+2) {
border-bottom: 1rpx solid #6e6e6e;
border-left: 1rpx solid #6e6e6e;
border-right: 1rpx solid #6e6e6e;
}
.params-title {
width: 40%;
border-right: 1rpx solid #6e6e6e;
padding: 5rpx;
text-align: center;
font-size: 32rpx;
}
.params-content {
width: 60%;
text-align: center;
font-size: 32rpx;
padding: 5rpx;
}

View File

@ -24,6 +24,14 @@ Page({
})
this.getGoodsList();
},
inputKeywords(event) {
this.setData({
keywords: event.detail.value
})
},
doSearch() {
wx.startPullDownRefresh()
},
getGoodsList() {
var _self = this
var info = {
@ -69,5 +77,10 @@ Page({
page: _self.data.page += 1
})
_self.getGoodsList()
},
goDetail(e) {
wx.navigateTo({
url: '/subpages/goodsdetail/goodsdetail?id=' + e.currentTarget.dataset.id,
})
}
})

View File

@ -1,14 +1,14 @@
<!--pages/goodslist/goodslist.wxml-->
<view wx:if="{{hidePageLoading}}">
<view class="search-box">
<input placeholder="请输入要查询的关键字" />
<view class="btn">搜索</view>
<input placeholder="请输入要查询的关键字" bindinput="inputKeywords" type="text" bindconfirm="doSearch" />
<view class="btn" bindtap="doSearch">搜索</view>
</view>
<view class="container-box">
<view class="goods-item" wx:for="{{goodsList}}" wx:for-item="item" wx:for-index="index" wx:key="index">
<image src="{{imgUrl+item.goodsIcon}}"></image>
<view class="goods-item" wx:for="{{goodsList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="goDetail" data-id="{{item.goodsId}}">
<image src="{{item.goodsIcon=='' ? '/images/address.png' : imgUrl+item.goodsIcon}}"></image>
<view class="goods-content">
<view class="goods-name">{{item.goodsName}}</view>
<rich-text class="goods-name" nodes="{{item.goodsName}}"></rich-text>
<view class="goods-price">¥ {{item.goodsPrice}}</view>
<view class="goods-type">
<view class="type-item">销量:{{item.goodsSalesVolume}}</view>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B