Browse Source
- 在server-mysql.js中添加Resources模型定义,映射resources表结构 - 创建/api/evaluate/price端点,支持基于历史数据的鸡蛋价格评估 - 实现价格趋势分析算法,预测价格波动在0.2范围内 - 更新evaluate/index.js中的地区和品种选项以匹配数据库数据 - 在utils/api.js中添加evaluatePrice方法用于调用新的API端点 - 添加详细的错误处理和日志记录用于调试pull/3/head
7 changed files with 1081 additions and 784 deletions
@ -1,530 +1,313 @@ |
|||||
// pages/evaluate/index.js
|
// pages/evaluate/index.js
|
||||
//估价页面
|
//估价页面 - 简化版三步骤流程
|
||||
const api = require('../../utils/api.js'); |
|
||||
|
|
||||
Page({ |
const api = require('../../utils/api'); |
||||
// 分享给朋友/群聊
|
|
||||
onShareAppMessage() { |
|
||||
return { |
|
||||
title: '鸡蛋贸易平台 - 智能估价,专业分析', |
|
||||
path: '/pages/evaluate/index', |
|
||||
imageUrl: '/images/你有好蛋.png' |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
// 分享到朋友圈
|
|
||||
onShareTimeline() { |
|
||||
return { |
|
||||
title: '鸡蛋贸易平台 - 智能估价,专业分析', |
|
||||
query: '', |
|
||||
imageUrl: '/images/你有好蛋.png' |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
|
Page({ |
||||
data: { |
data: { |
||||
evaluateStep: 1, |
currentStep: 1, |
||||
fromPreviousStep: false, // 用于标记是否从下一步返回
|
// 月日选择
|
||||
evaluateData: { |
selectedMonth: '', |
||||
region: '', |
selectedMonthIndex: 0, |
||||
breed: '', |
selectedDay: '', |
||||
spec: '', |
selectedDayIndex: 0, |
||||
freshness: '', |
months: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], |
||||
size: '', |
days: [], |
||||
packaging: '', |
// 地区和品种选择
|
||||
quantity: '' |
selectedRegion: '', |
||||
}, |
selectedRegionIndex: 0, |
||||
// 客户地区列表 - 省市二级联动数据
|
selectedBreed: '', |
||||
provinceCities: { |
selectedBreedIndex: 0, |
||||
'北京': ['北京'], |
|
||||
'河北': ['石家庄', '唐山', '秦皇岛', '邯郸', '邢台', '保定', '张家口', '承德', '沧州', '廊坊', '衡水'], |
|
||||
'四川': ['成都', '自贡', '攀枝花', '泸州', '德阳', '绵阳', '广元', '遂宁', '内江', '乐山', '南充', '眉山', '宜宾', '广安', '达州', '雅安', '巴中', '资阳'], |
|
||||
'云南': ['昆明', '曲靖', '玉溪', '保山', '昭通', '丽江', '普洱', '临沧', '楚雄', '红河', '文山', '西双版纳', '大理', '德宏', '怒江', '迪庆'], |
|
||||
'贵州': ['贵阳', '六盘水', '遵义', '安顺', '毕节', '铜仁', '黔西南', '黔东南', '黔南'] |
|
||||
}, |
|
||||
// 省份列表
|
|
||||
provinces: [], |
|
||||
// 城市列表
|
|
||||
cities: [], |
|
||||
// 当前选中的省份
|
|
||||
selectedProvince: '', |
|
||||
// 当前是否显示城市选择
|
|
||||
showCities: false, |
|
||||
evaluateResult: { |
evaluateResult: { |
||||
finalPrice: '0', |
estimatedPrice: '0.00', |
||||
totalPrice: '0', |
priceRange: '0.00 - 0.00', |
||||
aidate: '' |
confidence: '85%' |
||||
}, |
}, |
||||
|
|
||||
// 鸡蛋品种数据(包含成交单量)
|
// 地区选项
|
||||
eggBreeds: [ |
regionOptions: [ |
||||
{ name: '罗曼粉', dailyOrders: 2341 }, |
'成都市场报价' |
||||
{ name: '伊莎粉', dailyOrders: 1892 }, |
|
||||
{ name: '罗曼灰', dailyOrders: 1567 }, |
|
||||
{ name: '海蓝灰', dailyOrders: 1432 }, |
|
||||
{ name: '海蓝褐', dailyOrders: 1298 }, |
|
||||
{ name: '绿壳', dailyOrders: 1054 }, |
|
||||
{ name: '粉一', dailyOrders: 987 }, |
|
||||
{ name: '粉二', dailyOrders: 876 }, |
|
||||
{ name: '粉八', dailyOrders: 765 }, |
|
||||
{ name: '京粉1号', dailyOrders: 654 }, |
|
||||
{ name: '京红', dailyOrders: 543 }, |
|
||||
{ name: '京粉6号', dailyOrders: 456 }, |
|
||||
{ name: '京粉3号', dailyOrders: 389 }, |
|
||||
{ name: '农大系列', dailyOrders: 321 }, |
|
||||
{ name: '黑鸡土蛋', dailyOrders: 298 }, |
|
||||
{ name: '双黄蛋', dailyOrders: 245 }, |
|
||||
{ name: '大午金凤', dailyOrders: 198 }, |
|
||||
{ name: '黑凤', dailyOrders: 156 } |
|
||||
], |
], |
||||
|
// 品种选项
|
||||
// 鸡蛋规格数据
|
breedOptions: [ |
||||
eggSpecs: [ |
'黄蛋(红蛋)' |
||||
{ name: '格子装', dailyOrders: 3214 }, |
|
||||
{ name: '散托', dailyOrders: 2890 }, |
|
||||
{ name: '不限规格', dailyOrders: 2567 }, |
|
||||
{ name: '净重47+', dailyOrders: 2345 }, |
|
||||
{ name: '净重46-47', dailyOrders: 2109 }, |
|
||||
{ name: '净重45-46', dailyOrders: 1876 }, |
|
||||
{ name: '净重44-45', dailyOrders: 1654 }, |
|
||||
{ name: '净重43-44', dailyOrders: 1432 }, |
|
||||
{ name: '净重42-43', dailyOrders: 1234 }, |
|
||||
{ name: '净重41-42', dailyOrders: 1056 }, |
|
||||
{ name: '净重40-41', dailyOrders: 987 }, |
|
||||
{ name: '净重39-40', dailyOrders: 876 }, |
|
||||
{ name: '净重38-39', dailyOrders: 765 }, |
|
||||
{ name: '净重37-39', dailyOrders: 654 }, |
|
||||
{ name: '净重37-38', dailyOrders: 543 }, |
|
||||
{ name: '净重36-38', dailyOrders: 456 }, |
|
||||
{ name: '净重36-37', dailyOrders: 389 }, |
|
||||
{ name: '净重35-36', dailyOrders: 321 }, |
|
||||
{ name: '净重34-35', dailyOrders: 289 }, |
|
||||
{ name: '净重33-34', dailyOrders: 256 }, |
|
||||
{ name: '净重32-33', dailyOrders: 223 }, |
|
||||
{ name: '净重32-34', dailyOrders: 198 }, |
|
||||
{ name: '净重31-32', dailyOrders: 165 }, |
|
||||
{ name: '净重30-35', dailyOrders: 143 }, |
|
||||
{ name: '净重30-34', dailyOrders: 121 }, |
|
||||
{ name: '净重30-32', dailyOrders: 109 }, |
|
||||
{ name: '净重30-31', dailyOrders: 98 }, |
|
||||
{ name: '净重29-31', dailyOrders: 87 }, |
|
||||
{ name: '净重29-30', dailyOrders: 76 }, |
|
||||
{ name: '净重28-29', dailyOrders: 65 }, |
|
||||
{ name: '净重28以下', dailyOrders: 54 }, |
|
||||
{ name: '毛重52以上', dailyOrders: 132 }, |
|
||||
{ name: '毛重50-51', dailyOrders: 121 }, |
|
||||
{ name: '毛重48-49', dailyOrders: 109 }, |
|
||||
{ name: '毛重47-48', dailyOrders: 98 }, |
|
||||
{ name: '毛重46-47', dailyOrders: 87 }, |
|
||||
{ name: '毛重45-47', dailyOrders: 76 }, |
|
||||
{ name: '毛重45-46', dailyOrders: 65 }, |
|
||||
{ name: '毛重44-45', dailyOrders: 54 }, |
|
||||
{ name: '毛重43-44', dailyOrders: 43 }, |
|
||||
{ name: '毛重42-43', dailyOrders: 32 }, |
|
||||
{ name: '毛重41-42', dailyOrders: 21 }, |
|
||||
{ name: '毛重40-41', dailyOrders: 19 }, |
|
||||
{ name: '毛重38-39', dailyOrders: 17 }, |
|
||||
{ name: '毛重36-37', dailyOrders: 15 }, |
|
||||
{ name: '毛重34-35', dailyOrders: 13 }, |
|
||||
{ name: '毛重32-33', dailyOrders: 11 }, |
|
||||
{ name: '毛重30-31', dailyOrders: 9 }, |
|
||||
{ name: '毛重30以下', dailyOrders: 7 } |
|
||||
] |
] |
||||
|
|
||||
}, |
}, |
||||
|
|
||||
onLoad() { |
onLoad() { |
||||
console.log('估价页面初始化') |
console.log('估价页面初始化 - 简化版') |
||||
// 页面加载时,对鸡蛋品种按成交单量降序排序并添加排名
|
|
||||
const sortedBreeds = [...this.data.eggBreeds].sort((a, b) => b.dailyOrders - a.dailyOrders); |
|
||||
// 添加排名属性
|
|
||||
const breedsWithRank = sortedBreeds.map((breed, index) => ({ |
|
||||
...breed, |
|
||||
rank: index + 1 |
|
||||
})); |
|
||||
|
|
||||
// 对鸡蛋规格按成交单量降序排序并添加排名
|
|
||||
const sortedSpecs = [...this.data.eggSpecs].sort((a, b) => b.dailyOrders - a.dailyOrders); |
|
||||
const specsWithRank = sortedSpecs.map((spec, index) => ({ |
|
||||
...spec, |
|
||||
rank: index + 1 |
|
||||
})); |
|
||||
|
|
||||
// 初始化省份列表
|
|
||||
const provinces = Object.keys(this.data.provinceCities); |
|
||||
this.setData({ |
|
||||
eggBreeds: breedsWithRank, |
|
||||
eggSpecs: specsWithRank, |
|
||||
fromPreviousStep: false, // 初始化标志
|
|
||||
provinces: provinces |
|
||||
}); |
|
||||
}, |
|
||||
|
|
||||
// 选择省份
|
// 初始化为当前北京时间
|
||||
selectProvince(e) { |
this.initCurrentDate() |
||||
const province = e.currentTarget.dataset.province; |
|
||||
const cities = this.data.provinceCities[province]; |
|
||||
this.setData({ |
|
||||
selectedProvince: province, |
|
||||
cities: cities, |
|
||||
showCities: true |
|
||||
}); |
|
||||
}, |
}, |
||||
|
|
||||
// 选择城市
|
// 初始化当前日期
|
||||
selectCity(e) { |
initCurrentDate() { |
||||
const city = e.currentTarget.dataset.city; |
const now = new Date() |
||||
if (!city || !this.data.selectedProvince) { |
const currentMonth = (now.getMonth() + 1).toString() |
||||
wx.showToast({ |
const currentDate = now.getDate().toString() |
||||
title: '请选择有效的城市', |
|
||||
icon: 'none', |
|
||||
duration: 2000 |
|
||||
}); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
const fullRegion = `${this.data.selectedProvince}-${city}`; |
// 设置默认月份
|
||||
|
const monthIndex = this.data.months.indexOf(currentMonth) |
||||
this.setData({ |
this.setData({ |
||||
'evaluateData.region': fullRegion, |
selectedMonth: currentMonth, |
||||
showCities: false |
selectedMonthIndex: monthIndex >= 0 ? monthIndex : 0 |
||||
}); |
}) |
||||
|
|
||||
// 显示选择成功提示
|
|
||||
wx.showToast({ |
|
||||
title: `已选择: ${fullRegion}`, |
|
||||
icon: 'success', |
|
||||
duration: 1500 |
|
||||
}); |
|
||||
|
|
||||
// 只有当当前步骤是1且已经从下一步返回时,才自动进入下一步
|
// 根据当前月份更新日期数组
|
||||
if (this.data.evaluateStep === 1 && !this.data.fromPreviousStep) { |
this.updateDaysForMonth(currentMonth) |
||||
this.setData({ |
|
||||
evaluateStep: 2 |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
// 重置标志
|
// 设置默认日期
|
||||
|
const dayIndex = this.data.days.indexOf(currentDate) |
||||
this.setData({ |
this.setData({ |
||||
fromPreviousStep: false |
selectedDay: dayIndex >= 0 ? currentDate : '', |
||||
}); |
selectedDayIndex: dayIndex >= 0 ? dayIndex : 0 |
||||
|
}) |
||||
}, |
}, |
||||
|
|
||||
// 返回选择省份
|
// 第一步:点击我知道了
|
||||
backToProvince() { |
onIKnow() { |
||||
this.setData({ |
this.setData({ |
||||
showCities: false |
currentStep: 2 |
||||
}); |
}) |
||||
}, |
}, |
||||
|
|
||||
// 选择鸡蛋品种
|
// 月份选择器变化
|
||||
selectEggBreed(e) { |
onMonthChange(e) { |
||||
const breed = e.currentTarget.dataset.breed; |
const monthIndex = e.detail.value |
||||
this.setData({ |
const selectedMonth = this.data.months[monthIndex] |
||||
'evaluateData.breed': breed |
|
||||
}); |
|
||||
|
|
||||
// 显示选择成功提示
|
// 更新月份
|
||||
wx.showToast({ |
this.setData({ |
||||
title: '已选择: ' + breed, |
selectedMonth: selectedMonth, |
||||
icon: 'none', |
selectedMonthIndex: monthIndex, |
||||
duration: 1500 |
selectedDay: '', // 清空日期选择
|
||||
}); |
selectedDayIndex: 0 |
||||
|
}) |
||||
// 只有当当前步骤是2且不是从下一步返回时,才自动进入下一步
|
|
||||
if (this.data.evaluateStep === 2 && !this.data.fromPreviousStep) { |
|
||||
this.setData({ evaluateStep: 3 }); |
|
||||
} |
|
||||
|
|
||||
// 重置标志
|
// 根据月份设置对应的日期数组
|
||||
this.setData({ fromPreviousStep: false }); |
this.updateDaysForMonth(selectedMonth) |
||||
}, |
}, |
||||
|
|
||||
// 选择鸡蛋规格
|
// 日期选择器变化
|
||||
selectEggSpec(e) { |
onDayChange(e) { |
||||
const spec = e.currentTarget.dataset.spec; |
const dayIndex = e.detail.value |
||||
|
const selectedDay = this.data.days[dayIndex] |
||||
this.setData({ |
this.setData({ |
||||
'evaluateData.spec': spec |
selectedDay: selectedDay, |
||||
}); |
selectedDayIndex: dayIndex |
||||
|
}) |
||||
// 显示选择成功提示
|
|
||||
wx.showToast({ |
|
||||
title: '已选择: ' + spec, |
|
||||
icon: 'none', |
|
||||
duration: 1500 |
|
||||
}); |
|
||||
|
|
||||
// 只有当当前步骤是3且不是从下一步返回时,才自动进入下一步
|
|
||||
if (this.data.evaluateStep === 3 && !this.data.fromPreviousStep) { |
|
||||
this.setData({ evaluateStep: 4 }); |
|
||||
} |
|
||||
|
|
||||
// 重置标志
|
|
||||
this.setData({ fromPreviousStep: false }); |
|
||||
}, |
}, |
||||
|
|
||||
// 格式化订单数量显示
|
// 根据月份更新日期数组
|
||||
formatOrderCount(count) { |
updateDaysForMonth(month) { |
||||
if (count >= 10000) { |
let daysCount |
||||
return (count / 10000).toFixed(1) + '万'; |
|
||||
} else if (count >= 1000) { |
// 根据月份设置日期数量
|
||||
return (count / 1000).toFixed(1) + 'k'; |
switch(month) { |
||||
|
case '2': // 2月
|
||||
|
daysCount = 28 // 简化处理,不考虑闰年
|
||||
|
break |
||||
|
case '4': |
||||
|
case '6': |
||||
|
case '9': |
||||
|
case '11': // 小月
|
||||
|
daysCount = 30 |
||||
|
break |
||||
|
default: // 大月
|
||||
|
daysCount = 31 |
||||
} |
} |
||||
return count.toString(); |
|
||||
}, |
|
||||
|
|
||||
// 选择条件
|
const days = [] |
||||
selectCondition(e) { |
for (let i = 1; i <= daysCount; i++) { |
||||
const { type, value } = e.currentTarget.dataset; |
days.push(i.toString()) |
||||
this.setData({ |
|
||||
[`evaluateData.${type}`]: value |
|
||||
}); |
|
||||
|
|
||||
// 只有当当前步骤不是从返回过来的,才自动进入下一步
|
|
||||
if (!this.data.fromPreviousStep) { |
|
||||
// 根据当前步骤自动进入下一步
|
|
||||
const currentStep = this.data.evaluateStep; |
|
||||
if (currentStep === 4) { |
|
||||
this.setData({ evaluateStep: 5 }); |
|
||||
} else if (currentStep === 5) { |
|
||||
this.setData({ evaluateStep: 6 }); |
|
||||
} else if (currentStep === 6) { |
|
||||
this.setData({ evaluateStep: 7 }); |
|
||||
} |
|
||||
} |
} |
||||
|
|
||||
// 重置标志
|
|
||||
this.setData({ fromPreviousStep: false }); |
|
||||
}, |
|
||||
|
|
||||
// 选择数量
|
|
||||
selectQuantity(e) { |
|
||||
const quantity = e.currentTarget.dataset.quantity; |
|
||||
this.setData({ |
this.setData({ |
||||
'evaluateData.quantity': quantity |
days: days, |
||||
}); |
selectedDay: '', |
||||
|
selectedDayIndex: 0 |
||||
|
}) |
||||
}, |
}, |
||||
|
|
||||
// 获取报价
|
// 地区选择器变化
|
||||
getQuote() { |
onRegionChange(e) { |
||||
if (this.data.evaluateData.quantity) { |
const index = e.detail.value |
||||
this.calculatePrice(); |
const selectedRegion = this.data.regionOptions[index] |
||||
} else { |
this.setData({ |
||||
wx.showToast({ |
selectedRegion: selectedRegion, |
||||
title: '请选择数量', |
selectedRegionIndex: index |
||||
icon: 'none', |
}) |
||||
duration: 2000 |
|
||||
}); |
|
||||
} |
|
||||
}, |
}, |
||||
|
|
||||
// 上一步
|
// 品种选择器变化
|
||||
prevStep() { |
onBreedChange(e) { |
||||
if (this.data.evaluateStep > 1 && this.data.evaluateStep < 9) { |
const index = e.detail.value |
||||
this.setData({ |
const selectedBreed = this.data.breedOptions[index] |
||||
evaluateStep: this.data.evaluateStep - 1, |
|
||||
fromPreviousStep: true // 标记是从下一步返回的
|
|
||||
}); |
|
||||
} else if (this.data.evaluateStep === 9) { |
|
||||
// 如果在结果页面,返回第七步(数量选择)
|
|
||||
this.setData({ |
this.setData({ |
||||
evaluateStep: 7, |
selectedBreed: selectedBreed, |
||||
fromPreviousStep: true |
selectedBreedIndex: index |
||||
}); |
}) |
||||
} else { |
|
||||
// 如果在第一步,返回上一页
|
|
||||
wx.navigateBack(); |
|
||||
} |
|
||||
}, |
}, |
||||
|
|
||||
// 计算价格
|
// 开始估价
|
||||
calculatePrice() { |
startEvaluation() { |
||||
console.log('开始执行calculatePrice函数'); |
const { selectedMonth, selectedDay, selectedRegion, selectedBreed } = this.data |
||||
const { region, breed, spec, freshness, size, packaging, quantity } = this.data.evaluateData; |
|
||||
|
|
||||
// 校验必填参数
|
if (!selectedMonth || !selectedDay || !selectedRegion || !selectedBreed) { |
||||
console.log('校验必填参数:', { region, breed, spec, freshness, size, packaging, quantity }); |
|
||||
if (!region || !breed || !spec || !freshness || !size || !packaging || !quantity) { |
|
||||
console.error('参数校验失败,缺少必要信息'); |
|
||||
wx.showToast({ |
wx.showToast({ |
||||
title: '请完成所有选项', |
title: '请完成所有选择', |
||||
icon: 'none', |
icon: 'none', |
||||
duration: 2000 |
duration: 2000 |
||||
}); |
}) |
||||
return; |
return |
||||
} |
} |
||||
|
|
||||
// 显示加载中
|
// 显示加载中
|
||||
wx.showLoading({ |
wx.showLoading({ |
||||
title: '计算中...', |
title: '估价中...', |
||||
mask: true |
mask: true |
||||
}); |
}) |
||||
|
|
||||
// 整合用户输入信息
|
|
||||
console.log('准备整合用户输入信息'); |
|
||||
const userData = JSON.stringify({ |
|
||||
region, |
|
||||
breed, |
|
||||
spec, |
|
||||
freshness, |
|
||||
size, |
|
||||
packaging, |
|
||||
quantity |
|
||||
}); |
|
||||
console.log('用户输入信息:', userData); |
|
||||
|
|
||||
// 向后端发送请求
|
|
||||
console.log('准备发送API请求到 /api/openai/submit'); |
|
||||
api.request('/api/openai/submit', 'POST', { |
|
||||
userdate: userData |
|
||||
}).then(res => { |
|
||||
console.log('API请求成功,响应数据:', res); |
|
||||
|
|
||||
// 检查响应数据有效性
|
|
||||
if (!res) { |
|
||||
throw new Error('后端返回的响应为空'); |
|
||||
} |
|
||||
|
|
||||
// 解析后端返回的aidate数据
|
|
||||
let aiData; |
|
||||
try { |
|
||||
console.log('开始解析aidate数据:', res.aidate); |
|
||||
aiData = typeof res.aidate === 'string' ? JSON.parse(res.aidate) : res.aidate; |
|
||||
console.log('aidate解析结果:', aiData); |
|
||||
} catch (e) { |
|
||||
console.error('解析aidate失败:', e); |
|
||||
console.warn('使用默认价格数据'); |
|
||||
// 如果解析失败,使用默认值
|
|
||||
aiData = { |
|
||||
finalPrice: '0', |
|
||||
totalPrice: '0' |
|
||||
}; |
|
||||
} |
|
||||
|
|
||||
// 验证解析后的数据
|
// 调用真实的价格评估API
|
||||
if (!aiData || typeof aiData !== 'object') { |
api.evaluatePrice(selectedMonth, selectedDay, selectedRegion, selectedBreed) |
||||
console.error('解析后的aidata格式错误:', aiData); |
.then(result => { |
||||
aiData = { |
console.log('价格评估结果:', result); |
||||
finalPrice: '0', |
|
||||
totalPrice: '0' |
|
||||
}; |
|
||||
} |
|
||||
|
|
||||
// 更新结果
|
// 更新评估结果
|
||||
console.log('准备更新页面数据,finalPrice:', aiData.finalPrice || '0', 'totalPrice:', aiData.totalPrice || '0'); |
|
||||
this.setData({ |
this.setData({ |
||||
evaluateResult: { |
evaluateResult: { |
||||
finalPrice: aiData.finalPrice || '0', |
estimatedPrice: result.estimatedPrice || '0.00', |
||||
totalPrice: aiData.totalPrice || '0', |
priceRange: result.priceRange || '0.00 - 0.00', |
||||
aidate: res.aidate || '' // 保存完整的aidate数据
|
confidence: result.confidence || '85%' |
||||
}, |
}, |
||||
evaluateStep: 9 |
currentStep: 3 |
||||
}, () => { |
|
||||
console.log('页面数据更新完成,加载状态隐藏'); |
|
||||
wx.hideLoading(); |
|
||||
}); |
}); |
||||
}).catch(err => { |
|
||||
console.error('API请求异常:', err); |
wx.hideLoading() |
||||
wx.hideLoading(); |
|
||||
|
|
||||
// 根据不同类型的错误提供更详细的提示
|
|
||||
let errorMessage = '计算失败,请重试'; |
|
||||
if (err && err.message) { |
|
||||
console.error('错误详情:', err.message); |
|
||||
// 可以根据具体错误类型提供更精确的提示
|
|
||||
if (err.message.includes('网络')) { |
|
||||
errorMessage = '网络连接异常,请检查网络设置'; |
|
||||
} else if (err.message.includes('超时')) { |
|
||||
errorMessage = '请求超时,请稍后再试'; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
wx.showToast({ |
wx.showToast({ |
||||
title: errorMessage, |
title: '估价完成', |
||||
|
icon: 'success', |
||||
|
duration: 1500 |
||||
|
}) |
||||
|
}) |
||||
|
.catch(error => { |
||||
|
console.error('价格评估失败:', error); |
||||
|
|
||||
|
wx.hideLoading() |
||||
|
|
||||
|
wx.showToast({ |
||||
|
title: '估价失败: ' + (error.message || '未知错误'), |
||||
icon: 'none', |
icon: 'none', |
||||
duration: 3000 |
duration: 3000 |
||||
}); |
}) |
||||
}); |
|
||||
}, |
|
||||
|
|
||||
// 重新估价
|
// 可以选择保持当前步骤或者回到上一步
|
||||
restartEvaluate() { |
// this.goBack();
|
||||
this.setData({ |
}) |
||||
evaluateStep: 1, |
|
||||
evaluateData: { |
|
||||
region: '', |
|
||||
breed: '', |
|
||||
spec: '', |
|
||||
freshness: '', |
|
||||
size: '', |
|
||||
packaging: '', |
|
||||
quantity: '' |
|
||||
}, |
|
||||
evaluateResult: { |
|
||||
finalPrice: '0', |
|
||||
totalPrice: '0', |
|
||||
aidate: '' |
|
||||
}, |
}, |
||||
fromPreviousStep: false // 重置标志
|
|
||||
}); |
// 获取时间系数
|
||||
|
getTimeMultiplier(timeValue) { |
||||
|
const multipliers = { |
||||
|
'today': 1.0, |
||||
|
'tomorrow': 0.98, |
||||
|
'week': 0.95, |
||||
|
'month': 0.90 |
||||
|
} |
||||
|
return multipliers[timeValue] || 1.0 |
||||
}, |
}, |
||||
|
|
||||
// 返回首页
|
// 获取地区系数
|
||||
backToHome() { |
getRegionMultiplier(region) { |
||||
wx.navigateBack(); |
const tier1Cities = ['北京', '上海', '广州', '深圳'] |
||||
|
const tier2Cities = ['天津', '江苏', '浙江', '山东'] |
||||
|
|
||||
|
if (tier1Cities.includes(region)) return 1.15 |
||||
|
if (tier2Cities.includes(region)) return 1.05 |
||||
|
return 1.0 |
||||
}, |
}, |
||||
|
|
||||
// 跳转到购物页面
|
// 获取品种系数
|
||||
goToBuy() { |
getBreedMultiplier(breed) { |
||||
console.log('goToBuy 函数被调用'); |
const premiumBreeds = ['绿壳', '双黄蛋', '黑鸡土蛋'] |
||||
// 使用与custom-tab-bar相同的跳转逻辑
|
const popularBreeds = ['罗曼粉', '伊莎粉', '海蓝褐'] |
||||
const url = 'pages/buyer/index'; |
|
||||
|
if (premiumBreeds.includes(breed)) return 1.20 |
||||
// 先尝试使用navigateTo
|
if (popularBreeds.includes(breed)) return 1.10 |
||||
wx.navigateTo({ |
return 1.0 |
||||
url: '/' + url, |
|
||||
success: function(res) { |
|
||||
console.log('使用navigateTo成功跳转到购物页面:', res); |
|
||||
}, |
}, |
||||
fail: function(error) { |
|
||||
console.log('navigateTo失败,尝试使用reLaunch:', error); |
// 计算价格区间
|
||||
// 如果navigateTo失败,使用reLaunch
|
calculatePriceRange(basePrice) { |
||||
wx.reLaunch({ |
const min = (basePrice * 0.9).toFixed(2) |
||||
url: '/' + url, |
const max = (basePrice * 1.1).toFixed(2) |
||||
success: function(res) { |
return `${min} - ${max}` |
||||
console.log('使用reLaunch成功跳转到购物页面:', res); |
|
||||
}, |
}, |
||||
fail: function(err) { |
|
||||
console.error('reLaunch也失败:', err); |
// 计算置信度
|
||||
|
calculateConfidence(month, day, region, breed) { |
||||
|
let confidence = 80 // 基础置信度
|
||||
|
|
||||
|
// 根据选择增加置信度
|
||||
|
// 如果选择了今日(当前月份和日期),增加置信度
|
||||
|
const now = new Date() |
||||
|
const currentMonth = (now.getMonth() + 1).toString() |
||||
|
const currentDate = now.getDate().toString() |
||||
|
|
||||
|
if (month === currentMonth && day === currentDate) { |
||||
|
confidence += 10 |
||||
} |
} |
||||
}); |
|
||||
|
// 根据地区增加置信度
|
||||
|
if (['北京', '上海', '广州', '深圳'].includes(region)) confidence += 5 |
||||
|
if (['罗曼粉', '伊莎粉', '海蓝褐'].includes(breed)) confidence += 5 |
||||
|
|
||||
|
return Math.min(confidence, 95) + '%' |
||||
|
}, |
||||
|
|
||||
|
// 重新估价
|
||||
|
restartEvaluation() { |
||||
|
this.setData({ |
||||
|
currentStep: 1, |
||||
|
selectedMonth: '', |
||||
|
selectedMonthIndex: 0, |
||||
|
selectedDay: '', |
||||
|
selectedDayIndex: 0, |
||||
|
selectedRegion: '', |
||||
|
selectedRegionIndex: 0, |
||||
|
selectedBreed: '', |
||||
|
selectedBreedIndex: 0, |
||||
|
evaluateResult: { |
||||
|
estimatedPrice: '0.00', |
||||
|
priceRange: '0.00 - 0.00', |
||||
|
confidence: '85%' |
||||
} |
} |
||||
}); |
}) |
||||
}, |
}, |
||||
|
|
||||
// 跳转到货源页面
|
// 重置估价(与restartEvaluation相同)
|
||||
goToSell() { |
resetEvaluation() { |
||||
console.log('goToSell 函数被调用'); |
this.restartEvaluation() |
||||
// 使用与custom-tab-bar相同的跳转逻辑
|
|
||||
const url = 'pages/seller/index'; |
|
||||
|
|
||||
// 先尝试使用navigateTo
|
|
||||
wx.navigateTo({ |
|
||||
url: '/' + url, |
|
||||
success: function(res) { |
|
||||
console.log('使用navigateTo成功跳转到货源页面:', res); |
|
||||
}, |
}, |
||||
fail: function(error) { |
|
||||
console.log('navigateTo失败,尝试使用reLaunch:', error); |
// 查看市场
|
||||
// 如果navigateTo失败,使用reLaunch
|
goToMarket() { |
||||
wx.reLaunch({ |
// 实际应用中,这里会跳转到市场页面
|
||||
url: '/' + url, |
wx.showToast({ |
||||
success: function(res) { |
title: '功能开发中...', |
||||
console.log('使用reLaunch成功跳转到货源页面:', res); |
icon: 'none', |
||||
|
duration: 2000 |
||||
|
}) |
||||
}, |
}, |
||||
fail: function(err) { |
|
||||
console.error('reLaunch也失败:', err); |
// 返回上一步
|
||||
} |
goBack() { |
||||
}); |
if (this.data.currentStep > 1) { |
||||
|
this.setData({ |
||||
|
currentStep: this.data.currentStep - 1 |
||||
|
}) |
||||
} |
} |
||||
}); |
|
||||
} |
} |
||||
}) |
}) |
||||
@ -1,354 +1,158 @@ |
|||||
<!--pages/evaluate/index.wxml--> |
<!--pages/evaluate/index.wxml--> |
||||
<view class="evaluate-page"> |
<view class="evaluate-page"> |
||||
<!-- 顶部导航 --> |
<!-- 步骤1:提示说明 --> |
||||
<view class="evaluate-header"> |
<view wx:if="{{currentStep === 1}}" class="evaluate-step"> |
||||
<view class="header-back" bindtap="prevStep">‹</view> |
|
||||
<view class="header-title">鸡蛋估价</view> |
|
||||
<view class="header-placeholder"></view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 进度指示器 --> |
|
||||
<view class="progress-indicator" wx:if="{{evaluateStep < 8}}"> |
|
||||
<view class="progress-dots"> |
|
||||
<view class="progress-dot {{evaluateStep >= 1 ? 'active' : ''}}"></view> |
|
||||
<view class="progress-dot {{evaluateStep >= 2 ? 'active' : ''}}"></view> |
|
||||
<view class="progress-dot {{evaluateStep >= 3 ? 'active' : ''}}"></view> |
|
||||
<view class="progress-dot {{evaluateStep >= 4 ? 'active' : ''}}"></view> |
|
||||
<view class="progress-dot {{evaluateStep >= 5 ? 'active' : ''}}"></view> |
|
||||
<view class="progress-dot {{evaluateStep >= 6 ? 'active' : ''}}"></view> |
|
||||
<view class="progress-dot {{evaluateStep >= 7 ? 'active' : ''}}"></view> |
|
||||
</view> |
|
||||
<view class="progress-text">步骤 {{evaluateStep}}/7</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 步骤1:选择客户地区 --> |
|
||||
<view wx:if="{{evaluateStep === 1}}" class="evaluate-step"> |
|
||||
<view class="step-content"> |
<view class="step-content"> |
||||
<!-- 省份选择 --> |
<view class="step-icon">🥚</view> |
||||
<view wx:if="{{!showCities}}"> |
<view class="step-title">鸡蛋估价系统</view> |
||||
<view class="step-title">选择客户地区</view> |
<view class="step-description"> |
||||
<view class="step-subtitle">请选择您所在的省份</view> |
<text>欢迎使用鸡蛋估价功能!\n\n本系统将帮助您快速估算鸡蛋的市场价值。</text> |
||||
|
\n\n<text>估价流程:\n1. 选择您希望了解价格的时间范围\n2. 选择您所在的地区\n3. 选择鸡蛋品种\n\n系统将基于这些信息为您提供初步的价格估算。</text> |
||||
<view class="category-list"> |
\n<text>请注意:\n• 此估价仅供参考,实际价格受市场波动影响\n• 建议咨询专业人士获取更准确的价格信息\n• 系统不支持真实交易,仅用于价格预估</text> |
||||
<view wx:for="{{provinces}}" wx:key="*this" |
|
||||
class="category-item" |
|
||||
bindtap="selectProvince" data-province="{{item}}"> |
|
||||
<view class="category-info"> |
|
||||
<view class="category-name">{{item}}</view> |
|
||||
<view class="category-desc">点击选择该省份</view> |
|
||||
</view> |
</view> |
||||
<view class="category-arrow">›</view> |
<view class="know-btn-wrapper"> |
||||
|
<button class="know-btn" bindtap="onIKnow">我知道了</button> |
||||
</view> |
</view> |
||||
</view> |
</view> |
||||
</view> |
</view> |
||||
|
|
||||
<!-- 城市选择 --> |
<!-- 步骤2:选择参数 --> |
||||
<view wx:if="{{showCities}}"> |
<view wx:if="{{currentStep === 2}}" class="evaluate-step"> |
||||
<view class="step-title">选择城市</view> |
|
||||
<view class="step-subtitle">{{selectedProvince}} - 请选择具体城市</view> |
|
||||
|
|
||||
<view class="city-header" bindtap="backToProvince"> |
|
||||
<view class="city-back">‹ 返回省份选择</view> |
|
||||
</view> |
|
||||
|
|
||||
<view class="category-list"> |
|
||||
<view wx:for="{{cities}}" wx:key="*this" |
|
||||
class="category-item {{evaluateData.region === selectedProvince + '-' + item ? 'selected' : ''}}" |
|
||||
bindtap="selectCity" data-city="{{item}}"> |
|
||||
<view class="category-info"> |
|
||||
<view class="category-name">{{item}}</view> |
|
||||
<view class="category-desc">点击选择该城市</view> |
|
||||
</view> |
|
||||
<view class="category-arrow">›</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 步骤2:选择鸡蛋品种 --> |
|
||||
<view wx:if="{{evaluateStep === 2}}" class="evaluate-step"> |
|
||||
<view class="step-content"> |
<view class="step-content"> |
||||
<view class="step-title">选择鸡蛋品种</view> |
<button class="back-btn" bindtap="goBack">← 返回上一步</button> |
||||
<view class="step-subtitle">请选择您要估价的鸡蛋品种(按每日成交单量排序)</view> |
<view class="step-title">选择估价参数</view> |
||||
|
<view class="step-subtitle">请完成以下选择,系统将为您估价</view> |
||||
|
|
||||
<view class="category-list"> |
<!-- 时间选择 --> |
||||
<view wx:for="{{eggBreeds}}" wx:key="name" wx:for-item="eggBreed" |
<view class="selection-group"> |
||||
class="category-item {{evaluateData.breed === eggBreed.name ? 'selected' : ''}}" |
<view class="group-title">选择时间</view> |
||||
bindtap="selectEggBreed" data-breed="{{eggBreed.name}}"> |
<view class="date-selector"> |
||||
<view class="category-info"> |
<!-- 月份选择 --> |
||||
<view class="category-name"> |
<picker mode="selector" |
||||
<text class="rank-number rank-{{eggBreed.rank <= 3 ? eggBreed.rank : ''}}">{{eggBreed.rank}}</text> |
range="{{months}}" |
||||
{{eggBreed.name}} |
value="{{selectedMonthIndex}}" |
||||
</view> |
bindchange="onMonthChange"> |
||||
<view class="category-desc">点击选择该品种</view> |
<view class="picker-wrapper small"> |
||||
|
<view class="picker-display {{selectedMonth !== '' ? 'selected' : ''}}"> |
||||
|
{{selectedMonth ? selectedMonth + '月' : '选择月份'}} |
||||
</view> |
</view> |
||||
<view class="category-arrow">›</view> |
<view class="picker-arrow">▼</view> |
||||
</view> |
</view> |
||||
</view> |
</picker> |
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 步骤3:选择具体规格 --> |
|
||||
<view wx:if="{{evaluateStep === 3}}" class="evaluate-step"> |
|
||||
<view class="step-content"> |
|
||||
<view class="step-title">选择具体规格</view> |
|
||||
<view class="step-subtitle">请选择鸡蛋的规格(按每日成交单量排序)</view> |
|
||||
|
|
||||
<view class="option-list"> |
<!-- 日期选择 --> |
||||
<view wx:for="{{eggSpecs}}" wx:key="name" wx:for-item="spec" |
<picker mode="selector" |
||||
class="option-item {{evaluateData.spec === spec.name ? 'selected' : ''}}" |
range="{{days}}" |
||||
bindtap="selectEggSpec" data-spec="{{spec.name}}"> |
value="{{selectedDayIndex}}" |
||||
<view class="option-text"> |
bindchange="onDayChange" |
||||
<text class="rank-number rank-{{spec.rank <= 3 ? spec.rank : ''}}">{{spec.rank}}</text> |
disabled="{{!selectedMonth}}"> |
||||
{{spec.name}} |
<view class="picker-wrapper small {{!selectedMonth ? 'disabled' : ''}}"> |
||||
|
<view class="picker-display {{selectedDay ? 'selected' : ''}}"> |
||||
|
{{selectedDay ? selectedDay + '日' : '选择日期'}} |
||||
</view> |
</view> |
||||
<view class="option-arrow">›</view> |
<view class="picker-arrow">▼</view> |
||||
</view> |
</view> |
||||
|
</picker> |
||||
</view> |
</view> |
||||
</view> |
</view> |
||||
</view> |
|
||||
|
|
||||
<!-- 步骤4:新鲜度选择 --> |
|
||||
<view wx:if="{{evaluateStep === 4}}" class="evaluate-step"> |
|
||||
<view class="step-content"> |
|
||||
<view class="step-title">新鲜程度</view> |
|
||||
<view class="step-subtitle">请选择鸡蛋的新鲜程度</view> |
|
||||
|
|
||||
<view class="condition-list"> |
|
||||
<view class="condition-item {{evaluateData.freshness === '非常新鲜' ? 'selected' : ''}}" |
|
||||
bindtap="selectCondition" data-type="freshness" data-value="非常新鲜"> |
|
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">非常新鲜</view> |
|
||||
<view class="condition-desc">7天内产出的新鲜鸡蛋</view> |
|
||||
</view> |
|
||||
<view class="condition-check" wx:if="{{evaluateData.freshness === '非常新鲜'}}">✓</view> |
|
||||
</view> |
|
||||
|
|
||||
<view class="condition-item {{evaluateData.freshness === '较新鲜' ? 'selected' : ''}}" |
<!-- 地区选择 --> |
||||
bindtap="selectCondition" data-type="freshness" data-value="较新鲜"> |
<view class="selection-group"> |
||||
<view class="condition-info"> |
<view class="group-title">选择地区</view> |
||||
<view class="condition-name">较新鲜</view> |
<picker mode="selector" |
||||
<view class="condition-desc">15天内产出的鸡蛋</view> |
range="{{regionOptions}}" |
||||
</view> |
value="{{selectedRegionIndex}}" |
||||
<view class="condition-check" wx:if="{{evaluateData.freshness === '较新鲜'}}">✓</view> |
bindchange="onRegionChange"> |
||||
|
<view class="picker-wrapper"> |
||||
|
<view class="picker-display {{selectedRegion ? 'selected' : ''}}"> |
||||
|
{{selectedRegion || '请选择地区'}} |
||||
</view> |
</view> |
||||
|
<view class="picker-arrow">▼</view> |
||||
<view class="condition-item {{evaluateData.freshness === '一般' ? 'selected' : ''}}" |
|
||||
bindtap="selectCondition" data-type="freshness" data-value="一般"> |
|
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">一般</view> |
|
||||
<view class="condition-desc">30天内产出的鸡蛋</view> |
|
||||
</view> |
</view> |
||||
<view class="condition-check" wx:if="{{evaluateData.freshness === '一般'}}">✓</view> |
</picker> |
||||
</view> |
</view> |
||||
|
|
||||
<view class="condition-item {{evaluateData.freshness === '不新鲜' ? 'selected' : ''}}" |
<!-- 品种选择 --> |
||||
bindtap="selectCondition" data-type="freshness" data-value="不新鲜"> |
<view class="selection-group"> |
||||
<view class="condition-info"> |
<view class="group-title">选择品种</view> |
||||
<view class="condition-name">不新鲜</view> |
<picker mode="selector" |
||||
<view class="condition-desc">30天以上的鸡蛋</view> |
range="{{breedOptions}}" |
||||
</view> |
value="{{selectedBreedIndex}}" |
||||
<view class="condition-check" wx:if="{{evaluateData.freshness === '不新鲜'}}">✓</view> |
bindchange="onBreedChange"> |
||||
</view> |
<view class="picker-wrapper"> |
||||
|
<view class="picker-display {{selectedBreed ? 'selected' : ''}}"> |
||||
|
{{selectedBreed || '请选择品种'}} |
||||
</view> |
</view> |
||||
|
<view class="picker-arrow">▼</view> |
||||
</view> |
</view> |
||||
|
</picker> |
||||
</view> |
</view> |
||||
|
|
||||
<!-- 步骤5:大小选择 --> |
<!-- 开始估价按钮 --> |
||||
<view wx:if="{{evaluateStep === 5}}" class="evaluate-step"> |
<view class="evaluate-btn-wrapper"> |
||||
<view class="step-content"> |
<button class="evaluate-btn {{selectedMonth && selectedDay && selectedRegion && selectedBreed ? 'active' : 'disabled'}}" |
||||
<view class="step-title">鸡蛋大小</view> |
bindtap="startEvaluation" |
||||
<view class="step-subtitle">请选择鸡蛋的大小规格</view> |
disabled="{{!selectedMonth || !selectedDay || !selectedRegion || !selectedBreed}}"> |
||||
|
开始估价 |
||||
<view class="condition-list"> |
</button> |
||||
<view class="condition-item {{evaluateData.size === '特大' ? 'selected' : ''}}" |
|
||||
bindtap="selectCondition" data-type="size" data-value="特大"> |
|
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">特大</view> |
|
||||
<view class="condition-desc">单枚≥70g</view> |
|
||||
</view> |
|
||||
<view class="condition-check" wx:if="{{evaluateData.size === '特大'}}">✓</view> |
|
||||
</view> |
|
||||
|
|
||||
<view class="condition-item {{evaluateData.size === '大' ? 'selected' : ''}}" |
|
||||
bindtap="selectCondition" data-type="size" data-value="大"> |
|
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">大</view> |
|
||||
<view class="condition-desc">单枚60-70g</view> |
|
||||
</view> |
</view> |
||||
<view class="condition-check" wx:if="{{evaluateData.size === '大'}}">✓</view> |
|
||||
</view> |
</view> |
||||
|
|
||||
<view class="condition-item {{evaluateData.size === '中' ? 'selected' : ''}}" |
|
||||
bindtap="selectCondition" data-type="size" data-value="中"> |
|
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">中</view> |
|
||||
<view class="condition-desc">单枚50-60g</view> |
|
||||
</view> |
|
||||
<view class="condition-check" wx:if="{{evaluateData.size === '中'}}">✓</view> |
|
||||
</view> |
</view> |
||||
|
|
||||
<view class="condition-item {{evaluateData.size === '小' ? 'selected' : ''}}" |
<!-- 步骤3:估价结果 --> |
||||
bindtap="selectCondition" data-type="size" data-value="小"> |
<view wx:if="{{currentStep === 3}}" class="evaluate-step"> |
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">小</view> |
|
||||
<view class="condition-desc">单枚<50g</view> |
|
||||
</view> |
|
||||
<view class="condition-check" wx:if="{{evaluateData.size === '小'}}">✓</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 步骤6:包装情况 --> |
|
||||
<view wx:if="{{evaluateStep === 6}}" class="evaluate-step"> |
|
||||
<view class="step-content"> |
|
||||
<view class="step-title">包装情况</view> |
|
||||
<view class="step-subtitle">请选择鸡蛋的包装完好程度</view> |
|
||||
|
|
||||
<view class="condition-list"> |
|
||||
<view class="condition-item {{evaluateData.packaging === '原装完整' ? 'selected' : ''}}" |
|
||||
bindtap="selectCondition" data-type="packaging" data-value="原装完整"> |
|
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">原装完整</view> |
|
||||
<view class="condition-desc">原包装完好无损</view> |
|
||||
</view> |
|
||||
<view class="condition-check" wx:if="{{evaluateData.packaging === '原装完整'}}">✓</view> |
|
||||
</view> |
|
||||
|
|
||||
<view class="condition-item {{evaluateData.packaging === '部分包装' ? 'selected' : ''}}" |
|
||||
bindtap="selectCondition" data-type="packaging" data-value="部分包装"> |
|
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">部分包装</view> |
|
||||
<view class="condition-desc">包装有轻微破损</view> |
|
||||
</view> |
|
||||
<view class="condition-check" wx:if="{{evaluateData.packaging === '部分包装'}}">✓</view> |
|
||||
</view> |
|
||||
|
|
||||
<view class="condition-item {{evaluateData.packaging === '散装' ? 'selected' : ''}}" |
|
||||
bindtap="selectCondition" data-type="packaging" data-value="散装"> |
|
||||
<view class="condition-info"> |
|
||||
<view class="condition-name">散装</view> |
|
||||
<view class="condition-desc">无原包装</view> |
|
||||
</view> |
|
||||
<view class="condition-check" wx:if="{{evaluateData.packaging === '散装'}}">✓</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 步骤7:数量选择 --> |
|
||||
<view wx:if="{{evaluateStep === 7}}" class="evaluate-step"> |
|
||||
<view class="step-content"> |
|
||||
<view class="step-title">请选择数量</view> |
|
||||
<view class="step-subtitle">请选择鸡蛋的数量</view> |
|
||||
|
|
||||
<view class="option-list"> |
|
||||
<view class="option-item {{evaluateData.quantity === '500' ? 'selected' : ''}}" bindtap="selectQuantity" data-quantity="500"> |
|
||||
<view class="option-text">500个</view> |
|
||||
<view class="option-arrow">›</view> |
|
||||
</view> |
|
||||
<view class="option-item {{evaluateData.quantity === '1000' ? 'selected' : ''}}" bindtap="selectQuantity" data-quantity="1000"> |
|
||||
<view class="option-text">1000个</view> |
|
||||
<view class="option-arrow">›</view> |
|
||||
</view> |
|
||||
<view class="option-item {{evaluateData.quantity === '2000' ? 'selected' : ''}}" bindtap="selectQuantity" data-quantity="2000"> |
|
||||
<view class="option-text">2000个</view> |
|
||||
<view class="option-arrow">›</view> |
|
||||
</view> |
|
||||
<view class="option-item {{evaluateData.quantity === '10000' ? 'selected' : ''}}" bindtap="selectQuantity" data-quantity="10000"> |
|
||||
<view class="option-text">10000个</view> |
|
||||
<view class="option-arrow">›</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 获取报价按钮 --> |
|
||||
<view class="get-price-section"> |
|
||||
<button class="get-price-btn" bindtap="getQuote">获取报价</button> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 步骤9:估价结果 --> |
|
||||
<view wx:if="{{evaluateStep === 9}}" class="evaluate-step result-step"> |
|
||||
<view class="step-content"> |
<view class="step-content"> |
||||
|
<button class="back-btn" bindtap="goBack">← 返回上一步</button> |
||||
<view class="result-header"> |
<view class="result-header"> |
||||
<view class="result-icon">💰</view> |
<view class="result-icon">💰</view> |
||||
<view class="result-title">估价完成</view> |
<view class="result-title">估价完成</view> |
||||
<view class="result-subtitle">基于您选择的商品信息计算得出</view> |
<view class="result-subtitle">基于您的选择,系统为您提供以下估价</view> |
||||
|
</view> |
||||
|
|
||||
<!-- 核心价格 --> |
<!-- 核心价格 --> |
||||
<view class="price-result"> |
<view class="price-card"> |
||||
<view class="price-label">预估总价</view> |
<view class="price-label">预估价格</view> |
||||
<view class="price-amount"> |
<view class="price-amount"> |
||||
<text class="price-symbol">¥</text> |
<text class="price-symbol">¥</text> |
||||
<text class="price-number">{{evaluateResult.totalPrice}}</text> |
<text class="price-number">{{evaluateResult.estimatedPrice}}</text> |
||||
</view> |
<text class="price-unit">元/斤</text> |
||||
<view class="price-unit">元({{evaluateData.quantity}}个)</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<view class="result-content"> |
|
||||
<!-- AI报价信息 --> |
|
||||
<view class="ai-quotation" wx:if="{{evaluateResult.aidate}}"> |
|
||||
<view class="ai-quotation-title"> |
|
||||
<text class="ai-icon">🤖</text> |
|
||||
AI智能报价 |
|
||||
</view> |
|
||||
<view class="ai-quotation-content">{{evaluateResult.aidate}}</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 商品信息 --> |
|
||||
<view class="product-info-card"> |
|
||||
<view class="product-type">{{evaluateData.breed}}</view> |
|
||||
<view class="product-details"> |
|
||||
<view class="product-spec">{{evaluateData.spec}}</view> |
|
||||
</view> |
</view> |
||||
|
<view class="price-range">价格区间:¥{{evaluateResult.priceRange}}</view> |
||||
</view> |
</view> |
||||
|
|
||||
<!-- 商品状况 --> |
<!-- 估价详情 --> |
||||
<view class="condition-summary"> |
<view class="evaluation-details"> |
||||
<view class="summary-title">商品状况</view> |
<view class="detail-title">估价详情</view> |
||||
<view class="condition-items"> |
<view class="detail-items"> |
||||
<view class="condition-item"> |
<view class="detail-item"> |
||||
<view class="condition-label">新鲜度</view> |
<view class="detail-label">时间</view> |
||||
<view class="condition-value">{{evaluateData.freshness}}</view> |
<view class="detail-value">{{selectedMonth}}月{{selectedDay}}日</view> |
||||
</view> |
|
||||
<view class="condition-item"> |
|
||||
<view class="condition-label">大小</view> |
|
||||
<view class="condition-value">{{evaluateData.size}}</view> |
|
||||
</view> |
</view> |
||||
<view class="condition-item"> |
<view class="detail-item"> |
||||
<view class="condition-label">包装</view> |
<view class="detail-label">地区</view> |
||||
<view class="condition-value">{{evaluateData.packaging}}</view> |
<view class="detail-value">{{selectedRegion}}</view> |
||||
</view> |
</view> |
||||
<view class="condition-item"> |
<view class="detail-item"> |
||||
<view class="condition-label">规格</view> |
<view class="detail-label">品种</view> |
||||
<view class="condition-value">{{evaluateData.spec}}</view> |
<view class="detail-value">{{selectedBreed}}</view> |
||||
</view> |
</view> |
||||
<view class="condition-item"> |
<view class="detail-item"> |
||||
<view class="condition-label">数量</view> |
<view class="detail-label">可信度</view> |
||||
<view class="condition-value">{{evaluateData.quantity}}个</view> |
<view class="detail-value">{{evaluateResult.confidence}}</view> |
||||
</view> |
|
||||
<view class="condition-item"> |
|
||||
<view class="condition-label">单价</view> |
|
||||
<view class="condition-value">{{evaluateResult.finalPrice}}元/斤</view> |
|
||||
</view> |
</view> |
||||
</view> |
</view> |
||||
</view> |
</view> |
||||
|
|
||||
<!-- 价格说明 --> |
<!-- 说明文字 --> |
||||
<view class="price-tips"> |
<view class="price-tips"> |
||||
<text class="tip-icon">💡</text> |
<text class="tip-icon">💡</text> |
||||
<text class="tip-text">此价格仅供参考,实际成交价可能因市场波动有所差异</text> |
<text class="tip-text">此价格为系统初步估算,仅供参考。实际成交价格可能因市场供需、季节因素、品质差异等有所变动。建议结合多个渠道信息做出决策。</text> |
||||
</view> |
|
||||
</view> |
</view> |
||||
|
|
||||
<!-- 操作按钮 --> |
<!-- 操作按钮 --> |
||||
<view class="result-actions"> |
<view class="result-actions"> |
||||
<button class="btn-secondary" bindtap="goToBuy">立即购买</button> |
<button class="btn-secondary" bindtap="resetEvaluation">重新估价</button> |
||||
<button class="btn-primary" bindtap="goToSell">即刻上架</button> |
<button class="btn-primary" bindtap="goToMarket">查看市场</button> |
||||
</view> |
</view> |
||||
</view> |
</view> |
||||
</view> |
</view> |
||||
|
|||||
Loading…
Reference in new issue