log.vue 9.4 KB

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