local.html 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <style>
  4. .map-view{position:relative}
  5. .map-block-view{display:none}
  6. .map-block{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:1100px}
  7. .local-map{-webkit-box-flex:0;-webkit-flex:0 0 750px;-ms-flex:0 0 750px;flex:0 0 750px;height:500px;border:1px solid #ededed;margin-right:20px;border-radius:4px;overflow-y:hidden;position:relative;}
  8. .overlayers{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;border:1px solid #ededed;border-radius:4px;width:100%;height:494px;overflow-y:auto}
  9. .overlayers::-webkit-scrollbar{width:10px;height:1px}
  10. .overlayers::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 5px #ff8143;background:#ff8143}
  11. .overlayers::-webkit-scrollbar-track{box-shadow:inset 0 0 5px #ededed;border-radius:10px;background:#ededed}
  12. .map{height:500px;width:100%;position: relative;}
  13. .region-list{}
  14. .region-list li{padding:30px 12px;position:relative;border:1px solid transparent;border-bottom-color:#ebedf0}
  15. .area-content{overflow:hidden;margin:8px 0}
  16. .area-label{display:inline-block;width:70px;float:left}
  17. .area-input-inline{float:left;width:190px}
  18. .region-add-block{}
  19. .region-add-block button{display:block;padding:0;margin:10px auto;font-size:14px;width:196px;color:#323233;line-height:32px;background:#fff;outline:0;border:1px solid #dcdee0;border-radius:2px;cursor:pointer}
  20. .region-add-block button:hover{border-color:#ff8143;color:#ff8143}
  21. .region-view{display:none;}
  22. .radius-view{display:none;}
  23. .administrative-view{display:none;}
  24. .administrative-region-view{display:none;}
  25. .administrative-radius-view{display:none;}
  26. .time-view{display:none;}
  27. .time-type-view{display:none;}
  28. .area-block-delete{position:absolute;top:-2px;right:5px;font-size:12px;cursor:pointer}
  29. .layui-form-item .layui-form-checkbox[lay-skin=primary] {margin-top: 0;}
  30. .layui-form-radio {margin-top: 0;}
  31. .empty-local-map{-webkit-box-flex:0;-webkit-flex:0 0 750px;-ms-flex:0 0 750px;flex:0 0 750px;height:500px;margin-right:20px;border-radius:4px;overflow-y:hidden;position:relative;}
  32. .empty-address-text{font-size: 14px;color: #f43530;height: 34px;line-height: 34px;}
  33. .day-wrap {display: flex;align-items: center}
  34. .day-input {width: 80px}
  35. .day-input[readonly] {background: #f5f5f5}
  36. .day-wrap .layui-form-radio:nth-child(4) {margin-right: 0px}
  37. </style>
  38. <link rel="stylesheet" href="SHOP_CSS/formSelects-v4.css" />
  39. {/block}
  40. {block name="main"}
  41. <div class="layui-form">
  42. <div class="layui-card card-common card-brief">
  43. <div class="layui-card-header">
  44. <span class="card-title">同城配送基础设置</span>
  45. </div>
  46. <div class="layui-card-body">
  47. <div class="layui-form-item">
  48. <label class="layui-form-label">配送方式:</label>
  49. <div class="layui-input-inline">
  50. <input type="checkbox" name="type" value="default" title="商家自配送" lay-skin="primary" checked>
  51. <input type="checkbox" name="type" value="other" title="第三方配送" lay-skin="primary" disabled>
  52. </div>
  53. </div>
  54. <!--配送时间设置-->
  55. <div class="layui-form-item">
  56. <div class="layui-inline">
  57. <label class="layui-form-label">配送时间设置:</label>
  58. <div class="layui-input-block">
  59. <input type="radio" name="time_is_open" value="1" title="开启" lay-filter="time_is_open" {if $local_info.time_is_open == 1}checked{/if}/>
  60. <input type="radio" name="time_is_open" value="0" title="关闭" lay-filter="time_is_open" {if $local_info.time_is_open == 0 || !isset($local_info.time_is_open)}checked{/if}/>
  61. </div>
  62. <div class="word-aux">开启后,买家下单选择同城配送时,可选择配送时间,提交订单后,将在买家备注中显示。</div>
  63. </div>
  64. </div>
  65. <div class="layui-form-item time-view" {if $local_info.time_is_open == 0} style="display:none;"{/if}>
  66. <div class="layui-inline">
  67. <label class="layui-form-label"></label>
  68. <div class="layui-input-inline">
  69. <input type="radio" name="time_type" value="0" title="每天" lay-filter="time_type" {if $local_info.time_type == 0 || !isset($local_info.time_type)}checked{/if}/>
  70. <input type="radio" name="time_type" value="1" title="自定义" lay-filter="time_type" {if $local_info.time_type == 1 }checked{/if}/>
  71. </div>
  72. </div>
  73. </div>
  74. <div class="time-view ">
  75. <div class="layui-form-item time-type-view" lay-verify="time_week">
  76. <div class="layui-inline">
  77. <label class="layui-form-label"></label>
  78. <div class="layui-input-inline">
  79. <input type="checkbox" value="1" class='time-week' name="time_week[]" title="周一" lay-skin="primary" {if !empty($local_info.time_week) && in_array(1,$local_info.time_week)} checked {/if}>
  80. <input type="checkbox" value="2" class='time-week' name="time_week[]" title="周二" lay-skin="primary" {if !empty($local_info.time_week) && in_array(2,$local_info.time_week)} checked {/if}>
  81. <input type="checkbox" value="3" class='time-week' name="time_week[]" title="周三" lay-skin="primary" {if !empty($local_info.time_week) && in_array(3,$local_info.time_week)} checked {/if}>
  82. <input type="checkbox" value="4" class='time-week' name="time_week[]" title="周四" lay-skin="primary" {if !empty($local_info.time_week) && in_array(4,$local_info.time_week)} checked {/if}>
  83. <input type="checkbox" value="5" class='time-week' name="time_week[]" title="周五" lay-skin="primary" {if !empty($local_info.time_week) && in_array(5,$local_info.time_week)} checked {/if}>
  84. <input type="checkbox" value="6" class='time-week' name="time_week[]" title="周六" lay-skin="primary" {if !empty($local_info.time_week) && in_array(6,$local_info.time_week)} checked {/if}>
  85. <input type="checkbox" value="0" class='time-week' name="time_week[]" title="周日" lay-skin="primary" {if !empty($local_info.time_week) && in_array(0,$local_info.time_week)} checked {/if}>
  86. </div>
  87. </div>
  88. </div>
  89. <div class="time-type-view-all">
  90. <div class="delivery-time">
  91. {foreach name="$local_info.delivery_time" key="k" item="item"}
  92. <div class="layui-form-item" >
  93. <label class="layui-form-label">{$k == 0 ? '配送时段设置:' : ''}</label>
  94. <div class="layui-input-inline">
  95. <input type="text" class="layui-input" id="startTime{$k == 0 ? '' : $k}" lay-verify="start_time" placeholder="配送开始时间" value="" readonly >
  96. <input type="hidden" class="layui-input" name="start_time" placeholder="配送开始时间" value="{$item.start_time}">
  97. </div>
  98. <div class="layui-form-mid layui-word-aux">~</div>
  99. <div class="layui-input-inline">
  100. <input type="text" class="layui-input" id="endTime{$k == 0 ? '' : $k}" lay-verify="end_time" placeholder="配送结束时间" value="" readonly >
  101. <input type="hidden" class="layui-input" name="end_time" placeholder="配送结束时间" value="{$item.end_time}">
  102. </div>
  103. <div class="layui-form-mid layui-word-aux">
  104. {if $k eq 0}
  105. <a href="javascript:;" class="text-color add">添加</a>
  106. {else/}
  107. <a href="javascript:;" class="text-color delete">删除</a>
  108. {/if}
  109. </div>
  110. </div>
  111. {/foreach}
  112. </div>
  113. </div>
  114. <div class="layui-form-item">
  115. <div class="layui-inline">
  116. <label class="layui-form-label">细分时段:</label>
  117. <div class="layui-input-block">
  118. <input type="radio" name="time_interval" value="30" title="30分钟" {if $local_info.time_interval == 30}checked{/if}/>
  119. <input type="radio" name="time_interval" value="60" title="一小时" {if $local_info.time_interval == 60}checked{/if}/>
  120. <input type="radio" name="time_interval" value="90" title="90分钟" {if $local_info.time_interval == 90}checked{/if}/>
  121. <input type="radio" name="time_interval" value="120" title="两小时" {if $local_info.time_interval == 120}checked{/if}/>
  122. </div>
  123. </div>
  124. </div>
  125. <div class="layui-form-item">
  126. <label class="layui-form-label">提前预约:</label>
  127. <div class="layui-input-block day-wrap">
  128. <input type="radio" name="advance_day" value="0" title="无需提前" {if $local_info.advance_day == 0}checked{/if} lay-filter="day_select"/>
  129. <input type="radio" name="advance_day" value="1" title="提前" {if $local_info.advance_day != 0}checked{/if} lay-filter="day_select"/>
  130. <div class="layui-input-inline">
  131. <input type="number" name="advance_day_num" lay-verify="advance_day" class="layui-input day-input" {if $local_info.advance_day == 0}readonly{else/}value="{$local_info.advance_day}"{/if}>
  132. </div>
  133. <div class="layui-form-mid layui-word-aux">天</div>
  134. </div>
  135. <div class="word-aux">预约配送是否需提前进行预约</div>
  136. </div>
  137. <div class="layui-form-item">
  138. <label class="layui-form-label">最长预约:</label>
  139. <div class="layui-input-block day-wrap">
  140. <input type="radio" name="most_day" value="0" title="仅当日" {if $local_info.most_day == 0}checked{/if} lay-filter="day_select"/>
  141. <input type="radio" name="most_day" value="1" title="可预约" {if $local_info.most_day != 0}checked{/if} lay-filter="day_select"/>
  142. <div class="layui-input-inline">
  143. <input type="number" name="most_day_num" lay-verify="most_day" class="layui-input day-input" {if $local_info.most_day == 0}readonly{else/}value="{$local_info.most_day}"{/if}>
  144. </div>
  145. <div class="layui-form-mid layui-word-aux">天内</div>
  146. </div>
  147. <div class="word-aux">预约配送最长可预约多少天内进行提货</div>
  148. </div>
  149. </div>
  150. </div>
  151. <div class="layui-card card-common card-brief">
  152. <div class="layui-card-header">
  153. <span class="card-title">配送区域设置</span>
  154. </div>
  155. <div class="layui-card-body">
  156. <div class="layui-form-item">
  157. <label class="layui-form-label">店铺地址:</label>
  158. <div class="layui-input-block">
  159. <div class="layui-input-inline">
  160. <input type="text" class="layui-input len-long" readonly disabled value="{$shop_detail.full_address}">
  161. </div>
  162. <div class="layui-form-mid layui-word-aux"><a href="{:addon_url('shop/shop/contact')}" target='_brank' class="text-color">修改</a></div>
  163. </div>
  164. <div class="word-aux">配送区域以此地址为起点进行距离计算。</div>
  165. </div>
  166. <div class="layui-form-item">
  167. <div class="layui-inline">
  168. <label class="layui-form-label">配送区域:</label>
  169. <div class="layui-input-block">
  170. <input type="radio" name="area_type" value="1" title="服务半径" lay-filter="area_type" {if $local_info.area_type == 1}checked{/if}/>
  171. <input type="radio" name="area_type" value="2" title="自定义区域" lay-filter="area_type" {if $local_info.area_type == 2}checked{/if}/>
  172. <input type="radio" name="area_type" value="3" title="行政区域" lay-filter="area_type" {if $local_info.area_type == 3}checked{/if}/>
  173. </div>
  174. <div class="word-aux">订单中商品在优惠前的价格(不包含运费)低于起送金额时,买家无法下单</div>
  175. </div>
  176. </div>
  177. <div class="layui-form-item man_type">
  178. <div class="layui-inline">
  179. <label class="layui-form-label">配送优惠:</label>
  180. <div class="layui-input-block">
  181. <input type="radio" name="man_type" lay-filter="man_type" value="free" title="免邮" {if $local_info.man_type == 'free' || empty($local_info.man_type)} checked {/if}>
  182. <input type="radio" name="man_type" lay-filter="man_type" value="discount" title="优惠" {if $local_info.man_type == 'discount'} checked {/if}>
  183. </div>
  184. <!-- <div class="word-aux">当配送区域交叉时,以最低费用计算费用。 因考虑实际送货路况,配送费按汽车导航距离计算,非地图直线距离。</div>-->
  185. </div>
  186. <div class="layui-block">
  187. <label class="layui-form-label"></label>
  188. <div class="layui-input-block">
  189. <div class="layui-form-mid">满</div>
  190. <div class="layui-input-inline">
  191. <input type="number" name="man_money" lay-verify="man_money" class="layui-input" value="{$local_info.man_money}" onblur="$('input[name=\'man_money\']').val(Math.abs($('input[name=\'man_money\']').val()));">
  192. </div>
  193. <div class="layui-form-mid discount-txt-before">元,免邮</div>
  194. <div class="layui-input-inline man-discount" style="width: 100px;">
  195. <input type="number" name="man_discount" lay-verify="man_discount" lay-verify="man_discount" placeholder="" autocomplete="off" class="layui-input" value="{$local_info.man_discount}" onblur="manDiscount()">
  196. </div>
  197. <div class="layui-form-mid discount-txt-after">元</div>
  198. </div>
  199. </div>
  200. </div>
  201. <div class="layui-form-item administrative-view">
  202. <label class="layui-form-label"><span class="required">*</span>可配送区域:</label>
  203. <div class="layui-input-inline len-long area-select">
  204. <select name="district_id" xm-select="district_id" lay-filter="district_id" lay-verify="district_id">
  205. {foreach $district_list as $k => $v}
  206. <option value="{$v.id}" {if in_array($v.id, $local_info.area_array)}selected="selected"{/if}>{$v.name}</option>
  207. {/foreach}
  208. </select>
  209. </div>
  210. </div>
  211. <div class="layui-form-item radius-view">
  212. <div class="layui-inline">
  213. <label class="layui-form-label"></label>
  214. <div class="layui-input-block">
  215. <div class="layui-form-mid">距离</div>
  216. <div class="layui-input-inline">
  217. <input type="number" name="radius_start_distance" lay-verify="radius_start_distance" class="layui-input" value="{if $local_info.area_type == 1}{$local_info.start_distance}{/if}">
  218. </div>
  219. <div class="layui-form-mid">公里以内,配送费用</div>
  220. <div class="layui-input-inline" style="width: 100px;">
  221. <input type="number" name="radius_start_delivery_money" lay-verify="radius_start_delivery_money" placeholder="¥" autocomplete="off" class="layui-input" value="{if $local_info.area_type == 1}{$local_info.start_delivery_money}{/if}">
  222. </div>
  223. </div>
  224. </div>
  225. </div>
  226. <div class="layui-form-item radius-view">
  227. <div class="layui-inline">
  228. <label class="layui-form-label"></label>
  229. <div class="layui-input-block">
  230. <div class="layui-form-mid">距离每增加</div>
  231. <div class="layui-input-inline">
  232. <input type="number" name="radius_continued_distance" lay-verify="radius_continued_distance" class="layui-input" value="{if $local_info.area_type == 1}{$local_info.continued_distance}{/if}">
  233. </div>
  234. <div class="layui-form-mid">公里,运费将增加</div>
  235. <div class="layui-input-inline" style="width: 100px;">
  236. <input type="number" name="radius_continued_delivery_money" lay-verify="radius_continued_delivery_money" placeholder="¥" autocomplete="off" class="layui-input" value="{if $local_info.area_type == 1}{$local_info.continued_delivery_money}{/if}">
  237. </div>
  238. </div>
  239. <div class="word-aux">当配送区域交叉时,以最低费用计算费用。 因考虑实际送货路况,配送费按汽车导航距离计算,非地图直线距离。</div>
  240. </div>
  241. </div>
  242. <div class="layui-inline map-block-view">
  243. <label class="layui-form-label">地图定位:</label>
  244. <div class="layui-input-block map-view">
  245. <div class="map-block">
  246. {if $tencent_map_key}
  247. {if $check_map_key.status == 0}
  248. <div class="local-map">
  249. <div class="map" id="container"></div>
  250. </div>
  251. {else/}
  252. <div class="empty-local-map">
  253. <div class="empty-address-text">{$check_map_key.message}。<a href="{:addon_url('/shop/config/map')}" class="text-color">重新配置</a></div>
  254. </div>
  255. {/if}
  256. {else/}
  257. <div class="empty-local-map">
  258. <div class="empty-address-text">腾讯地图尚未配置,无法定位地址。<a href="{:addon_url('/shop/config/map')}" class="text-color">点击配置</a></div>
  259. </div>
  260. {/if}
  261. <div class="overlayers">
  262. <ul class="region-list"></ul>
  263. <div class="region-add-block">
  264. <button onclick="addArea();">增加配送区域</button>
  265. </div>
  266. </div>
  267. </div>
  268. </div>
  269. </div>
  270. </div>
  271. </div>
  272. <div class="layui-card card-common card-brief administrative-view">
  273. <div class="layui-card-header">
  274. <span class="card-title">配送价格</span>
  275. </div>
  276. <div class="layui-form-item">
  277. <div class="layui-inline">
  278. <label class="layui-form-label">起送价格:</label>
  279. <div class="layui-input-block">
  280. <div class="layui-input-inline">
  281. <input type="number" name='xz_start_money' lay-verify="xz_start_money" class="layui-input" value="{if $local_info.area_type == 3}{$local_info.start_money}{/if}">
  282. </div>
  283. <div class="layui-form-mid">元</div>
  284. </div>
  285. <div class="word-aux">订单中商品在优惠券的价格(不包含运费)低于配送价时,买家无法下单</div>
  286. </div>
  287. </div>
  288. <div class="layui-form-item administrative-region-view">
  289. <div class="layui-inline">
  290. <label class="layui-form-label">配送费:</label>
  291. <div class="layui-input-inline">
  292. <div class="layui-input-inline">
  293. <input type="number" name='xz_delivery_money' lay-verify="xz_delivery_money"class="layui-input administrative-delivery-money"value="{if $local_info.area_type == 3}{$local_info.delivery_money}{/if}">
  294. </div>
  295. <div class="layui-form-mid">元</div>
  296. </div>
  297. </div>
  298. </div>
  299. <div class="layui-form-item">
  300. <div class="layui-inline">
  301. <label class="layui-form-label">阶梯价:</label>
  302. <div class="layui-input-inline">
  303. <div class="layui-input-inline">
  304. <input type="checkbox" name="is_open_step" value="1" lay-skin="switch" lay-filter="is_open_step" {if isset($local_info.is_open_step) && $local_info.is_open_step == 1}checked{/if}/>
  305. </div>
  306. <div class="layui-form-mid">元</div>
  307. </div>
  308. </div>
  309. </div>
  310. <div class="layui-form-item administrative-radius-view">
  311. <div class="layui-inline">
  312. <label class="layui-form-label"></label>
  313. <div class="layui-input-inline">
  314. <div class="layui-form-mid">半径</div>
  315. <div class="layui-input-inline">
  316. <input type="number" name="xz_start_distance" lay-verify="xz_start_distance" class="layui-input" value="{if $local_info.area_type == 3}{$local_info.start_distance}{/if}">
  317. </div>
  318. <div class="layui-form-mid">公里以内,配送费用</div>
  319. <div class="layui-input-inline" style="width: 100px;">
  320. <input type="number" name="xz_start_delivery_money" placeholder="¥" lay-verify="xz_start_delivery_money" autocomplete="off" class="layui-input" value="{if $local_info.area_type == 3}{$local_info.start_delivery_money}{/if}">
  321. </div>
  322. </div>
  323. </div>
  324. </div>
  325. <div class="layui-form-item administrative-radius-view">
  326. <div class="layui-inline">
  327. <label class="layui-form-label"></label>
  328. <div class="layui-input-inline">
  329. <div class="layui-form-mid">距离每增加</div>
  330. <div class="layui-input-inline">
  331. <input type="number" name="xz_continued_distance" lay-verify="xz_continued_distance" class="layui-input" value="{if $local_info.area_type == 3}{$local_info.continued_distance}{/if}">
  332. </div>
  333. <div class="layui-form-mid">公里,运费将增加</div>
  334. <div class="layui-input-inline" style="width: 100px;">
  335. <input type="number" name="xz_continued_delivery_money" lay-verify="xz_continued_delivery_money" placeholder="¥" autocomplete="off" class="layui-input"value="{if $local_info.area_type == 3}{$local_info.continued_delivery_money}{/if}">
  336. </div>
  337. </div>
  338. </div>
  339. </div>
  340. </div>
  341. <div class="form-row">
  342. <button class="layui-btn" lay-submit lay-filter="save">保存</button>
  343. </div>
  344. </div>
  345. {/block}
  346. {block name="script"}
  347. <!--<script type="text/javascript" src="{:get_http_type()}://webapi.amap.com/maps?v=1.4.15&amp;key=2df5711d4e2fd9ecd1622b5a53fc6b1d&plugin=AMap.CircleEditor,AMap.PolyEditor"></script>-->
  348. <!--<script type="text/javascript" src="SHOP_JS/local.js"></script>-->
  349. <script src="https://map.qq.com/api/gljs?libraries=tools,service&v=1.exp&key={$tencent_map_key}"></script>
  350. <script type="text/javascript" src="SHOP_JS/qq_local.js"></script>
  351. <script type="text/html" id="area-html">
  352. <li key = '{{ d.key }}'>
  353. <div class="area-content">
  354. <label class="area-label">区域名称</label>
  355. <div class="area-input-inline">
  356. <input type="text" class="layui-input area-name" lay-verify="area_name" value="{{ d.area_name || '' }}">
  357. </div>
  358. </div>
  359. <div class="area-content">
  360. <label class="area-label">起送价</label>
  361. <div class="area-input-inline">
  362. <input type="number" class="layui-input start-price" lay-verify="start_price"value="{{ d.start_price || '' }}">
  363. </div>
  364. </div>
  365. <div class="area-content region-view">
  366. <label class="area-label">配送费</label>
  367. <div class="area-input-inline">
  368. <input type="number" class="layui-input delivery-money" lay-verify="delivery_money"value="{{ d.delivery_money || '' }}">
  369. </div>
  370. </div>
  371. <div class="area-content">
  372. <label class="area-label">划分方式</label>
  373. <div class="area-input-inline layui-input-inline">
  374. <input type="radio" name="rule_type{{ d.key }}" class='rule-type' value="circle" title="半径" lay-filter="huafen_type{{ d.key }}" {{# if(d.rule_type == 'circle' || d.rule_type == undefined){ }} checked{{# } }} />
  375. <input type="radio" name="rule_type{{ d.key }}" class='rule-type' value="polygon" title="自定义" lay-filter="huafen_type{{ d.key }}" {{# if(d.rule_type == 'polygon'){ }} checked{{# } }}/>
  376. </div>
  377. </div>
  378. <div class="area-block-delete text-color" onclick="deleteArea('{{ d.key }}');">删除</div>
  379. </li>
  380. </script>
  381. <script>
  382. var laytpl,form;
  383. var init_key = 1;
  384. {if empty($local_info.local_area_array)}
  385. var area_array = [
  386. {
  387. rule_type:'circle'
  388. }
  389. ];
  390. {else/}
  391. var area_array = JSON.parse('{:json_encode($local_info.local_area_array, JSON_UNESCAPED_UNICODE)}');
  392. {/if}
  393. //全局定义一次, 加载formSelects
  394. layui.config({
  395. base: '__STATIC__/ext/layui/extend/' //此处路径请自行处理, 可以使用绝对路径
  396. }).extend({
  397. formSelects: 'formSelects-v4'
  398. });
  399. layui.use([ 'laydate', 'form', 'laytpl' , 'formSelects'], function() {
  400. var laydate = layui.laydate;
  401. var formSelects = layui.formSelects;
  402. form = layui.form;
  403. laytpl = layui.laytpl;
  404. function fetchTimeSelect(){
  405. $('.delivery-time .layui-form-item').each(function (index, item) {
  406. //时间选择器
  407. var startTime = $(item).find("input[name=start_time]").val(), endTime = $(item).find("input[name=end_time]").val(), initTime = parseInt({:strtotime(date('Y-m-d'))});
  408. laydate.render({
  409. elem: '#startTime' + (index ? index : '')
  410. ,type: 'time'
  411. ,value: startTime ? ns.time_to_date((initTime + parseInt(startTime)), 'h:m:s') : ''
  412. ,done: function(value, date, endDate){
  413. var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
  414. $(item).find("input[name=start_time]").val(time);
  415. }
  416. });
  417. //时间选择器
  418. laydate.render({
  419. elem: '#endTime' + (index ? index : '')
  420. ,type: 'time'
  421. ,value: startTime ? ns.time_to_date((initTime + parseInt(endTime)), 'h:m:s') : ''
  422. ,done: function(value, date, endDate){
  423. var time = date.hours * 3600 + date.minutes * 60 + date.seconds;
  424. $(item).find("input[name=end_time]").val(time);
  425. }
  426. });
  427. })
  428. }
  429. fetchTimeSelect();
  430. $('body').on('click', '.delivery-time .delete', function () {
  431. $(this).parents('.layui-form-item').remove()
  432. })
  433. $('body').on('click', '.delivery-time .add', function () {
  434. var length = $('.delivery-time .layui-form-item').length;
  435. if (length >= 3) { layer.msg('最多添加三个时段'); return;}
  436. var h = `<div class="layui-form-item" >
  437. <label class="layui-form-label"></label>
  438. <div class="layui-input-inline">
  439. <input type="text" class="layui-input" id="startTime`+ length +`" lay-verify="start_time" placeholder="配送开始时间" value="" readonly >
  440. <input type="hidden" class="layui-input" name="start_time" placeholder="配送开始时间" value="">
  441. </div>
  442. <div class="layui-form-mid layui-word-aux">~</div>
  443. <div class="layui-input-inline">
  444. <input type="text" class="layui-input" id="endTime`+ length +`" lay-verify="end_time" placeholder="配送结束时间" value="" readonly >
  445. <input type="hidden" class="layui-input" name="end_time" placeholder="配送结束时间" value="">
  446. </div>
  447. <div class="layui-form-mid layui-word-aux">
  448. <a href="javascript:;" class="text-color delete">删除</a>
  449. </div>
  450. </div>`;
  451. $('.delivery-time').append(h);
  452. fetchTimeSelect();
  453. })
  454. //开启定时达
  455. form.on('radio(time_is_open)', function(data){
  456. timeChange(data.value);
  457. });
  458. //运费优惠设置
  459. form.on('radio(man_type)', function(data){
  460. switchManType();
  461. });
  462. //开启定时达
  463. form.on('radio(time_type)', function(data){
  464. timeTypeChange(data.value);
  465. });
  466. //区域类型
  467. form.on('radio(area_type)', function(data){
  468. areaChange(data.value);
  469. });
  470. //启用阶梯价
  471. form.on('switch(is_open_step)', function(data){
  472. stepPriceChange(data.elem.checked ? 1 : 0);
  473. });
  474. form.on('radio(day_select)', function (data){
  475. if (data.value == 1) {
  476. $(data.elem).parents('.day-wrap').find('input[type="number"]').prop('readonly', false);
  477. } else {
  478. $(data.elem).parents('.day-wrap').find('input[type="number"]').prop('readonly', true);
  479. }
  480. })
  481. init();
  482. form.render();
  483. form.verify({
  484. start_time: function(value, item){ //value:表单的值、item:表单的DOM对象
  485. if ($('[name="time_is_open"]:checked').val() == 1) {
  486. var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
  487. var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
  488. if (parseInt(start_time) > parseInt(end_time)) {
  489. return '配送开始时间不能大于配送结束时间';
  490. }
  491. var prev_endtime = $(item).parents('.layui-form-item').prev('.layui-form-item').find("input[name=end_time]").val();
  492. if (prev_endtime && parseInt(prev_endtime) > parseInt(start_time)) return '配送开始时间不能小于上一阶段配送结束时间';
  493. }
  494. },
  495. end_time: function(value, item){ //value:表单的值、item:表单的DOM对象
  496. if ($('[name="time_is_open"]:checked').val() == 1) {
  497. var end_time = $(item).parents('.layui-form-item').find("input[name=end_time]").val();
  498. var start_time = $(item).parents('.layui-form-item').find("input[name=start_time]").val();
  499. var time_interval = $('[name="time_interval"]:checked').val();
  500. if (parseInt(end_time) < parseInt(start_time)) {
  501. return '配送结束时间不能小于配送开始时间';
  502. }
  503. if ((parseInt(end_time) - parseInt(start_time)) < parseInt(time_interval)) {
  504. return '配送时间间隔不能小于' + time_interval + '分钟';
  505. }
  506. }
  507. },
  508. time_week: function(){
  509. if ($('[name="time_is_open"]:checked').val() == 1 && $('[name="time_type"]:checked').val() == 1 && !$('.time-week:checked').length)
  510. return '请选择可配送日期';
  511. },
  512. advance_day: function (value){
  513. if ($('[name="advance_day"]:checked').val() == 1) {
  514. if (value == '' || value == 0) return '请输入提前预约时间';
  515. if (value < 0) return '提前预约时间不能为负数';
  516. }
  517. },
  518. most_day: function (value){
  519. if ($('[name="most_day"]:checked').val() == 1) {
  520. if (value == '' || value == 0) return '请输入最长可预约时间';
  521. if (value < 0) return '最长可预约时间不能为负数';
  522. if (value > 15) return '最长可预约时间不能超过15天';
  523. }
  524. },
  525. radius_start_distance: function(value, item){
  526. var area_type = $("input[name=area_type]:checked").val();
  527. if(area_type == 1 && value == ''){
  528. return '请填写配送区域相关信息';
  529. }
  530. if (area_type == 1 && parseFloat(value) <= 0) {
  531. return '距离不能小于等于0';
  532. }
  533. },
  534. radius_start_delivery_money: function(value, item){
  535. var area_type = $("input[name=area_type]:checked").val();
  536. if(area_type == 1 && value == ''){
  537. return '请填写配送区域相关信息';
  538. }
  539. },
  540. radius_continued_distance: function(value, item){
  541. var area_type = $("input[name=area_type]:checked").val();
  542. if(area_type == 1 && value == ''){
  543. return '请填写配送区域相关信息';
  544. }
  545. if (area_type == 1 && parseFloat(value) <= 0) {
  546. return '距离不能小于等于0';
  547. }
  548. },
  549. radius_continued_delivery_money: function(value, item){
  550. var area_type = $("input[name=area_type]:checked").val();
  551. if(area_type == 1 && value == ''){
  552. return '请填写配送区域相关信息';
  553. }
  554. },
  555. xz_start_distance: function(value, item){
  556. var area_type = $("input[name=area_type]:checked").val();
  557. var is_open_step = $("input[name=is_open_step]:checked").val();
  558. if(area_type == 3 && is_open_step == 1 && value == ''){
  559. return '请填写配送区域相关信息';
  560. }
  561. },
  562. xz_start_delivery_money: function(value, item){
  563. var area_type = $("input[name=area_type]:checked").val();
  564. var is_open_step = $("input[name=is_open_step]:checked").val();
  565. if(area_type == 3 && is_open_step == 1 && value == ''){
  566. return '请填写配送区域相关信息';
  567. }
  568. },
  569. xz_continued_distance: function(value, item){
  570. var area_type = $("input[name=area_type]:checked").val();
  571. var is_open_step = $("input[name=is_open_step]:checked").val();
  572. if(area_type == 3 && is_open_step == 1 && value == ''){
  573. return '请填写配送区域相关信息';
  574. }
  575. },
  576. xz_continued_delivery_money: function(value, item){
  577. var area_type = $("input[name=area_type]:checked").val();
  578. var is_open_step = $("input[name=is_open_step]:checked").val();
  579. if(area_type == 3 && is_open_step == 1 && value == ''){
  580. return '请填写配送区域相关信息';
  581. }
  582. },
  583. xz_start_money: function(value, item){
  584. var area_type = $("input[name=area_type]:checked").val();
  585. var is_open_step = $("input[name=is_open_step]:checked").val();
  586. if(area_type == 3 && value == ''){
  587. return '请填写配送区域相关信息';
  588. }
  589. },
  590. xz_delivery_money: function(value, item){
  591. var area_type = $("input[name=area_type]:checked").val();
  592. var is_open_step = $("input[name=is_open_step]:checked").val();
  593. if(area_type == 3 && is_open_step == 0 && value == ''){
  594. return '请填写配送区域相关信息';
  595. }
  596. },
  597. start_price: function(value, item){
  598. var area_type = $("input[name=area_type]:checked").val();
  599. if((area_type == 1 || area_type == 2) && value == ''){
  600. return '请填写配送区域相关信息';
  601. }
  602. },
  603. delivery_money: function(value, item){
  604. var area_type = $("input[name=area_type]:checked").val();
  605. if(area_type == 2 && value == ''){
  606. return '请填写配送区域相关信息';
  607. }
  608. },
  609. //配送区域
  610. area_name: function(value, item){
  611. var area_type = $("input[name=area_type]:checked").val();
  612. if((area_type == 1 || area_type == 2) && value == ''){
  613. return '请填写配送区域相关信息';
  614. }
  615. },
  616. district_id : function(value, item){
  617. var area_type = $("input[name=area_type]:checked").val();
  618. if(area_type == 3 && value == ''){
  619. return '请填写配送区域相关信息';
  620. }
  621. },
  622. man_discount: function(value, item){ //value:表单的值、item:表单的DOM对象
  623. var man_type = $("[name=man_type]:checked").val();
  624. if(man_type == 'discount'){
  625. if(parseFloat(value) < 0){
  626. return '运费折扣不能小于0';
  627. }
  628. }
  629. },
  630. man_money: function(value, item){ //value:表单的值、item:表单的DOM对象
  631. if(parseFloat(value) < 0){
  632. return '金额不能小于0';
  633. }
  634. },
  635. });
  636. var repeat_flag = false;
  637. //提交
  638. form.on('submit(save)', function(data) {
  639. if (repeat_flag) return false;
  640. repeat_flag = true;
  641. var transfer_type =$("input[name=type]:checked()");
  642. if(transfer_type.length <= 0){
  643. repeat_flag = false;
  644. layer.msg("请至少选择一种配送方式!");
  645. return
  646. }
  647. var field = data.field;
  648. var json = {};
  649. json.type = field.type;
  650. json.man_money = field.man_money;
  651. json.man_type = field.man_type;
  652. json.man_discount = field.man_discount;
  653. json.area_type = field.area_type;
  654. //是否开启定时达
  655. json.time_is_open = field.time_is_open;
  656. json.time_interval = $('[name="time_interval"]:checked').val();
  657. if(field.time_is_open){
  658. //时间类型
  659. json.time_type = field.time_type;
  660. //自定义时间
  661. if(field.time_type == 1){
  662. var time_week = [];
  663. $('.time-week').each(function(){
  664. if($(this).prop('checked')){
  665. time_week.push($(this).val());
  666. }
  667. });
  668. json.time_week = time_week.toString();
  669. }
  670. }
  671. json.delivery_time = [];
  672. $('.delivery-time .layui-form-item').each(function (index, item) {
  673. json.delivery_time.push({
  674. start_time: $(item).find("input[name=start_time]").val(),
  675. end_time: $(item).find("input[name=end_time]").val()
  676. })
  677. })
  678. json.start_time = json.delivery_time[0].start_time;
  679. json.end_time = json.delivery_time[0].end_time;
  680. json.delivery_time = JSON.stringify(json.delivery_time);
  681. json.advance_day = $('[name="advance_day"]:checked').val() == 0 ? 0 : $('[name="advance_day_num"]').val();
  682. json.most_day = $('[name="most_day"]:checked').val() == 0 ? 0 : $('[name="most_day_num"]').val();
  683. switch(field.area_type){
  684. case '1':
  685. json.start_distance = field.radius_start_distance;
  686. json.start_delivery_money = field.radius_start_delivery_money;
  687. json.continued_distance = field.radius_continued_distance;
  688. json.continued_delivery_money = field.radius_continued_delivery_money;
  689. var local_area_json = eachOverlayers(field.area_type);
  690. json.local_area_json = JSON.stringify(local_area_json);
  691. break;
  692. case '2':
  693. var local_area_json = eachOverlayers(field.area_type);
  694. json.local_area_json = JSON.stringify(local_area_json);
  695. break;
  696. case '3':
  697. //地址id
  698. var area_array = formSelects.value('district_id', 'valStr');
  699. json.area_array = area_array;
  700. json.start_money = field.xz_start_money;
  701. json.is_open_step = field.is_open_step;
  702. if(field.is_open_step){
  703. json.start_distance = field.xz_start_distance;
  704. json.start_delivery_money = field.xz_start_delivery_money;
  705. json.continued_distance = field.xz_continued_distance;
  706. json.continued_delivery_money = field.xz_continued_delivery_money;
  707. }else{
  708. json.delivery_money = field.xz_delivery_money;
  709. }
  710. break;
  711. }
  712. if(json.local_area_json == '[]'){
  713. repeat_flag = false;
  714. layer.msg('至少保留一个配送区域');
  715. return;
  716. }
  717. $.ajax({
  718. type: 'POST',
  719. dataType: 'JSON',
  720. url: ns.url("shop/local/local"),
  721. data: json,
  722. success: function(res) {
  723. layer.msg(res.message);
  724. if (res.code == 0) {
  725. location.reload();
  726. }else{
  727. repeat_flag = false;}
  728. }
  729. });
  730. });
  731. });
  732. //删除区域
  733. function deleteArea(key){
  734. var parent = $('li[key='+key+']');
  735. parent.remove();
  736. removeOverlayers(key);
  737. }
  738. //遍历获取区域配置
  739. function eachOverlayers(area_type){
  740. var area_json = [];
  741. $('.region-list li').each(function(){
  742. var start_price = $(this).find('.start-price').val();
  743. var area_name = $(this).find('.area-name').val();
  744. var rule_type = $(this).find('.rule-type:checked').val();
  745. var key = $(this).attr('key');
  746. var path = getOverlayersPath(key, rule_type);
  747. var item_json = {
  748. start_price:start_price,
  749. area_name:area_name,
  750. rule_type:rule_type,
  751. path:path,
  752. };
  753. if(area_type == 2){
  754. var delivery_money = $(this).find('.delivery-money').val();
  755. item_json.delivery_money = delivery_money;
  756. }
  757. area_json.push(item_json);
  758. });
  759. return area_json;
  760. }
  761. $("body").on('click', '.region-list li', function(){
  762. $('.region-list li').removeClass('border-color');
  763. $(this).addClass('border-color');
  764. // var rule_type = $(this).find('.rule_type:checked');
  765. var key = $(this).attr('key');
  766. //创建覆盖物
  767. foursOverlayers(key);
  768. });
  769. //初始化
  770. function init(){
  771. //是否启用定时达
  772. timeChange($("input[name=time_is_open]:checked").val());
  773. //是否启用定时达
  774. timeTypeChange($("input[name=time_type]:checked").val());
  775. //初始化区域类型
  776. areaChange($("input[name=area_type]:checked").val());
  777. //初始化阶梯价
  778. stepPriceChange($("input[name=is_open_step]").prop('checked') ? 1 : 0);
  779. if ($("input[name=area_type]:checked").val() == 1) {
  780. initMap();
  781. }
  782. form.render();
  783. }
  784. function initMap() {
  785. if ($('#container canvas').length) return;
  786. if('{$shop_detail.latitude}' == "" || '{$shop_detail.longitude}' == ""){
  787. var latlng = {lat:'',lng:''};
  788. }else{
  789. var latlng = {lat:'{$shop_detail.latitude}',lng:'{$shop_detail.longitude}'};
  790. }
  791. createMap('container', latlng);
  792. $.each(area_array, function(i, item){
  793. addArea(item);
  794. });
  795. }
  796. function timeChange(is_open){
  797. $('.time-view').hide();
  798. if(is_open == 0){
  799. }else if(is_open == 1){
  800. $('.time-view').show();
  801. }
  802. }
  803. function manDiscount(){
  804. $('input[name="man_discount"]').val(Math.abs($('input[name="man_discount"]').val()));
  805. }
  806. switchManType(1);
  807. function switchManType(init = 0){
  808. let data = $('[name="man_type"]:checked').val();
  809. if(data == 'free'){
  810. $('.man_type .discount-txt-before').text('元,免邮费');
  811. $('.man_type .discount-txt-after, .man_type .man-discount').addClass('layui-hide');
  812. }else if(data == 'discount'){
  813. $('.man_type .discount-txt-after, .man_type .man-discount').removeClass('layui-hide');
  814. $('.man_type .discount-txt-before').text('元,运费优惠');
  815. }
  816. manDiscount();
  817. }
  818. function timeTypeChange(type){
  819. $('.time-type-view').hide();
  820. if(type == 0){
  821. }else if(type == 1){
  822. $('.time-type-view').show();
  823. }
  824. }
  825. function areaChange(area_type){
  826. $(".region-view").hide();
  827. $(".radius-view").hide();
  828. $(".administrative-view").hide();
  829. $(".map-block-view").hide();
  830. if(area_type== 1){
  831. $(".radius-view").show();
  832. $(".map-block-view").show();
  833. initMap();
  834. }else if(area_type == 2){
  835. $(".region-view").show();
  836. $(".map-block-view").show();
  837. initMap();
  838. }else if(area_type == 3){
  839. $(".administrative-view").show();
  840. }
  841. }
  842. function stepPriceChange(is_open){
  843. $(".administrative-region-view").hide();
  844. $(".administrative-radius-view").hide();
  845. if(is_open == 0){
  846. $(".administrative-region-view").show();
  847. }else if(is_open == 1){
  848. $(".administrative-radius-view").show();
  849. }
  850. }
  851. /**
  852. * 创建配送区域
  853. */
  854. function addArea(data){
  855. var temp_data = data != undefined ? data : [];
  856. var rule_type = temp_data.length == 0 ? 'circle' : data.rule_type;
  857. var key = init_key;
  858. temp_data['key'] = key;
  859. temp_data['rule_type'] = rule_type;
  860. var tpl = $("#area-html").html();
  861. laytpl(tpl).render(temp_data, function(html){
  862. $('.region-list li').removeClass('border-color');
  863. $('.region-list').append(html);
  864. $('.region-list li').last().addClass('border-color');
  865. form.render();
  866. form.on('radio(huafen_type'+key +')', function(data){
  867. var parent_obj = $(data.elem).parent().parent().parent();
  868. var rule_type = data.value;
  869. var key = parent_obj.attr('key');
  870. removeOverlayers(key);
  871. //创建覆盖物
  872. createOverlayers(rule_type, key);
  873. });
  874. });
  875. var path = data != undefined ? data.path : undefined;
  876. //创建覆盖物
  877. createOverlayers(rule_type, key, path);
  878. areaChange($("input[name=area_type]:checked").val());
  879. init_key++;
  880. }
  881. /**
  882. * 创建覆盖物
  883. * @param type
  884. * @param key
  885. */
  886. function createOverlayers(type, key, path){
  887. switch(type){
  888. //多边形
  889. case 'polygon':{
  890. createPolygon(key, getRandomColor(), getRandomColor(), path);
  891. break;
  892. }
  893. //圆
  894. case 'circle':{
  895. createCircle(key, getRandomColor(), getRandomColor(), path);
  896. break;
  897. }
  898. }
  899. }
  900. /**
  901. * 随机生成颜色
  902. * @returns {string}
  903. */
  904. function getRandomColor(){
  905. return '#' + (function(color){
  906. return (color += '0123456789abcdef'[Math.floor(Math.random()*16)])
  907. && (color.length == 6) ? color : arguments.callee(color);
  908. })('');
  909. }
  910. /**
  911. * 一天内的时间比较
  912. * @param start_time
  913. * @param end_time
  914. * @returns {boolean}
  915. * @constructor
  916. */
  917. function compareDate(start_time, end_time)
  918. {
  919. var date = new Date();
  920. var start_time_arr = start_time.split(":");
  921. var end_time_arr = end_time.split(":");
  922. return date.setHours(end_time_arr[0],end_time_arr[1],end_time_arr[2]) > date.setHours(start_time_arr[0],start_time_arr[1],start_time_arr[2]);
  923. }
  924. </script>
  925. {/block}