Commit 0bb08a9f authored by AU-PRO's avatar AU-PRO

init and beta 1.0 for test, author id AUPRO

parent 9689c8a6
.DS_Store
node_modules/
coverage/
dist/
npm-debug.log
selenium-debug.log
.idea
.builds
.project
.vscode
yarn-error.log
.yarn
.package-lock
yarn.lock
.cache
packages/**/package-lock.json
package-lock=false
registry = http://registry.npm.taobao.org/
\ No newline at end of file
{
"name": "sparkproject-1604506932682",
"version": "1.0.0",
"private": true,
"scripts": {},
"dependencies": {
"axios": "^0.19.2",
"babel-plugin-transform-decorators-legacy": "^1.3.5",
"css-loader": "^3.6.0",
"fyge-tbmini": "^1.3.1",
"postcss-loader": "^3.0.0",
"prettier": "^2.0.5",
"qs": "^6.9.4",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-redux": "^5.0.7",
"redux": "^4.0.0",
"redux-thunk": "^2.3.0",
"spark-design": "^0.2.0",
"spark-utils": "git+ssh://git@gitlab2.dui88.com:spark/spark-utils.git",
"style-loader": "^1.2.1",
"svgaplayerweb": "^2.3.1"
},
"devDependencies": {
"mockjs": "^1.1.0"
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<title>React App</title>
<script>
!(function(e, i) {
var t = e.documentElement,
n = navigator.userAgent.match(/iphone|ipod|ipad/gi),
a = n ? Math.min(i.devicePixelRatio, 3) : 1,
m = 'orientationchange' in window ? 'orientationchange' : 'resize';
t.dataset.dpr = a;
for (
var d, l, c = !1, o = e.getElementsByTagName('meta'), r = 0;
r < o.length;
r++
)
(l = o[r]), 'viewport' == l.name && ((c = !0), (d = l));
if (c)
d.content =
'width=device-width,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0,user-scalable=no';
else {
var o = e.createElement('meta');
(o.name = 'viewport'),
(o.content =
'width=device-width,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0,user-scalable=no'),
t.firstElementChild.appendChild(o);
}
var s = function() {
var e = t.clientWidth;
e / a > 750 && (e = 750 * a),
(window.remScale = e / 750),
(t.style.fontSize = 200 * (e / 750) + 'px');
};
s(), e.addEventListener && i.addEventListener(m, s, !1);
})(document, window);
</script>
<script src="//yun.duiba.com.cn/h5/lib/zepto.min.js"></script>
<script>
function getApp(){
return {
cloud:{},
cloudName:"clientTemplate2C",
requestType:"mock"
}
}
var CFG = CFG || {};
CFG.projectId = location.pathname.split('/')[2] || '1';
function getUrlParam(name) {
const search = window.location.search;
const matched = search
.slice(1)
.match(new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'));
return search.length ? matched && matched[2] : null;
}
CFG.appID = getUrlParam("appID")||1
</script>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
module.exports = {
OUTPUT_DIR: "dist",
SOURCE_DIR: "src",
TEMP_DIR: "./.temp",
ENTRY: "src/app.jsx",
TEMPLATE: "./public/index.html",
MOCK_STATUS: false
};
import React, { Component } from "react";
import ReactDOM from "react-dom";
import "./app.less";
import store from './redux/store' // Redux --> store
import { Provider } from 'react-redux' // Redux --> Provider
import AUPop from "./components/AUPop/AUPop.jsx" // Redux --> AUPop
//此处为spark-cli动态生成
import PageHome from "./pages/PageHome/PageHome.jsx";
class App extends Component {
render() {
return (
<Provider store={store}>
<>
{/* 页面 */}
<PageHome />
{/* 弹窗 */}
<AUPop/>
</>
</Provider>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
* {
margin: 0;
padding: 0;
}
html,
body {
font-size: 24px;
width: 100%;
height: 100%;
}
// .OUT-WRAPPER {
// width: 100%;
// height: 100%;
// display: block;
// position: fixed;
// top: 0;
// bottom: 0;
// left: 0;
// right: 0;
// overflow-y: scroll;
// }
@baseWith: 12.5px;
.loading-mask {
touch-action: none;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.6);
z-index: 2000;
.loading-box{
position: absolute;
width: 100%;
top: calc(50% - 50px);
.loading-text{
text-align: center;
margin-top: 30px;
font-size: 28px;
color: #eee;
}
.loading-dot {
position: relative;
width: @baseWith * 5;
height: @baseWith * 5;
margin: 0 auto;
transform: rotate(165deg);
&::after,
&::before{
content: '';
position: absolute;
top: 50%;
left: 50%;
display: block;
width: @baseWith;
height: @baseWith;
border-radius: @baseWith / 2;
transform: translate(-50%, -50%);
}
&::before {
animation: before 2s infinite;
}
&::after {
animation: after 2s infinite;
}
}
}
}
@keyframes before {
0% {
width: @baseWith;
box-shadow: @baseWith * 2 -@baseWith rgba(225, 20, 98, 0.75), -@baseWith * 2 @baseWith rgba(111, 202, 220, 0.75);
}
35% {
width: @baseWith * 5;
box-shadow: 0 -@baseWith rgba(225, 20, 98, 0.75), 0 @baseWith rgba(111, 202, 220, 0.75);
}
70% {
width: @baseWith;
box-shadow: -@baseWith * 2 -@baseWith rgba(225, 20, 98, 0.75), @baseWith * 2 @baseWith rgba(111, 202, 220, 0.75);
}
100% {
box-shadow: @baseWith * 2 -@baseWith rgba(225, 20, 98, 0.75), -@baseWith * 2 @baseWith rgba(111, 202, 220, 0.75);
}
}
@keyframes after {
0% {
height: @baseWith;
box-shadow: @baseWith @baseWith * 2 rgba(61, 184, 143, 0.75), -@baseWith -@baseWith * 2 rgba(233, 169, 32, 0.75);
}
35% {
height: @baseWith * 5;
box-shadow: @baseWith 0 rgba(61, 184, 143, 0.75), -@baseWith 0 rgba(233, 169, 32, 0.75);
}
70% {
height: @baseWith;
box-shadow: @baseWith -@baseWith * 2 rgba(61, 184, 143, 0.75), -@baseWith @baseWith * 2 rgba(233, 169, 32, 0.75);
}
100% {
box-shadow: @baseWith @baseWith * 2 rgba(61, 184, 143, 0.75), -@baseWith -@baseWith * 2 rgba(233, 169, 32, 0.75);
}
}
#toast_container * {
box-sizing: border-box;
}
.toast-list {
box-sizing: border-box;
position: fixed;
top: 50%;
left: 50%;
z-index: 2001;
line-height: 1.5;
text-align: center;
transform: translate(-50%, -50%);
}
.toast-message {
opacity: 1;
margin-bottom: 10px;
font-size: 0;
transition: height 0.3s, opacity 0.3s, transform 0.3s;
}
.toast-content {
display: inline-block;
overflow: hidden;
min-width: 460px;
padding: 12px 22px;
background: rgba(0, 0, 10, 0.75);
box-shadow: 1px 2px 5px 1px rgba(0, 0, 0, 0.2);
border-radius: 40px;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
color: #fff;
font-size: 24px;
text-align: center;
line-height: 1.5;
}
.toast-enter {
height: 0;
}
.toast-enter-active {
opacity: 1;
}
.toast-enter-done {
opacity: 1;
}
.toast-exit-active {
transform: translateY(-10px);
}
.btn_heartbeats {
transform-origin: center center;
animation: heartbeats 0.775s infinite;
}
@keyframes heartbeats {
0% {
transform: scale(1, 1);
}
25% {
transform: scale(0.94, 0.94);
}
50% {
transform: scale(1.02, 1.02);
}
62.5% {
transform: scale(0.98, 0.98);
}
75% {
transform: scale(1.02, 1.02);
}
87.5% {
transform: scale(0.99, 0.99);
}
100%{
transform: scale(1, 1);
}
}
\ No newline at end of file
import React, { Component } from 'react';
import SvgaShine from '../pop/SvgaShine/SvgaShine.jsx' // svga - components
import popMap from './popMap.js'
// 引入 connect
import { AUConnect, AUShowPop } from '../../redux/auConnect';
import './AUPop.less'
class AUPop extends Component {
constructor (props) {
super(props)
this.state = this.state || {
popArr: [],
closeFlag: false
}
this.auPopRef = React.createRef()
}
static getDerivedStateFromProps(nextProprs, preState) {
return {
popArr: nextProprs.popState.popArr
}
}
closePop = (index) => {
if (this.state.popArr.length == 1) {
if (this.auPopRef.current) {
this.auPopRef.current.style.transition = `opacity 350ms`
this.auPopRef.current.style.opacity = '0'
this.setState({closeFlag: true})
setTimeout(() => {
this.props.showPop({type: 0})
this.setState({closeFlag: false})
}, 400);
} else {
this.props.showPop({type: 0})
this.setState({closeFlag: false})
}
}
else {
console.log(this.state.popArr)
this.setState({closeFlag: true})
setTimeout(() => {
this.props.showPop({type: 0})
this.setState({closeFlag: false})
}, 400);
}
}
render() {
const { popArr, closeFlag } = this.state
let Pop = []
popArr.forEach((item, index) => {
const { showPop, popData, fn, ctx } = item
let PItem = popMap.get(showPop)
Pop.push(
// <SvgaShine show={showPop === 'PopLightCard' ? true : false}/>
<div className={showPop === 'PopLightCard' ? 'compop_content comPop_zoom_from0' : 'compop_content comPop_zoom'}>
<PItem onClose={this.closePop} data={popData} fn={fn} ctx={ctx} type='spot'/>
</div>
)
})
const Com = (popArr.length && popArr[0].showPop) ? (
<div className='compop_back' ref={this.auPopRef}>
<div className='compop_mask'></div>
{/* 关闭-禁止点击 */}
{ closeFlag ? <div className='compop_transparent'></div> : null }
{Pop.map((It, index) => {
return (
<React.Fragment key={index}>
<div className={(index !== Pop.length - 1) ? 'Fragment-wrapper Fragment-small-opacity' : 'Fragment-wrapper'}>
{(index !== Pop.length - 1) ? <div className="Fragment-wrapper-mask"></div> : null }
{It}
</div>
</React.Fragment>)
})}
</div>
) : null
return (
Com
);
}
}
// 到处被 connect 包装的组件,共享 state 的状态
export default AUConnect(AUPop)
\ No newline at end of file
.compop_back {
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 99;
touch-action: none;
.compop_mask {
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, .7);
position: absolute;
top: 0;
left: 0;
z-index: -1;
touch-action: none;
}
.compop_transparent {
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0);
position: absolute;
top: 0;
left: 0;
z-index: 9;
touch-action: none;
}
}
.pop_mask {
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 100;
position: fixed;
background: transparent;
}
.compop_content {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
right: 0;
left: 0;
z-index: 2;
}
.comPop_close_btn {
position: absolute;
display: block;
z-index: 1;
width: 102px;
height: 102px;
left: calc(49% - (102px / 2));
bottom: -160px;
z-index: 3;
}
.comPop_back_light {
position: absolute;
display: block;
z-index: -1;
width: 883px;
height: 883px;
left: calc(50% - (883px / 2));
top: -200px;
bottom: -144px;
}
.comPop_back_head {
position: absolute;
display: block;
z-index: 2;
width: 567px;
height: 140px;
left: 5px;
top: 20px;
animation: floatAni 3000ms infinite linear;
transform-origin: center center center;
position: relative;
}
@keyframes floatAni {
0% {
transform: skewX(-1deg) skewY(0.8deg) scaleX(1.05) translateY(-30px) rotate(-3deg);
}
25% {
transform: skewX(-0.5deg) skewY(0.3deg) scaleX(1.02) translateY(-20px) rotate(-2deg);
}
50% {
transform: skewX(0deg) skewY(0deg) scaleX(1) translateY(-15px) rotate(-2deg);
}
75% {
transform: skewX(-0.5deg) skewY(0.3deg) scaleX(1.02) translateY(-20px) rotate(-2deg);
}
100% {
transform: skewX(-1deg) skewY(0.8deg) scaleX(1.05) translateY(-30px) rotate(-3deg);
}
}
.comPop_zoom {
transform-origin: center center;
animation: zoom 0.24s linear 0s 1;
}
.comPop_zoom_from0 {
transform-origin: center center;
opacity: 0;
transform: scale(0);
animation: zoomfrom0 0.22s linear 0.44s 1 forwards;
}
.Fragment-wrapper-mask {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: transparent;
z-index: 99;
touch-action: none;
}
.Fragment-small-opacity {
transition: transform 300ms ease-in, opacity 200ms linear !important;
transform: scale(0.5) !important;
opacity: 0 !important;
}
.Fragment-wrapper {
opacity: 1;
transition: transform 200ms ease-out, opacity 200ms linear;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
transform: scale(1);
transform-origin: center center;
}
@keyframes zoom {
0% {
transform: scale(0.75);
}
50% {
transform: scale(1.08)
}
100% {
transform: scale(1)
}
}
@keyframes zoomfrom0 {
0% {
opacity: 0;
transform: scale(0.2);
}
80% {
opacity: 1;
transform: scale(1.12)
}
100% {
opacity: 1;
transform: scale(1)
}
}
.comPop_fadeout {
opacity: 0;
transition: opacity 300ms linear;
}
\ No newline at end of file
import PopGetPiece from '../pop/PopGetPiece/PopGetPiece.jsx'
import PopInfiniteA from '../pop/PopInfiniteA/PopInfiniteA.jsx'
import PopRegret from '../pop/PopRegret/PopRegret.jsx'
import PopRotate from '../pop/PopRotate/PopRotate.jsx'
import PopInput from '../pop/PopInput/PopInput.jsx'
import PopDefault from '../pop/PopDefault/PopDefault.jsx'
import PopRule from '../pop/PopRule/PopRule.jsx'
import PopLightCard from '../pop/PopLightCard/PopLightCard.jsx'
let popMap = new Map()
popMap.set("PopRule", PopRule)
popMap.set("PopGetPiece", PopGetPiece)
popMap.set("PopRegret", PopRegret)
popMap.set("PopInfiniteA", PopInfiniteA)
popMap.set("PopRotate", PopRotate)
popMap.set("PopDefault", PopDefault)
popMap.set("PopInput", PopInput)
popMap.set("PopLightCard", PopLightCard)
export default popMap
\ No newline at end of file
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
import './PopDefault.less';
class PopDefault extends Component {
constructor(props) {
super(props);
this.state = this.state || {
resList: resList
};
}
doCallBack = () => {
this.props.fn()
}
render() {
const { resList } = this.state
return (
<div className="PopDefault">
<img className='comPop_close_btn' src={resList['95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'].url} onClick={this.props.onClose} alt=""/>
<div className="PopDefault_callback_btn" onClick={this.doCallBack} > DO CALLBACK FN() </div>
<span className="PopDefault_describe">
SIMPLE DEFAULT POP
</span>
</div>
);
}
}
export default PopDefault;
.PopDefault {
width: 583px;
height: 735px;
opacity: 1;
left: calc(51% - (583px / 2));
top: calc(44% - (735px / 2));
position: absolute;
background-color: #62a1bf;
display: flex;
flex-direction: column;
.PopDefault_callback_btn {
width: 360px;
height: 84px;
left: 154px;
top: 613px;
border-radius: 16px;
background-color: rgb(230, 230, 230);
text-align: center;
line-height: 84px;
align-self: center;
margin-top: 560px;
color: #808080;
font-size: 32px;
font-weight: 900;
}
.PopDefault_describe {
width: 100%;
height: 64px;
line-height: 40px;
opacity: 1;
left: 0;
top: 180px;
position: absolute;
font-size: 40px;
text-align: center;
font-weight: 700;
color: #d8eef8;
}
}
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
// Redux
import store from '../../../redux/store';
import * as actions from '../../../redux/action';
import './PopGetPiece.less';
import { debounce } from '../../../utils/debounce';
class PopGetPiece extends Component {
constructor(props) {
super(props);
this.state = this.state || {
resList: resList,
name: this.props.data.name,
icon: this.props.data.icon,
signCardFragment: this.props.data.signCardFragment
};
}
goExchange = () => {
this.props.ctx.toExchange()
}
render() {
const { resList, signCardFragment, name, icon } = this.state
return (
<div className="popgetpiece">
<img className='comPop_close_btn' src={resList['95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'].url} onClick={this.props.onClose} alt=""/>
<img className="c_popgetpiece_bg" src={resList['2c82c3ef-c361-4b9f-a059-797a15c0a0d7'].url} />
<img className="popgetpiece_titleicon" src={resList['53f94099-62dc-4764-9483-fc96ab67a2a4'].url} />
<span className="popgetpiece_describe">3张签到卡碎片可兑换1张签到卡</span>
<div className="popgetpiece_describe popgetpiece_describe_02">
<span>当前有{signCardFragment}张签到卡碎片</span>
{signCardFragment >= 3 ? <span onClick={ debounce(this.goExchange, 300) } className="popgetpiece_describe_goExchange">去兑换</span> : null}
</div>
<img className="popgetpiece_icon" src={icon} />
<span className="popgetpiece_title">抽中{name}</span>
<img onClick={this.props.onClose} className="popgetpiece_iknow_btn dl_md7" src={resList['a0cb5042-c04d-4031-bc11-0b4566aa7184'].url} />
</div>
);
}
}
export default PopGetPiece;
.popgetpiece {
width: 583px;
height: 735px;
opacity: 1;
left: calc(51% - (583px / 2));
top: calc(44% - (735px / 2));
position: absolute;
.c_popgetpiece_bg {
width: 576px;
height: 726px;
opacity: 1;
left: 7px;
top: 9px;
position: absolute;
}
.popgetpiece_titleicon {
width: 162px;
height: 49px;
opacity: 1;
left: 208px;
top: 234px;
position: absolute;
}
.popgetpiece_bgback {
width: 567px;
height: 140px;
opacity: 1;
position: absolute;
}
.popgetpiece_describe {
width: 100%;
height: 56px;
line-height: 28px;
opacity: 1;
left: 0px;
text-align: center;
top: 536px;
position: absolute;
font-size: 24px;
color: rgba(84, 128, 183, 1);
text-align: center;
}
.popgetpiece_describe_02 {
top: 566px;
}
.popgetpiece_describe_goExchange {
color: #e87929;
text-decoration: underline;
}
.popgetpiece_icon {
width: 164px;
height: 164px;
opacity: 1;
left: 207px;
top: 356px;
position: absolute;
}
.popgetpiece_title {
width: 100%;
height: 32px;
opacity: 1;
left: 0;
top: 305px;
position: absolute;
font-size: 32px;
text-align: center;
font-weight: 500;
line-height: 32px;
color: rgba(65, 139, 232, 1);
}
.popgetpiece_iknow_btn {
width: 270px;
height: 84px;
opacity: 1;
left: 154px;
top: 613px;
position: absolute;
}
}
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
// Redux
import store from '../../../redux/store';
import * as actions from '../../../redux/action';
import './PopInfiniteA.less';
import { debounce } from '../../../utils/debounce';
class PopInfiniteA extends Component {
constructor(props) {
super(props);
this.state = this.state || {
resList: resList,
cardNum: sum(0, 1000)
};
}
openNewPop = () => {
store.dispatch(actions.showPop({type: 'PopInfiniteA', data: {text: '未抽到签到卡碎片'}, cover: true, ctx: this}))
}
render() {
const { resList, cardNum } = this.state
return (
<div className="popsignconfirm">
<img className='comPop_close_btn' src={resList['95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'].url} onClick={this.props.onClose} alt=""/>
<span className="rm_describe rm_describe01">THIS'S DIFFRENCE POP</span>
<span className="rm_describe rm_describe02">POP NUMBENR IS </span>
<span className="rm_describe rm_describe03 popsignconfirm_describe_cardNum">{cardNum}</span>
<span onClick={ debounce(this.openNewPop, 200) } className="popsignconfirm_get_btn"> OPEN NEW POP </span>
</div>
);
}
}
function sum (m, n) {
var num = Math.floor(Math.random() * (m - n) + n)
console.log('sum number', num)
return num
}
export default PopInfiniteA;
.popsignconfirm {
width: 583px;
height: 735px;
opacity: 1;
left: calc(51% - (583px / 2));
top: calc(44% - (735px / 2));
position: absolute;
background-color: #62a1bf;
display: flex;
flex-direction: column;
.popsignconfirm_get_btn {
width: 360px;
height: 84px;
left: 154px;
top: 613px;
border-radius: 16px;
background-color: rgb(230, 230, 230);
text-align: center;
line-height: 84px;
align-self: center;
margin-top: 560px;
color: #808080;
font-size: 32px;
font-weight: 900;
}
.rm_describe {
width: 100%;
height: 64px;
line-height: 40px;
opacity: 1;
left: 0;
position: absolute;
font-size: 40px;
text-align: center;
font-weight: 700;
color: #d8eef8;
}
.rm_describe01 {
top: 120px;
}
.rm_describe02 {
top: 180px;
}
.rm_describe03 {
top: 240px;
}
.popsignconfirm_describe_cardNum {
color: #cf5010;
font-size: 48px;
line-height: 88px;
}
}
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
import { debounce } from '../../../utils/debounce';
import { Loading, Toast } from "spark-design"
import './PopInput.less';
class PopInput extends Component {
constructor(props) {
super(props);
this.state = this.state || {
resList: resList,
phone: ''
};
}
phoneInputChange = (event) => {
if (event.target.value.length > 11) return
else if ((event.target.value.length > this.state.phone.length) &&
!Number(event.target.value[event.target.value.length - 1]) &&
!(event.target.value[event.target.value.length - 1] === '0') ) return
this.setState({
phone: event.target.value
})
}
confirmPhoneCode = () => {
if (this.state.phone.length !== 11 || this.state.phone[0] != '1') {
Toast('请输入正确的手机号')
return
}
this.props.ctx.parentConsoleFunction(this.state.phone)
this.props.onClose()
}
render() {
const { resList, phone } = this.state
return (
<div className="popinput">
<img className='comPop_close_btn' src={resList['95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'].url} onClick={this.props.onClose} alt=""/>
<div onClick={ debounce(this.confirmPhoneCode, 300) } className="popinput_confirm_btn" > Input Confirm </div>
<div className="popinput_input_contnet">
<input
value={phone}
type='tel'
maxLength='11'
placeholder='INPUT 11 PHOMENUMBER'
onChange={(event) => {this.phoneInputChange(event)}}
className='popinput_input' />
</div>
<div className="popinput_subtitle">INPUT POP</div>
</div>
);
}
}
export default PopInput;
.popinput {
width: 576px;
height: 672px;
opacity: 1;
left: calc(51% - (576px / 2));
top: calc(44% - (672px / 2));
position: absolute;
background-color: #62a1bf;
display: flex;
flex-direction: column;
.popinput_confirm_btn {
width: 360px;
height: 84px;
left: 154px;
border-radius: 16px;
background-color: rgb(230, 230, 230);
text-align: center;
line-height: 84px;
align-self: center;
margin-top: 480px;
color: #808080;
font-size: 32px;
font-weight: 900;
}
.popinput_input_contnet {
width: 415px;
height: 80px;
opacity: 1;
left: 75px;
top: 300px;
position: absolute;
background-color: #fff;
border-radius: 10px;
.popinput_input_placeholder {
width: 314px;
height: 30px;
opacity: 1;
left: 21px;
top: 24px;
position: absolute;
font-size: 37.40584px;
overflow: hidden;
color: rgba(210, 213, 216, 1);
}
.popinput_input {
width: 380px;
height: 60px;
overflow: hidden;
text-align: left;
line-height: 60px;
margin: 10px 16px;
font-size: 32px;
font-weight: 500;
outline: none;
border: none;
}
}
.popinput_subtitle {
width: 100%;
height: 64px;
line-height: 40px;
opacity: 1;
left: 0;
top: 180px;
position: absolute;
font-size: 40px;
text-align: center;
font-weight: 700;
color: #d8eef8;
}
}
input::-webkit-input-placeholder {
color:#d2d5d8;
font-size: 30px;
font-weight: 400;
line-height: 60px;
opacity: 1;
}
input:-moz-placeholder {
color:#d2d5d8;
font-size: 30px;
font-weight: 400;
line-height: 60px;
opacity: 1;
}
input::-moz-placeholder {
color:#d2d5d8;
font-size: 30px;
font-weight: 400;
line-height: 60px;
opacity: 1;
}
input:-ms-input-placeholder {
color:#d2d5d8;
font-size: 30px;
font-weight: 400;
line-height: 60px;
opacity: 1;
}
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
import { debounce } from '../../../utils/debounce'
import { Random } from 'mockjs';
import { spotData } from './spotData'
import SvgaBackLight from '../SvgaBackLight/SvgaBackLight.jsx'
import './PopLightCard.less';
class PopLightCard extends Component {
constructor(props) {
super(props);
this.state = this.state || {
resList: resList,
addSignDays: this.props.data.addSignDays ? this.props.data.addSignDays : 0,
spotName: this.props.data.sindex ? spotData[this.props.data.sindex - 1].spotName : 'SPOT',
cardType: 'a',
detail: this.props.data.sindex ? spotData[this.props.data.sindex - 1].spotDetail : `地标介绍: ${Random.cparagraph(20, 40)}`,
backLightDelay: 360,
showSpotImage: this.props.data.sindex ? spotData[this.props.data.sindex - 1].spotImage : resList['1057e473-9c0a-4923-b943-555eca601782'].url,
canDraw: false
};
this.refA = React.createRef()
this.refB = React.createRef()
}
componentDidMount() {
this.refB.current.className = 'poplight_group poplight_hide'
}
// 换面
turnSide = (type) => {
if (type == 'a') {
this.refA.current.className = 'poplight_group poplight_show'
this.refB.current.className = 'poplight_group poplight_hide'
setTimeout(() => {
this.refA.current.style.zIndex = '1'
this.refB.current.style.zIndex = '-1'
}, 200)
}
if (type == 'b') {
this.refA.current.className = 'poplight_group poplight_hide'
this.refB.current.className = 'poplight_group poplight_show'
setTimeout(() => {
this.refA.current.style.zIndex = '-1'
this.refB.current.style.zIndex = '1'
}, 200)
}
this.setState({ cardType: type, backLightDelay: 100 })
}
gotoRotate = () => {
this.props.ctx.gotoRotateSpot()
}
toShare = () => {
this.props.ctx.shareFunc()
}
render() {
const { resList, spotName, cardType, detail, backLightDelay, showSpotImage, canDraw } = this.state
let detail_ = `
<span>${detail[0]}</span>
<br/>
<br/>
<span style="font-weight: bolder">特色小知识:${detail[1][0]}</span>
<br/>
<span>${detail[1][1]}</span>
`
return (
<div className="poplightcard">
<img className='comPop_close_btn poplightcard_close' src={resList['95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'].url} onClick={this.props.onClose} alt=""/>
<div ref={this.refA} className='poplight_group'>
{cardType == 'a' ? <SvgaBackLight style={{top: '-84px'}} delay={backLightDelay}/> : null }
<div className="poplightcard_content">
<img className="poplightcard_changeSide_btn" onClick={ debounce(this.turnSide.bind(this, 'b'), 300)} src={resList['f799e362-442b-4a1f-a466-e43069ea0af0'].url} alt=""/>
<img className="poplightcard_image" src={showSpotImage} />
</div>
<PopLightHead name={spotName}/>
</div>
<div ref={this.refB} className='poplight_group'>
{cardType == 'b' ? <SvgaBackLight style={{top: '-84px'}} delay={backLightDelay}/> : null }
<div className="poplightcard_content">
<img className="poplightcard_changeSide_btn changeSide_back_btn" onClick={ debounce(this.turnSide.bind(this, 'a'), 300)} src={resList['b46dfde5-2894-439b-985d-f1c180419b3a'].url} alt=""/>
<div className='poplightcard_detail_content'>
<div className="poplightcard_detail_wrapper">
<div className='poplightcard_detail' dangerouslySetInnerHTML={{__html: detail_}}></div>
</div>
</div>
<img className="poplightcard_image" src={showSpotImage} />
</div>
<PopLightHead name={spotName}/>
</div>
<img className="headgroup_goto_turntable" src={resList['e01a55dd-e40f-4f87-a79a-1218f7d5cff0'].url} />
<img className="headgroup_share_btn dl_md11" src={resList['14526a62-17a5-4c81-ac03-3fac4fe26586'].url} />
</div>
);
}
}
function PopLightHead(props) {
return (
<div className="poplightcard_headgroup">
<img className="poplightcard_headback" src={resList['3a8c0bcd-a931-463e-ba2b-e050c6932750'].url} />
<div className="headgroup_name_group">
{/* <img className="headgroup_name_back" src={resList['98ad2dd0-e77f-4590-ac79-90a2fd23fa26'].url} /> */}
<span className="headgroup_name_text">{props.name}</span>
</div>
</div>
)
}
export default PopLightCard;
.poplightcard {
width: 706px;
height: 1159px;
opacity: 1;
left: calc(50% - (706px / 2));
top: calc(42.5% - (1159px / 2));
position: absolute;
.poplight_group {
transition: all 300ms linear;
width: 512px;
height: 720px;
left: 93px;
position: absolute;
top: 197px;
.poplightcard_headgroup {
width: 269px;
height: 132px;
opacity: 1;
left: 122px;
top: -53px;
z-index: 3;
position: absolute;
.poplightcard_headback {
width: 269px;
height: 132px;
opacity: 1;
position: absolute;
}
.headgroup_name_group {
width: 100%;
height: 38px;
opacity: 1;
left: 0;
top: 64px;
position: absolute;
text-align: center;
.headgroup_name_text {
display: inline-block;
padding: 0 10px;
border-radius: 6px;
background: #ed5400;
opacity: 1;
text-align: center;
font-size: 24px;
color: rgba(255, 255, 255, 1);
}
}
}
.poplightcard_content {
width: 512px;
height: 720px;
position: relative;
box-sizing: border-box;
background-color: #3395ff;
border-radius: 24px;
overflow: hidden;
.poplightcard_image {
width: 491px;
height: 700px;
opacity: 1;
left: 10px;
top: 10px;
border-radius: 12px;
overflow: hidden;
position: absolute;
}
.poplightcard_detail_content {
border: 10px solid #3395ff;
box-sizing: content-box;
border-radius: 24px;
width: 491px;
height: 700px;
opacity: 1;
left: 0;
top: 0;
position: absolute;
background-color: rgba(0, 0, 0, .6);
z-index: 3;
.poplightcard_detail_wrapper {
width: 465px;
height: 558px;
position: absolute;
left: 17px;
top: 80px;
overflow-y: scroll;
.poplightcard_detail {
font-size: 30px;
color:#fff;
line-height: 1.42em;
}
}
}
}
}
.poplight_show {
opacity: 1;
transform: scale(1);
// z-index: 1;
}
.poplight_hide {
opacity: 0;
transform: scale(0);
// z-index: -1;
}
.poplightcard_changeSide_btn {
width: 93px;
height: 23px;
position: absolute;
bottom: 20px;
right: 26px;
z-index: 4;
display: block;
}
.changeSide_back_btn {
width: 68px;
height: 23px;
}
.headgroup_goto_turntable {
width: 309px;
height: 96px;
opacity: 1;
left: 195px;
top: 944px;
position: absolute;
}
.headgroup_share_btn {
width: 309px;
height: 95px;
opacity: 1;
left: 195px;
top: 1064px;
position: absolute;
}
}
.poplightcard_close {
bottom: -140px !important;
}
export const spotData = [
{ spotName: '203樱花园', spotImage: '//yun.duiba.com.cn/spark/assets/8a5edc0d0ad96f730750fa92a3690eb15b3c23b9.png',
spotDetail: [
'种植着来自国内外的近30个品种5000余株樱花,是目前东北地区园区面积最大,樱花树最多,品种最全的樱花园。园内种植的樱花以中国樱、日本早樱、山樱等为主,还有朝鲜黄樱、美国绿樱等珍稀品种。',
['大连女子骑警大队', '大连女子骑警大队成立于1994年12月,是世界第一支成编制的女子骑警队。']
]
},
{ spotName: '黄海渤海交界线', spotImage: '//yun.duiba.com.cn/spark/assets/371f3fd03f2d8aff5dda4e5e6b00f7a8d4e9516b.png',
spotDetail: [
'老铁山头入海深,黄海渤海自此分。西去急流如云涌,南来薄雾应风生”。此诗即表述老铁山的黄海和渤海自然分界的壮观景象。老铁山角位于辽东半岛的尖端,延伸至黄海和渤海之中,形成“泾渭分明”的自然分界。黄海水是深蓝色,而渤海水显得浑浊,略呈微黄色。是因为海底地沟形成的自然现象。',
['大连有轨电车', '大连有轨电车共有2条线路,为大连公交201路和大连公交202路。']
]
},
{ spotName: '旅顺白玉山', spotImage: '//yun.duiba.com.cn/spark/assets/8438621bb2f335c5579c50d296dcfd14ab1bb369.png',
spotDetail: [
'白玉山原名西官山。清光绪六年,李鸿章陪同的醇亲王视察旅顺口时说,既有黄金,当有白玉。从此西官山更名白玉山。白玉山在清代曾是军事设施重地。光绪九年,清政府在山之东北麓建筑了十六间房的军械总库。1995年被命名为大连市爱国主义教育基地。',
['噶实', '大连话中表示舍得的意思。']
]
},
{ spotName: '星海湾跨海大桥', spotImage: '//yun.duiba.com.cn/spark/assets/1c97f7ba32f6104d4b83666619bb4af6d429f78b.png',
spotDetail: [
'星海湾大桥西起甘井子区环涛路仁水街交叉口,上跨黄海,东至西岗区滨海西路上的金沙滩东侧。星海湾大桥是中国国内首座海上建造锚碇的大跨度双层悬索桥,现已成为星海湾一个新的旅游景点以及大连市新的地标式建筑。',
['道鸭子', '由一段普通话接线员与大连话司机之间的爆笑对话引发的网络流行语,原意为道牙。']
]
},
{ spotName: '老虎滩', spotImage: '//yun.duiba.com.cn/spark/assets/c690cfd3b6bc0b8b4237f729835b7542488d4568.png',
spotDetail: [
'大连属季风型大陆性气候,但具有海洋性特点。四季分明,气候温和;夏季温暖无酷暑,冬季虽冷但少严寒,春秋不冷不热、气温适中;空气湿润,降雨集中,季风明显,风力较大。2007年5月8日,大连老虎滩海洋公园经国家旅游局正式批准为国家5A级旅游景区。',
['血受', '血受是大连人最常日用语之一,表示特别过瘾,特别爽,特别好的意思。']
]
},
{ spotName: '棒棰岛', spotImage: '//yun.duiba.com.cn/spark/assets/9b3d337a7b3494ecb07905e1f688a21ae037edeb.png',
spotDetail: [
'棒棰岛名字的来历是因离岸500米远处的海面上有一小岛突兀而立,远远望去,极象农家捣衣服用的一根棒槌,故称棒棰岛。毛主席曾手书的“棒棰岛”,是现惟一见到的涉及大连的毛主席墨宝。',
['小棍宁', '大连话中小姑娘,小女孩的意思。']
]
},
{ spotName: '东港音乐喷泉', spotImage: '//yun.duiba.com.cn/spark/assets/f19b8f1bec68aeffeeb00f0f14837657816cbf72.png',
spotDetail: [
'海之梦音乐喷泉广场是东港商务区乃至大连市的标志性广场、全国第二大音乐喷泉广场。另外喷泉池春、夏、秋季作为喷泉,冬季将作为一个大型的溜冰场,为大连市民在冬季里提供一个大型娱乐、健身的冰雪世界,这种创意是首次在国内运用。',
['大连夏季达沃斯论坛', '2009夏季达沃斯年会在大连举行,会议中新思想、新观点层出不穷,是名副其实的思想盛宴。']
]
},
{ spotName: '劳动公园', spotImage: '//yun.duiba.com.cn/spark/assets/2b8f9010b0131ac2085ab4b04ff45b926a0706ec.png',
spotDetail: [
'劳动公园是大连市中心最大的公园。公园建于1898年,因当时大连很小,公园又位于大连的西郊,故称西公园。1926年,因市区逐渐向西扩展,该园已处于市中心,又易名为中央公园。解放后,政府发动群众义务劳动,对该公园进行整修,并在荷花池畔立了一个碑,上书“劳动创造世界”,所以改称劳动公园。',
['歹街', '位于大连市中山区北斗街40号,是一条网红美食街。']
]
},
{ spotName: '星海广场', spotImage: '//yun.duiba.com.cn/spark/assets/c644500ca610e23f110044222f6e42fffd89c653.png',
spotDetail: [
'星海广场位于中国辽宁省大连市沙河口区,是大连市西南部的露天广场。1993年7月16日,为纪念香港回归,星海湾改造工程启幕,大连市政府利用建筑垃圾进行填海造地工程,规划建设星海广场。也是大连市的标志建筑之一。',
['歹饭', '大连话中的歹饭就是吃饭的意思,一般家里人在吃饭的时候都会喊,歹饭啦,意思就是叫你吃饭了。']
]
},
{ spotName: '金石滩', spotImage: '//yun.duiba.com.cn/spark/assets/4a4554a82f74d2929909ff5bcfa096e19dd6d9c9.png',
spotDetail: [
'金石滩国家旅游度假区为大连市四个对外开放先导区之一,由东部半岛、西部半岛及两个半岛之间的开阔腹地和海水浴场组成。诞生于六亿年前震旦纪的岩石散落在绵延13华里的海岸线上,形态各异,巧夺天工,被世界地质学界称为"天然地质博物馆"、"神力雕塑公园"。',
['鲜溜儿', '大连话中表示鲜美、鲜香的意思。']
]
},
{ spotName: '关向英纪念馆', spotImage: '//yun.duiba.com.cn/spark/assets/0f870d1f8aafe1381ea91187c89509e75ed85ffc.png',
spotDetail: [
'关向应是我国老一辈无产阶级革命家,中国工农红军和八路军的高级指挥员,卓越的政治工作领导者。他曾担任团中央书记,中共中央军事委员会书记,红三军政委,红二方面军政委等。他为中国人民的解放事业呕心沥血,鞠躬尽瘁,建立了不朽的功勋。',
['大连国际马拉松', '大连国际马拉松赛从1987年第1届大连万人国际马拉松赛至今已连续成功举办了32届,是国内历史最悠久的马拉松赛事之一。']
]
},
{ spotName: '冰峪沟', spotImage: '//yun.duiba.com.cn/spark/assets/cbae44e9bbbb790e90c9ee4c31db48d72cec2cdf.png',
spotDetail: [
'冰峪沟山清水秀,峰回溪转,有“北国桂林”之誉。“冰峪”名称的来历,相传唐朝薛仁贵东征时,曾在这里安营扎寨。唐太宗李世民到此抚军,见这里确是“一夫当关,万夫莫开”之地,便赐名“兵御”,又称“冰峪”。目前为跑马场的丁香谷即是古战场的遗址,曾发现大批古代行军锅及铸造兵器。',
['连实德足球俱乐部', '大连实德足球俱乐部,起源于1983年11月成立的大连市足球队,1994年改组为职业化俱乐部,是中国顶级足球联赛传统豪门。']
]
}
]
\ No newline at end of file
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
//import API from '../../api';
import './PopRegret.less';
class PopRegret extends Component {
constructor(props) {
super(props);
this.state = this.state || {
resList: resList,
text: this.props.data.text
};
}
render() {
const { resList, text } = this.state
return (
<div className="popregret">
<img className='comPop_close_btn' src={resList['95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'].url} onClick={this.props.onClose} alt=""/>
<span className="popregret_describe"> REGRET POP </span>
<div onClick={this.props.onClose} className="popregret_iknow_btn" > OK </div>
</div>
);
}
}
export default PopRegret;
.popregret {
width: 576px;
height: 599px;
opacity: 1;
left: calc(51% - (576px / 2));
top: calc(44% - (599px / 2));
position: absolute;
background-color: #62a1bf;
display: flex;
flex-direction: column;
.popregret_iknow_btn {
width: 360px;
height: 84px;
left: 154px;
border-radius: 16px;
background-color: rgb(230, 230, 230);
text-align: center;
line-height: 84px;
align-self: center;
margin-top: 440px;
color: #808080;
font-size: 32px;
font-weight: 900;
}
.popregret_describe {
width: 100%;
height: 64px;
line-height: 40px;
opacity: 1;
left: 0;
top: 180px;
position: absolute;
font-size: 40px;
text-align: center;
font-weight: 700;
color: #d8eef8;
}
}
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
import { debounce } from '../../../utils/debounce.js'
import { getPxToken } from '../../../utils/spark_gettoken'
// Redux
import store from '../../../redux/store';
import * as actions from '../../../redux/action';
import './PopRotate.less';
import { Toast } from 'spark-design';
class PopRotate extends Component {
constructor(props) {
super(props);
this.state = this.state || {
resList: resList,
turnTableList: [],
dataReady: false
};
// 按钮ref
this.startBtn = React.createRef()
// 旋转ref
this.rotateRef = React.createRef()
}
// 旋转角度
rotateIndex = 0
// 旋转次数
rotateTimes = 0
// 旋转 FLAG
rotateFlag = true
// 旋转时间 ms
rotateBaseTime = 2300
componentDidMount() {}
// 旋转角度归零
rotateTurnZero () {
this.rotateReg('end')
}
// 计算旋转角度 并 计算
rotateReg (type, index) {
// 开始旋转
let rotateDeg, time
if (type == 'start') {
this.rotateTimes += 3
rotateDeg = (this.rotateTimes * 360) + index * 45 + 22.5
time = this.rotateBaseTime
}
// 结束旋转
else if (type == 'end') {
// console.log('end', (this.rotateTimes + 1) * 360)
rotateDeg = ++this.rotateTimes * 360
time = 500
}
if (this.rotateRef.current) {
this.rotateRef.current.style.transform = `rotate(${rotateDeg}deg)`
this.rotateRef.current.style.transition = `transform ease-out ${time}ms`
}
}
rotateFlag = false
startDraw = () => {
if (this.rotateFlag) return
this.rotateFlag = true
setTimeout(() => {
this.drawCallback({
success: true,
data: {
prizeId: 'thanks'
}
})
}, 300)
}
drawCallback = (res) => {
const { success, message, data } = res
if (success) {
if (data.prizeId == 'thanks') {
this.rotateIndex = 7
}
// 开始动画
setTimeout(() => {
this.rotateReg('start', this.rotateIndex, this.rotateBaseTime)
}, 300)
// 弹窗 结果弹窗
setTimeout(() => {
console.log(this.rotateIndex, data)
this.showRegret()
this.rotateFlag = false
this.rotateTurnZero()
}, this.rotateBaseTime + 600)
} else { Toast(message) }
}
// 未获奖弹窗
showRegret = () => {
store.dispatch(actions.showPop({type: 'PopRegret', data: {text: '未抽到签到卡碎片'}, cover: true, ctx: this}))
}
// 关闭当前转盘
rotateClose = () => {
if (this.rotateFlag) return
this.props.onClose()
}
render() {
const { resList, type, turnTableList } = this.state
return (
<div className={type === 'spot' ? 'pop_commontt pop_spottt' : 'pop_commontt'}>
<img className='comPop_close_btn poprotate_close' src={resList['95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'].url} onClick={this.rotateClose} alt=""/>
<div className="poprotate_back" ></div>
{/* 旋转部分 */}
<div className="poprotate_rotate" >
<div className='poprotate_rotate-rotate' ref={this.rotateRef}>
<img className='poprotate_rotate-backboard' src={resList['866f0e7b-3bc8-4f9e-a571-758ef348dcef'].url} alt=""/>
<div className='poprotate_rotate-rewards'>
{
turnTableList.map((item, index) => {
return (
<div className={`poprotate_rotate-rewards_item poprotate_rotate-rewards_item_${index}`} key={`poprotate_rotate-rewards-item-${index}`}
style={{transform: `rotate(${-(index + 1) * 45 + 22.5}deg)`}}>
<span className='poprotate_rotate-rewards_item_name'>{item.name}</span>
<img className='poprotate_rotate-rewards_item_img' src={item.icon} mode='aspectFill' />
</div>
)
})
}
</div>
</div>
</div>
{/* 开始按钮 */}
<img ref={this.startBtn} onClick={ debounce(this.startDraw, 150) }
src={resList['dcea884e-1fa1-4546-baf9-5dbe7df1d9ae'].url}
className="poprotate_start"/>
</div>
);
}
}
export default PopRotate;
.pop_commontt {
width: 630px;
height: 906px;
left: calc(50% - (630px / 2));
top: calc(44% - (906px / 2));
position: absolute;
.popcommontt_drawtimes {
width: 100%;
height: 32px;
line-height: 32px;
left: 0;
top: 884px;
position: absolute;
font-size: 24px;
text-align: center;
.popcommontt_drawtimes_span {
color: rgba(255, 255, 255, 1);
}
.popcommontt_drawtimes_y {
color: #ffe400;
font-weight: 500;
}
}
.popcommontt_subtitle {
width: 100%;
height: 36px;
line-height: 36px;
text-align: center;
left: 0;
top: 134px;
position: absolute;
font-size: 24px;
color: rgba(255, 255, 255, 1);
}
.popcommontt_subtitle_02 {
top: 168px;
}
.poprotate_back {
width: 630px;
height: 630px;
top: 222px;
position: absolute;
background-color: #62a1bf;
border-radius: 50%;
}
.poprotate_rotate {
width: 557px;
height: 557px;
left: 37px;
top: 258px;
position: absolute;
transform-origin: center center;
transform: translate3d(0, 0, 0);
}
.poprotate_start {
width: 169px;
height: 206px;
left: 231px;
top: 417px;
position: absolute;
filter: grayscale(1);
}
.popcommontt_tittleicon {
width: 456px;
height: 127px;
left: 85px;
position: absolute;
}
}
.pop_spottt {
width: 630px;
height: 742px;
left: calc(50% - (630px / 2));
top: calc(50% - (842px / 2));
.popspottt_tittleicon {
width: 455px;
height: 127px;
left: calc(50% - (455px / 2));
top: 20px;
position: absolute;
z-index: 1;
}
.poprotate_back {
top: 112px;
position: absolute;
}
.poprotate_rotate {
top: 148px;
}
.poprotate_start {
top: 292px;
}
}
.poprotate_close {
left: calc(50% - (102px / 2)) !important;
}
.poprotate_rotate-rotate {
width: 557px;
height: 557px;
left: 0;
top: 0;
position: absolute;
z-index: 10;
transform-origin: center center;
.poprotate_rotate-backboard {
width: 100%;
height: 100%;
img {
width: 100%;
height: 100%;
}
}
.poprotate_rotate-rewards {
width: 557px;
height: 557px;
left: 0;
top: 0;
position: absolute;
z-index: 2;
.poprotate_rotate-rewards_item {
// background-color: #f45125;
// border-radius: 50%;
// overflow: hidden;
// opacity: 0.5;
width: 130px;
height: 130px;
position: absolute;
transform-origin: center center;
padding-top: 5px;
.poprotate_rotate-rewards_item_name {
display: block;
width: 100%;
line-height: 32px;
font-size: 22px;
color: #f45125;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.poprotate_rotate-rewards_item_img {
display: block;
width: 106px;
height: 106px;
margin: 4px auto 0;
}
}
.poprotate_rotate-rewards_item_0{
left: 136px;
top: 20px;
}
.poprotate_rotate-rewards_item_1{
left: 20px;
top: 136px;
}
.poprotate_rotate-rewards_item_2{
left: 20px;
bottom: 136px;
}
.poprotate_rotate-rewards_item_3{
left: 136px;
bottom: 20px;
}
.poprotate_rotate-rewards_item_4{
right: 136px;
bottom: 20px;
}
.poprotate_rotate-rewards_item_5{
right: 20px;
bottom: 136px;
}
.poprotate_rotate-rewards_item_6{
right: 20px;
top: 136px;
}
.poprotate_rotate-rewards_item_7{
right: 136px;
top: 20px;
}
}
}
.poprotate_rotate-outside {
width: 648px;
height: 658px;
left: 51px;
top: 302px;
position: absolute;
}
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
import './PopRule.less';
class PopRule extends Component {
constructor(props) {
super(props);
this.state = this.state || {
resList: resList,
ruler: this.props.data.ruler
}
}
render() {
const { resList, ruler } = this.state
return (
<div className="poprule">
<img className='comPop_close_btn' src={resList['95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'].url} onClick={this.props.onClose} alt=""/>
<div className="poprule_title"> RULE POP </div>
<div className="poprule_content">
<div className='poprule_ruler_text' dangerouslySetInnerHTML={{__html: ruler}}></div>
</div>
</div>
);
}
}
export default PopRule;
.poprule {
width: 611px;
height: 872px;
opacity: 1;
left: calc(51% - (611px / 2));
top: calc(44% - (872px / 2));
position: absolute;
background-color: #62a1bf;
display: flex;
flex-direction: column;
.poprule_bg {
width: 611px;
height: 872px;
opacity: 1;
position: absolute;
}
.poprule_content {
width: 90%;
height: 483px;
opacity: 1;
left: 5%;
top: 279px;
position: absolute;
overflow-y: scroll;
.poprule_ruler_text {
font-size: 28px;
color: #d8eef8;
line-height: 1.2em;
}
}
.poprule_title {
width: 100%;
height: 64px;
line-height: 40px;
opacity: 1;
left: 0;
top: 130px;
position: absolute;
font-size: 40px;
text-align: center;
font-weight: 700;
color: #d8eef8;
}
}
'use strict';
import React, { Component } from 'react';
import resList from '../../../resconfig/resList';
import './PopShareMask.less';
class PopShareMask extends Component {
constructor(props) {
super(props);
this.state = this.state || { resList: resList };
}
render() {
return (
<div className="popsharemask" onClick={this.props.onClose}>
<img className="share_mask" src={this.state.resList['d1048489-c312-4ccb-ae39-fccb8dc21a89'].url} />
</div>
);
}
}
export default PopShareMask;
.popsharemask {
top: 0px;
left: 0px;
width: 750px;
height: 1624px;
display: block;
position: absolute;
.share_mask {
width: 554px;
height: 288px;
opacity: 1;
left: 134px;
top: 82px;
position: absolute;
transform-origin: 0px 0px 0px;
}
}
'use strict';
import React, { Component } from 'react';
const SVGA = require('svgaplayerweb')
import './SvgaBackLight.less';
class SvgaBackLight extends Component {
constructor(props) {
super(props);
this.state = this.state || {
style: this.props.style ? this.props.style : null
}
}
componentDidMount() {
this.backLightAnimationPlay()
}
backLightAnimation = null
// 播放花洒动画
backLightAnimationPlay() {
console.log('backLightAnimation_Play function run')
this.backLightAnimation = new SVGA.Player('.comPop_backLight_animation_box')
this.backLightAner = new SVGA.Parser('.comPop_backLight_animation_box')
this.backLightAner.load('//yun.duiba.com.cn/spark/assets/715c1d373e074fef64509996a7e101f896cd3f21.svga', (videoItem) => {
this.backLightAnimation.clearsAfterStop = false
this.backLightAnimation.loops = 1
this.backLightAnimation.setVideoItem(videoItem)
if (this.props.delay) {
setTimeout(() => {
this.backLightAnimation.startAnimation()
}, this.props.delay)
}
else this.backLightAnimation.startAnimation()
}, (e) => { console.log(e) })
}
render() {
const { style } = this.state
return (
<div className="comPop_backLight_animation_content" style={style}>
<div className="comPop_backLight_animation_box" clearsafterstop="true"></div>
</div>
);
}
}
export default SvgaBackLight;
.comPop_backLight_animation_content {
width: 600px;
height: 400px;
position: absolute;
top: -90px;
left: calc((100% - 600px) / 2);
z-index: -1;
.comPop_backLight_animation_box {
width: 100%;
height: 100%;
}
}
\ No newline at end of file
'use strict';
import React, { Component } from 'react';
const SVGA = require('svgaplayerweb')
import './SvgaShine.less';
class SvgaShine extends Component {
constructor(props) {
super(props);
this.state = this.state || {
show: this.props.show ? this.props.show : false
}
}
componentDidMount() {
this.shineAnimationPlay()
}
shineAnimation = null
shineAnimationPlay() {
console.log('shineAnimation_Play function run')
this.shineAnimation = new SVGA.Player('.comPop_shine_animation_box')
this.shineAner = new SVGA.Parser('.comPop_shine_animation_box')
this.shineAner.load('//yun.duiba.com.cn/spark/assets/a002ffff9d9bdfbb380f5d8eb06ea570db5aab43.svga', (videoItem) => {
// this.shineAnimation.clearsAfterStop = false
this.shineAnimation.loops = 1
this.shineAnimation.setVideoItem(videoItem)
this.shineAnimation.startAnimation()
}, (e) => { console.log(e) })
}
render() {
const { show } = this.state
return (
<div className="comPop_shine_animation_content" style={{display: show ? 'block' : 'none'}}>
<div className="comPop_shine_animation_box" clearsafterstop="true"></div>
</div>
);
}
}
export default SvgaShine;
.comPop_shine_animation_content {
width: 750px;
height: 1624px;
position: absolute;
top: calc(50% - (1624px / 2));
left: calc(50% - (750px / 2));
z-index: -1;
.comPop_shine_animation_box {
width: 100%;
height: 100%;
}
}
\ No newline at end of file
'use strict';
import React, { Component } from 'react';
import { Random } from 'mockjs';
import { AUConnect } from '../../redux/auConnect';
import { debounce } from '../../utils/debounce';
import './PageHome.less';
class PageHome extends Component {
constructor(props) {
super(props);
this.state = this.state || {
ruleData: `活动规则: ${Random.cparagraph(20, 40)}`
};
}
openDefault = () => {
this.props.showPop({
type: 'PopDefault',
fn: () => {
console.log('simple callback, param "fn" ')
}
})
}
openRule = () => {
this.props.showPop({
type: 'PopRule',
data: {
ruler: this.state.ruleData
}
})
}
openInput = () => {
this.props.showPop({
type: 'PopInput',
data: {},
ctx: this
})
}
parentConsoleFunction = (data) => {
console.log('input data is: ', data)
}
openRotate = () => {
this.props.showPop({
type: 'PopRotate',
ctx: this
})
}
openInfinite = () => {
this.props.showPop({
type: 'PopInfiniteA',
ctx: this
})
}
openColorful = () => {
this.props.showPop({type: 'PopLightCard', data: {sindex: 3, addSignDays: 18}, ctx: this})
}
render() {
return (
<div className="home">
<div className="home_title">pageHome</div>
<div className="home_button_group">
<div onClick={ debounce(this.openDefault, 300) } className="home_button">open pop default</div>
<div onClick={ debounce(this.openRule, 300) } className="home_button">open pop rule</div>
<div onClick={ debounce(this.openInput, 300) } className="home_button">open pop input</div>
<div onClick={ debounce(this.openRotate, 300) } className="home_button">open pop rotate</div>
<div onClick={ debounce(this.openInfinite, 300) } className="home_button">open pop infinite</div>
<div onClick={ debounce(this.openColorful, 300) } className="home_button">open pop colorful</div>
</div>
</div>
);
}
}
export default AUConnect(PageHome)
.home {
top: 0px;
left: 0px;
width: 750px;
height: 1624px;
display: block;
position: absolute;
.home_title {
font-size: 48px;
text-decoration: underline;
color: #515151;
font-weight: 900;
width: 100%;
text-align: center;
line-height: 2em;
}
.home_button_group {
width: 100%;
height: 600px;
margin-top: 20px;
display: flex;
flex-direction: column;
justify-content: space-around;
padding-left: 30px;
box-sizing: border-box;
.home_button {
font-size: 28px;
background-color: gainsboro;
box-sizing: border-box;
border-radius: 8px;
height: 60px;
line-height: 60px;
width: 300px;
text-align: center;
border: 1px solid rgba(20, 20, 20, 0.25);
box-shadow: inset 2px 2px 10px rgba(255, 255, 255, .8);
overflow: hidden;
}
}
}
import store from './store'
export const ActionType = {
SHOW_POP: 'SHOW_POP'
}
export function showPop(data) {
return {type: 'SHOW_POP', value: data}
}
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import * as actions from './action.js'
function mapStateToProps(state) {
return { popState: state.changePopStatus }
}
function mapDispatchToProps(dispatch, ownProps) {
return bindActionCreators({
showPop: actions.showPop
}, dispatch)
}
export const AUConnect = (com) => {
return connect( mapStateToProps, mapDispatchToProps )(com)
}
\ No newline at end of file
import { combineReducers } from 'redux'
import { ActionType } from './action';
let stateInitPop = {
popArr: []
}
function changePopStatus (state = stateInitPop, action) {
switch (action.type) {
case ActionType.SHOW_POP:
// console.log('action: ',action)
if (action.value.type && state.popArr.length && action.value.cover) {
state.popArr.push({
showPop: action.value.type,
popData: action.value.data,
cover: action.value.cover,
fn: action.value.fn,
ctx: action.value.ctx
})
return {
...state
}
} else if (!action.value.type && !state.popArr.length) {
break
}
else if (action.value.type && !state.popArr.length) {
state.popArr = [{
showPop: action.value.type,
popData: action.value.data,
cover: action.value.cover,
fn: action.value.fn,
ctx: action.value.ctx
}]
return {
...state
}
}
else if (!action.value.type && state.popArr.length) {
state.popArr.splice(state.popArr.length - 1, 1)
return {
...state
}
} else {
state.popArr = [{
showPop: action.value.type,
popData: action.value.data,
cover: action.value.cover,
fn: action.value.fn,
ctx: action.value.ctx
}]
return {
...state
}
}
default:
return state
}
}
const reducer = combineReducers({
changePopStatus
})
export default reducer
\ No newline at end of file
import { createStore } from 'redux'
import reducer from './reducer';
const store = createStore(reducer)
export default store
/**
* 目前没有用到
* @param {*} resList
* @param {*} uuid
*/
const getSrcByUuid = (resList, uuid) => {
resList = resList || [];
for (let i = 0; i < resList.length; i++) {
if (resList[i].uuid == uuid) {
return resList[i].url
}
}
}
module.exports = {
getSrcByUuid
}
\ No newline at end of file
const resList = {
'a0341609-8bdf-4987-b67a-f3d9ca52649e': {
name: '背景',
ext: '.png',
uuid: 'a0341609-8bdf-4987-b67a-f3d9ca52649e',
url: '//yun.duiba.com.cn/spark/assets/b83af43a6c3f0f28f6e0ca124628ace0b5415b6b.png'
},
'88c50553-0623-43c9-9f27-d4622320c6a0': {
name: '今日签到button',
ext: '.png',
uuid: '88c50553-0623-43c9-9f27-d4622320c6a0',
url: '//yun.duiba.com.cn/spark/assets/2eaa591d17a02beaa0c7ebfc4bf7c532783b1b85.png'
},
'0978b22c-caad-470b-a940-c758820781ef': {
name: '点亮地标button',
ext: '.png',
uuid: '0978b22c-caad-470b-a940-c758820781ef',
url: '//yun.duiba.com.cn/spark/assets/dd746ad3fea05700529299fde3ecaaa29ae1d895.png'
},
'f57e42c3-1421-4873-918c-5296da3c17c4': {
name: '今日已签到button',
ext: '.png',
uuid: 'f57e42c3-1421-4873-918c-5296da3c17c4',
url: '//yun.duiba.com.cn/spark/assets/0038e6b7acea5c23230ed16cd45ce7515ce63aca.png'
},
'a3bb9a2d-3ffc-4329-8429-9722768882e0': {
name: '小喇叭公告背景',
ext: '.png',
uuid: 'a3bb9a2d-3ffc-4329-8429-9722768882e0',
url: '//yun.duiba.com.cn/spark/assets/fff0cc03927ebf0f43bc6c282f3816679a841e77.png'
},
'd1abcd9f-6f3e-4fde-8502-7c277be0cde4': {
name: '道具底图01',
ext: '.png',
uuid: 'd1abcd9f-6f3e-4fde-8502-7c277be0cde4',
url: '//yun.duiba.com.cn/spark/assets/3edf469bd3940f98d51ddc365599ec8ae64b0162.png'
},
'e51cc4b6-cf21-4b41-a724-083f2d3e177d': {
name: '兑换按钮01',
ext: '.png',
uuid: 'e51cc4b6-cf21-4b41-a724-083f2d3e177d',
url: '//yun.duiba.com.cn/spark/assets/fdc677a477393adabd6137c19e835d54fb0ec508.png'
},
'c8fb406d-ad30-4c3e-895d-095b064afd4e': {
name: '问好按钮01',
ext: '.png',
uuid: 'c8fb406d-ad30-4c3e-895d-095b064afd4e',
url: '//yun.duiba.com.cn/spark/assets/d58d1c4980ba4670fb53b938a0acf70f0f188423.png'
},
'a53e5ca2-e479-46db-9f47-7a1483182be0': {
name: '道具问号01',
ext: '.png',
uuid: 'a53e5ca2-e479-46db-9f47-7a1483182be0',
url: '//yun.duiba.com.cn/spark/assets/c7d6a5bd1f9e915c60a2fc8721c9e515b7139e79.png'
},
'd3924040-0cac-4075-9198-52e425425ee4': {
name: '道具底图02',
ext: '.png',
uuid: 'd3924040-0cac-4075-9198-52e425425ee4',
url: '//yun.duiba.com.cn/spark/assets/684911821165b59af359ce2c814c71e189e5ce8e.png'
},
'08e7de9b-d90a-4c02-969f-a14563362904': {
name: '道具图标02',
ext: '.png',
uuid: '08e7de9b-d90a-4c02-969f-a14563362904',
url: '//yun.duiba.com.cn/spark/assets/22a19fde45cd507b629875cbca24325fb53551af.png'
},
'8582d52a-a247-4cc3-8003-a7442b8d9550': {
name: '道具问号02',
ext: '.png',
uuid: '8582d52a-a247-4cc3-8003-a7442b8d9550',
url: '//yun.duiba.com.cn/spark/assets/8e2cd9700955ba4389e8d4e7ca8490186efb03bf.png'
},
'8eafd1a3-3eb7-49ad-a742-ff5340143c1f': {
name: '活动规则',
ext: '.png',
uuid: '8eafd1a3-3eb7-49ad-a742-ff5340143c1f',
url: '//yun.duiba.com.cn/spark/assets/be64efd361d196260753b7f4210daca048a7910a.png'
},
'89912aac-522a-4a4a-bf26-1c418bd5935d': {
name: '我的奖品',
ext: '.png',
uuid: '89912aac-522a-4a4a-bf26-1c418bd5935d',
url: '//yun.duiba.com.cn/spark/assets/4f8d65d8950dc6082cd5f3a6766453579e0bc2b3.png'
},
'0eb40bb1-d552-4624-96c2-c834cfaf8427': {
name: '任务背景',
ext: '.png',
uuid: '0eb40bb1-d552-4624-96c2-c834cfaf8427',
url: '//yun.duiba.com.cn/spark/assets/a904c175c7aa9ecbc282e5f423d0bd674f0a61b7.png'
},
'48738a26-4de2-41a6-b760-8e80a00c7fe0': {
name: '任务项背景',
ext: '.png',
uuid: '48738a26-4de2-41a6-b760-8e80a00c7fe0',
url: '//yun.duiba.com.cn/spark/assets/2f63c289e8744dcc10ac0a2711e304a72ecd818d.png'
},
'0d240664-973b-4375-bad1-1eee696a4472': {
name: '任务列表已完成',
ext: '.png',
uuid: '0d240664-973b-4375-bad1-1eee696a4472',
url: '//yun.duiba.com.cn/spark/assets/5f1967a9c705f1ad4c98c5a76c6c94f81c2fb2c6.png'
},
'9436be1b-67af-4180-b597-9b53bc26c6a5': {
name: '任务列表去完成',
ext: '.png',
uuid: '9436be1b-67af-4180-b597-9b53bc26c6a5',
url: '//yun.duiba.com.cn/spark/assets/e9f44bc397c2fe282b2c963510348ec6e819c9e9.png'
},
'ce85d89b-d1c2-4212-b6e3-37940d55db7f': {
name: '任务icon普通任务',
ext: '.png',
uuid: 'ce85d89b-d1c2-4212-b6e3-37940d55db7f',
url: '//yun.duiba.com.cn/spark/assets/839d6519353acd4d81673eed6d515e122d41536e.png'
},
'04647424-f2f1-4a0e-a283-c03a78d88445': {
name: '任务icon邀请好友',
ext: '.png',
uuid: '04647424-f2f1-4a0e-a283-c03a78d88445',
url: '//yun.duiba.com.cn/spark/assets/0b7d4c52b5b5ebe87960a2cf8130999bac19db8e.png'
},
'183fb630-ca47-4064-b5fc-1b08d04ac064': {
name: '地图底矩形',
ext: '.png',
uuid: '183fb630-ca47-4064-b5fc-1b08d04ac064',
url: '//yun.duiba.com.cn/spark/assets/aa55c52f5778fc5c08319da373447d18a0dbdcda.png'
},
'f63eff2a-42b2-4c44-97cd-74229cb30000': {
name: '地图容器',
ext: '.png',
uuid: 'f63eff2a-42b2-4c44-97cd-74229cb30000',
url: '//yun.duiba.com.cn/spark/assets/55d46dc417048b687ed90c6bf51726662c5c4ddf.png'
},
'3e71fa35-5a14-475f-9131-f55ab8cf61ea': {
name: '组23',
ext: '.png',
uuid: '3e71fa35-5a14-475f-9131-f55ab8cf61ea',
url: '//yun.duiba.com.cn/spark/assets/a9333bde06576bb05012986529219462ae74ac2b.png'
},
'a9e39cae-62fa-4d47-bc56-154bf0046a83': {
name: '主页抽奖按钮1',
ext: '.png',
uuid: 'a9e39cae-62fa-4d47-bc56-154bf0046a83',
url: '//yun.duiba.com.cn/spark/assets/7f4c3f06e58562f636445f277f82f57be7409f77.png'
},
'c184da45-8878-4015-8cfd-b7d0b53c6407': {
name: 'B签到成功背景',
ext: '.png',
uuid: 'c184da45-8878-4015-8cfd-b7d0b53c6407',
url: '//yun.duiba.com.cn/spark/assets/ce01e98128a98ced7aef82182e4cb5f61744a048.png'
},
'53f94099-62dc-4764-9483-fc96ab67a2a4': {
name: '签到成功前进恭喜你',
ext: '.png',
uuid: '53f94099-62dc-4764-9483-fc96ab67a2a4',
url: '//yun.duiba.com.cn/spark/assets/75e104e6c5cc906e9f71ee2baba2e837e3e2586b.png'
},
'8e50d87f-6f76-4db6-85e2-cba88f1f5baa': {
name: 'B签到成功氛围',
ext: '.png',
uuid: '8e50d87f-6f76-4db6-85e2-cba88f1f5baa',
url: '//yun.duiba.com.cn/spark/assets/7e9e5b494f0b9bbf5e75bb355d8f8fab4daba301.png'
},
'a0cb5042-c04d-4031-bc11-0b4566aa7184': {
name: '弹窗我知道啦按钮01',
ext: '.png',
uuid: 'a0cb5042-c04d-4031-bc11-0b4566aa7184',
url: '//yun.duiba.com.cn/spark/assets/ab68cc5ab817b5796db62355035bc28a2c7b0514.png'
},
'f0858977-02cc-4b90-b4a8-99c81fc31fb2': {
name: '弹窗去抽奖按钮01',
ext: '.png',
uuid: 'f0858977-02cc-4b90-b4a8-99c81fc31fb2',
url: '//yun.duiba.com.cn/spark/assets/5563b3ee45d29f779f3eb08f72825b107d54f96c.png'
},
'1750d22d-6511-4ba7-ad7b-2b5f3689584c': {
name: 'B未抽到签到卡碎背景',
ext: '.png',
uuid: '1750d22d-6511-4ba7-ad7b-2b5f3689584c',
url: '//yun.duiba.com.cn/spark/assets/d0c6100a61137f84f93e50adfde3caa0f166b6d5.png'
},
'2c82c3ef-c361-4b9f-a059-797a15c0a0d7': {
name: 'C抽中签到卡碎片背景',
ext: '.png',
uuid: '2c82c3ef-c361-4b9f-a059-797a15c0a0d7',
url: '//yun.duiba.com.cn/spark/assets/c7ffb163f4aa0e432cb872cc7e992377c2c0f677.png'
},
'b4ff2ad9-84d8-4615-9f25-c111d1f60b97': {
name: '卡片碎片图',
ext: '.png',
uuid: 'b4ff2ad9-84d8-4615-9f25-c111d1f60b97',
url: '//yun.duiba.com.cn/spark/assets/d4d2836e2c8c441d2befac607ef71095d043febf.png'
},
'9b912cb7-cdf6-4c61-9052-9f425db2803a': {
name: '弹窗开心手下按钮01',
ext: '.png',
uuid: '9b912cb7-cdf6-4c61-9052-9f425db2803a',
url: '//yun.duiba.com.cn/spark/assets/d4dacd12eef96033617875efe33af09456dc95a0.png'
},
'4266f155-9b97-404c-b50f-e68e3f159971': {
name: '圆角矩形1805拷贝',
ext: '.png',
uuid: '4266f155-9b97-404c-b50f-e68e3f159971',
url: '//yun.duiba.com.cn/spark/assets/34a37a460f2b68fec9df5ee2673eed4b9b2a6b38.png'
},
'6194bbaf-deeb-42b5-8b2b-6d02ee03ce22': {
name: '活动规则背景',
ext: '.png',
uuid: '6194bbaf-deeb-42b5-8b2b-6d02ee03ce22',
url: '//yun.duiba.com.cn/spark/assets/463b60531fb5e3ed4a096b17b1650d6b3652b2e7.png'
},
'20e4b2d1-fbf3-4b23-b39c-a000b566bb89': {
name: '幸运大转盘背景氛围',
ext: '.png',
uuid: '20e4b2d1-fbf3-4b23-b39c-a000b566bb89',
url: '//yun.duiba.com.cn/spark/assets/b1a66a51b321d9786f1440d4187b719f9b8b4b12.png'
},
'65610f80-ae38-4cb3-b130-b6e917cd0d5e': {
name: '转盘背景',
ext: '.png',
uuid: '65610f80-ae38-4cb3-b130-b6e917cd0d5e',
url: '//yun.duiba.com.cn/spark/assets/3eced6b6fb256eb121e34fd601b135e0b8fa21d8.png'
},
'546aabdf-252a-4a0b-baa2-13fb9190f10a': {
name: '幸运大转盘旋转盘',
ext: '.png',
uuid: '546aabdf-252a-4a0b-baa2-13fb9190f10a',
url: '//yun.duiba.com.cn/spark/assets/72ed7d0ebed9799e048d35234e2d4a0e07519a85.png'
},
'84777952-f82a-4029-a3f6-9d31da69217a': {
name: '幸运转盘抽奖按钮',
ext: '.png',
uuid: '84777952-f82a-4029-a3f6-9d31da69217a',
url: '//yun.duiba.com.cn/spark/assets/35d9356b180494b5ea8197c16c8af4310b485c9e.png'
},
'6e56435d-d429-4b1c-a21f-efa5dddfbfef': {
name: '幸运大转盘标题',
ext: '.png',
uuid: '6e56435d-d429-4b1c-a21f-efa5dddfbfef',
url: '//yun.duiba.com.cn/spark/assets/b6e387d43d9dbdb3159c5398f099836893bce207.png'
},
'34ecd230-b54d-45da-aa7f-13b596f1262a': {
name: '转盘抽奖背景02',
ext: '.png',
uuid: '34ecd230-b54d-45da-aa7f-13b596f1262a',
url: '//yun.duiba.com.cn/spark/assets/3eb924249e46997cdfb13858e358441b419eb059.png'
},
'866f0e7b-3bc8-4f9e-a571-758ef348dcef': {
name: '转盘旋转部分02',
ext: '.png',
uuid: '866f0e7b-3bc8-4f9e-a571-758ef348dcef',
url: '//yun.duiba.com.cn/spark/assets/2fed34744efd9b3b0cb7d419f13c808202aa0728.png'
},
'dcea884e-1fa1-4546-baf9-5dbe7df1d9ae': {
name: '转盘抽奖按钮02',
ext: '.png',
uuid: 'dcea884e-1fa1-4546-baf9-5dbe7df1d9ae',
url: '//yun.duiba.com.cn/spark/assets/0958669b26b732108c2aa418e674bb8843f1f9bd.png'
},
'2cc136a2-e2fb-469e-8c24-567b14f8db5b': {
name: '签到大转盘tittle',
ext: '.png',
uuid: '2cc136a2-e2fb-469e-8c24-567b14f8db5b',
url: '//yun.duiba.com.cn/spark/assets/e41b911208a7efd9986a4a4dc9f5936aea8c8c70.png'
},
'4fb0fa31-d01c-4740-aec1-25bd12a1009a': {
name: '点亮地标图片',
ext: '.png',
uuid: '4fb0fa31-d01c-4740-aec1-25bd12a1009a',
url: '//yun.duiba.com.cn/spark/assets/cb38b4fb929d1bf8009bc53012b289f2facae910.png'
},
'ee22c731-c50a-47fe-9a61-83d0806ec400': {
name: '椭圆1462',
ext: '.png',
uuid: 'ee22c731-c50a-47fe-9a61-83d0806ec400',
url: '//yun.duiba.com.cn/spark/assets/189595bcef956db6fbdbfaa9e1d2bb397a992489.png'
},
'446592a2-e5c4-4e78-8502-a757ad3e297e': {
name: '点亮领取地标好礼按钮',
ext: '.png',
uuid: '446592a2-e5c4-4e78-8502-a757ad3e297e',
url: '//yun.duiba.com.cn/spark/assets/4b36370cb353e55ed52824f266c7b6437eb3867a.png'
},
'14526a62-17a5-4c81-ac03-3fac4fe26586': {
name: '点亮激动分享按钮',
ext: '.png',
uuid: '14526a62-17a5-4c81-ac03-3fac4fe26586',
url: '//yun.duiba.com.cn/spark/assets/72887236099b513ca3f2d5ba38dc8409254fc6c3.png'
},
'3a8c0bcd-a931-463e-ba2b-e050c6932750': {
name: '点亮地标headback',
ext: '.png',
uuid: '3a8c0bcd-a931-463e-ba2b-e050c6932750',
url: '//yun.duiba.com.cn/spark/assets/9d5f1ca00c58bf8e2374df5e539f84e4f3994513.png'
},
'98ad2dd0-e77f-4590-ac79-90a2fd23fa26': {
name: '圆角矩形1474',
ext: '.png',
uuid: '98ad2dd0-e77f-4590-ac79-90a2fd23fa26',
url: '//yun.duiba.com.cn/spark/assets/6af763f2d020e1777d7b8dbfb43274ea87b8360e.png'
},
'261ca86a-6a86-43e3-9fe9-b0ecdf6f1d07': {
name: '图层1471',
ext: '.png',
uuid: '261ca86a-6a86-43e3-9fe9-b0ecdf6f1d07',
url: '//yun.duiba.com.cn/spark/assets/1ed1d6de6fefa975bcda0df1079a7285ce375dc2.png'
},
'2add7a99-99cc-46bd-9f7f-5fc6d9b4c05c': {
name: '圆角矩形1338拷贝',
ext: '.png',
uuid: '2add7a99-99cc-46bd-9f7f-5fc6d9b4c05c',
url: '//yun.duiba.com.cn/spark/assets/d9e27cdf3c99a0f9010ea5225ee6b92eeb090891.png'
},
'365d6ade-2559-4bc3-8318-275bf3bac837': {
name: '组55拷贝',
ext: '.png',
uuid: '365d6ade-2559-4bc3-8318-275bf3bac837',
url: '//yun.duiba.com.cn/spark/assets/44dcdde3a3c72843dd4217432855b2eba5919e20.png'
},
'54e6d330-d2c3-462e-af1b-198b527754d1': {
name: '组55拷贝2',
ext: '.png',
uuid: '54e6d330-d2c3-462e-af1b-198b527754d1',
url: '//yun.duiba.com.cn/spark/assets/a4d0d91541b92bebda25bf166b985917b1c6dfca.png'
},
'f799e362-442b-4a1f-a466-e43069ea0af0': {
name: '地标介绍文案按钮02',
ext: '.png',
uuid: 'f799e362-442b-4a1f-a466-e43069ea0af0',
url: '//yun.duiba.com.cn/spark/assets/fbe2cfafa1d64ae3c4efe7229fb725cc5b4e439f.png'
},
'4b9b1aef-6eb4-4130-b4da-c8c1d11f545b': {
name: '地标介绍文案9',
ext: '.png',
uuid: '4b9b1aef-6eb4-4130-b4da-c8c1d11f545b',
url: '//yun.duiba.com.cn/spark/assets/696b3cfcd493485acacf1f87b7c44f0b6f3e974a.png'
},
'568f1f7b-64bb-4514-a4a2-2e59c32e21d4': {
name: '立即兑换按钮',
ext: '.png',
uuid: '568f1f7b-64bb-4514-a4a2-2e59c32e21d4',
url: '//yun.duiba.com.cn/spark/assets/d05fb05ccf113198270c8e0ea81208ec71a3c820.png'
},
'0240dfba-6662-4eab-a52c-59d919446b38': {
name: '弹窗提前签到按钮',
ext: '.png',
uuid: '0240dfba-6662-4eab-a52c-59d919446b38',
url: '//yun.duiba.com.cn/spark/assets/e4d752de042d8d0003e6de3335eff30577648a9b.png'
},
'f9c19db7-473f-4c10-8cc3-ecbbd88692dc': {
name: '签到卡icon',
ext: '.png',
uuid: 'f9c19db7-473f-4c10-8cc3-ecbbd88692dc',
url: '//yun.duiba.com.cn/spark/assets/67ad46deb7c7ea59d65270a1983051bced614f45.png'
},
'19019466-e793-4493-9222-17272dbd9a37': {
name: '弹窗获取碎片兑换按钮',
ext: '.png',
uuid: '19019466-e793-4493-9222-17272dbd9a37',
url: '//yun.duiba.com.cn/spark/assets/200422f24dc70bf211350042e6f6caf84b52665b.png'
},
'5597815d-d73a-4d69-b143-87f0d47f1ae5': {
name: '弹窗确认兑换按钮',
ext: '.png',
uuid: '5597815d-d73a-4d69-b143-87f0d47f1ae5',
url: '//yun.duiba.com.cn/spark/assets/82182671a4b3965dbb89f45656e050052925c9b0.png'
},
'213b85a0-779f-4440-a36a-ad92513b4a95': {
name: '减少按钮置灰',
ext: '.png',
uuid: '213b85a0-779f-4440-a36a-ad92513b4a95',
url: '//yun.duiba.com.cn/spark/assets/ab586bf54aac127b4c27e9ee876351e44de7797d.png'
},
'5ab12f1e-7423-4f3b-ae70-cc7deb1e6931': {
name: '减少按钮',
ext: '.png',
uuid: '5ab12f1e-7423-4f3b-ae70-cc7deb1e6931',
url: '//yun.duiba.com.cn/spark/assets/2df25d15716d1fa522205bb820096e9817db246b.png'
},
'e2208d86-3d6b-4829-8c71-4dffd0b0cb8c': {
name: '圆角矩形18057',
ext: '.png',
uuid: 'e2208d86-3d6b-4829-8c71-4dffd0b0cb8c',
url: '//yun.duiba.com.cn/spark/assets/dab22d356317591d322a2170466908fd90e58c18.png'
},
'4fd81570-9848-43bf-bcda-47797aed804e': {
name: '增加按钮置灰',
ext: '.png',
uuid: '4fd81570-9848-43bf-bcda-47797aed804e',
url: '//yun.duiba.com.cn/spark/assets/eda32bf309d3b5a93cdccefa3faaf0c7ee46d79d.png'
},
'806c33b9-994b-4a81-a202-a31c0d30fcfb': {
name: '增加按钮',
ext: '.png',
uuid: '806c33b9-994b-4a81-a202-a31c0d30fcfb',
url: '//yun.duiba.com.cn/spark/assets/407aa3302fa4fd4d1123f719246e2d57474958bb.png'
},
'c04835c9-66a2-4841-a3d2-803a33d4a2ca': {
name: 'D邀请弹窗背景',
ext: '.png',
uuid: 'c04835c9-66a2-4841-a3d2-803a33d4a2ca',
url: '//yun.duiba.com.cn/spark/assets/e1f23ccc18c91da69fbd7688aeabcbb11b610484.png'
},
'7d2be3cb-638d-4d9a-8bf9-aaf2338fa7ba': {
name: '邀请确认提交按钮',
ext: '.png',
uuid: '7d2be3cb-638d-4d9a-8bf9-aaf2338fa7ba',
url: '//yun.duiba.com.cn/spark/assets/51e35d96d97184ccbebda8877df93373194a167b.png'
},
'd9862cab-ee5b-460e-b7bf-97c96de068aa': {
name: '圆角矩形18056',
ext: '.png',
uuid: 'd9862cab-ee5b-460e-b7bf-97c96de068aa',
url: '//yun.duiba.com.cn/spark/assets/fbc4b17f8a68c4eeae9997d2e54f63d5ce9094ba.png'
},
'd28f0a57-3c51-4119-91f1-ba13d820a927': {
name: '去抽取奖励按钮',
ext: '.png',
uuid: 'd28f0a57-3c51-4119-91f1-ba13d820a927',
url: '//yun.duiba.com.cn/spark/assets/d492d209c24f49791df4ab142e18ca662f6af160.png'
},
'6f1fe343-e7ac-4867-b14d-0e6b678dca59': {
name: '点亮地标titleIcon',
ext: '.png',
uuid: '6f1fe343-e7ac-4867-b14d-0e6b678dca59',
url: '//yun.duiba.com.cn/spark/assets/926b874a2b87ced0c1e5ac6d5560fcc8f9fc12d2.png'
},
'd1048489-c312-4ccb-ae39-fccb8dc21a89': {
name: '分享提示',
ext: '.png',
uuid: 'd1048489-c312-4ccb-ae39-fccb8dc21a89',
url: '//yun.duiba.com.cn/spark/assets/329617bb66b292b4ed37d27733a810fc6a072469.png'
},
'fec5bcc4-bb7a-4737-8141-c3a9971cc602': {
name: '棒棰岛',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/9b3d337a7b3494ecb07905e1f688a21ae037edeb.png',
uuid: 'fec5bcc4-bb7a-4737-8141-c3a9971cc602'
},
'5a8d7f83-d629-4d53-9ce3-7a99727d8fde': {
name: '棒棰岛2',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/41822f8b32553cbbb3c1a93b23c3a658fa9019ae.png',
uuid: '5a8d7f83-d629-4d53-9ce3-7a99727d8fde'
},
'd8e0bc7e-9616-41c3-9317-eecb3239648e': {
name: '冰峪沟',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/cbae44e9bbbb790e90c9ee4c31db48d72cec2cdf.png',
uuid: 'd8e0bc7e-9616-41c3-9317-eecb3239648e'
},
'82cf0084-34c3-4992-9599-f9c3e918923f': {
name: '地标介绍按钮',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/0cbaec3578eaae72a7452f000d6a0d7a71f66a09.png',
uuid: '82cf0084-34c3-4992-9599-f9c3e918923f'
},
'39162445-f495-4077-8d91-53108663b22e': {
name: '东港音乐喷泉',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/f19b8f1bec68aeffeeb00f0f14837657816cbf72.png',
uuid: '39162445-f495-4077-8d91-53108663b22e'
},
'95e51d5a-c54c-4e03-9aa6-bfec258bc7d4': {
name: '关闭_btn',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/bad78a97e7b33dfa0b456534e1548a2c24ee5ea9.png',
uuid: '95e51d5a-c54c-4e03-9aa6-bfec258bc7d4'
},
'922446cb-ef96-42c0-8877-277fcb3fc7ca': {
name: '关向应纪念馆',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/0f870d1f8aafe1381ea91187c89509e75ed85ffc.png',
uuid: '922446cb-ef96-42c0-8877-277fcb3fc7ca'
},
'b4e7b8db-2648-49f6-818a-9b762a0daa41': {
name: '黄渤海交界线',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/371f3fd03f2d8aff5dda4e5e6b00f7a8d4e9516b.png',
uuid: 'b4e7b8db-2648-49f6-818a-9b762a0daa41'
},
'7076c2e8-4220-4bde-b89f-ca4b4be88580': {
name: '金石滩',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/a6ff275856138316602da4a6f3f4957497f65997.png',
uuid: '7076c2e8-4220-4bde-b89f-ca4b4be88580'
},
'e9f7da5e-1793-4fb0-81c6-8adb97b17228': {
name: '金石滩2',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/4a4554a82f74d2929909ff5bcfa096e19dd6d9c9.png',
uuid: 'e9f7da5e-1793-4fb0-81c6-8adb97b17228'
},
'8ca531ea-1da5-499d-ac95-5c7090f286dd': {
name: '劳动公园',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/2b8f9010b0131ac2085ab4b04ff45b926a0706ec.png',
uuid: '8ca531ea-1da5-499d-ac95-5c7090f286dd'
},
'b2ff089c-b3f9-465c-98c1-76944b07a32a': {
name: '老虎滩',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/c690cfd3b6bc0b8b4237f729835b7542488d4568.png',
uuid: 'b2ff089c-b3f9-465c-98c1-76944b07a32a'
},
'e31b39b4-37e2-49f4-9483-3feea3249035': {
name: '旅顺白玉山',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/8438621bb2f335c5579c50d296dcfd14ab1bb369.png',
uuid: 'e31b39b4-37e2-49f4-9483-3feea3249035'
},
'35d638f8-57dc-48c5-83f1-2c51fc06b285': {
name: '星海广场',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/c644500ca610e23f110044222f6e42fffd89c653.png',
uuid: '35d638f8-57dc-48c5-83f1-2c51fc06b285'
},
'2bd9a731-c156-4c07-a4a5-a9818b8779c5': {
name: '星海湾跨海大桥',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/1c97f7ba32f6104d4b83666619bb4af6d429f78b.png',
uuid: '2bd9a731-c156-4c07-a4a5-a9818b8779c5'
},
'1057e473-9c0a-4923-b943-555eca601782': {
name: '樱花园203',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/8a5edc0d0ad96f730750fa92a3690eb15b3c23b9.png',
uuid: '1057e473-9c0a-4923-b943-555eca601782'
},
'aea3b476-919f-4524-89ae-7113e163ed8b': {
name: 'regret_title',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/325084fd1d9b006511305a19932cf8149fdaa3a8.png',
uuid: 'aea3b476-919f-4524-89ae-7113e163ed8b'
},
'19d3a61e-120d-443c-ba78-858ebb0d8b0d': {
name: '背景光',
ext: '.svga',
url: '//yun.duiba.com.cn/spark/assets/715c1d373e074fef64509996a7e101f896cd3f21.svga',
uuid: '19d3a61e-120d-443c-ba78-858ebb0d8b0d'
},
'95b01e2b-3209-4c5b-8da0-280165497244': {
name: '光斑',
ext: '.svga',
url: '//yun.duiba.com.cn/spark/assets/a002ffff9d9bdfbb380f5d8eb06ea570db5aab43.svga',
uuid: '95b01e2b-3209-4c5b-8da0-280165497244'
},
'04fba940-bf32-40fb-9a87-391327c2f456': {
name: '旗帜2',
ext: '.svga',
url: '//yun.duiba.com.cn/spark/assets/a77bae38b4950bb1f72f9d13f2c2c4bc1ff622b7.svga',
uuid: '04fba940-bf32-40fb-9a87-391327c2f456'
},
'16ce08a5-407a-40fb-a5fb-70b3a771c7ea': {
name: '花洒',
ext: '.svga',
url: '//yun.duiba.com.cn/spark/assets/ce8ec0016a45c8e85e8229c84a0b2f770bf9d7b1.svga',
uuid: '16ce08a5-407a-40fb-a5fb-70b3a771c7ea'
},
'0dc068a3-70a3-4314-a127-011ef818190d': {
name: '转盘抽地标好礼png',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/04d50903725b85ba2bda3a723a58eecb6ffef360.png',
uuid: '0dc068a3-70a3-4314-a127-011ef818190d'
},
'd1e76361-e72e-43c9-a168-cae088eb63b1': {
name: '棒棰岛_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/1243f5ef6e9f8863a370e97d9a7faaec3d184e07.png',
uuid: 'd1e76361-e72e-43c9-a168-cae088eb63b1'
},
'cd79f515-9f8f-42c9-bae5-c6cac5a8cada': {
name: '棒棰岛_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/60c9940386dff62d6bc87d7f0ff388d120ddf47a.png',
uuid: 'cd79f515-9f8f-42c9-bae5-c6cac5a8cada'
},
'84fab61c-efca-45e3-94c4-438263216764': {
name: '冰勾_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/bcfd7ec8b1c73777e4cb29e995191b605e034d2d.png',
uuid: '84fab61c-efca-45e3-94c4-438263216764'
},
'cbe5dc32-abe7-40ea-9d54-6351de42efd9': {
name: '冰勾_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/f32f08266d9d47c8652b2403d7343cf2508115de.png',
uuid: 'cbe5dc32-abe7-40ea-9d54-6351de42efd9'
},
'de3162ff-673f-4f63-a2ae-28e718e42b27': {
name: '道具签到卡icon',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/c0ef7576d20990437f80d8f5254d6264149e66a4.png',
uuid: 'de3162ff-673f-4f63-a2ae-28e718e42b27'
},
'b6ce87bc-9b12-4665-8c32-206740b54a14': {
name: '道具碎片icon',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/6db6dddd25cee963a7403bed2a35dbdacae2a72d.png',
uuid: 'b6ce87bc-9b12-4665-8c32-206740b54a14'
},
'8a43c8c8-4dc9-4fcb-a495-3a284d3e56a0': {
name: '东港音乐喷泉_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/488a28a393a7fff2fe61c3d65e886513e2898759.png',
uuid: '8a43c8c8-4dc9-4fcb-a495-3a284d3e56a0'
},
'9c3c791b-6908-4696-bee8-5e6c179fc66f': {
name: '东港音乐喷泉_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/b2c9aecd156d79f1059acd10433625eb8d409eb9.png',
uuid: '9c3c791b-6908-4696-bee8-5e6c179fc66f'
},
'7d012ab3-a176-4413-b34d-ce476add4fcb': {
name: '恭喜您已全部点亮_btn',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/6bb024556a793746d8e0556d53db117a5ea974c3.png',
uuid: '7d012ab3-a176-4413-b34d-ce476add4fcb'
},
'4bb67e97-6f7a-40b5-8c94-41e899436500': {
name: '关向英纪念馆_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/f8766c21a0579e581ff8f30a7b934cb027559f8f.png',
uuid: '4bb67e97-6f7a-40b5-8c94-41e899436500'
},
'e0dc41f1-d31d-46cb-80ca-2213218c6ceb': {
name: '关向英纪念馆_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/ea4341253fdf294f51b151a7197ba3095ad03a06.png',
uuid: 'e0dc41f1-d31d-46cb-80ca-2213218c6ceb'
},
'bcc328c9-0a8e-4301-ac67-c2838cc29d8d': {
name: '逛一逛扶贫商城',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/bce74791b426ca4101fc78a3f5edce37817861f4.png',
uuid: 'bcc328c9-0a8e-4301-ac67-c2838cc29d8d'
},
'd74e6597-2d3d-4420-b1ab-4ef641e7a0b0': {
name: '逛一逛小豆乐园',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/305e43689b909fce15d8c27500968e5337fbc448.png',
uuid: 'd74e6597-2d3d-4420-b1ab-4ef641e7a0b0'
},
'3117b270-b6d3-458e-b24e-dd42ffc7762f': {
name: '黄海博海交界线_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/d6c5cb12ecd57c6fb0efeb6fc6ab4510a12428ab.png',
uuid: '3117b270-b6d3-458e-b24e-dd42ffc7762f'
},
'7f7a6f10-1601-49f1-a437-4ab07800793e': {
name: '黄海博海交界线_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/87170c6357ceda45f87c0c750c8828733db9404d.png',
uuid: '7f7a6f10-1601-49f1-a437-4ab07800793e'
},
'9a9b7d60-1c31-475b-a486-f2a79071caaa': {
name: '金石滩_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/0e3409b523bebeddc4d1fca04b86c1d5ed306430.png',
uuid: '9a9b7d60-1c31-475b-a486-f2a79071caaa'
},
'3c7c7858-fdd8-4ce1-b5ce-b007ce10327b': {
name: '金石滩_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/158b60487a13531737ff36708dbaac1b728d953e.png',
uuid: '3c7c7858-fdd8-4ce1-b5ce-b007ce10327b'
},
'05f1c196-441b-4ab5-96f7-4e57d7c68709': {
name: '劳动公园_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/ac78ca7573eaf51c04325780440a238120800414.png',
uuid: '05f1c196-441b-4ab5-96f7-4e57d7c68709'
},
'62ec4f29-59d3-4fdb-999f-cdf25a9488b4': {
name: '劳动公园_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/f2226781b7bf11572759a9fec415ee737fe869ff.png',
uuid: '62ec4f29-59d3-4fdb-999f-cdf25a9488b4'
},
'987ed425-5994-4c8a-bf8d-b7809ef558a1': {
name: '老虎滩_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/71d6a3d30344cdb30310fd725d540e1798c83272.png',
uuid: '987ed425-5994-4c8a-bf8d-b7809ef558a1'
},
'2aa8e6f1-5522-4705-852e-f7d37b022c7e': {
name: '老虎滩_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/a8db5b2b9bf547b305852e9c96a5f809b086dc16.png',
uuid: '2aa8e6f1-5522-4705-852e-f7d37b022c7e'
},
'178df3e5-61bc-4df5-9fca-dc2a4fda34a0': {
name: '旅顺白玉山_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/80454c3e9e00c661f550f0ae9febf2290e3f6798.png',
uuid: '178df3e5-61bc-4df5-9fca-dc2a4fda34a0'
},
'621e7fec-fc5d-4cd3-88cf-378e97460f7f': {
name: '旅顺白玉山_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/821cd264b8f209e94e827eb6da6436cb1d8618c5.png',
uuid: '621e7fec-fc5d-4cd3-88cf-378e97460f7f'
},
'45af339b-0d3d-40c7-be0f-ed1416ec68d8': {
name: '每周任务分享',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/41365bc7ea8d0a32cd01a2a92396f2b7b2414961.png',
uuid: '45af339b-0d3d-40c7-be0f-ed1416ec68d8'
},
'08eb87e4-56cc-4d6c-ac96-e170fe6c7786': {
name: '旗子_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/ddda4a647101542a9356fda042bc09215d241b6e.png',
uuid: '08eb87e4-56cc-4d6c-ac96-e170fe6c7786'
},
'7a79cbca-b4a7-43db-81d9-ebac7c5fe67f': {
name: '旗子_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/2809e5f56e95cc3bbe28d4ef5037a8ca9ba0ab0a.png',
uuid: '7a79cbca-b4a7-43db-81d9-ebac7c5fe67f'
},
'c0644b88-ffe6-4b7c-aef2-1772a14ed272': {
name: '签到卡签到数量_btn',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/b0eaecfb219ee5999ad7b1aa3b57cee4e8e1bce4.png',
uuid: 'c0644b88-ffe6-4b7c-aef2-1772a14ed272'
},
'168b9add-b774-4a9b-9188-3853631d90c8': {
name: '去分享_fixedbtn',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/753cb25d8f5ddb1406ecddb9873cc3f12e0a239f.png',
uuid: '168b9add-b774-4a9b-9188-3853631d90c8'
},
'1a1b6a3e-6208-49ca-97fd-f9b8c077debb': {
name: '去完成__new',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/11a1c7e05d52ca5a2920d4e4d2dd715a00ed17ca.png',
uuid: '1a1b6a3e-6208-49ca-97fd-f9b8c077debb'
},
'bb0e90ae-9486-4e9c-b655-d2d19da08191': {
name: '我也要参与_btn',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/655c7b504297ef08f92766e86546bd38121ddbc5.png',
uuid: 'bb0e90ae-9486-4e9c-b655-d2d19da08191'
},
'2376ac41-0de0-45d4-a87d-bd34c7f9d093': {
name: '无感停车签约',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/60c8bfe4c96ea36fbedfaa190ba1a692d75fbc71.png',
uuid: '2376ac41-0de0-45d4-a87d-bd34c7f9d093'
},
'0e600712-ae0e-4e3a-b959-a70dab9a434d': {
name: '星海广场_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/f3cc370dce0c9d01d3ebc727f5fc106680b7de0b.png',
uuid: '0e600712-ae0e-4e3a-b959-a70dab9a434d'
},
'cde9bd56-a7a1-49e1-86c2-d32c7a1f115b': {
name: '星海广场_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/3a07096265fc3e448b80e93fb29ae0d2d01176e8.png',
uuid: 'cde9bd56-a7a1-49e1-86c2-d32c7a1f115b'
},
'cb0d1562-c08b-4fbd-9db1-746e8ef2426b': {
name: '星海湾跨海大桥_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/125ea674d4d07cd6edeea429d2cc45a23dd51c26.png',
uuid: 'cb0d1562-c08b-4fbd-9db1-746e8ef2426b'
},
'692e6b09-ad1a-4634-96d1-a781f49ce3f0': {
name: '星海湾跨海大桥_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/12b3e8b83862f5f693837b7ba85a0a50936aa6ce.png',
uuid: '692e6b09-ad1a-4634-96d1-a781f49ce3f0'
},
'8eba95ca-0b0a-43d6-9a40-e18e2b5c1834': {
name: '樱花园203_b',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/a67ef112aedc4bb5d6d4b3f451d0cce9f0f953be.png',
uuid: '8eba95ca-0b0a-43d6-9a40-e18e2b5c1834'
},
'e9fab1b0-c6d9-4e88-b89f-e793313afd3f': {
name: '樱花园203_c',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/05887d81004cd51db826ce0e74dcf4edb60d7395.png',
uuid: 'e9fab1b0-c6d9-4e88-b89f-e793313afd3f'
},
'70d22aee-634c-4bc1-9451-e8c5f0a16188': {
name: 'map_line',
ext: '.jpg',
url: '//yun.duiba.com.cn/spark/assets/b50016bb3213b77480867ffac315f4a8dc8f05e5.jpg',
uuid: '70d22aee-634c-4bc1-9451-e8c5f0a16188'
},
'cbdd0261-0483-4465-b3ab-d748d7e52454': {
name: '地图map',
ext: '.jpg',
url: '//yun.duiba.com.cn/spark/assets/351d65e92b9c00bfb41964ab61320bbd365feffe.jpg',
uuid: 'cbdd0261-0483-4465-b3ab-d748d7e52454'
},
'7ccf9d27-49e3-4c16-a4eb-370c82908fda': {
name: 'redflag',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/305634fb19d0c685f64967bbf91e8658a0f639a6.png',
uuid: '7ccf9d27-49e3-4c16-a4eb-370c82908fda'
},
'b46dfde5-2894-439b-985d-f1c180419b3a': {
name: '文案返回',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/604c93f1156a4bd614cae78f89de8d31c4afddec.png',
uuid: 'b46dfde5-2894-439b-985d-f1c180419b3a'
},
'fbe0f9f9-21ee-4606-9377-26de3c09509b': {
name: 'progress_main',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/af7e245e0a45bb65a7c9d2ee26d54134a06a4645.png',
uuid: 'fbe0f9f9-21ee-4606-9377-26de3c09509b'
},
'd7603b7b-eede-4be9-981e-35b46cfd15ca': {
name: 'backgroundpic',
ext: '.jpg',
url: '//yun.duiba.com.cn/spark/assets/08a318375382de9a219507aded3e77acf3fa8a42.jpg',
uuid: 'd7603b7b-eede-4be9-981e-35b46cfd15ca'
},
'09cd24ab-5a9a-4d16-8a5a-0b71c8d8a519': {
name: 'logopic',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/159a8cfbab652aea443bdcf828ad756558d752b9.png',
uuid: '09cd24ab-5a9a-4d16-8a5a-0b71c8d8a519'
},
'ade59c04-a6bb-49d1-a62a-e94adec785d1': {
name: 'titlepic',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/39db8fb870bc5cc793a1c72679dee1e77bb879c7.png',
uuid: 'ade59c04-a6bb-49d1-a62a-e94adec785d1'
},
'e01a55dd-e40f-4f87-a79a-1218f7d5cff0': {
name: '已领取地标好礼',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/325906332327758d483015051648844802a463ad.png',
uuid: 'e01a55dd-e40f-4f87-a79a-1218f7d5cff0'
},
'9a5d53c7-4c16-4582-a8ec-bd233a86506e': {
name: '置灰任务按钮新',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/60e57cae80cf04c120ea3d3084a6400b600e89c8.png',
uuid: '9a5d53c7-4c16-4582-a8ec-bd233a86506e'
},
'e7dae16c-52ec-4f01-95cf-f0a0b5c73245': {
name: '端外页背景',
ext: '.jpg',
url: '//yun.duiba.com.cn/spark/assets/84e3f4d27fc1610fc48a66afeecb275eeb777577.jpg',
uuid: 'e7dae16c-52ec-4f01-95cf-f0a0b5c73245'
},
'30d77bcb-f658-41c3-befd-b3a73bc5ad94': {
name: '端外页地图',
ext: '.png',
url: '//yun.duiba.com.cn/spark/assets/2870224e310ec0bb6b264aadb89149399ecfb8cd.png',
uuid: '30d77bcb-f658-41c3-befd-b3a73bc5ad94'
}
};
export default resList;
export const debounce = (fn, wait, immediate = false) => {
let timer
return function () {
if (timer) clearTimeout(timer)
if (immediate) {
// 如果已经执行过,不再执行
var callNow = !timer
timer = setTimeout(() => {
timer = null
}, wait)
if (callNow) {
fn()
}
} else {
timer = setTimeout(() => {
fn()
}, wait)
}
}
}
export const wechatShare = (data) => {
wx.miniProgram.postMessage({
data: {
title: data.title, // 标题
desc: data.desc, // 描述
imgUrl: data.imgUrl, // 图片
link: data.link // 链接
}
})
// ViewCtrl.showWin(Enum.Com.Comshareguidewin)
}
\ No newline at end of file
/**
* 截图方法封装
*
*
* 使用方法: npm install --save html2canvas
*
*
* import { createrPoster } from '../../libs/spark_createposter';
async createPoster()
{
let url = await createPoster("rule",{
x:window.innerWidth/4,
y:window.innerHeight/4,
width:window.innerWidth/2,
height:window.innerHeight/2
});
this.setState({
img_src:url
})
}
调用:this.createPoster();
jsx:
const {img_src=""} = this.state;
{img_src && <img src={img_src} style={{ width: '50vw', height: '50vw', position: "absolute", left: 0, top: 0 }} />}
*
*
* 注意事项:html2canvas有各种兼容问题
* 1:html2canvas 使用 1.0.0-rc.5 版本, ios 设备上会没有任何显示。then函数不会被回调也不会报错。请降级强制使用 1.0.0-rc.4 版本。(注意package.json 内的 "^1.0.0-rc.4" ^ 符号要去掉)
* 2:所有 dom 内的图片不能跨域,否则会导致白屏等奇怪问题。即使加上useCORS 与 allowTaint也无法解决,浏览器控制台直接会打印CORS相关报错。
* 3:生成的图片清晰度受原始图片的质量与width、height、windowWidth、windowHeight、scale 影响,请根据实际情况来调节这几个参数。
* 4:如果生成的base64图片过大,会导致图片无法显示,请相应减小3中的几个参数值。
* 5:不可将图片转换为Blob的形式,设备虽然可以正常显示图片,但是无法进行长按保存,保存下来的图片可能为一个空白的图像。
* 6:在指定dom来生成图片时,会受offsetTop与offsetLeft影响。例如 offsetTop 为 20 时,生成的图片顶部 20px(不一定为 20px)的距离会被所设置的backgroundColor(默认白色)颜色填充。这时,可使用 x与y参数进行校正。
* 7:如果一直出现跨域的情况,或者图片一直不出现的情况,可考虑将图片资源转换成 base64。例如就遇到二维码图片链接某些设备上一直不出现,则可以考虑接口直接返回二维码内容,由前端根据返回的内容来创建二维码。
* 8:当还出现一些奇奇怪怪的问题时,可尝试切换html2canvas版本。
*/
import html2Canvas from 'html2canvas';
/**
*
* @param {*} domId dom的id名,不传默认是body
* @param {*} options 重写的截图配置,具体参考html2canvas官方示例:http://html2canvas.hertzen.com/configuration
* @param {*} imgType 图片类型,默认是jpg
*/
const createPoster=async (domId,options={},imgType="image/jpeg")=>{
let dom = domId?document.getElementById(domId):document.body;
let defaultOptions={
useCORS:true,
scale:devicePixelRatio||1,
width:window.innerWidth,
height:window.innerHeight,
windowWidth:window.innerWidth,
windowHeight:window.innerHeight
}
options={
...defaultOptions,
...options
}
let canvas = await html2Canvas(dom,options).catch(err=>{console.error("截图失败:",err)})
return canvas.toDataURL(imgType);
}
export default createPoster;
\ No newline at end of file
/**
* 两种获取token封装(getPxToken和getDuibaToken)
*
*
*/
/**
* @param {} callback
*/
if (!document.getElementById("scriptkey")) {
const scriptkey = document.createElement('script')
scriptkey.async = 'async';
scriptkey.src = `getTokenKey`;
scriptkey.id = "scriptkey";
document.getElementsByTagName('head')[0].appendChild(scriptkey);
const scriptjs = document.createElement('script')
scriptjs.async = 'async';
scriptjs.id = "scriptjs";
scriptjs.src = `//yun.duiba.com.cn/js-libs/px-token/0.0.3/px-token.min.js`;
document.getElementsByTagName('head')[0].appendChild(scriptjs);
scriptjs.onload = () => {
}
}
const getPxToken = (callback) => {
// test - code
// callback('test - code')
// return
if (window.getPxToken) {
__getPxToken(callback);
return;
}
console.log("px-token.min.js尚未加载完成,请稍后再试")
// callback("waiting..."); //这里就不返回,不做处理
}
function __getPxToken(callback) {
if (window.getPxToken) {
window.getPxToken((e, token) => {
console.info('get px token:', e);
switch (e) {
case 'net error':
break;
case 'need reload':
break;
case 'need login':
break;
case 'state invalid':
break;
default:
callback(token);
}
})
}
}
/**
* @param {} resolve
* @param {} reject
* @param {} againOrderId
*/
const getDuibaToken=(resolve, reject,againOrderId)=>{
$.ajax({
url: '/ctoken/getToken',
type: 'post',
dataType: 'json',
success: function (res) {
if (res.success) {
var data = {
actId: CFG?.actId||"",
oaId: CFG?.oaId||""
};
eval(res.token);
var key = '';
data.token = window[key];
if (againOrderId) {
data.againOrderId = againOrderId;
}
resolve && resolve(data);
} else {
reject('systemError', { message: res.message });
}
},
error: function () {
reject('networkError');
}
});
}
module.exports={
getPxToken,
getDuibaToken
}
/**
* 接口轮询组件封装
*
* import startRolling from '../../libs/spark_requstrolling.js';
*
* async rollingTest() {
await startRolling(async() => {
return await API.getOrderStatusForThrough({});
}, 5, 1000, "data.lottery.id", 7489, (data) => {
console.log("success:", data);
}, (err) => {
console.log("error:", err);
});
}
调用:this.rollingTest();
*
*
*
* @param {*} fn API请求方法
* @param {*} count 轮询次数
* @param {*} delay 每次轮询的延迟时间(毫秒)
* @param {*} rollKey 断定轮询的条件 采用a.b.c.d结构,例如data.lottery.id
* @param {*} rollValue 断定轮询的值
* @param {*} resolve 成功回调
* @param {*} reject 失败回调
* @param {*} rollingIndex 起始次数,不用传,默认就好
*/
const startRolling = async (fn, count, delay, rollKey, rollValue, resolve, reject, rollingIndex = 1) => {
if (typeof fn !== "function") {
if(reject)reject()
return;
}
console.log("开始轮询,当前轮询次数",rollingIndex)
let result = await fn();
console.log(result);
if (result.success) {
rollingIndex = 1;
if (resolve) resolve(result);
} else {
if (rollKey) {
let rollKeyArr = rollKey.split(".");
let condition = result;
rollKeyArr.map(res => condition = condition[res])
if (condition == rollValue && rollingIndex < count) {
setTimeout(() => {
startRolling(fn, count, delay, rollKey, rollValue, resolve, reject, ++rollingIndex);
}, delay);
} else {
if (reject) reject(result);
}
} else {
if (reject) reject(result);
}
}
}
export default startRolling;
/**
* 微信分享组件封装
*
* 使用方法:
* import wxShare from '../../libs/spark_wxshare'
* wxShare(options)
*
*
* options 参数(可选)
* appId: (必填) String, 公众号的唯一标识
* timestamp: (必填) String, 生成签名的时间戳
* nonceStr: (必填) String, 生成签名的时间戳
* signature: (必填) String, 签名
* jsApiList: (可选) Array, 调用接口列表,默认 ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ']
* title: (可选) String, 分享标题,默认doucment.title
* desc: (可选) String, 分享描述,默认空
* shareUrl: (可选) String, 分享链接, 默认当前链接
* imgUrl: (可选) String, 分享图片,默认空
*
*/
const configBuilder = {
onMenuShareTimeline(config) {
return {
title: config.title,
desc: config.desc,
link: config.shareUrl,
imgUrl: config.imgUrl
}
},
onMenuShareAppMessage(config) {
return {
title: config.title,
desc: config.desc,
link: config.shareUrl,
imgUrl: config.imgUrl
}
},
onMenuShareQQ(config) {
return {
title: config.title,
desc: config.desc,
link: config.shareUrl,
imgUrl: config.imgUrl
}
}
}
export default function (config = {}) {
if (!/MicroMessenger/.test(window.navigator.userAgent)) {
return false
}
if(document.getElementById("jweixin"))
{
__handleReady(config);
return;
}
const script = document.createElement('script')
script.async = 'async';
script.id="jweixin";
script.src = `${document.location.protocol}//res.wx.qq.com/open/js/jweixin-1.2.0.js`
document.getElementsByTagName('head')[0].appendChild(script)
script.onload = () => {
__handleReady(config);
}
}
function __handleReady(config) {
if (typeof wx !== 'undefined') {
config.api = config.api || ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ']
// 默认值
config.imgUrl = config.imgUrl || window.location.protocol + '//mmbiz.qpic.cn/mmbiz_png/UUn1BJoX4UlEbDXKVFqFsSLcmmagib3oQ31FewyWkLfIbpHgw0xYv02zKrgQJNPGytLpudpib45dWZbC0hnawu9Q/0?wx_fmt=png'
config.shareUrl = config.shareUrl || window.location.href
config.desc = config.desc || ''
config.title = config.title || document.title
wx.config({
// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
debug: config.debug || false,
// 必填,公众号的唯一标识
appId: config.appid || config.appId || '',
// 必填,生成签名的时间戳
timestamp: config.timestamp || '',
// 必填,生成签名的随机串
nonceStr: config.nonceStr || '',
// 必填,签名,见附录1
signature: config.signature || '',
// 必填,需要使用的JS接口列表
jsApiList: [].concat(config.api)
})
wx.ready(() => {
// wx.checkJsApi({
// jsApiList: config.api
// })
config.api.forEach(key => {
wx[key](configBuilder[key](config))
})
})
}
}
export function formatTime (time) {
time = parseInt(time)
if (!time) return null
const yy = new Date(time).getFullYear()
const mm = new Date(time).getMonth() + 1
const dd = new Date(time).getDate()
const t1 = `${yy}.${mm}.${dd}`
// console.log(new Date(time).toLocaleDateString())
// const t1 = new Date(time).toLocaleDateString() + ''//获取年月日
// let t2 = new Date(time).getHours() + ''//获取时
// let t3 = new Date(time).getMinutes() + ''//获取分
// const t4 = new Date(time).getMilliseconds() + ''//获取秒
// if (parseInt(t2) < 10) t2 = '0'+t2
// if (parseInt(t3) < 10) t3 = '0'+t3
// time = t1 + ' ' + t2 + ':' + t3
time = t1
// console.log('time', time, t1 + ' ' + t2 + ':' + t3)
return time
}
\ No newline at end of file
const ViewCtrl = {
/**Toast提示 */
showToast: (t = '标题', msg = ['操作成功'], duration = 3000, disappear = 500) => {
duration = isNaN(duration) ? 2000 : duration
disappear = isNaN(disappear) ? 500 : disappear
var m = document.createElement('div')
m.style.height = '108px'
m.style.borderRadius = '15px'
m.style.fontWeight = '300'
m.style.width = '70%'
m.style.background = '#000'
m.style.opacity = '0.8'
m.style.position = 'fixed'
m.style.top = '34%'
m.style.left = '15%'
m.style.zIndex = '9999'
m.style.paddingTop = '14px'
m.style.paddingBottom = '6px'
var title = document.createElement('div')
title.innerHTML = t
title.style.lineHeight = '44px'
title.style.fontSize = '20px'
title.style.fontWeight = '400'
title.style.textAlign = 'center'
title.style.color = '#fff'
title.style.width = '100%'
m.appendChild(title)
var detail01 = document.createElement('div')
var detail02 = document.createElement('div')
detail01.innerHTML = msg[0]
detail01.style.lineHeight = detail02.style.lineHeight = '24px'
detail01.style.fontSize = detail02.style.fontSize = '16px'
detail01.style.textAlign = detail02.style.textAlign = 'center'
detail01.style.color = detail02.style.color = '#fff'
detail01.style.width = detail02.style.width = '100%'
if (msg.length == 2) {
detail02.innerHTML = msg[1]
m.appendChild(detail01)
m.appendChild(detail02)
} else {
detail01.style.lineHeight = '48px'
m.appendChild(detail01)
}
document.body.appendChild(m)
setTimeout(function () {
var d = disappear / 1000
m.style.webkitTransition = 'opacity ' + d + 's ease-in'
m.style.opacity = '0'
setTimeout(function () {
document.body.removeChild(m)
}, disappear)
}, duration)
},
showToast01: () => {
ViewCtrl.showToast('签到卡碎片功能', ['集齐3张签到卡碎片可兑换1张', '签到卡,单独的碎片无法使用'])
},
showToast02: () => {
ViewCtrl.showToast('签到卡功能', ['使用此卡,可多签到一个小站点'])
}
}
export default ViewCtrl
\ No newline at end of file
export function wechatShareInit () {
initWx(window.location.href)
}
function invokeWX() {
let share = {
title: window.__shareTitle,
desc: window.__shareText,
url: location.href,
imgUrl: window.__shareImgUrl
}
console.log('shareUrl: ', share.url)
wx.onMenuShareTimeline({
title: share.title,
desc: share.desc,
link: location.href,
imgUrl: share.imgUrl,
success: function () {
console.log("suc")
},
cancel: function () {
console.log("cancel")
}
})
wx.onMenuShareAppMessage({
title: share.title,
desc: share.desc,
link: location.href,
imgUrl: share.imgUrl,
success: function () {
},
cancel: function () {
}
})
}
function initWx (url) {
$.ajax({
type: 'get',
url: '/wechatShare/getShareInfo/v2',
data: {
wxdebug: false,
url: url
},
cache: false,
dataType: 'json',
success: function (res) {
if (!res.success) {
console.log("失败")
return
}
wx.config({
debug: false,
appId: res.wxappid,
timestamp: res.wxtimestamp,
nonceStr: res.wxnonceStr,
signature: res.wxsignature,
jsApiList: [ 'checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage' ]
})
wx.error(function (res) {
console.error("wx error", res)
alear("失败")
})
wx.ready(function () {
invokeWX()
})
},
error: function (err) {
console.log('ajax wechat fail')
}
})
}
\ No newline at end of file
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