From f49ed6f705319c17c41b5fcec767fca7448a8958 Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Wed, 17 Jan 2024 00:56:04 +0800
Subject: [PATCH] 会员系统

---
 src/main/java/cc/mrbird/febs/vip/mapper/MallVipBenefitsDetailsMapper.java            |    7 
 src/main/resources/mapper/modules/MallVipBenefitsMapper.xml                          |   40 +++
 src/main/java/cc/mrbird/febs/vip/entity/MallVipConfigBenefits.java                   |   20 +
 src/main/java/cc/mrbird/febs/vip/mapper/MallVipBenefitsMapper.java                   |   14 +
 src/main/java/cc/mrbird/febs/vip/service/IMallVipBenefitsService.java                |   13 +
 src/main/resources/templates/febs/views/modules/vip/vipBenefits-list.html            |  172 +++++++++++++++
 src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigBenefitsServiceImpl.java  |   15 +
 src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigBenefitsMapper.java             |    7 
 src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java        |   18 +
 src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java                  |   40 +++
 src/main/java/cc/mrbird/febs/vip/service/impl/MallVipBenefitsDetailsServiceImpl.java |   15 +
 src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java          |   15 +
 src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java          |   18 +
 src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java                           |   55 +++++
 src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java                  |    7 
 src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipBenefitsController.java      |   40 +++
 src/main/java/cc/mrbird/febs/vip/service/IMallVipBenefitsDetailsService.java         |    7 
 src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigBenefitsService.java          |    7 
 src/main/java/cc/mrbird/febs/vip/service/impl/MallVipBenefitsServiceImpl.java        |   31 ++
 src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java                     |    7 
 src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java                         |   41 +++
 src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java             |   20 +
 src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipBenefitsController.java        |   16 +
 23 files changed, 625 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipBenefitsController.java b/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipBenefitsController.java
new file mode 100644
index 0000000..fbc0eb5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipBenefitsController.java
@@ -0,0 +1,40 @@
+package cc.mrbird.febs.vip.controller;
+
+
+import cc.mrbird.febs.common.controller.BaseController;
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.vip.service.IMallVipBenefitsService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 会员权益接口类
+ */
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/admin/vip/benefits")
+public class AdminMallVipBenefitsController extends BaseController {
+
+    private final IMallVipBenefitsService mallVipBenefitsService;
+
+    @GetMapping("/list")
+    public FebsResponse list(QueryRequest request) {
+        Map<String, Object> data = getDataTable(mallVipBenefitsService.vipBenefitsListInPage(request));
+        return new FebsResponse().success().data(data);
+    }
+
+    @GetMapping("/getById/{id}")
+    public FebsResponse getById(@PathVariable("id") Long id) {
+        return new FebsResponse().success().data(mallVipBenefitsService.findVipBenefitsById(id));
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java b/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java
new file mode 100644
index 0000000..88a0e99
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java
@@ -0,0 +1,18 @@
+package cc.mrbird.febs.vip.controller;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 会员配置接口类
+ */
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/admin/vip/config")
+public class AdminMallVipConfigController {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipBenefitsController.java b/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipBenefitsController.java
new file mode 100644
index 0000000..1b1f87b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipBenefitsController.java
@@ -0,0 +1,16 @@
+package cc.mrbird.febs.vip.controller;
+
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/api/vip/benefits")
+public class ApiMallVipBenefitsController {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java b/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java
new file mode 100644
index 0000000..8771bd2
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java
@@ -0,0 +1,18 @@
+package cc.mrbird.febs.vip.controller;
+
+
+import cc.mrbird.febs.common.controller.BaseController;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/api/vip/config")
+public class ApiMallVipConfigController extends BaseController {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java b/src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java
new file mode 100644
index 0000000..be63da8
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.vip.controller;
+
+import cc.mrbird.febs.common.entity.FebsConstant;
+import cc.mrbird.febs.common.utils.FebsUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller("mallVipConfig")
+@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/vip/config")
+@RequiredArgsConstructor
+public class ViewVipConfigController {
+
+
+    @GetMapping(value = "/benefitsList")
+    public String benefitsList() {
+        return FebsUtil.view("modules/vip/vipBenefits-list");
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java b/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java
new file mode 100644
index 0000000..b3ec2c7
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java
@@ -0,0 +1,41 @@
+package cc.mrbird.febs.vip.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@TableName("mall_vip_benefits")
+public class MallVipBenefits extends BaseEntity {
+
+    /**
+     * 权益名称
+     */
+    private String name;
+
+    /**
+     * 权益类型;1-积分 2-指定商品 3-暂无
+     */
+    private Integer type;
+
+    /**
+     * 权益图标
+     */
+    private String icon;
+
+    /**
+     * 积分倍数
+     */
+    private String multiple;
+
+    /**
+     * 权益备注
+     */
+    private String remark;
+
+    @TableField(exist = false)
+    private List<MallVipBenefitsDetails> details;
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java b/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java
new file mode 100644
index 0000000..ee933ee
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java
@@ -0,0 +1,40 @@
+package cc.mrbird.febs.vip.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("mall_vip_benefits_details")
+public class MallVipBenefitsDetails extends BaseEntity {
+
+    /**
+     * 图片链接
+     */
+    private String image;
+
+    /**
+     * 是否可点击;1-是 2-否
+     */
+    private Integer isClick;
+
+    /**
+     * 链接类型;1-链接 2-领取商品 3-优惠券
+     */
+    private Integer linkType;
+
+    /**
+     * 内容;根据linkType来的
+     */
+    private String content;
+
+    /**
+     * 排序
+     */
+    private String seq;
+
+    /**
+     * 权益ID
+     */
+    private Long benefitsId;
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java b/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java
new file mode 100644
index 0000000..dd665f1
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java
@@ -0,0 +1,55 @@
+package cc.mrbird.febs.vip.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("mall_vip_config")
+public class MallVipConfig extends BaseEntity {
+
+    /**
+     * 会员名称
+     */
+    private String name;
+
+    /**
+     * 主图
+     */
+    private String thumb;
+
+    /**
+     * 等级
+     */
+    private Integer level;
+
+    /**
+     * 有效期
+     */
+    private Integer validTime;
+
+    /**
+     * 有效期类型;day/month/year
+     */
+    private String validType;
+
+    /**
+     * 成为会员条件类型;1-指定商品 2-时间区间内消费金额
+     */
+    private Integer type;
+
+    /**
+     * 消费金额
+     */
+    private Double amount;
+
+    /**
+     * 指定月数
+     */
+    private Integer times;
+
+    /**
+     * 指定商品ID
+     */
+    private Long targetId;
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfigBenefits.java b/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfigBenefits.java
new file mode 100644
index 0000000..8cfd973
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfigBenefits.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.vip.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("mall_vip_config_benefits")
+public class MallVipConfigBenefits extends BaseEntity {
+
+    /**
+     * 会员配置ID
+     */
+    private Long configId;
+
+    /**
+     * 会员权益ID
+     */
+    private Long benefitsId;
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/mapper/MallVipBenefitsDetailsMapper.java b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipBenefitsDetailsMapper.java
new file mode 100644
index 0000000..8d37907
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipBenefitsDetailsMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.vip.mapper;
+
+import cc.mrbird.febs.vip.entity.MallVipBenefitsDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface MallVipBenefitsDetailsMapper extends BaseMapper<MallVipBenefitsDetails> {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/mapper/MallVipBenefitsMapper.java b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipBenefitsMapper.java
new file mode 100644
index 0000000..d71df4b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipBenefitsMapper.java
@@ -0,0 +1,14 @@
+package cc.mrbird.febs.vip.mapper;
+
+import cc.mrbird.febs.vip.entity.MallVipBenefits;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+
+public interface MallVipBenefitsMapper extends BaseMapper<MallVipBenefits> {
+
+    IPage<MallVipBenefits> selectVipBenefitsListInPage(Page<MallVipBenefits> page);
+
+    MallVipBenefits selectVipBenefitsById(@Param("id") Long id);
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigBenefitsMapper.java b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigBenefitsMapper.java
new file mode 100644
index 0000000..dc72f52
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigBenefitsMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.vip.mapper;
+
+import cc.mrbird.febs.vip.entity.MallVipConfigBenefits;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface MallVipConfigBenefitsMapper extends BaseMapper<MallVipConfigBenefits> {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java
new file mode 100644
index 0000000..4d7d9d6
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.vip.mapper;
+
+import cc.mrbird.febs.vip.entity.MallVipConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface MallVipConfigMapper extends BaseMapper<MallVipConfig> {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/IMallVipBenefitsDetailsService.java b/src/main/java/cc/mrbird/febs/vip/service/IMallVipBenefitsDetailsService.java
new file mode 100644
index 0000000..60c5624
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/IMallVipBenefitsDetailsService.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.vip.service;
+
+import cc.mrbird.febs.vip.entity.MallVipBenefitsDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IMallVipBenefitsDetailsService extends IService<MallVipBenefitsDetails> {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/IMallVipBenefitsService.java b/src/main/java/cc/mrbird/febs/vip/service/IMallVipBenefitsService.java
new file mode 100644
index 0000000..1129b68
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/IMallVipBenefitsService.java
@@ -0,0 +1,13 @@
+package cc.mrbird.febs.vip.service;
+
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.vip.entity.MallVipBenefits;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IMallVipBenefitsService extends IService<MallVipBenefits> {
+
+    IPage<MallVipBenefits> vipBenefitsListInPage(QueryRequest request);
+
+    MallVipBenefits findVipBenefitsById(Long id);
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigBenefitsService.java b/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigBenefitsService.java
new file mode 100644
index 0000000..98634de
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigBenefitsService.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.vip.service;
+
+import cc.mrbird.febs.vip.entity.MallVipConfigBenefits;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IMallVipConfigBenefitsService extends IService<MallVipConfigBenefits> {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java b/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java
new file mode 100644
index 0000000..5b795c1
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.vip.service;
+
+import cc.mrbird.febs.vip.entity.MallVipConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IMallVipConfigService extends IService<MallVipConfig> {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipBenefitsDetailsServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipBenefitsDetailsServiceImpl.java
new file mode 100644
index 0000000..1be3f3d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipBenefitsDetailsServiceImpl.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.vip.service.impl;
+
+import cc.mrbird.febs.vip.entity.MallVipBenefitsDetails;
+import cc.mrbird.febs.vip.mapper.MallVipBenefitsDetailsMapper;
+import cc.mrbird.febs.vip.service.IMallVipBenefitsDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MallVipBenefitsDetailsServiceImpl extends ServiceImpl<MallVipBenefitsDetailsMapper, MallVipBenefitsDetails> implements IMallVipBenefitsDetailsService {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipBenefitsServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipBenefitsServiceImpl.java
new file mode 100644
index 0000000..343c1b7
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipBenefitsServiceImpl.java
@@ -0,0 +1,31 @@
+package cc.mrbird.febs.vip.service.impl;
+
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.mall.entity.MallNewsInfo;
+import cc.mrbird.febs.mall.vo.AdminMallNewsInfoVo;
+import cc.mrbird.febs.vip.entity.MallVipBenefits;
+import cc.mrbird.febs.vip.mapper.MallVipBenefitsMapper;
+import cc.mrbird.febs.vip.service.IMallVipBenefitsService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MallVipBenefitsServiceImpl extends ServiceImpl<MallVipBenefitsMapper, MallVipBenefits> implements IMallVipBenefitsService {
+
+    @Override
+    public IPage<MallVipBenefits> vipBenefitsListInPage(QueryRequest request) {
+        Page<MallVipBenefits> page = new Page<>(request.getPageNum(), request.getPageSize());
+        return this.baseMapper.selectVipBenefitsListInPage(page);
+    }
+
+    @Override
+    public MallVipBenefits findVipBenefitsById(Long id) {
+        return this.baseMapper.selectVipBenefitsById(id);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigBenefitsServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigBenefitsServiceImpl.java
new file mode 100644
index 0000000..b992145
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigBenefitsServiceImpl.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.vip.service.impl;
+
+import cc.mrbird.febs.vip.entity.MallVipConfigBenefits;
+import cc.mrbird.febs.vip.mapper.MallVipConfigBenefitsMapper;
+import cc.mrbird.febs.vip.service.IMallVipConfigBenefitsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MallVipConfigBenefitsServiceImpl extends ServiceImpl<MallVipConfigBenefitsMapper, MallVipConfigBenefits> implements IMallVipConfigBenefitsService {
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
new file mode 100644
index 0000000..93374fc
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.vip.service.impl;
+
+import cc.mrbird.febs.vip.entity.MallVipConfig;
+import cc.mrbird.febs.vip.mapper.MallVipConfigMapper;
+import cc.mrbird.febs.vip.service.IMallVipConfigService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MallVipConfigServiceImpl extends ServiceImpl<MallVipConfigMapper, MallVipConfig> implements IMallVipConfigService {
+}
diff --git a/src/main/resources/mapper/modules/MallVipBenefitsMapper.xml b/src/main/resources/mapper/modules/MallVipBenefitsMapper.xml
new file mode 100644
index 0000000..a2e5d7d
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallVipBenefitsMapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cc.mrbird.febs.vip.mapper.MallVipBenefitsMapper">
+
+    <resultMap id="VipBenefitsMap" type="cc.mrbird.febs.vip.entity.MallVipBenefits">
+        <id property="id" column="id" />
+        <result property="name" column="name" />
+        <result property="type" column="type" />
+        <result property="icon" column="icon" />
+        <result property="multiple" column="multiple" />
+        <result property="remark" column="remark" />
+
+        <collection property="details" ofType="cc.mrbird.febs.vip.entity.MallVipBenefitsDetails">
+            <id property="id" column="c_id" />
+            <result property="image" column="image" />
+            <result property="isClick" column="is_click" />
+            <result property="linkType" column="link_type" />
+            <result property="content" column="content" />
+            <result property="seq" column="seq" />
+        </collection>
+    </resultMap>
+
+    <select id="selectVipBenefitsListInPage" resultType="cc.mrbird.febs.vip.entity.MallVipBenefits">
+        select * from mall_vip_benefits
+    </select>
+
+    <select id="selectVipBenefitsById" resultMap="VipBenefitsMap">
+        select
+            benefits.*,
+            benefitsDetail.id c_id
+            ,benefitsDetail.image
+            ,benefitsDetail.is_click
+            ,benefitsDetail.link_type
+            ,benefitsDetail.content
+            ,benefitsDetail.seq
+        from mall_vip_benefits benefits
+            inner join mall_vip_benefits_details benefitsDetail on benefits.id=benefitsDetail.benefitsId
+        where benefits.id=#{id}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/vip/vipBenefits-list.html b/src/main/resources/templates/febs/views/modules/vip/vipBenefits-list.html
new file mode 100644
index 0000000..b6be61c
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/vip/vipBenefits-list.html
@@ -0,0 +1,172 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-vip-benefits" lay-title="会员权益">
+    <div class="layui-row febs-container">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-body febs-table-full">
+                    <form class="layui-form layui-table-form" lay-filter="vip-benefits-table-form">
+                        <div class="layui-row">
+                            <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add">
+                                    新增
+                                </div>
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+                                    <i class="layui-icon">&#xe848;</i>
+                                </div>
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+                                    <i class="layui-icon">&#xe79b;</i>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                    <table lay-filter="vipBenefitsTable" lay-data="{id: 'vipBenefitsTable'}"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<style>
+    .layui-table-cell {
+        height: auto;
+    }
+    .layui-form-onswitch {
+        background-color: #5FB878 !important;
+    }
+</style>
+<script type="text/html" id="isTopSwitch">
+    {{# if(d.isTop === 1) { }}
+    <input type="checkbox" value={{d.id}} lay-text="是|否" checked lay-skin="switch" lay-filter="isTopSwitch">
+    {{# } else { }}
+    <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="isTopSwitch">
+    {{# } }}
+</script>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="user-option">
+    <span shiro:lacksPermission="vipBenefits:view,vipBenefits:update,vipBenefits:delete">
+        <span class="layui-badge-dot febs-bg-orange"></span> 无权限
+    </span>
+    <a lay-event="edit" shiro:hasPermission="vipBenefits:update"><i
+            class="layui-icon febs-edit-area febs-blue">&#xe7a5;</i></a>
+</script>
+<!-- 表格操作栏 end -->
+<script data-th-inline="none" type="text/javascript">
+    // 引入组件并初始化
+    layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
+        var $ = layui.jquery,
+            febs = layui.febs,
+            form = layui.form,
+            table = layui.table,
+            $view = $('#febs-vip-benefits'),
+            $query = $view.find('#query'),
+            $add = $view.find('#add'),
+            $reset = $view.find('#reset'),
+            $searchForm = $view.find('form'),
+            sortObject = {field: 'phone', type: null},
+            tableIns;
+
+        form.render();
+
+        // 表格初始化
+        initTable();
+
+        // 初始化表格操作栏各个按钮功能
+        table.on('tool(vipBenefitsTable)', function (obj) {
+            var data = obj.data,
+                layEvent = obj.event;
+            if (layEvent === 'newsInfoUpdate') {
+                febs.modal.open('编辑', 'modules/news/newsInfoUpdate/' + data.id, {
+                    btn: ['提交', '取消'],
+                    yes: function (index, layero) {
+                        $('#newsInfo-update').find('#submit').trigger('click');
+                    },
+                    btn2: function () {
+                        layer.closeAll();
+                    }
+                });
+            }
+            if (layEvent === 'delNewsInfo') {
+                febs.modal.confirm('删除', '确认删除?', function () {
+                    delNewsInfo(data.id);
+                });
+            }
+        });
+
+        function delNewsInfo(id) {
+            febs.get(ctx + 'admin/news/delNewsInfo/' + id, null, function () {
+                febs.alert.success('操作成功');
+                $query.click();
+            });
+        }
+
+        // 查询按钮
+        $query.on('click', function () {
+            var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+            tableIns.reload({where: params, page: {curr: 1}});
+        });
+
+        // 刷新按钮
+        $reset.on('click', function () {
+            $searchForm[0].reset();
+            sortObject.type = 'null';
+            tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+        });
+
+        $add.on('click', function () {
+            febs.modal.open('新增', 'modules/news/newsInfoAdd/', {
+                btn: ['提交', '取消'],
+                yes: function (index, layero) {
+                    $('#newsInfo-add').find('#submit').trigger('click');
+                },
+                btn2: function () {
+                    layer.closeAll();
+                }
+            });
+        });
+
+        function initTable() {
+            tableIns = febs.table.init({
+                elem: $view.find('table'),
+                id: 'vipBenefitsTable',
+                url: ctx + 'admin/vip/benefits/list',
+                cols: [[
+                    {field: 'name', title: '权益名称', minWidth: 120, align: 'center'},
+                    {
+                        field: 'icon', title: 'ICON',
+                        templet: function (d) {
+                            return '';
+                        }, minWidth: 150, align: 'center'
+                    },
+                    {field: 'remark', title: '备注', minWidth: 120, align: 'center'},
+                    {field: 'createdTime', title: '创建时间', minWidth: 120, align: 'center'},
+                    {
+                        title: '操作',
+                        templet: function (d) {
+                            return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="newsInfoUpdate" shiro:hasPermission="user:update">编辑</button>'
+                                + '<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delNewsInfo" shiro:hasPermission="user:update">删除</button>'
+                        }, minWidth: 300, align: 'center'
+                    }
+                ]]
+            });
+        }
+
+        // 获取查询参数
+        function getQueryParams() {
+            return {
+            };
+        }
+
+        form.on('switch(isTopSwitch)', function (data) {
+            console.log(data.value);
+            if (data.elem.checked) {
+                febs.post(ctx + 'admin/news/topNews/' + data.value, null, function () {
+                    febs.alert.success('设置成功');
+                    $query.click();
+                });
+            } else {
+                febs.post(ctx + 'admin/news/unTopNews/' + data.value, null, function () {
+                    febs.alert.success('设置成功');
+                    $query.click();
+                });
+            }
+        })
+    })
+</script>
\ No newline at end of file

--
Gitblit v1.9.1