licailing 5 lat temu
rodzic
commit
5b265071f8
28 zmienionych plików z 362 dodań i 697 usunięć
  1. 0 7
      pom.xml
  2. 3 3
      src/main/java/com/izouma/dingdong/domain/OrderInfo.java
  3. 2 1
      src/main/java/com/izouma/dingdong/domain/merchant/Sales.java
  4. 31 0
      src/main/java/com/izouma/dingdong/dto/SalesDTO.java
  5. 6 0
      src/main/java/com/izouma/dingdong/repo/MoneyRecordRepo.java
  6. 4 0
      src/main/java/com/izouma/dingdong/repo/merchant/SalesRepo.java
  7. 21 0
      src/main/java/com/izouma/dingdong/service/MoneyRecordService.java
  8. 3 0
      src/main/java/com/izouma/dingdong/service/OrderInfoService.java
  9. 1 0
      src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java
  10. 95 10
      src/main/java/com/izouma/dingdong/service/merchant/SalesService.java
  11. 13 7
      src/main/java/com/izouma/dingdong/web/AppraisalController.java
  12. 3 6
      src/main/java/com/izouma/dingdong/web/OrderInfoController.java
  13. 10 3
      src/main/java/com/izouma/dingdong/web/merchant/SalesController.java
  14. 16 32
      src/main/vue/src/router.js
  15. 27 10
      src/main/vue/src/views/AppraisalEdit.vue
  16. 1 1
      src/main/vue/src/views/AppraisalList.vue
  17. 24 15
      src/main/vue/src/views/AppraisalRidList.vue
  18. 4 4
      src/main/vue/src/views/OrderInfoEdit.vue
  19. 0 94
      src/main/vue/src/views/merchant/CategoryEdit.vue
  20. 0 170
      src/main/vue/src/views/merchant/CategoryList.vue
  21. 22 6
      src/main/vue/src/views/merchant/MerchantList.vue
  22. 3 3
      src/main/vue/src/views/rider/RiderList.vue
  23. 0 124
      src/main/vue/src/views/user/ShoppingCartEdit.vue
  24. 0 200
      src/main/vue/src/views/user/ShoppingCartList.vue
  25. 47 0
      src/main/vue/src/widgets/Report.vue
  26. 5 0
      src/test/java/com/izouma/dingdong/repo/SalesRepoTest.java
  27. 1 1
      src/test/java/com/izouma/dingdong/service/AppraisalServiceTest.java
  28. 20 0
      src/test/java/com/izouma/dingdong/service/SalesServiceTest.java

+ 0 - 7
pom.xml

@@ -279,13 +279,6 @@
             <version>1.1</version>
         </dependency>
 
-<!--
-        <dependency>
-            <groupId>com.tencentcloudapi</groupId>
-            <artifactId>tencentcloud-sdk-java</artifactId>
-            <version>3.1.62</version>
-        </dependency>
--->
         <dependency>
             <groupId>com.tencentcloudapi</groupId>
             <artifactId>tencentcloud-sdk-java</artifactId>

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

@@ -65,10 +65,10 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "新用户", name = "newUser")
     private BigDecimal newUser;
 
-    @ApiModelProperty(value = "总价", name = "totalAmount")
-    private BigDecimal totalAmount;
+//    @ApiModelProperty(value = "总价", name = "totalAmount")
+//    private BigDecimal totalAmount;
 
-//    @ApiModelProperty(value = "商品总价", name = "goodsAmount")
+//    @ApiModelProperty(value = "实付商品总价", name = "goodsAmount")
 //    private BigDecimal goodsAmount;
 
     @ApiModelProperty(value = "实付金额", name = "realAmount")

+ 2 - 1
src/main/java/com/izouma/dingdong/domain/merchant/Sales.java

@@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
 
 import javax.persistence.*;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.LocalDate;
 
 @Data
@@ -18,7 +19,7 @@ import java.time.LocalDate;
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
-@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})
+@JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
 @ApiModel(value = "Sales", description = "销售额表")
 public class Sales extends BaseEntity implements Serializable {
 

+ 31 - 0
src/main/java/com/izouma/dingdong/dto/SalesDTO.java

@@ -0,0 +1,31 @@
+package com.izouma.dingdong.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@ApiModel(description = "展示报表")
+public class SalesDTO {
+
+    private String name;
+
+    //点赞数
+    private Integer likes;
+
+    //差评数
+    private Integer bad;
+
+    //销量
+    private Integer sale;
+
+    //收入
+    private BigDecimal income;
+}

+ 6 - 0
src/main/java/com/izouma/dingdong/repo/MoneyRecordRepo.java

@@ -9,15 +9,21 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
 public interface MoneyRecordRepo extends JpaRepository<MoneyRecord, Long>, JpaSpecificationExecutor<MoneyRecord> {
     List<MoneyRecord> findAllByUserId(Long userId);
 
+    List<MoneyRecord> findAllByUserIdAndTimeBetween(Long userId, LocalDateTime start, LocalDateTime end);
+
     Page<MoneyRecord> findAllByUserId(Long userId, Pageable pageable);
 
     @Query("update MoneyRecord t set t.enabled = false where t.id = ?1")
     @Modifying
     @Transactional
     void deleteById(Long id);
+
+
 }

+ 4 - 0
src/main/java/com/izouma/dingdong/repo/merchant/SalesRepo.java

@@ -12,6 +12,8 @@ public interface SalesRepo extends JpaRepository<Sales, Long>, JpaSpecificationE
 
     List<Sales> findAllByGoodsId(Long goodsId);
 
+    List<Sales> findAllByMerchantId(Long merchantId);
+
     //查找商品当天的销量
     Sales findByGoodsIdAndDay(Long goodsId, LocalDate day);
 
@@ -21,6 +23,8 @@ public interface SalesRepo extends JpaRepository<Sales, Long>, JpaSpecificationE
     //找出时间段内销量
     List<Sales> findAllByGoodsIdAndDayBetween(Long goodsId, LocalDate start, LocalDate end);
 
+    //List<Sales> findAllByMerchantIdAndDayBetween(Long merchantId, LocalDate start, LocalDate end);
+
     List<Sales> findAllByDay(LocalDate day);
 
     //好评商品

+ 21 - 0
src/main/java/com/izouma/dingdong/service/MoneyRecordService.java

@@ -10,6 +10,9 @@ import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
 
 @Service
 @AllArgsConstructor
@@ -32,4 +35,22 @@ public class MoneyRecordService {
                 .remark(remark)
                 .build());
     }
+
+    /*
+    算收入
+     */
+    public BigDecimal income(Long userId, LocalDateTime start, LocalDateTime end) {
+
+        List<MoneyRecord> records = moneyRecordRepo.findAllByUserIdAndTimeBetween(userId, start, end);
+        BigDecimal money = BigDecimal.ZERO;
+        for (MoneyRecord m : records) {
+            if (FinancialType.INCOME.equals(m.getType())) {
+                money = money.add(m.getAmount());
+            } else {
+                money = money.subtract(m.getAmount());
+            }
+        }
+
+        return money;
+    }
 }

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

@@ -100,6 +100,7 @@ public class OrderInfoService {
         orderInfo.setCancel(false);
         orderInfo.setOrderTime(now);
         orderInfo.setEnabled(true);
+//        orderInfo.setGoodsAmount(cart.getRealAmount().subtract(cart.getDeliveryAmount()));
 
         //如果未设置预计到达为15分钟
         if (ObjectUtil.isEmpty(merchantSettings.getPreparationTime())) {
@@ -160,6 +161,8 @@ public class OrderInfoService {
                     orderInfo.setRedBag(coupon.getAmount());
                     orderInfo.setUserCouponId(userCoupon.getId());
                     orderInfo.setRealAmount(orderInfo.getRealAmount().subtract(orderInfo.getRedBag()));
+                    //实付商品价格
+//                    orderInfo.setGoodsAmount(orderInfo.getGoodsAmount().subtract(orderInfo.getRedBag()));
 
                     userCoupon.setIsUsed(true);
                     userCoupon.setUsedTime(now);

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

@@ -245,6 +245,7 @@ public class OrderRefundApplyService {
 
         //实付减运费
         BigDecimal subtractDelivery = orderInfo.getRealAmount().subtract(orderInfo.getDeliveryAmount());
+//        BigDecimal subtractDelivery = orderInfo.getGoodsAmount();
         //平台抽成 (实付金额减运费)
         BigDecimal platform = subtractDelivery.multiply(commission);
 

+ 95 - 10
src/main/java/com/izouma/dingdong/service/merchant/SalesService.java

@@ -1,36 +1,41 @@
 package com.izouma.dingdong.service.merchant;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.Appraisal;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.OrderInfo;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.Sales;
+import com.izouma.dingdong.dto.SalesDTO;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
 import com.izouma.dingdong.repo.merchant.MerchantClassificationRepo;
+import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.SalesRepo;
+import com.izouma.dingdong.service.MoneyRecordService;
 import lombok.AllArgsConstructor;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 
 @Service
 @AllArgsConstructor
 public class SalesService {
 
-    private SalesRepo salesRepo;
-
-    private MerchantClassificationRepo merchantClassificationRepo;
-
-    private OrderGoodsSpecRepo orderGoodsSpecRepo;
-
-    private GoodsRepo goodsRepo;
-
+    private SalesRepo                     salesRepo;
+    private MerchantClassificationRepo    merchantClassificationRepo;
+    private OrderGoodsSpecRepo            orderGoodsSpecRepo;
+    private GoodsRepo                     goodsRepo;
     private MerchantClassificationService merchantClassificationService;
+    private MoneyRecordService            moneyRecordService;
+    private MerchantRepo                  merchantRepo;
 
     /*
     下订单时插入销量
@@ -43,10 +48,8 @@ public class SalesService {
                 spec -> {
                     //查商品销量表的销量数据
                     Sales daySales = this.newSales(spec.getGoodsId(), LocalDate.now());
-
                     //有订单,销量 + 购买数量
                     daySales.setDaySales(daySales.getDaySales() + spec.getNum());
-
                     //保存
                     salesRepo.save(daySales);
                 }
@@ -188,4 +191,86 @@ public class SalesService {
         return daySales;
     }
 
+    /*
+    商家报表
+     */
+    public List<SalesDTO> merchantReport(Long merchantId) {
+
+        List<SalesDTO> dtos = new ArrayList<>();
+
+        LocalDateTime nowDateTime = LocalDateTime.now();
+        LocalDate nowDate = nowDateTime.toLocalDate();
+        int year = nowDate.getYear();
+        int month = nowDate.getMonthValue();
+        LocalDateTime dateTime = LocalDateTime.of(year, month, 1, 0, 0, 0);
+
+        Long userId = merchantRepo.findById(merchantId).orElseThrow(new BusinessException("无商户")).getUserId();
+        //日点赞数 差评数 销量
+        Integer dayLikes = 0;
+        Integer dayBad = 0;
+        Integer daySales = 0;
+        //今日报表
+        Sales sales = salesRepo.findByMerchantIdAndDay(merchantId, nowDate);
+        if (ObjectUtil.isNotEmpty(sales)) {
+            dayLikes = sales.getDayLikes();
+            dayBad = sales.getDayBad();
+            daySales = sales.getDaySales();
+        }
+
+        BigDecimal dayIncome = moneyRecordService.income(userId, nowDateTime, nowDateTime);
+
+        dtos.add(SalesDTO.builder()
+                .bad(dayBad)
+                .likes(dayLikes)
+                .sale(daySales)
+                .income(dayIncome)
+                .name("本日报表")
+                .build());
+
+        //月点赞数 差评数 销量
+        Integer monthLikes = 0;
+        Integer monthBad = 0;
+        Integer monthSales = 0;
+        //所有点赞数 差评数 销量
+        Integer allLikes = 0;
+        Integer allBad = 0;
+        Integer allSales = 0;
+
+        List<Sales> allDaySales = salesRepo.findAllByMerchantId(merchantId);
+        for (Sales s : allDaySales) {
+            if (s.getDay().isBefore(dateTime.toLocalDate())) {
+                monthSales += s.getDaySales();
+                monthLikes += s.getDayLikes();
+                monthBad += s.getDayBad();
+            }
+            allLikes += s.getDaySales();
+            allBad += s.getDayLikes();
+            allSales += s.getDayBad();
+        }
+
+        //月收入
+        BigDecimal monthIncome = moneyRecordService.income(userId, dateTime, nowDateTime);
+        dtos.add(SalesDTO.builder()
+                .name("本月报表")
+                .bad(monthBad)
+                .likes(monthLikes)
+                .sale(monthSales)
+                .income(monthIncome)
+                .build());
+
+        //所有收入
+        LocalDateTime lastTime = LocalDateTime.of(2020, 7, 1, 0, 0, 0);
+        BigDecimal allIncome = moneyRecordService.income(userId, lastTime, nowDateTime);
+        dtos.add(SalesDTO.builder()
+                .name("所有报表")
+                .income(allIncome)
+                .sale(allSales)
+                .likes(allLikes)
+                .bad(allBad)
+                .build());
+
+        return dtos;
+
+    }
+
 }

+ 13 - 7
src/main/java/com/izouma/dingdong/web/AppraisalController.java

@@ -116,22 +116,28 @@ public class AppraisalController extends BaseController {
         return appraisalService.showAppRid(riderId);
     }
 
-    @GetMapping("/merList")
+    @GetMapping("/merPage")
     @ApiOperation("显示商户的所有评价")
-    public Page<AppraisalMerDTO> merList(PageQuery pageQuery) {
+    public Page<AppraisalMerDTO> merPage(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("/ridPage")
+    @ApiOperation("显示商户的所有评价")
+    public Page<AppraisalRidDTO> ridPage(PageQuery pageQuery) {
+        Map<String, Object> query = pageQuery.getQuery();
+        Object rider = query.get("rid");
+        String id = String.valueOf(rider);
+
+        List<AppraisalRidDTO> all = this.riderList(Long.valueOf(id));
+        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("无记录")));

+ 3 - 6
src/main/java/com/izouma/dingdong/web/OrderInfoController.java

@@ -7,10 +7,7 @@ import com.izouma.dingdong.domain.OrderInfo;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.dto.OrderInfoDTO;
 import com.izouma.dingdong.dto.UserOrderDTO;
-import com.izouma.dingdong.enums.Identity;
-import com.izouma.dingdong.enums.MerchantStatus;
-import com.izouma.dingdong.enums.OrderStatus;
-import com.izouma.dingdong.enums.RefundReason;
+import com.izouma.dingdong.enums.*;
 import com.izouma.dingdong.repo.AppraisalRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.rider.RiderRepo;
@@ -141,8 +138,8 @@ public class OrderInfoController extends BaseController {
 
     @PostMapping("/riderStatus")
     @ApiOperation("骑手改变状态")
-    public void riderStatus(Long orderId, Boolean pass) {
-//        orderInfoService.riderCarryOut(orderId, pass);
+    public void riderStatus(Long orderId, RiderStatus status, Double longitude, Double latitude) {
+        orderInfoService.riderCarryOut(orderId, status, longitude, latitude);
     }
 
     @GetMapping("/allAmount")

+ 10 - 3
src/main/java/com/izouma/dingdong/web/merchant/SalesController.java

@@ -1,5 +1,6 @@
 package com.izouma.dingdong.web.merchant;
 
+import com.izouma.dingdong.dto.SalesDTO;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.merchant.Sales;
 import com.izouma.dingdong.service.merchant.SalesService;
@@ -9,9 +10,9 @@ import com.izouma.dingdong.repo.merchant.SalesRepo;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -23,7 +24,7 @@ import java.util.List;
 @AllArgsConstructor
 public class SalesController extends BaseController {
     private SalesService salesService;
-    private SalesRepo salesRepo;
+    private SalesRepo    salesRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -40,7 +41,7 @@ public class SalesController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/all")
     public Page<Sales> all(PageQuery pageQuery) {
-        return salesRepo.findAll(toSpecification(pageQuery,Sales.class), toPageRequest(pageQuery));
+        return salesRepo.findAll(toSpecification(pageQuery, Sales.class), toPageRequest(pageQuery));
     }
 
     @GetMapping("/get/{id}")
@@ -59,5 +60,11 @@ public class SalesController extends BaseController {
         List<Sales> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @GetMapping("/report")
+    @ApiOperation("销售报表")
+    public List<SalesDTO> report(Long mid) {
+        return salesService.merchantReport(mid);
+    }
 }
 

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

@@ -110,22 +110,6 @@ const router = new Router({
                     meta: {
                        title: '商品每日销售',
                     },
-               },
-                {
-                    path: '/categoryEdit',
-                    name: 'CategoryEdit',
-                    component: () => import(/* webpackChunkName: "categoryEdit" */ '@/views/merchant/CategoryEdit.vue'),
-                    meta: {
-                       title: '类别编辑',
-                    },
-                },
-                {
-                    path: '/categoryList',
-                    name: 'CategoryList',
-                    component: () => import(/* webpackChunkName: "categoryList" */ '@/views/merchant/CategoryList.vue'),
-                    meta: {
-                       title: '类别',
-                    },
                },
                 {
                     path: '/tagEdit',
@@ -190,6 +174,14 @@ const router = new Router({
                     meta: {
                        title: '评价表',
                     },
+               },
+                {
+                    path: '/appraisalRidList',
+                    name: 'AppraisalRidList',
+                    component: () => import(/* webpackChunkName: "appraisalList" */ '@/views/AppraisalRidList.vue'),
+                    meta: {
+                       title: '评价表',
+                    },
                },
                 {
                     path: '/blackListEdit',
@@ -254,22 +246,6 @@ const router = new Router({
                     meta: {
                        title: '时间类别',
                     },
-               },
-                {
-                    path: '/shoppingCartEdit',
-                    name: 'ShoppingCartEdit',
-                    component: () => import(/* webpackChunkName: "shoppingCartEdit" */ '@/views/user/ShoppingCartEdit.vue'),
-                    meta: {
-                       title: '购物车编辑',
-                    },
-                },
-                {
-                    path: '/shoppingCartList',
-                    name: 'ShoppingCartList',
-                    component: () => import(/* webpackChunkName: "shoppingCartList" */ '@/views/user/ShoppingCartList.vue'),
-                    meta: {
-                       title: '购物车',
-                    },
                },
                 {
                     path: '/merchantNatureEdit',
@@ -536,6 +512,14 @@ const router = new Router({
                         title: '提现申请',
                     },
                 },
+                {
+                    path: '/report',
+                    name: 'Report',
+                    component: () => import(/* webpackChunkName: "withdrawApplyList" */ '@/widgets/Report.vue'),
+                    meta: {
+                        title: '报表',
+                    },
+                },
             ],
         },
         {

+ 27 - 10
src/main/vue/src/views/AppraisalEdit.vue

@@ -6,7 +6,10 @@
                 <el-input v-model="formData.orderInfoId"></el-input>
             </el-form-item>-->
             <el-form-item prop="nickname" label="用户昵称">
-                <el-input v-model="formData.nickname"></el-input>
+                <!--                <el-input v-model="formData.nickname"></el-input>-->
+                <el-card shadow="hover" body-style=" padding: '10px' ">
+                        {{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"
@@ -14,17 +17,20 @@
                 ></el-image>
             </el-form-item>
             <el-form-item prop="merShowName" label="商家名称">
-                <el-input v-model="formData.nickname"></el-input>
+<!--                <el-input v-model="formData.nickname"></el-input>-->
+                <el-card shadow="hover" body-style=" padding: '10px' ">
+                    {{formData.merShowName}}
+                </el-card>
             </el-form-item>
             <el-form-item prop="goodsLike" label="商品评分">
                 <!--<el-input v-model="formData.goodsLike?'好评':'差评'" disabled></el-input>-->
                 <el-card shadow="hover">
-                    <div class="text item">
-                        <i v-if="formData.goodsLike" class="fas fa-grin" style="font-size: 20px; color: #de841a"></i>
-                        <i v-if="!formData.goodsLike" class="fas fa-meh" style="font-size: 20px;"></i>
+                    <div>
+                        <i v-if="formData.goodsLike===true" class="fas fa-grin" style="font-size: 20px; color: #ff9900"></i>
+                        <i v-if="formData.goodsLike===false" class="fas fa-meh" style="font-size: 20px; color: #ff9900"></i>
                         {{formData.goodsLike?'好评':'差评'}}
                     </div>
-                    <div class="text item">{{formData.goodsAppraise}}</div>
+                    <div>{{formData.goodsAppraise}}</div>
                 </el-card>
 
             </el-form-item>
@@ -34,6 +40,12 @@
             <!--<el-form-item prop="riderLike" label="骑手评分">
                 <el-input v-model="like"></el-input>
             </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' ">
+                    {{formData.riderName}}
+                </el-card>
+            </el-form-item>
             <el-form-item prop="riderAppraise" label="骑手评价">
                 <el-card shadow="hover">
                     <el-rate
@@ -41,12 +53,12 @@
                             disabled
                             :max='3'
                             style="padding-bottom: 8px"
-                            >
+                    >
                     </el-rate>
-                    <div class="text item"><span v-for="item in formData.content" :key="item" >
+                    <div><span v-for="item in formData.content" :key="item">
                         {{item}}
                     </span></div>
-                    <div class="text item">{{formData.riderAppraise}}</div>
+                    <div>{{formData.riderAppraise}}</div>
                 </el-card>
                 <!--<el-input type="textarea" v-model="formData.riderAppraise"></el-input>-->
             </el-form-item>
@@ -58,15 +70,20 @@
                 </el-input>&ndash;&gt;
             </el-form-item>-->
             <el-form-item prop="merchantReply" label="商家回复评价">
-                <el-input type="textarea" v-model="formData.merchantReply"></el-input>
+<!--                <el-input type="textarea" v-model="formData.merchantReply"></el-input>-->
+                <el-card shadow="hover" body-style=" padding: '10px' ">
+                    {{formData.merchantReply}}
+                </el-card>
             </el-form-item>
             <el-form-item prop="appraiseTime" label="评价日期">
                 <el-date-picker
                         v-model="formData.appraiseTime"
                         type="datetime"
                         value-format="yyyy-MM-dd HH:mm:ss"
+                        readonly
                         placeholder="选择日期时间">
                 </el-date-picker>
+
             </el-form-item>
             <el-form-item>
                 <!-- <el-button @click="onSave" :loading="saving"

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

@@ -105,7 +105,7 @@
             return {
                 multipleMode: false,
                 search: "",
-                url: "/appraisal/merList",
+                url: "/appraisal/merPage",
                 downloading: false,
             }
         },

+ 24 - 15
src/main/vue/src/views/AppraisalRidList.vue

@@ -9,9 +9,9 @@
             <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>-->
+            <!--            <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"
@@ -35,29 +35,38 @@
                 </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>
+                    <el-tag v-for="item in row.content" :key="item" type="info">{{item}}</el-tag>
                 </template>
-            </el-table-column>-->
+            </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="骑手评分"
+            <el-table-column prop="riderLike" label="骑手评分"
             >
                 <template slot-scope="{row}">
-                    <el-tag>{{row.riderScore}}</el-tag>
+                    <el-rate
+                            v-model="row.riderLike"
+                            disabled
+                            :max='3'
+                            style="padding-bottom: 8px"
+                    >
+                    </el-rate>
                 </template>
             </el-table-column>
             <el-table-column prop="merShowName" label="商家名称"
             >
             </el-table-column>
-            <el-table-column prop="data" label="评价日期"
+            <el-table-column prop="date" label="评价日期"
                              :formatter="datetimeFormatter"
             >
             </el-table-column>
@@ -105,7 +114,7 @@
             return {
                 multipleMode: false,
                 search: "",
-                url: "/appraisal/riderList",
+                url: "/appraisal/ridPage",
                 downloading: false,
             }
         },
@@ -125,7 +134,7 @@
             beforeGetData() {
                 let data = {
                     query: {
-                        mid: this.$route.query.mid,
+                        rid: this.$route.query.rid,
                     }
                 };
                 if (this.search) {

+ 4 - 4
src/main/vue/src/views/OrderInfoEdit.vue

@@ -131,10 +131,10 @@
                 <template v-if="goods">
                     <el-card shadow="never">
                         <el-table :data="goods">
-                            <el-table-column prop="goodsId" label="商品ID">
-                            </el-table-column>
-                            <el-table-column prop="goods.name" label="商品名称"></el-table-column>
-                            <el-table-column prop="num" label="数量">
+                            <!--<el-table-column prop="goodsId" label="商品ID">
+                            </el-table-column>-->
+                            <el-table-column prop="goods.name" label="商品名称" min-width="110px"></el-table-column>
+                            <el-table-column prop="num" label="数量" width="60px">
                             </el-table-column>
                             <el-table-column prop="specification" label="规格">
                             </el-table-column>

+ 0 - 94
src/main/vue/src/views/merchant/CategoryEdit.vue

@@ -1,94 +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="name" label="类别名称">
-                            <el-input v-model="formData.name"></el-input>
-                </el-form-item>
-                <el-form-item prop="parent" label="父类">
-                            <el-input-number type="number" v-model="formData.parent"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="children" label="子类">
-                            <el-input v-model="formData.children"></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: 'CategoryEdit',
-        created() {
-            if (this.$route.query.id) {
-                this.$http
-                    .get('category/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('/category/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(`/category/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>

+ 0 - 170
src/main/vue/src/views/merchant/CategoryList.vue

@@ -1,170 +0,0 @@
-<template>
-    <div  class="list-view">
-        <div class="filters-container">
-            <el-input placeholder="输入关键字" v-model="search" clearable
-                      class="filter-item"></el-input>
-            <el-button @click="getData" type="primary" icon="el-icon-search"
-                       class="filter-item">搜索
-            </el-button>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus"
-                       class="filter-item">添加
-            </el-button>
-            <el-button @click="download" type="primary" icon="el-icon-download"
-                       :loading="downloading" class="filter-item">导出EXCEL
-            </el-button>
-        </div>
-        <el-table :data="tableData" row-key="id" ref="table"
-                  header-row-class-name="table-header-row"
-                  header-cell-class-name="table-header-cell"
-                  row-class-name="table-row" cell-class-name="table-cell"
-                  :height="tableHeight">
-            <el-table-column v-if="multipleMode" align="center" type="selection"
-                             width="50">
-            </el-table-column>
-            <el-table-column prop="id" label="ID" width="100">
-            </el-table-column>
-                                <el-table-column prop="name" label="类别名称"
->
-                    </el-table-column>
-                    <el-table-column prop="parent" label="父类"
->
-                    </el-table-column>
-                    <el-table-column prop="children" label="子类"
->
-                    </el-table-column>
-            <el-table-column
-                    label="操作"
-                    align="center"
-                    fixed="right"
-                    min-width="150">
-                <template slot-scope="{row}">
-                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
-                </template>
-            </el-table-column>
-        </el-table>
-        <div class="pagination-wrapper">
-            <!-- <div class="multiple-mode-wrapper">
-                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
-                <el-button-group v-else>
-                    <el-button @click="operation1">批量操作1</el-button>
-                    <el-button @click="operation2">批量操作2</el-button>
-                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
-                </el-button-group>
-            </div> -->
-            <el-pagination background @size-change="onSizeChange"
-                           @current-change="onCurrentChange" :current-page="page"
-                           :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize"
-                           layout="total, sizes, prev, pager, next, jumper"
-                           :total="totalElements">
-            </el-pagination>
-        </div>
-
-    </div>
-</template>
-<script>
-    import { mapState } from "vuex";
-    import pageableTable from "@/mixins/pageableTable";
-
-    export default {
-        name: 'CategoryList',
-        mixins: [pageableTable],
-        created() {
-            this.getData();
-        },
-        data() {
-            return {
-                multipleMode: false,
-                search: "",
-                url: "/category/all",
-                downloading: false,
-            }
-        },
-        computed: {
-            selection() {
-                return this.$refs.table.selection.map(i => i.id);
-            }
-        },
-        methods: {
-            beforeGetData() {
-                if (this.search) {
-                    return { search: this.search };
-                }
-            },
-            toggleMultipleMode(multipleMode) {
-                this.multipleMode = multipleMode;
-                if (!multipleMode) {
-                    this.$refs.table.clearSelection();
-                }
-            },
-            addRow() {
-                this.$router.push({
-                    path: "/categoryEdit",
-                    query: {
-                    ...this.$route.query
-                    }
-                });
-            },
-            editRow(row) {
-                this.$router.push({
-                    path: "/categoryEdit",
-                    query: {
-                    id: row.id
-                    }
-                });
-            },
-            download() {
-                this.downloading = true;
-                this.$axios
-                    .get("/category/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(`/category/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>

+ 22 - 6
src/main/vue/src/views/merchant/MerchantList.vue

@@ -12,8 +12,6 @@
             <!--<el-button @click="download" type="primary" icon="el-icon-download"
                        :loading="downloading" class="filter-item">导出EXCEL
             </el-button>-->
-
-            <!--            <el-button >新店</el-button>-->
             <el-select v-model="status" class="filter-item" placeholder="筛选状态" clearable filterable
                        @change="getData">
                 <el-option
@@ -117,7 +115,7 @@
             <el-table-column label="操作" align="center" fixed="right" min-width="250">
                 <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="onReport(row)" 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'"
@@ -226,6 +224,11 @@
     import format from "date-fns/format";
     import startOfDay from "date-fns/startOfDay";
     import endOfDay from "date-fns/endOfDay";
+    import {GridItem, GridLayout} from "vue-grid-layout";
+    import UserWidget from "../../widgets/UserWidget";
+    import LineChartWidget from "../../widgets/LineChartWidget";
+    import BarChartWidget from "../../widgets/BarChartWidget";
+    import PieChartWidget from "../../widgets/PieChartWidget";
 
     export default {
         name: 'MerchantList',
@@ -245,11 +248,10 @@
                 status: '',
                 drawer: false,
                 formData: {
-                    // category: []
                 },
-                //showSetLogistics: false,
                 dateRange: [],
                 verified: {},
+                dialogTable: false,
 
                 pickerOptions: {
                     shortcuts: [
@@ -304,6 +306,18 @@
             }
         },
         methods: {
+            showReport(){
+                this.dialogTable=true;
+
+            },
+            onReport(row) {
+                this.$router.push({
+                    path: "/report",
+                    query: {
+                        mid: row.mid
+                    }
+                });
+            },
             picList(row) {
                 if (row) {
                     return row.split(",");
@@ -481,7 +495,6 @@
                     .catch(() => {
                     });
 
-
                 /*this.$set(row, 'loading', true);
                 this.$http
                     .get('/merchant/audit', {
@@ -508,6 +521,9 @@
                     }
                 });
             },
+
+        },
+        components: {
         }
     }
 </script>

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

@@ -92,7 +92,7 @@
                     label="操作"
                     align="center"
                     fixed="right"
-                    min-width="150">
+                    min-width="200">
                 <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>
@@ -288,9 +288,9 @@
             },
             showAppraisal(row) {
                 this.$router.push({
-                    path: "/appraisalList",
+                    path: "/appraisalRidList",
                     query: {
-                        mid: row.mid
+                        rid: row.id
                     }
                 });
             },

+ 0 - 124
src/main/vue/src/views/user/ShoppingCartEdit.vue

@@ -1,124 +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="userId" label="用户ID">
-                            <el-input-number type="number" v-model="formData.userId"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="merchantId" label="商户ID">
-                            <el-input-number type="number" v-model="formData.merchantId"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="deliveryAmount" label="配送费">
-                            <el-input-number type="number" v-model="formData.deliveryAmount"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="totalAmount" label="总价">
-                            <el-input-number type="number" v-model="formData.totalAmount"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="amount" label="已减优惠">
-                            <el-input-number type="number" v-model="formData.amount"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="packingPrice" label="包装价格">
-                            <el-input-number type="number" v-model="formData.packingPrice"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="couponId" label="优惠券ID">
-                            <el-input-number type="number" v-model="formData.couponId"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="fullReduction" label="满减">
-                            <el-input-number type="number" v-model="formData.fullReduction"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="firstBuy" label="首单">
-                            <el-input-number type="number" v-model="formData.firstBuy"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="redBag" label="红包">
-                            <el-input-number type="number" v-model="formData.redBag"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="newUser" label="新用户">
-                            <el-input-number type="number" v-model="formData.newUser"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="total" label="总价">
-                            <el-input-number type="number" v-model="formData.total"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="realAmount" label="实付金额">
-                            <el-input-number type="number" v-model="formData.realAmount"></el-input-number>
-                </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: 'ShoppingCartEdit',
-        created() {
-            if (this.$route.query.id) {
-                this.$http
-                    .get('shoppingCart/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('/shoppingCart/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(`/shoppingCart/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>

+ 0 - 200
src/main/vue/src/views/user/ShoppingCartList.vue

@@ -1,200 +0,0 @@
-<template>
-    <div  class="list-view">
-        <div class="filters-container">
-            <el-input placeholder="输入关键字" v-model="search" clearable
-                      class="filter-item"></el-input>
-            <el-button @click="getData" type="primary" icon="el-icon-search"
-                       class="filter-item">搜索
-            </el-button>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus"
-                       class="filter-item">添加
-            </el-button>
-            <el-button @click="download" type="primary" icon="el-icon-download"
-                       :loading="downloading" class="filter-item">导出EXCEL
-            </el-button>
-        </div>
-        <el-table :data="tableData" row-key="id" ref="table"
-                  header-row-class-name="table-header-row"
-                  header-cell-class-name="table-header-cell"
-                  row-class-name="table-row" cell-class-name="table-cell"
-                  :height="tableHeight">
-            <el-table-column v-if="multipleMode" align="center" type="selection"
-                             width="50">
-            </el-table-column>
-            <el-table-column prop="id" label="ID" width="100">
-            </el-table-column>
-                                <el-table-column prop="userId" label="用户ID"
->
-                    </el-table-column>
-                    <el-table-column prop="merchantId" label="商户ID"
->
-                    </el-table-column>
-                    <el-table-column prop="deliveryAmount" label="配送费"
->
-                    </el-table-column>
-                    <el-table-column prop="totalAmount" label="总价"
->
-                    </el-table-column>
-                    <el-table-column prop="amount" label="已减优惠"
->
-                    </el-table-column>
-                    <el-table-column prop="packingPrice" label="包装价格"
->
-                    </el-table-column>
-                    <el-table-column prop="couponId" label="优惠券ID"
->
-                    </el-table-column>
-                    <el-table-column prop="fullReduction" label="满减"
->
-                    </el-table-column>
-                    <el-table-column prop="firstBuy" label="首单"
->
-                    </el-table-column>
-                    <el-table-column prop="redBag" label="红包"
->
-                    </el-table-column>
-                    <el-table-column prop="newUser" label="新用户"
->
-                    </el-table-column>
-                    <el-table-column prop="total" label="总价"
->
-                    </el-table-column>
-                    <el-table-column prop="realAmount" label="实付金额"
->
-                    </el-table-column>
-            <el-table-column
-                    label="操作"
-                    align="center"
-                    fixed="right"
-                    min-width="150">
-                <template slot-scope="{row}">
-                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
-                </template>
-            </el-table-column>
-        </el-table>
-        <div class="pagination-wrapper">
-            <!-- <div class="multiple-mode-wrapper">
-                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
-                <el-button-group v-else>
-                    <el-button @click="operation1">批量操作1</el-button>
-                    <el-button @click="operation2">批量操作2</el-button>
-                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
-                </el-button-group>
-            </div> -->
-            <el-pagination background @size-change="onSizeChange"
-                           @current-change="onCurrentChange" :current-page="page"
-                           :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize"
-                           layout="total, sizes, prev, pager, next, jumper"
-                           :total="totalElements">
-            </el-pagination>
-        </div>
-
-    </div>
-</template>
-<script>
-    import { mapState } from "vuex";
-    import pageableTable from "@/mixins/pageableTable";
-
-    export default {
-        name: 'ShoppingCartList',
-        mixins: [pageableTable],
-        created() {
-            this.getData();
-        },
-        data() {
-            return {
-                multipleMode: false,
-                search: "",
-                url: "/shoppingCart/all",
-                downloading: false,
-            }
-        },
-        computed: {
-            selection() {
-                return this.$refs.table.selection.map(i => i.id);
-            }
-        },
-        methods: {
-            beforeGetData() {
-                if (this.search) {
-                    return { search: this.search };
-                }
-            },
-            toggleMultipleMode(multipleMode) {
-                this.multipleMode = multipleMode;
-                if (!multipleMode) {
-                    this.$refs.table.clearSelection();
-                }
-            },
-            addRow() {
-                this.$router.push({
-                    path: "/shoppingCartEdit",
-                    query: {
-                    ...this.$route.query
-                    }
-                });
-            },
-            editRow(row) {
-                this.$router.push({
-                    path: "/shoppingCartEdit",
-                    query: {
-                    id: row.id
-                    }
-                });
-            },
-            download() {
-                this.downloading = true;
-                this.$axios
-                    .get("/shoppingCart/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(`/shoppingCart/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>

+ 47 - 0
src/main/vue/src/widgets/Report.vue

@@ -0,0 +1,47 @@
+<template>
+<!--    <el-dialog-->
+<!--            title="销售报表"-->
+<!--            center-->
+<!--            :visible.sync="dialogTable"-->
+<!--    >-->
+        <el-table :data="reports" ref="table">
+            <el-table-column prop="name" label="名称"></el-table-column>
+            <el-table-column prop="likes" label="点赞数"></el-table-column>
+            <el-table-column prop="bad" label="差评数"></el-table-column>
+            <el-table-column prop="sale" label="销量"></el-table-column>
+            <el-table-column prop="income" label="收入"></el-table-column>
+
+        </el-table>
+<!--    </el-dialog>-->
+</template>
+
+<script>
+    export default {
+        name: "Report",
+        created() {
+            this.$http
+                .get('/sales/report', {
+                    mid: this.$route.query.mid
+                })
+                .then(res => {
+                    this.reports = res;
+                })
+                .catch(e => {
+                    console.log(e);
+                });
+        },
+        data() {
+            return {
+                // dialogTable: false,
+                reports: [],
+            }
+        },
+        methods: {
+
+        }
+    }
+</script>
+
+<style scoped>
+
+</style>

+ 5 - 0
src/test/java/com/izouma/dingdong/repo/SalesRepoTest.java

@@ -30,5 +30,10 @@ public class SalesRepoTest {
         //System.out.println(of);
         //System.out.println(of.minusMonths(1));
         System.out.println(salesRepo.findAllByGoodsIdAndDayBetween(607L, of.minusMonths(1), of).size());
+        LocalDate now = LocalDate.now();
+        int year = now.getYear();
+        int month = now.getMonthValue();
+        LocalDate date = LocalDate.of(year,month,1);
+        System.out.println(date);
     }
 }

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

@@ -69,7 +69,7 @@ public class AppraisalServiceTest {
         Map<String,Object> query = new HashMap<>();
         query.put("merchantId",1252);
         pageQuery.setQuery(query);
-        System.out.println(appraisalController.merList(pageQuery));
+        System.out.println(appraisalController.merPage(pageQuery));
     }
 
     @Test

+ 20 - 0
src/test/java/com/izouma/dingdong/service/SalesServiceTest.java

@@ -0,0 +1,20 @@
+package com.izouma.dingdong.service;
+
+import com.izouma.dingdong.service.merchant.SalesService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class SalesServiceTest {
+    @Autowired
+    private SalesService salesService;
+
+    @Test
+    public void test(){
+        System.out.println(salesService.merchantReport(421L));
+    }
+}