PageRenderTime 63ms CodeModel.GetById 31ms RepoModel.GetById 1ms app.codeStats 0ms

/templates/ecshop/goods_detail.html

https://github.com/vuuvv/vshop1
HTML | 260 lines | 252 code | 8 blank | 0 comment | 0 complexity | 91a490f6507681610c1324b76fbcffe1 MD5 | raw file
  1. {% extends "ecshop/frame.html" %}
  2. {% block css %}
  3. <link href="/static/css/ecshop/goods.css" rel="stylesheet"/>
  4. {% endblock %}
  5. {% block javascript %}
  6. <script src="http://a.tbcdn.cn/s/kissy/1.1.7/seed-min.js"></script>
  7. </style>
  8. <script type="text/javascript">
  9. KISSY.use('imagezoom', function(S) {
  10. S.ready(function(S) {
  11. var m = new S.ImageZoom("#img_booth", {
  12. zoomSize: [430, 310]
  13. });
  14. S.Event.on("#img_thumbs li", 'mouseenter', function() {
  15. if (!S.DOM.hasClass(this, 'thumb_selected')) {
  16. S.DOM.removeClass(".thumb_selected", "thumb_selected");
  17. S.DOM.addClass(this, 'thumb_selected');
  18. var data = S.DOM.attr(this, 'data-ks-imagezoom');
  19. m.changeImageSrc(data+'_310x310.jpg');
  20. m.set('bigImageSrc', data);
  21. }
  22. });
  23. S.Event.on("#goods_specs", "mouseenter", function() {
  24. if (!S.DOM.hasClass(this, 'goods_specs_hover')) {
  25. S.DOM.addClass(this, 'goods_specs_hover');
  26. }
  27. });
  28. S.Event.on("#goods_specs", "mouseleave", function() {
  29. if (S.DOM.hasClass(this, 'goods_specs_hover')) {
  30. S.DOM.removeClass(this, 'goods_specs_hover');
  31. }
  32. });
  33. {% autoescape off %}
  34. var spec_match = {{ data.specitem }};
  35. {% endautoescape %}
  36. var get_selected = function() {
  37. var rows = S.DOM.query(".spec_row");
  38. var ret = {
  39. id: [],
  40. desc: []
  41. };
  42. S.each(rows, function(row) {
  43. var value = S.DOM.attr(row, "data-select");
  44. if (value) {
  45. ret.id.push(parseInt(value.split(",")[0]));
  46. ret.desc.push(value.split(",")[1]);
  47. } else {
  48. ret.id.push(null);
  49. ret.desc.push(null);
  50. }
  51. });
  52. return ret;
  53. };
  54. var show_selected = function() {
  55. var descs = get_selected().desc;
  56. var container = S.DOM.get("#show_select");
  57. S.DOM.html(container, "");
  58. for (var i = 0; i < descs.length; i++) {
  59. var dom = S.DOM.create('<em class="show_spec">');
  60. S.DOM.text(dom, descs[i]);
  61. S.DOM.append(dom, container);
  62. }
  63. };
  64. var get_first_match = function() {
  65. var ids = get_selected().id;
  66. var ret = null;
  67. for (var i = 0; i < spec_match.length; i++) {
  68. var item = spec_match[i];
  69. var m = true;
  70. for (var j = 0; j < ids.length; j++) {
  71. var id = ids[j];
  72. if (id !== null && !S.inArray(id, item)) {
  73. m = false;
  74. break;
  75. }
  76. }
  77. if (m)
  78. ret = item[item.length-1];
  79. }
  80. if (ret) {
  81. console.log(ret);
  82. S.DOM.text(S.DOM.get("#product_sn"), ret);
  83. }
  84. };
  85. var check_enabled = function() {
  86. var items = S.DOM.query(".goods_spec_item");
  87. var rows = S.DOM.query(".spec_row");
  88. var ids = get_selected().id;
  89. for (var i = 0; i < rows.length; i++) {
  90. var row = rows[i];
  91. var items = S.DOM.query(".goods_spec_item", row);
  92. for (var j = 0; j < items.length; j++) {
  93. var item = items[j];
  94. var id = parseInt(S.DOM.attr(item, "data-value"));
  95. var enabled = _check_enabled(i, id, ids, spec_match);
  96. if (enabled) {
  97. S.DOM.removeClass(item, 'lock');
  98. } else {
  99. S.DOM.addClass(item, 'lock');
  100. }
  101. }
  102. }
  103. };
  104. var _check_enabled = function(row, id, selected, matches) {
  105. var enabled = true;
  106. for (var i = 0; i < matches.length; i++) {
  107. enabled = true;
  108. var m = matches[i];
  109. var s = [id];
  110. for (var j = 0; j < selected.length; j++) {
  111. if (j === row || selected[j] === null)
  112. continue;
  113. s.push(selected[j]);
  114. }
  115. for (var j = 0; j < s.length; j++) {
  116. if (!S.inArray(s[j], m)) {
  117. enabled = false;
  118. break;
  119. }
  120. }
  121. if (enabled)
  122. return true;
  123. }
  124. return false;
  125. };
  126. S.Event.on(".goods_spec_item", "click", function(e) {
  127. var row = S.DOM.parent(this, "ul");
  128. if (S.DOM.hasClass(this, 'goods_spec_selected')){
  129. S.DOM.removeClass(this, 'goods_spec_selected');
  130. S.DOM.remove(S.DOM.next(this));
  131. S.DOM.attr(row, "data-select", "");
  132. } else if (!S.DOM.hasClass(this, 'lock')) {
  133. var p = S.DOM.parent(this);
  134. var siblings = S.DOM.siblings(p);
  135. var myid = parseInt(S.DOM.attr(this, "data-value"));
  136. var mysid = S.DOM.attr(row, "data-property");
  137. S.each(siblings, function(item) {
  138. var a = S.DOM.get(".goods_spec_item", item);
  139. if (S.DOM.hasClass(a, 'goods_spec_selected')) {
  140. S.DOM.removeClass(a, 'goods_spec_selected');
  141. S.DOM.remove(S.DOM.get("i", item));
  142. }
  143. });
  144. S.DOM.addClass(this, 'goods_spec_selected');
  145. S.DOM.insertAfter(S.DOM.create('<i>&nbsp</i>'), this);
  146. S.DOM.attr(row, "data-select", myid + "," + S.DOM.attr(this, "data-desc"));
  147. var items = S.DOM.query(".goods_spec_item");
  148. var new_items = [];
  149. S.each(items, function(item) {
  150. if (S.DOM.attr(S.DOM.parent(item, "ul"), "data-property") !== mysid)
  151. new_items.push(item);
  152. });
  153. S.each(new_items, function(item) {
  154. var id = parseInt(S.DOM.attr(item, "data-value"));
  155. var enabled = false;
  156. for (var i = 0; i < spec_match.length; i++) {
  157. if (S.inArray(myid, spec_match[i]) && S.inArray(id, spec_match[i])) {
  158. enabled = true;
  159. break;
  160. }
  161. }
  162. });
  163. }
  164. show_selected();
  165. check_enabled();
  166. get_first_match();
  167. e.preventDefault();
  168. });
  169. });
  170. });
  171. </script>
  172. {% endblock %}
  173. {% block content %}
  174. <div class="left_side">
  175. {% include "ecshop/parts/notify.html" %}
  176. <div class="blank5"></div>
  177. {% include "ecshop/parts/cartinfo.html" %}
  178. <div class="blank5"></div>
  179. </div>
  180. <div class="right_side">
  181. <div class="clearfix" id="goods_info">
  182. <div class="gallery">
  183. <div class="booth">
  184. <a href="#"><img id="img_booth" data-ks-imagezoom="http://img01.taobaocdn.com/bao/uploaded/i1/{{ data.goods.galleries.all.0.image }}.jpg" src="http://img01.taobaocdn.com/bao/uploaded/i1/{{ data.goods.galleries.all.0.image }}.jpg_310x310.jpg"/></a>
  185. </div>
  186. <ul class="img_thumbs clearfix" id="img_thumbs">
  187. {% for gallery in data.goods.galleries.all %}
  188. <li class="{% if forloop.first %}thumb_selected{% endif %}" data-ks-imagezoom="http://img01.taobaocdn.com/bao/uploaded/i1/{{ gallery.image }}.jpg">
  189. <div class="thumb_pic tb_s40">
  190. <a href="#"><img src="http://img01.taobaocdn.com/bao/uploaded/i1/{{ gallery.image }}.jpg_40x40.jpg"></a>
  191. </div>
  192. </li>
  193. {% endfor %}
  194. </ul>
  195. <div class="blank5"></div>
  196. </div>
  197. <div class="goods_detail">
  198. <div class="goods_title">
  199. <h5>{{ data.goods.name }}</h5>
  200. </div>
  201. <ul class="goods_props clearfix">
  202. <li><span>商品编号</span>G49B7AF58591B6</li><li><span>货号</span>
  203. <span id="product_sn">G49B7AF2072AF8-1</span></li>
  204. <li><span>  </span><a href="http://localhost:8080/?brand-15.html" target="_blank">G-Star</a></li>
  205. <li><span>材质</span><a href="http://localhost:8080/?gallery--tp,4_1,4_p,0-6.html" target="_blank">帆布</a></li>
  206. <li><span>适合季节</span><a href="http://localhost:8080/?gallery--tp,4_2,4_p,0-6.html" target="_blank">春秋季</a></li>
  207. <li><span>鞋跟</span><a href="http://localhost:8080/?gallery--tp,4_3,2_p,0-6.html" target="_blank">平底</a></li>
  208. <li><span>鞋带</span><a href="http://localhost:8080/?gallery--tp,4_4,0_p,0-6.html" target="_blank">系带</a></li>
  209. <li><span>款式</span><a href="http://localhost:8080/?gallery--tp,4_5,2_p,0-6.html" target="_blank">平头</a></li>
  210. </ul>
  211. <ul class="goods_price list">
  212. <li><span>市场价</span><i class="mktprice1">{{ data.goods.market_price}}</i></li>
  213. <li><span>销售价</span><span class="price1">{{ data.goods.shop_price }}</span></li>
  214. </ul>
  215. <div class="goods_specs" id="goods_specs">
  216. <div class="goods_specs_inner">
  217. {% for item in data.spec %}
  218. <dl class="goods_spec clearfix">
  219. <dt>{{ item.name }}</dt>
  220. <dd>
  221. <ul data-property="{{ item.id }}" data-select="" class="spec_row clearfix">
  222. {% for i in item.items.all %}
  223. <li><a data-value="{{ i.id }}" data-desc="{{ i.value }}" class="goods_spec_item" href="#"><span>{{ i.value }}</span></a></li>
  224. {% endfor %}
  225. </ul>
  226. </dd>
  227. </dl>
  228. {% endfor %}
  229. <dl class="goods_amount clearfix">
  230. <dt>购买数量</dt>
  231. <dd>
  232. <input id="J_IptAmount" class="tb-text" value="1" maxlength="8" type="text">
  233. <em>(库存<span id="J_SpanStock" class="tb-count">5353</span>)</em>
  234. </dd>
  235. </dl>
  236. <dl class="goods_choice clearfix">
  237. <dt>请选择</dt>
  238. <dd id="show_select">
  239. {% for item in data.spec %}
  240. <em>{{ item.name }}</em>
  241. {% endfor %}
  242. </dd>
  243. </dl>
  244. <div class="goods_action clearfix">
  245. <div class="goods_btn_add"><a href="#" title="加入购物车" id="J_LinkAdd">加入购物车<b></b></a></div>
  246. </div>
  247. </div>
  248. </div>
  249. </div>
  250. </div>
  251. </div>
  252. {% endblock %}