personAttendance-list.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <div>
  3. <el-breadcrumb separator=">">
  4. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>
  6. <a href="#">系统管理</a>
  7. </el-breadcrumb-item>
  8. <el-breadcrumb-item>
  9. <a href="/personDeviceLog">考勤记录</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
  17. <div>
  18. <el-form-item label="统计区间" prop="timeRanges">
  19. <el-date-picker
  20. v-model="queryModel.timeRanges"
  21. type="datetimerange"
  22. range-separator="至"
  23. start-placeholder="开始日期"
  24. end-placeholder="结束日期"
  25. value-format="yyyy-MM-dd HH:mm:ss"
  26. :default-time="timeRangesDefaultTime"
  27. size="mini"
  28. ></el-date-picker>
  29. <!-- <el-date-picker
  30. v-model="queryModel.timeRanges"
  31. type="datetimerange"
  32. align="right"
  33. start-placeholder="开始日期"
  34. end-placeholder="结束日期"
  35. :default-time="['12:00:00', '08:00:00']"
  36. ></el-date-picker> -->
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button
  40. type="primary"
  41. size="mini"
  42. icon="ios-search"
  43. @click="changePage(1)"
  44. :loading="loading"
  45. >查询</el-button>&nbsp;
  46. <el-button
  47. type="info"
  48. size="mini"
  49. style="margin-left: 8px"
  50. @click="handleReset('queryForm')"
  51. >重置</el-button>&nbsp;
  52. </el-form-item>
  53. </div>
  54. </el-form>
  55. <el-divider></el-divider>
  56. <el-row class="button-group">
  57. <el-button
  58. type="primary"
  59. size="small"
  60. plain
  61. icon="el-icon-download"
  62. :loading="downloadLoading"
  63. @click="downloadXls"
  64. >导出数据</el-button>
  65. </el-row>
  66. </div>
  67. </template>
  68. <script>
  69. import Constant from "@/constant";
  70. import personDeviceLogApi from "@/api/base/personDeviceLog";
  71. import NProgress from "nprogress"; // progress bar
  72. import "nprogress/nprogress.css"; // progress bar style
  73. export default {
  74. data() {
  75. var self = this;
  76. return {
  77. queryModel: {
  78. companyId: "",
  79. deviceNo: "",
  80. aliasName: "",
  81. personName: "",
  82. matchStatus: "",
  83. timeRanges: "",
  84. faceImage: "",
  85. position: "",
  86. temperatureBegin: "",
  87. temperatureEnd: "",
  88. temperatureRanges: "",
  89. matchMsg:""
  90. },
  91. loading: false,
  92. tableData: [],
  93. pageIndex: 1,
  94. pageSize: 10,
  95. totalPages: 0,
  96. totalElements: 0,
  97. field: "",
  98. direction: "",
  99. pageSizeList: [10, 20, 30],
  100. multipleSelection: [],
  101. showModal: false,
  102. modalTitle: "",
  103. businessKey: "",
  104. downloadLoading: false,
  105. tableHeight: "",
  106. timeRangesDefaultTime:[]
  107. };
  108. },
  109. created() {
  110. var self = this;
  111. this.tableHeight = window.innerHeight - 320;
  112. this.getCurrentMonthFirst();
  113. },
  114. methods: {
  115. changePage(pageIndex) {
  116. var self = this;
  117. self.loading = true;
  118. self.pageIndex = pageIndex;
  119. var formData = new FormData();
  120. formData.append("pageIndex", self.pageIndex);
  121. formData.append("pageSize", self.pageSize);
  122. formData.append("faceImage", self.queryModel.faceImage);
  123. formData.append("timeRanges", self.queryModel.timeRanges);
  124. formData.append("matchStatus", self.queryModel.matchStatus);
  125. formData.append("personName", self.queryModel.personName);
  126. formData.append("deviceNo", self.queryModel.deviceNo);
  127. formData.append("aliasName", self.queryModel.aliasName);
  128. formData.append("companyId", self.queryModel.companyId);
  129. formData.append("position", self.queryModel.position);
  130. formData.append("matchMsg", self.queryModel.matchMsg);
  131. // formData.append(
  132. // "temperatureRanges",
  133. // self.queryModel.temperatureBegin + "," + self.queryModel.temperatureEnd
  134. // );
  135. if (this.field != null) {
  136. formData.append("field", this.field);
  137. }
  138. if (this.direction != null) {
  139. formData.append("direction", this.direction);
  140. }
  141. personDeviceLogApi
  142. .pageList(formData)
  143. .then(function(response) {
  144. self.loading = false;
  145. var jsonData = response.data.data;
  146. self.tableData = jsonData.data;
  147. self.totalPages = jsonData.totalPages;
  148. self.totalElements = jsonData.recordsTotal;
  149. })
  150. .catch(error => {
  151. self.loading = false;
  152. // self.$message.error(error + "");
  153. });
  154. },
  155. pageSizeChange(pageSize) {
  156. this.pageSize = pageSize;
  157. },
  158. sortChange(data) {
  159. this.field = data.column.field;
  160. this.direction = data.order;
  161. this.changePage(this.pageIndex);
  162. },
  163. handleSelectionChange(val) {
  164. this.multipleSelection = val;
  165. },
  166. handleReset(name) {
  167. this.$refs[name].resetFields();
  168. this.queryModel.timeRanges = "";
  169. },
  170. onDetailModalClose(refreshed) {
  171. //保存成功后回调
  172. this.showModal = false;
  173. if (refreshed) {
  174. this.changePage(this.pageIndex);
  175. }
  176. },
  177. downloadXls() {
  178. //导出
  179. var self = this;
  180. self.downloadLoading = true;
  181. var formData = new FormData();
  182. formData.append("faceImage", self.queryModel.faceImage);
  183. formData.append("timeRanges", self.queryModel.timeRanges);
  184. formData.append("matchStatus", self.queryModel.matchStatus);
  185. formData.append("personName", self.queryModel.personName);
  186. formData.append("deviceNo", self.queryModel.deviceNo);
  187. formData.append("aliasName", self.queryModel.aliasName);
  188. formData.append("companyId", self.queryModel.companyId);
  189. formData.append("position", self.queryModel.position);
  190. personDeviceLogApi.exportXls(formData).then(function(response) {
  191. var jsonData = response.data;
  192. self.downloadLoading = false;
  193. if (jsonData.result) {
  194. if (jsonData.data != null) {
  195. //下载有错误信息提示的报表
  196. self.$message({
  197. showClose: true,
  198. dangerouslyUseHTMLString: true,
  199. message: `<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
  200. duration: 30000
  201. });
  202. }
  203. }
  204. });
  205. },
  206. //初始化日期
  207. getCurrentMonthFirst() {
  208. var self = this;
  209. var date = new Date();
  210. date.setDate(1);
  211. var month = parseInt(date.getMonth() + 1);
  212. var day = date.getDate();
  213. if (month < 10) month = "0" + month;
  214. if (day < 10) day = "0" + day;
  215. var startTime = date.getFullYear() + "-" + month + "-" + day + " 00:00:00";
  216. var lastDate = new Date();
  217. lastDate.setMonth(date.getMonth() + 1);
  218. //设置当前月份+1
  219. lastDate.setDate(0);
  220. //获取上个月最后一天=本月最后一天
  221. var lastDay = lastDate.getDate();
  222. var endTime = date.getFullYear() + "-" + month + "-" + lastDay + " 23:59:59";
  223. self.queryModel.timeRanges = [startTime, endTime];
  224. }
  225. },
  226. mounted: function() {
  227. //this.changePage(1);
  228. }
  229. };
  230. </script>
  231. <style lang="scss" scoped>
  232. .el-breadcrumb {
  233. margin: 10px;
  234. line-height: 20px;
  235. }
  236. .el-divider {
  237. margin: 5px 0;
  238. }
  239. .demo-form-inline {
  240. margin-left: 10px;
  241. text-align: left;
  242. }
  243. .button-group {
  244. margin-left: 10px;
  245. text-align: left;
  246. }
  247. </style>