userHistory.html 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <title>字段查询</title>
  6. <meta name="renderer" content="webkit"/>
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  8. <meta name="viewport"
  9. content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
  10. <link rel="stylesheet" href="../../static/css/font.css"/>
  11. <link rel="stylesheet" href="../../static/css/weadmin.css"/>
  12. <script src="../../config/config.js"></script>
  13. <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
  14. <!--[if lt IE 9]>
  15. <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
  16. <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
  17. <![endif]-->
  18. </head>
  19. <body>
  20. <div class="weadmin-nav">
  21. <span class="layui-breadcrumb">
  22. <a href="javascript:;">首页</a> <a href="javascript:;">用户分析</a>
  23. <a href="javascript:;"> <cite>会话历史</cite></a>
  24. </span>
  25. <a class="layui-btn layui-btn-sm" style="margin-top:3px;float:right"
  26. href="javascript:location.replace(location.href);"
  27. title="刷新">
  28. <i class="layui-icon layui-icon-refresh"></i>
  29. <!-- <i class="layui-icon" style="line-height:30px">&#x1002;</i> -->
  30. </a>
  31. </div>
  32. <div class="weadmin-body" id="app">
  33. <div class="layui-row">
  34. <form class="layui-form layui-col-md12 we-search">
  35. <div class="layui-inline">
  36. <input type="text" name="username" placeholder="用户ID"
  37. v-model="queryData.user_id" class="layui-input"/>
  38. </div>
  39. <div class="layui-inline">
  40. <input class="layui-input" placeholder="日期范围" name="start" id="dateRange"
  41. autocomplete="off"/>
  42. </div>
  43. <div class="layui-inline">
  44. <input type="text" name="username" placeholder="问题"
  45. v-model="queryData.question" class="layui-input"/>
  46. </div>
  47. <div class="layui-inline">
  48. <input type="text" name="username" placeholder="答案"
  49. v-model="queryData.answer" class="layui-input"/>
  50. </div>
  51. <div class="layui-inline">
  52. <div class="layui-input-inline">
  53. <a class="layui-btn" @click="query"><i class="layui-icon"></i>查询</a>
  54. </div>
  55. </div>
  56. <div class="layui-inline">
  57. <div class="layui-input-inline">
  58. <a class="layui-btn" @click="exportLog"><i
  59. class="layui-icon layui-icon-download-circle"></i>导出</a>
  60. </div>
  61. </div>
  62. </form>
  63. </div>
  64. <div class="layui-row">
  65. <div class="layui-col-md12">
  66. <!--表格-->
  67. <table class="layui-hide" id="table" lay-filter="test"></table>
  68. <script type="text/html" id="barDemo">
  69. <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">详情</a>
  70. </script>
  71. </div>
  72. </div>
  73. <!--<div @click="fun123">123</div>-->
  74. </div>
  75. <script src="../../static/js/vue.min.js"></script>
  76. <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  77. <script src="../../lib/layui/layui.js" charset="utf-8"></script>
  78. <script src="../../static/js/eleDel.js" type="text/javascript" charset="utf-8"></script>
  79. </body>
  80. <script>
  81. let vm = new Vue({
  82. el: "#app",
  83. data: {
  84. app_keys: [],
  85. scenarios: [],
  86. queryData: {
  87. user_id: "fc40172627834555add06ed4d31f76c5",
  88. question: "",
  89. answer: "",
  90. beginDate: "",
  91. endDate: "",
  92. dateRange: "",
  93. sortField: "time",
  94. asc: "asc"
  95. },
  96. dataGrid: {},
  97. isExport: false,// 总条数
  98. },
  99. methods: {
  100. /**
  101. * 查询后的导出回调
  102. */
  103. queryBack: function (count) {
  104. if (!this.isExport) {
  105. return;
  106. }
  107. this.isExport = false; // 设置为false后再导出数据。
  108. if (count < 10000) {
  109. let url = app.baseUrl + "/api/log/export?";
  110. for (const key in this.queryData) {
  111. url += key + "=" + this.queryData[key] + "&";
  112. }
  113. window.location.href = url;
  114. } else {
  115. let url = app.baseUrl + "/api/log/exportToLinux?";
  116. for (const key in this.queryData) {
  117. url += key + "=" + this.queryData[key] + "&";
  118. }
  119. count = count > 1000000 ? 1000000 : count;
  120. let time = count / 10000;
  121. layui.use(['layer'], function () {
  122. layui.layer.msg(`${count}条数据已被导出到linux中,请稍后大约${time}秒`);
  123. $.get(url, function () {
  124. layui.layer.msg(`已导出成功,请登录系统查阅`);
  125. });
  126. })
  127. }
  128. },
  129. /**
  130. * 查询
  131. * @returns {boolean}
  132. */
  133. query: function () {
  134. /**
  135. * 处理日期
  136. */
  137. let dataRange = $("#dateRange").val();
  138. let rangeArray = dataRange.split(' - ');
  139. if (rangeArray.length === 2) {
  140. this.queryData.beginDate = rangeArray[0];
  141. this.queryData.endDate = rangeArray[1];
  142. } else {
  143. this.queryData.beginDate = "1997-01-01";
  144. this.queryData.endDate = "2999-01-01";
  145. }
  146. // 查询
  147. this.initPage();
  148. return false;
  149. },
  150. initPage: function () {
  151. /**
  152. * 初始化查询表格
  153. */
  154. layui.use(['table'], function () {
  155. vm.dataGrid = layui.table.render({
  156. elem: '#table'
  157. , height: "auto"
  158. , url: app.baseUrl + "/api/log/query" //数据接口
  159. , where: vm.queryData
  160. , method: "post"
  161. , contentType: 'application/json'
  162. , title: '用户表'
  163. , page: true //开启分页
  164. , cols: [[ //表头
  165. {type: 'checkbox', fixed: 'left'}
  166. , {
  167. field: 'time',
  168. title: '时间',
  169. width: 200,
  170. templet: '<div>{{ new Date(d.time).format("yyyy-MM-dd hh:mm:ss") }}</span></div>'
  171. }
  172. , {
  173. field: 'question',
  174. title: 'question',
  175. width: 280,
  176. templet: '<div><span title="{{d.question}}">{{d.question}}</span></div>'
  177. }
  178. , {
  179. field: 'answer',
  180. title: 'answer',
  181. width: 280,
  182. sort: true,
  183. templet: '<div><span title="{{d.answer}}">{{d.answer}}</span></div>'
  184. }
  185. , {field: 'scenario', title: 'scenario', width: 180, sort: true}
  186. , {field: 'wakeup_word', title: 'wakeup_word', width: 120}
  187. // , {fixed: 'right', title: '操作', toolbar: '#barDemo', width: 80}
  188. ]]
  189. , parseData: function (res) { //res 即为原始返回的数据
  190. return {
  191. "code": res.code, //解析接口状态
  192. "msg": res.message, //解析提示文本
  193. "count": res.data.total, //解析数据长度
  194. "data": res.data.rows //解析数据列表
  195. };
  196. },
  197. done: (res, curr, count) => {
  198. vm.queryBack(count);
  199. }
  200. });
  201. });
  202. },
  203. /**
  204. * 数据导出
  205. */
  206. exportLog: function () {
  207. this.isExport = true;
  208. this.query();
  209. },
  210. initDate: function () {
  211. layui.use('laydate', function () {
  212. let laydate = layui.laydate;
  213. laydate.render({
  214. elem: "#dateRange",
  215. range: true,
  216. });
  217. });
  218. },
  219. },
  220. mounted: function () {
  221. // this.initLayUI();
  222. // this.initPage();
  223. this.initDate();
  224. },
  225. updated: function () {
  226. }
  227. });
  228. </script>
  229. </html>