log.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="任务名称" prop="jobName">
  5. <el-input v-model="queryParams.jobName" placeholder="请输入任务名称" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" />
  6. </el-form-item>
  7. <el-form-item label="任务组名" prop="jobGroup">
  8. <el-select v-model="queryParams.jobGroup" placeholder="请任务组名" clearable size="small" style="width: 240px">
  9. <el-option v-for="dict in dict.type.sys_job_group" :key="dict.value" :label="dict.label" :value="dict.value" />
  10. </el-select>
  11. </el-form-item>
  12. <el-form-item label="执行状态" prop="status">
  13. <el-select v-model="queryParams.status" placeholder="请选择执行状态" clearable size="small" style="width: 240px">
  14. <el-option v-for="dict in dict.type.sys_common_status" :key="dict.value" :label="dict.label" :value="dict.value" />
  15. </el-select>
  16. </el-form-item>
  17. <el-form-item label="执行时间">
  18. <el-date-picker
  19. v-model="dateRange"
  20. size="small"
  21. style="width: 240px"
  22. value-format="yyyy-MM-dd"
  23. type="daterange"
  24. range-separator="-"
  25. start-placeholder="开始日期"
  26. end-placeholder="结束日期"
  27. ></el-date-picker>
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  31. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  32. </el-form-item>
  33. </el-form>
  34. <el-row :gutter="10" class="mb8">
  35. <el-col :span="1.5">
  36. <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['monitor:job:remove']">删除</el-button>
  37. </el-col>
  38. <el-col :span="1.5">
  39. <el-button type="danger" plain icon="el-icon-delete" size="mini" @click="handleClean" v-hasPermi="['monitor:job:remove']">清空</el-button>
  40. </el-col>
  41. <el-col :span="1.5">
  42. <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['monitor:job:export']">导出</el-button>
  43. </el-col>
  44. <el-col :span="1.5">
  45. <el-button type="warning" plain icon="el-icon-close" size="mini" @click="handleClose">关闭</el-button>
  46. </el-col>
  47. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  48. </el-row>
  49. <el-table v-loading="loading" :data="jobLogList" @selection-change="handleSelectionChange">
  50. <el-table-column type="selection" width="55" align="center" />
  51. <el-table-column label="日志编号" width="80" align="center" prop="jobLogId" />
  52. <el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" />
  53. <el-table-column label="任务组名" align="center" prop="jobGroup" :show-overflow-tooltip="true">
  54. <template slot-scope="scope">
  55. <dict-tag :options="dict.type.sys_job_group" :value="scope.row.jobGroup" />
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
  59. <el-table-column label="日志信息" align="center" prop="jobMessage" :show-overflow-tooltip="true" />
  60. <el-table-column label="执行状态" align="center" prop="status">
  61. <template slot-scope="scope">
  62. <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status" />
  63. </template>
  64. </el-table-column>
  65. <el-table-column label="执行时间" align="center" prop="createTime" width="180">
  66. <template slot-scope="scope">
  67. <span>{{ parseTime(scope.row.createTime) }}</span>
  68. </template>
  69. </el-table-column>
  70. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  71. <template slot-scope="scope">
  72. <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)" v-hasPermi="['monitor:job:query']">详细</el-button>
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
  77. <!-- 调度日志详细 -->
  78. <el-dialog title="调度日志详细" :visible.sync="open" width="700px" append-to-body>
  79. <el-form ref="form" :model="form" label-width="100px" size="mini">
  80. <el-row>
  81. <el-col :span="12">
  82. <el-form-item label="日志序号:">{{ form.jobLogId }}</el-form-item>
  83. <el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
  84. </el-col>
  85. <el-col :span="12">
  86. <el-form-item label="任务分组:">{{ form.jobGroup }}</el-form-item>
  87. <el-form-item label="执行时间:">{{ form.createTime }}</el-form-item>
  88. </el-col>
  89. <el-col :span="24">
  90. <el-form-item label="调用方法:">{{ form.invokeTarget }}</el-form-item>
  91. </el-col>
  92. <el-col :span="24">
  93. <el-form-item label="日志信息:">{{ form.jobMessage }}</el-form-item>
  94. </el-col>
  95. <el-col :span="24">
  96. <el-form-item label="执行状态:">
  97. <div v-if="form.status == 0">正常</div>
  98. <div v-else-if="form.status == 1">失败</div>
  99. </el-form-item>
  100. </el-col>
  101. <el-col :span="24">
  102. <el-form-item label="异常信息:" v-if="form.status == 1">{{ form.exceptionInfo }}</el-form-item>
  103. </el-col>
  104. </el-row>
  105. </el-form>
  106. <div slot="footer" class="dialog-footer">
  107. <el-button size="small" @click="open = false">关 闭</el-button>
  108. </div>
  109. </el-dialog>
  110. </div>
  111. </template>
  112. <script>
  113. import { getJob } from '@/api/monitor/job'
  114. import { listJobLog, delJobLog, cleanJobLog } from '@/api/monitor/jobLog'
  115. export default {
  116. name: 'JobLog',
  117. dicts: ['sys_common_status', 'sys_job_group'],
  118. data() {
  119. return {
  120. // 遮罩层
  121. loading: true,
  122. // 选中数组
  123. ids: [],
  124. // 非多个禁用
  125. multiple: true,
  126. // 显示搜索条件
  127. showSearch: true,
  128. // 总条数
  129. total: 0,
  130. // 调度日志表格数据
  131. jobLogList: [],
  132. // 是否显示弹出层
  133. open: false,
  134. // 日期范围
  135. dateRange: [],
  136. // 表单参数
  137. form: {},
  138. // 查询参数
  139. queryParams: {
  140. pageNum: 1,
  141. pageSize: 10,
  142. jobName: undefined,
  143. jobGroup: undefined,
  144. status: undefined
  145. }
  146. }
  147. },
  148. created() {
  149. const jobId = this.$route.query.jobId
  150. if (jobId !== undefined && jobId != 0) {
  151. getJob(jobId).then((response) => {
  152. this.queryParams.jobName = response.data.jobName
  153. this.queryParams.jobGroup = response.data.jobGroup
  154. this.getList()
  155. })
  156. } else {
  157. this.getList()
  158. }
  159. },
  160. methods: {
  161. /** 查询调度日志列表 */
  162. getList() {
  163. this.loading = true
  164. listJobLog(this.addDateRange(this.queryParams, this.dateRange)).then((response) => {
  165. this.jobLogList = response.rows
  166. this.total = response.total
  167. this.loading = false
  168. })
  169. },
  170. // 返回按钮
  171. handleClose() {
  172. const obj = { path: '/monitor/job' }
  173. this.$tab.closeOpenPage(obj)
  174. },
  175. /** 搜索按钮操作 */
  176. handleQuery() {
  177. this.queryParams.pageNum = 1
  178. this.getList()
  179. },
  180. /** 重置按钮操作 */
  181. resetQuery() {
  182. this.dateRange = []
  183. this.resetForm('queryForm')
  184. this.handleQuery()
  185. },
  186. // 多选框选中数据
  187. handleSelectionChange(selection) {
  188. this.ids = selection.map((item) => item.jobLogId)
  189. this.multiple = !selection.length
  190. },
  191. /** 详细按钮操作 */
  192. handleView(row) {
  193. this.open = true
  194. this.form = row
  195. },
  196. /** 删除按钮操作 */
  197. handleDelete(row) {
  198. const jobLogIds = this.ids
  199. this.$modal
  200. .confirm('是否确认删除调度日志编号为"' + jobLogIds + '"的数据项?')
  201. .then(function () {
  202. return delJobLog(jobLogIds)
  203. })
  204. .then(() => {
  205. this.getList()
  206. this.$modal.msgSuccess('删除成功')
  207. })
  208. .catch(() => {})
  209. },
  210. /** 清空按钮操作 */
  211. handleClean() {
  212. this.$modal
  213. .confirm('是否确认清空所有调度日志数据项?')
  214. .then(function () {
  215. return cleanJobLog()
  216. })
  217. .then(() => {
  218. this.getList()
  219. this.$modal.msgSuccess('清空成功')
  220. })
  221. .catch(() => {})
  222. },
  223. /** 导出按钮操作 */
  224. handleExport() {
  225. this.download(
  226. '/monitor/jobLog/export',
  227. {
  228. ...this.queryParams
  229. },
  230. `log_${new Date().getTime()}.xlsx`
  231. )
  232. }
  233. }
  234. }
  235. </script>