You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

311 lines
9.4 KiB

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