ソースを参照

订单和商品

licailing 5 年 前
コミット
d17407fb6b
27 ファイル変更678 行追加97 行削除
  1. 24 0
      src/main/java/com/izouma/dingdong/domain/Chat.java
  2. 3 0
      src/main/java/com/izouma/dingdong/domain/OrderGoodsSpec.java
  3. 3 0
      src/main/java/com/izouma/dingdong/domain/OrderInfo.java
  4. 1 1
      src/main/java/com/izouma/dingdong/domain/User.java
  5. 31 0
      src/main/java/com/izouma/dingdong/domain/backstage/ChatWords.java
  6. 73 0
      src/main/java/com/izouma/dingdong/dto/OrderDTO.java
  7. 21 0
      src/main/java/com/izouma/dingdong/dto/OrderGoodsSpecDTO.java
  8. 1 1
      src/main/java/com/izouma/dingdong/enums/OrderStatus.java
  9. 8 0
      src/main/java/com/izouma/dingdong/repo/backstage/ChatWordsRepo.java
  10. 16 32
      src/main/java/com/izouma/dingdong/service/OrderGoodsSpecService.java
  11. 3 1
      src/main/java/com/izouma/dingdong/service/OrderInfoService.java
  12. 2 2
      src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java
  13. 14 0
      src/main/java/com/izouma/dingdong/service/backstage/ChatWordsService.java
  14. 0 9
      src/main/java/com/izouma/dingdong/web/OrderInfoController.java
  15. 63 0
      src/main/java/com/izouma/dingdong/web/backstage/ChatWordsController.java
  16. 7 1
      src/main/java/com/izouma/dingdong/web/merchant/GoodsController.java
  17. 16 3
      src/main/java/com/izouma/dingdong/web/user/ShoppingCartController.java
  18. 1 0
      src/main/resources/genjson/ChatWords.json
  19. 16 0
      src/main/vue/src/router.js
  20. 91 0
      src/main/vue/src/views/ChatWordsEdit.vue
  21. 167 0
      src/main/vue/src/views/ChatWordsList.vue
  22. 1 1
      src/main/vue/src/views/OrderInfoList.vue
  23. 3 3
      src/main/vue/src/views/UserEdit.vue
  24. 2 2
      src/main/vue/src/views/backstage/BackUserList.vue
  25. 7 7
      src/main/vue/src/views/merchant/GoodsEdit.vue
  26. 7 3
      src/main/vue/src/views/merchant/GoodsList.vue
  27. 97 31
      src/main/vue/src/views/merchant/MerchantList.vue

+ 24 - 0
src/main/java/com/izouma/dingdong/domain/Chat.java

@@ -0,0 +1,24 @@
+package com.izouma.dingdong.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "聊天框")
+public class Chat extends BaseEntity {
+    private Long userId;
+
+    private Long otherId;
+
+    private String context;
+
+}

+ 3 - 0
src/main/java/com/izouma/dingdong/domain/OrderGoodsSpec.java

@@ -12,6 +12,7 @@ import org.hibernate.annotations.NotFoundAction;
 import javax.persistence.*;
 import javax.persistence.*;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.util.List;
 
 
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 @Entity
 @Entity
@@ -36,6 +37,8 @@ public class OrderGoodsSpec extends BaseEntity implements Serializable {
 
 
    // private String specificationId;
    // private String specificationId;
 
 
+//    @Convert(converter = LongArrayConverter.class)
+//    private List<Long> specificationId;
 
 
     @ApiModelProperty(value = "规格", name = "specification")
     @ApiModelProperty(value = "规格", name = "specification")
     private String specification;
     private String specification;

+ 3 - 0
src/main/java/com/izouma/dingdong/domain/OrderInfo.java

@@ -1,5 +1,6 @@
 package com.izouma.dingdong.domain;
 package com.izouma.dingdong.domain;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.izouma.dingdong.enums.MerchantStatus;
 import com.izouma.dingdong.enums.MerchantStatus;
 import com.izouma.dingdong.enums.OrderStatus;
 import com.izouma.dingdong.enums.OrderStatus;
 import com.izouma.dingdong.enums.PayMethod;
 import com.izouma.dingdong.enums.PayMethod;
@@ -24,6 +25,7 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "用户ID", name = "userId")
     @ApiModelProperty(value = "用户ID", name = "userId")
     private Long userId;
     private Long userId;
 
 
+    @Enumerated(EnumType.STRING)
     @ApiModelProperty(value = "订单状态", name = "orderStatus")
     @ApiModelProperty(value = "订单状态", name = "orderStatus")
     private OrderStatus status;
     private OrderStatus status;
 
 
@@ -101,6 +103,7 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "配送地址", name = "userAddress")
     @ApiModelProperty(value = "配送地址", name = "userAddress")
     private String userAddress;
     private String userAddress;
 
 
+    @Enumerated(EnumType.STRING)
     @ApiModelProperty(value = "支付方式", name = "payMethod")
     @ApiModelProperty(value = "支付方式", name = "payMethod")
     private PayMethod payMethod;
     private PayMethod payMethod;
 
 

+ 1 - 1
src/main/java/com/izouma/dingdong/domain/User.java

@@ -42,7 +42,7 @@ public class User extends BaseEntity implements Serializable {
 
 
     private String avatar;
     private String avatar;
 
 
-    // @JsonIgnore
+    @JsonIgnore
     private String password;
     private String password;
 
 
     @Builder.Default
     @Builder.Default

+ 31 - 0
src/main/java/com/izouma/dingdong/domain/backstage/ChatWords.java

@@ -0,0 +1,31 @@
+package com.izouma.dingdong.domain.backstage;
+
+import com.izouma.dingdong.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+@Builder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@ApiModel(value = "聊天框话术")
+public class ChatWords extends BaseEntity {
+    @ApiModelProperty("内容")
+    @Column(length = 10)
+    @Size(min = 1, max = 10)
+    private String context;
+
+    //商家话术/骑手话术
+    @ApiModelProperty("类型")
+    private Integer type;
+}

+ 73 - 0
src/main/java/com/izouma/dingdong/dto/OrderDTO.java

@@ -0,0 +1,73 @@
+package com.izouma.dingdong.dto;
+
+import com.izouma.dingdong.enums.MerchantStatus;
+import com.izouma.dingdong.enums.OrderStatus;
+import com.izouma.dingdong.enums.PayMethod;
+import com.izouma.dingdong.enums.RiderStatus;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "")
+public class OrderDTO {
+
+    private String nickname;
+
+    @ApiModelProperty(value = "用户地址", name = "address")
+    private String address;
+
+    private String merchantName;
+
+    private MerchantStatus merchantStatus;
+
+    private String riderName;
+
+    private RiderStatus riderStatus;
+
+    @ApiModelProperty(value = "配送费", name = "deliveryAmount")
+    private BigDecimal deliveryAmount;
+
+    @ApiModelProperty(value = "实付金额", name = "realAmount")
+    private BigDecimal realAmount;
+
+    @ApiModelProperty(value = "支付方式", name = "payMethod")
+    private PayMethod payMethod;
+
+    @Column(nullable = false)
+    @ApiModelProperty(value = "取消订单", name = "cancel")
+    private Boolean cancel = false;
+
+    @ApiModelProperty(value = "下单时间", name = "orderTime")
+    private LocalDateTime orderTime;
+
+    @Column(nullable = false)
+    @ApiModelProperty(value = "已评价", name = "rated")
+    private Boolean rated = false;
+
+    @ApiModelProperty(value = "订单状态", name = "orderStatus")
+    private OrderStatus status;
+
+    @ApiModelProperty(value = "满减", name = "fullReduction")
+    private BigDecimal fullReduction;
+
+    @ApiModelProperty(value = "首单", name = "firstBuy")
+    private BigDecimal firstBuy;
+
+    @ApiModelProperty(value = "红包", name = "redBag")
+    private BigDecimal redBag;
+
+    @ApiModelProperty(value = "新用户", name = "newUser")
+    private BigDecimal newUser;
+
+}

+ 21 - 0
src/main/java/com/izouma/dingdong/dto/OrderGoodsSpecDTO.java

@@ -0,0 +1,21 @@
+package com.izouma.dingdong.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class OrderGoodsSpecDTO {
+    //新增到购物车时可为空
+    private Long id;
+
+    private Long goodsId;
+
+    private String goodsSpecificationIds;
+
+    private Integer num;
+}

+ 1 - 1
src/main/java/com/izouma/dingdong/enums/OrderStatus.java

@@ -6,7 +6,7 @@ public enum OrderStatus {
     PAID("已支付"),
     PAID("已支付"),
     RATED("待评价"),
     RATED("待评价"),
     CANCELLED("已取消"),
     CANCELLED("已取消"),
-    PENDING("申请退款中"),
+    REFUNDED_PENDING("申请退款中"),
     REFUNDED("已退款"),
     REFUNDED("已退款"),
     COMPLETED("已完成");
     COMPLETED("已完成");
 
 

+ 8 - 0
src/main/java/com/izouma/dingdong/repo/backstage/ChatWordsRepo.java

@@ -0,0 +1,8 @@
+package com.izouma.dingdong.repo.backstage;
+
+import com.izouma.dingdong.domain.backstage.ChatWords;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface ChatWordsRepo extends JpaRepository<ChatWords, Long>, JpaSpecificationExecutor<ChatWords> {
+}

+ 16 - 32
src/main/java/com/izouma/dingdong/service/OrderGoodsSpecService.java

@@ -7,6 +7,7 @@ import com.izouma.dingdong.converter.LongArrayConverter;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.GoodsSpecification;
 import com.izouma.dingdong.domain.merchant.GoodsSpecification;
+import com.izouma.dingdong.dto.OrderGoodsSpecDTO;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
@@ -17,6 +18,7 @@ import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 @Service
 @Service
@@ -31,10 +33,15 @@ public class OrderGoodsSpecService {
     /*
     /*
     添加规格
     添加规格
      */
      */
-    public OrderGoodsSpec add(Long goodsId, List<GoodsSpecification> goodsSpecifications) {
+    public OrderGoodsSpec add(OrderGoodsSpecDTO orderGoodsSpecDTO) {
+        OrderGoodsSpec goodsSpec = null;
+        if (orderGoodsSpecDTO.getId()!=null){
+            goodsSpec = orderGoodsSpecRepo.findById(orderGoodsSpecDTO.getId()).orElseThrow(new BusinessException("无记录"));
+        }
+
         String spec = null;
         String spec = null;
         //String ids = null;
         //String ids = null;
-        Goods goods = goodsRepo.findById(goodsId).orElseThrow(new BusinessException("无商品"));
+        Goods goods = goodsRepo.findById(orderGoodsSpecDTO.getGoodsId()).orElseThrow(new BusinessException("无商品"));
 
 
         //判断商品是否通过审核
         //判断商品是否通过审核
         if (!ApplyStatus.PASS.equals(goods.getStatus())) {
         if (!ApplyStatus.PASS.equals(goods.getStatus())) {
@@ -44,44 +51,19 @@ public class OrderGoodsSpecService {
         BigDecimal total = goods.getAmount();
         BigDecimal total = goods.getAmount();
         BigDecimal real = goods.getDiscountAmount();
         BigDecimal real = goods.getDiscountAmount();
 
 
-//        for (Long s : specIds) {
-//            GoodsSpecification specification = goodsSpecificationRepo.findById(s).orElseThrow(new BusinessException("规格不存在"));
-//            total = total.add(specification.getAmount());
-//            if (StrUtil.isNotBlank(name)) {
-//                name = name + "/" + specification.getName();
-//            } else {
-//                name = specification.getName();
-//            }
-//        }
-        /*specIds.stream().map(goodsSpecificationRepo.findById(s).orElseThrow(new BusinessException("规格不存在"))).map(GoodsSpecification::getAmount, GoodsSpecification::getName).forEach(total::add);*/
-
+/*
         if (CollUtil.isNotEmpty(goodsSpecifications)) {
         if (CollUtil.isNotEmpty(goodsSpecifications)) {
             for (GoodsSpecification g : goodsSpecifications) {
             for (GoodsSpecification g : goodsSpecifications) {
                 total = total.add(g.getAmount());
                 total = total.add(g.getAmount());
                 real = real.add(g.getAmount());
                 real = real.add(g.getAmount());
 
 
-//                if (StrUtil.isNotBlank(name)) {
-//                    name = name + "/" + g.getName();
-//                } else {
-//                    name = g.getName();
-//                }
-//                if (StrUtil.isNotBlank(ids)) {
-//                    ids = ids + "/" + g.getId();
-//                } else {
-//                    ids = g.getId().toString();
-//                }
+
             }
             }
             spec = JSONObject.toJSONString(goodsSpecifications);
             spec = JSONObject.toJSONString(goodsSpecifications);
+*/
 
 
-        }
-        return orderGoodsSpecRepo.save(
-                OrderGoodsSpec.builder()
-                        .goodsId(goodsId)
-                        .specification(spec)
-                        //.specificationId(ids)
-                        .goodsPrice(total)
-                        .goodsRealPrice(real)
-                        .build());
+//        }
+        return null;
 
 
     }
     }
 
 
@@ -95,6 +77,7 @@ public class OrderGoodsSpecService {
         BigDecimal total = goods.getAmount();
         BigDecimal total = goods.getAmount();
         BigDecimal real = goods.getDiscountAmount();
         BigDecimal real = goods.getDiscountAmount();
 
 
+
         if (StrUtil.isNotBlank(goodsSpecificationIds)) {
         if (StrUtil.isNotBlank(goodsSpecificationIds)) {
             LongArrayConverter longArrayConverter = new LongArrayConverter();
             LongArrayConverter longArrayConverter = new LongArrayConverter();
             List<Long> longs = longArrayConverter.convertToEntityAttribute(goodsSpecificationIds);
             List<Long> longs = longArrayConverter.convertToEntityAttribute(goodsSpecificationIds);
@@ -120,6 +103,7 @@ public class OrderGoodsSpecService {
         OrderGoodsSpec save = OrderGoodsSpec.builder()
         OrderGoodsSpec save = OrderGoodsSpec.builder()
                 .goodsId(goodsId)
                 .goodsId(goodsId)
                 //.specificationId(ids)
                 //.specificationId(ids)
+                //.specificationId(longs)
                 .num(num)
                 .num(num)
                 .goodsPrice(total)
                 .goodsPrice(total)
                 .goodsRealPrice(real)
                 .goodsRealPrice(real)

+ 3 - 1
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -180,6 +180,8 @@ public class OrderInfoService {
             merReceiveOrder(save.getId(), true);
             merReceiveOrder(save.getId(), true);
         }
         }
 
 
+        shoppingCartRepo.deleteById(cart.getId());
+
         return orderInfo;
         return orderInfo;
 
 
     }
     }
@@ -271,7 +273,7 @@ public class OrderInfoService {
                         //记录到对账单
                         //记录到对账单
                         moneyRecordRepo.save(
                         moneyRecordRepo.save(
                                 MoneyRecord.builder()
                                 MoneyRecord.builder()
-                                        .name("购买")
+                                        .name(userRepo.findById(orderInfo.getUserId()).orElse(null).getNickname()+"购买")
                                         .type(FinancialType.INCOME)
                                         .type(FinancialType.INCOME)
                                         .time(LocalDateTime.now())
                                         .time(LocalDateTime.now())
                                         .amount(orderInfo.getRealAmount())
                                         .amount(orderInfo.getRealAmount())

+ 2 - 2
src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java

@@ -53,7 +53,7 @@ public class OrderRefundApplyService {
                 throw new BusinessException("订单已退");
                 throw new BusinessException("订单已退");
             case CANCELLED:
             case CANCELLED:
                 throw new BusinessException("订单已取消");
                 throw new BusinessException("订单已取消");
-            case PENDING:
+            case REFUNDED_PENDING:
                 return;
                 return;
         }
         }
 
 
@@ -66,7 +66,7 @@ public class OrderRefundApplyService {
                 .report(false)
                 .report(false)
                 .build());
                 .build());
 
 
-        order.setStatus(OrderStatus.PENDING);
+        order.setStatus(OrderStatus.REFUNDED_PENDING);
         orderInfoRepo.save(order);
         orderInfoRepo.save(order);
     }
     }
 
 

+ 14 - 0
src/main/java/com/izouma/dingdong/service/backstage/ChatWordsService.java

@@ -0,0 +1,14 @@
+package com.izouma.dingdong.service.backstage;
+
+import com.izouma.dingdong.domain.backstage.ChatWords;
+import com.izouma.dingdong.repo.backstage.ChatWordsRepo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class ChatWordsService {
+
+    private ChatWordsRepo chatWordsRepo;
+
+}

+ 0 - 9
src/main/java/com/izouma/dingdong/web/OrderInfoController.java

@@ -92,15 +92,6 @@ public class OrderInfoController extends BaseController {
         return orderInfoService.merReceiveOrder(orderId, pass);
         return orderInfoService.merReceiveOrder(orderId, pass);
     }
     }
 
 
-/*    @GetMapping("/updateMerStatus")
-    @ApiOperation("商家改状态")
-    public OrderInfo updateMerStatus(Long orderId, MerchantStatus status) {
-
-        return null;
-    }*/
-
-
-
     @PostMapping("/riderStatus")
     @PostMapping("/riderStatus")
     @ApiOperation("骑手改变状态")
     @ApiOperation("骑手改变状态")
     public void riderStatus(Long orderId, Boolean pass) {
     public void riderStatus(Long orderId, Boolean pass) {

+ 63 - 0
src/main/java/com/izouma/dingdong/web/backstage/ChatWordsController.java

@@ -0,0 +1,63 @@
+package com.izouma.dingdong.web.backstage;
+
+import com.izouma.dingdong.web.BaseController;
+import com.izouma.dingdong.domain.backstage.ChatWords;
+import com.izouma.dingdong.service.backstage.ChatWordsService;
+import com.izouma.dingdong.dto.PageQuery;
+import com.izouma.dingdong.exception.BusinessException;
+import com.izouma.dingdong.repo.backstage.ChatWordsRepo;
+import com.izouma.dingdong.utils.ObjUtils;
+import com.izouma.dingdong.utils.excel.ExcelUtils;
+
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/chatWords")
+@AllArgsConstructor
+public class ChatWordsController extends BaseController {
+    private ChatWordsService chatWordsService;
+    private ChatWordsRepo chatWordsRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public ChatWords save(@RequestBody ChatWords record) {
+        if (record.getId() != null) {
+            ChatWords orig = chatWordsRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return chatWordsRepo.save(orig);
+        }
+        return chatWordsRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @GetMapping("/all")
+    public Page<ChatWords> all(PageQuery pageQuery) {
+        return chatWordsRepo.findAll(toSpecification(pageQuery,ChatWords.class), toPageRequest(pageQuery));
+    }
+
+    @GetMapping("/get/{id}")
+    public ChatWords get(@PathVariable Long id) {
+        return chatWordsRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        chatWordsRepo.deleteById(id);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<ChatWords> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+}
+

+ 7 - 1
src/main/java/com/izouma/dingdong/web/merchant/GoodsController.java

@@ -1,5 +1,7 @@
 package com.izouma.dingdong.web.merchant;
 package com.izouma.dingdong.web.merchant;
 
 
+import cn.hutool.core.util.ObjectUtil;
+import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.utils.SecurityUtils;
 import com.izouma.dingdong.utils.SecurityUtils;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.web.BaseController;
@@ -36,7 +38,10 @@ public class GoodsController extends BaseController {
     public Goods save(@RequestBody Goods record) {
     public Goods save(@RequestBody Goods record) {
         if (record.getId() != null) {
         if (record.getId() != null) {
             Goods orig = goodsRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
             Goods orig = goodsRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
-            //if (record.getName())
+            //如果修改商品名称和图片就重新审核
+            if (record.getName() != null || record.getImg() != null) {
+                record.setStatus(ApplyStatus.PENDING);
+            }
             ObjUtils.merge(orig, record);
             ObjUtils.merge(orig, record);
             return goodsService.save(orig);
             return goodsService.save(orig);
         }
         }
@@ -82,6 +87,7 @@ public class GoodsController extends BaseController {
     }
     }
 
 
     @GetMapping("/audit")
     @GetMapping("/audit")
+    @ApiOperation("审核商品")
     public void audit(Long id, Boolean pass) {
     public void audit(Long id, Boolean pass) {
         goodsService.audit(id, pass);
         goodsService.audit(id, pass);
     }
     }

+ 16 - 3
src/main/java/com/izouma/dingdong/web/user/ShoppingCartController.java

@@ -1,10 +1,10 @@
 package com.izouma.dingdong.web.user;
 package com.izouma.dingdong.web.user;
 
 
-import com.izouma.dingdong.converter.LongArrayConverter;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
+import com.izouma.dingdong.domain.merchant.GoodsSpecification;
 import com.izouma.dingdong.domain.user.ShoppingCart;
 import com.izouma.dingdong.domain.user.ShoppingCart;
 
 
-import com.izouma.dingdong.domain.merchant.GoodsSpecification;
+import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.service.OrderGoodsSpecService;
 import com.izouma.dingdong.service.OrderGoodsSpecService;
 import com.izouma.dingdong.service.user.ShoppingCartService;
 import com.izouma.dingdong.service.user.ShoppingCartService;
 import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.dto.PageQuery;
@@ -17,6 +17,7 @@ import com.izouma.dingdong.web.BaseController;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
@@ -32,7 +33,7 @@ public class ShoppingCartController extends BaseController {
     private ShoppingCartService shoppingCartService;
     private ShoppingCartService shoppingCartService;
     private ShoppingCartRepo shoppingCartRepo;
     private ShoppingCartRepo shoppingCartRepo;
     private OrderGoodsSpecService orderGoodsSpecService;
     private OrderGoodsSpecService orderGoodsSpecService;
-
+    private OrderGoodsSpecRepo orderGoodsSpecRepo;
 
 
     //@PreAuthorize("hasRole('ADMIN')")
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     @PostMapping("/save")
@@ -76,5 +77,17 @@ public class ShoppingCartController extends BaseController {
         OrderGoodsSpec orderGoodsSpec = orderGoodsSpecService.add(goodsId, goodsSpecificationIds, num);
         OrderGoodsSpec orderGoodsSpec = orderGoodsSpecService.add(goodsId, goodsSpecificationIds, num);
         return shoppingCartService.save(SecurityUtils.getAuthenticatedUser().getId(), orderGoodsSpec);
         return shoppingCartService.save(SecurityUtils.getAuthenticatedUser().getId(), orderGoodsSpec);
     }
     }
+
+    @PostMapping("/delGoods")
+    @ApiOperation("从购物车中删除商品")
+    public void delGoods(Long orderGoodsSpec) {
+        orderGoodsSpecRepo.deleteById(orderGoodsSpec);
+    }
+
+    @GetMapping("/my")
+    public Page<ShoppingCart> my(PageQuery pageQuery) {
+        List<ShoppingCart> carts = shoppingCartRepo.findAllByUserId(SecurityUtils.getAuthenticatedUser().getId());
+        return new PageImpl<>(carts, toPageRequest(pageQuery), pageQuery.getSize());
+    }
 }
 }
 
 

+ 1 - 0
src/main/resources/genjson/ChatWords.json

@@ -0,0 +1 @@
+{"tableName":"ChatWords","className":"ChatWords","remark":"聊天框话术","genTable":true,"genClass":true,"genList":true,"genForm":true,"genRouter":true,"javaPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/java/com/izouma/dingdong","viewPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/vue/src/views","routerPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/vue/src","resourcesPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/resources","dataBaseType":"Mysql","fields":[{"name":"context","modelName":"context","remark":"内容","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"type","modelName":"type","remark":"类型","showInList":true,"showInForm":true,"formType":"singleLineText"}],"readTable":false,"dataSourceCode":"dataSource","genJson":"","subtables":[],"update":false,"basePackage":"com.izouma.dingdong","tablePackage":"com.izouma.dingdong.domain.backstage.ChatWords","genPackage":"backstage"}

+ 16 - 0
src/main/vue/src/router.js

@@ -286,6 +286,22 @@ const router = new Router({
                     meta: {
                     meta: {
                        title: '商家性质',
                        title: '商家性质',
                     },
                     },
+               },
+                {
+                    path: '/chatWordsEdit',
+                    name: 'ChatWordsEdit',
+                    component: () => import(/* webpackChunkName: "chatWordsEdit" */ '@/views/ChatWordsEdit.vue'),
+                    meta: {
+                       title: '聊天框话术编辑',
+                    },
+                },
+                {
+                    path: '/chatWordsList',
+                    name: 'ChatWordsList',
+                    component: () => import(/* webpackChunkName: "chatWordsList" */ '@/views/ChatWordsList.vue'),
+                    meta: {
+                       title: '聊天框话术',
+                    },
                }
                }
                 /**INSERT_LOCATION**/,
                 /**INSERT_LOCATION**/,
                 {
                 {

+ 91 - 0
src/main/vue/src/views/ChatWordsEdit.vue

@@ -0,0 +1,91 @@
+<template>
+    <div class="edit-view">
+        <el-form :model="formData" :rules="rules" ref="form" label-width="52px" label-position="right" size="small"
+                 style="max-width: 500px;">
+                <el-form-item prop="context" label="内容">
+                            <el-input v-model="formData.context"></el-input>
+                </el-form-item>
+                <el-form-item prop="type" label="类型">
+                            <el-input v-model="formData.type"></el-input>
+                </el-form-item>
+            <el-form-item>
+                <el-button @click="onSave" :loading="saving"
+                           type="primary">保存</el-button>
+                <el-button @click="onDelete" :loading="saving"
+                           type="danger" v-if="formData.id">删除
+                </el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+    export default {
+        name: 'ChatWordsEdit',
+        created() {
+            if (this.$route.query.id) {
+                this.$http
+                    .get('chatWords/get/'+this.$route.query.id)
+                    .then(res => {
+                        this.formData = res;
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    });
+            }
+        },
+        data() {
+            return {
+                saving: false,
+                formData: {
+                },
+                rules: {
+                },
+            }
+        },
+        methods: {
+            onSave() {
+                this.$refs.form.validate((valid) => {
+                    if (valid) {
+                        this.submit();
+                    } else {
+                        return false;
+                    }
+                });
+            },
+            submit() {
+                let data = {...this.formData};
+
+                this.saving = true;
+                this.$http
+                    .post('/chatWords/save', data, {body: 'json'})
+                    .then(res => {
+                        this.saving = false;
+                        this.$message.success('成功');
+                        this.$router.go(-1);
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.saving = false;
+                        this.$message.error(e.error);
+                    });
+            },
+            onDelete() {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post(`/chatWords/del/${this.formData.id}`)
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                }).catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+</style>

+ 167 - 0
src/main/vue/src/views/ChatWordsList.vue

@@ -0,0 +1,167 @@
+<template>
+    <div  class="list-view">
+        <div class="filters-container">
+            <el-input placeholder="输入关键字" v-model="search" clearable
+                      class="filter-item"></el-input>
+            <el-button @click="getData" type="primary" icon="el-icon-search"
+                       class="filter-item">搜索
+            </el-button>
+            <el-button @click="addRow" type="primary" icon="el-icon-plus"
+                       class="filter-item">添加
+            </el-button>
+            <el-button @click="download" type="primary" icon="el-icon-download"
+                       :loading="downloading" class="filter-item">导出EXCEL
+            </el-button>
+        </div>
+        <el-table :data="tableData" row-key="id" ref="table"
+                  header-row-class-name="table-header-row"
+                  header-cell-class-name="table-header-cell"
+                  row-class-name="table-row" cell-class-name="table-cell"
+                  :height="tableHeight">
+            <el-table-column v-if="multipleMode" align="center" type="selection"
+                             width="50">
+            </el-table-column>
+            <el-table-column prop="id" label="ID" width="100">
+            </el-table-column>
+                                <el-table-column prop="context" label="内容"
+>
+                    </el-table-column>
+                    <el-table-column prop="type" label="类型"
+>
+                    </el-table-column>
+            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150">
+                <template slot-scope="{row}">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <!-- <div class="multiple-mode-wrapper">
+                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button @click="operation1">批量操作1</el-button>
+                    <el-button @click="operation2">批量操作2</el-button>
+                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div> -->
+            <el-pagination background @size-change="onSizeChange"
+                           @current-change="onCurrentChange" :current-page="page"
+                           :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize"
+                           layout="total, sizes, prev, pager, next, jumper"
+                           :total="totalElements">
+            </el-pagination>
+        </div>
+
+    </div>
+</template>
+<script>
+    import { mapState } from "vuex";
+    import pageableTable from "@/mixins/pageableTable";
+
+    export default {
+        name: 'ChatWordsList',
+        mixins: [pageableTable],
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                multipleMode: false,
+                search: "",
+                url: "/chatWords/all",
+                downloading: false,
+            }
+        },
+        computed: {
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            beforeGetData() {
+                if (this.search) {
+                    return { search: this.search };
+                }
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            addRow() {
+                this.$router.push({
+                    path: "/chatWordsEdit",
+                    query: {
+                    ...this.$route.query
+                    }
+                });
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: "/chatWordsEdit",
+                    query: {
+                    id: row.id
+                    }
+                });
+            },
+            download() {
+                this.downloading = true;
+                this.$axios
+                    .get("/chatWords/excel", { 
+                        responseType: "blob",
+                        params: { size: 10000 }
+                    })
+                    .then(res => {
+                        console.log(res);
+                        this.downloading = false;
+                        const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                        const link = document.createElement("a");
+                        link.href = downloadUrl;
+                        link.setAttribute(
+                            "download",
+                            res.headers["content-disposition"].split("filename=")[1]
+                        );
+                        document.body.appendChild(link);
+                        link.click();
+                        link.remove();
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.downloading = false;
+                        this.$message.error(e.error);
+                    });
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post(`/chatWords/del/${row.id}`)
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+</style>

+ 1 - 1
src/main/vue/src/views/OrderInfoList.vue

@@ -23,7 +23,7 @@
             </el-table-column>
             </el-table-column>
             <el-table-column prop="id" label="ID" width="100">
             <el-table-column prop="id" label="ID" width="100">
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="userId" label="用户ID"
+            <el-table-column prop="userId" label="用户"
             >
             >
             </el-table-column>
             </el-table-column>
             <el-table-column prop="userAddress" label="配送地址"
             <el-table-column prop="userAddress" label="配送地址"

+ 3 - 3
src/main/vue/src/views/UserEdit.vue

@@ -130,9 +130,9 @@
                     nickname: [
                     nickname: [
                         {required: true, message: '请输入昵称', trigger: 'blur'},
                         {required: true, message: '请输入昵称', trigger: 'blur'},
                     ],
                     ],
-                    password: [
+         /*           password: [
                         {required: true, message: '请输入密码', trigger: 'blur'},
                         {required: true, message: '请输入密码', trigger: 'blur'},
-                    ],
+                    ],*/
                     phone: [
                     phone: [
                         {
                         {
                             regexp: /^1[3-9]\d{9}$/,
                             regexp: /^1[3-9]\d{9}$/,
@@ -319,7 +319,7 @@
                     })
                     })
                     .then(res => {
                     .then(res => {
                         this.orders = res.content;
                         this.orders = res.content;
-                        console.log(this.orders)
+                        // console.log(this.orders)
                     })
                     })
                     .catch(e => {
                     .catch(e => {
                         console.log(e);
                         console.log(e);

+ 2 - 2
src/main/vue/src/views/backstage/BackUserList.vue

@@ -101,7 +101,7 @@ export default {
         },
         },
         addRow() {
         addRow() {
             this.$router.push({
             this.$router.push({
-                path: "/blackUserEdit",
+                path: "/backUserEdit",
                 query: {
                 query: {
                     ...this.$route.query,
                     ...this.$route.query,
                 }
                 }
@@ -109,7 +109,7 @@ export default {
         },
         },
         editRow(row) {
         editRow(row) {
             this.$router.push({
             this.$router.push({
-                path: "/blackUserEdit",
+                path: "/backUserEdit",
                 query: {
                 query: {
                     id: row.id
                     id: row.id
                 }
                 }

+ 7 - 7
src/main/vue/src/views/merchant/GoodsEdit.vue

@@ -51,13 +51,13 @@
                                :label="item.label" :value="item">
                                :label="item.label" :value="item">
                     </el-option>-->
                     </el-option>-->
 <!--                    <el-option value="每天">每天</el-option>-->
 <!--                    <el-option value="每天">每天</el-option>-->
-                    <el-option value="周一">周一</el-option>
-                    <el-option value="周二">周二</el-option>
-                    <el-option value="周三">周三</el-option>
-                    <el-option value="周四">周四</el-option>
-                    <el-option value="周五">周五</el-option>
-                    <el-option value="周六">周六</el-option>
-                    <el-option value="周日">周日</el-option>
+                    <el-option value="MON">MON</el-option>
+                    <el-option value="TUE">TUE</el-option>
+                    <el-option value="WED">WED</el-option>
+                    <el-option value="THU">THU</el-option>
+                    <el-option value="FRI">FRI</el-option>
+                    <el-option value="SAT">SAT</el-option>
+                    <el-option value="SUN">SUN</el-option>
                 </el-select>
                 </el-select>
             </el-form-item>
             </el-form-item>
             <el-form-item prop="startTime" label="时间">
             <el-form-item prop="startTime" label="时间">

+ 7 - 3
src/main/vue/src/views/merchant/GoodsList.vue

@@ -36,8 +36,8 @@
             >
             >
                 <template slot-scope="{row}">
                 <template slot-scope="{row}">
                     <el-image style="width: 30px; height: 30px"
                     <el-image style="width: 30px; height: 30px"
-                              :src="row.img" fit="cover"
-                              :preview-src-list="[row.img]"></el-image>
+                              :src="picList(row.img)[0]" fit="cover"
+                              :preview-src-list="picList(row.img)"></el-image>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
             <el-table-column prop="inventory" label="库存"
             <el-table-column prop="inventory" label="库存"
@@ -119,7 +119,7 @@
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
         <div class="pagination-wrapper">
         <div class="pagination-wrapper">
-             <div class="multiple-mode-wrapper">
+            <div class="multiple-mode-wrapper">
                 <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button-group v-else>
                 <el-button-group v-else>
                     <el-button @click="operation1">批量操作1</el-button>
                     <el-button @click="operation1">批量操作1</el-button>
@@ -156,6 +156,7 @@
                 statusOptions: [{"label": "待处理", "value": "PENDING"}, {
                 statusOptions: [{"label": "待处理", "value": "PENDING"}, {
                     "label": "成功", "value": "PASS"
                     "label": "成功", "value": "PASS"
                 }, {"label": "失败", "value": "FAIL"}],
                 }, {"label": "失败", "value": "FAIL"}],
+
             }
             }
         },
         },
         computed: {
         computed: {
@@ -164,6 +165,9 @@
             }
             }
         },
         },
         methods: {
         methods: {
+            picList(row) {
+                return row.split(",");
+            },
             statusFormatter(row, column, cellValue, index) {
             statusFormatter(row, column, cellValue, index) {
                 let selectedOption = this.statusOptions.find(i => i.value === cellValue);
                 let selectedOption = this.statusOptions.find(i => i.value === cellValue);
                 if (selectedOption) {
                 if (selectedOption) {

+ 97 - 31
src/main/vue/src/views/merchant/MerchantList.vue

@@ -1,5 +1,3 @@
-import format from "date-fns/format";import startOfDay from "date-fns/startOfDay";import endOfDay
-    from "date-fns/endOfDay";
 <template>
 <template>
     <div class="list-view">
     <div class="list-view">
         <div class="filters-container">
         <div class="filters-container">
@@ -15,7 +13,21 @@ import format from "date-fns/format";import startOfDay from "date-fns/startOfDay
                        :loading="downloading" class="filter-item">导出EXCEL
                        :loading="downloading" class="filter-item">导出EXCEL
             </el-button>
             </el-button>
 
 
-            <el-checkbox-button label="新店"></el-checkbox-button>
+<!--            <el-button >新店</el-button>-->
+
+            <el-date-picker
+                    v-model="dateRange"
+                    type="daterange"
+                    value-format="yyyy-MM-dd HH:mm:ss"
+                    start-placeholder="请选择开始时间"
+                    end-placeholder="请选择结束时间"
+                    range-separator="至"
+                    :default-time="['00:00:00', '23:59:59']"
+                    class="filter-item"
+                    :picker-options="pickerOptions"
+                    @change="getData"
+            >
+            </el-date-picker>
 
 
         </div>
         </div>
         <el-table :data="tableData" row-key="mid" ref="table"
         <el-table :data="tableData" row-key="mid" ref="table"
@@ -157,24 +169,29 @@ import format from "date-fns/format";import startOfDay from "date-fns/startOfDay
                 </div>
                 </div>
                 <div class="info-item">名称:{{formData.name}}</div>
                 <div class="info-item">名称:{{formData.name}}</div>
                 <div class="info-item">显示名称:{{formData.showName}}</div>
                 <div class="info-item">显示名称:{{formData.showName}}</div>
-<!--                <div class="info-item">横幅:-->
-<!--                    <el-image style="width: 60px; height: 30px"-->
-<!--                              :src="formData.banner" fit="cover"-->
-<!--                              :preview-src-list="[formData.banner]"/>-->
-<!--                </div>-->
+                <div class="info-item">横幅:
+                    <el-image style="width: 60px; height: 30px"
+                              :src="formData.banner" fit="cover"
+                              :preview-src-list="[formData.banner]"/>
+                </div>
                 <div class="info-item">电话:{{formData.phone}}</div>
                 <div class="info-item">电话:{{formData.phone}}</div>
                 <div class="info-item">简介:{{formData.introduction}}</div>
                 <div class="info-item">简介:{{formData.introduction}}</div>
-<!--                <div class="info-item">图片:-->
-<!--                    <el-image style="width: 60px; height: 30px"-->
-<!--                              :src="formData.img[0]" fit="cover"-->
-<!--                              :preview-src-list="[formData.img]"/>-->
-<!--                </div>-->
+                <div class="info-item">图片: {{formData.img}}
+                    <!--<el-image style="width: 60px; height: 30px"
+                              :src="picList(formData.img)" fit="cover"
+                              :preview-src-list="picList(formData.img)"/>-->
+                </div>
                 <div class="info-item">地址:{{formData.address}}</div>
                 <div class="info-item">地址:{{formData.address}}</div>
                 <div class="info-item">成立时间:{{formData.establishTime}}</div>
                 <div class="info-item">成立时间:{{formData.establishTime}}</div>
-                <div class="info-item">营业资质:{{formData.qualification}}</div>
+                <div class="info-item">营业资质:
+                    <el-image style="width: 30px; height: 30px"
+                              :src="formData.qualification" fit="fit"
+                              :preview-src-list="[formData.qualification]"/>
+                </div>
                 <div class="info-item">营业性质:{{formData.businessNature}}</div>
                 <div class="info-item">营业性质:{{formData.businessNature}}</div>
                 <div class="info-item">公告:{{formData.proclamation}}</div>
                 <div class="info-item">公告:{{formData.proclamation}}</div>
-                <div class="info-item">经营品类:{{formData.category}}</div>
+                <div class="info-item">经营品类:{{formData.category}}
+                </div>
                 <div class="info-item">营业:{{formData.week}}</div>
                 <div class="info-item">营业:{{formData.week}}</div>
                 <div class="info-item">营业时间:{{formData.startTime}} - {{formData.endTime}}</div>
                 <div class="info-item">营业时间:{{formData.startTime}} - {{formData.endTime}}</div>
                 <!--                <div class="info-item">申请状态:{{formData.status}}</div>-->
                 <!--                <div class="info-item">申请状态:{{formData.status}}</div>-->
@@ -191,6 +208,11 @@ import format from "date-fns/format";import startOfDay from "date-fns/startOfDay
 <script>
 <script>
     import {mapState} from "vuex";
     import {mapState} from "vuex";
     import pageableTable from "@/mixins/pageableTable";
     import pageableTable from "@/mixins/pageableTable";
+    import addDays from "date-fns/addDays";
+    import addMonths from "date-fns/addMonths";
+    import format from "date-fns/format";
+    import startOfDay from "date-fns/startOfDay";
+    import endOfDay from "date-fns/endOfDay";
 
 
     export default {
     export default {
         name: 'MerchantList',
         name: 'MerchantList',
@@ -210,11 +232,56 @@ import format from "date-fns/format";import startOfDay from "date-fns/startOfDay
                 status: '',
                 status: '',
                 drawer: false,
                 drawer: false,
                 formData: {
                 formData: {
-                    img: [],
                     // category: []
                     // category: []
                 },
                 },
                 showSetLogistics: false,
                 showSetLogistics: false,
                 dateRange: [],
                 dateRange: [],
+
+                pickerOptions: {
+                    shortcuts: [
+                        {
+                            text: '今天',
+                            onClick(picker) {
+                                picker.$emit('pick', [
+                                    format(startOfDay(new Date()), 'yyyy-MM-dd HH:mm:ss'),
+                                    format(endOfDay(new Date()), 'yyyy-MM-dd HH:mm:ss')
+                                ]);
+                            }
+                        },
+                        {
+                            text: '近一周',
+                            onClick(picker) {
+                                const date = addDays(new Date(), -7);
+                                picker.$emit('pick', [
+                                    format(startOfDay(date), 'yyyy-MM-dd HH:mm:ss'),
+                                    format(endOfDay(new Date()), 'yyyy-MM-dd HH:mm:ss')
+                                ]);
+                            }
+                        },
+                        {
+                            text: '近一月',
+                            onClick(picker) {
+                                const date = addMonths(new Date(), -1);
+                                picker.$emit('pick', [
+                                    format(startOfDay(date), 'yyyy-MM-dd HH:mm:ss'),
+                                    format(endOfDay(new Date()), 'yyyy-MM-dd HH:mm:ss')
+                                ]);
+                            }
+                        },
+                        {
+                            text: '近三月',
+                            onClick(picker) {
+                                const date = addMonths(new Date(), -3);
+                                picker.$emit('pick', [
+                                    format(startOfDay(date), 'yyyy-MM-dd HH:mm:ss'),
+                                    format(endOfDay(new Date()), 'yyyy-MM-dd HH:mm:ss')
+                                ]);
+                            }
+                        },
+
+                    ]
+                }
+
             }
             }
         },
         },
         computed: {
         computed: {
@@ -223,6 +290,9 @@ import format from "date-fns/format";import startOfDay from "date-fns/startOfDay
             }
             }
         },
         },
         methods: {
         methods: {
+            picList(row) {
+                return row.split(",");
+            },
             beforeOnCreate() {
             beforeOnCreate() {
                 if (this.$route.query.dateRange) {
                 if (this.$route.query.dateRange) {
                     this.dateRange = decodeURIComponent(this.$route.query.dateRange).split(',');
                     this.dateRange = decodeURIComponent(this.$route.query.dateRange).split(',');
@@ -247,20 +317,6 @@ import format from "date-fns/format";import startOfDay from "date-fns/startOfDay
                     });
                     });
             },
             },
 
 
-
-            checkRes(res) {
-                res.forEach(item => {
-                    this.formData.img = item.img.split(",");
-                    console.log(this.formData.img)
-                    if (this.formData.img.length > 0) {
-                        this.formData.img = item.img[0];
-                    } else {
-                        item.img = "";
-                    }
-                });
-
-                return res;
-            },
             statusFormatter(row, column, cellValue, index) {
             statusFormatter(row, column, cellValue, index) {
                 let selectedOption = this.statusOptions.find(i => i.value === cellValue);
                 let selectedOption = this.statusOptions.find(i => i.value === cellValue);
                 if (selectedOption) {
                 if (selectedOption) {
@@ -269,9 +325,19 @@ import format from "date-fns/format";import startOfDay from "date-fns/startOfDay
                 return '';
                 return '';
             },
             },
             beforeGetData() {
             beforeGetData() {
+
+                let data = { sort: 'createdAt,desc', query: { } };
                 if (this.search) {
                 if (this.search) {
-                    return {search: this.search};
+                    data.search = this.search;
+                }
+                if (this.dateRange && this.dateRange.length > 0) {
+                    data.query.startTime = this.dateRange[0] + ',' + this.dateRange[1];
                 }
                 }
+
+                return data;
+/*                if (this.search) {
+                    return {search: this.search};
+                }*/
             },
             },
             toggleMultipleMode(multipleMode) {
             toggleMultipleMode(multipleMode) {
                 this.multipleMode = multipleMode;
                 this.multipleMode = multipleMode;