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.
146 lines
3.5 KiB
146 lines
3.5 KiB
// pages/2/2.js
|
|
const db = wx.cloud.database(); // 获取数据库实例
|
|
const app = getApp(); // 获取全局应用实例
|
|
|
|
Page({
|
|
|
|
async selectRandomIndexAndSetChosen() {
|
|
// 显示加载动画
|
|
wx.showLoading({
|
|
title: '加载中...', // 加载中的提示文字
|
|
mask: true // 防止触摸穿透
|
|
});
|
|
|
|
const score_list = []; // 用于存储所有数据的score
|
|
const index_list = []; // 用于存储所有数据的index
|
|
const MAX_LIMIT = 20; // 每次获取数据的最大数量
|
|
|
|
try {
|
|
// 获取所有数据并存入score_list和index_list
|
|
const total = await db.collection('demolist').count().then(res => res.total);
|
|
const batchTimes = Math.ceil(total / MAX_LIMIT);
|
|
|
|
const tasks = [];
|
|
for (let i = 0; i < batchTimes; i++) {
|
|
const promise = db.collection('demolist').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get().then(res => {
|
|
res.data.forEach(item => {
|
|
score_list.push(item.score);
|
|
index_list.push(item.index);
|
|
});
|
|
});
|
|
tasks.push(promise);
|
|
}
|
|
|
|
await Promise.all(tasks); // 等待所有数据请求完成
|
|
|
|
// 根据score_list中的值生成权重
|
|
const maxScore = 60;
|
|
const weights = score_list.map(score => maxScore - score);
|
|
|
|
// 计算权重总和
|
|
const totalWeight = weights.reduce((sum, weight) => sum + weight, 0);
|
|
|
|
// 生成一个介于 0 和 totalWeight 之间的随机数
|
|
const randomWeight = Math.random() * totalWeight;
|
|
|
|
// 根据随机数选择index
|
|
let cumulativeWeight = 0;
|
|
for (let i = 0; i < weights.length; i++) {
|
|
cumulativeWeight += weights[i];
|
|
if (randomWeight <= cumulativeWeight) {
|
|
// 将选中的 index 赋值给 app.js 中的 chosen_index 变量
|
|
getApp().globalData.chosen_index = index_list[i];
|
|
//getApp().globalData.chosen_index = 25;
|
|
console.log('选中的 index:', index_list[i]);
|
|
|
|
// 隐藏加载动画
|
|
wx.hideLoading();
|
|
|
|
// 跳转到 pages/3/3 页面
|
|
wx.redirectTo({
|
|
url: '../3/3'
|
|
});
|
|
return; // 跳转后结束函数
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('获取数据失败:', error);
|
|
// 如果出错也隐藏加载动画
|
|
wx.hideLoading();
|
|
}
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 页面的初始数据
|
|
*/
|
|
data: {
|
|
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面加载
|
|
*/
|
|
onLoad(options) {
|
|
// selectRandomIndexAndSetChosen()
|
|
// .then(() => {
|
|
// console.log('index 已成功赋值给 chosen_index');
|
|
// })
|
|
// .catch(err => {
|
|
// console.error('获取数据失败:', err);
|
|
// });
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面初次渲染完成
|
|
*/
|
|
onReady() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面显示
|
|
*/
|
|
onShow() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面隐藏
|
|
*/
|
|
onHide() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面卸载
|
|
*/
|
|
onUnload() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 页面相关事件处理函数--监听用户下拉动作
|
|
*/
|
|
onPullDownRefresh() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 页面上拉触底事件的处理函数
|
|
*/
|
|
onReachBottom() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 用户点击右上角分享
|
|
*/
|
|
onShareAppMessage() {
|
|
|
|
}
|
|
}) |