scheduleTask.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  1. <template>
  2. <div style="background:#fff ;padding:25px;position: relative">
  3. <div class="table-page-search-wrapper">
  4. <a-form layout="inline">
  5. <a-row :gutter="48">
  6. <a-col :md="8" :sm="24">
  7. <a-form-item label="任务名称">
  8. <a-input v-model="queryParam.taskName" placeholder="请填写任务名称" />
  9. </a-form-item>
  10. </a-col>
  11. <a-col :md="8" :sm="24">
  12. <a-form-item label="bean名称">
  13. <a-input v-model="queryParam.beanName" placeholder="请填写bean名称" />
  14. </a-form-item>
  15. </a-col>
  16. <template v-if="advanced">
  17. <a-col :md="8" :sm="24">
  18. <a-form-item label="cron表达式">
  19. <a-input v-model="queryParam.cronExpression" placeholder="请填写cron表达式" />
  20. </a-form-item>
  21. </a-col>
  22. <a-col :md="8" :sm="24">
  23. <a-form-item label="任务状态">
  24. <a-select placeholder="请选择" v-model="queryParam.taskStatus">
  25. <a-select-option value="">全部</a-select-option>
  26. <a-select-option value="enabled">启用</a-select-option>
  27. <a-select-option value="disabled">禁用</a-select-option>
  28. </a-select>
  29. </a-form-item>
  30. </a-col>
  31. </template>
  32. <a-col :md="!advanced && 8 || 24" :sm="24">
  33. <span class="table-page-search-submitButtons" :style="advanced && { float: 'right', overflow: 'hidden' } || {} ">
  34. <a-button type="primary" @click="queryTask">查询</a-button>
  35. <a-button style="margin-left: 8px" @click="resetQueryParam">重置</a-button>
  36. <a @click="toggleAdvanced" style="margin-left: 8px">
  37. {{ advanced ? '收起' : '展开' }}
  38. <a-icon :type="advanced ? 'up' : 'down'" />
  39. </a>
  40. </span>
  41. </a-col>
  42. </a-row>
  43. </a-form>
  44. </div>
  45. <!--功能按钮-->
  46. <div class="table-operator">
  47. <a-button type="primary" icon="plus" @click="modifyTask('add')">新建</a-button>
  48. <a-button type="primary" icon="edit" @click="modifyTask('edit')">编辑</a-button>
  49. <a-button type="primary" icon="delete" @click="modifyTask('delete')">删除</a-button>
  50. <a-button type="primary" icon="setting" @click="modifyTask('run')">立即执行</a-button>
  51. </div>
  52. <!--表格-->
  53. <a-table size="middle" :columns="columns" :dataSource="loadDatas" :loading="loading" :pagination="pagination" :rowSelection="{type:'radio', selectedRowKeys: selectedRowKeys, onChange: updateSelect }">
  54. <span slot="taskStatus" slot-scope="record">
  55. <a-tag v-if="record=='enabled'" color="#87d068">启用</a-tag>
  56. <a-tag v-else-if="record=='disabled'" color="#ff0000">禁用</a-tag>
  57. <a-tag v-else-if="record=='paused'" color="#ff976a">已暂停</a-tag>
  58. </span>
  59. <template slot="Action" slot-scope="text,record,index">
  60. <span>
  61. <a href="javascript:;" @click="modifyTask('pause', record, index)">暂停</a>
  62. <a-divider type="vertical" />
  63. <a href="javascript:;" @click="modifyTask('resume', record, index)">恢复</a>
  64. </span>
  65. </template>
  66. </a-table>
  67. <!--分页-->
  68. <Pagination :current="currentPage" :pageSizeOptions="pageSizeOptions" :pageSize="pageSize" :total="totalCount" :totalPage="totalPage" @change="changePage"></Pagination>
  69. <!-- 新建编辑模态框 -->
  70. <a-modal :width="editType=='add'?'800px':editType=='edit'?'800px':'400px'" :title="modalTitle" :visible="visible" @ok="handleOk" :confirmLoading="confirmLoading" @cancel="handleCancel">
  71. <p v-if="editType=='delete'">确认删除此任务?</p>
  72. <p v-else-if="editType=='run'">确认立即执行此任务?</p>
  73. <p v-else-if="editType=='pause'">确认暂停此任务?</p>
  74. <p v-else-if="editType=='resume'">确认恢复此任务?</p>
  75. <div class="modal-container" v-else>
  76. <a-form>
  77. <a-row :gutter="24">
  78. <a-col :md="12" :sm="24">
  79. <a-form-item label="任务名称" :required="true">
  80. <a-input v-model="froms.taskName" placeholder="请填写任务名称" />
  81. </a-form-item>
  82. </a-col>
  83. <a-col :md="12" :sm="24">
  84. <a-form-item label="bean名称" :required="true">
  85. <a-input v-model="froms.beanName" placeholder="请填写登录名" />
  86. </a-form-item>
  87. </a-col>
  88. <a-col :md="12" :sm="24">
  89. <a-form-item label="cron表达式" :required="true">
  90. <a-input v-model="froms.cronExpression" placeholder="请填写cron表达式" />
  91. </a-form-item>
  92. </a-col>
  93. <a-col :md="12" :sm="24">
  94. <a-form-item label="方式名" :required="true">
  95. <a-input v-model="froms.methodName" placeholder="请填写方式名" />
  96. </a-form-item>
  97. </a-col>
  98. <a-col :md="12" :sm="24">
  99. <a-form-item label="参数">
  100. <a-input v-model="froms.methodParams" placeholder="请填写参数" />
  101. </a-form-item>
  102. </a-col>
  103. <a-col :md="12" :sm="24">
  104. <a-form-item label="备注">
  105. <a-input v-model="froms.taskRemark" placeholder="请填写备注" />
  106. </a-form-item>
  107. </a-col>
  108. <a-col :md="12" :sm="24" v-show="editType=='edit'">
  109. <a-form-item label="是否启用">
  110. <a-select v-model="froms.taskStatus" placeholder="请选择">
  111. <a-select-option value="enabled">启用</a-select-option>
  112. <a-select-option value="disabled">禁用</a-select-option>
  113. </a-select>
  114. </a-form-item>
  115. </a-col>
  116. </a-row>
  117. </a-form>
  118. </div>
  119. </a-modal>
  120. </div>
  121. </template>
  122. <script>
  123. import Pagination from "@/components/pagination/pagination";
  124. import {
  125. BASEURL,
  126. METHOD_GET,
  127. METHOD_POST,
  128. METHOD_DELETE,
  129. METHOD_PUT
  130. } from "@/api/public";
  131. const columns = [
  132. {
  133. title: "任务名称",
  134. width: "10%",
  135. dataIndex: "taskName",
  136. align: "center"
  137. },
  138. {
  139. title: "bean名称",
  140. width: "15%",
  141. dataIndex: "beanName",
  142. align: "center"
  143. },
  144. {
  145. title: "Cron表达式",
  146. width: "15%",
  147. dataIndex: "cronExpression",
  148. align: "center"
  149. },
  150. {
  151. title: "方式名",
  152. width: "10%",
  153. dataIndex: "methodName",
  154. align: "center"
  155. },
  156. {
  157. title: "参数",
  158. width: "15%",
  159. dataIndex: "methodParams",
  160. align: "center"
  161. },
  162. {
  163. title: "状态",
  164. width: "8%",
  165. dataIndex: "taskStatus",
  166. align: "center",
  167. scopedSlots: { customRender: "taskStatus" }
  168. },
  169. {
  170. title: "创建时间",
  171. width: "15%",
  172. dataIndex: "addDataTime",
  173. align: "center"
  174. },
  175. {
  176. title: "操作",
  177. width: "12%",
  178. dataIndex: "Action",
  179. align: "center",
  180. scopedSlots: { customRender: "Action" }
  181. }
  182. ];
  183. export default {
  184. name: "scheduleTask",
  185. components: {
  186. Pagination
  187. },
  188. data() {
  189. return {
  190. advanced: false, // 高级搜索 展开/关闭
  191. queryParam: {
  192. taskName: null,
  193. beanName: null,
  194. cronExpression: null,
  195. taskStatus: ""
  196. }, //搜索查询参数
  197. columns, //表头
  198. loadDatas: [], //表格请求的数据
  199. pagination: false, //不显示分页
  200. //分页
  201. pageSizeOptions: ["10", "20", "50", "100"],
  202. currentPage: 1, //当前的页数
  203. pageSize: 10, //每页显示的条数
  204. totalPage: 0, //总页数
  205. totalCount: 0, //总条数
  206. loading: true,
  207. selectedRowKeys: [], //选中行键
  208. selectedRows: [], //选中行键值,
  209. froms: {},
  210. editType: "add",
  211. modalTitle: "新建",
  212. visible: !1,
  213. confirmLoading: !1
  214. };
  215. },
  216. methods: {
  217. initSelectedRows() {
  218. this.selectedRowKeys = [];
  219. this.selectedRows = [];
  220. },
  221. //高级搜索 展开/收起
  222. toggleAdvanced() {
  223. this.advanced = !this.advanced;
  224. },
  225. //查询
  226. queryTask() {
  227. this.getTaskList();
  228. },
  229. //重置
  230. resetQueryParam() {
  231. this.queryParam.taskName = null;
  232. this.queryParam.beanName = null;
  233. this.queryParam.cronExpression = null;
  234. this.queryParam.taskStatus = "";
  235. },
  236. //选择跟新table中的某项
  237. updateSelect(selectedRowKeys, selectedRows) {
  238. this.selectedRowKeys = selectedRowKeys;
  239. this.selectedRows = selectedRows;
  240. },
  241. //取消
  242. handleCancel() {
  243. this.visible = !1;
  244. },
  245. //确认
  246. handleOk() {
  247. let _type = this.editType;
  248. if (_type == "delete") {
  249. this.deleteTask();
  250. } else if (_type == "run") {
  251. this.runTask();
  252. } else if (_type == "pause") {
  253. this.pauseTask();
  254. } else if (_type == "resume") {
  255. this.resumeTask();
  256. } else {
  257. const flag = this.checkData();
  258. flag && this.addOrEditTask();
  259. }
  260. },
  261. //操作任务
  262. modifyTask(e, o, index) {
  263. this.editType = e;
  264. if (this.editType == "add") {
  265. this.modalTitle = "新建";
  266. this.visible = !0;
  267. this.froms = {
  268. taskName: null,
  269. beanName: null,
  270. cronExpression: null,
  271. methodName: null,
  272. methodParams: null,
  273. taskRemark: null,
  274. taskStatus: 'enabled'
  275. };
  276. } else if (this.editType == "edit") {
  277. if (this.selectedRows.length < 1) {
  278. this.$message.warning("请选择编辑项!");
  279. return false;
  280. } else {
  281. this.modalTitle = "编辑";
  282. this.getTaskInfo();
  283. }
  284. } else if (this.editType == "delete") {
  285. if (this.selectedRows.length < 1) {
  286. this.$message.warning("请选择删除项!");
  287. return false;
  288. } else {
  289. this.modalTitle = "删除";
  290. this.visible = !0;
  291. }
  292. } else if (this.editType == "run") {
  293. if (this.selectedRows.length < 1) {
  294. this.$message.warning("请选择立即执行项!");
  295. return false;
  296. } else {
  297. this.modalTitle = "立即执行";
  298. this.visible = !0;
  299. }
  300. } else if (this.editType == "pause") {
  301. this.modalTitle = "暂停";
  302. this.visible = !0;
  303. this.selectedRowKeys[0] = index;
  304. this.selectedRows[0] = o;
  305. } else if (this.editType == "resume") {
  306. this.modalTitle = "恢复";
  307. this.visible = !0;
  308. this.selectedRowKeys[0] = index;
  309. this.selectedRows[0] = o;
  310. }
  311. },
  312. //数据校验
  313. checkData() {
  314. let flag = !0;
  315. if (!this.froms.taskName) {
  316. flag = !1;
  317. this.$message.warning("请填写任务名称!");
  318. return false;
  319. } else if (!this.froms.beanName) {
  320. flag = !1;
  321. this.$message.warning("请填写bean名称!");
  322. return false;
  323. } else if (!this.froms.cronExpression) {
  324. flag = !1;
  325. this.$message.warning("请填写cron表达式!");
  326. return false;
  327. } else if (!this.froms.methodName) {
  328. flag = !1;
  329. this.$message.warning("请填写方式名!");
  330. return false;
  331. } else {
  332. return flag;
  333. }
  334. },
  335. //添加任务
  336. addOrEditTask() {
  337. let _type = this.editType;
  338. let data = this.froms;
  339. this.axios({
  340. url: _type == "add" ? "task/schedule/add" : "task/schedule/modify",
  341. method: _type == "add" ? METHOD_POST : METHOD_PUT,
  342. data: data
  343. })
  344. .then(res => {
  345. if (res.code == 0) {
  346. this.visible = !1;
  347. this.$message.success("操作成功!");
  348. this.getTaskList();
  349. } else {
  350. this.$message.error(res.msg);
  351. }
  352. })
  353. .catch(err => {
  354. console.log(err);
  355. });
  356. },
  357. //删除任务
  358. deleteTask() {
  359. let _id = this.selectedRows[0].id;
  360. this.axios({
  361. url: "task/schedule/remove/" + _id,
  362. method: METHOD_DELETE
  363. })
  364. .then(res => {
  365. if (res.code == 0) {
  366. this.visible = !1;
  367. this.$message.success("删除成功!");
  368. this.getTaskList();
  369. } else {
  370. this.$message.error(res.msg);
  371. }
  372. })
  373. .catch(err => {
  374. console.log(err);
  375. });
  376. },
  377. //立即执行任务
  378. runTask() {
  379. let _id = this.selectedRows[0].id;
  380. this.axios({
  381. url: "task/schedule/run/" + _id,
  382. method: METHOD_POST
  383. })
  384. .then(res => {
  385. if (res.code == 0) {
  386. this.visible = !1;
  387. this.$message.success("任务已执行!");
  388. this.getTaskList();
  389. } else {
  390. this.$message.error(res.msg);
  391. }
  392. })
  393. .catch(err => {
  394. console.log(err);
  395. });
  396. },
  397. //暂停任务
  398. pauseTask() {
  399. let _id = this.selectedRows[0].id;
  400. this.axios({
  401. url: "task/schedule/pause/" + _id,
  402. method: METHOD_PUT
  403. })
  404. .then(res => {
  405. if (res.code == 0) {
  406. this.visible = !1;
  407. this.$message.success("任务已暂停!");
  408. this.getTaskList();
  409. } else {
  410. this.$message.error(res.msg);
  411. }
  412. })
  413. .catch(err => {
  414. console.log(err);
  415. });
  416. },
  417. //恢复任务
  418. resumeTask() {
  419. let _id = this.selectedRows[0].id;
  420. this.axios({
  421. url: "task/schedule/resume/" + _id,
  422. method: METHOD_PUT
  423. })
  424. .then(res => {
  425. if (res.code == 0) {
  426. this.visible = !1;
  427. this.$message.success("任务已恢复!");
  428. this.getTaskList();
  429. } else {
  430. this.$message.error(res.msg);
  431. }
  432. })
  433. .catch(err => {
  434. console.log(err);
  435. });
  436. },
  437. // 获取任务数据列表
  438. getTaskList() {
  439. this.initSelectedRows();
  440. let _data = {
  441. pageSize: this.pageSize,
  442. currentPage: this.currentPage,
  443. where: this.queryParam
  444. };
  445. this.axios({
  446. url: "task/schedule/pageList",
  447. method: METHOD_POST,
  448. data: _data
  449. })
  450. .then(res => {
  451. this.loading = !1;
  452. if (res.code == 0) {
  453. this.currentPage = res.page.currentPage;
  454. this.pageSize = res.page.pageSize;
  455. this.totalPage = res.page.totalPage;
  456. this.totalCount = res.page.totalCount;
  457. if (res.page.list.length > 0) {
  458. this.loadDatas = res.page.list;
  459. } else {
  460. this.loadDatas = [];
  461. }
  462. } else {
  463. this.$message.error(res.msg);
  464. }
  465. })
  466. .catch(err => {
  467. console.log(err);
  468. });
  469. },
  470. //获取角色信息
  471. getTaskInfo(id) {
  472. let _id = null;
  473. if (id) _id = id;
  474. else _id = this.selectedRows[0].id;
  475. this.axios({
  476. url: "task/schedule/info/" + _id,
  477. method: METHOD_GET
  478. })
  479. .then(res => {
  480. if (res.code == 0) {
  481. this.visible = !0;
  482. this.froms = res.schedule;
  483. } else {
  484. this.$message.error(res.msg);
  485. }
  486. })
  487. .catch(err => {
  488. console.log(err);
  489. });
  490. },
  491. //分页
  492. changePage(obj) {
  493. this.currentPage = obj.currentPage;
  494. this.pageSize = obj.pageSize;
  495. this.getTaskList();
  496. }
  497. },
  498. created() {
  499. //列表数据请求
  500. this.getTaskList();
  501. }
  502. };
  503. </script>
  504. <style scoped>
  505. .table-operator {
  506. margin-bottom: 10px;
  507. }
  508. .ant-pagination {
  509. margin-top: 20px;
  510. text-align: center;
  511. }
  512. </style>