schedule.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <template>
  2. <div class="mod-schedule">
  3. <template v-if="!addOrUpdateVisible && !logVisible">
  4. <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
  5. <el-form-item>
  6. <el-input v-model="dataForm.beanName" placeholder="bean名称" clearable></el-input>
  7. </el-form-item>
  8. <el-form-item>
  9. <el-button @click="getDataList()">查询</el-button>
  10. <el-button v-if="isAuth('sys:schedule:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
  11. <el-button v-if="isAuth('sys:schedule:delete')" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0">批量删除</el-button>
  12. <el-button v-if="isAuth('sys:schedule:pause')" type="danger" @click="pauseHandle()" :disabled="dataListSelections.length <= 0">批量暂停</el-button>
  13. <el-button v-if="isAuth('sys:schedule:resume')" type="danger" @click="resumeHandle()" :disabled="dataListSelections.length <= 0">批量恢复</el-button>
  14. <el-button v-if="isAuth('sys:schedule:run')" type="danger" @click="runHandle()" :disabled="dataListSelections.length <= 0">批量立即执行</el-button>
  15. <el-button v-if="isAuth('sys:schedule:log')" type="success" @click="logHandle()">日志列表</el-button>
  16. </el-form-item>
  17. </el-form>
  18. <el-table
  19. :data="dataList"
  20. border
  21. v-loading="dataListLoading"
  22. @selection-change="selectionChangeHandle"
  23. style="width: 100%;">
  24. <el-table-column
  25. type="selection"
  26. header-align="center"
  27. align="center"
  28. width="50">
  29. </el-table-column>
  30. <el-table-column
  31. prop="jobId"
  32. header-align="center"
  33. align="center"
  34. min-width="100"
  35. :show-tooltip-when-overflow="true"
  36. label="ID">
  37. </el-table-column>
  38. <el-table-column
  39. prop="beanName"
  40. header-align="center"
  41. align="center"
  42. min-width="120"
  43. :show-tooltip-when-overflow="true"
  44. label="bean名称">
  45. </el-table-column>
  46. <el-table-column
  47. prop="params"
  48. header-align="center"
  49. align="center"
  50. min-width="160"
  51. :show-tooltip-when-overflow="true"
  52. label="参数">
  53. </el-table-column>
  54. <el-table-column
  55. prop="cronExpression"
  56. header-align="center"
  57. align="center"
  58. min-width="100"
  59. :show-tooltip-when-overflow="true"
  60. label="cron表达式">
  61. </el-table-column>
  62. <el-table-column
  63. prop="remark"
  64. header-align="center"
  65. align="center"
  66. min-width="180"
  67. :show-tooltip-when-overflow="true"
  68. label="备注">
  69. </el-table-column>
  70. <el-table-column
  71. prop="status"
  72. header-align="center"
  73. align="center"
  74. label="状态">
  75. <template slot-scope="scope">
  76. <el-tag v-if="Number(scope.row.status) === 0" size="small">正常</el-tag>
  77. <el-tag v-else size="small" type="danger">暂停</el-tag>
  78. </template>
  79. </el-table-column>
  80. <el-table-column
  81. fixed="right"
  82. header-align="center"
  83. align="center"
  84. width="250"
  85. label="操作">
  86. <template slot-scope="scope">
  87. <el-button v-if="isAuth('sys:schedule:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.jobId)">修改</el-button>
  88. <el-button v-if="isAuth('sys:schedule:delete')" type="text" size="small" @click="deleteHandle(scope.row.jobId)">删除</el-button>
  89. <el-button v-if="isAuth('sys:schedule:pause')" type="text" size="small" @click="pauseHandle(scope.row.jobId)">暂停</el-button>
  90. <el-button v-if="isAuth('sys:schedule:resume')" type="text" size="small" @click="resumeHandle(scope.row.jobId)">恢复</el-button>
  91. <el-button v-if="isAuth('sys:schedule:run')" type="text" size="small" @click="runHandle(scope.row.jobId)">立即执行</el-button>
  92. </template>
  93. </el-table-column>
  94. </el-table>
  95. <el-pagination
  96. @size-change="sizeChangeHandle"
  97. @current-change="currentChangeHandle"
  98. :current-page="pageIndex"
  99. :page-sizes="[10, 20, 50, 100]"
  100. :page-size="pageSize"
  101. :total="totalPage"
  102. layout="total, sizes, prev, pager, next, jumper">
  103. </el-pagination>
  104. </template>
  105. <!-- 弹窗, 新增 / 修改 -->
  106. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" @onChose="onChose"></add-or-update>
  107. <!-- 弹窗, 日志列表 -->
  108. <log v-if="logVisible" ref="log" @onChose="onChose"></log>
  109. </div>
  110. </template>
  111. <script>
  112. import AddOrUpdate from './schedule-add-or-update'
  113. import Log from './schedule-log'
  114. export default {
  115. data () {
  116. return {
  117. dataForm: {
  118. beanName: ''
  119. },
  120. dataList: [],
  121. pageIndex: 1,
  122. pageSize: 10,
  123. totalPage: 0,
  124. dataListLoading: false,
  125. dataListSelections: [],
  126. addOrUpdateVisible: false,
  127. logVisible: false
  128. }
  129. },
  130. components: {
  131. AddOrUpdate,
  132. Log
  133. },
  134. activated () {
  135. this.getDataList()
  136. },
  137. methods: {
  138. // 获取数据列表
  139. getDataList () {
  140. this.dataListLoading = true
  141. this.$http({
  142. url: this.$http.adornUrl(`/user-service/sys/schedule/list`),
  143. method: 'get',
  144. params: this.$http.adornParams({
  145. 'current': this.pageIndex,
  146. 'size': this.pageSize,
  147. 'beanName': this.dataForm.beanName ? this.dataForm.beanName : null
  148. })
  149. }).then(({data}) => {
  150. if (data && data.code === '200') {
  151. this.dataList = data.data.records
  152. this.totalPage = Number(data.data.total)
  153. } else {
  154. this.dataList = []
  155. this.totalPage = 0
  156. }
  157. this.dataListLoading = false
  158. })
  159. },
  160. // 每页数
  161. sizeChangeHandle (val) {
  162. this.pageSize = val
  163. this.pageIndex = 1
  164. this.getDataList()
  165. },
  166. // 当前页
  167. currentChangeHandle (val) {
  168. this.pageIndex = val
  169. this.getDataList()
  170. },
  171. // 多选
  172. selectionChangeHandle (val) {
  173. this.dataListSelections = val
  174. },
  175. // 新增 / 修改
  176. addOrUpdateHandle (id) {
  177. this.addOrUpdateVisible = true
  178. this.$nextTick(() => {
  179. this.$refs.addOrUpdate.init(id)
  180. })
  181. },
  182. onChose () {
  183. this.addOrUpdateVisible = false
  184. this.logVisible = false
  185. },
  186. // 删除
  187. deleteHandle (id) {
  188. const ids = id ? [id] : this.dataListSelections.map(item => {
  189. return item.jobId
  190. })
  191. this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
  192. confirmButtonText: '确定',
  193. cancelButtonText: '取消',
  194. type: 'warning'
  195. }).then(() => {
  196. this.$http({
  197. url: this.$http.adornUrl('/user-service/sys/schedule/delete'),
  198. method: 'delete',
  199. data: this.$http.adornData(ids, false)
  200. }).then(({data}) => {
  201. if (data && data.code === '200') {
  202. this.$message({
  203. message: '操作成功',
  204. type: 'success',
  205. duration: 1500,
  206. onClose: () => {
  207. this.getDataList()
  208. }
  209. })
  210. } else {
  211. this.$message.error(data.msg)
  212. }
  213. })
  214. }).catch(() => {})
  215. },
  216. // 暂停
  217. pauseHandle (id) {
  218. const ids = id ? [id] : this.dataListSelections.map(item => {
  219. return item.jobId
  220. })
  221. this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '暂停' : '批量暂停'}]操作?`, '提示', {
  222. confirmButtonText: '确定',
  223. cancelButtonText: '取消',
  224. type: 'warning'
  225. }).then(() => {
  226. this.$http({
  227. url: this.$http.adornUrl('/user-service/sys/schedule/pause'),
  228. method: 'post',
  229. data: this.$http.adornData(ids, false)
  230. }).then(({data}) => {
  231. if (data && data.code === '200') {
  232. this.$message({
  233. message: '操作成功',
  234. type: 'success',
  235. duration: 1500,
  236. onClose: () => {
  237. this.getDataList()
  238. }
  239. })
  240. } else {
  241. this.$message.error(data.msg)
  242. }
  243. })
  244. }).catch(() => {})
  245. },
  246. // 恢复
  247. resumeHandle (id) {
  248. const ids = id ? [id] : this.dataListSelections.map(item => {
  249. return item.jobId
  250. })
  251. this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '恢复' : '批量恢复'}]操作?`, '提示', {
  252. confirmButtonText: '确定',
  253. cancelButtonText: '取消',
  254. type: 'warning'
  255. }).then(() => {
  256. this.$http({
  257. url: this.$http.adornUrl('/user-service/sys/schedule/resume'),
  258. method: 'post',
  259. data: this.$http.adornData(ids, false)
  260. }).then(({data}) => {
  261. if (data && data.code === '200') {
  262. this.$message({
  263. message: '操作成功',
  264. type: 'success',
  265. duration: 1500,
  266. onClose: () => {
  267. this.getDataList()
  268. }
  269. })
  270. } else {
  271. this.$message.error(data.msg)
  272. }
  273. })
  274. }).catch(() => {})
  275. },
  276. // 立即执行
  277. runHandle (id) {
  278. const ids = id ? [id] : this.dataListSelections.map(item => {
  279. return item.jobId
  280. })
  281. this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '立即执行' : '批量立即执行'}]操作?`, '提示', {
  282. confirmButtonText: '确定',
  283. cancelButtonText: '取消',
  284. type: 'warning'
  285. }).then(() => {
  286. this.$http({
  287. url: this.$http.adornUrl('/user-service/sys/schedule/run'),
  288. method: 'post',
  289. data: this.$http.adornData(ids, false)
  290. }).then(({data}) => {
  291. if (data && data.code === '200') {
  292. this.$message({
  293. message: '操作成功',
  294. type: 'success',
  295. duration: 1500,
  296. onClose: () => {
  297. this.getDataList()
  298. }
  299. })
  300. } else {
  301. this.$message.error(data.msg)
  302. }
  303. })
  304. }).catch(() => {})
  305. },
  306. // 日志列表
  307. logHandle () {
  308. this.logVisible = true
  309. this.$nextTick(() => {
  310. this.$refs.log.init()
  311. })
  312. }
  313. }
  314. }
  315. </script>