Authored by wujiexiang

Merge branch 'test6.9.5' of http://git.yoho.cn/ufo/yohoufo-fore into test6.9.5

@@ -19,4 +19,6 @@ public interface ProductMapper { @@ -19,4 +19,6 @@ public interface ProductMapper {
19 List<Product> selectByIds(List<Integer> ids); 19 List<Product> selectByIds(List<Integer> ids);
20 20
21 List<Product> selectByProductCode(@Param("productCode") String productCode); 21 List<Product> selectByProductCode(@Param("productCode") String productCode);
  22 +
  23 + String selectIntroByProductId(Integer id);
22 } 24 }
@@ -90,4 +90,9 @@ @@ -90,4 +90,9 @@
90 from product 90 from product
91 where product_code = #{productCode,jdbcType=VARCHAR} 91 where product_code = #{productCode,jdbcType=VARCHAR}
92 </select> 92 </select>
  93 + <select id="selectIntroByProductId" parameterType="java.lang.Integer" resultType="java.lang.String">
  94 + select product_intro
  95 + from product_intro
  96 + where product_id = #{productId} limit 1
  97 + </select>
93 </mapper> 98 </mapper>
@@ -366,11 +366,13 @@ public class AppraiseService { @@ -366,11 +366,13 @@ public class AppraiseService {
366 buyerOrderMapper.updatePlatformDeliveryStatusByOrderCode(orderCode, buyerOrder.getUid(), 366 buyerOrderMapper.updatePlatformDeliveryStatusByOrderCode(orderCode, buyerOrder.getUid(),
367 EnumPlatformDeliveryStatus.delivery_to_seller.getCode(), DateUtil.getCurrentTimeSecond()); 367 EnumPlatformDeliveryStatus.delivery_to_seller.getCode(), DateUtil.getCurrentTimeSecond());
368 }); 368 });
369 - //发送消息  
370 - inBoxFacade.sendCancelledProductToSellerByCenter(sellerUid, wayBillCode);  
371 369
372 //清缓存 370 //清缓存
373 - cleanCacheAfterUpdateStatus(buyerOrder.getOrderCode(), buyerOrder.getUid(), buyerOrder.getSellerUid()); 371 + SellerOrderGoods sellerOrderGoods = cleanCacheAfterUpdateStatus(buyerOrder.getOrderCode(), buyerOrder.getUid(), buyerOrder.getSellerUid());
  372 +
  373 + //发送消息
  374 + inBoxFacade.sendCancelledProductToSellerByCenter(sellerUid,orderCode, sellerOrderGoods,wayBillCode);
  375 +
374 376
375 return apiResponse; 377 return apiResponse;
376 } 378 }
@@ -81,6 +81,10 @@ public class InBoxFacade { @@ -81,6 +81,10 @@ public class InBoxFacade {
81 InBoxResponse resp = inBoxSDK.addInbox(req); 81 InBoxResponse resp = inBoxSDK.addInbox(req);
82 logger.info("record buyerOrderNotPayed inbox msg, buyerUid {}, orderCode {}, resp {}", 82 logger.info("record buyerOrderNotPayed inbox msg, buyerUid {}, orderCode {}, resp {}",
83 buyerUid, orderCode, resp); 83 buyerUid, orderCode, resp);
  84 +
  85 + //push
  86 + SendMessageRspBo bo = ufoSendService.buyerNotPay(String.valueOf(buyerUid),String.valueOf(orderCode));
  87 + logger.info("record buyerOrderNotPayed push buyer uid is {}, orderCode is {}, result is {}", buyerUid, orderCode, JSON.toJSONString(bo));
84 }); 88 });
85 } catch (Exception e) { 89 } catch (Exception e) {
86 logger.warn("InBoxFacade buyerOrderNotPayed error inbox msg, buyerUid {}, orderCode {} ", 90 logger.warn("InBoxFacade buyerOrderNotPayed error inbox msg, buyerUid {}, orderCode {} ",
@@ -132,6 +136,10 @@ public class InBoxFacade { @@ -132,6 +136,10 @@ public class InBoxFacade {
132 Product product = productMapper.selectByPrimaryKey(psog.getProductId()); 136 Product product = productMapper.selectByPrimaryKey(psog.getProductId());
133 String productCode = product.getProductCode(); 137 String productCode = product.getProductCode();
134 138
  139 + //发push
  140 + SendMessageRspBo bo = ufoSendService.sellerDeliverNotice(String.valueOf(buyerUid),String.valueOf(orderCode));
  141 + logger.info("record sellerDeliver2Depot push buyer uid is {}, orderCode is {}, result is {}", buyerUid, orderCode, JSON.toJSONString(bo));
  142 +
135 //sms 143 //sms
136 String phone = userProxyService.getMobile(buyerUid); 144 String phone = userProxyService.getMobile(buyerUid);
137 if (StringUtils.isBlank(phone)){ 145 if (StringUtils.isBlank(phone)){
@@ -176,6 +184,11 @@ public class InBoxFacade { @@ -176,6 +184,11 @@ public class InBoxFacade {
176 logger.info("record noticeBuyerWhenDeliveryGoodsToBuyer inbox msg, buyerUid {}, orderCode {}, prdName {},SellerOrderGoods {} resp {}", 184 logger.info("record noticeBuyerWhenDeliveryGoodsToBuyer inbox msg, buyerUid {}, orderCode {}, prdName {},SellerOrderGoods {} resp {}",
177 buyerUid, orderCode, prdName, JSON.toJSONString(psog), resp); 185 buyerUid, orderCode, prdName, JSON.toJSONString(psog), resp);
178 186
  187 + //发push
  188 + SendMessageRspBo bo = ufoSendService.platformDeliverBuyer(String.valueOf(buyerUid),String.valueOf(orderCode));
  189 + logger.info("record noticeBuyerWhenDeliveryGoodsToBuyer push buyer uid is {}, orderCode is {}, result is {}", buyerUid, orderCode, JSON.toJSONString(bo));
  190 +
  191 +
179 //seller notice 192 //seller notice
180 193
181 194
@@ -519,6 +532,13 @@ public class InBoxFacade { @@ -519,6 +532,13 @@ public class InBoxFacade {
519 logger.info("record buyerQualityCheckNotPass inbox msg, buyerUid {} ,orderCode {},prdName {} ,resp {}", 532 logger.info("record buyerQualityCheckNotPass inbox msg, buyerUid {} ,orderCode {},prdName {} ,resp {}",
520 buyerUid, orderCode, prdName ,resp); 533 buyerUid, orderCode, prdName ,resp);
521 534
  535 + //瑕疵确认超时,发push
  536 + if(outTimeFlag){
  537 + //发push
  538 + SendMessageRspBo bo = ufoSendService.buyerConfirmFlawExceed(String.valueOf(buyerUid),String.valueOf(orderCode));
  539 + logger.info("record buyerQualityCheckNotPass push buyer uid is {}, orderCode is {},outTimeFlag {}, result is {}", buyerUid, orderCode,outTimeFlag, JSON.toJSONString(bo));
  540 + }
  541 +
522 //短信 542 //短信
523 String phone = userProxyService.getMobile(buyerUid); 543 String phone = userProxyService.getMobile(buyerUid);
524 if (StringUtils.isBlank(phone)){ 544 if (StringUtils.isBlank(phone)){
@@ -1162,11 +1182,11 @@ public class InBoxFacade { @@ -1162,11 +1182,11 @@ public class InBoxFacade {
1162 /** 1182 /**
1163 * 鉴定中心把 买家取消(卖家已发货给中心)的物品,顺丰到付寄给卖家 1183 * 鉴定中心把 买家取消(卖家已发货给中心)的物品,顺丰到付寄给卖家
1164 */ 1184 */
1165 - public void sendCancelledProductToSellerByCenter(int sellerUid,String wayBillCode){ 1185 + public void sendCancelledProductToSellerByCenter(int sellerUid,Long orderCode,SellerOrderGoods sog,String wayBillCode){
1166 try { 1186 try {
1167 executorService.execute(() -> { 1187 executorService.execute(() -> {
1168 - logger.info("record sendCancelledProductToSeller inbox sms msg,sellerUid {}, wayBillCode {}",  
1169 - sellerUid, wayBillCode); 1188 + logger.info("record sendCancelledProductToSeller inbox sms msg,sellerUid {},orderCode {},sellerOrderGoods {}, wayBillCode {}",
  1189 + sellerUid, orderCode,sog,wayBillCode);
1170 1190
1171 String phone = userProxyService.getMobile(sellerUid); 1191 String phone = userProxyService.getMobile(sellerUid);
1172 logger.info("sendCancelledProductToSeller wayBillCode sms send get phone {},sellerUid {}, wayBillCode {}", 1192 logger.info("sendCancelledProductToSeller wayBillCode sms send get phone {},sellerUid {}, wayBillCode {}",
@@ -1176,8 +1196,12 @@ public class InBoxFacade { @@ -1176,8 +1196,12 @@ public class InBoxFacade {
1176 sellerUid,wayBillCode); 1196 sellerUid,wayBillCode);
1177 return; 1197 return;
1178 } 1198 }
  1199 + String prdName = sog.getProductName();
  1200 + String sizeName = sog.getSizeName();
  1201 + Product product = productMapper.selectByPrimaryKey(sog.getProductId());
  1202 + String productCode = product.getProductCode();
1179 List<String> mobileList = Arrays.asList(phone); 1203 List<String> mobileList = Arrays.asList(phone);
1180 - String content = getReplacedContent(InboxBusinessTypeEnum.SMS_CANCELED_BY_BUYER_AFTER_RECEIVED.getContent(),wayBillCode); 1204 + String content = getReplacedContent(InboxBusinessTypeEnum.SMS_CANCELED_BY_BUYER_AFTER_RECEIVED.getContent(),prdName,sizeName,productCode,orderCode,wayBillCode);
1181 1205
1182 sendSmsService.smsSendByMobile(content, mobileList); 1206 sendSmsService.smsSendByMobile(content, mobileList);
1183 logger.info("record sendCancelledProductToSeller inbox sms msg end,sellerUid {}, wayBillCode {}, phone {},", 1207 logger.info("record sendCancelledProductToSeller inbox sms msg end,sellerUid {}, wayBillCode {}, phone {},",
@@ -1274,6 +1298,11 @@ public class InBoxFacade { @@ -1274,6 +1298,11 @@ public class InBoxFacade {
1274 executorService.execute(() -> { 1298 executorService.execute(() -> {
1275 InBoxResponse inBoxResponse = inBoxSDK.addInbox(inboxMessage); 1299 InBoxResponse inBoxResponse = inBoxSDK.addInbox(inboxMessage);
1276 logger.info("noticeBuyerOfSellerShamSendOut inbox send success, message is {} res is {}", inboxMessage, inBoxResponse); 1300 logger.info("noticeBuyerOfSellerShamSendOut inbox send success, message is {} res is {}", inboxMessage, inBoxResponse);
  1301 +
  1302 + //发push
  1303 + SendMessageRspBo bo = ufoSendService.sellerFalseDeliver(String.valueOf(uid),String.valueOf(orderCode));
  1304 + logger.info("record noticeBuyerOfSellerShamSendOut push buyer uid is {}, orderCode is {}, result is {}", uid, orderCode, JSON.toJSONString(bo));
  1305 +
1277 String phone = userProxyService.getMobile(uid); 1306 String phone = userProxyService.getMobile(uid);
1278 if (StringUtils.isBlank(phone)) { 1307 if (StringUtils.isBlank(phone)) {
1279 logger.warn("noticeBuyerOfSellerShamSendOut sms send fail,uid {} can not find phone", uid); 1308 logger.warn("noticeBuyerOfSellerShamSendOut sms send fail,uid {} can not find phone", uid);
@@ -1300,6 +1329,11 @@ public class InBoxFacade { @@ -1300,6 +1329,11 @@ public class InBoxFacade {
1300 executorService.execute(() -> { 1329 executorService.execute(() -> {
1301 InBoxResponse inBoxResponse = inBoxSDK.addInbox(inboxMessage); 1330 InBoxResponse inBoxResponse = inBoxSDK.addInbox(inboxMessage);
1302 logger.info("noticeBuyerOfSellerSendOutTimeout inbox send success, message is {} res is {}", inboxMessage, inBoxResponse); 1331 logger.info("noticeBuyerOfSellerSendOutTimeout inbox send success, message is {} res is {}", inboxMessage, inBoxResponse);
  1332 +
  1333 + //发push
  1334 + SendMessageRspBo bo = ufoSendService.sellerDeliverHours(String.valueOf(uid),String.valueOf(orderCode));
  1335 + logger.info("record noticeBuyerOfSellerSendOutTimeout push buyer uid is {}, orderCode is {}, result is {}", uid, orderCode, JSON.toJSONString(bo));
  1336 +
1303 String phone = userProxyService.getMobile(uid); 1337 String phone = userProxyService.getMobile(uid);
1304 if (StringUtils.isBlank(phone)) { 1338 if (StringUtils.isBlank(phone)) {
1305 logger.warn("noticeBuyerOfSellerSendOutTimeout sms send fail,uid {} can not find phone", uid); 1339 logger.warn("noticeBuyerOfSellerSendOutTimeout sms send fail,uid {} can not find phone", uid);
@@ -4,6 +4,9 @@ import com.alibaba.fastjson.JSONObject; @@ -4,6 +4,9 @@ import com.alibaba.fastjson.JSONObject;
4 import com.yoho.core.config.ConfigReader; 4 import com.yoho.core.config.ConfigReader;
5 import com.yoho.error.exception.ServiceException; 5 import com.yoho.error.exception.ServiceException;
6 import com.yoho.tools.docs.ApiOperation; 6 import com.yoho.tools.docs.ApiOperation;
  7 +import com.yoho.tools.docs.ApiParam;
  8 +import com.yoho.tools.docs.ApiResp;
  9 +import com.yoho.tools.docs.ApiRespCode;
7 import com.yohobuy.ufo.model.ProductInfo; 10 import com.yohobuy.ufo.model.ProductInfo;
8 import com.yohobuy.ufo.model.request.StoragePriceBo; 11 import com.yohobuy.ufo.model.request.StoragePriceBo;
9 import com.yohobuy.ufo.model.request.product.ProductImportTranItemBo; 12 import com.yohobuy.ufo.model.request.product.ProductImportTranItemBo;
@@ -30,6 +33,7 @@ import org.springframework.web.bind.annotation.RequestBody; @@ -30,6 +33,7 @@ import org.springframework.web.bind.annotation.RequestBody;
30 import org.springframework.web.bind.annotation.RequestMapping; 33 import org.springframework.web.bind.annotation.RequestMapping;
31 import org.springframework.web.bind.annotation.RequestParam; 34 import org.springframework.web.bind.annotation.RequestParam;
32 import org.springframework.web.bind.annotation.RestController; 35 import org.springframework.web.bind.annotation.RestController;
  36 +import org.springframework.web.servlet.ModelAndView;
33 37
34 import java.util.Collection; 38 import java.util.Collection;
35 import java.util.List; 39 import java.util.List;
@@ -84,6 +88,18 @@ public class ProductController { @@ -84,6 +88,18 @@ public class ProductController {
84 return new ApiResponse.ApiResponseBuilder().data(resp).code(200).message("product data").build(); 88 return new ApiResponse.ApiResponseBuilder().data(resp).code(200).message("product data").build();
85 } 89 }
86 90
  91 + @ApiOperation(name = "ufo.product.intro", desc = "商品详情页下半部分")
  92 + @ApiParam(name="product_id",required = true,desc="商品id",type=Integer.class)
  93 + @ApiResp(dataClazz=ModelAndView.class, desc="商品详情")
  94 + @ApiRespCode(code=200,desc="调用成功")
  95 + @IgnoreSignature
  96 + @IgnoreSession
  97 + @RequestMapping(params = "method=ufo.product.intro")
  98 + public ModelAndView queryProductIntro(@RequestParam(value = "product_id", required = true) Integer productId) {
  99 + LOG.info("queryProductIntro method=ufo.product.intro product id is:{}", productId);
  100 + return productService.queryProductIntro(productId);
  101 + }
  102 +
87 @ApiOperation(name = "ufo.product.series.template", desc = "商品系列列表") 103 @ApiOperation(name = "ufo.product.series.template", desc = "商品系列列表")
88 @IgnoreSignature 104 @IgnoreSignature
89 @IgnoreSession 105 @IgnoreSession
@@ -12,6 +12,7 @@ import com.yohoufo.dal.product.model.StoragePrice; @@ -12,6 +12,7 @@ import com.yohoufo.dal.product.model.StoragePrice;
12 import com.yohoufo.product.model.SkupInfo; 12 import com.yohoufo.product.model.SkupInfo;
13 import com.yohoufo.product.response.*; 13 import com.yohoufo.product.response.*;
14 import com.yohobuy.ufo.model.response.StorageDataResp; 14 import com.yohobuy.ufo.model.response.StorageDataResp;
  15 +import org.springframework.web.servlet.ModelAndView;
15 16
16 public interface ProductService { 17 public interface ProductService {
17 18
@@ -104,4 +105,6 @@ public interface ProductService { @@ -104,4 +105,6 @@ public interface ProductService {
104 SecondHandProductResp querySecondHandProductData(Integer skup); 105 SecondHandProductResp querySecondHandProductData(Integer skup);
105 106
106 ProductDetailResp queryProductInStockNewBriefById(Integer productId); 107 ProductDetailResp queryProductInStockNewBriefById(Integer productId);
  108 +
  109 + ModelAndView queryProductIntro(Integer productId);
107 } 110 }
@@ -30,6 +30,7 @@ import org.slf4j.Logger; @@ -30,6 +30,7 @@ import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory; 30 import org.slf4j.LoggerFactory;
31 import org.springframework.beans.factory.annotation.Autowired; 31 import org.springframework.beans.factory.annotation.Autowired;
32 import org.springframework.stereotype.Service; 32 import org.springframework.stereotype.Service;
  33 +import org.springframework.ui.ModelMap;
33 import org.springframework.util.CollectionUtils; 34 import org.springframework.util.CollectionUtils;
34 35
35 import com.alibaba.fastjson.JSONObject; 36 import com.alibaba.fastjson.JSONObject;
@@ -42,6 +43,7 @@ import com.yohoufo.common.utils.UfoStringUtils; @@ -42,6 +43,7 @@ import com.yohoufo.common.utils.UfoStringUtils;
42 import com.yohobuy.ufo.model.response.StorageDataResp; 43 import com.yohobuy.ufo.model.response.StorageDataResp;
43 import com.yohoufo.product.service.ProductSearchService; 44 import com.yohoufo.product.service.ProductSearchService;
44 import com.yohoufo.product.service.ProductService; 45 import com.yohoufo.product.service.ProductService;
  46 +import org.springframework.web.servlet.ModelAndView;
45 47
46 48
47 @Service 49 @Service
@@ -161,6 +163,28 @@ public class ProductServiceImpl implements ProductService { @@ -161,6 +163,28 @@ public class ProductServiceImpl implements ProductService {
161 } 163 }
162 164
163 @Override 165 @Override
  166 + public ModelAndView queryProductIntro(Integer productId){
  167 + if (null == productId) {
  168 + ModelMap model = new ModelMap();
  169 + model.addAttribute("code", "404");
  170 + model.addAttribute("info", "no data");
  171 + return new ModelAndView("error", model);
  172 + }
  173 + Product product = productMapper.selectByPrimaryKey(productId);
  174 + if (null == product) {
  175 + ModelMap model = new ModelMap();
  176 + model.addAttribute("code", "404");
  177 + model.addAttribute("info", "no data");
  178 + return new ModelAndView("error", model);
  179 + }
  180 + String intro = productMapper.selectIntroByProductId(productId);
  181 + ModelMap model = new ModelMap();
  182 + model.addAttribute("title", product.getProductName());
  183 + model.addAttribute("productIntro",intro);
  184 + return new ModelAndView("product-desc-app", model);
  185 + }
  186 +
  187 + @Override
164 public StorageLeastPriceResp queryStorageLeastPrice(Integer storageId) { 188 public StorageLeastPriceResp queryStorageLeastPrice(Integer storageId) {
165 StoragePrice storagePrice = storagePriceMapper.selectLeastPrice(storageId); 189 StoragePrice storagePrice = storagePriceMapper.selectLeastPrice(storageId);
166 if (storagePrice == null) { 190 if (storagePrice == null) {
  1 +
  2 + {{# code}}
  3 + <h2 class="goodsName"><span>{{.}}</span></h2>
  4 + {{/ code}}
  5 +
  6 + {{# info}}
  7 + <h1 class="goodsSubtitle"><span>{{.}}</span></h1>
  8 + {{/ info}}
  1 +<!DOCTYPE html>
  2 +<html style="font-size: 20px;">
  3 +<head>
  4 + <meta charset="utf-8">
  5 + <title>{{title}}</title>
  6 + <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=yes">
  7 + <meta http-equiv="cleartype" content="on">
  8 + <meta content="telephone=no" name="format-detection" />
  9 + <script type="text/javascript">
  10 + (function(d,c){var e=d.documentElement,a="orientationchange" in window?"orientationchange":"resize",b=function(){var f=e.clientWidth;if(!f){return}if(f>=640){e.style.fontSize="40px"}else{e.style.fontSize=40*(f/640)+"px"}};if(!d.addEventListener){return}b();c.addEventListener(a,b,false);d.addEventListener("DOMContentLoaded",b,false)})(document,window);
  11 +</script>
  12 + <link rel="dns-prefetch" href="//cdn.yoho.cn">
  13 + <link rel="dns-prefetch" href="//static.yohobuy.com">
  14 + <link rel="dns-prefetch" href="//img12.static.yhbimg.com">
  15 + <link rel="dns-prefetch" href="//img13.static.yhbimg.com">
  16 + <!--
  17 + <link rel="stylesheet" href="http://cdn.yoho.cn/myohobuy/{{version}}/index.css">
  18 + -->
  19 + <link rel="stylesheet" href="{{httpType}}://cdn.yoho.cn/app-webview/{{version}}/index.css">
  20 +
  21 + <style>
  22 + .good-detail-page .model {
  23 + width: 100%;
  24 + height: auto;
  25 + border-bottom: 1px solid #e0e0e0;
  26 + overflow: hidden;
  27 + margin-bottom: 0.75rem;
  28 + }
  29 + .good-detail-page .model .portrait {
  30 + width: 4.375rem;
  31 + float: left;
  32 + margin-bottom: 0.375rem;
  33 + }
  34 + .good-detail-page .model .portrait span {
  35 + text-align: center;
  36 + font-size: 0.6rem;
  37 + display: block;
  38 + height: 1.55rem;
  39 + line-height: 1.7rem;
  40 + color: #444;
  41 + }
  42 + .good-detail-page .model .portrait img {
  43 + display: block;
  44 + max-width: 100%;
  45 + border: 0;
  46 + width: 3.1rem;
  47 + height: 3.1rem;
  48 + border-radius: 2.75rem;
  49 + margin-top: 2.1rem;
  50 + margin-left: 0.55rem;
  51 + }
  52 + .good-detail-page .model .info-list {
  53 + margin-left: 4.75rem;
  54 + }
  55 + .good-detail-page .model .info-list .list-title {
  56 + display: block;
  57 + width: 6.25rem;
  58 + height: 1rem;
  59 + background: #eee;
  60 + line-height: 1rem;
  61 + text-align: center;
  62 + margin: 0.25rem 0 0.75rem;
  63 + }
  64 + .good-detail-page .model .detail-info {
  65 + width: 48%;
  66 + height: 1.25rem;
  67 + line-height: 1.25rem;
  68 + display: inline-block;
  69 + }
  70 + .good-detail-page .model .detail-info .info-name {
  71 + color: #b0b0b0;
  72 + font-size: 0.6rem;
  73 + }
  74 + .good-detail-page .model .detail-info:nth-child(2) {
  75 + width: 100%;
  76 + }
  77 + .good-detail-page .remind-tips {
  78 + padding-left: 0.45rem;
  79 + font-size: 0.55rem;
  80 + color: #e9221a;
  81 + margin-bottom: 0.75rem;
  82 + }
  83 + .good-detail-page .remind-tips img {
  84 + width: 0.7rem;
  85 + float: left;
  86 + }
  87 + .good-detail-page .remind-tips .wash-tags {
  88 + line-height: 0.75rem;
  89 + height: 0.75rem;
  90 + height: 0.75rem;
  91 + margin-left: 0.25rem;
  92 + }
  93 + .good-detail-page .goods-desc .service.surpass-not-support {
  94 + background: url("http://img11.static.yhbimg.com/article/2017/07/19/14/016ec56db99be8633d5e9b1aa66b6ffab1.png") no-repeat;
  95 + background-size: 100%;
  96 + }
  97 + .good-detail-page .page-block .pro-detail * {
  98 + font-size: 0.7rem !important;
  99 + color: #444;
  100 + line-height: 1rem !important;
  101 + margin-bottom: 1rem;
  102 + letter-spacing: 0.03rem;
  103 + word-break: break-all;
  104 + }
  105 + .good-detail-page .maybe-like {
  106 + border-top: none;
  107 + padding-left: 0;
  108 + }
  109 + .good-detail-page .maybe-like .title{
  110 + color: #444;
  111 + font-size: 0.8rem;
  112 + line-height: 2.2rem;
  113 + text-align: center;
  114 + margin-left: -0.375rem;
  115 + }
  116 + .good-detail-page .recommend-for-you .title {
  117 + margin-left: -0.375rem;
  118 + }
  119 + .good-detail-page .page-block .pro-detail {
  120 + font-size: 14px;
  121 + }
  122 + .good-detail-page .goods-discount {
  123 + padding-top: 0;
  124 + margin-bottom: 0.5rem;
  125 + }
  126 + .good-detail-page .product-detail {
  127 + margin-top: 0;
  128 + margin-bottom: 0.5rem;
  129 + }
  130 + .good-detail-page .page-block {
  131 + margin-bottom: 0.5rem;
  132 + }
  133 + strong,b {
  134 + font-weight: bold;
  135 + }
  136 +
  137 + .good-detail-page .price-desc-detail {
  138 + padding: 0.25rem 0;
  139 + color: #b0b0b0;
  140 + font-size: 0.5rem;
  141 + margin-top: 0.1rem;
  142 + }
  143 +
  144 + .good-detail-page .price-desc-detail p {
  145 + line-height: 1.45;
  146 + padding: 0.125rem 0;
  147 + }
  148 +
  149 + .good-detail-page .price-desc-detail .price-item-name {
  150 + line-height: 1.5;
  151 + color: #444;
  152 + padding-bottom: 0;
  153 + }
  154 +
  155 + .good-detail-page .price-desc-detail .price-item-content {
  156 + font-weight: 300;
  157 + }
  158 +
  159 + .good-detail-page .price-desc-detail .price-summary {
  160 + margin: 0.1rem 0;
  161 + font-weight: 300;
  162 + }
  163 + </style>
  164 +
  165 + <link rel="apple-touch-icon-precomposed" href="http://static.yohobuy.com/m/v1/img/touch/apple-touch-icon-144x144-precomposed-new.png">
  166 + <link rel="apple-touch-startup-image" sizes="640x920" href="http://static.yohobuy.com/m/v1/img/startup/startup-retina.png" media="screen and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2)">
  167 + <link rel="apple-touch-startup-image" sizes="320x460" href="http://static.yohobuy.com/m/v1/img/startup/startup.png" media="screen and (max-device-width: 320)">
  168 +</head>
  169 +<body>
  170 +{{{productIntro}}}
  171 + <!--<div class="good-detail-page yoho-page">
  172 + <div id="app-detail" class="hide">
  173 + <div id="productDesc">
  174 + <div class="goods-desc page-block">
  175 + <p>{{{productIntro}}}</p>
  176 + </div>
  177 + </div>
  178 + </div>-->
  179 +</body>
  180 +</html>