Parcourir la source

发布商品时上传图片

nnkwrik il y a 6 ans
Parent
commit
c2175dec0b

+ 13 - 12
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/GoodsController.java

@@ -7,6 +7,7 @@ import io.github.nnkwrik.common.token.injection.JWT;
 import io.github.nnkwrik.goodsservice.cache.BrowseCache;
 import io.github.nnkwrik.goodsservice.model.po.Goods;
 import io.github.nnkwrik.goodsservice.model.po.GoodsGallery;
+import io.github.nnkwrik.goodsservice.model.po.PostExample;
 import io.github.nnkwrik.goodsservice.model.vo.CategoryPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.GoodsDetailPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.CommentVo;
@@ -132,28 +133,28 @@ public class GoodsController {
     /**
      * 发布商品
      *
-     * @param goods
+     * @param post
      * @param user
      * @return
      */
     @PostMapping("/post")
-    public Response postGoods(@RequestBody Goods goods,
+    public Response postGoods(@RequestBody PostExample post,
                               @JWT(required = true) JWTUser user) {
 
-        if (StringUtils.isEmpty(goods.getName()) ||
-                StringUtils.isEmpty(goods.getDesc()) ||
-                StringUtils.isEmpty(goods.getRegion()) ||
-                goods.getCategoryId() == null ||
-//                goods.getPrimaryPicUrl() == null ||
-                goods.getRegionId() == null ||
-                goods.getPrice() == null) {
+        if (StringUtils.isEmpty(post.getName()) ||
+                StringUtils.isEmpty(post.getDesc()) ||
+                StringUtils.isEmpty(post.getRegion()) ||
+                post.getCategoryId() == null ||
+                post.getRegionId() == null ||
+                post.getPrice() == null ||
+                post.getImages() == null || post.getImages().size() < 1) {
             String msg = "用户发布商品失败,信息不完整";
             log.info(msg);
             return Response.fail(Response.POST_INFO_INCOMPLETE, msg);
         }
-        goods.setSellerId(user.getOpenId());
-        goodsService.postGoods(goods);
-        log.info("用户发布商品:用户昵称=【{}】,商品名=【{}】,详情=【{}】", user.getNickName(), goods.getName(), goods);
+        post.setSellerId(user.getOpenId());
+        goodsService.postGoods(post);
+        log.info("用户发布商品:用户昵称=【{}】,商品名=【{}】,{}张图片", user.getNickName(), post.getName(),post.getImages().size());
 
         return Response.ok();
     }

+ 1 - 1
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/UserController.java

@@ -121,7 +121,7 @@ public class UserController {
         Integer soldCount = goodsService.getSellerHistory(userId);
         LinkedHashMap<String, List<Goods>> userHistory = userService.getUserHistoryList(userId, page, size);
         UserPageVo vo = new UserPageVo(user, userHistory, soldCount);
-        log.info("浏览用户id=[{}],昵称=[{}]的首页,搜索到{}天的记录", user.getOpenId(), user.getNickName(), userHistory.size());
+        log.info("浏览用户id=[{}],昵称=[{}]的首页,搜索到{}天的记录", user.getOpenId(), user.getNickName(), userHistory == null ? 0 : userHistory.size());
 
         return Response.ok(vo);
     }

+ 16 - 2
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/GoodsMapper.java

@@ -147,7 +147,7 @@ public interface GoodsMapper {
             "                   price,\n" +
             "                   market_price,\n" +
             "                   postage,\n" +
-//            "                   primary_pic_url,\n" +
+            "                   primary_pic_url,\n" +
             "                   `desc`,\n" +
             "                   region_id,\n" +
             "                   region,\n" +
@@ -156,11 +156,25 @@ public interface GoodsMapper {
             "                   able_self_take)\n" +
             "values (#{categoryId},#{sellerId},#{name},#{price}," +
             "#{marketPrice},#{postage}," +
-//            "#{primaryPicUrl}," +
+            "#{primaryPicUrl}," +
             "#{desc}," +
             "#{regionId},#{region},#{ableExpress},#{ableMeet},#{ableSelfTake})")
+    @SelectKey(resultType = Integer.class, before = false, keyProperty = "id", statement = "SELECT LAST_INSERT_ID()")
     void addGoods(Goods goods);
 
+    @Insert({
+            "<script>",
+            "INSERT INTO goods_gallery",
+            "(goods_id, img_url)",
+            "VALUES" +
+                    "<foreach item='item' collection='galleryList' open='' separator=',' close=''>" +
+                    "(" +
+                    "#{item.goodsId},#{item.imgUrl}" +
+                    ")" +
+                    "</foreach>",
+            "</script>"})
+    void addGalleryList(@Param("galleryList") List<GoodsGallery> galleryList);
+
     @Select("select COUNT(*)\n" +
             "from goods\n" +
             "where seller_id = #{seller_id}\n" +

+ 14 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/po/PostExample.java

@@ -0,0 +1,14 @@
+package io.github.nnkwrik.goodsservice.model.po;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author nnkwrik
+ * @date 18/12/03 17:03
+ */
+@Data
+public class PostExample extends Goods{
+    private List<String> images;
+}

+ 2 - 1
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/GoodsService.java

@@ -3,6 +3,7 @@ package io.github.nnkwrik.goodsservice.service;
 import io.github.nnkwrik.common.dto.SimpleUser;
 import io.github.nnkwrik.goodsservice.model.po.Goods;
 import io.github.nnkwrik.goodsservice.model.po.GoodsGallery;
+import io.github.nnkwrik.goodsservice.model.po.PostExample;
 import io.github.nnkwrik.goodsservice.model.vo.CategoryPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.CommentVo;
 
@@ -28,7 +29,7 @@ public interface GoodsService {
 
     List<CommentVo> getGoodsComment(int goodsId);
 
-    void postGoods(Goods goods);
+    void postGoods(PostExample post);
 
     void deleteGoods(int goodsId, String userId) throws Exception;
 }

+ 20 - 7
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/GoodsServiceImpl.java

@@ -6,10 +6,7 @@ import io.github.nnkwrik.common.dto.SimpleUser;
 import io.github.nnkwrik.goodsservice.client.UserClient;
 import io.github.nnkwrik.goodsservice.dao.CategoryMapper;
 import io.github.nnkwrik.goodsservice.dao.GoodsMapper;
-import io.github.nnkwrik.goodsservice.model.po.Category;
-import io.github.nnkwrik.goodsservice.model.po.Goods;
-import io.github.nnkwrik.goodsservice.model.po.GoodsComment;
-import io.github.nnkwrik.goodsservice.model.po.GoodsGallery;
+import io.github.nnkwrik.goodsservice.model.po.*;
 import io.github.nnkwrik.goodsservice.model.vo.CategoryPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.CommentVo;
 import io.github.nnkwrik.goodsservice.service.GoodsService;
@@ -17,6 +14,7 @@ import io.github.nnkwrik.goodsservice.util.BeanListUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
@@ -62,7 +60,6 @@ public class GoodsServiceImpl implements GoodsService {
     }
 
 
-
     @Override
     public int getSellerHistory(String sellerId) {
         return goodsMapper.getSellerHistory(sellerId);
@@ -91,8 +88,24 @@ public class GoodsServiceImpl implements GoodsService {
     }
 
     @Override
-    public void postGoods(Goods goods) {
-        goodsMapper.addGoods(goods);
+    @Transactional
+    public void postGoods(PostExample post) {
+        List<String> images = post.getImages();
+        List<GoodsGallery> galleryList = new ArrayList<>();
+        post.setPrimaryPicUrl(images.get(0)); //TODO 对PrimaryImage进行压缩
+
+        //insert并获取id
+        goodsMapper.addGoods(post);
+        int goodsId = post.getId();
+
+        images.stream()
+                .forEach(url -> {
+                    GoodsGallery gallery = new GoodsGallery();
+                    gallery.setGoodsId(goodsId);
+                    gallery.setImgUrl(url);
+                    galleryList.add(gallery);
+                });
+        goodsMapper.addGalleryList(galleryList);
     }
 
     @Override

+ 1 - 1
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/UserServiceImpl.java

@@ -88,7 +88,7 @@ public class UserServiceImpl implements UserService {
     public LinkedHashMap<String, List<Goods>> getUserHistoryList(String userId, int page, int size) {
         PageHelper.startPage(page, size);
         List<GoodsExample> userHistoryList = userMapper.getUserHistoryList(userId);
-        if (userHistoryList.size() < 1) return new LinkedHashMap<>();
+        if (userHistoryList.size() < 1) return null;
 
         LinkedHashMap<String, List<Goods>> result = new LinkedHashMap<>();
 

+ 1 - 1
wx-front/app.js

@@ -6,7 +6,7 @@ App({
   onLaunch: function () {
     //!!生产环境专用测试数据
     // wx.setStorageSync('userInfo', this.testData.userInfo);
-    // wx.setStorageSync('token', this.testData.token);
+    // wx.setStorageSync('token', '');
 
     // wx.setStorageSync('userInfo', null);
     // wx.setStorageSync('token', null);

+ 0 - 122
wx-front/pages/goods/goods.wxml

@@ -18,11 +18,6 @@
       <text wx:if="{{goods.marketPrice}}" class="market-price">原价 : ¥{{goods.marketPrice}}</text>
 
       <text class="desc">{{goods.desc}}</text>
-      <!-- <view class="brand" wx:if="{{brand.name}}">
-        <navigator url="../brandDetail/brandDetail?id={{brand.brandId}}">
-          <text>{{brand.name}}</text>
-        </navigator>
-      </view> -->
 
     </view>
   </view>
@@ -41,19 +36,6 @@
     </view>
   </view>
 
-  <!-- <view class="section-nav section-act">
-    <view class="t">
-      <view class="label">1个促销:</view>
-      <view class="tag">万圣趴</view>
-      <view class="text">全场满499,额外送糖果</view>
-    </view>
-    <image class="i" src="../../static/images/address_right.png" background-size="cover"></image>
-  </view> -->
-
-  <!-- sellername -->
-  <!-- seller avater -->
-  <!-- day -->
-  <!-- history -->
   <navigator url="/pages/user/user?userId={{seller.openId}}" class="seller-nav section-act">
     <view class="seller-t">
       <image class="seller-avatar" src="{{seller.avatarUrl}}"></image>
@@ -67,35 +49,6 @@
     <image class="i" src="../../static/images/address_right.png" background-size="cover"></image>
   </navigator>
 
-
-
-  <!-- <view class="comments" wx:if="{{comment.count > 0}}">
-    <view class="h">
-      <navigator url="../comment/comment?valueId={{goods.id}}&typeId=0">
-        <text class="t">评价({{comment.count > 999 ? '999+' : comment.count}})</text>
-        <text class="i">查看全部</text>
-      </navigator>
-    </view>
-    <view class="b">
-      <view class="item">
-        <view class="info">
-          <view class="user">
-            <image src="{{comment.data.avatar}}"></image>
-            <text>{{comment.data.nickname}}</text>
-          </view>
-          <view class="time">{{comment.data.add_time}}</view>
-        </view>
-        <view class="content">
-          {{comment.data.content}}
-        </view>
-        <view class="imgs" wx:if="{{comment.data.pic_list.length > 0}}">
-          <image class="img" wx:for="{{comment.data.pic_list}}" wx:key="{{item.id}}" src="{{item.pic_url}}"></image>
-        </view>
-
-      </view>
-    </view>
-  </view> -->
-
   <view class="comments" wx:if="{{comment.length > 0}}">
     <view class="h">
       <text class="t">留言</text>
@@ -145,49 +98,6 @@
 
 
 
-  <!-- <view class="goods-attr">
-    <view class="t">商品参数</view>
-    <view class="l">
-      <view class="item" wx:for="{{attribute}}" wx:key="{{item.name}}">
-        <text class="left">{{item.name}}</text>
-        <text class="right">{{item.value}}</text>
-      </view>
-    </view>
-  </view> -->
-
-  <!-- <view class="detail">
-    <import src="../../lib/wxParse/wxParse.wxml" />
-    <template is="wxParse" data="{{wxParseData:goodsDetail.nodes}}" />
-  </view> -->
-
-
-  <!-- <view class="common-problem">
-    <view class="h">
-      <view class="line"></view>
-      <text class="title">常见问题</text>
-    </view>
-    <view class="b">
-      <view class="item" wx:for="{{issueList}}" wx:key="{{item.id}}">
-        <view class="question-box">
-          <text class="spot"></text>
-          <text class="question">{{item.question}}</text>
-        </view>
-        <view class="answer">
-          {{item.answer}}
-        </view>
-      </view>
-       <view class="item">
-        <view class="question-box">
-          <text class="spot"></text>
-          <text class="question">1111</text>
-        </view>
-        <view class="answer">
-          bbbbb
-        </view>
-      </view>
-    </view>
-  </view> -->
-
   <view class="related-goods" wx:if="{{relatedGoods.length > 0}}">
     <view class="h">
       <view class="line"></view>
@@ -205,39 +115,7 @@
   </view>
 </view>
 
-<!-- <view class="attr-pop-box" hidden="{{!openAttr}}">
-  <view class="attr-pop">
-    <view class="close" bindtap="closeAttr">
-      <image class="icon" src="/static/images/icon_close.png"></image>
-    </view>
-    <view class="img-info">
-      <image class="img" src="{{gallery[0].img_url}}"></image>
-      <view class="info">
-        <view class="c">
-          <view class="p">价格:¥{{goods.price}}</view>
-          <view class="a" wx:if="{{productList.length>0}}">已选择:{{checkedSpecText}}</view>
-        </view>
-      </view>
-    </view>
-    <view class="spec-con">
-      <view class="spec-item" wx:for="{{specificationList}}" wx:key="{{item.specification_id}}">
-        <view class="name">{{item.name}}</view>
-        <view class="values">
-          <view class="value {{vitem.checked ? 'selected' : ''}}" bindtap="clickSkuValue" wx:for="{{item.valueList}}" wx:for-item="vitem" wx:key="{{vitem.id}}" data-value-id="{{vitem.id}}" data-name-id="{{vitem.specification_id}}">{{vitem.value}}</view>
-        </view>
-      </view>
 
-      <view class="number-item">
-        <view class="name">数量</view>
-        <view class="selnum">
-          <view class="cut" bindtap="cutNumber">-</view>
-          <input value="{{number}}" class="number" disabled="true" type="number" />
-          <view class="add" bindtap="addNumber">+</view>
-        </view>
-      </view>
-    </view>
-  </view>
-</view> -->
 
 <view class="attr-pop-box" hidden="{{!openComment}}">
   <view class="attr-pop">

+ 167 - 29
wx-front/pages/post/post.js

@@ -16,7 +16,9 @@ Page({
     ableMeet: false,
     ableExpress: false,
     cateId: 0,
-    cateName:''
+    cateName: '',
+    imgList: [],
+    tmpImgList:[],
   },
   onLoad: function(options) {
 
@@ -29,7 +31,130 @@ Page({
       delta: 1
     });
   },
+  addImage() {
+    let that = this;
+    let remain = 10 - this.data.imgList.length;
+    console.log('上传图片')
+    wx.chooseImage({
+      count: remain,
+      success(res) {
+        let length = res.tempFiles.length
+
+        // tempFilePath可以作为img标签的src属性显示图片        
+        let tempFilePaths = res.tempFilePaths
+        let tempFiles = res.tempFiles
+        that.setData({
+          tmpImgList: that.data.tmpImgList.concat(tempFilePaths)
+        })
+        for (var i = 0; i < length; i++) {
+          that.data.imgList.push('false');
+          var index = that.data.imgList.length-1
+          that.setData({
+            imgList: that.data.imgList
+          })
+          
+          if (tempFiles[i].size > 4500000) {
+            console.log("图片太大")
+            that.compressImg(tempFilePaths[i], index)
+          } else {
+            console.log("上传到图床")
+            that.uploadFile(tempFilePaths[i], index)
+          }
+
+          // console.log(tempFilePaths[i]);
+
+        }
+        console.log(that.data.imgList);
+
+      },
+      fail(res) {
+        console.log(res);
+      },
+
+
+
+
+
+    })
+  },
+  uploadFile(url, i) {
+    let that = this;
+    // wx.uploadFile({
+    //   url: '	https://sm.ms/api/upload',
+    //   filePath: url,
+    //   name: 'smfile',
+    //   success(res) {
+    //     const data = JSON.parse(res.data);
+
+    //     console.log(data)
+    //     if (data.code == 'success') {
+    //       console.log("图片上传成功, " + data.data.url)
+    //       that.data.imgList[i] = data.data.url
+    //       that.setData({
+    //         imgList: that.data.imgList
+    //       })
+    //       // that.onLoad();
+
+    //     } else if (data.code == 'error' && data.msg == 'File is too large.') {
+    //       console.log("上传失败,图片太大")
+    //       that.compressImg(url, i)
+    //     }
+    //   }
+    // })
+
+    //模拟上传
+    setTimeout(function goback() {
+      console.log("图片上传成功, " + url)
+      that.data.imgList[i] = url
+      that.setData({
+        imgList: that.data.imgList
+      })
+    }, 2000)
+
+  },
+  compressImg(url, i) {
+    let that = this
+    wx.compressImage({
+      src: url, // 图片路径
+      quality: 50, // 压缩质量
+      success() {
+        console.log("压缩后重新上传")
+        that.uploadFile(url, i)
+      },
+      fail(res) {
+        console.log(res)
+        console.log("压缩失败 ")
+      }
+    })
+  },
+  removeImg(event){
+    console.log("删除元素")
+    let index = event.currentTarget.dataset.index
+    let that = this
+    that.data.imgList.splice(index, 1)
+    that.data.tmpImgList.splice(index, 1)
+    this.setData({
+      imgList: that.data.imgList ,
+      tmpImgList: that.data.tmpImgList,
+    })
+
+  },
+  preview(event){
+    let url = event.currentTarget.dataset.url
+    let urls = [];
+    let imgList = this.data.imgList
+    for (var index in imgList){
+      if (imgList[index]!='false'){
+        urls.push(imgList[index])
+      }
+    }
+    wx.previewImage({
+      current: url,
+      urls: urls // 需要预览的图片http链接列表
+    })
+  },
   onPost() {
+    
     if (this.data.title.trim() == '') {
       util.showErrorToast('必须填写商品名')
       return;
@@ -43,6 +168,10 @@ Page({
       util.showErrorToast('请选择发货地点')
       return;
     }
+    if (this.data.imgList.length < 1) {
+      util.showErrorToast('请上传图片')
+      return;
+    }
     if (this.data.cateName.trim() == '') {
       util.showErrorToast('请选择分类')
       return;
@@ -77,41 +206,50 @@ Page({
       util.showErrorToast("邮费最大1千元")
       return;
     }
-    if (!this.data.ableSelfTake && !this.data.ableMeet && !this.data.ableExpress ){
+    if (!this.data.ableSelfTake && !this.data.ableMeet && !this.data.ableExpress) {
       util.showErrorToast("请选择交易方式")
       return;
     }
 
+    let imgList = this.data.imgList
+    for (var index in imgList) {
+      if (imgList[index] == 'false') {
+        util.showErrorToast('图片上传中')
+        return;
+      }
+    }
+
     let that = this
     user.checkLoginAndNav().then(() => {
-    util.request(api.GoodsPost, {
-      name: this.data.title,
-      desc: this.data.desc,
-      regionId: this.data.regionId,
-      region: this.data.region,
-      categoryId: this.data.cateId,
-      price: this.data.price,
-      marketPrice: this.data.marketPrice,
-      postage: postage,
-      ableSelfTake: this.data.ableSelfTake,
-      ableMeet: this.data.ableMeet,
-      ableExpress: this.data.ableExpress
-    }, 'POST').then(function(res) {
-      if (res.errno === 0) {
-
-        setTimeout(function goback(){
-          wx.reLaunch({
-            url: '/pages/index/index'
-          })
-        }, 1000)
+      util.request(api.GoodsPost, {
+        name: this.data.title,
+        desc: this.data.desc,
+        regionId: this.data.regionId,
+        region: this.data.region,
+        categoryId: this.data.cateId,
+        price: this.data.price,
+        marketPrice: this.data.marketPrice,
+        postage: postage,
+        ableSelfTake: this.data.ableSelfTake,
+        ableMeet: this.data.ableMeet,
+        ableExpress: this.data.ableExpress,
+        images: this.data.imgList,
+      }, 'POST').then(function(res) {
+        if (res.errno === 0) {
 
-        wx.showToast({
-          title: '发布成功'
-        })
-      }
+          setTimeout(function goback() {
+            wx.reLaunch({
+              url: '/pages/index/index'
+            })
+          }, 1000)
 
-      console.log(res)
-    });
+          wx.showToast({
+            title: '发布成功'
+          })
+        }
+
+        console.log(res)
+      });
     })
 
   },
@@ -197,7 +335,7 @@ Page({
       app.post.region.name = ''
     }
 
-    if(app.post.cate.id){
+    if (app.post.cate.id) {
       this.setData({
         cateId: app.post.cate.id,
         cateName: app.post.cate.name

+ 41 - 8
wx-front/pages/post/post.wxml

@@ -1,44 +1,77 @@
 <view class="container">
   <view class="post-goods">
-    <input class="title" maxlength="60" placeholder="标题,品牌品类都是买家喜欢搜索的" bindinput='bindInputTitle'/>
+    <input class="title" maxlength="60" placeholder="标题,品牌品类都是买家喜欢搜索的" bindinput='bindInputTitle' />
 
     <view class="input-box">
       <textarea class="content" bindinput="bindInputDesc" maxlength="800" placeholder="描述一下宝贝的转手原因,入手渠道和使用感受" />
       <text class="count">{{800 - desc.length}}</text>
     </view>
 
+
     <navigator url="../region/region" class='location'>
       <view class="icon" wx:if='{{!regionId}}'>选择发货地点</view>
       <view class="icon" wx:else>{{region}}</view>
     </navigator>
 
+      <view class='img'>
+    <view wx:for="{{imgList}}" wx:key="{{index}}">
+
+      <view wx:if="{{imgList[index] == 'false'}}">
+      <!-- 上传中 -->
+        <view class='add blur' style="background-image: url('{{tmpImgList[index]}}')">
+          <image class='loading' src='../../static/images/loading.png'></image>
+        </view>
+      </view>
+      <view wx:else>
+      <!-- 完成上传 -->
+        <view class='add'>
+          <image class="delete" src="/static/images/delete.png" bindtap='removeImg' data-index='{{index}}'></image>
+
+          <image class='upload' bindtap='preview' data-url='{{imgList[index]}}' mode='aspectFill' src='{{imgList[index]}}'></image>
+        </view>
+      </view>
+
+    </view>
+      <view wx:if="{{imgList.length < 10}}" class='add' bindtap='addImage'>
+    <text class='txt'>添加图片</text>
+    <image class='icon' src='../../static/images/plus.png'></image>
+  </view>
+
+  </view>
+
 
   </view>
+
+
+
+
+
+
   <view class="detail">
     <view class="element">
       <view class="lable">价格</view>
       <view class="rmb">¥</view>
-      <input class="price" type="digit" placeholder="0.00"  bindinput='bindInputPrice' />
+      <input class="price" type="digit" placeholder="0.00" bindinput='bindInputPrice' />
     </view>
     <view class="element">
       <view class="lable">入手价</view>
       <view class="rmb">¥</view>
-      <input class="price" type="digit"  placeholder="0.00"  bindinput='bindInputMarketPrice'/>
+      <input class="price" type="digit" placeholder="0.00" bindinput='bindInputMarketPrice' />
     </view>
     <view class="element">
       <view class="lable">运费</view>
       <view class="rmb">¥</view>
-      <input class="price" type="digit"  placeholder="0.00" bindinput='bindInputPostage' value='{{postage}}' disabled='{{isPostageFree}}'/>
+      <input class="price" type="digit" placeholder="0.00" bindinput='bindInputPostage' value='{{postage}}' disabled='{{isPostageFree}}' />
       <checkbox-group bindchange="postageFree">
         <label class="checkbox-a">
           <checkbox value="true" color="#fd9f06" />包邮
         </label>
       </checkbox-group>
     </view>
-    <navigator url="../postCate/postCate"  class="element">
+    <navigator url="../postCate/postCate" class="element">
       <view class="lable">分类</view>
-      
-      <view class="cate">{{cateName  ? cateName : '选择分类'}}</view>
+
+      <view class="cate">{{cateName ? cateName : '选择分类'}}</view>
       <image background-size="cover" class="i" src="../../static/images/address_right.png"></image>
     </navigator>
 
@@ -56,6 +89,6 @@
   </view>
 
   <view class="bottom-btn">
-    <button class="r"  bindtap='onPost'>确认发布</button>
+    <button class="r" bindtap='onPost'>确认发布</button>
   </view>
 </view>

+ 87 - 3
wx-front/pages/post/post.wxss

@@ -78,6 +78,87 @@ page, .container {
   padding: 0 30rpx;
 }
 
+.img {
+
+  padding:0 20rpx 0 20rpx;
+
+
+display:flex;
+flex-wrap:wrap;
+justify-content:flex-start;
+background:#fff;
+
+
+}
+
+.img .add .upload{
+height:108rpx;
+width:108rpx;
+border:2rpx solid #ddd;
+
+}
+.img .add .delete{
+position:absolute;
+height:34rpx;
+width:34rpx;
+float:right;
+transform:translate(270%,-40%);
+
+}
+
+
+
+.img .add {
+  display: block;
+height:110rpx;
+width:110rpx;
+/* margin-right:27rpx; */
+margin-right:20rpx;
+
+
+
+
+background:#fff;
+border:1rpx solid #eee;
+
+margin-bottom:30rpx;
+
+
+}
+
+.img .add .txt {
+margin-top:7px;
+text-align:center;
+display:block;
+color:#999;
+font-size:25rpx;
+
+
+}
+
+.img .add .icon {
+  height: 35rpx;
+  width: 33%;
+  margin-left: auto;
+  margin-right: auto;
+  display: block;
+  margin-top: 7rpx;
+}
+
+.img .blur {
+  filter: blur(1rpx) contrast(50%) ;
+  background-size: cover;
+}
+.img .loading {
+height:55rpx;
+width:46%;
+margin-left:auto;
+margin-right:auto;
+display:block;
+margin-top:30rpx;
+
+}
+
 .bottom-btn {
   position: fixed;
   left: 0;
@@ -109,6 +190,9 @@ page, .container {
   padding: 30rpx;
   background: #fff;
   padding-top: 10rpx;
+  padding-bottom:70rpx;
+margin-bottom:150rpx;
+
 }
 
 .detail .element {
@@ -158,8 +242,8 @@ page, .container {
   height: 45rpx;
 }
 
-.detail .cate{
+.detail .cate {
   line-height: 50rpx;
-  width:400rpx;
-  color:#666;
+  width: 400rpx;
+  color: #666;
 }

+ 19 - 16
wx-front/pages/user/user.js

@@ -12,7 +12,7 @@ Page({
     page: 1,
     size: 10000,
     userInfo: {},
-    historyList: {},
+    historyList: null,
     soldCount: 0,
     userDates:0
   },
@@ -25,24 +25,28 @@ Page({
       if (res.errno === 0) {
         console.log(res.data);
 
-
-        for (var list in res.data.userHistory) {
-          for (var i = 0; i < res.data.userHistory[list].length; i++) {
-            var goods = res.data.userHistory[list][i];
-            if (goods.time) {
-              res.data.userHistory[list][i].time = goods.time.split(' ')[0]
-            }
-            if (goods.postTime) {
-              res.data.userHistory[list][i].postTime = goods.postTime.split(' ')[0]
-            }
-            if (goods.soldTime) {
-              res.data.userHistory[list][i].soldTime = goods.soldTime.split(' ')[0]
+        if (res.data.userHistory){
+          for (var list in res.data.userHistory) {
+            for (var i = 0; i < res.data.userHistory[list].length; i++) {
+              var goods = res.data.userHistory[list][i];
+              if (goods.time) {
+                res.data.userHistory[list][i].time = goods.time.split(' ')[0]
+              }
+              if (goods.postTime) {
+                res.data.userHistory[list][i].postTime = goods.postTime.split(' ')[0]
+              }
+              if (goods.soldTime) {
+                res.data.userHistory[list][i].soldTime = goods.soldTime.split(' ')[0]
+              }
             }
-          }
 
-          
+          }
+          that.setData({
+            historyList: res.data.userHistory,
+          })
         }
 
+
         //计算卖家来平台第几天
         let registerTime = res.data.user.registerTime
         let duration = new Date().getTime() - new Date(registerTime).getTime();
@@ -50,7 +54,6 @@ Page({
 
         that.setData({
           userInfo: res.data.user,
-          historyList: res.data.userHistory,
           soldCount: res.data.soldCount,
           userDates: dates
         });

+ 4 - 4
wx-front/pages/user/user.wxml

@@ -13,18 +13,18 @@
   </view>
   </view>
 
-  <view class="userhis" wx:if='{{historyList.lenght}}'>
+  <view class="userhis" wx:if='{{historyList}}'>
     <view class="day-item" wx:for="{{historyList}}" wx:key="{{index}}">
       <view class="day-hd">{{index}}</view>
       <view class="day-list">
         <view class="item" bindtap="openGoods" data-id="{{iitem.id}}"  wx:for="{{item}}" wx:for-item="iitem" wx:key="{{iitem.id}}">
-          <image class="img" src="{{iitem.primaryPicUrl}}"></image>
+          <image class="img" src="{{iitem.primaryPicUrl}}" mode='aspectFill'></image>
           <view class="info">
             <view class="name">{{iitem.name}}</view>
             <view class="flex">
               <view class="price">¥{{iitem.price}}</view>
-              <view class='msg' wx:if="{{iitem.postTime == iitem.time}}">发布了这件商品</view>
-              <view class='msg' wx:elif="{{iitem.soldTime == iitem.time}}">卖出了这件商品</view>
+              <view class='msg' wx:if="{{iitem.postTime == iitem.time}}">发布了这件宝贝</view>
+              <view class='msg' wx:elif="{{iitem.soldTime == iitem.time}}">卖出了这件宝贝</view>
             </view>
           </view>
         </view>

+ 3 - 1
wx-front/pages/user/user.wxss

@@ -170,8 +170,10 @@ border:5rpx solid #fff;
 
 .result-empty {
   width: 100%;
-  height: 100%;
+  height: 76vh;
   padding-top:200rpx;
+  background: #fff;
+  overflow: hidden;
 }
 
 .result-empty .icon {

+ 41 - 38
wx-front/utils/util.js

@@ -24,8 +24,8 @@ function formatNumber(n) {
 function request(url, data = {}, method = "GET") {
   let that = this
   let token = wx.getStorageSync('token')
-  
-  return new Promise(function (resolve, reject) {
+
+  return new Promise(function(resolve, reject) {
     wx.request({
       url: url,
       data: data,
@@ -34,7 +34,7 @@ function request(url, data = {}, method = "GET") {
         'Content-Type': 'application/json',
         'Authorization': token
       },
-      success: function (res) {
+      success: function(res) {
         console.log("success");
 
         if (res.statusCode == 200) {
@@ -47,18 +47,19 @@ function request(url, data = {}, method = "GET") {
                 if (res.authSetting['scope.userInfo']) {
                   // // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
                   that.getUserInfo().then((res) => {
-                    that.backendLogin(res).then(()=>{
-                      that.request(url,data,method)
+                    that.backendLogin(res).then((res) => {
+                      that.request(url, data, method)
+                      console.log('再次请求')
                     })
                   })
 
-                }else{
+                } else {
                   wx.navigateTo({
                     url: '/pages/auth/auth'
                   })
                 }
               }
-            })   
+            })
 
           } else {
             resolve(res.data);
@@ -68,7 +69,7 @@ function request(url, data = {}, method = "GET") {
         }
 
       },
-      fail: function (err) {
+      fail: function(err) {
         reject(err)
         console.log("failed")
       }
@@ -82,13 +83,14 @@ function request(url, data = {}, method = "GET") {
  * 检查微信会话是否过期
  */
 function checkSession() {
-  return new Promise(function (resolve, reject) {
+  return new Promise(function(resolve, reject) {
     wx.checkSession({
-      success: function () {
+      success: function() {
         resolve(true);
       },
-      fail: function () {
-        reject(false);
+      fail: function() {
+        wx.login() //重新登录
+        resolve(true);
       }
     })
   });
@@ -101,7 +103,7 @@ function backendLogin(detail) {
   console.log("在后端服务器进行登录" + detail)
   let that = this;
   let code = null;
-  return new Promise(function (resolve, reject) {
+  return new Promise(function(resolve, reject) {
     return that.login().then((res) => {
       code = res.code;
     }).then(() => {
@@ -115,14 +117,14 @@ function backendLogin(detail) {
           wx.setStorageSync('userInfo', res.data.userInfo);
           wx.setStorageSync('token', res.data.token);
 
-            resolve(res.data.userInfo);
-          } else {
-            reject(res);
-          }
+          resolve(res.data.userInfo);
+        } else {
+          reject(res);
+        }
       }).catch((err) => { //request
         reject(err);
       });
-    }).catch((err) => {   //login
+    }).catch((err) => { //login
       reject(err);
     })
   });
@@ -132,34 +134,37 @@ function backendLogin(detail) {
  * 调用微信登录
  */
 function login() {
-  return new Promise(function (resolve, reject) {
-    wx.login({
-      success: function (res) {
-        if (res.code) {
-          //登录远程服务器
-          console.log(res)
-          resolve(res);
-        } else {
-          reject(res);
+  let that = this
+  return new Promise(function(resolve, reject) {
+    that.checkSession().then(() => {
+      wx.login({
+        success: function (res) {
+          if (res.code) {
+            //登录远程服务器
+            console.log(res)
+            resolve(res);
+          } else {
+            reject(res);
+          }
+        },
+        fail: function (err) {
+          reject(err);
         }
-      },
-      fail: function (err) {
-        reject(err);
-      }
-    });
+      });
+    })
   });
 }
 
 
 function getUserInfo() {
-  return new Promise(function (resolve, reject) {
+  return new Promise(function(resolve, reject) {
     wx.getUserInfo({
       withCredentials: true,
-      success: function (res) {
+      success: function(res) {
         console.log(res)
         resolve(res);
       },
-      fail: function (err) {
+      fail: function(err) {
         reject(err);
       }
     })
@@ -197,6 +202,4 @@ module.exports = {
   login,
   getUserInfo,
   backendLogin,
-}
-
-
+}