329 lines
9.1 KiB
JavaScript
329 lines
9.1 KiB
JavaScript
![]() |
const app = getApp();
|
|||
|
|
|||
|
Page({
|
|||
|
data: {
|
|||
|
inputValue: '', // 输入框的内容
|
|||
|
detectResult: '', // 识别结果
|
|||
|
detectType: 'text', // 默认识别类型为文本
|
|||
|
maxLength: 20000, // 最大允许的字节数
|
|||
|
inputLength: 0, // 当前输入的字节数
|
|||
|
task_id: '', // 任务ID
|
|||
|
detectButtonDisabled: false, // 文本检测按钮是否禁用
|
|||
|
modifyButtonDisabled: false // 智能修改按钮是否禁用
|
|||
|
},
|
|||
|
|
|||
|
onLoad: function(e) {
|
|||
|
wx.showShareMenu({
|
|||
|
withShareTicket: true,
|
|||
|
menus: ["shareAppMessage", "shareTimeline"]
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
onShow: function() {
|
|||
|
var t = this;
|
|||
|
t.resetData()
|
|||
|
app.getCurrentTabbar(2, this);
|
|||
|
app.checkUpdateVersion();
|
|||
|
app.getUserInfo().then(() => {
|
|||
|
console.log('获取用户信息完成');
|
|||
|
console.log(wx.getStorageSync('defaultDailyFreeParseNum'));
|
|||
|
const rewrittenText = wx.getStorageSync('rewrittenText'); // 从缓存中获取存储的文案
|
|||
|
if (rewrittenText) {
|
|||
|
this.setData({
|
|||
|
inputValue: rewrittenText // 设置到页面的数据中
|
|||
|
});
|
|||
|
wx.removeStorageSync('rewrittenText'); // 清除数据,避免下次重复加载
|
|||
|
wx.showToast({
|
|||
|
title: '点击开始检测按钮检测文本违规词。',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
}).catch(error => {
|
|||
|
console.error('获取用户信息失败:', error);
|
|||
|
}).finally(() => {
|
|||
|
console.log('getUserInfo调用完成');
|
|||
|
});
|
|||
|
},
|
|||
|
resetData: function() {
|
|||
|
// 重置页面数据为默认值
|
|||
|
this.setData({
|
|||
|
inputValue: '', // 输入框的内容
|
|||
|
detectResult: '', // 识别结果
|
|||
|
detectType: 'text', // 默认识别类型为文本
|
|||
|
inputLength: 0, // 当前输入的字节数
|
|||
|
task_id: '', // 任务ID
|
|||
|
detectButtonDisabled: false, // 文本检测按钮是否禁用
|
|||
|
modifyButtonDisabled: false // 智能修改按钮是否禁用
|
|||
|
});
|
|||
|
},
|
|||
|
// 切换识别类型
|
|||
|
switchDetectType(e) {
|
|||
|
const detectType = e.currentTarget.dataset.type;
|
|||
|
this.recordClick(detectType);
|
|||
|
this.setData({
|
|||
|
detectType,
|
|||
|
detectResult: '' // 切换时清空结果
|
|||
|
});
|
|||
|
|
|||
|
if (detectType === 'audio' || detectType === 'video') {
|
|||
|
wx.showToast({
|
|||
|
title: '该功能正在开发中',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
} else {
|
|||
|
wx.showToast({
|
|||
|
title: '切换到文本识别',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// 文本识别函数
|
|||
|
detectText() {
|
|||
|
const { inputValue, maxLength } = this.data;
|
|||
|
const byteSize = this.getByteLength(inputValue);
|
|||
|
|
|||
|
// 检查文本是否为空或长度过短
|
|||
|
if (!inputValue.trim() || this.getByteLength(inputValue) < 10) {
|
|||
|
wx.showToast({
|
|||
|
title: '请输入有效的文本',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// 超出字节长度检测
|
|||
|
if (byteSize > maxLength) {
|
|||
|
wx.showToast({
|
|||
|
title: `内容不能超过 ${maxLength} 字节`,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// 禁用检测按钮
|
|||
|
this.setData({ detectButtonDisabled: true });
|
|||
|
|
|||
|
wx.showLoading({
|
|||
|
title: '正在检测...',
|
|||
|
});
|
|||
|
|
|||
|
// 调用后端审核接口
|
|||
|
app.apiRequest({
|
|||
|
url: '/myapp/text_review/',
|
|||
|
method: 'POST',
|
|||
|
data: {
|
|||
|
text: inputValue,
|
|||
|
openid: wx.getStorageSync('openid'),
|
|||
|
nickname: wx.getStorageSync('uuid')
|
|||
|
},
|
|||
|
success: (res) => {
|
|||
|
wx.hideLoading();
|
|||
|
this.setData({ detectButtonDisabled: false }); // 启用检测按钮
|
|||
|
if (res.data.code === 200) {
|
|||
|
// 审核成功
|
|||
|
this.setData({
|
|||
|
detectResult: res.data.data.result,
|
|||
|
task_id: res.data.task_id
|
|||
|
});
|
|||
|
console.log(res.data.data.result);
|
|||
|
wx.showToast({
|
|||
|
title: '检测成功',
|
|||
|
icon: 'success'
|
|||
|
});
|
|||
|
if (res.data.data.result.conclusion === '不合规') {
|
|||
|
wx.showModal({
|
|||
|
title: "提示",
|
|||
|
content: "检测结果不合规,是否使用智能合规功能一键修改文案?",
|
|||
|
confirmText: "一键修改",
|
|||
|
cancelText: "取消",
|
|||
|
success: (modalRes) => {
|
|||
|
if (modalRes.confirm) {
|
|||
|
this.modifyContent(); // 调用一键合规函数
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
} else if (res.data.code === 400 && res.data.message === '余额不足') {
|
|||
|
// 积分不足,提示充值
|
|||
|
wx.showModal({
|
|||
|
title: "检测文本",
|
|||
|
content: '创意点不足!',
|
|||
|
confirmColor: "#00B269",
|
|||
|
cancelColor: "#858585",
|
|||
|
success: function(e) {
|
|||
|
if (e.confirm) {
|
|||
|
console.log("确定");
|
|||
|
wx.navigateTo({
|
|||
|
url: "../vip_recharge/vip_recharge?show=true"
|
|||
|
});
|
|||
|
} else {
|
|||
|
console.log("取消");
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
} else {
|
|||
|
// 其他失败情况
|
|||
|
wx.showToast({
|
|||
|
title: res.data.message || '检测失败,请稍后重试',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
fail: (err) => {
|
|||
|
wx.hideLoading();
|
|||
|
this.setData({ detectButtonDisabled: false }); // 启用检测按钮
|
|||
|
console.error('请求失败:', err);
|
|||
|
wx.showToast({
|
|||
|
title: '网络异常,请稍后重试',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
// 计算文本的字节长度(区分中英文)
|
|||
|
getByteLength(text) {
|
|||
|
return text.replace(/[^\x00-\xff]/g, 'aa').length;
|
|||
|
},
|
|||
|
|
|||
|
// 处理输入框内容变化
|
|||
|
bindInput(e) {
|
|||
|
const inputValue = e.detail.value;
|
|||
|
const inputLength = this.getByteLength(inputValue);
|
|||
|
|
|||
|
// 更新输入内容和字节长度
|
|||
|
this.setData({
|
|||
|
inputValue,
|
|||
|
inputLength
|
|||
|
});
|
|||
|
|
|||
|
// 如果字数超出最大限制,提示用户
|
|||
|
if (inputLength > this.data.maxLength) {
|
|||
|
wx.showToast({
|
|||
|
title: `已超出 ${this.data.maxLength} 字节`,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// 复制内容
|
|||
|
copyContent() {
|
|||
|
wx.setClipboardData({
|
|||
|
data: this.data.inputValue,
|
|||
|
success() {
|
|||
|
wx.showToast({
|
|||
|
title: '内容已复制',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
// 清空输入框内容
|
|||
|
clearInput() {
|
|||
|
wx.showModal({
|
|||
|
title: "提示",
|
|||
|
content: "确定要清空所有内容吗?",
|
|||
|
success: (res) => {
|
|||
|
if (res.confirm) {
|
|||
|
this.setData({
|
|||
|
inputValue: '',
|
|||
|
inputLength: 0,
|
|||
|
detectResult: ''
|
|||
|
});
|
|||
|
wx.showToast({
|
|||
|
title: '已清空内容',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
// 调用智能修改(AI合规)
|
|||
|
modifyContent() {
|
|||
|
// 禁用智能修改按钮
|
|||
|
this.setData({ modifyButtonDisabled: true });
|
|||
|
|
|||
|
wx.showLoading({
|
|||
|
title: '正在修改...',
|
|||
|
});
|
|||
|
|
|||
|
app.apiRequest({
|
|||
|
url: '/myapp/ai_modify_text/',
|
|||
|
method: 'POST',
|
|||
|
data: {
|
|||
|
task_id: this.data.task_id,
|
|||
|
openid: wx.getStorageSync('openid')
|
|||
|
},
|
|||
|
success: (res) => {
|
|||
|
wx.hideLoading();
|
|||
|
this.setData({ modifyButtonDisabled: false }); // 启用智能修改按钮
|
|||
|
if (res.data.code === 200) {
|
|||
|
// 修改成功
|
|||
|
this.setData({
|
|||
|
inputValue: res.data.data.modified_text,
|
|||
|
detectResult: '' // 清空检测结果
|
|||
|
});
|
|||
|
wx.showToast({
|
|||
|
title: '修改成功',
|
|||
|
icon: 'success'
|
|||
|
});
|
|||
|
}else if (res.data.code === 400 && res.data.message === '积分不足,请充值') {
|
|||
|
// 积分不足,提示用户充值并引导
|
|||
|
wx.showModal({
|
|||
|
title: "提示",
|
|||
|
content: "您的积分不足,无法进行智能修改,请充值后再尝试。",
|
|||
|
confirmText: "去充值",
|
|||
|
cancelText: "取消",
|
|||
|
success: (modalRes) => {
|
|||
|
if (modalRes.confirm) {
|
|||
|
wx.navigateTo({
|
|||
|
url: "../vip_recharge/vip_recharge?show=true"
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
} else {
|
|||
|
// 其他失败情况
|
|||
|
wx.showToast({
|
|||
|
title: res.data.message || '修改失败,请稍后重试',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
fail: (err) => {
|
|||
|
wx.hideLoading();
|
|||
|
this.setData({ modifyButtonDisabled: false }); // 启用智能修改按钮
|
|||
|
console.error('请求失败:', err);
|
|||
|
wx.showToast({
|
|||
|
title: '网络异常,请稍后重试',
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
// 记录点击的功能类型
|
|||
|
recordClick(functionClicked) {
|
|||
|
app.apiRequest({
|
|||
|
url: `/myapp/record_click/`, // 点击统计接口
|
|||
|
method: 'POST',
|
|||
|
data: {
|
|||
|
openid: wx.getStorageSync('openid'),
|
|||
|
nickname: wx.getStorageSync('uuid'),
|
|||
|
function_clicked: functionClicked
|
|||
|
},
|
|||
|
header: {
|
|||
|
'content-type': 'application/json'
|
|||
|
},
|
|||
|
success: (res) => {
|
|||
|
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
});
|