licailing il y a 5 ans
Parent
commit
3e2f453c9a
29 fichiers modifiés avec 710 ajouts et 354 suppressions
  1. 0 7
      src/main/java/com/izouma/dingdong/domain/WithdrawApply.java
  2. 7 4
      src/main/java/com/izouma/dingdong/domain/backstage/BlackList.java
  3. 1 1
      src/main/java/com/izouma/dingdong/domain/backstage/ChatWords.java
  4. 66 0
      src/main/java/com/izouma/dingdong/dto/ApDTO.java
  5. 5 2
      src/main/java/com/izouma/dingdong/dto/AppraisalMerDTO.java
  6. 1 0
      src/main/java/com/izouma/dingdong/dto/AppraisalRidDTO.java
  7. 28 11
      src/main/java/com/izouma/dingdong/service/AppraisalService.java
  8. 6 0
      src/main/java/com/izouma/dingdong/service/SysConfigService.java
  9. 2 0
      src/main/java/com/izouma/dingdong/service/rider/DeliveryFeeService.java
  10. 3 2
      src/main/java/com/izouma/dingdong/service/rider/RiderService.java
  11. 24 4
      src/main/java/com/izouma/dingdong/web/AppraisalController.java
  12. 47 28
      src/main/vue/src/components/EmilButton.vue
  13. 0 16
      src/main/vue/src/router.js
  14. 68 40
      src/main/vue/src/views/AppraisalList.vue
  15. 217 0
      src/main/vue/src/views/AppraisalRidList.vue
  16. 0 91
      src/main/vue/src/views/ChatWordsEdit.vue
  17. 101 24
      src/main/vue/src/views/ChatWordsList.vue
  18. 0 98
      src/main/vue/src/views/FastAppraisalEdit.vue
  19. 71 2
      src/main/vue/src/views/FastAppraisalList.vue
  20. 1 6
      src/main/vue/src/views/backstage/BackUserList.vue
  21. 10 3
      src/main/vue/src/views/backstage/BlackListList.vue
  22. 2 2
      src/main/vue/src/views/backstage/OrderRefundApplyList.vue
  23. 2 2
      src/main/vue/src/views/backstage/TimeTagList.vue
  24. 3 2
      src/main/vue/src/views/backstage/WithdrawApplyList.vue
  25. 14 5
      src/main/vue/src/views/merchant/MerchantList.vue
  26. 5 0
      src/main/vue/src/views/rider/DeliveryFeeList.vue
  27. 9 0
      src/main/vue/src/views/rider/RiderList.vue
  28. 4 4
      src/main/vue/src/views/user/UserEdit.vue
  29. 13 0
      src/test/java/com/izouma/dingdong/service/AppraisalServiceTest.java

+ 0 - 7
src/main/java/com/izouma/dingdong/domain/WithdrawApply.java

@@ -27,13 +27,6 @@ public class WithdrawApply extends BaseEntity {
     @ApiModelProperty(value = "用户ID", name = "userId")
     private Long userId;
 
-    //商户或骑手提现
-//    @ApiModelProperty(value = "其他ID", name = "otherId")
-//    private Long otherId;
-
-//    @ApiModelProperty(value = "工号", name = "jobNumber")
-//    private String jobNumber;
-
     @ApiModelProperty(value = "金额", name = "amount")
     private BigDecimal amount;
 

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

@@ -1,6 +1,7 @@
 package com.izouma.dingdong.domain.backstage;
 
 import com.izouma.dingdong.domain.BaseEntity;
+import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.enums.Identity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -10,10 +11,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.hibernate.annotations.Where;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
+import javax.persistence.*;
 import java.time.LocalDateTime;
 
 @Data
@@ -49,4 +47,9 @@ public class BlackList 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;
+
 }

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

@@ -24,7 +24,7 @@ public class ChatWords extends BaseEntity {
     @Size(min = 1, max = 10)
     private String context;
 
-    //商家话术/骑手话术
+    //0 商家话术/ 1 骑手话术
     @ApiModelProperty("类型")
     private Integer type;
 }

+ 66 - 0
src/main/java/com/izouma/dingdong/dto/ApDTO.java

@@ -0,0 +1,66 @@
+package com.izouma.dingdong.dto;
+
+
+import com.izouma.dingdong.annotations.Searchable;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class ApDTO {
+    private Long id;
+
+    private String nickname;
+
+    private String avatar;
+
+    @ApiModelProperty(value = "商家回复评价", name = "merchantReply")
+    private String merchantReply;
+
+    @ApiModelProperty(value = "商品评价", name = "goodsAppraise")
+    private String goodsAppraise;
+
+    @ApiModelProperty(value = "图片", name = "img")
+    private String img;
+
+    @ApiModelProperty(value = "商品名称", name = "goodsName")
+    private String goodsName;
+
+    @ApiModelProperty(value = "评价日期", name = "appreiseTime")
+    private LocalDateTime appraiseTime;
+
+    @ApiModelProperty(value = "商品评分", name = "goodsLike")
+    private Boolean goodsLike;
+
+/*    @ApiModelProperty(value = "商品评分", name = "goodsScore")
+    private Boolean goodsBad;*/
+
+    @ApiModelProperty(value = "点赞数")
+    private Integer likes;
+
+    @ApiModelProperty(value = "骑手用户名", name = "riderName")
+    private String riderName;
+
+    @ApiModelProperty(value = "内容", name = "content")
+    private List<String> content;
+
+    @ApiModelProperty(value = "骑手评价内容", name = "riderAppraise")
+    private String riderAppraise;
+
+    @ApiModelProperty(value = "商家名称", name = "merShowName")
+    private String merShowName;
+
+    /**
+     * 1-非常差,2-一般,3-超赞
+     */
+    @ApiModelProperty(value = "骑手评分", name = "riderScore")
+    private Integer riderLike;
+}

+ 5 - 2
src/main/java/com/izouma/dingdong/dto/AppraisalMerDTO.java

@@ -8,13 +8,15 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
 public class AppraisalMerDTO {
-    @Searchable
+    private Long id;
+
     private String nickname;
 
     private String avatar;
@@ -34,7 +36,7 @@ public class AppraisalMerDTO {
     @ApiModelProperty(value = "评价日期", name = "appreiseTime")
     private LocalDateTime appraiseTime;
 
-    @ApiModelProperty(value = "商品评分", name = "goodsScore")
+    @ApiModelProperty(value = "商品评分", name = "goodsLike")
     private Boolean goodsLike;
 
 /*    @ApiModelProperty(value = "商品评分", name = "goodsScore")
@@ -42,4 +44,5 @@ public class AppraisalMerDTO {
 
     @ApiModelProperty(value = "点赞数")
     private Integer likes;
+
 }

+ 1 - 0
src/main/java/com/izouma/dingdong/dto/AppraisalRidDTO.java

@@ -14,6 +14,7 @@ import java.util.List;
 @NoArgsConstructor
 @Builder
 public class AppraisalRidDTO {
+    private Long id;
 
     @ApiModelProperty(value = "用户昵称", name = "userNickname")
     private String userNickname;

+ 28 - 11
src/main/java/com/izouma/dingdong/service/AppraisalService.java

@@ -1,5 +1,6 @@
 package com.izouma.dingdong.service;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -7,6 +8,7 @@ import com.izouma.dingdong.converter.LongArrayConverter;
 import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.rider.Rider;
+import com.izouma.dingdong.dto.ApDTO;
 import com.izouma.dingdong.dto.AppraisalMerDTO;
 import com.izouma.dingdong.dto.AppraisalRidDTO;
 import com.izouma.dingdong.dto.ShowAppRidDTO;
@@ -102,17 +104,14 @@ public class AppraisalService {
                 .collect(Collectors.toList());
         String goodsName = collect.stream().map(Goods::getName).collect(Collectors.joining(","));
         User user = order.getUser();
-        return AppraisalMerDTO.builder()
-                .appraiseTime(appraisal.getAppraiseTime())
-                .avatar(user.getAvatar())
-                .goodsAppraise(appraisal.getGoodsAppraise())
-                //.goodsBad(appraisal.getGoodsBad())
-                .goodsLike(appraisal.getGoodsLike())
-                .goodsName(goodsName)
-                .merchantReply(appraisal.getMerchantReply())
-                .nickname(user.getNickname())
-                .img(appraisal.getImg())
-                .build();
+
+        AppraisalMerDTO dto = new AppraisalMerDTO();
+        BeanUtil.copyProperties(appraisal, dto);
+
+        dto.setAvatar(user.getAvatar());
+        dto.setGoodsName(goodsName);
+        dto.setNickname(user.getNickname());
+        return dto;
     }
 
     /**
@@ -163,6 +162,9 @@ public class AppraisalService {
         return appraisals1;
     }
 
+    /*
+    骑手端,自己评价的展示
+     */
     public List<AppraisalRidDTO> showRider(Long riderId) {
         List<Appraisal> appraisals = appraisalRepo.findAllByRiderId(riderId);
         return appraisals.stream().map(this::toRidDTO).collect(Collectors.toList());
@@ -174,6 +176,7 @@ public class AppraisalService {
     public AppraisalRidDTO toRidDTO(Appraisal a) {
         AppraisalRidDTO ridDTO = AppraisalRidDTO
                 .builder()
+                .id(a.getId())
                 .riderLike(a.getRiderLike())
                 .userNickname("匿名")
                 .riderAppraise(a.getRiderAppraise())
@@ -197,6 +200,9 @@ public class AppraisalService {
         return ridDTO;
     }
 
+    /*
+    用户端骑手的展示
+     */
     public ShowAppRidDTO showAppRid(Long riderId) {
         //查处所有骑手评价
         List<Appraisal> appraisals = appraisalRepo.findAllByRiderId(riderId);
@@ -245,4 +251,15 @@ public class AppraisalService {
                 .build();
     }
 
+
+    /*
+    管理后台评价的展示DTO
+     */
+    public ApDTO toDTO(Appraisal appraisal) {
+        ApDTO dto = new ApDTO();
+        BeanUtil.copyProperties(appraisal, dto);
+        BeanUtil.copyProperties(this.toMerDTO(appraisal),dto);
+        BeanUtil.copyProperties(this.toRidDTO(appraisal),dto);
+        return dto;
+    }
 }

+ 6 - 0
src/main/java/com/izouma/dingdong/service/SysConfigService.java

@@ -42,4 +42,10 @@ public class SysConfigService {
                 .orElseThrow(new BusinessException("配置不存在"));
         return new Double(str);
     }
+
+    public Integer getOrderLimit() {
+        String str = sysConfigRepo.findByName("orderLimit").map(SysConfig::getValue)
+                .orElseThrow(new BusinessException("配置不存在"));
+        return new Integer(str);
+    }
 }

+ 2 - 0
src/main/java/com/izouma/dingdong/service/rider/DeliveryFeeService.java

@@ -77,6 +77,8 @@ public class DeliveryFeeService {
         //配送系数
         //商品数是配送系数的几倍 每超出几件+1 向下取整
         double factor = Math.floor(num / factorRule) + 1;
+        //基础费用的倍数
+//        BigDecimal money = new BigDecimal(baseFee.getValue()).multiply(BigDecimal.valueOf(factor));
 
         //当前日期时间
         LocalDateTime now = LocalDateTime.now();

+ 3 - 2
src/main/java/com/izouma/dingdong/service/rider/RiderService.java

@@ -197,7 +197,7 @@ public class RiderService {
             }
 
             List<OrderInfo> infos = orderInfoRepo.findAllByRiderIdAndRiderStatusIsNot(riderId, RiderStatus.CARRY_OUT);
-            if (infos.size() >= 5) {
+            if (infos.size() >= sysConfigService.getOrderLimit()) {
                 throw new BusinessException("未完成订单已达上线");
             }
             //设置订单状态
@@ -227,7 +227,7 @@ public class RiderService {
         Map<Long, Double> map = new HashMap<>();
         //筛查骑手,查出订单数小于5,3000米以内,(支持货到付款)
         locationList.forEach(d -> {
-            if (orderInfoRepo.countByRiderIdAndRiderStatusIsNot(d.getRiderId(), RiderStatus.CARRY_OUT) < 5) {
+            if (orderInfoRepo.countByRiderIdAndRiderStatusIsNot(d.getRiderId(), RiderStatus.CARRY_OUT) < sysConfigService.getOrderLimit()) {
                 boolean t = true;
                 if (cash) {
                     //是否支持货到付款
@@ -323,4 +323,5 @@ public class RiderService {
         BigDecimal account = sysConfigService.getBigDecimal("accountRequirements");
         return account.compareTo(rider.getUser().getMoney()) <= 0;
     }
+
 }

+ 24 - 4
src/main/java/com/izouma/dingdong/web/AppraisalController.java

@@ -1,12 +1,9 @@
 package com.izouma.dingdong.web;
 
 import com.izouma.dingdong.domain.Appraisal;
-import com.izouma.dingdong.dto.AppraisalMerDTO;
-import com.izouma.dingdong.dto.AppraisalRidDTO;
-import com.izouma.dingdong.dto.ShowAppRidDTO;
+import com.izouma.dingdong.dto.*;
 import com.izouma.dingdong.enums.AppraisalSort;
 import com.izouma.dingdong.service.AppraisalService;
-import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.AppraisalRepo;
 import com.izouma.dingdong.utils.ObjUtils;
@@ -14,11 +11,13 @@ import com.izouma.dingdong.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @RestController
@@ -117,5 +116,26 @@ public class AppraisalController extends BaseController {
         return appraisalService.showAppRid(riderId);
     }
 
+    @GetMapping("/merList")
+    @ApiOperation("显示商户的所有评价")
+    public Page<AppraisalMerDTO> merList(PageQuery pageQuery) {
+        Map<String, Object> query = pageQuery.getQuery();
+        Object merchantId = query.get("mid");
+        String id = String.valueOf(merchantId);
+
+        if (Integer.class.equals(merchantId.getClass())) {
+            int mer = Integer.parseInt(id);
+            List<AppraisalMerDTO> all = this.my((long) mer, AppraisalSort.ALL);
+            return new PageImpl<>(all, toPageRequest(pageQuery), all.size());
+        }
+        List<AppraisalMerDTO> all = this.my(Long.valueOf(id), AppraisalSort.ALL);
+        return new PageImpl<>(all, toPageRequest(pageQuery), all.size());
+    }
+
+    @GetMapping("/getDto/{id}")
+    public ApDTO getDto(@PathVariable Long id) {
+        return appraisalService.toDTO(appraisalRepo.findById(id).orElseThrow(new BusinessException("无记录")));
+    }
+
 }
 

+ 47 - 28
src/main/vue/src/components/EmilButton.vue

@@ -1,9 +1,23 @@
 <template>
-    <el-button @click="showDislog=true"
-               type="danger">发送邮件
-    </el-button>
-
-
+    <div>
+        <el-button @click="showDialog=true"
+                   type="danger">发送邮件
+        </el-button>
+         <el-dialog
+                 :visible.sync="showDialog" width="500px">
+             <el-form :model="formData" :rules="rules" ref="form" label-width="52px" label-position="right" size="small">
+                 <el-form-item prop="desc" label="标题">
+                     <el-input v-model="formData.title"></el-input>
+                 </el-form-item>
+                 <el-form-item prop="value" label="内容">
+                     <el-input type="textarea" v-model="formData.content"></el-input>
+                 </el-form-item>
+             </el-form>
+             <span slot="footer">
+                     <el-button type="primary" size="mini" @click="save" :loading="saving">保存</el-button>
+             </span>
+         </el-dialog>
+    </div>
 </template>
 <script>
 
@@ -11,41 +25,46 @@
         data() {
             return {
                 formData: {
-                    receiveUserId: this.$route.query.id
+                    receiveUserId: this.$route.query.id,
+                    title: '',
+                    content: '',
+                },
+                rules: {
+                    title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
+                    content: [{ required: true, message: '请输入值', trigger: 'blur' }]
                 },
-                showDislog:false
+                showDialog: false,
+                saving: false
             }
         },
         mounted() {
 
         },
         methods: {
-            onSave() {
-                this.$refs.form.validate((valid) => {
+            save() {
+                this.$refs.form.validate(valid => {
                     if (valid) {
-                        this.submit();
+                        let data = {...this.formData};
+                        this.saving = true;
+                        this.$http
+                            .post('/rider/save', data, {body: 'json'})
+                            .then(res => {
+                                this.saving = false;
+                                this.$message.success('成功');
+                                this.showDialog = false;
+                                this.getData();
+                            })
+                            .catch(e => {
+                                console.log(e);
+                                this.saving = false;
+                                this.showDialog = false;
+                                this.$message.error(e.error);
+                            });
                     } else {
                         return false;
                     }
                 });
-            },
-            submit() {
-                let data = {...this.formData};
-
-                this.saving = true;
-                this.$http
-                    .post('/rider/save', data, {body: 'json'})
-                    .then(res => {
-                        this.saving = false;
-                        this.$message.success('成功');
-                        this.$router.go(-1);
-                    })
-                    .catch(e => {
-                        console.log(e);
-                        this.saving = false;
-                        this.$message.error(e.error);
-                    });
-            },
+            }
         }
     }
 </script>

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

@@ -287,14 +287,6 @@ const router = new Router({
                        title: '商家性质',
                     },
                },
-                {
-                    path: '/chatWordsEdit',
-                    name: 'ChatWordsEdit',
-                    component: () => import(/* webpackChunkName: "chatWordsEdit" */ '@/views/ChatWordsEdit.vue'),
-                    meta: {
-                       title: '聊天框话术编辑',
-                    },
-                },
                 {
                     path: '/chatWordsList',
                     name: 'ChatWordsList',
@@ -447,14 +439,6 @@ const router = new Router({
                        title: '骑手签到',
                     },
                },
-                {
-                    path: '/fastAppraisalEdit',
-                    name: 'FastAppraisalEdit',
-                    component: () => import(/* webpackChunkName: "fastAppraisalEdit" */ '@/views/FastAppraisalEdit.vue'),
-                    meta: {
-                       title: '骑手快捷评价编辑',
-                    },
-                },
                 {
                     path: '/fastAppraisalList',
                     name: 'FastAppraisalList',

+ 68 - 40
src/main/vue/src/views/AppraisalList.vue

@@ -1,17 +1,17 @@
 <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>
             <el-button @click="getData" type="primary" icon="el-icon-search"
                        class="filter-item">搜索
             </el-button>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus"
-                       class="filter-item">添加
+            <el-button @click="this.$router.go(-1)" type="primary" icon="el-icon-arrow-left"
+                       class="filter-item">返回
             </el-button>
-            <el-button @click="download" type="primary" icon="el-icon-download"
+<!--            <el-button @click="download" type="primary" icon="el-icon-download"
                        :loading="downloading" class="filter-item">导出EXCEL
-            </el-button>
+            </el-button>-->
         </div>
         <el-table :data="tableData" row-key="id" ref="table"
                   header-row-class-name="table-header-row"
@@ -23,34 +23,44 @@
             </el-table-column>
             <el-table-column prop="id" label="ID" width="100">
             </el-table-column>
-                                <el-table-column prop="orderId" label="订单号"
->
-                    </el-table-column>
-                    <el-table-column prop="img" label="图片"
->
-                    </el-table-column>
-                    <el-table-column prop="goodsLike" label="商品评分"
->
-                    </el-table-column>
-                    <el-table-column prop="goodsBad" label="商品评分"
->
-                    </el-table-column>
-                    <el-table-column prop="goodsAppraise" label="商品评价"
->
-                    </el-table-column>
-                    <el-table-column prop="riderScore" label="骑手评分"
->
-                    </el-table-column>
-                    <el-table-column prop="riderAppraise" label="骑手评价"
->
-                    </el-table-column>
-                    <el-table-column prop="merchantReply" label="商家回复评价"
->
-                    </el-table-column>
-                    <el-table-column prop="appraiseTime" label="评价日期"
-                            :formatter="datetimeFormatter"
->
-                    </el-table-column>
+            <el-table-column prop="nickname" label="昵称"
+            >
+            </el-table-column>
+            <el-table-column prop="avatar" label="头像"
+            >
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :src="row.avatar" fit="cover"
+                              :preview-src-list="[row.avatar]"></el-image>
+                </template>
+            </el-table-column>
+            <el-table-column prop="goodsAppraise" label="商品评价"
+            >
+            </el-table-column>
+            <el-table-column prop="img" label="图片"
+            >
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :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="goodsName" label="商品名称"
+            >
+            </el-table-column>
+            <el-table-column prop="goodsLike" label="商品评分"
+            >
+                <template slot-scope="{row}">
+                    <el-tag :type="row.goodsLike?'success':'warning'">{{row.goodsLike?"好评":"差评"}}</el-tag>
+                </template>
+            </el-table-column>
+            <el-table-column prop="merchantReply" label="商家回复评价"
+            >
+            </el-table-column>
+            <el-table-column prop="appraiseTime" label="评价日期"
+                             :formatter="datetimeFormatter"
+            >
+            </el-table-column>
             <el-table-column
                     label="操作"
                     align="center"
@@ -82,7 +92,7 @@
     </div>
 </template>
 <script>
-    import { mapState } from "vuex";
+    import {mapState} from "vuex";
     import pageableTable from "@/mixins/pageableTable";
 
     export default {
@@ -95,7 +105,7 @@
             return {
                 multipleMode: false,
                 search: "",
-                url: "/appraisal/all",
+                url: "/appraisal/merList",
                 downloading: false,
             }
         },
@@ -105,11 +115,29 @@
             }
         },
         methods: {
+            picList(row) {
+                if (row) {
+                    return row.split(",");
+                } else {
+                    return "";
+                }
+            },
             beforeGetData() {
+                let data = {
+                    query: {
+                        mid: this.$route.query.mid,
+                    }
+                };
                 if (this.search) {
-                    return { search: this.search };
+                    data.search = this.search
                 }
+                return data;
             },
+
+            /*          if (this.search) {
+                          return {search: this.search};
+                      }*/
+
             toggleMultipleMode(multipleMode) {
                 this.multipleMode = multipleMode;
                 if (!multipleMode) {
@@ -120,7 +148,7 @@
                 this.$router.push({
                     path: "/appraisalEdit",
                     query: {
-                    ...this.$route.query
+                        ...this.$route.query
                     }
                 });
             },
@@ -128,16 +156,16 @@
                 this.$router.push({
                     path: "/appraisalEdit",
                     query: {
-                    id: row.id
+                        id: row.id
                     }
                 });
             },
             download() {
                 this.downloading = true;
                 this.$axios
-                    .get("/appraisal/excel", { 
+                    .get("/appraisal/excel", {
                         responseType: "blob",
-                        params: { size: 10000 }
+                        params: {size: 10000}
                     })
                     .then(res => {
                         console.log(res);

+ 217 - 0
src/main/vue/src/views/AppraisalRidList.vue

@@ -0,0 +1,217 @@
+<template>
+    <div class="list-view">
+        <div class="filters-container">
+            <el-input placeholder="输入关键字" v-model="search" clearable
+                      class="filter-item"></el-input>
+            <el-button @click="getData" type="primary" icon="el-icon-search"
+                       class="filter-item">搜索
+            </el-button>
+            <el-button @click="this.$router.go(-1)" type="primary" icon="el-icon-arrow-left"
+                       class="filter-item">返回
+            </el-button>
+<!--            <el-button @click="download" type="primary" icon="el-icon-download"
+                       :loading="downloading" class="filter-item">导出EXCEL
+            </el-button>-->
+        </div>
+        <el-table :data="tableData" row-key="id" ref="table"
+                  header-row-class-name="table-header-row"
+                  header-cell-class-name="table-header-cell"
+                  row-class-name="table-row" cell-class-name="table-cell"
+                  :height="tableHeight">
+            <el-table-column v-if="multipleMode" align="center" type="selection"
+                             width="50">
+            </el-table-column>
+            <el-table-column prop="id" label="ID" width="100">
+            </el-table-column>
+            <el-table-column prop="userNickname" label="用户昵称"
+            >
+            </el-table-column>
+            <!--<el-table-column prop="avatar" label="头像"
+            >
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :src="row.avatar" fit="cover"
+                              :preview-src-list="[row.avatar]"></el-image>
+                </template>
+            </el-table-column>-->
+            <el-table-column prop="content" label="内容"
+            >
+            </el-table-column>
+        <!--    <el-table-column prop="img" label="图片"
+            >
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :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="riderAppraise" label="骑手评价内容"
+            >
+            </el-table-column>
+            <el-table-column prop="riderScore" label="骑手评分"
+            >
+                <template slot-scope="{row}">
+                    <el-tag>{{row.riderScore}}</el-tag>
+                </template>
+            </el-table-column>
+            <el-table-column prop="merShowName" label="商家名称"
+            >
+            </el-table-column>
+            <el-table-column prop="data" label="评价日期"
+                             :formatter="datetimeFormatter"
+            >
+            </el-table-column>
+            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150">
+                <template slot-scope="{row}">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <!-- <div class="multiple-mode-wrapper">
+                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button @click="operation1">批量操作1</el-button>
+                    <el-button @click="operation2">批量操作2</el-button>
+                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div> -->
+            <el-pagination background @size-change="onSizeChange"
+                           @current-change="onCurrentChange" :current-page="page"
+                           :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize"
+                           layout="total, sizes, prev, pager, next, jumper"
+                           :total="totalElements">
+            </el-pagination>
+        </div>
+
+    </div>
+</template>
+<script>
+    import {mapState} from "vuex";
+    import pageableTable from "@/mixins/pageableTable";
+
+    export default {
+        name: 'AppraisalList',
+        mixins: [pageableTable],
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                multipleMode: false,
+                search: "",
+                url: "/appraisal/riderList",
+                downloading: false,
+            }
+        },
+        computed: {
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            picList(row) {
+                if (row) {
+                    return row.split(",");
+                } else {
+                    return "";
+                }
+            },
+            beforeGetData() {
+                let data = {
+                    query: {
+                        mid: this.$route.query.mid,
+                    }
+                };
+                if (this.search) {
+                    data.search = this.search
+                }
+                return data;
+            },
+
+            /*          if (this.search) {
+                          return {search: this.search};
+                      }*/
+
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            addRow() {
+                this.$router.push({
+                    path: "/appraisalEdit",
+                    query: {
+                        ...this.$route.query
+                    }
+                });
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: "/appraisalEdit",
+                    query: {
+                        id: row.id
+                    }
+                });
+            },
+            download() {
+                this.downloading = true;
+                this.$axios
+                    .get("/appraisal/excel", {
+                        responseType: "blob",
+                        params: {size: 10000}
+                    })
+                    .then(res => {
+                        console.log(res);
+                        this.downloading = false;
+                        const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                        const link = document.createElement("a");
+                        link.href = downloadUrl;
+                        link.setAttribute(
+                            "download",
+                            res.headers["content-disposition"].split("filename=")[1]
+                        );
+                        document.body.appendChild(link);
+                        link.click();
+                        link.remove();
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.downloading = false;
+                        this.$message.error(e.error);
+                    });
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post(`/appraisal/del/${row.id}`)
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+</style>

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

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

+ 101 - 24
src/main/vue/src/views/ChatWordsList.vue

@@ -1,17 +1,17 @@
 <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>
             <el-button @click="getData" type="primary" icon="el-icon-search"
                        class="filter-item">搜索
             </el-button>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus"
+            <el-button @click="editRow()" type="primary" icon="el-icon-plus"
                        class="filter-item">添加
             </el-button>
-            <el-button @click="download" type="primary" icon="el-icon-download"
-                       :loading="downloading" class="filter-item">导出EXCEL
-            </el-button>
+            <!--            <el-button @click="download" type="primary" icon="el-icon-download"
+                                   :loading="downloading" class="filter-item">导出EXCEL
+                        </el-button>-->
         </div>
         <el-table :data="tableData" row-key="id" ref="table"
                   header-row-class-name="table-header-row"
@@ -23,12 +23,13 @@
             </el-table-column>
             <el-table-column prop="id" label="ID" width="100">
             </el-table-column>
-                                <el-table-column prop="context" label="内容"
->
-                    </el-table-column>
-                    <el-table-column prop="type" label="类型"
->
-                    </el-table-column>
+            <el-table-column prop="context" label="内容"
+            >
+            </el-table-column>
+            <el-table-column prop="type" label="类型"
+                             :formatter="typeFormatter"
+            >
+            </el-table-column>
             <el-table-column
                     label="操作"
                     align="center"
@@ -57,10 +58,29 @@
             </el-pagination>
         </div>
 
+        <el-dialog :visible.sync="showDialog" width="500px">
+            <el-form :model="formData" :rules="rules" ref="form" label-width="52px" label-position="right" size="small">
+                <el-form-item prop="context" label="内容">
+                    <el-input v-model="formData.context"></el-input>
+                </el-form-item>
+                <el-form-item prop="type" label="类型">
+                    <el-select v-model="formData.type"
+                               placeholder="请选择" value-key="name">
+                        <el-option v-for="item in typeOptions" :label="item.label" :value="item.value"
+                                   :key="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <span slot="footer">
+                <el-button type="primary" size="mini" @click="save" :loading="saving">保存</el-button>
+            </span>
+        </el-dialog>
+
     </div>
 </template>
 <script>
-    import { mapState } from "vuex";
+    import {mapState} from "vuex";
     import pageableTable from "@/mixins/pageableTable";
 
     export default {
@@ -75,6 +95,22 @@
                 search: "",
                 url: "/chatWords/all",
                 downloading: false,
+                typeOptions: [{label: "商家话术", value: 0},
+                    {label: "骑手话术", value: 1}],
+                formData: {
+                    type: '',
+                    context: ''
+                },
+                rules: {
+                    context: [
+                        {required: true, message: '请输入内容(不超过9个字)', trigger: 'blur'},
+                    ],
+                    type: [
+                        {required: true, message: '请选择类型', trigger: 'blur'},
+                    ],
+                },
+                showDialog: false,
+                saving: false
             }
         },
         computed: {
@@ -83,9 +119,16 @@
             }
         },
         methods: {
+            typeFormatter(row, column, cellValue, index) {
+                let selectedOption = this.typeOptions.find(i => i.value === cellValue);
+                if (selectedOption) {
+                    return selectedOption.label;
+                }
+                return '';
+            },
             beforeGetData() {
                 if (this.search) {
-                    return { search: this.search };
+                    return {search: this.search};
                 }
             },
             toggleMultipleMode(multipleMode) {
@@ -94,28 +137,38 @@
                     this.$refs.table.clearSelection();
                 }
             },
-            addRow() {
+            /*  addRow() {
+                  this.$router.push({
+                      path: "/chatWordsEdit",
+                      query: {
+                          ...this.$route.query
+                      }
+                  });
+              },*/
+            /*editRow(row) {
                 this.$router.push({
                     path: "/chatWordsEdit",
                     query: {
-                    ...this.$route.query
+                        id: row.id
                     }
                 });
-            },
+            },*/
             editRow(row) {
-                this.$router.push({
-                    path: "/chatWordsEdit",
-                    query: {
-                    id: row.id
-                    }
-                });
+                if (!row) {
+                    row = {
+                        context: '',
+                        type: '',
+                    };
+                }
+                this.formData = row;
+                this.showDialog = true;
             },
             download() {
                 this.downloading = true;
                 this.$axios
-                    .get("/chatWords/excel", { 
+                    .get("/chatWords/excel", {
                         responseType: "blob",
-                        params: { size: 10000 }
+                        params: {size: 10000}
                     })
                     .then(res => {
                         console.log(res);
@@ -160,6 +213,30 @@
                     }
                 })
             },
+            save() {
+                this.$refs.form.validate(valid => {
+                    if (valid) {
+                        let data = {...this.formData};
+                        this.saving = true;
+                        this.$http
+                            .post('/chatWords/save', data, {body: 'json'})
+                            .then(res => {
+                                this.saving = false;
+                                this.$message.success('成功');
+                                this.showDialog = false;
+                                this.getData();
+                            })
+                            .catch(e => {
+                                console.log(e);
+                                this.saving = false;
+                                this.showDialog = false;
+                                this.$message.error(e.error);
+                            });
+                    } else {
+                        return false;
+                    }
+                });
+            }
         }
     }
 </script>

+ 0 - 98
src/main/vue/src/views/FastAppraisalEdit.vue

@@ -1,98 +0,0 @@
-<template>
-    <div class="edit-view">
-        <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
-                 style="max-width: 500px;">
-            <el-form-item prop="content" label="内容">
-                <el-input v-model="formData.content"></el-input>
-            </el-form-item>
-            <el-form-item prop="type" label="评价类型">
-                <el-select v-model="formData.type" clearable filterable placeholder="请选择">
-                    <el-option
-                            v-for="item in typeOptions"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value">
-                    </el-option>
-                </el-select>
-            </el-form-item>
-            <el-form-item>
-                <el-button @click="onSave" :loading="saving"
-                           type="primary">保存
-                </el-button>
-                <el-button @click="onDelete" :loading="saving"
-                           type="danger" v-if="formData.id">删除
-                </el-button>
-                <el-button @click="$router.go(-1)">取消</el-button>
-            </el-form-item>
-        </el-form>
-    </div>
-</template>
-<script>
-    export default {
-        name: 'FastAppraisalEdit',
-        created() {
-            if (this.$route.query.id) {
-                this.$http
-                    .get('fastAppraisal/get/' + this.$route.query.id)
-                    .then(res => {
-                        this.formData = res;
-                    })
-                    .catch(e => {
-                        console.log(e);
-                        this.$message.error(e.error);
-                    });
-            }
-        },
-        data() {
-            return {
-                saving: false,
-                formData: {},
-                rules: {},
-                typeOptions: [{label: "非常差", value: 1}, {label: "一般", value: 2}, {label: "超赞", value: 3}],
-            }
-        },
-        methods: {
-            onSave() {
-                this.$refs.form.validate((valid) => {
-                    if (valid) {
-                        this.submit();
-                    } else {
-                        return false;
-                    }
-                });
-            },
-            submit() {
-                let data = {...this.formData};
-
-                this.saving = true;
-                this.$http
-                    .post('/fastAppraisal/save', data, {body: 'json'})
-                    .then(res => {
-                        this.saving = false;
-                        this.$message.success('成功');
-                        this.$router.go(-1);
-                    })
-                    .catch(e => {
-                        console.log(e);
-                        this.saving = false;
-                        this.$message.error(e.error);
-                    });
-            },
-            onDelete() {
-                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
-                    return this.$http.post(`/fastAppraisal/del/${this.formData.id}`)
-                }).then(() => {
-                    this.$message.success('删除成功');
-                    this.$router.go(-1);
-                }).catch(e => {
-                    if (e !== 'cancel') {
-                        console.log(e);
-                        this.$message.error(e.error);
-                    }
-                })
-            },
-        }
-    }
-</script>
-<style lang="less" scoped>
-</style>

+ 71 - 2
src/main/vue/src/views/FastAppraisalList.vue

@@ -6,7 +6,7 @@
             <el-button @click="getData" type="primary" icon="el-icon-search"
                        class="filter-item">搜索
             </el-button>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus"
+            <el-button @click="editRow()" type="primary" icon="el-icon-plus"
                        class="filter-item">添加
             </el-button>
         </div>
@@ -55,6 +55,27 @@
             </el-pagination>
         </div>
 
+        <el-dialog :visible.sync="showDialog" width="560px">
+            <el-form :model="formData" :rules="rules" ref="form" label-width="52px" label-position="right" size="small">
+                <el-form-item prop="content" label="内容">
+                    <el-input v-model="formData.content"></el-input>
+                </el-form-item>
+                <el-form-item prop="type" label="类型">
+                    <el-select v-model="formData.type" clearable filterable placeholder="请选择">
+                        <el-option
+                                v-for="item in typeOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <span slot="footer">
+                <el-button type="primary" size="mini" @click="save" :loading="saving">保存</el-button>
+            </span>
+        </el-dialog>
+
     </div>
 </template>
 <script>
@@ -74,6 +95,20 @@
                 url: "/fastAppraisal/all",
                 downloading: false,
                 typeOptions: [{label: "非常差", value: 1}, {label: "一般", value: 2}, {label: "超赞", value: 3}],
+                formData: {
+                    content: '',
+                    type: '',
+                },
+                rules: {
+                    content: [
+                        {required: true, message: '请输入(不超过9个字)', trigger: 'blur'},
+                    ],
+                    type: [
+                        {required: true, message: '请选择类型', trigger: 'blur'},
+                    ],
+                },
+                showDialog: false,
+                saving: false,
             }
         },
         computed: {
@@ -100,7 +135,7 @@
                     this.$refs.table.clearSelection();
                 }
             },
-            addRow() {
+            /*addRow() {
                 this.$router.push({
                     path: "/fastAppraisalEdit",
                     query: {
@@ -115,6 +150,40 @@
                         id: row.id
                     }
                 });
+            },*/
+            editRow(row) {
+                if (!row) {
+                    row = {
+                        content: '',
+                        type: '',
+                    };
+                }
+                this.formData = row;
+                this.showDialog = true;
+            },
+            save() {
+                this.$refs.form.validate(valid => {
+                    if (valid) {
+                        let data = {...this.formData};
+                        this.saving = true;
+                        this.$http
+                            .post('/fastAppraisal/save', data, {body: 'json'})
+                            .then(res => {
+                                this.saving = false;
+                                this.$message.success('成功');
+                                this.showDialog = false;
+                                this.getData();
+                            })
+                            .catch(e => {
+                                console.log(e);
+                                this.saving = false;
+                                this.showDialog = false;
+                                this.$message.error(e.error);
+                            });
+                    } else {
+                        return false;
+                    }
+                });
             },
             download() {
                 this.downloading = true;

+ 1 - 6
src/main/vue/src/views/backstage/BackUserList.vue

@@ -28,11 +28,6 @@
                 </template>
             </el-table-column>
             <el-table-column prop="username" label="用户名" min-width="100">
-                <template slot="header" slot-scope="{column}">
-                    <sortable-header :column="column" :current-sort="sort"
-                        @changeSort="changeSort">
-                    </sortable-header>
-                </template>
             </el-table-column>
             <el-table-column prop="nickname" label="昵称" min-width="100">
             </el-table-column>
@@ -45,7 +40,7 @@
             </el-table-column>
             <el-table-column prop="authorities" label="权限" min-width="100" >
                 <template slot-scope="{ row }" >
-                    <el-tag  v-for="item in row.authorities"
+                    <el-tag v-for="item in row.authorities"
                              :key="item.name"
                              >{{ item.description }}</el-tag>
                 </template>

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

@@ -38,12 +38,19 @@
             </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="otherId" label="其他ID"
-            >
+            <el-table-column label="头像" min-width="150">
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :src="row.user.avatar" fit="cover"
+                              :preview-src-list="[row.user.avatar]"></el-image>
+                </template>
             </el-table-column>
+<!--            <el-table-column prop="otherId" label="其他ID"
+            >
+            </el-table-column>-->
             <el-table-column prop="identity" label="身份"
                              :formatter="identityFormatter">
 

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

@@ -156,7 +156,7 @@
         <el-dialog
                 title="退款"
                 center
-                :visible.sync="dislogForm"
+                :visible.sync="dialogForm"
                 width="400px"
         >
             <el-form>
@@ -218,7 +218,7 @@
                     {"label": "用户投诉", "value": "USER_COMPLAINTS"},
                     {"label": "其他原因", "value": "OTHER"}],
                 status: '',
-                dislogForm: false,
+                dialogForm: false,
                 merchantLiability: 0,
                 riderLiability: 0,
                 remark: '',

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

@@ -9,9 +9,9 @@
             <el-button @click="addRow" type="primary" icon="el-icon-plus"
                        class="filter-item">添加
             </el-button>
-            <el-button @click="download" type="primary" icon="el-icon-download"
+            <!--<el-button @click="download" type="primary" icon="el-icon-download"
                        :loading="downloading" class="filter-item">导出EXCEL
-            </el-button>
+            </el-button>-->
         </div>
         <el-table :data="tableData" row-key="id" ref="table"
                   header-row-class-name="table-header-row"

+ 3 - 2
src/main/vue/src/views/backstage/WithdrawApplyList.vue

@@ -22,8 +22,9 @@
             cell-class-name="table-cell"
             :height="tableHeight"
         >
-            <el-table-column prop="id" label="ID" width="100"> </el-table-column>
-            <el-table-column prop="userId" label="用户ID"> </el-table-column>
+<!--            <el-table-column prop="id" label="ID" width="100"> </el-table-column>-->
+            <el-table-column prop="status" label="状态" :formatter="statusFormatter"> </el-table-column>
+<!--            <el-table-column prop="userId" label="用户ID"> </el-table-column>-->
             <el-table-column prop="bankCard.realName" label="真实姓名"> </el-table-column>
             <el-table-column prop="bankCard.phone" label="电话"> </el-table-column>
             <el-table-column prop="bankCard.bankName" label="银行"> </el-table-column>

+ 14 - 5
src/main/vue/src/views/merchant/MerchantList.vue

@@ -9,9 +9,9 @@
             <el-button @click="addRow" type="primary" icon="el-icon-plus"
                        class="filter-item">添加
             </el-button>
-            <el-button @click="download" type="primary" icon="el-icon-download"
+            <!--<el-button @click="download" type="primary" icon="el-icon-download"
                        :loading="downloading" class="filter-item">导出EXCEL
-            </el-button>
+            </el-button>-->
 
             <!--            <el-button >新店</el-button>-->
             <el-select v-model="status" class="filter-item" placeholder="筛选状态" clearable filterable
@@ -118,7 +118,7 @@
                 <template slot-scope="{ row }">
                     <el-button @click="showDrawer(row)" type="success" size="mini" plain>详情</el-button>
                     <el-button @click="" type="primary" size="mini" plain v-if="row.isPass">报表</el-button>
-                    <el-button @click="" type="primary" size="mini" plain v-if="row.isPass">评价</el-button>
+                    <el-button @click="showAppraisal(row)" type="primary" size="mini" plain v-if="row.isPass">评价</el-button>
                     <el-button
                             v-if="row.status === 'PENDING'"
                             :loading="row.loading"
@@ -447,9 +447,9 @@
             },
             audit(row, pass) {
                 let remark;
-                if (pass){
+                if (pass) {
                     remark = '请输入推广语(最多15字)';
-                }else {
+                } else {
                     remark = '请输入不通过理由'
                 }
                 this.$prompt(remark, '提示', {
@@ -499,6 +499,15 @@
                         this.$message.error(e.error);
                     });*/
             },
+
+            showAppraisal(row) {
+                this.$router.push({
+                    path: "/appraisalList",
+                    query: {
+                        mid: row.mid
+                    }
+                });
+            },
         }
     }
 </script>

+ 5 - 0
src/main/vue/src/views/rider/DeliveryFeeList.vue

@@ -23,6 +23,11 @@
             <el-table-column prop="type" label="类型"
                              :formatter="typeFormatter"
             >
+                <template slot="header" slot-scope="{column}">
+                    <sortable-header :column="column" :current-sort="sort"
+                                     @changeSort="changeSort">
+                    </sortable-header>
+                </template>
             </el-table-column>
             <el-table-column prop="rule" label="规则"
             >

+ 9 - 0
src/main/vue/src/views/rider/RiderList.vue

@@ -115,6 +115,7 @@
                     >拒绝
                     </el-button
                     >
+                    <el-button @click="showAppraisal(row)" type="primary" size="mini" plain v-if="row.status==='PASS'">评价</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -285,6 +286,14 @@
                     .catch(() => {
                     });
             },
+            showAppraisal(row) {
+                this.$router.push({
+                    path: "/appraisalList",
+                    query: {
+                        mid: row.mid
+                    }
+                });
+            },
         }
     }
 </script>

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

@@ -49,7 +49,7 @@
         <el-dialog
                 title="优惠券列表"
                 center
-                :visible.sync="dislogTableCoupon"
+                :visible.sync="dialogTableCoupon"
         >
             <el-table :data="coupons" ref="table">
                 <el-table-column align="center" type="selection"
@@ -72,7 +72,7 @@
         <el-dialog
                 title="订单列表"
                 center
-                :visible.sync="dislogTableOrder"
+                :visible.sync="dialogTableOrder"
         >
             <el-table :data="orders" ref="table">
                 <el-table-column prop="merchant.showName" label="商家"></el-table-column>
@@ -139,10 +139,10 @@
                                         { required: true, message: '请选择角色', trigger: 'blur' },
                                     ],*/
                 },
-                dislogTableCoupon: false,
+                dialogTableCoupon: false,
                 coupons: [],
                 // authorities: [],
-                dislogTableOrder: false,
+                dialogTableOrder: false,
                 orders: [],
 
             };

+ 13 - 0
src/test/java/com/izouma/dingdong/service/AppraisalServiceTest.java

@@ -1,6 +1,7 @@
 package com.izouma.dingdong.service;
 
 import com.izouma.dingdong.domain.Appraisal;
+import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.enums.AppraisalSort;
 import com.izouma.dingdong.repo.AppraisalRepo;
 import com.izouma.dingdong.web.AppraisalController;
@@ -10,6 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.HashMap;
+import java.util.Map;
+
 @SpringBootTest
 @RunWith(SpringRunner.class)
 public class AppraisalServiceTest {
@@ -58,4 +62,13 @@ public class AppraisalServiceTest {
     public void testRiderShow(){
         System.out.println(appraisalService.showAppRid(2006L));
     }
+
+    @Test
+    public void testM(){
+        PageQuery pageQuery = new PageQuery();
+        Map<String,Object> query = new HashMap<>();
+        query.put("merchantId",1252);
+        pageQuery.setQuery(query);
+        System.out.println(appraisalController.merList(pageQuery));
+    }
 }