index.vue 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028
  1. <template>
  2. <div class="bg-transparent flex resumption">
  3. <el-row :gutter="20">
  4. <!--机构数据-->
  5. <el-col :span="4" :xs="24">
  6. <org-tree
  7. v-model="queryParams.orgId"
  8. @defaultKey="getDefaultKey"
  9. @checkChange="checkChange"
  10. @click="clickTreeNode"
  11. ></org-tree>
  12. </el-col>
  13. <el-col :span="20" :xs="24">
  14. <!-- 搜索条件 -->
  15. <el-form
  16. :model="queryParams"
  17. ref="queryParams"
  18. size="small"
  19. :inline="true"
  20. v-show="showSearch"
  21. label-width="100px"
  22. >
  23. <el-form-item label="履职计划" prop="planId">
  24. <el-select
  25. v-model="queryParams.planId"
  26. filterable
  27. placeholder="请选择履职计划"
  28. clearable
  29. >
  30. <el-option
  31. v-for="item in planList"
  32. :key="item.id"
  33. :label="item.name"
  34. :value="item.id"
  35. >
  36. </el-option>
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item label="履职角色" prop="executeRole">
  40. <el-select
  41. v-model="queryParams.executeRole"
  42. placeHolder="请选择履职角色"
  43. clearable
  44. >
  45. <el-option
  46. v-for="item in roleList"
  47. :key="item.id"
  48. :label="item.name"
  49. :value="item.id"
  50. ></el-option>
  51. </el-select>
  52. </el-form-item>
  53. <el-form-item label="履职周期" prop="executeCycle">
  54. <el-select
  55. v-model="queryParams.executeCycle"
  56. placeHolder="请选择履职周期"
  57. @change="changeType($event)"
  58. >
  59. <el-option
  60. v-for="item in dict.type.resumption_plan_cycle"
  61. :key="item.value"
  62. :label="item.label"
  63. :value="item.value"
  64. ></el-option>
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item label="任务状态" prop="status">
  68. <el-select
  69. v-model="queryParams.status"
  70. placeHolder="请选择任务状态"
  71. clearable
  72. >
  73. <el-option
  74. v-for="item in dict.type.resumption_status"
  75. :key="item.value"
  76. :label="item.label"
  77. :value="item.value"
  78. ></el-option>
  79. </el-select>
  80. </el-form-item>
  81. <el-form-item
  82. class="searchTitle"
  83. label="计划时间"
  84. v-if="
  85. queryParams.executeCycle == 1 ||
  86. queryParams.executeCycle == 2 ||
  87. queryParams.executeCycle == null
  88. "
  89. >
  90. <DataRangePicker
  91. v-model="queryParams.range"
  92. key="daterange"
  93. type="daterange"
  94. :clearable="timeClearable"
  95. />
  96. </el-form-item>
  97. <el-form-item
  98. class="searchTitle"
  99. label="计划时间"
  100. v-if="queryParams.executeCycle == 3"
  101. >
  102. <!-- :format='weekStart+" 到 "+weekEnd+ 第WW周' format=" yyyy 第 WW 周"-->
  103. <el-date-picker
  104. :picker-options="{ firstDayOfWeek: 1 }"
  105. key="week"
  106. v-model="week"
  107. @change="weekChanged"
  108. :clearable="timeClearable"
  109. type="week"
  110. format=" yyyy 第 WW 周"
  111. placeholder="选择周"
  112. >
  113. </el-date-picker>
  114. </el-form-item>
  115. <el-form-item
  116. class="searchTitle"
  117. label="计划时间"
  118. v-if="queryParams.executeCycle == 4"
  119. >
  120. <el-date-picker
  121. v-model="monthRange"
  122. @change="monthChanged"
  123. type="monthrange"
  124. key="monthRange"
  125. align="right"
  126. :clearable="timeClearable"
  127. unlink-panels
  128. range-separator="-"
  129. start-placeholder="开始月份"
  130. end-placeholder="结束月份"
  131. />
  132. </el-form-item>
  133. <el-form-item
  134. class="searchTitle"
  135. label="计划时间"
  136. v-if="queryParams.executeCycle == 5"
  137. >
  138. <el-date-picker
  139. :clearable="timeClearable"
  140. type="year"
  141. align="right"
  142. key="quarterSyearS"
  143. v-model="yearS"
  144. />
  145. -
  146. <el-select v-model="quarterS" placeholder="请选择">
  147. <el-option
  148. v-for="item in optionsQS"
  149. :key="item.key"
  150. :label="item.text"
  151. :value="item.value"
  152. :clearable="timeClearable"
  153. />
  154. </el-select>
  155. <label
  156. class="el-form-item__label"
  157. style="margin: 0 10px; padding: 0"
  158. >至</label
  159. >
  160. <el-date-picker
  161. :clearable="timeClearable"
  162. type="year"
  163. v-model="yearE"
  164. key="quarterSyearE"
  165. align="right"
  166. />
  167. -
  168. <el-select v-model="quarterE" placeholder="请选择">
  169. <el-option
  170. v-for="item in optionsQE"
  171. :key="item.key"
  172. :label="item.text"
  173. :value="item.value"
  174. :clearable="timeClearable"
  175. />
  176. </el-select>
  177. </el-form-item>
  178. <el-form-item label="计划时间" v-if="queryParams.executeCycle == 6">
  179. <el-date-picker
  180. :clearable="timeClearable"
  181. type="year"
  182. align="right"
  183. key="halfyearS"
  184. v-model="yearS"
  185. />
  186. -
  187. <el-select v-model="halfyearS" placeholder="请选择">
  188. <el-option
  189. v-for="item in optionsHS"
  190. :key="item.key"
  191. :label="item.text"
  192. :value="item.value"
  193. :clearable="timeClearable"
  194. />
  195. </el-select>
  196. <label
  197. class="el-form-item__label"
  198. style="margin: 0 10px; padding: 0"
  199. >至</label
  200. >
  201. <el-date-picker
  202. :clearable="timeClearable"
  203. type="year"
  204. v-model="yearE"
  205. key="halfyearE"
  206. align="right"
  207. />
  208. -
  209. <el-select v-model="halfyearE" placeholder="请选择">
  210. <el-option
  211. v-for="item in optionsHE"
  212. :key="item.key"
  213. :label="item.text"
  214. :value="item.value"
  215. :clearable="timeClearable"
  216. />
  217. </el-select>
  218. </el-form-item>
  219. <el-form-item
  220. class="searchTitle"
  221. label="计划时间"
  222. v-if="queryParams.executeCycle == 7"
  223. >
  224. <el-date-picker
  225. :clearable="timeClearable"
  226. type="year"
  227. align="right"
  228. v-model="yearS"
  229. key="yearS"
  230. />
  231. <label
  232. class="el-form-item__label"
  233. style="margin: 0 10px; padding: 0"
  234. >至</label
  235. >
  236. <el-date-picker
  237. :clearable="timeClearable"
  238. type="year"
  239. v-model="yearE"
  240. align="right"
  241. key="yearE"
  242. />
  243. </el-form-item>
  244. <el-form-item>
  245. <el-button
  246. type="primary"
  247. icon="el-icon-search"
  248. size="mini"
  249. @click="getList"
  250. >搜索</el-button
  251. >
  252. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  253. >重置</el-button
  254. >
  255. </el-form-item>
  256. </el-form>
  257. <!-- 按纽 -->
  258. <el-row :gutter="10" class="mb8">
  259. <el-col :span="1.5">
  260. <el-button
  261. type="primary"
  262. plain
  263. icon="el-icon-download"
  264. size="mini"
  265. @click="exportExcel()"
  266. v-hasPermi="['system:user:add']"
  267. >导出</el-button
  268. >
  269. </el-col>
  270. <right-toolbar
  271. :showSearch.sync="showSearch"
  272. @queryTable="getList"
  273. :columns="columns"
  274. ></right-toolbar>
  275. </el-row>
  276. <el-table v-loading="loading" :data="pageData">
  277. <el-table-column
  278. type="index"
  279. min-width="4%"
  280. label="序号"
  281. v-if="columns[0].visible"
  282. >
  283. </el-table-column>
  284. <el-table-column
  285. prop="name"
  286. label="任务名称"
  287. min-width="20%"
  288. v-if="columns[1].visible"
  289. >
  290. </el-table-column>
  291. <el-table-column
  292. prop="planStartTime"
  293. label="任务开始时间"
  294. min-width="15%"
  295. v-if="columns[2].visible"
  296. />
  297. <el-table-column
  298. prop="planEndTime"
  299. label="任务结束时间"
  300. min-width="15%"
  301. v-if="columns[3].visible"
  302. />
  303. <el-table-column
  304. prop="parentOrgName"
  305. label="上级机构"
  306. min-width="15%"
  307. v-if="columns[4].visible"
  308. >
  309. </el-table-column>
  310. <el-table-column
  311. prop="orgName"
  312. label="履职机构"
  313. min-width="15%"
  314. v-if="columns[5].visible"
  315. >
  316. </el-table-column>
  317. <el-table-column
  318. prop="roleName"
  319. label="履职角色"
  320. min-width="10%"
  321. v-if="columns[6].visible"
  322. >
  323. </el-table-column>
  324. <el-table-column
  325. prop="submitter"
  326. label="提交人"
  327. min-width="10%"
  328. v-if="columns[7].visible"
  329. ></el-table-column>
  330. <el-table-column
  331. label="提交时间"
  332. min-width="15%"
  333. v-if="columns[8].visible"
  334. >
  335. <template slot-scope="r">{{
  336. r.row.submitTime | dateTime
  337. }}</template>
  338. </el-table-column>
  339. <el-table-column
  340. prop="abnormalDataNums"
  341. label="异常个数"
  342. min-width="9%"
  343. v-if="columns[8].visible"
  344. >
  345. </el-table-column>
  346. <el-table-column
  347. prop="status"
  348. label="任务状态"
  349. width="100px"
  350. v-if="columns[9].visible"
  351. >
  352. <template slot-scope="r">
  353. <span>
  354. <i class="circle" :style="statusColor(r.row.status, true)" />
  355. <label :style="statusColor(r.row.status, false)">
  356. {{
  357. getLabel(dict.type.resumption_status, r.row.status)
  358. }}</label
  359. >
  360. </span>
  361. </template>
  362. </el-table-column>
  363. <el-table-column label="操作" min-width="13%">
  364. <template slot-scope="r">
  365. <!-- <el-button v-if="
  366. r.row.status == 'WAIT' &&
  367. queryParams.type == 'QUARTER'
  368. " type="text" @click="onEdit(r.row.id)">履职</el-button>
  369. <el-button v-else-if="
  370. r.row.status != 'NA' &&
  371. r.row.status != 'NOT' &&
  372. r.row.status != 'WAIT'
  373. " type="text" @click="onEdit(r.row.id, { isRead: true })">查看</el-button> -->
  374. <el-button
  375. type="text"
  376. @click="showDetail(r.row)"
  377. v-show="r.row.status == 2 || r.row.status == 3"
  378. >查看</el-button
  379. >
  380. <el-button
  381. type="text"
  382. @click="showscanRecord(r.row)"
  383. v-show="r.row.status == 2 || r.row.status == 3"
  384. >扫描记录</el-button
  385. >
  386. </template>
  387. </el-table-column>
  388. </el-table>
  389. <pagination
  390. v-show="total > 0"
  391. :total="total"
  392. :page.sync="queryParams.pageNum"
  393. :limit.sync="queryParams.pageSize"
  394. @pagination="getList"
  395. />
  396. </el-col>
  397. </el-row>
  398. <!-- 详情 -->
  399. <dialog-detail ref="detaildialog"></dialog-detail>
  400. <dialog-scan-record ref="scanrecorddialog"></dialog-scan-record>
  401. </div>
  402. </template>
  403. <script>
  404. import { mapState, mapMutations } from "vuex";
  405. // import { Message } from "element-ui";
  406. import DialogDetail from "./dialog.detail";
  407. import DialogScanRecord from "./dialog.scanrecord";
  408. import DataRangePicker from "@/components/dateTime/daterange.picker.vue";
  409. import OrgTree from "@/components/orgTree";
  410. import * as api from "@/api/resumption/taskManger.js";
  411. import { getLabel } from "@/views/commonOption.js";
  412. import dayjs from 'dayjs';
  413. export default {
  414. name: "overviewDetialList",
  415. dicts: ["resumption_plan_cycle", "resumption_status"],
  416. components: { DialogDetail, DialogScanRecord, DataRangePicker, OrgTree },
  417. data() {
  418. // const { params, query } = this.$route;
  419. let sDate = new Date();
  420. let eDate = new Date();
  421. // if (query.startDate != undefined) {
  422. // sDate = new Date(query.startDate);
  423. // }
  424. // if (query.endDate != undefined) {
  425. // eDate = new Date(query.endDate);
  426. // }
  427. // let tempType = 1;
  428. // let tempOrgId = 1;
  429. // let tempRole = null;
  430. // let tempstatus = null;
  431. // if (query.executeCycle != undefined) tempType = query.executeCycle;
  432. // if (query.orgId != undefined) tempOrgId = parseInt(query.orgId);
  433. // else {
  434. // if (
  435. // this.loginUser != undefined &&
  436. // this.loginUser.org != undefined &&
  437. // this.loginUser.org.id != undefined
  438. // )
  439. // tempOrgId = parseInt(this.loginUser.org.id);
  440. // }
  441. // if (query.executeRole != undefined && query.executeRole != "all")
  442. // tempRole = query.executeRole;
  443. // if (query.status != undefined && query.status != "all")
  444. // tempstatus = query.status;
  445. let temphalfyearE = 1;
  446. let temphalfyearS = 1;
  447. let tempquarterE = 1;
  448. let tempquarterS = 1;
  449. // if (query.halfyearE != undefined) temphalfyearE = parseInt(query.halfyearE);
  450. // if (query.halfyearS != undefined) temphalfyearS = parseInt(query.halfyearS);
  451. // if (query.quarterE != undefined) tempquarterE = parseInt(query.quarterE);
  452. // if (query.quarterS != undefined) tempquarterS = parseInt(query.quarterS);
  453. return {
  454. loading: false,
  455. showSearch: true,
  456. total: 0,
  457. timeClearable: false,
  458. options: [],
  459. roleList: [],
  460. planList: [],
  461. yearS: sDate,
  462. yearE: eDate,
  463. halfyearE: temphalfyearE,
  464. halfyearS: temphalfyearS,
  465. quarterE: tempquarterE,
  466. quarterS: tempquarterS,
  467. monthRange: [sDate, eDate],
  468. week: sDate,
  469. weekStart: null,
  470. weekEnd: null,
  471. optionsHS: [
  472. { key: "1", value: 1, text: "上半年" },
  473. { key: "2", value: 2, text: "下半年" },
  474. ],
  475. optionsHE: [
  476. { key: "1", value: 1, text: "上半年" },
  477. { key: "2", value: 2, text: "下半年" },
  478. ],
  479. optionsQS: [
  480. { key: "1", value: 1, text: "第一季度" },
  481. { key: "2", value: 2, text: "第二季度" },
  482. { key: "3", value: 3, text: "第三季度" },
  483. { key: "4", value: 4, text: "第四季度" },
  484. ],
  485. optionsQE: [
  486. { key: "1", value: 1, text: "第一季度" },
  487. { key: "2", value: 2, text: "第二季度" },
  488. { key: "3", value: 3, text: "第三季度" },
  489. { key: "4", value: 4, text: "第四季度" },
  490. ],
  491. queryParams: {
  492. executeCycle: "2",
  493. checkSub: true,
  494. orgId: null,
  495. range: [sDate, eDate],
  496. executeRole: null,
  497. status: null,
  498. planId: null,
  499. pageNum: 1,
  500. pageSize: 10,
  501. },
  502. pageData: [],
  503. columns: [
  504. { key: 0, label: `序号`, visible: true },
  505. { key: 1, label: `计划名称`, visible: true },
  506. { key: 2, label: `开始时间`, visible: true },
  507. { key: 3, label: `结束时间`, visible: true },
  508. { key: 4, label: `上级机构`, visible: true },
  509. { key: 5, label: `履职机构`, visible: true },
  510. { key: 6, label: `履职角色`, visible: true },
  511. { key: 2, label: `提交人`, visible: true },
  512. { key: 3, label: `提交时间`, visible: true },
  513. { key: 4, label: `异常个数`, visible: true },
  514. { key: 5, label: `任务状态`, visible: true },
  515. ],
  516. };
  517. },
  518. props: {},
  519. watch: {
  520. // org: {
  521. // deep: true,
  522. // immediate: true,
  523. // handler(nOrg) {
  524. // if (nOrg.id) {
  525. // this.queryParams.orgId = nOrg.id;
  526. // } else {
  527. // this.queryParams.orgId = this.loginUser.org.id;
  528. // }
  529. // this.roleVal = "all";
  530. // this.planVal = -1;
  531. // this.loadRoles(this.queryParams.orgId);
  532. // },
  533. // },
  534. statusVal(value) {
  535. if (value == undefined) return;
  536. if (value == "all") this.queryParams.status = null;
  537. else this.queryParams.status = value;
  538. },
  539. planVal(value) {
  540. if (value == undefined) return;
  541. if (value == -1) this.queryParams.planId = null;
  542. else this.queryParams.planId = value;
  543. },
  544. $route(v) {
  545. //this.queryParams.type = this.$route.params.type.toUpperCase();
  546. },
  547. // 0每日;1每周;2每月;3每季度;4每半年;5每年
  548. yearS(val) {
  549. if (this.yearE < val) {
  550. this.yearE = val;
  551. if (this.queryParams.executeCycle == 3) {
  552. if (this.quarterS > this.quarterE) {
  553. this.quarterS = this.quarterE;
  554. } else this.resetRangeParam();
  555. } else if (this.queryParams.executeCycle == 4) {
  556. if (this.halfyearS > this.halfyearE) {
  557. this.halfyearS = this.quarterE;
  558. } else this.resetRangeParam();
  559. }
  560. } else this.resetRangeParam();
  561. },
  562. yearE(val) {
  563. if (val < this.yearS) {
  564. this.yearS = val;
  565. if (this.queryParams.executeCycle == 3) {
  566. if (this.quarterS > this.quarterE) {
  567. this.quarterS = this.quarterE;
  568. } else this.resetRangeParam();
  569. } else if (this.queryParams.executeCycle == 4) {
  570. if (this.halfyearS > this.halfyearE) {
  571. this.halfyearS = this.halfyearE;
  572. } else this.resetRangeParam();
  573. }
  574. } else this.resetRangeParam();
  575. },
  576. quarterS(val) {
  577. if (this.yearS == this.yearE) {
  578. if (val > this.quarterE) this.quarterE = val;
  579. else this.resetRangeParam();
  580. } else this.resetRangeParam();
  581. },
  582. quarterE(val) {
  583. if (this.yearS == this.yearE) {
  584. if (val < this.quarterS) this.quarterS = val;
  585. else this.resetRangeParam();
  586. } else this.resetRangeParam();
  587. },
  588. halfyearS(val) {
  589. console.log("ccccccccc", val);
  590. if (this.yearS == this.yearE) {
  591. if (val > this.halfyearE) this.halfyearE = val;
  592. else this.resetRangeParam();
  593. } else this.resetRangeParam();
  594. },
  595. halfyearE(val) {
  596. console.log("dddddddddd", val);
  597. if (this.yearS == this.yearE) {
  598. if (val < this.halfyearS) this.halfyearS = val;
  599. else this.resetRangeParam();
  600. } else this.resetRangeParam();
  601. },
  602. monthRange(val) {
  603. this.resetRangeParam();
  604. },
  605. },
  606. computed: {
  607. ...mapState(["org", "loginUser"]),
  608. },
  609. methods: {
  610. ...mapMutations([]),
  611. getLabel,
  612. toName(row) {
  613. // const ymd = row.ymd;
  614. const ymd = new Date(row.ymdDate);
  615. switch (row.executeCycle) {
  616. case 0:
  617. return `${ymd.year}年${ymd.month}月${ymd.day}日-${row.formTypeText}`;
  618. case 1:
  619. return `${ymd.year}年第${ymd.week}周-${row.formTypeText}`;
  620. case 2:
  621. return `${ymd.year}年第${ymd.month}月`;
  622. case 3:
  623. return `${ymd.year}年第${ymd.quarter}季`;
  624. case 4:
  625. let text = ymd.halfyear == 1 ? "上" : "下";
  626. return `${ymd.year}年${text}每半年`;
  627. case 5:
  628. return `${ymd.year}年`;
  629. case 6:
  630. return `${ymd.year}年${ymd.month}月${ymd.day}日${ymd.hour}小时${ymd.minute}分钟-${row.formTypeText}`;
  631. }
  632. },
  633. async exportExcel() {
  634. if (!this.isTableHaveData) {
  635. Message.error({
  636. message: `暂无可用数据导出!`,
  637. type: "error",
  638. duration: 2000,
  639. });
  640. return;
  641. }
  642. await api.exportResumptionRecord(this.queryParams);
  643. },
  644. showDetail(row) {
  645. this.$refs.detaildialog.show(row.resumptionId, row.name);
  646. //this.$refs.detaildialog.show("75246a09eba74e018b60ade0b1f336f8", row.planName);
  647. },
  648. showscanRecord(row) {
  649. this.$refs.scanrecorddialog.show(row.resumptionId, row.orgId);
  650. },
  651. getDefaultKey(key) {
  652. this.queryParams.orgId = key;
  653. this.getList();
  654. this.loadRoles(key);
  655. this.loadPlanList();
  656. },
  657. //单选框状态改变
  658. checkChange(state) {
  659. this.queryParams.checkSub = state;
  660. this.getList();
  661. },
  662. // 节点单击事件
  663. clickTreeNode(data) {
  664. this.queryParams.orgId = data.id;
  665. this.loadPlanList();
  666. this.loadRoles();
  667. this.getList();
  668. },
  669. resetQuery() {
  670. this.resetForm("queryParams");
  671. this.queryParams.executeCycle="2";
  672. this.changeType("2");
  673. // this.queryParams.orgId = undefined;
  674. // this.queryParams.checkSub = false;
  675. // this.$refs.tree.setCurrentKey(null);
  676. this.getList();
  677. },
  678. async getList() {
  679. this.loading = true;
  680. api
  681. .page(this.queryParams)
  682. .then((r) => {
  683. r.rows.forEach(i=>{
  684. if(i.status==1 && dayjs(i.planEndTime).isBefore(new Date())){
  685. i.status=4;
  686. }
  687. })
  688. this.pageData = r.rows;
  689. this.total = r.total;
  690. this.loading = false;
  691. })
  692. .catch((e) => {
  693. this.loading = false;
  694. });
  695. },
  696. loadRoles() {
  697. api
  698. .getRoles({
  699. orgId: this.queryParams.orgId,
  700. planCycle: this.queryParams.executeCycle,
  701. })
  702. .then((r) => (this.roleList = r.data));
  703. },
  704. loadPlanList() {
  705. api
  706. .getPlans({
  707. orgId: this.queryParams.orgId,
  708. planCycle: this.queryParams.executeCycle,
  709. })
  710. .then((r) => {
  711. this.planList = r.data;
  712. });
  713. },
  714. async changeType(selectValue) {
  715. // console.log("selectValue",selectValue.target.value)
  716. // this.planVal = -1;
  717. this.queryParams.executeCycle = selectValue;
  718. let nowDate = new Date();
  719. let nowMonth = nowDate.getMonth();
  720. if (nowMonth <= 2) {
  721. this.quarterS = 1;
  722. this.quarterE = 1;
  723. this.halfyearS = 1;
  724. this.halfyearE = 1;
  725. } else if (nowMonth <= 5) {
  726. this.quarterS = 2;
  727. this.quarterE = 2;
  728. this.halfyearS = 1;
  729. this.halfyearE = 1;
  730. } else if (nowMonth <= 8) {
  731. this.quarterS = 3;
  732. this.quarterE = 3;
  733. this.halfyearS = 2;
  734. this.halfyearE = 2;
  735. } else if (nowMonth <= 11) {
  736. this.quarterS = 4;
  737. this.quarterE = 4;
  738. this.halfyearS = 2;
  739. this.halfyearE = 2;
  740. }
  741. // 1每小时;2每天.......;3每月;4每季度;4每半年;5每年
  742. if (this.queryParams.executeCycle == 3) {
  743. if (!this.week) this.week = new Date();
  744. this.updateWeekDateRange(this.week);
  745. }
  746. this.resetRangeParam();
  747. this.loadPlanList();
  748. this.loadRoles();
  749. },
  750. weekChanged() {
  751. this.updateWeekDateRange(this.week);
  752. this.resetRangeParam();
  753. },
  754. monthChanged() {
  755. this.resetRangeParam();
  756. },
  757. updateWeekDateRange(week) {
  758. let oneDayLong = 24 * 60 * 60 * 1000;
  759. let c_day = week.getDay();
  760. this.weekStart = new Date(
  761. week.valueOf() - (c_day == 0 ? 6 : c_day - 1) * oneDayLong
  762. );
  763. this.weekEnd = new Date(
  764. week.valueOf() + (c_day == 0 ? 0 : 7 - c_day) * oneDayLong
  765. );
  766. },
  767. async resetRangeParam() {
  768. if (this.queryParams.executeCycle == 5) {
  769. let yearSval = this.yearS.getFullYear();
  770. let yearEval = this.yearE.getFullYear();
  771. let sQDate = yearSval + "-";
  772. let eQData = yearEval + "-";
  773. switch (this.quarterS) {
  774. case 1:
  775. sQDate += "01-01";
  776. break;
  777. case 2:
  778. sQDate += "04-01";
  779. break;
  780. case 3:
  781. sQDate += "07-01";
  782. break;
  783. case 4:
  784. sQDate += "10-01";
  785. break;
  786. }
  787. switch (this.quarterE) {
  788. case 1:
  789. eQData += "03-31";
  790. break;
  791. case 2:
  792. eQData += "06-30";
  793. break;
  794. case 3:
  795. eQData += "09-30";
  796. break;
  797. case 4:
  798. eQData += "12-31";
  799. break;
  800. }
  801. this.queryParams.range = [new Date(sQDate), new Date(eQData)];
  802. } else if (this.queryParams.executeCycle == 6) {
  803. let yearSval = this.yearS.getFullYear();
  804. let yearEval = this.yearE.getFullYear();
  805. let sHDate = yearSval + "-";
  806. let eHData = yearEval + "-";
  807. switch (this.halfyearS) {
  808. case 1:
  809. sHDate += "01-01";
  810. break;
  811. case 2:
  812. sHDate += "07-01";
  813. break;
  814. }
  815. switch (this.halfyearE) {
  816. case 1:
  817. eHData += "06-30";
  818. break;
  819. case 2:
  820. eHData += "12-31";
  821. break;
  822. }
  823. this.queryParams.range = [new Date(sHDate), new Date(eHData)];
  824. } else if (this.queryParams.executeCycle == 7) {
  825. let yearSval = this.yearS.getFullYear();
  826. let yearEval = this.yearE.getFullYear();
  827. let sYDate = yearSval + "-01-01";
  828. let eYData = yearEval + "-12-31";
  829. this.queryParams.range = [new Date(sYDate), new Date(eYData)];
  830. } else if (this.queryParams.executeCycle == 4) {
  831. if (!this.monthRange || this.monthRange.length != 2) {
  832. this.queryParams.range = null;
  833. } else {
  834. let dateObjS = this.monthRange[0];
  835. let dateObjE = this.monthRange[1];
  836. if (dateObjS.getFullYear == undefined) {
  837. dateObjS = new Date(dateObjS);
  838. dateObjE = new Date(dateObjE);
  839. }
  840. let sMDate =
  841. dateObjS.getFullYear() + "-" + (dateObjS.getMonth() + 1) + "-1";
  842. let eMData =
  843. dateObjE.getFullYear() + "-" + (dateObjE.getMonth() + 1) + "-1";
  844. let tempDate = new Date(
  845. dateObjE.getFullYear(),
  846. dateObjE.getMonth(),
  847. 29
  848. );
  849. if (dateObjE.getMonth() == 1 && tempDate.getDate() === 29) {
  850. eMData =
  851. dateObjE.getFullYear() + "-" + (dateObjE.getMonth() + 1) + "-29";
  852. } else {
  853. switch (dateObjE.getMonth()) {
  854. case 0:
  855. eMData =
  856. dateObjE.getFullYear() +
  857. "-" +
  858. (dateObjE.getMonth() + 1) +
  859. "-31";
  860. break;
  861. case 1:
  862. eMData =
  863. dateObjE.getFullYear() +
  864. "-" +
  865. (dateObjE.getMonth() + 1) +
  866. "-28";
  867. break;
  868. case 2:
  869. eMData =
  870. dateObjE.getFullYear() +
  871. "-" +
  872. (dateObjE.getMonth() + 1) +
  873. "-31";
  874. break;
  875. case 3:
  876. eMData =
  877. dateObjE.getFullYear() +
  878. "-" +
  879. (dateObjE.getMonth() + 1) +
  880. "-30";
  881. break;
  882. case 4:
  883. eMData =
  884. dateObjE.getFullYear() +
  885. "-" +
  886. (dateObjE.getMonth() + 1) +
  887. "-31";
  888. break;
  889. case 5:
  890. eMData =
  891. dateObjE.getFullYear() +
  892. "-" +
  893. (dateObjE.getMonth() + 1) +
  894. "-30";
  895. break;
  896. case 6:
  897. eMData =
  898. dateObjE.getFullYear() +
  899. "-" +
  900. (dateObjE.getMonth() + 1) +
  901. "-31";
  902. break;
  903. case 7:
  904. eMData =
  905. dateObjE.getFullYear() +
  906. "-" +
  907. (dateObjE.getMonth() + 1) +
  908. "-31";
  909. break;
  910. case 8:
  911. eMData =
  912. dateObjE.getFullYear() +
  913. "-" +
  914. (dateObjE.getMonth() + 1) +
  915. "-30";
  916. break;
  917. case 9:
  918. eMData =
  919. dateObjE.getFullYear() +
  920. "-" +
  921. (dateObjE.getMonth() + 1) +
  922. "-31";
  923. break;
  924. case 10:
  925. eMData =
  926. dateObjE.getFullYear() +
  927. "-" +
  928. (dateObjE.getMonth() + 1) +
  929. "-30";
  930. break;
  931. case 11:
  932. eMData =
  933. dateObjE.getFullYear() +
  934. "-" +
  935. (dateObjE.getMonth() + 1) +
  936. "-31";
  937. break;
  938. }
  939. }
  940. this.queryParams.range = [new Date(sMDate), new Date(eMData)];
  941. }
  942. } else if (this.queryParams.executeCycle == 3) {
  943. this.queryParams.range = [this.weekStart, this.weekEnd];
  944. } else if (
  945. this.queryParams.executeCycle === 1 ||
  946. this.queryParams.executeCycle == 2
  947. ) {
  948. this.queryParams.range = this.$dateRange.before(0);
  949. }
  950. },
  951. statusColor(status, isBackground) {
  952. let color = "";
  953. switch (status) {
  954. case "1":
  955. color = "#BFBFBF";
  956. break;
  957. case "2":
  958. color = "#1890FF";
  959. break;
  960. case "3":
  961. color = "#52C41A";
  962. break;
  963. case "4":
  964. color = "#F5222D";
  965. break;
  966. }
  967. if (isBackground) {
  968. return "background-color:" + color;
  969. } else {
  970. return "color:" + color;
  971. }
  972. },
  973. },
  974. async mounted() {
  975. // const { params, query } = this.$route;
  976. // if (this.loginUser && this.loginUser.org && this.loginUser.org.id) {
  977. // if (query == undefined || query.orgId == undefined) {
  978. // this.queryParams.orgId = this.loginUser.org.id;
  979. // }
  980. // }
  981. // this.loadRoles(this.queryParams.orgId);
  982. // await this.loadtypes();
  983. // this.loadPlanList();
  984. // await this.refresh();
  985. },
  986. };
  987. </script>
  988. <style lang="scss">
  989. // .searchItem {
  990. // margin-right: 10px;
  991. // margin-top: 5px;
  992. // margin-bottom: 5px;
  993. // }
  994. // .searchTitle {
  995. // margin-right: 10px !important;
  996. // margin-bottom: 0 !important;
  997. // margin-top: 0 !important;
  998. // }
  999. </style>