index.vue 26 KB

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