edit.html 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. {extend name="$extend_base"/}
  2. {block name="resources"}
  3. <link rel="stylesheet" href="STATIC_EXT/color_picker/css/colorpicker.css" />
  4. <link rel="stylesheet" href="STATIC_EXT/diyview/css/diyview.css" />
  5. {/block}
  6. {block name="main"}
  7. <div class="layui-collapse ns-tips">
  8. <div class="layui-colla-item">
  9. <h2 class="layui-colla-title">操作提示</h2>
  10. <ul class="layui-colla-content layui-show">
  11. <li>装修漂亮的店铺能够提高顾客的驻留时间和购买欲。</li>
  12. <li>好的页面可以吸引客户浏览的兴趣,快速找到自己想要买的商品,给客户带来良好的购物体验,最终实现高的转化率。</li>
  13. <li>创建不同活动页面,实现线上推广转化,提升网店的传播量。</li>
  14. <li>满足不同商家各种场景下页面的样式及推广诉求。</li>
  15. </ul>
  16. </div>
  17. </div>
  18. <div class="diy-view-wrap">
  19. <div id="diyView" class='layui-form' v-bind:style="{ backgroundColor : global.bgColor,backgroundImage : 'url('+changeImgUrl(global.bgUrl)+')' }">
  20. <div class="preview-head" v-on:click="changeCurrentIndex(-99)">
  21. <span>{{global.title}}</span>
  22. <div v-bind:class="{selected : currentIndex==-99}" v-bind:data-sort="-99" style="display:none;" v-show="data.length==0 || currentIndex==-99">
  23. <div class="edit-attribute">
  24. <div class="layui-form-item">
  25. <label class="layui-form-label sm">模板名称</label>
  26. <div class="layui-input-block">
  27. <input type="text" v-model="global.title" placeholder="请输入模板名称" class="layui-input">
  28. </div>
  29. </div>
  30. <div class="layui-form-item">
  31. <label class="layui-form-label sm">底部导航</label>
  32. <div class="layui-input-block">
  33. <div class="layui-unselect layui-form-switch" v-on:click="global.openBottomNav=!global.openBottomNav" v-bind:class="{ 'layui-form-onswitch' : global.openBottomNav }" lay-skin="_switch">
  34. <em v-if="global.openBottomNav"></em>
  35. <em v-else></em>
  36. <i></i>
  37. </div>
  38. </div>
  39. </div>
  40. <color v-bind:data="{ field : 'bgColor', label : '背景颜色', value : '#ffffff' }"></color>
  41. <div class="layui-form-item">
  42. <label class="layui-form-label sm">背景图片</label>
  43. <div class="layui-input-block">
  44. <img-upload v-bind:data="{ data : global, field : 'bgUrl' }"></img-upload>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <div class="preview-block">
  51. <template v-for="(nc,index) in data" v-bind:k="index">
  52. <div v-bind:data-index="index" v-on:click="changeCurrentIndex(nc.index)" v-bind:class="{ 'draggable-element nc-border-color-selected' : true,selected : currentIndex == nc.index }" v-bind:data-sort="index">
  53. {foreach name="$diy_view_utils" item="vo"}
  54. {foreach name="$vo.list" item="li"}
  55. <template v-if="nc.type == '{$li.name}'">
  56. {:event('DiyViewUtils',['controller'=>$li['controller'],'addon_name'=>$li['addon_name']],true)}
  57. </template>
  58. {/foreach}
  59. {/foreach}
  60. </div>
  61. </template>
  62. </div>
  63. <!-- 组件列表 -->
  64. <nav class="component-list">
  65. {foreach name="$diy_view_utils" item="vo" key="k"}
  66. <h3>{$vo.type_name}</h3>
  67. <ul>
  68. {foreach name="$vo.list" item="li" key="li_k"}
  69. <li title="{$li.title}"
  70. {if condition="$li.value"}v-on:click='addComponent({$li.value},{ name : "{$li.name}", title : "{$li.title}", max_count : {$li.max_count}, addon_name : "{$li.addon_name}", controller : "{$li.controller}" })'
  71. v-bind:class="{ 'disabled' : !checkComponentIsAdd('{$li.name}',{$li.max_count}) }"
  72. {if condition="$li.support_diy_view"}
  73. class="hot"
  74. {/if}
  75. {else/}class="disabled"{/if}
  76. >{$li.title}</li>
  77. {/foreach}
  78. </ul>
  79. {/foreach}
  80. </nav>
  81. <div class="custom-save">
  82. <button class="layui-btn ns-bg-color save" lay-submit="" lay-filter="save">保存</button>
  83. </div>
  84. </div>
  85. {notempty name="$qrcode_info"}
  86. <div class="popup-qrcode-wrap">
  87. <img src="{:img($qrcode_info.path.h5.img)}" alt="推广二维码">
  88. <p class="qrcode-item-description">扫码后直接访问页面</p>
  89. <a class="ns-text-color" href="javascript:ns.copy('h5_url');">复制链接</a>
  90. <a class="ns-text-color" href="{:img($qrcode_info.path.h5.img)}" download>下载二维码</a>
  91. <input class="layui-input nc-len-mid" type="text" value="{$qrcode_info.path.h5.url}" id="h5_url" readonly>
  92. </div>
  93. {/notempty}
  94. </div>
  95. {if condition="!empty($diy_view_info) && !empty($diy_view_info.value)"}
  96. <input type="hidden" id="info" value='{$diy_view_info.value}' />
  97. {/if}
  98. {if condition="!empty($diy_view_info) && !empty($diy_view_info.name)"}
  99. <input type="hidden" id="name" value="{$diy_view_info.name}" />
  100. {elseif condition="!empty($name)"}
  101. <input type="hidden" id="name" value="{$name}" />
  102. {else/}
  103. <input type="hidden" id="name" value="DIY_VIEW_RANDOM_{$time}" />
  104. {/if}
  105. {/block}
  106. {block name="script"}
  107. <script>
  108. var STATICIMG = 'STATIC_IMG';
  109. var link_url = '{$app_module}/diy/link';
  110. var module = '{$app_module}';
  111. </script>
  112. <script src="STATIC_JS/vue.js"></script>
  113. <script src="STATIC_EXT/color_picker/js/colorpicker.js"></script>
  114. <script src="STATIC_EXT/diyview/js/async_load_css.js"></script>
  115. <script src="STATIC_EXT/diyview/js/ddsort.js"></script>
  116. <script src="STATIC_EXT/ueditor/ueditor.config.js"></script>
  117. <script src="STATIC_EXT/ueditor/ueditor.all.js"> </script>
  118. <script src="STATIC_EXT/ueditor/lang/zh-cn/zh-cn.js"></script>
  119. <script src="STATIC_EXT/diyview/js/components.js"></script>
  120. <script src="STATIC_EXT/diyview/js/custom_template.js"></script>
  121. <script>
  122. {if condition="!empty($diy_view_info) && (!empty($diy_view_info.value) || !empty($diy_view_info.id) )"}
  123. var id = "{$diy_view_info.id}";
  124. var info = JSON.parse($("#info").val().toString());
  125. if(!$.isEmptyObject(info) && info.value){
  126. for(var i=0;i<info.value.length;i++) vue.addComponent(info.value[i]);
  127. vue.setGlobal(info.global);
  128. }else{
  129. vue.setGlobal({ title : "{$diy_view_info.title}" });
  130. }
  131. vue.title = "{$diy_view_info.title}";
  132. {else/}
  133. var id = 0;
  134. {/if}
  135. var repeat_flag = false;//防重复标识
  136. $("button.save").click(function(){
  137. if(vue.verify()){
  138. //全局属性
  139. var global = JSON.stringify(vue.global);
  140. global = eval("("+global+")");
  141. //组件属性
  142. var value = JSON.stringify(vue.data);
  143. value = eval(value);
  144. //重新排序
  145. value.sort(function(a,b){
  146. return a.sort-b.sort;
  147. });
  148. for(var item in value){
  149. delete value[item].verify;
  150. delete value[item].lazyLoad;
  151. delete value[item].lazyLoadCss;
  152. delete value[item].index;
  153. delete value[item].sort;
  154. delete value[item].outerCountJs;
  155. }
  156. if(repeat_flag) return;
  157. repeat_flag = true;
  158. // console.log(JSON.stringify(value));
  159. // console.log(JSON.stringify(global));
  160. var v = {
  161. global : global,
  162. value : value
  163. };
  164. // console.log(v);
  165. // console.log(JSON.stringify(v));
  166. // return;
  167. $.ajax({
  168. type : "post",
  169. url : "{:addon_url($request_url)}",
  170. data : { id : id, name : $("#name").val(), title : vue.global.title, value : JSON.stringify(v) },
  171. dataType : "JSON",
  172. success : function(res) {
  173. layer.msg(res.message);
  174. if (res.code == 0) {
  175. if (id > 0 || $("#name").val() != "DIY_VIEW_RANDOM_{$time}") {
  176. location.reload();
  177. } else {
  178. location.href = ns.url("{$app_module}/diy/lists");
  179. }
  180. } else {
  181. repeat_flag = false;
  182. }
  183. // console.log(JSON.stringify(vue.data));
  184. // console.log(res);
  185. }
  186. });
  187. }
  188. });
  189. </script>
  190. {/block}