kuaiying_wx/pages/video/video.js

554 lines
16 KiB
JavaScript
Raw Normal View History

2025-03-04 15:25:38 +08:00
var util = require('../../utils/util.js'); // 确保你有这样一个文件
var app = getApp(),
n = '';
Page({
data: {
dataUrl: '',
dataImage: '',
preview: '',
type: '',
wxid: '',
alias: '',
videoSize: 0, // 初始化视频大小为0
totalLength: 0,
isExtracting: false,
read_count: 0,
},
onLoad: function (options) {
console.log(options)
this.setData({
dataUrl: decodeURIComponent(options.url), // 视频链接
dataImage: decodeURIComponent(options.image) || '', // 视频封面
preview: decodeURIComponent(options.preview), // 视频标题
type: decodeURIComponent(options.type) || '', // 设置type的值
wxid: decodeURIComponent(options.wxid) || '', // 设置微信id
alias: decodeURIComponent(options.alias) || '', // 设置微信号
read_count: decodeURIComponent(options.read_count) || 0, // 设置微信号
});
wx.showShareMenu({
withShareTicket: true,
menus: ['shareAppMessage', 'shareTimeline']
})
},
onShow: function () {
app.checkUpdateVersion()
// 页面显示前更新数据
console.log('执行video.js onShow')
app.getPopupConfig()
.then(() => {
// 从本地缓存读取数据
const isEnabled = wx.getStorageSync('popupEnabled');
const popupType = wx.getStorageSync('popupType');
const popupContent = wx.getStorageSync('popupContent');
if (isEnabled) {
this.setData({
showPopup: true,
popupType: popupType,
popupContent: popupContent
});
}
})
.catch((error) => {
console.error('获取弹窗配置失败:', error);
});
console.log(this.data.type)
app.getUserInfo().then(() => {
console.log('获取用户信息开始');
console.log(wx.getStorageSync('defaultDailyFreeParseNum'), )
// 判断type并发送提取记录到后端
if (this.data.type === 'weixin' & wx.getStorageSync('defaultDailyFreeParseNum') > 0) {
console.log('来源微信')
this.getVideoSize(decodeURIComponent(this.data.dataUrl))
//更新次数
} else {
this.getVideoSize(app.globalData.downloadPrefix + decodeURIComponent(this.data.dataUrl))
}
console.log('获取用户信息结束');
}).catch(error => {
console.error('获取用户信息失败:', error);
}).finally(() => {
console.log('getUserInfo调用完成');
});
wx.showToast({
title: '提取成功',
icon: 'success',
duration: 1500,
});
},
updateExtractingStatus: function (status) {
console.log(status)
this.setData({
isExtracting: status,
});
},
getVideoSize: function (url) {
let that = this;
wx.request({
url: url,
method: 'HEAD', // HEAD请求不会下载资源的body只请求header信息
success: function (res) {
if (res.statusCode === 200 && res.header['CONTENT-LENGTH'] || res.header['X-Content-Length']) {
let size = res.header['CONTENT-LENGTH'] || res.header['X-Content-Length'];
let sizeInMb = (size / (1024 * 1024)).toFixed(2); // 将大小转换为MB
that.setData({
videoSize: sizeInMb, // 更新页面数据,
totalLength: size
});
}
},
fail: function (err) {
console.log('获取视频大小失败', err);
}
});
},
//复制
copyUrl: async function () {
if (this.data.type == 'weixin') {
wx.showLoading({
title: '正在请求复制...',
});
if (!await this.CreditLimit()) return
}
wx.setClipboardData({
data: this.data.dataUrl,
success: () => {
wx.showToast({
title: '复制成功',
duration: 2200,
});
},
});
},
// 扣除额度
CreditLimit() {
return new Promise((resolve, reject) => {
app.apiRequest({
url: '/myapp/increment-download-count/',
method: "POST",
data: {
uuid: wx.getStorageSync("uuid"),
openid: wx.getStorageSync("openid")
},
success: function (e) {
console.log(e, !e.data.success)
if (e.data.success === false) {
wx.hideLoading()
wx.showModal({
title: "提取视频",
content: '哎呀!去开通会员不限次数使用哦',
confirmColor: "#00B269",
cancelColor: "#858585",
success: function (e) {
e.confirm ? (console.log("确定"), wx.navigateTo({
url: "../vip_recharge/vip_recharge?show=true"
})) : e.cancel && console.log("取消");
}
})
resolve(false)
}
resolve(true)
}
})
})
},
onAdClick: function() {
app.广告();
},
//提取视频
download: async function () {
wx.showLoading({
title: '正在下载...',
});
if (this.data.type == 'weixin') {
if (!await this.CreditLimit()) return
}
var t = this,
e = t.data.dataUrl;
if (t.data.type === 'index') {
e = app.globalData.downloadPrefix + t.data.dataUrl; // 通过nginx中转
} else {
e = t.data.dataUrl;
}
// 开始实际的下载任务
const downloadTask = wx.downloadFile({
url: e,
success: function (o) {
wx.hideLoading();
wx.saveVideoToPhotosAlbum({
filePath: o.tempFilePath,
success: function (o) {
t.showToast('保存成功', 'success');
setTimeout(function () {
wx.setClipboardData({
data: '',
});
t.goBack();
}, 1000);
},
fail: function (o) {
t.showToast('保存失败');
}
});
},
fail: function (o) {
wx.hideLoading();
t.showToast('下载失败');
}
});
// 监听下载进度并计算百分比
downloadTask.onProgressUpdate((o) => {
let percent = this.data.totalLength ? (o.totalBytesWritten / this.data.totalLength) * 100 : o.progress;
if (percent < 100) {
wx.showToast({
title: `保存中 ${Math.round(percent)}%`,
mask: true, // 添加 mask 参数,保证覆盖式显示
icon: 'loading'
});
} else {
wx.hideLoading(); // 下载完成后隐藏加载提示
}
});
},
// showToast: function (title, icon = 'none') {
// wx.showToast({
// title: title,
// icon: icon,
// duration: 2000
// });
// },
// 保存到相册
postSave: function () {
var that = this;
wx.getSetting({
success(res) {
// 检查用户是否已授权小程序写入相册的权限
if (res.authSetting['scope.writePhotosAlbum']) {
// 用户已授权,下载视频
that.download();
} else {
// 用户未授权,请求相册权限
wx.authorize({
scope: 'scope.writePhotosAlbum',
success() {
// 用户授权成功,下载视频
that.download();
},
fail() {
// 用户拒绝授权,显示提示对话框引导用户开启权限
wx.showModal({
title: '提示',
content: '保存视频到相册需要您授权',
showCancel: false,
success(modalRes) {
if (modalRes.confirm) {
// 引导用户前往设置页面手动开启权限
wx.openSetting({
success(settingData) {
if (settingData.authSetting['scope.writePhotosAlbum']) {
// 用户在设置页面授权成功,下载视频
that.download();
} else {
// 用户最终未授权,可能需要展示一些提示信息
wx.showToast({
title: '授权失败,无法保存视频',
icon: 'none'
});
}
}
});
}
}
});
}
});
}
}
});
},
performDownload: function () {
// 在这里实现下载视频并保存到相册的逻辑
this.download();
},
removeTimestampAndMergeLines: function (textWithTimestamp) {
let txt = textWithTimestamp.replace(/\[.*\]/g, ""); // 去掉时间前缀
console.log(txt);
txt = txt.replace(/\s+/g, ""); // 去掉换行、空格字符
console.log(txt);
return txt; // 删除前后的空白字符并返回
},
// 提取文案功能
extractText: function () {
// if (this.data.videoSize > 300 || !this.data.videoSize) {
// wx.showToast({
// title: '视频太大,无法提取',
// icon: 'none'
// })
// return
// }
let openid = wx.getStorageSync('openid') || '';
let uuid = wx.getStorageSync('uuid') || '';
let type = this.data.type || '';
let wxid = this.data.wxid || '';
let alias = this.data.alias || '';
let url = this.data.dataUrl;
console.log('文案提取:' + url);
wx.showLoading({
title: '后台处理中',
});
var that = this;
app.apiRequest({
url: '/myapp/video_to_text/', // 后端接口URL根据实际情况调整
method: 'POST',
header: {
'content-type': 'application/json',
},
data: {
url: url,
openid: openid,
uuid: uuid,
type: type,
wxid: wxid,
alias: alias,
},
success(res) {
if (res.data.success === false) {
wx.showModal({
title: "提取视频",
content: '哎呀!去开通会员不限次数使用哦',
confirmColor: "#00B269",
cancelColor: "#858585",
success: function (e) {
e.confirm ? (console.log("确定"), wx.navigateTo({
url: "../vip_recharge/vip_recharge?show=true"
})) : e.cancel && console.log("取消");
}
})
wx.hideLoading()
return
}
let data = res.data;
let taskId = (data?.Data?.TaskId) || data.task_id;
if (data.result) {
wx.hideLoading();
let text = that.removeTimestampAndMergeLines(data.result);
text = encodeURIComponent(text);
wx.navigateTo({
url: "../extract/extract?text=" + text + "&type=" + type + "&wxid=" + wxid + "&alias=" + alias,
});
} else if (taskId) {
that.search_result(taskId, openid, uuid, type, wxid, alias, (result) => {
wx.hideLoading();
console.log('处理查询结果:', result);
if (result != 0) {
wx.showToast({
title: '提取成功',
icon: 'success'
});
let text = that.removeTimestampAndMergeLines(result);
text = encodeURIComponent(text);
wx.navigateTo({
url: "../extract/extract?text=" + text + "&type=" + type + "&wxid=" + wxid + "&alias=" + alias,
});
} else {
wx.showToast({
title: '异常',
icon: 'error'
});
}
});
} else {
wx.showToast({
title: '发送文件失败',
icon: 'none'
});
}
},
fail(err) {
wx.hideLoading();
wx.showToast({
title: '网络异常',
icon: 'none'
});
}
});
},
// 查询任务状态
search_result: function (task_id, openid, uuid, type, wxid, alias, handleResult) {
console.log('查询任务');
const checkResult = (maxRetries) => {
const fetchTaskStatus = () => {
app.apiRequest({
url: '/myapp/query_task/',
method: 'POST',
header: {
'content-type': 'application/json',
},
data: {
task_id: task_id,
openid: openid,
uuid: uuid,
type: type,
wxid: wxid,
alias: alias,
},
success: function (res) {
const data = res.data;
console.log('查询任务:', data)
if (data.result) {
handleResult(data.result);
} else if (maxRetries > 0) {
setTimeout(fetchTaskStatus, 3000); // 每3秒查询一次
maxRetries--;
} else {
wx.hideLoading();
wx.showToast({
title: '请稍重试',
icon: 'error'
});
handleResult(0);
console.log('已达到最大重试次数,停止查询。');
}
},
});
};
fetchTaskStatus(); // 启动任务状态查询
};
const maxRetries = 100;
checkResult(maxRetries);
},
// 去掉时间戳并合并行
removeTimestampAndMergeLines: function (textWithTimestamp) {
let txt = textWithTimestamp.replace(/\[.*\]/g, ""); // 去掉时间前缀
console.log(txt);
txt = txt.replace(/\s+/g, ""); // 去掉换行、空格字符
console.log(txt);
return txt; // 删除前后的空白字符并返回
},
// 更新提取状态
updateExtractingStatus: function (status) {
this.setData({
extracting: status
});
},
onUnload: function () {
console.log('页面卸载');
},
goBack: function () {
wx.reLaunch({
url: '/pages/index/index',
});
},
showToast: function (title, icon = 'none', duration = 2000) {
wx.showToast({
title: title,
icon: icon,
duration: duration
});
},
onShareAppMessage: function () {
return {
title: '推荐一款免费又超好用的视频文案创作工具,分享给大家一起使用',
path: '/pages/index/index?uuid=' + wx.getStorageSync('uuid'),
imageUrl: '/images/1.png',
success: function (e) {
wx.showToast({
title: "分享成功",
icon: "success",
duration: 2e3
});
},
fail: function (e) {
wx.showToast({
title: "分享失败",
icon: "none",
duration: 2e3
});
}
}
},
onShareTimeline: function () {
return {
title: '推荐一款免费又超好用的视频文案创作工具,分享给大家一起使用',
path: '/pages/index/index?uuid=' + wx.getStorageSync('uuid'),
imageUrl: '/images/1.png',
success: function (e) {
wx.showToast({
title: "分享成功",
icon: "success",
duration: 2e3
});
},
fail: function (e) {
wx.showToast({
title: "分享失败",
icon: "none",
duration: 2e3
});
}
}
},
// 发送提取记录到后端的方法
sendExtractionRecordToBackend: function (e) {
const {
dataUrl,
dataImage,
preview,
wxid,
alias
} = this.data;
app.apiRequest({
url: '/myapp/record_extraction/', // 后端接口URL
method: 'POST',
data: {
openid: wx.getStorageSync('openid'),
uuid: wx.getStorageSync('uuid'),
videoUrl: dataUrl,
videoTitle: preview,
wxid: wxid,
wechatAlias: alias,
type: e || 'weixin'
},
success(res) {
console.log('提取记录发送成功', res);
// 可以在这里处理后端返回的响应
},
fail(err) {
console.error('提取记录发送失败', err);
// 错误处理
}
});
},
});