464 lines
14 KiB
JavaScript
464 lines
14 KiB
JavaScript
![]() |
const app = getApp();
|
||
|
|
||
|
Page({
|
||
|
data: {
|
||
|
mode: 'link', // 默认模式为链接提取
|
||
|
videoUrl: '', // 视频链接
|
||
|
uploadFilePath: '', // 上传文件路径
|
||
|
uuid: '', // 页面参数 uuid
|
||
|
showPopup: false, // 弹窗显示状态
|
||
|
popupType: '', // 弹窗类型
|
||
|
popupContent: '', // 弹窗内容
|
||
|
showMask: false,
|
||
|
records: [],
|
||
|
page: 1,
|
||
|
isLoading: false,
|
||
|
hasMore: true,
|
||
|
externalOpenid:''
|
||
|
},
|
||
|
|
||
|
// 切换单选框模式
|
||
|
switchMode(e) {
|
||
|
const selectedMode = e.currentTarget.dataset.value; // 获取当前点击的值
|
||
|
console.log("选择的模式:", selectedMode);
|
||
|
this.setData({
|
||
|
mode: selectedMode
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// 输入视频链接
|
||
|
bindVideoInput(e) {
|
||
|
this.setData({
|
||
|
videoUrl: e.detail.value // 更新输入的视频链接
|
||
|
});
|
||
|
},
|
||
|
|
||
|
//文案提取记录
|
||
|
// 显示记录蒙版
|
||
|
showRecordMask() {
|
||
|
this.setData({ showMask: true });
|
||
|
console.log('显示记录蒙版')
|
||
|
this.loadRecords();
|
||
|
},
|
||
|
|
||
|
// 隐藏蒙版
|
||
|
hideMask() {
|
||
|
this.setData({ showMask: false });
|
||
|
},
|
||
|
|
||
|
// 阻止冒泡
|
||
|
preventDefault() {
|
||
|
return;
|
||
|
},
|
||
|
|
||
|
// 加载记录
|
||
|
// 加载记录
|
||
|
// 加载记录
|
||
|
loadRecords() {
|
||
|
if (this.data.isLoading || !this.data.hasMore) return;
|
||
|
|
||
|
this.setData({ isLoading: true });
|
||
|
|
||
|
app.apiRequest({
|
||
|
url: '/myapp/get_transcription_records/',
|
||
|
method: "POST",
|
||
|
data: {
|
||
|
page: this.data.page,
|
||
|
uuid: wx.getStorageSync("uuid"),
|
||
|
openid: wx.getStorageSync("openid")
|
||
|
},
|
||
|
success: (res) => {
|
||
|
console.log('原始数据:', res.data);
|
||
|
|
||
|
if (!res.data || !res.data.records) {
|
||
|
console.error('返回数据格式错误');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// 获取当前records
|
||
|
const currentRecords = this.data.records || [];
|
||
|
|
||
|
// 处理新数据
|
||
|
const newRecords = res.data.records.map(record => {
|
||
|
const formattedResult = this.removeTimestampAndMergeLines(record.result || '');
|
||
|
return {
|
||
|
id: record.id,
|
||
|
video_url: record.video_url,
|
||
|
task_id: record.task_id,
|
||
|
status: record.status,
|
||
|
result: formattedResult,
|
||
|
preview: formattedResult.substring(0, 15) + '...',
|
||
|
created_at: this.formatTime(record.created_at)
|
||
|
};
|
||
|
});
|
||
|
|
||
|
console.log('处理后的新数据:', newRecords);
|
||
|
|
||
|
// 使用回调确保数据更新完成
|
||
|
this.setData({
|
||
|
records: currentRecords.concat(newRecords),
|
||
|
page: this.data.page + 1,
|
||
|
hasMore: res.data.has_more
|
||
|
}, () => {
|
||
|
console.log('更新后的完整数据:', this.data.records);
|
||
|
});
|
||
|
},
|
||
|
fail: (error) => {
|
||
|
console.error('请求失败:', error);
|
||
|
},
|
||
|
complete: () => {
|
||
|
this.setData({ isLoading: false });
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// 格式化时间显示
|
||
|
formatTime(timestamp) {
|
||
|
const date = new Date(timestamp);
|
||
|
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
||
|
const day = date.getDate().toString().padStart(2, '0');
|
||
|
const hours = date.getHours().toString().padStart(2, '0');
|
||
|
const minutes = date.getMinutes().toString().padStart(2, '0');
|
||
|
return `${month}-${day} ${hours}:${minutes}`;
|
||
|
},
|
||
|
|
||
|
// 加载更多
|
||
|
loadMore() {
|
||
|
this.loadRecords();
|
||
|
},
|
||
|
|
||
|
// 跳转到文案页
|
||
|
goToExtract(e) {
|
||
|
|
||
|
const text = encodeURIComponent(this.data.records[e.currentTarget.dataset.text].result);
|
||
|
wx.navigateTo({
|
||
|
url: `../extract/extract?text=${text}`
|
||
|
});
|
||
|
},
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// 上传文件
|
||
|
uploadFile() {
|
||
|
wx.showToast({
|
||
|
title: "功能开发者,敬请期待",
|
||
|
icon: "none"
|
||
|
});
|
||
|
},
|
||
|
// 提取视频功能
|
||
|
parseVideo() {
|
||
|
if (!this.data.videoUrl) {
|
||
|
wx.showToast({
|
||
|
title: "请输入有效的视频链接",
|
||
|
icon: "none"
|
||
|
});
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
wx.showLoading({
|
||
|
title: "正在提取..."
|
||
|
});
|
||
|
|
||
|
app.apiRequest({
|
||
|
url: "/myapp/video/", // 替换为实际后端接口
|
||
|
method: "POST",
|
||
|
data: {
|
||
|
url: this.data.videoUrl,
|
||
|
uuid: wx.getStorageSync("uuid"),
|
||
|
openid: wx.getStorageSync("openid")
|
||
|
},
|
||
|
success: (res) => {
|
||
|
console.log("视频提取结果:", res);
|
||
|
if (res.data.data.medias[0]) {
|
||
|
const media = res.data.data.medias[0];
|
||
|
wx.navigateTo({
|
||
|
url: `../video/video?url=${encodeURIComponent(media.resource_url)}&image=${encodeURIComponent(media.preview_url)}&preview=${encodeURIComponent(res.data.data.text)}&type=index&read_count=0`
|
||
|
});
|
||
|
} else {
|
||
|
wx.showToast({
|
||
|
title: "不支持此链接提交。",
|
||
|
icon: "none"
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
fail: (err) => {
|
||
|
console.error("视频解析失败:", err);
|
||
|
wx.showToast({
|
||
|
title: "请求失败,请检查网络并稍后重试",
|
||
|
icon: "none"
|
||
|
});
|
||
|
},
|
||
|
complete: () => {
|
||
|
wx.hideLoading();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
// 提取文案功能
|
||
|
extractText() {
|
||
|
if (this.data.mode === 'link') {
|
||
|
if (!this.data.videoUrl) {
|
||
|
wx.showToast({
|
||
|
title: "请输入有效链接",
|
||
|
icon: "none"
|
||
|
});
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let openid = wx.getStorageSync('openid') || '';
|
||
|
let uuid = wx.getStorageSync('uuid') || '';
|
||
|
|
||
|
wx.showLoading({
|
||
|
title: '后台处理中',
|
||
|
});
|
||
|
|
||
|
var that = this;
|
||
|
app.apiRequest({
|
||
|
url: '/myapp/video_to_text/',
|
||
|
method: 'POST',
|
||
|
header: {
|
||
|
'content-type': 'application/json',
|
||
|
},
|
||
|
data: {
|
||
|
url: this.data.videoUrl,
|
||
|
openid: openid,
|
||
|
uuid: uuid
|
||
|
},
|
||
|
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}`
|
||
|
});
|
||
|
} else if (taskId) {
|
||
|
that.search_result(taskId, openid, uuid, (result) => {
|
||
|
wx.hideLoading();
|
||
|
if (result != 0) {
|
||
|
wx.showToast({
|
||
|
title: '提取成功',
|
||
|
icon: 'success'
|
||
|
});
|
||
|
|
||
|
let text = that.removeTimestampAndMergeLines(result);
|
||
|
text = encodeURIComponent(text);
|
||
|
wx.navigateTo({
|
||
|
url: `../extract/extract?text=${text}`
|
||
|
});
|
||
|
} else {
|
||
|
wx.showToast({
|
||
|
title: '异常',
|
||
|
icon: 'error'
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
} else {
|
||
|
wx.showToast({
|
||
|
title: '发送文件失败',
|
||
|
icon: 'none'
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
fail(err) {
|
||
|
wx.hideLoading();
|
||
|
wx.showToast({
|
||
|
title: '网络异常',
|
||
|
icon: 'none'
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
} else if (this.data.mode === 'upload') {
|
||
|
wx.showToast({
|
||
|
title: "功能开发中,敬请期待",
|
||
|
icon: "none"
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// 查询任务状态
|
||
|
search_result: function(task_id, openid, uuid, 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
|
||
|
},
|
||
|
success: function(res) {
|
||
|
const data = res.data;
|
||
|
if (data.result) {
|
||
|
handleResult(data.result);
|
||
|
} else if (maxRetries > 0) {
|
||
|
setTimeout(fetchTaskStatus, 3000);
|
||
|
maxRetries--;
|
||
|
} else {
|
||
|
wx.hideLoading();
|
||
|
wx.showToast({
|
||
|
title: '请稍后重试',
|
||
|
icon: 'error'
|
||
|
});
|
||
|
handleResult(0);
|
||
|
console.log('已达到最大重试次数,停止查询。');
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
};
|
||
|
fetchTaskStatus();
|
||
|
};
|
||
|
|
||
|
const maxRetries = 100;
|
||
|
checkResult(maxRetries);
|
||
|
},
|
||
|
extractVideoFromVideoAccount() {
|
||
|
wx.navigateTo({
|
||
|
url: `../bot-list/bot-list`
|
||
|
});
|
||
|
},
|
||
|
openDownloadRobot(){
|
||
|
wx.navigateTo({
|
||
|
url: `../bot-list/bot-list`
|
||
|
});
|
||
|
},
|
||
|
// 去掉时间戳并合并行
|
||
|
removeTimestampAndMergeLines: function(textWithTimestamp) {
|
||
|
let txt = textWithTimestamp.replace(/\[.*\]/g, "");
|
||
|
txt = txt.replace(/\s+/g, "");
|
||
|
return txt;
|
||
|
},
|
||
|
|
||
|
// 页面加载时触发
|
||
|
onLoad(options) {
|
||
|
console.log("页面参数:", options);
|
||
|
const uuid = options.uuid || "";
|
||
|
this.setData({
|
||
|
uuid: uuid
|
||
|
});
|
||
|
|
||
|
wx.showShareMenu({
|
||
|
withShareTicket: true,
|
||
|
menus: ["shareAppMessage", "shareTimeline"]
|
||
|
});
|
||
|
|
||
|
const { externalOpenid, token } = options;
|
||
|
|
||
|
if (!externalOpenid || !token) {
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// 获取新小程序用户的 openid
|
||
|
const newOpenid = wx.getStorageSync("openid"); // 假设登录状态中已存储 openid
|
||
|
if (!newOpenid) {
|
||
|
wx.showToast({ title: "获取新用户信息失败,请重新登录", icon: "none" });
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// 请求后端完成迁移
|
||
|
app.apiRequest({
|
||
|
url: "/myapp/migrate_member/", // 替换为后端迁移接口地址
|
||
|
method: "POST",
|
||
|
data: {
|
||
|
old_openid: externalOpenid,
|
||
|
new_openid: newOpenid, // 新小程序 openid
|
||
|
token: token, // 加密的 token
|
||
|
},
|
||
|
success: (res) => {
|
||
|
if (res.data.message === "会员迁移成功") {
|
||
|
this.setData({ migrationStatus: "迁移成功" });
|
||
|
wx.showToast({ title: "迁移成功", icon: "success" });
|
||
|
wx.switchTab({ url: "/pages/mine/mine" }); // 跳转到用户中心
|
||
|
} else {
|
||
|
this.setData({ migrationStatus: "迁移失败" });
|
||
|
wx.showToast({ title: res.data.error || "迁移失败", icon: "none" });
|
||
|
}
|
||
|
},
|
||
|
fail: (err) => {
|
||
|
console.error("迁移失败", err);
|
||
|
this.setData({ migrationStatus: "迁移失败" });
|
||
|
wx.showToast({ title: "迁移失败,请稍后重试", icon: "none" });
|
||
|
},
|
||
|
});
|
||
|
|
||
|
|
||
|
},
|
||
|
|
||
|
// 页面显示时触发
|
||
|
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);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// 清空输入框
|
||
|
inputClear() {
|
||
|
this.setData({
|
||
|
videoUrl: ""
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// 关闭弹窗
|
||
|
closePopup() {
|
||
|
this.setData({
|
||
|
showPopup: false
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// 分享逻辑
|
||
|
onShareAppMessage() {
|
||
|
return {
|
||
|
title: "推荐一款免费又超好用的视频文案创作工具,分享给大家一起使用",
|
||
|
path: `/pages/index/index?uuid=${wx.getStorageSync("uuid")}`,
|
||
|
imageUrl: "/images/share.jpg"
|
||
|
};
|
||
|
},
|
||
|
|
||
|
onShareTimeline() {
|
||
|
return {
|
||
|
title: "推荐一款免费又超好用的视频文案创作工具,分享给大家一起使用",
|
||
|
path: `/pages/index/index?uuid=${wx.getStorageSync("uuid")}`,
|
||
|
imageUrl: "/images/share.jpg"
|
||
|
};
|
||
|
}
|
||
|
});
|