소스 검색

管理后台

licailing 4 년 전
부모
커밋
b98aeef5ae
25개의 변경된 파일288개의 추가작업 그리고 79개의 파일을 삭제
  1. 4 4
      src/main/java/com/izouma/jiashanxia/domain/User.java
  2. 2 0
      src/main/java/com/izouma/jiashanxia/repo/CouponRepo.java
  3. 3 0
      src/main/java/com/izouma/jiashanxia/repo/PackageRepo.java
  4. 11 12
      src/main/java/com/izouma/jiashanxia/service/OrderInfoService.java
  5. 25 3
      src/main/java/com/izouma/jiashanxia/service/UserCouponService.java
  6. 1 13
      src/main/java/com/izouma/jiashanxia/service/UserService.java
  7. 0 1
      src/main/java/com/izouma/jiashanxia/service/WithdrawService.java
  8. 19 0
      src/main/java/com/izouma/jiashanxia/utils/JpaUtils.java
  9. 10 6
      src/main/vue/src/router.js
  10. 1 1
      src/main/vue/src/views/CommissionRecordList.vue
  11. 36 4
      src/main/vue/src/views/CouponList.vue
  12. 3 0
      src/main/vue/src/views/OrderInfoList.vue
  13. 34 2
      src/main/vue/src/views/PackageList.vue
  14. 7 0
      src/main/vue/src/views/attractions/AttractionsEdit.vue
  15. 20 2
      src/main/vue/src/views/attractions/AttractionsList.vue
  16. 8 1
      src/main/vue/src/views/attractions/BrandEdit.vue
  17. 17 5
      src/main/vue/src/views/attractions/BrandList.vue
  18. 0 0
      src/main/vue/src/views/attractions/UserCouponEdit.vue
  19. 21 11
      src/main/vue/src/views/attractions/UserCouponList.vue
  20. 34 4
      src/main/vue/src/views/attractions/WriteOffUserList.vue
  21. 1 1
      src/main/vue/src/views/employee/ChildrenList.vue
  22. 2 1
      src/main/vue/src/views/employee/EmployeeList.vue
  23. 1 1
      src/main/vue/src/views/employee/EmployeeOrderList.vue
  24. 13 4
      src/test/java/com/izouma/jiashanxia/service/OrderInfoServiceTest.java
  25. 15 3
      src/test/java/com/izouma/jiashanxia/service/UserCouponServiceTest.java

+ 4 - 4
src/main/java/com/izouma/jiashanxia/domain/User.java

@@ -110,10 +110,10 @@ public class User extends BaseEntity implements Serializable {
     @Transient
     private String sessionKey;
 
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "companyId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
-    @NotFound(action = NotFoundAction.IGNORE)
-    private Company company;
+//    @ManyToOne(fetch = FetchType.LAZY)
+//    @JoinColumn(name = "companyId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+//    @NotFound(action = NotFoundAction.IGNORE)
+//    private Company company;
 
     @ApiModelProperty("分享图片")
     private String shareImg;

+ 2 - 0
src/main/java/com/izouma/jiashanxia/repo/CouponRepo.java

@@ -17,4 +17,6 @@ public interface CouponRepo extends JpaRepository<Coupon, Long>, JpaSpecificatio
     void softDelete(Long id);
 
     List<Coupon> findAllByIdInAndPeriodAfter(Iterable<Long> id, LocalDateTime period);
+
+    List<Coupon> findAllByAttractionsId(Long attractionsId);
 }

+ 3 - 0
src/main/java/com/izouma/jiashanxia/repo/PackageRepo.java

@@ -21,6 +21,9 @@ public interface PackageRepo extends JpaRepository<Package, Long>, JpaSpecificat
 
     List<Package> findAllByAttractionsId(Long attractionsId);
 
+    @Query("select t.id from Package t where t.attractionsId = ?1")
+    List<Long> findAllIdByAttractionsId(Long attractionsId);
+
     @Query(nativeQuery = true, value = "select p.*,a.name attractionsName,c.name categoryName " +
             "from package p " +
             "left join attractions a on p.attractions_id = a.id " +

+ 11 - 12
src/main/java/com/izouma/jiashanxia/service/OrderInfoService.java

@@ -51,12 +51,22 @@ public class OrderInfoService {
     后台列表
      */
     public Page<OrderInfo> backAll(PageQuery pageQuery) {
+        Long attractionsId = JpaUtils.getLong(pageQuery.getQuery(), "attractionsId");
+        List<Long> packageIds = null;
+        if (attractionsId > 0) {
+            packageIds = packageRepo.findAllIdByAttractionsId(attractionsId);
+        }
+
         pageQuery.setSort("createdAt,desc");
+        List<Long> finalPackageIds = packageIds;
         return orderInfoRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
             List<Predicate> and = JpaUtils.toPredicates(pageQuery, OrderInfo.class, root, criteriaQuery, criteriaBuilder);
             if (StrUtil.isNotEmpty(pageQuery.getSearch())) {
                 withdrawService.getNickname(pageQuery.getSearch(), and, root, criteriaBuilder);
             }
+            if (attractionsId > 0) {
+                and.add(root.get("packageId").in(finalPackageIds));
+            }
             return criteriaBuilder.and(and.toArray(new Predicate[0]));
         }), JpaUtils.toPageRequest(pageQuery));
     }
@@ -625,18 +635,7 @@ public class OrderInfoService {
     public Page<OrderInfo> children(PageQuery pageQuery) {
         pageQuery.setSort("createdAt,desc");
         Map<String, Object> query = pageQuery.getQuery();
-        Object userId = query.get("userId");
-        Long parent = 0L;
-        if (userId instanceof String) {
-            String of = String.valueOf(userId);
-            parent = Long.parseLong(of);
-        }
-        if (userId instanceof Integer) {
-            Integer of = (Integer) userId;
-            parent = Long.valueOf(of);
-        }
-
-        query.remove("userId");
+        Long parent = JpaUtils.getLong(query, "userId");
         List<Long> childrenId = userService.childrenId(parent);
 
         return orderInfoRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {

+ 25 - 3
src/main/java/com/izouma/jiashanxia/service/UserCouponService.java

@@ -16,7 +16,9 @@ import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import javax.persistence.criteria.Predicate;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -35,16 +37,35 @@ public class UserCouponService {
     }
 
     public Page<UserCouponDTO> backAll(@RequestBody PageQuery pageQuery) {
-        Map<Long, String> couponName = couponRepo.findAll()
-                .stream()
+        Map<String, Object> query = pageQuery.getQuery();
+
+        Long attractionsId = JpaUtils.getLong(query, "attractionsId");
+
+        List<Coupon> coupons;
+        if (attractionsId > 0) {
+            coupons = couponRepo.findAllByAttractionsId(attractionsId);
+        } else {
+            coupons = couponRepo.findAll();
+        }
+        Map<Long, String> couponName = coupons.stream()
                 .collect(Collectors.toMap(Coupon::getId, Coupon::getName));
-        Page<UserCoupon> all = this.all(pageQuery);
+
+//        Page<UserCoupon> all = this.all(pageQuery);
+        Page<UserCoupon> all = userCouponRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
+            List<Predicate> and = new ArrayList<>();
+            if (attractionsId > 0L) {
+                and.add(root.get("couponId").in(couponName.keySet()));
+            }
+            return criteriaBuilder.and(and.toArray(new Predicate[0]));
+        }), JpaUtils.toPageRequest(pageQuery));
+
         List<UserCoupon> list = all.getContent();
         Set<Long> ids = list.stream().map(UserCoupon::getUserId).collect(Collectors.toSet());
         ids.addAll(list.stream().map(UserCoupon::getWriteOffUserId).collect(Collectors.toSet()));
         Map<Long, String> userMap = userRepo.findAllById(ids)
                 .stream()
                 .collect(Collectors.toMap(User::getId, User::getNickname));
+
         return all.map(userCoupon -> new UserCouponDTO(userCoupon, userMap.get(userCoupon.getUserId()), userMap.get(userCoupon
                 .getWriteOffUserId()), couponName.get(userCoupon.getCouponId())));
     }
@@ -89,4 +110,5 @@ public class UserCouponService {
         userCoupon.setWriteOffUserId(writeOffUserId);
         userCouponRepo.save(userCoupon);
     }
+
 }

+ 1 - 13
src/main/java/com/izouma/jiashanxia/service/UserService.java

@@ -450,19 +450,7 @@ public class UserService {
     public Page<UserDTO> children(PageQuery pageQuery) {
         Map<String, Object> query = pageQuery.getQuery();
 
-        Object userId = query.get("parent");
-        Long parent = 0L;
-        if (userId instanceof String) {
-            String of = String.valueOf(userId);
-            parent = Long.parseLong(of);
-        }
-        if (userId instanceof Integer) {
-            Integer of = (Integer) userId;
-            parent = Long.valueOf(of);
-        }
-        if (userId instanceof Long) {
-            parent = (Long) userId;
-        }
+        Long parent = JpaUtils.getLong(query,"parent");
 
 //        List<Long> users = userRepo.findIdByParentAndDelFalse(parent);
         List<User> users;

+ 0 - 1
src/main/java/com/izouma/jiashanxia/service/WithdrawService.java

@@ -1,7 +1,6 @@
 package com.izouma.jiashanxia.service;
 
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.github.binarywang.wxpay.bean.entpay.EntPayRequest;
 import com.github.binarywang.wxpay.bean.entpay.EntPayResult;
 import com.github.binarywang.wxpay.exception.WxPayException;

+ 19 - 0
src/main/java/com/izouma/jiashanxia/utils/JpaUtils.java

@@ -18,6 +18,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Pattern;
 
 @Slf4j
@@ -174,4 +175,22 @@ public class JpaUtils {
         log.error("no such field [{}] in class [{}]", property, className);
         return null;
     }
+
+    public static Long getLong(Map<String, Object> query, String fieldName) {
+        Object field = query.get(fieldName);
+        Long aLong = 0L;
+        if (field instanceof Integer) {
+            Integer of = (Integer) field;
+            aLong = Long.valueOf(of);
+        }
+        if (field instanceof Long) {
+            aLong = (Long) field;
+        }
+        if (field instanceof String) {
+            String of = String.valueOf(field);
+            aLong = Long.parseLong(of);
+        }
+        query.remove(fieldName);
+        return aLong;
+    }
 }

+ 10 - 6
src/main/vue/src/router.js

@@ -133,7 +133,7 @@ const router = new Router({
                 {
                     path: '/brandList',
                     name: 'BrandList',
-                    component: () => import(/* webpackChunkName: "brandList" */ '@/views/BrandList.vue'),
+                    component: () => import(/* webpackChunkName: "brandList" */ '@/views/attractions/BrandList.vue'),
                     meta: {
                         title: '品牌管理'
                     }
@@ -141,7 +141,7 @@ const router = new Router({
                 {
                     path: '/brandEdit',
                     name: 'BrandEdit',
-                    component: () => import(/* webpackChunkName: "brandEdit" */ '@/views/BrandEdit.vue'),
+                    component: () => import(/* webpackChunkName: "brandEdit" */ '@/views/attractions/BrandEdit.vue'),
                     meta: {
                         title: '品牌管理'
                     }
@@ -393,7 +393,8 @@ const router = new Router({
                 {
                     path: '/attractionsEdit',
                     name: 'AttractionsEdit',
-                    component: () => import(/* webpackChunkName: "attractionsEdit" */ '@/views/AttractionsEdit.vue'),
+                    component: () =>
+                        import(/* webpackChunkName: "attractionsEdit" */ '@/views/attractions/AttractionsEdit.vue'),
                     meta: {
                         title: '景区管理编辑'
                     }
@@ -401,7 +402,8 @@ const router = new Router({
                 {
                     path: '/attractionsList',
                     name: 'AttractionsList',
-                    component: () => import(/* webpackChunkName: "attractionsList" */ '@/views/AttractionsList.vue'),
+                    component: () =>
+                        import(/* webpackChunkName: "attractionsList" */ '@/views/attractions/AttractionsList.vue'),
                     meta: {
                         title: '景区管理'
                     }
@@ -449,7 +451,8 @@ const router = new Router({
                 {
                     path: '/userCouponEdit',
                     name: 'UserCouponEdit',
-                    component: () => import(/* webpackChunkName: "userCouponEdit" */ '@/views/UserCouponEdit.vue'),
+                    component: () =>
+                        import(/* webpackChunkName: "userCouponEdit" */ '@/views/attractions/UserCouponEdit.vue'),
                     meta: {
                         title: '用户优惠券编辑'
                     }
@@ -457,7 +460,8 @@ const router = new Router({
                 {
                     path: '/userCouponList',
                     name: 'UserCouponList',
-                    component: () => import(/* webpackChunkName: "userCouponList" */ '@/views/UserCouponList.vue'),
+                    component: () =>
+                        import(/* webpackChunkName: "userCouponList" */ '@/views/attractions/UserCouponList.vue'),
                     meta: {
                         title: '用户优惠券'
                     }

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

@@ -160,7 +160,7 @@ export default {
                 data.query.createdAt = this.dateRange[0] + ',' + this.dateRange[1];
             }
             if (this.$route.query.id) {
-                data.query.userId = this.$route.query.id;
+                data.query.userId = Number(this.$route.query.id);
             }
             if (this.transactionType) {
                 data.query.transactionType = this.transactionType;

+ 36 - 4
src/main/vue/src/views/CouponList.vue

@@ -4,14 +4,18 @@
             <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
+            <!-- <el-button
                 @click="download"
                 type="primary"
                 icon="el-icon-download"
                 :loading="downloading"
                 class="filter-item"
                 >导出EXCEL
-            </el-button>
+            </el-button> -->
+            <el-select v-model="attractionsId" clearable filterable placeholder="请选择景区/品牌" @change="getData">
+                <el-option v-for="item in attractionsOptions" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+            </el-select>
         </div>
         <el-table
             :data="tableData"
@@ -72,9 +76,32 @@ export default {
             multipleMode: false,
             search: '',
             url: '/coupon/all',
-            downloading: false
+            downloading: false,
+            attractionsOptions: [],
+            attractionsId: ''
         };
     },
+    created() {
+        if (this.$route.query.id) {
+            this.attractionsId = Number(this.$route.query.id);
+        }
+        this.$http
+            .post('/attractions/all', { size: 1000, query: { del: false } }, { body: 'json' })
+            .then(res => {
+                if (res.content.length > 0) {
+                    res.content.forEach(item => {
+                        this.attractionsOptions.push({
+                            label: item.name,
+                            value: item.id
+                        });
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
     computed: {
         selection() {
             return this.$refs.table.selection.map(i => i.id);
@@ -82,7 +109,12 @@ export default {
     },
     methods: {
         beforeGetData() {
-            return { search: this.search };
+            return {
+                search: this.search,
+                query: {
+                    attractionsId: this.attractionsId
+                }
+            };
         },
         toggleMultipleMode(multipleMode) {
             this.multipleMode = multipleMode;

+ 3 - 0
src/main/vue/src/views/OrderInfoList.vue

@@ -173,6 +173,9 @@ export default {
             if (this.packageId) {
                 data.query.packageId = this.packageId;
             }
+            if (this.$route.query.id) {
+                data.query.attractionsId = Number(this.$route.query.id);
+            }
             return data;
         },
         toggleMultipleMode(multipleMode) {

+ 34 - 2
src/main/vue/src/views/PackageList.vue

@@ -4,6 +4,10 @@
             <!-- <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-select v-model="attractionsId" clearable filterable placeholder="请选择景区/品牌" @change="getData">
+                <el-option v-for="item in attractionsOptions" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+            </el-select>
             <!-- <el-button
                 @click="download"
                 type="primary"
@@ -80,6 +84,27 @@ import pageableTable from '@/mixins/pageableTable';
 export default {
     name: 'PackageList',
     mixins: [pageableTable],
+    created() {
+        if (this.$route.query.id) {
+            this.attractionsId = Number(this.$route.query.id);
+        }
+        this.$http
+            .post('/attractions/all', { size: 1000, query: { del: false, brand: false } }, { body: 'json' })
+            .then(res => {
+                if (res.content.length > 0) {
+                    res.content.forEach(item => {
+                        this.attractionsOptions.push({
+                            label: item.name,
+                            value: item.id
+                        });
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
     data() {
         return {
             multipleMode: false,
@@ -89,7 +114,9 @@ export default {
             typeOptions: [
                 { label: '团队', value: 'TEAM' },
                 { label: '个人', value: 'PERSONAL' }
-            ]
+            ],
+            attractionsId: '',
+            attractionsOptions: []
         };
     },
     computed: {
@@ -106,7 +133,12 @@ export default {
             return '';
         },
         beforeGetData() {
-            return { search: this.search };
+            return {
+                search: this.search,
+                query: {
+                    attractionsId: this.attractionsId || Number(this.$route.query.id)
+                }
+            };
         },
         toggleMultipleMode(multipleMode) {
             this.multipleMode = multipleMode;

+ 7 - 0
src/main/vue/src/views/AttractionsEdit.vue → src/main/vue/src/views/attractions/AttractionsEdit.vue

@@ -55,6 +55,13 @@ export default {
                 brand: false
             },
             rules: {
+                name: [
+                    {
+                        required: true,
+                        message: '请输入名称',
+                        trigger: 'blur'
+                    }
+                ],
                 phone: [
                     {
                         pattern: /^1[3-9]\d{9}$/,

+ 20 - 2
src/main/vue/src/views/AttractionsList.vue → src/main/vue/src/views/attractions/AttractionsList.vue

@@ -39,10 +39,12 @@
             <el-table-column prop="introduction" label="介绍"> </el-table-column>
             <el-table-column prop="phone" label="电话"> </el-table-column>
             <el-table-column prop="address" label="地址"> </el-table-column>
-            <el-table-column label="操作" align="center" fixed="right" min-width="150">
+            <el-table-column label="操作" align="center" fixed="right" min-width="200">
                 <template slot-scope="{ row }">
+                    <el-button @click="handleCommand1(row.id)" size="mini">套餐</el-button>
+                    <el-button @click="handleCommand(row.id)" size="mini">核销员</el-button>
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
             </el-table-column>
         </el-table>
@@ -167,6 +169,22 @@ export default {
                         this.$message.error(e.error);
                     }
                 });
+        },
+        handleCommand(id) {
+            this.$router.push({
+                path: '/writeOffUserList',
+                query: {
+                    id: id
+                }
+            });
+        },
+        handleCommand1(id) {
+            this.$router.push({
+                path: '/packageList',
+                query: {
+                    id: id
+                }
+            });
         }
     }
 };

+ 8 - 1
src/main/vue/src/views/BrandEdit.vue → src/main/vue/src/views/attractions/BrandEdit.vue

@@ -26,7 +26,7 @@
             </el-form-item>
             <el-form-item>
                 <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
-                <el-button @click="onDelete" :loading="saving" type="warning" v-if="formData.id">删除 </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>
@@ -55,6 +55,13 @@ export default {
                 brand: true
             },
             rules: {
+                name: [
+                    {
+                        required: true,
+                        message: '请输入名称',
+                        trigger: 'blur'
+                    }
+                ],
                 phone: [
                     {
                         pattern: /^1[3-9]\d{9}$/,

+ 17 - 5
src/main/vue/src/views/BrandList.vue → src/main/vue/src/views/attractions/BrandList.vue

@@ -39,11 +39,18 @@
             <el-table-column prop="introduction" label="介绍"> </el-table-column>
             <el-table-column prop="phone" label="电话"> </el-table-column>
             <el-table-column prop="address" label="地址"> </el-table-column>
-            <el-table-column label="操作" align="center" fixed="right" min-width="200">
+            <el-table-column label="操作" align="center" fixed="right" min-width="150">
                 <template slot-scope="{ row }">
-                    <el-button @click="handleCommand(row.id)" size="mini">核销</el-button>
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                    <el-dropdown @command="handleCommand">
+                        <el-button size="mini" plain style="margin-left:10px">更多</el-button>
+                        <el-dropdown-menu slot="dropdown">
+                            <el-dropdown-item :command="`/couponList?id=${row.id}`">优惠券</el-dropdown-item>
+                            <el-dropdown-item :command="`/writeOffUserList?id=${row.id}`">核销员</el-dropdown-item>
+                            <el-dropdown-item :command="`/userCouponList?id=${row.id}`">核销列表</el-dropdown-item>
+                        </el-dropdown-menu>
+                    </el-dropdown>
+                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
             </el-table-column>
         </el-table>
@@ -169,9 +176,14 @@ export default {
                     }
                 });
         },
-        handleCommand(id) {
+        handleCommand(command) {
+            if (command) {
+                this.$router.push(command);
+            }
+        },
+        handleCommand1(id) {
             this.$router.push({
-                path: '/writeOffUserList',
+                path: '/couponList',
                 query: {
                     id: id
                 }

+ 0 - 0
src/main/vue/src/views/UserCouponEdit.vue → src/main/vue/src/views/attractions/UserCouponEdit.vue


+ 21 - 11
src/main/vue/src/views/UserCouponList.vue → src/main/vue/src/views/attractions/UserCouponList.vue

@@ -4,14 +4,14 @@
             <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
+            <!-- <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"
@@ -26,7 +26,7 @@
             <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="nickname" label="用户"> </el-table-column>
-            <el-table-column prop="couponName" label="优惠券id"> </el-table-column>
+            <el-table-column prop="couponName" label="优惠券"> </el-table-column>
             <!-- <el-table-column prop="isUse" label="是否已使用"> </el-table-column> -->
             <el-table-column prop="useTime" label="使用时间"> </el-table-column>
             <el-table-column prop="writeOffNickname" label="核销人"> </el-table-column>
@@ -73,7 +73,8 @@ export default {
             multipleMode: false,
             search: '',
             url: '/userCoupon/backAll',
-            downloading: false
+            downloading: false,
+            attractionsId: 0
         };
     },
     computed: {
@@ -83,13 +84,22 @@ export default {
     },
     methods: {
         beforeGetData() {
-            return {
-                sort: 'createdAt,desc',
-                search: this.search,
-                query: {
-                    isUse: true
-                }
-            };
+            let data = { sort: 'createdAt,desc', query: { isUse: true } };
+            if (this.search) {
+                data.search = this.search;
+            }
+            if (this.$route.query.id) {
+                data.query.attractionsId = Number(this.$route.query.id);
+            }
+            return data;
+            // return {
+            //     sort: 'createdAt,desc',
+            //     search: this.search,
+            //     query: {
+            //         isUse: true,
+            //         attractionsId: this.attractionsId
+            //     }
+            // };
         },
         toggleMultipleMode(multipleMode) {
             this.multipleMode = multipleMode;

+ 34 - 4
src/main/vue/src/views/attractions/WriteOffUserList.vue

@@ -61,7 +61,7 @@
 
         <div>
             <el-dialog title="添加核销人员" :visible.sync="dialogVisible" center width="500px">
-                <el-form label-width="100px" style="max-width: 400px;">
+                <el-form label-width="100px" style="max-width: 400px;" :rules="rules">
                     <el-form-item label="景区/品牌">
                         <el-select
                             filterable
@@ -134,10 +134,29 @@ export default {
             addAttractionsId: '',
             addUserId: [],
             options: [],
-            list: []
+            list: [],
+            rules: {
+                addAttractionsId: [
+                    {
+                        required: true,
+                        message: '请选择景区',
+                        trigger: 'blur'
+                    }
+                ],
+                addUserId: [
+                    {
+                        required: true,
+                        message: '请选择核销人',
+                        trigger: 'blur'
+                    }
+                ]
+            }
         };
     },
     created() {
+        if (this.$route.query.id) {
+            this.attractionsId = Number(this.$route.query.id);
+        }
         this.$http
             .post('/attractions/all', { size: 1000, query: { del: false } }, { body: 'json' })
             .then(res => {
@@ -162,7 +181,6 @@ export default {
         }
     },
     mounted() {
-        // this.list = this.$http.post('/user/all', { size: 1000, query: { del: false } }, { body: 'json' });
         this.$http
             .post('/user/all', { size: 1000, query: { del: false, wxAuthorized: true } }, { body: 'json' })
             .then(res => {
@@ -189,10 +207,21 @@ export default {
             return {
                 search: this.search,
                 query: {
-                    attractionsId: this.attractionsId
+                    attractionsId: this.attractionsId || Number(this.$route.query.id)
                 }
             };
             // }
+            // let data = { query: {} };
+            // if (this.search) {
+            //     data.search = this.search;
+            // }
+            // if (this.$route.query.id) {
+            //     this.attractionsId = Number(this.$route.query.id);
+            // }
+            // if (this.attractionsId) {
+            //     data.query.attractionsId = this.attractionsId;
+            // }
+            // return data;
         },
         toggleMultipleMode(multipleMode) {
             this.multipleMode = multipleMode;
@@ -293,6 +322,7 @@ export default {
                 .then(res => {
                     this.$message.success('添加成功');
                     this.dialogVisible = false;
+                    this.getData();
                 })
                 .catch(e => {
                     if ('cancel' !== e) {

+ 1 - 1
src/main/vue/src/views/employee/ChildrenList.vue

@@ -99,7 +99,7 @@ export default {
             return {
                 search: this.search,
                 query: {
-                    parent: this.$route.query.id || this.userInfo.id
+                    parent: Number(this.$route.query.id) || this.userInfo.id
                 }
             };
         },

+ 2 - 1
src/main/vue/src/views/employee/EmployeeList.vue

@@ -92,11 +92,12 @@ export default {
     },
     created() {
         if (this.$route.query.id) {
-            this.companyId = this.$route.query.id;
+            this.companyId = Number(this.$route.query.id);
         }
         this.getAdmin();
     },
     computed: {
+        ...mapState(['userInfo']),
         selection() {
             return this.$refs.table.selection.map(i => i.id);
         }

+ 1 - 1
src/main/vue/src/views/employee/EmployeeOrderList.vue

@@ -163,7 +163,7 @@ export default {
             let data = {
                 sort: 'createdAt,desc',
                 query: {
-                    userId: this.$route.query.id || this.userInfo.id
+                    userId: Number(this.$route.query.id) || this.userInfo.id
                 }
             };
             if (this.search) {

+ 13 - 4
src/test/java/com/izouma/jiashanxia/service/OrderInfoServiceTest.java

@@ -1,20 +1,20 @@
 package com.izouma.jiashanxia.service;
 
+import com.izouma.jiashanxia.domain.OrderInfo;
 import com.izouma.jiashanxia.dto.CreateOrder;
 import com.izouma.jiashanxia.dto.OrderInfoVO;
+import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.enums.PayMethod;
 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.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
+import java.util.*;
 
 @SpringBootTest
 @RunWith(SpringRunner.class)
@@ -84,4 +84,13 @@ public class OrderInfoServiceTest {
 
         }, new Date(end));
     }
+
+    @Test
+    public void backAll() {
+        PageQuery pageQuery = new PageQuery();
+        Map<String, Object> query = pageQuery.getQuery();
+        query.put("attractionsId",955L);
+        Page<OrderInfo> orderInfos = orderInfoService.backAll(pageQuery);
+        orderInfos.getContent().forEach(System.out::println);
+    }
 }

+ 15 - 3
src/test/java/com/izouma/jiashanxia/service/UserCouponServiceTest.java

@@ -1,9 +1,13 @@
 package com.izouma.jiashanxia.service;
 
+import cn.hutool.core.collection.CollUtil;
 import com.izouma.jiashanxia.ApplicationTests;
+import com.izouma.jiashanxia.dto.PageQuery;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.Map;
+
 
 public class UserCouponServiceTest extends ApplicationTests {
 
@@ -12,11 +16,19 @@ public class UserCouponServiceTest extends ApplicationTests {
 
     @Test
     public void getCoupon() {
-        userCouponService.getCoupon(916L,1124L);
+        userCouponService.getCoupon(916L, 1124L);
+    }
+
+    @Test
+    public void writeOff() {
+        userCouponService.writeOff(1142L, 2L);
     }
 
     @Test
-    public void writeOff(){
-        userCouponService.writeOff(1142L,2L);
+    public void backAll() {
+        PageQuery pageQuery = new PageQuery();
+        Map<String, Object> query = pageQuery.getQuery();
+        query.put("attractionsId", 1124L);
+        userCouponService.backAll(pageQuery);
     }
 }