local.html 36 KB

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