495 lines
15 KiB
JavaScript
495 lines
15 KiB
JavaScript
// pages/sharePage/sharePage.js
|
||
import {req} from '../../utils/service';
|
||
import {URL} from '../../utils/config';
|
||
import {encrypt,randomNumber,isEmptyObject,getTimetamp,timeFormat,openSaveImageSetting} from "../../utils/util";
|
||
import {imageUrl} from '../../utils/image';
|
||
var QRCode = require('../../utils/qrcode.js');
|
||
let qrcode = null;
|
||
var datePicker = require('../../utils/dateSetting.js')
|
||
//设定当前的时间,将其设定为常量
|
||
const date = new Date();
|
||
const year = date.getFullYear();
|
||
const month = date.getMonth() + 1;
|
||
Page({
|
||
|
||
/**
|
||
* 页面的初始数据
|
||
*/
|
||
data: {
|
||
imageUrl,
|
||
shareShow:false,
|
||
timeShow:false,
|
||
downShow:false,
|
||
customTime: '',
|
||
multiArray: [],
|
||
multiIndex: [0, 0, 0, 0, 0],
|
||
choose_year: "",
|
||
sharePanel: [
|
||
{ name: '微信', icon: imageUrl.shareWechat, openType: 'share' },
|
||
{ name: '朋友圈', icon: imageUrl.shareWechatMoments },
|
||
{ name: '复制链接', icon: imageUrl.shareConnection },
|
||
{ name: '二维码', icon: imageUrl.shareQRcode }
|
||
],
|
||
timeArr:[
|
||
{
|
||
name:'7天',
|
||
},
|
||
{
|
||
name:'14天',
|
||
},
|
||
{
|
||
name:'永久有效',
|
||
},
|
||
{
|
||
name:'设定到期时间',
|
||
}
|
||
],
|
||
downArr:[
|
||
{
|
||
name:'不限制',
|
||
},
|
||
{
|
||
name:'禁止下载',
|
||
},
|
||
{
|
||
name:'自定义下载次数',
|
||
},
|
||
],
|
||
selectTimeIndex:2,
|
||
downIndex:0,
|
||
downNum:0,
|
||
moreShow:true,
|
||
isShare:0
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面加载
|
||
*/
|
||
onLoad: function (options) {
|
||
if(options.shareHash){
|
||
if(wx.getEnterOptionsSync().scene==1154){
|
||
this.setData({
|
||
isShare: 1,
|
||
})
|
||
}else if(wx.getEnterOptionsSync().scene==1155){
|
||
this.setData({
|
||
isShare: 2,
|
||
})
|
||
}
|
||
console.log(options.shareHash)
|
||
wx.redirectTo({
|
||
url:`/pages/link/link?shareHash=${encodeURIComponent(options.shareHash)}&DOMAIN=${options.DOMAIN}`
|
||
})
|
||
return
|
||
}
|
||
// let dataList = JSON.parse(decodeURIComponent(options.item))
|
||
let dataList = wx.getStorageSync('shareFile')
|
||
let DOMAIN = wx.getStorageSync("DOMAIN"),userID = wx.getStorageSync('userID'),
|
||
shareHash = encodeURIComponent(encrypt(dataList.sourceID+'&&'+userID)),
|
||
shareLink = DOMAIN+'/#/sharePage/'+shareHash
|
||
let years = [year]
|
||
for(var i = 0;i<100;i++){
|
||
years.push(year+i)
|
||
}
|
||
this.setData({
|
||
dataList:dataList,
|
||
shareHash,
|
||
shareLink,
|
||
title:dataList.name,
|
||
timeToText:'永久有效',
|
||
multiArray:
|
||
[
|
||
years,
|
||
datePicker.determineMonth(),
|
||
datePicker.determineDay(year, month),
|
||
datePicker.determineHour(),
|
||
datePicker.determineMinute()
|
||
],
|
||
customTime:this.timeFormat('yyyy-MM-dd hh:mm',Date.parse(new Date())),
|
||
shareLinkAllowGuest:wx.getStorageSync('options').markConfig.shareLinkAllowGuest
|
||
})
|
||
this.getShareInfo(dataList.sourceID)
|
||
},
|
||
//最后呈现时间的函数。
|
||
bindMultiPickerChange: function (e) {
|
||
//年
|
||
var dateStr = this.data.multiArray[0][this.data.multiIndex[0]] +"-";
|
||
//月
|
||
if(this.data.multiArray[1][this.data.multiIndex[1]]<10)
|
||
{
|
||
dateStr=dateStr+"0"+this.data.multiArray[1][this.data.multiIndex[1]] +"-";
|
||
}
|
||
else{
|
||
dateStr=dateStr+this.data.multiArray[1][this.data.multiIndex[1]] +"-";
|
||
}
|
||
//日
|
||
if(this.data.multiArray[2][this.data.multiIndex[2]]<10)
|
||
{
|
||
dateStr=dateStr+"0"+this.data.multiArray[2][this.data.multiIndex[2]]+" ";
|
||
}
|
||
else{
|
||
dateStr=dateStr+this.data.multiArray[2][this.data.multiIndex[2]]+" ";
|
||
}
|
||
//时
|
||
if(this.data.multiArray[3][this.data.multiIndex[3]]<10)
|
||
{
|
||
dateStr=dateStr+"0"+this.data.multiArray[3][this.data.multiIndex[3]]+":";
|
||
}
|
||
else
|
||
{
|
||
dateStr=dateStr+this.data.multiArray[3][this.data.multiIndex[3]]+":";
|
||
}
|
||
if(this.data.multiArray[4][this.data.multiIndex[4]]<10)
|
||
{
|
||
dateStr=dateStr+"0"+this.data.multiArray[4][this.data.multiIndex[4]];
|
||
}
|
||
else{
|
||
dateStr=dateStr+this.data.multiArray[4][this.data.multiIndex[4]];
|
||
}
|
||
this.setData({
|
||
customTime: dateStr,
|
||
})
|
||
},
|
||
//当时间选择器呈现并进行滚动选择时间时调用该函数。
|
||
bindMultiPickerColumnChange: function (e) {
|
||
//e.detail.column记录哪一行发生改变,e.detail.value记录改变的值(相当于multiIndex)
|
||
switch (e.detail.column) {
|
||
//这里case的值有0/1/2/3/4,但除了需要记录年和月来确定具体的天数外,其他的都可以暂不在switch中处理。
|
||
case 0:
|
||
//记录改变的年的值
|
||
let year = this.data.multiArray[0][e.detail.value];
|
||
this.setData({
|
||
// choose_year: year.substring(0, year.length - 1),
|
||
choose_year: year,
|
||
})
|
||
break;
|
||
case 1:
|
||
//根据选择的年与月,确定天数,并改变multiArray中天的具体值
|
||
let month = this.data.multiArray[1][e.detail.value];
|
||
let dayDates = datePicker.determineDay(this.data.choose_year, month.substring(0, month.length - 1));
|
||
//这里需要额外注意,改变page中设定的data,且只要改变data中某一个值,可以采用下面这种方法
|
||
this.setData({
|
||
['multiArray[2]']: dayDates
|
||
})
|
||
break;
|
||
}
|
||
//同上,上面改变的是二维数组中的某一个一维数组,这个是改变一个一维数组中某一个值,可供参考。
|
||
this.setData({
|
||
["multiIndex[" + e.detail.column + "]"]: e.detail.value
|
||
})
|
||
},
|
||
getRandomNum(){
|
||
this.setData({
|
||
password:randomNumber(6)
|
||
})
|
||
},
|
||
getShareInfo(sourceID){
|
||
let {dataList} = this.data
|
||
req('GET',URL.getShareInfo, {sourceID:sourceID}, {}, false).then(data => {
|
||
// console.log(data)
|
||
if(!isEmptyObject(data)){
|
||
if(data.options){
|
||
data.options = JSON.parse(data.options)
|
||
}
|
||
dataList.timeTo = data.timeTo>0?timeFormat('yyyy/MM/dd hh:mm:ss',data.timeTo*1000):'永久有效';
|
||
dataList.options = data.options
|
||
// dataList.title = data.title
|
||
this.setData({
|
||
numDownload:data.numDownload,
|
||
numView:data.numView,
|
||
shareID:data.shareID,
|
||
password:data.password?data.password:'',
|
||
timeToText:dataList.timeTo
|
||
// shareHash:data.shareHash
|
||
})
|
||
}else{
|
||
dataList.options = {
|
||
preview:1,
|
||
down:1,
|
||
login:0,
|
||
downNum:0
|
||
}
|
||
}
|
||
if(this.data.shareLinkAllowGuest==0){
|
||
dataList.options.login = 1
|
||
}
|
||
this.setData({dataList})
|
||
})
|
||
},
|
||
showMore(){
|
||
this.setData({
|
||
moreShow:!this.data.moreShow
|
||
})
|
||
},
|
||
onSwitchChange(e ){
|
||
let{label} = e.currentTarget.dataset,{dataList} = this.data
|
||
if(label=='preview'||label=='down'){
|
||
dataList.options[label] = e.detail?0:1
|
||
}else{
|
||
dataList.options[label] = e.detail?1:0
|
||
}
|
||
this.setData({
|
||
dataList
|
||
})
|
||
},
|
||
closeShare(){
|
||
this.setData({
|
||
shareShow:false
|
||
})
|
||
},
|
||
showTime(){
|
||
this.setData({
|
||
timeShow:!this.data.timeShow
|
||
})
|
||
},
|
||
selectTime(e){
|
||
let {index} = e.currentTarget.dataset
|
||
this.setData({
|
||
selectTimeIndex:index,
|
||
})
|
||
},
|
||
timeConfirm(){
|
||
let {selectTimeIndex,customTime,timeArr} = this.data,timeTo
|
||
if(selectTimeIndex==0){
|
||
timeTo = this.getTimetamp(7)
|
||
}else if(selectTimeIndex==1){
|
||
timeTo = this.getTimetamp(14)
|
||
}else if(selectTimeIndex==2){
|
||
timeTo = 0
|
||
}else{
|
||
timeTo = Date.parse(customTime)/1000
|
||
}
|
||
this.setData({
|
||
timeTo,
|
||
timeToText:selectTimeIndex<3?timeArr[selectTimeIndex].name:customTime,
|
||
timeShow:false
|
||
})
|
||
},
|
||
showDown(){
|
||
this.setData({
|
||
downShow:!this.data.downShow
|
||
})
|
||
},
|
||
selectDown(e){
|
||
let {index} = e.currentTarget.dataset
|
||
this.setData({
|
||
downIndex:index,
|
||
})
|
||
},
|
||
customDownNum(e){
|
||
this.setData({
|
||
downNum:parseInt(e.detail.value),
|
||
downIndex:2
|
||
})
|
||
},
|
||
downConfirm(){
|
||
let {downIndex,dataList,downNum} = this.data
|
||
if(downIndex==0){
|
||
dataList.options.down = 1
|
||
dataList.options.downNum = 0
|
||
}else if(downIndex==1){
|
||
dataList.options.down = 0
|
||
dataList.options.downNum = 0
|
||
}else if(downIndex==2){
|
||
dataList.options.down = 1
|
||
dataList.options.downNum = downNum
|
||
}
|
||
this.setData({
|
||
dataList,
|
||
downShow:false
|
||
})
|
||
},
|
||
cancelShare(){
|
||
let{shareID} = this.data
|
||
if(shareID){
|
||
req('POST',URL.cancelShare, {}, {shareID:shareID}, false).then(data => {
|
||
wx.navigateBack({
|
||
delta: 0,
|
||
})
|
||
})
|
||
}else{
|
||
wx.navigateBack({
|
||
delta: 0,
|
||
})
|
||
}
|
||
},
|
||
showShare(e){
|
||
let {dataList,password,shareHash,title,timeTo} = this.data,{type} = e.currentTarget.dataset,param = {
|
||
options:dataList.options?JSON.stringify(dataList.options):'',
|
||
password:password,
|
||
shareHash: decodeURIComponent(shareHash),
|
||
sourceID: dataList.sourceID,
|
||
timeTo: timeTo,
|
||
title: title
|
||
}
|
||
req('POST',URL.saveShare, {}, param, false).then(data => {
|
||
qrcode = new QRCode('myQrcode', {
|
||
usingIn: this,
|
||
text: this.data.shareLink,
|
||
width: 200,
|
||
height: 200,
|
||
padding: 20,
|
||
colorDark: "#000000",
|
||
colorLight: "#ffffff",
|
||
correctLevel: QRCode.CorrectLevel.H,
|
||
})
|
||
setTimeout(() => {
|
||
wx.canvasToTempFilePath({
|
||
canvasId: 'myQrcode',
|
||
success:res=>{
|
||
this.setData({
|
||
shareQrcode:res.tempFilePath
|
||
})
|
||
},fail(err){
|
||
console.log(err)
|
||
}
|
||
})
|
||
}, 1000);
|
||
wx.setStorageSync('needRefresh', true)
|
||
if(type==0){
|
||
this.setData({
|
||
shareShow:true
|
||
})
|
||
}else if(type==1){
|
||
this.copyLink()
|
||
}else{
|
||
wx.showToast({
|
||
title: '保存成功!',
|
||
icon:'none'
|
||
})
|
||
this.getShareInfo(this.data.dataList.sourceID)
|
||
}
|
||
})
|
||
},
|
||
inputValue(e){
|
||
let {value} = e.detail,{label} = e.currentTarget.dataset
|
||
this.setData({
|
||
[label]:value
|
||
})
|
||
},
|
||
showTips(){
|
||
this.setData({
|
||
showTips:false
|
||
})
|
||
},
|
||
onSelect(e){
|
||
let {index} = e.currentTarget.dataset
|
||
if(index == 1){
|
||
this.setData({
|
||
shareShow:false,
|
||
showTips:true
|
||
})
|
||
}else if(index==2){
|
||
this.copyLink()
|
||
}else if(index==3){
|
||
this.setData({
|
||
showQrcode:true
|
||
})
|
||
}
|
||
},
|
||
closeShareQrcode(){
|
||
this.setData({
|
||
showQrcode:false
|
||
})
|
||
},
|
||
saveShareQrcode:function(e){
|
||
wx.saveImageToPhotosAlbum({
|
||
filePath: this.data.shareQrcode,
|
||
success: () => {
|
||
wx.showToast({
|
||
title: '保存成功!',
|
||
})
|
||
this.closeShareQrcode();
|
||
},
|
||
fail:res=>{
|
||
openSaveImageSetting();
|
||
}
|
||
});
|
||
},
|
||
copyLink(){
|
||
let {shareLink,password,title} = this.data,
|
||
str = password?'分享名称:'+title+'\n分享链接:'+shareLink+'\n分享密码:'+password:'分享名称:'+title+'\n分享链接:'+shareLink
|
||
wx.setClipboardData({
|
||
data: str,
|
||
success:res => {
|
||
wx.showToast({
|
||
title:'复制成功'
|
||
});
|
||
this.setData({
|
||
shareShow:false
|
||
})
|
||
this.getShareInfo(this.data.dataList.sourceID)
|
||
}
|
||
})
|
||
},
|
||
/**
|
||
* 生命周期函数--监听页面初次渲染完成
|
||
*/
|
||
onReady: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面显示
|
||
*/
|
||
onShow: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面隐藏
|
||
*/
|
||
onHide: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面卸载
|
||
*/
|
||
onUnload: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面相关事件处理函数--监听用户下拉动作
|
||
*/
|
||
onPullDownRefresh: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面上拉触底事件的处理函数
|
||
*/
|
||
onReachBottom: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 用户点击右上角分享
|
||
*/
|
||
onShareAppMessage: function () {
|
||
let {name,thumb} = this.data.dataList,DOMAIN = wx.getStorageSync('DOMAIN')
|
||
this.setData({
|
||
shareShow:false
|
||
})
|
||
let path = `/pages/link/link?shareHash=${encodeURIComponent(this.data.shareHash)}&DOMAIN=${wx.getStorageSync('DOMAIN')}`;
|
||
this.getShareInfo(this.data.dataList.sourceID)
|
||
console.log(path)
|
||
return{
|
||
path,
|
||
title:'好友给你分享了'+name,
|
||
imageUrl:thumb
|
||
}
|
||
},
|
||
onShareTimeline:function (params) {
|
||
let path = `shareHash=${this.data.shareHash}&DOMAIN=${wx.getStorageSync('DOMAIN')}`,{name,thumb} = this.data.dataList;
|
||
this.getShareInfo(this.data.dataList.sourceID)
|
||
console.log(path)
|
||
return{
|
||
query:path,
|
||
title:'好友给你分享了'+name,
|
||
imageUrl:thumb
|
||
}
|
||
},
|
||
getTimetamp,timeFormat
|
||
}) |