You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
557 lines
17 KiB
557 lines
17 KiB
// pages/evaluate/index.js
|
|
//估价暂未开放
|
|
Page({
|
|
data: {
|
|
evaluateStep: 1,
|
|
fromPreviousStep: false, // 用于标记是否从下一步返回
|
|
evaluateData: {
|
|
region: '',
|
|
type: '',
|
|
brand: '',
|
|
model: '',
|
|
freshness: '',
|
|
size: '',
|
|
packaging: '',
|
|
spec: ''
|
|
},
|
|
// 客户地区列表
|
|
regions: ['北京', '上海', '广州', '深圳', '杭州', '成都', '武汉', '西安', '南京', '重庆'],
|
|
evaluateResult: {
|
|
finalPrice: '0',
|
|
totalPrice: '0'
|
|
},
|
|
|
|
// 鸡蛋类型数据(包含成交单量)
|
|
eggTypes: [
|
|
{ name: '土鸡蛋', dailyOrders: 1258, desc: '散养鸡产出的优质鸡蛋' },
|
|
{ name: '洋鸡蛋', dailyOrders: 3421, desc: '规模化养殖的普通鸡蛋' },
|
|
{ name: '乌鸡蛋', dailyOrders: 892, desc: '乌鸡产出的特色鸡蛋' },
|
|
{ name: '有机鸡蛋', dailyOrders: 675, desc: '有机认证的高品质鸡蛋' },
|
|
{ name: '初生蛋', dailyOrders: 965, desc: '母鸡产的第一窝鸡蛋' }
|
|
],
|
|
|
|
// 鸡蛋品牌和型号数据(包含成交单量)
|
|
eggData: {
|
|
'土鸡蛋': {
|
|
brands: [
|
|
{ name: '农家乐', dailyOrders: 456 },
|
|
{ name: '山野', dailyOrders: 389 },
|
|
{ name: '生态园', dailyOrders: 243 },
|
|
{ name: '田园', dailyOrders: 170 }
|
|
],
|
|
models: {
|
|
'农家乐': [
|
|
{ name: '散养土鸡蛋', dailyOrders: 213 },
|
|
{ name: '林下土鸡蛋', dailyOrders: 132 },
|
|
{ name: '谷物喂养土鸡蛋', dailyOrders: 78 },
|
|
{ name: '农家土鸡蛋', dailyOrders: 33 }
|
|
],
|
|
'山野': [
|
|
{ name: '高山散养土鸡蛋', dailyOrders: 189 },
|
|
{ name: '林间土鸡蛋', dailyOrders: 124 },
|
|
{ name: '野生土鸡蛋', dailyOrders: 76 }
|
|
],
|
|
'生态园': [
|
|
{ name: '有机土鸡蛋', dailyOrders: 112 },
|
|
{ name: '无抗土鸡蛋', dailyOrders: 89 },
|
|
{ name: '生态土鸡蛋', dailyOrders: 42 }
|
|
],
|
|
'田园': [
|
|
{ name: '农家土鸡蛋', dailyOrders: 87 },
|
|
{ name: '走地鸡蛋', dailyOrders: 54 },
|
|
{ name: '自然放养土鸡蛋', dailyOrders: 29 }
|
|
]
|
|
}
|
|
},
|
|
'洋鸡蛋': {
|
|
brands: [
|
|
{ name: '德青源', dailyOrders: 1234 },
|
|
{ name: '圣迪乐村', dailyOrders: 987 },
|
|
{ name: '正大', dailyOrders: 765 },
|
|
{ name: '咯咯哒', dailyOrders: 435 }
|
|
],
|
|
models: {
|
|
'德青源': [
|
|
{ name: '安心鲜鸡蛋', dailyOrders: 543 },
|
|
{ name: '谷物鸡蛋', dailyOrders: 456 },
|
|
{ name: '营养鸡蛋', dailyOrders: 235 }
|
|
],
|
|
'圣迪乐村': [
|
|
{ name: '高品质鲜鸡蛋', dailyOrders: 432 },
|
|
{ name: '谷物鸡蛋', dailyOrders: 321 },
|
|
{ name: '生态鸡蛋', dailyOrders: 234 }
|
|
],
|
|
'正大': [
|
|
{ name: '鲜鸡蛋', dailyOrders: 345 },
|
|
{ name: '营养鸡蛋', dailyOrders: 243 },
|
|
{ name: '优选鸡蛋', dailyOrders: 177 }
|
|
],
|
|
'咯咯哒': [
|
|
{ name: '鲜鸡蛋', dailyOrders: 213 },
|
|
{ name: '谷物鸡蛋', dailyOrders: 145 },
|
|
{ name: '农家鸡蛋', dailyOrders: 77 }
|
|
]
|
|
}
|
|
},
|
|
'乌鸡蛋': {
|
|
brands: [
|
|
{ name: '山野', dailyOrders: 345 },
|
|
{ name: '生态园', dailyOrders: 289 },
|
|
{ name: '农家乐', dailyOrders: 258 }
|
|
],
|
|
models: {
|
|
'山野': [
|
|
{ name: '散养乌鸡蛋', dailyOrders: 156 },
|
|
{ name: '林下乌鸡蛋', dailyOrders: 102 },
|
|
{ name: '野生乌鸡蛋', dailyOrders: 87 }
|
|
],
|
|
'生态园': [
|
|
{ name: '有机乌鸡蛋', dailyOrders: 123 },
|
|
{ name: '无抗乌鸡蛋', dailyOrders: 98 },
|
|
{ name: '生态乌鸡蛋', dailyOrders: 68 }
|
|
],
|
|
'农家乐': [
|
|
{ name: '农家乌鸡蛋', dailyOrders: 112 },
|
|
{ name: '谷物乌鸡蛋', dailyOrders: 93 },
|
|
{ name: '散养乌鸡蛋', dailyOrders: 53 }
|
|
]
|
|
}
|
|
},
|
|
'有机鸡蛋': {
|
|
brands: [
|
|
{ name: '生态园', dailyOrders: 289 },
|
|
{ name: '山野', dailyOrders: 213 },
|
|
{ name: '田园', dailyOrders: 173 }
|
|
],
|
|
models: {
|
|
'生态园': [
|
|
{ name: '有机认证鸡蛋', dailyOrders: 132 },
|
|
{ name: '无抗有机鸡蛋', dailyOrders: 98 },
|
|
{ name: '生态有机鸡蛋', dailyOrders: 59 }
|
|
],
|
|
'山野': [
|
|
{ name: '有机散养鸡蛋', dailyOrders: 98 },
|
|
{ name: '有机谷物鸡蛋', dailyOrders: 76 },
|
|
{ name: '野生有机鸡蛋', dailyOrders: 39 }
|
|
],
|
|
'田园': [
|
|
{ name: '有机农家鸡蛋', dailyOrders: 89 },
|
|
{ name: '有机初生蛋', dailyOrders: 54 },
|
|
{ name: '自然有机鸡蛋', dailyOrders: 30 }
|
|
]
|
|
}
|
|
},
|
|
'初生蛋': {
|
|
brands: [
|
|
{ name: '农家乐', dailyOrders: 342 },
|
|
{ name: '山野', dailyOrders: 312 },
|
|
{ name: '生态园', dailyOrders: 311 }
|
|
],
|
|
models: {
|
|
'农家乐': [
|
|
{ name: '土鸡初生蛋', dailyOrders: 156 },
|
|
{ name: '散养初生蛋', dailyOrders: 112 },
|
|
{ name: '农家初生蛋', dailyOrders: 74 }
|
|
],
|
|
'山野': [
|
|
{ name: '高山初生蛋', dailyOrders: 145 },
|
|
{ name: '林下初生蛋', dailyOrders: 98 },
|
|
{ name: '野生初生蛋', dailyOrders: 69 }
|
|
],
|
|
'生态园': [
|
|
{ name: '有机初生蛋', dailyOrders: 134 },
|
|
{ name: '无抗初生蛋', dailyOrders: 102 },
|
|
{ name: '生态初生蛋', dailyOrders: 75 }
|
|
]
|
|
}
|
|
}
|
|
},
|
|
|
|
eggBrands: [],
|
|
eggModels: []
|
|
},
|
|
|
|
onLoad() {
|
|
console.log('估价页面初始化')
|
|
// 页面加载时,对鸡蛋类型按成交单量降序排序并添加排名
|
|
const sortedTypes = [...this.data.eggTypes].sort((a, b) => b.dailyOrders - a.dailyOrders);
|
|
// 添加排名属性
|
|
const typesWithRank = sortedTypes.map((type, index) => ({
|
|
...type,
|
|
rank: index + 1
|
|
}));
|
|
this.setData({
|
|
eggTypes: typesWithRank,
|
|
fromPreviousStep: false // 初始化标志
|
|
});
|
|
},
|
|
|
|
// 选择客户地区
|
|
selectRegion(e) {
|
|
const region = e.currentTarget.dataset.region;
|
|
this.setData({
|
|
'evaluateData.region': region
|
|
});
|
|
|
|
// 只有当当前步骤是1且已经从下一步返回时,才自动进入下一步
|
|
if (this.data.evaluateStep === 1 && !this.data.fromPreviousStep) {
|
|
this.setData({
|
|
evaluateStep: 2
|
|
});
|
|
}
|
|
|
|
// 重置标志
|
|
this.setData({
|
|
fromPreviousStep: false
|
|
});
|
|
},
|
|
|
|
// 选择鸡蛋类型
|
|
selectEggType(e) {
|
|
const type = e.currentTarget.dataset.type;
|
|
// 获取该类型下的品牌,并按成交单量降序排序
|
|
const brands = [...this.data.eggData[type].brands].sort((a, b) => b.dailyOrders - a.dailyOrders);
|
|
// 添加排名属性
|
|
const brandsWithRank = brands.map((brand, index) => ({
|
|
...brand,
|
|
rank: index + 1
|
|
}));
|
|
|
|
this.setData({
|
|
'evaluateData.type': type,
|
|
eggBrands: brandsWithRank,
|
|
// 清除之前选择的品牌和型号
|
|
'evaluateData.brand': '',
|
|
'evaluateData.model': '',
|
|
eggModels: []
|
|
});
|
|
|
|
// 只有当当前步骤是2且已经从下一步返回时,才自动进入下一步
|
|
if (this.data.evaluateStep === 2 && !this.data.fromPreviousStep) {
|
|
this.setData({
|
|
evaluateStep: 3
|
|
});
|
|
}
|
|
|
|
// 重置标志
|
|
this.setData({
|
|
fromPreviousStep: false
|
|
});
|
|
},
|
|
|
|
// 选择鸡蛋品牌
|
|
selectEggBrand(e) {
|
|
const brand = e.currentTarget.dataset.brand;
|
|
const type = this.data.evaluateData.type;
|
|
// 获取该品牌下的型号,并按成交单量降序排序
|
|
const models = [...this.data.eggData[type].models[brand]].sort((a, b) => b.dailyOrders - a.dailyOrders);
|
|
// 添加排名属性
|
|
const modelsWithRank = models.map((model, index) => ({
|
|
...model,
|
|
rank: index + 1
|
|
}));
|
|
|
|
this.setData({
|
|
'evaluateData.brand': brand,
|
|
eggModels: modelsWithRank,
|
|
// 清除之前选择的型号
|
|
'evaluateData.model': ''
|
|
});
|
|
|
|
// 只有当当前步骤是3且已经从下一步返回时,才自动进入下一步
|
|
if (this.data.evaluateStep === 3 && !this.data.fromPreviousStep) {
|
|
this.setData({
|
|
evaluateStep: 4
|
|
});
|
|
}
|
|
|
|
// 重置标志
|
|
this.setData({
|
|
fromPreviousStep: false
|
|
});
|
|
},
|
|
|
|
// 选择鸡蛋型号
|
|
selectEggModel(e) {
|
|
const model = e.currentTarget.dataset.model;
|
|
this.setData({
|
|
'evaluateData.model': model
|
|
});
|
|
|
|
// 只有当当前步骤是4且已经从下一步返回时,才自动进入下一步
|
|
if (this.data.evaluateStep === 4 && !this.data.fromPreviousStep) {
|
|
this.setData({
|
|
evaluateStep: 5
|
|
});
|
|
}
|
|
|
|
// 重置标志
|
|
this.setData({
|
|
fromPreviousStep: false
|
|
});
|
|
},
|
|
|
|
// 格式化订单数量显示
|
|
formatOrderCount(count) {
|
|
if (count >= 10000) {
|
|
return (count / 10000).toFixed(1) + '万';
|
|
} else if (count >= 1000) {
|
|
return (count / 1000).toFixed(1) + 'k';
|
|
}
|
|
return count.toString();
|
|
},
|
|
|
|
// 选择条件
|
|
selectCondition(e) {
|
|
const { type, value } = e.currentTarget.dataset;
|
|
this.setData({
|
|
[`evaluateData.${type}`]: value
|
|
});
|
|
|
|
// 只有当当前步骤不是从返回过来的,才自动进入下一步
|
|
if (!this.data.fromPreviousStep) {
|
|
// 根据当前步骤自动进入下一步
|
|
const currentStep = this.data.evaluateStep;
|
|
if (currentStep === 5) {
|
|
this.setData({ evaluateStep: 6 });
|
|
} else if (currentStep === 6) {
|
|
this.setData({ evaluateStep: 7 });
|
|
} else if (currentStep === 7) {
|
|
this.setData({ evaluateStep: 8 });
|
|
}
|
|
}
|
|
|
|
// 重置标志
|
|
this.setData({
|
|
fromPreviousStep: false
|
|
});
|
|
},
|
|
|
|
// 选择规格
|
|
selectSpec(e) {
|
|
const spec = e.currentTarget.dataset.spec;
|
|
this.setData({
|
|
'evaluateData.spec': spec
|
|
});
|
|
},
|
|
|
|
// 获取报价
|
|
getQuote() {
|
|
if (this.data.evaluateData.spec) {
|
|
this.calculatePrice();
|
|
} else {
|
|
wx.showToast({
|
|
title: '请选择规格',
|
|
icon: 'none',
|
|
duration: 2000
|
|
});
|
|
}
|
|
},
|
|
|
|
// 上一步
|
|
prevStep() {
|
|
if (this.data.evaluateStep > 1) {
|
|
this.setData({
|
|
evaluateStep: this.data.evaluateStep - 1,
|
|
fromPreviousStep: true // 标记是从下一步返回的
|
|
});
|
|
} else {
|
|
// 如果在第一步,返回上一页
|
|
wx.navigateBack();
|
|
}
|
|
},
|
|
|
|
// 计算价格
|
|
calculatePrice() {
|
|
const { region, type, brand, model, freshness, size, packaging, spec } = this.data.evaluateData;
|
|
|
|
// 校验必填参数
|
|
if (!region || !type || !brand || !model || !freshness || !size || !packaging || !spec) {
|
|
wx.showToast({
|
|
title: '请完成所有选项',
|
|
icon: 'none',
|
|
duration: 2000
|
|
});
|
|
return;
|
|
}
|
|
|
|
// 显示加载中
|
|
wx.showLoading({
|
|
title: '计算中...',
|
|
mask: true
|
|
});
|
|
|
|
// 模拟计算延迟
|
|
setTimeout(() => {
|
|
// 基础价格表(元/斤)
|
|
const basePrices = {
|
|
'土鸡蛋': 25,
|
|
'洋鸡蛋': 15,
|
|
'乌鸡蛋': 35,
|
|
'有机鸡蛋': 40,
|
|
'初生蛋': 45
|
|
};
|
|
|
|
// 品牌溢价系数
|
|
const brandMultipliers = {
|
|
'农家乐': 1.0,
|
|
'山野': 1.1,
|
|
'生态园': 1.2,
|
|
'田园': 1.0,
|
|
'德青源': 1.1,
|
|
'圣迪乐村': 1.15,
|
|
'正大': 1.05,
|
|
'咯咯哒': 1.0
|
|
};
|
|
|
|
// 型号溢价系数
|
|
const modelMultipliers = {
|
|
// 土鸡蛋型号系数
|
|
'散养土鸡蛋': 1.1, '林下土鸡蛋': 1.15, '谷物喂养土鸡蛋': 1.2, '农家土鸡蛋': 1.0,
|
|
'高山散养土鸡蛋': 1.25, '林间土鸡蛋': 1.1, '野生土鸡蛋': 1.3,
|
|
'有机土鸡蛋': 1.3, '无抗土鸡蛋': 1.25, '生态土鸡蛋': 1.2,
|
|
'走地鸡蛋': 1.1, '自然放养土鸡蛋': 1.12,
|
|
|
|
// 洋鸡蛋型号系数
|
|
'安心鲜鸡蛋': 1.0, '谷物鸡蛋': 1.1, '营养鸡蛋': 1.05,
|
|
'高品质鲜鸡蛋': 1.15, '生态鸡蛋': 1.2,
|
|
'鲜鸡蛋': 1.0, '优选鸡蛋': 1.1,
|
|
'农家鸡蛋': 1.05,
|
|
|
|
// 乌鸡蛋型号系数
|
|
'散养乌鸡蛋': 1.1, '林下乌鸡蛋': 1.15, '野生乌鸡蛋': 1.3,
|
|
'有机乌鸡蛋': 1.3, '无抗乌鸡蛋': 1.25, '生态乌鸡蛋': 1.2,
|
|
'农家乌鸡蛋': 1.0, '谷物乌鸡蛋': 1.1,
|
|
|
|
// 有机鸡蛋型号系数
|
|
'有机认证鸡蛋': 1.3, '无抗有机鸡蛋': 1.35, '生态有机鸡蛋': 1.32,
|
|
'有机散养鸡蛋': 1.25, '有机谷物鸡蛋': 1.2, '野生有机鸡蛋': 1.4,
|
|
'有机农家鸡蛋': 1.1, '有机初生蛋': 1.4, '自然有机鸡蛋': 1.2,
|
|
|
|
// 初生蛋型号系数
|
|
'土鸡初生蛋': 1.2, '散养初生蛋': 1.25, '农家初生蛋': 1.15,
|
|
'高山初生蛋': 1.3, '林下初生蛋': 1.25, '野生初生蛋': 1.45,
|
|
'有机初生蛋': 1.4, '无抗初生蛋': 1.35, '生态初生蛋': 1.3
|
|
};
|
|
|
|
// 状况调整系数
|
|
const freshnessCoefficient = { '非常新鲜': 1.0, '较新鲜': 0.85, '一般': 0.7, '不新鲜': 0.4 };
|
|
const sizeCoefficient = { '特大': 1.3, '大': 1.1, '中': 1.0, '小': 0.8 };
|
|
const packagingCoefficient = { '原装完整': 1.0, '部分包装': 0.9, '散装': 0.8 };
|
|
|
|
// 计算单价(元/斤)
|
|
let unitPrice = basePrices[type] || 20;
|
|
const brandMultiplier = brandMultipliers[brand] || 1.0;
|
|
const modelMultiplier = modelMultipliers[model] || 1.0;
|
|
|
|
unitPrice = unitPrice * brandMultiplier * modelMultiplier;
|
|
unitPrice *= freshnessCoefficient[freshness];
|
|
unitPrice *= sizeCoefficient[size];
|
|
unitPrice *= packagingCoefficient[packaging];
|
|
|
|
// 确保价格合理
|
|
unitPrice = Math.max(unitPrice, 1);
|
|
|
|
// 计算总价(假设每个鸡蛋约0.05斤)
|
|
const eggsPerKilogram = 20; // 约20个鸡蛋/斤
|
|
const specCount = parseInt(spec) || 0;
|
|
const totalWeight = specCount / eggsPerKilogram;
|
|
const totalPrice = unitPrice * totalWeight;
|
|
|
|
// 更新结果
|
|
this.setData({
|
|
evaluateResult: {
|
|
finalPrice: unitPrice.toFixed(1),
|
|
totalPrice: totalPrice.toFixed(1)
|
|
},
|
|
evaluateStep: 9
|
|
}, () => {
|
|
wx.hideLoading();
|
|
});
|
|
|
|
}, 800);
|
|
},
|
|
|
|
// 重新估价
|
|
restartEvaluate() {
|
|
this.setData({
|
|
evaluateStep: 1,
|
|
evaluateData: {
|
|
region: '',
|
|
type: '',
|
|
brand: '',
|
|
model: '',
|
|
freshness: '',
|
|
size: '',
|
|
packaging: '',
|
|
spec: ''
|
|
},
|
|
evaluateResult: {
|
|
finalPrice: '0',
|
|
totalPrice: '0'
|
|
},
|
|
fromPreviousStep: false // 重置标志
|
|
});
|
|
},
|
|
|
|
// 返回首页
|
|
backToHome() {
|
|
wx.navigateBack();
|
|
},
|
|
|
|
// 跳转到购物页面
|
|
goToBuy() {
|
|
console.log('goToBuy 函数被调用');
|
|
// 使用与custom-tab-bar相同的跳转逻辑
|
|
const url = 'pages/buyer/index';
|
|
|
|
// 先尝试使用navigateTo
|
|
wx.navigateTo({
|
|
url: '/' + url,
|
|
success: function(res) {
|
|
console.log('使用navigateTo成功跳转到购物页面:', res);
|
|
},
|
|
fail: function(error) {
|
|
console.log('navigateTo失败,尝试使用reLaunch:', error);
|
|
// 如果navigateTo失败,使用reLaunch
|
|
wx.reLaunch({
|
|
url: '/' + url,
|
|
success: function(res) {
|
|
console.log('使用reLaunch成功跳转到购物页面:', res);
|
|
},
|
|
fail: function(err) {
|
|
console.error('reLaunch也失败:', err);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
// 跳转到货源页面
|
|
goToSell() {
|
|
console.log('goToSell 函数被调用');
|
|
// 使用与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
|
|
wx.reLaunch({
|
|
url: '/' + url,
|
|
success: function(res) {
|
|
console.log('使用reLaunch成功跳转到货源页面:', res);
|
|
},
|
|
fail: function(err) {
|
|
console.error('reLaunch也失败:', err);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
})
|