temperatureRecord-list.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  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="#">测温统计</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. size="mini"
  22. type="date"
  23. placeholder="选择日期"
  24. value-format="yyyy-MM-dd"
  25. align="right"
  26. :picker-options="pickerOptions"
  27. ></el-date-picker>
  28. </el-form-item>
  29. <!-- <el-form-item label="单位" prop="companyId">
  30. <el-select
  31. v-model="queryModel.companyId"
  32. size="mini"
  33. filterable
  34. placeholder="请选择"
  35. style="width:220px"
  36. >
  37. <el-option
  38. v-for="company in companyResult"
  39. :key="company.id"
  40. :label="company.name"
  41. :value="company.id"
  42. ></el-option>
  43. </el-select>&nbsp;
  44. <el-checkbox v-model="queryModel.subordinate">是否包含下级单位</el-checkbox>
  45. <el-checkbox v-model="queryModel.distinct">是否去重</el-checkbox>
  46. </el-form-item>-->
  47. <!-- <el-form-item label="人员姓名" prop="personName">
  48. <el-input type="text" size="mini" v-model="queryModel.personName"></el-input>
  49. </el-form-item>-->
  50. <el-form-item>
  51. <el-button
  52. type="primary"
  53. size="mini"
  54. icon="ios-search"
  55. @click="changePage(1)"
  56. :loading="loading"
  57. >查询</el-button>&nbsp;
  58. <!-- <el-button
  59. type="info"
  60. size="mini"
  61. style="margin-left: 8px"
  62. @click="handleReset('queryForm')"
  63. >重置</el-button>&nbsp;-->
  64. </el-form-item>
  65. </div>
  66. </el-form>
  67. <el-divider></el-divider>
  68. <!-- <el-row class="button-group">
  69. <el-button
  70. type="primary"
  71. size="small"
  72. plain
  73. icon="el-icon-download"
  74. :loading="downloadLoading"
  75. @click="downloadXls"
  76. >导出数据</el-button>
  77. </el-row>-->
  78. <el-table
  79. ref="tablesssssss"
  80. :data="tableData"
  81. style="min-height:400px;"
  82. v-loading="loading"
  83. show-summary
  84. :summary-method="getSummaries"
  85. stripe
  86. :height="tableHeight"
  87. tooltip-effect="light"
  88. @sort-change="sortChange"
  89. @selection-change="handleSelectionChange"
  90. >
  91. <el-table-column prop="companyName" label="单位名称" width="220"></el-table-column>
  92. <el-table-column prop="personTotal" label="应测人数" width="100"></el-table-column>
  93. <el-table-column prop="checkPersonTotal" label="已测人数" width="100"></el-table-column>
  94. <el-table-column label="漏测人数" width="100">
  95. <template slot-scope="{row}">{{row.personTotal - row.checkPersonTotal}}</template>
  96. </el-table-column>
  97. <el-table-column type="expand" width="40">
  98. <template slot-scope="props">
  99. <el-form label-position="left" inline class="demo-table-expand">
  100. <el-form-item label="漏测人员名单">
  101. <span v-if="props.row.unCheckPersonName != ''">{{ props.row.unCheckPersonName }}</span>
  102. <span v-else>无</span>
  103. </el-form-item>
  104. </el-form>
  105. </template>
  106. </el-table-column>
  107. <el-table-column prop="unCheckPersonName" label="漏测名单" width="700" show-overflow-tooltip></el-table-column>
  108. </el-table>
  109. </div>
  110. </template>
  111. <script>
  112. import Constant from "@/constant";
  113. import temperatureRecordApi from "@/api/base/temperatureRecord";
  114. import companyInfoApi from "@/api/base/companyInfo";
  115. import NProgress from "nprogress"; // progress bar
  116. import "nprogress/nprogress.css"; // progress bar style
  117. export default {
  118. data() {
  119. var self = this;
  120. return {
  121. queryModel: {
  122. personName: "",
  123. timeRanges: "",
  124. companyId: "",
  125. subordinate: false,
  126. distinct: false
  127. },
  128. loading: false,
  129. tableData: [],
  130. field: "",
  131. direction: "",
  132. multipleSelection: [],
  133. showModal: false,
  134. modalTitle: "",
  135. businessKey: "",
  136. downloadLoading: false,
  137. tableHeight: "",
  138. timeRangesDefaultTime: [],
  139. companyResult: "",
  140. pickerOptions: {
  141. disabledDate(time) {
  142. return time.getTime() > Date.now();
  143. },
  144. shortcuts: [
  145. {
  146. text: "今天",
  147. onClick(picker) {
  148. picker.$emit("pick", new Date());
  149. }
  150. },
  151. {
  152. text: "昨天",
  153. onClick(picker) {
  154. const date = new Date();
  155. date.setTime(date.getTime() - 3600 * 1000 * 24);
  156. picker.$emit("pick", date);
  157. }
  158. },
  159. {
  160. text: "一周前",
  161. onClick(picker) {
  162. const date = new Date();
  163. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
  164. picker.$emit("pick", date);
  165. }
  166. }
  167. ]
  168. }
  169. };
  170. },
  171. created() {
  172. var self = this;
  173. this.getCurrentMonthFirst();
  174. },
  175. methods: {
  176. changePage(pageIndex) {
  177. var self = this;
  178. self.loading = true;
  179. var formData = new FormData();
  180. formData.append("pageIndex", self.pageIndex);
  181. formData.append("pageSize", self.pageSize);
  182. var times =
  183. self.queryModel.timeRanges +
  184. " 00:00:00," +
  185. self.queryModel.timeRanges +
  186. " 23:59:59";
  187. formData.append("timeRanges", times);
  188. formData.append("personName", self.queryModel.personName);
  189. formData.append("companyId", self.queryModel.companyId);
  190. formData.append("subordinate", self.queryModel.subordinate);
  191. formData.append("distinct", self.queryModel.distinct);
  192. formData.append(
  193. "temperatureRanges",
  194. self.queryModel.temperatureBegin + "," + self.queryModel.temperatureEnd
  195. );
  196. if (this.field != null) {
  197. formData.append("field", this.field);
  198. }
  199. if (this.direction != null) {
  200. formData.append("direction", this.direction);
  201. }
  202. temperatureRecordApi
  203. .getCompanyRecordReport(formData)
  204. .then(function(response) {
  205. self.loading = false;
  206. var jsonData = response.data.data.list;
  207. self.tableData = jsonData;
  208. self.tableHeight = window.innerHeight - 320;
  209. })
  210. .catch(error => {
  211. self.loading = false;
  212. // self.$message.error(error + "");
  213. });
  214. },
  215. pageSizeChange(pageSize) {
  216. this.pageSize = pageSize;
  217. },
  218. sortChange(data) {
  219. this.field = data.column.field;
  220. this.direction = data.order;
  221. this.changePage(this.pageIndex);
  222. },
  223. handleSelectionChange(val) {
  224. this.multipleSelection = val;
  225. },
  226. handleReset(name) {
  227. this.$refs[name].resetFields();
  228. this.queryModel.timeRanges = "";
  229. this.queryModel.temperatureEnd = "";
  230. this.queryModel.subordinate = false;
  231. this.queryModel.distinct = false;
  232. },
  233. onDetailModalClose(refreshed) {
  234. //保存成功后回调
  235. this.showModal = false;
  236. if (refreshed) {
  237. this.changePage(this.pageIndex);
  238. }
  239. },
  240. //初始化日期
  241. getCurrentMonthFirst() {
  242. var self = this;
  243. var date = new Date();
  244. var year = date.getFullYear();
  245. var month = date.getMonth() + 1;
  246. if (month < 10) {
  247. month = "0" + month;
  248. }
  249. var data = date.getDate();
  250. if (data < 10) {
  251. data = "0" + data;
  252. }
  253. var startTime = year + "-" + month + "-" + data;
  254. self.queryModel.timeRanges = startTime;
  255. },
  256. getSummaries(param) {
  257. const { columns, data } = param;
  258. const sums = [];
  259. columns.forEach((column, index) => {
  260. if (index === 0) {
  261. sums[index] = "总人数";
  262. return;
  263. }
  264. const values = data.map(item => Number(item[column.property]));
  265. if (!values.every(value => isNaN(value))) {
  266. sums[index] = values.reduce((prev, curr) => {
  267. const value = Number(curr);
  268. if (!isNaN(value)) {
  269. return prev + curr;
  270. } else {
  271. return prev;
  272. }
  273. }, 0);
  274. sums[index] += " 人";
  275. } else {
  276. sums[index] = "";
  277. }
  278. if (index >= 5) {
  279. sums[index] = "";
  280. }
  281. });
  282. return sums;
  283. }
  284. },
  285. mounted: function() {
  286. this.changePage(1);
  287. }
  288. };
  289. </script>
  290. <style lang="scss" scoped>
  291. .el-breadcrumb {
  292. margin: 10px;
  293. line-height: 20px;
  294. }
  295. .el-divider {
  296. margin: 5px 0;
  297. }
  298. .demo-form-inline {
  299. margin-left: 10px;
  300. text-align: left;
  301. }
  302. .button-group {
  303. margin-left: 10px;
  304. text-align: left;
  305. }
  306. </style>