production_task_upload.jsp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8" %>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  4. <c:set value="<%=request.getContextPath()%>" var="ctx"></c:set>
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta charset="utf-8">
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  10. <title>生产任务上传记录</title>
  11. <meta name="keywords" content="生产任务,上传记录">
  12. <meta name="description" content="生产任务上传记录管理页面">
  13. <!-- 引入Bootstrap CSS -->
  14. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
  15. <!-- 引入Font Awesome图标 -->
  16. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
  17. <link href="${ctx}/css/bootstrap-select.min.css" rel="stylesheet">
  18. <link href="${ctx}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
  19. <link href="${ctx}/css/animate.css" rel="stylesheet">
  20. <link href="${ctx}/css/style.css?v=4.1.0" rel="stylesheet">
  21. <style>
  22. .required::before {
  23. content: '*';
  24. color: red;
  25. margin-right: 5px;
  26. }
  27. .form-group {
  28. margin-bottom: 1.5rem;
  29. }
  30. .form-container {
  31. padding: 20px;
  32. border-radius: 8px;
  33. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  34. background-color: #fff;
  35. }
  36. </style>
  37. </head>
  38. <body class="gray-bg">
  39. <div class="wrapper wrapper-content animated fadeInRight">
  40. <div class="row">
  41. <div class="col-sm-12">
  42. <div class="ibox">
  43. <div class="ibox-title">
  44. <div class="row">
  45. <div class="col-sm-10">
  46. <h3>生产任务上传记录</h3>
  47. </div>
  48. </div>
  49. </div>
  50. <div class="ibox-content">
  51. <div class="row row-lg mb-4">
  52. <div class="col-lg-12">
  53. <form id="searchForm" class="form-horizontal">
  54. <div class="row mb-3">
  55. <div class="col-sm-3">
  56. <label for="createTime" class="form-label">创建时间</label>
  57. <input type="date" class="form-control" id="createTime" name="createTime">
  58. </div>
  59. <div class="col-sm-3">
  60. <label for="factoryName" class="form-label">工厂名称</label>
  61. <input type="text" class="form-control" id="factoryName" name="factoryName" placeholder="请输入工厂名称">
  62. </div>
  63. <div class="col-sm-3">
  64. <label for="productName" class="form-label">产品名称</label>
  65. <input type="text" class="form-control" id="productName" name="productName" placeholder="请输入产品名称">
  66. </div>
  67. <div class="col-sm-3">
  68. <label for="wmsStatus" class="form-label">WMS状态</label>
  69. <select class="form-select" id="wmsStatus" name="wmsStatus">
  70. <option value="">全部</option>
  71. <option value="1">成功</option>
  72. <option value="2">失败</option>
  73. <option value="3">重试中</option>
  74. </select>
  75. </div>
  76. </div>
  77. <div class="row">
  78. <div class="col-sm-12 text-right">
  79. <button type="button" id="searchBtn" class="btn btn-success ms-2" onclick="search();return false;">
  80. <i class="fas fa-search"></i> 查询
  81. </button>
  82. <button type="button" id="resetBtn" class="btn btn-secondary ms-2" onclick="reset();return false;">
  83. <i class="fas fa-sync-alt"></i> 重置
  84. </button>
  85. </div>
  86. </div>
  87. </form>
  88. </div>
  89. </div>
  90. <div class="row row-lg mt-3">
  91. <div class="col-sm-12">
  92. <table id="table" data-toggle="table" data-mobile-responsive="true"></table>
  93. </div>
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <!-- 全局js -->
  101. <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  102. <!-- 引入Bootstrap JS -->
  103. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
  104. <script src="${ctx}/js/bootstrap-select.min.js"></script>
  105. <!-- jQuery Validation plugin javascript-->
  106. <script src="${ctx}/js/plugins/validate/jquery.validate.min.js"></script>
  107. <script src="${ctx}/js/plugins/validate/messages_zh.min.js"></script>
  108. <script src="${ctx}/js/plugins/bootstrap-table/bootstrap-table.min.js"></script>
  109. <script src="${ctx}/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
  110. <script src="${ctx}/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
  111. <script src="${ctx}/js/common.js"></script>
  112. <script src="${ctx}/js/plugins/layer/layer.min.js"></script>
  113. <script src="${ctx}/js/Math.uuid.js"></script>
  114. <!-- 自定义js -->
  115. <script src="${ctx}/js/content.js?v=1.0.0"></script>
  116. </body>
  117. <script>
  118. var table = null;
  119. $(document).ready(function () {
  120. table = $('#table').bootstrapTable("destroy");
  121. initTable();
  122. });
  123. function queryParams(param) {
  124. // 获取查询参数
  125. let createTime = $.trim($("#createTime").val());
  126. let factoryName = $.trim($("#factoryName").val());
  127. let productName = $.trim($("#productName").val());
  128. let wmsStatus = $.trim($("#wmsStatus").val());
  129. if (createTime) {
  130. param['createTime'] = createTime;
  131. }
  132. if (factoryName) {
  133. param['factoryName'] = factoryName;
  134. }
  135. if (productName) {
  136. param['productName'] = productName;
  137. }
  138. if (wmsStatus) {
  139. param['wmsStatus'] = wmsStatus;
  140. }
  141. return param;
  142. }
  143. function search() {
  144. table = $('#table').bootstrapTable("destroy");
  145. initTable();
  146. }
  147. function reset() {
  148. $("#searchForm")[0].reset();
  149. table = $('#table').bootstrapTable("destroy");
  150. initTable();
  151. }
  152. function reupload(id) {
  153. layer.confirm('确定要重传该记录吗?', {
  154. btn: ['确定', '取消']
  155. }, function () {
  156. // 模拟重传操作
  157. setTimeout(function() {
  158. layer.msg('重传成功', {icon: 6});
  159. // 刷新表格
  160. search();
  161. }, 1000);
  162. });
  163. }
  164. function initTable() {
  165. // 模拟数据
  166. var mockData = generateMockData();
  167. table = $('#table').bootstrapTable({
  168. data: mockData,
  169. method: 'get',
  170. sortable: true,
  171. toolbar: '#toolbar', //工具按钮用哪个容器
  172. striped: true, //是否显示行间隔色
  173. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  174. pagination: true, //是否显示分页(*)
  175. pageNumber: 1, //初始化加载第一页,默认第一页
  176. pageSize: 10, //每页的记录行数(*)
  177. pageList: [10, 25, 50, 100], //可供选择的每页的行数(*)
  178. queryParamsType: '', //默认值为 'limit' ,在默认情况下 传给服务端的参数为:offset,limit,sort
  179. // 设置为 '' 在这种情况下传给服务器的参数为:pageSize,pageNumber
  180. queryParams: queryParams,//前端调用服务时,会默认传递上边提到的参数,如果需要添加自定义参数,可以自定义一个函数返回请求参数
  181. sidePagination: "client", //客户端分页
  182. strictSearch: false,
  183. minimumCountColumns: 2, //最少允许的列数
  184. clickToSelect: true, //是否启用点击选中行
  185. searchOnEnterKey: true,
  186. idField: "id",
  187. paginationDetailHAlign: 'right', // 将分页详细信息放在右边
  188. columns: [{
  189. field: 'checkbox',
  190. title: '<input type="checkbox" id="checkAll">',
  191. checkbox: true,
  192. align: 'center',
  193. formatter: function (value, row, index) {
  194. return {
  195. checked: false
  196. };
  197. },
  198. width: "5%"
  199. }, {
  200. title: '序号',
  201. align: 'center',
  202. formatter: function (value, row, index) {
  203. // 使用this关键字访问表格实例
  204. var pageNumber = this.pageNumber || 1;
  205. var pageSize = this.pageSize || 10;
  206. return (pageNumber - 1) * pageSize + index + 1;
  207. },
  208. width: "5%"
  209. }, {
  210. field: 'factoryName',
  211. title: '工厂名称',
  212. align: 'center',
  213. width: "15%"
  214. }, {
  215. field: 'lineName',
  216. title: '产线名称',
  217. align: 'center',
  218. width: "15%"
  219. }, {
  220. field: 'batchNumber',
  221. title: '批次号',
  222. align: 'center',
  223. width: "15%"
  224. }, {
  225. field: 'transferredToDataCenter',
  226. title: '已传到数据中台',
  227. align: 'center',
  228. formatter: function (value) {
  229. if (value === 1) {
  230. return '<span class="label label-success">是</span>';
  231. } else {
  232. return '<span class="label label-danger">否</span>';
  233. }
  234. },
  235. width: "10%"
  236. }, {
  237. field: 'createTime',
  238. title: '创建时间',
  239. align: 'center',
  240. width: "15%"
  241. }, {
  242. field: 'wmsStatus',
  243. title: 'WMS状态',
  244. align: 'center',
  245. formatter: function (value) {
  246. if (value === 1) {
  247. return '<span class="badge bg-success">成功</span>';
  248. } else if (value === 2) {
  249. return '<span class="badge bg-danger">失败</span>';
  250. } else if (value === 3) {
  251. return '<span class="badge bg-warning">重试中</span>';
  252. } else {
  253. return '-';
  254. }
  255. },
  256. width: "10%"
  257. }, {
  258. field: 'transferredToPlatform',
  259. title: '已传到平台',
  260. align: 'center',
  261. formatter: function (value) {
  262. if (value === 1) {
  263. return '<span class="label label-success">是</span>';
  264. } else {
  265. return '<span class="label label-danger">否</span>';
  266. }
  267. },
  268. width: "10%"
  269. }, {
  270. title: '操作',
  271. align: 'center',
  272. width: "10%",
  273. formatter: function (value, row) {
  274. // 只有失败和重试中可以重传
  275. if (row.wmsStatus === 2 || row.wmsStatus === 3) {
  276. return '<button class="btn btn-primary btn-sm" onclick="reupload(' + row.id + ')">重传</button>';
  277. } else {
  278. return '-';
  279. }
  280. }
  281. }],
  282. onLoadSuccess: function (data) {
  283. console.log("数据加载成功", data);
  284. // 全选框事件
  285. $('#checkAll').on('change', function() {
  286. var checked = $(this).prop('checked');
  287. $('#table').bootstrapTable('checkAll');
  288. if (!checked) {
  289. $('#table').bootstrapTable('uncheckAll');
  290. }
  291. });
  292. },
  293. onLoadError: function () {
  294. layer.msg('数据加载失败', {icon: 2});
  295. }
  296. });
  297. }
  298. // 生成模拟数据
  299. function generateMockData() {
  300. var factories = ['金华工厂', '杭州工厂', '上海工厂', '苏州工厂', '广州工厂'];
  301. var lines = ['A线', 'B线', 'C线', 'D线', 'E线'];
  302. var products = ['食品A', '食品B', '食品C', '食品D', '食品E'];
  303. var mockData = [];
  304. for (var i = 1; i <= 50; i++) {
  305. var wmsStatus = Math.floor(Math.random() * 3) + 1; // 1-3
  306. var date = new Date();
  307. date.setDate(date.getDate() - Math.floor(Math.random() * 30));
  308. var formattedDate = date.toISOString().split('T')[0];
  309. mockData.push({
  310. id: i,
  311. factoryName: factories[Math.floor(Math.random() * factories.length)],
  312. lineName: '产线' + lines[Math.floor(Math.random() * lines.length)],
  313. batchNumber: 'BAT' + Date.now().toString().slice(-6) + i,
  314. transferredToDataCenter: Math.floor(Math.random() * 2), // 0或1
  315. createTime: formattedDate,
  316. wmsStatus: wmsStatus,
  317. transferredToPlatform: Math.floor(Math.random() * 2) // 0或1
  318. });
  319. }
  320. return mockData;
  321. }
  322. </script>
  323. </html>