Authored by 梁志锋

Merge remote-tracking branch 'remotes/origin/feature/ticket'

Showing 40 changed files with 1178 additions and 411 deletions
<?php
namespace Configs;
/**
* 门票配置文件
*/
class TicketsConfig
{
//展览票(单日票)skn
const SINGLE_TICKETS_SKN = 51335912;
//套票skn
const PACKAGE_TICKETS_SKN = 51335908;
}
... ...
... ... @@ -56,12 +56,8 @@ class OptData
$param['client_secret'] = Sign::getSign($param);
if ($opt === 'cancel') {
// return Yohobuy::yarClient(SERVICE_URL . 'shops/service/v1/favorite/', 'addUidProductFav', array($uid, $skn));
return Yohobuy::get(SERVICE_URL.'shops/service/v1/favorite/addUidProductFav', $param);
} else {
// return Yohobuy::yarClient(SERVICE_URL . 'shops/service/v1/favorite/', 'delUidProductFav', array($uid, $skn));
return Yohobuy::get(SERVICE_URL.'shops/service/v1/favorite/delUidProductFav', $param);
}
}
... ... @@ -82,12 +78,8 @@ class OptData
$param['client_secret'] = Sign::getSign($param);
if ($opt === 'cancel') {
// return Yohobuy::yarClient(SERVICE_URL . 'guang/service/v2/praise', 'cancelPraise', array($id, $udid));
return Yohobuy::get(SERVICE_URL.'guang/api/v2/praise/cancel', $param);
} else {
// return Yohobuy::yarClient(SERVICE_URL . 'guang/service/v2/praise', 'setPraise', array($id, $udid));
return Yohobuy::get(SERVICE_URL.'guang/api/v2/praise/setPraise', $param);
}
}
... ... @@ -108,12 +100,8 @@ class OptData
$param['client_secret'] = Sign::getSign($param);
if ($opt === 'cancel') {
// return Yohobuy::yarClient(SERVICE_URL . 'guang/service/v2/favorite/', 'cancelFavorite', array($id, $uid));
return Yohobuy::get(SERVICE_URL.'guang/api/v1/favorite/cancelFavorite', $param);
} else {
// return Yohobuy::yarClient(SERVICE_URL . 'guang/service/v2/favorite/', 'setFavorite', array($id, $uid));
return Yohobuy::get(SERVICE_URL.'guang/api/v1/favorite/setFavorite', $param);
}
}
... ...
... ... @@ -145,8 +145,6 @@ class PlusstarData
if (!empty($cached)) {
// 判断用户是否已收藏
if ($isUidOk) {
// $getUidBrandFav = Yohobuy::yarClient(SERVICE_URL . self::URI_BRANDINFO_FAVORITE, 'getUidBrandFav', array($uid, $cached['getBrandInfo']['data']['brand_id']), false, 1000);
$param = Yohobuy::param();
$param['uid'] = $uid;
$param['brandId'] = $cached['getBrandInfo']['data']['brand_id'];
... ... @@ -154,21 +152,16 @@ class PlusstarData
$param['private_key'] = Yohobuy::$privateKeyList[$clientType];
$param['client_secret'] = Sign::getSign($param);
$getUidBrandFav = Yohobuy::get(SERVICE_URL . self::URI_BRANDINFO_FAVORITE . 'getUidBrandFav', $param);
// file_put_contents('../../../../../../Desktop/app/n/getUidBrandFav.txt', var_export($getUidBrandFav, true));
if (isset($getUidBrandFav['code']) && $getUidBrandFav['code'] == 200) {
$cached['getUidBrandFav'] = true;
}else{
//$cached['getUidBrandFav'] = false;
$getUidBrandFavResult = false;
}
}
}else{
$getUidBrandFavResult = false;
//$cached['getUidBrandFav'] = false;
}
//return $cached;
if (!empty($cached)) {
$cached['getUidBrandFav'] = $getUidBrandFavResult;
... ... @@ -177,17 +170,12 @@ class PlusstarData
}
// 品牌详情信息
// $brandInfo = Yohobuy::yarClient(SERVICE_URL . self::URI_BRANDINFO_PLUSSTAR, 'getBrandInfo', array(array('id' => $id)), 3600); // 缓存1小时
// file_put_contents('../../../../../../Desktop/app/o/getbrandinfo.txt', var_export($brandInfo, true));
// 品牌详情信息
$param = Yohobuy::param();
$param['id'] = $id;
$param['client_type'] = $clientType;
$param['private_key'] = Yohobuy::$privateKeyList[$clientType];
$param['client_secret'] = Sign::getSign($param);
$brandInfo = Yohobuy::get(SERVICE_URL . self::URI_BRANDINFO_PLUSSTAR_NEW . 'getbrandinfo', $param, 3600);
// file_put_contents('../../../../../../Desktop/app/n/getbrandinfo.txt', var_export($brandInfo, true));
if (!isset($brandInfo['data']['brand_id'])) {
// 再尝试获取二级缓存(master), 有数据则直接返回.
... ... @@ -213,7 +201,6 @@ class PlusstarData
$article = Yohobuy::get(SERVICE_URL.self::URI_BRANDINFO_ARTICLE.'getArticleByBrand', $param);
$result['getArticleByBrand'] = empty($article['data']) ? array() : $article['data'];
// file_put_contents('../../../../../../Desktop/app/n/getArticleByBrand.txt', var_export($result['getArticleByBrand'], true));
// 是否收藏店铺
$param = Yohobuy::param();
... ...
... ... @@ -477,4 +477,52 @@ class CartData
return Yohobuy::get(API_URL, $param);
}
/**
* 校验电子票
* @param int $uid
* @param int $productSku
* @param int $buyNumber
* @param int $useYohoCoin
* @param int $yohoCoinMode 1:使用yoho币;0:不使用yoho币
* @author sefon 2016-7-2 18:12:30
* @return array
*/
public static function checkTickets ($uid, $productSku, $buyNumber, $useYohoCoin = 0, $yohoCoinMode = true)
{
$param = Yohobuy::param();
$param['method'] = 'app.shopping.ticket';
$param['uid'] = $uid;
$param['product_sku'] = $productSku;
$param['buy_number'] = $buyNumber;
if (!$yohoCoinMode) {
$param['yoho_coin_mode'] = 0;
}
$param['use_yoho_coin'] = $useYohoCoin;
$param['client_secret'] = Sign::getSign($param);
return Yohobuy::get(API_URL, $param);
}
/**
* 电子票下单
* @param int $uid
* @param int $productSku
* @param int $buyNumber
* @param int $useYohoCoin
* @param int $qhyUnion
* @author sefon 2016-7-2 18:12:30
* @return array
*/
public static function submitTicket ($uid, $productSku, $buyNumber, $mobile, $useYohoCoin = 0, $qhyUnion = '')
{
$param = Yohobuy::param();
$param['method'] = 'app.shopping.submitTicket';
$param['uid'] = $uid;
$param['product_sku'] = $productSku;
$param['buy_number'] = $buyNumber;
$param['mobile'] = $mobile;
$param['use_yoho_coin'] = $useYohoCoin;
$param['qhy_union'] = $qhyUnion;
$param['client_secret'] = Sign::getSign($param);
return Yohobuy::get(API_URL, $param);
}
}
... ...
... ... @@ -84,7 +84,12 @@ class OrderData
$param = Yohobuy::param();
$param['method'] = 'app.SpaceOrders.detail';
$param['order_code'] = $orderCode;
$param['uid'] = $uid;
//异步回调无uid
if (!empty($uid)) {
$param['uid'] = $uid;
}
$param['session_key'] = $sessionKey;
$param['client_secret'] = Sign::getSign($param);
... ...
... ... @@ -2,6 +2,7 @@
namespace Plugin;
use Configs\TicketsConfig;
use Plugin\DataProcess\CouponFloorProcess;
/**
... ... @@ -630,9 +631,10 @@ class Helpers
* @param array $orderGoods 订单
* @param int $count 计订单件数
* @param bool $haveLink 控制是否需要商品链接
* @param bool $tickets 门票
* @return array $arr 处理之后的订单商品数据
*/
public static function formatOrderGoods($orderGoods, &$count = 0, $haveLink = false)
public static function formatOrderGoods($orderGoods, &$count = 0, $haveLink = false, $tickets = false)
{
$arr = array();
... ... @@ -659,6 +661,16 @@ class Helpers
}
// 累计购买数
$count += intval($vo['buy_number']);
//门票
if ($tickets) {
//展览票不显示区域
if ($vo['product_skn'] == TicketsConfig::SINGLE_TICKETS_SKN) {
unset($arr[$key]['size']);
}
$arr[$key]['tickets'] = true;
}
}
return $arr;
... ...
... ... @@ -6,6 +6,7 @@ use Plugin\Pay\weixin\lib\WxPayApi;
use Plugin\Pay\weixin\lib\WxPayConfig;
use Plugin\Pay\weixin\lib\WxPayException;
use Plugin\Pay\weixin\lib\WxPayJsApiPay;
use Plugin\UdpLog;
/**
*
... ... @@ -115,8 +116,17 @@ class JsApiPay
//运行curl,结果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
UdpLog::info('微信获取openid,function:GetOpenidFromMp, 结果,', array('code' => $code, 'res' => $res));
//取出openid
$data = json_decode($res, true);
//初始化
if (empty($data) || empty($data['openid'])) {
$data['access_token'] = false;
$data['openid'] = false;
}
$this->data = $data;
$openid = $data['openid'];
... ...
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
... ... @@ -1490,16 +1490,26 @@ function initInfosEvt($container) {
type: 'POST',
url: '/guang/opt/collectArticle',
data: {
id: $info.data('id'),
id: getUrlParam('id'),
opt: opt,
yh_channel: yhChannel,
uid: getUrlParam('uid')
},
success: function(data) {
if (data.code && data.code === 200) {
if (data.data.jump) {
if ($('#intimacy-link').length <= 0) {
$('body').append('<a href=\'' + data.data.jumpUrl +
'\' style="display:none;" id="intimacy-link">' +
'<span class="intimacy-link"></span></a>');
}
//切换收藏状态
$btn.toggleClass('collected');
$('.intimacy-link').click();
} else {
//切换收藏状态
$btn.toggleClass('collected');
}
}
},
error: function() {
... ... @@ -2109,11 +2119,6 @@ window.onload = function() {
myScroll && myScroll.refresh();
};
// 图片加载完成之后重新 refresh iscroll
$('img').on('load', function() {
myScroll && myScroll.refresh();
});
//初始化页面,包括是否使用iscorll初始化页面
//接口暴露在HTML中,使用压缩名
exports.i = function(useIscroll) {
... ... @@ -3882,9 +3887,8 @@ module.exports = function(specificGender) {
//The kidsType can be specified by the parameter. Add by @ZhaoBiao
var kidsType = specificGender === 'kids' || $('.mobile-wrap').hasClass('kids-wrap') ? true : false,
lifestyleType = specificGender === 'lifestyle' ||
$('.mobile-wrap').hasClass('lifestyle-wrap') ? true : false,
yohoCoinType = $('.coin').length ? true : false,
logisticType = $('.logistic-page').length ? true : false;
$('.mobile-wrap').hasClass('lifestyle-wrap') ? true : false;
var $curNav,
index,
$navList = $('#maybe-like-nav');
... ... @@ -3895,25 +3899,14 @@ module.exports = function(specificGender) {
//ajax url
if (kidsType) {
url = '/product/recom/maylikekids';
} else if (lifestyleType) {
//有货币页面加载男生首页的数据
url = specificGender === 'lifestyle' ? '/product/recom/maylike?gender=1,3&rec_pos=100001' : '/product/recom/maylikelife';
} else if (yohoCoinType) {
gender = (specificGender === 'boys' || $('.mobile-wrap').hasClass('boys-wrap')) ?
'1,3&rec_pos=100009' : '2,3&rec_pos=100009',
url = '/product/recom/maylike?gender=' + gender;
} else if (logisticType) { //物流页面
gender = (specificGender === 'boys' || $('.mobile-wrap').hasClass('boys-wrap')) ?
'1,3&rec_pos=100006' : '2,3&rec_pos=100006',
url = '/product/recom/maylike?gender=' + gender;
url = specificGender === 'lifestyle' ? '/product/recom/maylike?gender=1,3' : '/product/recom/maylikelife';
} else {
gender = (specificGender === 'boys' || $('.mobile-wrap').hasClass('boys-wrap')) ?
'1,3&rec_pos=100001' : '2,3&rec_pos=100002',
'1,3' : '2,3',
url = '/product/recom/maylike?gender=' + gender;
}
... ... @@ -4096,17 +4089,28 @@ var $historySearch = $('.history-search');
var $clearHistory = $('#clear-history');
var $buriedpoint = $('.buriedpoint');
var $search = $('#search');
var searchUrl = $search.closest('form').attr('action');
var writeSearch = require("js/index/write-search");
var ranToken = writeSearch.getRanToken();
var historyval = writeSearch.getHistoryval();
var chHammer, cHammer;
chHammer = new Hammer($clearHistory[0]);
function isLocalStorageSupported() {
var testKey = 'test',
storage = Window.prototype.localStorage;
try {
storage.setItem(testKey, 'testValue');
storage.removeItem(testKey);
return true;
} catch (error) {
return false;
}
}
chHammer.on('tap', function() {
dialog.showDialog({
dialogText: '您确定要删除您的最近搜索吗?',
... ... @@ -4115,9 +4119,8 @@ chHammer.on('tap', function() {
rightBtnText: '确定'
}
}, function() {
if (localStorage) {
localStorage.removeItem(historyval);
if (isLocalStorageSupported()) {
localStorage.removeItem('historys');
}
$history.html('');
... ... @@ -4177,7 +4180,8 @@ function inputAction() {
}
$searchAssociate.find('li').on('touchend', function() {
GoSearch($(this).find('.keyword').html());
$buriedpoint.val($(this).find('.keyword').html());
$search.closest('form').submit();
});
},
error: function() {
... ... @@ -4187,28 +4191,6 @@ function inputAction() {
});
}
//跳到搜索页
function GoSearch(query) {
//保存搜索的内容
writeSearch.setHistoryValFun(query);
document.location.href = searchUrl + '?query=' + query;
}
//热门搜索、最近搜索事件
$('.search-items .search-group').on('click', 'li', function(event) {
var query = '';
if (event.target.nodeName === 'A') {
query = $(event.target).html();
}
if (event.target.nodeName === 'LI') {
query = $(event.target).find('a').html();
}
GoSearch(query);
});
inputAction();
cHammer = new Hammer($clear[0]);
... ... @@ -4217,19 +4199,13 @@ cHammer.on('tap', function() {
});
$search.on('touchend', function() {
var $buriedpoint = $form.find('.buriedpoint');
if ($buriedpoint.val() === '') {
if ($buriedpoint.val() === '' && $('#default-terms').val() !== '') {
$buriedpoint.val($('#default-terms').val());
}
//保存搜索的内容
writeSearch.setHistoryValFun($buriedpoint.val());
if (security.hasDangerInput()) {
return false;
}
$(this).closest('form').submit();
return false;
});
... ... @@ -4238,10 +4214,13 @@ $search.on('touchend', function() {
(function() {
var html = '',
history,
historys, i, num = 1;
historys, i, num = 1, searchUrl = '';
if (localStorage) {
historys = localStorage.getItem(historyval);
if (isLocalStorageSupported()) {
historys = localStorage.getItem('historys');
}
searchUrl = $form.attr('action');
if (historys && historys.length > 0) {
historys = historys.split(ranToken);
... ... @@ -4256,7 +4235,7 @@ $search.on('touchend', function() {
break;
}
html += '<li><a href="javascript:void(0);">' + history + '</li>';
html += '<li><a href="' + searchUrl + '/?query=' + history + '">' + history + '</li>';
}
$history.html(html);
... ... @@ -4268,6 +4247,11 @@ $search.on('touchend', function() {
}
}
}());
if (isLocalStorageSupported()) {
writeSearch.bindWirteLocal($form);
}
});
define("js/plugin/security", ["jquery"], function(require, exports, module){
/**
... ... @@ -4449,47 +4433,56 @@ define("js/index/write-search", [], function(require, exports, module){
* @date: 2015/10/29
*/
var ranToken = ',',
historyval = 'historys1';
var ranToken = ' ??++ ';
function isLocalStorageSupported() {
var testKey = 'test',
storage = Window.prototype.localStorage;
try {
storage.setItem(testKey, 'testValue');
storage.removeItem(testKey);
return true;
} catch (error) {
return false;
}
}
//获取分隔符
function getRanToken() {
return ranToken;
}
//存变量
function getHistoryval() {
return historyval;
}
//绑定提交前的存local操作
function bindWirteLocal($form) {
$form.on('submit', function() {
var query = this.query.value;
var query = this.query.value,
historys;
setHistoryValFun(query);
});
}
if (localStorage) {
if (isLocalStorageSupported()) {
historys = localStorage.getItem('historys');
}
function setHistoryValFun(query) {
var historys;
if (localStorage) {
historys = localStorage.getItem(historyval);
historys = historys ? historys : '';
historys = historys ? historys.replace(new RegExp((query + ranToken), 'g'), '') : '';
if (historys.indexOf(ranToken + query + ranToken) > -1) {
return;
}
if (historys === '') {
query = ranToken + query;
}
if (historys === '') {
query = ranToken + query;
}
historys += query + ranToken;
localStorage.setItem(historyval, historys);
}
historys += query + ranToken;
if (isLocalStorageSupported()) {
localStorage.setItem('historys', historys);
}
}
});
}
exports.getRanToken = getRanToken;
exports.getHistoryval = getHistoryval;
exports.setHistoryValFun = setHistoryValFun;
exports.bindWirteLocal = bindWirteLocal;
});
... ... @@ -5809,6 +5802,7 @@ function nextStep(url, mobileNo, areaCode) {
},
success: function(res) {
// console.log(res.data);
if (res.code === 200) {
// 统计代码:用于统计从哪个渠道登录
... ... @@ -5870,6 +5864,19 @@ $btnNext.on('touchstart', function() {
nickname: nickname
},
success: function(res) {
// console.log(res);
//res : {
// code: 'xxx',
// data: {
// isReg: 0,
// next: 'xxxx'
// },
// message: 'xxxx',
//}
if (res.code === 200) {
if (res.data.isReg === 1) {
dialog.showDialog({
... ... @@ -6154,11 +6161,6 @@ function search(opt) {
color: opt.id
};
break;
case 'ageLevel':
ext = {
age_level: opt.id
};
break;
case 'size':
ext = {
size: opt.id
... ... @@ -6778,11 +6780,6 @@ function search(opt) {
brand: opt.id
};
break;
case 'ageLevel':
ext = {
age_level: opt.id
};
break;
case 'sort':
ext = {
sort: opt.id
... ... @@ -7216,7 +7213,6 @@ function getQueryString(name) {
shopId = getQueryString('shop_id');
sort = getQueryString('sort');
outlets = getQueryString('outlets');
age_level = outlets = getQueryString('ageLevel');
/**
* 筛选注册的回调,筛选子项点击后逻辑
... ... @@ -7275,11 +7271,6 @@ function search(opt) {
color: opt.id
};
break;
case 'ageLevel':
ext = {
age_level: opt.id
};
break;
case 'size':
ext = {
size: opt.id
... ... @@ -7335,10 +7326,6 @@ function search(opt) {
params.shop_id = shopId;
}
if (age_level) {
params.age_level = age_level
}
if (sort) {
params.sort = sort;
}
... ... @@ -7827,6 +7814,9 @@ var productId = $('#productId').val();
var skn = $('#productSkn').val(),
productCode = $('#limitProductCode').val();
//门票 限购数量
var ticketsLimit = $('#limitNum').val() || 0;
$('#likeBtn').on('touchstart', function() {
var opt,
favorite;
... ... @@ -7880,6 +7870,14 @@ $('#likeBtn').on('touchstart', function() {
});
$('#addtoCart').on('touchstart', function() {
//门票验证登录
if (ticketsLimit) {
if (!ticketCheckLogin()) {
return false;
}
}
$('.cart-bar').hide();
productCode && chosePanel.setLimitGoodModeWithSknId(productCode, skn);
... ... @@ -7896,11 +7894,32 @@ $('#addtoCart').on('touchstart', function() {
return false;
});
ticketCheckOpen();
$('#buyLimit').on('touchstart', function() {
tip.show('打开APP可抢购该商品哦~');
return false;
});
//门票立即购买验证登录
function ticketCheckLogin() {
if (!window.getUid()) {
var urlArray = window.location.href.split('?');
window.location.href = '//m.yohobuy.com/signin.html?refer=' + urlArray[0] + '?product_type=ticket';
return false;
}
return true;
}
// 门票登录后自动弹出
function ticketCheckOpen() {
var showPannel = $('#showPannel').val();
if (showPannel) {
chosePanel.show();
}
}
});
define("js/cart/chose-panel", ["jquery"], function(require, exports, module){
/**
... ... @@ -7942,7 +7961,13 @@ var $chosePanel = $('#chose-panel'),
$choseArea,
$cartBar,
$soonSoldOut = $('.soonSoldOut-tag'),
$yohoPage = $('.yoho-page');
$yohoPage = $('.yoho-page'),
//门票 限购数量
ticketsLimit = $('#limitNum').val() || 0,
single = $('#single').val() || 0;
$productSku = $('#productSku'),
$buyNumber = $('#buyNumber'),
$buyNowForm = $('#buyNowForm');
// 购物车编辑标相关变量
var isEdit,
... ... @@ -8031,6 +8056,14 @@ function removePannel() {
}
function checkColorSizeNum() {
if (ticketsLimit) {
//门票
if (!checkTickets()) {
return;
}
}
if (!hasChooseColor && !hasChooseSize) {
tip.show('请选择颜色和尺码~');
return false;
... ... @@ -8044,6 +8077,24 @@ function checkColorSizeNum() {
return true;
}
//检查门票选择
function checkTickets() {
if (!hasChooseColor && !hasChooseSize) {
if (single) {
tip.show('请选择日期~');
} else {
tip.show('请选择日期和区域~');
};
return false;
} else if (!hasChooseColor) {
tip.show('请选择日期~');
return false;
} else if (!hasChooseSize && !single) {
tip.show('请选择区域~');
return false;
}
return true;
}
function show(html, cb) {
... ... @@ -8078,7 +8129,7 @@ function updateConformButtonClassAndText() {
$chosed = $allChoseItems.find('.chosed');
if (2 === $chosed.closest('.zero-stock').length) {
$('#chose-btn-sure').css('background-color', '#c0c0c0').html('已售罄');
} else if (limitProductCode) {
} else if (limitProductCode || ticketsLimit) {
$('#chose-btn-sure').css('background-color', '#eb0313').html('立即购买');
} else {
$('#chose-btn-sure').css('background-color', '#eb0313').html(isEdit ? '确认' : '加入购物车');
... ... @@ -8088,7 +8139,14 @@ function updateConformButtonClassAndText() {
//显示剩余件数
function displayGoodNum(curGoodNum) {
//数量大于0
//门票限购
if (ticketsLimit) {
$allChoseItems.find('.num .left-num').html('限购' + ticketsLimit + '件');
$leftNum.val(curGoodNum);
return;
}
//数量大于
if (curGoodNum > 0) {
if ($soonSoldOut.length > 0) {
$allChoseItems.find('.num .left-num').html('即将售罄');
... ... @@ -8152,6 +8210,39 @@ function changeColorChosed(newColorIndex) {
return 0;
}
//添加门票
function addTickets(productSku, buyNumber) {
var data = {
productSku: productSku,
buyNumber: buyNumber
};
//校验电子票
$.ajax({
url: '/cart/index/checkTickets',
dataType: 'json',
data: data,
type: 'post',
success: function (addRestult) {
if (addRestult.code != 200) {
if (addRestult.code == 401) {
var refer = window.location.href;
window.location.href = '//m.yohobuy.com/signin.html?refer=' + refer;
}
tip.show(addRestult.message);
} else {
$productSku.val(productSku);
$buyNumber.val(buyNumber);
$buyNowForm.submit();
}
},
error: function () {
tip.show('网络异常~');
}
});
}
init();
... ... @@ -8201,7 +8292,6 @@ $yohoPage.on('touchstart', '.color-list .block', function() {
//老的选中尺码去掉勾选,新的选中尺码加上勾选
curGoodNum = changeSizeChosed(index + 1);
// 显示剩余数量
displayGoodNum(curGoodNum);
... ... @@ -8232,6 +8322,19 @@ $yohoPage.on('touchstart', '.color-list .block', function() {
// 设置按钮的样式和文字
updateConformButtonClassAndText();
//展览票
if (ticketsLimit && single) {
//选中日期
$curSizeBlock = $('.size-list .size-row .block').eq(index + 1);
$curSizeBlock.addClass('chosed');
// 显示剩余数量
displayGoodNum($curColorBlock.data('num'));
hasChooseSize = true;
return false;
}
}).on('touchstart', '.size-list .block', function() {
var $this = $(this),
index,
... ... @@ -8307,9 +8410,10 @@ $yohoPage.on('touchstart', '.btn-minus', function() {
$num.val(num - 1);
}).on('touchstart', '.btn-plus', function() {
var num = parseInt($num.val(), 10);
var num = parseInt($num.val(), 10),
maxTips = ticketsLimit ? '每人只可购买' + ticketsLimit + '张当日门票' : '您选择的数量超过了最大库存量~';
leftNum = $('#left-num').val();
leftNum = ticketsLimit || $('#left-num').val();
if (!checkColorSizeNum()) {
return;
... ... @@ -8321,7 +8425,7 @@ $yohoPage.on('touchstart', '.btn-minus', function() {
//TODO:库存数验证
if (num > leftNum - 1) {
tip.show('您选择的数量超过了最大库存量~');
tip.show(maxTips);
return;
}
$num.val(num + 1);
... ... @@ -8363,9 +8467,18 @@ $yohoPage.on('touchstart', '.btn-minus', function() {
return false;
}
confirming = true;
if (!ticketsLimit) {
confirming = true;
}
loading.showLoadingMask();
//立即购买门票
if (ticketsLimit) {
addTickets(productSku, buyNumber);
return;
}
//针对是否处于编辑模式设置不同的url和需要post的数据
if (isEdit) {
cartGoodData = {
... ... @@ -9269,6 +9382,7 @@ var winH = $(window).height(),
var defaultOpt = require("js/product/query-param");
var $listNav = $('#list-nav'),
$posList = $('#pos-list'),
//导航数据信息
navInfo = {
... ... @@ -9643,9 +9757,7 @@ function search(opt) {
}
}
$listNav.children('.active').removeClass('active');
$pre.addClass('active');
if (opt.hasOwnProperty('id')) {
if (opt.id) {
switch (opt.type) {
case 'shop_id':
ext = {
... ... @@ -9687,11 +9799,6 @@ function search(opt) {
discount: opt.id
};
break;
case 'ageLevel':
ext = {
age_level: opt.id
};
break;
}
$.extend(defaultOpt, ext); //扩展筛选项
}
... ... @@ -9815,6 +9922,11 @@ $.ajax({
success: function(data) {
$goodsContainer.append(data);
setTimeout(function() {
myScroll.refresh();
scH = $('#scroller').outerHeight();
}, 1000);
//初始化filter&注册filter回调
filter.initFilter({
fCbFn: search,
... ... @@ -9826,11 +9938,6 @@ $.ajax({
},
missStatus: true
});
setTimeout(function() {
myScroll.refresh();
scH = $('#scroller').outerHeight();
}, 1000);
}
});
... ... @@ -9838,6 +9945,10 @@ $listNav.bind('contextmenu', function(e) {
return false;
});
$posList.bind('contextmenu', function(e) {
return false;
});
$subNav.on('touchend touchcancel', function(e) {
var $this = $(e.target).closest('li'),
cname,
... ... @@ -10005,11 +10116,12 @@ $listNav.on('touchstart', 'li', function(e) {
myScroll.refresh();
});
$nav2.on('touchstart', 'li', function(e) {
$posList.on('touchstart', 'li', function(e) {
$(this).addClass('bytouch');
}).on('touchend touchcancel', function() {
$nav2.find('li').removeClass('bytouch');
$posList.find('li').removeClass('bytouch');
myScroll.refresh();
myScroll.scrollTo(0, -(imgH + nav1H + main1oH + 5));
});
//底部导航点击
... ... @@ -12026,7 +12138,7 @@ var jQuery = require("jquery");
})(jQuery);
});
define("js/me/index", ["jquery","swiper","lazyload","index"], function(require, exports, module){
define("js/me/index", ["jquery","swiper","index"], function(require, exports, module){
/**
* 个人中心首页
* @author: bikai<kai.bi@yoho.cn>
... ... @@ -12040,7 +12152,7 @@ var $userAvatar = $('.user-avatar'),
var myImage = new Image(),
avatar;
require("js/product/recommend-for-you-user-center");
require("js/product/recommend-for-you");
require("js/product/suspend-cart");
// 部分老用户没有头像,显示默认头像
... ... @@ -12060,7 +12172,7 @@ $('.yoho-page').on('touchstart', '.list-item, .type-item, .order-title', functio
});
});
define("js/product/recommend-for-you-user-center", ["swiper","jquery","lazyload","index"], function(require, exports, module){
define("js/product/recommend-for-you", ["swiper","jquery","index"], function(require, exports, module){
/**
* 为您优选
* @author: bikai<kai.bi@yoho.cn>
... ... @@ -12069,15 +12181,22 @@ define("js/product/recommend-for-you-user-center", ["swiper","jquery","lazyload"
var Swiper = require("swiper"),
$ = require("jquery"),
lazyLoad = require("lazyload");
$ = require("jquery");
var $recommendForYou = $('.recommend-for-you');
var recommendSwiper,
$recommendForYou = $('.recommend-for-you');
$.get('/product/recommend-for-you/userCenter').then(function(html) {
$.get('/home/preference').then(function(html) {
$recommendForYou.html(html).show();
lazyLoad($('img.lazy'));
if ($('#swiper-recommend').length) {
recommendSwiper = new Swiper('#swiper-recommend', {
slidesPerView: 'auto',
grabCursor: true,
slideElement: 'a',
lazyLoading: true,
watchSlidesVisibility: true
});
}
}).fail(function() {
$recommendForYou.hide();
});
... ... @@ -13109,7 +13228,6 @@ require("js/cart/order-ensure");
require("js/cart/invoice-info");
require("js/cart/select-coupon");
require("js/cart/select-address");
require("js/cart/jit-detail");
});
define("js/cart/cart", ["jquery","mlellipsis","hammer","handlebars","source-map","swiper","lazyload","index"], function(require, exports, module){
... ... @@ -13149,11 +13267,15 @@ function needLoadRecommandForYou() {
$('.cart-goods').length <= 0 && !isRefreshByDelete :
$('.cart-goods').length <= 0;
}
require("js/product/recommend-for-you-cart");
if (!needLoadRecommandForYou()) {
if (needLoadRecommandForYou()) {
require("js/product/recommend-for-you");
} else {
if (isRefreshByDelete) {
$('body').css('background-color', '#f0f0f0');
}
require("js/cart/good");
}
}
$cartPage.css('display', 'block');
loading.hideLoadingMask();
... ... @@ -13356,27 +13478,6 @@ if ($('.invalid-goods').find('.shopping-cart-good').length === 0) {
$('#failure-goods').removeClass('invalid-goods');
}
});
define("js/product/recommend-for-you-cart", ["swiper","jquery","lazyload","index"], function(require, exports, module){
/**
* 为您优选
* @author: bikai<kai.bi@yoho.cn>
* @date: 2015/11/16
*/
var Swiper = require("swiper"),
$ = require("jquery"),
lazyLoad = require("lazyload");
var $recommendForYou = $('.recommend-for-you');
$.get('/product/recommend-for-you/cart').then(function(html) {
$recommendForYou.html(html).show();
lazyLoad($('img.lazy'));
}).fail(function() {
$recommendForYou.hide();
});
});
define("js/cart/good", ["jquery","mlellipsis","lazyload","handlebars","source-map","hammer"], function(require, exports, module){
/**
* 购物车商品
... ... @@ -13781,41 +13882,21 @@ var $invoice = $('.invoice'),
$coinCheck = $('.coin-check'),
$coinUsed = $('.coin .used'),
$subBlock = $('.sub-block'),
$ticketsMobile = $('#mobile'),
payType,
queryString = $.queryString(),
orderInfo = order.orderInfo,
isSubmiting,
dispatchInfo,
total;
var orderCont = window.cookie('order-info') && JSON.parse(window.cookie('order-info'));
var invoiceCont = {
7: '服装',
1: '图书',
9: '配件',
11: '日用品',
3: '办公用品',
6: '体育用品',
10: '数码产品'
},
invoicesType = {
1: '纸质',
2: '电子'
};
total,
isTickets = $('#ticketsPage').val(),
productSku = $('#productSku').val(),
buyNumber = $('#buyNumber').val();
require("js/common");
lazyLoad();
// 初始化发票信息
function invoiceInit() {
if (orderCont.invoiceType) {
$('.invoice-type').text(invoiceCont[orderCont.invoiceType] + '(' + invoicesType[orderCont.invoicesType] + ')');
} else {
$('.invoice-type').text('服装(电子)');
}
}
function getQueryParam() {
var queryArray = location.search.substr(1).split('&'),
i,
... ... @@ -13896,23 +13977,10 @@ $invoice.on('touchend', '.checkbox', function() {
if ($this.hasClass('icon-cb-radio')) {
$invoice.addClass('focus');
orderInfo('invoiceText', '');
orderInfo('invoiceType', '7');
orderInfo('receiverMobile', $('.user-mobile').val());
orderInfo('invoicesType', '2');
orderInfo('invoiceTitle', '个人');
}
if ($this.hasClass('icon-radio')) {
$invoice.removeClass('focus');
orderInfo('invoiceText', null);
orderInfo('invoiceType', null);
orderInfo('receiverMobile', null);
orderInfo('invoicesType', null);
orderInfo('invoiceTitle', null);
}
orderCont = window.cookie('order-info') && JSON.parse(window.cookie('order-info'));
invoiceInit();
});
... ... @@ -13935,20 +14003,30 @@ function updateDeliverId(id) {
function orderCompute() {
var yohoCoin = orderInfo('yohoCoin'),
deliverId = orderInfo('deliveryId');
loading.showLoadingMask();
$.ajax({
method: 'POST',
url: '/cart/index/orderCompute',
data: {
deliverId = orderInfo('deliveryId'),
data = {
cartType: orderInfo('cartType') || 'ordinary',
deliveryId: orderInfo('deliveryId'),
paymentTypeId: orderInfo('paymentTypeId'),
couponCode: orderInfo('couponCode'),
yohoCoin: yohoCoin,
skuList: isLimitGood() ? orderInfo('skuList') : undefined
};
//门票
if (isTickets) {
data = {
type: 'tickets',
productSku: productSku,
buyNumber: buyNumber,
yohoCoin: yohoCoin
}
};
loading.showLoadingMask();
$.ajax({
method: 'POST',
url: '/cart/index/orderCompute',
data: data
}).then(function(res) {
if ($.type(res) !== 'object') {
window.location.reload();
... ... @@ -13992,16 +14070,16 @@ function submitOrder() {
return false;
}
// if (orderInfo('invoice')) {
// if (!invoiceText) {
// tip.show('请输入发票抬头');
// return;
// }
// if (invoiceText.length > 30) {
// tip.show('发票抬头不得超过30个汉字');
// return;
// }
// }
if (orderInfo('invoice')) {
if (!invoiceText) {
tip.show('请输入发票抬头');
return;
}
if (invoiceText.length > 30) {
tip.show('发票抬头不得超过30个汉字');
return;
}
}
if (msg) {
if (msg.length > 40) {
... ... @@ -14159,6 +14237,10 @@ $subBlock.on('touchstart', 'li', function() {
$('.bill a').on('touchstart', function() {
if (isTickets) {
ticketsConfirm();
return ;
}
orderInfo('paymentTypeId', $('.delivery-id .icon-cb-radio').data('id'));
orderInfo('paymentType', $('.payment-type .icon-cb-radio').data('id'));
... ... @@ -14177,9 +14259,48 @@ if (orderInfo('address') && orderInfo('address').is_support === 'N') {
orderInfo('deliveryId', $('.delivery-id .icon-cb-radio').data('id'));
orderCompute();
}
//电子票下单
function ticketsConfirm () {
if(!$ticketsMobile.val()) {
tip.show('手机号必填');
return;
}
var data = {
productSku: productSku,
buyNumber: buyNumber,
mobile: $ticketsMobile.val(),
useYohoCoin: orderInfo('yohoCoin')
};
$.ajax({
url: '/cart/index/submitTicket',
type: 'POST',
dataType: 'json',
data: data,
success: function(ticket) {
//下单成功调整支付页面
if (ticket.code === 200) {
window.location.href = '/home/orders/pay?order_code=' + ticket.data.order_code
} else {
tip.show(ticket.message);
}
},
error: function () {
tip.show('网络异常~');
}
});
}
// 初始化发票信息内容
invoiceInit();
//校验手机号
$ticketsMobile.blur(function function_name (e) {
var reg = /^[0123456789]{1,30}$/;
var mobile = $ticketsMobile.val();
if (!reg.test(mobile)) {
tip.show('手机号码不正确!');
}
})
});
define("js/cart/order-info", ["jquery","hammer"], function(require, exports, module){
/**
... ... @@ -14207,7 +14328,6 @@ function init() {
invoiceType: null,
invoiceTitle: null,
receiverMobile: null,
isModifyTel: false,
invoicesType: null,
msg: null,
cartType: 'ordinary'
... ... @@ -14255,13 +14375,10 @@ var $invoiceNotice = $('.invoice-notice'),
$invoiceType = $('.invoice-type'),
$tel = $('.tel'),
$company = $('.company'),
$telArea = $('.tel-area'),
orderInfo = order.orderInfo,
$chooseContLi = $('.invoice-cont').find('.icon-cb-radio').parent(),
$copyTel = $('.copy-tel'),
isModifyTel = false;
$chooseContLi = $('.invoice-cont').find('.icon-cb-radio').parent();
var myreg = /^(((13[0-9]{1})|(14[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})$/,
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/,
linkUrl = '/cart/index/orderEnsure?cartType=ordinary';
require("js/common");
... ... @@ -14293,7 +14410,7 @@ function confirmAction() {
cont = $chooseCont.data('id');
if ($editFlag.val() === 'true') {
if (type === 2 && !myreg.test($tel.attr('data-tel'))) {
if (!myreg.test($tel.attr('data-tel'))) {
tip.show('请输入正确手机号');
$tel.focus();
return false;
... ... @@ -14319,12 +14436,6 @@ function confirmAction() {
orderInfo('invoicesType', type);
orderInfo('invoiceTitle', title);
if (isModifyTel && $copyTel !== tel) {
orderInfo('isModifyTel', true);
} else {
orderInfo('isModifyTel', false);
}
dialog.showDialog({
dialogText: '保存成功',
autoHide: true,
... ... @@ -14366,13 +14477,6 @@ $('.invoice-type span').on('touchstart', function() {
} else {
$(this).addClass('on').siblings().removeClass('on');
$editFlag.val('true');
// 纸质发票不显示手机号
if ($(this).index() === 1) {
$telArea.slideUp();
} else {
$telArea.slideDown();
}
}
});
... ... @@ -14395,7 +14499,6 @@ $('.istel').one('input', function() {
$tel.on('input', function() {
$(this).attr('data-tel', $(this).val());
$editFlag.val('true');
isModifyTel = true;
});
$company.on('input', function() {
... ... @@ -14630,6 +14733,7 @@ $('.address-item').on('touchend', function() {
orderInfo('addressId', addressId);
orderInfo('address', address);
console.log($this.data('href') + (orderInfo('limitUrlSufix') || ''));
window.location.href = $this.data('href') + (orderInfo('limitUrlSufix') || '');
}).on('touchend', '.edit', function() {
window.location.href = $(this).data('href');
... ... @@ -14646,40 +14750,6 @@ $confim.on('touchend', '.confim', function() {
});
});
define("js/cart/jit-detail", ["swiper","jquery","index"], function(require, exports, module){
/**
* jit拆单配送信息页面
* @author: zhaobiao<bill.zhao@yoho.cn>
* @date: 2016/04/26
*/
var Swiper = require("swiper"),
$ = require("jquery");
var height = $(window).height() - $('#yoho-header').height();
// 为了展示页面背景色,需要把页面根据窗口大小撑开
$('.jit-detail-page').css('height', height);
$('.jit-detail-page>div').show();
// 内容展示之后,再根据document高度,调整一次容器高度
height = $(document).height() - $('#yoho-header').height();
$('.jit-detail-page').css('height', height);
(function() {
return new Swiper('.swiper-container', {
slidesPerView: 'auto',
grabCursor: true,
slideElement: 'a',
lazyLoading: true,
watchSlidesVisibility: true
});
})();
});
define("js/life/entry", ["jquery","hammer"], function(require, exports, module){
/*
* To change this license header, choose License Headers in Project Properties.
... ...
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
... ... @@ -37,7 +37,13 @@ var $chosePanel = $('#chose-panel'),
$choseArea,
$cartBar,
$soonSoldOut = $('.soonSoldOut-tag'),
$yohoPage = $('.yoho-page');
$yohoPage = $('.yoho-page'),
//门票 限购数量
ticketsLimit = $('#limitNum').val() || 0,
single = $('#single').val() || 0;
$productSku = $('#productSku'),
$buyNumber = $('#buyNumber'),
$buyNowForm = $('#buyNowForm');
// 购物车编辑标相关变量
var isEdit,
... ... @@ -126,6 +132,14 @@ function removePannel() {
}
function checkColorSizeNum() {
if (ticketsLimit) {
//门票
if (!checkTickets()) {
return;
}
}
if (!hasChooseColor && !hasChooseSize) {
tip.show('请选择颜色和尺码~');
return false;
... ... @@ -139,6 +153,24 @@ function checkColorSizeNum() {
return true;
}
//检查门票选择
function checkTickets() {
if (!hasChooseColor && !hasChooseSize) {
if (single) {
tip.show('请选择日期~');
} else {
tip.show('请选择日期和区域~');
};
return false;
} else if (!hasChooseColor) {
tip.show('请选择日期~');
return false;
} else if (!hasChooseSize && !single) {
tip.show('请选择区域~');
return false;
}
return true;
}
function show(html, cb) {
... ... @@ -173,7 +205,7 @@ function updateConformButtonClassAndText() {
$chosed = $allChoseItems.find('.chosed');
if (2 === $chosed.closest('.zero-stock').length) {
$('#chose-btn-sure').css('background-color', '#c0c0c0').html('已售罄');
} else if (limitProductCode) {
} else if (limitProductCode || ticketsLimit) {
$('#chose-btn-sure').css('background-color', '#eb0313').html('立即购买');
} else {
$('#chose-btn-sure').css('background-color', '#eb0313').html(isEdit ? '确认' : '加入购物车');
... ... @@ -183,7 +215,14 @@ function updateConformButtonClassAndText() {
//显示剩余件数
function displayGoodNum(curGoodNum) {
//数量大于0
//门票限购
if (ticketsLimit) {
$allChoseItems.find('.num .left-num').html('限购' + ticketsLimit + '件');
$leftNum.val(curGoodNum);
return;
}
//数量大于
if (curGoodNum > 0) {
if ($soonSoldOut.length > 0) {
$allChoseItems.find('.num .left-num').html('即将售罄');
... ... @@ -247,6 +286,39 @@ function changeColorChosed(newColorIndex) {
return 0;
}
//添加门票
function addTickets(productSku, buyNumber) {
var data = {
productSku: productSku,
buyNumber: buyNumber
};
//校验电子票
$.ajax({
url: '/cart/index/checkTickets',
dataType: 'json',
data: data,
type: 'post',
success: function (addRestult) {
if (addRestult.code != 200) {
if (addRestult.code == 401) {
var refer = window.location.href;
window.location.href = '//m.yohobuy.com/signin.html?refer=' + refer;
}
tip.show(addRestult.message);
} else {
$productSku.val(productSku);
$buyNumber.val(buyNumber);
$buyNowForm.submit();
}
},
error: function () {
tip.show('网络异常~');
}
});
}
init();
... ... @@ -296,7 +368,6 @@ $yohoPage.on('touchstart', '.color-list .block', function() {
//老的选中尺码去掉勾选,新的选中尺码加上勾选
curGoodNum = changeSizeChosed(index + 1);
// 显示剩余数量
displayGoodNum(curGoodNum);
... ... @@ -327,6 +398,19 @@ $yohoPage.on('touchstart', '.color-list .block', function() {
// 设置按钮的样式和文字
updateConformButtonClassAndText();
//展览票
if (ticketsLimit && single) {
//选中日期
$curSizeBlock = $('.size-list .size-row .block').eq(index + 1);
$curSizeBlock.addClass('chosed');
// 显示剩余数量
displayGoodNum($curColorBlock.data('num'));
hasChooseSize = true;
return false;
}
}).on('touchstart', '.size-list .block', function() {
var $this = $(this),
index,
... ... @@ -402,9 +486,10 @@ $yohoPage.on('touchstart', '.btn-minus', function() {
$num.val(num - 1);
}).on('touchstart', '.btn-plus', function() {
var num = parseInt($num.val(), 10);
var num = parseInt($num.val(), 10),
maxTips = ticketsLimit ? '每人只可购买' + ticketsLimit + '张当日门票' : '您选择的数量超过了最大库存量~';
leftNum = $('#left-num').val();
leftNum = ticketsLimit || $('#left-num').val();
if (!checkColorSizeNum()) {
return;
... ... @@ -416,7 +501,7 @@ $yohoPage.on('touchstart', '.btn-minus', function() {
//TODO:库存数验证
if (num > leftNum - 1) {
tip.show('您选择的数量超过了最大库存量~');
tip.show(maxTips);
return;
}
$num.val(num + 1);
... ... @@ -458,9 +543,18 @@ $yohoPage.on('touchstart', '.btn-minus', function() {
return false;
}
confirming = true;
if (!ticketsLimit) {
confirming = true;
}
loading.showLoadingMask();
//立即购买门票
if (ticketsLimit) {
addTickets(productSku, buyNumber);
return;
}
//针对是否处于编辑模式设置不同的url和需要post的数据
if (isEdit) {
cartGoodData = {
... ...
... ... @@ -16,12 +16,16 @@ var $invoice = $('.invoice'),
$coinCheck = $('.coin-check'),
$coinUsed = $('.coin .used'),
$subBlock = $('.sub-block'),
$ticketsMobile = $('#mobile'),
payType,
queryString = $.queryString(),
orderInfo = order.orderInfo,
isSubmiting,
dispatchInfo,
total;
total,
isTickets = $('#ticketsPage').val(),
productSku = $('#productSku').val(),
buyNumber = $('#buyNumber').val();
var orderCont = window.cookie('order-info') && JSON.parse(window.cookie('order-info'));
var invoiceCont = {
... ... @@ -170,20 +174,30 @@ function updateDeliverId(id) {
function orderCompute() {
var yohoCoin = orderInfo('yohoCoin'),
deliverId = orderInfo('deliveryId');
loading.showLoadingMask();
$.ajax({
method: 'POST',
url: '/cart/index/orderCompute',
data: {
deliverId = orderInfo('deliveryId'),
data = {
cartType: orderInfo('cartType') || 'ordinary',
deliveryId: orderInfo('deliveryId'),
paymentTypeId: orderInfo('paymentTypeId'),
couponCode: orderInfo('couponCode'),
yohoCoin: yohoCoin,
skuList: isLimitGood() ? orderInfo('skuList') : undefined
};
//门票
if (isTickets) {
data = {
type: 'tickets',
productSku: productSku,
buyNumber: buyNumber,
yohoCoin: yohoCoin
}
};
loading.showLoadingMask();
$.ajax({
method: 'POST',
url: '/cart/index/orderCompute',
data: data
}).then(function(res) {
if ($.type(res) !== 'object') {
window.location.reload();
... ... @@ -394,6 +408,10 @@ $subBlock.on('touchstart', 'li', function() {
$('.bill a').on('touchstart', function() {
if (isTickets) {
ticketsConfirm();
return ;
}
orderInfo('paymentTypeId', $('.delivery-id .icon-cb-radio').data('id'));
orderInfo('paymentType', $('.payment-type .icon-cb-radio').data('id'));
... ... @@ -412,6 +430,47 @@ if (orderInfo('address') && orderInfo('address').is_support === 'N') {
orderInfo('deliveryId', $('.delivery-id .icon-cb-radio').data('id'));
orderCompute();
}
//电子票下单
function ticketsConfirm () {
if(!$ticketsMobile.val()) {
tip.show('手机号必填');
return;
}
var data = {
productSku: productSku,
buyNumber: buyNumber,
mobile: $ticketsMobile.val(),
useYohoCoin: orderInfo('yohoCoin')
};
$.ajax({
url: '/cart/index/submitTicket',
type: 'POST',
dataType: 'json',
data: data,
success: function(ticket) {
//下单成功调整支付页面
if (ticket.code === 200) {
window.location.href = '/home/orders/pay?order_code=' + ticket.data.order_code
} else {
tip.show(ticket.message);
}
},
error: function () {
tip.show('网络异常~');
}
});
}
//校验手机号
$ticketsMobile.blur(function function_name (e) {
var reg = /^[0123456789]{1,30}$/;
var mobile = $ticketsMobile.val();
if (!reg.test(mobile)) {
tip.show('手机号码不正确!');
}
})
// 初始化发票信息内容
invoiceInit();
\ No newline at end of file
... ...
... ... @@ -28,7 +28,7 @@ if (window.wx) {
}
function onBridgeReady() {
document.addEventListener('WeixinJSBridgeReady', function () {
document.addEventListener('WeixinJSBridgeReady', function() {
window.WeixinJSBridge && window.WeixinJSBridge.call('hideOptionMenu');
});
}
... ... @@ -53,16 +53,8 @@ function jsApiCall(orderCode, jsApiParameters) {
window.WeixinJSBridge && window.WeixinJSBridge.invoke(
'getBrandWCPayRequest',
jsApiParameters,
function (res) {
//发送支付确认
$.ajax({
type: 'GET',
url: '/shopping/pay/wechatPayConfirm?order_code=' + orderCode,
dataType: 'json',
success: function (res) {
window.location.href = '/home/orders/detail?order_code=' + orderCode;
}
});
function(res) {
window.location.href = '/home/orders/detail?order_code=' + orderCode + '&openId=true';
}
);
}
... ... @@ -82,9 +74,12 @@ function callpay(orderCode) {
} else {
$.ajax({
type: 'GET',
url: '/shopping/pay/wechatwapapi?order_code=' + orderCode,
url: '/shopping/pay/wechatwapapi',
data: {
'order_code': orderCode
},
dataType: 'json',
success: function (res) {
success: function(res) {
if (res.code === 200) {
jsApiParameters = res.data.jsApiParameters;
jsApiCall(orderCode, jsApiParameters);
... ... @@ -92,10 +87,10 @@ function callpay(orderCode) {
tip.show('微信支付调取失败');
}
},
error: function () {
error: function() {
tip.show('请刷新本页面,完成微信支付');
},
complete: function () {
complete: function() {
$loadingToast.addClass("hide");
}
});
... ... @@ -112,7 +107,7 @@ function isWXOpen() {
function hideWeChatPay() {
var $payApps = $('.app');
$payApps.each(function (idx, app) {
$payApps.each(function(idx, app) {
if ($(app).parent().attr('id') === 'weixin') {
$(app).parent().css('display', 'none');
return false;
... ... @@ -136,7 +131,7 @@ function loadIcon() {
var $div = null;
var appid = null;
$boxs.each(function (idx, box) {
$boxs.each(function(idx, box) {
$div = $(box).find('.icon').find('div');
if ($div.length > 0) {
appid = $(box).attr('id');
... ... @@ -154,15 +149,15 @@ function showPage() {
function bindTouchedEvent() {
var $boxs = $('.box');
$boxs.on('touchstart', function (e) {
$boxs.on('touchstart', function(e) {
$(this).addClass('bytouch');
}).on('touchend touchcancel', function () {
}).on('touchend touchcancel', function() {
$boxs.removeClass('bytouch');
});
}
if (wxHammer) {
wxHammer.on('tap', function () {
wxHammer.on('tap', function() {
callpay(theOrderCode);
});
}
... ...
... ... @@ -14,6 +14,9 @@ var productId = $('#productId').val();
var skn = $('#productSkn').val(),
productCode = $('#limitProductCode').val();
//门票 限购数量
var ticketsLimit = $('#limitNum').val() || 0;
$('#likeBtn').on('touchstart', function() {
var opt,
favorite;
... ... @@ -67,6 +70,14 @@ $('#likeBtn').on('touchstart', function() {
});
$('#addtoCart').on('touchstart', function() {
//门票验证登录
if (ticketsLimit) {
if (!ticketCheckLogin()) {
return false;
}
}
$('.cart-bar').hide();
productCode && chosePanel.setLimitGoodModeWithSknId(productCode, skn);
... ... @@ -83,7 +94,28 @@ $('#addtoCart').on('touchstart', function() {
return false;
});
ticketCheckOpen();
$('#buyLimit').on('touchstart', function() {
tip.show('打开APP可抢购该商品哦~');
return false;
});
//门票立即购买验证登录
function ticketCheckLogin() {
if (!window.getUid()) {
var urlArray = window.location.href.split('?');
window.location.href = '//m.yohobuy.com/signin.html?refer=' + urlArray[0] + '?product_type=ticket';
return false;
}
return true;
}
// 门票登录后自动弹出
function ticketCheckOpen() {
var showPannel = $('#showPannel').val();
if (showPannel) {
chosePanel.show();
}
}
... ...
... ... @@ -185,4 +185,12 @@
border: none;
}
}
.tickets-info {
span.left-num {
color: #e10;
}
}
}
... ...
... ... @@ -570,3 +570,85 @@
}
}
}
.tickets-confirm-page {
.sorry-tips {
border-bottom: 1px solid #e0e0e0;
height: 50px;
line-height: 50px;
p {
color: #d0021b;
font-size: 24px;
margin-left: 5%;
}
}
.delivery-id {
h3 {
border: 0px;
}
h4 {
width: 95%;
margin-left: 5%;
font-size: 30px;
color: #b0b0b0;
margin-bottom: 20px;
}
}
.yoho-coin {
margin-left: 5%;
width: 90%;
overflow: hidden;
border-bottom: 1px solid #e0e0e0;
.sale-invoice {
margin-top: 0px;
}
}
.dispatch {
.sub-block {
h3 {
width: 90%;
span {
color: #afafaf;
font-size: 26px;
float: right;
}
}
}
}
.tickets-mobile {
position: relative;
input {
background: #fff;
border: 1px solid #b0b0b0;
height: 85px;
line-height: 85px;
margin: 0px;
outline: none;
-webkit-appearance: none;
}
.mobile-tips {
display: inline-block;
position: absolute;
height: 85px;
line-height: 85px;
right: 30px;
top: 50%;
margin-top: -43px;
font-size: 22px;
color: #b0b0b0;
}
}
}
... ...
... ... @@ -349,4 +349,18 @@
color: #d0021b;
}
}
.tickets-mobile {
font-size:32px;
height: 90px;
line-height: 90px;
.pull-left {
float:left;
}
.pull-right {
float:right;
}
}
}
... ...
{{> layout/header}}
<div class="order-ensure-page yoho-page tickets-confirm-page">
<section class="dispatch block">
<!--<div class="sorry-tips">
<p>虚拟商品不支持退换货,抱歉!</p>
</div>-->
<div class="sub-block payment-type">
<h3>
<p>支付方式</p>
<span>在线支付</span>
</h3>
</div>
<div class="sub-block delivery-id">
<h3>
<p>发送时间</p>
<span>自动发货</span>
</h3>
<h4>在您支付成功后,系统将立即为您发送二维码,您可以在订单中查看。</h4>
</div>
</section>
<section class="block tickets-mobile">
<input type="text" name="mobile" placeholder="手机号" id="mobile">
<span class="mobile-tips">(必填)</span>
</section>
<section class="block goods-bottom">
{{#each goods}}
{{> me/order/good}}
{{/each}}
</section>
<section class="block dispatch">
<div class="yoho-coin">
<ul class="sale-invoice">
<li class="coin" data-yoho-coin="{{yohoCoin}}">
<span class="title">YOHO币</span>
{{#if yohoCoin}}
<span class="desc used {{#unless useYohoCoin}}hide{{/unless}}">已抵¥{{useYohoCoin}}</span>
<span class="desc can-use {{#if useYohoCoin}}hide{{/if}}">可抵¥{{yohoCoin}}</span>
{{#if useYohoCoin}}
<span class="coin-check">
<!-- <em>- ¥ {{useYohoCoin}}</em> -->
<i class="iconfont checkbox icon-cb-radio"></i>
</span>
{{else}}
<span class="coin-check">
<!-- <em style="display: none;">- ¥ {{useYohoCoin}}</em> -->
<i class="iconfont checkbox icon-radio"></i>
</span>
{{/if}}
{{^}}
<span class="not-used coin-check">
无YOHO币可用
</span>
{{/if}}
</li>
</ul>
</div>
<div class="sub-block delivery-id">
<h3>
<p>发票</p>
</h3>
<h4>
如需开具发票,请于我们的客服联系<br>
客服电话:400-889-9646
</h4>
</div>
</section>
<section class="price-cal block">
<ul class="total">
{{#cartPayData}}
<li>
<p>{{promotion}}</p>
<span>{{promotion_amount}}</span>
</li>
{{/cartPayData}}
</ul>
<div class="price-cost">
实付金额
<span>¥{{price}}</span>
</div>
</section>
<div class="bill">
您需要支付:<span>¥{{price}}</span>
<a href="javascript:;" id="ticketsConfirm">确认</a>
</div>
<input type="hidden" name="ticketsPage" id="ticketsPage" value="1">
<input type="hidden" name="productSku" id="productSku" value="{{productSku}}">
<input type="hidden" name="buyNumber" id="buyNumber" value="{{buyNumber}}">
</div>
{{> layout/footer}}
... ...
... ... @@ -2,24 +2,33 @@
<div class="order-detail-page yoho-page">
{{# orderDetail}}
<div id="order-detail" data-id="{{orderNum}}">
<section class="owner-info block" data-changeable="{{changeable}}" data-url="{{url}}">
<span class="iconfont">&#xe637;</span>
{{#if isVirtual}}
<section class="block">
<div class="tickets-mobile">
<span class="pull-left">手机号码:</span>
<span class="pull-right">{{mobile}}</span>
</div>
</section>
{{else}}
<section class="owner-info block" data-changeable="{{changeable}}" data-url="{{url}}">
<span class="iconfont">&#xe637;</span>
<div class="beside-icon">
<p class="name-phone">
{{name}}
<span>{{phoneNum}}</span>
</p>
<div class="beside-icon">
<p class="name-phone">
{{name}}
<span>{{phoneNum}}</span>
</p>
<p class="address">
{{address}}
</p>
<p class="address">
{{address}}
</p>
<div class="rest">其他地址<span class="iconfont iconAddress">&#xe614;</span></div>
</div>
</section>
<div class="range"></div>
<div class="rest">其他地址<span class="iconfont iconAddress">&#xe614;</span></div>
</div>
</section>
<div class="range"></div>
{{/if}}
<section class="order-status block">
<div class="status sub">
<span class="iconfont">&#xe632;</span>
... ... @@ -98,33 +107,43 @@
<div class="opt block">
{{#unless unreceived}}
{{#unless unpaid}}
<span class="btn btn-del">删除订单</span>
<span class="btn btn-rebuy">再次购买</span>
{{/unless}}
{{#unless unpaid}}
<span class="btn btn-del">删除订单</span>
{{#if isVirtual}}
<!--虚拟商品-->
{{else}}
<span class="btn btn-rebuy">再次购买</span>
{{/if}}
{{/unless}}
{{/unless}}
{{#if unpaid}}
<ul class="count-down hide">
<li>
<span class="iconfont count-down-icon">&#xe64a;</span>
</li>
<li>
<span class="hours">{{leftTime}}</span>
</li>
</ul>
<span class="btn btn-cancel">取消订单</span>
{{#if payUrl}}
<a href="{{payUrl}}">
<span class="btn btn-pay">立即付款</span>
</a>
{{/if}}
<ul class="count-down hide">
<li>
<span class="iconfont count-down-icon">&#xe64a;</span>
</li>
<li>
<span class="hours">{{leftTime}}</span>
</li>
</ul>
<span class="btn btn-cancel">取消订单</span>
{{#if payUrl}}
<a href="{{payUrl}}">
<span class="btn btn-pay">立即付款</span>
</a>
{{/if}}
{{/if}}
{{#if logisticsUrl}}
<a href="{{logisticsUrl}}">
<span class="btn btn-check-logistics">查看物流</span>
</a>
<a href="{{logisticsUrl}}">
<span class="btn btn-check-logistics">查看物流</span>
</a>
{{/if}}
{{#if qrcode}}
<a href="{{qrcode}}">
<span class="btn btn-check-logistics">查看二维码</span>
</a>
{{/if}}
</div>
</div>
... ...
... ... @@ -5,9 +5,9 @@
{{/if}}
<div class="payapp-list">
{{# payAppInfo}}
{{#if payLink}}
<a href="{{payLink}}">
{{/if}}
{{#if payLink}}
<a href="{{payLink}}">
{{/if}}
<div class="box" id="{{appId}}">
<div class="icon">
{{#if appIcon}}
... ... @@ -26,9 +26,9 @@
</div>
<div class="iconfont">&#xe604</div>
</div>
{{#if payLink}}
</a>
{{/if}}
{{#if payLink}}
</a>
{{/if}}
{{/ payAppInfo}}
</div>
<div class="loading-toast hide"></div>
... ...
... ... @@ -136,7 +136,7 @@
{{#if addToCartUrl}}
<!-- <a id="addtoCart" href="{{addToCartUrl}}" class="addto-cart">加入购物车</a> -->
<a id="addtoCart" href="javascript:;" class="addto-cart">加入购物车</a>
<a id="addtoCart" href="javascript:;" class="addto-cart">{{#if ../tickets}}立即购买{{else}}加入购物车{{/if}}</a>
{{/if}}
{{#if soldOut}}
... ... @@ -183,5 +183,16 @@
<input type="hidden" name="loginUrl" id="loginUrl" value="{{.}}">
{{/loginUrl}}
{{#if tickets}}
<form id="buyNowForm" method="post" action="{{ticketsConfirm}}">
<input type="hidden" name="productSku" id="productSku">
<input type="hidden" name="buyNumber" id="buyNumber">
</form>
{{/if}}
{{#if showPannel}}
<input type="hidden" id="showPannel" value="1">
{{/if}}
</div>
{{> layout/footer}}
... ...
{{#cartInfo}}
<div class="chose-panel">
<div class="main">
<div class="infos">
<div class="infos {{#if ../tickets}}tickets-info{{/if}}">
<div class="basic-info" >
{{#thumbs}}
<img class="thumb {{#unless @first}}hide{{/if}}" src={{img}}>
... ... @@ -18,7 +18,7 @@
</div>
<div class="chose-items">
<div class="color-list block-list">
<span>颜色</span>
<span>{{colorName}}</span>
{{# colors}}
<ul id="{{id}}" data-index="{{@index}}" class="size-row clearfix {{#unless @first}}hide{{/if}}">
{{# color}}
... ... @@ -29,8 +29,8 @@
</ul>
{{/ colors}}
</div>
<div class="size-list block-list">
<span>尺码</span>
<div class="size-list block-list {{#if ../single}}hide{{/if}}">
<span>{{sizeName}}</span>
{{# sizes}}
<ul class="size-row clearfix {{#unless @first}}hide{{/if}}">
{{# size}}
... ... @@ -55,13 +55,15 @@
</div>
<span class="left-num"></span>
<input id="left-num" type="hidden" value="0">
<input id="limitNum" type="hidden" value="{{limit}}">
</div>
</div>
</div>
<div class="btn-wrap">
<button id="chose-btn-sure" class="btn btn-sure">加入购物车</button>
<button id="chose-btn-sure" class="btn btn-sure">{{#if ../tickets}}立即购买{{else}}加入购物车{{/if}}</button>
</div>
</div>
</div>
{{/cartInfo}}
<input id="promotionId" type="hidden" value="{{promotionId}}">
\ No newline at end of file
<input id="promotionId" type="hidden" value="{{promotionId}}">
<input id="single" type="hidden" value="{{single}}">
\ No newline at end of file
... ...
... ... @@ -12,13 +12,13 @@
<p class="row">
{{#if color}}
<span class="color">
颜色:{{color}}
{{#if tickets}}日期{{else}}颜色{{/if}}:{{color}}
</span>
{{/if}}
{{#if size}}
<span class="size">
尺码:{{size}}
{{#if tickets}}区域{{else}}尺码{{/if}}:{{size}}
</span>
{{/if}}
</p>
... ...
... ... @@ -17,12 +17,22 @@
{{!-- 完成和取消订单显示删除按钮 --}}
{{#unless unpaid}}
{{#unless unreceived}}
<div class="order-opt">
<span class="btn del">删除订单</span>
<span class="btn rebuy">再次购买</span>
</div>
{{/unless}}
<div class="order-opt">
{{#unless unreceived}}
<span class="btn del">删除订单</span>
{{#if isVirtual}}
<!--虚拟商品-->
{{else}}
<span class="btn rebuy">再次购买</span>
{{/if}}
{{/unless}}
{{#if qrcode}}
<a class="locHref" href="{{qrcode}}">
<span class="btn check-logistics">查看二维码</span>
</a>
{{/if}}
</div>
{{/unless}}
{{#if unpaid}}
... ... @@ -53,5 +63,6 @@
</a>
</div>
{{/if}}
{{/if}}
</div>
\ No newline at end of file
... ...
{{#goodsDescription}}
<div class="goods-desc page-block">
{{#unless hideService}}
<div class="service"></div>
{{/unless}}
<h1 class="title">
{{title}}
<span class="en-title">{{enTitle}}</span>
... ...
... ... @@ -72,7 +72,7 @@ class Bootstrap extends Bootstrap_Abstract
$controller = 'Index';
$action = 'Index';
// 三级域名
if (3 === $level) {
if (4 === $level) {
$subDomain = strval($hostParts[0]);
switch (strtolower($subDomain)) {
case 'm': // 老版(到频道选择)
... ...
... ... @@ -987,7 +987,6 @@ class HomeController extends AbstractAction
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
if ($openId) {
$this->setSession('weixinOpenId', $openId);
$this->setSession('weixinOpenId' . $orderCode, $openId);
}
}
... ... @@ -1051,7 +1050,7 @@ class HomeController extends AbstractAction
}
$totalFee = strval($orderDetail['data']['payment_amount'] * 100);
$openId = $this->getSession('weixinOpenId');
$openId = $this->getSession('weixinOpenId' . $orderCode);
if (empty($openId)) {
UdpLog::info('【微信支付下单】Session中的weixinOpenId校验','weixinOpenId为空');
break;
... ... @@ -1112,6 +1111,11 @@ class HomeController extends AbstractAction
$this->setTitle('订单详情');
$this->setNavHeader('订单详情', true, false);
$openId = $this->get('openId', '');
if (!empty($openId)) {
//微信支付成功,发送支付确认接口
OrderData::payConfirm($orderCode, 22, $this->_uid);
}
$this->_view->display('order-detail', array(
'orderDetailPage' => true,
... ...
... ... @@ -66,6 +66,7 @@ class OrderModel
$result = array();
//调用接口获得数据
$data = OrderData::getOrderData($type, $page, $limit, $gender, $yh_channel, $uid);
// 判断是否还有数据, 没有数据则返回空
if (isset($data['data']['page_total']) && $page > $data['data']['page_total']) {
return $result;
... ... @@ -87,7 +88,12 @@ class OrderModel
$result[$key]['shippingCost'] = $vo['shipping_cost'];
}
//类内调用格式化订单商品数据方法
$result[$key]['goods'] = Helpers::formatOrderGoods($vo['order_goods'], $count);
$tickets = false;
if (isset($vo['virtual_type']) && $vo['virtual_type'] * 1 == 3) {
$tickets = true;
$result[$key]['isVirtual'] = true;//虚拟商品
}
$result[$key]['goods'] = Helpers::formatOrderGoods($vo['order_goods'], $count, false, $tickets);
$result[$key]['detailUrl'] = Helpers::url('/home/orderdetail', array('order_code' => $vo['order_code']));
$result[$key]['count'] = $count;
//倒计时时间
... ... @@ -202,7 +208,15 @@ class OrderModel
$orderDetail = OrderData::viewOrderData($orderCode, $uid, $sessionKey);
if (isset($orderDetail['data']['order_code'])) {
$count = 0;
$orderDetail['data']['virtual_type'] = empty($orderDetail['data']['virtual_type']) ? '' : $orderDetail['data']['virtual_type'] * 1;
$result = self::getOrderStatus($orderDetail['data'], true); // 订单状态
//门票
if (isset($orderDetail['data']['virtual_type']) && $orderDetail['data']['virtual_type'] == 3) {
//手机号
$result['isVirtual'] = true;
$result['mobile'] = isset($orderDetail['data']['mobile']) ? $orderDetail['data']['mobile'] : '';
}
$result['name'] = $orderDetail['data']['user_name'];
$result['phoneNum'] = $orderDetail['data']['mobile'];
$result['address'] = $orderDetail['data']['area'] . $orderDetail['data']['address'];
... ... @@ -213,7 +227,7 @@ class OrderModel
if (isset($orderDetail['data']['counter_flag']) && $orderDetail['data']['counter_flag'] == 'Y') {
$result['leftTime'] = $orderDetail['data']['pay_lefttime']*1000;
}
$result['goods'] = Helpers::formatOrderGoods($orderDetail['data']['order_goods'], $count, true);
$result['goods'] = Helpers::formatOrderGoods($orderDetail['data']['order_goods'], $count, true, true);
if (isset($orderDetail['data']['promo_code_amount'])) {
$result['promo_code_amount'] = self::filterOrderPrice($orderDetail['data']['promo_code_amount']); // 优惠码
}
... ... @@ -310,6 +324,9 @@ class OrderModel
break;
}
//转数字
$order['virtual_type'] = empty($order['virtual_type']) ? '' : $order['virtual_type'] * 1;
// 先判断订单付款方式,根据不同的付款方式计算订单状态。(注:货到付款没有待付款状态)
// 支付方式为非货到付款时,计算订单状态。
if ($order['payment_type'] != 2) {
... ... @@ -327,14 +344,29 @@ class OrderModel
break;
case 4:
case 5:
//已发货状态,给查看物流URL
//已发货状态,给查看物流或二维码URL
$result['unreceived'] = true;
self::assignExpressInfo($showLogistics, $order, $result);
//门票
if (isset($order['virtual_type']) && $order['virtual_type'] === 3) {
$result['qrcode'] = Helpers::url('/home/QRcode/'.$order['order_code']);
}
//非门票
else {
self::assignExpressInfo($showLogistics, $order, $result);
}
break;
case 6:
$result['completed'] = true;
// 已成功订单,给查看物流URL
self::assignExpressInfo($showLogistics, $order, $result);
// 已成功订单,给查看物流或二维码URL
//门票
if (isset($order['virtual_type']) && $order['virtual_type'] === 3) {
$result['qrcode'] = Helpers::url('/home/QRcode/'.$order['order_code']);
}
//非门票
else {
self::assignExpressInfo($showLogistics, $order, $result);
}
break;
default:
break;
... ...
... ... @@ -7,6 +7,7 @@ use LibModels\Wap\Home\OrderData;
use Plugin\Helpers;
use Plugin\Images;
use Plugin\UdpLog;
use Configs\TicketsConfig;
use Plugin\Encryption;
... ... @@ -1104,4 +1105,63 @@ class CartModel
return $result;
}
/**
* 获取门票数据
* @param int $uid
* @param int $productSku
* @param int $buyNumber
* @param int $useYohoCoin
* @return arr
*/
public static function getTickets($uid, $productSku, $buyNumber, $useYohoCoin = 0)
{
$result = array();
$data = CartData::checkTickets($uid, $productSku, $buyNumber, $useYohoCoin);
if (!isset($data['code']) || $data['code'] !== 200) {
return $result;
}
//商品数据
//门票skn
$ticketsSkn = array('single' => TicketsConfig::SINGLE_TICKETS_SKN,'package' => TicketsConfig::PACKAGE_TICKETS_SKN);
$goodsPrice = 0;
foreach ($data['data']['goods_list'] as $key => $single) {
$oneGoods = array();
$oneGoods['tickets'] = true;
$oneGoods['id'] = $single['product_sku'];
$oneGoods['thumb'] = Images::getImageUrl($single['goods_images'], 120, 160);
$oneGoods['name'] = $single['product_name'];
$oneGoods['color'] = $single['color_name'];
$oneGoods['size'] = $single['product_skn'] == $ticketsSkn['single'] ? '' : $single['size_name'];
$oneGoods['count'] = $single['buy_number'];
$oneGoods['price'] = Helpers::transPrice($single['last_price']);
// 累加商品金额
$goodsPrice += $oneGoods['count'] * $oneGoods['price'];
$result['goods'][] = $oneGoods;
}
$result['cartPayData'] = $data['data']['shopping_cart_data']['promotion_formula_list'];
$price = $data['data']['shopping_cart_data']['last_order_amount'];
$result['price'] = Helpers::transPrice($price, true);
// 有货币
$result['yohoCoin'] = Helpers::transPrice($data['data']['yoho_coin']);
$result['useYohoCoin'] = isset($data['data']['shopping_cart_data']['use_yoho_coin']) ? $data['data']['shopping_cart_data']['use_yoho_coin'] : false;
return $result;
}
public static function ticketsOrderCompute($uid, $productSku, $buyNumber, $yohoCoin)
{
$result = array();
$compute = CartData::checkTickets($uid, $productSku, $buyNumber, $yohoCoin);
if ($compute && isset($compute['code']) && $compute['code'] === 200) {
// 有货币添加.00后缀
$compute['data']['shopping_cart_data']['use_yoho_coin'] = Helpers::transPrice($compute['data']['shopping_cart_data']['use_yoho_coin']);
$result = $compute['data']['shopping_cart_data'];
}
return $result;
}
}
... ...
... ... @@ -40,7 +40,7 @@ class UserModel
if (isset($userData['data']) && !empty($userData['data'])) {
$result = $userData['data'];
$result['gender'] = $result['gender'] == 1 ? '男' : '女';
$result['head_ico'] = Images::getImageUrl($result['head_ico'], 128, 128);
$result['head_ico'] = isset($result['head_ico']) && !empty($result['head_ico']) ? Images::getImageUrl($result['head_ico'], 128, 128) : '';
}
return $result;
... ...
... ... @@ -3,8 +3,8 @@
namespace Product;
use LibModels\Wap\Product\DetailData;
use Plugin\DataProcess\CouponFloorProcess;
use Plugin\Helpers;
use Configs\TicketsConfig;
/**
* 商品详情页模板相关的数据模型
... ... @@ -365,6 +365,33 @@ class DetailModel
$result['introUrl'] = Helpers::url('/product/intro_' . $baseInfo['erpProductId'] . '/' . $baseInfo['cnAlphabet'] . '.html', null, '');
$result['id'] = $productId;
//虚拟商品(门票)
$ticketsSkn = array('single' => TicketsConfig::SINGLE_TICKETS_SKN,'package' => TicketsConfig::PACKAGE_TICKETS_SKN);
if ($baseInfo['attribute'] == 3 && in_array($baseInfo['productPriceBo']['productSkn'], $ticketsSkn)) {
$result['tickets'] = true;
$result['ticketsConfirm'] = Helpers::url('/cart/index/ticketsConfirm');
$result['cartInfo']['colorName'] = $result['tickets'] ? '日期' : '颜色';
$result['cartInfo']['sizeName'] = $result['tickets'] ? '区域' : '尺码';
//展览票
if ($baseInfo['productPriceBo']['productSkn'] == $ticketsSkn['single']) {
$result['single'] = true;
}
//套票
else {
$result['package'] = true;
}
//购票限制
$result['cartInfo']['limit'] = '4';
//清空活动
unset($result['goodsDiscount']);
// 来自登录页,自动弹出选择框
if (isset($_GET['product_type']) && $_GET['product_type'] == 'ticket') {
$result['showPannel'] = true;
}
}
// 清空变量,释放内存
$baseInfo = array();
$goodsGroup = array();
... ...
... ... @@ -7,6 +7,7 @@ use Index\UserModel;
use Plugin\Helpers;
use Plugin\UnionTrans;
use Home\OrderModel;
use LibModels\Wap\Home\CartData;
use Plugin\UdpLog;
use LibModels\Wap\Home\UserData;
use Plugin\Encryption;
... ... @@ -495,9 +496,19 @@ class IndexController extends AbstractAction
$paymentType = $this->post('paymentTypeId', 1);
$couponCode = $this->post('couponCode', null);
$yohoCoin = $this->post('yohoCoin', null);
$productSku = $this->post('productSku', null);
$buyNumber = $this->post('buyNumber', null);
$uid = $this->getUid(true);
$skuList = $this->post('skuList', '');
$result = CartModel::orderCompute($uid, $cartType, $deliveryWay, $paymentType, $couponCode, $yohoCoin, $skuList);
$type = $this->post('type', null);
//type : tickets 门票
if ($type !== 'tickets' ) {
$result = CartModel::orderCompute($uid, $cartType, $deliveryWay, $paymentType, $couponCode, $yohoCoin, $skuList);
}
//非门票
else {
$result = CartModel::ticketsOrderCompute($uid, $productSku, $buyNumber, $yohoCoin);
}
}
$this->echoJson($result);
... ... @@ -717,4 +728,74 @@ class IndexController extends AbstractAction
$this->_view->display('jit-detail', $data);
}
/**
* 校验电子票
*
*/
public function checkTicketsAction()
{
if (!$this->isAjax()) {
exit;
}
$data = array();
$uid = $this->getUid();
do {
//判断用户登陆
if (!$uid) {
$data = array(
'code' => 401,
);
break;
}
$productSku = $this->post('productSku');
$buyNumber = $this->post('buyNumber');
$useYohoCoin = $this->post('useYohoCoin', 0);
$data = CartData::checkTickets($uid, $productSku, $buyNumber, $useYohoCoin);
} while(false);
$this->echoJson($data);
}
//电子票确认
public function ticketsConfirmAction()
{
// 审判跳转登录页
$this->auditJumpLogin();
$uid = $this->getUid();
$productSku = $this->post('productSku');
$buyNumber = $this->post('buyNumber');
if (empty($productSku) || empty($buyNumber)) {
$this->error();
}
$tickets = CartModel::getTickets($uid, $productSku, $buyNumber);
$this->setTitle('确认订单');
$this->setNavHeader('确认订单', true, false); // 不显示右上角home按钮
$tickets['orderEnsurePage'] = true;
$tickets['productSku'] = $productSku;
$tickets['buyNumber'] = $buyNumber;
$this->_view->display('tickets-confirm', $tickets);
}
//电子票下单
public function submitTicketAction()
{
$result = array();
do {
$uid = $this->getUid();
$productSku = $this->post('productSku');
$buyNumber = $this->post('buyNumber');
$mobile = $this->post('mobile');
$useYohoCoin = $this->post('useYohoCoin');
if (empty($uid) || empty($productSku) || empty($buyNumber) || empty($mobile)) {
break;
}
//联盟参数 TODO
$data = CartData::submitTicket($uid, $productSku, $buyNumber, $mobile, $useYohoCoin);
if (isset($data['code'])) {
$result = $data;
}
} while(false);
$this->echoJson($result);
}
}
... ...
... ... @@ -51,7 +51,7 @@ class DetailController extends AbstractAction
if (!$this->isApp()){
$this->setNavHeader('商品详情');
}
// 渲染模板
// 渲染模板 TODO
$this->_view->display('index', $data);
}
... ...
... ... @@ -121,9 +121,10 @@ class PayController extends AbstractAction
}
$totalFee = strval($orderDetail['data']['payment_amount'] * 100);
$openId = $this->getSession('weixinOpenId');
$openId = $this->getSession('weixinOpenId' . $orderCode);
if (empty($openId)) {
UdpLog::info('【wechat支付】获取wechat标识为空', 'orderCode:'.$orderCode.'uid:'.$uid.'返回openId:'.$openId);
UdpLog::info('【wechat支付】获取wechat标识为空', array('orderCode' => $orderCode, 'uid' => $uid, 'openId' => $openId));
break;
}
... ...
... ... @@ -11,7 +11,8 @@ define('APPLICATION_PATH', dirname(__DIR__)); // 应用目录
define('ROOT_PATH', dirname(dirname(APPLICATION_PATH))); // 根目录
defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'developer');
define('API_URL', 'http://testapi.yoho.cn:28078/');
//define('API_URL', 'http://testapi.yoho.cn:28078/');
define('API_URL', 'http://devapi.yoho.cn:58078');
define('SERVICE_URL', 'http://testservice.yoho.cn:28077/');
define('YOHOBUY_URL', 'http://www.yohobuy.com/');
define('SERVICE_NOTIFY', 'http://testservice.yoho.cn:28077/');
... ...