mobile_page_setting.html 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846
  1. {extend name="default/base/base_seller" /}
  2. {block name="seller_main"}
  3. <style>
  4. body{background-color: #fff !important;}
  5. .btn{width:auto}
  6. .seller_main{height: 100%;}
  7. .seller_items{margin-bottom: 0;}
  8. .seller_right{height: 100%;display: flex;flex-direction: column;}
  9. .seller_right >.p20{box-sizing: border-box;flex:1;position:relative;background: #EAECEF;}
  10. .store-header {width:100%;z-index:2;background: #fb2630;color: #fff;overflow: hidden;position: relative;background-position: center;background-size: auto 100%;position:absolute;top:64px}
  11. .store-header .content-wrapper {-ms-flex-align: center;-webkit-box-align: center;align-items: center;display: -webkit-box;display: -ms-flexbox;display: flex;padding:16px 12px;position: relative;}
  12. .store-header .content-wrapper .avatar {-ms-flex: 0 0 60px;-webkit-box-flex: 0;flex: 0 0 60px;margin-right:8px;width:60px;}
  13. .store-header .content-wrapper .avatar img {border-radius:4px;width:60px;height:60px;}
  14. .store-header .content-wrapper .content {position:relative;flex:1;}
  15. .store-header .content-wrapper .content .store_name {font-size:16px;font-weight: 700;}
  16. .store-header .content-wrapper .content .store_address span{font-size:12px}
  17. .common-score-wrapper{color:#ffc107}
  18. .follow_panel .follow_button{
  19. display: block;
  20. background: #fff;
  21. border: 1px solid #fff;
  22. border-radius: 50px;
  23. padding: 0 8px;
  24. line-height: 24px;
  25. font-size: 12px;
  26. color: #fb2630;
  27. width: 48px;
  28. text-align: center;
  29. }
  30. </style>
  31. <link rel="stylesheet" href="{$Think.ADMIN_SITE_ROOT}/css/admin.css">
  32. <script src="{$Think.ADMIN_SITE_ROOT}/js/admin.js"></script>
  33. <script src="{$Think.PLUGINS_SITE_ROOT}/jquery.SuperSlide.2.1.1.js"></script>
  34. <link rel="stylesheet" href="{$Think.HOME_SITE_ROOT}/css/editable_page.css">
  35. <link href="{$Think.PLUGINS_SITE_ROOT}/colorpicker/evol.colorpicker.css" rel="stylesheet" type="text/css">
  36. <script src="{$Think.PLUGINS_SITE_ROOT}/colorpicker/evol.colorpicker.min.js"></script>
  37. <script type="text/javascript" charset="utf-8" src="{$Think.PLUGINS_SITE_ROOT}/ueditor/ueditor.config.js"></script>
  38. <script type="text/javascript" charset="utf-8" src="{$Think.PLUGINS_SITE_ROOT}/ueditor/ueditor.all.min.js"> </script>
  39. <script type="text/javascript" charset="utf-8" src="{$Think.PLUGINS_SITE_ROOT}/ueditor/lang/zh-cn/zh-cn.js"></script>
  40. <div>
  41. <div class="page-wrapper">
  42. <div class="component-list">
  43. <nav>
  44. <h3>公共设置</h3>
  45. <ul>
  46. <li data-config="page" title="页面设置">
  47. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/text.png">
  48. <span>页面设置</span>
  49. </li>
  50. <li data-config="jump" title="弹出广告">
  51. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/pop_adv.png">
  52. <span>弹出广告</span>
  53. </li>
  54. <li data-config="button" title="浮动按钮" class="">
  55. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/float_btn.png">
  56. <span>浮动按钮</span>
  57. </li>
  58. </ul>
  59. <h3>基础组件</h3>
  60. <ul>
  61. <li data-config="13" title="公告" class="">
  62. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/notice.png">
  63. <span>公告</span>
  64. </li>
  65. <li data-config="12" title="图文导航" class="">
  66. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/graphic_nav.png">
  67. <span>图文导航</span>
  68. </li>
  69. <li data-config="1" title="图片广告" class="">
  70. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/image_ads.png">
  71. <span>图片广告</span>
  72. </li>
  73. <li data-config="14" title="搜索" class="">
  74. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/search.png">
  75. <span>搜索</span>
  76. </li>
  77. <li data-config="2" title="富文本" class="">
  78. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/rich_text.png">
  79. <span>富文本</span>
  80. </li>
  81. <li data-config="15" title="魔方" class="">
  82. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/rubik_cube.png">
  83. <span>魔方</span>
  84. </li>
  85. <li data-config="16" title="辅助空白" class="">
  86. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/horz_blank.png">
  87. <span>辅助空白</span>
  88. </li>
  89. <li data-config="6" title="商品列表" class="">
  90. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/goods_list.png">
  91. <span>商品列表</span>
  92. </li>
  93. <li data-config="17" title="视频" class="">
  94. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/video_moba.png">
  95. <span>视频</span>
  96. </li>
  97. </ul>
  98. <h3>营销插件</h3>
  99. <ul>
  100. <li data-config="18" title="砍价" class="">
  101. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/bargain.png">
  102. <span>砍价</span>
  103. </li>
  104. <li data-config="19" title="团购" class="">
  105. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/groupbuy.png">
  106. <span>抢购</span>
  107. </li>
  108. <li data-config="20" title="拼团" class="">
  109. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/pintuan.png">
  110. <span>拼团</span>
  111. </li>
  112. <li data-config="21" title="预售" class="">
  113. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/presale.png">
  114. <span>预售</span>
  115. </li>
  116. <li data-config="22" title="秒杀" class="">
  117. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/seckill.png">
  118. <span>秒杀</span>
  119. </li>
  120. </ul>
  121. </nav>
  122. </div>
  123. <div class="preview-wrap">
  124. <div class="preview-restore-wrap">
  125. <div class="dv-wrap">
  126. <div class="diy-view-wrap">
  127. <div class="preview-head">
  128. <div class="preview-head_div">
  129. <span id="page_head">{$editable_page.editable_page_name|default=''}</span>
  130. </div>
  131. </div>
  132. <div id="page_store" class="store-header"{if isset($editable_page['editable_page_theme_config']['if_show_header']) && $editable_page['editable_page_theme_config']['if_show_header']==0} style="display:none"{/if}>
  133. <div class="content-wrapper">
  134. <div class="avatar">
  135. <img src="{:get_store_logo($store_info.store_avatar)}">
  136. </div>
  137. <div class="content">
  138. <div class="store_name">{$store_info.store_name}</div>
  139. <div>
  140. <span class="common-score-wrapper"><i class="iconfont front" style="width:100%">&#xe684;</i><i class="iconfont front" style="width:100%">&#xe684;</i><i class="iconfont front" style="width:100%">&#xe684;</i><i class="iconfont front" style="width:100%">&#xe684;</i><i class="iconfont front" style="width:100%">&#xe684;</i></span>
  141. </div>
  142. <div class="follow_number">
  143. 0人收藏
  144. </div>
  145. </div>
  146. <div class="follow_panel">
  147. <div class="follow_button">
  148. <i class="iconfont">&#xe685;</i>
  149. 收藏
  150. </div>
  151. </div>
  152. </div>
  153. </div>
  154. <div class="float-button" id="float_button" style="display:{if !isset($editable_page['editable_page_theme_config']['if_show_button']) || $editable_page['editable_page_theme_config']['if_show_button']==0}none{else}block{/if};inset: {if isset($editable_page.editable_page_theme_config.button_position) && $editable_page.editable_page_theme_config.button_position==1}{$editable_page.editable_page_theme_config.button_margin|default='0'}px auto auto 0px{/if}{if isset($editable_page.editable_page_theme_config.button_position) && $editable_page.editable_page_theme_config.button_position==2}{$editable_page.editable_page_theme_config.button_margin|default='0'}px 0px auto auto{/if}{if isset($editable_page.editable_page_theme_config.button_position) && $editable_page.editable_page_theme_config.button_position==3}auto auto {$editable_page.editable_page_theme_config.button_margin|default='0'}px 0px{/if}{if isset($editable_page.editable_page_theme_config.button_position) && $editable_page.editable_page_theme_config.button_position==4}auto 0px {$editable_page.editable_page_theme_config.button_margin|default='0'}px auto{/if};padding-left: {$editable_page.editable_page_theme_config.page_margin|default='0'}px; padding-right: {$editable_page.editable_page_theme_config.page_margin|default='0'}px;"><img src="{$editable_page.editable_page_theme_config.button_image|default=''}" /></div>
  155. <div class="preview-content" id="page_content" style="background-color:{$editable_page.editable_page_theme_config.back_color|default='#f5f5f5'}; padding-left: {$editable_page.editable_page_theme_config.page_margin|default='0'}px; padding-right: {$editable_page.editable_page_theme_config.page_margin|default='0'}px; padding-bottom: {if !isset($editable_page['editable_page_theme_config']['if_show_footer']) || $editable_page['editable_page_theme_config']['if_show_footer']==1}60{else}0{/if}px;padding-top:{if !isset($editable_page['editable_page_theme_config']['if_show_header']) || $editable_page['editable_page_theme_config']['if_show_header']==1}92{else}0{/if}px; background-image: {$editable_page.editable_page_theme_config.back_image|default='unset'};">
  156. {if isset($config_list)}
  157. {foreach name='config_list' item='item' key='key'}
  158. <div onclick="setConfig({$key+1})" data-type="html" data-id="{$key+1}"><div class="model-del iconfont" onclick="delConfig({$key+1})">&#xe6e6;</div>{$item.html|raw}</div>
  159. {/foreach}
  160. {/if}
  161. </div>
  162. <div class="jump-adv-wrapper" id="jump_adv" style="display:none">
  163. <div class="jump-adv">
  164. <img class="jump-adv-image" src="{$editable_page.editable_page_theme_config.jump_image|default=''}" />
  165. <div class="jump-adv-button iconfont">&#xe696;</div>
  166. </div>
  167. </div>
  168. <div class="preview-foot" id="page_foot"{if isset($editable_page['editable_page_theme_config']['if_show_footer']) && $editable_page['editable_page_theme_config']['if_show_footer']==0} style="display:none"{/if}>
  169. <div class="preview-foot-item">
  170. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/icon_home_nor.png">
  171. <div>店铺首页</div>
  172. </div>
  173. <div class="preview-foot-item">
  174. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/icon_allgoodf_selfshop_nor.png">
  175. <div>全部商品</div>
  176. </div>
  177. <div class="preview-foot-item">
  178. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/icon_seek_nor.png">
  179. <div>店内搜索</div>
  180. </div>
  181. <div class="preview-foot-item">
  182. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/icon_shopping_nor.png">
  183. <div>购物车</div>
  184. </div>
  185. <div class="preview-foot-item">
  186. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/icon_mine_nor.png">
  187. <div>我的</div>
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. </div>
  193. </div>
  194. <div class="edit-attribute">
  195. <div class="attr-wrap">
  196. <div class="restore-wrap">
  197. <!-- 页面设置 -->
  198. <div data-type="config" data-id="page">
  199. <form onchange="changeForm($(this))">
  200. <input type="hidden" name="model_id" value="page" />
  201. <h2 class="attr-title">页面设置</h2>
  202. <div class="layui-form-item">
  203. <label class="layui-form-label sm">页面名称</label>
  204. <div class="layui-input-block">
  205. <input name="page_title" value="{$editable_page.editable_page_name|default=''}" type="text" placeholder="请输入页面名称" class="layui-input">
  206. </div>
  207. </div>
  208. <div class="layui-form-item">
  209. <label class="layui-form-label sm">页面颜色</label>
  210. <div class="layui-input-block">
  211. <div class="color-wrapper">
  212. <input id="back_color" value="{$editable_page.editable_page_theme_config.back_color|default=''}" type="text" name="back_color" />
  213. </div>
  214. </div>
  215. </div>
  216. <div class="layui-form-item">
  217. <label class="layui-form-label sm">页面边距</label>
  218. <div class="layui-input-block">
  219. <div class="range-wrapper">
  220. <input type="range" id="page_margin" name="page_margin" value="{$editable_page.editable_page_theme_config.page_margin|default='0'}"
  221. onchange="$(this).next().text($(this).val())">
  222. <span>{$editable_page.editable_page_theme_config.page_margin|default='0'}</span>
  223. </div>
  224. </div>
  225. </div>
  226. <div class="layui-form-item">
  227. <label class="layui-form-label sm">背景图片</label>
  228. <div class="layui-input-block">
  229. <div class="uploader-wrapper">
  230. <div class="uploader-image-wrapper" {if !isset($editable_page['editable_page_theme_config']['back_image']) || !$editable_page['editable_page_theme_config']['back_image']}style="display:none" {/if}>
  231. <img class='uploader-image' src='{if isset($editable_page['editable_page_theme_config']['back_image']) && $editable_page['editable_page_theme_config']['back_image']}{$editable_page['editable_page_theme_config']['back_image']}{/if}' />
  232. <div class="iconfont uploader-image-btn" onclick="delFile($(this))">&#xe696;</div>
  233. </div>
  234. <div class='uploader-content' {if isset($editable_page['editable_page_theme_config']['back_image']) && $editable_page['editable_page_theme_config']['back_image']}style="display:none"
  235. {/if}>
  236. <div class="uploader-icon iconfont">&#xe6bf;</div>
  237. <div class="uploader-text">点击上传</div>
  238. <div class="uploader-notice">1242×2688</div>
  239. <input type='file' class='uploader-file' onchange='uploadFile($(this))'>
  240. <input type='hidden' name='back_image'
  241. value='{$editable_page.editable_page_theme_config.back_image|default=""}'>
  242. </div>
  243. </div>
  244. </div>
  245. </div>
  246. <div class="layui-form-item">
  247. <label class="layui-form-label sm">店铺头部</label>
  248. <div class="layui-input-block">
  249. <div class="onoff">
  250. <label for="if_show_header1"
  251. class="cb-enable{if !isset($editable_page['editable_page_theme_config']['if_show_header']) || $editable_page['editable_page_theme_config']['if_show_header']==1} selected{/if}">{$Think.lang.ds_open}</label>
  252. <label for="if_show_header0"
  253. class="cb-disable{if isset($editable_page['editable_page_theme_config']['if_show_header']) && $editable_page['editable_page_theme_config']['if_show_header']==0} selected{/if}">{$Think.lang.ds_close}</label>
  254. <input id="if_show_header1" name="if_show_header" value="1"
  255. type="radio"{if !isset($editable_page['editable_page_theme_config']['if_show_header']) || $editable_page['editable_page_theme_config']['if_show_header']==1} checked="checked"{/if}>
  256. <input id="if_show_header0" name="if_show_header" value="0"
  257. type="radio"{if isset($editable_page['editable_page_theme_config']['if_show_header']) && $editable_page['editable_page_theme_config']['if_show_header']==0} checked="checked"{/if}>
  258. </div>
  259. </div>
  260. </div>
  261. <div class="layui-form-item">
  262. <label class="layui-form-label sm">底部导航</label>
  263. <div class="layui-input-block">
  264. <div class="onoff">
  265. <label for="if_show_footer1"
  266. class="cb-enable{if !isset($editable_page['editable_page_theme_config']['if_show_footer']) || $editable_page['editable_page_theme_config']['if_show_footer']==1} selected{/if}">{$Think.lang.ds_open}</label>
  267. <label for="if_show_footer0"
  268. class="cb-disable{if isset($editable_page['editable_page_theme_config']['if_show_footer']) && $editable_page['editable_page_theme_config']['if_show_footer']==0} selected{/if}">{$Think.lang.ds_close}</label>
  269. <input id="if_show_footer1" name="if_show_footer" value="1"
  270. type="radio"{if !isset($editable_page['editable_page_theme_config']['if_show_footer']) || $editable_page['editable_page_theme_config']['if_show_footer']==1} checked="checked"{/if}>
  271. <input id="if_show_footer0" name="if_show_footer" value="0"
  272. type="radio"{if isset($editable_page['editable_page_theme_config']['if_show_footer']) && $editable_page['editable_page_theme_config']['if_show_footer']==0} checked="checked"{/if}>
  273. </div>
  274. </div>
  275. </div>
  276. </form>
  277. </div>
  278. <!-- 弹出广告 -->
  279. <div data-type="config" style="display:none" data-id="jump">
  280. <form onchange="changeForm($(this))">
  281. <input type="hidden" name="model_id" value="jump" />
  282. <h2 class="attr-title">弹出广告</h2>
  283. <div class="layui-form-item">
  284. <label class="layui-form-label sm">弹出广告</label>
  285. <div class="layui-input-block">
  286. <div class="onoff">
  287. <label for="if_show_jump1"
  288. class="cb-enable{if isset($editable_page['editable_page_theme_config']['if_show_jump']) && $editable_page['editable_page_theme_config']['if_show_jump']==1} selected{/if}">{$Think.lang.ds_open}</label>
  289. <label for="if_show_jump0"
  290. class="cb-disable{if !isset($editable_page['editable_page_theme_config']['if_show_jump']) || $editable_page['editable_page_theme_config']['if_show_jump']==0} selected{/if}">{$Think.lang.ds_close}</label>
  291. <input id="if_show_jump1" name="if_show_jump" value="1"
  292. type="radio"{if isset($editable_page['editable_page_theme_config']['if_show_jump']) && $editable_page['editable_page_theme_config']['if_show_jump']==1} checked="checked"{/if}>
  293. <input id="if_show_jump0" name="if_show_jump" value="0"
  294. type="radio"{if !isset($editable_page['editable_page_theme_config']['if_show_jump']) || $editable_page['editable_page_theme_config']['if_show_jump']==0} checked="checked"{/if}>
  295. </div>
  296. </div>
  297. </div>
  298. <div class="layui-form-item">
  299. <label class="layui-form-label sm">广告图片</label>
  300. <div class="layui-input-block">
  301. <div class="uploader-wrapper">
  302. <div class="uploader-image-wrapper" {if !isset($editable_page['editable_page_theme_config']['jump_image']) || !$editable_page['editable_page_theme_config']['jump_image']}style="display:none" {/if}>
  303. <img class='uploader-image' src='{if isset($editable_page['editable_page_theme_config']['jump_image']) && $editable_page['editable_page_theme_config']['jump_image']}{$editable_page['editable_page_theme_config']['jump_image']}{/if}' />
  304. <div class="iconfont uploader-image-btn" onclick="delFile($(this))">&#xe696;</div>
  305. </div>
  306. <div class='uploader-content' {if isset($editable_page['editable_page_theme_config']['jump_image']) && $editable_page['editable_page_theme_config']['jump_image']}style="display:none"
  307. {/if}>
  308. <div class="uploader-icon iconfont">&#xe6bf;</div>
  309. <div class="uploader-text">点击上传</div>
  310. <div class="uploader-notice">1242×1242</div>
  311. <input type='file' class='uploader-file' onchange='uploadFile($(this))'>
  312. <input type='hidden' name='jump_image'
  313. value='{$editable_page.editable_page_theme_config.jump_image|default=""}'>
  314. </div>
  315. </div>
  316. </div>
  317. </div>
  318. <div class="layui-form-item">
  319. <label class="layui-form-label sm">跳转页面</label>
  320. <div class="layui-input-block">
  321. <input type="text" name="jump_link" value="{$editable_page.editable_page_theme_config.jump_link|default=''}" placeholder="请输入跳转页面" class="layui-input">
  322. </div>
  323. </div>
  324. </form>
  325. </div>
  326. <!-- 浮动按钮 -->
  327. <div data-type="config" style="display:none" data-id="button">
  328. <form onchange="changeForm($(this))">
  329. <input type="hidden" name="model_id" value="button" />
  330. <h2 class="attr-title">浮动按钮</h2>
  331. <div class="layui-form-item">
  332. <label class="layui-form-label sm">浮动按钮</label>
  333. <div class="layui-input-block">
  334. <div class="onoff">
  335. <label for="if_show_button1"
  336. class="cb-enable{if isset($editable_page['editable_page_theme_config']['if_show_button']) && $editable_page['editable_page_theme_config']['if_show_button']==1} selected{/if}">{$Think.lang.ds_open}</label>
  337. <label for="if_show_button0"
  338. class="cb-disable{if !isset($editable_page['editable_page_theme_config']['if_show_button']) || $editable_page['editable_page_theme_config']['if_show_button']==0} selected{/if}">{$Think.lang.ds_close}</label>
  339. <input id="if_show_button1" name="if_show_button" value="1"
  340. type="radio"{if isset($editable_page['editable_page_theme_config']['if_show_button']) && $editable_page['editable_page_theme_config']['if_show_button']==1} checked="checked"{/if}>
  341. <input id="if_show_button0" name="if_show_button" value="0"
  342. type="radio"{if !isset($editable_page['editable_page_theme_config']['if_show_button']) || $editable_page['editable_page_theme_config']['if_show_button']==0} checked="checked"{/if}>
  343. </div>
  344. </div>
  345. </div>
  346. <div class="layui-form-item">
  347. <label class="layui-form-label sm">按钮位置</label>
  348. <div class="layui-input-block">
  349. <div class="ds-icon-radio">
  350. <input type="hidden" name="button_position" value="{$editable_page.editable_page_theme_config.button_position|default='1'}" />
  351. <ul class="ds-icon">
  352. <li{if !isset($editable_page['editable_page_theme_config']['button_position']) || $editable_page['editable_page_theme_config']['button_position']==1} class="ds-icon-active"{/if} data-val="1" onclick="setRadio($(this))">
  353. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/left_top.png">
  354. <div class="text">左上</div>
  355. </li>
  356. <li{if isset($editable_page['editable_page_theme_config']['button_position']) && $editable_page['editable_page_theme_config']['button_position']==2} class="ds-icon-active"{/if} data-val="2" onclick="setRadio($(this))">
  357. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/right_top.png">
  358. <div class="text">右上</div>
  359. </li>
  360. <li{if isset($editable_page['editable_page_theme_config']['button_position']) && $editable_page['editable_page_theme_config']['button_position']==3} class="ds-icon-active"{/if} data-val="3" onclick="setRadio($(this))">
  361. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/left_bottom.png">
  362. <div class="text">左下</div>
  363. </li>
  364. <li{if isset($editable_page['editable_page_theme_config']['button_position']) && $editable_page['editable_page_theme_config']['button_position']==4} class="ds-icon-active"{/if} data-val="4" onclick="setRadio($(this))">
  365. <img src="{$Think.HOME_SITE_ROOT}/images/editable_page/right_bottom.png">
  366. <div class="text">右下</div>
  367. </li>
  368. </ul>
  369. </div>
  370. </div>
  371. </div>
  372. <div class="layui-form-item">
  373. <label class="layui-form-label sm">上下边距</label>
  374. <div class="layui-input-block">
  375. <div class="range-wrapper">
  376. <input type="range" name="button_margin" id="button_margin" value="{$editable_page.editable_page_theme_config.button_margin|default='0'}"
  377. onchange="$(this).next().text($(this).val())">
  378. <span>{$editable_page.editable_page_theme_config.button_margin|default='0'}</span>
  379. </div>
  380. </div>
  381. </div>
  382. <div class="layui-form-item">
  383. <label class="layui-form-label sm">按钮图片</label>
  384. <div class="layui-input-block">
  385. <div class="uploader-wrapper">
  386. <div class="uploader-image-wrapper" {if !isset($editable_page['editable_page_theme_config']['button_image']) || !$editable_page['editable_page_theme_config']['button_image']}style="display:none" {/if}>
  387. <img class='uploader-image' src='{if isset($editable_page['editable_page_theme_config']['button_image']) && $editable_page['editable_page_theme_config']['button_image']}{$editable_page['editable_page_theme_config']['button_image']}{/if}' />
  388. <div class="iconfont uploader-image-btn" onclick="delFile($(this))">&#xe696;</div>
  389. </div>
  390. <div class='uploader-content' {if isset($editable_page['editable_page_theme_config']['button_image']) && $editable_page['editable_page_theme_config']['button_image']}style="display:none"
  391. {/if}>
  392. <div class="uploader-icon iconfont">&#xe6bf;</div>
  393. <div class="uploader-text">点击上传</div>
  394. <div class="uploader-notice">40×40</div>
  395. <input type='file' class='uploader-file' onchange='uploadFile($(this))'>
  396. <input type='hidden' name='button_image'
  397. value='{$editable_page.editable_page_theme_config.button_image|default=""}'>
  398. </div>
  399. </div>
  400. </div>
  401. </div>
  402. <div class="layui-form-item">
  403. <label class="layui-form-label sm">跳转页面</label>
  404. <div class="layui-input-block">
  405. <input type="text" name="button_link" value="{$editable_page.editable_page_theme_config.button_link|default=''}" placeholder="请输入跳转页面" class="layui-input">
  406. </div>
  407. </div>
  408. </form>
  409. </div>
  410. <div data-type="load">
  411. {if isset($config_list)}
  412. {foreach name='config_list' item='item' key="key"}
  413. <div data-type="config" data-id="{$key+1}" style="display:none">{$item.config|raw}</div>
  414. {/foreach}
  415. {/if}
  416. </div>
  417. </div>
  418. </div>
  419. </div>
  420. <div class="footer-btn">
  421. <input class="btn" type="button" value="{$Think.lang.ds_save}" onclick="saveForm()" />
  422. <a href="{$Think.config.ds_config.h5_site_url}/home/store_special?id={$Request.param.store_id}&special_id={$Request.param.editable_page_id}" target="_blank"><input class="btn btn-red" type="button" value="预览"/></a>
  423. </div>
  424. </div>
  425. </div>
  426. <script>
  427. var ue={}
  428. EDITABLE_PAGE_URL='{$Think.HOME_SITE_URL}/seller_editable_page'
  429. window.UEDITOR_HOME_URL='{$Think.PLUGINS_SITE_ROOT}/ueditor/'
  430. var goods_class={}
  431. function loadGoodsClass(level,id,obj){
  432. id=parseInt(id)
  433. if(goods_class['i_'+id]){
  434. addGoodsClass(level,id,obj)
  435. }else if(level==4){
  436. $('#'+obj).find('*[data-input]').val(id)
  437. }else if(level==1 || id>0){
  438. $.getJSON(EDITABLE_PAGE_URL+'/goods_class?parent_id='+id,function(data){
  439. if(data.code!=10000){
  440. layer.msg(data.message)
  441. }else if(data.result.length){
  442. goods_class['i_'+id]=data.result
  443. addGoodsClass(level,id,obj)
  444. }
  445. })
  446. }
  447. }
  448. function getGoodsClass(id,obj){
  449. $.getJSON(EDITABLE_PAGE_URL+'/goods_class?id='+id,function(data){
  450. if(data.code!=10000){
  451. layer.msg(data.message)
  452. }else{
  453. if(data.result.id.length){
  454. var temp=''
  455. for(var i in data.result.id){
  456. if(i==0){
  457. goods_class['i_0']=data.result.list[i]
  458. }else{
  459. goods_class['i_'+data.result.id[i-1]]=data.result.list[i]
  460. }
  461. i=parseInt(i)
  462. temp+='<select data-level="'+(i+1)+'" onchange="loadGoodsClass('+(i+2)+',$(this).val(),\''+obj+'\')">'
  463. temp+='<option value="0">{$Think.lang.ds_please_choose}</option>'
  464. for(var j in data.result.list[i]){
  465. temp+='<option value="'+data.result.list[i][j]['gc_id']+'" '+(data.result.list[i][j]['gc_id']==data.result.id[i]?'selected=""':'')+'>'+data.result.list[i][j]['gc_name']+'</option>'
  466. }
  467. temp+='</select>'
  468. }
  469. $('#'+obj+' [data-select]').append(temp)
  470. if($('#'+obj+' tbody').length){
  471. var temp=''
  472. var json
  473. var v=$('#'+obj+' *[data-type="template"]').attr('data-value')
  474. if(v){
  475. json=JSON.parse(v)
  476. }
  477. for(var i in data.result.list[data.result.list.length-1]){
  478. temp+='<tr><td class="tl"><label class="checkbox-label"><i class="checkbox-common"><input type="checkbox" onchange="checkboxChange($(this))" /></i><span>'+data.result.list[data.result.list.length-1][i].gc_name+'</span></label></td><td><input type="text" size="1" name="'+$('#'+obj+' *[data-type="template"]').attr('data-name')+'['+data.result.list[data.result.list.length-1][i].gc_id+'][sort]" value="'+((json && json[data.result.list[data.result.list.length-1][i].gc_id])?json[data.result.list[data.result.list.length-1][i].gc_id].sort:"255")+'" '+((json && json[data.result.list[data.result.list.length-1][i].gc_id])?"disabled=''":"")+' /></td></tr>'
  479. }
  480. $('#'+obj+' tbody').html(temp)
  481. }
  482. }
  483. }
  484. })
  485. }
  486. function checkboxChange(obj){
  487. if(obj.is(':checked')){
  488. obj.parents('tr').find('input[type="text"]').removeAttr('disabled');
  489. obj.parent().addClass('selected');
  490. }else{
  491. obj.parents('tr').find('input[type="text"]').attr('disabled','');
  492. obj.parent().removeClass('selected');
  493. }
  494. }
  495. function addGoodsClass(level,id,obj){
  496. if(level==1 || id>0){
  497. $('#'+obj).find('*[data-input]').val(id)
  498. if(goods_class['i_'+id]){
  499. var temp='<option value="0">{$Think.lang.ds_please_choose}</option>'
  500. for(var i in goods_class['i_'+id]){
  501. temp+='<option value="'+goods_class['i_'+id][i]['gc_id']+'">'+goods_class['i_'+id][i]['gc_name']+'</option>'
  502. }
  503. if($('#'+obj).find('select[data-level='+level+']').length){
  504. $('#'+obj).find('select[data-level='+level+']').html(temp)
  505. $('#'+obj).find('select[data-level]:gt('+($('#'+obj).find('select[data-level='+level+']').index()-1)+')').remove()
  506. }else{
  507. $('#'+obj+' [data-select]').append('<select data-level="'+level+'" onchange="loadGoodsClass('+(level+1)+',$(this).val(),\''+obj+'\')">'+temp+'</select>')
  508. }
  509. }
  510. }else{
  511. if(level>2){
  512. $('#'+obj).find('*[data-input]').val($('#'+obj).find('select[data-level='+(level-2)+']').val())
  513. }else{
  514. $('#'+obj).find('*[data-input]').val(0)
  515. }
  516. $('#'+obj).find('select[data-level]:gt('+($('#'+obj).find('select[data-level='+(level-1)+']').index()-1)+')').remove()
  517. }
  518. if($('#'+obj+' tbody').length){
  519. var temp=''
  520. $('#'+obj+' select:last-child').find('option').each(function(){
  521. if($(this).val()>0){
  522. temp+='<tr><td class="tl"><label class="checkbox-label"><i class="checkbox-common"><input type="checkbox" onchange="checkboxChange($(this))" /></i><span>'+$(this).text()+'</span></label></td><td><input type="text" size="1" name="'+$('#'+obj+' *[data-type="template"]').attr('data-name')+'['+$(this).val()+'][sort]" value="255" disabled="" /></td></tr>'
  523. }
  524. })
  525. $('#'+obj+' tbody').html(temp)
  526. }
  527. }
  528. var id={if isset($config_list)}{:count($config_list)}{else}0{/if};
  529. $(function(){
  530. {if isset($config_list)}
  531. {foreach name='config_list' item='item' key='key'}
  532. if(typeof(window['loadHtml{$item.val.editable_page_model_id}'])!='undefined'){
  533. window['loadHtml{$item.val.editable_page_model_id}']($('*[data-type="html"][data-id={$key+1}]'))
  534. }
  535. if(typeof(window['loadConfig{$item.val.editable_page_model_id}'])!='undefined'){
  536. window['loadConfig{$item.val.editable_page_model_id}']($('*[data-type="config"][data-id={$key+1}]'))
  537. }
  538. {/foreach}
  539. {/if}
  540. $('#page_content').sortable();
  541. $('#page_content').disableSelection();
  542. $('#back_color').colorpicker({showOn: 'both'});
  543. $('.component-list li').click(function(){
  544. $('*[data-type="config"]').hide()
  545. var config=$(this).attr('data-config')
  546. if(!isNaN(config)){
  547. $.getJSON(EDITABLE_PAGE_URL+'/config_load?if_h5=1&model_id='+config,function(data){
  548. if(data.code!=10000) {
  549. layer.msg(data.message);
  550. }else{
  551. id++
  552. var obj=$('.active[data-type="html"]')
  553. $('*[data-type="html"]').removeClass('active');
  554. var temp='<div onclick="setConfig('+id+')" class="active" data-type="html" data-id="'+id+'"><div class="model-del iconfont" onclick="delConfig('+id+')">&#xe6e6;</div>'+data.result.html+'</div>'
  555. if(obj.length){
  556. obj.after(temp)
  557. }else{
  558. $('#page_content').append(temp)
  559. }
  560. $('#page_content').animate({scrollTop:($('*[data-type="html"][data-id='+id+']').offset().top-$('#page_content').offset().top+$('#page_content').scrollTop()-($('input[name="if_show_header"]:checked').val()==1?92:0)) + "px"}, 500);
  561. $('*[data-type="load"]').prepend('<div data-type="config" data-id="'+id+'">'+data.result.config+'</div>')
  562. if(typeof(window['loadHtml'+config])!='undefined'){
  563. window['loadHtml'+config]($('*[data-type="html"][data-id='+id+']'))
  564. }
  565. if(typeof(window['loadConfig'+config])!='undefined'){
  566. window['loadConfig'+config]($('*[data-type="config"][data-id='+id+']'))
  567. }
  568. }
  569. })
  570. }else{
  571. $('*[data-type="config"][data-id='+config+']').show()
  572. }
  573. if(config=='jump' && $('*[data-type="config"][data-id="jump"] [name="if_show_jump"]:checked').val()==1){
  574. $('#jump_adv').show()
  575. }else{
  576. $('#jump_adv').hide()
  577. }
  578. })
  579. })
  580. // 图片上传ajax
  581. function uploadFile(obj,callback) {
  582. if(!event.target.files[0]){
  583. return false;
  584. }
  585. var formData = new FormData();
  586. formData.append('config_id',0);
  587. formData.append('name','file');
  588. formData.append('file', event.target.files[0]);
  589. $.ajax({
  590. type: "POST",
  591. url : EDITABLE_PAGE_URL+'/image_upload',
  592. dataType : 'json',
  593. data : formData,
  594. contentType: false,
  595. processData: false,
  596. success : function (data, status) {
  597. if (data.code!=10000) {
  598. layer.msg(data.message);
  599. } else {
  600. obj.parents('.uploader-wrapper').find('input[type="hidden"]').val(data.result.file_path);
  601. obj.parents('.uploader-wrapper').find('.uploader-content').hide();
  602. obj.parents('.uploader-wrapper').find('.uploader-image').attr('src', data.result.file_path);
  603. obj.parents('.uploader-wrapper').find('.uploader-image-wrapper').show();
  604. var temp=obj.parents('form')
  605. temp.change()
  606. if(callback){
  607. callback(data.result.file_path,obj)
  608. }
  609. }
  610. }
  611. });
  612. return false;
  613. }
  614. function delFile(obj){
  615. obj.parents('.uploader-wrapper').find('input[type="hidden"]').val('');
  616. obj.parents('.uploader-wrapper').find('.uploader-content').show();
  617. obj.parents('.uploader-wrapper').find('.uploader-image').attr('src', '');
  618. obj.parents('.uploader-wrapper').find('.uploader-image-wrapper').hide();
  619. var temp=obj.parents('form')
  620. temp.change()
  621. }
  622. function setRadio(obj,callback){
  623. obj.parents('.ds-icon-radio').find('li').removeClass('ds-icon-active')
  624. obj.addClass('ds-icon-active')
  625. obj.parents('.ds-icon-radio').find('input[type="hidden"]').val(obj.attr('data-val'))
  626. var temp=obj.parents('form')
  627. temp.change()
  628. if(callback){
  629. callback()
  630. }
  631. }
  632. function setConfig(id){
  633. $('*[data-type="html"].active').removeClass('active')
  634. $('*[data-type="html"][data-id='+id+']').addClass('active')
  635. $('*[data-type="config"]').hide()
  636. $('*[data-type="config"][data-id='+id+']').show()
  637. var obj=$('*[data-type="html"][data-id='+id+']').find('form')
  638. var mid=$('*[data-type="html"][data-id='+id+']').find('input[name="model_id"]').val()
  639. changeForm(obj,mid)
  640. }
  641. function delConfig(id){
  642. var nid=$('*[data-type="html"][data-id='+id+']').next().attr('data-id')
  643. if(!nid){
  644. nid=$('*[data-type="html"][data-id='+id+']').prev().attr('data-id')
  645. }
  646. if(nid){
  647. setConfig(nid)
  648. }else{
  649. $('*[data-config="page"]').click()
  650. }
  651. $('*[data-type="html"][data-id='+id+']').remove()
  652. $('*[data-type="config"][data-id='+id+']').remove()
  653. event.stopPropagation()
  654. }
  655. var index={}
  656. var html={}
  657. function addModel(obj,id){
  658. index['i_'+id]++
  659. obj.before('<div class="model-item">'+html['i_'+id].replace(/\[i_\d+\]/g,'[i_'+index['i_'+id]+']')+'<div class="model-del iconfont" onclick="delModel($(this))">&#xe696;</div>'+'</div>')
  660. if(typeof(window['loadConfig'+id])!='undefined'){
  661. window['loadConfig'+id](obj.parents('*[data-type="config"]'))
  662. }
  663. }
  664. function delModel(obj){
  665. obj.parents('.model-item').remove()
  666. }
  667. function saveForm(){
  668. var data=[]
  669. data.push(formartForm($('*[data-type="config"][data-id="page"]').find('form').serializeArray()))
  670. data.push(formartForm($('*[data-type="config"][data-id="jump"]').find('form').serializeArray()))
  671. data.push(formartForm($('*[data-type="config"][data-id="button"]').find('form').serializeArray()))
  672. $('*[data-type="html"]').each(function(){
  673. data.push(formartForm($('*[data-type="config"][data-id='+$(this).attr('data-id')+']').find('form').serializeArray()))
  674. })
  675. $.ajax({
  676. type: "POST",
  677. url : EDITABLE_PAGE_URL+'/config_edit?if_h5=1&page_id={$Request.param.editable_page_id}',
  678. dataType : 'json',
  679. data : {config_list:data},
  680. success : function (data, status) {
  681. layer.msg(data.message)
  682. }
  683. })
  684. }
  685. function formartForm(temp){
  686. var formData={}
  687. var m_s=[]
  688. var m_i=[]
  689. var r={}
  690. for(var i in temp){
  691. var m=temp[i]['name'].match(/(\[([^\[\]]+)\])+?/g)
  692. if(m){
  693. var w={}
  694. for(var j=m.length-1;j>=0;j--){
  695. var o=m[j].match(/\[(.+)\]/)
  696. var t=(j==m.length-1)?temp[i]['value']:w
  697. w={}
  698. if(o[1].match(/^i_\d+$/)){
  699. if(m_s[j]!=o[1]){
  700. if(!m_s[j] || parseInt(o[1].substr(2))<parseInt(m_s[j].substr(2))){
  701. m_i[j]=0
  702. }else{
  703. m_i[j]++
  704. }
  705. m_s[j]=o[1]
  706. }
  707. w[m_i[j]]=t
  708. }else if(o[1].match(/^\d+$/)){
  709. w[o[1].toString()]=t
  710. }else{
  711. w[o[1]]=t
  712. }
  713. }
  714. var n=temp[i]['name'].match(/^([^\[\]]+)/)
  715. r={}
  716. r[n[1]]=w
  717. formData=setAttr(formData,r)
  718. }else{
  719. formData[temp[i]['name']]=temp[i]['value']
  720. }
  721. }
  722. function setAttr(obj,val){
  723. for(var j in val){
  724. if(obj[j]){
  725. obj[j]=setAttr(obj[j],val[j])
  726. return obj
  727. }else{
  728. return Object.assign(obj,val)
  729. }
  730. }
  731. }
  732. return formData
  733. }
  734. function changeForm(obj){
  735. var id=obj.find('input[name="model_id"]').val()
  736. var temp=obj.serializeArray()
  737. var formData=formartForm(temp)
  738. if(!isNaN(id)){
  739. $.ajax({
  740. type: "POST",
  741. url : EDITABLE_PAGE_URL+'/config_load?if_h5=1&model_id='+id,
  742. dataType : 'json',
  743. data : {config_info:formData},
  744. success : function (data, status) {
  745. if (data.code!=10000) {
  746. layer.msg(data.message);
  747. } else {
  748. $('*[data-type="html"][data-id='+obj.parents('*[data-type="config"]').attr('data-id')+']').html('<div class="model-del iconfont" onclick="delConfig('+obj.parents('*[data-type="config"]').attr('data-id')+')">&#xe6e6;</div>'+data.result.html)
  749. if(typeof(window['loadHtml'+id])!='undefined'){
  750. window['loadHtml'+id]($('*[data-type="html"][data-id='+obj.parents('*[data-type="config"]').attr('data-id')+']'))
  751. }
  752. }
  753. }
  754. })
  755. }else{
  756. switch(id){
  757. case 'page':
  758. $('#page_head').text(formData['page_title']?formData['page_title']:'{$Think.config.ds_config.site_name}')
  759. $('#page_content').css('background-color',formData['back_color']?formData['back_color']:'#f5f5f5')
  760. $('#page_content').css('padding-left',(formData['page_margin']?formData['page_margin']:'0')+'px')
  761. $('#page_content').css('padding-right',(formData['page_margin']?formData['page_margin']:'0')+'px')
  762. $('#float_button').css('padding-left',(formData['page_margin']?formData['page_margin']:'0')+'px')
  763. $('#float_button').css('padding-right',(formData['page_margin']?formData['page_margin']:'0')+'px')
  764. $('#page_content').css('background-image',formData['back_image']?('url('+formData['back_image']+')'):'unset')
  765. if(formData['if_show_footer']==1){
  766. $('#page_foot').show()
  767. $('#page_content').css('padding-bottom','60px')
  768. }else{
  769. $('#page_foot').hide()
  770. $('#page_content').css('padding-bottom','0')
  771. }
  772. if(formData['if_show_header']==1){
  773. $('#page_store').show()
  774. $('#page_content').css('padding-top','92px')
  775. }else{
  776. $('#page_store').hide()
  777. $('#page_content').css('padding-top','0')
  778. }
  779. break
  780. case 'jump':
  781. if(formData['if_show_jump']==1){
  782. $('#jump_adv').show()
  783. }else{
  784. $('#jump_adv').hide()
  785. }
  786. $('#jump_adv img').attr('src',formData['jump_image']?formData['jump_image']:'')
  787. break
  788. case 'button':
  789. if(formData['if_show_button']==1){
  790. $('#float_button').show()
  791. }else{
  792. $('#float_button').hide()
  793. }
  794. $('#float_button').css('top','auto').css('bottom','auto').css('left','auto').css('right','auto')
  795. $('#float_button img').attr('src',formData['button_image']?formData['button_image']:'')
  796. switch(formData['button_position']){
  797. case '1':
  798. $('#float_button').css('top',(formData['button_margin']?formData['button_margin']:'0')+'px').css('left',0)
  799. break
  800. case '2':
  801. $('#float_button').css('top',(formData['button_margin']?formData['button_margin']:'0')+'px').css('right',0)
  802. break
  803. case '3':
  804. $('#float_button').css('bottom',(formData['button_margin']?formData['button_margin']:'0')+'px').css('left',0)
  805. break
  806. case '4':
  807. $('#float_button').css('bottom',(formData['button_margin']?formData['button_margin']:'0')+'px').css('right',0)
  808. break
  809. }
  810. break
  811. }
  812. }
  813. }
  814. </script>
  815. {/block}