index.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932
  1. <template>
  2. <div class="app-container">
  3. <el-row :gutter="10">
  4. <!--机构数据-->
  5. <!-- <el-col :span="4" :xs="24">
  6. <org-tree v-model="queryParams.orgId" @defaultKey="getDefaultKey" @defaultOrg="getDefaultOrg" @checkChange="checkChange"
  7. @click="clickTreeNode" :defaultCheckSub="false" hangsheTree></org-tree>
  8. </el-col> -->
  9. <!--搜索栏-->
  10. <el-col :span="24" :xs="24">
  11. <div class="main-right-box">
  12. <div class="main-search-box">
  13. <el-form
  14. :model="queryParams"
  15. ref="queryForm"
  16. size="small"
  17. :inline="true"
  18. v-show="showSearch"
  19. >
  20. <el-form-item label="行社名称">
  21. <org-tree
  22. v-model="queryParams.orgId"
  23. @defaultKey="getDefaultKey"
  24. @defaultOrg="getDefaultOrg"
  25. @checkChange="checkChange"
  26. @click="clickTreeNode"
  27. :defaultCheckSub="false"
  28. hangsheTree
  29. ref="orgTree"
  30. ></org-tree>
  31. </el-form-item>
  32. <el-form-item label="任务名称" prop="planName">
  33. <el-input
  34. v-model="queryParams.planName"
  35. placeholder="请输入关键字"
  36. maxlength="50"
  37. clearable
  38. @keyup.enter.native="handleQuery"
  39. />
  40. </el-form-item>
  41. <el-form-item label="机构类型" prop="orgType">
  42. <el-select
  43. style="width: 100%"
  44. v-model="queryParams.orgType"
  45. placeholder="请选择机构类型"
  46. @change="changeSelect"
  47. >
  48. <el-option
  49. v-for="dict in dict.type.sys_org_type"
  50. :key="dict.value"
  51. :label="dict.label"
  52. :value="`${dict.value}`"
  53. ></el-option>
  54. </el-select>
  55. </el-form-item>
  56. <el-form-item label="调阅人员" prop="roleId">
  57. <el-select
  58. v-model="queryParams.roleId"
  59. placeholder="请选择用户角色"
  60. >
  61. <el-option
  62. v-for="item in roleList"
  63. :key="item.id"
  64. :label="item.roleName"
  65. :value="item.id"
  66. ></el-option>
  67. </el-select>
  68. </el-form-item>
  69. <el-form-item label="任务周期" prop="planCycle">
  70. <el-select
  71. style="width: 100%"
  72. v-model="queryParams.planCycle"
  73. placeholder="请选择任务周期"
  74. >
  75. <el-option
  76. v-for="dict in dict.type.sys_access_cycle"
  77. :key="dict.value"
  78. :label="dict.label"
  79. :value="`${dict.value}`"
  80. ></el-option>
  81. </el-select>
  82. </el-form-item>
  83. <el-form-item label="任务状态" prop="planStatus">
  84. <el-select
  85. style="width: 100%"
  86. v-model="queryParams.planStatus"
  87. placeholder="请选择任务状态"
  88. >
  89. <el-option
  90. v-for="dict in dict.type.edu_plan_status"
  91. :key="dict.value"
  92. :label="dict.label"
  93. :value="`${dict.value}`"
  94. ></el-option>
  95. </el-select>
  96. </el-form-item>
  97. </el-form>
  98. <el-row :gutter="10">
  99. <el-col :span="1.5">
  100. <el-button
  101. type="primary"
  102. icon="el-icon-search"
  103. size="mini"
  104. @click="handleQuery"
  105. v-hasPermi="['core:accessPlan:list']"
  106. >搜索
  107. </el-button>
  108. </el-col>
  109. <el-col :span="1.5">
  110. <el-button
  111. type="primary"
  112. icon="el-icon-refresh"
  113. size="mini"
  114. @click="resetQuery"
  115. >重置</el-button
  116. >
  117. </el-col>
  118. <el-col :span="1.5">
  119. <el-button
  120. type="primary"
  121. icon="el-icon-plus"
  122. size="mini"
  123. @click="handleAdd"
  124. v-hasPermi="['core:accessPlan:add']"
  125. >新增任务
  126. </el-button>
  127. </el-col>
  128. <right-toolbar
  129. :showSearch.sync="showSearch"
  130. @queryTable="getList"
  131. ></right-toolbar>
  132. </el-row>
  133. </div>
  134. <el-table
  135. border
  136. height="600"
  137. size="small"
  138. v-loading="loading"
  139. :data="planList"
  140. row-key="id"
  141. >
  142. <el-table-column
  143. label="序号"
  144. type="index"
  145. align="center"
  146. width="80"
  147. >
  148. <template slot-scope="scope">
  149. <span>{{
  150. (queryParams.pageNum - 1) * queryParams.pageSize +
  151. scope.$index +
  152. 1
  153. }}</span>
  154. </template>
  155. </el-table-column>
  156. <el-table-column
  157. width="140"
  158. label="任务名称"
  159. align="center"
  160. prop="planName"
  161. />
  162. <el-table-column
  163. width="140"
  164. label="创建机构"
  165. align="center"
  166. prop="orgName"
  167. />
  168. <el-table-column
  169. width="140"
  170. label="行社名称"
  171. align="center"
  172. prop="organization"
  173. />
  174. <el-table-column
  175. label="机构类型"
  176. align="center"
  177. key="orgType"
  178. prop="orgType"
  179. >
  180. <template slot-scope="scope">
  181. <dict-tag
  182. :options="dict.type.sys_org_type"
  183. :value="scope.row.orgType"
  184. />
  185. </template>
  186. </el-table-column>
  187. <el-table-column label="调阅人员" align="center" prop="roleName" />
  188. <el-table-column
  189. label="任务周期"
  190. align="center"
  191. key="planCycle"
  192. prop="planCycle"
  193. >
  194. <template slot-scope="scope">
  195. <dict-tag
  196. :options="dict.type.sys_access_cycle"
  197. :value="scope.row.planCycle"
  198. />
  199. </template>
  200. </el-table-column>
  201. <el-table-column
  202. label="任务次数"
  203. align="center"
  204. prop="planFrequency"
  205. />
  206. <el-table-column
  207. label="任务状态"
  208. align="center"
  209. key="planStatus"
  210. prop="planStatus"
  211. >
  212. <template slot-scope="scope">
  213. <dict-tag
  214. :options="dict.type.edu_plan_status"
  215. :value="scope.row.planStatus"
  216. />
  217. </template>
  218. </el-table-column>
  219. <!-- <el-table-column label="备注" align="center" prop="description"/> -->
  220. <el-table-column
  221. label="操作"
  222. fixed="right"
  223. width="220px"
  224. align="left"
  225. class-name="small-padding fixed-width"
  226. >
  227. <template slot-scope="scope">
  228. <el-button
  229. size="mini"
  230. type="text"
  231. icon="el-icon-arrow-down"
  232. v-if="
  233. scope.row.parentId == null &&
  234. scope.row.orgId == isEdit &&
  235. scope.row.isDistribute == 0 &&
  236. (scope.row.planStatus == 0 || scope.row.planStatus == 2)
  237. "
  238. @click="handDistribute(scope.row)"
  239. v-hasPermi="['core:accessPlan:release']"
  240. >下发
  241. </el-button>
  242. <el-button
  243. size="mini"
  244. type="text"
  245. icon="el-icon-top-left"
  246. v-if="
  247. scope.row.orgId == isEdit &&
  248. scope.row.isDistribute == 1 &&
  249. scope.row.planStatus == 1 &&
  250. scope.row.parentId == null
  251. "
  252. @click="handWithdraw(scope.row)"
  253. v-hasPermi="['core:accessPlan:withdraw']"
  254. >撤回
  255. </el-button>
  256. <el-button
  257. size="mini"
  258. type="text"
  259. icon="el-icon-edit-outline"
  260. @click="handleUpdate(scope.row)"
  261. v-if="scope.row.orgId == isEdit"
  262. v-hasPermi="['core:accessPlan:edit', 'core:accessPlan:query']"
  263. >编辑
  264. </el-button>
  265. <el-button
  266. size="mini"
  267. type="text"
  268. v-if="
  269. scope.row.parentOrgId == isEdit &&
  270. scope.row.parentId == null
  271. "
  272. icon="el-icon-delete"
  273. @click="handleDelete(scope.row)"
  274. v-hasPermi="['core:accessPlan:remove']"
  275. >删除
  276. </el-button>
  277. </template>
  278. </el-table-column>
  279. </el-table>
  280. <pagination
  281. v-show="total > 0"
  282. :total="total"
  283. :page.sync="queryParams.pageNum"
  284. :limit.sync="queryParams.pageSize"
  285. @pagination="getList"
  286. />
  287. </div>
  288. </el-col>
  289. </el-row>
  290. <!-- 添加或修改监控调阅计划对话框 -->
  291. <DialogCom :title="title" :visible.sync="open" width="500px" append-to-body>
  292. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  293. <el-form-item label="任务名称" prop="planName">
  294. <el-input
  295. v-model="form.planName"
  296. placeholder="请输入任务名称"
  297. maxlength="50"
  298. :disabled="form.isEdit"
  299. />
  300. </el-form-item>
  301. <el-form-item label="机构类型" prop="orgType">
  302. <el-select
  303. style="width: 100%"
  304. v-model="form.orgType"
  305. placeholder="请选择机构类型"
  306. @change="changeSelect"
  307. >
  308. <el-option
  309. v-for="dict in dict.type.sys_org_type"
  310. :key="dict.value"
  311. :label="dict.label"
  312. :value="`${dict.value}`"
  313. :disabled="form.isEdit || form.isComplete"
  314. ></el-option>
  315. </el-select>
  316. </el-form-item>
  317. <el-form-item label="调阅周期" prop="planCycle">
  318. <el-select
  319. style="width: 100%"
  320. v-model="form.planCycle"
  321. placeholder="请选择调阅周期"
  322. >
  323. <el-option
  324. v-for="dict in dict.type.sys_access_cycle"
  325. :key="dict.value"
  326. :label="dict.label"
  327. :value="`${dict.value}`"
  328. :disabled="form.isEdit || form.isComplete"
  329. ></el-option>
  330. </el-select>
  331. </el-form-item>
  332. <el-form-item label="调阅人员" prop="roleId">
  333. <el-select
  334. style="width: 100%"
  335. v-model="form.roleId"
  336. placeholder="请选择用户角色"
  337. @change="changeSelectOrgType"
  338. >
  339. <el-option
  340. v-for="item in roleList"
  341. :key="item.id"
  342. :label="item.roleName"
  343. :value="item.id"
  344. :disabled="form.isEdit || form.isComplete"
  345. ></el-option>
  346. </el-select>
  347. </el-form-item>
  348. <el-form-item
  349. label="调阅次数"
  350. prop="planFrequency"
  351. v-if="form.isEdit == true"
  352. >
  353. <el-input
  354. type="number"
  355. @change="numChange"
  356. v-model.number="form.planFrequency"
  357. placeholder="请输入调阅次数"
  358. :disabled="form.isComplete"
  359. />
  360. </el-form-item>
  361. <el-form-item
  362. label="调阅次数"
  363. prop="planFrequency"
  364. v-if="form.isEdit == false || form.isEdit == null"
  365. >
  366. <el-input
  367. type="number"
  368. :min="1"
  369. oninput="if(value<0)value=1"
  370. v-model.number="form.planFrequency"
  371. placeholder="请输入调阅次数"
  372. :disabled="form.isComplete"
  373. />
  374. </el-form-item>
  375. <!-- <el-form-item
  376. label="立即生效"
  377. prop="immediately"
  378. v-if="form.planCycle != 0 && this.issue == null"
  379. >
  380. <el-checkbox
  381. v-model="form.immediately"
  382. :disabled="form.isEdit || form.isComplete"
  383. >
  384. 默认从下个周期生成任务,
  385. <br />
  386. 勾选后从当前周期立即生成任务
  387. </el-checkbox>
  388. </el-form-item> -->
  389. <el-form-item
  390. prop="startTime"
  391. v-if="form.planCycle == 0"
  392. label="开始日期"
  393. >
  394. <el-date-picker
  395. style="width: 100%"
  396. v-model="form.startTime"
  397. @change="startDateChanged"
  398. :picker-options="startDatepickerOptions"
  399. align="right"
  400. type="date"
  401. placeholder="选择开始日期"
  402. :disabled="form.isEdit || form.isComplete"
  403. >
  404. </el-date-picker>
  405. </el-form-item>
  406. <el-form-item
  407. prop="endTime"
  408. v-if="form.planCycle == 0"
  409. label="结束日期"
  410. >
  411. <el-date-picker
  412. style="width: 100%"
  413. v-model="form.endTime"
  414. :picker-options="endDatepickerOptions"
  415. align="right"
  416. type="date"
  417. placeholder="选择结束日期"
  418. :disabled="form.isEdit || form.isComplete"
  419. >
  420. </el-date-picker>
  421. </el-form-item>
  422. <el-form-item label="备注" prop="description">
  423. <el-input
  424. v-model="form.description"
  425. type="textarea"
  426. placeholder="请输入备注"
  427. maxlength="200"
  428. :disabled="form.isEdit || form.isComplete"
  429. />
  430. </el-form-item>
  431. </el-form>
  432. <div slot="footer" class="dialog-footer">
  433. <el-button type="primary" @click="submitForm">确 定</el-button>
  434. <el-button @click="cancel">取 消</el-button>
  435. </div>
  436. </DialogCom>
  437. <DialogThreeState ref="DialogThreeState"> </DialogThreeState>
  438. </div>
  439. </template>
  440. <script>
  441. import {
  442. listPlan,
  443. getPlan,
  444. delPlan,
  445. addPlan,
  446. updatePlan,
  447. distribute,
  448. withdraw,
  449. } from "@/api/core/accessPlan";
  450. import { listRole, findRoleByType, getRole, allRole } from "@/api/system/role";
  451. import tableList from "@/mixins/tableList";
  452. import orgTree from "@/components/orgTree/orgQuerySelector.vue";
  453. import { deptTreeSelect } from "@/api/system/public";
  454. import KFileUpload from "@/components/K-FileUpload/index.vue";
  455. import { mapGetters } from "vuex";
  456. import DialogThreeState from "@/components/message/threeStateMessageBox.vue";
  457. import * as api from "@/api/core/accessPlan";
  458. export default {
  459. name: "Plan",
  460. dicts: [
  461. "sys_org_type",
  462. "sys_access_cycle",
  463. "sys_normal_disable",
  464. "plan_status",
  465. "is_full",
  466. "edu_plan_status",
  467. ],
  468. components: {
  469. orgTree,
  470. DialogThreeState,
  471. },
  472. computed: {
  473. ...mapGetters(["orgId"]),
  474. },
  475. data() {
  476. return {
  477. startDatepickerOptions: {
  478. disabledDate(time) {
  479. const date = new Date();
  480. date.setTime(date.getTime() - 3600 * 1000 * 24);
  481. return time.getTime() < date;
  482. },
  483. },
  484. endDatepickerOptions: {
  485. disabledDate: this.disabledDate,
  486. },
  487. // 遮罩层
  488. loading: true,
  489. // 选中数组
  490. ids: [],
  491. names: [],
  492. // 非单个停用
  493. single: true,
  494. // 非多个停用
  495. multiple: true,
  496. // 显示搜索条件
  497. showSearch: true,
  498. // 总条数
  499. total: 0,
  500. // 监控调阅计划表格数据
  501. planList: [],
  502. check: null,
  503. //角色列表
  504. roleList: [],
  505. // 弹出层标题
  506. title: "",
  507. // 是否显示弹出层
  508. open: false,
  509. // 查询参数
  510. queryParams: {
  511. pageNum: 1,
  512. pageSize: 10,
  513. planName: null,
  514. orgId: null,
  515. orgPath: null,
  516. orgName: null,
  517. orgType: null,
  518. roleId: null,
  519. planCycle: null,
  520. planFrequency: null,
  521. planStatus: null,
  522. description: null,
  523. isDeleted: null,
  524. isDistribute: null,
  525. checkSub: false,
  526. },
  527. // 表单参数
  528. form: {
  529. isEdit: null,
  530. parentOrgId: null,
  531. isComplete: null,
  532. parentFrequency: null,
  533. },
  534. isEdit: null,
  535. isComplete: null,
  536. // 表单校验
  537. rules: {
  538. planName: [
  539. { required: true, message: "请输入任务名称", trigger: "change" },
  540. ],
  541. orgType: [
  542. { required: true, message: "请选择机构类型", trigger: "change" },
  543. ],
  544. planCycle: [
  545. { required: true, message: "请选择调阅周期", trigger: "change" },
  546. ],
  547. roleId: [
  548. { required: true, message: "请选择调阅人员", trigger: "change" },
  549. ],
  550. planFrequency: [
  551. { required: true, message: "请选择调阅频次", trigger: "change" },
  552. ],
  553. },
  554. initNum: null,
  555. issue: null,
  556. };
  557. },
  558. created() {
  559. allRole().then((response) => {
  560. this.roleList = response.data;
  561. });
  562. },
  563. methods: {
  564. numChange(value) {
  565. if (value <= 0) this.form.planFrequency = 0;
  566. if (value <= this.initNum) this.form.planFrequency = this.initNum;
  567. //value = parseInt(value);
  568. },
  569. getPageIndex($index) {
  570. //表格序号
  571. return (
  572. (this.queryParams.pageNum - 1) * this.queryParams.pageSize + $index + 1
  573. );
  574. },
  575. getDefaultOrg(org) {
  576. this.orgName = org.name;
  577. },
  578. /** 查询监控调阅计划列表 */
  579. getList() {
  580. this.loading = true;
  581. listPlan(this.queryParams).then((response) => {
  582. this.planList = response.data.rows;
  583. this.check = response.check;
  584. this.isEdit = response.isEdit;
  585. this.xf = response.xf;
  586. this.total = response.data.total;
  587. this.loading = false;
  588. });
  589. },
  590. // 取消按钮
  591. cancel() {
  592. this.open = false;
  593. this.reset();
  594. },
  595. // 表单重置
  596. reset() {
  597. this.form = {
  598. id: null,
  599. planName: null,
  600. orgId: null,
  601. orgPath: null,
  602. orgName: null,
  603. orgType: "4",
  604. roleId: "121",
  605. planCycle: "2",
  606. planFrequency: 1,
  607. planStatus: "0",
  608. immediately: false,
  609. createTime: null,
  610. createBy: null,
  611. updateTime: null,
  612. updateBy: null,
  613. description: null,
  614. isDeleted: null,
  615. };
  616. this.resetForm("form");
  617. },
  618. getDefaultKey(key) {
  619. this.queryParams.orgId = key;
  620. this.getList();
  621. },
  622. //单选框状态改变
  623. checkChange(state) {
  624. this.queryParams.checkSub = state;
  625. this.handleQuery();
  626. },
  627. startDateChanged(time) {
  628. if (this.form.startTime > this.form.endTime) {
  629. this.form.endTime = this.form.startTime;
  630. }
  631. },
  632. disabledDate(time) {
  633. //小于开始日期禁止选择
  634. let startTime = new Date();
  635. startTime.setTime(startTime.getTime() - 3600 * 1000 * 24);
  636. if (this.form.startTime) {
  637. startTime = new Date(
  638. this.formatTime(this.form.startTime, "YYYY-MM-DD")
  639. );
  640. startTime.setTime(startTime.getTime() - 3600 * 1000 * 24);
  641. }
  642. return time.getTime() < new Date(startTime).getTime();
  643. },
  644. /** 搜索按钮操作 */
  645. handleQuery() {
  646. this.queryParams.pageNum = 1;
  647. this.getList();
  648. },
  649. // 节点单击事件
  650. clickTreeNode(data) {
  651. //this.initPlanRoleList();
  652. this.queryParams.orgId = data.id;
  653. this.handleQuery();
  654. },
  655. changeSelectOrgType(val) {
  656. getRole(val).then((response) => {
  657. this.form.orgType = response.data.orgType;
  658. });
  659. },
  660. changeSelect(val) {
  661. findRoleByType(val).then((response) => {
  662. this.roleList = response;
  663. this.queryParams.roleId = null;
  664. this.form.roleId = null;
  665. });
  666. },
  667. /** 查询机构树数据 */
  668. getDeptTree() {
  669. deptTreeSelect().then((response) => {
  670. this.deptOptions = response.data;
  671. this.handleQuery();
  672. });
  673. },
  674. /** 重置按钮操作 */
  675. resetQuery() {
  676. this.resetForm("queryForm");
  677. this.queryParams.orgId = this.orgId;
  678. this.queryParams.checkSub = false;
  679. this.$refs["orgTree"].setCheckSub(this.queryParams.checkSub)
  680. this.handleQuery();
  681. allRole().then((response) => {
  682. this.roleList = response.data;
  683. });
  684. },
  685. // 多选框选中数据
  686. handleSelectionChange(selection) {
  687. this.ids = selection.map((item) => item.id);
  688. this.names = selection.map((item) => item.planName);
  689. this.single = selection.length !== 1;
  690. this.multiple = !selection.length;
  691. },
  692. /** 新增按钮操作 */
  693. handleAdd() {
  694. this.reset();
  695. allRole().then((response) => {
  696. this.roleList = response.data;
  697. });
  698. this.issue = null;
  699. this.open = true;
  700. this.title = "新增监控调阅任务";
  701. },
  702. /** 修改按钮操作 */
  703. handleUpdate(row) {
  704. this.reset();
  705. const id = row.id || this.ids;
  706. getPlan(id).then((response) => {
  707. this.form = response.data;
  708. this.initNum = response.data.parentFrequency;
  709. this.issue = response.data.updateBy;
  710. this.open = true;
  711. this.title = "编辑监控调阅任务";
  712. findRoleByType(this.form.orgType).then((response) => {
  713. this.roleList = response;
  714. });
  715. });
  716. },
  717. /** 提交按钮 */
  718. submitForm() {
  719. this.$refs["form"].validate((valid) => {
  720. if (valid) {
  721. let request = {...this.form};
  722. if (request.id != null) {
  723. let msg = "";
  724. if (request.planStatus == 1) {
  725. if(request.isComplete==true){
  726. msg = "因不存在已完成任务,本次修改内容将立即生效,是否确认提交?";
  727. }else{
  728. msg = "因存在已完成任务,本次修改内容将下周期生效,是否确认提交?";
  729. }
  730. }else{
  731. msg = "是否确认修改?";
  732. }
  733. this.$modal
  734. .confirm(msg)
  735. .then(function () {
  736. return updatePlan(request);
  737. })
  738. .then(() => {
  739. this.$modal.msgSuccess("编辑成功");
  740. this.open = false;
  741. this.getList();
  742. })
  743. .catch(() => {
  744. });
  745. // updatePlan(this.form).then((response) => {
  746. // this.$modal.msgSuccess("修改成功");
  747. // this.open = false;
  748. // this.getList();
  749. // });
  750. } else {
  751. addPlan(this.form).then((response) => {
  752. this.$modal.msgSuccess("新增成功");
  753. this.open = false;
  754. this.getList();
  755. });
  756. }
  757. }
  758. });
  759. },
  760. /** 删除按钮操作 */
  761. handleDelete(row) {
  762. const ids = row.id || this.ids;
  763. const names = row.planName || this.names;
  764. let msg = "";
  765. if (row.planStatus == 1) {
  766. if(row.planCycle==1){
  767. msg = "本次删除将强制删除今日所有任务?";
  768. }else{
  769. msg = "本次删除将强制删除当前任务时间及以后所有任务";
  770. }
  771. }else {
  772. msg = '是否确认删除名称为"' + row.planName + '"的任务?';
  773. }
  774. // this.$modal
  775. // .confirm("删除计划会清除本周期所有任务,确定执行?")
  776. // .then(function () {
  777. // return delPlan(ids);
  778. // })
  779. // .then(() => {
  780. // this.getList();
  781. // this.$modal.msgSuccess("删除成功");
  782. // })
  783. // .catch(() => {});
  784. this.$modal
  785. .confirm(msg)
  786. .then(() => {
  787. // 用户点击了确认按钮
  788. console.log("执行操作...");
  789. this.loading = true;
  790. api
  791. .delPlan(row.id)
  792. .then(() => {
  793. this.getList();
  794. this.loading = false;
  795. this.$modal.msgSuccess("删除成功");
  796. })
  797. .catch(() => {
  798. this.loading = false;
  799. });
  800. })
  801. .catch(() => {
  802. // 用户点击了取消按钮
  803. console.log("取消操作...");
  804. this.loading = false;
  805. });
  806. },
  807. // handDistribute(row) {
  808. // let msg = "";
  809. // if(row.planStatus==0){
  810. // this.$modal
  811. // .confirm("请选择下发后立即生成或下周期生成任务")
  812. // .then(function () {
  813. // return distribute(row.id);
  814. // })
  815. // .then(() => {
  816. // this.getList();
  817. // this.$modal.msgSuccess("下发成功");
  818. // })
  819. // .catch(() => {});
  820. // }
  821. // },
  822. handDistribute(row) {
  823. let msg = "";
  824. if(row.planStatus==0){
  825. if (row.planCycle==0) {
  826. this.$modal
  827. .confirm("确定下发任务并立即生成任务?")
  828. .then(() => {
  829. this.distribute(row.id, true);
  830. });
  831. }else{
  832. let msg = "请选择下发后立即生成或下周期生成任务?";
  833. this.$refs["DialogThreeState"].show(
  834. msg,
  835. (state) => {
  836. if (state == 0 || state == 1) {
  837. this.distribute(row.id, state == 1);
  838. }
  839. },
  840. {
  841. yesText: "立即生成",
  842. noText: "下周期",
  843. cancelText: "取消",
  844. }
  845. );
  846. }
  847. }else if(row.planCycle==0 &&row.planStatus==2){
  848. this.distribute(row.id, true);
  849. // this.$modal
  850. // .confirm("确定下发任务并立即生成任务?")
  851. // .then(() => {
  852. // this.distribute(row.id, true);
  853. // });
  854. } else{
  855. this.$modal
  856. .confirm("因存在已完成任务,是否确定从下周期生成任务?")
  857. .then(() => {
  858. this.distribute(row.id, false);
  859. });
  860. }
  861. },
  862. distribute(id, immediateEffect) {
  863. this.loading = true;
  864. api
  865. .distribute(id, immediateEffect)
  866. .then((response) => {
  867. if (response.data == 0) {
  868. this.loading = false;
  869. } else {
  870. this.getList();
  871. this.loading = false;
  872. }
  873. })
  874. .catch((response) => {
  875. this.getList();
  876. this.loading = false;
  877. });
  878. },
  879. handWithdraw(row) {
  880. if (row.isComplete) {
  881. this.$modal
  882. .confirm("因不存在已完成任务,撤回后将删除所有生成任务")
  883. .then(function () {
  884. return withdraw(row.id);
  885. })
  886. .then(() => {
  887. this.getList();
  888. this.$modal.msgSuccess("撤回成功");
  889. })
  890. .catch(() => {});
  891. }else{
  892. this.$modal
  893. .confirm("因存在已完成任务,撤回后下周期起将不再生成任务")
  894. .then(function () {
  895. return withdraw(row.id);
  896. })
  897. .then(() => {
  898. this.getList();
  899. this.$modal.msgSuccess("撤回成功");
  900. })
  901. .catch(() => {});
  902. }
  903. },
  904. /** 导出按钮操作 */
  905. handleExport() {
  906. this.download(
  907. "system/plan/export",
  908. {
  909. ...this.queryParams,
  910. },
  911. `plan_${new Date().getTime()}.xlsx`
  912. );
  913. },
  914. },
  915. };
  916. </script>