Files
sundynix-plant-mp/pages/wiki/identify/index.js
T

89 lines
2.5 KiB
JavaScript

// pages/wiki/identify/index.js
import request from '../../../utils/request';
Page({
data: {
imagePath: '',
results: [],
isLoading: true,
hasError: false,
topResult: null
},
onLoad(options) {
// Image path is passed via global data (too long for URL params)
const app = getApp();
const imagePath = app.globalData._identifyImagePath || '';
if (!imagePath) {
this.setData({ isLoading: false, hasError: true });
return;
}
this.setData({ imagePath });
this.classifyPlant(imagePath);
},
classifyPlant(filePath) {
this.setData({ isLoading: true, hasError: false });
request.uploadToUrl('/classify/plant', filePath, 'file').then(res => {
const results = res.result || [];
// Map results with percentage scores
const mappedResults = results.map((item, index) => ({
index: index,
name: item.name,
score: item.score,
percent: (item.score * 100).toFixed(2),
description: (item.baike_info && item.baike_info.description) || '',
baikeUrl: (item.baike_info && item.baike_info.baike_url) || '',
isTop: index === 0
}));
this.setData({
results: mappedResults,
topResult: mappedResults.length > 0 ? mappedResults[0] : null,
isLoading: false
});
}).catch(err => {
console.error('Classify failed', err);
this.setData({ isLoading: false, hasError: true });
});
},
// Retry identification
handleRetry() {
if (this.data.imagePath) {
this.classifyPlant(this.data.imagePath);
}
},
// Go back and re-select image
handleReselect() {
wx.navigateBack();
},
// Search in wiki
searchInWiki(e) {
const name = e.currentTarget.dataset.name;
// Navigate back to wiki and trigger search
const pages = getCurrentPages();
if (pages.length >= 2) {
const wikiPage = pages[pages.length - 2];
wikiPage.setData({ searchQuery: name }, () => {
wikiPage.fetchWikiList(true);
});
}
wx.navigateBack();
},
// Preview uploaded image
previewImage() {
wx.previewImage({
urls: [this.data.imagePath],
current: this.data.imagePath
});
}
});