index.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <template>
  2. <div class="app-container">
  3. <el-form size="small" :inline="true">
  4. <el-form-item label="日期" prop="menuName">
  5. <el-date-picker
  6. style="width: 240px; margin-right: 8px"
  7. size="mini"
  8. v-model="dateRange"
  9. type="week"
  10. format="yyyy 第 WW 周"
  11. placeholder="选择周"
  12. :picker-options="{ firstDayOfWeek: 1 }"
  13. ></el-date-picker>
  14. </el-form-item>
  15. <el-form-item label="作业单位" prop="status">
  16. <el-select
  17. style="margin-right: 8px"
  18. size="mini"
  19. v-model="workUnit"
  20. placeholder="请选择"
  21. clearable
  22. >
  23. <el-option label="全部" value=""> </el-option>
  24. <el-option
  25. v-for="item in workUnitOptions"
  26. :key="item.organAbbr"
  27. :label="item.organAbbr"
  28. :value="item.organAbbr"
  29. >
  30. </el-option>
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item>
  34. <el-button
  35. type="primary"
  36. icon="el-icon-search"
  37. size="mini"
  38. @click="handleQuery"
  39. >搜索</el-button
  40. >
  41. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  42. >重置</el-button
  43. >
  44. <el-button icon="el-icon-download" size="mini" @click="onExport"
  45. >导出</el-button
  46. >
  47. </el-form-item>
  48. </el-form>
  49. <el-tabs v-model="activeName" @tab-click="handleClick">
  50. <el-tab-pane label="本周计划执行情况" name="weeklyPlanSituationTableRef">
  51. <WeeklyPlanSituationTable ref="weeklyPlanSituationTableRef" />
  52. </el-tab-pane>
  53. <el-tab-pane
  54. label="三级及以上作业风险计划"
  55. name="level3AbovePlansTableRef"
  56. >
  57. <Level3AbovePlansTable ref="level3AbovePlansTableRef" />
  58. </el-tab-pane>
  59. <el-tab-pane
  60. label="下周计划安排情况"
  61. name="nextWeekPlanSituationTableRef"
  62. >
  63. <NextWeekPlanSituationTable ref="nextWeekPlanSituationTableRef" />
  64. </el-tab-pane>
  65. <el-tab-pane
  66. label="本周违章查处情况"
  67. name="weeklyViolationSituationTableRef"
  68. >
  69. <WeeklyViolationSituationTable ref="weeklyViolationSituationTableRef" />
  70. </el-tab-pane>
  71. <el-tab-pane
  72. label="本周到岗到位履职情况"
  73. name="thoughtfulJobSituationTableRef"
  74. >
  75. <ThoughtfulJobSituationTable ref="thoughtfulJobSituationTableRef" />
  76. </el-tab-pane>
  77. <el-tab-pane
  78. v-if="false"
  79. label="防外人触电隐患排查"
  80. name="updateOnExternalRisksTableRef"
  81. >
  82. <UpdateOnExternalRisksTable ref="updateOnExternalRisksTableRef" />
  83. </el-tab-pane>
  84. <el-tab-pane
  85. v-if="false"
  86. label="线路杆号牌缺失情况"
  87. name="lineMissingSituationTableRef"
  88. >
  89. <LineMissingSituationTable ref="lineMissingSituationTableRef" />
  90. </el-tab-pane>
  91. </el-tabs>
  92. <pagination
  93. v-show="total > 0"
  94. :total="total"
  95. :page.sync="queryParams.pageNum"
  96. :limit.sync="queryParams.pageSize"
  97. @pagination="handleQuery"
  98. />
  99. </div>
  100. </template>
  101. <script>
  102. import Level3AbovePlansTable from "./components/level3-above-plans-table.vue";
  103. import LineMissingSituationTable from "./components/line-missing-situation-table.vue";
  104. import NextWeekPlanSituationTable from "./components/next-week-plan-situation-table.vue";
  105. import ThoughtfulJobSituationTable from "./components/thoughtful-job-situation-table.vue";
  106. import UpdateOnExternalRisksTable from "./components/update-on-external-risks-table.vue";
  107. import WeeklyPlanSituationTable from "./components/weekly-plan-situation-table.vue";
  108. import WeeklyViolationSituationTable from "./components/weekly-violation-situation-table.vue";
  109. import moment from "moment";
  110. import {
  111. getReportWeek,
  112. getWorkUnitList,
  113. weekExport,
  114. } from "@/api/secure/daily-newspaper";
  115. export default {
  116. components: {
  117. Level3AbovePlansTable,
  118. LineMissingSituationTable,
  119. NextWeekPlanSituationTable,
  120. ThoughtfulJobSituationTable,
  121. UpdateOnExternalRisksTable,
  122. WeeklyPlanSituationTable,
  123. WeeklyViolationSituationTable,
  124. },
  125. name: "weekly-report",
  126. data() {
  127. return {
  128. activeName: "weeklyPlanSituationTableRef",
  129. // 日期范围
  130. dateRange: "",
  131. startDate: "", // 显示开始时间
  132. endDate: "", // 显示结束时间
  133. total: 0,
  134. queryParams: {
  135. pageNum: 1,
  136. pageSize: 10,
  137. },
  138. workUnit: "", // 作业单位
  139. workUnitOptions: [],
  140. };
  141. },
  142. watch: {
  143. dateRange(newVal) {
  144. this.calculateStartAndEndDates(newVal);
  145. },
  146. },
  147. mounted() {
  148. // 设置默认为最近的一周
  149. this.setRecentWeek();
  150. this.getWorkUnit();
  151. this.handleQuery();
  152. },
  153. methods: {
  154. moment,
  155. async getWorkUnit() {
  156. const { data } = await getWorkUnitList();
  157. this.workUnitOptions = data;
  158. },
  159. setRecentWeek() {
  160. const today = new Date();
  161. const diffDays = today.getDay() === 0 ? -6 : 1 - today.getDay(); // 调整到周一作为一周的开始
  162. const startOfWeek = new Date(today);
  163. startOfWeek.setDate(today.getDate() + diffDays);
  164. this.dateRange = startOfWeek;
  165. this.calculateStartAndEndDates(startOfWeek);
  166. },
  167. handleClick(tab, event) {
  168. console.log(tab, event, "---------ddd");
  169. this.activeName = tab.name;
  170. // this.handleQuery();
  171. },
  172. /** 搜索按钮操作 */
  173. async handleQuery() {
  174. this.loading = true;
  175. const { appointmentList, illegalList, nextList, planList } =
  176. await getReportWeek(this.startDate, this.endDate);
  177. this.$nextTick(() => {
  178. this.$refs["weeklyPlanSituationTableRef"].tableData = planList;
  179. this.$refs["level3AbovePlansTableRef"].tableData = [];
  180. this.$refs["nextWeekPlanSituationTableRef"].tableData = nextList;
  181. this.$refs["weeklyViolationSituationTableRef"].tableData = illegalList;
  182. this.$refs["thoughtfulJobSituationTableRef"].tableData =
  183. appointmentList;
  184. });
  185. this.loading = false;
  186. },
  187. /** 重置按钮操作 */
  188. resetQuery() {
  189. this.workUnit = "";
  190. // 设置默认为最近的一周
  191. this.setRecentWeek();
  192. this.handleQuery();
  193. },
  194. calculateStartAndEndDates(date) {
  195. if (!date) return;
  196. const startOfWeek = new Date(date.getTime());
  197. const dayOfWeek = startOfWeek.getDay();
  198. const diffDays = dayOfWeek === 0 ? -6 : 1 - dayOfWeek; // 调整到周一作为一周的开始
  199. startOfWeek.setDate(startOfWeek.getDate() + diffDays);
  200. const endOfWeek = new Date(startOfWeek);
  201. endOfWeek.setDate(endOfWeek.getDate() + 6);
  202. this.startDate = this.formatDate(startOfWeek);
  203. this.endDate = this.formatDate(endOfWeek);
  204. },
  205. formatDate(date) {
  206. const year = date.getFullYear();
  207. const month = String(date.getMonth() + 1).padStart(2, "0");
  208. const day = String(date.getDate()).padStart(2, "0");
  209. return `${year}${month}${day}`;
  210. },
  211. async onExport() {
  212. const res = await weekExport(this.startDate, this.endDate);
  213. if (res) {
  214. const elink = document.createElement("a");
  215. elink.download = `周报-${this.startDate}_${this.endDate}.xls`;
  216. elink.style.display = "none";
  217. const blob = new Blob([res], { type: "application/x-msdownload" });
  218. elink.href = URL.createObjectURL(blob);
  219. document.body.appendChild(elink);
  220. elink.click();
  221. document.body.removeChild(elink);
  222. } else {
  223. this.$message.error("导出异常请联系管理员");
  224. }
  225. },
  226. },
  227. };
  228. </script>
  229. <style lang="scss" scoped></style>