schedule.vue 9.9 KB

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