前端页面

main
王宇航 2024-05-16 18:15:42 +08:00
parent 57157cc6be
commit eebcbd1473
36 changed files with 2565 additions and 1170 deletions

View File

@ -0,0 +1,114 @@
package com.ruoyi.app.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.app.domain.AppInform;
import com.ruoyi.app.service.IAppInformService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author wyh
* @date 2024-05-15
*/
@RestController
@RequestMapping("/inform")
@Api(tags = "举报" , description = "举报")
public class AppInformController extends BaseController
{
@Autowired
private IAppInformService appInformService;
/**
*
*/
// @RequiresPermissions("app:inform:list")
@GetMapping("/list")
@ApiOperation(value = "查询举报", notes = "查询举报", httpMethod = "GET")
public TableDataInfo list(AppInform appInform)
{
startPage();
List<AppInform> list = appInformService.selectAppInformList(appInform);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("app:inform:export")
@Log(title = "举报", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, AppInform appInform)
{
List<AppInform> list = appInformService.selectAppInformList(appInform);
ExcelUtil<AppInform> util = new ExcelUtil<AppInform>(AppInform.class);
util.exportExcel(response, list, "举报数据");
}
/**
*
*/
@RequiresPermissions("app:inform:query")
@GetMapping(value = "/{id}")
@ApiOperation(value = "获取举报详细信息", notes = "获取举报详细信息", httpMethod = "GET")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(appInformService.selectAppInformById(id));
}
/**
*
*/
@RequiresPermissions("app:inform:add")
@ApiOperation(value = "新增举报", notes = "新增举报", httpMethod = "POST")
@Log(title = "举报", businessType = BusinessType.INSERT)
@PostMapping("/add")
public AjaxResult add(@RequestBody AppInform appInform)
{
return toAjax(appInformService.insertAppInform(appInform));
}
/**
*
*/
@RequiresPermissions("app:inform:edit")
@ApiOperation(value = "修改举报", notes = "修改举报", httpMethod = "PUT")
@Log(title = "举报", businessType = BusinessType.UPDATE)
@PutMapping("/edit")
public AjaxResult edit(@RequestBody AppInform appInform)
{
return toAjax(appInformService.updateAppInform(appInform));
}
/**
*
*/
@RequiresPermissions("app:inform:remove")
@Log(title = "举报", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(appInformService.deleteAppInformByIds(ids));
}
}

View File

@ -0,0 +1,120 @@
package com.ruoyi.app.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.app.domain.vo.AppOrderVo;
import com.ruoyi.app.service.IAppOrderService;
import com.ruoyi.common.core.domain.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.app.domain.AppOrder;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author wyh
* @date 2024-05-15
*/
@RestController
@RequestMapping("/order")
@Api(tags = "订单" , description = "订单")
public class AppOrderController extends BaseController
{
@Autowired
private IAppOrderService appOrderService;
/**
*
*/
// @RequiresPermissions("app:order:list")
@GetMapping("/list")
@ApiOperation(value = "查询订单", notes = "查询订单", httpMethod = "GET")
public TableDataInfo list(AppOrder appOrder)
{
startPage();
List<AppOrderVo> list = appOrderService.selectAppOrderList(appOrder);
return getDataTable(list);
}
/**
*
*/
@Log(title = "订单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, AppOrder appOrder)
{
List<AppOrderVo> list = appOrderService.selectAppOrderList(appOrder);
ExcelUtil<AppOrderVo> util = new ExcelUtil<AppOrderVo>(AppOrderVo.class);
util.exportExcel(response, list, "订单数据");
}
/**
*
*/
@GetMapping(value = "/{id}")
@ApiOperation(value = "获取订单详细信息", notes = "获取订单详细信息", httpMethod = "GET")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(appOrderService.selectAppOrderById(id));
}
/**
*
*/
@ApiOperation(value = "新增订单", notes = "新增订单", httpMethod = "POST")
@Log(title = "订单", businessType = BusinessType.INSERT)
@PostMapping("/add")
public AjaxResult add(@RequestBody AppOrder appOrder)
{
return toAjax(appOrderService.insertAppOrder(appOrder));
}
/**
*
*/
@ApiOperation(value = "修改订单", notes = "修改订单", httpMethod = "PUT")
@Log(title = "订单", businessType = BusinessType.UPDATE)
@PutMapping("/edit")
public AjaxResult edit(@RequestBody AppOrder appOrder)
{
return toAjax(appOrderService.updateAppOrder(appOrder));
}
/**
*
*/
@Log(title = "订单", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(appOrderService.deleteAppOrderByIds(ids));
}
/**
*
* @return
*/
@GetMapping("/abcd")
public AjaxResult abcd(){
return success(appOrderService.abcd());
}
}

View File

@ -0,0 +1,114 @@
package com.ruoyi.app.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.app.domain.AppVip;
import com.ruoyi.app.service.IAppVipService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;
/**
* Controller
*
* @author wyh
* @date 2024-05-15
*/
@RestController
@RequestMapping("/vip")
@Api(tags = "会员信息" , description = "会员信息")
public class AppVipController extends BaseController
{
@Autowired
private IAppVipService appVipService;
/**
*
*/
@RequiresPermissions("app:vip:list")
@GetMapping("/list")
@ApiOperation(value = "查询会员信息", notes = "查询会员信息", httpMethod = "GET")
public TableDataInfo list(AppVip appVip)
{
startPage();
List<AppVip> list = appVipService.selectAppVipList(appVip);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("app:vip:export")
@Log(title = "会员信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, AppVip appVip)
{
List<AppVip> list = appVipService.selectAppVipList(appVip);
ExcelUtil<AppVip> util = new ExcelUtil<AppVip>(AppVip.class);
util.exportExcel(response, list, "会员信息数据");
}
/**
*
*/
@RequiresPermissions("app:vip:query")
@GetMapping(value = "/{id}")
@ApiOperation(value = "获取会员信息详细信息", notes = "获取会员信息详细信息", httpMethod = "GET")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(appVipService.selectAppVipById(id));
}
/**
*
*/
@RequiresPermissions("app:vip:add")
@ApiOperation(value = "新增会员信息", notes = "新增会员信息", httpMethod = "POST")
@Log(title = "会员信息", businessType = BusinessType.INSERT)
@PostMapping("/add")
public AjaxResult add(@RequestBody AppVip appVip)
{
return toAjax(appVipService.insertAppVip(appVip));
}
/**
*
*/
@RequiresPermissions("app:vip:edit")
@ApiOperation(value = "修改会员信息", notes = "修改会员信息", httpMethod = "PUT")
@Log(title = "会员信息", businessType = BusinessType.UPDATE)
@PutMapping("/edit")
public AjaxResult edit(@RequestBody AppVip appVip)
{
return toAjax(appVipService.updateAppVip(appVip));
}
/**
*
*/
@RequiresPermissions("app:vip:remove")
@Log(title = "会员信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(appVipService.deleteAppVipByIds(ids));
}
}

View File

@ -341,26 +341,45 @@ public class PayController extends BaseController
} }
//乱码解决,这段代码在出现乱码时使用。 //乱码解决,这段代码在出现乱码时使用。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put (name,valueStr); System.out.println(name);
params.put (name,valueStr);
} }
//调用SDK验证签名
//公钥验签示例代码
boolean signVerified = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "UTF-8","RSA2") ;
//公钥证书验签示例代码 //公钥证书验签示例代码
// boolean flag = AlipaySignature.rsaCertCheckV1(params,alipayPublicCertPath,"UTF-8","RSA2"); boolean signVerified = AlipaySignature.rsaCertCheckV1(params,"/Users/wyh/Documents/code/gan/gan-modules/ruoyi-gan/src/main/resources/alipayCertPublicKey_RSA2.crt","UTF-8","RSA2");
if (signVerified){
// TODO 验签成功后
//按照支付结果异步通知中的描述对支付结果中的业务内容进行1\2\3\4二次校验校验成功后在response中返回success
} else {
// TODO 验签失败则记录异常日志并在response中返回fail.
}
PrintWriter out; PrintWriter out;
try { try {
out = response.getWriter(); out = response.getWriter();
out.println("success"); if (signVerified){
// TODO 验签成功后
String outTradeNo = params.get("out_trade_no");
System.out.println(outTradeNo);
AppOrder appOrder = appOrderMapper.selectOneByOutTradeNo(outTradeNo);
AppOrder entity = new AppOrder();
entity.setId(appOrder.getId());
entity.setTradeNo(params.get("trade_no"));
entity.setPayStatus(2);
entity.setPayTime(new Date());
appOrderMapper.updateAppOrder(entity);
AppOrderPay miniOrderWechatPay = new AppOrderPay();
miniOrderWechatPay.setAppid(params.get("app_id"));
miniOrderWechatPay.setOuttradeno(params.get("out_trade_no"));
miniOrderWechatPay.setResultcode(params.get("trade_status"));
miniOrderWechatPay.setTimeend(params.get("gmt_payment"));
miniOrderWechatPay.setTotalfee(params.get("total_amount"));
miniOrderWechatPay.setTransactionid(params.get("trade_no"));
appOrderPayMapper.insertAppOrderPay(miniOrderWechatPay);
//修改用户信息
// updateUser(appOrder);
out.println("success");
} else {
// TODO 验签失败则记录异常日志并在response中返回fail.
out.println("fail");
}
} catch (Exception e) { } catch (Exception e) {
log.info("异常订单:" + params.toString());
log.info("========>PrintWriter fail");
} }
/*StringBuilder sb = new StringBuilder(); /*StringBuilder sb = new StringBuilder();
InputStream in; InputStream in;

View File

@ -0,0 +1,54 @@
package com.ruoyi.app.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* app_inform
*
* @author wyh
* @date 2024-05-15
*/
public class AppInform extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** id */
private Long id;
/** 举报内容 */
@Excel(name = "举报内容")
private String content;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setContent(String content)
{
this.content = content;
}
public String getContent()
{
return content;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("content", getContent())
.append("createTime", getCreateTime())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}

View File

@ -2,9 +2,8 @@ package com.ruoyi.app.domain;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity; import com.ruoyi.common.core.web.domain.BaseEntity;
@ -36,11 +35,11 @@ public class AppOrder extends BaseEntity
/** 支付状态: 1待付款 2已付款 */ /** 支付状态: 1待付款 2已付款 */
@Excel(name = "支付状态: 1待付款 2已付款") @Excel(name = "支付状态: 1待付款 2已付款")
private int payStatus; private Integer payStatus;
/** 支付类型: 1微信2支付宝3兑换码 */ /** 支付类型: 1微信2支付宝3兑换码 */
@Excel(name = "支付类型: 1微信2支付宝3兑换码") @Excel(name = "支付类型: 1微信2支付宝3兑换码")
private int paySoure; private Integer paySoure;
/** 微信订单号 */ /** 微信订单号 */
@Excel(name = "微信订单号") @Excel(name = "微信订单号")
@ -55,109 +54,14 @@ public class AppOrder extends BaseEntity
private String mchId; private String mchId;
@Excel(name = "会员等级1-7天2-一个月3-一年") @Excel(name = "会员等级1-7天2-一个月3-一年")
private int level; private Integer level;
/** 支付时间 */ /** 支付时间 */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date payTime; private Date payTime;
public void setId(Long id) /** 支付时间 */
{ @JsonIgnore
this.id = id; private String payTimeStr;
}
public Long getId()
{
return id;
}
public void setOutTradeNo(String outTradeNo)
{
this.outTradeNo = outTradeNo;
}
public String getOutTradeNo()
{
return outTradeNo;
}
public void setAppId(String appId)
{
this.appId = appId;
}
public String getAppId()
{
return appId;
}
public void setUserId(Long userId)
{
this.userId = userId;
}
public Long getUserId()
{
return userId;
}
public void setPayStatus(int payStatus)
{
this.payStatus = payStatus;
}
public int getPayStatus()
{
return payStatus;
}
public void setPaySoure(int paySoure)
{
this.paySoure = paySoure;
}
public int getPaySoure()
{
return paySoure;
}
public void setTradeNo(String tradeNo)
{
this.tradeNo = tradeNo;
}
public String getTradeNo()
{
return tradeNo;
}
public void setMchId(String mchId)
{
this.mchId = mchId;
}
public String getMchId()
{
return mchId;
}
public void setPayTime(Date payTime)
{
this.payTime = payTime;
}
public Date getPayTime()
{
return payTime;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("outTradeNo", getOutTradeNo())
.append("appId", getAppId())
.append("userId", getUserId())
.append("payStatus", getPayStatus())
.append("paySoure", getPaySoure())
.append("tradeNo", getTradeNo())
.append("price", getPrice())
.append("mchId", getMchId())
.append("payTime", getPayTime())
.append("createTime", getCreateTime())
.toString();
}
} }

View File

@ -64,6 +64,12 @@ public class AppUserDynamic extends BaseEntity
@Excel(name = "是否收藏0是1否") @Excel(name = "是否收藏0是1否")
private int isCollect; private int isCollect;
private Integer provinceId;
private Integer cityId;
private Integer townId;
// 动态ids // 动态ids
private List<Long> ids; private List<Long> ids;

View File

@ -0,0 +1,68 @@
package com.ruoyi.app.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* app_vip
*
* @author wyh
* @date 2024-05-15
*/
public class AppVip extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** id */
private Long id;
/** 会员级别 */
@Excel(name = "会员级别")
private Long level;
/** 会员金额 */
@Excel(name = "会员金额")
private Long price;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setLevel(Long level)
{
this.level = level;
}
public Long getLevel()
{
return level;
}
public void setPrice(Long price)
{
this.price = price;
}
public Long getPrice()
{
return price;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("createTime", getCreateTime())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("level", getLevel())
.append("price", getPrice())
.toString();
}
}

View File

@ -18,7 +18,7 @@ public class PayConfig {
//商户账户 //商户账户
public static String MCH_ID = "1646646755"; public static String MCH_ID = "1646646755";
//异步回调地址 //异步回调地址
public static String wechat_notify_url = "127.0.0.1"; public static String wechat_notify_url = "http://139.224.213.131:7008/pay/wechatNotify";
//商品描述 //商品描述
public static String body = "会员充值"; public static String body = "会员充值";

View File

@ -0,0 +1,11 @@
package com.ruoyi.app.domain.vo;
import com.ruoyi.app.domain.AppOrder;
import lombok.Data;
@Data
public class AppOrderVo extends AppOrder {
private String countPrice;
}

View File

@ -0,0 +1,61 @@
package com.ruoyi.app.mapper;
import java.util.List;
import com.ruoyi.app.domain.AppInform;
/**
* Mapper
*
* @author wyh
* @date 2024-05-15
*/
public interface AppInformMapper
{
/**
*
*
* @param id
* @return
*/
public AppInform selectAppInformById(Long id);
/**
*
*
* @param appInform
* @return
*/
public List<AppInform> selectAppInformList(AppInform appInform);
/**
*
*
* @param appInform
* @return
*/
public int insertAppInform(AppInform appInform);
/**
*
*
* @param appInform
* @return
*/
public int updateAppInform(AppInform appInform);
/**
*
*
* @param id
* @return
*/
public int deleteAppInformById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteAppInformByIds(Long[] ids);
}

View File

@ -2,6 +2,9 @@ package com.ruoyi.app.mapper;
import java.util.List; import java.util.List;
import com.ruoyi.app.domain.AppOrder; import com.ruoyi.app.domain.AppOrder;
import com.ruoyi.app.domain.vo.AppOrderVo;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.apache.ibatis.annotations.Param;
/** /**
* Mapper * Mapper
@ -18,7 +21,7 @@ public interface AppOrderMapper
* @return * @return
*/ */
public AppOrder selectAppOrderById(Long id); public AppOrder selectAppOrderById(Long id);
public AppOrder selectOneByOutTradeNo(String tradeNo); public AppOrder selectOneByOutTradeNo(@Param("tradeNo") String tradeNo);
/** /**
* *
@ -59,4 +62,6 @@ public interface AppOrderMapper
* @return * @return
*/ */
public int deleteAppOrderByIds(Long[] ids); public int deleteAppOrderByIds(Long[] ids);
public AppOrderVo abcd();
} }

View File

@ -0,0 +1,61 @@
package com.ruoyi.app.mapper;
import java.util.List;
import com.ruoyi.app.domain.AppVip;
/**
* Mapper
*
* @author wyh
* @date 2024-05-15
*/
public interface AppVipMapper
{
/**
*
*
* @param id
* @return
*/
public AppVip selectAppVipById(Long id);
/**
*
*
* @param appVip
* @return
*/
public List<AppVip> selectAppVipList(AppVip appVip);
/**
*
*
* @param appVip
* @return
*/
public int insertAppVip(AppVip appVip);
/**
*
*
* @param appVip
* @return
*/
public int updateAppVip(AppVip appVip);
/**
*
*
* @param id
* @return
*/
public int deleteAppVipById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteAppVipByIds(Long[] ids);
}

View File

@ -41,7 +41,7 @@ public class AlipayService {
// 签名类型 // 签名类型
private static final String SIGN_TYPE = "RSA2"; private static final String SIGN_TYPE = "RSA2";
private static final String NOTIFY_URL = "http://139.224.213.131:7008/pay/test"; private static final String NOTIFY_URL = "http://139.224.213.131:7008/pay/aliPayCallback";
private static final String SUBJECT = "订单充值"; private static final String SUBJECT = "订单充值";
@ -143,7 +143,7 @@ public class AlipayService {
request.setNotifyUrl(NOTIFY_URL); request.setNotifyUrl(NOTIFY_URL);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("out_trade_no" , orderNo); jsonObject.put("out_trade_no" , orderNo);
jsonObject.put("total_amount",price); jsonObject.put("total_amount","0.01");
jsonObject.put("subject","订单充值"); jsonObject.put("subject","订单充值");
request.setBizContent(jsonObject.toString()); request.setBizContent(jsonObject.toString());
// 3. 发起请求并处理响应 // 3. 发起请求并处理响应

View File

@ -0,0 +1,61 @@
package com.ruoyi.app.service;
import java.util.List;
import com.ruoyi.app.domain.AppInform;
/**
* Service
*
* @author wyh
* @date 2024-05-15
*/
public interface IAppInformService
{
/**
*
*
* @param id
* @return
*/
public AppInform selectAppInformById(Long id);
/**
*
*
* @param appInform
* @return
*/
public List<AppInform> selectAppInformList(AppInform appInform);
/**
*
*
* @param appInform
* @return
*/
public int insertAppInform(AppInform appInform);
/**
*
*
* @param appInform
* @return
*/
public int updateAppInform(AppInform appInform);
/**
*
*
* @param ids
* @return
*/
public int deleteAppInformByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteAppInformById(Long id);
}

View File

@ -0,0 +1,65 @@
package com.ruoyi.app.service;
import java.util.List;
import com.ruoyi.app.domain.AppOrder;
import com.ruoyi.app.domain.vo.AppOrderVo;
import com.ruoyi.common.core.web.domain.AjaxResult;
/**
* Service
*
* @author wyh
* @date 2024-05-15
*/
public interface IAppOrderService
{
/**
*
*
* @param id
* @return
*/
public AppOrder selectAppOrderById(Long id);
/**
*
*
* @param appOrder
* @return
*/
public List<AppOrderVo> selectAppOrderList(AppOrder appOrder);
/**
*
*
* @param appOrder
* @return
*/
public int insertAppOrder(AppOrder appOrder);
/**
*
*
* @param appOrder
* @return
*/
public int updateAppOrder(AppOrder appOrder);
/**
*
*
* @param ids
* @return
*/
public int deleteAppOrderByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteAppOrderById(Long id);
AppOrderVo abcd();
}

View File

@ -0,0 +1,61 @@
package com.ruoyi.app.service;
import java.util.List;
import com.ruoyi.app.domain.AppVip;
/**
* Service
*
* @author wyh
* @date 2024-05-15
*/
public interface IAppVipService
{
/**
*
*
* @param id
* @return
*/
public AppVip selectAppVipById(Long id);
/**
*
*
* @param appVip
* @return
*/
public List<AppVip> selectAppVipList(AppVip appVip);
/**
*
*
* @param appVip
* @return
*/
public int insertAppVip(AppVip appVip);
/**
*
*
* @param appVip
* @return
*/
public int updateAppVip(AppVip appVip);
/**
*
*
* @param ids
* @return
*/
public int deleteAppVipByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteAppVipById(Long id);
}

View File

@ -0,0 +1,96 @@
package com.ruoyi.app.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.app.mapper.AppInformMapper;
import com.ruoyi.app.domain.AppInform;
import com.ruoyi.app.service.IAppInformService;
/**
* Service
*
* @author wyh
* @date 2024-05-15
*/
@Service
public class AppInformServiceImpl implements IAppInformService
{
@Autowired
private AppInformMapper appInformMapper;
/**
*
*
* @param id
* @return
*/
@Override
public AppInform selectAppInformById(Long id)
{
return appInformMapper.selectAppInformById(id);
}
/**
*
*
* @param appInform
* @return
*/
@Override
public List<AppInform> selectAppInformList(AppInform appInform)
{
return appInformMapper.selectAppInformList(appInform);
}
/**
*
*
* @param appInform
* @return
*/
@Override
public int insertAppInform(AppInform appInform)
{
appInform.setCreateTime(DateUtils.getNowDate());
return appInformMapper.insertAppInform(appInform);
}
/**
*
*
* @param appInform
* @return
*/
@Override
public int updateAppInform(AppInform appInform)
{
appInform.setUpdateTime(DateUtils.getNowDate());
return appInformMapper.updateAppInform(appInform);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteAppInformByIds(Long[] ids)
{
return appInformMapper.deleteAppInformByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteAppInformById(Long id)
{
return appInformMapper.deleteAppInformById(id);
}
}

View File

@ -0,0 +1,121 @@
package com.ruoyi.app.service.impl;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.stream.Collectors;
import com.ruoyi.app.domain.vo.AppOrderVo;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.app.mapper.AppOrderMapper;
import com.ruoyi.app.domain.AppOrder;
import com.ruoyi.app.service.IAppOrderService;
/**
* Service
*
* @author wyh
* @date 2024-05-15
*/
@Service
public class AppOrderServiceImpl implements IAppOrderService
{
@Autowired
private AppOrderMapper appOrderMapper;
/**
*
*
* @param id
* @return
*/
@Override
public AppOrder selectAppOrderById(Long id)
{
return appOrderMapper.selectAppOrderById(id);
}
/**
*
*
* @param appOrder
* @return
*/
@Override
public List<AppOrderVo> selectAppOrderList(AppOrder appOrder)
{
if (appOrder.getPayTime() != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
appOrder.setPayTimeStr(sdf.format(appOrder.getPayTime()));
}
List<AppOrder> appOrders = appOrderMapper.selectAppOrderList(appOrder);
double sum = appOrders.stream().mapToDouble(ppOrder -> Double.parseDouble(ppOrder.getPrice())).sum();
List<AppOrderVo> orderVo = appOrders.stream().map(order -> {
AppOrderVo appOrderVo = new AppOrderVo();
BeanUtils.copyProperties(order, appOrderVo);
appOrderVo.setCountPrice(String.valueOf(sum));
return appOrderVo;
}).collect(Collectors.toList());
return orderVo;
}
/**
*
*
* @param appOrder
* @return
*/
@Override
public int insertAppOrder(AppOrder appOrder)
{
appOrder.setCreateTime(DateUtils.getNowDate());
return appOrderMapper.insertAppOrder(appOrder);
}
/**
*
*
* @param appOrder
* @return
*/
@Override
public int updateAppOrder(AppOrder appOrder)
{
return appOrderMapper.updateAppOrder(appOrder);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteAppOrderByIds(Long[] ids)
{
return appOrderMapper.deleteAppOrderByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteAppOrderById(Long id)
{
return appOrderMapper.deleteAppOrderById(id);
}
@Override
public AppOrderVo abcd() {
return appOrderMapper.abcd();
}
}

View File

@ -103,56 +103,108 @@ public class AppProvinceServiceImpl implements IAppProvinceService {
@Override @Override
public List<AreaVo> selectAppProvinceTree() { public List<AreaVo> selectAppProvinceTree() {
List<AppProvince> appProvinces = appProvinceMapper.selectAppProvinceList(null); List<AppProvince> appProvinces = appProvinceMapper.selectAppProvinceList(null);
List<AreaVo> areaVos = new ArrayList<>();
List<AreaVo> collect = appProvinces.stream() for (AppProvince appProvince : appProvinces) {
.map(appProvince -> { AreaVo areaVo = new AreaVo();
AreaVo areaVo = new AreaVo(); areaVo.setId(appProvince.getId());
areaVo.setId(appProvince.getId()); areaVo.setName(appProvince.getName());
areaVo.setName(appProvince.getName()); areaVo.setLevel(1);
areaVo.setLevel(1); areaVo.setIsLeaf(false);
areaVo.setIsLeaf(false); List<AreaVo> list = new ArrayList<>();
List<AppCity> appCities = appCityMapper.selectAppCityListByProvinceId(appProvince.getId());
List<AppCity> appCities = appCityMapper.selectAppCityListByProvinceId(appProvince.getId()); boolean flag = true;
if (appCities == null || appCities.isEmpty()) { for (AppCity appCity : appCities) {
return areaVo; if (appCity.getName().equals(areaVo.getName())) {
List<AreaVo> vos = new ArrayList<>();
List<AppTown> appTowns = appTownMapper.getTownByCityId(appCity.getId());
for (AppTown appTown : appTowns) {
AreaVo townChild = new AreaVo();
townChild.setId(appTown.getId());
townChild.setName(appTown.getName());
townChild.setLevel(2);
townChild.setIsLeaf(true);
vos.add(townChild);
} }
flag = false;
areaVo.setChildren(vos);
continue;
}
flag = true;
AreaVo child = new AreaVo();
child.setId(appCity.getId());
child.setName(appCity.getName());
child.setLevel(2);
child.setIsLeaf(false);
List<AreaVo> vos = new ArrayList<>();
List<AppTown> appTowns = appTownMapper.getTownByCityId(appCity.getId());
for (AppTown appTown : appTowns) {
AreaVo townChild = new AreaVo();
townChild.setId(appTown.getId());
townChild.setName(appTown.getName());
townChild.setLevel(3);
townChild.setIsLeaf(true);
vos.add(townChild);
}
child.setChildren(vos);
list.add(child);
}
if (flag){
areaVo.setChildren(list);
}
areaVos.add(areaVo);
}
return areaVos;
List<AreaVo> children = appCities.stream() // List<AreaVo> collect = appProvinces.stream()
.map(appCity -> { // .map(appProvince -> {
AreaVo child = new AreaVo(); // AreaVo areaVo = new AreaVo();
child.setId(appCity.getId()); // areaVo.setId(appProvince.getId());
child.setName(appCity.getName()); // areaVo.setName(appProvince.getName());
child.setLevel(2); // areaVo.setLevel(1);
child.setIsLeaf(false); // areaVo.setIsLeaf(false);
//
List<AppTown> appTowns = appTownMapper.getTownByCityId(appCity.getId()); // List<AppCity> appCities = appCityMapper.selectAppCityListByProvinceId(appProvince.getId());
if (appTowns == null || appTowns.isEmpty()) { // if (appCities == null || appCities.isEmpty()) {
return child; // return areaVo;
} // }
//
List<AreaVo> townChildren = appTowns.stream() // List<AreaVo> children = appCities.stream()
// .filter(!appTown -> !appTown.getId().equals(appCity.getId())) // Filter out where child id is same as parent id // .map(appCity -> {
.map(appTown -> { // AreaVo child = new AreaVo();
AreaVo townChild = new AreaVo(); // child.setId(appCity.getId());
townChild.setId(appTown.getId()); // child.setName(appCity.getName());
townChild.setName(appTown.getName()); // child.setLevel(2);
townChild.setLevel(3); // child.setIsLeaf(false);
townChild.setIsLeaf(true); //
return townChild; // List<AppTown> appTowns = appTownMapper.getTownByCityId(appCity.getId());
}) // if (appTowns == null || appTowns.isEmpty()) {
.collect(Collectors.toList()); // return child;
// }
child.setChildren(townChildren); //
return child; // List<AreaVo> townChildren = appTowns.stream()
}) //// .filter(!appTown -> !appTown.getId().equals(appCity.getId())) // Filter out where child id is same as parent id
.collect(Collectors.toList()); // .map(appTown -> {
// AreaVo townChild = new AreaVo();
areaVo.setChildren(children); // townChild.setId(appTown.getId());
return areaVo; // townChild.setName(appTown.getName());
}) // townChild.setLevel(3);
.collect(Collectors.toList()); // townChild.setIsLeaf(true);
// return townChild;
return collect; // })
// .collect(Collectors.toList());
//
// child.setChildren(townChildren);
// return child;
// })
// .collect(Collectors.toList());
//
// areaVo.setChildren(children);
// return areaVo;
// })
// .collect(Collectors.toList());
//
// return collect;
} }
} }

View File

@ -0,0 +1,96 @@
package com.ruoyi.app.service.impl;
import java.util.List;
import com.ruoyi.common.core.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.app.mapper.AppVipMapper;
import com.ruoyi.app.domain.AppVip;
import com.ruoyi.app.service.IAppVipService;
/**
* Service
*
* @author wyh
* @date 2024-05-15
*/
@Service
public class AppVipServiceImpl implements IAppVipService
{
@Autowired
private AppVipMapper appVipMapper;
/**
*
*
* @param id
* @return
*/
@Override
public AppVip selectAppVipById(Long id)
{
return appVipMapper.selectAppVipById(id);
}
/**
*
*
* @param appVip
* @return
*/
@Override
public List<AppVip> selectAppVipList(AppVip appVip)
{
return appVipMapper.selectAppVipList(appVip);
}
/**
*
*
* @param appVip
* @return
*/
@Override
public int insertAppVip(AppVip appVip)
{
appVip.setCreateTime(DateUtils.getNowDate());
return appVipMapper.insertAppVip(appVip);
}
/**
*
*
* @param appVip
* @return
*/
@Override
public int updateAppVip(AppVip appVip)
{
appVip.setUpdateTime(DateUtils.getNowDate());
return appVipMapper.updateAppVip(appVip);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteAppVipByIds(Long[] ids)
{
return appVipMapper.deleteAppVipByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteAppVipById(Long id)
{
return appVipMapper.deleteAppVipById(id);
}
}

View File

@ -0,0 +1,68 @@
<?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="com.ruoyi.app.mapper.AppInformMapper">
<resultMap type="AppInform" id="AppInformResult">
<result property="id" column="id" />
<result property="content" column="content" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
</resultMap>
<sql id="selectAppInformVo">
select id, content, create_time, update_time, remark from app_inform
</sql>
<select id="selectAppInformList" parameterType="AppInform" resultMap="AppInformResult">
<include refid="selectAppInformVo"/>
<where>
<if test="content != null and content != ''"> and content = #{content}</if>
</where>
</select>
<select id="selectAppInformById" parameterType="Long" resultMap="AppInformResult">
<include refid="selectAppInformVo"/>
where id = #{id}
</select>
<insert id="insertAppInform" parameterType="AppInform" useGeneratedKeys="true" keyProperty="id">
insert into app_inform
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="content != null">content,</if>
<if test="createTime != null">create_time,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="content != null">#{content},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<update id="updateAppInform" parameterType="AppInform">
update app_inform
<trim prefix="SET" suffixOverrides=",">
<if test="content != null">content = #{content},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteAppInformById" parameterType="Long">
delete from app_inform where id = #{id}
</delete>
<delete id="deleteAppInformByIds" parameterType="String">
delete from app_inform where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -25,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectAppOrderList" parameterType="AppOrder" resultMap="AppOrderResult"> <select id="selectAppOrderList" parameterType="AppOrder" resultMap="AppOrderResult">
<include refid="selectAppOrderVo"/> <include refid="selectAppOrderVo"/>
<where> <where>
<if test="outTradeNo != null and outTradeNo != ''"> and out_trade_no = #{outTradeNo}</if> <if test="outTradeNo != null and outTradeNo != ''"> and out_trade_no = #{outTradeNo}</if>
<if test="appId != null and appId != ''"> and app_id = #{appId}</if> <if test="appId != null and appId != ''"> and app_id = #{appId}</if>
<if test="userId != null "> and user_id = #{userId}</if> <if test="userId != null "> and user_id = #{userId}</if>
@ -34,8 +34,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="tradeNo != null and tradeNo != ''"> and trade_no = #{tradeNo}</if> <if test="tradeNo != null and tradeNo != ''"> and trade_no = #{tradeNo}</if>
<if test="price != null "> and price = #{price}</if> <if test="price != null "> and price = #{price}</if>
<if test="mchId != null and mchId != ''"> and mch_id = #{mchId}</if> <if test="mchId != null and mchId != ''"> and mch_id = #{mchId}</if>
<if test="payTime != null "> and pay_time = #{payTime}</if> <if test="payTime != null "> and pay_time like concat (#{payTimeStr} , '%')</if>
</where> </where>
order by create_time desc
</select> </select>
<select id="selectAppOrderById" parameterType="Long" resultMap="AppOrderResult"> <select id="selectAppOrderById" parameterType="Long" resultMap="AppOrderResult">
@ -43,9 +44,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id} where id = #{id}
</select> </select>
<select id="selectOneByOutTradeNo" parameterType="Long" resultMap="AppOrderResult"> <select id="selectOneByOutTradeNo" parameterType="java.lang.String" resultMap="AppOrderResult">
<include refid="selectAppOrderVo"/> <include refid="selectAppOrderVo"/>
where outTradeNo = #{tradeNo} where out_trade_no = #{tradeNo}
</select> </select>
<insert id="insertAppOrder" parameterType="AppOrder" useGeneratedKeys="true" keyProperty="id"> <insert id="insertAppOrder" parameterType="AppOrder" useGeneratedKeys="true" keyProperty="id">
@ -105,4 +106,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id} #{id}
</foreach> </foreach>
</delete> </delete>
<select id="abcd" resultType="AppOrderVo">
SELECT SUM(price) as countPrice FROM app_order WHERE DATE(pay_time) = CURDATE();
</select>
</mapper> </mapper>

View File

@ -21,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectAppUserDynamicVo"> <sql id="selectAppUserDynamicVo">
select id, user_id, content, video_url, topic_id, address, privacy_status, remark, create_time, update_time, create_by, updateBy,is_top from app_user_dynamic select id, user_id, content, video_url, topic_id, address, privacy_status, remark, create_time, update_time, create_by, updateBy,is_top ,city_id , province_id , townId from app_user_dynamic
</sql> </sql>
<select id="selectAppUserDynamicList" parameterType="AppUserDynamic" resultMap="AppUserDynamicResult"> <select id="selectAppUserDynamicList" parameterType="AppUserDynamic" resultMap="AppUserDynamicResult">
@ -66,6 +66,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateBy != null and updateBy != ''"> and a.updateBy = #{updateBy}</if> <if test="updateBy != null and updateBy != ''"> and a.updateBy = #{updateBy}</if>
<if test="isTop != null "> and a.is_top = #{isTop}</if> <if test="isTop != null "> and a.is_top = #{isTop}</if>
<if test="isMember != null "> and u.is_member = #{isMember}</if> <if test="isMember != null "> and u.is_member = #{isMember}</if>
<if test="cityId != null "> and a.city_id = #{cityId}</if>
<if test="provinceId != null"> and a.province_id = #{provinceId}</if>
<if test="townId != null"> and a.town_id = #{townId}</if>
<if test="ids != null and ids.size() > 0"> <if test="ids != null and ids.size() > 0">
and a.id in and a.id in
<foreach collection="ids" item="item" open="(" separator="," close=")"> <foreach collection="ids" item="item" open="(" separator="," close=")">
@ -73,7 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach> </foreach>
</if> </if>
</where> </where>
order by a.is_top,a.create_time order by a.is_top,a.create_time desc
</select> </select>
<select id="selectAppUserDynamicById" parameterType="Long" resultMap="AppUserDynamicResult"> <select id="selectAppUserDynamicById" parameterType="Long" resultMap="AppUserDynamicResult">
@ -96,6 +99,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null">create_by,</if> <if test="createBy != null">create_by,</if>
<if test="updateBy != null">updateBy,</if> <if test="updateBy != null">updateBy,</if>
<if test="isTop != null">is_top,</if> <if test="isTop != null">is_top,</if>
<if test="cityId != null">city_id,</if>
<if test="provinceId != null">province_id,</if>
<if test="townId != null">town_id,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if> <if test="userId != null">#{userId},</if>
@ -110,6 +116,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null">#{createBy},</if> <if test="createBy != null">#{createBy},</if>
<if test="updateBy != null">#{updateBy},</if> <if test="updateBy != null">#{updateBy},</if>
<if test="isTop != null">#{isTop},</if> <if test="isTop != null">#{isTop},</if>
<if test="cityId != null">#{cityId},</if>
<if test="provinceId != null">#{provinceId},</if>
<if test="townId != null">#{townId},</if>
</trim> </trim>
</insert> </insert>

View File

@ -0,0 +1,75 @@
<?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="com.ruoyi.app.mapper.AppVipMapper">
<resultMap type="AppVip" id="AppVipResult">
<result property="id" column="id" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="level" column="level" />
<result property="price" column="price" />
</resultMap>
<sql id="selectAppVipVo">
select id, create_time, update_time, remark, level, price from app_vip
</sql>
<select id="selectAppVipList" parameterType="AppVip" resultMap="AppVipResult">
<include refid="selectAppVipVo"/>
<where>
<if test="level != null "> and level = #{level}</if>
<if test="price != null "> and price = #{price}</if>
</where>
</select>
<select id="selectAppVipById" parameterType="Long" resultMap="AppVipResult">
<include refid="selectAppVipVo"/>
where id = #{id}
</select>
<insert id="insertAppVip" parameterType="AppVip">
insert into app_vip
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="createTime != null">create_time,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
<if test="level != null">level,</if>
<if test="price != null">price,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
<if test="level != null">#{level},</if>
<if test="price != null">#{price},</if>
</trim>
</insert>
<update id="updateAppVip" parameterType="AppVip">
update app_vip
<trim prefix="SET" suffixOverrides=",">
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="level != null">level = #{level},</if>
<if test="price != null">price = #{price},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteAppVipById" parameterType="Long">
delete from app_vip where id = #{id}
</delete>
<delete id="deleteAppVipByIds" parameterType="String">
delete from app_vip where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -0,0 +1,11 @@
import request from '@/utils/request'
export function generCode(num) {
return request({
url: '/app/pay/generateCode/' ,
method: 'get',
pararm: {num: num},
responseType: 'blob',
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询举报列表
export function listInform(query) {
return request({
url: '/app/inform/list',
method: 'get',
params: query
})
}
// 查询举报详细
export function getInform(id) {
return request({
url: '/app/inform/' + id,
method: 'get'
})
}
// 新增举报
export function addInform(data) {
return request({
url: '/app/inform',
method: 'post',
data: data
})
}
// 修改举报
export function updateInform(data) {
return request({
url: '/app/inform',
method: 'put',
data: data
})
}
// 删除举报
export function delInform(id) {
return request({
url: '/app/inform/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,52 @@
import request from '@/utils/request'
export function abcd() {
return request({
url: '/app/order/abcd',
method: 'get'
})
}
// 查询订单列表
export function listOrder(query) {
return request({
url: '/app/order/list',
method: 'get',
params: query
})
}
// 查询订单详细
export function getOrder(id) {
return request({
url: '/app/order/' + id,
method: 'get'
})
}
// 新增订单
export function addOrder(data) {
return request({
url: '/app/order',
method: 'post',
data: data
})
}
// 修改订单
export function updateOrder(data) {
return request({
url: '/app/order',
method: 'put',
data: data
})
}
// 删除订单
export function delOrder(id) {
return request({
url: '/app/order/' + id,
method: 'delete'
})
}

44
gan-ui/src/api/app/vip.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询会员信息列表
export function listVip(query) {
return request({
url: '/app/vip/list',
method: 'get',
params: query
})
}
// 查询会员信息详细
export function getVip(id) {
return request({
url: '/app/vip/' + id,
method: 'get'
})
}
// 新增会员信息
export function addVip(data) {
return request({
url: '/app/vip/add',
method: 'post',
data: data
})
}
// 修改会员信息
export function updateVip(data) {
return request({
url: '/app/vip',
method: 'put',
data: data
})
}
// 删除会员信息
export function delVip(id) {
return request({
url: '/app/vip/' + id,
method: 'delete'
})
}

View File

@ -14,73 +14,73 @@
import {listDynamic, getDynamic, treeDynamic} from "@/api/app/dynamic"; import {listDynamic, getDynamic, treeDynamic} from "@/api/app/dynamic";
export default { // export default {
//
data() { // data() {
return { // return {
id: '', // id: '',
// // //
loading: true, // loading: true,
// // //
ids: [], // ids: [],
// // //
single: true, // single: true,
// // //
multiple: true, // multiple: true,
// // //
showSearch: true, // showSearch: true,
// // //
total: 0, // total: 0,
// App // // App
dynamicList: [], // dynamicList: [],
// // //
title: "", // title: "",
// // //
open: false, // open: false,
//
//
created() { // created() {
this.getList(); // this.getList();
this.getDynamic(this.id); // this.getDynamic(this.id);
}, // },
//
mounted: function () { // mounted: function () {
this.id = this.$route().params.dynamicId; // this.id = this.$route().params.dynamicId;
}, // },
methods: { // methods: {
//
getList() { // getList() {
this.loading = true; // this.loading = true;
listDynamic(this.queryParams).then(response => { // listDynamic(this.queryParams).then(response => {
this.registerList = response.rows; // this.registerList = response.rows;
this.total = response.total; // this.total = response.total;
this.loading = false; // this.loading = false;
}); // });
}, // },
handleDetail(row) { // handleDetail(row) {
const id = row.id || row.ids; // const id = row.id || row.ids;
//
this.$router.push({path: '/app/dynamic/detail'}); // this.$router.push({path: '/app/dynamic/detail'});
this.queryParams.dynamicId = id; // this.queryParams.dynamicId = id;
//
treeDynamic(this.queryParams).then(response => { // treeDynamic(this.queryParams).then(response => {
this.form = response.data; // this.form = response.data;
this.open = true; // this.open = true;
this.title = "App用户动态详情"; // this.title = "App";
//
// Access the data here // // Access the data here
console.log(this.form); // Or use the data in any way you need // console.log(this.form); // Or use the data in any way you need
}); // });
}, // },
getDynamic(id){ // getDynamic(id){
getDynamic(id).then(response => { // getDynamic(id).then(response => {
console.log(response.data); // console.log(response.data);
}) // })
} // }
//
} // }
//
} // }
} // }
} // }
</script> </script>

View File

@ -162,7 +162,7 @@
</template> </template>
<script> <script>
import { listDynamic, getDynamic, delDynamic, addDynamic, updateDynamic , treeDynamic } from "@/api/app/dynamic"; import { listDynamic, getDynamic, delDynamic, addDynamic, updateDynamic } from "@/api/app/dynamic";
export default { export default {
name: "Dynamic", name: "Dynamic",
@ -199,9 +199,6 @@ export default {
updateBy: null, updateBy: null,
isTop: null isTop: null
}, },
treeParam: {
dynamicId:''
},
// //
form: {}, form: {},
// //
@ -264,19 +261,8 @@ export default {
}, },
/** 详情按钮操作 跳转到新页面*/ /** 详情按钮操作 跳转到新页面*/
handleDetail(row) { handleDetail(row) {
const id = row.id || row.ids; const id = row.id || 0;
this.$router.push({path: '/dynamic/detail'+ id})
this.$router.push({path: '/app/dynamic/detail'});
this.queryParams.dynamicId = id;
treeDynamic(this.queryParams).then(response => {
this.form = response.data;
this.open = true;
this.title = "App用户动态详情";
});
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {

View File

@ -0,0 +1,245 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item>
<!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>-->
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>-->
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- v-hasPermi="['app:inform:add']"-->
<!-- >新增</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['app:inform:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['app:inform:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['app:inform:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="informList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="id" align="center" prop="id" />-->
<el-table-column label="举报时间" align="center" prop="createTime" />
<el-table-column label="举报内容" align="center" prop="content" />
<!-- <el-table-column label="备注" align="center" prop="remark" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['app:inform:edit']"-->
<!-- >修改</el-button>-->
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['app:inform:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改举报对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="举报内容">
<editor v-model="form.content" :min-height="192"/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listInform, getInform, delInform, addInform, updateInform } from "@/api/app/inform";
export default {
name: "Inform",
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
informList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
content: null,
},
//
form: {},
//
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询举报列表 */
getList() {
this.loading = true;
listInform(this.queryParams).then(response => {
this.informList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
content: null,
createTime: null,
updateTime: null,
remark: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加举报";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getInform(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改举报";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateInform(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addInform(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除举报编号为"' + ids + '"的数据项?').then(function() {
return delInform(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('app/inform/export', {
...this.queryParams
}, `inform_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -0,0 +1,366 @@
<template>
<div class="app-container">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>今日收入总计</span>
</div>
<div v-model="sumCount"class="text item">
{{ sumCount + '元' }}
</div>
</el-card>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px" style="padding-top: 30px">
<el-form-item label="支付类型" prop="paySoure">
<el-select
v-model="queryParams.paySoure"
placeholder="请输入支付类型"
clearable
@keyup.enter.native="handleQuery"
>
<el-option label="微信" value="1"></el-option>
<el-option label="支付宝" value="2"></el-option>
<el-option label="兑换码" value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="支付时间" prop="payTime">
<el-date-picker clearable
v-model="queryParams.payTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择支付时间">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['app:order:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['app:order:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['app:order:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['app:order:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="orderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="订单号" align="center" prop="outTradeNo" />
<el-table-column label="支付状态" align="center" prop="payStatus" >
<template slot-scope="scope">
{{ scope.row.payStatus == 1 ? '待付款' : scope.row.payStatus == 2 ? '已付款' : '' }}
</template>
</el-table-column>
<el-table-column label="支付类型" align="center" prop="paySoure" >
<template slot-scope="scope">
{{ scope.row.paySoure == 1 ? '微信' : scope.row.paySoure == 2 ? '支付宝' : scope.row.paySoure == 3 ? '兑换码' : '' }}
</template>
</el-table-column>
<el-table-column label="支付金额" align="center" prop="price" />
<el-table-column label="支付时间" align="center" prop="payTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.payTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['app:order:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['app:order:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改订单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="订单号" prop="outTradeNo">
<el-input v-model="form.outTradeNo" placeholder="请输入订单号" />
</el-form-item>
<el-form-item label="小程序id" prop="appId">
<el-input v-model="form.appId" placeholder="请输入小程序id" />
</el-form-item>
<el-form-item label="${comment}" prop="userId">
<el-input v-model="form.userId" placeholder="请输入${comment}" />
</el-form-item>
<el-form-item label="支付类型: 1微信2支付宝3兑换码" prop="paySoure">
<el-input v-model="form.paySoure" placeholder="请输入支付类型: 1微信2支付宝3兑换码" />
</el-form-item>
<el-form-item label="微信订单号" prop="tradeNo">
<el-input v-model="form.tradeNo" placeholder="请输入微信订单号" />
</el-form-item>
<el-form-item label="支付金额" prop="price">
<el-input v-model="form.price" placeholder="请输入支付金额" />
</el-form-item>
<el-form-item label="商户id" prop="mchId">
<el-input v-model="form.mchId" placeholder="请输入商户id" />
</el-form-item>
<el-form-item label="支付时间" prop="payTime">
<el-date-picker clearable
v-model="form.payTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择支付时间">
</el-date-picker>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOrder, getOrder, delOrder, addOrder, updateOrder , abcd} from "@/api/app/order";
export default {
name: "Order",
data() {
return {
sumCount :'',
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
orderList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
outTradeNo: null,
appId: null,
userId: null,
payStatus: null,
paySoure: null,
tradeNo: null,
price: null,
mchId: null,
payTime: null,
},
//
form: {},
//
rules: {
outTradeNo: [
{ required: true, message: "订单号不能为空", trigger: "blur" }
],
payStatus: [
{ required: true, message: "支付状态: 1待付款 2已付款不能为空", trigger: "change" }
],
}
};
},
created() {
this.getList();
this.handleabcd();
},
methods: {
/** 查询订单列表 */
getList() {
this.loading = true;
listOrder(this.queryParams).then(response => {
this.orderList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
outTradeNo: null,
appId: null,
userId: null,
payStatus: null,
paySoure: null,
tradeNo: null,
price: null,
mchId: null,
payTime: null,
createTime: null
};
this.resetForm("form");
},
handleabcd(){
abcd().then(response => {
console.log(response)
this.sumCount = response.data.countPrice
})
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getOrder(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改订单";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOrder(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOrder(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单编号为"' + ids + '"的数据项?').then(function() {
return delOrder(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('app/order/export', {
...this.queryParams
}, `order_${new Date().getTime()}.xlsx`)
}
}
};
</script>
<style>
.text {
font-size: 18px;
color: #606266;
line-height: 25px;
margin-bottom: 10px;
center : 10px;
}
.item {
margin-bottom: 18px;
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both
}
.box-card {
width: 220px;
background-color: lawngreen;
}
</style>

View File

@ -0,0 +1,33 @@
<template>
<div>
<el-input v-model="num" placeholder="请输入兑换码个数" style="width: 200px;" class="filter-item"/>
<el-button type="primary" @click="handleSend(num)"></el-button>
</div>
</template>
<script>
import {generCode} from '@/api/app/gener'
import {download} from '@/utils/request'
export default {
data() {
return {
num: 0,
}
},
methods: {
handleSend(num) {
download('/app/pay/generateCode' , {num: num}, '兑换码.xlsx');
}
},
}
</script>

View File

@ -0,0 +1,277 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="会员级别" prop="level">
<el-select
v-model="queryParams.level"
placeholder="请选择会员级别"
clearable
@keyup.enter.native="handleQuery"
>
<el-option label="7天试用" value="1"></el-option>
<el-option label="连续包月" value="2"></el-option>
<el-option label="连续包年" value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="会员金额" prop="price">
<el-input
v-model="queryParams.price"
placeholder="请输入会员金额"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['app:vip:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['app:vip:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['app:vip:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['app:vip:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="vipList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="会员级别" align="center" prop="level" >
<template slot-scope="scope">
<el-tag :type="scope.row.level === 1 ? 'primary' : scope.row.level === 2 ? 'warning' : scope.row.level === 3 ? 'success' : 'danger'">{{scope.row.level === 1 ? '7天试用' : scope.row.level === 2 ? '连续包月' : scope.row.level === 3 ? '连续包年' : '等级不存在'}}</el-tag>
</template>
</el-table-column>
<el-table-column label="会员金额" align="center" prop="price" >
<template slot-scope="scope">
<span>{{scope.row.price}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['app:vip:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['app:vip:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改会员信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="会员级别" prop="level" width="500px">
<el-select v-model="form.level" placeholder="请输入会员级别">
<el-option label="7天试用" value="1"></el-option>
<el-option label="连续包月" value="2"></el-option>
<el-option label="连续包年" value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="会员金额" prop="price">
<el-input v-model="form.price" placeholder="请输入会员金额(整数)" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listVip, getVip, delVip, addVip, updateVip } from "@/api/app/vip";
export default {
name: "Vip",
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
vipList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
level: null,
price: null
},
//
form: {},
//
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询会员信息列表 */
getList() {
this.loading = true;
listVip(this.queryParams).then(response => {
this.vipList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
createTime: null,
updateTime: null,
remark: null,
level: null,
price: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加会员信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getVip(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改会员信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateVip(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addVip(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除会员信息编号为"' + ids + '"的数据项?').then(function() {
return delVip(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('app/vip/export', {
...this.queryParams
}, `vip_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -1,912 +1,3 @@
<!--<template>-->
<!-- <div class="app-container home">-->
<!--&lt;!&ndash; <el-row :gutter="20">&ndash;&gt;-->
<!-- <el-col :sm="24" :lg="24">-->
<!-- <blockquote class="text-warning" style="font-size: 14px">-->
<!-- 领取阿里云通用云产品1888优惠券-->
<!-- <br />-->
<!-- <el-link-->
<!-- href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"-->
<!-- type="primary"-->
<!-- target="_blank"-->
<!-- >https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link-->
<!-- >-->
<!-- <br />-->
<!-- 领取腾讯云通用云产品2860优惠券-->
<!-- <br />-->
<!-- <el-link-->
<!-- href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"-->
<!-- type="primary"-->
<!-- target="_blank"-->
<!-- >https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link-->
<!-- >-->
<!-- <br />-->
<!-- 阿里云服务器折扣区-->
<!-- <el-link href="http://aly.ruoyi.vip" type="primary" target="_blank"-->
<!-- >>点我进入</el-link-->
<!-- >-->
<!-- &nbsp;&nbsp;&nbsp; 腾讯云服务器秒杀区-->
<!-- <el-link href="http://txy.ruoyi.vip" type="primary" target="_blank"-->
<!-- >>点我进入</el-link-->
<!-- ><br />-->
<!-- <h4 class="text-danger">-->
<!-- 云产品通用红包可叠加官网常规优惠使用(仅限新用户)-->
<!-- </h4>-->
<!-- </blockquote>-->
<!-- <hr />-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :sm="24" :lg="12" style="padding-left: 20px">-->
<!-- <h2>若依后台管理框架</h2>-->
<!-- <p>-->
<!-- 一直想做一款后台管理系统看了很多优秀的开源项目但是发现没有合适自己的于是利用空闲休息时间开始自己写一套后台系统如此有了若依管理系统她可以用于所有的Web应用程序如网站管理后台网站会员中心CMSCRMOA等等当然您也可以对她进行深度定制以做出更强系统所有前端后台代码封装过后十分精简易上手出错概率低同时支持移动客户端访问系统会陆续更新一些实用功能-->
<!-- </p>-->
<!-- <p>-->
<!-- <b>当前版本:</b> <span>v{{ version }}</span>-->
<!-- </p>-->
<!-- <p>-->
<!-- <el-tag type="danger">&yen;免费开源</el-tag>-->
<!-- </p>-->
<!-- <p>-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- size="mini"-->
<!-- icon="el-icon-cloudy"-->
<!-- plain-->
<!-- @click="goTarget('https://gitee.com/y_project/RuoYi-Cloud')"-->
<!-- >访问码云</el-button-->
<!-- >-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- icon="el-icon-s-home"-->
<!-- plain-->
<!-- @click="goTarget('http://ruoyi.vip')"-->
<!-- >访问主页</el-button-->
<!-- >-->
<!-- </p>-->
<!-- </el-col>-->
<!-- <el-col :sm="24" :lg="12" style="padding-left: 50px">-->
<!-- <el-row>-->
<!-- <el-col :span="12">-->
<!-- <h2>技术选型</h2>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="6">-->
<!-- <h4>后端技术</h4>-->
<!-- <ul>-->
<!-- <li>SpringBoot</li>-->
<!-- <li>SpringCloud</li>-->
<!-- <li>Nacos</li>-->
<!-- <li>Sentinel</li>-->
<!-- <li>Seata</li>-->
<!-- <li>Minio</li>-->
<!-- <li>...</li>-->
<!-- </ul>-->
<!-- </el-col>-->
<!-- <el-col :span="6">-->
<!-- <h4>前端技术</h4>-->
<!-- <ul>-->
<!-- <li>Vue</li>-->
<!-- <li>Vuex</li>-->
<!-- <li>Element-ui</li>-->
<!-- <li>Axios</li>-->
<!-- <li>Echarts</li>-->
<!-- <li>Quill</li>-->
<!-- <li>...</li>-->
<!-- </ul>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-divider />-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :xs="24" :sm="24" :md="12" :lg="8">-->
<!-- <el-card class="update-log">-->
<!-- <div slot="header" class="clearfix">-->
<!-- <span>联系信息</span>-->
<!-- </div>-->
<!-- <div class="body">-->
<!-- <p>-->
<!-- <i class="el-icon-s-promotion"></i> 官网<el-link-->
<!-- href="http://www.ruoyi.vip"-->
<!-- target="_blank"-->
<!-- >http://www.ruoyi.vip</el-link-->
<!-- >-->
<!-- </p>-->
<!-- <p>-->
<!-- <i class="el-icon-user-solid"></i> QQ群 <s> 满42799195 </s> <s> 满170157040 </s>-->
<!-- <s> 满130643120 </s> <s> 满225920371 </s> <s> 满201705537 </s> <s> 满236543183 </s>-->
<!-- <s> 满213618602 </s> <s> 满148794840 </s> <s> 满118752664 </s> <s> 满101038945 </s>-->
<!-- <s> 满128355254 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=irnwcXhbLOQEv1g-TwGifjNTA_f4wZiA&authKey=4bpzEwhcUY%2FvsPDHvzYn6xfoS%2FtOArvZ%2BGXzfr7O0%2FEqLfkKA%2BuCDXlzHIFg8t93&noverify=0&group_code=179219821" target="_blank">179219821</a>-->
<!-- </p>-->
<!-- <p>-->
<!-- <i class="el-icon-chat-dot-round"></i> 微信<a-->
<!-- href="javascript:;"-->
<!-- >/ *</a-->
<!-- >-->
<!-- </p>-->
<!-- <p>-->
<!-- <i class="el-icon-money"></i> 支付宝<a-->
<!-- href="javascript:;"-->
<!-- class="支付宝信息"-->
<!-- >/ *</a-->
<!-- >-->
<!-- </p>-->
<!-- </div>-->
<!-- </el-card>-->
<!-- </el-col>-->
<!-- <el-col :xs="24" :sm="24" :md="12" :lg="8">-->
<!-- <el-card class="update-log">-->
<!-- <div slot="header" class="clearfix">-->
<!-- <span>更新日志</span>-->
<!-- </div>-->
<!-- <el-collapse accordion>-->
<!-- <el-collapse-item title="v3.6.4 - 2024-04-01">-->
<!-- <ol>-->
<!-- <li>全局数据存储用户编号</li>-->
<!-- <li>用户密码新增非法字符验证</li>-->
<!-- <li>代码生成支持选择前端模板类型</li>-->
<!-- <li>操作日志列表新增IP地址查询</li>-->
<!-- <li>显隐列组件支持复选框弹出类型</li>-->
<!-- <li>Excel注解ColumnType类型新增文本</li>-->
<!-- <li>Excel自定义数据处理器增加单元格/工作簿对象</li>-->
<!-- <li>升级element-ui到最新版本2.15.14</li>-->
<!-- <li>升级compression-webpack-plugin到6.1.2以兼容node18+</li>-->
<!-- <li>升级druid到最新版本1.2.20</li>-->
<!-- <li>升级fastjson到最新版2.0.43</li>-->
<!-- <li>升级pagehelper到最新版2.0.0</li>-->
<!-- <li>升级dynamic-ds到最新版本4.2.0</li>-->
<!-- <li>升级commons.io到最新版本2.13.0</li>-->
<!-- <li>升级spring-boot到最新版本2.7.18</li>-->
<!-- <li>升级spring-boot-admin到最新版2.7.15</li>-->
<!-- <li>升级transmittable-thread-local到最新版本2.14.4</li>-->
<!-- <li>修复五级路由缓存无效问题</li>-->
<!-- <li>修复外链带端口出现的异常</li>-->
<!-- <li>修复内链iframe没有传递参数问题</li>-->
<!-- <li>修复自定义字典样式不生效的问题</li>-->
<!-- <li>修复字典缓存删除方法参数错误问题</li>-->
<!-- <li>修复Excel导入数据临时文件无法删除问题</li>-->
<!-- <li>修复未登录带参数访问成功后参数丢失问题</li>-->
<!-- <li>修复HeaderSearch组件跳转query参数丢失问题</li>-->
<!-- <li>修复数据字典列表页重置后标签值无法输入问题</li>-->
<!-- <li>修复Excels导入时无法获取到readConverterExp内容转表达式问题</li>-->
<!-- <li>优化Xss注解匹配方式</li>-->
<!-- <li>优化权限字符匹配方式</li>-->
<!-- <li>优化下载zip方法新增遮罩层</li>-->
<!-- <li>优化头像上传参数新增文件名称</li>-->
<!-- <li>优化字典标签支持自定义分隔符</li>-->
<!-- <li>优化定时任务白名单配置范围缩小</li>-->
<!-- <li>优化菜单管理类型为按钮状态可选</li>-->
<!-- <li>优化前端防重复提交数据大小限制</li>-->
<!-- <li>优化TopNav菜单没有图标svg不显示</li>-->
<!-- <li>优化富文本Editor组件检验图片格式</li>-->
<!-- <li>优化数字金额大写转换精度丢失问题</li>-->
<!-- <li>优化个人中心/基本资料修改时数据显示问题</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.6.3 - 2023-07-07">-->
<!-- <ol>-->
<!-- <li>支持登录IP黑名单限制</li>-->
<!-- <li>操作日志新增消耗时间属性</li>-->
<!-- <li>屏蔽定时任务bean违规的字符</li>-->
<!-- <li>日志管理使用索引提升查询性能</li>-->
<!-- <li>日志注解支持排除指定的请求参数</li>-->
<!-- <li>支持自定义隐藏属性列过滤子对象</li>-->
<!-- <li>升级spring-boot到最新版本2.7.13</li>-->
<!-- <li>升级spring-cloud到最新版2021.0.8</li>-->
<!-- <li>升级spring-cloud-alibaba到最新版2021.0.5.0</li>-->
<!-- <li>升级druid到最新版本1.2.16</li>-->
<!-- <li>升级fastjson到最新版2.0.34</li>-->
<!-- <li>升级pagehelper到最新版1.4.7</li>-->
<!-- <li>升级transmittable-thread-local到最新版本2.14.3</li>-->
<!-- <li>升级element-ui到最新版本2.15.13</li>-->
<!-- <li>移除apache/commons-fileupload依赖</li>-->
<!-- <li>修复页面切换时布局错乱的问题</li>-->
<!-- <li>修复用户多角色数据权限可能出现权限抬升的情况</li>-->
<!-- <li>修复导入用户时无法更新存在用户数据的问题</li>-->
<!-- <li>修复开启TopNav后一级菜单路由参数设置无效问题</li>-->
<!-- <li>优化文件下载出现的异常</li>-->
<!-- <li>优化选择图标组件高亮回显</li>-->
<!-- <li>优化修改密码日志存储明文问题</li>-->
<!-- <li>优化排序属性orderBy参数限制长度</li>-->
<!-- <li>优化页签栏关闭其他出现的异常问题</li>-->
<!-- <li>优化页签关闭左侧选项排除首页选项</li>-->
<!-- <li>优化关闭当前tab页跳转最右侧tab页</li>-->
<!-- <li>优化文件上传服务关闭InputStream</li>-->
<!-- <li>优化页签在Firefox浏览器被遮挡的问题</li>-->
<!-- <li>优化侧边栏的平台标题与VUE_APP_TITLE保持同步</li>-->
<!-- <li>优化DictTag组件value没有匹配的值时则展示value</li>-->
<!-- <li>优化去除@EnableCustomSwagger注解后会启动失败问题</li>-->
<!-- <li>优化upload接口在文件过大和文件名过长的情况返回提示信息</li>-->
<!-- <li>优化异步保存日志发生报错不进RemoteLogFallbackFactory问题</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.6.2 - 2023-01-16">-->
<!-- <ol>-->
<!-- <li>重置时取消部门选中</li>-->
<!-- <li>新增返回警告消息提示</li>-->
<!-- <li>忽略不必要的属性数据返回</li>-->
<!-- <li>修改参数键名时移除前缓存配置</li>-->
<!-- <li>开启TopNav没有子菜单隐藏侧边栏</li>-->
<!-- <li>删除fuse无效选项maxPatternLength</li>-->
<!-- <li>兼容Excel下拉框内容过多无法显示的问题</li>-->
<!-- <li>修复文件上传组件格式验证问题</li>-->
<!-- <li>修复回显数据字典数组异常问题</li>-->
<!-- <li>修复sheet超出最大行数异常问题</li>-->
<!-- <li>修复Log注解GET请求记录不到参数问题</li>-->
<!-- <li>修复gateway流控规则生效但不显示问题</li>-->
<!-- <li>修复主题颜色在Drawer组件不会加载问题</li>-->
<!-- <li>修复调度日志点击多次数据不变化的问题</li>-->
<!-- <li>修复用户编辑时角色和部门存在无法修改情况</li>-->
<!-- <li>修复使用透明底png图片时自动填充黑色背景</li>-->
<!-- <li>修复table中更多按钮切换主题色未生效修复问题</li>-->
<!-- <li>修复某些特性的环境生成代码变乱码TXT文件问题</li>-->
<!-- <li>修复代码生成图片/文件/单选时选择必填无法校验问题</li>-->
<!-- <li>升级spring-cloud到最新版2021.0.5</li>-->
<!-- <li>升级spring-boot到最新版本2.7.7</li>-->
<!-- <li>升级spring-boot-admin到最新版2.7.10</li>-->
<!-- <li>升级kaptcha到最新版2.3.3</li>-->
<!-- <li>升级druid到最新版本1.2.15</li>-->
<!-- <li>升级fastjson到最新版2.0.22</li>-->
<!-- <li>升级pagehelper到最新版1.4.6</li>-->
<!-- <li>升级transmittable-thread-local到最新版本2.14.2</li>-->
<!-- <li>升级echarts到最新版本5.4.0</li>-->
<!-- <li>升级core-js到最新版本3.25.3</li>-->
<!-- <li>升级element-ui到最新版本2.15.12</li>-->
<!-- <li>移除commons-collections多余的依赖</li>-->
<!-- <li>优化弹窗内容过多展示不全问题</li>-->
<!-- <li>优化导出对象的子列表为空会出现[]问题</li>-->
<!-- <li>优化字符未使用下划线不进行驼峰式处理</li>-->
<!-- <li>优化nacos修改xss开关时同步过滤器验证</li>-->
<!-- <li>优化修改头像在小屏幕上页面布局错位的问题</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.6.1 - 2022-10-01">-->
<!-- <ol>-->
<!-- <li>数据逻辑删除不进行唯一验证</li>-->
<!-- <li>支持多权限字符匹配角色数据权限</li>-->
<!-- <li>页面内嵌iframe切换tab不刷新数据</li>-->
<!-- <li>新增密码最大错误次数/锁定时间</li>-->
<!-- <li>登录日志新增解锁账户功能</li>-->
<!-- <li>通用下载方法新增config配置选项</li>-->
<!-- <li>操作日志记录支持排除敏感属性字段</li>-->
<!-- <li>Excel注解支持导出对象的子列表方法</li>-->
<!-- <li>Excel注解支持自定义隐藏属性列</li>-->
<!-- <li>Excel注解支持backgroundColor属性设置背景色</li>-->
<!-- <li>升级spring-cloud-alibaba到最新版2021.0.4.0</li>-->
<!-- <li>升级spring-cloud到最新版2021.0.4</li>-->
<!-- <li>升级spring-boot到最新版本2.7.3</li>-->
<!-- <li>升级spring-boot-admin到最新版2.7.5</li>-->
<!-- <li>升级seata到最新版1.5.2</li>-->
<!-- <li>升级druid到最新版本1.2.12</li>-->
<!-- <li>升级fastjson到最新版2.0.14</li>-->
<!-- <li>升级pagehelper到最新版1.4.5</li>-->
<!-- <li>升级core-js到最新版本3.25.2</li>-->
<!-- <li>升级dynamic-ds到最新版本3.5.2</li>-->
<!-- <li>升级element-ui到最新版本2.15.10</li>-->
<!-- <li>修复多文件上传报错出现的异常问题</li>-->
<!-- <li>修复图片预览组件src属性为null值控制台报错问题</li>-->
<!-- <li>修复使用FastDFS上传头像失败提示文件名没有后缀问题</li>-->
<!-- <li>优化seata单独依赖模块</li>-->
<!-- <li>优化任务过期不执行调度</li>-->
<!-- <li>优化字典数据使用store存取</li>-->
<!-- <li>优化代码生成同步后值NULL问题</li>-->
<!-- <li>优化定时任务支持执行父类方法</li>-->
<!-- <li>优化修改资料头像被覆盖的问题</li>-->
<!-- <li>优化修改用户登录账号重复验证</li>-->
<!-- <li>优化用户个人信息接口防止修改部门</li>-->
<!-- <li>优化布局设置使用el-drawer抽屉显示</li>-->
<!-- <li>优化日志注解记录限制请求地址的长度</li>-->
<!-- <li>优化导入更新用户数据前校验数据权限</li>-->
<!-- <li>优化excel/scale属性导出单元格数值类型</li>-->
<!-- <li>优化日志操作中重置按钮时重复查询的问题</li>-->
<!-- <li>优化多个相同角色数据导致权限SQL重复问题</li>-->
<!-- <li>优化表格上右侧工具条搜索按钮显隐&右侧样式凸出</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.6.0 - 2022-07-16">-->
<!-- <ol>-->
<!-- <li>Excel注解支持color字体颜色</li>-->
<!-- <li>用户头像上传限制只能为图片格式</li>-->
<!-- <li>检查定时任务bean所在包名是否为白名单配置</li>-->
<!-- <li>字典类型必须以字母开头且只能为小写字母数字下滑线</li>-->
<!-- <li>升级spring-cloud-alibaba到最新版2021.0.1.0</li>-->
<!-- <li>升级spring-cloud到最新版2021.0.3</li>-->
<!-- <li>升级spring-boot到最新版本2.7.1</li>-->
<!-- <li>升级spring-boot-admin到最新版2.7.2</li>-->
<!-- <li>升级seata到最新版1.5.1</li>-->
<!-- <li>升级pagehelper到最新版1.4.3</li>-->
<!-- <li>升级dynamic-ds到最新版本3.5.1</li>-->
<!-- <li>升级fastjson到最新版2.0.9</li>-->
<!-- <li>升级druid到最新版本1.2.11</li>-->
<!-- <li>升级transmittable-thread-local到最新版本2.13.2</li>-->
<!-- <li>升级element-ui到最新版本2.15.9</li>-->
<!-- <li>修复字典数据显示不全问题</li>-->
<!-- <li>修复操作日志查询类型条件为0时会查到所有数据</li>-->
<!-- <li>优化验证码开关变量名</li>-->
<!-- <li>优化设置分页参数默认值</li>-->
<!-- <li>优化对空字符串参数处理的过滤</li>-->
<!-- <li>优化Maven使用阿里云镜像站加速</li>-->
<!-- <li>优化用户列表查询不显示密码字段</li>-->
<!-- <li>优化表单构建按钮不显示正则校验</li>-->
<!-- <li>优化字典类型删除多余的mapper注解</li>-->
<!-- <li>优化字典数据回显样式下拉框显示值</li>-->
<!-- <li>优化用户管理左侧树型组件增加选中高亮保持</li>-->
<!-- <li>优化新增用户与角色信息&用户与岗位信息逻辑</li>-->
<!-- <li>优化数据监控Spring Security权限认证过时代码</li>-->
<!-- <li>优化岗位长主键溢出问题将查询返回类型改为Long</li>-->
<!-- <li>优化删除无用admin-client依赖声明避免造成误解</li>-->
<!-- <li>优化默认不启用压缩文件缓存防止node_modules过大</li>-->
<!-- <li>优化获取body请求数据缓存过滤器CacheRequestFilter</li>-->
<!-- <li>优化网关通过注解解决循环引用及Bean重复问题删除allow配置</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.5.0 - 2022-04-11">-->
<!-- <ol>-->
<!-- <li>开启TopNav没有子菜单情况隐藏侧边栏</li>-->
<!-- <li>侧边栏菜单名称过长悬停显示标题</li>-->
<!-- <li>用户访问控制时校验数据权限防止越权</li>-->
<!-- <li>导出Excel时屏蔽公式防止CSV注入风险</li>-->
<!-- <li>组件ImageUpload支持多图同时选择上传</li>-->
<!-- <li>组件FileUpload支持多文件同时选择上传</li>-->
<!-- <li>代码生成树表新增(展开/折叠)</li>-->
<!-- <li>代码生成子表支持日期/字典配置</li>-->
<!-- <li>代码生成编辑修改打开新页签</li>-->
<!-- <li>添加页签openPage支持传递参数</li>-->
<!-- <li>添加清理分页的线程变量方法</li>-->
<!-- <li>修改npm即将过期的注册源地址</li>-->
<!-- <li>用户缓存信息添加部门ancestors祖级列表</li>-->
<!-- <li>升级spring-cloud到最新版2021.0.1</li>-->
<!-- <li>升级spring-boot到最新版本2.6.6</li>-->
<!-- <li>升级spring-boot-admin到最新版2.6.6</li>-->
<!-- <li>升级spring-boot-mybatis到最新版2.2.2</li>-->
<!-- <li>降级jsencrypt版本兼容IE浏览器</li>-->
<!-- <li>修复分页组件请求两次问题</li>-->
<!-- <li>修复表单清除元素位置未垂直居中问题</li>-->
<!-- <li>修复Excel注解prompt/combo同时使用不生效问题</li>-->
<!-- <li>修复导入Excel时字典字段类型为Long转义为空问题</li>-->
<!-- <li>修复登录超时刷新页面跳转登录页面还提示重新登录问题</li>-->
<!-- <li>修复Xss注解字段值为空时的异常问题</li>-->
<!-- <li>优化IP地址获取到多个的问题</li>-->
<!-- <li>优化文件上传兼容Weblogic环境</li>-->
<!-- <li>代码生成同步保留必填/类型选项</li>-->
<!-- <li>优化Excel格式化不同类型的日期对象</li>-->
<!-- <li>优化菜单表关键字导致的插件报错问题</li>-->
<!-- <li>优化Oracle用户头像列为空时不显示问题</li>-->
<!-- <li>优化页面若未匹配到字典标签则返回原字典值</li>-->
<!-- <li>优化修复登录失效后多次请求提示多次弹窗问题</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.4.0 - 2022-01-24">-->
<!-- <ol>-->
<!-- <li>新增Vue3前端代码生成模板</li>-->
<!-- <li>新增图片预览组件</li>-->
<!-- <li>新增压缩插件实现打包Gzip</li>-->
<!-- <li>新增docker一键复制的脚本</li>-->
<!-- <li>自定义xss校验注解实现</li>-->
<!-- <li>路由支持单独配置菜单或角色权限</li>-->
<!-- <li>前端支持设置是否需要防止数据重复提交</li>-->
<!-- <li>预览组件支持多图显示</li>-->
<!-- <li>代码生成列表图片支持预览</li>-->
<!-- <li>代码生成新增Java类型Boolean</li>-->
<!-- <li>定时任务目标字符串过滤特殊字符</li>-->
<!-- <li>定时任务目标字符串验证包名白名单</li>-->
<!-- <li>升级nacos到最新版2.0.4</li>-->
<!-- <li>升级spring-cloud到最新版2021.0.0</li>-->
<!-- <li>升级spring-boot到最新版本2.6.3</li>-->
<!-- <li>升级spring-boot-admin到最新版2.6.1</li>-->
<!-- <li>升级pagehelper到最新版1.4.1</li>-->
<!-- <li>升级fastjson到最新版1.2.79</li>-->
<!-- <li>SQL工具类新增检查关键字方法</li>-->
<!-- <li>修复打包后字体图标偶现的乱码问题</li>-->
<!-- <li>修复版本差异导致的懒加载报错问题</li>-->
<!-- <li>修复选项卡点击右键刷新丢失参数问题</li>-->
<!-- <li>修复登录失效后多次请求提示多次弹窗问题</li>-->
<!-- <li>优化加载字典缓存数据</li>-->
<!-- <li>优化代码生成同步更新字段</li>-->
<!-- <li>优化代码生成字典组重复问题</li>-->
<!-- <li>优化空值不进行回显数据字典</li>-->
<!-- <li>优化用户导入提示溢出则显示滚动条</li>-->
<!-- <li>优化定时任务cron表达式小时设置24</li>-->
<!-- <li>优化部门修改缩放后出现的错位问题</li>-->
<!-- <li>优化分页方法设置成通用方便灵活调用</li>-->
<!-- <li>优化用户管理部门查询选择节点后分页参数初始</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.3.0 - 2021-12-13">-->
<!-- <ol>-->
<!-- <li>新增配套并同步的Vue3前端版本</li>-->
<!-- <li>新增认证对象简化权限验证</li>-->
<!-- <li>新增tab对象简化页签操作</li>-->
<!-- <li>修改获取缓存信息方式</li>-->
<!-- <li>修改权限认证注解实现</li>-->
<!-- <li>自定义文字复制剪贴指令</li>-->
<!-- <li>升级axios到最新版本0.24.0</li>-->
<!-- <li>升级core-js到最新版本3.19.1</li>-->
<!-- <li>升级jsencrypt到最新版本3.2.1</li>-->
<!-- <li>升级js-cookie到最新版本3.0.1</li>-->
<!-- <li>升级clipboard到最新版本2.0.8</li>-->
<!-- <li>升级velocity到最新版本2.3</li>-->
<!-- <li>升级spring-boot到最新版本2.5.6</li>-->
<!-- <li>升级spring-boot-admin到最新版2.5.4</li>-->
<!-- <li>升级dynamic-ds到最新版本3.5.0</li>-->
<!-- <li>代码生成预览支持复制内容</li>-->
<!-- <li>修复五级以上菜单出现的404问题</li>-->
<!-- <li>生产环境使用路由懒加载提升页面响应速度</li>-->
<!-- <li>任务屏蔽违规字符&参数忽略双引号中的逗号</li>-->
<!-- <li>优化用户个人信息接口防止修改用户名</li>-->
<!-- <li>优化登录/验证码请求headers不设置token</li>-->
<!-- <li>优化注册成功提示消息类型success</li>-->
<!-- <li>优化下载解析blob响应是否登录失效</li>-->
<!-- <li>修复字符串无法被反转义问题</li>-->
<!-- <li>修复响应体过大出现的乱码问题</li>-->
<!-- <li>修复回显数据字典组的键值错误</li>-->
<!-- <li>修复代码生成复选框字典遗漏问题</li>-->
<!-- <li>修复代码生成模板主子表删除缺少事务</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.2.0 - 2021-10-12">-->
<!-- <ol>-->
<!-- <li>菜单管理支持配置路由参数</li>-->
<!-- <li>定时任务支持在线生成cron表达式</li>-->
<!-- <li>自定义弹层溢出滚动样式</li>-->
<!-- <li>自定义可拖动弹窗宽度指令</li>-->
<!-- <li>自定义可拖动弹窗高度指令</li>-->
<!-- <li>修改时检查用户数据权限范围</li>-->
<!-- <li>修复保存配置主题颜色失效问题</li>-->
<!-- <li>新增暗色菜单风格主题</li>-->
<!-- <li>菜单&部门新增展开/折叠功能</li>-->
<!-- <li>页签新增关闭左侧&添加图标</li>-->
<!-- <li>代码生成主子表多选行数据</li>-->
<!-- <li>日期范围支持添加多组</li>-->
<!-- <li>Excel导入支持@Excels注解</li>-->
<!-- <li>Excel注解支持导入导出标题信息</li>-->
<!-- <li>Excel注解支持自定义数据处理器</li>-->
<!-- <li>日志注解新增是否保存响应参数</li>-->
<!-- <li>定时任务对检查异常进行事务回滚</li>-->
<!-- <li>补充定时任务表字段注释</li>-->
<!-- <li>定时任务屏蔽ldap远程调用</li>-->
<!-- <li>新增通用方法简化下载使用</li>-->
<!-- <li>新增通用方法简化模态/缓存使用</li>-->
<!-- <li>新增data-dict组件简化数据字典使用</li>-->
<!-- <li>禁用dict-tag组件的渐变动画</li>-->
<!-- <li>默认首页使用keep-alive缓存</li>-->
<!-- <li>升级springcloud到最新版2020.0.4</li>-->
<!-- <li>升级spring-boot到最新版本2.5.5</li>-->
<!-- <li>升级spring-boot-admin到最新版2.5.2</li>-->
<!-- <li>升级pagehelper到最新版1.4.0</li>-->
<!-- <li>升级fastjson到最新版1.2.78</li>-->
<!-- <li>升级druid到最新版1.2.8</li>-->
<!-- <li>升级element-ui到最新版本2.15.6</li>-->
<!-- <li>升级sass-loader到最新版本10.1.1</li>-->
<!-- <li>升级dart-sass到版本1.32.13</li>-->
<!-- <li>升级file-saver到最新版本2.0.5</li>-->
<!-- <li>优化异常处理信息</li>-->
<!-- <li>验证码默认20s超时</li>-->
<!-- <li>优化代码生成导入表按创建时间排序</li>-->
<!-- <li>优化代码生成点击预览重置激活tab</li>-->
<!-- <li>修复主子表代码模板方法名错误问题</li>-->
<!-- <li>修复xss过滤后格式出现的异常</li>-->
<!-- <li>修复多图组件验证失败被删除问题</li>-->
<!-- <li>请求参数新增reasonable分页合理化属性</li>-->
<!-- <li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>-->
<!-- <li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.1.0 - 2021-08-02">-->
<!-- <ol>-->
<!-- <li>支持配置XSS跨站脚本过滤</li>-->
<!-- <li>支持配置验证码开关&类型</li>-->
<!-- <li>新增是否开启用户注册功能</li>-->
<!-- <li>用户管理新增分配角色功能</li>-->
<!-- <li>角色管理新增分配用户功能</li>-->
<!-- <li>系统布局配置支持动态标题开关</li>-->
<!-- <li>增加字典标签样式回显dict组件</li>-->
<!-- <li>FileUpload组件支持多文件上传</li>-->
<!-- <li>ImageUpload组件支持多图片上传</li>-->
<!-- <li>封装通用iframe组件</li>-->
<!-- <li>菜单路由配置支持内链访问</li>-->
<!-- <li>全局注册通用组件</li>-->
<!-- <li>富文本默认上传返回url类型</li>-->
<!-- <li>富文本新增上传文件大小限制</li>-->
<!-- <li>增加自定义弹窗拖拽指令</li>-->
<!-- <li>顶部菜单排除隐藏的默认路由</li>-->
<!-- <li>跳转路由高亮相对应的菜单栏</li>-->
<!-- <li>日志列表支持排序操作</li>-->
<!-- <li>分页组件新增pagerCount属性</li>-->
<!-- <li>定时任务屏蔽http(s)远程调用</li>-->
<!-- <li>文件服务本地资源允许跨域访问</li>-->
<!-- <li>升级spring-boot到最新版本2.5.3</li>-->
<!-- <li>升级spring-boot-admin到最新版2.4.3</li>-->
<!-- <li>升级spring-boot-mybatis到最新版2.2.0</li>-->
<!-- <li>升级nacos到最新版2.0.3</li>-->
<!-- <li>升级pagehelper到最新版1.3.1</li>-->
<!-- <li>升级minio到最新版本8.2.2</li>-->
<!-- <li>升级tobato到最新版本1.27.2</li>-->
<!-- <li>升级dynamic-ds到最新版本3.4.1</li>-->
<!-- <li>升级commons.io到最新版本v2.11.0</li>-->
<!-- <li>升级common-pool到最新版本2.10.0</li>-->
<!-- <li>升级commons.fileupload到最新版本v1.4</li>-->
<!-- <li>升级element-ui到最新版本2.15.3</li>-->
<!-- <li>优化统一网关错误码响应</li>-->
<!-- <li>修复导出含params属性对象参数问题</li>-->
<!-- <li>修复任意账户越权问题</li>-->
<!-- <li>修复定时任务日志执行状态显示</li>-->
<!-- <li>修改登录失效返回值code401</li>-->
<!-- <li>用户信息长度校验限制</li>-->
<!-- <li>角色&菜单新增字段属性提示信息</li>-->
<!-- <li>修复用户搜索分页变量错误</li>-->
<!-- <li>优化部门父级启用状态</li>-->
<!-- <li>启用部门状态排除顶级节点</li>-->
<!-- <li>定时任务新增更多操作</li>-->
<!-- <li>优化代码生成模板</li>-->
<!-- <li>优化顶部菜单显示样式</li>-->
<!-- <li>优化导入用户显示样式</li>-->
<!-- <li>优化用户不能删除自己</li>-->
<!-- <li>密码框新增显示切换密码图标</li>-->
<!-- <li>BLOB下载时清除URL对象引用</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v3.0.0 - 2021-06-10">-->
<!-- <ol>-->
<!-- <li>新增菜单导航显示风格TopNavfalse为左侧导航菜单true为顶部导航菜单</li>-->
<!-- <li>布局设置支持保存&重置配置</li>-->
<!-- <li>富文本编辑器支持自定义上传地址</li>-->
<!-- <li>富文本编辑组件新增readOnly属性</li>-->
<!-- <li>优化参数&字典缓存操作</li>-->
<!-- <li>新增IE浏览器版本过低提示页面</li>-->
<!-- <li>页签TagsView新增关闭右侧功能</li>-->
<!-- <li>显隐列组件加载初始默认隐藏列</li>-->
<!-- <li>关闭头像上传窗口还原默认图片</li>-->
<!-- <li>个人信息添加手机&邮箱重复验证</li>-->
<!-- <li>代码生成模板树表操作列添加新增按钮</li>-->
<!-- <li>代码生成模板修复主子表字段重名问题</li>-->
<!-- <li>支持docker部署项目</li>-->
<!-- <li>升级springcloud到最新版2020.0.3</li>-->
<!-- <li>升级spring-boot-alibaba到最新版2021.1</li>-->
<!-- <li>升级nacos到最新版2.0.1 性能提升</li>-->
<!-- <li>升级spring-boot到最新版本2.5.0</li>-->
<!-- <li>升级spring-boot-admin到最新版2.4.1</li>-->
<!-- <li>升级swagger到最新版本3.0.0</li>-->
<!-- <li>升级mybatis到最新版3.5.6</li>-->
<!-- <li>升级dynamic-ds到最新版本3.3.2</li>-->
<!-- <li>升级minio到最新版本8.2.1</li>-->
<!-- <li>升级fastjson到最新版1.2.76</li>-->
<!-- <li>升级druid到最新版本v1.2.6</li>-->
<!-- <li>修复四级菜单无法显示问题</li>-->
<!-- <li>修复树表数据显示不全&加载慢问题</li>-->
<!-- <li>修复关闭confirm提示框控制台报错问题</li>-->
<!-- <li>上传媒体类型添加视频格式</li>-->
<!-- <li>增加feign客户端IP头部信息</li>-->
<!-- <li>修复两处存在SQL注入漏洞问题</li>-->
<!-- <li>优化图片工具类读取文件防止异常</li>-->
<!-- <li>修复导出角色数据范围翻译缺少仅本人</li>-->
<!-- <li>修复表单构建选择下拉选择控制台报错问题</li>-->
<!-- <li>修复请求形参未传值记录日志异常问题</li>-->
<!-- <li>调整sql默认为当前时间</li>-->
<!-- <li>修改ip字段长度防止ipv6地址长度不够</li>-->
<!-- <li>删除操作日志记录信息</li>-->
<!-- <li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>-->
<!-- <li>用户&角色单条删除时使其逻辑删除</li>-->
<!-- <li>优化树表代码生成模板</li>-->
<!-- <li>修正通知公告日志记录类型</li>-->
<!-- <li>修正后端导入表权限标识</li>-->
<!-- <li>过滤BindingResult对象防止异常</li>-->
<!-- <li>Redis设置HashKey序列化</li>-->
<!-- <li>优化Excel导入增加空行判断</li>-->
<!-- <li>树级结构更新子节点使用replaceFirst</li>-->
<!-- <li>富文本工具栏配置视频</li>-->
<!-- <li>修正模板字符编码</li>-->
<!-- <li>优化通用下载完成后删除节点</li>-->
<!-- <li>角色非自定义权限范围清空选择值</li>-->
<!-- <li>修改主题后mini类型按钮无效问题</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v2.5.0 - 2021-02-02">-->
<!-- <ol>-->
<!-- <li>增加分布式事务seata支持</li>-->
<!-- <li>代码生成模板支持主子表</li>-->
<!-- <li>表格右侧工具栏组件支持显隐列</li>-->
<!-- <li>图片组件添加预览&移除功能</li>-->
<!-- <li>Excel注解支持Image图片导出</li>-->
<!-- <li>操作按钮组调整为朴素按钮样式</li>-->
<!-- <li>代码生成支持文件上传组件</li>-->
<!-- <li>代码生成日期控件区分范围</li>-->
<!-- <li>代码生成数据库文本类型生成表单文本域</li>-->
<!-- <li>用户手机邮箱&菜单组件修改允许空字符串</li>-->
<!-- <li>修复header获取username中文情况下乱码</li>-->
<!-- <li>修复角色管理-编辑角色-功能权限显示异常</li>-->
<!-- <li>修正操作日志删除接口路径</li>-->
<!-- <li>修复IE11浏览器报错问题</li>-->
<!-- <li>修复sentinel流量告警前端不响应</li>-->
<!-- <li>修正侧边栏静态路由丢失问题</li>-->
<!-- <li>修复导入数据为负浮点数时丢失精度问题</li>-->
<!-- <li>修复Get请求参数特殊值无法正确的传参</li>-->
<!-- <li>更换过期的共享配置属性</li>-->
<!-- <li>添加启动执行脚本</li>-->
<!-- <li>升级element-ui到最新版本2.15.0</li>-->
<!-- <li>升级spring-boot到最新版本2.3.7</li>-->
<!-- <li>升级spring-cloud到Hoxton.SR9</li>-->
<!-- <li>升级spring-boot-alibaba到最新版2.2.5</li>-->
<!-- <li>升级spring-boot-admin到最新版2.3.1</li>-->
<!-- <li>升级druid到最新版本v1.2.4</li>-->
<!-- <li>升级fastjson到最新版1.2.75</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v2.4.0 - 2020-12-22">-->
<!-- <ol>-->
<!-- <li>增加分布式文件Minio支持</li>-->
<!-- <li>支持多数据源切换</li>-->
<!-- <li>修复多级菜单之间切换无法缓存的问题</li>-->
<!-- <li>三级菜单自动配置组件</li>-->
<!-- <li>支持主题风格配置</li>-->
<!-- <li>服务之间feign调用传递用户信息</li>-->
<!-- <li>删除用户和角色解绑关联</li>-->
<!-- <li>去除用户手机邮箱部门必填验证</li>-->
<!-- <li>代码生成预览支持高亮显示</li>-->
<!-- <li>获取请求token方法移至权限工具类</li>-->
<!-- <li>代码生成预览提供滚动机制</li>-->
<!-- <li>权限工具类增加管理员判断</li>-->
<!-- <li>日志记录增加过滤多文件场景</li>-->
<!-- <li>修改用户头像预览宽高</li>-->
<!-- <li>Excel支持注解align对齐方式</li>-->
<!-- <li>项目添加robots.txt 防止系统被搜索引擎收录</li>-->
<!-- <li>移除path-to-regexp正则匹配插件</li>-->
<!-- <li>修改Set可能导致嵌套的问题</li>-->
<!-- <li>调整代码生成页列宽</li>-->
<!-- <li>回显数据字典防止空值报错</li>-->
<!-- <li>支持get请求映射params参数</li>-->
<!-- <li>登录后push添加catch防止出现检查错误</li>-->
<!-- <li>防止安全扫描YUI出现的风险提示</li>-->
<!-- <li>代码生成删除多余的数字float类型</li>-->
<!-- <li>Excel支持导入Boolean型数据</li>-->
<!-- <li>修正转换字符串的目标字符集属性</li>-->
<!-- <li>删除多余的依赖</li>-->
<!-- <li>修改node-sass为dart-sass</li>-->
<!-- <li>升级poi到最新版本4.1.2</li>-->
<!-- <li>升级axios到最新版本0.21.0</li>-->
<!-- <li>升级element-ui到最新版本2.14.1</li>-->
<!-- <li>升级vue到最新版本2.6.12</li>-->
<!-- <li>升级vuex到最新版本3.6.0</li>-->
<!-- <li>升级vue-cli到版本4.5.9</li>-->
<!-- <li>升级vue-router到最新版本3.4.9</li>-->
<!-- <li>升级vue-cli到最新版本4.4.6</li>-->
<!-- <li>升级vue-cropper到最新版本0.5.5</li>-->
<!-- <li>升级clipboard到最新版本2.0.6</li>-->
<!-- <li>升级core-js到最新版本3.8.1</li>-->
<!-- <li>升级echarts到最新版本4.9.0</li>-->
<!-- <li>升级file-saver到最新版本2.0.4</li>-->
<!-- <li>升级fuse.js到最新版本6.4.3</li>-->
<!-- <li>升级js-beautify到最新版本1.13.0</li>-->
<!-- <li>升级js-cookie到最新版本2.2.1</li>-->
<!-- <li>升级path-to-regexp到最新版本6.2.0</li>-->
<!-- <li>升级quill到最新版本1.3.7</li>-->
<!-- <li>升级screenfull到最新版本5.0.2</li>-->
<!-- <li>升级sortablejs到最新版本1.10.2</li>-->
<!-- <li>升级vuedraggable到最新版本2.24.3</li>-->
<!-- <li>升级chalk到最新版本4.1.0</li>-->
<!-- <li>升级eslint到最新版本7.15.0</li>-->
<!-- <li>升级eslint-plugin-vue到最新版本7.2.0</li>-->
<!-- <li>升级lint-staged到最新版本10.5.3</li>-->
<!-- <li>升级runjs到最新版本4.4.2</li>-->
<!-- <li>升级sass-loader到最新版本10.1.0</li>-->
<!-- <li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li>-->
<!-- <li>升级svg-sprite-loader到最新版本5.1.1</li>-->
<!-- <li>升级vue-template-compiler到最新版本2.6.12</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v2.3.0 - 2020-11-20">-->
<!-- <ol>-->
<!-- <li>新增文件服务应用支持本地FastDFS</li>-->
<!-- <li>优化头像样式鼠标移入悬停遮罩</li>-->
<!-- <li>AjaxResult重写put方法以方便链式调用</li>-->
<!-- <li>代码生成支持上传控件</li>-->
<!-- <li>新增图片上传组件</li>-->
<!-- <li>支持用户头像更新</li>-->
<!-- <li>调整默认首页</li>-->
<!-- <li>角色权限验证hasRole匹配改为equals</li>-->
<!-- <li>修正数组权限为空判断</li>-->
<!-- <li>修正注释选中节点和半选节点获取</li>-->
<!-- <li>升级pagehelper到最新版1.3.0</li>-->
<!-- <li>升级fastjson到最新版1.2.74</li>-->
<!-- <li>修正定时任务执行一次权限标识</li>-->
<!-- <li>修复页签关闭所有固定标签路由不刷新问题</li>-->
<!-- <li>表单构建布局型组件新增按钮</li>-->
<!-- <li>调整日志路径到模块目录</li>-->
<!-- <li>修正菜单提示信息错误</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v2.2.0 - 2020-10-10">-->
<!-- <ol>-->
<!-- <li>移除 OAuth2 改为 Redis</li>-->
<!-- <li>升级SpringCloud到最新版本Hoxton.SR8</li>-->
<!-- <li>升级SpringCloud Alibaba到最新版本2.2.3</li>-->
<!-- <li>升级SpringBoot Admin到最新版本2.3.0</li>-->
<!-- <li>升级Fastjson到最新版1.2.73</li>-->
<!-- <li>新增在线用户会话管理</li>-->
<!-- <li>修改用户个人资料/密码同步缓存信息</li>-->
<!-- <li>修复前端通用导出方法参数传值请求方式问题</li>-->
<!-- <li>菜单新增是否缓存keep-alive</li>-->
<!-- <li>菜单&数据权限新增展开/折叠 全选/全不选 父子联动</li>-->
<!-- <li>Job与Gen模块增加Redis默认配置</li>-->
<!-- <li>新增表格右侧工具栏组件right-toolbar</li>-->
<!-- <li>代码生成支持同步数据库</li>-->
<!-- <li>代码生成支持富文本控件</li>-->
<!-- <li>代码生成树模板去掉多余双引号</li>-->
<!-- <li>代码生成添加select必填选项</li>-->
<!-- <li>代码生成页面时不忽略remark属性</li>-->
<!-- <li>修复代码生成下载路径错误</li>-->
<!-- <li>左侧菜单文字过长显示省略号</li>-->
<!-- <li>表格操作列间距调整</li>-->
<!-- <li>Excel注解支持自动统计数据总和</li>-->
<!-- <li>Excel注解支持设置BigDecimal精度&舍入规则</li>-->
<!-- <li>导入Excel整形值校验优化</li>-->
<!-- <li>导出Excel类型NUMERIC支持精度浮点类型</li>-->
<!-- <li>导出Excel调整targetAttr获取值方法防止get方法不规范</li>-->
<!-- <li>Token续期调整为后端刷新</li>-->
<!-- <li>Token设置默认有效期时长12小时</li>-->
<!-- <li>网关白名单放入nacos配置&支持模糊匹配</li>-->
<!-- <li>修复富文本工具栏样式不对齐问题</li>-->
<!-- <li>Editor组件优化支持自定义高度&图片冲突问题</li>-->
<!-- <li>修复富文本空格和缩进保存后不生效问题&删除重复的placeholder</li>-->
<!-- <li>限制系统内置参数不允许删除</li>-->
<!-- <li>修正调用目标字符串最大长度</li>-->
<!-- <li>修改自定义权限实现</li>-->
<!-- <li>优化递归菜单&部门子节点</li>-->
<!-- <li>修改sass为node-sass避免el-icon图标乱码</li>-->
<!-- <li>修复根节点为子部门时树状结构显示问题</li>-->
<!-- <li>全局异常状态汉化拦截处理</li>-->
<!-- <li>唯一限制条件只返回单条数据</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v2.1.0 - 2020-08-02">-->
<!-- <ol>-->
<!-- <li>表格工具栏右侧添加刷新&显隐查询栏</li>-->
<!-- <li>OAuth自动刷新续签Token</li>-->
<!-- <li>网关支持黑名单配置</li>-->
<!-- <li>权限配置自动注册</li>-->
<!-- <li>Feign配置自动注册</li>-->
<!-- <li>代码生成支持选择上级菜单</li>-->
<!-- <li>代码生成支持复选框</li>-->
<!-- <li>代码生成支持自定义路径</li>-->
<!-- <li>验证码类型支持数组计算字符验证</li>-->
<!-- <li>Excel支持sort导出排序</li>-->
<!-- <li>Excel支持分割字符串组内容</li>-->
<!-- <li>excel 导入数字不需要格式化 导入允许列和属性个数不一致</li>-->
<!-- <li>新增菜单默认主类目</li>-->
<!-- <li>升级vue-cli版本到4.4.4</li>-->
<!-- <li>修改 node-sass dart-sass</li>-->
<!-- <li>升级element-ui版本到2.13.2</li>-->
<!-- <li>删除babel提高编译速度</li>-->
<!-- <li>修复验证码异常时network面板的中文会出现乱码问题</li>-->
<!-- <li>修复 utils/index.js 中不包含 parseTime 函数的 bug</li>-->
<!-- <li>优化selectDictLabel方法数组迭代器换为some</li>-->
<!-- <li>修复客户端模式认证会出现错误</li>-->
<!-- <li>检查字符支持小数点&降级改成异常提醒</li>-->
<!-- <li>定时任务添加cron表达式验证</li>-->
<!-- <li>代码生成查询条件修正</li>-->
<!-- <li>修正角色管理导出权限权限字符</li>-->
<!-- <li>修正防止切换权限用户后登录出现404</li>-->
<!-- <li>终端设置安全码加密&更新缓存</li>-->
<!-- <li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li>-->
<!-- <li>修复布局为small者mini用户表单显示错位问题</li>-->
<!-- <li>修复代码生成点击多次表修改数据不变化的问题</li>-->
<!-- <li>修复代码生成导入表结构出现异常页面不提醒问题</li>-->
<!-- <li>修复角色权限修改时已有权限未自动勾选异常</li>-->
<!-- <li>创建用户不允许选择系统管理员角色</li>-->
<!-- <li>添加全局异常处理网关异常&业务异常</li>-->
<!-- <li>修复终端查询Enter键搜索时是刷新页面而不是查询列表</li>-->
<!-- <li>删除job重复表单参数</li>-->
<!-- <li>代码生成浮点型改用BigDecimal</li>-->
<!-- <li>表单类型为Integer/Long设置整形默认值</li>-->
<!-- <li>修改用户管理复选框宽度防止部分浏览器出现省略号</li>-->
<!-- <li>RedisCache中所有方法参数添加final并优化list取出效率添加其它常用redis方法</li>-->
<!-- <li>修正定时任务日志权限字符</li>-->
<!-- <li>添加Jackson时区配置</li>-->
<!-- <li>代码生成相关问题修复</li>-->
<!-- <li>自定义oauth2返回异常信息</li>-->
<!-- <li>升级nacos到最新版1.3.0 全新内核构建</li>-->
<!-- <li>修正代码生成功能无法下载的问题</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v2.0.0 - 2019-12-02">-->
<!-- <ol>-->
<!-- <li>新增代码生成</li>-->
<!-- <li>新增@RepeatSubmit注解防止重复提交</li>-->
<!-- <li>新增菜单主目录添加/删除操作</li>-->
<!-- <li>日志记录过滤特殊对象防止转换异常</li>-->
<!-- <li>修改代码生成路由脚本错误</li>-->
<!-- <li>用户上传头像实时同步缓存无需重新登录</li>-->
<!-- <li>调整切换页签后不重新加载数据</li>-->
<!-- <li>添加jsencrypt实现参数的前端加密</li>-->
<!-- <li>系统退出删除用户缓存记录</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v2.0.0 - 2020-06-10">-->
<!-- <ol>-->
<!-- <li>使用Sentinel代替Hystrix</li>-->
<!-- <li>菜单新增终端管理配置</li>-->
<!-- <li>菜单新增Nacos&Sentinel控制台</li>-->
<!-- <li>代码生成适配Cloud</li>-->
<!-- <li>记录登录退出日志信息</li>-->
<!-- <li>网关验证码过滤器添加放行校验</li>-->
<!-- <li>个性化的定制自动加载类</li>-->
<!-- <li>定时任务调整label-width防止部署出现错位</li>-->
<!-- <li>调整表头固定列默认样式</li>-->
<!-- <li>代码生成模板调整字段为String并且必填则加空串条件</li>-->
<!-- <li>代码生成字典Integer/Long使用parseInt</li>-->
<!-- <li>修复退出登录重定向到登录页登录后参数丢失</li>-->
<!-- <li>修正岗位导出权限注解</li>-->
<!-- <li>修复首页搜索菜单外链无法点击跳转问题</li>-->
<!-- <li>修复菜单管理选择图标backspace删除时不过滤数据</li>-->
<!-- <li>用户管理部门分支节点不可检查&显示计数</li>-->
<!-- <li>数据范围过滤属性调整</li>-->
<!-- <li>字典管理添加缓存读取</li>-->
<!-- <li>参数管理支持缓存操作</li>-->
<!-- <li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>-->
<!-- <li>dev启动默认打开浏览器</li>-->
<!-- <li>使用vue-cli默认source-map</li>-->
<!-- <li>slidebar eslint报错优化</li>-->
<!-- <li>当tags-view滚动关闭右键菜单</li>-->
<!-- <li>支持一级菜单和主页同级在main区域显示</li>-->
<!-- <li>限制外链地址必须以http(s)😕/开头</li>-->
<!-- <li>tagview & sidebar 主题颜色与element ui(全局)同步</li>-->
<!-- <li>修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序</li>-->
<!-- <li>权限部分代码调整</li>-->
<!-- <li>其他细节优化</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- <el-collapse-item title="v1.0.0 - 2020-05-20">-->
<!-- <ol>-->
<!-- <li>若依微服务系统正式发布</li>-->
<!-- </ol>-->
<!-- </el-collapse-item>-->
<!-- </el-collapse>-->
<!-- </el-card>-->
<!-- </el-col>-->
<!-- <el-col :xs="24" :sm="24" :md="12" :lg="8">-->
<!-- <el-card class="update-log">-->
<!-- <div slot="header" class="clearfix">-->
<!-- <span>捐赠支持</span>-->
<!-- </div>-->
<!-- <div class="body">-->
<!-- <img-->
<!-- src="@/assets/images/pay.png"-->
<!-- alt="donate"-->
<!-- width="100%"-->
<!-- />-->
<!-- <span style="display: inline-block; height: 30px; line-height: 30px"-->
<!-- >你可以请作者喝杯咖啡表示鼓励</span-->
<!-- >-->
<!-- </div>-->
<!-- </el-card>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </div>-->
<!--</template>-->
<script> <script>
export default { export default {