index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793
  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:add']"
  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. >撤回
  254. </el-button>
  255. <el-button
  256. size="mini"
  257. type="text"
  258. icon="el-icon-edit-outline"
  259. @click="handleUpdate(scope.row)"
  260. v-if="scope.row.orgId == isEdit && check == true"
  261. v-hasPermi="['core:accessPlan:edit', 'core:accessPlan:query']"
  262. >编辑
  263. </el-button>
  264. <el-button
  265. size="mini"
  266. type="text"
  267. v-if="
  268. scope.row.parentOrgId == isEdit &&
  269. scope.row.parentId == null &&
  270. check == true
  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. </div>
  438. </template>
  439. <script>
  440. import {
  441. listPlan,
  442. getPlan,
  443. delPlan,
  444. addPlan,
  445. updatePlan,
  446. distribute,
  447. withdraw,
  448. } from "@/api/core/accessPlan";
  449. import { listRole, findRoleByType, getRole, allRole } from "@/api/system/role";
  450. import tableList from "@/mixins/tableList";
  451. import orgTree from "@/components/orgTree/orgQuerySelector.vue";
  452. import { deptTreeSelect } from "@/api/system/public";
  453. import KFileUpload from "@/components/K-FileUpload/index.vue";
  454. import { mapGetters } from "vuex";
  455. export default {
  456. name: "Plan",
  457. dicts: [
  458. "sys_org_type",
  459. "sys_access_cycle",
  460. "sys_normal_disable",
  461. "plan_status",
  462. "is_full",
  463. "edu_plan_status",
  464. ],
  465. components: {
  466. orgTree,
  467. },
  468. computed: {
  469. ...mapGetters(["orgId"]),
  470. },
  471. data() {
  472. return {
  473. startDatepickerOptions: {
  474. disabledDate(time) {
  475. const date = new Date();
  476. date.setTime(date.getTime() - 3600 * 1000 * 24);
  477. return time.getTime() < date;
  478. },
  479. },
  480. endDatepickerOptions: {
  481. disabledDate: this.disabledDate,
  482. },
  483. // 遮罩层
  484. loading: true,
  485. // 选中数组
  486. ids: [],
  487. names: [],
  488. // 非单个停用
  489. single: true,
  490. // 非多个停用
  491. multiple: true,
  492. // 显示搜索条件
  493. showSearch: true,
  494. // 总条数
  495. total: 0,
  496. // 监控调阅计划表格数据
  497. planList: [],
  498. check: null,
  499. //角色列表
  500. roleList: [],
  501. // 弹出层标题
  502. title: "",
  503. // 是否显示弹出层
  504. open: false,
  505. // 查询参数
  506. queryParams: {
  507. pageNum: 1,
  508. pageSize: 10,
  509. planName: null,
  510. orgId: null,
  511. orgPath: null,
  512. orgName: null,
  513. orgType: null,
  514. roleId: null,
  515. planCycle: null,
  516. planFrequency: null,
  517. planStatus: null,
  518. description: null,
  519. isDeleted: null,
  520. isDistribute: null,
  521. checkSub: false,
  522. },
  523. // 表单参数
  524. form: {
  525. isEdit: null,
  526. parentOrgId: null,
  527. isComplete: null,
  528. parentFrequency: null,
  529. },
  530. isEdit: null,
  531. isComplete: null,
  532. // 表单校验
  533. rules: {
  534. planName: [
  535. { required: true, message: "请输入任务名称", trigger: "change" },
  536. ],
  537. orgType: [
  538. { required: true, message: "请选择机构类型", trigger: "change" },
  539. ],
  540. planCycle: [
  541. { required: true, message: "请选择调阅周期", trigger: "change" },
  542. ],
  543. roleId: [
  544. { required: true, message: "请选择调阅人员", trigger: "change" },
  545. ],
  546. planFrequency: [
  547. { required: true, message: "请选择调阅频次", trigger: "change" },
  548. ],
  549. },
  550. initNum: null,
  551. issue: null,
  552. };
  553. },
  554. created() {
  555. allRole().then((response) => {
  556. this.roleList = response.data;
  557. });
  558. },
  559. methods: {
  560. numChange(value) {
  561. if (value <= 0) this.form.planFrequency = 0;
  562. if (value <= this.initNum) this.form.planFrequency = this.initNum;
  563. //value = parseInt(value);
  564. },
  565. getPageIndex($index) {
  566. //表格序号
  567. return (
  568. (this.queryParams.pageNum - 1) * this.queryParams.pageSize + $index + 1
  569. );
  570. },
  571. getDefaultOrg(org) {
  572. this.orgName = org.name;
  573. },
  574. /** 查询监控调阅计划列表 */
  575. getList() {
  576. this.loading = true;
  577. listPlan(this.queryParams).then((response) => {
  578. this.planList = response.data.rows;
  579. this.check = response.check;
  580. this.isEdit = response.isEdit;
  581. this.xf = response.xf;
  582. this.total = response.data.total;
  583. this.loading = false;
  584. });
  585. },
  586. // 取消按钮
  587. cancel() {
  588. this.open = false;
  589. this.reset();
  590. },
  591. // 表单重置
  592. reset() {
  593. this.form = {
  594. id: null,
  595. planName: null,
  596. orgId: null,
  597. orgPath: null,
  598. orgName: null,
  599. orgType: "4",
  600. roleId: "121",
  601. planCycle: "2",
  602. planFrequency: 1,
  603. planStatus: "0",
  604. immediately: false,
  605. createTime: null,
  606. createBy: null,
  607. updateTime: null,
  608. updateBy: null,
  609. description: null,
  610. isDeleted: null,
  611. };
  612. this.resetForm("form");
  613. },
  614. getDefaultKey(key) {
  615. this.queryParams.orgId = key;
  616. this.getList();
  617. },
  618. //单选框状态改变
  619. checkChange(state) {
  620. this.queryParams.checkSub = state;
  621. this.handleQuery();
  622. },
  623. startDateChanged(time) {
  624. if (this.form.startTime > this.form.endTime) {
  625. this.form.endTime = this.form.startTime;
  626. }
  627. },
  628. disabledDate(time) {
  629. //小于开始日期禁止选择
  630. let startTime = new Date();
  631. startTime.setTime(startTime.getTime() - 3600 * 1000 * 24);
  632. if (this.form.startTime) {
  633. startTime = new Date(
  634. this.formatTime(this.form.startTime, "YYYY-MM-DD")
  635. );
  636. startTime.setTime(startTime.getTime() - 3600 * 1000 * 24);
  637. }
  638. return time.getTime() < new Date(startTime).getTime();
  639. },
  640. /** 搜索按钮操作 */
  641. handleQuery() {
  642. this.queryParams.pageNum = 1;
  643. this.getList();
  644. },
  645. // 节点单击事件
  646. clickTreeNode(data) {
  647. //this.initPlanRoleList();
  648. this.queryParams.orgId = data.id;
  649. this.handleQuery();
  650. },
  651. changeSelectOrgType(val) {
  652. getRole(val).then((response) => {
  653. this.form.orgType = response.data.orgType;
  654. });
  655. },
  656. changeSelect(val) {
  657. findRoleByType(val).then((response) => {
  658. this.roleList = response;
  659. this.queryParams.roleId = null;
  660. this.form.roleId = null;
  661. });
  662. },
  663. /** 查询机构树数据 */
  664. getDeptTree() {
  665. deptTreeSelect().then((response) => {
  666. this.deptOptions = response.data;
  667. this.handleQuery();
  668. });
  669. },
  670. /** 重置按钮操作 */
  671. resetQuery() {
  672. this.resetForm("queryForm");
  673. this.queryParams.orgId = this.orgId;
  674. this.queryParams.checkSub = false;
  675. this.$refs["orgTree"].setCheckSub(this.queryParams.checkSub)
  676. this.handleQuery();
  677. allRole().then((response) => {
  678. this.roleList = response.data;
  679. });
  680. },
  681. // 多选框选中数据
  682. handleSelectionChange(selection) {
  683. this.ids = selection.map((item) => item.id);
  684. this.names = selection.map((item) => item.planName);
  685. this.single = selection.length !== 1;
  686. this.multiple = !selection.length;
  687. },
  688. /** 新增按钮操作 */
  689. handleAdd() {
  690. this.reset();
  691. allRole().then((response) => {
  692. this.roleList = response.data;
  693. });
  694. this.issue = null;
  695. this.open = true;
  696. this.title = "新增监控调阅任务";
  697. },
  698. /** 修改按钮操作 */
  699. handleUpdate(row) {
  700. this.reset();
  701. const id = row.id || this.ids;
  702. getPlan(id).then((response) => {
  703. this.form = response.data;
  704. this.initNum = response.data.parentFrequency;
  705. this.issue = response.data.updateBy;
  706. this.open = true;
  707. this.title = "编辑监控调阅任务";
  708. findRoleByType(this.form.orgType).then((response) => {
  709. this.roleList = response;
  710. });
  711. });
  712. },
  713. /** 提交按钮 */
  714. submitForm() {
  715. this.$refs["form"].validate((valid) => {
  716. if (valid) {
  717. if (this.form.id != null) {
  718. updatePlan(this.form).then((response) => {
  719. this.$modal.msgSuccess("修改成功");
  720. this.open = false;
  721. this.getList();
  722. });
  723. } else {
  724. addPlan(this.form).then((response) => {
  725. this.$modal.msgSuccess("新增成功");
  726. this.open = false;
  727. this.getList();
  728. });
  729. }
  730. }
  731. });
  732. },
  733. /** 删除按钮操作 */
  734. handleDelete(row) {
  735. const ids = row.id || this.ids;
  736. const names = row.planName || this.names;
  737. this.$modal
  738. .confirm("删除计划会清除本周期所有任务,确定执行?")
  739. .then(function () {
  740. return delPlan(ids);
  741. })
  742. .then(() => {
  743. this.getList();
  744. this.$modal.msgSuccess("删除成功");
  745. })
  746. .catch(() => {});
  747. },
  748. handDistribute(row) {
  749. this.$modal
  750. .confirm("下发计划会生成本周期所有任务,确定执行?")
  751. .then(function () {
  752. return distribute(row.id);
  753. })
  754. .then(() => {
  755. this.getList();
  756. this.$modal.msgSuccess("下发成功");
  757. })
  758. .catch(() => {});
  759. },
  760. handWithdraw(row) {
  761. this.$modal
  762. .confirm("撤回计划会清除本周期所有任务,确定执行?")
  763. .then(function () {
  764. return withdraw(row.id);
  765. })
  766. .then(() => {
  767. this.getList();
  768. this.$modal.msgSuccess("撤回成功");
  769. })
  770. .catch(() => {});
  771. },
  772. /** 导出按钮操作 */
  773. handleExport() {
  774. this.download(
  775. "system/plan/export",
  776. {
  777. ...this.queryParams,
  778. },
  779. `plan_${new Date().getTime()}.xlsx`
  780. );
  781. },
  782. },
  783. };
  784. </script>