在app.js中我封装了云数据库操作的方法,因此在页面js中直接调用,如
app.updateInfo(that.data.setName,_id,theInfo,e=>{})就是封装的修改数据库方法,参数分别为云数据库集合名称、被修改的数据id,更改后的数据,回调函数
1 /** 2 * 页面的初始数据 3 */ 4 data: { 5 setName: '' , //要请求的数据库库名 6 7 updateId: '' , //要更新的商品的Id 8 fileList:[], //上传文件临时存储数组 9 folder: 'goods' , //云存储中文件上传的目标文件夹 10 tmpUrlArr: [], //需要预览的图片http链接列表(云存储中File ID) 11 12 13 // delGoodsId: "", //要删除的商品id 14 cardNum:1, //商品操作选项卡界面,默认第一页,即添加商品(第二页上架修改,第三页送货管理) 15 time:0, // 16 manageList: [], //添加到云数据库库后,根据创建时间降序排列的数据,即修改数据时需要显示的数据 17 path:'' , //拼接云存储中文件路径 18 19 20 //上传的信息 21 classify:'' , //商品所属类别 22 goodsId: null , //商品编号 23 name:null , //商品名称 24 price: null , //价格 25 unit: null , //单位 26 detail: "", //商品详细介绍 27 myClass: 0 , //今日特惠, 0 表示不加入特惠,1表示加入 28 recommend: 0 ,//店主推荐 29 onShow: true, //销售状态,默认是上架 30 myClass_Arr: ['否','是'], //特惠商品名单选项,添加商品时可以设置商品是否为今日优惠 31 recommend_Arr: ['否','是'], //是否加入推荐商品名单 32 33 delDBData:[] , //云存储中要被删除的文件列表 34 35 },
/** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // console.log('传递的商品id',options.id) // console.log('传递的数据库名setName',options.setName) //要修改的商品id // console.log(options.id) var updateId = options.id ; this.setData({ updateId: updateId , setName: options.setName }) var that = this ; app.getInfoWhere(options.setName,{_id: updateId}, e=>{ // console.log(e) // console.log({_id: updateId}) //商品详情信息 var goodItem = e.data["0"] ; that.setData({ classify: goodItem.classify , name: goodItem.name , price: goodItem.price , unit: goodItem.unit , detail: goodItem.detail , myClass: goodItem.myClass , recommend: goodItem.recommend , onShow: goodItem.onShow , time: goodItem.time, goodsId: goodItem.goodsId , // tmpUrlArr: goodItem.tmpUrlArr, //临时文件应显示数据库中存储的图片,imgUrl和tmpUrlArr数组应该归零,重新将fileList修改后的图片添加进去 fileList:goodItem.tmpUrlArr }) },
/** * ----------------获取商品信息----------------------------- * */ //获取商品类别 getClassify(e){ // console.log(e) this.setData({ classify: e.detail }) }, //获取商品名称 getName(e){ // console.log(e) this.setData({ name: e.detail }) }, //获取商品价格 getPrice(e){ this.setData({ price: e.detail }) }, //获取商品单位 getUnit(e){ this.setData({ unit: e.detail }) }, // getInfoText(e){ this.setData({ detail: e.detail }) },
/** * -----------------------上传文件-------------------------- * */ //添加图片事件 afterRead(e){ if(!this.data.name || !this.data.classify){ wx.showToast({ title: '请先输入商品分类和名称' }); return } const file = e.detail.file; // console.log(file) this.data.fileList.unshift(file) ; //获取更新图片临时存数组中的数据 var files = this.data.fileList; this.setData({ fileList: files //重置才能显示数据 }) },
// 上传图片 uploadToCloud() { // console.log(this.data.fileList) wx.cloud.init(); //设置文件存储格式 var path = this.data.folder + '/' + this.data.name + Math.random().toString() ; this.setData({ path }) if (!this.data.fileList) { wx.showToast({ title: '请先选择图片' }); return } else { //获取图片临时存数组中的数据 var fileList = this.data.fileList; // console.log(fileList) const uploadTasks = fileList.map((file,index) => this.uploadFilePromise(`myImage${index}.png`, file)); Promise.all(uploadTasks) .then(data => { // console.log('data',data) if(data){ // [0:{errMsg:'xxx',fileID'}] wx.showToast({ title: '上传成功', icon: 'none' }); const newFileList = data.map(item => ({ url:item.fileID }) ) // console.log('1111111111111',newFileList) this.setData({ tmpUrlArr: newFileList , fileList: [] }); } }) .catch(e => { wx.showToast({ title: '上传失败', icon: 'none' }); console.log(e); }); } //删除图片 if(this.data.delDBData.length > 0){ //说明数据库中有需要删除的图片 var fileList = this.data.delDBData; // console.log(fileList) //调用删除云数据库文件的方法 this.delDBImgPromise(fileList) } },
//上传图片-云存储方法调用(重点) uploadFilePromise(fileName, chooseResult) { var that = this ; // console.log('----------',fileName, chooseResult) //需要对上传的图片进行判断,如果是已经存储到数据库的图片,参数为url:,直接保存到tmpUrlArr, //如果数据库中没有该图片,参数为path,继续调用云函数,上传图片 if(chooseResult.url){ //说明该图片存在于数据库 // console.log('chooseResult',chooseResult) //直接返回组装好的数据 return {errMsg: "cloud.uploadFile:ok",fileID:chooseResult.url} }else{ return wx.cloud.uploadFile({ cloudPath: that.data.path + fileName, filePath: chooseResult.path }); } },
//删除图片,最新上传的图片下标为0 delUploaderImg:function(e){ // console.log(e.detail.index) // console.log(this.data.fileList) //展示的图片列表 var newfile = this.data.fileList //被删除的数据 var delDBData = this.data.delDBData ; //已存在数据库中的图属性为url,没有上传就要删除的图片属性为path,只删除数据库中的图片 // console.log(newfile[e.detail.index]) if(newfile[e.detail.index].url){ delDBData.unshift(newfile[e.detail.index]) // console.log(delDBData) } //更新后要显示的数据 newfile.splice(e.detail.index,1); this.setData({ fileList: newfile , //要上传及显示的图片 delDBData: delDBData//要被删除的图片列表 }) // console.log(this.data.fileList) },
//云存储图片删除操作 delDBImgPromise( fileList){ //要删除的文件路径 // [ // {url: "cloud://tgnj-zq9ar.7467-tgnj-zq9ar-1300840619/swiperImgList/chaijiyou1.jpeg"} // ] // console.log( fileList) var files = [] ; for(var i=0;i<fileList.length;i++){ files.push(fileList[i].url) } // console.log(files) //需要修改为 ['','','',''] 格式 if(files.length>0){ wx.cloud.deleteFile({ fileList: files }).then(res=>{ //被从云存储中删除的文件列表 // console.log(res.fileList) }).catch(error=>{ console.error(error); }) } },
/** * ---------------------------- 修改商品 确认按钮 ----------------------------- */ addGoodsInfo:function(e){ // console.log('确认提交时,tmpUrlArr的值为',this.data.tmpUrlArr) if( !this.data.tmpUrlArr.length ){ wx.showToast({ title: '请先提交图片' }); } var that = this ; var _id = that.data.updateId ; //要修改的商品id // console.log(that.data.classify); // console.log(that.data.name); // console.log(that.data.price); // console.log(that.data.unit); // console.log(this.data.tmpUrlArr) //上传的所有图片数组 // console.log(this.data.tmpUrlArr[0]) //商品默认显示第一张图片,因此需要获取上传的第一张图片地址 //检查商品分类、名称是否填写 if(that.data.classify && that.data.name ){ //输入的信息已存储到data中,将data中相关信息构建为新的对象, // 并添加 创建时间time 属性 和作为商品封面的第一张图片地址imgUrl 属性 //使用promise提交数据 new Promise((resolve,reject)=>{ const { classify, name, price, unit, detail, myClass, recommend, tmpUrlArr, onShow } = that.data const theInfo = { classify, name, price, unit, detail, myClass, recommend, tmpUrlArr, onShow } theInfo['imgUrl'] = that.data.tmpUrlArr[0] //imgUri为商品默认的封面图 // theInfo['time'] = parseInt(app.CurrentTime()) // theInfo['goodsId'] = parseInt((new Date()).getTime()) //使用时间戳生成商品编码 resolve(theInfo) }).then(theInfo => { // console.log(theInfo) // 更新数据(集合名,id,更新后的数据,回调函数) // updateInfo:function(setName,_id,updateInfoObj,callback){ app.updateInfo(that.data.setName,_id,theInfo,e=>{ // console.log(e) wx.showToast({ title: '修改商品成功' }) that.setData({ fileList: [] }) }) //根据添加数据时间进行降序排序后取出数据(集合名,需要排序的字段,排序规则升序或降序,回调函数) // app.getInfoByOrder(that.data.setName,'time','desc', e=>{ // that.setData({ // manageList: e.data // }) // // console.log(that.data.manageList) // }) //刷新页面 that.onLoad(); }) }else{ wx.showToast({ title: '请将必填项补充完整' }) } },
/** * --------------封装修改manageList值得方法------------- */ getManageList:function(){ var that = this ; //根据添加数据时间进行降序排序后取出数据(集合名,需要排序的字段,排序规则升序或降序,回调函数) app.getInfoByOrder(that.data.setName,'time','desc', e=>{ that.setData({ manageList: e.data }) // console.log(that.data.manageList) }) },
来源:https://www.cnblogs.com/marquess/p/12180135.html