学习:uniapp全栈微信小程序vue3后台(30)
146.根据uni-datetime-picker日期范围获取数据
/pages/data/data-index
// 下载排行榜数据获取函数.该函数用于异步获取下载排行榜的数据,并根据返回结果更新组件状态const downloadRankOrder = async () => {// 调用overviewCloudObj对象的rankOrder方法获取下载排行榜数据// 参数包括类型为"download"和数据范围dataRange.valuelet res = await overviewCloudObj.rankOrder({ type: "download", dataRange: dataRange.value });// 将获取到的数据赋值给downloadList,用于渲染排行榜列表downloadList.value = res;}// 获取分数排名数据该函数用于异步请求并更新分数排名列表const scoreRankOrder = async () => {// 发起异步请求获取分数排名数据,传入类型和数据范围参数let res = await overviewCloudObj.rankOrder({ type: "score", dataRange: dataRange.value });// 更新分数列表数据scoreList.value = res;}
/uniCloud-alipay/cloudfunctions/admin-data-overview/index.obj.js
//排行榜async rankOrder({ type = null, dataRange = [], number = 9 } = {}) {number = Math.min(number, 15)// 根据type确定要查询的表名,如果是'download'则查询'wallpaper-download'表,如果是'score'则查询'wallpaper-score'表,否则为空字符串let table = type == 'download' ? 'wallpaper-download' : type == 'score' ? 'wallpaper-score' : ''// 如果dataRange数组有长度,则构建时间范围查询条件// 使用dayjs处理开始时间和结束时间,分别设置为一天的开始和结束// 如果dataRange为空,则条件为空对象let wre = dataRange.length ?`createTime >= ${dayjs(dataRange[0]).startOf("day").valueOf()} && createTime<=${dayjs(dataRange[1]).endOf("day").valueOf()}` : {};// 初始化数据库JQL操作对象const dbJQL = uniCloud.databaseForJQL({clientInfo: this.getClientInfo()})// 使用解构赋值从查询结果中获取dataList,如果没有数据则默认为空数组let { data: dataList = [] } = await dbJQL.collection(table).where(wre) // 设置查询条件.groupBy("picid") // 按picid字段进行分组.groupField("count(*) as countTotal") // 分组后计算每组的数量,并命名为countTotal.orderBy("countTotal desc") // 按countTotal降序排序.limit(number) // 限制返回的记录数量.get(); // 执行查询操作,获取结果// 使用map方法将dataList中的每个item映射为其picid属性,生成一个新的数组picidArrlet picidArr = dataList.map(item => item.picid);// 使用解构赋值从查询结果中获取piclist数据,默认值为空数组let { data: piclist = [] } = await dbJQL.collection("wallpaper-piclist").where(`_id in ${JSON.stringify(picidArr)}`) // 设置查询条件,筛选出_id在picidArr数组中的文档.field("_id,picurl") // 指定只返回_id和picurl这两个字段.get(); // 执行查询操作,获取结果/*** 遍历dataList数组,为每个元素添加picurl属性* 通过picid在piclist数组中查找对应的图片信息* 使用map方法创建一个新数组,保持原有数据的同时添加新属性*/dataList = dataList.map(item => {// 在piclist数组中查找picid与当前item的picid相匹配的元素let find = piclist.find(find => find._id == item.picid);// 返回新对象,保留原有item的所有属性,并添加picurl属性return {...item, // 使用展开运算符复制item的所有属性picurl: find.picurl}})return dataList},
日期选择时调用 downloadRankOrder() , scoreRankOrder()方法
/pages/data/data-index
const dataChange = (e) => {downloadRankOrder();scoreRankOrder();}
loading
/pages/data/data-index
传入nodata
// 使用ref创建响应式数据,用于标记是否无数据const downloadNodata = ref(false);// 下载排行榜数据获取函数.该函数用于异步获取下载排行榜的数据,并根据返回结果更新组件状态const downloadRankOrder = async () => {// 设置下载无数据状态为false,表示正在加载数据downloadNodata.value = false;// 调用overviewCloudObj对象的rankOrder方法获取下载排行榜数据// 参数包括类型为"download"和数据范围dataRange.valuelet res = await overviewCloudObj.rankOrder({ type: "download", dataRange: dataRange.value });// 检查返回结果是否为空数组// 如果没有数据,设置downloadNodata为true,表示无数据可显示if (!res.length) downloadNodata.value = true;// 将获取到的数据赋值给downloadList,用于渲染排行榜列表downloadList.value = res;}// 获取分数排名数据该函数用于异步请求并更新分数排名列表const scoreRankOrder = async () => {// 设置无数据状态为false,表示正在加载数据scoreNodata.value = false;// 发起异步请求获取分数排名数据,传入类型和数据范围参数let res = await overviewCloudObj.rankOrder({ type: "score", dataRange: