Ver Fonte

Merge branch 'master' of http://git.izouma.com/licailing/dingdong

panhui há 5 anos atrás
pai
commit
799c8c8e6f
39 ficheiros alterados com 347 adições e 245 exclusões
  1. 1 1
      src/main/java/com/izouma/dingdong/domain/OrderInfo.java
  2. 6 2
      src/main/java/com/izouma/dingdong/domain/user/Feedback.java
  3. 2 0
      src/main/java/com/izouma/dingdong/dto/CouponDTO.java
  4. 40 0
      src/main/java/com/izouma/dingdong/dto/EmailDTO.java
  5. 8 95
      src/main/java/com/izouma/dingdong/dto/OrderInfoDTO.java
  6. 3 0
      src/main/java/com/izouma/dingdong/repo/rider/RiderLocationRepo.java
  7. 1 1
      src/main/java/com/izouma/dingdong/service/CouponService.java
  8. 14 4
      src/main/java/com/izouma/dingdong/service/OrderInfoService.java
  9. 1 0
      src/main/java/com/izouma/dingdong/service/UserService.java
  10. 22 2
      src/main/java/com/izouma/dingdong/service/backstage/EmailService.java
  11. 2 2
      src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java
  12. 12 8
      src/main/java/com/izouma/dingdong/service/sms/AliSmsService.java
  13. 3 3
      src/main/java/com/izouma/dingdong/service/sms/TencentSmsService.java
  14. 13 2
      src/main/java/com/izouma/dingdong/web/backstage/EmailController.java
  15. 2 1
      src/main/java/com/izouma/dingdong/web/merchant/MerchantController.java
  16. 2 1
      src/main/vue/src/components/BlackButton.vue
  17. 6 4
      src/main/vue/src/components/EmilButton.vue
  18. 9 4
      src/main/vue/src/views/AppraisalEdit.vue
  19. 1 1
      src/main/vue/src/views/AppraisalRidList.vue
  20. 32 21
      src/main/vue/src/views/FeedbackEdit.vue
  21. 11 4
      src/main/vue/src/views/FeedbackList.vue
  22. 6 3
      src/main/vue/src/views/Login.vue
  23. 15 9
      src/main/vue/src/views/OrderInfoEdit.vue
  24. 1 1
      src/main/vue/src/views/OrderInfoList.vue
  25. 10 1
      src/main/vue/src/views/backstage/BlackListList.vue
  26. 19 10
      src/main/vue/src/views/backstage/EmailEdit.vue
  27. 29 21
      src/main/vue/src/views/backstage/EmailList.vue
  28. 3 3
      src/main/vue/src/views/backstage/PromoteEdit.vue
  29. 34 16
      src/main/vue/src/views/merchant/GoodsEdit.vue
  30. 1 0
      src/main/vue/src/views/merchant/MerchantEdit.vue
  31. 6 6
      src/main/vue/src/views/rider/RiderEdit.vue
  32. 1 1
      src/main/vue/src/views/rider/RiderList.vue
  33. 1 1
      src/main/vue/src/views/user/ComplaintList.vue
  34. 2 2
      src/main/vue/src/views/user/UserEdit.vue
  35. 6 0
      src/test/java/com/izouma/dingdong/contorller/AuthControllerTest.java
  36. 0 1
      src/test/java/com/izouma/dingdong/service/ChatServiceTest.java
  37. 18 12
      src/test/java/com/izouma/dingdong/service/GoodsServiceTest.java
  38. 2 1
      src/test/java/com/izouma/dingdong/service/sms/SmsServiceTest.java
  39. 2 1
      src/test/java/com/izouma/dingdong/service/sms/TencentSmsTest.java

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

@@ -24,7 +24,7 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "用户ID", name = "userId")
     private Long userId;
 
-    //经度在前 纬度在后
+    //经度在前 纬度在后 lng lat
     @ApiModelProperty(value = "用户地址经纬度", name = "location")
     private String location;
 

+ 6 - 2
src/main/java/com/izouma/dingdong/domain/user/Feedback.java

@@ -1,6 +1,7 @@
 package com.izouma.dingdong.domain.user;
 
 import com.izouma.dingdong.domain.BaseEntity;
+import com.izouma.dingdong.domain.User;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -9,8 +10,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.hibernate.annotations.Where;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
+import javax.persistence.*;
 
 @Data
 @Entity
@@ -38,4 +38,8 @@ public class Feedback extends BaseEntity {
 
     @Column(nullable = false)
     private Boolean enabled = true;
+
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
+    @JoinColumn(name = "userId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+    private User user;
 }

+ 2 - 0
src/main/java/com/izouma/dingdong/dto/CouponDTO.java

@@ -16,6 +16,8 @@ import java.time.LocalDate;
 @Data
 @ApiModel(value = "优惠券", description = "优惠券")
 public class CouponDTO {
+    private Long id;
+
     @ApiModelProperty(value = "优惠券名称", name = "name")
     private String name;
 

+ 40 - 0
src/main/java/com/izouma/dingdong/dto/EmailDTO.java

@@ -0,0 +1,40 @@
+package com.izouma.dingdong.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "系统邮件", description = "系统邮件")
+public class EmailDTO {
+    private Long id;
+
+    private String name = "系统消息";
+
+    @ApiModelProperty(value = "接收人头像")
+    private String receiveAvatar;
+
+    @ApiModelProperty(value = "收件人", name = "receiveNickname")
+    private String receiveNickname;
+
+    @ApiModelProperty(value = "发送时间", name = "sendTime")
+    private LocalDateTime sendTime;
+
+    @ApiModelProperty(value = "标题", name = "title")
+    private String title;
+
+    @ApiModelProperty(value = "内容", name = "content")
+    private String content;
+
+    @ApiModelProperty(value = "是否已读", name = "isRead")
+    private Boolean isRead;
+
+}

+ 8 - 95
src/main/java/com/izouma/dingdong/dto/OrderInfoDTO.java

@@ -11,11 +11,6 @@ import lombok.*;
 @ApiModel(value = "订单表", description = "订单表")
 public class OrderInfoDTO extends OrderInfo {
 
-//    private Long id;
-
-//    @Enumerated(EnumType.STRING)
-//    @ApiModelProperty(value = "订单状态", name = "orderStatus")
-//    private OrderStatus status;
 
     //商家信息
     @ApiModelProperty(value = "商家用户Id",name = "mUserId")
@@ -30,25 +25,17 @@ public class OrderInfoDTO extends OrderInfo {
     @ApiModelProperty(value = "商家地址", name = "merAddress")
     private String merAddress;
 
-//    @Enumerated(EnumType.STRING)
-//    @ApiModelProperty(value = "商家状态", name = "merchantStatus")
-//    private MerchantStatus merchantStatus;
+    @ApiModelProperty(value = "商家logo", name = "merLogo")
+    private String merLogo;
+
+    @ApiModelProperty(value = "商家id", name = "mid")
+    private Long mid;
 
 
-    //用户信息
-//    @ApiModelProperty(value = "用户Id",name = "userId")
-//    private Long userId;
 
     @ApiModelProperty(value = "用户昵称")
     private String nickname;
 
-//    //经度在前 纬度在后
-//    @ApiModelProperty(value = "用户地址经纬度", name = "location")
-//    private String location;
-
-//    @ApiModelProperty(value = "配送地址", name = "userAddress")
-//    private String userAddress;
-
 
     //骑手信息
     @ApiModelProperty(value = "骑手用户Id",name = "rUserId")
@@ -60,83 +47,9 @@ public class OrderInfoDTO extends OrderInfo {
     @ApiModelProperty(value = "骑手名称", name = "riderName")
     private String riderName;
 
-//    @Enumerated(EnumType.STRING)
-//    @ApiModelProperty(value = "骑手状态", name = "riderStatus")
-//    private RiderStatus riderStatus;
-
-
-    //价格
-//    @ApiModelProperty(value = "包装价格", name = "packingPrice")
-//    private BigDecimal packingPrice;
-//
-//    @ApiModelProperty(value = "配送费", name = "deliveryAmount")
-//    private BigDecimal deliveryAmount;
-//
-//    @ApiModelProperty(value = "满减", name = "fullReduction")
-//    private BigDecimal fullReduction;
-//
-//    @ApiModelProperty(value = "首单", name = "firstBuy")
-//    private BigDecimal firstBuy;
-//
-//    @ApiModelProperty(value = "红包", name = "redBag")
-//    private BigDecimal redBag;
-//
-//    @ApiModelProperty(value = "新用户", name = "newUser")
-//    private BigDecimal newUser;
-//
-//    @ApiModelProperty(value = "总价", name = "totalAmount")
-//    private BigDecimal totalAmount;
-
-//    @ApiModelProperty(value = "商品总价", name = "goodsAmount")
-//    private BigDecimal goodsAmount;
-
-//    @ApiModelProperty(value = "实付金额", name = "realAmount")
-//    private BigDecimal realAmount;
-//
-//    @ApiModelProperty(value = "优惠券ID", name = "couponId")
-//    private Long userCouponId;
-
-
-
-
-    //订单信息
-//    @ApiModelProperty(value = "订单信息",name = "orderNo")
-//    private String orderNo;
-//
-//    @ApiModelProperty(value = "下单时间", name = "orderTime")
-//    private LocalDateTime orderTime;
-//
-//    @ApiModelProperty(value = "备注", name = "remark")
-//    private String remark;
-//
-//    @Enumerated(EnumType.STRING)
-//    @ApiModelProperty(value = "支付方式", name = "payMethod")
-//    private PayMethod payMethod;
-//
-//    @Column(nullable = false)
-//    @ApiModelProperty(value = "取消订单", name = "cancel")
-//    private Boolean cancel = false;
-//
-//    @Column(nullable = false)
-//    @ApiModelProperty(value = "已评价", name = "rated")
-//    private Boolean rated = false;
-//
-//    @ApiModelProperty(value = "用户收到时间", name = "userReceivedTime")
-//    private LocalDateTime userReceivedTime;
-
-//    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
-//    @JoinColumn(name = "orderInfoId")
-//    List<OrderGoodsSpec> orderGoodsSpecs;
-
-//    @Enumerated(EnumType.STRING)
-//    @ApiModelProperty(value = "取消订单原因", name = "reason")
-//    private RefundReason reason;
-
-//    @ApiModelProperty(value = "预计到达时间", name = "timeOfArrival")
-//    private LocalDateTime timeOfArrival;
-//
-//    @ApiModelProperty(value = "期望送达时间段", name = "expectDeliveryTime")
-//    private String expectDeliveryTime;
+    @ApiModelProperty(value = "骑手地址经纬度", name = "ridLocation")
+    private String ridLocation;
+
 
     @ApiModelProperty(value = "评价ID", name = "appraisalId")
     private Long appraisalId;

+ 3 - 0
src/main/java/com/izouma/dingdong/repo/rider/RiderLocationRepo.java

@@ -6,9 +6,12 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Optional;
 
 public interface RiderLocationRepo extends JpaRepository<RiderLocation, Long>, JpaSpecificationExecutor<RiderLocation> {
 
     //按创建时间查找
     List<RiderLocation> findAllByCreatedAt(LocalDateTime dateTime);
+
+    Optional<RiderLocation> findLastByRiderId(Long riderId);
 }

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

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service;
 
-import cn.hutool.core.bean.BeanUtil;
 import com.izouma.dingdong.domain.Coupon;
 import com.izouma.dingdong.dto.CouponDTO;
 import com.izouma.dingdong.repo.CouponRepo;
@@ -35,6 +34,7 @@ public class CouponService {
 
     public CouponDTO toDTO(Coupon coupon) {
         CouponDTO dto = CouponDTO.builder()
+                .id(coupon.getId())
                 .amount(coupon.getAmount())
                 .endDate(coupon.getEndDate())
                 .fullAmount(coupon.getFullAmount())

+ 14 - 4
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -7,6 +7,7 @@ import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.backstage.BlackList;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.rider.Rider;
+import com.izouma.dingdong.domain.rider.RiderLocation;
 import com.izouma.dingdong.domain.user.ShoppingCart;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
@@ -18,6 +19,7 @@ import com.izouma.dingdong.enums.*;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.*;
 import com.izouma.dingdong.repo.backstage.BlackListRepo;
+import com.izouma.dingdong.repo.rider.RiderLocationRepo;
 import com.izouma.dingdong.repo.rider.RiderRepo;
 import com.izouma.dingdong.repo.user.ShoppingCartRepo;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
@@ -60,6 +62,7 @@ public class OrderInfoService {
     private DeliveryFeeService      deliveryFeeService;
     private SysConfigService        sysConfigService;
     private BlackListRepo           blackListRepo;
+    private RiderLocationRepo       riderLocationRepo;
 
     /*
     用户下单
@@ -339,9 +342,9 @@ public class OrderInfoService {
     /*
     骑手强制已到店,已送达
     */
-    public void mandatory(Long orderId,RiderStatus status){
+    public void mandatory(Long orderId, RiderStatus status) {
         OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
-        switch (status){
+        switch (status) {
             case ARRIVE:
                 //待取餐
                 orderInfo.setRiderStatus(RiderStatus.ARRIVE);
@@ -507,12 +510,17 @@ public class OrderInfoService {
     public OrderInfoDTO toDto(OrderInfo orderInfo) {
         OrderInfoDTO dto = new OrderInfoDTO();
         BeanUtil.copyProperties(orderInfo, dto);
-        if (orderInfo.getRiderId() != null) {
-            riderRepo.findById(orderInfo.getRiderId()).ifPresent(rider -> {
+        Long riderId = orderInfo.getRiderId();
+        if (riderId != null) {
+            riderRepo.findById(riderId).ifPresent(rider -> {
                 dto.setJobNumber(rider.getJobNumber());
                 dto.setRiderName(rider.getUser().getNickname());
                 dto.setRUserId(rider.getUserId());
             });
+            riderLocationRepo.findLastByRiderId(riderId)
+                    .ifPresent(lo ->
+                            dto.setLocation(lo.getLongitude() + "," + lo.getLatitude()));
+
         }
         dto.setNickname(orderInfo.getUser().getNickname());
 //        userRepo.findById(orderInfo.getUserId()).ifPresent(u -> dto.setNickname(u.getNickname()));
@@ -521,6 +529,8 @@ public class OrderInfoService {
             dto.setMerShowName(merchant.getShowName());
             dto.setMerLocation(merchant.getLongitude() + "," + merchant.getLatitude());
             dto.setMerAddress(merchant.getAddress());
+            dto.setMid(merchant.getId());
+            dto.setMerLogo(merchant.getLogo());
         });
 
         return dto;

+ 1 - 0
src/main/java/com/izouma/dingdong/service/UserService.java

@@ -111,6 +111,7 @@ public class UserService {
             e.printStackTrace();
             throw new BusinessException("验证码错误");
         }
+        phone = phone.substring(3);
         User user = userRepo.findByPhoneAndIdentity(phone, identity);
         if (user == null) {
             user = User.builder()

+ 22 - 2
src/main/java/com/izouma/dingdong/service/backstage/EmailService.java

@@ -1,6 +1,8 @@
 package com.izouma.dingdong.service.backstage;
 
-import com.izouma.dingdong.repo.backstage.EmailRepo;
+import com.izouma.dingdong.domain.backstage.Email;
+import com.izouma.dingdong.dto.EmailDTO;
+import com.izouma.dingdong.repo.UserRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -8,6 +10,24 @@ import org.springframework.stereotype.Service;
 @AllArgsConstructor
 public class EmailService {
 
-    private EmailRepo emailRepo;
+    private UserRepo userRepo;
 
+    public EmailDTO toDto(Email email) {
+        EmailDTO dto = EmailDTO.builder()
+                .content(email.getContent())
+                .id(email.getId())
+                .isRead(email.getIsRead())
+                .name(email.getName())
+                .sendTime(email.getSendTime())
+                .title(email.getTitle())
+                .build();
+
+        if (email.getReceiveUserId() != null) {
+            userRepo.findById(email.getReceiveUserId()).ifPresent(u -> {
+                dto.setReceiveAvatar(u.getAvatar());
+                dto.setReceiveNickname(u.getNickname());
+            });
+        }
+        return dto;
+    }
 }

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

@@ -94,9 +94,9 @@ public class GoodsService {
             }
         }
 
-        if (containsWeek(goods.getWeek(), merchantSettings.getWeek())) {
+        /*if (containsWeek(goods.getWeek(), merchantSettings.getWeek())) {
             throw new BusinessException("商品销售日期不在营业日期内");
-        }
+        }*/
 
         if (goods.getId() == null) {
             goods.setLikes(0);

+ 12 - 8
src/main/java/com/izouma/dingdong/service/sms/AliSmsService.java

@@ -36,7 +36,10 @@ public class AliSmsService implements SmsService {
     public String sendVerify(String phone) {
         smsRecordRepo.findLastByPhoneAndExpiresAtAfterAndExpiredFalse(phone, LocalDateTime.now()).ifPresent(record -> {
             if (record.getCreatedAt().plusMinutes(1L).isAfter(LocalDateTime.now())) {
-                long sec = record.getCreatedAt().plusMinutes(1L).toInstant(ZoneOffset.UTC).getEpochSecond() - LocalDateTime.now().toInstant(ZoneOffset.UTC).getEpochSecond() + 1;
+                long sec = record.getCreatedAt()
+                        .plusMinutes(1L)
+                        .toInstant(ZoneOffset.UTC)
+                        .getEpochSecond() - LocalDateTime.now().toInstant(ZoneOffset.UTC).getEpochSecond() + 1;
                 throw new BusinessException("请" + sec + "秒后再试");
             }
         });
@@ -67,12 +70,12 @@ public class AliSmsService implements SmsService {
             smsRecordRepo.expire(phone);
             String sessionId = RandomStringUtils.randomAlphabetic(10);
             smsRecordRepo.save(SmsRecord.builder()
-                                        .sessionId(sessionId)
-                                        .phone(phone)
-                                        .code(code)
-                                        .expiresAt(LocalDateTime.now().plusMinutes(5))
-                                        .expired(false)
-                                        .build());
+                    .sessionId(sessionId)
+                    .phone(phone)
+                    .code(code)
+                    .expiresAt(LocalDateTime.now().plusMinutes(5))
+                    .expired(false)
+                    .build());
             return sessionId;
         } catch (ClientException | JSONException e) {
             e.printStackTrace();
@@ -82,7 +85,8 @@ public class AliSmsService implements SmsService {
 
     @Override
     public void verify(String phone, String code) throws SmsVerifyException {
-        SmsRecord smsRecord = smsRecordRepo.findLastByPhoneAndExpiresAtAfterAndExpiredFalse(phone, LocalDateTime.now()).orElseThrow(new SmsVerifyException("验证码错误"));
+        SmsRecord smsRecord = smsRecordRepo.findLastByPhoneAndExpiresAtAfterAndExpiredFalse(phone, LocalDateTime.now())
+                .orElseThrow(new SmsVerifyException("验证码错误"));
         if (!smsRecord.getCode().equalsIgnoreCase(code)) {
             throw new BusinessException("验证码错误");
         }

+ 3 - 3
src/main/java/com/izouma/dingdong/service/sms/TencentSmsService.java

@@ -66,12 +66,12 @@ public class TencentSmsService {
             req.setSenderId("Qcloud");
             //回调
             SendSmsResponse resp = client.SendSms(req);
-            String s = SendSmsResponse.toJsonString(resp);
+            //String s = SendSmsResponse.toJsonString(resp);
             SendStatus status = resp.getSendStatusSet()[0];
             if (!status.getCode().equals("Ok")) {
                 throw new BusinessException("发送失败,请稍后再试", status.getCode() + "," + status.getMessage());
             }
-            //报错到sms表
+            //保存到sms表
             smsRecordRepo.expire(phone);
             String sessionId = RandomStringUtils.randomAlphabetic(10);
 //            String sessionId = resp.getRequestId();
@@ -83,7 +83,7 @@ public class TencentSmsService {
                     .expired(false)
                     .build());
 
-            System.out.println(s);
+            //System.out.println(s);
             return sessionId;
         } catch (TencentCloudSDKException e) {
             e.printStackTrace();

+ 13 - 2
src/main/java/com/izouma/dingdong/web/backstage/EmailController.java

@@ -1,5 +1,6 @@
 package com.izouma.dingdong.web.backstage;
 
+import com.izouma.dingdong.dto.EmailDTO;
 import com.izouma.dingdong.utils.SecurityUtils;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.backstage.Email;
@@ -11,9 +12,7 @@ import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 
 import lombok.AllArgsConstructor;
-import org.apache.catalina.security.SecurityUtil;
 import org.springframework.data.domain.Page;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -36,6 +35,7 @@ public class EmailController extends BaseController {
             ObjUtils.merge(orig, record);
             return emailRepo.save(orig);
         }
+        record.setSendUserId(SecurityUtils.getAuthenticatedUser().getId());
         record.setEnabled(true);
         record.setIsRead(false);
         record.setSendTime(LocalDateTime.now());
@@ -49,6 +49,17 @@ public class EmailController extends BaseController {
         return emailRepo.findAll(toSpecification(pageQuery, Email.class), toPageRequest(pageQuery));
     }
 
+    @GetMapping("/allDto")
+    public Page<EmailDTO> allDto(PageQuery pageQuery) {
+        return emailRepo.findAll(toSpecification(pageQuery, Email.class), toPageRequest(pageQuery))
+                .map(emailService::toDto);
+    }
+
+    @GetMapping("/getDto/{id}")
+    public EmailDTO getDto(@PathVariable Long id) {
+        return emailService.toDto(emailRepo.findById(id).orElseThrow(new BusinessException("无记录")));
+    }
+
     @GetMapping("/get/{id}")
     public Email get(@PathVariable Long id) {
         return emailRepo.findById(id).orElseThrow(new BusinessException("无记录"));

+ 2 - 1
src/main/java/com/izouma/dingdong/web/merchant/MerchantController.java

@@ -125,7 +125,8 @@ public class MerchantController extends BaseController {
     @GetMapping("/bannerMer")
     @ApiOperation("banner的商家列表")
     public List<Merchant> bannerMer() {
-        return merchantRepo.findAllByBuyAllianceTrue();
+//        return merchantRepo.findAllByBuyAllianceTrue();
+        return merchantRepo.findAll();
     }
 }
 

+ 2 - 1
src/main/vue/src/components/BlackButton.vue

@@ -1,6 +1,6 @@
 <template>
     <el-button @click="moveRow"
-               type="danger" v-if="this.$route.query.id && !this.$route.query.blacklist">移入黑名单
+               type="danger" v-if="this.$route.query.id && !blacklist">移入黑名单
     </el-button>
 </template>
 <script>
@@ -14,6 +14,7 @@
         mounted() {
 
         },
+        props:['blacklist'],
         methods: {
             moveRow() {
                 this.$prompt('请输入理由', '提示', {

+ 6 - 4
src/main/vue/src/components/EmilButton.vue

@@ -1,5 +1,5 @@
 <template>
-    <div>
+    <span>
         <el-button @click="showDialog=true"
                    type="warning">发送邮件
         </el-button>
@@ -17,15 +17,16 @@
                      <el-button type="primary" size="mini" @click="save" :loading="saving">保存</el-button>
              </span>
          </el-dialog>
-    </div>
+    </span>
 </template>
 <script>
 
     export default {
+        props:['userId'],
         data() {
             return {
                 formData: {
-                    receiveUserId: this.$route.query.id,
+                    receiveUserId: '',
                     title: '',
                     content: '',
                 },
@@ -45,9 +46,10 @@
                 this.$refs.form.validate(valid => {
                     if (valid) {
                         let data = {...this.formData};
+                        data.receiveUserId=this.userId
                         this.saving = true;
                         this.$http
-                            .post('/rider/save', data, {body: 'json'})
+                            .post('/email/save', data, {body: 'json'})
                             .then(res => {
                                 this.saving = false;
                                 this.$message.success('成功');

+ 9 - 4
src/main/vue/src/views/AppraisalEdit.vue

@@ -7,18 +7,20 @@
             </el-form-item>-->
             <el-form-item prop="nickname" label="用户昵称">
                 <!--                <el-input v-model="formData.nickname"></el-input>-->
-                <el-card shadow="hover" body-style=" padding: '10px' ">
+                <el-card shadow="hover" class="rt-card">
                         {{formData.nickname}}
                 </el-card>
             </el-form-item>
             <el-form-item prop="img" label="图片">
                 <el-image v-for="item in picList(formData.img)" style="width: 80px; height: 80px; padding-right: 10px"
                           :key="item" :src="item" fit="cover" :preview-src-list="[item]"
-                ></el-image>
+                >
+
+                </el-image>
             </el-form-item>
             <el-form-item prop="merShowName" label="商家名称">
 <!--                <el-input v-model="formData.nickname"></el-input>-->
-                <el-card shadow="hover" body-style=" padding: '10px' ">
+                <el-card shadow="hover" class="rt-card">
                     {{formData.merShowName}}
                 </el-card>
             </el-form-item>
@@ -42,7 +44,7 @@
             </el-form-item>-->
             <el-form-item prop="riderName" label="骑手名称">
                 <!--                <el-input v-model="formData.nickname"></el-input>-->
-                <el-card shadow="hover" body-style=" padding: '10px' ">
+                <el-card shadow="hover" class="rt-card">
                     {{formData.riderName}}
                 </el-card>
             </el-form-item>
@@ -180,4 +182,7 @@
     }
 </script>
 <style lang="less" scoped>
+    .rt-card /deep/ .el-card__body {
+        padding: 3px 15px !important;
+    }
 </style>

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

@@ -76,7 +76,7 @@
                     fixed="right"
                     min-width="150">
                 <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="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>

+ 32 - 21
src/main/vue/src/views/FeedbackEdit.vue

@@ -2,28 +2,32 @@
     <div class="edit-view">
         <el-form :model="formData" :rules="rules" ref="form" label-width="66px" label-position="right" size="small"
                  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>
-                <el-form-item prop="content" label="内容">
-                            <el-input v-model="formData.content"></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="name" label="联系人">
-                            <el-input v-model="formData.name"></el-input>
-                </el-form-item>
-                <el-form-item prop="phone" label="电话">
-                            <el-input v-model="formData.phone"></el-input>
-                </el-form-item>
+            <el-form-item prop="user.nickname" label="用户Id">
+                <el-input v-model="formData.user.nickname" readonly></el-input>
+            </el-form-item>
+            <el-form-item prop="content" label="内容">
+                <el-input v-model="formData.content" readonly></el-input>
+            </el-form-item>
+            <el-form-item prop="img" label="图片">
+                <!--<multi-upload v-model="formData.img" readonly></multi-upload>-->
+                <el-image v-for="item in picList(formData.img)" style="width: 80px; height: 80px; padding-right: 10px"
+                          :key="item" :src="item" fit="cover" :preview-src-list="[item]"
+                ></el-image>
+            </el-form-item>
+            <el-form-item prop="name" label="联系人">
+                <el-input v-model="formData.name" readonly></el-input>
+            </el-form-item>
+            <el-form-item prop="phone" label="电话">
+                <el-input v-model="formData.phone" readonly></el-input>
+            </el-form-item>
             <el-form-item>
-                <el-button @click="onSave" :loading="saving"
-                           type="primary">保存</el-button>
+                <!--<el-button @click="onSave" :loading="saving"
+                           type="primary">保存
+                </el-button>-->
                 <el-button @click="onDelete" :loading="saving"
                            type="danger" v-if="formData.id">删除
                 </el-button>
-                <el-button @click="$router.go(-1)">取消</el-button>
+                <el-button @click="$router.go(-1)">返回</el-button>
             </el-form-item>
         </el-form>
     </div>
@@ -34,7 +38,7 @@
         created() {
             if (this.$route.query.id) {
                 this.$http
-                    .get('feedback/get/'+this.$route.query.id)
+                    .get('feedback/get/' + this.$route.query.id)
                     .then(res => {
                         this.formData = res;
                     })
@@ -48,12 +52,19 @@
             return {
                 saving: false,
                 formData: {
+                    user: {}
                 },
-                rules: {
-                },
+                rules: {},
             }
         },
         methods: {
+            picList(row) {
+                if (row) {
+                    return row.split(",");
+                } else {
+                    return "";
+                }
+            },
             onSave() {
                 this.$refs.form.validate((valid) => {
                     if (valid) {

+ 11 - 4
src/main/vue/src/views/FeedbackList.vue

@@ -20,7 +20,7 @@
             </el-table-column>
             <el-table-column prop="id" label="ID" width="100">
             </el-table-column>
-                    <el-table-column prop="userId" label="用户Id"
+                    <el-table-column prop="user.nickname" label="用户昵称"
 >
                     </el-table-column>
                     <el-table-column prop="content" label="内容"
@@ -30,8 +30,8 @@
 >
                             <template slot-scope="{row}">
                                 <el-image style="width: 30px; height: 30px"
-                                          :src="row.img[0]" fit="cover"
-                                          :preview-src-list="row.img"></el-image>
+                                          :src="picList(row.img)[0]" fit="cover"
+                                          :preview-src-list="picList(row.img)?picList(row.img):[]"></el-image>
                             </template>
                     </el-table-column>
                     <el-table-column prop="name" label="联系人"
@@ -46,7 +46,7 @@
                     fixed="right"
                     min-width="150">
                 <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="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>
@@ -94,6 +94,13 @@
             }
         },
         methods: {
+            picList(row) {
+                if (row) {
+                    return row.split(",");
+                } else {
+                    return "";
+                }
+            },
             beforeGetData() {
                 if (this.search) {
                     return { search: this.search };

+ 6 - 3
src/main/vue/src/views/Login.vue

@@ -172,7 +172,9 @@
                         this.loading = true;
                         this.$http
                             .post("/auth/phoneLogin", {
-                                phone: this.userInfo.phone
+                                phone: "+86" + this.userInfo.phone,
+                                code: code,
+                                identity: "ADMIN"
                             })
                             .then(res => {
                                 localStorage.setItem("token", res);
@@ -222,8 +224,9 @@
                 }
                 this.sending = true;
                 this.$http
-                    .get("/sms/sendVerify", {
-                        phone: this.userInfo.phone
+                    .get("/sms/tencentSend", {
+                        phone: "+86" + this.userInfo.phone,
+                        templateId: "674851"
                     })
                     .then(res => {
                         this.sending = false;

+ 15 - 9
src/main/vue/src/views/OrderInfoEdit.vue

@@ -9,15 +9,17 @@
                     <div class="text item">{{address.info}}</div>
                 </el-card>-->
 
-                <el-input v-model="formData.nickname"></el-input>
+               <!-- <el-input v-model="formData.nickname" readonly></el-input>-->
+                <el-card shadow="hover" class="rt-card">{{formData.nickname}}</el-card>
             </el-form-item>
             <el-form-item prop="userAddress" label="配送地址">
-                <el-input v-model="address.name" style="width: 100px;padding-right: 10px"></el-input>
-                <el-input v-model="address.phone" style="width: 150px"></el-input>
-                <el-input type="textarea" v-model="address.info" style="padding-top: 10px"></el-input>
+                <el-input v-model="address.name" style="width: 100px;padding-right: 10px" readonly></el-input>
+                <el-input v-model="address.phone" style="width: 150px" readonly></el-input>
+                <el-input type="textarea" v-model="address.info" style="padding-top: 10px" readonly></el-input>
             </el-form-item>
-            <el-form-item prop="merchantShowName" label="商户">
-                <el-input v-model="formData.merchantShowName"></el-input>
+            <el-form-item prop="merShowName" label="商户">
+                <!--<el-input v-model="formData.merchantShowName" readonly></el-input>-->
+                <el-card shadow="hover" class="rt-card">{{formData.merShowName}}</el-card>
             </el-form-item>
             <el-form-item prop="merchantStatus" label="商家状态">
                 <!--<el-select v-model="formData.merchantStatus" disabled placeholder="请选择">
@@ -38,11 +40,11 @@
             <!--                <el-input v-model="formData.merchantAddress"></el-input>-->
             <!--            </el-form-item>-->
             <el-form-item prop="riderName" label="骑手">
-                <el-input v-model="formData.riderName"></el-input>
-                <!--<el-button type="primary" @click="changeStatus">{{formData.riderStatus}}</el-button>-->
+                <!--<el-input v-model="formData.riderName"></el-input>-->
+                <el-card shadow="hover" class="rt-card">{{formData.riderName!=null?formData.riderName:'暂无'}}</el-card>
             </el-form-item>
             <el-form-item prop="jobNumber" label="骑手工号">
-                <el-input v-model="formData.jobNumber"></el-input>
+                <el-input v-model="formData.jobNumber" readonly></el-input>
                 <!--<el-button type="primary" @click="changeStatus">{{formData.riderStatus}}</el-button>-->
             </el-form-item>
 
@@ -320,4 +322,8 @@
     }
 </script>
 <style lang="less" scoped>
+    .rt-card /deep/ .el-card__body {
+        padding: 3px 15px !important;
+        color: #606266;
+    }
 </style>

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

@@ -40,7 +40,7 @@
             <!--            <el-table-column prop="userAddress" label="配送地址"
                         >
                         </el-table-column>-->
-            <el-table-column prop="merchantShowName" label="商户名称"
+            <el-table-column prop="merShowName" label="商户名称"
             >
             </el-table-column>
             <el-table-column prop="merchantStatus" label="商家状态"

+ 10 - 1
src/main/vue/src/views/backstage/BlackListList.vue

@@ -74,6 +74,7 @@
                     <!--                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>-->
                     <el-button @click="userRow(row)" type="primary" size="mini" plain v-if="row.identity==='USER'">详情</el-button>
                     <el-button @click="merRow(row)" type="primary" size="mini" plain v-if="row.identity==='MERCHANT'">详情</el-button>
+                    <el-button @click="ridRow(row)" type="primary" size="mini" plain v-if="row.identity==='RIDER'">详情</el-button>
                     <el-button @click="removeRow(row)" type="danger" size="mini" plain v-if="!row.remove">移除</el-button>
                 </template>
             </el-table-column>
@@ -256,7 +257,15 @@
                         id: row.otherId
                     }
                 });
-            }
+            },
+            ridRow(row) {
+                this.$router.push({
+                    path: "/riderEdit",
+                    query: {
+                        id: row.otherId
+                    }
+                });
+            },
         }
     }
 </script>

+ 19 - 10
src/main/vue/src/views/backstage/EmailEdit.vue

@@ -1,23 +1,32 @@
 <template>
     <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="90px" label-position="right" size="small"
                  style="max-width: 500px;">
-            <el-form-item prop="sendUserId" label="发件人">
-                <el-input v-model="formData.sendUserId"></el-input>
+            <el-form-item prop="receiveAvatar" label="接收人头像">
+               <!-- <el-input v-model="formData.receiveAvatar"></el-input>-->
+                <el-image style="width: 120px; height: 120px"
+                          :src="formData.receiveAvatar" fit="cover"
+                          :preview-src-list="[formData.receiveAvatar]">
+                    <div slot="error">
+                        <el-image style="width: 120px; height: 120px"
+                                  src="https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-08-07-17-26-23hRwKPxhh.gif"
+                                  fit="cover"/>
+                    </div>
+                </el-image>
             </el-form-item>
-            <el-form-item prop="receiveUserId" label="收件人">
-                <el-input v-model="formData.receiveUserId"></el-input>
+            <el-form-item prop="receiveNickname" label="接收人昵称">
+                <el-input v-model="formData.receiveNickname" readonly></el-input>
             </el-form-item>
             <el-form-item prop="title" label="标题">
-                <el-input v-model="formData.title"></el-input>
+                <el-input v-model="formData.title" readonly></el-input>
             </el-form-item>
             <el-form-item prop="content" label="内容">
-                <el-input type="textarea" v-model="formData.content"></el-input>
+                <el-input type="textarea" v-model="formData.content" readonly></el-input>
             </el-form-item>
             <el-form-item>
-                <el-button @click="onSave" :loading="saving"
+                <!--<el-button @click="onSave" :loading="saving"
                            type="primary">保存
-                </el-button>
+                </el-button>-->
                 <el-button @click="onDelete" :loading="saving"
                            type="danger" v-if="formData.id">删除
                 </el-button>
@@ -32,7 +41,7 @@
         created() {
             if (this.$route.query.id) {
                 this.$http
-                    .get('email/get/' + this.$route.query.id)
+                    .get('email/getDto/' + this.$route.query.id)
                     .then(res => {
                         this.formData = res;
                     })

+ 29 - 21
src/main/vue/src/views/backstage/EmailList.vue

@@ -1,5 +1,5 @@
 <template>
-    <div  class="list-view">
+    <div class="list-view">
         <div class="filters-container">
             <el-input placeholder="输入关键字" v-model="search" clearable
                       class="filter-item"></el-input>
@@ -23,25 +23,33 @@
             </el-table-column>
             <el-table-column prop="id" label="ID" width="100">
             </el-table-column>
-                                <el-table-column prop="sendUserId" label="发件人"
->
-                    </el-table-column>
-                    <el-table-column prop="receiveUserId" label="收件人"
->
-                    </el-table-column>
-                    <el-table-column prop="title" label="标题"
->
-                    </el-table-column>
-                    <el-table-column prop="content" label="内容"
->
-                    </el-table-column>
+            <el-table-column prop="receiveAvatar" label="接收人头像"
+            >
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :src="row.receiveAvatar" fit="cover"
+                              :preview-src-list="[row.receiveAvatar]"></el-image>
+                </template>
+            </el-table-column>
+            <el-table-column prop="receiveNickname" label="接收人昵称"
+            >
+            </el-table-column>
+            <el-table-column prop="name" label="名称"
+            >
+            </el-table-column>
+            <!--<el-table-column prop="title" label="标题"
+            >
+            </el-table-column>-->
+            <el-table-column prop="content" label="内容"
+            >
+            </el-table-column>
             <el-table-column
                     label="操作"
                     align="center"
                     fixed="right"
                     min-width="150">
                 <template slot-scope="{row}">
-                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>详情</el-button>
                     <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>
@@ -66,7 +74,7 @@
     </div>
 </template>
 <script>
-    import { mapState } from "vuex";
+    import {mapState} from "vuex";
     import pageableTable from "@/mixins/pageableTable";
 
     export default {
@@ -79,7 +87,7 @@
             return {
                 multipleMode: false,
                 search: "",
-                url: "/email/all",
+                url: "/email/allDto",
                 downloading: false,
             }
         },
@@ -91,7 +99,7 @@
         methods: {
             beforeGetData() {
                 if (this.search) {
-                    return { search: this.search };
+                    return {search: this.search};
                 }
             },
             toggleMultipleMode(multipleMode) {
@@ -104,7 +112,7 @@
                 this.$router.push({
                     path: "/emailEdit",
                     query: {
-                    ...this.$route.query
+                        ...this.$route.query
                     }
                 });
             },
@@ -112,16 +120,16 @@
                 this.$router.push({
                     path: "/emailEdit",
                     query: {
-                    id: row.id
+                        id: row.id
                     }
                 });
             },
             download() {
                 this.downloading = true;
                 this.$axios
-                    .get("/email/excel", { 
+                    .get("/email/excel", {
                         responseType: "blob",
-                        params: { size: 10000 }
+                        params: {size: 10000}
                     })
                     .then(res => {
                         console.log(res);

+ 3 - 3
src/main/vue/src/views/backstage/PromoteEdit.vue

@@ -2,8 +2,8 @@
     <div class="edit-view">
         <el-form :model="formData" :rules="rules" ref="form" label-width="108px" label-position="right" size="small"
                  style="max-width: 500px;">
-            <el-form-item prop="merchant" label="商家">
-                <el-select v-model="merchant">
+            <el-form-item prop="merchantId" label="商家">
+                <el-select v-model="formData.merchantId" filterable clearable>
                     <el-option v-for="item in merchant" :label="item.showName"
                                :value="item.id" :key="item.id">
                     </el-option>
@@ -12,7 +12,7 @@
             <el-form-item prop="action" label="位置">
                 <el-select v-model="formData.action">
                     <el-option v-for="item in actionOption" :label="item.label"
-                    :value="item.value" :key="item.value">
+                               :value="item.value" :key="item.value">
                     </el-option>
                 </el-select>
             </el-form-item>

+ 34 - 16
src/main/vue/src/views/merchant/GoodsEdit.vue

@@ -21,26 +21,38 @@
                 <!--<multi-upload v-model="formData.img"></multi-upload>-->
                 <el-image style="width: 50px; height: 50px"
                           :src="picList(formData.img)[0]" fit="cover"
-                          :preview-src-list="picList(formData.img)?picList(formData.img):[]"></el-image>
+                          :preview-src-list="picList(formData.img)?picList(formData.img):[]">
+                    <div slot="error">
+                        <el-image style="width: 120px; height: 120px"
+                                  src="https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-08-07-17-26-23hRwKPxhh.gif"
+                                  fit="cover"/>
+                    </div>
+                </el-image>
             </el-form-item>
             <!--<el-form-item prop="inventory" label="库存">
                 <el-input-number type="number" v-model="formData.inventory" disabled></el-input-number>
             </el-form-item>-->
             <el-form-item prop="totalSales" label="销量">
-               <!-- <el-input-number type="number" v-model="formData.totalSales" disabled> </el-input-number>-->
-                <el-card class="rt-card" shadow="hover">总销量 : {{formData.totalSales}} &nbsp;&nbsp; ( 库存 : {{formData.inventory}} )</el-card>
+                <!-- <el-input-number type="number" v-model="formData.totalSales" disabled> </el-input-number>-->
+                <el-card class="rt-card" shadow="hover">总销量 : {{formData.totalSales}} &nbsp;&nbsp; ( 库存 :
+                    {{formData.inventory}} )
+                </el-card>
             </el-form-item>
             <el-form-item prop="likes" label="点赞">
-                <el-input-number type="number" v-model="formData.likes" disabled></el-input-number>
+                <el-input-number type="number" v-model="formData.likes"
+                                 disabled class="rt-input"></el-input-number>
             </el-form-item>
             <el-form-item prop="bad" label="差评">
-                <el-input-number type="number" v-model="formData.bad" disabled></el-input-number>
+                <el-input-number type="number" v-model="formData.bad"
+                                 disabled class="rt-input"></el-input-number>
             </el-form-item>
             <el-form-item prop="amount" label="价格">
-                <el-input-number type="number" v-model="formData.amount" disabled></el-input-number>
+                <el-input-number type="number" v-model="formData.amount"
+                                 disabled class="rt-input"></el-input-number>
             </el-form-item>
             <el-form-item prop="discountAmount" label="折扣">
-                <el-input-number type="number" v-model="formData.discountAmount" disabled></el-input-number>
+                <el-input-number type="number" v-model="formData.discountAmount"
+                                 disabled class="rt-input"></el-input-number>
             </el-form-item>
             <el-form-item prop="signboard" label="招牌">
                 <el-switch v-model="formData.signboard" disabled></el-switch>
@@ -62,21 +74,22 @@
                     <el-option value="SAT">SAT</el-option>
                     <el-option value="SUN">SUN</el-option>
                 </el-select>-->
-                <el-input type="textarea" disabled v-model="formData.week"></el-input>
+                <el-input type="textarea" readonly v-model="formData.week"
+                ></el-input>
             </el-form-item>
-            <el-form-item prop="startTime" label="时间">
+            <el-form-item prop="startTime" label="时间" class="rt-input">
                 <el-time-picker disabled
-                        v-model="formData.startTime"
-                        value-format="HH:mm:ss"
-                        placeholder="选择时间"
+                                v-model="formData.startTime"
+                                value-format="HH:mm:ss"
+                                placeholder="选择时间"
                 >
                 </el-time-picker>
             </el-form-item>
-            <el-form-item prop="endTime" label="时间">
+            <el-form-item prop="endTime" label="时间" class="rt-input">
                 <el-time-picker disabled
-                        v-model="formData.endTime"
-                        value-format="HH:mm:ss"
-                        placeholder="选择时间"
+                                v-model="formData.endTime"
+                                value-format="HH:mm:ss"
+                                placeholder="选择时间"
                 >
                 </el-time-picker>
             </el-form-item>
@@ -173,4 +186,9 @@
     .rt-card /deep/ .el-card__body {
         padding: 4px 15px !important;
     }
+
+    .rt-input /deep/ .el-input__inner {
+        color: #303133 !important;
+        background-color: white;
+    }
 </style>

+ 1 - 0
src/main/vue/src/views/merchant/MerchantEdit.vue

@@ -137,6 +137,7 @@
                 <el-switch v-model="formData.rated"></el-switch>
             </el-form-item>
             <el-form-item>
+                <emil-button style="margin-right: 10px" :userId='formData.userId'></emil-button>
                 <black-button></black-button>
                 <el-button @click="onSave" :loading="saving"
                            type="primary">保存

+ 6 - 6
src/main/vue/src/views/rider/RiderEdit.vue

@@ -3,16 +3,16 @@
         <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
                  style="max-width: 500px;">
             <el-form-item prop="userId" label="昵称">
-                <el-input v-model="formData.user.nickname"></el-input>
+                <el-input v-model="formData.user.nickname" readonly></el-input>
             </el-form-item>
             <el-form-item prop="jobNumber" label="工号">
-                <el-input v-model="formData.jobNumber"></el-input>
+                <el-input v-model="formData.jobNumber" readonly></el-input>
             </el-form-item>
             <el-form-item prop="area" label="区域">
-                <el-input v-model="formData.area"></el-input>
+                <el-input v-model="formData.area" readonly></el-input>
             </el-form-item>
             <el-form-item prop="transportation" label="交通工具">
-                <el-input v-model="formData.transportation"></el-input>
+                <el-input v-model="formData.transportation" readonly></el-input>
             </el-form-item>
             <el-form-item prop="transportationImg" label="交通工具图片">
                 <el-image style="width: 120px; height: 120px"
@@ -66,10 +66,10 @@
                            type="danger" v-if="formData.id">删除
                 </el-button>-->
 
+                <emil-button style="margin-right: 10px" :userId='formData.userId'></emil-button>
                 <black-button></black-button>
-
-                <emil-button></emil-button>
                 <el-button @click="$router.go(-1)">取消</el-button>
+
             </el-form-item>
         </el-form>
 

+ 1 - 1
src/main/vue/src/views/rider/RiderList.vue

@@ -94,7 +94,7 @@
                     fixed="right"
                     min-width="200">
                 <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="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>-->
                     <el-button
                             v-if="row.status === 'PENDING'"

+ 1 - 1
src/main/vue/src/views/user/ComplaintList.vue

@@ -61,7 +61,7 @@
                     fixed="right"
                     min-width="150">
                 <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="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>

+ 2 - 2
src/main/vue/src/views/user/UserEdit.vue

@@ -52,11 +52,11 @@
                 <!--             <el-button @click="del" :loading="$store.state.fetchingData"
                                       type="danger" v-if="formData.id">删除
                            </el-button>-->
-                <black-button></black-button>
+                <black-button :blacklist="formData.blacklist"></black-button>
                 <el-button @click="showCoupon" :loading="$store.state.fetchingData"
                            type="primary" v-if="formData.id">发送优惠券
                 </el-button>
-
+                <emil-button style="margin: 0 10px" :userId='formData.id'></emil-button>
                 <el-button @click="$router.go(-1)">返回</el-button>
             </el-form-item>
         </el-form>

+ 6 - 0
src/test/java/com/izouma/dingdong/contorller/AuthControllerTest.java

@@ -18,4 +18,10 @@ public class AuthControllerTest {
     public void test(){
         System.out.println(controller.loginByRegister("9999", "9999", Identity.RIDER));
     }
+
+    @Test
+    public void test1(){
+        //System.out.println(controller.phoneLogin("+8613365135976", "8831", Identity.ADMIN));
+        System.out.println("+8618205083565".substring(3));
+    }
 }

+ 0 - 1
src/test/java/com/izouma/dingdong/service/ChatServiceTest.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service;
 
-import com.izouma.dingdong.dto.PageQuery;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;

+ 18 - 12
src/test/java/com/izouma/dingdong/service/GoodsServiceTest.java

@@ -32,19 +32,17 @@ import java.util.List;
 public class GoodsServiceTest {
 
     @Autowired
-    private AppraisalService appraisalService;
-
+    private AppraisalService          appraisalService;
     @Autowired
-    private GoodsRepo goodsRepo;
-
+    private GoodsRepo                 goodsRepo;
     @Autowired
-    private GoodsSpecificationRepo goodsSpecificationRepo;
-
+    private GoodsSpecificationRepo    goodsSpecificationRepo;
     @Autowired
     private GoodsSpecificationService goodsSpecificationService;
-
     @Autowired
-    private GoodsController goodsController;
+    private GoodsController           goodsController;
+    @Autowired
+    private GoodsService              goodsService;
 
     @Test
     public void testApp() {
@@ -159,7 +157,8 @@ public class GoodsServiceTest {
         specifications.forEach(s -> {
             GoodsSpecification save;
             if (s.getId() != null) {
-                GoodsSpecification specification = goodsSpecificationRepo.findById(s.getId()).orElseThrow(new BusinessException("无记录"));
+                GoodsSpecification specification = goodsSpecificationRepo.findById(s.getId())
+                        .orElseThrow(new BusinessException("无记录"));
                 ObjUtils.merge(specification, s);
                 save = goodsSpecificationRepo.save(specification);
             } else {
@@ -170,7 +169,8 @@ public class GoodsServiceTest {
                 s.getChildren().forEach(c -> {
                     c.setParent(save.getId());
                     if (c.getId() != null) {
-                        GoodsSpecification specification = goodsSpecificationRepo.findById(s.getId()).orElseThrow(new BusinessException("无记录"));
+                        GoodsSpecification specification = goodsSpecificationRepo.findById(s.getId())
+                                .orElseThrow(new BusinessException("无记录"));
                         ObjUtils.merge(specification, s);
                         goodsSpecificationRepo.save(specification);
                     } else {
@@ -184,7 +184,7 @@ public class GoodsServiceTest {
 
 
     @Test
-    public void testSave(){
+    public void testSave() {
         Goods goods = Goods.builder()
                 //.recommend(true)
                 .signboard(true)
@@ -201,7 +201,13 @@ public class GoodsServiceTest {
     }
 
     @Test
-    public void showAllTest(){
+    public void showAllTest() {
         System.out.println(goodsController.showAll(GoodType.SIGNBOARD_FOOD, 118.734661, 31.981746));
     }
+
+    @Test
+    public void test() {
+
+        System.out.println(goodsService.containsWeek("MONDAY,SATURDAY,SUNDAY,THURSDAY,TUESDAY,WEDNESDAY,FRIDAY", "MONDAY,SATURDAY,SUNDAY,THURSDAY,TUESDAY,WEDNESDAY,FRIDAY"));
+    }
 }

+ 2 - 1
src/test/java/com/izouma/dingdong/service/sms/SmsServiceTest.java

@@ -16,7 +16,8 @@ public class SmsServiceTest extends ApplicationTests {
 
     @Test
     public void verify() throws SmsService.SmsVerifyException {
-        smsService.verify("15077886171", "5274");
+//        smsService.verify("15077886171", "5274");
+        smsService.verify("+8618205083565", "5318");
     }
 
 }

+ 2 - 1
src/test/java/com/izouma/dingdong/service/sms/TencentSmsTest.java

@@ -62,7 +62,8 @@ public class TencentSmsTest {
     public void test1(){
       // smsService.pullSmsSend("+8613182976895");
 //        System.out.println(smsService.sendVerify("+8618205083565","674851"));
-        System.out.println(Pattern.matches(Constants.Regex.PHONE2, "+8618205083565"));
+        //8107015381008
+        System.out.println(Pattern.matches(Constants.Regex.PHONE2, ""));
 
     }
 }