index.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  7. <link rel="icon" href="./assets/images/icoX.png"/>
  8. <title>人人接后台管理系统 - Power by Lettered </title>
  9. <link rel="stylesheet" href="./assets/libs/layui/css/layui.css"/>
  10. <link rel="stylesheet" href="./assets/module/admin.css"/>
  11. <link rel="stylesheet" href="./assets/css/app.css"/>
  12. <!--[if lt IE 9]>
  13. <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  14. <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  15. <![endif]-->
  16. </head>
  17. <body class="layui-layout-body">
  18. <div class="layui-layout layui-layout-admin">
  19. <!-- 头部 -->
  20. <div class="layui-header">
  21. <div class="layui-logo">
  22. <!--<img class="app-logo" src="./assets/images/logo_white.png"/>-->
  23. <img class="app-logo" src="http://img.gxrrj.cn//058376003b34793d9286f61f2df5d691.png"/>
  24. </div>
  25. <ul class="layui-nav layui-layout-left">
  26. <li class="layui-nav-item" lay-unselect>
  27. <a ew-event="flexible" lay-bg="#ec6c44" lay-tips="侧边伸缩"><i class="layui-icon layui-icon-shrink-right"></i></a>
  28. </li>
  29. <li class="layui-nav-item" lay-unselect>
  30. <a ew-event="refresh" lay-bg="#ec6c44" lay-tips="刷新"><i class="layui-icon layui-icon-refresh-3"></i></a>
  31. </li>
  32. </ul>
  33. <ul class="layui-nav layui-layout-right">
  34. <li class="layui-nav-item" lay-unselect>
  35. <a app-event="request" event-data="{'url':'/clear'}" confirm lay-bg="#ec6c44" lay-tips="清理缓存">
  36. <i class="layui-icon layui-icon-release"></i></a>
  37. </li>
  38. <li class="layui-nav-item layui-hide-xs" lay-unselect>
  39. <a ew-event="fullScreen" lay-bg="#ec6c44" lay-tips="全屏">
  40. <i class="layui-icon layui-icon-screen-full"></i></a>
  41. </li>
  42. <li class="layui-nav-item" lay-unselect>
  43. <a href="#">
  44. <img src="http://q1.qlogo.cn/g?b=qq&nk=10000&s=640" class="layui-nav-img layui-hide-xs" />
  45. <cite id="huName"></cite>
  46. </a>
  47. <dl class="layui-nav-child">
  48. <dd lay-unselect><a app-event="psw">修改密码</a></dd>
  49. <hr>
  50. <dd lay-unselect><a app-event="logout" data-url="/manage/pages/login.html">退出</a></dd>
  51. </dl>
  52. </li>
  53. <li class="layui-nav-item" lay-unselect>
  54. <a lay-bg="#ec6c44" lay-tips="系统"><i class="layui-icon layui-icon-more-vertical"></i></a>
  55. </li>
  56. </ul>
  57. </div>
  58. <!-- 侧边栏 -->
  59. <div class="layui-side">
  60. <div class="layui-side-scroll">
  61. <ul class="layui-nav layui-nav-tree arrow2" lay-filter="admin-side-nav" lay-shrink="all"></ul>
  62. </div>
  63. </div>
  64. <!-- 主体部分 -->
  65. <div class="layui-body"></div>
  66. <!-- 底部 -->
  67. <div class="layui-footer layui-text">
  68. &copy 2020 <a href="http://www.gxnwsoft.cn" target="_blank">人人接后台管理系统</a>. All rights reserved.
  69. <span class="pull-right app-version">Version 1.0.1</span>
  70. </div>
  71. </div>
  72. <!-- 加载动画 -->
  73. <div class="page-loading">
  74. <div class="ball-loader">
  75. <span></span><span></span><span></span><span></span>
  76. </div>
  77. </div>
  78. <!-- 侧边栏渲染模板 -->
  79. <!-- 侧边栏渲染模板 -->
  80. <script id="sideNav" type="text/html">
  81. {{# layui.each(d, function(index, item){ }}
  82. <li class="layui-nav-item">
  83. <a href="{{item.url}}"><i class="layui-icon {{item.icon}}"></i>&emsp;<cite>{{ item.name}}</cite></a>
  84. {{# if(item.subMenus&&item.subMenus.length>0){ }}
  85. <dl class="layui-nav-child">
  86. {{# layui.each(item.subMenus, function(index, subItem){ }}
  87. <dd>
  88. <a href="{{ subItem.url }}">{{ subItem.name }}</a>
  89. {{# if(subItem.subMenus&&subItem.subMenus.length>0){ }}
  90. <dl class="layui-nav-child">
  91. {{# layui.each(subItem.subMenus, function(index, thrItem){ }}
  92. <dd>
  93. <a href="{{ thrItem.url }}">{{ thrItem.name }}</a>
  94. {{# if(thrItem.subMenus&&thrItem.subMenus.length>0){ }}
  95. <dl class="layui-nav-child">
  96. {{# layui.each(thrItem.subMenus, function(index, fourItem){ }}
  97. <dd>
  98. <a href="{{ fourItem.url }}">{{ fourItem.name }}</a>
  99. {{# if(fourItem.subMenus&&fourItem.subMenus.length>0){ }}
  100. <dl class="layui-nav-child">
  101. {{# layui.each(fourItem.subMenus, function(index, fiveItem){ }}
  102. <dd>
  103. <a href="{{ fiveItem.url }}">{{ fiveItem.name }}</a>
  104. </dd>
  105. {{# }); }}
  106. </dl>
  107. {{# } }}
  108. </dd>
  109. {{# }); }}
  110. </dl>
  111. {{# } }}
  112. </dd>
  113. {{# }); }}
  114. </dl>
  115. {{# } }}
  116. </dd>
  117. {{# }); }}
  118. </dl>
  119. {{# } }}
  120. </li>
  121. {{# }); }}
  122. </script>
  123. <!--<audio preload autoplay loop id="vd">-->
  124. <!-- <source src="/assets/module/notice/4.wav" type="audio/mpeg">-->
  125. <!--</audio>-->
  126. <!-- cdn -->
  127. <script src="https://cdn.bootcss.com/socket.io/2.3.0/socket.io.js"></script>
  128. <!-- js部分 -->
  129. <script type="text/javascript" src="./assets/libs/tinymce/tinymce.min.js"></script>
  130. <script type="text/javascript" src="./assets/libs/layui/layui.js"></script>
  131. <script type="text/javascript" src="./assets/js/main.js"></script>
  132. <script>
  133. layui.use(['layer', 'form', 'notice', 'element', 'table', 'setter', 'util', 'admin'], function () {
  134. var $ = layui.jquery;
  135. var layer = layui.layer;
  136. var form = layui.form;
  137. var notice = layui.notice;
  138. var element = layui.element;
  139. var table = layui.table;
  140. var setter = layui.setter;
  141. var util = layui.util;
  142. var admin = layui.admin;
  143. form.render('select');
  144. // socket.io
  145. let socket;
  146. // 连接服务端
  147. socket = io("http://127.0.3.10:6530/");
  148. // socket = io("http://ws.gxrrj.cn/");
  149. // socket = io("http://127.0.0.1:2120/");
  150. // socket = io("https://rrj.gxnwsoft.com:2120/");
  151. // socket = io("http://rrjie.gxnwsoft.com/");
  152. // 连接后登录
  153. socket.on('connect', function(){
  154. console.log('socket 链接成功');
  155. });
  156. // 后端推送来消息时
  157. socket.on('message', (r) => {
  158. //TODO 实时数据处理 【首页、个人信息、权限处理】
  159. var data = JSON.parse(r.content);
  160. var options = {
  161. title: '消息通知',
  162. message: '后台有消息推送过来了了啊!!',
  163. displayMode: 2,
  164. timeout: 5000,
  165. audio: "4",
  166. onClosed: function () {
  167. if (r.type && r.type === 'motor') {
  168. table.render({
  169. elem: '#dataTable',
  170. url: setter.baseServer + 'store/taxi/order',
  171. page: true,
  172. toolbar: true,
  173. cellMinWidth: 100,
  174. cols: [[
  175. {type: 'checkbox'},
  176. {field: 'order_no', title: '订单号', width: 200},
  177. {field: 'user', title: '下单用户',templet:function (d) {
  178. return '<a href="javascript:;" class="taxi-user-view" style="color: #35cc98;border-bottom: 1px solid;"> ' +
  179. ((d.user !== null) ? d.user.nickname + '(' + d.mobile +')' : '用户缺失') + ' </a>';
  180. }, width: 200},
  181. {field: 'taxi', title: '下单车辆',templet:function (d) {
  182. return '<a href="javascript:;" class="taxi-user-view" style="color: #35cc98;border-bottom: 1px solid;"> ' +
  183. ((d.taxi !== null) ? d.taxi.plate_number + '【' + ((d.taxi.user !== null) ? d.taxi.user.uname + '(' + d.taxi.user.mobile +')' : '用户缺失') +'】' : '车辆缺失') + ' </a>';
  184. }, width: 200},
  185. {field: 'category', title: '分类', width: 110, templet: function (d) {
  186. if (d.category) {
  187. return '<span style="color: '+d.category.color+';text-decoration: underline;">'+d.category.name+'</span>';
  188. }
  189. return '-';
  190. }},
  191. {field: 'price', title: '价格', width: 100},
  192. {field: 'depart', title: '起始位置', width: 200},
  193. {field: 'arrive', title: '送达位置', width: 200},
  194. {field: 'count', title: '乘车人数', width: 100},
  195. {field: 'km', title: '路程总长', templet:function (d) {
  196. return d.km + '公里';
  197. }, width: 200},
  198. {field: 'is_free', title: '是否免单',templet:function (d) {
  199. return d.is_free ? '是' : '否';
  200. }, width: 120},
  201. {field: 'remark', title: '备注信息'},
  202. {field: 'served', title: '是否服务',templet:function (d) {
  203. if(d.created_at < 1607499000){
  204. return '<span class="layui-badge layui-badge-blue">已服务</span>';
  205. }
  206. return d.served ? '<span class="layui-badge layui-badge-blue">已服务</span>' : '<span class="layui-badge layui-badge-gray">未服务</span>';
  207. }, width: 120},
  208. {
  209. field: 'created_at', sort: true, templet: function (d) {
  210. return util.toDateString(d.created_at * 1e3);
  211. }, title: '创建时间', width: 180
  212. },
  213. {field: 'status', templet: '#tableStateUser', title: '状态', width: 120},
  214. {fixed:'right', align: 'center', toolbar: '#tableBarUser', title: '操作', minWidth: 250}
  215. ]],
  216. done:function () {
  217. admin.renderPerm()
  218. }
  219. });
  220. }
  221. }
  222. };
  223. switch (r.type) {
  224. case "goods":
  225. options.message = "<a href='#/store/product-order'>" + data.msg + '</a>';
  226. break;
  227. case "motor":
  228. options.message = "<a href='#/store/taxi-order'>" + data.msg + '</a>';
  229. break;
  230. case "skill":
  231. case "rescue":
  232. case "mission":
  233. case "farmland":
  234. default:
  235. options.message = "<a href='#/store/" + r.type + "-order'>" + data.msg + '</a>';
  236. break;
  237. }
  238. notice['info'](options);
  239. return false;
  240. });
  241. element.render();
  242. // /assets/module/notice/4.wav
  243. });
  244. </script>
  245. </body>
  246. </html>