Authored by htoooth

add share

... ... @@ -12,7 +12,11 @@ function index(req, res, next) {
req.ctx(YoLuckService).index(type, uid).then(result => {
if (result.error) {
return next(result.error);
if (type === YOLUCK_LIST_TYPE.joined && result.error === 401) {
return res.redirect(`/signin.html?refer=//m.yohobuy.com/activity/yoluck/index.html?type=${YOLUCK_LIST_TYPE.joined}`);
} else {
return next(result.error);
}
}
res.render('yoluck/list', {
... ... @@ -38,8 +42,8 @@ function nextPage(req, res, next) {
req.ctx(YoLuckService).getList({page, type, uid}).then(result => {
if (result.error) {
if (result.error === 401) {
return res.json({code: 401, message: '用户未登录'});
if (result.error === 400) {
return res.json({code: 400, message: '用户未登录'});
} else {
return res.json({code: 404, message: '参数错误'});
}
... ... @@ -74,7 +78,7 @@ function detail(req, res, next) {
function getCode(req, res, next) {
const shareUid = req.body.shareUid;
const actPrizeId = req.body.actPrizeId;
const actPrizeId = req.params.id;
const uid = req.user.uid;
if (!actPrizeId) {
... ...
... ... @@ -156,7 +156,7 @@ class YoLuckApi extends global.yoho.BaseModel {
* @returns {Promise}
*/
fetchCode({shareUid, uid, actPrizeId, userThumb, userName}) {
return yoLuckApi.post('/code/gain', {
return yoLuckApi.post(MODULE + '/code/gain', {
shareUid,
uid,
actPrizeId,
... ... @@ -181,6 +181,18 @@ class YoLuckApi extends global.yoho.BaseModel {
});
}
_getUsreInfo(uid) {
return this.get({
data: {
method: 'app.passport.profile',
uid: uid
},
param: {
code: 200
}
});
}
}
module.exports = YoLuckApi;
... ...
const YoLuckApi = require('./yoluck-api');
const _ = require('lodash');
const logger = global.yoho.logger;
const YOLUCK_LIST_TYPE = {
running: 0,
... ... @@ -54,9 +55,7 @@ class YoLuckService extends global.yoho.BaseModel {
]);
if (r1.error) {
return {
error: '发生错误,请刷新'
};
return r1;
}
const desc = {
... ... @@ -134,7 +133,7 @@ class YoLuckService extends global.yoho.BaseModel {
if (type === YOLUCK_LIST_TYPE.joined) {
if (!uid) {
return {
error: 401,
error: 400,
};
}
... ... @@ -407,9 +406,9 @@ class YoLuckService extends global.yoho.BaseModel {
async getCode({shareUid, uid, actPrizeId}) {
try {
// 去获得用户的参数
let userThumb = '';
let userName = '';
let userInfo = await this.api._getUsreInfo(uid);
let userThumb = userInfo.nickname || '';
let userName = userInfo.head_ico || '';
const result = await this.api.fetchCode({
shareUid,
... ... @@ -420,6 +419,7 @@ class YoLuckService extends global.yoho.BaseModel {
});
if (result.code !== 200) {
logger.error(result);
return {
error: '错误'
}
... ...
... ... @@ -356,9 +356,10 @@ router.post('/have-gain/promo/:id', auth, haveGain.promoSubmit);
// yoluck
router.get('/yoluck/index.html', yoluck.index);
router.get('/yoluck/mylist.html', auth, yoluck.index);
router.get('/yoluck/next', yoluck.nextPage);
router.post('/yoluck/code', auth, yoluck.getCode);
router.get('/yoluck/:id.html', yoluck.detail);
router.post('/yoluck/:id.html', auth, yoluck.getCode);
module.exports = router;
... ...
... ... @@ -18,10 +18,11 @@
{{/if}}
<div class="action-bar-wrap">
{{log actionStatus}}
{{> yoluck/action-bar status=actionStatus num=myPrizeCount actPrizeId=actPrizeId}}
</div>
<div class="foot"></div>
<div class="js-luck-alert">
</div>
{{/result}}
... ...
... ... @@ -18,11 +18,13 @@
<!--头部-->
{{#ifcond @index '===' 0}}
<div class="js-panel-header">
<img
src="http://img11.static.yhbimg.com/yhb-img01/2018/12/07/15/0188307712613ce043d4b68a94761ee1ff.gif"
alt="">
</div>
{{#ifcond list.length '!==' 0}}
<div class="js-panel-header">
<img
src="http://img11.static.yhbimg.com/yhb-img01/2018/12/07/15/0188307712613ce043d4b68a94761ee1ff.gif"
alt="">
</div>
{{/ifcond}}
{{/ifcond}}
<!--数据部-->
... ...
... ... @@ -9,29 +9,29 @@
{{/ifcond}}
{{#ifcond status '===' 2}}
<div class="action-item ok js-join">
<div class="action-item ok js-join auth">
0元参加抽奖
</div>
{{/ifcond}}
{{#ifcond status '===' 3}}
<div class="action-item ok js-share" >
<a class="action-item ok js-share auth" >
分享得更多抽奖码,增加中奖率
</div>
</a>
{{/ifcond}}
{{#ifcond status '===' 4}}
<a class="action-item confirm" href="/activity/yoluck/index.html?type=3">
<a class="action-item confirm auth" href="/activity/yoluck/mylist.html?type=3">
我的抽奖码({{num}})
</a>
{{/ifcond}}
{{#ifcond status '===' 5}}
<a class="action-item confirm" href="/activity/yoluck/index.html?type=3">
<a class="action-item confirm auth" href="/activity/yoluck/mylist.html?type=3">
我的抽奖码({{num}})
</a>
<div class="action-item ok">
<div class="action-item ok js-fellow">
查看开奖结果
</div>
{{/ifcond}}
... ...
<div class="fellow-bar-comp">
<div class="fellow-bar">
<div class="title">关注有货公众号“潮流有货”,开奖后查看中奖结果</div>
<div class="btn">去关注</div>
<div class="btn js-fellow">去关注</div>
</div>
</div>
... ...
<div class="modal-mask"></div>
<div class="modal-dialog">
<div class="modal-dialog-bg"></div>
<div class="code-alert">
<text class="code-title">参加抽奖成功</text>
<div class="code-bg">
<div class="title">你的抽奖码是</div>
<div class="code">{{code}}</div>
</div>
<a class="share">分享一下,中奖概率立马double</a>
<div class="share-desc">1个好友参加=1个抽奖码=中奖几率UP!</div>
</div>
</div>
... ...
<div class="prize-item-comp">
<div class="prize-item">
<div class="prize-item js-prizeitem" data-id="{{act_prize_id}}">
<img class="product-image" src="{{cover_img}}" alt="">
<div class="content">
... ... @@ -17,7 +17,7 @@
{{/ifcond}}
{{#ifcond status '===' 4}}
<div class="btn">查看中奖信息</div>
<div class="btn js-fellow">查看中奖信息</div>
{{/ifcond}}
{{#ifcond status '===' 5}}
... ... @@ -25,7 +25,14 @@
{{/ifcond}}
{{#isEqualOr status 1 2 6}}
<div class="btn more">获得更多抽奖码</div>
<div class="btn more js-share"
data-img="{{cover_img}}"
data-name="{{name}}"
data-price="{{price}}"
data-id="{{act_prize_id}}"
>
获得更多抽奖码
</div>
{{/isEqualOr}}
</div>
... ...
... ... @@ -21,7 +21,15 @@
<img class="product_image" src="{{image2 product.cover_img q=60}}"/>
</div>
<div class="product_name">{{product.name}}</div>
<div class="product_name"
data-id="{{product.actPrizeId}}"
data-name="{{product.name}}"
data-img="{{image2 product.cover_img q=60}}"
data-price="{{product.price}}"
>
{{product.name}}
</div>
<div class="product_lucky_bg">
<div class="product_lucky">
<text>抽奖价 ¥
... ...
... ... @@ -13,9 +13,9 @@ const isTest = process.env.NODE_ENV === 'test3';
const domains = {
api: 'http://api.yoho.cn/',
// api: 'http://api.yoho.cn/',
// service: 'http://service.yoho.cn/',
yoLuck: 'https://action.yoho.cn',
// yoLuck: 'https://action.yoho.cn',
// liveApi: 'http://testapi.live.yohops.com:9999/',
// singleApi: 'http://api-test3.yohops.com:9999/',
... ... @@ -26,11 +26,12 @@ const domains = {
// platformApi: 'http://172.16.6.210:8088/',
// api: 'http://api-test3.dev.yohocorp.com/',
api: 'http://api-test3.dev.yohocorp.com/',
service: 'http://api-test3.dev.yohocorp.com/',
liveApi: 'http://testapi.live.yohops.com:9999/',
singleApi: 'http://api-test3.dev.yohocorp.com/',
ufo: 'http://java-yohoufo-fore.test3.ingress.dev.yohocorp.com/ufo-gateway/',
yoLuck: 'http://yoho-activity-platform.test3.ingress.dev.yohocorp.com',
imSocket: 'wss://imsocket.yohobuy.com:443',
imCs: 'https://imhttp.yohobuy.com/api',
... ...
... ... @@ -134,6 +134,7 @@
"workbox-sw": "^2.1.2",
"workbox-webpack-plugin": "^3.4.1",
"yo-cli": "=2.1.9",
"yoho-activity-sdk": "^1.1.0",
"yoho-cookie": "^1.2.0",
"yoho-fastclick": "^1.0.6",
"yoho-hammer": "^2.0.8",
... ...
<div class="modal-mask"></div>
<div class="modal-dialog">
<div class="modal-dialog-bg"></div>
<div class="code-alert">
<text class="code-title">参加抽奖成功</text>
<div class="code-bg">
<div class="title">你的抽奖码是</div>
<div class="code">{{code}}</div>
</div>
<a class="share">分享一下,中奖概率立马double</a>
<div class="share-desc">1个好友参加=1个抽奖码=中奖几率UP!</div>
</div>
</div>
... ...
<div class="prize-item-comp">
<div class="prize-item">
<div class="prize-item js-prizeitem" data-id="{{act_prize_id}}">
<img class="product-image" src="{{cover_img}}" alt="">
<div class="content">
... ... @@ -8,24 +8,31 @@
</div>
<div class="product-name">{{name}}</div>
{{#ifcond status '===' 4}}
<div class="btn" catchtap="goFellow">查看中奖信息</div>
{{#ifcond status '===' 0}}
<div class="btn">活动结束</div>
{{/ifcond}}
{{#ifcond status '===' 3}}
<div class="btn">等待开奖中</div>
{{/ifcond}}
{{#ifcond status '===' 5}}
<div class="btn">人数不足 活动结束</div>
{{#ifcond status '===' 4}}
<div class="btn js-fellow">查看中奖信息</div>
{{/ifcond}}
{{#ifcond status '===' 0}}
<div class="btn">活动结束</div>
{{#ifcond status '===' 5}}
<div class="btn">人数不足 活动结束</div>
{{/ifcond}}
{{#is-equal-or status 1 2 6}}
<div class="btn more">获得更多抽奖码</div>
<div class="btn more js-share"
data-img="{{cover_img}}"
data-name="{{name}}"
data-price="{{price}}"
data-id="{{act_prize_id}}"
>
获得更多抽奖码
</div>
{{/is-equal-or}}
</div>
... ...
import 'scss/activity/yoluck/yoluck-detail.page.scss';
let Swiper = require('yoho-swiper');
let timeCountDownTpl = require('hbs/activity/yoluck/time-countdown.hbs');
let luckAlertTpl = require('hbs/activity/yoluck/luck-alert.hbs');
let formatCountDown = require('./yoluck/formatCountDown');
let yoho = require('js/yoho-app');
let YolukcApi = require('./yoluck/api');
let api = new YolukcApi();
let tip = require('js/plugin/tip');
let yoSdk = require('yoho-activity-sdk');
let Clipboard = require('clipboard');
let shareData = require('./yoluck/share');
require('js/plugin/modal.alert');
let store = {
running: false,
shareUid: window.queryString['shareUid'] || ''
};
new Swiper('.swiper-container', {
direction: 'vertical',
... ... @@ -14,6 +26,54 @@ new Swiper('.swiper-container', {
autoplay: 3000
});
var luckAlert = {
$el: $('.js-luck-alert'),
init() {
this.bindEvent();
},
show(code) {
if (this.$el.find('.modal-mask').length === 0) {
this.$el.html(luckAlertTpl({
code
}));
} else {
this.$el.show();
}
},
hide() {
this.$el.hide();
},
bindEvent() {
this.$el.on('click', '.modal-mask', () => {
this.hide();
reload();
return true;
});
this.$el.on('click', '.share', function() {
share();
});
}
};
let clipboard = new Clipboard('.js-fellow', {
text: function() {
return '潮流有货';
}
});
clipboard.on('success', function(e) {
fellow();
e.clearSelection();
});
function reload() {
location = location;
}
luckAlert.init();
yoSdk.auth();
setInterval(() => {
let $countdown = $('.product_countdown');
... ... @@ -25,16 +85,65 @@ setInterval(() => {
}));
}, 1000);
// 分享弹框
$('.js-share').click(function() {
if (yoho && yoho.isApp) {
yoho.invokeMethod('go.showshareaction', {
shareType: 'yoluck',
function share() {
let $product= $('.product-name');
let name = $product.data('name');
let img = $product.data('img');
let price = $product.data('price');
let id = $product.data('id');
yoSdk.getUser().then(user => {
let share = shareData({
name: name,
imgUrl: img,
price: price,
shareUid: user.uid,
actPrizeId: id
});
}
});
if (yoho.isApp) {
yoho.invokeMethod('go.showshareaction', share.app);
} else {
yoSdk.wxShare({
...share.h5,
success() {
tip.show('分享成功', 3500);
}
});
}
});
}
function fellow() {
$.yAlert({
content: `<div>公众号<span style="font-weight: bolder">“潮流有货”</span>已经复制成功,</div><div>打开微信搜索去添加吧~</div>`
});
}
// 助力
$('.js-join').click(function() {
$('.action-bar-comp').on('click', '.js-join', function() {
if (store.running) {
return;
}
store.running = true;
api.getCode(store.shareUid).then(result => {
if (result.code === 200) {
luckAlert.show(result.data.prizeCode);
} else {
if (result.code === 400) {
yoSdk.goLogin();
} else {
tip.show(result.message, 3500);
}
}
}).always(() => {
store.running = false;
});
});
// 分享
$('.action-bar-comp').on('click', '.js-share', function() {
share();
});
... ...
... ... @@ -6,6 +6,11 @@ let productTpl = require('hbs/activity/yoluck/product-item.hbs');
let prizeListTpl = require('hbs/activity/yoluck/prize-list.hbs');
let timeCountDownTpl = require('hbs/activity/yoluck/time-countdown.hbs');
let formatCountDown = require('./yoluck/formatCountDown');
let yoSdk = require('yoho-activity-sdk');
let yoho = require('js/yoho-app');
require('js/plugin/modal.alert');
const tip = require('js/plugin/tip');
const shareData = require('./yoluck/share');
var footerText = ['内容加载中...', '暂无更多内容'];
... ... @@ -92,8 +97,8 @@ function fetchPage(page, index) {
return api.getPage(page, index)
.then(result => {
if (result.code !== 200) {
if (result.code === 401) {
return window.location.href = '/signin.html';
if (result.code === 400) {
return yoSdk.goLogin();
}
return;
}
... ... @@ -158,6 +163,42 @@ function onReachBottom(type) {
fetchPage(page, store.tabIndex);
}
function fellow() {
$.yAlert({
content: `<div>微信搜索公众号</div>
<div><span style="font-weight: bolder;">“潮流有货”</span>并关注,发送</div>
<div>关键词<span style="font-weight: bolder;">“开奖”</span>查询中奖信息</div>`
});
}
function share($el) {
let name = $el.data('name');
let img = $el.data('img');
let price = $el.data('price');
let id = $el.data('id');
yoSdk.getUser().then(user => {
let share = shareData({
name,
imgUrl: img,
price: price,
actPrizeId: id,
shareUid: user.uid
});
if (yoho.isApp) {
yoho.invokeMethod('go.showshareaction', share.app);
} else {
yoSdk.wxShare({
...share.h5,
success() {
tip.show('分享成功', 3500);
}
});
}
})
}
bus$.add(onTabClick);
bus$.add(onReachBottom);
... ... @@ -174,6 +215,22 @@ $tabpanel.on('click', '.js-tab', function() {
bus$.fire('tabClick', index);
});
$tabpanel
.find('.prize-item-comp')
.on('click', '.js-prizeitem', function() {
let id = $(this).data('id');
yoho.goH5(`/activity/yoluck/${id}.html`);
return true;
})
.on('click', '.js-share', function() {
share($(this));
return true;
})
.on('click', '.js-fellow', function() {
fellow();
return true;
});
$(window).on('scroll', function() {
if ((($(document).height() - ($(window).height() + $(window).scrollTop())) / $(document).height()) === 0) {
bus$.fire('reachBottom');
... ...
import 'scss/activity/yoluck/yoluck-mylist.page.scss';
let $ = require('yoho-jquery');
let Api = require('./yoluck/api');
let prizeItemTpl = require('hbs/activity/yoluck/prize-item.hbs');
var footerText = ['内容加载中...', '暂无更多内容'];
var store = {
list: [{
page: 0,
}, {
page: 0,
}],
tabIndex: 0,
footText: '',
running: false
};
var api = new Api();
var bus$ = $.Callbacks();
var $tabpanel = $('.js-tab-comp');
var tabpanelStore = {
tabs: [],
key: 0,
nodes: [],
currentKey: 0,
footer: null
};
function initStore() {
// 初始化为第一页
store.list[store.tabIndex].page = 1;
}
tabpanelStore.nodes = $tabpanel.find('.js-panel');
tabpanelStore.tabs = $tabpanel.find('.js-tab');
tabpanelStore.footer = $tabpanel.find('.list-foot-blank');
function updateFooter(msg) {
tabpanelStore.footer.text(msg);
}
function updateTabs() {
tabpanelStore.nodes.map(function(index) {
let $this = $(this);
let active = index === tabpanelStore.key;
if (active) {
$this.addClass('active').removeClass('inactive');
} else {
$this.addClass('inactive').removeClass('active');
}
});
tabpanelStore.tabs.map(function() {
let $this = $(this);
let active = $this.data('index') === tabpanelStore.key;
if (active) {
$this.addClass('active').removeClass('inactive');
} else {
$this.addClass('inactive').removeClass('active');
}
})
}
function fetchPage(page, index) {
if (store.running) {
return;
}
store.running = true;
page++;
updateFooter(footerText[0]);
return api.getMyPage(page, index)
.then(result => {
if (result.code !== 200) {
return;
}
if (result.data.length === 0) {
return;
}
let $node = tabpanelStore.nodes.eq(index);
let $products = result.data.map(r => {
return prizeItemTpl(r);
});
store.list[index].page = page;
$node.append($products);
})
.always(() => {
updateFooter(footerText[1]);
store.running = false;
});
}
function onTabClick(type, index) {
if (type !== 'tabClick') {
return;
}
store.tabIndex = index;
let page = store.list[index].page;
// 点击未开始则下走
if (page !== 0) {
return;
}
// 下一页
//page = 0
fetchPage(page, store.tabIndex);
}
function onReachBottom(type) {
if (type !== 'reachBottom') {
return;
}
let index = store.tabIndex;
let page = store.list[index].page;
if (page === 0) {
return;
}
// 下一页
// page != 0
fetchPage(page, store.tabIndex);
}
bus$.add(onTabClick);
bus$.add(onReachBottom);
$tabpanel.on('click', '.js-tab', function() {
let $tab = $(this);
let index = $tab.data('index');
if (index === tabpanelStore.key) {
return;
}
tabpanelStore.key = index;
updateTabs();
bus$.fire('tabClick', index);
});
$(window).on('scroll', function() {
if ((($(document).height() - ($(window).height() + $(window).scrollTop())) / $(document).height()) === 0) {
bus$.fire('reachBottom');
}
});
initStore();
... ... @@ -15,8 +15,8 @@ class Api {
return $.get(this.url + '/home/next', {page, type});
}
getCode() {
return $.post(this.url + '/code', {})
getCode(shareUid) {
return $.post('', {shareUid})
}
}
... ...
function miniQrcode(shareUid, actPrizeId) {
return `https://api.yoho.cn/wechat/miniapp/img-check.jpg?param=${JSON.stringify({
shareUid, actPrizeId
})}&miniQrType=16&miniapp_type=29`;
}
function miniPath(shareUid, actPrizeId) {
return `pages/zeroSell/detail?actPrizeId=${actPrizeId}&shareUid=${shareUid}`;
}
function h5Path(shareUid, actPrizeId) {
return `//m.yohobuy.com/activity/yoluck/${actPrizeId}.html?shareUid=${shareUid}`;
}
function shareData({name, imgUrl, price, shareUid, actPrizeId}) {
return {
app: {
shareType: 'yoluck',
title: name,
imgUrl: imgUrl,
market_price: price,
miniProgramUrl: miniPath(shareUid, actPrizeId),
miniProgramQCodeUrl: miniQrcode(shareUid, actPrizeId)
},
h5: {
title: name,
imgUrl: imgUrl,
desc: '限时抽奖活动',
link: h5Path(shareUid, actPrizeId),
}
}
}
module.exports = shareData;
... ...
.modal-mask {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
background: #000;
opacity: 0.5;
overflow: hidden;
z-index: 19;
}
.modal-dialog {
height: 380px;
width: 550px;
position: fixed;
top: 40%;
left: 50%;
margin-right: -50%;
transform: translate(-50%, -50%);
z-index: 20;
border-radius: 10px;
overflow: visible;
display: flex;
flex-direction: column;
}
.modal-dialog-bg {
width: 550px;
height: 800px;
background: url('img/activity/yoluck/alert_bg@3x.png');
background-size: cover;
}
.code-alert {
text-align: center;
color: black;
margin-top: -400px;
display: flex;
flex-direction: column;
align-items: center;
}
.code-title {
margin-top: 30px;
}
.code-bg {
margin-top: 80px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
.title {
font-size: 28px;
color: #444444;
}
.code {
min-width: 192px;
height: 50px;
font-size: 28px;
font-weight: bolder;
line-height: 50px;
text-align: center;
border: 1px solid black;
margin-left: 20px;
}
.share {
font-size: 28px;
color: #FFFFFF;
background: #FF4C00;
border-radius: 28px;
width: 460px;
height: 80px;
line-height: 80px;
margin-top: 90px;
vertical-align: center;
}
.share-desc {
font-size: 20px;
color: #B0B0B0;
font-family: PingFangSC-Medium;
margin-top: 10px;
}
.info {
color: #D0021B !important;
}
.error-alert {
text-align: center;
color: black;
margin-top: 40px;
}
.error-title {
font-size: 40px;
color: #D0021B ;
margin-bottom: 30px;
}
.error-content {
font-size: 30px;
padding: 0 100px;
}
... ...
... ... @@ -7,6 +7,8 @@
@import "avatar";
@import "~scss/layout/swiper";
@import "time-countdown";
@import "luck-alert";
@import "~scss/layout/modal";
.line {
height: 20px;
... ... @@ -34,14 +36,14 @@
position: fixed;
width: 100%;
top: 0;
z-index: 999;
z-index: 10;
}
.action-bar {
position: fixed;
width: 100%;
bottom: 0;
z-index: 999;
z-index: 10;
}
.foot {
... ...
... ... @@ -4,6 +4,7 @@
@import "prize-item";
@import "tabs";
@import "time-countdown";
@import "~scss/layout/modal";
.product {
display: block;
... ...
@import "product-item-header";
@import "product-item-status";
@import "tabs";
@import "fellow-bar";
@import "prize-item";
.product {
display: block;
width: 100%;
text-align: center;
margin-bottom: 80px;
}
.bottom-bar {
position: fixed;
left: 0;
bottom: 0;
height: 88px;
width: 100%;
background-color: white;
text-align: center;
border-top: 1px solid #ccc;
font-size: 28px;
line-height: 88px;
}
.tabs-class {
border-bottom: 1px solid #E0E0E0;
}
.list-top-blank,
.list-foot-blank,
.blank
{
width: 100%;
height: 88px;
text-align: center;
line-height: 88px;
font-size: 30px;
color: #ccc;
}
.list-foot-blank
{
width: 100%;
height: 88px;
text-align: center;
line-height: 88px;
font-size: 30px;
color: #ccc;
}
.list-head-blank {
width: 100%;
height: 156px
}
.fellow-bar {
position: fixed;
top: 90px;
left: 0;
width: 100%;
z-index: 2;
}
... ... @@ -12752,6 +12752,11 @@ yo-cli@=2.1.9:
webpack-merge "^4.1.1"
yargs "^10.0.3"
yoho-activity-sdk@^1.1.0:
version "1.1.0"
resolved "http://npm.yohops.com/yoho-activity-sdk/-/yoho-activity-sdk-1.1.0.tgz#1903ba8f71c5baf4d70ff8768ab10d4b8c4495ea"
integrity sha512-gtBIQiB9HAWwtMyEj19860QzODUpgyo4MxGWZUg5ZA1/zTQWlF522gabahLEAHcbhbi3KEz2biJYzSzetQjmfQ==
yoho-cookie@^1.2.0:
version "1.2.0"
resolved "http://npm.yohops.com/yoho-cookie/-/yoho-cookie-1.2.0.tgz#e8600ff0fcf316e8a9f88d32cd263396dc7e5f22"
... ...