'use strict'; const helpers = global.yoho.helpers; const crypto = global.yoho.crypto; const _ = require('lodash'); /** *有货币使用前端方案显示及是否可单击判断 */ function yohoCoinCompute(orderCompute) { let yohoCoinData = { totalYohoCoinNum: (orderCompute.total_yoho_coin_num || 0) * 1, yohoCoin: (orderCompute.yoho_coin || 0) * 1, useYohoCoin: (orderCompute.use_yoho_coin || 0) * 1, yohoCoinClick: 0, yohoCoinMsg: '', yoho_coin_pay_rule: orderCompute.yoho_coin_pay_rule || {} }; if (!orderCompute) { return yohoCoinData; } if (yohoCoinData.yohoCoin > 0) { yohoCoinData.yohoCoin = yohoCoinData.yohoCoin.toFixed(2); } if (yohoCoinData.useYohoCoin > 0) { yohoCoinData.useYohoCoin = yohoCoinData.useYohoCoin.toFixed(2); } if (yohoCoinData.totalYohoCoinNum < 100) { yohoCoinData.yohoCoinMsg = `共${yohoCoinData.totalYohoCoinNum}有货币,满${orderCompute.yoho_coin_pay_rule.num_limit}可用`; } else if (yohoCoinData.useYohoCoin > 0 || yohoCoinData.yohoCoin > 0) { yohoCoinData.yohoCoinMsg = '可抵¥' + (yohoCoinData.useYohoCoin > 0 ? yohoCoinData.useYohoCoin : yohoCoinData.yohoCoin); yohoCoinData.yohoCoinClick = 1; } else { yohoCoinData.yohoCoinMsg = '不满足有货币使用条件'; } return yohoCoinData; } /** * 转换 原始结算数据 ,适应模板 * TODO: 其他结算,如果有 相似的 结构,可以移出去 * @param data 结算页面数据 * @param orderInfo * orderInfo.paymentType 用户支付常用方式 */ function tranformPayment(data, orderInfo) { orderInfo = orderInfo || {}; let result = {}; let isSunfengSupport; // delivery_address 中 提取信息 if (data.hasOwnProperty('delivery_address') && !_.isEmpty(data.delivery_address)) { let cookieAddress = orderInfo.address; let addressData = data.delivery_address; let isSupport = cookieAddress ? cookieAddress.is_support : addressData.is_support; result.name = cookieAddress ? cookieAddress.consignee : addressData.consignee; result.phoneNum = cookieAddress ? cookieAddress.mobile : addressData.mobile; result.addressId = cookieAddress ? parseInt(crypto.decrypt(null, cookieAddress.address_id), 10) : addressData.address_id; result.addressInfo = cookieAddress ? cookieAddress.address_info : [addressData.area, addressData.address].join(' '); result.addressId = crypto.encryption(null, result.addressId + ''); isSunfengSupport = isSupport === 'Y'; } // delivery_way 配送信息 if (data.delivery_way) { let arr = []; let cookieWayId = orderInfo.deliveryId; let deliveryWay = data.delivery_way; let isDeliveryId = true; let defaultKey = 0; deliveryWay.forEach((way, index) => { if (way.delivery_way_name === '顺丰速运' && !isSunfengSupport) { return; } let obj = {}; (way.default === 'Y') && (defaultKey = index); if (cookieWayId && (way.delivery_way_id === cookieWayId)) { obj.isSelected = true; isDeliveryId = false; } arr.push( Object.assign({ id: way.delivery_way_id, name: way.delivery_way_name, cost: way.delivery_way_cost, }, obj) ); }); if (isDeliveryId) { arr[defaultKey].isSelected = true; } result.dispatchMode = arr; } // delivery_time 配送时间 if (data.delivery_time) { let cookieTimeId = orderInfo.deliveryTimeId; let defaultKey = 0; let times = data.delivery_time; times = times.map((time, index) => { (time.default === 'Y') && (defaultKey = index); return { isSelected: false, id: time.delivery_time_id, name: time.delivery_time_string }; }); times[defaultKey].isSelected = true; if (cookieTimeId) { let selectTime = times.find(time => time.id === cookieTimeId); if (selectTime) { times[defaultKey].isSelected = false; selectTime.isSelected = true; } } result.dispatchTime = times; } // goods_list 订单商品 if (data.goods_list) { let goods = data.goods_list; let goodsPrice = 0; goods = goods.map(good => { var obj = {}; obj.id = good.product_sku; obj.thumb = helpers.image(good.goods_images, 120, 160); obj.name = good.product_name; obj.color = good.color_name; obj.size = good.size_name; obj.count = good.buy_number; obj.price = good.last_price; obj.isLimitSkn = good.is_limit_skn === 'Y'; if (good.good_type === 'gift' && good.is_advance === 'Y') { obj.gift = true; obj.price = good.sale_price; } else if (good.good_type === 'price_gift') { // eslint-disable-line obj.advanceBuy = true; obj.price = good.sale_price; } // Total Price goodsPrice += obj.count * obj.price; return obj; }); result.goods = goods; result.goodsPrice = goodsPrice; } // 支付方式 if (data.payment_way) { let payway = data.payment_way; payway = payway.filter(obj => obj.is_support === 'Y') .map(way => { let obj = {}; obj.id = way.payment_id; obj.paymentType = way.payment_type; obj.name = way.payment_type_name; obj.isSupport = way.is_support === 'Y'; return obj; }); payway.some(way => { let bool = way.paymentType === orderInfo.paymentType; if (bool) { way.recommend = true; } return bool; }) || (payway[0].recommend = true); result.paymentWay = payway; } // 有货币 result.yohoCoinCompute = yohoCoinCompute(data); // 发票 if (data.invoices) { let invTypes = data.invoices.invoiceContentList || []; invTypes = invTypes.map(type => { return { id: type.invoices_type_id, name: type.invoices_type_name }; }); result.invoice = invTypes; if (orderInfo.invoice) { result.needInvoice = orderInfo.invoice; result.invoiceText = orderInfo.invoiceText; } } // 留言 orderInfo.msg && (result.msg = orderInfo.msg); // 订单数据 if (data.shopping_cart_data) { let cartData = data.shopping_cart_data; // 拆单逻辑 not here // you can add to here , if you need // 这块数据处理, 要改写,请参照Cart.php @cartPay // ----------------------- result.cartPayData = cartData.promotion_formula_list; result.num = cartData.goods_count; result.goodsPrice = cartData.str_order_amount; result.price = cartData.last_order_amount; if (cartData.gain_yoho_coin > 0) { result.yohoCoinNum = cartData.gain_yoho_coin; result.returnYohoCoin = true; } } // 优惠券 not here // 你可以在此添加, 但不是所有的结算类型都需要购物券. // 也可以在函数的返回值上追加 // ----------------------- return result; } module.exports = { tranformPayment, yohoCoinCompute };