groupbuy_add_vr.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. {extend name="default/base/base_seller" /}
  2. {block name="seller_main"}
  3. <div class="dssc-form-default">
  4. <form id="add_form" action="{:url('Sellergroupbuy/groupbuy_save',['vr'=>1])}" method="post" enctype="multipart/form-data">
  5. <dl>
  6. <dt><i class="required">*</i>{$Think.lang.group_name}{$Think.lang.ds_colon}</dt>
  7. <dd>
  8. <input class="w400 text" name="groupbuy_name" type="text" id="groupbuy_name" value="" maxlength="30" />
  9. <span></span>
  10. <p class="hint">{$Think.lang.group_name_tip}</p>
  11. </dd>
  12. </dl>
  13. <dl>
  14. <dt>{$Think.lang.snap_up_subtitles}{$Think.lang.ds_colon}</dt>
  15. <dd>
  16. <input class="w400 text" name="remark" type="text" id="remark" value="" maxlength="30" />
  17. <span></span>
  18. <p class="hint">{$Think.lang.snap_up_subtitle_word_limit}</p>
  19. </dd>
  20. </dl>
  21. <dl>
  22. <dt><i class="required">*</i>{$Think.lang.start_time}{$Think.lang.ds_colon}</dt>
  23. <dd>
  24. <input id="start_time" name="start_time" type="text" class="text w130" /><em class="add-on"><i class="iconfont">&#xe8d6;</i></em><span></span>
  25. <p class="hint">{$Think.lang.start_time_cannot_less_than}{$groupbuy_starttime|date="Y-m-d H:i"}</p>
  26. </dd>
  27. </dl>
  28. <dl>
  29. <dt><i class="required">*</i>{$Think.lang.end_time}{$Think.lang.ds_colon}</dt>
  30. <dd>
  31. <input id="end_time" name="end_time" type="text" class="text w130"/><em class="add-on"><i class="iconfont">&#xe8d6;</i></em><span></span>
  32. <p class="hint">
  33. {$Think.lang.no_more_buying_virtual_goods}
  34. <span id="vr-expire-time"></span>
  35. {notpresent name="isPlatformStore"}
  36. {$Think.lang.expiry_date_buying_package}
  37. <span>({$current_groupbuy_quota.groupbuyquota_endtime|date="Y-m-d H:i"})</span>
  38. {/notpresent}
  39. </p>
  40. </dd>
  41. </dl>
  42. <dl>
  43. <dt><i class="required">*</i>{$Think.lang.groupbuy_goods}{$Think.lang.ds_colon}</dt>
  44. <dd>
  45. <div dstype="groupbuy_goods_info" class="selected-group-goods " style="display:none;">
  46. <div class="goods-thumb"><img id="groupbuy_goods_image" src=""/></div>
  47. <div class="goods-name">
  48. <a dstype="groupbuy_goods_href" id="groupbuy_goods_name" href="" target="_blank"></a>
  49. </div>
  50. <div class="goods-price">{$Think.lang.store_price}:¥<span dstype="groupbuy_goods_price"></span></div>
  51. </div>
  52. <a href="javascript:void(0);" id="btn_show_search_goods" class="dssc-btn dssc-btn-acidblue">{$Think.lang.groupbuy_index_choose_goods}</a>
  53. <input id="groupbuy_goods_id" name="groupbuy_goods_id" type="hidden" value=""/>
  54. <span></span>
  55. <div id="div_search_goods" class="div-goods-select mt10" style="display: none;">
  56. <table class="search-form">
  57. <tr>
  58. <th class="w150">
  59. <strong>{$Think.lang.search_store_items}</strong>
  60. </th>
  61. <td class="w160">
  62. <input id="search_goods_name" type="text w150" class="text" name="goods_name" value=""/>
  63. </td>
  64. <td class="w70 tc">
  65. <a href="javascript:void(0);" id="btn_search_goods" class="dssc-btn"/><i class="iconfont">&#xe718;</i>{$Think.lang.ds_search}</a></td>
  66. <td class="w10"></td>
  67. <td>
  68. <p class="hint">{$Think.lang.display_all_virtual_goods_store}。</p>
  69. </td>
  70. </tr>
  71. </table>
  72. <div id="div_goods_search_result" class="search-result" style="width:739px;"></div>
  73. <a id="btn_hide_search_goods" class="close" href="javascript:void(0);">X</a>
  74. </div>
  75. <p class="hint">{$Think.lang.groupbuy_goods_explain}</p>
  76. </dd>
  77. </dl>
  78. <dl dstype="groupbuy_goods_info" style="display:none;">
  79. <dt>{$Think.lang.groupbuy_index_store_price}{$Think.lang.ds_colon}</dt>
  80. <dd> {$Think.lang.currency}<span dstype="groupbuy_goods_price"></span></dd>
  81. </dl>
  82. <dl>
  83. <dt><i class="required">*</i>{$Think.lang.groupbuy_price}{$Think.lang.ds_colon}</dt>
  84. <dd>
  85. <input class="w70 text" id="groupbuy_price" name="groupbuy_price" type="text" value=""/><em class="add-on"><i class="iconfont">&#xe65c;</i></em> <span></span>
  86. <p class="hint">{$Think.lang.groupbuy_price_tip|raw}</p>
  87. </dd>
  88. </dl>
  89. <dl>
  90. <dt><i class="required">*</i>{$Think.lang.snap_up_photos}{$Think.lang.ds_colon}</dt>
  91. <dd>
  92. <div class="dssc-upload-thumb groupbuy-pic">
  93. <p><i class="iconfont">&#xe72a;</i>
  94. <img dstype="img_groupbuy_image" style="display:none;" src=""/></p>
  95. </div>
  96. <input dstype="groupbuy_image" name="groupbuy_image" type="hidden" value="">
  97. <div class="dssc-upload-btn">
  98. <a href="javascript:void(0);">
  99. <span>
  100. <input type="file" hidefocus="true" size="1" class="input-file" name="groupbuy_image" dstype="btn_upload_image"/>
  101. </span>
  102. <p><i class="iconfont">&#xe733;</i>{$Think.lang.image_upload}</p>
  103. </a>
  104. </div>
  105. <span></span>
  106. <p class="hint">{$Think.lang.group_pic_explain|raw}</p>
  107. </dd>
  108. </dl>
  109. <dl>
  110. <dt>{$Think.lang.snap_recommended_images}{$Think.lang.ds_colon}</dt>
  111. <dd>
  112. <div class="dssc-upload-thumb groupbuy-commend-pic">
  113. <p><i class="iconfont">&#xe72a;</i>
  114. <img dstype="img_groupbuy_image" style="display:none;" src=""/></p>
  115. </div>
  116. <input dstype="groupbuy_image" name="groupbuy_image1" type="hidden" value="">
  117. <span></span>
  118. <div class="dssc-upload-btn">
  119. <a href="javascript:void(0);">
  120. <span>
  121. <input type="file" hidefocus="true" size="1" class="input-file" name="groupbuy_image" dstype="btn_upload_image"/>
  122. </span>
  123. <p><i class="iconfont">&#xe733;</i>{$Think.lang.image_upload}</p>
  124. </a>
  125. </div>
  126. <p class="hint">{$Think.lang.group_pic_explain2|raw}</p>
  127. </dd>
  128. </dl>
  129. <dl>
  130. <dt>{$Think.lang.snap_classification}{$Think.lang.ds_colon}</dt>
  131. <dd>
  132. <select id="class" name="class" class="w80">
  133. <option value="">{$Think.lang.ds_please_choose}</option>
  134. {notempty name="classlist"}
  135. {foreach name="classlist" item="val"}
  136. <option value="{$val.vrgclass_id}">{$val.vrgclass_name}</option>
  137. {/foreach}
  138. {/notempty}
  139. </select>
  140. <select id="s_class" name="s_class" class="w80">
  141. <option value="">{$Think.lang.ds_please_choose}</option>
  142. </select>
  143. <span></span>
  144. <p class="hint">{$Think.lang.select_category_virtual_panic_buying}</p>
  145. </dd>
  146. </dl>
  147. <dl>
  148. <dt>{$Think.lang.virtual_quantity}{$Think.lang.ds_colon}</dt>
  149. <dd>
  150. <input class="w70 text" id="virtual_quantity" name="virtual_quantity" type="text" value="0"/>
  151. <span></span>
  152. <p class="hint">{$Think.lang.virtual_quantity_explain}</p>
  153. </dd>
  154. </dl>
  155. <dl>
  156. <dt>{$Think.lang.sale_quantity}{$Think.lang.ds_colon}</dt>
  157. <dd>
  158. <input class="w70 text" id="upper_limit" name="upper_limit" type="text" value="0"/>
  159. <span></span>
  160. <p class="hint">{$Think.lang.maximum_quantity_available}</p>
  161. </dd>
  162. </dl>
  163. <dl>
  164. <dt>{$Think.lang.group_intro}{$Think.lang.ds_colon}</dt>
  165. <dd>
  166. {:build_editor(['name'=>'groupbuy_intro'])}
  167. <textarea name="groupbuy_intro" id="groupbuy_intro"></textarea>
  168. <p class="hr8"><a class="des_demo dssc-btn" href="{:url('Selleralbum/pic_list',['item'=>'groupbuy'])}"><i class="iconfont">&#xe72a;</i>{$Think.lang.store_goods_album_insert_users_photo}</a></p>
  169. <p id="des_demo" style="display:none;"></p>
  170. </dd>
  171. </dl>
  172. <div class="bottom">
  173. <input type="submit" class="submit" value="{$Think.lang.ds_submit}">
  174. </div>
  175. </form>
  176. </div>
  177. <link rel="stylesheet" href="{$Think.PLUGINS_SITE_ROOT}/js/jquery-ui-timepicker/jquery-ui-timepicker-addon.min.css">
  178. <script src="{$Think.PLUGINS_SITE_ROOT}/js/jquery-ui-timepicker/jquery-ui-timepicker-addon.min.js"></script>
  179. <script src="{$Think.PLUGINS_SITE_ROOT}/js/jquery-ui-timepicker/i18n/jquery-ui-timepicker-zh-CN.js"></script>
  180. <script src="{$Think.PLUGINS_SITE_ROOT}/js/jquery-file-upload/jquery.fileupload.js"></script>
  181. <script type="text/javascript" src="{$Think.PLUGINS_SITE_ROOT}/jquery.ajaxContent.pack.js" ></script>
  182. <script type="text/javascript">
  183. $(document).ready(function(){
  184. $("select[name=class]").change(function(){
  185. var vrgclass_id = $(this).val();
  186. $.ajax({
  187. type:'GET',
  188. url:"{:url('Sellergroupbuy/ajax_vr_class')}",
  189. data:{vrgclass_id:+vrgclass_id},
  190. success:function(json){
  191. var html = '<option value="">'+'{$Think.lang.ds_please_choose}'+'</option>';
  192. if(json){
  193. var data = eval("("+json+")");
  194. $.each(data,function(i,val){
  195. html+='<option value="'+val.vrgclass_id+'">'+val.vrgclass_name+'</option>';
  196. });
  197. }
  198. $("select[name=s_class]").html(html);
  199. }
  200. });
  201. });
  202. $('#start_time').datetimepicker({dateFormat: 'yy-mm-dd'});
  203. $('#end_time').datetimepicker({dateFormat: 'yy-mm-dd'});
  204. $('#btn_show_search_goods').on('click', function() {
  205. $('#div_search_goods').show();
  206. });
  207. $('#btn_hide_search_goods').on('click', function() {
  208. $('#div_search_goods').hide();
  209. });
  210. //搜索商品
  211. $('#btn_search_goods').on('click', function() {
  212. var url = "{:url('Sellergroupbuy/search_vr_goods')}";
  213. var datas = $.param({goods_name: $('#search_goods_name').val()});
  214. $('#div_goods_search_result').load(url,datas);
  215. });
  216. $('#div_goods_search_result').on('click', '.pagination li a', function() {
  217. $('#div_goods_search_result').load($(this).attr('href'));
  218. return false;
  219. });
  220. var vrExpireTime = 0;
  221. var vrLimitNum = 0;
  222. //选择商品
  223. $('#div_goods_search_result').on('click', '[dstype="btn_add_groupbuy_goods"]', function() {
  224. var goods_commonid = $(this).attr('data-goods-commonid');
  225. $.get("{:url('Sellergroupbuy/groupbuy_goods_info')}", {goods_commonid: goods_commonid}, function(data) {
  226. if(data.result) {
  227. $('#groupbuy_goods_id').val(data.goods_id);
  228. $('#groupbuy_goods_image').attr('src', data.goods_image);
  229. $('#groupbuy_goods_name').text(data.goods_name);
  230. $('[dstype="groupbuy_goods_price"]').text(data.goods_price);
  231. $('[dstype="groupbuy_goods_href"]').attr('href', data.goods_href);
  232. $('[dstype="groupbuy_goods_info"]').show();
  233. $('#div_search_goods').hide();
  234. // vr
  235. vrExpireTime = '' + data.virtual_indate;
  236. $('#vr-expire-time').html('('+data.virtual_indate_str+')');
  237. vrLimitNum = data.virtual_limit;
  238. } else {
  239. layer.msg(data.message);
  240. }
  241. }, 'json');
  242. });
  243. //图片上传
  244. $('[dstype="btn_upload_image"]').fileupload({
  245. dataType: 'json',
  246. url: "{:url('Sellergroupbuy/image_upload')}",
  247. add: function(e, data) {
  248. $parent = $(this).parents('dd');
  249. $input = $parent.find('[dstype="groupbuy_image"]');
  250. $img = $parent.find('[dstype="img_groupbuy_image"]');
  251. data.formData = {old_groupbuy_image:$input.val()};
  252. $img.attr('src', "{$Think.HOME_SITE_ROOT}/images/loading.gif");
  253. data.submit();
  254. },
  255. done: function (e,data) {
  256. var result = data.result;
  257. $parent = $(this).parents('dd');
  258. $input = $parent.find('[dstype="groupbuy_image"]');
  259. $img = $parent.find('[dstype="img_groupbuy_image"]');
  260. if(result.result) {
  261. $img.prev('i').hide();
  262. $img.attr('src', result.file_url);
  263. $img.show();
  264. $input.val(result.file_name);
  265. } else {
  266. layer.msg(data.message);
  267. }
  268. }
  269. });
  270. jQuery.validator.methods.lessThanVrLimitNum = function(value, element) {
  271. var v = parseInt(value) || 0;
  272. if (v > 0 && vrLimitNum && vrLimitNum > 0 && v > vrLimitNum)
  273. return false;
  274. return true;
  275. };
  276. jQuery.validator.methods.lessThanVrExpireTime = function(value, element) {
  277. var ts = new Date(Date.parse(value.replace(/-/g, "/"))).getTime() / 1000;
  278. // console.log(vrExpireTime);
  279. // console.log(ts);
  280. return vrExpireTime > ts;
  281. };
  282. jQuery.validator.methods.greaterThanDate = function(value, element, param) {
  283. var date1 = new Date(Date.parse(param.replace(/-/g, "/")));
  284. var date2 = new Date(Date.parse(value.replace(/-/g, "/")));
  285. return date1 < date2;
  286. };
  287. jQuery.validator.methods.lessThanDate = function(value, element, param) {
  288. var date1 = new Date(Date.parse(param.replace(/-/g, "/")));
  289. var date2 = new Date(Date.parse(value.replace(/-/g, "/")));
  290. return date1 > date2;
  291. };
  292. jQuery.validator.methods.greaterThanStartDate = function(value, element) {
  293. var start_date = $("#start_time").val();
  294. var date1 = new Date(Date.parse(start_date.replace(/-/g, "/")));
  295. var date2 = new Date(Date.parse(value.replace(/-/g, "/")));
  296. return date1 < date2;
  297. };
  298. jQuery.validator.methods.checkGroupbuyGoods = function(value, element) {
  299. var start_time = $("#start_time").val();
  300. var result = true;
  301. $.ajax({
  302. type:"GET",
  303. url:"{:url('Sellergroupbuy/check_groupbuy_goods')}",
  304. async:false,
  305. data:{start_time: start_time, goods_id: value},
  306. dataType: 'json',
  307. success: function(data){
  308. if(!data.result) {
  309. result = false;
  310. }
  311. }
  312. });
  313. return result;
  314. };
  315. //页面输入内容验证
  316. $("#add_form").validate({
  317. errorPlacement: function(error, element){
  318. var error_td = element.parent('dd').children('span');
  319. error_td.append(error);
  320. },
  321. onfocusout: false,
  322. rules : {
  323. groupbuy_name: {
  324. required : true
  325. },
  326. start_time : {
  327. required : true,
  328. greaterThanDate : "{$groupbuy_starttime|date='Y-m-d H:i'}"
  329. },
  330. end_time : {
  331. required : true,
  332. {notpresent name="isPlatformStore"}
  333. lessThanDate : "{$current_groupbuy_quota.groupbuyquota_endtime|date='Y-m-d H:i'}",
  334. {/notpresent}
  335. lessThanVrExpireTime : true,
  336. greaterThanStartDate : true
  337. },
  338. groupbuy_goods_id: {
  339. required : true,
  340. checkGroupbuyGoods: true
  341. },
  342. groupbuy_price: {
  343. required : true,
  344. number : true,
  345. min : 0.01,
  346. max : 1000000
  347. },
  348. virtual_quantity: {
  349. required : true,
  350. digits : true
  351. },
  352. upper_limit: {
  353. required : true,
  354. digits : true,
  355. lessThanVrLimitNum : true
  356. },
  357. groupbuy_image2: {
  358. required : true
  359. }
  360. },
  361. messages : {
  362. groupbuy_name: {
  363. required : '<i class="iconfont">&#xe64c;</i>{$Think.lang.group_name_error}'
  364. },
  365. start_time : {
  366. required : '<i class="iconfont">&#xe64c;</i>{$Think.lang.start_time_cannot_empty}',
  367. greaterThanDate : "<i class='iconfont'>&#xe64c;</i>{$Think.lang.start_time_must_greater}{$groupbuy_starttime|date='Y-m-d H:i'}"
  368. },
  369. end_time : {
  370. required : '<i class="iconfont">&#xe64c;</i>{$Think.lang.end_snap_time_cannot_empty}',
  371. {notpresent name='isPlatformStore'}
  372. lessThanDate : "<i class='iconfont'>&#xe64c;</i>{$Think.lang.snap_must_less}{present name='current_groupbuy_quota'}{$current_groupbuy_quota.groupbuyquota_endtime|date='Y-m-d H:i'}{/present}",
  373. {/notpresent}
  374. lessThanVrExpireTime : '<i class="iconfont">&#xe64c;</i>{$Think.lang.virtual_product_expiration_time}',
  375. greaterThanStartDate : '<i class="iconfont">&#xe64c;</i>{$Think.lang.must_greater_start_time}'
  376. },
  377. groupbuy_goods_id: {
  378. required : '<i class="iconfont">&#xe64c;</i>{$Think.lang.group_goods_error}',
  379. checkGroupbuyGoods: '{$Think.lang.simultaneous_activities}'
  380. },
  381. groupbuy_price: {
  382. required : '<i class="iconfont">&#xe64c;</i>{$Think.lang.groupbuy_price_error}',
  383. number : '<i class="iconfont">&#xe64c;</i>{$Think.lang.groupbuy_price_error}',
  384. min : '<i class="iconfont">&#xe64c;</i>{$Think.lang.groupbuy_price_error}',
  385. max : '<i class="iconfont">&#xe64c;</i>{$Think.lang.groupbuy_price_error}'
  386. },
  387. virtual_quantity: {
  388. required : '<i class="iconfont">&#xe64c;</i>{$Think.lang.virtual_quantity_error}',
  389. digits : '<i class="iconfont">&#xe64c;</i>{$Think.lang.virtual_quantity_error}'
  390. },
  391. upper_limit: {
  392. required : '<i class="iconfont">&#xe64c;</i>{$Think.lang.sale_quantity_error}',
  393. digits : '<i class="iconfont">&#xe64c;</i>{$Think.lang.sale_quantity_error}',
  394. lessThanVrLimitNum : '{$Think.lang.limited_quantity_intended_product_itself}'
  395. },
  396. groupbuy_image2: {
  397. required : '<i class="iconfont">&#xe64c;</i>{$Think.lang.snap_images_cannot_empty}'
  398. }
  399. }
  400. });
  401. $('#li_1').click(function(){
  402. $('#li_1').attr('class','active');
  403. $('#li_2').attr('class','');
  404. $('#demo').hide();
  405. });
  406. $('#goods_demo').click(function(){
  407. $('#li_1').attr('class','');
  408. $('#li_2').attr('class','active');
  409. $('#demo').show();
  410. });
  411. $('.des_demo').click(function(){
  412. if($('#des_demo').css('display') == 'none'){
  413. $('#des_demo').show();
  414. }else{
  415. $('#des_demo').hide();
  416. }
  417. });
  418. $('.des_demo').ajaxContent({
  419. event:'click', //mouseover
  420. loaderType:"img",
  421. loadingMsg:"{$Think.HOME_SITE_ROOT}/images/loading.gif",
  422. target:'#des_demo'
  423. });
  424. });
  425. function insert_editor(file_path){
  426. ue.execCommand('insertimage', {src:file_path});
  427. }
  428. </script>
  429. {/block}