Kaynağa Gözat

管理后台修改,短信

licailing 5 yıl önce
ebeveyn
işleme
db69ef58f4
27 değiştirilmiş dosya ile 252 ekleme ve 100 silme
  1. 6 2
      src/main/java/com/izouma/dingdong/domain/user/Feedback.java
  2. 40 0
      src/main/java/com/izouma/dingdong/dto/EmailDTO.java
  3. 1 0
      src/main/java/com/izouma/dingdong/service/UserService.java
  4. 22 2
      src/main/java/com/izouma/dingdong/service/backstage/EmailService.java
  5. 12 8
      src/main/java/com/izouma/dingdong/service/sms/AliSmsService.java
  6. 3 3
      src/main/java/com/izouma/dingdong/service/sms/TencentSmsService.java
  7. 13 2
      src/main/java/com/izouma/dingdong/web/backstage/EmailController.java
  8. 2 1
      src/main/java/com/izouma/dingdong/web/merchant/MerchantController.java
  9. 2 1
      src/main/vue/src/components/BlackButton.vue
  10. 6 4
      src/main/vue/src/components/EmilButton.vue
  11. 9 4
      src/main/vue/src/views/AppraisalEdit.vue
  12. 1 1
      src/main/vue/src/views/AppraisalRidList.vue
  13. 32 21
      src/main/vue/src/views/FeedbackEdit.vue
  14. 11 4
      src/main/vue/src/views/FeedbackList.vue
  15. 6 3
      src/main/vue/src/views/Login.vue
  16. 10 1
      src/main/vue/src/views/backstage/BlackListList.vue
  17. 3 3
      src/main/vue/src/views/backstage/PromoteEdit.vue
  18. 34 16
      src/main/vue/src/views/merchant/GoodsEdit.vue
  19. 1 0
      src/main/vue/src/views/merchant/MerchantEdit.vue
  20. 6 6
      src/main/vue/src/views/rider/RiderEdit.vue
  21. 1 1
      src/main/vue/src/views/rider/RiderList.vue
  22. 1 1
      src/main/vue/src/views/user/ComplaintList.vue
  23. 2 2
      src/main/vue/src/views/user/UserEdit.vue
  24. 6 0
      src/test/java/com/izouma/dingdong/contorller/AuthControllerTest.java
  25. 18 12
      src/test/java/com/izouma/dingdong/service/GoodsServiceTest.java
  26. 2 1
      src/test/java/com/izouma/dingdong/service/sms/SmsServiceTest.java
  27. 2 1
      src/test/java/com/izouma/dingdong/service/sms/TencentSmsTest.java

+ 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;
 }

+ 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;
+
+}

+ 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;
+    }
 }

+ 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;

+ 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>

+ 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));
+    }
 }

+ 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, ""));
 
     }
 }