雲開發中使用vantweapp的upload組件——更新圖片操作


在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)
    })
  },

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM