Commit 66328e43 by 谢中龙

合并

parents a723c89f c83b62ca
...@@ -16,10 +16,12 @@ App({ ...@@ -16,10 +16,12 @@ App({
// 默认 false // 默认 false
wx.setStorageSync('reLoginErr', false) wx.setStorageSync('reLoginErr', false)
try { try {
let res = wx.getSystemInfoSync(); let res = wx.getSystemInfoSync(); // 获取当前运行环境
config.pixelRate = res.windowWidth / 750; config.pixelRate = res.windowWidth / 750;
config.platform = res.platform; config.platform = res.platform;
config.statusBarHeight = res.statusBarHeight; config.statusBarHeight = res.statusBarHeight;
const qyWeChat = res && res.environment || '' // 在企业微信固定返回wxwork,在微信不返回该字段,开发者可此判断当前是否在企业微信运行
wx.setStorageSync('_qyWeChat', qyWeChat)
if (res.platform.toLowerCase() == 'devtools') { if (res.platform.toLowerCase() == 'devtools') {
config.capsuleHeight = 44; config.capsuleHeight = 44;
} }
......
...@@ -32,7 +32,11 @@ ...@@ -32,7 +32,11 @@
"pages/logistics/logistics", "pages/logistics/logistics",
"pages/extendProduct/extendProduct", "pages/extendProduct/extendProduct",
"pages/pointList/pointList", "pages/pointList/pointList",
"pages/pointDetail/pointDetail" "pages/pointDetail/pointDetail",
"pages/shopping/home/home",
"pages/shopping/kpi/kpi",
"pages/shopping/welfare/welfare",
"pages/shopping/performance/performance"
], ],
"subPackages": [ "subPackages": [
{ {
...@@ -51,7 +55,8 @@ ...@@ -51,7 +55,8 @@
"pages/categoryPro/categoryPro", "pages/categoryPro/categoryPro",
"pages/plus/plus", "pages/plus/plus",
"pages/friendShareList/friendShareList", "pages/friendShareList/friendShareList",
"pages/goToHome/goToHome" "pages/goToHome/goToHome",
"pages/noPermission/noPermission"
] ]
}, },
{ {
...@@ -67,6 +72,30 @@ ...@@ -67,6 +72,30 @@
"usingComponents": { "usingComponents": {
"authorization-modal": "/component/authorization-modal/authorization-modal" "authorization-modal": "/component/authorization-modal/authorization-modal"
}, },
"tabBar": {
"custom": false,
"color": "#BBBBBB",
"selectedColor": "#333",
"backgroundColor": "#fff",
"list": [
{
"pagePath": "pages/shopping/home/home",
"text": "首页"
},
{
"pagePath": "pages/shopping/kpi/kpi",
"text": "KPI"
},
{
"pagePath": "pages/shopping/welfare/welfare",
"text": "福利"
},
{
"pagePath": "pages/shopping/performance/performance",
"text": "业绩"
}
]
},
"window": { "window": {
"backgroundTextStyle": "dark", "backgroundTextStyle": "dark",
"navigationBarBackgroundColor": "#fff", "navigationBarBackgroundColor": "#fff",
......
...@@ -98,13 +98,20 @@ ...@@ -98,13 +98,20 @@
margin: 18rpx 0; margin: 18rpx 0;
color: #FFF; color: #FFF;
text-align: center; text-align: center;
height: 200rpx; /* height: 200rpx; */
line-height: 200rpx; line-height: 200rpx;
border-radius: 15rpx; border-radius: 15rpx;
font-size: 36rpx; font-size: 36rpx;
font-weight: 700; font-weight: 700;
letter-spacing: 5rpx; letter-spacing: 5rpx;
cursor: pointer; cursor: pointer;
width: 690rpx;
height: 166rpx;
margin: 18rpx 0;
border-radius: 7rpx;
box-shadow: 0 0 40rpx 1rpx #ccc;
margin: 0 auto;
} }
.member-unActive-bgc { .member-unActive-bgc {
background-color: #02bb70; background-color: #02bb70;
......
// component/tabSort/tabSort.js
var app = getApp()
const wxService = require('../../utils/wxService')
const utils = require('../../utils/util')
Component({
/**
* 组件的属性列表
*/
properties: {
tabList:{
type: Array,
type: []
}
},
attached() {
console.log('----', this.data.tabList)
this.setData({
categoryList: this.data.tabList
})
},
/**
* 组件的初始数据
*/
data: {
categoryList:[],
currentTab: 0
},
/**
* 组件的方法列表
*/
methods: {
// _getUserInfo(res = {}) {
// wxService.nextTick(() => {
// this.triggerEvent('getAuth', res);
// })
// },
// handelToCart() {
// wxService.router(`/pages/cart/cart`)
// },
// // 设置tab active
// switchNav(event) {
// utilLink.currentLinkRouter(event, this)
// },
switchTab(event) {
var cur = event.currentTarget.dataset.current
this.setData({
currentTab: cur
})
}
}
})
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<!--component/tabSort/tabSort.wxml-->
<view class="tab-sort" wx:if="{{categoryList}}">
<!--<scroll-view scroll-x class="scroll-view_H" scroll-with-animation="{{true}}">-->
<block
wx:for="{{categoryList}}"
wx:for-index="idx"
wx:for-item="item"
wx:key="idx"
>
<view
class="scroll-view-item {{currentTab == idx ?'active':''}}"
bindtap="switchTab"
data-current="{{idx}}"
>
{{item.title}}
</view>
</block>
<!--</scroll-view>-->
</view>
/* component/tabSort/tabSort.wxss */
/* @import '/base/base.wxss'; */
.tab-sort {
display: flex;
white-space: nowrap;
justify-content: center;
box-sizing: border-box;
height: 65rpx;
line-height: 65rpx;
background:linear-gradient(90deg,#0091ff 0%,#20a4f7 100%);
}
.scroll-view_H {
width: 100%;
height: 100%;
}
.scroll-view-item {
display: inline-block;
text-align: center;
color: #FFF;
font-size: 22rpx;
width: 126rpx;
/* height: 37rpx; */
/* margin-top: 18rpx; */
}
.active {
/* width: 126rpx;
height: 37rpx; */
color: rgba(0, 145, 255, 1);
background-color: rgba(255, 255, 255, 1);
/* border-radius: 17rpx; */
}
...@@ -65,7 +65,8 @@ wxService.page({ ...@@ -65,7 +65,8 @@ wxService.page({
}) })
}, },
handelReLogin(){ handelReLogin(){
wx.login({ const currentEnv = wx.getStorageSync('_qyWeChat')
currentEnv? wx.qy.login : wx.login({
success: (res) => { success: (res) => {
wx.setStorageSync('_loginCode', res.code) wx.setStorageSync('_loginCode', res.code)
if(res.code){ if(res.code){
......
...@@ -76,10 +76,11 @@ wxService.page({ ...@@ -76,10 +76,11 @@ wxService.page({
}, },
// 消费详情 // 消费详情
handleGoDetail(e) { handleGoDetail(e) {
const {memberid,expandinfo} = e.currentTarget.dataset const {memberId,
expandInfo} = e.currentTarget.dataset
// orderNo 存在 跳转订单详情 // orderNo 存在 跳转订单详情
if(expandinfo && expandinfo.orderNo){ if(expandInfo && expandInfo.orderNo){
let orderNo = expandinfo.orderNo let orderNo = expandInfo.orderNo
wxService.router(`/pages/consumptionDetails/consumptionDetails`).search({orderNo}) wxService.router(`/pages/consumptionDetails/consumptionDetails`).search({orderNo})
} }
}, },
......
// pages/home/home.js
const wxService = require('../../../utils/wxService')
wxService.page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
\ No newline at end of file
{
"usingComponents": {}
}
\ No newline at end of file
<!--pages/home/home.wxml-->
<text>pages/home/home.wxml</text>
/* pages/home/home.wxss */
@import '/base/base.wxss';
\ No newline at end of file
// pages/kpi/kpi.js
const wxService = require('../../../utils/wxService')
wxService.page({
/**
* 页面的初始数据
*/
data: {
tabList: [
{
title: '销售任务',
},
{
title: '招募任务',
},
{
title: '内容任务',
},
{
title: '维护任务',
}
]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
\ No newline at end of file
{
"navigationBarTitleText": "KPI",
"usingComponents": { "tab-shop": "/component/tabBarShop/tabBarShop"}
}
\ No newline at end of file
<!--pages/kpi/kpi.wxml-->
<tab-shop tab-list="{{tabList}}"/>
/* pages/kpi/kpi.wxss */
@import '/base/base.wxss';
\ No newline at end of file
// pages/performance/performance.js
const wxService = require('../../../utils/wxService')
wxService.page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
\ No newline at end of file
{
"usingComponents": {}
}
\ No newline at end of file
<!--pages/performance/performance.wxml-->
<text>pages/performance/performance.wxml</text>
/* pages/performance/performance.wxss */
@import '/base/base.wxss';
\ No newline at end of file
// pages/welfare/welfare.js
const wxService = require('../../../utils/wxService')
wxService.page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
\ No newline at end of file
{
"usingComponents": {}
}
\ No newline at end of file
<!--pages/welfare/welfare.wxml-->
<text>pages/welfare/welfare.wxml</text>
/* pages/welfare/welfare.wxss */
@import '/base/base.wxss';
\ No newline at end of file
...@@ -39,7 +39,11 @@ ...@@ -39,7 +39,11 @@
"list": [] "list": []
}, },
"miniprogram": { "miniprogram": {
<<<<<<< HEAD
"current": 48, "current": 48,
=======
"current": 47,
>>>>>>> c83b62caec0d0a537ed00897a92dbece954243d9
"list": [ "list": [
{ {
"id": -1, "id": -1,
...@@ -343,6 +347,7 @@ ...@@ -343,6 +347,7 @@
"scene": null "scene": null
}, },
{ {
<<<<<<< HEAD
"id": -1, "id": -1,
"name": "导购首页", "name": "导购首页",
"pathName": "shoppingGuid/page/pages/home/home", "pathName": "shoppingGuid/page/pages/home/home",
...@@ -365,6 +370,27 @@ ...@@ -365,6 +370,27 @@
"name": "福利", "name": "福利",
"pathName": "shoppingGuid/page/pages/welfare/welfare", "pathName": "shoppingGuid/page/pages/welfare/welfare",
"query": "" "query": ""
=======
"id": 45,
"name": "导购",
"pathName": "pages/shopping/home/home",
"query": "",
"scene": null
},
{
"id": -1,
"name": "导购无权限",
"pathName": "subPackage/page/pages/noPermission/noPermission",
"query": "",
"scene": null
},
{
"id": -1,
"name": "kpi",
"pathName": "pages/shopping/kpi/kpi",
"query": "",
"scene": null
>>>>>>> c83b62caec0d0a537ed00897a92dbece954243d9
} }
] ]
} }
......
// subPackage/page/pages/noPermission/noPermission.js
const wxService = require('../../../../utils/wxService')
let intervalid;
wxService.page({
/**
* 页面的初始数据
*/
data: {
num: 3
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function () {
this.countdown()
},
countdown(){
const { num } = this.data
if (num <= 0) {
clearInterval(intervalid)
return
}
intervalid = setTimeout(() => {
this.setData({
num: num - 1
},()=>{
this.countdown();
this.goMall()
});
}, 1000)
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
goMall() {
clearInterval(intervalid)
wxService.router(`/pages/userCenter/userCenter`).replace()
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
clearTimeout(intervalid)
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
\ No newline at end of file
{
"navigationBarTitleText": ""
}
\ No newline at end of file
<!--subPackage/page/pages/noPermission/noPermission.wxml-->
<view class="no-permission df">
<view class="permission-view">
<image class="permission-img" mode="widthFix" src="/assets/imgs/shop/no_permission.png"></image>
<view class="permission-tips">
<view>您还不是导购身份哦~</view>
<view>无法访问当前页面</view>
</view>
<view class="permission-num"><span class="num">{{num}}</span>秒后返回商城首页</view>
<view class="go-mall" bindtap="goMall">立即返回商城</view>
</view>
</view>
\ No newline at end of file
/* subPackage/page/pages/noPermission/noPermission.wxss */
@import '/base/base.wxss';
.no-permission {
text-align: center;
}
.permission-view {
padding-top: 156rpx;
}
.permission-img {
width: 179rpx;
height: 179rpx;
}
.permission-tips {
padding-top: 82rpx;
color: rgba(51, 51, 51, 1);
font-size: 32rpx;
}
.permission-num {
padding: 216rpx 0 27rpx 0;
font-size: 26rpx;
color: #ccc;
}
.num {
color: rgba(224, 32, 32, 1);
}
.go-mall {
width: 550rpx;
height: 94rpx;
line-height: 94rpx;
border-radius: 6rpx;
background-color: rgba(0, 145, 255, 1);
color: rgba(255, 255, 255, 1);
font-size: 36rpx;
text-align: left;
text-align: center;
}
...@@ -62,31 +62,31 @@ class WXService extends Http { ...@@ -62,31 +62,31 @@ class WXService extends Http {
}).catch(res => { }).catch(res => {
if (res.msg && res.msg.indexOf('未登录') > -1) { if (res.msg && res.msg.indexOf('未登录') > -1) {
wx.removeStorageSync('_baseUserInfo') wx.removeStorageSync('_baseUserInfo')
// if (!this.getUserInfoLimitCount) { // if (!this.getUserInfoLimitCount) {
// this.getUserInfoLimitCount = 1 // this.getUserInfoLimitCount = 1
// } else { // } else {
// this.getUserInfoLimitCount++ // this.getUserInfoLimitCount++
// } // }
// console.log('count', this.getUserInfoLimitCount) // console.log('count', this.getUserInfoLimitCount)
// if (this.getUserInfoLimitCount > 3) { // if (this.getUserInfoLimitCount > 3) {
// wx.showToast({ // wx.showToast({
// title: '会员系统异常,请联系管理员', // title: '会员系统异常,请联系管理员',
// icon: 'none', // icon: 'none',
// duration: 2000 // duration: 2000
// }) // })
// } else { // } else {
// // 重新登陆之前判断是否登陆过 重新登陆 // // 重新登陆之前判断是否登陆过 重新登陆
// const baseUserInfo = this.getBaseUserInfo() // const baseUserInfo = this.getBaseUserInfo()
// if (baseUserInfo) { // if (baseUserInfo) {
// // this.reLogin() // // this.reLogin()
// return false // return false
// } // }
// } // }
} else } else
if (res.msg && res.msg.indexOf('请重新授权') > -1) { if (res.msg && res.msg.indexOf('请重新授权') > -1) {
wx.setStorageSync('reLoginErr', true) wx.setStorageSync('reLoginErr', true)
wxService.router(`/pages/userCenter/userCenter`).back() wxService.router(`/pages/userCenter/userCenter`).back()
} }
}) })
} }
...@@ -140,7 +140,7 @@ class WXService extends Http { ...@@ -140,7 +140,7 @@ class WXService extends Http {
let dataResp = response.data.data let dataResp = response.data.data
wx.setStorageSync('token', dataResp.token) wx.setStorageSync('token', dataResp.token)
wx.setStorageSync('_baseUserInfo', dataResp) wx.setStorageSync('_baseUserInfo', dataResp)
return Promise.resolve({ return Promise.resolve({
response response
}) })
...@@ -160,8 +160,11 @@ class WXService extends Http { ...@@ -160,8 +160,11 @@ class WXService extends Http {
} }
login() { login() {
const currentEnv = wx.getStorageSync('_qyWeChat')
console.log('全局', currentEnv)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
wx.login({ // 企业 wx.qy.login
currentEnv ? wx.qy.login : wx.login({
success: (res) => { success: (res) => {
resolve(res) resolve(res)
wx.setStorageSync('_loginCode', res.code) wx.setStorageSync('_loginCode', res.code)
...@@ -400,7 +403,7 @@ class WXService extends Http { ...@@ -400,7 +403,7 @@ class WXService extends Http {
if (item.hasOwnProperty(data)) { if (item.hasOwnProperty(data)) {
currentPaths = item[data] currentPaths = item[data]
} else { } else {
} }
}) })
return Promise.resolve({ currentPaths }) return Promise.resolve({ currentPaths })
...@@ -448,11 +451,11 @@ class WXService extends Http { ...@@ -448,11 +451,11 @@ class WXService extends Http {
'/pages/pointList/pointList', '/pages/pointList/pointList',
'/subPackage/page/pages/friendShareList/friendShareList', '/subPackage/page/pages/friendShareList/friendShareList',
] ]
return new Promise((resolve,reject) => { return new Promise((resolve, reject) => {
if(NoLoginAuthPage.indexOf(page) > -1) { if (NoLoginAuthPage.indexOf(page) > -1) {
resolve({needAuth : false}) resolve({ needAuth: false })
} else { } else {
resolve({needAuth : true}) resolve({ needAuth: true })
} }
}).catch((err) => { }).catch((err) => {
console.log('不需要登录err', err) console.log('不需要登录err', err)
...@@ -560,13 +563,13 @@ class WXService extends Http { ...@@ -560,13 +563,13 @@ class WXService extends Http {
item['id'] = Integer.digit(item['i'], 64, 10); item['id'] = Integer.digit(item['i'], 64, 10);
} }
} }
if(item['m']){ if (item['m']) {
item['memberId'] = Integer.digit(item['m'], 64, 10); item['memberId'] = Integer.digit(item['m'], 64, 10);
if (item['i']) { if (item['i']) {
item['id'] = Integer.digit(item['i'], 64, 10); item['id'] = Integer.digit(item['i'], 64, 10);
} }
} }
if(item['scene']){ if (item['scene']) {
let idParam = decodeURIComponent(item['scene']).split('&')[0] let idParam = decodeURIComponent(item['scene']).split('&')[0]
let shareId = idParam && idParam.split('=')[1] || 0 let shareId = idParam && idParam.split('=')[1] || 0
item['id'] = Integer.digit(shareId, 64, 10) item['id'] = Integer.digit(shareId, 64, 10)
...@@ -596,19 +599,19 @@ class WXService extends Http { ...@@ -596,19 +599,19 @@ class WXService extends Http {
const baseUserInfo = wx.getStorageSync('_baseUserInfo') const baseUserInfo = wx.getStorageSync('_baseUserInfo')
const premiumExpireTime = baseUserInfo && baseUserInfo.member && baseUserInfo.member.premiumExpireTime || '' const premiumExpireTime = baseUserInfo && baseUserInfo.member && baseUserInfo.member.premiumExpireTime || ''
wx.setStorageSync('_premiumExpireTime', premiumExpireTime) wx.setStorageSync('_premiumExpireTime', premiumExpireTime)
const premiumExpireStorage = wx.getStorageSync('_premiumExpireTime') const premiumExpireStorage = wx.getStorageSync('_premiumExpireTime')
// ios 兼容 是不是plus vip // ios 兼容 是不是plus vip
let currentEndTime = (new Date(premiumExpireStorage.replace(/-/g, '/'))).getTime(); // 到期时间 let currentEndTime = (new Date(premiumExpireStorage.replace(/-/g, '/'))).getTime(); // 到期时间
let currentTime = (new Date()).getTime(); let currentTime = (new Date()).getTime();
let vipFlag = currentTime <= currentEndTime ? true : false // 当前时间 < 到期时间为vip let vipFlag = currentTime <= currentEndTime ? true : false // 当前时间 < 到期时间为vip
console.log('premiumExpireStorage', premiumExpireStorage) console.log('premiumExpireStorage', premiumExpireStorage)
console.log('当前时间 < 到期时间为vip',vipFlag) console.log('当前时间 < 到期时间为vip', vipFlag)
if (baseUserInfo) { if (baseUserInfo) {
page.setData({ page.setData({
currentHasUserInfo: true, currentHasUserInfo: true,
isVip: vipFlag isVip: vipFlag
},()=>{ }, () => {
_self.trialList().then(res => { _self.trialList().then(res => {
if (!res) return false if (!res) return false
const { currentPaths } = res const { currentPaths } = res
...@@ -675,13 +678,13 @@ class WXService extends Http { ...@@ -675,13 +678,13 @@ class WXService extends Http {
_self.getAuthUserInfo(res.detail) _self.getAuthUserInfo(res.detail)
}, },
//处理分享页面打开时参数为memberId时生成触点对象信息 //处理分享页面打开时参数为memberId时生成触点对象信息
generatePointObject(tentacleInfo){ generatePointObject(tentacleInfo) {
console.log('---call 生成触点接口----') console.log('---call 生成触点接口----')
console.log(tentacleInfo) console.log(tentacleInfo)
_self.getTentacleContent(tentacleInfo).then(res => { _self.getTentacleContent(tentacleInfo).then(res => {
console.log('-----处理分享页面打开时参数为memberId时生成触点对象信息------') console.log('-----处理分享页面打开时参数为memberId时生成触点对象信息------')
console.log('-----成功返回是------',res); console.log('-----成功返回是------', res);
if (res && res.tentacleId) { if (res && res.tentacleId) {
let data = res; let data = res;
let TENTACLE_CONTENT = { let TENTACLE_CONTENT = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment