mission.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <style type="text/css">
  2. .xm-label-block {
  3. background-color: #287bd2
  4. }
  5. </style>
  6. <!-- 正文开始 -->
  7. <div class="layui-fluid">
  8. <div class="layui-card">
  9. <div class="layui-card-body">
  10. <div class="layui-tab layui-tab-brief">
  11. <table id="dataTable" lay-filter="dataTable"></table>
  12. </div>
  13. </div>
  14. </div>
  15. </div>
  16. <script type="text/html" id="toolBarTpl">
  17. <div class="layui-btn-group fl">
  18. <a class="layui-btn layui-btn-sm layui-icon layui-icon-add-circle-fine mission-add-btn">&nbsp;添加</a>
  19. <a table-data="{'url':'store/mission/plectron','action':'put',param:{'status': 1}}" class="layui-btn layui-btn-sm layui-icon layui-icon-play table-toolbar-btn">&nbsp;启用</a >
  20. <a table-data="{'url':'store/mission/plectron','action':'put',param:{'status': 0}}" confirm class="layui-btn layui-btn-sm layui-icon layui-icon-pause table-toolbar-btn">&nbsp;禁用</a>
  21. <a table-data="{'url':'store/mission/plectron','action':'delete'}" confirm class="layui-btn layui-btn-sm layui-icon layui-icon-close table-toolbar-btn">&nbsp;删除</a>
  22. </div>
  23. </script>
  24. <!-- 表格操作列 -->
  25. <script type="text/html" id="tableBarUser">
  26. <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
  27. <a class="layui-btn layui-btn-danger layui-btn-xs" perm-show="delete:/store/mission/<id>" lay-event="del">删除</a>
  28. </script>
  29. <!-- 表格状态列 -->
  30. <script type="text/html" id="tableStateUser">
  31. <input type="checkbox" value="{{ d.status }}" switch-data="{'url':'store/mission/{{ d.id }}','action':'put'}" lay-skin="switch" lay-filter="ckDataTableState"
  32. lay-text="正常|锁定" {{d.status==1?'checked':''}}/>
  33. </script>
  34. <!-- 表单弹窗 -->
  35. <script type="text/html" id="modelUser">
  36. <form id="modelUserForm" lay-filter="modelUserForm" class="layui-form model-form">
  37. <input name="id" type="hidden"/>
  38. <div class="layui-form-item text-right">
  39. <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
  40. <button class="layui-btn" perm-show="put:/store/mission/<id>" lay-filter="modelSubmitUser" lay-submit>保存</button>
  41. </div>
  42. </form>
  43. </script>
  44. <script type="text/html" id="modelSkill">
  45. <form id="modelSkillForm" lay-filter="modelSkillForm" class="layui-form model-form">
  46. <input name="id" type="hidden"/>
  47. <div class="layui-form-item">
  48. <label class="layui-form-label layui-form-required">配送标题</label>
  49. <div class="layui-input-block">
  50. <input name="name" placeholder="请输配送标题" type="text" class="layui-input" maxlength="80"
  51. lay-verType="tips" lay-verify="required" required/>
  52. </div>
  53. </div>
  54. <div class="layui-form-item">
  55. <label class="layui-form-label layui-form-required">展示图片</label>
  56. <div class="layui-input-block">
  57. <input type="text" name="cover_img" value="" class="layui-input layui-disabled" style="padding-right: 80px;" disabled="">
  58. <button class="layui-btn icon-btn dialog-file-choose" data-input="cover_img" data-count="3" type="button" style="position: absolute;top: 0;right: 0px;cursor: pointer;"><i class="layui-icon"></i>上传图片</button>
  59. <div class="img-preview-box cover_img" style="display: flex;flex-wrap: wrap;align-content: space-between;background: #f7f7f7;">
  60. <img class="input-img-preview" src="../../assets/images/placeholder-refund.png" style="height: 100px;margin: 8px;">
  61. </div>
  62. </div>
  63. </div>
  64. <div class="layui-form-item">
  65. <label class="layui-form-label layui-form-required">配送说明</label>
  66. <div class="layui-input-block">
  67. <textarea name="content" placeholder="请输入配送说明" class="layui-textarea" maxlength="200"></textarea>
  68. </div>
  69. </div>
  70. <div class="layui-form-item">
  71. <label class="layui-form-label layui-form-required">服务价格</label>
  72. <div class="layui-input-block">
  73. <input name="price" placeholder="请输入服务价格" type="bumber" class="layui-input" maxlength="20"
  74. lay-verType="tips" lay-verify="required" required/>
  75. </div>
  76. </div>
  77. <div class="layui-form-item">
  78. <label class="layui-form-label layui-form-required">价格阶梯</label>
  79. <div class="layui-input-block">
  80. <input name="gradient" placeholder="请输入价格阶梯, 5km收十块 (5:10)" type="text" class="layui-input" maxlength="80"
  81. lay-verType="tips" lay-verify="required" required/>
  82. <div class="layui-word-aux">请输入价格阶梯,(公里数:价格,公里数:价格)</div>
  83. </div>
  84. </div>
  85. <div class="layui-form-item">
  86. <label class="layui-form-label layui-form-required">服务区域</label>
  87. <div class="layui-input-block">
  88. <input name="area" placeholder="请输入服务区域" type="text" class="layui-input"
  89. lay-verType="tips" lay-verify="required" required/>
  90. </div>
  91. </div>
  92. <div class="layui-form-item">
  93. <label class="layui-form-label layui-form-required">配送位置</label>
  94. <div class="layui-input-block">
  95. <input type="hidden" name="coordinate" value="">
  96. <input type="text" name="location" value="" class="layui-input layui-disabled" style="padding-right: 80px;" disabled="">
  97. <button class="layui-btn icon-btn dialog-location-choose" data-input="cover_img" data-count="3" type="button" style="position: absolute;top: 0;right: 0px;cursor: pointer;"><i class="layui-icon"></i>位置选择</button>
  98. </div>
  99. </div>
  100. <div class="layui-form-item">
  101. <label class="layui-form-label layui-form-required">服务时间</label>
  102. <div class="layui-input-block">
  103. <input name="time_slot" placeholder="请输入服务时间" type="text" class="layui-input"
  104. lay-verType="tips" lay-verify="required" required/>
  105. </div>
  106. </div>
  107. <div class="layui-form-item text-right">
  108. <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
  109. <button class="layui-btn" perm-show="put:/store/mission/<id>" lay-filter="modelSubmitSkill" lay-submit>保存</button>
  110. </div>
  111. </form>
  112. </script>
  113. <!-- js部分 -->
  114. <script>
  115. window.qq = window.qq || {};
  116. qq.maps = qq.maps || {};
  117. window.soso || (window.soso = qq);
  118. soso.maps || (soso.maps = qq.maps);
  119. (function () {
  120. qq.maps.__load = function (apiLoad) {
  121. delete qq.maps.__load;
  122. apiLoad([["2.4.136","CJVBZ-PHKCJ-C4AFL-FQEPT-WRTH3-Q2BXD",0],["https://mapapi.qq.com/","jsapi_v2/2/4/136/mods/","https://mapapi.qq.com/jsapi_v2/2/4/136/theme/",true],[1,18,34.519469,104.461761,4],[1606288580732,"https://pr.map.qq.com/pingd","https://pr.map.qq.com/pingd"],["https://apis.map.qq.com/jsapi","https://apikey.map.qq.com/mkey/index.php/mkey/check","https://sv.map.qq.com/xf","https://sv.map.qq.com/boundinfo","https://sv.map.qq.com/rarp","https://apis.map.qq.com/api/proxy/search","https://apis.map.qq.com/api/proxy/routes/","https://confinfo.map.qq.com/confinfo","https://overseactrl.map.qq.com"],[[null,["https://rt0.map.gtimg.com/tile","https://rt1.map.gtimg.com/tile","https://rt2.map.gtimg.com/tile","https://rt3.map.gtimg.com/tile"],"png",[256,256],3,19,"114",true,false],[null,["https://m0.map.gtimg.com/hwap","https://m1.map.gtimg.com/hwap","https://m2.map.gtimg.com/hwap","https://m3.map.gtimg.com/hwap"],"png",[128,128],3,18,"110",false,false],[null,["https://p0.map.gtimg.com/sateTiles","https://p1.map.gtimg.com/sateTiles","https://p2.map.gtimg.com/sateTiles","https://p3.map.gtimg.com/sateTiles"],"jpg",[256,256],1,19,"101",false,false],[null,["https://rt0.map.gtimg.com/tile","https://rt1.map.gtimg.com/tile","https://rt2.map.gtimg.com/tile","https://rt3.map.gtimg.com/tile"],"png",[256,256],1,19,"",false,false],[null,["https://sv0.map.qq.com/hlrender/","https://sv1.map.qq.com/hlrender/","https://sv2.map.qq.com/hlrender/","https://sv3.map.qq.com/hlrender/"],"png",[256,256],1,19,"",false,false],[null,["https://rtt2.map.qq.com/rtt/","https://rtt2a.map.qq.com/rtt/","https://rtt2b.map.qq.com/rtt/","https://rtt2c.map.qq.com/rtt/"],"png",[256,256],1,19,"",false,false],null,[["https://rt0.map.gtimg.com/vector/","https://rt1.map.gtimg.com/vector/","https://rt2.map.gtimg.com/vector/","https://rt3.map.gtimg.com/vector/"],[256,256],3,18,"114",["https://rt0.map.gtimg.com/icons/","https://rt1.map.gtimg.com/icons/","https://rt2.map.gtimg.com/icons/","https://rt3.map.gtimg.com/icons/"],[]],null],["https://s.map.qq.com/TPano/v1.1.2/TPano.js","map.qq.com/",""]],loadScriptTime);
  123. };
  124. var loadScriptTime = (new Date).getTime();
  125. })();
  126. </script>
  127. <script src="//mapapi.qq.com/jsapi_v2/2/4/136/main.js"></script>
  128. <script>
  129. layui.use(['layer', 'form', 'table', 'util', 'notice','md5', 'admin', 'setter', 'xmSelect', 'TMap'], function () {
  130. var $ = layui.jquery;
  131. var layer = layui.layer;
  132. var form = layui.form;
  133. var table = layui.table;
  134. var util = layui.util;
  135. var admin = layui.admin;
  136. var notice = layui.notice;
  137. var setter = layui.setter;
  138. var md5 = layui.md5;
  139. var xmSelect = layui.xmSelect;
  140. var TMap = layui.TMap;
  141. form.render('select');
  142. // 渲染表格
  143. var insTb = table.render({
  144. elem: '#dataTable',
  145. url: setter.baseServer + 'store/mission',
  146. page: true,
  147. // toolbar: true,
  148. toolbar: '#toolBarTpl',
  149. cellMinWidth: 100,
  150. cols: [[
  151. {type: 'checkbox'},
  152. {field: 'name', title: '服务项目', width: 200},
  153. {
  154. field: 'cover_img', title: '展示图片', templet: function (d) {
  155. var cover = JSON.parse(d.cover_img),
  156. html = "";
  157. $.each(cover, (i, item) => {
  158. html += '<img src="' + (item || '../../assets/images/placeholder-refund.png') + '" style="height: 100%;margin-right:2px" class="input-img-preview"/>'
  159. })
  160. return html;
  161. }, width: 200
  162. },
  163. {field: 'content', title: '服务内容'},
  164. {field: 'area', title: '服务区域', width: 200},
  165. {field: 'time_slot', title: '服务时间', width: 200},
  166. {field: 'price', title: '服务价格', templet: function (d) {
  167. return "&yen;" + d.price;
  168. }, width: 100},
  169. {field: 'gradient', title: '价格梯度', width: 200},
  170. {
  171. field: 'created_at', sort: true, templet: function (d) {
  172. return util.toDateString(d.created_at * 1e3);
  173. }, title: '创建时间', width: 180
  174. },
  175. {field: 'status', templet: '#tableStateUser', title: '状态', width: 120},
  176. {fixed:'right', align: 'center', toolbar: '#tableBarUser', title: '操作', minWidth: 200}
  177. ]],
  178. done:function () {
  179. admin.renderPerm()
  180. }
  181. });
  182. // 添加
  183. $(document).on('click','.mission-add-btn', function () {
  184. showEditModel();
  185. });
  186. // 搜索
  187. form.on('submit(formSubSearchUser)', function (data) {
  188. insTb.reload({where: data.field}, 'data');
  189. });
  190. // 工具条点击事件
  191. table.on('tool(dataTable)', function (obj) {
  192. var data = obj.data;
  193. var layEvent = obj.event;
  194. if (layEvent === 'edit') { // 修改
  195. showEditModel(data);
  196. } else if (layEvent === 'del') { // 删除
  197. layer.confirm('确定要删除“' + data.name + '”吗?', {
  198. skin: 'layui-layer-admin',
  199. shade: .1
  200. }, function (i) {
  201. layer.close(i);
  202. layer.load(2);
  203. admin.req('store/mission/' + data.id, function (r) {
  204. layer.closeAll('loading');
  205. if (r.code === 10000) {
  206. notice.msg(r.message, {icon: 1});
  207. insTb.reload({}, 'data');
  208. } else {
  209. notice.msg(r.message, {icon: 2});
  210. }
  211. }, 'DELETE');
  212. });
  213. }
  214. });
  215. // 显示表单弹窗
  216. function showEditModel(data) {
  217. admin.open({
  218. id: 'LAY_ModelSkill',
  219. type: 1,
  220. area: '620px', //宽高
  221. title: (data ? '修改' : '添加') + '服务项目',
  222. content: $('#modelSkill').html(),
  223. success: function (layero, dIndex) {
  224. $(layero).children('.layui-layer-content').css('overflow', 'visible');
  225. if (data && data.cover_img.length > 0) {
  226. $(".img-preview-box.cover_img").empty();
  227. $.each(JSON.parse(data.cover_img), (i, t) => {
  228. $(".img-preview-box.cover_img").append('<img class="input-img-preview" src="' + t + '" style="height: 100px;margin: 8px;"/>')
  229. })
  230. }
  231. $('.dialog-location-choose').off('click.fcdlc').on('click.fcdlc', function(){
  232. // 位置选择
  233. TMap.open({
  234. key: "CJVBZ-PHKCJ-C4AFL-FQEPT-WRTH3-Q2BXD",
  235. dialog: {title: '坐标选取'},
  236. onChoose: function (point, adress, index) {
  237. layer.close(index);
  238. if(point != '' && adress != ''){
  239. if(typeof data == 'undefined'){
  240. var data = {};
  241. }
  242. data.location = adress;
  243. data.coordinate = point;
  244. form.val('modelSkillForm', data);
  245. $(this).prev('input').val(adress)
  246. }
  247. }
  248. });
  249. })
  250. form.render('radio');
  251. form.render('select');
  252. // 回显数据
  253. form.val('modelSkillForm', data);
  254. // 表单提交事件
  255. form.on('submit(modelSubmitSkill)', function (form) {
  256. if(form.field.coordinate == "" || form.field.location == ''){
  257. notice.msg("位置信息不能为空", {icon: 2});
  258. return false;
  259. }
  260. layer.load(2);
  261. admin.req('store/mission' + (data ? '/' + form.field.id : ''), form.field, function (res) {
  262. layer.closeAll('loading');
  263. if (res.code === 10000) {
  264. layer.close(dIndex);
  265. notice.msg(res.message, {icon: 1});
  266. insTb.reload({}, 'data');
  267. } else {
  268. notice.msg(res.message, {icon: 2});
  269. }
  270. }, data ? 'PUT' : 'POST');
  271. return false;
  272. });
  273. }
  274. });
  275. }
  276. });
  277. </script>