修改整体样式,并且完成型号、舷号管理
This commit is contained in:
parent
c3837919b7
commit
cc26a51744
30
src/api/ship.js
Normal file
30
src/api/ship.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
import { getAction, deleteAction, putAction, postAction, httpAction,uploadAction } from '@/api/manage'
|
||||
|
||||
const shipNumCreate = (params)=>postAction("/shipNum/create",params);
|
||||
const shipNumUpdateById = (params)=>putAction("/shipNum/updateById",params);
|
||||
const shipNumQueryById = (params)=>getAction("/shipNum/queryById",params);
|
||||
const shipNumPageList = (params)=>getAction("/shipNum/pageList",params);
|
||||
const shipNumQueryByModelId = (params)=>getAction("/shipNum/queryByModelId",params);
|
||||
|
||||
const shipModelCreate = (params)=>postAction("/shipModel/create",params);
|
||||
const shipModelUpdateById = (params)=>putAction("/shipModel/updateById",params);
|
||||
const shipModelQueryById = (params)=>getAction("/shipModel/queryById",params);
|
||||
const shipModelPageList = (params)=>getAction("/shipModel/pageList",params);
|
||||
const shipModelQueryByModelId = (params)=>getAction("/shipModel/queryByModelId",params);
|
||||
const shipModeldeleteById = (params)=>deleteAction("/shipModel/deleteById",params);
|
||||
export {
|
||||
shipNumCreate,
|
||||
shipNumUpdateById,
|
||||
shipNumQueryById,
|
||||
shipNumPageList,
|
||||
shipNumQueryByModelId,
|
||||
shipModelCreate,
|
||||
shipModelUpdateById,
|
||||
shipModelQueryById,
|
||||
shipModelPageList,
|
||||
shipModelQueryByModelId,
|
||||
shipModeldeleteById
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
width: 0;
|
||||
height: 0;
|
||||
border: 6px solid transparent;
|
||||
border-top-color: rgba(0, 0, 0, 0.25);
|
||||
border-top-color: #1890FF;
|
||||
transition: all .3s linear;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
@ -121,7 +121,7 @@
|
|||
margin: 2px 0;
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
||||
box-shadow: 0 2px 8px #1890FF;
|
||||
|
||||
transition: opacity 0.15s, transform 0.3s !important;
|
||||
transform-origin: center top !important;
|
||||
|
@ -133,7 +133,7 @@
|
|||
padding: 6px 0;
|
||||
width: 100%;
|
||||
font-size: 14px;
|
||||
color: #565656;
|
||||
color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
|
@ -169,7 +169,7 @@
|
|||
margin: 2px 0;
|
||||
border-radius: 4px;
|
||||
outline: none;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
||||
box-shadow: 0 2px 8px #1890FF;
|
||||
|
||||
transition: opacity 0.15s, transform 0.3s !important;
|
||||
transform-origin: center top !important;
|
||||
|
@ -249,11 +249,11 @@
|
|||
|
||||
.cascader-menu-list::-webkit-scrollbar-thumb:vertical,
|
||||
.area-selectable-list-wrap::-webkit-scrollbar-thumb:vertical {
|
||||
background-color: #b8b8b8;
|
||||
background-color: #ffffff;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.cascader-menu-list::-webkit-scrollbar-thumb:vertical:hover,
|
||||
.area-selectable-list-wrap::-webkit-scrollbar-thumb:vertical:hover {
|
||||
background-color: #777;
|
||||
background-color: #ffffff;
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
@bordercolor : #C8C8C8;
|
||||
@headercolor : #1f232a;
|
||||
@backcolor : #454959;
|
||||
@headercolor : #ffffff;
|
||||
@backcolor : #ffffff;
|
||||
@inpuitbackcolor : #ffffff;
|
||||
@labelDeaultColor : #282828;
|
||||
@defaultWhiteColor: #eeeeee;
|
||||
@labelDeaultColor : #000000;
|
||||
@defaultWhiteColor: #ffffff;
|
||||
@fontfamily : 'Microsoft YaHei';
|
||||
@tableheadColor : #e5e8eb;
|
||||
@tableColor : #575D63;
|
||||
@tableheadColor : #fafafa;
|
||||
@tableColor : #000000;
|
||||
|
||||
/* 滚动条优化 start */
|
||||
::-webkit-scrollbar {
|
||||
|
@ -670,7 +670,7 @@ textarea,
|
|||
.ant-btn:hover,
|
||||
.ant-btn:active,
|
||||
.ant-btn:focus {
|
||||
background: url('~@/assets/img/buttonSelect.png') !important;
|
||||
//background: url('~@/assets/img/buttonSelect.png') !important;
|
||||
}
|
||||
|
||||
.ant-menu-light {
|
||||
|
|
|
@ -23,6 +23,6 @@ i {
|
|||
cursor: pointer;
|
||||
}
|
||||
.trcolor{
|
||||
background-color: rgba(255, 192, 203, 0.31);
|
||||
background-color: #1890FF;
|
||||
color:red;
|
||||
}
|
||||
|
|
|
@ -209,10 +209,10 @@
|
|||
|
||||
.ant-modal-close {
|
||||
right: 56px;
|
||||
color: rgba(0, 0, 0, 0.45);
|
||||
color: rgba(255, 255, 255, 0.45);
|
||||
|
||||
&:hover {
|
||||
color: rgba(0, 0, 0, 0.75);
|
||||
color: rgb(255, 255, 255);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
199
src/views/ship/modules/QuartzJobModal.vue
Normal file
199
src/views/ship/modules/QuartzJobModal.vue
Normal file
|
@ -0,0 +1,199 @@
|
|||
<template>
|
||||
<a-modal
|
||||
:title="title"
|
||||
:width="800"
|
||||
:visible="visible"
|
||||
:confirmLoading="confirmLoading"
|
||||
@ok="handleOk"
|
||||
@cancel="handleCancel"
|
||||
okText="保存并安排任务"
|
||||
cancelText="关闭">
|
||||
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-form :form="form">
|
||||
<a-form-item label="任务名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||
<a-input v-decorator="['quartzName']" ></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label="同步策略名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||
<j-select-multiple v-model="dataStrategySelected" :options="strategys"/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
label="cron表达式">
|
||||
<j-cron ref="innerVueCron" v-decorator="['cronExpression', { initialValue: '* * * * * ? *' }]" @change="setCorn"></j-cron>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
label="描述">
|
||||
<a-textarea placeholder="请输入描述" :rows="3" v-decorator="['description', {}]" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { httpAction } from '@/api/manage'
|
||||
import JCron from "@/components/jeecg/JCron";
|
||||
import JSelectMultiple from '@/components/jeecg/JSelectMultiple'
|
||||
import pick from 'lodash.pick'
|
||||
// import moment from "moment"
|
||||
|
||||
export default {
|
||||
name: "QuartzJobModal",
|
||||
components: {
|
||||
JCron,
|
||||
JSelectMultiple
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
title:"操作",
|
||||
buttonStyle: 'solid',
|
||||
visible: false,
|
||||
status:'',
|
||||
model: {},
|
||||
labelCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 5 },
|
||||
},
|
||||
wrapperCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 16 },
|
||||
},
|
||||
cron: {
|
||||
label: '',
|
||||
value: ''
|
||||
},
|
||||
confirmLoading: false,
|
||||
form: this.$form.createForm(this),
|
||||
validatorRules: {
|
||||
cron: {
|
||||
rules: [{
|
||||
required: true, message: '请输入cron表达式!'
|
||||
}]
|
||||
}
|
||||
},
|
||||
url: {
|
||||
add: "/sys/quartzJob/add",
|
||||
edit: "/sys/quartzJob/edit",
|
||||
queryEditStrategyList:"/sys/quartzJob/editSynchronSelectDetails",
|
||||
queryAddStrategyList:"/sys/quartzJob/addSynchronSelectDetails"
|
||||
},
|
||||
strategys:[],
|
||||
dataStrategySelected:'',
|
||||
idcDataStrategyId:""
|
||||
}
|
||||
},
|
||||
created () {
|
||||
|
||||
},
|
||||
methods: {
|
||||
add () {
|
||||
this.edit({});
|
||||
},
|
||||
edit (record) {
|
||||
let that = this;
|
||||
that.form.resetFields();
|
||||
this.model = Object.assign({},record);
|
||||
this.visible = true;
|
||||
this.$nextTick(() => {
|
||||
if(this.model.id){
|
||||
this.status = this.model.status;
|
||||
this.getEditStrategyList();
|
||||
}else{
|
||||
this.getAddStrategyList();
|
||||
}
|
||||
this.dataStrategySelected = this.model.strategyId;
|
||||
this.form.setFieldsValue(pick(this.model,'cronExpression','description','quartzName'));
|
||||
});
|
||||
|
||||
},
|
||||
close () {
|
||||
this.$emit('close');
|
||||
this.visible = false;
|
||||
},
|
||||
//add获取同步策略列表
|
||||
getAddStrategyList(){
|
||||
httpAction(this.url.queryAddStrategyList,{},"get").then((res)=>{
|
||||
if(res.success){
|
||||
this.strategys=res.result;
|
||||
}
|
||||
});
|
||||
},
|
||||
//edit获取同步策略列表
|
||||
getEditStrategyList(){
|
||||
httpAction(this.url.queryEditStrategyList,{},"get").then((res)=>{
|
||||
if(res.success){
|
||||
this.strategys=res.result;
|
||||
}
|
||||
});
|
||||
},
|
||||
strategyChange(value){
|
||||
this.idcDataStrategyId = value;
|
||||
},
|
||||
handleOk () {
|
||||
const that = this;
|
||||
// 触发表单验证
|
||||
this.form.validateFields((err, values) => {
|
||||
console.log('values',values)
|
||||
if (!err) {
|
||||
if (typeof values.cronExpression == "undefined" || Object.keys(values.cronExpression).length==0 ) {
|
||||
this.$message.warning('请输入cron表达式!');
|
||||
return false;
|
||||
}
|
||||
that.confirmLoading = true;
|
||||
let httpurl = '';
|
||||
let method = '';
|
||||
if(!this.model.id){
|
||||
httpurl+=this.url.add;
|
||||
method = 'post';
|
||||
}else{
|
||||
httpurl+=this.url.edit;
|
||||
method = 'put';
|
||||
}
|
||||
httpAction(httpurl, {quartzName:values.quartzName,strategyId:this.dataStrategySelected,cronExpression:values.cronExpression,description:values.description,id:this.model.id,status:this.status},method).then((res)=>{
|
||||
if(res.success){
|
||||
that.$message.success(res.message);
|
||||
that.$emit('ok');
|
||||
}else{
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
}).finally(() => {
|
||||
that.confirmLoading = false;
|
||||
that.close();
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
handleCancel () {
|
||||
this.close()
|
||||
},
|
||||
setCorn(data){
|
||||
console.log('data)',data);
|
||||
this.$nextTick(() => {
|
||||
this.model.cronExpression = data;
|
||||
})
|
||||
|
||||
if (Object.keys(data).length==0) {
|
||||
this.$message.warning('请输入cron表达式!');
|
||||
}
|
||||
},
|
||||
validateCron(rule, value, callback){
|
||||
if(!value){
|
||||
callback()
|
||||
}else if (Object.keys(value).length==0) {
|
||||
callback("请输入cron表达式!");
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.disabled{
|
||||
pointer-events: none;
|
||||
}
|
||||
</style>
|
399
src/views/ship/shipMode.vue
Normal file
399
src/views/ship/shipMode.vue
Normal file
|
@ -0,0 +1,399 @@
|
|||
<template>
|
||||
<a-card :bordered="false">
|
||||
|
||||
<!-- 查询区域 -->
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline" @keyup.enter.native="searchQuery">
|
||||
<a-row :gutter="30">
|
||||
<a-col :md="6" :sm="10">
|
||||
<a-form-item label="定时任务名称">
|
||||
<a-input placeholder="请输入定时任务名称" v-model="queryParam.quartzName"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="10">
|
||||
<a-form-item label="同步策略名称">
|
||||
<a-input placeholder="请输入同步策略名称" v-model="queryParam.strategyName"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="10">
|
||||
<a-form-item label="任务状态">
|
||||
<a-select style="width: 220px" v-model="queryParam.status" placeholder="请选择状态">
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option value="0">正常</a-select-option>
|
||||
<a-select-option value="-1">停止</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="10" >
|
||||
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
|
||||
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
|
||||
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
|
||||
</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
|
||||
<!-- 操作按钮区域 -->
|
||||
<div class="table-operator">
|
||||
<a-button @click="handleAdd" type="primary" v-has="'cont:btn'" icon="plus">新增</a-button>
|
||||
<a-button type="primary" v-has="'cont:btn'" icon="download" @click="handleExportXls('定时任务信息')">导出</a-button>
|
||||
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
|
||||
<a-button type="primary" v-has="'cont:btn'" icon="import">导入</a-button>
|
||||
</a-upload>
|
||||
<a-button type="primary" v-has="'cont:btn'" @click="batchDel" icon="del">批量删除</a-button>
|
||||
<a-button type="primary" v-has="'cont:btn'" @click="batchStart" icon="start" style="margin-left: 8px">批量启动</a-button>
|
||||
<a-button type="primary" v-has="'cont:btn'" @click="pauseJobBatch" icon="pauseJob" style="margin-left: 8px">批量暂停</a-button>
|
||||
</div>
|
||||
|
||||
<!-- table区域-begin -->
|
||||
<div style="height:615px;overflow-y:auto;">
|
||||
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
|
||||
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
|
||||
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
|
||||
</div>
|
||||
|
||||
<a-table
|
||||
ref="table"
|
||||
size="middle"
|
||||
bordered
|
||||
rowKey="id"
|
||||
:columns="columns"
|
||||
:dataSource="dataSource"
|
||||
:pagination="ipagination"
|
||||
:loading="loading"
|
||||
:rowSelection="{selectedRowKeys: selectedRowKeys,onChange: onSelectChange}"
|
||||
@change="handleTableChange">
|
||||
<!-- :locale="myLocale"-->
|
||||
|
||||
<div slot="expandedRowRender" slot-scope="record" style="margin: 0">
|
||||
<div style="margin-bottom: 5px">
|
||||
<span v-for="(item,index) in record.strategyName.split(',')" :key="index">
|
||||
<a-badge status="success" style="vertical-align: middle;"/><span>{{ item }}<br></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 字符串超长截取省略号显示-->
|
||||
<span slot="description" slot-scope="text">
|
||||
<j-ellipsis :value="text" :length="20" />
|
||||
</span>
|
||||
<span slot="parameterRender" slot-scope="text">
|
||||
<j-ellipsis :value="text" :length="20" />
|
||||
</span>
|
||||
|
||||
|
||||
<span slot="action" slot-scope="text, record">
|
||||
<a @click="resumeJob(record)" v-if="record.status==-1" v-has="'cont:btn'">启动</a>
|
||||
<a @click="pauseJob(record)" v-if="record.status==0" v-has="'cont:btn'">停止</a>
|
||||
|
||||
<a-divider type="vertical" v-has="'cont:btn'" />
|
||||
<a-dropdown v-has="'cont:btn'">
|
||||
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
|
||||
<a-menu slot="overlay">
|
||||
<a-menu-item><a @click="executeImmediately(record)">立即执行</a></a-menu-item>
|
||||
<a-menu-item><a @click="handleEdit(record)">编辑</a></a-menu-item>
|
||||
<a-menu-item>
|
||||
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
|
||||
<a>删除</a>
|
||||
</a-popconfirm>
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</a-dropdown>
|
||||
<a-divider type="vertical" v-has="'cont:btn'" />
|
||||
<a @click="handleDetail(record)">详情</a>
|
||||
</span>
|
||||
|
||||
<!-- 状态渲染模板 -->
|
||||
<template slot="customRenderStatus" slot-scope="status">
|
||||
<a-tag v-if="status==0" color="green">已启动</a-tag>
|
||||
<a-tag v-if="status==-1" color="orange">已暂停</a-tag>
|
||||
</template>
|
||||
</a-table>
|
||||
</div>
|
||||
<!-- table区域-end -->
|
||||
|
||||
<!-- 表单区域 -->
|
||||
<quartzJob-modal ref="modalForm" @ok="modalFormOk"></quartzJob-modal>
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import QuartzJobModal from './modules/QuartzJobModal'
|
||||
import { getAction } from '@/api/manage'
|
||||
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
|
||||
import JEllipsis from "@/components/jeecg/JEllipsis";
|
||||
|
||||
export default {
|
||||
name: "QuartzJobList",
|
||||
mixins:[JeecgListMixin],
|
||||
components: {
|
||||
QuartzJobModal,
|
||||
JEllipsis,
|
||||
VNodes: {
|
||||
functional: true,
|
||||
render: (h, ctx) => ctx.props.vnodes,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
description: '定时任务在线管理',
|
||||
dataSources: [],
|
||||
// 查询条件
|
||||
queryParam: {},
|
||||
//myLocale: {emptyText: '同步策略已全部配置'},
|
||||
// 表头
|
||||
columns: [
|
||||
{
|
||||
title: '#',
|
||||
dataIndex: '',
|
||||
key:'rowIndex',
|
||||
width:60,
|
||||
align:"center",
|
||||
customRender:function (t,r,index) {
|
||||
return parseInt(index)+1;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '定时任务名称',
|
||||
align:"center",
|
||||
dataIndex: 'quartzName',
|
||||
sorter: true,
|
||||
},
|
||||
{
|
||||
title: 'cron表达式',
|
||||
align:"center",
|
||||
dataIndex: 'cronExpression'
|
||||
},
|
||||
{
|
||||
title: '描述',
|
||||
align:"center",
|
||||
width: 250,
|
||||
dataIndex: 'description',
|
||||
scopedSlots: {customRender: 'description'},
|
||||
},
|
||||
{
|
||||
title: '状态',
|
||||
align:"center",
|
||||
dataIndex: 'status',
|
||||
scopedSlots: { customRender: 'customRenderStatus' },
|
||||
filterMultiple: false,
|
||||
filters: [
|
||||
{ text: '已启动', value: '0' },
|
||||
{ text: '已暂停', value: '-1' },
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
dataIndex: 'action',
|
||||
align:"center",
|
||||
width:180,
|
||||
scopedSlots: { customRender: 'action' },
|
||||
}
|
||||
],
|
||||
url: {
|
||||
list: "/sys/quartzJob/list",
|
||||
delete: "/sys/quartzJob/delete",
|
||||
deleteBatch: "/sys/quartzJob/deleteBatch",
|
||||
startBatch: "/sys/quartzJob/startBatch",
|
||||
pauseJobBatch: "/sys/quartzJob/pauseJobBatch",
|
||||
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}`;
|
||||
}
|
||||
},
|
||||
created () {
|
||||
},
|
||||
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"
|
||||
}
|
||||
//这种筛选方式只支持单选
|
||||
//this.filters.status = filters.status[0];
|
||||
this.ipagination = pagination;
|
||||
this.loadData();
|
||||
},
|
||||
pauseJobBatch: function () {
|
||||
if(!this.url.pauseJobBatch){
|
||||
this.$message.error("请设置url.pauseJobBatch属性!")
|
||||
return
|
||||
}
|
||||
let content_ = '是否暂停选中数据?';
|
||||
if (this.selectedRowKeys.length <= 0) {
|
||||
content_ = '是否暂停全部数据?'
|
||||
}
|
||||
var ids = "";
|
||||
for (var a = 0; a < this.selectedRowKeys.length; a++) {
|
||||
ids += this.selectedRowKeys[a] + ",";
|
||||
}
|
||||
var that = this;
|
||||
this.$confirm({
|
||||
title: "确认暂停",
|
||||
content: content_,
|
||||
onOk: function () {
|
||||
that.loading = true;
|
||||
getAction(that.url.pauseJobBatch, {ids: ids}).then((res) => {
|
||||
if (res.success) {
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
} else {
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
}).finally(() => {
|
||||
that.loading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
loadData(arg) {
|
||||
if(!this.url.list){
|
||||
this.$message.error("请设置url.list属性!")
|
||||
return
|
||||
}
|
||||
//加载数据 若传入参数1则加载第一页的内容
|
||||
if (arg === 1) {
|
||||
this.ipagination.current = 1;
|
||||
}
|
||||
let params = this.getQueryParams();//查询条件
|
||||
let strategyName = params.strategyName;
|
||||
let status = "";
|
||||
if(this.idcDataSourceTableId){
|
||||
strategyName = this.idcDataSourceSelected + "-" + this.sourceUserId + "-" + this.idcDataSourceTableId;
|
||||
}else if(this.sourceUserId && this.sourceUserId.length > 0){
|
||||
strategyName = this.idcDataSourceSelected + "-" + this.sourceUserId;
|
||||
}else if(this.idcDataSourceSelected){
|
||||
strategyName = this.idcDataSourceSelected;
|
||||
}
|
||||
this.$set(this.queryParam,'strategyName',strategyName);
|
||||
console.log(params)
|
||||
if(params.status){
|
||||
status = params.status;
|
||||
}
|
||||
this.loading = true;
|
||||
getAction(this.url.list, {quartzName:params.quartzName,strategyName:strategyName,status:status,pageNo:params.pageNo,pageSize:params.pageSize,order:params.order,column:params.column}).then((res) => {
|
||||
if (res.success) {
|
||||
//update-begin---author:zhangyafei Date:20201118 for:适配不分页的数据列表------------
|
||||
this.dataSource = res.result.records||res.result;
|
||||
if(res.result.total)
|
||||
{
|
||||
this.ipagination.total = res.result.total;
|
||||
}
|
||||
//update-end---author:zhangyafei Date:20201118 for:适配不分页的数据列表------------
|
||||
}
|
||||
if(res.code===510){
|
||||
this.$message.warning(res.message)
|
||||
}
|
||||
this.loading = false;
|
||||
})
|
||||
},
|
||||
batchStart: function () {
|
||||
if(!this.url.startBatch){
|
||||
this.$message.error("请设置url.startBatch属性!")
|
||||
return
|
||||
}
|
||||
let content_ = '是否启动选中数据?';
|
||||
if (this.selectedRowKeys.length <= 0) {
|
||||
content_ = '是否启动全部数据?'
|
||||
}
|
||||
var ids = "";
|
||||
for (var a = 0; a < this.selectedRowKeys.length; a++) {
|
||||
ids += this.selectedRowKeys[a] + ",";
|
||||
}
|
||||
var that = this;
|
||||
this.$confirm({
|
||||
title: "确认启动",
|
||||
content: content_,
|
||||
onOk: function () {
|
||||
that.loading = true;
|
||||
getAction(that.url.startBatch, {ids: ids}).then((res) => {
|
||||
if (res.success) {
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
} else {
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
}).finally(() => {
|
||||
that.loading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
pauseJob: function(record){
|
||||
var that = this;
|
||||
//暂停定时任务
|
||||
this.$confirm({
|
||||
title:"确认暂停",
|
||||
content:"是否暂停选中任务?",
|
||||
onOk: function(){
|
||||
getAction(that.url.pause,{id:record.id}).then((res)=>{
|
||||
if(res.success){
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
}else{
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
resumeJob: function(record){
|
||||
var that = this;
|
||||
//恢复定时任务
|
||||
this.$confirm({
|
||||
title:"确认启动",
|
||||
content:"是否启动选中任务?",
|
||||
onOk: function(){
|
||||
getAction(that.url.resume,{id:record.id}).then((res)=>{
|
||||
if(res.success){
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
}else{
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
executeImmediately(record){
|
||||
var that = this;
|
||||
//立即执行定时任务
|
||||
this.$confirm({
|
||||
title:"确认提示",
|
||||
content:"是否立即执行任务?",
|
||||
onOk: function(){
|
||||
getAction(that.url.execute,{id:record.id}).then((res)=>{
|
||||
if(res.success){
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
}else{
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
@import '~@assets/less/common.less';
|
||||
</style>
|
399
src/views/ship/shipNum.vue
Normal file
399
src/views/ship/shipNum.vue
Normal file
|
@ -0,0 +1,399 @@
|
|||
<template>
|
||||
<a-card :bordered="false">
|
||||
|
||||
<!-- 查询区域 -->
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline" @keyup.enter.native="searchQuery">
|
||||
<a-row :gutter="30">
|
||||
<a-col :md="6" :sm="10">
|
||||
<a-form-item label="定时任务名称">
|
||||
<a-input placeholder="请输入定时任务名称" v-model="queryParam.quartzName"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="10">
|
||||
<a-form-item label="同步策略名称">
|
||||
<a-input placeholder="请输入同步策略名称" v-model="queryParam.strategyName"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="10">
|
||||
<a-form-item label="任务状态">
|
||||
<a-select style="width: 220px" v-model="queryParam.status" placeholder="请选择状态">
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option value="0">正常</a-select-option>
|
||||
<a-select-option value="-1">停止</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="6" :sm="10" >
|
||||
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
|
||||
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
|
||||
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
|
||||
</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
|
||||
<!-- 操作按钮区域 -->
|
||||
<div class="table-operator">
|
||||
<a-button @click="handleAdd" type="primary" v-has="'cont:btn'" icon="plus">新增</a-button>
|
||||
<a-button type="primary" v-has="'cont:btn'" icon="download" @click="handleExportXls('定时任务信息')">导出</a-button>
|
||||
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
|
||||
<a-button type="primary" v-has="'cont:btn'" icon="import">导入</a-button>
|
||||
</a-upload>
|
||||
<a-button type="primary" v-has="'cont:btn'" @click="batchDel" icon="del">批量删除</a-button>
|
||||
<a-button type="primary" v-has="'cont:btn'" @click="batchStart" icon="start" style="margin-left: 8px">批量启动</a-button>
|
||||
<a-button type="primary" v-has="'cont:btn'" @click="pauseJobBatch" icon="pauseJob" style="margin-left: 8px">批量暂停</a-button>
|
||||
</div>
|
||||
|
||||
<!-- table区域-begin -->
|
||||
<div style="height:615px;overflow-y:auto;">
|
||||
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
|
||||
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
|
||||
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
|
||||
</div>
|
||||
|
||||
<a-table
|
||||
ref="table"
|
||||
size="middle"
|
||||
bordered
|
||||
rowKey="id"
|
||||
:columns="columns"
|
||||
:dataSource="dataSource"
|
||||
:pagination="ipagination"
|
||||
:loading="loading"
|
||||
:rowSelection="{selectedRowKeys: selectedRowKeys,onChange: onSelectChange}"
|
||||
@change="handleTableChange">
|
||||
<!-- :locale="myLocale"-->
|
||||
|
||||
<div slot="expandedRowRender" slot-scope="record" style="margin: 0">
|
||||
<div style="margin-bottom: 5px">
|
||||
<span v-for="(item,index) in record.strategyName.split(',')" :key="index">
|
||||
<a-badge status="success" style="vertical-align: middle;"/><span>{{ item }}<br></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 字符串超长截取省略号显示-->
|
||||
<span slot="description" slot-scope="text">
|
||||
<j-ellipsis :value="text" :length="20" />
|
||||
</span>
|
||||
<span slot="parameterRender" slot-scope="text">
|
||||
<j-ellipsis :value="text" :length="20" />
|
||||
</span>
|
||||
|
||||
|
||||
<span slot="action" slot-scope="text, record">
|
||||
<a @click="resumeJob(record)" v-if="record.status==-1" v-has="'cont:btn'">启动</a>
|
||||
<a @click="pauseJob(record)" v-if="record.status==0" v-has="'cont:btn'">停止</a>
|
||||
|
||||
<a-divider type="vertical" v-has="'cont:btn'" />
|
||||
<a-dropdown v-has="'cont:btn'">
|
||||
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
|
||||
<a-menu slot="overlay">
|
||||
<a-menu-item><a @click="executeImmediately(record)">立即执行</a></a-menu-item>
|
||||
<a-menu-item><a @click="handleEdit(record)">编辑</a></a-menu-item>
|
||||
<a-menu-item>
|
||||
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
|
||||
<a>删除</a>
|
||||
</a-popconfirm>
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</a-dropdown>
|
||||
<a-divider type="vertical" v-has="'cont:btn'" />
|
||||
<a @click="handleDetail(record)">详情</a>
|
||||
</span>
|
||||
|
||||
<!-- 状态渲染模板 -->
|
||||
<template slot="customRenderStatus" slot-scope="status">
|
||||
<a-tag v-if="status==0" color="green">已启动</a-tag>
|
||||
<a-tag v-if="status==-1" color="orange">已暂停</a-tag>
|
||||
</template>
|
||||
</a-table>
|
||||
</div>
|
||||
<!-- table区域-end -->
|
||||
|
||||
<!-- 表单区域 -->
|
||||
<quartzJob-modal ref="modalForm" @ok="modalFormOk"></quartzJob-modal>
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import QuartzJobModal from './modules/QuartzJobModal'
|
||||
import { getAction } from '@/api/manage'
|
||||
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
|
||||
import JEllipsis from "@/components/jeecg/JEllipsis";
|
||||
|
||||
export default {
|
||||
name: "QuartzJobList",
|
||||
mixins:[JeecgListMixin],
|
||||
components: {
|
||||
QuartzJobModal,
|
||||
JEllipsis,
|
||||
VNodes: {
|
||||
functional: true,
|
||||
render: (h, ctx) => ctx.props.vnodes,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
description: '定时任务在线管理',
|
||||
dataSources: [],
|
||||
// 查询条件
|
||||
queryParam: {},
|
||||
//myLocale: {emptyText: '同步策略已全部配置'},
|
||||
// 表头
|
||||
columns: [
|
||||
{
|
||||
title: '#',
|
||||
dataIndex: '',
|
||||
key:'rowIndex',
|
||||
width:60,
|
||||
align:"center",
|
||||
customRender:function (t,r,index) {
|
||||
return parseInt(index)+1;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '定时任务名称',
|
||||
align:"center",
|
||||
dataIndex: 'quartzName',
|
||||
sorter: true,
|
||||
},
|
||||
{
|
||||
title: 'cron表达式',
|
||||
align:"center",
|
||||
dataIndex: 'cronExpression'
|
||||
},
|
||||
{
|
||||
title: '描述',
|
||||
align:"center",
|
||||
width: 250,
|
||||
dataIndex: 'description',
|
||||
scopedSlots: {customRender: 'description'},
|
||||
},
|
||||
{
|
||||
title: '状态',
|
||||
align:"center",
|
||||
dataIndex: 'status',
|
||||
scopedSlots: { customRender: 'customRenderStatus' },
|
||||
filterMultiple: false,
|
||||
filters: [
|
||||
{ text: '已启动', value: '0' },
|
||||
{ text: '已暂停', value: '-1' },
|
||||
]
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
dataIndex: 'action',
|
||||
align:"center",
|
||||
width:180,
|
||||
scopedSlots: { customRender: 'action' },
|
||||
}
|
||||
],
|
||||
url: {
|
||||
list: "/sys/quartzJob/list",
|
||||
delete: "/sys/quartzJob/delete",
|
||||
deleteBatch: "/sys/quartzJob/deleteBatch",
|
||||
startBatch: "/sys/quartzJob/startBatch",
|
||||
pauseJobBatch: "/sys/quartzJob/pauseJobBatch",
|
||||
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}`;
|
||||
}
|
||||
},
|
||||
created () {
|
||||
},
|
||||
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"
|
||||
}
|
||||
//这种筛选方式只支持单选
|
||||
//this.filters.status = filters.status[0];
|
||||
this.ipagination = pagination;
|
||||
this.loadData();
|
||||
},
|
||||
pauseJobBatch: function () {
|
||||
if(!this.url.pauseJobBatch){
|
||||
this.$message.error("请设置url.pauseJobBatch属性!")
|
||||
return
|
||||
}
|
||||
let content_ = '是否暂停选中数据?';
|
||||
if (this.selectedRowKeys.length <= 0) {
|
||||
content_ = '是否暂停全部数据?'
|
||||
}
|
||||
var ids = "";
|
||||
for (var a = 0; a < this.selectedRowKeys.length; a++) {
|
||||
ids += this.selectedRowKeys[a] + ",";
|
||||
}
|
||||
var that = this;
|
||||
this.$confirm({
|
||||
title: "确认暂停",
|
||||
content: content_,
|
||||
onOk: function () {
|
||||
that.loading = true;
|
||||
getAction(that.url.pauseJobBatch, {ids: ids}).then((res) => {
|
||||
if (res.success) {
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
} else {
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
}).finally(() => {
|
||||
that.loading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
loadData(arg) {
|
||||
if(!this.url.list){
|
||||
this.$message.error("请设置url.list属性!")
|
||||
return
|
||||
}
|
||||
//加载数据 若传入参数1则加载第一页的内容
|
||||
if (arg === 1) {
|
||||
this.ipagination.current = 1;
|
||||
}
|
||||
let params = this.getQueryParams();//查询条件
|
||||
let strategyName = params.strategyName;
|
||||
let status = "";
|
||||
if(this.idcDataSourceTableId){
|
||||
strategyName = this.idcDataSourceSelected + "-" + this.sourceUserId + "-" + this.idcDataSourceTableId;
|
||||
}else if(this.sourceUserId && this.sourceUserId.length > 0){
|
||||
strategyName = this.idcDataSourceSelected + "-" + this.sourceUserId;
|
||||
}else if(this.idcDataSourceSelected){
|
||||
strategyName = this.idcDataSourceSelected;
|
||||
}
|
||||
this.$set(this.queryParam,'strategyName',strategyName);
|
||||
console.log(params)
|
||||
if(params.status){
|
||||
status = params.status;
|
||||
}
|
||||
this.loading = true;
|
||||
getAction(this.url.list, {quartzName:params.quartzName,strategyName:strategyName,status:status,pageNo:params.pageNo,pageSize:params.pageSize,order:params.order,column:params.column}).then((res) => {
|
||||
if (res.success) {
|
||||
//update-begin---author:zhangyafei Date:20201118 for:适配不分页的数据列表------------
|
||||
this.dataSource = res.result.records||res.result;
|
||||
if(res.result.total)
|
||||
{
|
||||
this.ipagination.total = res.result.total;
|
||||
}
|
||||
//update-end---author:zhangyafei Date:20201118 for:适配不分页的数据列表------------
|
||||
}
|
||||
if(res.code===510){
|
||||
this.$message.warning(res.message)
|
||||
}
|
||||
this.loading = false;
|
||||
})
|
||||
},
|
||||
batchStart: function () {
|
||||
if(!this.url.startBatch){
|
||||
this.$message.error("请设置url.startBatch属性!")
|
||||
return
|
||||
}
|
||||
let content_ = '是否启动选中数据?';
|
||||
if (this.selectedRowKeys.length <= 0) {
|
||||
content_ = '是否启动全部数据?'
|
||||
}
|
||||
var ids = "";
|
||||
for (var a = 0; a < this.selectedRowKeys.length; a++) {
|
||||
ids += this.selectedRowKeys[a] + ",";
|
||||
}
|
||||
var that = this;
|
||||
this.$confirm({
|
||||
title: "确认启动",
|
||||
content: content_,
|
||||
onOk: function () {
|
||||
that.loading = true;
|
||||
getAction(that.url.startBatch, {ids: ids}).then((res) => {
|
||||
if (res.success) {
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
} else {
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
}).finally(() => {
|
||||
that.loading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
pauseJob: function(record){
|
||||
var that = this;
|
||||
//暂停定时任务
|
||||
this.$confirm({
|
||||
title:"确认暂停",
|
||||
content:"是否暂停选中任务?",
|
||||
onOk: function(){
|
||||
getAction(that.url.pause,{id:record.id}).then((res)=>{
|
||||
if(res.success){
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
}else{
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
resumeJob: function(record){
|
||||
var that = this;
|
||||
//恢复定时任务
|
||||
this.$confirm({
|
||||
title:"确认启动",
|
||||
content:"是否启动选中任务?",
|
||||
onOk: function(){
|
||||
getAction(that.url.resume,{id:record.id}).then((res)=>{
|
||||
if(res.success){
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
}else{
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
executeImmediately(record){
|
||||
var that = this;
|
||||
//立即执行定时任务
|
||||
this.$confirm({
|
||||
title:"确认提示",
|
||||
content:"是否立即执行任务?",
|
||||
onOk: function(){
|
||||
getAction(that.url.execute,{id:record.id}).then((res)=>{
|
||||
if(res.success){
|
||||
that.$message.success(res.message);
|
||||
that.loadData();
|
||||
that.onClearSelected();
|
||||
}else{
|
||||
that.$message.warning(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
@import '~@assets/less/common.less';
|
||||
</style>
|
Loading…
Reference in New Issue
Block a user