Merge remote-tracking branch 'origin/feature/mall_product' into feature/mall_product
commit
e44f1addb5
|
@ -6,6 +6,7 @@ import cn.hutool.json.JSONUtil;
|
|||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.RechargeOrderDO;
|
||||
import cn.iocoder.yudao.module.shop.dal.mysql.recharge.RechargeOrderMapper;
|
||||
import cn.iocoder.yudao.module.shop.service.order.StoreOrderService;
|
||||
import cn.iocoder.yudao.module.shop.service.recharge.PhoneRecordService;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.github.binarywang.wxpay.bean.notify.OriginNotifyResponse;
|
||||
import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
|
||||
|
@ -46,6 +47,8 @@ public class WxPayNotifyController {
|
|||
@Autowired
|
||||
private RechargeOrderMapper rechargeOrderMapper;
|
||||
|
||||
private PhoneRecordService phoneRecordService;
|
||||
|
||||
|
||||
/**
|
||||
* Description: 微信支付回调接口
|
||||
|
@ -138,6 +141,8 @@ public class WxPayNotifyController {
|
|||
orderDO.setRefundStatus(2);
|
||||
orderDO.setPaid(2);
|
||||
rechargeOrderMapper.updateById(orderDO);
|
||||
//删除提报记录
|
||||
phoneRecordService.deletePhoneGear(orderDO.getOrderId());
|
||||
// 修改订单状态
|
||||
// 写入
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
|
|
|
@ -74,7 +74,7 @@ public class RechargeGearController {
|
|||
@Operation(summary = "获得充值档位列表")
|
||||
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
|
||||
@PreAuthorize("@ss.hasPermission('shop:recharge-gear:query')")
|
||||
public CommonResult<List<RechargeGearRespVO>> getRechargeGearList(@RequestParam("ids") Collection<String> ids) {
|
||||
public CommonResult<List<RechargeGearRespVO>> getRechargeGearList(@RequestParam("ids") List<Long> ids) {
|
||||
List<RechargeGearDO> list = rechargeGearService.getRechargeGearList(ids);
|
||||
return success(RechargeGearConvert.INSTANCE.convertList(list));
|
||||
}
|
||||
|
|
|
@ -39,14 +39,7 @@ public class TopUpOrderController {
|
|||
log.info("initOrder会员充值===>{}", request);
|
||||
return CommonResult.success(storeOrderService.memberTopUp(request, servletRequest));
|
||||
}
|
||||
@TenantIgnore
|
||||
@PreAuthenticated
|
||||
@Operation(summary = "退款")
|
||||
@RequestMapping(value = "/memberRefund", method = RequestMethod.POST)
|
||||
public CommonResult<Object> memberRefund(@Valid @RequestBody RefundRequest request, HttpServletRequest servletRequest) throws Exception {
|
||||
log.info("memberRefund会员退款===>{}", request);
|
||||
return CommonResult.success(storeOrderService.memberRefund(request, servletRequest));
|
||||
}
|
||||
|
||||
@TenantIgnore
|
||||
@PreAuthenticated
|
||||
@Operation(summary = "申请退款")
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
package cn.iocoder.yudao.module.shop.controller.app.recharge;
|
||||
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||
import cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.*;
|
||||
import cn.iocoder.yudao.module.shop.controller.app.recharge.vo.PhoneRecordAdd;
|
||||
import cn.iocoder.yudao.module.shop.convert.recharge.PhoneRecordConvert;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.PhoneRecordDO;
|
||||
import cn.iocoder.yudao.module.shop.service.recharge.PhoneRecordService;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||
|
||||
@Tag(name = "用户APP - 充值档位记录")
|
||||
@RestController
|
||||
@RequestMapping("/shop/phone-record")
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class AppPhoneRecordController {
|
||||
|
||||
@Resource
|
||||
private PhoneRecordService phoneRecordService;
|
||||
|
||||
|
||||
@Value("${phone.query-url}")
|
||||
private String phoneUrl;
|
||||
|
||||
@Value("${phone.token}")
|
||||
private String token;
|
||||
|
||||
|
||||
@PostMapping("test")
|
||||
public CommonResult<Boolean> test(@RequestBody List<PhoneRecordAdd> data){
|
||||
String result = HttpRequest.post(phoneUrl+"query/createReport")
|
||||
.header("token",token)
|
||||
.body(JSONObject.toJSONString(data))
|
||||
.execute()
|
||||
.body();
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
log.info("提报新增返回结果{}",JSONObject.toJSONString(resultJson));
|
||||
if("0000".equals(resultJson.get("code"))){
|
||||
return success(null);
|
||||
}
|
||||
return success(null);
|
||||
}
|
||||
@PostMapping("delete")
|
||||
public CommonResult<Boolean> delete(@RequestBody String data){
|
||||
String result = HttpRequest.post(phoneUrl+"query/deleteReport?orderNo="+data)
|
||||
.header("token",token)
|
||||
.execute()
|
||||
.body();
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
log.info("删除返回结果{}",JSONObject.toJSONString(resultJson));
|
||||
if("0000".equals(resultJson.get("code"))){
|
||||
return success(null);
|
||||
}
|
||||
return success(null);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
package cn.iocoder.yudao.module.shop.controller.app.recharge;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||
import cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.*;
|
||||
import cn.iocoder.yudao.module.shop.convert.recharge.RefundFeeRecordConvert;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.RefundFeeRecordDO;
|
||||
import cn.iocoder.yudao.module.shop.service.recharge.RefundFeeRecordService;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||
|
||||
@Tag(name = "用户APP - 权益充值返费记录")
|
||||
@RestController
|
||||
@RequestMapping("/shop/refund-fee-record")
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class AppRefundFeeRecordController {
|
||||
|
||||
@Resource
|
||||
private MemberUserApi memberUserApi;
|
||||
@Value("${phone.query-url}")
|
||||
private String phoneUrl;
|
||||
|
||||
@Value("${phone.token}")
|
||||
private String token;
|
||||
|
||||
|
||||
@GetMapping("/query")
|
||||
@Operation(summary = "查询档位信息")
|
||||
public CommonResult<JSONArray> query(@RequestParam String phone) {
|
||||
if(StrUtil.isBlank(phone)){
|
||||
MemberUserRespDTO memberUserRespDTO = memberUserApi.getUser(SecurityFrameworkUtils.getLoginUserId());
|
||||
phone = memberUserRespDTO.getMobile();
|
||||
}
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("phone",phone);
|
||||
String result = HttpRequest.post(phoneUrl+"query/info")
|
||||
.header("token",token)
|
||||
.body(JSONObject.toJSONString(param))
|
||||
.execute()
|
||||
.body();
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
log.info("查询会员档次{}",resultJson);
|
||||
if("0000".equals(resultJson.get("code"))){
|
||||
return success(resultJson.getJSONArray("body"));
|
||||
}
|
||||
return success(null);
|
||||
}
|
||||
@GetMapping("/query-item")
|
||||
@Operation(summary = "查询档位返费信息")
|
||||
public CommonResult<JSONArray> queryItem(@RequestParam String reportId) {
|
||||
if(StrUtil.isBlank(reportId)){
|
||||
throw new ServiceException("reportId不能为空");
|
||||
}
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("reportId",reportId);
|
||||
String result = HttpRequest.post(phoneUrl+"query/item")
|
||||
.header("token",token)
|
||||
.body(JSONObject.toJSONString(param))
|
||||
.execute()
|
||||
.body();
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
log.info("查询档位返费信息{}",resultJson);
|
||||
if("0000".equals(resultJson.get("code"))){
|
||||
return success(resultJson.getJSONArray("body"));
|
||||
}
|
||||
return success(null);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package cn.iocoder.yudao.module.shop.controller.app.recharge.vo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class PhoneRecordAdd {
|
||||
private String phone;
|
||||
private BigDecimal money;
|
||||
private String gear;
|
||||
private String orderTime;
|
||||
private String channel;
|
||||
private String orderNo;
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package cn.iocoder.yudao.module.shop.controller.app.recharge.vo;
|
||||
|
||||
import cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.PhoneRecordBaseVO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "用户APP - 充值档位记录 Response VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class PhoneRecordRespVO extends PhoneRecordBaseVO {
|
||||
|
||||
@Schema(description = "主键", required = true, example = "24509")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "创建时间", required = true)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
|
||||
}
|
|
@ -22,9 +22,12 @@ import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
|||
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||
import cn.iocoder.yudao.module.member.api.user.dto.PromoterDTO;
|
||||
import cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.RechargeGearExportReqVO;
|
||||
import cn.iocoder.yudao.module.shop.controller.app.recharge.vo.PhoneRecordAdd;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.express.ExpressDO;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.order.StoreOrder;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.PhoneRecordDO;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.RechargeGearDO;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.RechargeOrderDO;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.RechargeOrderInfoDO;
|
||||
import cn.iocoder.yudao.module.shop.dal.mysql.order.StoreOrderMapper;
|
||||
|
@ -44,6 +47,8 @@ import cn.iocoder.yudao.module.shop.service.order.StoreOrderInfoService;
|
|||
import cn.iocoder.yudao.module.shop.service.order.StoreOrderRefundService;
|
||||
import cn.iocoder.yudao.module.shop.service.order.StoreOrderService;
|
||||
import cn.iocoder.yudao.module.shop.service.order.StoreOrderStatusService;
|
||||
import cn.iocoder.yudao.module.shop.service.recharge.PhoneRecordService;
|
||||
import cn.iocoder.yudao.module.shop.service.recharge.RechargeGearService;
|
||||
import cn.iocoder.yudao.module.shop.support.StrategySupport;
|
||||
import cn.iocoder.yudao.module.shop.support.pay.IPayStrategy;
|
||||
import cn.iocoder.yudao.module.shop.utils.CommonPage;
|
||||
|
@ -148,9 +153,15 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
|
||||
@Autowired
|
||||
private WxMpService wxMpService;
|
||||
|
||||
@Autowired
|
||||
private DeptApi deptApi;
|
||||
|
||||
@Resource
|
||||
private PhoneRecordService phoneRecordService;
|
||||
|
||||
@Resource
|
||||
private RechargeGearService rechargeGearService;
|
||||
|
||||
/**
|
||||
* 列表(PC)
|
||||
*
|
||||
|
@ -1209,6 +1220,13 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
amount = params.get("refund_fee");
|
||||
orderDO.setPaid(2);
|
||||
orderDO.setRefundStatus(2);
|
||||
//删除提报记录
|
||||
try {
|
||||
phoneRecordService.deletePhoneGear(orderDO.getOrderId());
|
||||
}catch (Exception e) {
|
||||
log.error("删除提报记录异常{}",e);
|
||||
}
|
||||
|
||||
// 表示退款
|
||||
} else {
|
||||
// 表示支付
|
||||
|
@ -1236,8 +1254,13 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
public void addPhoneRecord(RechargeOrderDO orderDO, String orderId) {
|
||||
List<RechargeOrderInfoDO> infoDOS = rechargeOrderInfoMapper.selectList(Wrappers.<RechargeOrderInfoDO>lambdaQuery().eq(RechargeOrderInfoDO::getOrderNo, orderId));
|
||||
List<PhoneRecordDO> recordDOS = new ArrayList<>();
|
||||
List<PhoneRecordAdd> phoneRecordAdds = new ArrayList<>();
|
||||
DeptRespDTO deptRespDTO = deptApi.getDept(orderDO.getDeptId());
|
||||
infoDOS.forEach(info -> {
|
||||
Long rechargeGearId = info.getRechargeGearId();
|
||||
RechargeGearDO rechargeGearDO = rechargeGearService.getRechargeGear(rechargeGearId.toString());
|
||||
PhoneRecordDO phoneRecordDO = new PhoneRecordDO();
|
||||
PhoneRecordAdd phoneRecordAdd = new PhoneRecordAdd();
|
||||
phoneRecordDO.setUserId(Long.valueOf(orderDO.getUid()));
|
||||
phoneRecordDO.setRechargeOrderId(Long.valueOf(orderDO.getId()));
|
||||
phoneRecordDO.setPhone(orderDO.getUserPhone());
|
||||
|
@ -1247,9 +1270,21 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
LocalDateTime newLocalDateTime = LocalDateTimeUtil.offset(localDateTime,12, ChronoUnit.MONTHS);
|
||||
phoneRecordDO.setRefundFeeEndDate(newLocalDateTime);
|
||||
phoneRecordDO.setRefundFeeNumber(12);
|
||||
phoneRecordAdd.setChannel(deptRespDTO.getParentOrganizationName());
|
||||
phoneRecordAdd.setPhone(phoneRecordDO.getPhone());
|
||||
phoneRecordAdd.setMoney(info.getPrice());
|
||||
phoneRecordAdd.setOrderNo(orderDO.getOrderId());
|
||||
phoneRecordAdd.setOrderTime(LocalDateTimeUtil.formatNormal(orderDO.getPayTime().toLocalDate()));
|
||||
phoneRecordAdd.setGear(rechargeGearDO.getRefundAmount().toString());
|
||||
phoneRecordAdds.add(phoneRecordAdd);
|
||||
recordDOS.add(phoneRecordDO);
|
||||
});
|
||||
phoneRecordMapper.insertBatch(recordDOS);
|
||||
try {
|
||||
phoneRecordService.insertPhone(phoneRecordAdds);
|
||||
}catch (Exception e){
|
||||
log.info("调取提报新增报错{}",e);
|
||||
}
|
||||
}
|
||||
|
||||
public BigDecimal replace(BigDecimal amount) {
|
||||
|
@ -1389,7 +1424,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
orderDO.setProTotalPrice(sum);
|
||||
orderDO.setBeforePayPrice(sum);
|
||||
orderDO.setPromoterId(user.getPromoterId());
|
||||
orderDO.setDeptId(promoterDTO.getDeptId());
|
||||
orderDO.setDeptId(deptId);
|
||||
orderDO.setTenantId(tenantId);
|
||||
rechargeOrderMapper.insert(orderDO);
|
||||
List<RechargeOrderInfoDO> infoDOS = new ArrayList<>();
|
||||
|
@ -1415,11 +1450,23 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
private void orderCheck(OrderContentRequest request, MemberUserRespDTO user) {
|
||||
List<OrderContentRequest.OrderInfo> orderInfos = request.getOrderInfos();
|
||||
Assert.isTrue(!CollectionUtils.isEmpty(orderInfos), "订单信息不能为空!");
|
||||
|
||||
//先查询提报总表
|
||||
List<Long> collect = orderInfos.stream().map(OrderContentRequest.OrderInfo::getGearId).collect(Collectors.toList());
|
||||
List<RechargeGearDO> rechargeGearDOList = rechargeGearService.getRechargeGearList(collect);
|
||||
rechargeGearDOList.forEach(rechargeGearDO->{
|
||||
Boolean flag = phoneRecordService.verifyPhone(request.getConfirmPhone(),rechargeGearDO.getRefundAmount().intValue()+"");
|
||||
if (flag) {
|
||||
throw new ServiceException("该挡位:" + rechargeGearDO.getName() + "你已购买,请勿重复操作");
|
||||
}
|
||||
});
|
||||
|
||||
List<PhoneRecordDO> infoDOS = phoneRecordMapper.selectList(Wrappers.<PhoneRecordDO>lambdaQuery()
|
||||
.eq(PhoneRecordDO::getUserId, user.getId())
|
||||
.in(PhoneRecordDO::getRechargeGearId, collect));
|
||||
|
||||
if (!CollectionUtils.isEmpty(infoDOS)) {
|
||||
|
||||
Map<Long, List<PhoneRecordDO>> collect1 = infoDOS.stream().collect(Collectors.groupingBy(PhoneRecordDO::getRechargeGearId));
|
||||
orderInfos.forEach(info -> {
|
||||
if (!CollectionUtils.isEmpty(collect1.get(info.getGearId()))) {
|
||||
|
|
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.shop.service.recharge;
|
|||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.*;
|
||||
import cn.iocoder.yudao.module.shop.controller.app.recharge.vo.PhoneRecordAdd;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.PhoneRecordDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
|
||||
|
@ -67,4 +68,37 @@ public interface PhoneRecordService {
|
|||
*/
|
||||
List<PhoneRecordDO> getPhoneRecordList(PhoneRecordExportReqVO exportReqVO);
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* <b>verifyPhone</b>
|
||||
* <b>Description:验证手机号档位是否充值</b>
|
||||
* <b>@author:</b> zenghuapei
|
||||
* <b>@date:</b> 2023/5/24 11:44
|
||||
* @param phone:
|
||||
* @param gear:
|
||||
* @return
|
||||
* </pre>
|
||||
*/
|
||||
Boolean verifyPhone(String phone,String gear);
|
||||
/**
|
||||
* <pre>
|
||||
* <b>deletePhoneGear</b>
|
||||
* <b>Description:删除档位信息</b>
|
||||
* <b>@author:</b> zenghuapei
|
||||
* <b>@date:</b> 2023/5/24 12:44
|
||||
* @return
|
||||
* </pre>
|
||||
*/
|
||||
Boolean deletePhoneGear(String orderId);
|
||||
/**
|
||||
* <pre>
|
||||
* <b>insertPhone</b>
|
||||
* <b>Description:新增档位信息</b>
|
||||
* <b>@author:</b> zenghuapei
|
||||
* <b>@date:</b> 2023/5/24 12:45
|
||||
* @return
|
||||
* </pre>
|
||||
*/
|
||||
Boolean insertPhone(List<PhoneRecordAdd> data);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
package cn.iocoder.yudao.module.shop.service.recharge;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||
import cn.iocoder.yudao.module.shop.controller.app.recharge.vo.PhoneRecordAdd;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
@ -14,6 +24,7 @@ import cn.iocoder.yudao.module.shop.convert.recharge.PhoneRecordConvert;
|
|||
import cn.iocoder.yudao.module.shop.dal.mysql.recharge.PhoneRecordMapper;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.module.shop.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
|
@ -23,10 +34,18 @@ import static cn.iocoder.yudao.module.shop.enums.ErrorCodeConstants.*;
|
|||
*/
|
||||
@Service
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class PhoneRecordServiceImpl implements PhoneRecordService {
|
||||
|
||||
@Resource
|
||||
private PhoneRecordMapper phoneRecordMapper;
|
||||
@Resource
|
||||
private MemberUserApi memberUserApi;
|
||||
@Value("${phone.query-url}")
|
||||
private String phoneUrl;
|
||||
|
||||
@Value("${phone.token}")
|
||||
private String token;
|
||||
|
||||
@Override
|
||||
public Long createPhoneRecord(PhoneRecordCreateReqVO createReqVO) {
|
||||
|
@ -82,4 +101,81 @@ public class PhoneRecordServiceImpl implements PhoneRecordService {
|
|||
return phoneRecordMapper.selectList(exportReqVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* <b>verifyPhone</b>
|
||||
* <b>Description:验证手机号档位是否充值</b>
|
||||
* <b>@author:</b> zenghuapei
|
||||
* <b>@date:</b> 2023/5/24 11:44
|
||||
* @param phone :
|
||||
* @param gear :
|
||||
* @return
|
||||
* </pre>
|
||||
*/
|
||||
@Override
|
||||
public Boolean verifyPhone(String phone, String gear) {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("phone",phone);
|
||||
param.put("gear",gear);
|
||||
String result = HttpRequest.post(phoneUrl+"query/verify")
|
||||
.header("token",token)
|
||||
.body(JSONObject.toJSONString(param))
|
||||
.execute()
|
||||
.body();
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
if("0000".equals(resultJson.get("code"))){
|
||||
return resultJson.getBoolean("body");
|
||||
}else{
|
||||
throw new ServiceException("手机号档位验证失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* <b>deletePhoneGear</b>
|
||||
* <b>Description:删除档位信息</b>
|
||||
* <b>@author:</b> zenghuapei
|
||||
* <b>@date:</b> 2023/5/24 12:44
|
||||
* @return
|
||||
* </pre>
|
||||
*/
|
||||
@Override
|
||||
public Boolean deletePhoneGear(String orderId) {
|
||||
String result = HttpRequest.post(phoneUrl+"query/deleteReport?orderNo="+orderId)
|
||||
.header("token",token)
|
||||
.execute()
|
||||
.body();
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
log.info("删除提报{}",JSONObject.toJSONString(resultJson));
|
||||
if("0000".equals(resultJson.get("code"))){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* <b>insertPhone</b>
|
||||
* <b>Description:新增档位信息</b>
|
||||
* <b>@author:</b> zenghuapei
|
||||
* <b>@date:</b> 2023/5/24 12:45
|
||||
* @return
|
||||
* </pre>
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertPhone(List<PhoneRecordAdd> data) {
|
||||
String result = HttpRequest.post(phoneUrl+"query/createReport")
|
||||
.header("token",token)
|
||||
.body(JSONObject.toJSONString(data))
|
||||
.execute()
|
||||
.body();
|
||||
JSONObject resultJson = JSONObject.parseObject(result);
|
||||
log.info("提报新增返回结果{}",JSONObject.toJSONString(resultJson));
|
||||
if("0000".equals(resultJson.get("code"))){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ public interface RechargeGearService {
|
|||
* @param ids 编号
|
||||
* @return 充值档位列表
|
||||
*/
|
||||
List<RechargeGearDO> getRechargeGearList(Collection<String> ids);
|
||||
List<RechargeGearDO> getRechargeGearList(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得充值档位分页
|
||||
|
|
|
@ -87,7 +87,7 @@ public class RechargeGearServiceImpl implements RechargeGearService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<RechargeGearDO> getRechargeGearList(Collection<String> ids) {
|
||||
public List<RechargeGearDO> getRechargeGearList(List<Long> ids) {
|
||||
return rechargeGearMapper.selectBatchIds(ids);
|
||||
}
|
||||
|
||||
|
|
|
@ -67,4 +67,5 @@ public interface RefundFeeRecordService {
|
|||
*/
|
||||
List<RefundFeeRecordDO> getRefundFeeRecordList(RefundFeeRecordExportReqVO exportReqVO);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -197,7 +197,7 @@ public class PromoterServiceImpl implements PromoterService {
|
|||
memberUserDO.setNickname(importUser.getNickName());
|
||||
memberUserDO.setMobile(importUser.getMobile());
|
||||
memberUserDO.setPassword(importUser.getMobile().substring(importUser.getMobile().length() - 6));
|
||||
memberUserDO.setStatus(1);
|
||||
memberUserDO.setStatus(0);
|
||||
memberUserService.createUserIfAbsent(importUser.getMobile(), importUser.getNickName(), getClientIP());
|
||||
}
|
||||
// 插入
|
||||
|
|
|
@ -254,3 +254,6 @@ justauth:
|
|||
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
|
||||
timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
|
||||
|
||||
phone:
|
||||
query-url: http://192.168.1.189:4006/cyywl-phone-query-api/
|
||||
token: eyIwLnR5cCI6IkpXVCIsImFsZyI6IkhTNTEyIn0
|
|
@ -6,7 +6,7 @@ VUE_APP_TITLE = 创盈商户管理系统
|
|||
|
||||
# 芋道管理系统/开发环境
|
||||
#VUE_APP_BASE_API = 'https://cmx.bskies.cc:8000/cyywl-api'
|
||||
VUE_APP_BASE_API = 'http://192.168.1.188:48080'
|
||||
VUE_APP_BASE_API = 'http://api.cyywl.top'
|
||||
|
||||
# 路由懒加载
|
||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true
|
||||
|
|
|
@ -355,7 +355,7 @@ const defaultObj = {
|
|||
isGood: false,
|
||||
isHot: false,
|
||||
isBest: false,
|
||||
tempId: '111',
|
||||
tempId: '',
|
||||
attrValue: [{
|
||||
image: '',
|
||||
price: 0,
|
||||
|
@ -819,7 +819,7 @@ export default {
|
|||
// 运费模板;
|
||||
getShippingList() {
|
||||
shippingTemplatesList(this.tempData).then(res => {
|
||||
this.shippingList = res.list
|
||||
this.shippingList = res.data.list
|
||||
})
|
||||
},
|
||||
showInput(item) {
|
||||
|
|
|
@ -59,13 +59,11 @@
|
|||
/>
|
||||
<el-table-column label="商品图" min-width="80">
|
||||
<template slot-scope="scope">
|
||||
<div class="demo-image__preview">
|
||||
<el-image
|
||||
style="width: 36px; height: 36px"
|
||||
:src="scope.row.image"
|
||||
:preview-src-list="[scope.row.image]"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="商品名称"
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
|
||||
// let domain = 'http://yuxy.perrymake.com'
|
||||
let domain = 'http://192.168.1.188:48080'
|
||||
let domain = 'http://api.cyywl.top'
|
||||
// let domain = 'http://192.168.1.188:48080'
|
||||
|
||||
module.exports = {
|
||||
// 请求域名 格式: https://您的域名
|
||||
// #ifdef MP
|
||||
HTTP_REQUEST_URL: domain,
|
||||
// #endif
|
||||
// HTTP_ADMIN_URL:'http://yuxy.perrymake.com', //PC后台的API请求地址,上传图片用
|
||||
HTTP_ADMIN_URL:'http://192.168.1.188:48080', //PC后台的API请求地址,上传图片用
|
||||
HTTP_ADMIN_URL:'http://api.cyywl.top', //PC后台的API请求地址,上传图片用
|
||||
// HTTP_ADMIN_URL:'http://192.168.1.188:48080', //PC后台的API请求地址,上传图片用
|
||||
// #ifdef H5
|
||||
//H5接口是浏览器地址
|
||||
// HTTP_REQUEST_URL: window.location.protocol+"//"+window.location.host,
|
||||
|
|
|
@ -1,9 +1,353 @@
|
|||
{
|
||||
"name": "yudao-ui-app",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "yudao-ui-app",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"clipboard": "^2.0.11",
|
||||
"html-to-image": "^1.11.11",
|
||||
"qrcode": "^1.5.3"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/camelcase": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
|
||||
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/clipboard": {
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz",
|
||||
"integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
|
||||
"dependencies": {
|
||||
"good-listener": "^1.2.2",
|
||||
"select": "^1.1.2",
|
||||
"tiny-emitter": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz",
|
||||
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
|
||||
"dependencies": {
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wrap-ansi": "^6.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dependencies": {
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"node_modules/decamelize": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz",
|
||||
"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/delegate": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz",
|
||||
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
|
||||
},
|
||||
"node_modules/dijkstrajs": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
|
||||
"integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||
},
|
||||
"node_modules/encode-utf8": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz",
|
||||
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
|
||||
},
|
||||
"node_modules/find-up": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
|
||||
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
||||
"dependencies": {
|
||||
"locate-path": "^5.0.0",
|
||||
"path-exists": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/get-caller-file": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
||||
"engines": {
|
||||
"node": "6.* || 8.* || >= 10.*"
|
||||
}
|
||||
},
|
||||
"node_modules/good-listener": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz",
|
||||
"integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
|
||||
"dependencies": {
|
||||
"delegate": "^3.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/html-to-image": {
|
||||
"version": "1.11.11",
|
||||
"resolved": "https://registry.npmmirror.com/html-to-image/-/html-to-image-1.11.11.tgz",
|
||||
"integrity": "sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA=="
|
||||
},
|
||||
"node_modules/is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
|
||||
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
||||
"dependencies": {
|
||||
"p-locate": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/p-limit": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
|
||||
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
|
||||
"dependencies": {
|
||||
"p-try": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/p-locate": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
|
||||
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
||||
"dependencies": {
|
||||
"p-limit": "^2.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/p-try": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",
|
||||
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/path-exists": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
|
||||
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/pngjs": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz",
|
||||
"integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/qrcode": {
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.3.tgz",
|
||||
"integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==",
|
||||
"dependencies": {
|
||||
"dijkstrajs": "^1.0.1",
|
||||
"encode-utf8": "^1.0.3",
|
||||
"pngjs": "^5.0.0",
|
||||
"yargs": "^15.3.1"
|
||||
},
|
||||
"bin": {
|
||||
"qrcode": "bin/qrcode"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
|
||||
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/require-main-filename": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz",
|
||||
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
|
||||
},
|
||||
"node_modules/select": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
|
||||
"integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
|
||||
},
|
||||
"node_modules/set-blocking": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
|
||||
},
|
||||
"node_modules/string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
|
||||
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||
"dependencies": {
|
||||
"emoji-regex": "^8.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0",
|
||||
"strip-ansi": "^6.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/strip-ansi": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||
"dependencies": {
|
||||
"ansi-regex": "^5.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/tiny-emitter": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
|
||||
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
|
||||
},
|
||||
"node_modules/which-module": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz",
|
||||
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="
|
||||
},
|
||||
"node_modules/wrap-ansi": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
|
||||
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.0.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/y18n": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz",
|
||||
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
|
||||
},
|
||||
"node_modules/yargs": {
|
||||
"version": "15.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz",
|
||||
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
|
||||
"dependencies": {
|
||||
"cliui": "^6.0.0",
|
||||
"decamelize": "^1.2.0",
|
||||
"find-up": "^4.1.0",
|
||||
"get-caller-file": "^2.0.1",
|
||||
"require-directory": "^2.1.1",
|
||||
"require-main-filename": "^2.0.0",
|
||||
"set-blocking": "^2.0.0",
|
||||
"string-width": "^4.2.0",
|
||||
"which-module": "^2.0.0",
|
||||
"y18n": "^4.0.0",
|
||||
"yargs-parser": "^18.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/yargs-parser": {
|
||||
"version": "18.1.3",
|
||||
"resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz",
|
||||
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
|
||||
"dependencies": {
|
||||
"camelcase": "^5.0.0",
|
||||
"decamelize": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"camelcase": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
|
||||
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
|
||||
},
|
||||
"clipboard": {
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz",
|
||||
|
@ -14,11 +358,68 @@
|
|||
"tiny-emitter": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"cliui": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz",
|
||||
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
|
||||
"requires": {
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wrap-ansi": "^6.2.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"decamelize": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz",
|
||||
"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
|
||||
},
|
||||
"delegate": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz",
|
||||
"integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
|
||||
},
|
||||
"dijkstrajs": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
|
||||
"integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||
},
|
||||
"encode-utf8": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz",
|
||||
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
|
||||
},
|
||||
"find-up": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
|
||||
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
||||
"requires": {
|
||||
"locate-path": "^5.0.0",
|
||||
"path-exists": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"get-caller-file": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
|
||||
},
|
||||
"good-listener": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz",
|
||||
|
@ -27,15 +428,155 @@
|
|||
"delegate": "^3.1.2"
|
||||
}
|
||||
},
|
||||
"html-to-image": {
|
||||
"version": "1.11.11",
|
||||
"resolved": "https://registry.npmmirror.com/html-to-image/-/html-to-image-1.11.11.tgz",
|
||||
"integrity": "sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA=="
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
|
||||
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
||||
"requires": {
|
||||
"p-locate": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"p-limit": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
|
||||
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
|
||||
"requires": {
|
||||
"p-try": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"p-locate": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
|
||||
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
||||
"requires": {
|
||||
"p-limit": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"p-try": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",
|
||||
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
|
||||
},
|
||||
"path-exists": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
|
||||
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
|
||||
},
|
||||
"pngjs": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz",
|
||||
"integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
|
||||
},
|
||||
"qrcode": {
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.3.tgz",
|
||||
"integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==",
|
||||
"requires": {
|
||||
"dijkstrajs": "^1.0.1",
|
||||
"encode-utf8": "^1.0.3",
|
||||
"pngjs": "^5.0.0",
|
||||
"yargs": "^15.3.1"
|
||||
}
|
||||
},
|
||||
"require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
|
||||
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
|
||||
},
|
||||
"require-main-filename": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz",
|
||||
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
|
||||
},
|
||||
"select": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
|
||||
"integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
|
||||
},
|
||||
"set-blocking": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
|
||||
},
|
||||
"string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
|
||||
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||
"requires": {
|
||||
"emoji-regex": "^8.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0",
|
||||
"strip-ansi": "^6.0.1"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||
"requires": {
|
||||
"ansi-regex": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"tiny-emitter": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
|
||||
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
|
||||
},
|
||||
"which-module": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz",
|
||||
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="
|
||||
},
|
||||
"wrap-ansi": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
|
||||
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
|
||||
"requires": {
|
||||
"ansi-styles": "^4.0.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"y18n": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz",
|
||||
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
|
||||
},
|
||||
"yargs": {
|
||||
"version": "15.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz",
|
||||
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
|
||||
"requires": {
|
||||
"cliui": "^6.0.0",
|
||||
"decamelize": "^1.2.0",
|
||||
"find-up": "^4.1.0",
|
||||
"get-caller-file": "^2.0.1",
|
||||
"require-directory": "^2.1.1",
|
||||
"require-main-filename": "^2.0.0",
|
||||
"set-blocking": "^2.0.0",
|
||||
"string-width": "^4.2.0",
|
||||
"which-module": "^2.0.0",
|
||||
"y18n": "^4.0.0",
|
||||
"yargs-parser": "^18.1.2"
|
||||
}
|
||||
},
|
||||
"yargs-parser": {
|
||||
"version": "18.1.3",
|
||||
"resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz",
|
||||
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
|
||||
"requires": {
|
||||
"camelcase": "^5.0.0",
|
||||
"decamelize": "^1.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"clipboard": "^2.0.11"
|
||||
"clipboard": "^2.0.11",
|
||||
"html-to-image": "^1.11.11",
|
||||
"qrcode": "^1.5.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -251,22 +251,9 @@
|
|||
if (!that.orderId) return that.$util.Tips({
|
||||
title: '请选择要支付的订单'
|
||||
});
|
||||
if (paytype == 'yue' && parseFloat(number) < parseFloat(that.payPriceShow)) return that.$util.Tips({
|
||||
title: `余额不足`
|
||||
});
|
||||
uni.showLoading({
|
||||
title: `支付中`
|
||||
});
|
||||
if (paytype == 'friend' && that.orderId) {
|
||||
uni.hideLoading();
|
||||
return uni.navigateTo({
|
||||
url: '/pages/users/payment_on_behalf/index?order_id=' + that.orderId + '&spread=' +
|
||||
this.$store.state.app.uid,
|
||||
success: res => {},
|
||||
fail: () => {},
|
||||
complete: () => {}
|
||||
});
|
||||
}
|
||||
orderPay({
|
||||
uni: that.orderId,
|
||||
paytype: paytype,
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
<u-icon slot="icon" size="45" name="/static/images/user_icon1.png"></u-icon>
|
||||
</u-cell>
|
||||
<u-cell title="分销中心" v-if="userInfo.userType === 'PROMOTER'" isLink
|
||||
@click="jumpPage('/pages/users/user_spread_user/index')">
|
||||
@click="jumpPage('/pages/users/user_spread_code/index')">
|
||||
<u-icon slot="icon" size="45" name="/static/images/user_icon2.png"></u-icon>
|
||||
</u-cell>
|
||||
<u-cell title="热线电话" value="023-12948338" :value="tenantInfo.serviceMobile" isLink>
|
||||
|
@ -255,8 +255,8 @@
|
|||
})
|
||||
},
|
||||
kefuClick() {
|
||||
if (tenantInfo.wxKfUrl) {
|
||||
location.href = tenantInfo.wxKfUrl
|
||||
if (this.tenantInfo.wxKfUrl) {
|
||||
location.href = this.tenantInfo.wxKfUrl
|
||||
}
|
||||
},
|
||||
getOrderData() {
|
||||
|
|
|
@ -1,430 +1,226 @@
|
|||
<template>
|
||||
<view style="height: 100%;">
|
||||
<view class='distribution-posters'>
|
||||
<swiper :indicator-dots="indicatorDots" :autoplay="autoplay" :circular="circular" :interval="interval"
|
||||
:duration="duration" @change="bindchange" previous-margin="40px" next-margin="40px">
|
||||
<block v-for="(item,index) in spreadList" :key="index">
|
||||
<swiper-item>
|
||||
<image :src="item.pic" class="slide-image" :class="swiperIndex == index ? 'active' : 'quiet'"
|
||||
mode='aspectFill' />
|
||||
</swiper-item>
|
||||
</block>
|
||||
</swiper>
|
||||
<!-- #ifdef MP -->
|
||||
<view class='keep bg-color' @click='savePosterPath'>保存海报</view>
|
||||
<!-- #endif -->
|
||||
<!-- #ifndef MP -->
|
||||
<div class="preserve acea-row row-center-wrapper">
|
||||
<div class="line"></div>
|
||||
<div class="tip">长按保存图片</div>
|
||||
<div class="line"></div>
|
||||
</div>
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
<!-- #ifdef MP -->
|
||||
<!-- <authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"></authorize> -->
|
||||
<!-- #endif -->
|
||||
<view class="canvas" v-if="canvasStatus">
|
||||
<canvas style="width:750px;height:1190px;" canvas-id="canvasOne"></canvas>
|
||||
<canvas canvas-id="qrcode" :style="{width: `${qrcodeSize}px`, height: `${qrcodeSize}px`}" />
|
||||
<view class="main-page">
|
||||
<image :src="posterUrl" style="width:100%;height:100%;" mode="scaleToFill" v-show="posterUrl"></image>
|
||||
<view class="spread-wrap" id="poster-wrap" v-show="!posterUrl">
|
||||
<view class="logo-wrap">
|
||||
<image :src="tenantInfo.logo" class="logo-image"></image>
|
||||
</view>
|
||||
<view class="activity-wrap" v-show="activityList.length > 0">
|
||||
<view class="item-wrap" :key="index" v-for="(item, index) in activityList">
|
||||
<view class="text">办理会员{{item.gearAmount}}元</view>
|
||||
<view class="text">可享一年返回<span>{{item.refundAmount}}元</span>话费</view>
|
||||
</view>
|
||||
<view class="tips">
|
||||
三个活动可同时参与,每个手机号仅限一次,最高可反<span>1920元</span>话费!!!
|
||||
</view>
|
||||
<view class="service-phone">{{tenantInfo.serviceMobile}}</view>
|
||||
<view class="tenant-info-wrap">
|
||||
<view class="info-wrap">
|
||||
<view class="info">
|
||||
<view class="name">{{userInfo.nickname}}</view>
|
||||
<view class="phone">{{userInfo.mobile}}</view>
|
||||
<view class="address">
|
||||
{{userInfo.parentDeptName}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="qrcode-wrap">
|
||||
<canvas id="qrcode" style="width:132rpx;height:132rpx;"></canvas>
|
||||
</view>
|
||||
</view>
|
||||
<u-button class="logon" @click="downImage" v-show="!isHideBtn">生成海报</u-button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// #ifdef H5
|
||||
import uQRCode from '@/js_sdk/Sansnn-uQRCode/uqrcode.js'
|
||||
// #endif
|
||||
import {
|
||||
getUserInfo,
|
||||
spreadBanner
|
||||
} from '@/api/user.js';
|
||||
import {
|
||||
toLogin
|
||||
} from '@/libs/login.js';
|
||||
import {
|
||||
memberGradeInfo
|
||||
} from '@/api/member.js';
|
||||
import {
|
||||
mapGetters
|
||||
} from "vuex";
|
||||
// #ifdef MP
|
||||
import {
|
||||
base64src
|
||||
} from '@/utils/base64src.js'
|
||||
import authorize from '@/components/Authorize';
|
||||
import {
|
||||
getQrcode
|
||||
} from '@/api/api.js';
|
||||
// #endif
|
||||
import home from '@/components/home';
|
||||
import {
|
||||
imageBase64
|
||||
} from "@/api/public";
|
||||
import appConfig from '@/config/app.js'
|
||||
import QRCode from 'qrcode'
|
||||
import * as htmlToImage from 'html-to-image'
|
||||
export default {
|
||||
components: {
|
||||
// #ifdef MP
|
||||
authorize,
|
||||
// #endif
|
||||
home
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
imgUrls: [],
|
||||
indicatorDots: false,
|
||||
circular: false,
|
||||
autoplay: false,
|
||||
interval: 3000,
|
||||
duration: 500,
|
||||
swiperIndex: 0,
|
||||
spreadList: [],
|
||||
poster: '',
|
||||
isAuto: false, //没有授权的不会自动授权
|
||||
isShowAuth: false, //是否隐藏授权
|
||||
qrcodeSize: 3000,
|
||||
PromotionCode: '',
|
||||
base64List: [],
|
||||
canvasStatus: true //海报绘图标签
|
||||
activityList: [],
|
||||
posterUrl: '',
|
||||
isHideBtn: false
|
||||
};
|
||||
},
|
||||
computed: mapGetters(['isLogin', 'uid', 'userInfo','tenantId']),
|
||||
// watch: {
|
||||
// isLogin: {
|
||||
// handler: function(newV, oldV) {
|
||||
// if (newV) {
|
||||
// this.userSpreadBannerList();
|
||||
// }
|
||||
// },
|
||||
// deep: true
|
||||
// }
|
||||
// },
|
||||
computed: mapGetters(['isLogin', 'uid', 'userInfo', 'tenantId', 'tenantInfo']),
|
||||
onLoad() {
|
||||
if (this.isLogin) {
|
||||
this.userSpreadBannerList();
|
||||
if (!this.isLogin) {
|
||||
toLogin()
|
||||
} else {
|
||||
toLogin();
|
||||
this.getActivityInfo()
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
// #ifdef MP
|
||||
onShareAppMessage: function() {
|
||||
return {
|
||||
title: this.userInfo.nickname + '-分销海报',
|
||||
imageUrl: this.spreadList[0].pic,
|
||||
path: '/pages/index/index?spid=' + this.uid,
|
||||
};
|
||||
},
|
||||
// #endif
|
||||
onReady() {},
|
||||
methods: {
|
||||
userSpreadBannerList: function() {
|
||||
let that = this;
|
||||
downImage() {
|
||||
const that = this
|
||||
uni.showLoading({
|
||||
title: '获取中',
|
||||
mask: true,
|
||||
})
|
||||
spreadBanner({
|
||||
page: 1,
|
||||
limit: 5
|
||||
}).then(res => {
|
||||
uni.hideLoading();
|
||||
const list = res.data.map((item) => item.pic)
|
||||
that.$set(that, 'spreadList', res.data);
|
||||
that.$set(that, 'base64List', list);
|
||||
that.make();
|
||||
// that.getImageBase64(res.data);
|
||||
}).catch(err => {
|
||||
uni.hideLoading();
|
||||
});
|
||||
},
|
||||
getImageBase64: function(images) {
|
||||
uni.showLoading({
|
||||
title: '海报生成中',
|
||||
title: '生成海报中',
|
||||
mask: true
|
||||
});
|
||||
let that = this;
|
||||
// #ifdef H5
|
||||
let spreadList = []
|
||||
// 生成一个Promise对象的数组
|
||||
images.forEach(item => {
|
||||
const oneApi = imageBase64(item.pic).then(res => {
|
||||
return res.data.code;
|
||||
that.isHideBtn = true
|
||||
htmlToImage.toJpeg(document.getElementById('poster-wrap'), {
|
||||
quality: 0.95,
|
||||
cacheBust: true
|
||||
})
|
||||
spreadList.push(oneApi)
|
||||
})
|
||||
Promise.all(spreadList).then(result => {
|
||||
console.log('result', result)
|
||||
that.$set(that, 'base64List', result);
|
||||
that.make();
|
||||
that.setShareInfoStatus();
|
||||
})
|
||||
// #endif
|
||||
|
||||
// #ifdef MP
|
||||
that.base64List = images.map(item => {
|
||||
return item.pic
|
||||
});
|
||||
// #endif
|
||||
|
||||
// #ifdef MP
|
||||
that.getQrcode();
|
||||
// #endif
|
||||
},
|
||||
// 小程序二维码
|
||||
getQrcode() {
|
||||
let that = this;
|
||||
let data = {
|
||||
pid: that.uid,
|
||||
path: 'pages/index/index'
|
||||
}
|
||||
let arrImagesUrl = "";
|
||||
uni.downloadFile({
|
||||
url: this.base64List[0],
|
||||
success: (res) => {
|
||||
arrImagesUrl = res.tempFilePath;
|
||||
}
|
||||
});
|
||||
getQrcode(data).then(res => {
|
||||
base64src(res.data.code, res => {
|
||||
that.PromotionCode = res;
|
||||
.then(function(dataUrl) {
|
||||
console.log('dataUrl', dataUrl)
|
||||
uni.hideLoading()
|
||||
that.posterUrl = dataUrl
|
||||
that.$util.Tips({
|
||||
title: '生成成功,长按保存图片'
|
||||
})
|
||||
});
|
||||
setTimeout(() => {
|
||||
that.PosterCanvas(arrImagesUrl, that.PromotionCode, that.userInfo.nickname, 0);
|
||||
}, 300);
|
||||
}).catch(err => {
|
||||
uni.hideLoading();
|
||||
that.$util.Tips({
|
||||
title: err
|
||||
});
|
||||
that.$set(that, 'canvasStatus', false);
|
||||
});
|
||||
},
|
||||
// 生成二维码;
|
||||
make() {
|
||||
let that = this;
|
||||
let href = '';
|
||||
// href = window.location.href.split('/pages')[0];
|
||||
const url =`${appConfig.SPREAD_DOMAIN}${appConfig.SPREAD_LINK}?redirectUrl=${appConfig.SPREAD_DOMAIN}&tenantId=${that.tenantId}&spreadId=${that.uid}`
|
||||
const url =
|
||||
`${appConfig.SPREAD_DOMAIN}${appConfig.SPREAD_LINK}?redirectUrl=${appConfig.SPREAD_DOMAIN}&tenantId=${that.tenantId}&spreadId=${that.uid}`
|
||||
console.log('url', url)
|
||||
uQRCode.make({
|
||||
canvasId: 'qrcode',
|
||||
// text: href + '/pages/index/index?spreadId=' + that.uid,
|
||||
text: url,
|
||||
size: this.qrcodeSize,
|
||||
margin: 10,
|
||||
success: res => {
|
||||
that.PromotionCode = res;
|
||||
setTimeout(() => {
|
||||
that.PosterCanvas(this.base64List[0], that.PromotionCode, that.userInfo
|
||||
.nickname, 0);
|
||||
}, 300);
|
||||
},
|
||||
complete: (res) => {},
|
||||
fail: res => {
|
||||
uni.hideLoading();
|
||||
that.$util.Tips({
|
||||
title: '海报二维码生成失败!'
|
||||
});
|
||||
}
|
||||
QRCode.toCanvas(document.getElementById('qrcode').querySelector('canvas'), url, {
|
||||
scale: 1.5
|
||||
}, function(error) {
|
||||
console.log(error)
|
||||
})
|
||||
},
|
||||
PosterCanvas: function(arrImages, code, nickname, index) {
|
||||
let context = uni.createCanvasContext('canvasOne')
|
||||
context.clearRect(0, 0, 0, 0);
|
||||
let that = this;
|
||||
console.log('arrImages', arrImages)
|
||||
uni.getImageInfo({
|
||||
src: arrImages,
|
||||
success: function(res) {
|
||||
context.drawImage(arrImages, 0, 0, 750, 1190);
|
||||
context.save();
|
||||
context.drawImage(code, 110, 700, 300, 300);
|
||||
context.restore();
|
||||
context.setFontSize(28);
|
||||
context.fillText(nickname, 270, 980);
|
||||
context.fillText('邀请您加入', 270, 1020);
|
||||
setTimeout(() => {
|
||||
context.draw(true, function() {
|
||||
uni.canvasToTempFilePath({
|
||||
destWidth: 750,
|
||||
destHeight: 1190,
|
||||
canvasId: 'canvasOne',
|
||||
fileType: 'jpg',
|
||||
success: function(res) {
|
||||
// 在H5平台下,tempFilePath 为 base64
|
||||
uni.hideLoading();
|
||||
that.spreadList[index].pic = res
|
||||
.tempFilePath;
|
||||
that.$set(that, 'poster', res
|
||||
.tempFilePath);
|
||||
that.$set(that, 'canvasStatus', false);
|
||||
}
|
||||
})
|
||||
})
|
||||
}, 100);
|
||||
},
|
||||
fail: function(err) {
|
||||
uni.hideLoading();
|
||||
that.$util.Tips({
|
||||
title: '无法获取图片信息'
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
onLoadFun: function(e) {
|
||||
this.$set(this, 'userInfo', e);
|
||||
this.userSpreadBannerList();
|
||||
},
|
||||
// 授权关闭
|
||||
authColse: function(e) {
|
||||
this.isShowAuth = e
|
||||
},
|
||||
bindchange(e) {
|
||||
let base64List = this.base64List;
|
||||
let index = e.detail.current;
|
||||
this.swiperIndex = index;
|
||||
let arrImagesUrl = "";
|
||||
uni.downloadFile({
|
||||
url: base64List[index],
|
||||
success: (res) => {
|
||||
arrImagesUrl = res.tempFilePath;
|
||||
setTimeout(() => {
|
||||
this.$set(this, 'canvasStatus', true);
|
||||
this.PosterCanvas(arrImagesUrl, this.PromotionCode, this.userInfo.nickname,
|
||||
index);
|
||||
}, 300);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 点击保存海报
|
||||
savePosterPath: function() {
|
||||
let that = this;
|
||||
uni.getSetting({
|
||||
success(res) {
|
||||
if (!res.authSetting['scope.writePhotosAlbum']) {
|
||||
uni.authorize({
|
||||
scope: 'scope.writePhotosAlbum',
|
||||
success() {
|
||||
uni.saveImageToPhotosAlbum({
|
||||
filePath: that.poster,
|
||||
success: function(res) {
|
||||
that.$util.Tips({
|
||||
title: '保存成功',
|
||||
icon: 'success'
|
||||
});
|
||||
},
|
||||
fail: function(res) {
|
||||
that.$util.Tips({
|
||||
title: '保存失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
uni.saveImageToPhotosAlbum({
|
||||
filePath: that.poster,
|
||||
success: function(res) {
|
||||
that.$util.Tips({
|
||||
title: '保存成功',
|
||||
icon: 'success'
|
||||
});
|
||||
},
|
||||
fail: function(res) {
|
||||
that.$util.Tips({
|
||||
title: '保存失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
setShareInfoStatus: function() {
|
||||
if (this.$wechat.isWeixin()) {
|
||||
let configAppMessage = {
|
||||
desc: '分销海报',
|
||||
title: this.userInfo.nickname + '-分销海报',
|
||||
link: '/pages/index/index?spread=' + this.uid,
|
||||
imgUrl: this.spreadList[0].pic
|
||||
};
|
||||
this.$wechat.wechatEvevt(["updateAppMessageShareData", "updateTimelineShareData"],
|
||||
configAppMessage)
|
||||
// 获取活动套餐信息
|
||||
async getActivityInfo() {
|
||||
try {
|
||||
uni.showLoading({
|
||||
title: '加载中',
|
||||
mask: true
|
||||
});
|
||||
const res = await memberGradeInfo()
|
||||
this.activityList = res.data
|
||||
// 生成二维码
|
||||
setTimeout(() => {
|
||||
this.make()
|
||||
}, 500)
|
||||
} catch (e) {
|
||||
this.$util.Tips({
|
||||
title: '获取活动信息失败'
|
||||
})
|
||||
} finally {
|
||||
uni.hideLoading()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
page {
|
||||
background-color: #a3a3a3 !important;
|
||||
height: 100% !important;
|
||||
background-color: #F8EEEF !important;
|
||||
height: 100vh;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.main-page{
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.spread-wrap {
|
||||
height: 100%;
|
||||
background: url('@/static/images/spread_bg.png') center 0 no-repeat;
|
||||
background-size: 100% auto;
|
||||
position: relative;
|
||||
background-color: #F8EEEF;
|
||||
}
|
||||
|
||||
.logo-wrap {
|
||||
text-align: center;
|
||||
padding-top: 53rpx;
|
||||
|
||||
.logo-image {
|
||||
width: 160rpx;
|
||||
height: 141rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.activity-wrap {
|
||||
position: absolute;
|
||||
top: 460rpx;
|
||||
left: 104rpx;
|
||||
right: 110rpx;
|
||||
|
||||
.tenant-info-wrap {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 656rpx;
|
||||
|
||||
.info-wrap {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.qrcode-wrap {
|
||||
margin-left: 40rpx;
|
||||
}
|
||||
|
||||
.address {
|
||||
margin-top: 18rpx;
|
||||
}
|
||||
|
||||
.logon {
|
||||
width: 100%;
|
||||
height: 70rpx;
|
||||
margin: 30rpx 0;
|
||||
color: #FFFFFF;
|
||||
font-size: 28rpx;
|
||||
background: linear-gradient(0deg, #E63163 0%, #FF819F 100%);
|
||||
border-radius: 44rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.service-phone {
|
||||
position: absolute;
|
||||
bottom: -114rpx;
|
||||
right: 48rpx;
|
||||
font-size: 30rpx;
|
||||
color: #ED387C;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.tips {
|
||||
font-size: 28rpx;
|
||||
color: #000;
|
||||
span{
|
||||
color: #C80D00;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.item-wrap {
|
||||
font-size: 26rpx;
|
||||
font-style: italic;
|
||||
color: #010101;
|
||||
font-weight: bold;
|
||||
margin-bottom: 54rpx;
|
||||
padding-left: 227rpx;
|
||||
|
||||
.text span {
|
||||
color: #C80D00;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.canvas {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.distribution-posters {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.distribution-posters swiper {
|
||||
width: 100%;
|
||||
height: 1000rpx;
|
||||
position: relative;
|
||||
margin-top: 40rpx;
|
||||
}
|
||||
|
||||
.distribution-posters .slide-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0 auto;
|
||||
border-radius: 15rpx;
|
||||
}
|
||||
|
||||
.distribution-posters .slide-image.active {
|
||||
transform: none;
|
||||
transition: all 0.2s ease-in 0s;
|
||||
}
|
||||
|
||||
.distribution-posters .slide-image.quiet {
|
||||
transform: scale(0.8333333);
|
||||
transition: all 0.2s ease-in 0s;
|
||||
}
|
||||
|
||||
.distribution-posters .keep {
|
||||
font-size: 30rpx;
|
||||
color: #fff;
|
||||
width: 600rpx;
|
||||
height: 80rpx;
|
||||
border-radius: 50rpx;
|
||||
text-align: center;
|
||||
line-height: 80rpx;
|
||||
margin: 38rpx auto;
|
||||
}
|
||||
|
||||
.distribution-posters .preserve {
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
margin-top: 38rpx;
|
||||
}
|
||||
|
||||
.distribution-posters .preserve .line {
|
||||
width: 100rpx;
|
||||
height: 1px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.distribution-posters .preserve .tip {
|
||||
margin: 0 30rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.1 MiB |
Loading…
Reference in New Issue