card-mini/packagecard/moments/momentsdetail/momentsdetail.js
2021-09-15 10:15:17 +08:00

923 lines
31 KiB
JavaScript

const app = getApp()
var innerAudioContext = wx.createInnerAudioContext()
Page({
data: {
dataList: [],
speedStep: 5, //快进快退秒数
waitFlag: false,
avatarUrl: app.globalData.userInfo.avatarUrl,
imgUrl: app.urls.baseImgUrl,
uId: '',
columnId: '',
publishTime: '',
isShowComment: false, //是否显示评论输入框
maxVideo: 1, //评论最大可以上传的视频数量
maxPhoto: 1, //评论最大可以上传的图片数量
commentValue: '', //评论输入的内容
mediaBean: null, //评论图片或视频bean {id:'',type:'video or image',coverPath:'图片路径'}
uploadCount: 0, //上传图片的次数
uploadVideoCount: 0, //上传视频的次数
maxDuration: 60, //上传视频时长限制
dataId: '', //当前评论Id
commentList: [], //评论列表
commentCount: 0,
currentPage: 1, //当前评论页数
curUserId: app.globalData.currentUserId
},
onLoad(options) {
var _self = this
this.setData({
uId: options.uId,
columnId: options.cId,
dataId: options.uId
})
_self.getMainMoment()
_self.getCommentList()
},
// 获取栏目内容
getMainMoment() {
wx.showLoading({
title: '加载中...',
})
var _self = this
app.http.get(app.urls.getMomentsContent.format({
configColumnId: _self.data.columnId,
uid: _self.data.uId
}), {
header: {
token: app.globalData.token
}
})
.then(res => {
wx.hideLoading({})
//构建数据
_self.buildDetail(res.data)
})
.catch(err => {
wx.hideLoading({})
console.log(err)
})
},
//构建展示数据
buildDetail(data) {
var _self = this
_self.setData({
publishTime: data.gmtCreate
})
data.list.forEach(it => {
switch (it.dataType) {
case '2': //图片
var items = it.value.split(',')
var tempList = []
items.forEach(item => {
if (item.length > 0) {
var tempItem = {
id: item,
path: app.urls.baseImgUrl + item,
}
tempList.push(tempItem)
}
})
it.valueList = tempList
break
case '4': //视频
var items = it.value.split(',')
var tempList = []
for (var i = 0; i < items.length; i++) {
if (items[i].length > 0) {
var ss = items[i].split('&')
var videoUrl = app.urls.baseImgUrl + ss[0]
var imgUrl = app.urls.baseImgUrl + ss[1]
var tempItem = {
path: videoUrl,
imgPath: imgUrl
}
tempList.push(tempItem)
}
}
it.valueList = tempList
break
case '3': //音频
var items = it.value.split(',')
var tempList = []
items.forEach(item => {
if (item.length > 0) {
var ss = item.split('&')
var totalStr = '00:00'
if (ss.length > 1) {
var dur = ss[1]
var tM = parseInt(dur / 60) //分钟
var tS = parseInt(dur % 60) //秒
var totalMStr = tM > 9 ? tM : '0' + tM
var totalSStr = +tS > 9 ? tS : '0' + tS
totalStr = totalMStr + ':' + totalSStr
}
var tempItem = {
id: ss[0], //id
path: app.urls.baseImgUrl + ss[0], //地址
isPlay: false, //是否播放中
duration: 100, //时长
curDuation: 0,
curDurationStr: '00:00',
totalDurationStr: totalStr
}
tempList.push(tempItem)
}
})
it.valueList = tempList
break
case '6': //定位
var items = it.value.split('-')
var tempList = []
items.forEach(item => {
if (item.length > 0) {
var latlng = item.split(',')
var tempItem = {
name: '',
address: '',
latitude: latlng[0],
longitude: latlng[1],
}
tempList.push(tempItem)
}
})
it.valueList = tempList
break
case '8': //单选
it.dictionariesList.forEach(ss => {
if (it.value.indexOf(ss.dataId) != -1) {
it.selValue = ss.dataName
}
})
break
case '9':
var selValue = ''
it.dictionariesList.forEach(ss => {
if (it.value.indexOf(ss.dataId) != -1) {
selValue += ss.dataName + ','
ss.isSel = true
} else {
ss.isSel = false
}
})
selValue = selValue.substr(0, selValue.length - 1)
it.selValue = selValue
break
}
})
_self.setData({
dataList: data.list
})
},
//获取评论列表
getCommentList() {
var _self = this
app.http.get(app.urls.getCommentList.format({
projectId: 'column',
businessId: _self.data.dataId
}), {
header: {
token: app.globalData.token
},
data: {
page: _self.data.currentPage
}
})
.then(res => {
_self.data.commentList = _self.data.commentList.concat(res.data.rows)
_self.setData({
commentList: _self.data.commentList,
commentCount: res.data.total
})
})
.catch(err => {
console.log(res)
})
},
//预览图片
viewImg(e) {
wx.previewImage({
urls: [e.currentTarget.dataset.url],
})
},
//预览视频
viewVideo(e) {
var url = e.currentTarget.dataset.url
wx.previewMedia({
sources: [{
url: url,
type: 'video'
}],
})
},
play(e) {
//进行播放
const _self = this
const index = e.currentTarget.dataset.index
const ix = e.currentTarget.dataset.i
const a = e.currentTarget.dataset.a
var audio = e.currentTarget.dataset.item
//先需要停止其他录音文件的播放
_self.data.dataList.forEach(it => {
it.list.forEach(item => {
if (item.dataType == '3') {
if (item.valueList) {
item.valueList.forEach(ii => {
if (ii.isPlay) {
innerAudioContext.stop()
}
ii.isPlay = false
ii.curDuration = 0
ii.curDuationStr = '00:00'
})
}
}
})
})
if (!audio.isPlay) {
innerAudioContext = wx.createInnerAudioContext()
innerAudioContext.src = _self.data.dataList[index].list[ix].valueList[a].path + '.mp3'
innerAudioContext.autoplay = true
console.log(_self.data.dataList[index].list[ix].valueList[a].path)
} else {
innerAudioContext.stop()
}
innerAudioContext.onPlay(() => {
console.log('onPlay')
_self.data.dataList[index].list[ix].valueList[a]['isPlay'] = true
_self.setData({
dataList: _self.data.dataList
})
});
innerAudioContext.onCanplay((res) => {
// if (_self.data.waitFlag) {
// innerAudioContext.play()
// _self.setData({
// waitFlag: false
// })
// }
})
innerAudioContext.onStop((res) => {
console.log('停止播放')
_self.data.dataList[index].list[ix].valueList[a].isPlay = false
_self.data.dataList[index].list[ix].valueList[a].curDuration = 0
_self.data.dataList[index].list[ix].valueList[a].curDurationStr = '00:00'
_self.setData({
dataList: _self.data.dataList,
})
innerAudioContext.destroy()
})
innerAudioContext.onEnded((res) => {
console.log(res)
console.log('播放完毕')
_self.data.dataList[index].list[ix].valueList[a].isPlay = false
_self.data.dataList[index].list[ix].valueList[a].curDuration = 0
_self.data.dataList[index].list[ix].valueList[a].curDurationStr = '00:00'
_self.setData({
dataList: _self.data.dataList,
})
innerAudioContext.destroy()
})
innerAudioContext.onError((res) => {
console.log('播放错误')
console.log(res)
_self.data.dataList[index].list[ix].valueList[a].isPlay = false
_self.data.dataList[index].list[ix].valueList[a].curDuration = 0
_self.data.dataList[index].list[ix].valueList[a].curDurationStr = '00:00'
_self.setData({
dataList: _self.data.dataList,
})
innerAudioContext.destroy()
})
innerAudioContext.onSeeking(() => {
// console.log(innerAudioContext.currentTime)
})
innerAudioContext.onWaiting(() => {
// console.log('onWaiting')
// innerAudioContext.pause()
// _self.setData({
// waitFlag: true
// })
})
innerAudioContext.onTimeUpdate(() => {
if (innerAudioContext.duration != Infinity) {
_self.data.dataList[index].list[ix].valueList[a].curDuration = parseInt(innerAudioContext.currentTime)
_self.data.dataList[index].list[ix].valueList[a].duration = parseInt(innerAudioContext.duration)
var curM = parseInt(innerAudioContext.currentTime / 60) //分钟
var curS = parseInt(innerAudioContext.currentTime % 60) //秒
var tM = parseInt(innerAudioContext.duration / 60) //分钟
var tS = parseInt(innerAudioContext.duration % 60) //秒
var curMStr = curM > 9 ? curM : '0' + curM
var curSStr = curS > 9 ? curS : '0' + curS
var totalMStr = tM > 9 ? tM : '0' + tM
var totalSStr = +tS > 9 ? tS : '0' + tS
_self.data.dataList[index].list[ix].valueList[a].curDurationStr = curMStr + ':' + curSStr
_self.data.dataList[index].list[ix].valueList[a].totalDurationStr = totalMStr + ':' + totalSStr
_self.setData({
dataList: _self.data.dataList
})
}
})
},
//倒退5秒
rewind(e) {
var _self = this
var index = e.currentTarget.dataset.index
var item = e.currentTarget.dataset.item
var idx = e.currentTarget.dataset.idx
var a = e.currentTarget.dataset.a
var ix = e.currentTarget.dataset.i
if (item.isPlay) {
_self.data.dataList[index].list[ix].valueList[a].curDuration = _self.data.dataList[index].list[ix].valueList[a].curDuration - _self.data.speedStep
innerAudioContext.seek(_self.data.dataList[index].list[ix].valueList[a].curDuration)
_self.setData({
dataList: _self.data.dataList
})
}
},
//快进5秒
speed(e) {
var _self = this
var index = e.currentTarget.dataset.index
var item = e.currentTarget.dataset.item
var idx = e.currentTarget.dataset.idx
var a = e.currentTarget.dataset.a
var ix = e.currentTarget.dataset.i
if (item.isPlay) {
_self.data.dataList[index].list[ix].valueList[a].curDuration = _self.data.dataList[index].list[ix].valueList[a].curDuration + _self.data.speedStep
innerAudioContext.seek(_self.data.dataList[index].list[ix].valueList[a].curDuration)
_self.setData({
dataList: _self.data.dataList
})
}
},
slider4change(e) {
var index = e.currentTarget.dataset.index
var item = e.currentTarget.dataset.item
if (item.isPlay) {
innerAudioContext.seek(e.detail.value)
}
},
// 跳转模板列表
goList: function () {
wx.navigateTo({
url: 'packagecard/cardList/cardList',
})
},
// 获取个人简介
getPersonIntro: function () {
var self = this
app.restAjax.get(app.restAjax.path('{personIntroUrl}app/userexpand/get/' + app.globalData.userInfo.userId, [app.personIntroUrl]), {}, {
headers: {
token: app.globalData.token
}
}, function (code, data) {
self.setData({
personIntro: data
})
}, function (code, data) {
app.dialog.msg(data.msg);
});
},
// 获取用户信息
getUserInfo: function () {
var self = this
app.restAjax.get(app.restAjax.path('{loginUrl}app/user/get-app-user', [app.personIntroUrl]), {}, {
headers: {
token: app.globalData.token
}
}, function (code, data) {
app.globalData.userInfo = data
self.getList()
}, function (code, data) {
app.dialog.msg(data.msg);
});
},
// 获取默认名片
getDefault: function () {
var self = this
app.http.get(app.urls.getDefaultCard, {
header: {
token: app.globalData.token
},
data: {}
}).then(res => {
var area = res.data.areaList
for (let i = 0; i < area.length; i++) {
if (area[i].templateAreaFontCenter == '1') {
area[i].templateAreaFontCenter = 'left'
} else if (area[i].templateAreaFontCenter == '2') {
area[i].templateAreaFontCenter = 'center'
} else {
area[i].templateAreaFontCenter = 'right'
}
if (area[i].templateAreaFontBold == '0') {
area[i].templateAreaFontBold = 'normal'
} else if (area[i].templateAreaFontBold == '1') {
area[i].templateAreaFontBold = 'bold'
} else {
area[i]['templateAreaFontStyle'] = 'italic'
}
if (area[i].templateAreaSource == 'phone') {
self.setData({
phoneTxt: area[i].templateAreaFontValue
})
} else if (area[i].templateAreaSource == 'wechat') {
self.setData({
wechatTxt: area[i].templateAreaFontValue
})
} else if (area[i].templateAreaSource == 'email') {
self.setData({
emailTxt: area[i].templateAreaFontValue
})
} else if (area[i].templateAreaSource == 'address') {
self.setData({
addressTxt: area[i].templateAreaFontValue
})
} else if (area[i].templateAreaSource == 'name') {
self.setData({
nameTxt: area[i].templateAreaFontValue
})
}
}
self.setData({
cardInfo: res.data,
areaList: area,
dataList: []
})
if (res.data) {
self.toSaveLocalImg(res.data.cardTemplateUseDispatchPhoto)
self.getBrowCardUserList(res.data.cardTemplateUseId)
self.getMainColumn(res.data.creator)
}
}).catch(res => {
})
},
//获取浏览当前名片的用户头像列表
getBrowCardUserList(id) {
var _self = this
app.http.get(app.urls.getCardBrowUserList, {
header: {
token: app.globalData.token
},
data: {
page: '1',
rows: '7',
cardTemplateUseId: id
}
})
.then(res => {
if (res.data) {
_self.setData({
browUserList: res.data.rows
})
}
})
.catch(err => {
console.log(err)
})
},
// 存入通讯录
addContact: function () {
var self = this
wx.addPhoneContact({
firstName: self.data.nameTxt,
mobilePhoneNumber: self.data.phoneNum
})
},
// 加入卡包
includedCard: function () {
var self = this
app.http.post(app.urls.includedCard, {
header: {
token: self.data.token
},
data: {
cardTemplateUseBagId: "",
cardTemplateUseId: self.data.cardInfo.cardTemplateUseId,
cardTemplateUseStar: "",
cardTemplateUseTag: "",
cardTemplateUseTop: ""
}
}).then(res => {
console.log(res.data)
if (res.statusCode == '200') {
wx.showToast({
title: '加入卡包成功!',
})
}
})
},
// 拨打电话
makeCall: function () {
var self = this
var phone = self.data.phoneTxt
if (phone) {
wx.makePhoneCall({
phoneNumber: phone,
})
}
},
// 获取浏览数
getViewCount: function () {
var self = this
app.restAjax.get(app.restAjax.path('{cardUrl}app/templateviewrecord/getByTemplateUseId/' + self.data.cardInfo.cardPersonId, [app.cardUrl]), {}, {
headers: {
token: app.globalData.token
}
}, function (code, data) {
self.setData({
viewInfo: data
})
}, function (code, data) {
if (data.msg) {
app.dialog.msg(data.msg);
}
});
},
// 获取转发数
getForwardCount: function () {
var self = this
app.restAjax.get(app.restAjax.path('{cardUrl}app/templateforwardingrecord/count', [app.cardUrl]), {
templateUseId: self.data.cardInfo.cardPersonId
}, {
headers: {
token: app.globalData.token
}
}, function (code, data) {
self.setData({
forwardCount: data.data
})
}, function (code, data) {
app.dialog.msg(data.msg);
});
},
// 复制文本
copyText: function (e) {
var self = this
var text = e.currentTarget.dataset.text
if (text) {
wx.setClipboardData({
data: text,
success: function () {}
})
}
},
// 获取头像
checkPermission() {
var _self = this
try {
var names = wx.getStorageSync('name')
var icon = wx.getStorageSync('userIcon')
if (names) {
this.setData({
name: names,
userIcon: icon
})
} else {
wx.showModal({
title: '提示',
content: '小程序需要您微信头像以及昵称用于展示,请授权.',
showCancel: false,
success(res) {
if (res.confirm) {
_self.getUserProfile(3)
}
}
})
}
} catch (error) {
wx.showToast({
title: '获取信息失败',
icon: 'error'
})
}
},
getUserProfile(e) {
let _self = this
wx.getUserProfile({
desc: '获取微信头像以及昵称用于展示',
success: (res) => {
wx.setStorage({
data: res.userInfo.nickName,
key: 'name',
})
wx.setStorage({
data: res.userInfo.avatarUrl,
key: 'userIcon',
})
_self.setData({
name: res.userInfo.nickName,
userIcon: res.userInfo.avatarUrl
})
app.globalData.userIcon = res.userInfo.avatarUrl
app.globalData.userInfo = res.userInfo
_self.selectComponent('#head').refreshCart()
},
fail(err) {
//判断是否绑定手机号
wx.showToast({
title: '获取个人信息失败',
icon: 'error',
})
}
})
},
// 生成随机id
buildId: function () {
var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
var nums = "";
for (var i = 0; i < 36; i++) {
var id = parseInt(Math.random() * 61);
nums += chars[id];
}
return nums
},
// 展示名片码
showBarCode: function () {
this.setData({
isShowBarCode: true
})
wx.hideTabBar()
},
// 隐藏名片码
hideBarCode: function () {
this.setData({
isShowBarCode: false
})
wx.showTabBar()
},
// 转发记录
shareRecord: function (cardTemplateDispatchId) {
var self = this
app.http.post(app.urls.shareRecord, {
header: {
token: app.globalData.token
},
data: {
cardTemplateUseId: self.data.cardInfo.cardTemplateUseId,
cardTemplateDispatchParentId: '',
cardTemplateDispatchId: cardTemplateDispatchId
}
}).then(res => {
console.log(res.data)
self.setData({
shareRecordId: res.data.data
})
})
},
/**
* 用户点击右上角分享
*/
// onShareAppMessage: function (res) {
// console.log(res)
// var self = this
// wx.showShareMenu({
// withShareTicket: true,
// success: function (res) {
// console.log(res)
// }
// })
// if (res.from == 'button') {
// var postId = self.buildId()
// self.shareRecord(postId)
// var param = '/pages/sharePage/sharePage?cardTemplateDispatchId=' + postId;
// return {
// title: '名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享',
// path: param,
// imageUrl: self.data.shareImgUrl
// }
// // return返回 title 转发标题 path 路径 imageUrl 自定义图片,可以本地路径 代码包文件路径 支持png jpg 显示长宽比5:4
// }
// },
inputWatch(e) {
this.setData({
commentValue: e.detail.value
})
},
delMedia() {
var _self = this
wx.showModal({
title: '警告',
content: '确定要删除该数据吗?',
success(res) {
if (res.confirm) {
_self.setData({
mediaBean: null
})
}
}
})
},
//删除评论
delComment(e) {
var _self = this
var id = e.currentTarget.dataset.id
wx.showModal({
title: '提示',
content: '确定要删除该评论吗?',
success(res) {
if (res.confirm) {
//删除评论,刷新列表
}
}
})
},
//点赞
doLike(e) {
},
//评论的评论
doCommentToComment(e) {
var id = e.currentTarget.dataset.id
var count = e.currentTarget.dataset.count
},
//显示评论输入框
showComment() {
this.setData({
isShowComment: true
})
},
//关闭评论输入框
onCloseDialog(e) {
this.setData({
isShowComment: false
})
},
//选择图片
chooseImg() {
var _self = this
wx.chooseImage({
count: _self.data.maxPhoto,
sourceType: ['album', 'camera'],
success: (res) => {
if (res.tempFilePaths.length > 0) {
_self.doUploadImg(res.tempFilePaths)
}
},
fail: (err) => {
}
})
},
doUploadImg(paths) {
wx.showLoading({
title: '上传中...',
})
let _self = this
app.http.upload(app.urls.doUploadImg, {
path: paths[0],
name: 'image',
header: {
token: app.globalData.token
}
})
.then(res => {
wx.hideLoading({})
//插入到集合中
var id = JSON.parse(res).data
var pathStr = app.urls.baseImgUrl + id
var item = {
id: id,
type: 'image',
coverPath: pathStr,
path: pathStr
}
_self.setData({
mediaBean: item
})
})
.catch(err => {
wx.hideLoading({})
_self.setData({
mediaBean: null
})
})
},
//选择视频
chooseVideo() {
var _self = this
wx.chooseMedia({
count: _self.data.maxVideo,
mediaType: ['video'],
sourceType: ['camera', 'album'],
maxDuration: 60,
success: (res) => {
console.log(res)
if (res.tempFiles.length > 0) {
if (res.tempFiles[0].duration <= _self.data.maxDuration) {
_self.doUploadVideo(res.tempFiles)
} else {
wx.showToast({
title: '视频最长60秒',
icon: 'none'
})
}
}
},
fail: (err) => {}
})
},
//上传视频
doUploadVideo(paths) {
wx.showLoading({
title: '上传中...',
})
let _self = this
app.http.upload(app.urls.doUploadVideo, {
path: paths[0].tempFilePath,
name: 'video',
header: {
token: app.globalData.token
}
})
.then(res => {
wx.hideLoading({})
var id = JSON.parse(res).data
var pathStr = app.urls.baseImgUrl + id
var item = {
id: id,
type: 'video',
coverPath: paths[0].thumbTempFilePath,
path: pathStr
}
_self.setData({
mediaBean: item
})
})
.catch(err => {
wx.hideLoading({})
_self.setData({
mediaBean: null
})
})
},
//校验评论参数
doSubmitComment(e) {
var _self = this
console.log(e)
var id = e.currentTarget.dataset.id
if (_self.data.commentValue.length > 0) {
_self.doSaveComment(id)
} else {
wx.showToast({
title: '请输入要发布的内容',
icon: 'none'
})
}
},
//保存评论
doSaveComment(id) {
var _self = this
wx.showLoading({
title: '保存中...',
})
app.http.post(app.urls.doSaveComment, {
header: {
token: app.globalData.token
},
data: {
businessId: id,
projectId: 'column',
contentCommentContent: _self.data.commentValue
}
})
.then(res => {
wx.hideLoading({})
wx.showToast({
title: '评论成功',
})
_self.setData({
commentValue: '',
isShowComment: false,
currentPage: 1, //重置评论列表
commentList: [],
commentCount: 0
})
//刷新列表
_self.getCommentList()
})
.catch(err => {
wx.hideLoading({})
_self.setData({
isShowComment: false
})
})
},
})