Commit 0882f1c3 authored by 王勇霞's avatar 王勇霞

feat: 黑名单&新人礼包

parent 66be11b1
......@@ -20,6 +20,7 @@ export default [
"message": "报错了~",
"code": null,
"data": {
virtualProjectId: 'p9ec985d9',
shareInfo: JSON.stringify({
"title": "万亿体验金狂欢节",
"content": "快来助我一臂之力,一起领百万理财体验金~",
......
This diff is collapsed.
......@@ -5,6 +5,19 @@ const API = generateAPI({
getRule: 'projectRule.query',
/** 获取前端配置项 */
getFrontVariable: 'coop_frontVariable.query',
// 首页
index: "real/index.do",
// 报名
signIn: "real/signIn.do",
// 领取新手礼包
receiveNewGift: "real/receiveNewGift.do",
// =============
// getShareInfo: '/wechatShare/getShareInfo/v2',
getShareInfo: '/wechatMiniApp/ticket/info',
......@@ -48,8 +61,7 @@ const API = generateAPI({
},
},
// 首页
index: "home/index.do",
// 首页-产品参数更新
coop_codeUpdate: {
uri: "home/coop_codeUpdate.do",
......
src/assets/PrizePanel/bg.png

25.1 KB | W: | H:

src/assets/PrizePanel/bg.png

274 KB | W: | H:

src/assets/PrizePanel/bg.png
src/assets/PrizePanel/bg.png
src/assets/PrizePanel/bg.png
src/assets/PrizePanel/bg.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/PrizePanel/btn.png

9.52 KB | W: | H:

src/assets/PrizePanel/btn.png

21.4 KB | W: | H:

src/assets/PrizePanel/btn.png
src/assets/PrizePanel/btn.png
src/assets/PrizePanel/btn.png
src/assets/PrizePanel/btn.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -9,28 +9,19 @@
.bg {
position: absolute;
left: 82px;
top: 348px;
width: 585px;
height: 671px;
left: 101px;
top: 402px;
width: 539px;
height: 720px;
.webpBg("PrizePanel/bg.png");
}
.bg2 {
position: absolute;
left: 82px;
top: 348px;
width: 585px;
height: 671px;
.webpBg("PrizePanel/bg2.png");
}
.btn {
position: absolute;
left: 120px;
top: 811px;
width: 510px;
height: 138px;
left: 157px;
top: 985px;
width: 426px;
height: 86px;
.webpBg("PrizePanel/btn.png");
}
......@@ -39,31 +30,31 @@
background-color: white;
position: absolute;
left: 265px;
top: 494px;
top: 689px;
width: 220px;
height: 220px;
}
.prizeName {
font-size: 28px;
color: rgb(1, 1, 1);
font-size: 25px;
color: #7d7d7d;
text-align: center;
position: absolute;
left: 100px;
width: 550px;
top: 740px;
top: 928px;
.lineClamp1();
}
.tips {
width: 100%;
font-size: 24px;
color: rgba(1, 1, 1, 0.6);
line-height: 4.284;
font-size: 17px;
color: #91794d;
line-height: 17px;
text-align: center;
position: absolute;
left: 0;
top: 920px;
top: 1089px;
text-align: center;
}
......
......@@ -23,10 +23,10 @@ export class PrizePanel extends Component<any, any> {
}
clickBtn = _throttle(() => {
const {type} = this.props;
const { type } = this.props;
if(type == 'red') {
PageCtrl.changePage(NewRecordPage, {tab: 2})
if (type == 'red') {
PageCtrl.changePage(NewRecordPage, { tab: 2 })
}
ModalCtrl.closeModal();
......@@ -34,15 +34,15 @@ export class PrizePanel extends Component<any, any> {
render() {
const {optionImg, optionName, type} = this.props;
const { optionImg, optionName, type } = this.props;
return <div className="PrizePanel modal_center">
<div className="bg2"/>
<img className="img" src={optionImg}/>
<div className="bg" />
<img className="img" src={optionImg} />
<div className="prizeName">{optionName}</div>
<Button className={`btn md${this.BTN_MD[type]}`} onClick={this.clickBtn}/>
<Button className={`btn`} onClick={this.clickBtn} />
{type != 'red' && <div className="tips">奖品可在【首页】-【我的奖品】中查看</div>}
<Button className="close" onClick={this.clickClose}/>
<Button className="close" onClick={this.clickClose} />
</div>
}
......
'use strict';
import React from 'react';
import { observer } from 'mobx-react';
import './index.less';
import store from '../../store/store';
import { Button } from '@grace/ui';
import { _asyncThrottle } from "../../utils/utils";
import { ModalCtrl } from "@/core/ctrls/ModalCtrl";
import { Toast } from '@grace/ui';
@observer
class BlackPop extends React.Component {
constructor(props) {
super(props);
}
async componentDidMount() {
}
handleClose = _asyncThrottle(() => {
window.location.href = `${CFG.domain}/projectx/${store.frontVariable.virtualProjectId}/index.html?appID=${CFG.appID}&channel=${CFG.channel}`
})
render() {
return (
<div className="blackPop modal_center">
<span className="bg"></span>
<Button className="know_btn" onClick={this.handleClose} />
{/* <Button className="close" onClick={this.handleClose} /> */}
</div>
);
}
}
export default BlackPop;
@import "../../res.less";
.blackPop {
width: 750px;
height: 1624px;
left: 0px;
top: 0px;
position: absolute;
.bg {
left: 100px;
top: 588px;
width: 539px;
height: 310px;
position: absolute;
.sparkBg("blackPop/bg.png");
}
.know_btn {
position: absolute;
left: 159px;
top: 768px;
width: 426px;
height: 86px;
.sparkBg("blackPop/know_btn.png");
}
.close {
left: 346px;
top: 986px;
width: 58px;
height: 58px;
position: absolute;
.sparkBg("common/close.png");
}
}
'use strict';
import React from 'react';
import { observer } from 'mobx-react';
import './index.less';
import { Button } from '@grace/ui';
import { _asyncThrottle } from "../../utils/utils";
import { ModalCtrl } from "@/core/ctrls/ModalCtrl";
import { Toast } from '@grace/ui';
import SetupSuccessPop from "../setupSuccessPop";
import API from '@/api';
@observer
class SetupPop extends React.Component {
constructor(props) {
super(props);
}
async componentDidMount() {
}
handleSetup = _asyncThrottle(async () => {
try {
await API.signIn()
Toast.show('报名成功');
ModalCtrl.closeModal();
ModalCtrl.showModal(SetupSuccessPop, {});
} catch (error) {
Toast.show(error.message || '报名失败');
}
})
// handleClose = _asyncThrottle(() => {
// ModalCtrl.closeModal();
// })
render() {
return (
<div className="setupPop modal_center">
<span className="bg"></span>
<Button className="know_btn" onClick={this.handleSetup} />
{/* <Button className="close" onClick={this.handleClose} /> */}
</div>
);
}
}
export default SetupPop;
@import "../../res.less";
.setupPop {
width: 750px;
height: 1624px;
left: 0px;
top: 0px;
position: absolute;
.bg {
left: 100px;
top: 588px;
width: 539px;
height: 310px;
position: absolute;
.sparkBg("setupPop/bg.png");
}
.know_btn {
position: absolute;
left: 159px;
top: 768px;
width: 426px;
height: 86px;
.sparkBg("setupPop/know_btn.png");
}
.close {
left: 346px;
top: 986px;
width: 58px;
height: 58px;
position: absolute;
.sparkBg("common/close.png");
}
}
'use strict';
import React from 'react';
import { observer } from 'mobx-react';
import { CircleTurntable } from "@spark/circle-turntable";
import './index.less';
import { Button } from '@grace/ui';
import { _asyncThrottle } from "../../utils/utils";
import { ModalCtrl } from "@/core/ctrls/ModalCtrl";
import store from "@/store/store";
import API from "@/api";
import { NoPrizePanel } from "@/panels/NoPrizePanel/NoPrizePanel.tsx";
import { PrizePanel } from "@/panels/PrizePanel/PrizePanel.tsx";
import { waitTime } from "@/utils/utils";
@observer
class SetupSuccessPop extends React.Component {
turntableRef = null; // 大转盘
btnStarting = false; // 转盘是否启动
drawResultInfo = {};
constructor(props) {
super(props);
}
async componentDidMount() {
}
onStop = async() => {
this.btnStarting = false;
store.updateIndex();
if (this.drawResultInfo.prizeId == "thanks") {
ModalCtrl.showModal(NoPrizePanel, {type: 'final_turntable', ...this.drawResultInfo});
} else {
ModalCtrl.showModal(PrizePanel, {type: 'final_turntable', ...this.drawResultInfo});
}
ModalCtrl.closeModal(SetupSuccessPop);
}
// 开始抽奖
drawHandle = _asyncThrottle(async () => {
if (this.btnStarting) return false;
this.btnStarting = true;
const { success, data } = await API.receiveNewGift();
if (!success) {
this.btnStarting = false;
return;
}
this.drawResultInfo = data;
this.turntableRef.launch();
const index = store.indexData?.giftPop?.actPrizeVO?.findIndex((item) => item.prizeId === this.drawResultInfo.prizeId);
this.turntableRef.braking(index);
});
handleClose = _asyncThrottle(() => {
ModalCtrl.closeModal();
})
render() {
const { giftPop } = store.indexData || {};
return (
<div className="setupSuccessPop modal_center">
<span className="bg"></span>
<div className='turnTable_box'>
<CircleTurntable
className="tt_box"
// @ts-ignore
ref={(ref) => (this.turntableRef = ref)}
options={giftPop?.actPrizeVO || []}
angleOffset={180 / 6 + 10} // 角度偏移量
radian={78} // 奖项半径
launchDuration={1000} // 启动时间
// 大转盘背景
renderBackground={<div className="turntable_bg"></div>}
// 大转盘指针
renderStartButton={<div className="ttBtn"/>}
// 渲染奖品信息
renderOption={(option) => {
return <div className="prize_item">
<div className="prize_name">{option.prizeName}</div>
<img className="prize_img" src={option.prizeImg} alt=""/>
</div>;
}}
didStop={this.onStop}
/>
</div>
<Button className="know_btn" onClick={this.drawHandle}/>
<Button className="close" onClick={this.handleClose} />
</div>
);
}
}
export default SetupSuccessPop;
@import "../../res.less";
.setupSuccessPop {
width: 750px;
height: 1624px;
left: 0px;
top: 0px;
position: absolute;
.bg {
left: 66px;
top: 360px;
width: 619px;
height: 903px;
position: absolute;
.sparkBg("setupSuccessPop/bg.png");
}
.turnTable_box {
width: 540px;
height: 540px;
position: absolute;
left: 110px;
top: 552px;
.tt_box {
width: 540px;
height: 540px;
left: 0;
top: 0;
position: absolute;
}
.turntable_bg {
width: 540px;
height: 540px;
left: 0;
top: 0;
position: absolute;
.sparkBg("ResPage/转盘背景.png");
}
.prize_item {
width: 70px;
height: 70px;
text-align: center;
color: #6a2913;
font-size: 20px;
margin-bottom: 15px;
margin-left: -65px;
transform: rotateZ(-8deg);
.prize_name {
position: absolute;
left: 50%;
transform: translateX(-50%);
top: -40px;
width: 300%;
font-size: 25.75px;
color: #e2a24c;
.lineClamp1();
font-weight: bold;
}
.prize_img {
width: 70px;
height: 70px;
object-fit: contain;
}
}
.ttBtn {
position: absolute;
left: 278px;
top: 895px;
width: 169px;
height: 178px;
.webpBg("ResPage/点击抽奖.png");
}
}
.know_btn {
position: absolute;
left: 133px;
top: 1125px;
width: 488px;
height: 99px;
.sparkBg("setupSuccessPop/draw_btn.png");
}
.close {
left: 346px;
top: 1301px;
width: 58px;
height: 58px;
position: absolute;
.sparkBg("common/close.png");
}
}
......@@ -16,6 +16,8 @@ import { CHANNEL } from '@/AppTools';
import { NewbieModal } from '@/panels/newbieModal/newbieModal';
import RedPackRainModal from '@/panels/redPackRainModal/redPackRainModal';
import { errMessageMap } from '@/utils/errorHandler';
import BlackPop from '@/panels/blackPop/index';
import SetupPop from '@/panels/setupPop/index';
class Store {
......@@ -27,10 +29,13 @@ class Store {
/** 前端开发配置 */
frontVariable: {
// 虚拟盘项目id
virtualProjectId: string,
homeTip: any;
shareInfo: any,
ruleImg?: string,
} = {
virtualProjectId: '',
shareInfo: {
title: "",
desc: "",
......@@ -163,10 +168,7 @@ class Store {
}
homeRoot = null;
/*
leftOpenTime = 0;
leftOpenId = null;
*/
async updateIndex() {
const { success, data, timeStamp } = await API.index();
if (!success) {
......@@ -176,38 +178,48 @@ class Store {
resData.currentTime = timeStamp;
this.indexData = resData;
const { firstMoneyPop, endPop, checkIn, codeList, giftPop, redRainConfig } = resData
const { isBlack, giftPop } = resData
// 计算进度条百分比
if (checkIn?.checkInConfig && checkIn?.totalCheckIn !== undefined) {
this.percent = this.calculateProgressPercent(checkIn.checkInConfig, checkIn.totalCheckIn);
console.log(`当前签到${checkIn.totalCheckIn}天,进度条百分比: ${this.percent.toFixed(1)}%`);
} else {
this.percent = 0;
// 非白名单名单拦截弹窗
if (isBlack) {
ModalCtrl.showModal(BlackPop);
}
// 防止奖品被刷 禁止微信端访问了 这个弹窗不会出了 配置项控制
if (endPop) {
ModalCtrl.showModal(Tipspop);
// 立即报名弹窗
if (giftPop?.pop) {
ModalCtrl.showModal(SetupPop);
}
// 更新产品信息
if (codeList?.length && CFG.channel == CHANNEL.HXLC) {
this.updateFundInfo(codeList)
}
// 计算进度条百分比
// if (checkIn?.checkInConfig && checkIn?.totalCheckIn !== undefined) {
// this.percent = this.calculateProgressPercent(checkIn.checkInConfig, checkIn.totalCheckIn);
// console.log(`当前签到${checkIn.totalCheckIn}天,进度条百分比: ${this.percent.toFixed(1)}%`);
// } else {
// this.percent = 0;
// }
if (giftPop && giftPop?.todayPopFlag) {
ModalCtrl.showModal(NewbieModal, { type: giftPop?.type, actPrizeVO: giftPop?.actPrizeVO })
}
// // 防止奖品被刷 禁止微信端访问了 这个弹窗不会出了 配置项控制
// if (endPop) {
// ModalCtrl.showModal(Tipspop);
// }
if (redRainConfig?.canJoin) {
// 在时间段内,显示红包雨弹窗
ModalCtrl.showModal(RedPackRainModal, { redRainId: redRainConfig?.redRainId });
}
// // 更新产品信息
// if (codeList?.length && CFG.channel == CHANNEL.HXLC) {
// this.updateFundInfo(codeList)
// }
if (firstMoneyPop) {
ModalCtrl.showModal(FirstPop, firstMoneyPop);
}
// if (giftPop && giftPop?.todayPopFlag) {
// ModalCtrl.showModal(NewbieModal, { type: giftPop?.type, actPrizeVO: giftPop?.actPrizeVO })
// }
// if (redRainConfig?.canJoin) {
// // 在时间段内,显示红包雨弹窗
// ModalCtrl.showModal(RedPackRainModal, { redRainId: redRainConfig?.redRainId });
// }
// if (firstMoneyPop) {
// ModalCtrl.showModal(FirstPop, firstMoneyPop);
// }
}
/*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment