2025-10-29 21:27:29 +00:00

535 lines
15 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// pages/chat/chat.js
import {
goto_camera,
} from '../../utils.js'
const app = getApp();
Page({
/**
* Page initial data
*/
data: {
show_modal: '',
prompt: [],
response: [],
messages: [], // Store chat history
currentMessage: '', // Current input
isLoading: false, // Loading state
sessionId: null, // Session ID for chat
welcome_response: [
{
type: 'text',
content: '欢迎使用徵象AI客服我是您的智能防伪验证助手可以帮您解答关于产品验证、防伪技术等问题。'
},
{
type: 'text',
content: '您可以向我提问任何关于产品验证、防伪技术的问题或者点击下方按钮开启AI验证。'
},
],
prompt_message_verify_result: [
{
type: 'text',
content: '查看验证结果'
},
],
},
/**
* Lifecycle function--Called when page load
*/
onLoad(options) {
this.setData({
serial_code: options.serial_code,
verify_time: options.time || new Date().toLocaleString(),
sessionId: this.generateSessionId(),
});
// Add welcome message to chat history
this.addMessageToHistory('assistant', '欢迎使用徵象AI客服我是您的智能防伪验证助手可以帮您解答关于产品验证、防伪技术等问题。请随时向我提问');
if (options.serial_code) {
this.show_verify_result(true);
} else {
this.show_welcome_response();
}
},
/**
* Lifecycle function--Called when page is initially rendered
*/
onReady() {
},
/**
* Lifecycle function--Called when page show
*/
onShow() {
},
/**
* Lifecycle function--Called when page hide
*/
onHide() {
},
/**
* Lifecycle function--Called when page unload
*/
onUnload() {
},
/**
* Page event handler function--Called when user drop down
*/
onPullDownRefresh() {
},
/**
* Called when page reach bottom
*/
onReachBottom() {
},
/**
* Called when user click on the top right corner to share
*/
onShareAppMessage() {
},
goto_camera() {
goto_camera(true, "ai_chat_mode=1");
},
show_service() {
this.setData({
show_modal: 'service',
})
},
show_channel() {
this.setData({
show_modal: 'channel',
})
},
hide_modal() {
console.log('hide_modal');
this.setData({
show_modal: '',
})
},
show_verify_tech() {
this.set_content({
prompt: [
{
type: 'text',
content: '这个验证结果可信吗?'
},
],
response: [
{
type: 'text',
content: '本次验证使用「Al图像识别+微米级特征对比」T4.2.2模型',
classes: 'margin-bottom-10',
},
{
type: 'text',
content: '更新时间:2025年2月27日',
classes: 'secondary',
},
{
type: 'text',
content: '1.微观特征捕捉:系统以0.1mm精度扫描二维码的30+项微观特征'
},
{
type: 'text',
content: '2.加密特征匹配:比对云端预存的特征图像代码,误差率万分之一'
},
{
type: 'text',
content: '若对验证结果有疑虑,可通过人工客服通道咨询'
},
{
type: 'splitline',
},
{
type: 'text',
content: '你可能会问:'
},
{
type: 'suggestion',
title: '重看验证结果',
onclick: () => {
this.show_verify_result(false);
}
},
{
type: 'suggestion',
title: '这个产品怎么样?',
onclick: () => {
this.show_product_details();
}
},
{
type: 'suggestion',
title: '有什么福利活动吗?',
onclick: () => {
this.show_promotions();
}
}
]
})
},
show_verify_result(is_first_time) {
var serial_code = this.data.serial_code || "";
var resp = [
{
type: 'text',
content: '正在生成您的专属验真档案...'
},
{
type: 'text',
content: '验真结论:',
classes: 'margin-bottom-10',
},
{
type: 'text',
content: '正品认证通过!',
mark: 'tick',
},
{
type: 'text',
content: '经系统比对,您扫描的【徵象AI体验码】产品二维码为官方认证正品,可放心使用。'
},
{
type: 'text',
content: '验证编码: ' + serial_code,
classes: 'margin-bottom-10 link',
onclick: () => {
wx.navigateTo({
url: '/pages/productinfo/productinfo?serial_code=' + serial_code,
});
}
},
{
type: 'text',
content: '验证时间: ' + this.data.verify_time,
},
{
type: 'splitline',
},
{
type: 'text',
classes: 'secondary',
content: '你可能会问:'
},
{
type: 'suggestion',
title: '这个验证结果可信吗?',
onclick: () => {
this.show_verify_tech();
}
},
{
type: 'suggestion',
title: '这个产品怎么样?',
onclick: () => {
this.show_product_details();
}
},
{
type: 'suggestion',
title: '有什么福利活动吗?',
onclick: () => {
this.show_promotions();
}
},
]
var prompt = is_first_time ? [] : [{
type: 'text',
content: '查看验证结果'
}];
this.set_content({
prompt: prompt,
response: resp,
})
},
show_welcome_response() {
this.set_content({
prompt: [],
response: this.data.welcome_response,
})
},
show_product_details() {
var resp = [
{
type: 'text',
content: '微象AI是由「广州市诚投科技有限公司」开发的AI驱动的智能防伪平台。'
},
{
type: 'text',
content: '通过「多模态特征识别」构建新一代防伪验证体系,实现从物理防伪到数字认证的全链路保护。系统采用ISO 12931国际防伪标准,已获取国家发明专利(证书编号:CN 115222000 B)。'
},
{
type: 'text',
content: '应用场景',
classes: 'margin-bottom-10 bold',
},
{
type: 'text',
content: '1.商品防伪',
classes: 'margin-bottom-10 bold',
},
{
type: 'text',
content: '2.证件安全验证',
classes: 'margin-bottom-10 bold',
},
{
type: 'text',
content: '3.工业品防伪',
classes: 'bold',
},
{
type: 'splitline',
},
{
type: 'text',
content: '你可能会问:',
classes: 'secondary',
},
{
type: 'suggestion',
title: '重看验证结果',
onclick: () => {
this.show_verify_result(false);
}
},
{
type: 'suggestion',
title: '这个验证结果可信吗?',
onclick: () => {
this.show_verify_tech();
}
},
{
type: 'suggestion',
title: '有什么福利活动吗?',
onclick: () => {
this.show_promotions();
}
}
]
this.set_content({
prompt: [{
type: 'text',
content: '这个产品怎么样'
}],
response: resp,
})
},
show_promotions() {
var resp = [
{
type: 'text',
content: '感谢您选择正品!为保障权益,建议:'
},
{
type: 'text',
content: '·关注品牌公众号',
classes: 'margin-bottom-10',
},
{
type: 'text',
content: '·定期访问「会员中心」查看产品溯源信息',
classes: 'margin-bottom-10',
},
{
type: 'text',
content: '·参与【正品守护计划】赢取专属福利'
},
{
type: 'text',
content: '若发现异常验证结果,请立即通过官方客服通道举报'
},
{
type: 'splitline',
},
{
type: 'text',
content: '你可能会问:',
classes: 'secondary',
},
{
type: 'suggestion',
title: '重看验证结果',
onclick: () => {
this.show_verify_result(false);
}
},
{
type: 'suggestion',
title: '这个产品怎么样?',
onclick: () => {
this.show_product_details();
}
},
{
type: 'suggestion',
title: '这个验证结果可信吗?',
onclick: () => {
this.show_verify_tech();
}
}
]
this.set_content({
prompt: [{
type: 'text',
content: '有什么福利活动吗?'
}],
response: resp,
})
},
set_content({prompt, response}) {
this.setData({
prompt: prompt,
response: response,
})
this.selectComponent('#response').restart_content_output();
var x = this.selectComponent('#prompt');
if (x) {
x.restart_content_output();
}
},
// New methods for AI chat integration
generateSessionId() {
return 'session_' + Date.now() + '_' + Math.random().toString(36).substring(2, 11);
},
addMessageToHistory(role, content) {
const messages = this.data.messages;
messages.push({
role: role,
content: content,
timestamp: new Date(),
});
this.setData({
messages: messages,
});
},
onInputChange(e) {
this.setData({
currentMessage: e.detail.value,
});
},
async sendMessage() {
const message = this.data.currentMessage.trim();
if (!message || this.data.isLoading) {
return;
}
// Clear input
this.setData({
currentMessage: '',
isLoading: true,
});
// Add user message to history
this.addMessageToHistory('user', message);
// Show user message in UI
this.set_content({
prompt: [{
type: 'text',
content: message,
}],
response: [{
type: 'text',
content: '正在思考中...',
}],
});
try {
// Call AI chat API
const response = await this.callAIChatAPI(message);
// Add AI response to history
this.addMessageToHistory('assistant', response);
// Show AI response in UI
this.set_content({
prompt: [{
type: 'text',
content: message,
}],
response: [{
type: 'text',
content: response,
}],
});
} catch (error) {
console.error('AI Chat Error:', error);
const errorMessage = '抱歉,我遇到了一些技术问题。请稍后再试,或联系技术支持。';
this.addMessageToHistory('assistant', errorMessage);
this.set_content({
prompt: [{
type: 'text',
content: message,
}],
response: [{
type: 'text',
content: errorMessage,
}],
});
} finally {
this.setData({
isLoading: false,
});
}
},
callAIChatAPI(message) {
return new Promise((resolve, reject) => {
wx.request({
url: app.globalData.server_url + '/api/v1/ai-chat/',
method: 'POST',
data: {
message: message,
session_id: this.data.sessionId,
chat_type: 'platform',
},
header: {
'content-type': 'application/json',
},
success: (res) => {
if (res.statusCode === 200 && res.data.response) {
// Update session ID if provided
if (res.data.session_id) {
this.setData({
sessionId: res.data.session_id,
});
}
resolve(res.data.response);
} else {
reject(new Error(res.data.error || 'Unknown error'));
}
},
fail: (error) => {
reject(error);
}
});
});
},
})