bluewatercg / tcloudbase

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

tcloudbase

##作业4

  • 将教程范例(意见反馈平台DEMO)中的管理端部分的列表加载变成实时数据库监听形式触发。?
/**
 * 加载意见列表(调用云函数:init)
 */
function initlist() {
    const db = cloud.database()
    const _ = db.command
    db.collection('advice')
        // 获取反馈不为空的数据
        .where({
            advice: _.neq("")
        })
        // 实时推送
        // 获取结果为 0 时需要清除浏览器缓存和 cookie
        .watch({
            onChange: res => {
                console.log(res.docs);
                // 处理日期对象显示异常
                let list = res.docs.map(item => {
                    item.adddue = new Date(item.adddue.$date);
                    return item;
                })
                refreshlist(list)
            },
            onError: err => {
                console.error(err);
            }
        })
}
  • 用户端列表加载云函数适配超过100条的场景,采用promise all的形式进行改造,使其可以支持超过100条
const pagesize = 100;
exports.main = async (event, context) => {
  let res = {};
  const auth = cloud.auth().getUserInfo();
  const uid = auth.uid;
  if(uid!=null){
    const ids = (await db.collection('admin').where({
        _id:uid
      }).get()).data;
      if(ids.length!=0){
        console.log(ids[0]);
        const countResult = await db.collection('advice').count();
          // 获得数据库总条数
        const total = countResult.total;
          // 计算分页次数
        const batchTimes = Math.ceil(total / pagesize);
        const tasks = []
        // 循环添加 Promise 请求
        for (let i = 0; i < batchTimes; i++) {
          const promise = await db.collection('advice').skip(i * pagesize).limit(pagesize).orderBy('adddue', 'desc').get();
          tasks.push(promise);
        }
        res.list = (await Promise.all(tasks)).reduce((acc, cur) => {
           // 使用 reduce 拼接请求结果
          return {
            data: acc.data.concat(cur.data),
            errMsg: acc.errMsg,
          }
        }).data;
        res.code = 0;
      }
      else{
        res.code = 1;
      }

##作业5

  • 将教程范例的cloudtohttp函数使用sdk的getTempFileURL进行替换。
  • util.js
    async function cloudtohttp(src) {
    if(src==""){
        return "";
    }
    let result = await cloud.getTempFileURL({
        fileList: [src]
    }).then(rs=>{
        return rs
    })
    return result.fileList[0].tempFileURL;
    
    }
  • index.js
/**
 * 重新渲染意见列表
 * @param Array list 意见列表
 */
async function refreshlist(list){
 ....
    for(let n in tempitem.imgs){
        let img = document.createElement('img');
        img.src = await cloudtohttp(tempitem.imgs[n]);
        img.setAttribute('onclick', 'previewnetimg("' + img.src + '")');
        itemimages.appendChild(img);
    }
 ....
    }
}

About


Languages

Language:JavaScript 67.1%Language:CSS 20.8%Language:HTML 12.1%