licailing 5 жил өмнө
parent
commit
7d86f12c0d
25 өөрчлөгдсөн 884 нэмэгдсэн , 305 устгасан
  1. 42 18
      src/main/java/com/izouma/dingdong/domain/OrderInfo.java
  2. 1 0
      src/main/java/com/izouma/dingdong/domain/User.java
  3. 7 1
      src/main/java/com/izouma/dingdong/domain/backstage/BlackList.java
  4. 2 0
      src/main/java/com/izouma/dingdong/domain/backstage/Category.java
  5. 1 0
      src/main/java/com/izouma/dingdong/domain/backstage/Tag.java
  6. 13 9
      src/main/java/com/izouma/dingdong/domain/merchant/Goods.java
  7. 14 15
      src/main/java/com/izouma/dingdong/domain/merchant/Merchant.java
  8. 22 9
      src/main/java/com/izouma/dingdong/domain/merchant/MerchantSettings.java
  9. 3 1
      src/main/java/com/izouma/dingdong/domain/user/Address.java
  10. 21 5
      src/main/java/com/izouma/dingdong/domain/user/Coupon.java
  11. 57 17
      src/main/java/com/izouma/dingdong/dto/MerchantDTO.java
  12. 3 1
      src/main/java/com/izouma/dingdong/repo/merchant/GoodsRepo.java
  13. 3 0
      src/main/java/com/izouma/dingdong/repo/merchant/MerchantRepo.java
  14. 14 1
      src/main/java/com/izouma/dingdong/repo/merchant/MerchantSettingsRepo.java
  15. 53 5
      src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java
  16. 66 37
      src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java
  17. 6 7
      src/main/java/com/izouma/dingdong/web/backstage/CategoryController.java
  18. 18 0
      src/main/java/com/izouma/dingdong/web/merchant/GoodsController.java
  19. 34 5
      src/main/java/com/izouma/dingdong/web/merchant/MerchantController.java
  20. 32 0
      src/main/vue/src/router.js
  21. 1 1
      src/main/vue/src/views/Categories.vue
  22. 84 48
      src/main/vue/src/views/GoodsEdit.vue
  23. 70 66
      src/main/vue/src/views/GoodsList.vue
  24. 118 33
      src/main/vue/src/views/MerchantEdit.vue
  25. 199 26
      src/main/vue/src/views/MerchantList.vue

+ 42 - 18
src/main/java/com/izouma/dingdong/domain/OrderInfo.java

@@ -1,17 +1,16 @@
 package com.izouma.dingdong.domain;
 package com.izouma.dingdong.domain;
 
 
+import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.enums.PayMethod;
 import com.izouma.dingdong.enums.PayMethod;
 import com.izouma.dingdong.enums.RiderStatus;
 import com.izouma.dingdong.enums.RiderStatus;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import lombok.*;
 
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
+import javax.persistence.*;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.util.List;
 
 
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
 @Data
 @Data
@@ -24,25 +23,22 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "用户ID", name = "userId")
     @ApiModelProperty(value = "用户ID", name = "userId")
     private Long userId;
     private Long userId;
 
 
-    @ApiModelProperty(value = "配送地址", name = "userAddress")
-    private String userAddress;
-
+    //商家信息
     @ApiModelProperty(value = "商户ID", name = "merchantId")
     @ApiModelProperty(value = "商户ID", name = "merchantId")
     private Long merchantId;
     private Long merchantId;
 
 
+    @ManyToMany(fetch = FetchType.EAGER)
     @ApiModelProperty(value = "商品ID", name = "goodsId")
     @ApiModelProperty(value = "商品ID", name = "goodsId")
-    private Long goodsId;
-   // private
+    private List<Goods> goods;
+
+    @ApiModelProperty(value = "商家状态", name = "merchantStatus")
+    private String merchantStatus;
 
 
     @ApiModelProperty(value = "商家地址", name = "merchantAddress")
     @ApiModelProperty(value = "商家地址", name = "merchantAddress")
     private String merchantAddress;
     private String merchantAddress;
 
 
-    @ApiModelProperty(value = "骑手工号", name = "jobNumber")
-    private String jobNumber;
-
-    @Enumerated(EnumType.STRING)
-    @ApiModelProperty(value = "骑手状态", name = "riderStatus")
-    private RiderStatus riderStatus;
+    @ApiModelProperty(value = "备注", name = "remark")
+    private String remark;
 
 
     @ApiModelProperty(value = "总价", name = "totalAmount")
     @ApiModelProperty(value = "总价", name = "totalAmount")
     private BigDecimal totalAmount;
     private BigDecimal totalAmount;
@@ -56,9 +52,37 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "实付金额", name = "realAmount")
     @ApiModelProperty(value = "实付金额", name = "realAmount")
     private BigDecimal realAmount;
     private BigDecimal realAmount;
 
 
+    //使用优惠券
+    @ApiModelProperty(value = "是否使用优惠券", name = "isCoupon")
+    private Boolean isCoupon;
+
+    @ApiModelProperty(value = "优惠券ID", name = "couponId")
+    private Long couponId;
+
+
+    //配送信息
+    @ApiModelProperty(value = "骑手工号", name = "jobNumber")
+    private String jobNumber;
+
+    @Enumerated(EnumType.STRING)
+    @ApiModelProperty(value = "骑手状态", name = "riderStatus")
+    private RiderStatus riderStatus;
+
+
+    //订单信息
+    private String orderNo;
+
+    @ApiModelProperty(value = "下单时间", name = "orderTime")
+    private LocalDateTime orderTime;
+
+    @ApiModelProperty(value = "配送地址", name = "userAddress")
+    private String userAddress;
+
     @ApiModelProperty(value = "支付方式", name = "payMethod")
     @ApiModelProperty(value = "支付方式", name = "payMethod")
     private PayMethod payMethod;
     private PayMethod payMethod;
 
 
+
+
     @Column(nullable = false)
     @Column(nullable = false)
     @ApiModelProperty(value = "取消订单", name = "cancel")
     @ApiModelProperty(value = "取消订单", name = "cancel")
     private Boolean cancel = false;
     private Boolean cancel = false;
@@ -67,9 +91,6 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "已评价", name = "rated")
     @ApiModelProperty(value = "已评价", name = "rated")
     private Boolean rated = false;
     private Boolean rated = false;
 
 
-    @ApiModelProperty(value = "下单时间", name = "orderTime")
-    private LocalDateTime orderTime;
-
     @ApiModelProperty(value = "商家接单时间", name = "merchantOrderTime")
     @ApiModelProperty(value = "商家接单时间", name = "merchantOrderTime")
     private LocalDateTime merchantOrderTime;
     private LocalDateTime merchantOrderTime;
 
 
@@ -78,4 +99,7 @@ public class OrderInfo extends BaseEntity {
 
 
     @ApiModelProperty(value = "用户收到时间", name = "userReceivedTime")
     @ApiModelProperty(value = "用户收到时间", name = "userReceivedTime")
     private LocalDateTime userReceivedTime;
     private LocalDateTime userReceivedTime;
+
+
+
 }
 }

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

@@ -72,6 +72,7 @@ public class User extends BaseEntity implements Serializable {
 
 
     private String email;
     private String email;
 
 
+    @Enumerated(EnumType.STRING)
     @ApiModelProperty(value = "身份", name = "identity")
     @ApiModelProperty(value = "身份", name = "identity")
     private Identity identity;
     private Identity identity;
 
 

+ 7 - 1
src/main/java/com/izouma/dingdong/domain/backstage/BlackList.java

@@ -8,8 +8,10 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 
 
+import javax.persistence.Entity;
+
 @Data
 @Data
-//@Entity
+@Entity
 @AllArgsConstructor
 @AllArgsConstructor
 @NoArgsConstructor
 @NoArgsConstructor
 @Builder
 @Builder
@@ -18,6 +20,10 @@ public class BlackList extends BaseEntity {
     @ApiModelProperty(value = "用户ID", name = "userId")
     @ApiModelProperty(value = "用户ID", name = "userId")
     private Long userId;
     private Long userId;
 
 
+    //骑手ID或商户ID
+    @ApiModelProperty(value = "其他ID", name = "otherId")
+    private Long otherId;
+
     @ApiModelProperty(value = "身份", name = "identity")
     @ApiModelProperty(value = "身份", name = "identity")
     private String identity;
     private String identity;
 
 

+ 2 - 0
src/main/java/com/izouma/dingdong/domain/backstage/Category.java

@@ -27,6 +27,8 @@ public class Category extends BaseEntity implements Serializable {
 
 
     private Long parent;
     private Long parent;
 
 
+    private Boolean active;
+
     @OneToMany
     @OneToMany
     @JoinColumn(name = "parent", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
     @JoinColumn(name = "parent", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
     @NotFound(action = NotFoundAction.IGNORE)
     @NotFound(action = NotFoundAction.IGNORE)

+ 1 - 0
src/main/java/com/izouma/dingdong/domain/backstage/Tag.java

@@ -23,4 +23,5 @@ public class Tag extends BaseEntity {
     @Column(length = 30)
     @Column(length = 30)
     @ApiModelProperty(value = "标签名称", name = "name")
     @ApiModelProperty(value = "标签名称", name = "name")
     private String name;
     private String name;
+    //好评 人气 推荐
 }
 }

+ 13 - 9
src/main/java/com/izouma/dingdong/domain/merchant/Goods.java

@@ -5,11 +5,9 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import lombok.*;
 
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
+import javax.persistence.*;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.LocalTime;
 
 
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
@@ -38,16 +36,16 @@ public class Goods extends BaseEntity implements Serializable {
     private Integer inventory;
     private Integer inventory;
 
 
     @ApiModelProperty(value = "销量", name = "sales")
     @ApiModelProperty(value = "销量", name = "sales")
-    private Integer totalSales;
+    private Integer totalSales = 0;
 
 
 //    @ApiModelProperty(value = "日销售额", name = "daySales")
 //    @ApiModelProperty(value = "日销售额", name = "daySales")
 //    private Integer daySales;
 //    private Integer daySales;
 
 
     @ApiModelProperty(value = "点赞数量", name = "likes")
     @ApiModelProperty(value = "点赞数量", name = "likes")
-    private Integer likes;
+    private Integer likes = 0;
 
 
     @ApiModelProperty(value = "差评数量", name = "bad")
     @ApiModelProperty(value = "差评数量", name = "bad")
-    private Integer bad;
+    private Integer bad = 0;
 
 
     @ApiModelProperty(value = "价格", name = "amount")
     @ApiModelProperty(value = "价格", name = "amount")
     private BigDecimal amount;
     private BigDecimal amount;
@@ -65,11 +63,17 @@ public class Goods extends BaseEntity implements Serializable {
     private Integer sort;
     private Integer sort;
 
 
     @ApiModelProperty(value = "是否参与满减", name = "isFullReduction")
     @ApiModelProperty(value = "是否参与满减", name = "isFullReduction")
-    private Boolean isFullReduction = true;
+    private Boolean isFullReduction = false;
+
+    @ApiModelProperty(value = "周几", name = "week")
+    private String week;
 
 
     @ApiModelProperty(value = "供应时间", name = "startTime")
     @ApiModelProperty(value = "供应时间", name = "startTime")
-    private LocalDateTime startTime;
+    private LocalTime startTime;
 
 
     @ApiModelProperty(value = "供应时间", name = "endTime")
     @ApiModelProperty(value = "供应时间", name = "endTime")
-    private LocalDateTime endTime;
+    private LocalTime endTime;
+
+    @ApiModelProperty(value = "包装价格",name = "packingPrice")
+    private BigDecimal packingPrice;
 }
 }

+ 14 - 15
src/main/java/com/izouma/dingdong/domain/merchant/Merchant.java

@@ -1,23 +1,16 @@
 package com.izouma.dingdong.domain.merchant;
 package com.izouma.dingdong.domain.merchant;
 
 
-import com.alibaba.excel.annotation.ExcelIgnore;
 import com.izouma.dingdong.annotations.Searchable;
 import com.izouma.dingdong.annotations.Searchable;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.domain.BaseEntity;
-import com.izouma.dingdong.domain.backstage.Category;
-import com.izouma.dingdong.domain.backstage.Tag;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.enums.ApplyStatus;
-import com.izouma.dingdong.security.Authority;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import lombok.*;
-import org.hibernate.annotations.BatchSize;
+import org.hibernate.annotations.Where;
 
 
 import javax.persistence.*;
 import javax.persistence.*;
 import java.io.Serializable;
 import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalTime;
-import java.util.HashSet;
-import java.util.Set;
+import java.time.LocalDateTime;
 
 
 @Data
 @Data
 @Entity
 @Entity
@@ -25,6 +18,7 @@ import java.util.Set;
 @NoArgsConstructor
 @NoArgsConstructor
 @Builder
 @Builder
 //@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})
 //@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})
+@Where(clause = "enabled = true")
 @ApiModel(value = "商户信息", description = "商户信息")
 @ApiModel(value = "商户信息", description = "商户信息")
 public class Merchant extends BaseEntity implements Serializable {
 public class Merchant extends BaseEntity implements Serializable {
 
 
@@ -46,12 +40,13 @@ public class Merchant extends BaseEntity implements Serializable {
 /*    @ApiModelProperty(value = "密码", name = "password")
 /*    @ApiModelProperty(value = "密码", name = "password")
     private String password;*/
     private String password;*/
 
 
-    @ApiModelProperty(value = "简介", name = "introduction")
-    private String introduction;
-
     @ApiModelProperty(value = "图片", name = "img")
     @ApiModelProperty(value = "图片", name = "img")
     private String img;
     private String img;
 
 
+    @ApiModelProperty(value = "横幅", name = "banner")
+    private String banner;
+
+    @Builder.Default
     @Column(nullable = false)
     @Column(nullable = false)
     @ApiModelProperty(value = "黑名单", name = "blacklist")
     @ApiModelProperty(value = "黑名单", name = "blacklist")
     private Boolean blacklist = false;
     private Boolean blacklist = false;
@@ -68,17 +63,21 @@ public class Merchant extends BaseEntity implements Serializable {
     private String aliAccount;
     private String aliAccount;
 
 
     @ApiModelProperty(value = "总好评数量", name = "goodNum")
     @ApiModelProperty(value = "总好评数量", name = "goodNum")
-    private Integer goodNum;
+    private Integer goodNum = 0;
 
 
     @ApiModelProperty(value = "差评数量", name = "badNum")
     @ApiModelProperty(value = "差评数量", name = "badNum")
-    private Integer badNum;
+    private Integer badNum = 0;
 
 
     @ApiModelProperty(value = "月销", name = "monthSales")
     @ApiModelProperty(value = "月销", name = "monthSales")
-    private Integer monthSales;
+    private Integer monthSales = 0;
 
 
     @ApiModelProperty(value = "通过", name = "isPass")
     @ApiModelProperty(value = "通过", name = "isPass")
     private Boolean isPass;
     private Boolean isPass;
 
 
+    @Enumerated(EnumType.STRING)
     @ApiModelProperty(value = "状态", name = "status")
     @ApiModelProperty(value = "状态", name = "status")
     private ApplyStatus status;
     private ApplyStatus status;
+
+    @ApiModelProperty(value = "成立时间", name = "established")
+    private LocalDateTime establishTime;
 }
 }

+ 22 - 9
src/main/java/com/izouma/dingdong/domain/merchant/MerchantSettings.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.domain.merchant;
 package com.izouma.dingdong.domain.merchant;
 
 
-import com.izouma.dingdong.annotations.Searchable;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.Tag;
 import com.izouma.dingdong.domain.backstage.Tag;
@@ -11,11 +10,11 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 import org.hibernate.annotations.BatchSize;
 import org.hibernate.annotations.BatchSize;
+import org.hibernate.annotations.Where;
 
 
 import javax.persistence.*;
 import javax.persistence.*;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.time.LocalTime;
 import java.time.LocalTime;
-import java.util.List;
 import java.util.Set;
 import java.util.Set;
 
 
 @Data
 @Data
@@ -23,14 +22,21 @@ import java.util.Set;
 @AllArgsConstructor
 @AllArgsConstructor
 @NoArgsConstructor
 @NoArgsConstructor
 @Builder
 @Builder
+@Where(clause = "enabled = true")
 @ApiModel(value = "商户设置", description = "商户设置")
 @ApiModel(value = "商户设置", description = "商户设置")
 public class MerchantSettings extends BaseEntity {
 public class MerchantSettings extends BaseEntity {
     @ApiModelProperty(value = "商户ID", name = "merchantId")
     @ApiModelProperty(value = "商户ID", name = "merchantId")
     private Long merchantId;
     private Long merchantId;
 
 
+    @ApiModelProperty(value = "logo", name = "logo")
+    private String logo;
+
     @ApiModelProperty(value = "商户地址", name = "address")
     @ApiModelProperty(value = "商户地址", name = "address")
     private String address;
     private String address;
 
 
+    @ApiModelProperty(value = "简介", name = "introduction")
+    private String introduction;
+
     @ApiModelProperty(value = "首单优惠", name = "firstOrder")
     @ApiModelProperty(value = "首单优惠", name = "firstOrder")
     private BigDecimal firstOrder;
     private BigDecimal firstOrder;
 
 
@@ -39,21 +45,24 @@ public class MerchantSettings extends BaseEntity {
 
 
     @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
     @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
     @JoinTable(
     @JoinTable(
-            name = "mer_cate",
+            name = "merchant_cate",
             joinColumns = {@JoinColumn(name = "mer_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
             joinColumns = {@JoinColumn(name = "mer_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
-            inverseJoinColumns = {@JoinColumn(name = "cate_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
+            inverseJoinColumns = {@JoinColumn(name = "cate_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
     @BatchSize(size = 20)
     @BatchSize(size = 20)
     @ApiModelProperty(value = "经营品类", name = "category")
     @ApiModelProperty(value = "经营品类", name = "category")
     private Set<Category> category;
     private Set<Category> category;
 
 
-    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
+/*    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
     @JoinTable(
     @JoinTable(
-            name = "mer_tag",
+            name = "merchant_tag",
             joinColumns = {@JoinColumn(name = "mer_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
             joinColumns = {@JoinColumn(name = "mer_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
-            inverseJoinColumns = {@JoinColumn(name = "tag_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
+            inverseJoinColumns = {@JoinColumn(name = "tag_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
     @BatchSize(size = 20)
     @BatchSize(size = 20)
     @ApiModelProperty(value = "标签", name = "tag")
     @ApiModelProperty(value = "标签", name = "tag")
-    private Set<Tag> tag;
+    private Set<Tag> tag;*/
+
+    @ApiModelProperty(value = "周几", name = "week")
+    private String week;
 
 
     @ApiModelProperty(value = "营业时间", name = "startTime")
     @ApiModelProperty(value = "营业时间", name = "startTime")
     private LocalTime startTime;
     private LocalTime startTime;
@@ -64,6 +73,10 @@ public class MerchantSettings extends BaseEntity {
     @ApiModelProperty(value = "营业资质", name = "qualification")
     @ApiModelProperty(value = "营业资质", name = "qualification")
     private String qualification;
     private String qualification;
 
 
-    @ApiModelProperty(value = "营业性质", name = "businessNature")
+    @ApiModelProperty(value = "商家性质", name = "businessNature")
     private String businessNature;
     private String businessNature;
+
+    @Builder.Default
+    private Boolean enabled = true;
+
 }
 }

+ 3 - 1
src/main/java/com/izouma/dingdong/domain/user/Address.java

@@ -5,11 +5,13 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import lombok.*;
 
 
+import javax.persistence.Entity;
+
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 @Data
 @Data
 @AllArgsConstructor
 @AllArgsConstructor
 @NoArgsConstructor
 @NoArgsConstructor
-//@Entity
+@Entity
 @Builder
 @Builder
 //@JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
 //@JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
 @ApiModel(value = "Address", description = "收获地址记录")
 @ApiModel(value = "Address", description = "收获地址记录")

+ 21 - 5
src/main/java/com/izouma/dingdong/domain/user/Coupon.java

@@ -11,11 +11,12 @@ import lombok.*;
 import javax.persistence.*;
 import javax.persistence.*;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 @Data
 @Data
-//@Entity
+@Entity
 @AllArgsConstructor
 @AllArgsConstructor
 @NoArgsConstructor
 @NoArgsConstructor
 @Builder
 @Builder
@@ -32,8 +33,12 @@ public class Coupon extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "金额", name = "amount")
     @ApiModelProperty(value = "金额", name = "amount")
     private BigDecimal amount;
     private BigDecimal amount;
 
 
-    @ApiModelProperty(value = "有效期", name = "ExpirationDate")
-    private LocalDateTime ExpirationDate;
+/*    @ApiModelProperty(value = "有效期", name = "ExpirationDate")
+    private LocalDateTime ExpirationDate;*/
+
+    private LocalDate startDate;
+
+    private LocalDate endDate;
 
 
     @ApiModelProperty(value = "是否过期", name = "isExpired")
     @ApiModelProperty(value = "是否过期", name = "isExpired")
     private Boolean isExpired;
     private Boolean isExpired;
@@ -41,16 +46,27 @@ public class Coupon extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否已使用", name = "isUsed")
     @ApiModelProperty(value = "是否已使用", name = "isUsed")
     private Boolean isUsed;
     private Boolean isUsed;
 
 
-    @ApiModelProperty(value = "使用规则", name = "rule")
-    private String rule;
+    @ApiModelProperty(value = "使用时间", name = "usedTime")
+    private LocalDateTime usedTime;
+
+/*    @ApiModelProperty(value = "使用规则", name = "rule")
+    private String rule;*/
 
 
     @Enumerated(EnumType.STRING)
     @Enumerated(EnumType.STRING)
     @ApiModelProperty(value = "优惠券类型", name = "type")
     @ApiModelProperty(value = "优惠券类型", name = "type")
     private CouponType type;
     private CouponType type;
 
 
+    @ApiModelProperty(value = "满额", name = "fullAmount")
+    private BigDecimal fullAmount;
+
+    @ApiModelProperty(value = "折扣", name = "discount")
+    private Integer discount;
+
     @ManyToOne(fetch = FetchType.LAZY)
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "userId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
     @JoinColumn(name = "userId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
     @JsonIgnore
     @JsonIgnore
     private User user;
     private User user;
 
 
+    //商家发的优惠券
+    private Long merchantId;
 }
 }

+ 57 - 17
src/main/java/com/izouma/dingdong/dto/MerchantDTO.java

@@ -1,12 +1,11 @@
 package com.izouma.dingdong.dto;
 package com.izouma.dingdong.dto;
 
 
-import cn.hutool.core.bean.BeanUtil;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.izouma.dingdong.annotations.Searchable;
 import com.izouma.dingdong.annotations.Searchable;
 import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.Tag;
 import com.izouma.dingdong.domain.backstage.Tag;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
+import com.izouma.dingdong.enums.ApplyStatus;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Builder;
@@ -16,6 +15,7 @@ import org.hibernate.annotations.BatchSize;
 
 
 import javax.persistence.*;
 import javax.persistence.*;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.LocalTime;
 import java.util.Set;
 import java.util.Set;
 
 
@@ -24,14 +24,39 @@ import java.util.Set;
 @NoArgsConstructor
 @NoArgsConstructor
 @Builder
 @Builder
 public class MerchantDTO {
 public class MerchantDTO {
-    public MerchantDTO(Merchant merchant, MerchantSettings merchantSettings){
-        MerchantDTO merchantDTO = new MerchantDTO();
-        BeanUtil.copyProperties(merchant,merchantDTO);
-        BeanUtil.copyProperties(merchant,merchantDTO);
+    public MerchantDTO(Merchant merchant, MerchantSettings merchantSettings) {
+        address = merchantSettings.getAddress();
+        aliAccount = merchant.getAliAccount();
+        aliName = merchant.getAliName();
+        blacklist = merchant.getBlacklist();
+        businessNature = merchantSettings.getBusinessNature();
+        category = merchantSettings.getCategory();
+        enabled = merchant.getEnabled();
+        endTime = merchantSettings.getEndTime();
+        firstOrder = merchantSettings.getFirstOrder();
+        mid = merchant.getId();
+        img = merchant.getImg();
+        introduction = merchantSettings.getIntroduction();
+        name = merchant.getName();
+        newUser = merchantSettings.getNewUser();
+        phone = merchant.getPhone();
+        qualification = merchantSettings.getQualification();
+        showName = merchant.getShowName();
+        startTime = merchantSettings.getStartTime();
+        //tag = merchantSettings.getTag();
+        isPass = merchant.getIsPass();
+        status = merchant.getStatus();
+        establishTime = merchant.getEstablishTime();
+        week = merchantSettings.getWeek();
+        banner = merchant.getBanner();
+        logo = merchantSettings.getLogo();
     }
     }
 
 
 
 
-    private Long id;
+    private Long mid;
+
+    @ApiModelProperty(value = "商家logo", name = "logo")
+    private String logo;
 
 
     @Searchable
     @Searchable
     @ApiModelProperty(value = "商户名称", name = "name")
     @ApiModelProperty(value = "商户名称", name = "name")
@@ -41,11 +66,13 @@ public class MerchantDTO {
     @ApiModelProperty(value = "显示名称", name = "showName")
     @ApiModelProperty(value = "显示名称", name = "showName")
     private String showName;
     private String showName;
 
 
+    @ApiModelProperty(value = "横幅", name = "banner")
+    private String banner;
+
     @Searchable
     @Searchable
     @ApiModelProperty(value = "商户电话", name = "phone")
     @ApiModelProperty(value = "商户电话", name = "phone")
     private String phone;
     private String phone;
 
 
-    @JsonIgnore
     @ApiModelProperty(value = "密码", name = "password")
     @ApiModelProperty(value = "密码", name = "password")
     private String password;
     private String password;
 
 
@@ -57,10 +84,10 @@ public class MerchantDTO {
 
 
     @Column(nullable = false)
     @Column(nullable = false)
     @ApiModelProperty(value = "黑名单", name = "blacklist")
     @ApiModelProperty(value = "黑名单", name = "blacklist")
-    private Boolean blacklist = false;
+    private Boolean blacklist;
 
 
     @Column(nullable = false)
     @Column(nullable = false)
-    private Boolean enabled = true;
+    private Boolean enabled;
 
 
     @Searchable
     @Searchable
     @ApiModelProperty(value = "支付宝名称", name = "aliName")
     @ApiModelProperty(value = "支付宝名称", name = "aliName")
@@ -79,23 +106,26 @@ public class MerchantDTO {
     @ApiModelProperty(value = "新用户优惠", name = "newUser")
     @ApiModelProperty(value = "新用户优惠", name = "newUser")
     private BigDecimal newUser;
     private BigDecimal newUser;
 
 
-    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
-    @JoinTable(
-            name = "mer_cate",
-            joinColumns = {@JoinColumn(name = "mer_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
-            inverseJoinColumns = {@JoinColumn(name = "cate_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
+    /*    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
+        @JoinTable(
+                name = "mer_cate",
+                joinColumns = {@JoinColumn(name = "mer_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
+                inverseJoinColumns = {@JoinColumn(name = "cate_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})*/
     @BatchSize(size = 20)
     @BatchSize(size = 20)
     @ApiModelProperty(value = "经营品类", name = "category")
     @ApiModelProperty(value = "经营品类", name = "category")
     private Set<Category> category;
     private Set<Category> category;
 
 
-    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
+/*    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
     @JoinTable(
     @JoinTable(
             name = "mer_tag",
             name = "mer_tag",
             joinColumns = {@JoinColumn(name = "mer_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
             joinColumns = {@JoinColumn(name = "mer_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
             inverseJoinColumns = {@JoinColumn(name = "tag_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
             inverseJoinColumns = {@JoinColumn(name = "tag_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
     @BatchSize(size = 20)
     @BatchSize(size = 20)
     @ApiModelProperty(value = "标签", name = "tag")
     @ApiModelProperty(value = "标签", name = "tag")
-    private Set<Tag> tag;
+    private Set<Tag> tag;*/
+
+    @ApiModelProperty(value = "周几", name = "week")
+    private String week;
 
 
     @ApiModelProperty(value = "营业时间", name = "startTime")
     @ApiModelProperty(value = "营业时间", name = "startTime")
     private LocalTime startTime;
     private LocalTime startTime;
@@ -108,4 +138,14 @@ public class MerchantDTO {
 
 
     @ApiModelProperty(value = "营业性质", name = "businessNature")
     @ApiModelProperty(value = "营业性质", name = "businessNature")
     private String businessNature;
     private String businessNature;
+
+    @ApiModelProperty(value = "通过", name = "isPass")
+    private Boolean isPass;
+
+    @Enumerated(EnumType.STRING)
+    @ApiModelProperty(value = "状态", name = "status")
+    private ApplyStatus status;
+
+    @ApiModelProperty(value = "成立时间", name = "established")
+    private LocalDateTime establishTime;
 }
 }

+ 3 - 1
src/main/java/com/izouma/dingdong/repo/merchant/GoodsRepo.java

@@ -9,5 +9,7 @@ import java.util.List;
 public interface GoodsRepo extends JpaRepository<Goods, Long>, JpaSpecificationExecutor<Goods> {
 public interface GoodsRepo extends JpaRepository<Goods, Long>, JpaSpecificationExecutor<Goods> {
     List<Goods> findAllByMerchantId(Long merchantId);
     List<Goods> findAllByMerchantId(Long merchantId);
 
 
-    List<Goods> findAllByMerchantIdAndTotalSalesIsLessThanEqual(Long merchant,Integer num);
+
+
+//    List<Goods> findAllByMerchantIdAndTotalSalesIsLessThanEqual(Long merchant,Integer num);
 }
 }

+ 3 - 0
src/main/java/com/izouma/dingdong/repo/merchant/MerchantRepo.java

@@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.Query;
 
 
 import javax.transaction.Transactional;
 import javax.transaction.Transactional;
 import java.util.List;
 import java.util.List;
+import java.util.Optional;
 
 
 public interface MerchantRepo extends JpaRepository<Merchant, Long>, JpaSpecificationExecutor<Merchant> {
 public interface MerchantRepo extends JpaRepository<Merchant, Long>, JpaSpecificationExecutor<Merchant> {
     @Query("update Merchant t set t.enabled = false where t.id = ?1")
     @Query("update Merchant t set t.enabled = false where t.id = ?1")
@@ -16,4 +17,6 @@ public interface MerchantRepo extends JpaRepository<Merchant, Long>, JpaSpecific
     void deleteById(Long id);
     void deleteById(Long id);
 
 
     Merchant findByPhone(String phone);
     Merchant findByPhone(String phone);
+
+    Optional<Merchant> findByUserId(Long userId);
 }
 }

+ 14 - 1
src/main/java/com/izouma/dingdong/repo/merchant/MerchantSettingsRepo.java

@@ -3,9 +3,22 @@ package com.izouma.dingdong.repo.merchant;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import javax.transaction.Transactional;
+import java.util.Optional;
 
 
 public interface MerchantSettingsRepo extends JpaRepository<MerchantSettings, Long>, JpaSpecificationExecutor<MerchantSettings> {
 public interface MerchantSettingsRepo extends JpaRepository<MerchantSettings, Long>, JpaSpecificationExecutor<MerchantSettings> {
-    MerchantSettings findByMerchantId(Long merchantId);
+    @Query("update MerchantSettings t set t.enabled = false where t.id = ?1")
+    @Modifying
+    @Transactional
+    void deleteById(Long id);
+
+    Optional<MerchantSettings> findByMerchantId(Long merchantId);
 
 
+    @Query("update MerchantSettings t set t.enabled = false where t.merchantId = ?1")
+    @Modifying
+    @Transactional
     void deleteByMerchantId(Long merchantId);
     void deleteByMerchantId(Long merchantId);
 }
 }

+ 53 - 5
src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java

@@ -1,10 +1,16 @@
 package com.izouma.dingdong.service.merchant;
 package com.izouma.dingdong.service.merchant;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.Goods;
+import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
+import com.izouma.dingdong.repo.merchant.MerchantRepo;
+import com.izouma.dingdong.repo.merchant.SalesRepo;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.List;
 
 
 @Service
 @Service
@@ -13,10 +19,52 @@ public class GoodsService {
 
 
     private GoodsRepo goodsRepo;
     private GoodsRepo goodsRepo;
 
 
-     /*
-    推荐商品
+    private MerchantRepo merchantRepo;
+
+    private MerchantService merchantService;
+
+    private SalesRepo salesRepo;
+
+    /*
+    添加商品
+     */
+    public Goods add(Goods goods) {
+        if (ObjectUtil.isNull(goods.getMerchantId())) {
+            throw new BusinessException("商家出错");
+        }
+        merchantRepo.findById(goods.getMerchantId()).orElseThrow(new BusinessException("商家不存在"));
+        if (goods.getInventory() < 1) {
+            throw new BusinessException("商品供应数量不足");
+        }
+        if (BigDecimal.ZERO.compareTo(goods.getAmount()) >= 0) {
+            throw new BusinessException("价格不得小于0");
+        }
+        goods.setLikes(0);
+        goods.setBad(0);
+        goods.setTotalSales(0);
+        goods.setTakeOff(false);
+        goods.setSignboard(false);
+
+        return goodsRepo.save(goods);
+    }
+
+    /*
+   推荐商品
+    */
+    public List<Goods> recommend(Long merchantId) {
+        List<Goods> goodsList = goodsRepo.findAllByMerchantId(merchantId);
+        goodsList.forEach(goods -> {
+            salesRepo.findByGoodsIdAndDayAfterAndDaySalesGreaterThanEqual(goods.getId(), LocalDate.now(),50);
+
+        });
+
+
+        return null;
+    }
+
+    /*
+    人气商品
      */
      */
-     public List<Goods> recommend(){
-      return null;
-     }
+
+
 }
 }

+ 66 - 37
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -5,20 +5,26 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.Merchant;
+import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.enums.Identity;
 import com.izouma.dingdong.enums.Identity;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.UserRepo;
+import com.izouma.dingdong.repo.merchant.MerchantClassificationRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
 import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
+import com.izouma.dingdong.security.Authority;
 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.data.domain.PageImpl;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import javax.transaction.Transactional;
+import java.util.Collections;
 import java.util.List;
 import java.util.List;
 
 
 @Service
 @Service
@@ -31,22 +37,30 @@ public class MerchantService {
 
 
     private UserRepo userRepo;
     private UserRepo userRepo;
 
 
+    private MerchantClassificationRepo merchantClassificationRepo;
+
     /*
     /*
     商户注册申请
     商户注册申请
      */
      */
+    @Transactional
     public MerchantDTO registerApply(MerchantDTO merchantDTO) {
     public MerchantDTO registerApply(MerchantDTO merchantDTO) {
         //用于商家登录
         //用于商家登录
         User user = userRepo.findByPhone(merchantDTO.getPhone());
         User user = userRepo.findByPhone(merchantDTO.getPhone());
         if (ObjectUtil.isNull(user)) {
         if (ObjectUtil.isNull(user)) {
             user = User.builder().username(merchantDTO.getPhone())
             user = User.builder().username(merchantDTO.getPhone())
-                    .password(merchantDTO.getPassword())
+                    .password(new BCryptPasswordEncoder().encode(merchantDTO.getPassword()))
                     .blacklist(false)
                     .blacklist(false)
                     .enabled(true)
                     .enabled(true)
                     .identity(Identity.MERCHANT)
                     .identity(Identity.MERCHANT)
                     .phone(merchantDTO.getPhone())
                     .phone(merchantDTO.getPhone())
+                    .nickname(merchantDTO.getShowName())
+                    .avatar(merchantDTO.getLogo())
+                    .authorities(Collections.singleton(new Authority(Authority.NAMES.ROLE_USER.name())))
                     .build();
                     .build();
+        } else {
+            user.setPassword(new BCryptPasswordEncoder().encode(merchantDTO.getPassword()));
         }
         }
-        user.setPassword(merchantDTO.getPassword());
+        user = userRepo.save(user);
 
 
         //查看商家是否已存在
         //查看商家是否已存在
         Merchant merchant1 = merchantRepo.findByPhone(merchantDTO.getPhone());
         Merchant merchant1 = merchantRepo.findByPhone(merchantDTO.getPhone());
@@ -60,7 +74,6 @@ public class MerchantService {
             }
             }
         }
         }
 
 
-
 /*        if (ObjectUtil.isEmpty(merchantDTO.getBusinessNature())) {
 /*        if (ObjectUtil.isEmpty(merchantDTO.getBusinessNature())) {
             throw new BusinessException("商家性质未填");
             throw new BusinessException("商家性质未填");
         }*/
         }*/
@@ -69,30 +82,34 @@ public class MerchantService {
         Merchant merchant = new Merchant();
         Merchant merchant = new Merchant();
         MerchantSettings merchantSettings = new MerchantSettings();
         MerchantSettings merchantSettings = new MerchantSettings();
 
 
-        //dto转实体
+        //dto转merchant实体
         BeanUtil.copyProperties(merchantDTO, merchant);
         BeanUtil.copyProperties(merchantDTO, merchant);
         merchant.setUserId(user.getId());
         merchant.setUserId(user.getId());
         merchant.setStatus(ApplyStatus.PENDING);
         merchant.setStatus(ApplyStatus.PENDING);
-
-        //dto转实体
+//        merchant.setGoodNum(0);
+//        merchant.setBadNum(0);
+//        merchant.setMonthSales(0);
+        merchant.setEnabled(true);
+        merchant.setBlacklist(false);
+        merchant = merchantRepo.save(merchant);
+
+        //dto转merchantSettings实体
         BeanUtil.copyProperties(merchantDTO, merchantSettings);
         BeanUtil.copyProperties(merchantDTO, merchantSettings);
         merchantSettings.setMerchantId(merchant.getId());
         merchantSettings.setMerchantId(merchant.getId());
-
-        userRepo.save(user);
-        merchantRepo.save(merchant);
+        merchantSettings.setEnabled(true);
         merchantSettingsRepo.save(merchantSettings);
         merchantSettingsRepo.save(merchantSettings);
+
         return merchantDTO;
         return merchantDTO;
     }
     }
 
 
-    /*
-    商户修改
+    /**
+     * 商户修改信息
+     * @param merchantDTO 修改的信息
+     * @return 修改
      */
      */
     public MerchantDTO change(MerchantDTO merchantDTO) {
     public MerchantDTO change(MerchantDTO merchantDTO) {
-        Merchant merchant = merchantRepo.findById(merchantDTO.getId()).orElseThrow(new BusinessException("商户不存在"));
-        MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(merchantDTO.getId());
-        if (ObjectUtil.isNull(merchantSettings)) {
-            throw new BusinessException("商户不存在");
-        }
+        Merchant merchant = merchantRepo.findById(merchantDTO.getMid()).orElseThrow(new BusinessException("商户不存在"));
+        MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(merchantDTO.getMid()).orElseThrow(new BusinessException("商户不存在"));
 
 
         //dto转实体
         //dto转实体
         BeanUtil.copyProperties(merchantDTO, merchant);
         BeanUtil.copyProperties(merchantDTO, merchant);
@@ -102,22 +119,22 @@ public class MerchantService {
         return merchantDTO;
         return merchantDTO;
     }
     }
 
 
-    /*
-    商户删除
-     */
-    public void del(Long id) {
-        merchantRepo.deleteById(id);
-        merchantSettingsRepo.deleteByMerchantId(id);
-    }
-
-    /*
-    商户过审
+    /**
+     * 商家过审
+     * @param merchantId 商户ID
+     * @param pass 是否过审
      */
      */
-    public void audit(Long id, Boolean pass) {
-        Merchant merchant = merchantRepo.findById(id).orElseThrow(new BusinessException("商户不存在"));
+    public void audit(Long merchantId, Boolean pass) {
+        Merchant merchant = merchantRepo.findById(merchantId).orElseThrow(new BusinessException("商户不存在"));
         if (pass) {
         if (pass) {
             merchant.setStatus(ApplyStatus.PASS);
             merchant.setStatus(ApplyStatus.PASS);
             merchant.setIsPass(true);
             merchant.setIsPass(true);
+            //新建一好评热销分类
+            merchantClassificationRepo.save(MerchantClassification.builder()
+                    .merchantId(merchantId)
+                    .name("好评热销")
+                    .sort(1)
+                    .build());
         } else {
         } else {
             merchant.setStatus(ApplyStatus.DENY);
             merchant.setStatus(ApplyStatus.DENY);
             merchant.setIsPass(false);
             merchant.setIsPass(false);
@@ -126,26 +143,38 @@ public class MerchantService {
 
 
     }
     }
 
 
-    /*
-    显示所有
+    /**
+     * 显示所有商家信息
+     * @param pageable 分页
+     * @return 分页列表
      */
      */
     public Page<MerchantDTO> showAll(Pageable pageable) {
     public Page<MerchantDTO> showAll(Pageable pageable) {
         List<MerchantDTO> merchantDTOS = CollUtil.newArrayList();
         List<MerchantDTO> merchantDTOS = CollUtil.newArrayList();
         List<Merchant> merchants = merchantRepo.findAll();
         List<Merchant> merchants = merchantRepo.findAll();
-        List<MerchantSettings> merchantSettings = merchantSettingsRepo.findAll();
         for (int i = 0; i < merchants.size(); i++) {
         for (int i = 0; i < merchants.size(); i++) {
-            merchantDTOS.add(new MerchantDTO(merchants.get(i), merchantSettings.get(i)));
+            MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(merchants.get(i).getId()).orElseThrow(new BusinessException("商户不存在"));
+            merchantDTOS.add(new MerchantDTO(merchants.get(i), merchantSettings));
         }
         }
         return new PageImpl<>(merchantDTOS, pageable, merchantDTOS.size());
         return new PageImpl<>(merchantDTOS, pageable, merchantDTOS.size());
     }
     }
 
 
-    /*
-    显示个人
+    /**
+     * 显示个人的商户信息
+     * @param userId 用户的ID
+     * @return 个人的商户信息
      */
      */
-    public MerchantDTO my(Long id) {
-        Merchant merchant = merchantRepo.findById(id).orElseThrow(new BusinessException("商户不存在"));
-        MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(id);
+    public MerchantDTO my(Long userId) {
+        Merchant merchant = merchantRepo.findByUserId(userId).orElseThrow(new BusinessException("商户不存在"));
+        MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(merchant.getId()).orElseThrow(new BusinessException("商户不存在"));
         return new MerchantDTO(merchant, merchantSettings);
         return new MerchantDTO(merchant, merchantSettings);
     }
     }
 
 
+    /*
+    用户查找商家
+     */
+    public Long findMerchantId(Long userId){
+        Merchant merchant = merchantRepo.findByUserId(userId).orElseThrow(new BusinessException("商户不存在"));
+        return merchant.getId();
+    }
+
 }
 }

+ 6 - 7
src/main/java/com/izouma/dingdong/web/backstage/CategoryController.java

@@ -1,8 +1,6 @@
 package com.izouma.dingdong.web.backstage;
 package com.izouma.dingdong.web.backstage;
 
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import com.izouma.dingdong.dto.CategoryDTO;
 import com.izouma.dingdong.dto.CategoryDTO;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.Category;
@@ -13,10 +11,8 @@ import com.izouma.dingdong.repo.backstage.CategoryRepo;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 
 
-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.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
@@ -38,6 +34,9 @@ public class CategoryController extends BaseController {
             ObjUtils.merge(orig, record);
             ObjUtils.merge(orig, record);
             return categoryRepo.save(orig);
             return categoryRepo.save(orig);
         }
         }
+        if (ObjectUtil.isNull(record.getParent())) {
+            record.setParent(1L);
+        }
         return categoryRepo.save(record);
         return categoryRepo.save(record);
     }
     }
 
 
@@ -45,7 +44,7 @@ public class CategoryController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     //@PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/all")
     @GetMapping("/all")
     public Page<Category> all(PageQuery pageQuery) {
     public Page<Category> all(PageQuery pageQuery) {
-        return categoryRepo.findAll(toSpecification(pageQuery,Category.class), toPageRequest(pageQuery));
+        return categoryRepo.findAll(toSpecification(pageQuery, Category.class), toPageRequest(pageQuery));
     }
     }
 
 
     @GetMapping("/get/{id}")
     @GetMapping("/get/{id}")
@@ -66,12 +65,12 @@ public class CategoryController extends BaseController {
     }
     }
 
 
     @PostMapping("/saveCategory")
     @PostMapping("/saveCategory")
-    public CategoryDTO saveCategory(CategoryDTO dto){
+    public CategoryDTO saveCategory(CategoryDTO dto) {
         return null;
         return null;
     }
     }
 
 
     @GetMapping("/tree")
     @GetMapping("/tree")
-    public List<Category> tree(Long id){
+    public List<Category> tree(Long id) {
         List<Category> categories = categoryRepo.findAllByParent(id);
         List<Category> categories = categoryRepo.findAllByParent(id);
         return categories;
         return categories;
     }
     }

+ 18 - 0
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 com.izouma.dingdong.service.merchant.MerchantService;
+import com.izouma.dingdong.utils.SecurityUtils;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.service.merchant.GoodsService;
 import com.izouma.dingdong.service.merchant.GoodsService;
@@ -16,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 
 
 @RestController
 @RestController
@@ -23,11 +26,20 @@ import java.util.List;
 @AllArgsConstructor
 @AllArgsConstructor
 public class GoodsController extends BaseController {
 public class GoodsController extends BaseController {
     private GoodsService goodsService;
     private GoodsService goodsService;
+
     private GoodsRepo goodsRepo;
     private GoodsRepo goodsRepo;
 
 
+    private MerchantService merchantService;
+
     //@PreAuthorize("hasRole('ADMIN')")
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     @PostMapping("/save")
     public Goods save(@RequestBody Goods record) {
     public Goods save(@RequestBody Goods record) {
+        if (record.getInventory() < 1) {
+            throw new BusinessException("商品供应数量不足");
+        }
+        if (BigDecimal.ZERO.compareTo(record.getAmount()) >= 0) {
+            throw new BusinessException("价格不得小于0");
+        }
         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("无记录"));
             ObjUtils.merge(orig, record);
             ObjUtils.merge(orig, record);
@@ -59,5 +71,11 @@ public class GoodsController extends BaseController {
         List<Goods> data = all(pageQuery).getContent();
         List<Goods> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
         ExcelUtils.export(response, data);
     }
     }
+
+    @GetMapping("/my")
+    public List<Goods> my(){
+        Long merchantId = merchantService.findMerchantId(SecurityUtils.getAuthenticatedUser().getId());
+        return goodsRepo.findAllByMerchantId(merchantId);
+    }
 }
 }
 
 

+ 34 - 5
src/main/java/com/izouma/dingdong/web/merchant/MerchantController.java

@@ -1,6 +1,9 @@
 package com.izouma.dingdong.web.merchant;
 package com.izouma.dingdong.web.merchant;
 
 
+import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.dto.MerchantDTO;
+import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
+import com.izouma.dingdong.utils.SecurityUtils;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.MerchantService;
@@ -10,9 +13,9 @@ import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 
 
+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.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
@@ -25,6 +28,7 @@ import java.util.List;
 public class MerchantController extends BaseController {
 public class MerchantController extends BaseController {
     private MerchantService merchantService;
     private MerchantService merchantService;
     private MerchantRepo merchantRepo;
     private MerchantRepo merchantRepo;
+    private MerchantSettingsRepo merchantSettingsRepo;
 
 
     //@PreAuthorize("hasRole('ADMIN')")
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     @PostMapping("/save")
@@ -41,7 +45,7 @@ public class MerchantController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     //@PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/all")
     @GetMapping("/all")
     public Page<Merchant> all(PageQuery pageQuery) {
     public Page<Merchant> all(PageQuery pageQuery) {
-        return merchantRepo.findAll(toSpecification(pageQuery,Merchant.class), toPageRequest(pageQuery));
+        return merchantRepo.findAll(toSpecification(pageQuery, Merchant.class), toPageRequest(pageQuery));
     }
     }
 
 
     @GetMapping("/get/{id}")
     @GetMapping("/get/{id}")
@@ -52,6 +56,7 @@ public class MerchantController extends BaseController {
     @PostMapping("/del/{id}")
     @PostMapping("/del/{id}")
     public void del(@PathVariable Long id) {
     public void del(@PathVariable Long id) {
         merchantRepo.deleteById(id);
         merchantRepo.deleteById(id);
+        merchantSettingsRepo.deleteByMerchantId(id);
     }
     }
 
 
     @GetMapping("/excel")
     @GetMapping("/excel")
@@ -62,13 +67,37 @@ public class MerchantController extends BaseController {
     }
     }
 
 
     @GetMapping("/showAll")
     @GetMapping("/showAll")
-    public Page<MerchantDTO> showAll(PageQuery pageQuery){
+    @ApiOperation("商家所有信息")
+    public Page<MerchantDTO> showAll(PageQuery pageQuery) {
         return merchantService.showAll(toPageRequest(pageQuery));
         return merchantService.showAll(toPageRequest(pageQuery));
     }
     }
 
 
-    @GetMapping("/reg")
-    public MerchantDTO reg(@RequestBody MerchantDTO merchantDTO){
+    @PostMapping("/reg")
+    @ApiOperation("商家注册申请")
+    public MerchantDTO reg(@RequestBody MerchantDTO merchantDTO) {
         return merchantService.registerApply(merchantDTO);
         return merchantService.registerApply(merchantDTO);
     }
     }
+
+    @GetMapping("/my")
+    public MerchantDTO my() {
+        return merchantService.my(SecurityUtils.getAuthenticatedUser().getId());
+    }
+
+    @GetMapping("/getDTO/{id}")
+    public MerchantDTO getDTO(@PathVariable Long id) {
+        Merchant merchant = merchantRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(id).orElseThrow(new BusinessException("无记录"));
+        return new MerchantDTO(merchant, merchantSettings);
+    }
+
+    @PostMapping("/saveDTO")
+    public MerchantDTO saveDTO(@RequestBody MerchantDTO record) {
+        return merchantService.change(record);
+    }
+
+    @GetMapping("/audit")
+    public void audit(Long id, Boolean pass) {
+        merchantService.audit(id, pass);
+    }
 }
 }
 
 

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

@@ -142,6 +142,38 @@ const router = new Router({
                     meta: {
                     meta: {
                        title: '标签',
                        title: '标签',
                     },
                     },
+               },
+                {
+                    path: '/orderInfoEdit',
+                    name: 'OrderInfoEdit',
+                    component: () => import(/* webpackChunkName: "orderInfoEdit" */ '@/views/OrderInfoEdit.vue'),
+                    meta: {
+                       title: '订单编辑',
+                    },
+                },
+                {
+                    path: '/orderInfoList',
+                    name: 'OrderInfoList',
+                    component: () => import(/* webpackChunkName: "orderInfoList" */ '@/views/OrderInfoList.vue'),
+                    meta: {
+                       title: '订单',
+                    },
+               },
+                {
+                    path: '/couponEdit',
+                    name: 'CouponEdit',
+                    component: () => import(/* webpackChunkName: "couponEdit" */ '@/views/CouponEdit.vue'),
+                    meta: {
+                       title: '优惠券编辑',
+                    },
+                },
+                {
+                    path: '/couponList',
+                    name: 'CouponList',
+                    component: () => import(/* webpackChunkName: "couponList" */ '@/views/CouponList.vue'),
+                    meta: {
+                       title: '优惠券',
+                    },
                }
                }
                 /**INSERT_LOCATION**/,
                 /**INSERT_LOCATION**/,
                 {
                 {

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

@@ -44,7 +44,7 @@
         data() {
         data() {
             return {
             return {
                 dialogVisible: false,
                 dialogVisible: false,
-                curr: null,
+                /*curr: null,*/
                 loading: false,
                 loading: false,
                 menus: [],
                 menus: [],
                 menu: {
                 menu: {

+ 84 - 48
src/main/vue/src/views/GoodsEdit.vue

@@ -2,51 +2,84 @@
     <div class="edit-view">
     <div class="edit-view">
         <el-form :model="formData" :rules="rules" ref="form" label-width="66px" label-position="right" size="small"
         <el-form :model="formData" :rules="rules" ref="form" label-width="66px" label-position="right" size="small"
                  style="max-width: 500px;">
                  style="max-width: 500px;">
-                <el-form-item prop="merchantId" label="商户ID">
-                            <el-input-number type="number" v-model="formData.merchantId"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="name" label="名称">
-                            <el-input v-model="formData.name"></el-input>
-                </el-form-item>
-                <el-form-item prop="introduction" label="简介">
-                            <el-input v-model="formData.introduction"></el-input>
-                </el-form-item>
-                <el-form-item prop="img" label="图片">
-                            <multi-upload v-model="formData.img"></multi-upload>
-                </el-form-item>
-                <el-form-item prop="inventory" label="库存">
-                            <el-input-number type="number" v-model="formData.inventory"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="totalSales" label="总销量">
-                            <el-input-number type="number" v-model="formData.totalSales"></el-input-number>
-                </el-form-item>
-<!--                <el-form-item prop="daySales" label="日销售">
-                            <el-input-number type="number" v-model="formData.daySales"></el-input-number>
-                </el-form-item>-->
-                <el-form-item prop="likes" label="点赞">
-                            <el-input-number type="number" v-model="formData.likes"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="amount" label="价格">
-                            <el-input-number type="number" v-model="formData.amount"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="discountAmount" label="折扣">
-                            <el-input-number type="number" v-model="formData.discountAmount"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="signboard" label="招牌">
-                            <el-switch v-model="formData.signboard"></el-switch>
-                </el-form-item>
-                <el-form-item prop="takeOff" label="下架">
-                            <el-switch v-model="formData.takeOff"></el-switch>
-                </el-form-item>
-                <el-form-item prop="sort" label="排布">
-                            <el-input-number type="number" v-model="formData.sort"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="isFullReduction" label="满减">
-                            <el-switch v-model="formData.isFullReduction"></el-switch>
-                </el-form-item>
+            <el-form-item prop="merchantId" label="商户ID">
+                <el-input type="number" v-model="formData.merchantId"></el-input>
+            </el-form-item>
+            <el-form-item prop="name" label="名称">
+                <el-input v-model="formData.name"></el-input>
+            </el-form-item>
+            <el-form-item prop="introduction" label="简介">
+                <el-input v-model="formData.introduction"></el-input>
+            </el-form-item>
+            <el-form-item prop="img" label="图片">
+                <multi-upload v-model="formData.img"></multi-upload>
+            </el-form-item>
+            <el-form-item prop="inventory" label="库存">
+                <el-input-number type="number" v-model="formData.inventory"></el-input-number>
+            </el-form-item>
+            <!--                <el-form-item prop="totalSales" label="总销量">
+                                        <el-input-number type="number" v-model="formData.totalSales"></el-input-number>
+                            </el-form-item>-->
+            <!--                <el-form-item prop="daySales" label="日销售">
+                                        <el-input-number type="number" v-model="formData.daySales"></el-input-number>
+                            </el-form-item>-->
+            <!--                <el-form-item prop="likes" label="点赞">
+                                        <el-input-number type="number" v-model="formData.likes"></el-input-number>
+                            </el-form-item>-->
+            <el-form-item prop="amount" label="价格">
+                <el-input-number type="number" v-model="formData.amount"></el-input-number>
+            </el-form-item>
+            <el-form-item prop="discountAmount" label="折扣">
+                <el-input-number type="number" v-model="formData.discountAmount"></el-input-number>
+            </el-form-item>
+            <el-form-item prop="signboard" label="招牌">
+                <el-switch v-model="formData.signboard"></el-switch>
+            </el-form-item>
+            <!--<el-form-item prop="takeOff" label="下架">
+                <el-switch v-model="formData.takeOff"></el-switch>
+            </el-form-item>-->
+            <el-form-item prop="sort" label="排布">
+                <el-input-number type="number" v-model="formData.sort"></el-input-number>
+            </el-form-item>
+            <el-form-item prop="isFullReduction" label="满减">
+                <el-switch v-model="formData.isFullReduction"></el-switch>
+            </el-form-item>
+            <el-form-item prop="week" label="周几" id="week">
+                <el-select v-model="formData.week" multiple
+                           placeholder="请选择" value-key="value">
+                    <!--<el-option v-for="item in weekOptions" :key="item.value"
+                               :label="item.label" :value="item">
+                    </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-select>
+            </el-form-item>
+            <el-form-item prop="startTime" label="时间">
+                <el-time-picker
+                        v-model="formData.startTime"
+                        value-format="HH:mm:ss"
+                        placeholder="选择时间"
+                >
+                </el-time-picker>
+            </el-form-item>
+            <el-form-item prop="endTime" label="时间">
+                <el-time-picker
+                        v-model="formData.endTime"
+                        value-format="HH:mm:ss"
+                        placeholder="选择时间"
+                >
+                </el-time-picker>
+            </el-form-item>
             <el-form-item>
             <el-form-item>
                 <el-button @click="onSave" :loading="saving"
                 <el-button @click="onSave" :loading="saving"
-                           type="primary">保存</el-button>
+                           type="primary">保存
+                </el-button>
                 <el-button @click="onDelete" :loading="saving"
                 <el-button @click="onDelete" :loading="saving"
                            type="danger" v-if="formData.id">删除
                            type="danger" v-if="formData.id">删除
                 </el-button>
                 </el-button>
@@ -61,7 +94,7 @@
         created() {
         created() {
             if (this.$route.query.id) {
             if (this.$route.query.id) {
                 this.$http
                 this.$http
-                    .get('goods/get/'+this.$route.query.id)
+                    .get('goods/get/' + this.$route.query.id)
                     .then(res => {
                     .then(res => {
                         this.formData = res;
                         this.formData = res;
                     })
                     })
@@ -74,10 +107,8 @@
         data() {
         data() {
             return {
             return {
                 saving: false,
                 saving: false,
-                formData: {
-                },
-                rules: {
-                },
+                formData: {},
+                rules: {},
             }
             }
         },
         },
         methods: {
         methods: {
@@ -92,6 +123,8 @@
             },
             },
             submit() {
             submit() {
                 let data = {...this.formData};
                 let data = {...this.formData};
+                data.img = data.img.join(',');
+                data.week = data.week.join(',')
 
 
                 this.saving = true;
                 this.saving = true;
                 this.$http
                 this.$http
@@ -120,6 +153,9 @@
                     }
                     }
                 })
                 })
             },
             },
+            onChange(){
+              /*  let */
+            }
         }
         }
     }
     }
 </script>
 </script>

+ 70 - 66
src/main/vue/src/views/GoodsList.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-    <div  class="list-view">
+    <div class="list-view">
         <div class="filters-container">
         <div class="filters-container">
             <el-input placeholder="输入关键字" v-model="search" clearable
             <el-input placeholder="输入关键字" v-model="search" clearable
                       class="filter-item"></el-input>
                       class="filter-item"></el-input>
@@ -21,71 +21,75 @@
             <el-table-column v-if="multipleMode" align="center" type="selection"
             <el-table-column v-if="multipleMode" align="center" type="selection"
                              width="50">
                              width="50">
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="id" label="ID" width="100">
-            </el-table-column>
-                                <el-table-column prop="merchantId" label="商户ID"
->
-                    </el-table-column>
-                    <el-table-column prop="name" label="名称"
->
-                    </el-table-column>
-                    <el-table-column prop="introduction" label="简介"
->
-                    </el-table-column>
-                    <el-table-column prop="img" label="图片"
->
-                            <template slot-scope="{row}">
-                                <el-image style="width: 30px; height: 30px"
-                                          :src="row.img[0]" fit="cover"
-                                          :preview-src-list="row.img"></el-image>
-                            </template>
-                    </el-table-column>
-                    <el-table-column prop="inventory" label="库存"
->
-                    </el-table-column>
-                    <el-table-column prop="totalSales" label="总销量"
->
-<!--                    </el-table-column>
-                    <el-table-column prop="daySales" label="日销售"
->-->
-                    </el-table-column>
-                    <el-table-column prop="likes" label="点赞"
->
-                    </el-table-column>
-                    <el-table-column prop="amount" label="价格"
->
-                    </el-table-column>
-                    <el-table-column prop="discountAmount" label="折扣"
->
-                    </el-table-column>
-                    <el-table-column prop="signboard" label="招牌"
->
-                            <template slot-scope="{row}">
-                                <el-tag :type="row.signboard?'':'info'">{{row.signboard}}</el-tag>
-                            </template>
-                    </el-table-column>
-                    <el-table-column prop="takeOff" label="下架"
->
-                            <template slot-scope="{row}">
-                                <el-tag :type="row.takeOff?'':'info'">{{row.takeOff}}</el-tag>
-                            </template>
-                    </el-table-column>
-                    <el-table-column prop="sort" label="排布"
->
-                    </el-table-column>
-                    <el-table-column prop="isFullReduction" label="满减"
->
-                            <template slot-scope="{row}">
-                                <el-tag :type="row.isFullReduction?'':'info'">{{row.isFullReduction}}</el-tag>
-                            </template>
-                    </el-table-column>
+            <el-table-column prop="id" label="ID" width="80">
+            </el-table-column>
+            <el-table-column prop="merchantId" label="商户ID"
+            >
+            </el-table-column>
+            <el-table-column prop="name" label="名称"
+            >
+            </el-table-column>
+            <el-table-column prop="introduction" label="简介"
+            >
+            </el-table-column>
+            <el-table-column prop="img" label="图片"
+            >
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :src="row.img[0]" fit="cover"
+                              :preview-src-list="row.img"></el-image>
+                </template>
+            </el-table-column>
+            <el-table-column prop="inventory" label="库存"
+            >
+            </el-table-column>
+            <el-table-column prop="totalSales" label="总销量"
+            >
+                <!--                    </el-table-column>
+                                    <el-table-column prop="daySales" label="日销售"
+                >-->
+            </el-table-column>
+            <el-table-column prop="likes" label="点赞"
+            >
+            </el-table-column>
+            <el-table-column prop="amount" label="价格"
+            >
+            </el-table-column>
+            <el-table-column prop="discountAmount" label="折扣"
+            >
+            </el-table-column>
+            <el-table-column prop="signboard" label="招牌"
+            >
+                <template slot-scope="{row}">
+                    <el-tag :type="row.signboard?'':'info'">{{row.signboard}}</el-tag>
+                </template>
+            </el-table-column>
+            <el-table-column prop="takeOff" label="下架"
+            >
+                <template slot-scope="{row}">
+                    <el-tag :type="row.takeOff?'':'info'">{{row.takeOff}}</el-tag>
+                </template>
+            </el-table-column>
+            <el-table-column prop="sort" label="排布"
+            >
+            </el-table-column>
+            <el-table-column prop="isFullReduction" label="满减"
+            >
+                <template slot-scope="{row}">
+                    <el-tag :type="row.isFullReduction?'':'info'">{{row.isFullReduction}}</el-tag>
+                </template>
+            </el-table-column>
+            <el-table-column prop="week" label="时间"
+            >
+            </el-table-column>
             <el-table-column
             <el-table-column
                     label="操作"
                     label="操作"
                     align="center"
                     align="center"
                     fixed="right"
                     fixed="right"
-                    min-width="150">
+                    min-width="230">
                 <template slot-scope="{row}">
                 <template slot-scope="{row}">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="editRow(row)" type="warning" size="mini" plain>下架</el-button>
                     <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                     <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
@@ -110,7 +114,7 @@
     </div>
     </div>
 </template>
 </template>
 <script>
 <script>
-    import { mapState } from "vuex";
+    import {mapState} from "vuex";
     import pageableTable from "@/mixins/pageableTable";
     import pageableTable from "@/mixins/pageableTable";
 
 
     export default {
     export default {
@@ -135,7 +139,7 @@
         methods: {
         methods: {
             beforeGetData() {
             beforeGetData() {
                 if (this.search) {
                 if (this.search) {
-                    return { search: this.search };
+                    return {search: this.search};
                 }
                 }
             },
             },
             toggleMultipleMode(multipleMode) {
             toggleMultipleMode(multipleMode) {
@@ -148,7 +152,7 @@
                 this.$router.push({
                 this.$router.push({
                     path: "/goodsEdit",
                     path: "/goodsEdit",
                     query: {
                     query: {
-                    ...this.$route.query
+                        ...this.$route.query
                     }
                     }
                 });
                 });
             },
             },
@@ -156,16 +160,16 @@
                 this.$router.push({
                 this.$router.push({
                     path: "/goodsEdit",
                     path: "/goodsEdit",
                     query: {
                     query: {
-                    id: row.id
+                        id: row.id
                     }
                     }
                 });
                 });
             },
             },
             download() {
             download() {
                 this.downloading = true;
                 this.downloading = true;
                 this.$axios
                 this.$axios
-                    .get("/goods/excel", { 
+                    .get("/goods/excel", {
                         responseType: "blob",
                         responseType: "blob",
-                        params: { size: 10000 }
+                        params: {size: 10000}
                     })
                     })
                     .then(res => {
                     .then(res => {
                         console.log(res);
                         console.log(res);

+ 118 - 33
src/main/vue/src/views/MerchantEdit.vue

@@ -2,14 +2,23 @@
     <div class="edit-view">
     <div class="edit-view">
         <el-form :model="formData" :rules="rules" ref="form" label-width="94px" label-position="right" size="small"
         <el-form :model="formData" :rules="rules" ref="form" label-width="94px" label-position="right" size="small"
                  style="max-width: 500px;">
                  style="max-width: 500px;">
-            <el-form-item prop="userId" label="用户ID">
-                <el-input-number type="number" v-model="formData.userId"></el-input-number>
+            <!--            <el-form-item prop="userId" label="用户ID">
+                            <el-input-number type="number" v-model="formData.userId"></el-input-number>
+                        </el-form-item>-->
+            <el-form-item prop="logo" label="Logo">
+                <crop-upload v-model="formData.logo"></crop-upload>
             </el-form-item>
             </el-form-item>
             <el-form-item prop="name" label="名称">
             <el-form-item prop="name" label="名称">
                 <el-input v-model="formData.name"></el-input>
                 <el-input v-model="formData.name"></el-input>
             </el-form-item>
             </el-form-item>
+            <el-form-item prop="showName" label="显示名称">
+                <el-input v-model="formData.showName"></el-input>
+            </el-form-item>
             <el-form-item prop="introduction" label="简介">
             <el-form-item prop="introduction" label="简介">
-                <el-input v-model="formData.introduction"></el-input>
+                <el-input type="textarea" v-model="formData.introduction" :rows="2"></el-input>
+            </el-form-item>
+            <el-form-item prop="banner" label="banner">
+                <single-upload v-model="formData.banner"></single-upload>
             </el-form-item>
             </el-form-item>
             <el-form-item prop="img" label="图片">
             <el-form-item prop="img" label="图片">
                 <multi-upload v-model="formData.img"></multi-upload>
                 <multi-upload v-model="formData.img"></multi-upload>
@@ -17,16 +26,71 @@
             <el-form-item prop="address" label="地址">
             <el-form-item prop="address" label="地址">
                 <el-input v-model="formData.address"></el-input>
                 <el-input v-model="formData.address"></el-input>
             </el-form-item>
             </el-form-item>
-            <el-form-item prop="blacklist" label="黑名单">
-                <el-switch v-model="formData.blacklist"></el-switch>
+            <el-form-item prop="phone" label="手机">
+                <el-input v-model="formData.phone"></el-input>
+            </el-form-item>
+            <el-form-item prop="password" label="密码">
+                <el-input v-model="formData.password" show-password></el-input>
+            </el-form-item>
+            <el-form-item prop="qualification" label="营业资质">
+                <multi-upload v-model="formData.qualification"></multi-upload>
+            </el-form-item>
+            <el-form-item prop="businessNature" label="营业性质">
+                <!--<el-input v-model="formData.businessNature"></el-input>-->
+                <el-select v-model="formData.businessNature"
+                           placeholder="请选择" value-key="value">
+                    <el-option value="自营">自营</el-option>
+                    <el-option value="连锁">连锁</el-option>
+                    <el-option value="加盟">加盟</el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="week" label="周几" id="week">
+                <el-select v-model="formData.week" multiple
+                           placeholder="请选择" value-key="value">
+                    <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-select>
+            </el-form-item>
+            <el-form-item prop="startTime" label="营业时间">
+                <el-time-picker
+                        v-model="formData.startTime"
+                        value-format="HH:mm:ss"
+                        placeholder="选择时间"
+                >
+                </el-time-picker>
             </el-form-item>
             </el-form-item>
+            <el-form-item prop="endTime" label="营业时间">
+                <el-time-picker
+                        v-model="formData.endTime"
+                        value-format="HH:mm:ss"
+                        placeholder="选择时间"
+                >
+                </el-time-picker>
+                <!--  <el-time-picker
+                        is-range
+                        v-model="formData.startTime"
+                        value-format="HH:mm:ss"
+                        range-separator="至"
+                        start-placeholder="开始时间"
+                        end-placeholder="结束时间"
+                        placeholder="选择时间范围">
+                </el-time-picker>-->
+            </el-form-item>
+            <!--            <el-form-item prop="blacklist" label="黑名单">
+                            <el-switch v-model="formData.blacklist"></el-switch>
+                        </el-form-item>-->
             <el-form-item prop="firstOrder" label="首单优惠">
             <el-form-item prop="firstOrder" label="首单优惠">
                 <el-input-number type="number" v-model="formData.firstOrder"></el-input-number>
                 <el-input-number type="number" v-model="formData.firstOrder"></el-input-number>
             </el-form-item>
             </el-form-item>
             <el-form-item prop="newUser" label="新用户优惠">
             <el-form-item prop="newUser" label="新用户优惠">
                 <el-input-number type="number" v-model="formData.newUser"></el-input-number>
                 <el-input-number type="number" v-model="formData.newUser"></el-input-number>
             </el-form-item>
             </el-form-item>
-            <el-form-item prop="category" label="类别">
+            <el-form-item prop="category" label="经营品别">
                 <el-select v-model="formData.category" multiple
                 <el-select v-model="formData.category" multiple
                            placeholder="请选择" value-key="name">
                            placeholder="请选择" value-key="name">
                     <el-option v-for="item in category" :key="item.name"
                     <el-option v-for="item in category" :key="item.name"
@@ -34,27 +98,25 @@
                     </el-option>
                     </el-option>
                 </el-select>
                 </el-select>
 
 
-<!--                    <el-cascader
-                            v-model="name"
-                            :options="category"
-                            @change="handleChange"></el-cascader>-->
+                <!--                    <el-cascader
+                                            v-model="name"
+                                            :options="category"
+                                            @change="handleChange"></el-cascader>-->
             </el-form-item>
             </el-form-item>
-
-<!--            <div class="block">
-                <el-cascader
-                        v-model="name"
-                        :options="category"
-                        :props="{ expandTrigger: 'hover' }"
-                        @change="handleChange"></el-cascader>
-            </div>-->
-            <el-form-item prop="tag" label="标签">
-                <!--                            <el-tree
-                                                    :props="props"
-                                                    :load="loadNode"
-                                                    lazy
-                                                    show-checkbox
-                                                    @check-change="handleCheckChange">
-                                            </el-tree>-->
+            <!--  <el-form-item prop="tag" label="标签">
+                     <el-tree
+                       :props="props"
+                       :load="loadNode"
+                       lazy
+                       show-checkbox
+                       @check-change="handleCheckChange">
+                      </el-tree>
+            </el-form-item> -->
+            <el-form-item prop="aliName" label="支付宝名称">
+                <el-input v-model="formData.aliName"></el-input>
+            </el-form-item>
+            <el-form-item prop="aliAccount" label="支付宝账户">
+                <el-input v-model="formData.aliAccount"></el-input>
             </el-form-item>
             </el-form-item>
             <el-form-item>
             <el-form-item>
                 <el-button @click="onSave" :loading="saving"
                 <el-button @click="onSave" :loading="saving"
@@ -74,7 +136,7 @@
         created() {
         created() {
             if (this.$route.query.id) {
             if (this.$route.query.id) {
                 this.$http
                 this.$http
-                    .get('merchant/get/' + this.$route.query.id)
+                    .get('merchant/getDTO/' + this.$route.query.id)
                     .then(res => {
                     .then(res => {
                         this.formData = res;
                         this.formData = res;
                     })
                     })
@@ -84,12 +146,11 @@
                     });
                     });
             }
             }
             this.$http
             this.$http
-                .get('/category/tree',{
-                    id:1
+                .get('/category/tree', {
+                    id: 1
                 })
                 })
                 .then(res => {
                 .then(res => {
                     this.category = res;
                     this.category = res;
-                    console.log(res)
                 })
                 })
                 .catch(e => {
                 .catch(e => {
                     console.log(e);
                     console.log(e);
@@ -98,23 +159,47 @@
         data() {
         data() {
             return {
             return {
                 saving: false,
                 saving: false,
-                formData: {},
+                formData: {
+                    img: [],
+                    qualification: []
+                },
                 rules: {},
                 rules: {},
                 category: [],
                 category: [],
             }
             }
         },
         },
         methods: {
         methods: {
             onSave() {
             onSave() {
-                this.$refs.form.validate((valid) => {
+                /*this.$refs.form.validate((valid) => {
                     if (valid) {
                     if (valid) {
                         this.submit();
                         this.submit();
                     } else {
                     } else {
                         return false;
                         return false;
                     }
                     }
-                });
+                });*/
+                let data = {...this.formData};
+                data.img = data.img.join(",");
+                data.qualification = data.qualification.join(",");
+                data.week = data.week.join(",")
+
+                this.saving = true;
+                this.$http
+                    .post('/merchant/saveDTO', 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);
+                    });
             },
             },
             submit() {
             submit() {
                 let data = {...this.formData};
                 let data = {...this.formData};
+                data.img = data.img.join(",");
+                data.qualification = data.qualification.join(",");
+                data.week = data.week.join(",")
 
 
                 this.saving = true;
                 this.saving = true;
                 this.$http
                 this.$http

+ 199 - 26
src/main/vue/src/views/MerchantList.vue

@@ -13,7 +13,7 @@
                        :loading="downloading" class="filter-item">导出EXCEL
                        :loading="downloading" class="filter-item">导出EXCEL
             </el-button>
             </el-button>
         </div>
         </div>
-        <el-table :data="tableData" row-key="id" ref="table"
+        <el-table :data="tableData" row-key="mid" ref="table"
                   header-row-class-name="table-header-row"
                   header-row-class-name="table-header-row"
                   header-cell-class-name="table-header-cell"
                   header-cell-class-name="table-header-cell"
                   row-class-name="table-row" cell-class-name="table-cell"
                   row-class-name="table-row" cell-class-name="table-cell"
@@ -21,50 +21,72 @@
             <el-table-column v-if="multipleMode" align="center" type="selection"
             <el-table-column v-if="multipleMode" align="center" type="selection"
                              width="50">
                              width="50">
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="id" label="ID" width="100">
+            <el-table-column prop="mid" label="ID" width="100">
             </el-table-column>
             </el-table-column>
- <!--           <el-table-column prop="userId" label="用户ID"
+            <!--           <el-table-column prop="userId" label="用户ID"
+                       >
+                       </el-table-column>-->
+            <el-table-column prop="logo" label="Logo"
             >
             >
-            </el-table-column>-->
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :src="row.logo" fit="cover"
+                              :preview-src-list="row.logo"></el-image>
+                </template>
+            </el-table-column>
             <el-table-column prop="name" label="名称"
             <el-table-column prop="name" label="名称"
             >
             >
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="introduction" label="简介"
+            <el-table-column prop="phone" label="电话"
             >
             >
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="img" label="图片"
+            <el-table-column prop="introduction" label="简介"
             >
             >
-                <template slot-scope="{row}">
-                    <el-image style="width: 30px; height: 30px"
-                              :src="row.img[0]" fit="cover"
-                              :preview-src-list="row.img"></el-image>
-                </template>
             </el-table-column>
             </el-table-column>
             <el-table-column prop="address" label="地址"
             <el-table-column prop="address" label="地址"
             >
             >
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="firstOrder" label="首单优惠"
+            <!--<el-table-column prop="firstOrder" label="首单优惠"
             >
             >
             </el-table-column>
             </el-table-column>
             <el-table-column prop="newUser" label="新用户优惠"
             <el-table-column prop="newUser" label="新用户优惠"
             >
             >
-            </el-table-column>
+            </el-table-column>-->
             <el-table-column prop="category" label="类别"
             <el-table-column prop="category" label="类别"
             >
             >
+                <template slot-scope="{ row }">
+                    <span v-for="item in row.category">{{ item.name }}</span>
+                </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="tag" label="标签"
-            >
-            </el-table-column>
-            <el-table-column prop="status" label="状态"
+            <!--            <el-table-column prop="tag" label="标签"
+                        >
+                        </el-table-column>-->
+            <el-table-column prop="status" label="状态" :formatter="statusFormatter"
             >
             >
             </el-table-column>
             </el-table-column>
-
-            <el-table-column prop="blacklist" label="黑名单"
+            <!--            <el-table-column prop="startTime" label="营业时间"
+                        >
+                        </el-table-column>
+                        <el-table-column prop="endTime" label="结束时间"
+                        >
+                        </el-table-column>-->
+            <!--            <el-table-column prop="qualification" label="营业资质"
+                        >
+                            <template slot-scope="{row}">
+                                <el-image style="width: 30px; height: 30px"
+                                          :src="row.qual" fit="cover"
+                                          :preview-src-list="[row.qualifications]"></el-image>
+                            </template>
+                        </el-table-column>-->
+            <el-table-column prop="businessNature" label="营业性质"
             >
             >
-                <template slot-scope="{row}">
-                    <el-tag :type="row.blacklist?'':'info'">{{row.blacklist}}</el-tag>
-                </template>
             </el-table-column>
             </el-table-column>
+            <!--            <el-table-column prop="blacklist" label="黑名单"
+                        >
+                            <template slot-scope="{row}">
+                                <el-tag :type="row.blacklist?'':'info'">{{row.blacklist}}</el-tag>
+                            </template>
+                        </el-table-column>-->
             <!--<el-table-column
             <!--<el-table-column
                     label="操作"
                     label="操作"
                     align="center"
                     align="center"
@@ -75,8 +97,9 @@
                     <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                     <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
                 </template>
             </el-table-column>-->
             </el-table-column>-->
-            <el-table-column label="操作" align="center" fixed="right" min-width="150">
+            <el-table-column label="操作" align="center" fixed="right" min-width="250">
                 <template slot-scope="{ row }">
                 <template slot-scope="{ row }">
+                    <el-button @click="showDrawer(row)" type="primary" size="mini" plain>详情</el-button>
                     <el-button
                     <el-button
                             v-if="row.status === 'PENDING'"
                             v-if="row.status === 'PENDING'"
                             :loading="row.loading"
                             :loading="row.loading"
@@ -116,6 +139,55 @@
             </el-pagination>
             </el-pagination>
         </div>
         </div>
 
 
+        <el-drawer
+                size="45%"
+                :show-close="false"
+                :visible.sync="drawer"
+                :with-header="false">
+            <div class="info-content">
+                <div class="info-item">
+                    Logo:
+                    <el-image style="width: 30px; height: 30px"
+                              :src="formData.logo" fit="cover"
+                              :preview-src-list="[formData.logo]"/>
+                </div>
+                <div class="info-item">名称:{{formData.name}}</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">电话:{{formData.phone}}</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.address}}</div>
+                <div class="info-item">成立时间:{{formData.establishTime}}</div>
+                <div class="info-item">营业资质:{{formData.qualification}}</div>
+                <div class="info-item">营业性质:{{formData.businessNature}}</div>
+                <div class="info-item">经营品类:{{formData.category}}</div>
+                <div class="info-item">营业:{{formData.week}}</div>
+                <div class="info-item">营业时间:{{formData.startTime}} - {{formData.endTime}}</div>
+                <!--                <div class="info-item">申请状态:{{formData.status}}</div>-->
+                <el-button
+                        v-if="formData.blacklist === false"
+                        :loading="formData.loading"
+                        @click="audit(formData.mid, true)"
+                        type="primary"
+                        size="mini"
+                        plain
+                >黑名单
+                </el-button
+                >
+                <el-button @click="editRow(formData)" type="primary" size="mini" plain>编辑</el-button>
+                <el-button @click="deleteRow(formData)" type="danger" size="mini" plain>删除</el-button>
+            </div>
+        </el-drawer>
+
     </div>
     </div>
 </template>
 </template>
 <script>
 <script>
@@ -134,14 +206,57 @@
                 search: "",
                 search: "",
                 url: "/merchant/showAll",
                 url: "/merchant/showAll",
                 downloading: false,
                 downloading: false,
+                statusOptions: [{"label": "待处理", "value": "PENDING"}, {
+                    "label": "成功", "value": "SUCCESS"
+                }, {"label": "失败", "value": "FAIL"}],
+                status: '',
+                drawer: false,
+                formData: {
+                    img: []
+                }
             }
             }
         },
         },
         computed: {
         computed: {
             selection() {
             selection() {
-                return this.$refs.table.selection.map(i => i.id);
+                return this.$refs.table.selection.map(i => i.mid);
             }
             }
         },
         },
         methods: {
         methods: {
+            showDrawer(row) {
+                this.drawer = true;
+                this.$http
+                    .get('merchant/getDTO/' + row.mid)
+                    .then(res => {
+                        this.formData = res;
+
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    });
+            },
+
+
+            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) {
+                let selectedOption = this.statusOptions.find(i => i.value === cellValue);
+                if (selectedOption) {
+                    return selectedOption.label;
+                }
+                return '';
+            },
             beforeGetData() {
             beforeGetData() {
                 if (this.search) {
                 if (this.search) {
                     return {search: this.search};
                     return {search: this.search};
@@ -165,7 +280,7 @@
                 this.$router.push({
                 this.$router.push({
                     path: "/merchantEdit",
                     path: "/merchantEdit",
                     query: {
                     query: {
-                        id: row.id
+                        id: row.mid
                     }
                     }
                 });
                 });
             },
             },
@@ -207,7 +322,7 @@
             },
             },
             deleteRow(row) {
             deleteRow(row) {
                 this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
                 this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
-                    return this.$http.post(`/merchant/del/${row.id}`)
+                    return this.$http.post(`/merchant/del/${row.mid}`)
                 }).then(() => {
                 }).then(() => {
                     this.$message.success('删除成功');
                     this.$message.success('删除成功');
                     this.getData();
                     this.getData();
@@ -219,8 +334,66 @@
                     }
                     }
                 })
                 })
             },
             },
+            audit(row, pass) {
+                this.$set(row, 'loading', true);
+                this.$http
+                    .get('/merchant/audit', {
+                        id: row.mid,
+                        pass: pass
+                    })
+                    .then(res => {
+                        this.$set(row, 'loading', false);
+                        this.$message.success('OK');
+                        this.getData();
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.$set(row, 'loading', false);
+                        this.$message.error(e.error);
+                    });
+            }
         }
         }
     }
     }
 </script>
 </script>
 <style lang="less" scoped>
 <style lang="less" scoped>
+    .info-content {
+        padding: 0px 20px 0;
+        /*border-bottom: 1px solid #f2f4f5;*/
+        margin-bottom: 20px;
+
+        .info-item {
+            font-size: 14px;
+            color: rgba(77, 77, 77, 1);
+            display: flex;
+            margin-bottom: 20px;
+            font-weight: 500;
+
+            .el-col {
+                overflow: hidden;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+            }
+
+            .el-button--text {
+                margin: 0 !important;
+                padding: 0 !important;
+                border: none !important;
+                font-size: 14px !important;
+            }
+
+            label {
+                width: 84px;
+                display: inline-block;
+                text-align: right;
+                font-weight: 400;
+            }
+
+            .remark {
+                display: inline-block;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                width: calc(100% - 85px);
+            }
+        }
+    }
 </style>
 </style>