Kaynağa Gözat

管理后台

licailing 5 yıl önce
ebeveyn
işleme
3a1fa98f7c
28 değiştirilmiş dosya ile 227 ekleme ve 121 silme
  1. 2 0
      src/main/java/com/izouma/jiashanxia/domain/Company.java
  2. 8 5
      src/main/java/com/izouma/jiashanxia/dto/CompanyDTO.java
  3. 22 0
      src/main/java/com/izouma/jiashanxia/dto/PromotionDTO.java
  4. 10 0
      src/main/java/com/izouma/jiashanxia/repo/UserRepo.java
  5. 26 16
      src/main/java/com/izouma/jiashanxia/service/CompanyService.java
  6. 48 10
      src/main/java/com/izouma/jiashanxia/service/UserService.java
  7. 5 2
      src/main/java/com/izouma/jiashanxia/web/CompanyController.java
  8. 2 1
      src/main/java/com/izouma/jiashanxia/web/UserController.java
  9. 4 3
      src/main/vue/src/components/PackageEdit.vue
  10. 10 8
      src/main/vue/src/components/PackageGoodsTable.vue
  11. 2 2
      src/main/vue/src/router.js
  12. 4 4
      src/main/vue/src/views/ArticleList.vue
  13. 4 4
      src/main/vue/src/views/BannerList.vue
  14. 3 3
      src/main/vue/src/views/CommissionRecordList.vue
  15. 2 2
      src/main/vue/src/views/CompanyEdit.vue
  16. 5 4
      src/main/vue/src/views/CompanyList.vue
  17. 1 1
      src/main/vue/src/views/EmployeeList.vue
  18. 6 5
      src/main/vue/src/views/GoodsInfoList.vue
  19. 11 11
      src/main/vue/src/views/OrderInfoList.vue
  20. 3 3
      src/main/vue/src/views/PackageEdit.vue
  21. 4 4
      src/main/vue/src/views/PackageList.vue
  22. 1 0
      src/main/vue/src/views/PromotionList.vue
  23. 4 4
      src/main/vue/src/views/SysConfigList.vue
  24. 2 2
      src/main/vue/src/views/UserList.vue
  25. 19 15
      src/main/vue/src/views/UserPackageFlowEdit.vue
  26. 4 4
      src/main/vue/src/views/UserPackageFlowList.vue
  27. 13 7
      src/main/vue/src/views/WithdrawList.vue
  28. 2 1
      src/test/java/com/izouma/jiashanxia/service/UserServiceTest.java

+ 2 - 0
src/main/java/com/izouma/jiashanxia/domain/Company.java

@@ -1,5 +1,6 @@
 package com.izouma.jiashanxia.domain;
 
+import com.izouma.jiashanxia.annotations.Searchable;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -24,6 +25,7 @@ public class Company extends BaseEntity implements Serializable {
 
     private Long userId;
 
+    @Searchable
     @ApiModelProperty(value = "企业名称")
     private String name;
 

+ 8 - 5
src/main/java/com/izouma/jiashanxia/dto/CompanyDTO.java

@@ -1,14 +1,13 @@
 package com.izouma.jiashanxia.dto;
 
+import com.izouma.jiashanxia.domain.Company;
 import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
-import java.util.List;
 
 @AllArgsConstructor
 @NoArgsConstructor
@@ -20,12 +19,16 @@ public class CompanyDTO {
 
     private Long userId;
 
-    @ApiModelProperty(value = "企业名称")
     private String name;
 
     private BigDecimal amount;
 
-    private List<Long> employee;
+    private String nickname;
 
-    private boolean del;
+    public CompanyDTO(Company company) {
+        this.id = company.getId();
+        this.userId = company.getUserId();
+        this.name = company.getName();
+        this.amount = company.getAmount();
+    }
 }

+ 22 - 0
src/main/java/com/izouma/jiashanxia/dto/PromotionDTO.java

@@ -0,0 +1,22 @@
+package com.izouma.jiashanxia.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "用户", description = "用户")
+public class PromotionDTO {
+    private Long   id;
+    private String username;
+    private String nickname;
+    private String avatar;
+    private String phone;
+    private Long   parent;
+    private String parentNickname;
+}

+ 10 - 0
src/main/java/com/izouma/jiashanxia/repo/UserRepo.java

@@ -39,8 +39,18 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
     @Query("update User u set u.companyId = null where u.id = ?1")
     void deleteCompanyIdByUserId(Long id);
 
+    // 按企业id删用户
     @Transactional
     @Modifying
     @Query("update User u set u.companyId = null where u.companyId = ?1")
     void deleteCompanyId(Long companyId);
+
+    // 按用户id加企业
+    @Transactional
+    @Modifying
+    @Query("update User u set u.companyId = ?1 where u.id in ?2")
+    void updateCompanyId(Long companyId, Iterable<Long> ids);
+
+    // 按管理员搜索
+    List<User> findAllByTeamFounderTrueAndDelFalse();
 }

+ 26 - 16
src/main/java/com/izouma/jiashanxia/service/CompanyService.java

@@ -3,6 +3,7 @@ package com.izouma.jiashanxia.service;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.jiashanxia.domain.Company;
 import com.izouma.jiashanxia.domain.User;
+import com.izouma.jiashanxia.dto.CompanyDTO;
 import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.enums.AuthorityName;
 import com.izouma.jiashanxia.exception.BusinessException;
@@ -16,6 +17,7 @@ import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -30,14 +32,31 @@ public class CompanyService {
     private UserRepo        userRepo;
     private UserPackageRepo userPackageRepo;
 
-    public Page<Company> all(PageQuery pageQuery, User user) {
+    public Page<CompanyDTO> all(PageQuery pageQuery, User user) {
         pageQuery.setSort("createdAt,desc");
         Set<Authority> authorities = user.getAuthorities();
         if (!authorities.contains(Authority.get(AuthorityName.ROLE_ADMIN)) && authorities.contains(Authority.get(AuthorityName.ROLE_CREATOR))) {
             Map<String, Object> query = pageQuery.getQuery();
             query.put("userId", user.getId());
+            return companyRepo.findAll(JpaUtils.toSpecification(pageQuery, Company.class), JpaUtils.toPageRequest(pageQuery))
+                    .map(company -> {
+                        CompanyDTO dto = new CompanyDTO(company);
+                        dto.setNickname(user.getNickname());
+                        return dto;
+                    });
         }
-        return companyRepo.findAll(JpaUtils.toSpecification(pageQuery, Company.class), JpaUtils.toPageRequest(pageQuery));
+        Map<Long, User> userMap = userRepo.findAllByTeamFounderTrueAndDelFalse()
+                .stream()
+                .collect(Collectors.toMap(User::getId, user1 -> user1));
+        return companyRepo.findAll(JpaUtils.toSpecification(pageQuery, Company.class), JpaUtils.toPageRequest(pageQuery))
+                .map(company -> {
+                    User user1 = userMap.get(company.getUserId());
+                    CompanyDTO dto = new CompanyDTO(company);
+                    if (ObjectUtil.isNotEmpty(user1)) {
+                        dto.setNickname(user1.getNickname());
+                    }
+                    return dto;
+                });
     }
 
     /*
@@ -71,19 +90,6 @@ public class CompanyService {
         return userRepo.findAllByCompanyIdAndDelFalse(company.getId());
     }
 
-    /*
-    批量增加员工
-     */
-    public void batchEmployee(List<Long> employee, Long companyId) {
-        List<User> employees = userRepo.findAllById(employee);
-        employees.forEach(yee -> {
-            if (yee.getCompanyId() == null || !yee.getCompanyId().equals(companyId)) {
-                yee.setCompanyId(companyId);
-                userRepo.save(yee);
-            }
-        });
-    }
-
     /*
     新建企业
      */
@@ -111,7 +117,7 @@ public class CompanyService {
             // 新员工加入团队
             employee.removeAll(userMap.keySet());
             if (ObjectUtil.isNotEmpty(employee)) {
-                this.batchEmployee(employee, record.getId());
+                userRepo.updateCompanyId(record.getId(), employee);
             }
             // 更换团队管理人
             if (!record.getUserId().equals(orig.getUserId())) {
@@ -131,8 +137,12 @@ public class CompanyService {
         }
 
         // 增加
+        record.setAmount(BigDecimal.ZERO);
         Company save = companyRepo.save(record);
+        // 管理员加权限
         this.teamFounder(save.getUserId(), creator, save.getId());
+        // 员工加入企业
+        userRepo.updateCompanyId(save.getId(), record.getEmployee());
         return save;
     }
 

+ 48 - 10
src/main/java/com/izouma/jiashanxia/service/UserService.java

@@ -4,10 +4,12 @@ import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.jiashanxia.config.Constants;
 import com.izouma.jiashanxia.domain.User;
 import com.izouma.jiashanxia.dto.PageQuery;
+import com.izouma.jiashanxia.dto.PromotionDTO;
 import com.izouma.jiashanxia.dto.UserRegister;
 import com.izouma.jiashanxia.enums.AuthorityName;
 import com.izouma.jiashanxia.enums.TransactionType;
@@ -255,20 +257,56 @@ public class UserService {
     我的推广
     移除员工:推广列表下员工的推广就会没有
     */
-    public Page<User> myPromotion(PageQuery pageQuery, Long userId) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
+    public Page<PromotionDTO> myPromotion(PageQuery pageQuery, Long userId) {
+//        User parent = userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
+//        return userRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
+//            List<Predicate> and = JpaUtils.toPredicates(pageQuery, User.class, root, criteriaQuery, criteriaBuilder);
+//            if (parent.getTeamFounder()) {
+//                List<User> employees = userRepo.findAllByCompanyIdAndDelFalse(parent.getCompanyId());
+//                List<Long> collect = employees.stream().map(User::getId).collect(Collectors.toList());
+//                and.add(root.get("parent").in(collect));
+//            } else {
+//                and.add(criteriaBuilder.equal(root.get("parent"), userId));
+//            }
+//            return criteriaBuilder.and(and.toArray(new Predicate[0]));
+//        }), JpaUtils.toPageRequest(pageQuery));
+
+        User parent = userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
+        if (parent.getTeamFounder()) {
+            List<User> employees = userRepo.findAllByCompanyIdAndDelFalse(parent.getCompanyId());
+            Map<Long, User> userMap = employees.stream().collect(Collectors.toMap(User::getId, user -> user));
+            return userRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
+                List<Predicate> and = JpaUtils.toPredicates(pageQuery, User.class, root, criteriaQuery, criteriaBuilder);
+                and.add(root.get("parent").in(userMap.keySet()));
+                return criteriaBuilder.and(and.toArray(new Predicate[0]));
+            }), JpaUtils.toPageRequest(pageQuery)).map(user -> {
+                // 找出上级昵称
+                User user1 = userMap.get(user.getParent());
+                PromotionDTO dto = new PromotionDTO();
+                BeanUtil.copyProperties(user, dto);
+                if (ObjectUtil.isNotEmpty(user1)) {
+                    dto.setParentNickname(user1.getNickname());
+                }
+                return dto;
+            });
+        }
 
         return userRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
             List<Predicate> and = JpaUtils.toPredicates(pageQuery, User.class, root, criteriaQuery, criteriaBuilder);
-            if (user.getTeamFounder()) {
-                List<User> employees = userRepo.findAllByCompanyIdAndDelFalse(user.getCompanyId());
-                List<Long> collect = employees.stream().map(User::getId).collect(Collectors.toList());
-                and.add(root.get("parent").in(collect));
-            } else {
-                and.add(criteriaBuilder.equal(root.get("parent"), userId));
-            }
+            and.add(criteriaBuilder.equal(root.get("parent"), userId));
             return criteriaBuilder.and(and.toArray(new Predicate[0]));
-        }), JpaUtils.toPageRequest(pageQuery));
+        }), JpaUtils.toPageRequest(pageQuery)).map(user ->
+                // 插入上级昵称
+                PromotionDTO.builder()
+                        .id(user.getId())
+                        .avatar(user.getAvatar())
+                        .nickname(user.getNickname())
+                        .username(user.getUsername())
+                        .phone(user.getPhone())
+                        .parent(userId)
+                        .parentNickname(parent.getNickname())
+                        .build()
+        );
     }
 
     /*

+ 5 - 2
src/main/java/com/izouma/jiashanxia/web/CompanyController.java

@@ -1,7 +1,9 @@
 package com.izouma.jiashanxia.web;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.izouma.jiashanxia.domain.Company;
 import com.izouma.jiashanxia.domain.User;
+import com.izouma.jiashanxia.dto.CompanyDTO;
 import com.izouma.jiashanxia.enums.AuthorityName;
 import com.izouma.jiashanxia.repo.UserRepo;
 import com.izouma.jiashanxia.security.Authority;
@@ -20,6 +22,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -39,7 +42,7 @@ public class CompanyController extends BaseController {
 
     @PreAuthorize("hasAnyRole('ADMIN','CREATOR')")
     @PostMapping("/all")
-    public Page<Company> all(@RequestBody PageQuery pageQuery) {
+    public Page<CompanyDTO> all(@RequestBody PageQuery pageQuery) {
         return companyService.all(pageQuery, SecurityUtils.getAuthenticatedUser());
     }
 
@@ -61,7 +64,7 @@ public class CompanyController extends BaseController {
     @GetMapping("/excel")
     @ResponseBody
     public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
-        List<Company> data = all(pageQuery).getContent();
+        List<CompanyDTO> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
 

+ 2 - 1
src/main/java/com/izouma/jiashanxia/web/UserController.java

@@ -3,6 +3,7 @@ package com.izouma.jiashanxia.web;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.jiashanxia.domain.User;
 import com.izouma.jiashanxia.dto.PageQuery;
+import com.izouma.jiashanxia.dto.PromotionDTO;
 import com.izouma.jiashanxia.dto.UserRegister;
 import com.izouma.jiashanxia.enums.AuthorityName;
 import com.izouma.jiashanxia.exception.BusinessException;
@@ -159,7 +160,7 @@ public class UserController extends BaseController {
 
     @PostMapping("/promotion")
     @ApiOperation("企业端推广列表")
-    public Page<User> promotion(@RequestBody PageQuery pageQuery) {
+    public Page<PromotionDTO> promotion(@RequestBody PageQuery pageQuery) {
         Map<String, Object> query = pageQuery.getQuery();
         String userId = String.valueOf(query.get("userId"));
         query.remove("userId");

+ 4 - 3
src/main/vue/src/components/PackageEdit.vue

@@ -9,10 +9,10 @@
             size="small"
             style="max-width: 800px;"
         >
-            <el-form-item prop="name" label="套餐名称">
+            <el-form-item prop="name" label="套餐标题">
                 <el-input v-model="formData.name" class="input-title"></el-input>
             </el-form-item>
-            <el-form-item prop="title" label="标题">
+            <el-form-item prop="title" label="标题">
                 <el-input v-model="formData.title" class="input-title"></el-input>
             </el-form-item>
             <el-form-item prop="img" label="图">
@@ -54,7 +54,8 @@
                 </el-select>
             </el-form-item>
             <el-form-item>
-                <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
+                <el-button @click="onSave" :loading="saving" type="primary" v-if="$route.query.id">保存</el-button>
+                <el-button @click="onSave" :loading="saving" type="primary" v-else>下一步</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>

+ 10 - 8
src/main/vue/src/components/PackageGoodsTable.vue

@@ -6,7 +6,7 @@
             <el-table-column prop="num" label="数量"> </el-table-column>
             <el-table-column prop="unit" label="单位"> </el-table-column>
             <el-table-column prop="price" label="价格"> </el-table-column>
-            <el-table-column prop="remark" label="备注" min-width="100px"> </el-table-column>
+            <!-- <el-table-column prop="remark" label="备注" min-width="100px"> </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>
@@ -32,9 +32,9 @@
                 <el-form-item prop="num" label="数量">
                     <el-input-number type="number" v-model="formData.num" class="cl-input" :min="1"></el-input-number>
                 </el-form-item>
-                <el-form-item prop="remark" label="备注">
+                <!-- <el-form-item prop="remark" label="备注">
                     <el-input v-model="formData.remark" class="cl-input"></el-input>
-                </el-form-item>
+                </el-form-item> -->
             </el-form>
             <span slot="footer">
                 <el-button type="primary" size="mini" @click="save" :loading="saving">保存</el-button>
@@ -160,7 +160,8 @@ export default {
                 })
                 .then(() => {
                     this.$message.success('删除成功');
-                    this.$router.go(0);
+                    this.getList();
+                    // this.$router.go(0);
                 })
                 .catch(e => {
                     if (e !== 'cancel') {
@@ -187,9 +188,9 @@ export default {
             this.$refs.form.validate(valid => {
                 if (valid) {
                     let data = { ...this.formData };
-                    data.price = this.goods.price * data.num;
-                    data.name = this.goods.name;
-                    data.unit = this.goods.unit;
+                    // data.price = this.goods.price * data.num;
+                    // data.name = this.goods.name;
+                    // data.unit = this.goods.unit;
                     data.packageId = this.id;
                     this.saving = true;
                     this.$http
@@ -198,7 +199,8 @@ export default {
                             this.saving = false;
                             this.$message.success('成功');
                             this.showDialog = false;
-                            this.$router.go(0);
+                            this.getList();
+                            // this.$router.go(0);
                         })
                         .catch(e => {
                             console.log(e);

+ 2 - 2
src/main/vue/src/router.js

@@ -248,7 +248,7 @@ const router = new Router({
                     name: 'CompanyEdit',
                     component: () => import(/* webpackChunkName: "companyEdit" */ '@/views/CompanyEdit.vue'),
                     meta: {
-                        title: '团队信息编辑'
+                        title: '企业信息编辑'
                     }
                 },
                 {
@@ -256,7 +256,7 @@ const router = new Router({
                     name: 'CompanyList',
                     component: () => import(/* webpackChunkName: "companyList" */ '@/views/CompanyList.vue'),
                     meta: {
-                        title: '团队信息'
+                        title: '企业信息'
                     }
                 },
                 {

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

@@ -1,17 +1,17 @@
 <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-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"

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

@@ -1,17 +1,17 @@
 <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-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"

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

@@ -49,12 +49,12 @@
             <el-table-column prop="transactionId" label="交易单号" show-overflow-tooltip> </el-table-column>
             <el-table-column prop="remark" label="备注"> </el-table-column>
             <el-table-column prop="createdAt" label="交易时间" show-overflow-tooltip> </el-table-column>
-            <el-table-column label="操作" align="center" fixed="right" min-width="150">
+            <!-- <el-table-column label="操作" align="center" fixed="right" min-width="150">
                 <template slot-scope="{ row }">
-                    <!--<el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>-->
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
-            </el-table-column>
+            </el-table-column> -->
         </el-table>
         <div class="pagination-wrapper">
             <!-- <div class="multiple-mode-wrapper">

+ 2 - 2
src/main/vue/src/views/CompanyEdit.vue

@@ -9,10 +9,10 @@
             size="small"
             style="max-width: 500px;"
         >
-            <el-form-item prop="name" label="团队名称">
+            <el-form-item prop="name" label="企业名称">
                 <el-input v-model="formData.name"></el-input>
             </el-form-item>
-            <el-form-item prop="userId" label="管理员">
+            <el-form-item prop="userId" label="管理员">
                 <div class="subform">
                     <el-select v-model="formData.userId" style="width: 360px" filterable clearable>
                         <el-option v-for="item in users" :key="item.id" :value="item.id" :label="item.nickname">

+ 5 - 4
src/main/vue/src/views/CompanyList.vue

@@ -6,14 +6,14 @@
             <el-button @click="addRow" type="primary" icon="el-icon-plus" class="filter-item" v-if="display"
                 >添加
             </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"
@@ -27,8 +27,9 @@
         >
             <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="amount" label="团队余额"> </el-table-column>
+            <el-table-column prop="name" label="企业名称"> </el-table-column>
+            <el-table-column prop="amount" label="企业余额"> </el-table-column>
+            <el-table-column prop="nickname" 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>

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

@@ -181,7 +181,7 @@ export default {
             this.$message('操作2');
         },
         remove(row) {
-            this.$alert('确认移除么?', '提示', { type: 'primary' })
+            this.$alert('确认该员工移除' + row.company.name + '么?', '提示', { type: 'primary' })
                 .then(() => {
                     return this.$http.post('/company/removeEmp', {
                         userId: row.id,

+ 6 - 5
src/main/vue/src/views/GoodsInfoList.vue

@@ -1,17 +1,17 @@
 <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-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="editRow()" 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"
@@ -98,7 +98,8 @@ export default {
             rules: {
                 img: { required: true, message: '请上传图片', trigger: 'blur' },
                 name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
-                unit: [{ required: true, message: '请输入单位', trigger: 'blur' }]
+                unit: [{ required: true, message: '请输入单位', trigger: 'blur' }],
+                price: [{ required: true, message: '请输入价格', trigger: 'blur' }]
             }
         };
     },

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

@@ -3,15 +3,15 @@
         <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
+            <!-- <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>
+            </el-button> -->
             <el-select
                 v-model="status"
                 multiple
@@ -42,7 +42,14 @@
             <el-table-column prop="orderNumber" label="订单号" show-overflow-tooltip> </el-table-column>
             <el-table-column prop="user.nickname" label="昵称"> </el-table-column>
             <el-table-column prop="payMethod" label="支付方式" :formatter="payMethodFormatter"> </el-table-column>
-            <el-table-column prop="status" label="订单状态" :formatter="statusFormatter"> </el-table-column>
+            <el-table-column prop="status" label="订单状态">
+                <template slot-scope="{ row }">
+                    <el-tag type="warning" v-if="row.status == 'UNPAID'">未支付</el-tag>
+                    <el-tag type="success" v-else-if="row.status == 'PAID'">已支付</el-tag>
+                    <el-tag type="info" v-else-if="row.status == 'CANCELLED'">已取消</el-tag>
+                    <el-tag v-else>线下支付</el-tag>
+                </template>
+            </el-table-column>
             <el-table-column prop="name" label="名称" show-overflow-tooltip> </el-table-column>
             <el-table-column prop="paidAt" label="支付时间" show-overflow-tooltip> </el-table-column>
             <!--<el-table-column prop="setId" label="充值套餐"> </el-table-column>-->
@@ -129,13 +136,6 @@ export default {
             }
             return '';
         },
-        statusFormatter(row, column, cellValue, index) {
-            let selectedOption = this.statusOptions.find(i => i.value === cellValue);
-            if (selectedOption) {
-                return selectedOption.label;
-            }
-            return '';
-        },
         beforeGetData() {
             return {
                 search: this.search,

+ 3 - 3
src/main/vue/src/views/PackageEdit.vue

@@ -27,9 +27,9 @@ export default {
             id: 0
         };
     },
-    mounted() {
-        this.updateType();
-    },
+    // mounted() {
+    //     this.updateType();
+    // },
     methods: {
         goNext(page) {
             this.active = page;

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

@@ -1,17 +1,17 @@
 <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-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"

+ 1 - 0
src/main/vue/src/views/PromotionList.vue

@@ -36,6 +36,7 @@
                     ></el-image>
                 </template>
             </el-table-column>
+            <el-table-column prop="parentNickname" label="推广人" min-width="100"> </el-table-column>
             <!--<el-table-column label="操作" align="center" fixed="right">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>

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

@@ -1,17 +1,17 @@
 <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-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="editRow()" 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"

+ 2 - 2
src/main/vue/src/views/UserList.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"

+ 19 - 15
src/main/vue/src/views/UserPackageFlowEdit.vue

@@ -10,25 +10,14 @@
             style="max-width: 500px;"
         >
             <el-form-item prop="userId" label="被核销人">
-                <el-input v-model="formData.nickname"></el-input>
+                <el-input v-model="formData.nickname" readonly></el-input>
             </el-form-item>
             <el-form-item prop="writeOffUserId" label="核销人">
-                <el-input v-model="formData.writeOffNickname"></el-input>
-            </el-form-item>
-            <el-form-item prop="content" label="核销内容">
-                <!--<el-input v-model="formData.content"></el-input>-->
-                <div v-for="item in formData.goods" :key="item.name">
-                    <el-col :span="16">
-                        <el-input v-model="item.name" class="input-content"></el-input>
-                    </el-col>
-                    <el-col :span="8">
-                        <el-input v-model="item.num" class="input-content"></el-input>
-                    </el-col>
-                    <!-- <span>{{ item.name }}</span> -->
-                </div>
+                <el-input v-model="formData.writeOffNickname" readonly></el-input>
             </el-form-item>
             <el-form-item prop="createdAt" label="核销时间">
                 <el-date-picker
+                    readonly
                     v-model="formData.createdAt"
                     type="datetime"
                     value-format="yyyy-MM-dd HH:mm:ss"
@@ -36,9 +25,17 @@
                 >
                 </el-date-picker>
             </el-form-item>
+            <el-form-item prop="content" label="核销内容">
+                <div class="subform">
+                    <el-table :data="formData.goods">
+                        <el-table-column prop="name" label="商品名"></el-table-column>
+                        <el-table-column prop="num" label="数量"></el-table-column>
+                    </el-table>
+                </div>
+            </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="onDelete" :loading="saving" type="danger" v-if="formData.id">删除</el-button> -->
                 <el-button @click="$router.go(-1)">返回</el-button>
             </el-form-item>
         </el-form>
@@ -123,4 +120,11 @@ export default {
 .input-content {
     margin: 5px 10px 5px 0;
 }
+.subform {
+    padding: 12px 12px 12px 12px;
+    background: #f2f3f5;
+    border-radius: 8px;
+    border: 1px solid #eee;
+    margin-bottom: 10px;
+}
 </style>

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

@@ -3,15 +3,15 @@
         <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
+            <!-- <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>
+            </el-button> -->
         </div>
         <el-table
             :data="tableData"
@@ -31,7 +31,7 @@
             <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>
+                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
             </el-table-column>
         </el-table>

+ 13 - 7
src/main/vue/src/views/WithdrawList.vue

@@ -1,17 +1,17 @@
 <template>
     <div class="list-view">
         <div class="filters-container">
-            <el-input placeholder="输入关键字" v-model="search" clearable class="filter-item"></el-input>
+            <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="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>
+            </el-button> -->
             <el-select v-model="status" multiple clearable @change="getData" placeholder="请选择提现状态">
                 <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
                 </el-option>
@@ -32,12 +32,18 @@
             <el-table-column prop="user.nickname" label="昵称"> </el-table-column>
             <el-table-column prop="amount" label="提现金额"> </el-table-column>
             <el-table-column prop="payMethod" label="提现方式" :formatter="payMethodFormatter"> </el-table-column>
-            <el-table-column prop="status" label="提现状态" :formatter="statusFormatter"> </el-table-column>
+            <el-table-column prop="status" label="提现状态" :formatter="statusFormatter">
+                <template slot-scope="{ row }">
+                    <el-tag type="info" v-if="row.status == 'FAIL'">提现失败</el-tag>
+                    <el-tag type="success" v-else-if="row.status == 'SUCCESS'">提现成功</el-tag>
+                    <el-tag type="warning" v-else>待处理</el-tag>
+                </template>
+            </el-table-column>
             <el-table-column prop="account" label="账号"> </el-table-column>
             <el-table-column prop="realName" label="真实姓名"> </el-table-column>
             <el-table-column prop="createdAt" label="申请时间" show-overflow-tooltip> </el-table-column>
             <el-table-column prop="auditTime" label="审核时间" show-overflow-tooltip> </el-table-column>
-            <el-table-column label="操作" align="left" fixed="right" min-width="150">
+            <el-table-column label="操作" align="left" fixed="right" min-width="120">
                 <template slot-scope="{ row }">
                     <!-- <el-button @click="editRow(row)" type="primary" size="mini" plain>详情</el-button> -->
                     <el-button
@@ -60,7 +66,7 @@
                     >
                         拒绝
                     </el-button>
-                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain v-else>删除</el-button>
+                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain v-else>删除</el-button> -->
                 </template>
             </el-table-column>
         </el-table>

+ 2 - 1
src/test/java/com/izouma/jiashanxia/service/UserServiceTest.java

@@ -3,6 +3,7 @@ package com.izouma.jiashanxia.service;
 import cn.hutool.core.collection.CollUtil;
 import com.izouma.jiashanxia.domain.User;
 import com.izouma.jiashanxia.dto.PageQuery;
+import com.izouma.jiashanxia.dto.PromotionDTO;
 import com.izouma.jiashanxia.exception.BusinessException;
 import com.izouma.jiashanxia.repo.UserRepo;
 import org.junit.Test;
@@ -27,7 +28,7 @@ public class UserServiceTest {
 
     @Test
     public void myPromotion() {
-        Page<User> users = userService.myPromotion(new PageQuery(), 40L);
+        Page<PromotionDTO> users = userService.myPromotion(new PageQuery(), 40L);
         users.getContent().forEach(System.out::println);
     }