Blame view

ant-design-vue-jeecg/src/views/system/QuartzJobList.vue 9.87 KB
肖超群 authored
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">
10
11
            <a-form-model-item :label="$t('monitor.jobClassName')" prop="jobClassName">
              <a-input :placeholder="$t('monitor.inputJobClassName')" v-model="queryParam.jobClassName"></a-input>
肖超群 authored
12
13
14
            </a-form-model-item>
          </a-col>
          <a-col :md="6" :sm="10">
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>
肖超群 authored
20
21
22
              </a-select>
            </a-form-model-item>
          </a-col>
肖超群 authored
23
          <a-col :md="6" :sm="10">
肖超群 authored
24
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
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>
肖超群 authored
27
28
29
30
31
32
33
34
35
            </span>
          </a-col>

        </a-row>
      </a-form-model>
    </div>

    <!-- 操作按钮区域 -->
    <div class="table-operator">
36
      <a-button v-has="'quartzJob:add'" @click="handleAdd" type="primary" icon="plus">{{ $t('button.new') }}</a-button>
pengyongcheng authored
37
      <a-button v-has="'quartzJob:export'" type="primary" icon="download" @click="handleExportXls('定时任务信息')">{{ $t('button.export') }}</a-button>
易文鹏 authored
38
      <a-upload v-has="'quartzJob:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
肖超群 authored
39
                @change="handleImportExcel">
40
        <a-button type="primary" icon="import">{{ $t('button.import') }}</a-button>
肖超群 authored
41
42
43
      </a-upload>
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay">
肖超群 authored
44
          <a-menu-item key="1" @click="batchDel">
45
            <a-icon type="delete"/>{{$t('button.delete')}}
肖超群 authored
46
          </a-menu-item>
肖超群 authored
47
        </a-menu>
48
        <a-button style="margin-left: 8px">{{$t('button.multiSelectActions')}}
肖超群 authored
49
50
          <a-icon type="down"/>
        </a-button>
肖超群 authored
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}"
谭毅彬 authored
66
        class="j-table-force-nowrap"
肖超群 authored
67
68
69
        @change="handleTableChange">
        <!-- 字符串超长截取省略号显示-->
        <span slot="description" slot-scope="text">
肖超群 authored
70
          <j-ellipsis :value="text" :length="20"/>
肖超群 authored
71
72
        </span>
        <span slot="parameterRender" slot-scope="text">
肖超群 authored
73
          <j-ellipsis :value="text" :length="20"/>
肖超群 authored
74
75
76
        </span>

        <span slot="action" slot-scope="text, record">
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>
肖超群 authored
80
          <a-dropdown>
81
            <a class="ant-dropdown-link">{{$t('button.more')}}&nbsp;<a-icon type="down"/></a>
肖超群 authored
82
            <a-menu slot="overlay">
83
              <a-menu-item><a @click="handleEdit(record)">{{$t('button.edit')}}</a></a-menu-item>
肖超群 authored
84
              <a-menu-item>
85
86
                <a-popconfirm :title="$t('button.deletingIt')" @confirm="() => handleDelete(record.id)">
                  <a>{{$t('button.delete')}}</a>
肖超群 authored
87
88
89
90
91
92
93
94
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        </span>

        <!-- 状态渲染模板 -->
        <template slot="customRenderStatus" slot-scope="status">
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>
肖超群 authored
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>
肖超群 authored
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";
112
import { translateResultMessage } from '@/api/api'
肖超群 authored
113
肖超群 authored
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;
肖超群 authored
136
137
          }
        },
肖超群 authored
138
        {
139
          title: this.$t('monitor.jobClassName'),
肖超群 authored
140
141
142
143
144
145
146
147
          align: "center",
          dataIndex: 'jobClassName',
          sorter: true,
          /*            customRender:function (text) {
                        return "*"+text.substring(9,text.length);
                      }*/
        },
        {
148
          title: this.$t('monitor.cronExpression'),
肖超群 authored
149
150
151
152
          align: "center",
          dataIndex: 'cronExpression'
        },
        {
153
          title:  this.$t('monitor.parameter'),
肖超群 authored
154
          align: "center",
155
          width: 170,
肖超群 authored
156
157
158
159
          dataIndex: 'parameter',
          scopedSlots: {customRender: 'parameterRender'},
        },
        {
160
          title:  this.$t('monitor.description'),
肖超群 authored
161
162
163
164
165
166
          align: "center",
          width: 250,
          dataIndex: 'description',
          scopedSlots: {customRender: 'description'},
        },
        {
167
          title:  this.$t('monitor.status'),
肖超群 authored
168
169
170
171
172
          align: "center",
          dataIndex: 'status',
          scopedSlots: {customRender: 'customRenderStatus'},
          filterMultiple: false,
          filters: [
173
174
            {text: this.$t('monitor.activated'),value: '0'},
            {text: this.$t('monitor.paused'),value: '-1'},
肖超群 authored
175
176
177
          ]
        },
        {
178
          title: this.$t('system.options'),
肖超群 authored
179
180
          dataIndex: 'action',
          align: "center",
谭毅彬 authored
181
          fixed: "right",
肖超群 authored
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"
肖超群 authored
213
      }
肖超群 authored
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];
肖超群 authored
219
      }
肖超群 authored
220
221
222
      // update-end-author:liusq date:20210624 for:前台定时任务无法翻页  #2666
      this.ipagination = pagination;
      this.loadData();
肖超群 authored
223
    },
肖超群 authored
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) {
233
              that.$message.success(translateResultMessage(res, res.message))
肖超群 authored
234
235
236
              that.loadData();
              that.onClearSelected();
            } else {
237
              that.$message.warning(translateResultMessage(res, res.message))
肖超群 authored
238
239
240
241
            }
          });
        }
      });
肖超群 authored
242
肖超群 authored
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) {
253
              that.$message.success(translateResultMessage(res, res.message))
肖超群 authored
254
255
256
              that.loadData();
              that.onClearSelected();
            } else {
257
              that.$message.warning(translateResultMessage(res, res.message))
肖超群 authored
258
259
            }
          });
肖超群 authored
260
        }
肖超群 authored
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) {
272
              that.$message.success(translateResultMessage(res, res.message))
肖超群 authored
273
274
275
              that.loadData();
              that.onClearSelected();
            } else {
276
              that.$message.warning(translateResultMessage(res, res.message))
肖超群 authored
277
278
            }
          });
肖超群 authored
279
        }
肖超群 authored
280
      });
肖超群 authored
281
282
    }
  }
肖超群 authored
283
}
肖超群 authored
284
285
</script>
<style scoped>
肖超群 authored
286
@import '~@assets/less/common.less'
肖超群 authored
287
</style>