1
2
3
4
5
6
7
8
9
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form-model layout="inline" :model="queryParam" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="10">
周鸿
authored
about a year ago
10
11
<a-form-model-item :label="$t('monitor.jobClassName')" prop="jobClassName">
<a-input :placeholder="$t('monitor.inputJobClassName')" v-model="queryParam.jobClassName"></a-input>
12
13
14
</a-form-model-item>
</a-col>
<a-col :md="6" :sm="10">
周鸿
authored
about a year ago
15
16
17
18
19
<a-form-model-item :label="$t('monitor.jobStatus')" prop="status">
<a-select v-model="queryParam.status" :placeholder="$t('monitor.inputJobStatus')">
<a-select-option value="">{{ $t('monitor.whole') }}</a-select-option>
<a-select-option value="0">{{ $t('monitor.normalcy') }}</a-select-option>
<a-select-option value="-1">{{ $t('monitor.stop') }}</a-select-option>
20
21
22
</a-select>
</a-form-model-item>
</a-col>
23
<a-col :md="6" :sm="10">
24
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
谭毅彬
authored
about a year ago
25
26
<a-button type="primary" @click="searchQuery" icon="search">{{ $t('button.search') }}</a-button>
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">{{ $t('button.reset') }}</a-button>
27
28
29
30
31
32
33
34
35
</span>
</a-col>
</a-row>
</a-form-model>
</div>
<!-- 操作按钮区域 -->
<div class="table-operator">
谭毅彬
authored
about a year ago
36
<a-button v-has="'quartzJob:add'" @click="handleAdd" type="primary" icon="plus">{{ $t('button.new') }}</a-button>
37
<a-button v-has="'quartzJob:export'" type="primary" icon="download" @click="handleExportXls('定时任务信息')">{{ $t('button.export') }}</a-button>
38
<a-upload v-has="'quartzJob:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
39
@change="handleImportExcel">
谭毅彬
authored
about a year ago
40
<a-button type="primary" icon="import">{{ $t('button.import') }}</a-button>
41
42
43
</a-upload>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
44
<a-menu-item key="1" @click="batchDel">
谭毅彬
authored
about a year ago
45
<a-icon type="delete"/>{{$t('button.delete')}}
46
</a-menu-item>
47
</a-menu>
谭毅彬
authored
about a year ago
48
<a-button style="margin-left: 8px">{{$t('button.multiSelectActions')}}
49
50
<a-icon type="down"/>
</a-button>
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<a-table
ref="table"
size="middle"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:scroll="{x:true}"
66
class="j-table-force-nowrap"
67
68
69
@change="handleTableChange">
<!-- 字符串超长截取省略号显示-->
<span slot="description" slot-scope="text">
70
<j-ellipsis :value="text" :length="20"/>
71
72
</span>
<span slot="parameterRender" slot-scope="text">
73
<j-ellipsis :value="text" :length="20"/>
74
75
76
</span>
<span slot="action" slot-scope="text, record">
周鸿
authored
about a year ago
77
78
79
<a @click="resumeJob(record)" v-if="record.status==-1">{{$t('button.start')}}<a-divider type="vertical"/></a>
<a @click="pauseJob(record)" v-if="record.status==0">{{$t('button.stop')}}<a-divider type="vertical"/></a>
<a @click="executeImmediately(record)">{{$t('button.runOnce')}}<a-divider type="vertical"/></a>
80
<a-dropdown>
谭毅彬
authored
about a year ago
81
<a class="ant-dropdown-link">{{$t('button.more')}} <a-icon type="down"/></a>
82
<a-menu slot="overlay">
谭毅彬
authored
about a year ago
83
<a-menu-item><a @click="handleEdit(record)">{{$t('button.edit')}}</a></a-menu-item>
84
<a-menu-item>
谭毅彬
authored
about a year ago
85
86
<a-popconfirm :title="$t('button.deletingIt')" @confirm="() => handleDelete(record.id)">
<a>{{$t('button.delete')}}</a>
87
88
89
90
91
92
93
94
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
<!-- 状态渲染模板 -->
<template slot="customRenderStatus" slot-scope="status">
周鸿
authored
about a year ago
95
96
<a-tag v-if="status==0" color="green">{{$t('monitor.activated')}}</a-tag>
<a-tag v-if="status==-1" color="orange">{{$t('monitor.paused')}}</a-tag>
97
98
99
100
101
102
103
104
105
106
107
</template>
</a-table>
</div>
<!-- table区域-end -->
<!-- 表单区域 -->
<quartzJob-modal ref="modalForm" @ok="modalFormOk"></quartzJob-modal>
</a-card>
</template>
<script>
108
109
110
111
import QuartzJobModal from './modules/QuartzJobModal'
import {getAction} from '@/api/manage'
import {JeecgListMixin} from '@/mixins/JeecgListMixin'
import JEllipsis from "@/components/jeecg/JEllipsis";
谭毅彬
authored
about a year ago
112
import { translateResultMessage } from '@/api/api'
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
export default {
name: "QuartzJobList",
mixins: [JeecgListMixin],
components: {
QuartzJobModal,
JEllipsis
},
data() {
return {
description: '定时任务在线管理',
// 查询条件
queryParam: {},
// 表头
columns: [
{
title: '#',
dataIndex: '',
key: 'rowIndex',
width: 60,
align: "center",
customRender: function (t, r, index) {
return parseInt(index) + 1;
136
137
}
},
138
{
周鸿
authored
about a year ago
139
title: this.$t('monitor.jobClassName'),
140
141
142
143
144
145
146
147
align: "center",
dataIndex: 'jobClassName',
sorter: true,
/* customRender:function (text) {
return "*"+text.substring(9,text.length);
}*/
},
{
周鸿
authored
about a year ago
148
title: this.$t('monitor.cronExpression'),
149
150
151
152
align: "center",
dataIndex: 'cronExpression'
},
{
周鸿
authored
about a year ago
153
title: this.$t('monitor.parameter'),
154
align: "center",
155
width: 170,
156
157
158
159
dataIndex: 'parameter',
scopedSlots: {customRender: 'parameterRender'},
},
{
周鸿
authored
about a year ago
160
title: this.$t('monitor.description'),
161
162
163
164
165
166
align: "center",
width: 250,
dataIndex: 'description',
scopedSlots: {customRender: 'description'},
},
{
周鸿
authored
about a year ago
167
title: this.$t('monitor.status'),
168
169
170
171
172
align: "center",
dataIndex: 'status',
scopedSlots: {customRender: 'customRenderStatus'},
filterMultiple: false,
filters: [
周鸿
authored
about a year ago
173
174
{text: this.$t('monitor.activated'),value: '0'},
{text: this.$t('monitor.paused'),value: '-1'},
175
176
177
]
},
{
谭毅彬
authored
about a year ago
178
title: this.$t('system.options'),
179
180
dataIndex: 'action',
align: "center",
181
fixed: "right",
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
width: 180,
scopedSlots: {customRender: 'action'},
}
],
url: {
list: "/sys/quartzJob/list",
delete: "/sys/quartzJob/delete",
deleteBatch: "/sys/quartzJob/deleteBatch",
pause: "/sys/quartzJob/pause",
resume: "/sys/quartzJob/resume",
exportXlsUrl: "sys/quartzJob/exportXls",
importExcelUrl: "sys/quartzJob/importExcel",
execute: "sys/quartzJob/execute"
},
}
},
computed: {
importExcelUrl: function () {
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
}
},
methods: {
//筛选需要重写handleTableChange
handleTableChange(pagination, filters, sorter) {
//分页、排序、筛选变化时触发
//TODO 筛选
if (Object.keys(sorter).length > 0) {
this.isorter.column = sorter.field;
this.isorter.order = "ascend" == sorter.order ? "asc" : "desc"
213
}
214
215
216
217
218
//这种筛选方式只支持单选
// update-begin-author:liusq date:20210624 for:前台定时任务无法翻页 #2666
if (filters && Object.keys(filters).length > 0 && filters.status) {
this.filters.status = filters.status[0];
219
}
220
221
222
// update-end-author:liusq date:20210624 for:前台定时任务无法翻页 #2666
this.ipagination = pagination;
this.loadData();
223
},
224
225
226
227
228
229
230
231
232
pauseJob: function (record) {
var that = this;
//暂停定时任务
this.$confirm({
title: "确认暂停",
content: "是否暂停选中任务?",
onOk: function () {
getAction(that.url.pause, {id: record.id}).then((res) => {
if (res.success) {
谭毅彬
authored
about a year ago
233
that.$message.success(translateResultMessage(res, res.message))
234
235
236
that.loadData();
that.onClearSelected();
} else {
谭毅彬
authored
about a year ago
237
that.$message.warning(translateResultMessage(res, res.message))
238
239
240
241
}
});
}
});
242
243
244
245
246
247
248
249
250
251
252
},
resumeJob: function (record) {
var that = this;
//恢复定时任务
this.$confirm({
title: "确认启动",
content: "是否启动选中任务?",
onOk: function () {
getAction(that.url.resume, {id: record.id}).then((res) => {
if (res.success) {
谭毅彬
authored
about a year ago
253
that.$message.success(translateResultMessage(res, res.message))
254
255
256
that.loadData();
that.onClearSelected();
} else {
谭毅彬
authored
about a year ago
257
that.$message.warning(translateResultMessage(res, res.message))
258
259
}
});
260
}
261
262
263
264
265
266
267
268
269
270
271
});
},
executeImmediately(record) {
var that = this;
//立即执行定时任务
this.$confirm({
title: "确认提示",
content: "是否立即执行任务?",
onOk: function () {
getAction(that.url.execute, {id: record.id}).then((res) => {
if (res.success) {
谭毅彬
authored
about a year ago
272
that.$message.success(translateResultMessage(res, res.message))
273
274
275
that.loadData();
that.onClearSelected();
} else {
谭毅彬
authored
about a year ago
276
that.$message.warning(translateResultMessage(res, res.message))
277
278
}
});
279
}
280
});
281
282
}
}
283
}
284
285
</script>
<style scoped>
286
@import '~@assets/less/common.less'
287
</style>