// 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 }); } });