提交 112fca94 编写于 作者: ibizdev's avatar ibizdev

ibiz4j 发布系统代码

上级 0b88be5e
...@@ -93,6 +93,11 @@ ...@@ -93,6 +93,11 @@
<template v-if="!Object.is(layoutType, 'FLEX')"> <template v-if="!Object.is(layoutType, 'FLEX')">
<row :gutter="10"><slot></slot></row> <row :gutter="10"><slot></slot></row>
</template> </template>
<template v-if="isManageContainer">
<i-button type="primary" :icon="manageContainerStatus?'ios-repeat':'ios-more'" @click="doManageContainer">
{{manageContainerStatus?$t('components.appFormGroup.hide'):$t('components.appFormGroup.showMore')}}
</i-button>
</template>
</card> </card>
<template v-if="isShowCaption === false"> <template v-if="isShowCaption === false">
<slot></slot> <slot></slot>
...@@ -115,6 +120,22 @@ export default class AppFormGroup extends Vue { ...@@ -115,6 +120,22 @@ export default class AppFormGroup extends Vue {
*/ */
@Prop() public caption?: string; @Prop() public caption?: string;
/**
* 是否为管理容器
*
* @type {string}
* @memberof AppFormGroup
*/
@Prop({ default: false }) public isManageContainer?: boolean;
/**
* 管理容器状态
*
* @type {string}
* @memberof AppFormGroup
*/
@Prop({ default: false }) public manageContainerStatus?: boolean;
/** /**
* 内置界面样式 * 内置界面样式
* *
...@@ -244,6 +265,16 @@ export default class AppFormGroup extends Vue { ...@@ -244,6 +265,16 @@ export default class AppFormGroup extends Vue {
public doUIAction($event: any, item: any): void { public doUIAction($event: any, item: any): void {
this.$emit('groupuiactionclick', { event: $event, item: item }); this.$emit('groupuiactionclick', { event: $event, item: item });
} }
/**
* 操作管理容器
*
* @param {*} $event
* @memberof AppFormGroup
*/
public doManageContainer(){
this.$emit('managecontainerclick');
}
} }
</script> </script>
<style lang='less'> <style lang='less'>
......
...@@ -44,6 +44,11 @@ export default class AppMpicker extends Vue { ...@@ -44,6 +44,11 @@ export default class AppMpicker extends Vue {
*/ */
@Prop() curvalue?: any; @Prop() curvalue?: any;
/**
* 值项
*/
@Prop() valueitem?: any;
/** /**
* 局部上下文导航参数 * 局部上下文导航参数
* *
...@@ -144,14 +149,34 @@ export default class AppMpicker extends Vue { ...@@ -144,14 +149,34 @@ export default class AppMpicker extends Vue {
this.value = []; this.value = [];
this.selectItems = []; this.selectItems = [];
if (newVal) { if (newVal) {
this.selectItems = this.parseValue(JSON.parse(newVal)); try {
this.selectItems.forEach((item: any) => { this.selectItems = this.parseValue(JSON.parse(newVal));
this.value.push(item[this.deKeyField]); this.selectItems.forEach((item: any) => {
let index = this.items.findIndex((i) => Object.is(i[this.deKeyField], item[this.deKeyField])); this.value.push(item[this.deKeyField]);
if (index < 0) { let index = this.items.findIndex((i) => Object.is(i[this.deKeyField], item[this.deKeyField]));
this.items.push({ [this.deMajorField]: item[this.deMajorField], [this.deKeyField]: item[this.deKeyField] }); if (index < 0) {
this.items.push({ [this.deMajorField]: item[this.deMajorField], [this.deKeyField]: item[this.deKeyField] });
}
});
} catch (error) {
if(error.name === 'SyntaxError'){
let srfkeys:any = newVal.split(',');
let srfmajortexts:any = null;
if(this.valueitem && this.activeData[this.valueitem]){
srfmajortexts = this.activeData[this.valueitem].split(',');
} }
}); if(srfkeys.length && srfkeys.length > 0 && srfmajortexts.length && srfmajortexts.length > 0 && srfkeys.length == srfmajortexts.length){
srfkeys.forEach((id: any, index: number) => {
this.value.push(id);
this.selectItems.push({[this.deKeyField]: id, [this.deMajorField]: srfmajortexts[index]});
let _index = this.items.findIndex((i) => Object.is(i[this.deKeyField],id));
if (_index < 0) {
this.items.push({[this.deKeyField]: id, [this.deMajorField]: srfmajortexts[index]});
}
});
}
}
}
} }
this.$forceUpdate(); this.$forceUpdate();
} }
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
</span> </span>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<span>{{ item.label }}</span> <span>{{ item.fullName ? item.fullName:item.label }}</span>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="bar"> <div class="bar">
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
<Drawer class-name="menu-drawer" width="60" :closable="true" :mask="false" placement="left" v-model="rightDrawerVisiable"> <Drawer class-name="menu-drawer" width="60" :closable="true" :mask="false" placement="left" v-model="rightDrawerVisiable">
<div class="menuItems"> <div class="menuItems">
<div @click="skipTo(item)" class="item" v-for="(item) in list" :key="item.id"> <div @click="skipTo(item)" class="item" v-for="(item) in list" :key="item.id">
<span class="title">{{item.label}}</span> <span class="title">{{ item.fullName ? item.fullName:item.label }}</span>
<span v-if="isStar(item.id)" class="star" @click.stop="outStar(item)"> <span v-if="isStar(item.id)" class="star" @click.stop="outStar(item)">
<Icon type="ios-star" /> <Icon type="ios-star" />
</span> </span>
......
<template>
<el-select size="small" class="filter-mode" placeholder="条件逻辑" clearable v-model="curVal" @change="onChange">
<el-option
v-for="mode in filterMode"
:key="mode.value"
:label="mode.en"
:value="mode.value"
>
</el-option>
</el-select>
</template>
<script lang="ts">
import { Vue, Component, Model } from "vue-property-decorator";
@Component({})
export default class FilterMode extends Vue {
/**
* 值属性
*
* @type {*}
* @memberof FilterMode
*/
@Model('change') readonly value: any;
get curVal() {
return this.value;
}
set curVal(val: any) {
const type: string = this.$util.typeOf(val);
val = Object.is(type, 'null') || Object.is(type, 'undefined') ? undefined : val;
this.$emit('change', val);
}
/**
* 过滤模式
*
* @type {*}
* @memberof FilterMode
*/
public filterMode: any[] = [
// { name: 'AND', value: '$and' },
// { name: 'OR', value: '$or' },
{ zh: '等于(=)', en: 'EQ', value: '$eq' },
{ zh: '', en: 'NE', value: '$ne' },
{ zh: '', en: 'GT', value: '$gt' },
{ zh: '', en: 'GE', value: '$gte' },
{ zh: '', en: 'LT', value: '$lt' },
{ zh: '', en: 'LE', value: '$lte' },
{ zh: '', en: 'IS_NULL', value: '$null' },
{ zh: '', en: 'IS_NOT_NULL', value: '$notNull' },
{ zh: '', en: 'IN', value: '$in' },
{ zh: '', en: 'NOTIN', value: '$notIn' },
{ zh: '', en: 'LIKE', value: '$like' },
{ zh: '', en: 'LIFTLIKE', value: '$startsWith' },
{ zh: '', en: 'RIGHTLIKE', value: '$endsWith' },
{ zh: '', en: 'EXISTS', value: '$exists' },
{ zh: '', en: 'NOTEXISTS', value: '$notExists' }
];
/**
* 值改变
*
* @memberof FilterMode
*/
public onChange() {
this.$emit('mode-change', this.value);
}
}
</script>
\ No newline at end of file
.filter-item {
display: flex;
// margin-top: 10px;
.fa-trash-o {
color: red;
}
.filter-item-group {
width: 100px;
margin-left: 5px;
}
.filter-item-field {
width: 200px;
margin-left: 5px;
}
.filter-item-mode {
width: 200px;
margin-left: 5px;
}
.filter-item-value {
margin-left: 5px;
flex-grow: 1;
}
}
.filter-tree {
.el-tree-node__content {
height: 40px;
.filter-tree-item {
display: flex;
>div {
margin-right: 10px;
}
>div:nth-last-child(1) {
margin-right: 0;
}
.filter-tree-action {
margin-left: 20px;
.ivu-btn {
margin-right: 5px;
}
}
}
}
}
\ No newline at end of file
<template>
<el-tree class="filter-tree" :data="treeItems" :props="defaultProps" :expand-on-click-node="false" default-expand-all>
<template slot-scope="{ node, data }">
<template v-if="Object.is(data.name, '$and') || Object.is(data.name, '$or')">
<div class="filter-tree-item">
<el-select size="small" v-model="data.name">
<el-option v-for="mode in relationModes" :key="mode.value" :label="mode.zh" :value="mode.value"></el-option>
</el-select>
<div class="filter-tree-action">
<i-button title="添加条件" @click="onAddItem(data)"><i class="fa fa-plus" aria-hidden="true"></i> 添加条件</i-button>
<i-button title="添加组" @click="onAddGroup(data)"><i class="fa fa-plus" aria-hidden="true"></i> 添加组</i-button>
</div>
</div>
</template>
<template v-else>
<div class="filter-tree-item">
<el-select size="small" class="filter-item-field" v-model="data.field" clearable placeholder="属性" @change="onFieldChange(data)">
<el-option
v-for="item in fields"
:key="item.prop"
:label="item.label"
:value="item.name">
</el-option>
</el-select>
<filter-mode class="filter-item-mode" v-model="data.mode"></filter-mode>
<div class="filter-item-value">
<i-input v-if="!data.field"></i-input>
<slot v-else :data="data"></slot>
</div>
<div class="filter-tree-action">
<i-button @click="onRemoveItem(node, data)" title="删除"><i class="fa fa-trash-o" aria-hidden="true"></i></i-button>
</div>
</div>
</template>
</template>
</el-tree>
</template>
<script lang="ts">
import {Vue, Component, Prop} from 'vue-property-decorator';
import FilterMode from './filter-mode.vue';
@Component({
components: {
FilterMode
}
})
export default class FilterTree extends Vue {
@Prop() datas: any;
@Prop() fields: any;
protected defaultProps: any = {
children: 'items',
label: 'name'
};
protected relationModes: any[] = [
{ zh: '并且', en: 'AND', value: '$and' },
{ zh: '或', en: 'OR', value: '$or' }
];
get treeItems() {
let root: any = {
name: '$and',
items: this.datas
};
if(this.datas.length == 0) {
this.onAddItem(root);
this.onAddItem(root);
}
return [root];
}
public onFieldChange(data: any) {
if(!data.mode) {
data.mode = '$eq';
}
}
public onAddItem(data: any) {
if(data && data.items) {
data.items.push({
field: null,
mode: null
});
}
}
public onAddGroup(data: any) {
if(data && data.items) {
data.items.push({
name: '$and',
items: []
})
}
}
public onRemoveItem(node: any, data: any) {
if(node && node.parent) {
let pData: any = node.parent.data;
if(pData.items.indexOf(data) >= 0) {
pData.items.splice(pData.items.indexOf(data), 1)
}
}
}
}
</script>
<style lang="less">
@import './filter-tree.less';
</style>
\ No newline at end of file
.ibiz-page-tag { .ibiz-page-tag {
position: relative; position: relative;
margin: 8px 0;
.left{ .left{
.el-tabs__header{ .el-tabs__header{
padding-right:120px; padding-right:120px;
...@@ -60,7 +61,8 @@ ...@@ -60,7 +61,8 @@
border-bottom:2px solid transparent !important; border-bottom:2px solid transparent !important;
} }
.el-tabs__header{ .el-tabs__header{
margin:0 0 1 0; margin:0;
border-bottom: none;
} }
} }
} }
......
...@@ -395,6 +395,9 @@ export default class MDViewEngine extends ViewEngine { ...@@ -395,6 +395,9 @@ export default class MDViewEngine extends ViewEngine {
if (this.getSearchForm() && this.view.isExpandSearchForm) { if (this.getSearchForm() && this.view.isExpandSearchForm) {
Object.assign(arg, this.getSearchForm().getData()); Object.assign(arg, this.getSearchForm().getData());
} }
if (this.view && this.view.searchbar) {
Object.assign(arg, this.view.searchbar.getData());
}
if (this.view && !this.view.isExpandSearchForm) { if (this.view && !this.view.isExpandSearchForm) {
Object.assign(arg, { query: this.view.query }); Object.assign(arg, { query: this.view.query });
} }
......
...@@ -169,4 +169,8 @@ export default { ...@@ -169,4 +169,8 @@ export default {
YouYuan: 'YouYuan', YouYuan: 'YouYuan',
}, },
}, },
appFormGroup: {
hide: 'hide',
showMore: 'show more',
},
}; };
\ No newline at end of file
...@@ -170,4 +170,8 @@ export default { ...@@ -170,4 +170,8 @@ export default {
YouYuan: '幼圆', YouYuan: '幼圆',
}, },
}, },
appFormGroup: {
hide: '隐藏字段',
showMore: '显示更多字段',
},
}; };
\ No newline at end of file
...@@ -46,6 +46,22 @@ export class FormDetailModel { ...@@ -46,6 +46,22 @@ export class FormDetailModel {
*/ */
public visible: boolean = true; public visible: boolean = true;
/**
* 成员是否显示(旧)
*
* @type {boolean}
* @memberof FormDetailModel
*/
public oldVisible: boolean = true;
/**
* 成员是否为受控内容
*
* @type {boolean}
* @memberof FormDetailModel
*/
public isControlledContent: boolean = false;
/** /**
* 成员是否显示标题 * 成员是否显示标题
* *
...@@ -53,6 +69,7 @@ export class FormDetailModel { ...@@ -53,6 +69,7 @@ export class FormDetailModel {
* @memberof FormDetailModel * @memberof FormDetailModel
*/ */
public isShowCaption: boolean = true; public isShowCaption: boolean = true;
/** /**
* Creates an instance of FormDetailModel. * Creates an instance of FormDetailModel.
...@@ -67,7 +84,9 @@ export class FormDetailModel { ...@@ -67,7 +84,9 @@ export class FormDetailModel {
this.form = opts.form ? opts.form : {}; this.form = opts.form ? opts.form : {};
this.name = !Object.is(opts.name, '') ? opts.name : ''; this.name = !Object.is(opts.name, '') ? opts.name : '';
this.visible = opts.visible ? true : false; this.visible = opts.visible ? true : false;
this.oldVisible = opts.visible ? true : false;
this.isShowCaption = opts.isShowCaption ? true : false; this.isShowCaption = opts.isShowCaption ? true : false;
this.isControlledContent = opts.isControlledContent ? true : false;
} }
/** /**
......
...@@ -16,6 +16,30 @@ export class FormGroupPanelModel extends FormDetailModel { ...@@ -16,6 +16,30 @@ export class FormGroupPanelModel extends FormDetailModel {
* @memberof FormGroupPanelModel * @memberof FormGroupPanelModel
*/ */
public uiActionGroup: any = {}; public uiActionGroup: any = {};
/**
* 受控内容组
*
* @type {*}
* @memberof FormGroupPanelModel
*/
public showMoreModeItems: any = [];
/**
* 是否为管理容器
*
* @type {*}
* @memberof FormGroupPanelModel
*/
public isManageContainer: boolean = false;
/**
* 管理容器状态 true显示 false隐藏
*
* @type {*}
* @memberof FormGroupPanelModel
*/
public manageContainerStatus: boolean = true;
/** /**
* Creates an instance of FormGroupPanelModel. * Creates an instance of FormGroupPanelModel.
...@@ -27,5 +51,17 @@ export class FormGroupPanelModel extends FormDetailModel { ...@@ -27,5 +51,17 @@ export class FormGroupPanelModel extends FormDetailModel {
constructor(opts: any = {}) { constructor(opts: any = {}) {
super(opts); super(opts);
Object.assign(this.uiActionGroup, opts.uiActionGroup); Object.assign(this.uiActionGroup, opts.uiActionGroup);
this.showMoreModeItems = opts.showMoreModeItems;
this.isManageContainer = opts.isManageContainer ? true : false;
}
/**
* 设置管理容器状态
*
* @param {boolean} state
* @memberof FormGroupPanelModel
*/
public setManageContainerStatus(state: boolean): void {
this.manageContainerStatus = state;
} }
} }
\ No newline at end of file
...@@ -458,8 +458,8 @@ export default class JobsInfoEditViewBase extends Vue { ...@@ -458,8 +458,8 @@ export default class JobsInfoEditViewBase extends Vue {
* *
* @memberof JobsInfoEditViewBase * @memberof JobsInfoEditViewBase
*/ */
public initNavDataWithRoute(data:any = null, isNew:boolean = false){ public initNavDataWithRoute(data:any = null, isNew:boolean = false, isAlways:boolean = false){
if(this.viewDefaultUsage && Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && Object.is(this.navModel,"route")) ){
this.navDataService.addNavData({id:'jobs-info-edit-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath}); this.navDataService.addNavData({id:'jobs-info-edit-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
} }
} }
...@@ -469,8 +469,8 @@ export default class JobsInfoEditViewBase extends Vue { ...@@ -469,8 +469,8 @@ export default class JobsInfoEditViewBase extends Vue {
* *
* @memberof JobsInfoEditViewBase * @memberof JobsInfoEditViewBase
*/ */
public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true){ public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true, isAlways:boolean = false){
if(this.viewDefaultUsage && !Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && !Object.is(this.navModel,"route")) ){
this.navDataService.addNavDataByOnly({id:'jobs-info-edit-view',tag:this.viewtag,srfkey:this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd); this.navDataService.addNavDataByOnly({id:'jobs-info-edit-view',tag:this.viewtag,srfkey:this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
} }
} }
......
...@@ -538,8 +538,8 @@ export default class JobsInfoGridViewBase extends Vue { ...@@ -538,8 +538,8 @@ export default class JobsInfoGridViewBase extends Vue {
* *
* @memberof JobsInfoGridViewBase * @memberof JobsInfoGridViewBase
*/ */
public initNavDataWithRoute(data:any = null, isNew:boolean = false){ public initNavDataWithRoute(data:any = null, isNew:boolean = false, isAlways:boolean = false){
if(this.viewDefaultUsage && Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && Object.is(this.navModel,"route")) ){
this.navDataService.addNavData({id:'jobs-info-grid-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath}); this.navDataService.addNavData({id:'jobs-info-grid-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
} }
} }
...@@ -549,8 +549,8 @@ export default class JobsInfoGridViewBase extends Vue { ...@@ -549,8 +549,8 @@ export default class JobsInfoGridViewBase extends Vue {
* *
* @memberof JobsInfoGridViewBase * @memberof JobsInfoGridViewBase
*/ */
public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true){ public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true, isAlways:boolean = false){
if(this.viewDefaultUsage && !Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && !Object.is(this.navModel,"route")) ){
this.navDataService.addNavDataByOnly({id:'jobs-info-grid-view',tag:this.viewtag,srfkey:this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd); this.navDataService.addNavDataByOnly({id:'jobs-info-grid-view',tag:this.viewtag,srfkey:this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
} }
} }
...@@ -1015,51 +1015,14 @@ export default class JobsInfoGridViewBase extends Vue { ...@@ -1015,51 +1015,14 @@ export default class JobsInfoGridViewBase extends Vue {
} }
/** !!!!模版产生代码错误:----
* 打开编辑数据视图 Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
* ----
* @param {any[]} args
* @param {*} [params]
* @param {*} [fullargs]
* @param {*} [$event]
* @param {*} [xData]
* @memberof JobsInfoGridView
*/
public opendata(args: any[],fullargs?:any[],params?: any, $event?: any, xData?: any) {
let localContext:any = null;
let localViewParam:any =null;
const data: any = {};
let tempContext = JSON.parse(JSON.stringify(this.context));
if(args.length >0){
Object.assign(tempContext,args[0]);
}
const deResParameters: any[] = [];
const parameters: any[] = [
{ pathName: 'jobsinfos', parameterName: 'jobsinfo' },
];
const _this: any = this;
const openDrawer = (view: any, data: any) => {
let container: Subject<any> = this.$appdrawer.openDrawer(view, tempContext, data);
container.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
return;
}
if (!xData || !(xData.refresh instanceof Function)) {
return;
}
xData.refresh(result.datas);
});
}
const view: any = {
viewname: 'jobs-info-edit-view',
height: 0,
width: 0,
title: this.$t('entities.jobsinfo.views.editview.title'),
placement: 'DRAWER_RIGHT',
};
openDrawer(view, data);
}
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if ctrl.getPSControlContainer().getV... [in template "TEMPLCODE_zh_CN" at line 43, column 5]
----
/** /**
* 新建 * 新建
......
...@@ -428,8 +428,8 @@ export default class JobsLogEditViewBase extends Vue { ...@@ -428,8 +428,8 @@ export default class JobsLogEditViewBase extends Vue {
* *
* @memberof JobsLogEditViewBase * @memberof JobsLogEditViewBase
*/ */
public initNavDataWithRoute(data:any = null, isNew:boolean = false){ public initNavDataWithRoute(data:any = null, isNew:boolean = false, isAlways:boolean = false){
if(this.viewDefaultUsage && Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && Object.is(this.navModel,"route")) ){
this.navDataService.addNavData({id:'jobs-log-edit-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath}); this.navDataService.addNavData({id:'jobs-log-edit-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
} }
} }
...@@ -439,8 +439,8 @@ export default class JobsLogEditViewBase extends Vue { ...@@ -439,8 +439,8 @@ export default class JobsLogEditViewBase extends Vue {
* *
* @memberof JobsLogEditViewBase * @memberof JobsLogEditViewBase
*/ */
public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true){ public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true, isAlways:boolean = false){
if(this.viewDefaultUsage && !Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && !Object.is(this.navModel,"route")) ){
this.navDataService.addNavDataByOnly({id:'jobs-log-edit-view',tag:this.viewtag,srfkey:this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd); this.navDataService.addNavDataByOnly({id:'jobs-log-edit-view',tag:this.viewtag,srfkey:this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
} }
} }
......
...@@ -462,8 +462,8 @@ export default class JobsLogGridViewBase extends Vue { ...@@ -462,8 +462,8 @@ export default class JobsLogGridViewBase extends Vue {
* *
* @memberof JobsLogGridViewBase * @memberof JobsLogGridViewBase
*/ */
public initNavDataWithRoute(data:any = null, isNew:boolean = false){ public initNavDataWithRoute(data:any = null, isNew:boolean = false, isAlways:boolean = false){
if(this.viewDefaultUsage && Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && Object.is(this.navModel,"route")) ){
this.navDataService.addNavData({id:'jobs-log-grid-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath}); this.navDataService.addNavData({id:'jobs-log-grid-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
} }
} }
...@@ -473,8 +473,8 @@ export default class JobsLogGridViewBase extends Vue { ...@@ -473,8 +473,8 @@ export default class JobsLogGridViewBase extends Vue {
* *
* @memberof JobsLogGridViewBase * @memberof JobsLogGridViewBase
*/ */
public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true){ public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true, isAlways:boolean = false){
if(this.viewDefaultUsage && !Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && !Object.is(this.navModel,"route")) ){
this.navDataService.addNavDataByOnly({id:'jobs-log-grid-view',tag:this.viewtag,srfkey:this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd); this.navDataService.addNavDataByOnly({id:'jobs-log-grid-view',tag:this.viewtag,srfkey:this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
} }
} }
...@@ -708,51 +708,14 @@ export default class JobsLogGridViewBase extends Vue { ...@@ -708,51 +708,14 @@ export default class JobsLogGridViewBase extends Vue {
} }
/** !!!!模版产生代码错误:----
* 打开编辑数据视图 Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
* ----
* @param {any[]} args
* @param {*} [params]
* @param {*} [fullargs]
* @param {*} [$event]
* @param {*} [xData]
* @memberof JobsLogGridView
*/
public opendata(args: any[],fullargs?:any[],params?: any, $event?: any, xData?: any) {
let localContext:any = null;
let localViewParam:any =null;
const data: any = {};
let tempContext = JSON.parse(JSON.stringify(this.context));
if(args.length >0){
Object.assign(tempContext,args[0]);
}
const deResParameters: any[] = [];
const parameters: any[] = [
{ pathName: 'jobslogs', parameterName: 'jobslog' },
];
const _this: any = this;
const openDrawer = (view: any, data: any) => {
let container: Subject<any> = this.$appdrawer.openDrawer(view, tempContext, data);
container.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
return;
}
if (!xData || !(xData.refresh instanceof Function)) {
return;
}
xData.refresh(result.datas);
});
}
const view: any = {
viewname: 'jobs-log-edit-view',
height: 0,
width: 0,
title: this.$t('entities.jobslog.views.editview.title'),
placement: 'DRAWER_RIGHT',
};
openDrawer(view, data);
}
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if ctrl.getPSControlContainer().getV... [in template "TEMPLCODE_zh_CN" at line 43, column 5]
----
/** /**
......
...@@ -458,8 +458,8 @@ export default class JobsRegistryEditViewBase extends Vue { ...@@ -458,8 +458,8 @@ export default class JobsRegistryEditViewBase extends Vue {
* *
* @memberof JobsRegistryEditViewBase * @memberof JobsRegistryEditViewBase
*/ */
public initNavDataWithRoute(data:any = null, isNew:boolean = false){ public initNavDataWithRoute(data:any = null, isNew:boolean = false, isAlways:boolean = false){
if(this.viewDefaultUsage && Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && Object.is(this.navModel,"route")) ){
this.navDataService.addNavData({id:'jobs-registry-edit-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath}); this.navDataService.addNavData({id:'jobs-registry-edit-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
} }
} }
...@@ -469,8 +469,8 @@ export default class JobsRegistryEditViewBase extends Vue { ...@@ -469,8 +469,8 @@ export default class JobsRegistryEditViewBase extends Vue {
* *
* @memberof JobsRegistryEditViewBase * @memberof JobsRegistryEditViewBase
*/ */
public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true){ public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true, isAlways:boolean = false){
if(this.viewDefaultUsage && !Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && !Object.is(this.navModel,"route")) ){
this.navDataService.addNavDataByOnly({id:'jobs-registry-edit-view',tag:this.viewtag,srfkey:this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd); this.navDataService.addNavDataByOnly({id:'jobs-registry-edit-view',tag:this.viewtag,srfkey:this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
} }
} }
......
...@@ -510,8 +510,8 @@ export default class JobsRegistryGridViewBase extends Vue { ...@@ -510,8 +510,8 @@ export default class JobsRegistryGridViewBase extends Vue {
* *
* @memberof JobsRegistryGridViewBase * @memberof JobsRegistryGridViewBase
*/ */
public initNavDataWithRoute(data:any = null, isNew:boolean = false){ public initNavDataWithRoute(data:any = null, isNew:boolean = false, isAlways:boolean = false){
if(this.viewDefaultUsage && Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && Object.is(this.navModel,"route")) ){
this.navDataService.addNavData({id:'jobs-registry-grid-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath}); this.navDataService.addNavData({id:'jobs-registry-grid-view',tag:this.viewtag,srfkey:isNew ? null : this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
} }
} }
...@@ -521,8 +521,8 @@ export default class JobsRegistryGridViewBase extends Vue { ...@@ -521,8 +521,8 @@ export default class JobsRegistryGridViewBase extends Vue {
* *
* @memberof JobsRegistryGridViewBase * @memberof JobsRegistryGridViewBase
*/ */
public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true){ public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true, isAlways:boolean = false){
if(this.viewDefaultUsage && !Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && !Object.is(this.navModel,"route")) ){
this.navDataService.addNavDataByOnly({id:'jobs-registry-grid-view',tag:this.viewtag,srfkey:this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd); this.navDataService.addNavDataByOnly({id:'jobs-registry-grid-view',tag:this.viewtag,srfkey:this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
} }
} }
...@@ -922,51 +922,14 @@ export default class JobsRegistryGridViewBase extends Vue { ...@@ -922,51 +922,14 @@ export default class JobsRegistryGridViewBase extends Vue {
} }
/** !!!!模版产生代码错误:----
* 打开编辑数据视图 Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
* ----
* @param {any[]} args
* @param {*} [params]
* @param {*} [fullargs]
* @param {*} [$event]
* @param {*} [xData]
* @memberof JobsRegistryGridView
*/
public opendata(args: any[],fullargs?:any[],params?: any, $event?: any, xData?: any) {
let localContext:any = null;
let localViewParam:any =null;
const data: any = {};
let tempContext = JSON.parse(JSON.stringify(this.context));
if(args.length >0){
Object.assign(tempContext,args[0]);
}
const deResParameters: any[] = [];
const parameters: any[] = [
{ pathName: 'jobsregistries', parameterName: 'jobsregistry' },
];
const _this: any = this;
const openDrawer = (view: any, data: any) => {
let container: Subject<any> = this.$appdrawer.openDrawer(view, tempContext, data);
container.subscribe((result: any) => {
if (!result || !Object.is(result.ret, 'OK')) {
return;
}
if (!xData || !(xData.refresh instanceof Function)) {
return;
}
xData.refresh(result.datas);
});
}
const view: any = {
viewname: 'jobs-registry-edit-view',
height: 0,
width: 0,
title: this.$t('entities.jobsregistry.views.editview.title'),
placement: 'DRAWER_RIGHT',
};
openDrawer(view, data);
}
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if ctrl.getPSControlContainer().getV... [in template "TEMPLCODE_zh_CN" at line 43, column 5]
----
/** /**
* 新建 * 新建
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<sider :width="collapseChange ? 64 : 200" hide-trigger v-model="collapseChange"> <sider :width="collapseChange ? 64 : 200" hide-trigger v-model="collapseChange">
<div class="sider-top"> <div class="sider-top">
<div class="page-logo"> <div class="page-logo">
<span class="menuicon" @click="contextMenuDragVisiable=!contextMenuDragVisiable"><Icon type="md-menu" /></span> <span class="menuicon" v-if="isEnableAppSwitch" @click="contextMenuDragVisiable=!contextMenuDragVisiable"><Icon type="md-menu" /></span>
<span v-show="!collapseChange" style="overflow-x: hidden;text-overflow: ellipsis;white-space: nowrap;display: block;text-align: center;font-weight: 300;font-size: 20px;">{{$t(model.srfCaption)}}</span> <span v-show="!collapseChange" style="overflow-x: hidden;text-overflow: ellipsis;white-space: nowrap;display: block;text-align: center;font-weight: 300;font-size: 20px;">{{$t(model.srfCaption)}}</span>
</div> </div>
</div> </div>
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
ref='appmenu' ref='appmenu'
@closeview="closeView($event)"> @closeview="closeView($event)">
</view_appmenu> </view_appmenu>
<context-menu-drag :contextMenuDragVisiable="contextMenuDragVisiable"></context-menu-drag> <context-menu-drag v-if="isEnableAppSwitch" :contextMenuDragVisiable="contextMenuDragVisiable"></context-menu-drag>
</sider> </sider>
<layout> <layout>
<header class="index_header"> <header class="index_header">
...@@ -408,8 +408,8 @@ export default class TaskIndexViewBase extends Vue { ...@@ -408,8 +408,8 @@ export default class TaskIndexViewBase extends Vue {
* *
* @memberof TaskIndexViewBase * @memberof TaskIndexViewBase
*/ */
public initNavDataWithRoute(data:any = null, isNew:boolean = false){ public initNavDataWithRoute(data:any = null, isNew:boolean = false, isAlways:boolean = false){
if(this.viewDefaultUsage && Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && Object.is(this.navModel,"route")) ){
this.navDataService.addNavData({id:'task-index-view',tag:this.viewtag,srfkey:isNew ? null : null,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath}); this.navDataService.addNavData({id:'task-index-view',tag:this.viewtag,srfkey:isNew ? null : null,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
} }
} }
...@@ -419,8 +419,8 @@ export default class TaskIndexViewBase extends Vue { ...@@ -419,8 +419,8 @@ export default class TaskIndexViewBase extends Vue {
* *
* @memberof TaskIndexViewBase * @memberof TaskIndexViewBase
*/ */
public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true){ public initNavDataWithTab(data:any = null,isOnlyAdd:boolean = true, isAlways:boolean = false){
if(this.viewDefaultUsage && !Object.is(this.navModel,"route")){ if( isAlways || (this.viewDefaultUsage && !Object.is(this.navModel,"route")) ){
this.navDataService.addNavDataByOnly({id:'task-index-view',tag:this.viewtag,srfkey:null,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd); this.navDataService.addNavDataByOnly({id:'task-index-view',tag:this.viewtag,srfkey:null,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath},isOnlyAdd);
} }
} }
...@@ -542,6 +542,14 @@ export default class TaskIndexViewBase extends Vue { ...@@ -542,6 +542,14 @@ export default class TaskIndexViewBase extends Vue {
*/ */
public contextMenuDragVisiable: boolean = false; public contextMenuDragVisiable: boolean = false;
/**
* 是否支持应用切换
*
* @type {boolean}
* @memberof TaskIndexViewBase
*/
public isEnableAppSwitch: boolean = false;
/** /**
* 初始化之前 * 初始化之前
* *
......
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
height: 100%; height: 100%;
justify-content: center;
>.menuicon{ >.menuicon{
display: block; display: block;
text-align: center; text-align: center;
......
import { Subject } from 'rxjs';
export interface Message {
/**
* 名称(通常是应用实体名称)
*
* @memberof Message
*/
name: string;
/**
* 行为(操作数据行为)
*
* @memberof Message
*/
action: string;
/**
* 数据(操作数据)
*
* @memberof Message
*/
data: any;
}
/**
* 应用中心服务类
*
* @export
* @class AppCenterService
*/
export default class AppCenterService {
/**
* Vue 状态管理器
*
* @private
* @type {*}
* @memberof AppCenterService
*/
private static store: any;
/**
* 应用数据状态管理对象
*
* @private
* @type {Subject<any>}
* @memberof AppCenterService
*/
private static subject:Subject<any> = new Subject<any>();
/**
* 单例变量声明
*
* @private
* @static
* @type {AppCenterService}
* @memberof AppCenterService
*/
private static appCenterService: AppCenterService;
/**
* 初始化实例
*
* @memberof AppCenterService
*/
constructor() {}
/**
* 获取 AppCenterService 单例对象
*
* @static
* @returns {AppCenterService}
* @memberof AppCenterService
*/
public static getInstance(store: any): AppCenterService {
if (!AppCenterService.appCenterService) {
AppCenterService.appCenterService = new AppCenterService();
}
this.store = store;
return this.appCenterService;
}
/**
* 通知消息
*
* @static
* @memberof AppCenterService
*/
public static notifyMessage(message:Message){
this.subject.next(message);
}
/**
* 获取消息中心
*
* @static
* @memberof AppCenterService
*/
public static getMessageCenter():Subject<any>{
return this.subject;
}
}
\ No newline at end of file
...@@ -48,7 +48,8 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -48,7 +48,8 @@ export default class JobsInfoServiceBase extends EntityService {
* @memberof JobsInfoServiceBase * @memberof JobsInfoServiceBase
*/ */
public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().get(`/jobsinfos/${context.jobsinfo}/select`,isloading); let res:any = await Http.getInstance().get(`/jobsinfos/${context.jobsinfo}/select`,isloading);
return res;
} }
/** /**
...@@ -61,7 +62,8 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -61,7 +62,8 @@ export default class JobsInfoServiceBase extends EntityService {
* @memberof JobsInfoServiceBase * @memberof JobsInfoServiceBase
*/ */
public async Start(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Start(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/start`,data,isloading); let res:any = await Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/start`,data,isloading);
return res;
} }
/** /**
...@@ -77,7 +79,7 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -77,7 +79,7 @@ export default class JobsInfoServiceBase extends EntityService {
let masterData:any = {}; let masterData:any = {};
Object.assign(data,masterData); Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/jobsinfos/${context.jobsinfo}`,data,isloading); let res:any = await Http.getInstance().put(`/jobsinfos/${context.jobsinfo}`,data,isloading);
return res; return res;
} }
/** /**
...@@ -90,7 +92,8 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -90,7 +92,8 @@ export default class JobsInfoServiceBase extends EntityService {
* @memberof JobsInfoServiceBase * @memberof JobsInfoServiceBase
*/ */
public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/checkkey`,data,isloading); let res:any = await Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/checkkey`,data,isloading);
return res;
} }
/** /**
...@@ -103,7 +106,8 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -103,7 +106,8 @@ export default class JobsInfoServiceBase extends EntityService {
* @memberof JobsInfoServiceBase * @memberof JobsInfoServiceBase
*/ */
public async Execute(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Execute(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/execute`,data,isloading); let res:any = await Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/execute`,data,isloading);
return res;
} }
/** /**
...@@ -119,7 +123,7 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -119,7 +123,7 @@ export default class JobsInfoServiceBase extends EntityService {
let masterData:any = {}; let masterData:any = {};
Object.assign(data,masterData); Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/save`,data,isloading); let res:any = await Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/save`,data,isloading);
return res; return res;
} }
/** /**
...@@ -147,7 +151,8 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -147,7 +151,8 @@ export default class JobsInfoServiceBase extends EntityService {
* @memberof JobsInfoServiceBase * @memberof JobsInfoServiceBase
*/ */
public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().delete(`/jobsinfos/${context.jobsinfo}`,isloading); let res:any = await Http.getInstance().delete(`/jobsinfos/${context.jobsinfo}`,isloading);
return res;
} }
/** /**
...@@ -160,8 +165,8 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -160,8 +165,8 @@ export default class JobsInfoServiceBase extends EntityService {
* @memberof JobsInfoServiceBase * @memberof JobsInfoServiceBase
*/ */
public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
let res:any = await Http.getInstance().get(`/jobsinfos/${context.jobsinfo}`,isloading); let res:any = await Http.getInstance().get(`/jobsinfos/${context.jobsinfo}`,isloading);
return res; return res;
} }
/** /**
...@@ -197,7 +202,8 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -197,7 +202,8 @@ export default class JobsInfoServiceBase extends EntityService {
* @memberof JobsInfoServiceBase * @memberof JobsInfoServiceBase
*/ */
public async Stop(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Stop(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/stop`,data,isloading); let res:any = await Http.getInstance().post(`/jobsinfos/${context.jobsinfo}/stop`,data,isloading);
return res;
} }
/** /**
...@@ -211,6 +217,7 @@ export default class JobsInfoServiceBase extends EntityService { ...@@ -211,6 +217,7 @@ export default class JobsInfoServiceBase extends EntityService {
*/ */
public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
let tempData:any = JSON.parse(JSON.stringify(data)); let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/jobsinfos/fetchdefault`,tempData,isloading); let res:any = await Http.getInstance().get(`/jobsinfos/fetchdefault`,tempData,isloading);
return res;
} }
} }
\ No newline at end of file
...@@ -48,7 +48,8 @@ export default class JobsLockServiceBase extends EntityService { ...@@ -48,7 +48,8 @@ export default class JobsLockServiceBase extends EntityService {
* @memberof JobsLockServiceBase * @memberof JobsLockServiceBase
*/ */
public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().get(`/jobslocks/${context.jobslock}/select`,isloading); let res:any = await Http.getInstance().get(`/jobslocks/${context.jobslock}/select`,isloading);
return res;
} }
/** /**
...@@ -87,7 +88,7 @@ export default class JobsLockServiceBase extends EntityService { ...@@ -87,7 +88,7 @@ export default class JobsLockServiceBase extends EntityService {
let masterData:any = {}; let masterData:any = {};
Object.assign(data,masterData); Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/jobslocks/${context.jobslock}/save`,data,isloading); let res:any = await Http.getInstance().post(`/jobslocks/${context.jobslock}/save`,data,isloading);
return res; return res;
} }
/** /**
...@@ -100,8 +101,8 @@ export default class JobsLockServiceBase extends EntityService { ...@@ -100,8 +101,8 @@ export default class JobsLockServiceBase extends EntityService {
* @memberof JobsLockServiceBase * @memberof JobsLockServiceBase
*/ */
public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
let res:any = await Http.getInstance().get(`/jobslocks/${context.jobslock}`,isloading); let res:any = await Http.getInstance().get(`/jobslocks/${context.jobslock}`,isloading);
return res; return res;
} }
/** /**
...@@ -117,7 +118,7 @@ export default class JobsLockServiceBase extends EntityService { ...@@ -117,7 +118,7 @@ export default class JobsLockServiceBase extends EntityService {
let masterData:any = {}; let masterData:any = {};
Object.assign(data,masterData); Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/jobslocks/${context.jobslock}`,data,isloading); let res:any = await Http.getInstance().put(`/jobslocks/${context.jobslock}`,data,isloading);
return res; return res;
} }
/** /**
...@@ -130,7 +131,8 @@ export default class JobsLockServiceBase extends EntityService { ...@@ -130,7 +131,8 @@ export default class JobsLockServiceBase extends EntityService {
* @memberof JobsLockServiceBase * @memberof JobsLockServiceBase
*/ */
public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().post(`/jobslocks/${context.jobslock}/checkkey`,data,isloading); let res:any = await Http.getInstance().post(`/jobslocks/${context.jobslock}/checkkey`,data,isloading);
return res;
} }
/** /**
...@@ -143,7 +145,8 @@ export default class JobsLockServiceBase extends EntityService { ...@@ -143,7 +145,8 @@ export default class JobsLockServiceBase extends EntityService {
* @memberof JobsLockServiceBase * @memberof JobsLockServiceBase
*/ */
public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().delete(`/jobslocks/${context.jobslock}`,isloading); let res:any = await Http.getInstance().delete(`/jobslocks/${context.jobslock}`,isloading);
return res;
} }
/** /**
...@@ -172,6 +175,7 @@ export default class JobsLockServiceBase extends EntityService { ...@@ -172,6 +175,7 @@ export default class JobsLockServiceBase extends EntityService {
*/ */
public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
let tempData:any = JSON.parse(JSON.stringify(data)); let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/jobslocks/fetchdefault`,tempData,isloading); let res:any = await Http.getInstance().get(`/jobslocks/fetchdefault`,tempData,isloading);
return res;
} }
} }
\ No newline at end of file
...@@ -48,7 +48,8 @@ export default class JobsLogServiceBase extends EntityService { ...@@ -48,7 +48,8 @@ export default class JobsLogServiceBase extends EntityService {
* @memberof JobsLogServiceBase * @memberof JobsLogServiceBase
*/ */
public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().get(`/jobslogs/${context.jobslog}/select`,isloading); let res:any = await Http.getInstance().get(`/jobslogs/${context.jobslog}/select`,isloading);
return res;
} }
/** /**
...@@ -79,7 +80,7 @@ export default class JobsLogServiceBase extends EntityService { ...@@ -79,7 +80,7 @@ export default class JobsLogServiceBase extends EntityService {
let masterData:any = {}; let masterData:any = {};
Object.assign(data,masterData); Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/jobslogs/${context.jobslog}`,data,isloading); let res:any = await Http.getInstance().put(`/jobslogs/${context.jobslog}`,data,isloading);
return res; return res;
} }
/** /**
...@@ -115,7 +116,8 @@ export default class JobsLogServiceBase extends EntityService { ...@@ -115,7 +116,8 @@ export default class JobsLogServiceBase extends EntityService {
* @memberof JobsLogServiceBase * @memberof JobsLogServiceBase
*/ */
public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().post(`/jobslogs/${context.jobslog}/checkkey`,data,isloading); let res:any = await Http.getInstance().post(`/jobslogs/${context.jobslog}/checkkey`,data,isloading);
return res;
} }
/** /**
...@@ -131,7 +133,7 @@ export default class JobsLogServiceBase extends EntityService { ...@@ -131,7 +133,7 @@ export default class JobsLogServiceBase extends EntityService {
let masterData:any = {}; let masterData:any = {};
Object.assign(data,masterData); Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/jobslogs/${context.jobslog}/save`,data,isloading); let res:any = await Http.getInstance().post(`/jobslogs/${context.jobslog}/save`,data,isloading);
return res; return res;
} }
/** /**
...@@ -144,7 +146,8 @@ export default class JobsLogServiceBase extends EntityService { ...@@ -144,7 +146,8 @@ export default class JobsLogServiceBase extends EntityService {
* @memberof JobsLogServiceBase * @memberof JobsLogServiceBase
*/ */
public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().delete(`/jobslogs/${context.jobslog}`,isloading); let res:any = await Http.getInstance().delete(`/jobslogs/${context.jobslog}`,isloading);
return res;
} }
/** /**
...@@ -157,8 +160,8 @@ export default class JobsLogServiceBase extends EntityService { ...@@ -157,8 +160,8 @@ export default class JobsLogServiceBase extends EntityService {
* @memberof JobsLogServiceBase * @memberof JobsLogServiceBase
*/ */
public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
let res:any = await Http.getInstance().get(`/jobslogs/${context.jobslog}`,isloading); let res:any = await Http.getInstance().get(`/jobslogs/${context.jobslog}`,isloading);
return res; return res;
} }
/** /**
...@@ -172,6 +175,7 @@ export default class JobsLogServiceBase extends EntityService { ...@@ -172,6 +175,7 @@ export default class JobsLogServiceBase extends EntityService {
*/ */
public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
let tempData:any = JSON.parse(JSON.stringify(data)); let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/jobslogs/fetchdefault`,tempData,isloading); let res:any = await Http.getInstance().get(`/jobslogs/fetchdefault`,tempData,isloading);
return res;
} }
} }
\ No newline at end of file
...@@ -48,7 +48,8 @@ export default class JobsRegistryServiceBase extends EntityService { ...@@ -48,7 +48,8 @@ export default class JobsRegistryServiceBase extends EntityService {
* @memberof JobsRegistryServiceBase * @memberof JobsRegistryServiceBase
*/ */
public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Select(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().get(`/jobsregistries/${context.jobsregistry}/select`,isloading); let res:any = await Http.getInstance().get(`/jobsregistries/${context.jobsregistry}/select`,isloading);
return res;
} }
/** /**
...@@ -61,8 +62,8 @@ export default class JobsRegistryServiceBase extends EntityService { ...@@ -61,8 +62,8 @@ export default class JobsRegistryServiceBase extends EntityService {
* @memberof JobsRegistryServiceBase * @memberof JobsRegistryServiceBase
*/ */
public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Get(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
let res:any = await Http.getInstance().get(`/jobsregistries/${context.jobsregistry}`,isloading); let res:any = await Http.getInstance().get(`/jobsregistries/${context.jobsregistry}`,isloading);
return res; return res;
} }
/** /**
...@@ -75,7 +76,8 @@ export default class JobsRegistryServiceBase extends EntityService { ...@@ -75,7 +76,8 @@ export default class JobsRegistryServiceBase extends EntityService {
* @memberof JobsRegistryServiceBase * @memberof JobsRegistryServiceBase
*/ */
public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async Remove(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().delete(`/jobsregistries/${context.jobsregistry}`,isloading); let res:any = await Http.getInstance().delete(`/jobsregistries/${context.jobsregistry}`,isloading);
return res;
} }
/** /**
...@@ -91,7 +93,7 @@ export default class JobsRegistryServiceBase extends EntityService { ...@@ -91,7 +93,7 @@ export default class JobsRegistryServiceBase extends EntityService {
let masterData:any = {}; let masterData:any = {};
Object.assign(data,masterData); Object.assign(data,masterData);
let res:any = await Http.getInstance().put(`/jobsregistries/${context.jobsregistry}`,data,isloading); let res:any = await Http.getInstance().put(`/jobsregistries/${context.jobsregistry}`,data,isloading);
return res; return res;
} }
/** /**
...@@ -107,7 +109,7 @@ export default class JobsRegistryServiceBase extends EntityService { ...@@ -107,7 +109,7 @@ export default class JobsRegistryServiceBase extends EntityService {
let masterData:any = {}; let masterData:any = {};
Object.assign(data,masterData); Object.assign(data,masterData);
let res:any = await Http.getInstance().post(`/jobsregistries/${context.jobsregistry}/save`,data,isloading); let res:any = await Http.getInstance().post(`/jobsregistries/${context.jobsregistry}/save`,data,isloading);
return res; return res;
} }
/** /**
...@@ -143,7 +145,8 @@ export default class JobsRegistryServiceBase extends EntityService { ...@@ -143,7 +145,8 @@ export default class JobsRegistryServiceBase extends EntityService {
* @memberof JobsRegistryServiceBase * @memberof JobsRegistryServiceBase
*/ */
public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async CheckKey(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().post(`/jobsregistries/${context.jobsregistry}/checkkey`,data,isloading); let res:any = await Http.getInstance().post(`/jobsregistries/${context.jobsregistry}/checkkey`,data,isloading);
return res;
} }
/** /**
...@@ -172,6 +175,7 @@ export default class JobsRegistryServiceBase extends EntityService { ...@@ -172,6 +175,7 @@ export default class JobsRegistryServiceBase extends EntityService {
*/ */
public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async FetchDefault(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
let tempData:any = JSON.parse(JSON.stringify(data)); let tempData:any = JSON.parse(JSON.stringify(data));
return Http.getInstance().get(`/jobsregistries/fetchdefault`,tempData,isloading); let res:any = await Http.getInstance().get(`/jobsregistries/fetchdefault`,tempData,isloading);
return res;
} }
} }
\ No newline at end of file
...@@ -44,9 +44,11 @@ export const getAuthMenu = (state: any) => (menu:any) =>{ ...@@ -44,9 +44,11 @@ export const getAuthMenu = (state: any) => (menu:any) =>{
resourceIndex= state.resourceData.findIndex((resourcetag: any, objIndex: any, objs: any) => { resourceIndex= state.resourceData.findIndex((resourcetag: any, objIndex: any, objs: any) => {
return Object.is(menu.resourcetag, resourcetag); return Object.is(menu.resourcetag, resourcetag);
}) })
menuIndex= state.menuData.findIndex((menutag: any, objIndex: any, objs: any) => {
return Object.is(menu.authtag, menutag);
})
return (resourceIndex !== -1 || menuIndex !== -1)?true:false;
}else{
return true;
} }
menuIndex= state.menuData.findIndex((menutag: any, objIndex: any, objs: any) => {
return Object.is(menu.authtag, menutag);
})
return (resourceIndex !== -1 || menuIndex !== -1)?true:false;
} }
\ No newline at end of file
...@@ -63,7 +63,7 @@ export class ViewTool { ...@@ -63,7 +63,7 @@ export class ViewTool {
public static buildUpRoutePath(route: Route, viewParam: any = {}, deResParameters: any[], parameters: any[], args: any[], data: any): string { public static buildUpRoutePath(route: Route, viewParam: any = {}, deResParameters: any[], parameters: any[], args: any[], data: any): string {
const indexRoutePath = this.getIndexRoutePath(route); const indexRoutePath = this.getIndexRoutePath(route);
const deResRoutePath = this.getDeResRoutePath(viewParam, deResParameters, args); const deResRoutePath = this.getDeResRoutePath(viewParam, deResParameters, args);
const deRoutePath = this.getActiveRoutePath(parameters, args, data); const deRoutePath = this.getActiveRoutePath(parameters, args, data,viewParam);
return `${indexRoutePath}${deResRoutePath}${deRoutePath}`; return `${indexRoutePath}${deResRoutePath}${deRoutePath}`;
} }
...@@ -123,7 +123,7 @@ export class ViewTool { ...@@ -123,7 +123,7 @@ export class ViewTool {
* @returns {string} * @returns {string}
* @memberof ViewTool * @memberof ViewTool
*/ */
public static getActiveRoutePath(parameters: any[], args: any[], data: any): string { public static getActiveRoutePath(parameters: any[], args: any[], data: any,viewParam: any = {}): string {
let routePath: string = ''; let routePath: string = '';
// 不存在应用实体 // 不存在应用实体
if(parameters && parameters.length >0){ if(parameters && parameters.length >0){
...@@ -137,8 +137,7 @@ export class ViewTool { ...@@ -137,8 +137,7 @@ export class ViewTool {
let [arg] = args; let [arg] = args;
arg = arg ? arg : {}; arg = arg ? arg : {};
const [{ pathName: _pathName, parameterName: _parameterName }, { pathName: _pathName2, parameterName: _parameterName2 }] = parameters; const [{ pathName: _pathName, parameterName: _parameterName }, { pathName: _pathName2, parameterName: _parameterName2 }] = parameters;
const _value: any = arg[_parameterName] && !Object.is(arg[_parameterName], '') ? const _value: any = arg[_parameterName] || viewParam[_parameterName] || null;
arg[_parameterName] : null;
routePath = `/${_pathName}/${_value}/${_pathName2}`; routePath = `/${_pathName}/${_value}/${_pathName2}`;
if (Object.keys(data).length > 0) { if (Object.keys(data).length > 0) {
routePath = `${routePath}?${qs.stringify(data, { delimiter: ';' })}`; routePath = `${routePath}?${qs.stringify(data, { delimiter: ';' })}`;
......
...@@ -124,6 +124,7 @@ import { Subject, Subscription } from 'rxjs'; ...@@ -124,6 +124,7 @@ import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control'; import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils'; import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service'; import NavDataService from '@/service/app/navdata-service';
import AppCenterService from "@service/app/app-center-service";
import TaskIndexViewService from './task-index-view-appmenu-service'; import TaskIndexViewService from './task-index-view-appmenu-service';
import TaskIndexViewModel from './task-index-view-appmenu-model'; import TaskIndexViewModel from './task-index-view-appmenu-model';
......
...@@ -52,6 +52,7 @@ import { Subject, Subscription } from 'rxjs'; ...@@ -52,6 +52,7 @@ import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control'; import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils'; import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service'; import NavDataService from '@/service/app/navdata-service';
import AppCenterService from "@service/app/app-center-service";
import JobsInfoService from '@/service/jobs-info/jobs-info-service'; import JobsInfoService from '@/service/jobs-info/jobs-info-service';
import DefaultService from './default-searchform-service'; import DefaultService from './default-searchform-service';
......
...@@ -80,6 +80,8 @@ export default class DefaultService extends ControlService { ...@@ -80,6 +80,8 @@ export default class DefaultService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -80,6 +80,8 @@ export default class MainService extends ControlService { ...@@ -80,6 +80,8 @@ export default class MainService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -179,6 +179,7 @@ import { Subject, Subscription } from 'rxjs'; ...@@ -179,6 +179,7 @@ import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control'; import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils'; import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service'; import NavDataService from '@/service/app/navdata-service';
import AppCenterService from "@service/app/app-center-service";
import JobsInfoService from '@/service/jobs-info/jobs-info-service'; import JobsInfoService from '@/service/jobs-info/jobs-info-service';
import MainService from './main-grid-service'; import MainService from './main-grid-service';
...@@ -308,6 +309,15 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -308,6 +309,15 @@ export default class MainBase extends Vue implements ControlInterface {
*/ */
public codeListService:CodeListService = new CodeListService({ $store: this.$store }); public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 应用状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof MainBase
*/
public appStateEvent: Subscription | undefined;
/** /**
* 获取多项数据 * 获取多项数据
* *
...@@ -613,63 +623,72 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -613,63 +623,72 @@ export default class MainBase extends Vue implements ControlInterface {
label: '主键ID', label: '主键ID',
langtag: 'entities.jobsinfo.main_grid.columns.id', langtag: 'entities.jobsinfo.main_grid.columns.id',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'app', name: 'app',
label: '服务名', label: '服务名',
langtag: 'entities.jobsinfo.main_grid.columns.app', langtag: 'entities.jobsinfo.main_grid.columns.app',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'handler', name: 'handler',
label: '执行器任务HANDLER', label: '执行器任务HANDLER',
langtag: 'entities.jobsinfo.main_grid.columns.handler', langtag: 'entities.jobsinfo.main_grid.columns.handler',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'cron', name: 'cron',
label: '任务执行CRON', label: '任务执行CRON',
langtag: 'entities.jobsinfo.main_grid.columns.cron', langtag: 'entities.jobsinfo.main_grid.columns.cron',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'last_time', name: 'last_time',
label: '上次调度时间', label: '上次调度时间',
langtag: 'entities.jobsinfo.main_grid.columns.last_time', langtag: 'entities.jobsinfo.main_grid.columns.last_time',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'next_time', name: 'next_time',
label: '下次调度时间', label: '下次调度时间',
langtag: 'entities.jobsinfo.main_grid.columns.next_time', langtag: 'entities.jobsinfo.main_grid.columns.next_time',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'status', name: 'status',
label: '状态', label: '状态',
langtag: 'entities.jobsinfo.main_grid.columns.status', langtag: 'entities.jobsinfo.main_grid.columns.status',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'timeout', name: 'timeout',
label: '任务执行超时时间(秒)', label: '任务执行超时时间(秒)',
langtag: 'entities.jobsinfo.main_grid.columns.timeout', langtag: 'entities.jobsinfo.main_grid.columns.timeout',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'update_time', name: 'update_time',
label: '更新时间', label: '更新时间',
langtag: 'entities.jobsinfo.main_grid.columns.update_time', langtag: 'entities.jobsinfo.main_grid.columns.update_time',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
] ]
...@@ -1193,6 +1212,16 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1193,6 +1212,16 @@ export default class MainBase extends Vue implements ControlInterface {
} }
}); });
} }
if(AppCenterService && AppCenterService.getMessageCenter()){
this.appStateEvent = AppCenterService.getMessageCenter().subscribe(({ name, action, data }) =>{
if(!Object.is(name,"JobsInfo")){
return;
}
if(Object.is(action,'appRefresh')){
this.refresh([data]);
}
})
}
} }
/** /**
...@@ -1213,6 +1242,9 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1213,6 +1242,9 @@ export default class MainBase extends Vue implements ControlInterface {
if (this.viewStateEvent) { if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe(); this.viewStateEvent.unsubscribe();
} }
if(this.appStateEvent){
this.appStateEvent.unsubscribe();
}
} }
/** /**
...@@ -1658,18 +1690,17 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1658,18 +1690,17 @@ export default class MainBase extends Vue implements ControlInterface {
* @memberof MainBase * @memberof MainBase
*/ */
public getCellClassName(args:{row: any, column: any, rowIndex: number, columnIndex:number}){ public getCellClassName(args:{row: any, column: any, rowIndex: number, columnIndex:number}){
let hasRowEdit:any = { if(args.column.property){
'id':false, let col = this.allColumns.find((item:any)=>{
'app':false, return Object.is(args.column.property,item.name);
'handler':false, })
'cron':false, if(col !== undefined){
'last_time':false, if(col.isEnableRowEdit && this.actualIsOpenEdit ){
'next_time':false, return 'edit-cell';
'status':false, }
'timeout':false, }
'update_time':false,
} }
return ( hasRowEdit[args.column.property] && this.actualIsOpenEdit ) ? "edit-cell" : "info-cell"; return 'info-cell';
} }
/** /**
......
...@@ -81,6 +81,8 @@ export default class MainService extends ControlService { ...@@ -81,6 +81,8 @@ export default class MainService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -40,6 +40,7 @@ import { Subject, Subscription } from 'rxjs'; ...@@ -40,6 +40,7 @@ import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control'; import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils'; import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service'; import NavDataService from '@/service/app/navdata-service';
import AppCenterService from "@service/app/app-center-service";
import JobsLogService from '@/service/jobs-log/jobs-log-service'; import JobsLogService from '@/service/jobs-log/jobs-log-service';
import DefaultService from './default-searchform-service'; import DefaultService from './default-searchform-service';
......
...@@ -80,6 +80,8 @@ export default class DefaultService extends ControlService { ...@@ -80,6 +80,8 @@ export default class DefaultService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -80,6 +80,8 @@ export default class MainService extends ControlService { ...@@ -80,6 +80,8 @@ export default class MainService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -165,6 +165,7 @@ import { Subject, Subscription } from 'rxjs'; ...@@ -165,6 +165,7 @@ import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control'; import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils'; import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service'; import NavDataService from '@/service/app/navdata-service';
import AppCenterService from "@service/app/app-center-service";
import JobsLogService from '@/service/jobs-log/jobs-log-service'; import JobsLogService from '@/service/jobs-log/jobs-log-service';
import MainService from './main-grid-service'; import MainService from './main-grid-service';
...@@ -294,6 +295,15 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -294,6 +295,15 @@ export default class MainBase extends Vue implements ControlInterface {
*/ */
public codeListService:CodeListService = new CodeListService({ $store: this.$store }); public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 应用状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof MainBase
*/
public appStateEvent: Subscription | undefined;
/** /**
* 获取多项数据 * 获取多项数据
* *
...@@ -599,56 +609,64 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -599,56 +609,64 @@ export default class MainBase extends Vue implements ControlInterface {
label: '主键ID', label: '主键ID',
langtag: 'entities.jobslog.main_grid.columns.id', langtag: 'entities.jobslog.main_grid.columns.id',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'job_id', name: 'job_id',
label: '任务ID', label: '任务ID',
langtag: 'entities.jobslog.main_grid.columns.job_id', langtag: 'entities.jobslog.main_grid.columns.job_id',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'handler', name: 'handler',
label: '执行器任务HANDLER', label: '执行器任务HANDLER',
langtag: 'entities.jobslog.main_grid.columns.handler', langtag: 'entities.jobslog.main_grid.columns.handler',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'address', name: 'address',
label: '执行地址', label: '执行地址',
langtag: 'entities.jobslog.main_grid.columns.address', langtag: 'entities.jobslog.main_grid.columns.address',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'trigger_code', name: 'trigger_code',
label: '触发器调度返回码', label: '触发器调度返回码',
langtag: 'entities.jobslog.main_grid.columns.trigger_code', langtag: 'entities.jobslog.main_grid.columns.trigger_code',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'trigger_type', name: 'trigger_type',
label: '触发器调度类型', label: '触发器调度类型',
langtag: 'entities.jobslog.main_grid.columns.trigger_type', langtag: 'entities.jobslog.main_grid.columns.trigger_type',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'fail_retry_count', name: 'fail_retry_count',
label: '失败重试次数', label: '失败重试次数',
langtag: 'entities.jobslog.main_grid.columns.fail_retry_count', langtag: 'entities.jobslog.main_grid.columns.fail_retry_count',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'create_time', name: 'create_time',
label: '创建时间', label: '创建时间',
langtag: 'entities.jobslog.main_grid.columns.create_time', langtag: 'entities.jobslog.main_grid.columns.create_time',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
] ]
...@@ -1164,6 +1182,16 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1164,6 +1182,16 @@ export default class MainBase extends Vue implements ControlInterface {
} }
}); });
} }
if(AppCenterService && AppCenterService.getMessageCenter()){
this.appStateEvent = AppCenterService.getMessageCenter().subscribe(({ name, action, data }) =>{
if(!Object.is(name,"JobsLog")){
return;
}
if(Object.is(action,'appRefresh')){
this.refresh([data]);
}
})
}
} }
/** /**
...@@ -1184,6 +1212,9 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1184,6 +1212,9 @@ export default class MainBase extends Vue implements ControlInterface {
if (this.viewStateEvent) { if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe(); this.viewStateEvent.unsubscribe();
} }
if(this.appStateEvent){
this.appStateEvent.unsubscribe();
}
} }
/** /**
...@@ -1629,17 +1660,17 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1629,17 +1660,17 @@ export default class MainBase extends Vue implements ControlInterface {
* @memberof MainBase * @memberof MainBase
*/ */
public getCellClassName(args:{row: any, column: any, rowIndex: number, columnIndex:number}){ public getCellClassName(args:{row: any, column: any, rowIndex: number, columnIndex:number}){
let hasRowEdit:any = { if(args.column.property){
'id':false, let col = this.allColumns.find((item:any)=>{
'job_id':false, return Object.is(args.column.property,item.name);
'handler':false, })
'address':false, if(col !== undefined){
'trigger_code':false, if(col.isEnableRowEdit && this.actualIsOpenEdit ){
'trigger_type':false, return 'edit-cell';
'fail_retry_count':false, }
'create_time':false, }
} }
return ( hasRowEdit[args.column.property] && this.actualIsOpenEdit ) ? "edit-cell" : "info-cell"; return 'info-cell';
} }
/** /**
......
...@@ -81,6 +81,8 @@ export default class MainService extends ControlService { ...@@ -81,6 +81,8 @@ export default class MainService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -46,6 +46,7 @@ import { Subject, Subscription } from 'rxjs'; ...@@ -46,6 +46,7 @@ import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control'; import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils'; import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service'; import NavDataService from '@/service/app/navdata-service';
import AppCenterService from "@service/app/app-center-service";
import JobsRegistryService from '@/service/jobs-registry/jobs-registry-service'; import JobsRegistryService from '@/service/jobs-registry/jobs-registry-service';
import DefaultService from './default-searchform-service'; import DefaultService from './default-searchform-service';
......
...@@ -80,6 +80,8 @@ export default class DefaultService extends ControlService { ...@@ -80,6 +80,8 @@ export default class DefaultService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -80,6 +80,8 @@ export default class MainService extends ControlService { ...@@ -80,6 +80,8 @@ export default class MainService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -119,6 +119,7 @@ import { Subject, Subscription } from 'rxjs'; ...@@ -119,6 +119,7 @@ import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control'; import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util } from '@/utils'; import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service'; import NavDataService from '@/service/app/navdata-service';
import AppCenterService from "@service/app/app-center-service";
import JobsRegistryService from '@/service/jobs-registry/jobs-registry-service'; import JobsRegistryService from '@/service/jobs-registry/jobs-registry-service';
import MainService from './main-grid-service'; import MainService from './main-grid-service';
...@@ -248,6 +249,15 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -248,6 +249,15 @@ export default class MainBase extends Vue implements ControlInterface {
*/ */
public codeListService:CodeListService = new CodeListService({ $store: this.$store }); public codeListService:CodeListService = new CodeListService({ $store: this.$store });
/**
* 应用状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof MainBase
*/
public appStateEvent: Subscription | undefined;
/** /**
* 获取多项数据 * 获取多项数据
* *
...@@ -553,28 +563,32 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -553,28 +563,32 @@ export default class MainBase extends Vue implements ControlInterface {
label: '主键ID', label: '主键ID',
langtag: 'entities.jobsregistry.main_grid.columns.id', langtag: 'entities.jobsregistry.main_grid.columns.id',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'app', name: 'app',
label: '服务名', label: '服务名',
langtag: 'entities.jobsregistry.main_grid.columns.app', langtag: 'entities.jobsregistry.main_grid.columns.app',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'address', name: 'address',
label: '执行地址', label: '执行地址',
langtag: 'entities.jobsregistry.main_grid.columns.address', langtag: 'entities.jobsregistry.main_grid.columns.address',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
{ {
name: 'status', name: 'status',
label: '状态', label: '状态',
langtag: 'entities.jobsregistry.main_grid.columns.status', langtag: 'entities.jobsregistry.main_grid.columns.status',
show: true, show: true,
util: 'PX' util: 'PX',
isEnableRowEdit: false,
}, },
] ]
...@@ -1098,6 +1112,16 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1098,6 +1112,16 @@ export default class MainBase extends Vue implements ControlInterface {
} }
}); });
} }
if(AppCenterService && AppCenterService.getMessageCenter()){
this.appStateEvent = AppCenterService.getMessageCenter().subscribe(({ name, action, data }) =>{
if(!Object.is(name,"JobsRegistry")){
return;
}
if(Object.is(action,'appRefresh')){
this.refresh([data]);
}
})
}
} }
/** /**
...@@ -1118,6 +1142,9 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1118,6 +1142,9 @@ export default class MainBase extends Vue implements ControlInterface {
if (this.viewStateEvent) { if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe(); this.viewStateEvent.unsubscribe();
} }
if(this.appStateEvent){
this.appStateEvent.unsubscribe();
}
} }
/** /**
...@@ -1563,13 +1590,17 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1563,13 +1590,17 @@ export default class MainBase extends Vue implements ControlInterface {
* @memberof MainBase * @memberof MainBase
*/ */
public getCellClassName(args:{row: any, column: any, rowIndex: number, columnIndex:number}){ public getCellClassName(args:{row: any, column: any, rowIndex: number, columnIndex:number}){
let hasRowEdit:any = { if(args.column.property){
'id':false, let col = this.allColumns.find((item:any)=>{
'app':false, return Object.is(args.column.property,item.name);
'address':false, })
'status':false, if(col !== undefined){
if(col.isEnableRowEdit && this.actualIsOpenEdit ){
return 'edit-cell';
}
}
} }
return ( hasRowEdit[args.column.property] && this.actualIsOpenEdit ) ? "edit-cell" : "info-cell"; return 'info-cell';
} }
/** /**
......
...@@ -81,6 +81,8 @@ export default class MainService extends ControlService { ...@@ -81,6 +81,8 @@ export default class MainService extends ControlService {
*/ */
@Errorlog @Errorlog
public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> { public getItems(serviceName: string, interfaceName: string, context: any = {}, data: any, isloading?: boolean): Promise<any[]> {
data.page = data.page ? data.page : 0;
data.size = data.size ? data.size : 1000;
return Promise.reject([]) return Promise.reject([])
} }
......
...@@ -56,6 +56,7 @@ public interface IJobsInfoService extends IService<JobsInfo>{ ...@@ -56,6 +56,7 @@ public interface IJobsInfoService extends IService<JobsInfo>{
boolean execute(String sql, Map param); boolean execute(String sql, Map param);
} }
...@@ -53,6 +53,7 @@ public interface IJobsLockService extends IService<JobsLock>{ ...@@ -53,6 +53,7 @@ public interface IJobsLockService extends IService<JobsLock>{
boolean execute(String sql, Map param); boolean execute(String sql, Map param);
} }
...@@ -53,6 +53,7 @@ public interface IJobsLogService extends IService<JobsLog>{ ...@@ -53,6 +53,7 @@ public interface IJobsLogService extends IService<JobsLog>{
boolean execute(String sql, Map param); boolean execute(String sql, Map param);
} }
...@@ -53,6 +53,7 @@ public interface IJobsRegistryService extends IService<JobsRegistry>{ ...@@ -53,6 +53,7 @@ public interface IJobsRegistryService extends IService<JobsRegistry>{
boolean execute(String sql, Map param); boolean execute(String sql, Map param);
} }
...@@ -45,7 +45,7 @@ import org.springframework.util.StringUtils; ...@@ -45,7 +45,7 @@ import org.springframework.util.StringUtils;
public class JobsInfoServiceImpl extends ServiceImpl<JobsInfoMapper, JobsInfo> implements IJobsInfoService { public class JobsInfoServiceImpl extends ServiceImpl<JobsInfoMapper, JobsInfo> implements IJobsInfoService {
private int batchSize = 500; protected int batchSize = 500;
@Override @Override
@Transactional @Transactional
...@@ -158,9 +158,9 @@ public class JobsInfoServiceImpl extends ServiceImpl<JobsInfoMapper, JobsInfo> i ...@@ -158,9 +158,9 @@ public class JobsInfoServiceImpl extends ServiceImpl<JobsInfoMapper, JobsInfo> i
@Override @Override
@Transactional @Transactional
public JobsInfo stop(JobsInfo et) { public JobsInfo stop(JobsInfo et) {
et.set("Next_time","0");
et.set("Last_time","0"); et.set("Last_time","0");
et.set("Status","1"); et.set("Status","1");
et.set("Next_time","0");
update(et); update(et);
return et; return et;
} }
...@@ -209,4 +209,3 @@ public class JobsInfoServiceImpl extends ServiceImpl<JobsInfoMapper, JobsInfo> i ...@@ -209,4 +209,3 @@ public class JobsInfoServiceImpl extends ServiceImpl<JobsInfoMapper, JobsInfo> i
} }
...@@ -45,7 +45,7 @@ import org.springframework.util.StringUtils; ...@@ -45,7 +45,7 @@ import org.springframework.util.StringUtils;
public class JobsLockServiceImpl extends ServiceImpl<JobsLockMapper, JobsLock> implements IJobsLockService { public class JobsLockServiceImpl extends ServiceImpl<JobsLockMapper, JobsLock> implements IJobsLockService {
private int batchSize = 500; protected int batchSize = 500;
@Override @Override
@Transactional @Transactional
...@@ -185,4 +185,3 @@ public class JobsLockServiceImpl extends ServiceImpl<JobsLockMapper, JobsLock> i ...@@ -185,4 +185,3 @@ public class JobsLockServiceImpl extends ServiceImpl<JobsLockMapper, JobsLock> i
} }
...@@ -45,7 +45,7 @@ import org.springframework.util.StringUtils; ...@@ -45,7 +45,7 @@ import org.springframework.util.StringUtils;
public class JobsLogServiceImpl extends ServiceImpl<JobsLogMapper, JobsLog> implements IJobsLogService { public class JobsLogServiceImpl extends ServiceImpl<JobsLogMapper, JobsLog> implements IJobsLogService {
private int batchSize = 500; protected int batchSize = 500;
@Override @Override
public JobsLog getDraft(JobsLog et) { public JobsLog getDraft(JobsLog et) {
...@@ -185,4 +185,3 @@ public class JobsLogServiceImpl extends ServiceImpl<JobsLogMapper, JobsLog> impl ...@@ -185,4 +185,3 @@ public class JobsLogServiceImpl extends ServiceImpl<JobsLogMapper, JobsLog> impl
} }
...@@ -45,7 +45,7 @@ import org.springframework.util.StringUtils; ...@@ -45,7 +45,7 @@ import org.springframework.util.StringUtils;
public class JobsRegistryServiceImpl extends ServiceImpl<JobsRegistryMapper, JobsRegistry> implements IJobsRegistryService { public class JobsRegistryServiceImpl extends ServiceImpl<JobsRegistryMapper, JobsRegistry> implements IJobsRegistryService {
private int batchSize = 500; protected int batchSize = 500;
@Override @Override
@Transactional @Transactional
...@@ -185,4 +185,3 @@ public class JobsRegistryServiceImpl extends ServiceImpl<JobsRegistryMapper, Job ...@@ -185,4 +185,3 @@ public class JobsRegistryServiceImpl extends ServiceImpl<JobsRegistryMapper, Job
} }
...@@ -5,6 +5,7 @@ import cn.ibizlab.util.helper.UniqueNameGenerator; ...@@ -5,6 +5,7 @@ import cn.ibizlab.util.helper.UniqueNameGenerator;
import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.apache.ibatis.mapping.DatabaseIdProvider; import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider; import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
...@@ -42,7 +43,14 @@ public class MybatisConfiguration { ...@@ -42,7 +43,14 @@ public class MybatisConfiguration {
*/ */
@Bean @Bean
public PaginationInterceptor paginationInterceptor() { public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor(); PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInterceptor.setLimit(-1);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
} }
} }
\ No newline at end of file
...@@ -32,6 +32,7 @@ import cn.ibizlab.api.mapping.*; ...@@ -32,6 +32,7 @@ import cn.ibizlab.api.mapping.*;
import cn.ibizlab.core.task.domain.JobsInfo; import cn.ibizlab.core.task.domain.JobsInfo;
import cn.ibizlab.core.task.service.IJobsInfoService; import cn.ibizlab.core.task.service.IJobsInfoService;
import cn.ibizlab.core.task.filter.JobsInfoSearchContext; import cn.ibizlab.core.task.filter.JobsInfoSearchContext;
import cn.ibizlab.util.annotation.VersionCheck;
@Slf4j @Slf4j
@Api(tags = {"任务信息" }) @Api(tags = {"任务信息" })
...@@ -51,10 +52,10 @@ public class JobsInfoResource { ...@@ -51,10 +52,10 @@ public class JobsInfoResource {
@RequestMapping(method = RequestMethod.POST, value = "/jobsinfos/{jobsinfo_id}/start") @RequestMapping(method = RequestMethod.POST, value = "/jobsinfos/{jobsinfo_id}/start")
@Transactional @Transactional
public ResponseEntity<JobsInfoDTO> start(@PathVariable("jobsinfo_id") String jobsinfo_id, @RequestBody JobsInfoDTO jobsinfodto) { public ResponseEntity<JobsInfoDTO> start(@PathVariable("jobsinfo_id") String jobsinfo_id, @RequestBody JobsInfoDTO jobsinfodto) {
JobsInfo jobsinfo = jobsinfoMapping.toDomain(jobsinfodto); JobsInfo domain = jobsinfoMapping.toDomain(jobsinfodto);
jobsinfo.setId(jobsinfo_id); domain.setId(jobsinfo_id);
jobsinfo = jobsinfoService.start(jobsinfo); domain = jobsinfoService.start(domain);
jobsinfodto = jobsinfoMapping.toDto(jobsinfo); jobsinfodto = jobsinfoMapping.toDto(domain);
return ResponseEntity.status(HttpStatus.OK).body(jobsinfodto); return ResponseEntity.status(HttpStatus.OK).body(jobsinfodto);
} }
...@@ -89,10 +90,10 @@ public class JobsInfoResource { ...@@ -89,10 +90,10 @@ public class JobsInfoResource {
@RequestMapping(method = RequestMethod.POST, value = "/jobsinfos/{jobsinfo_id}/execute") @RequestMapping(method = RequestMethod.POST, value = "/jobsinfos/{jobsinfo_id}/execute")
@Transactional @Transactional
public ResponseEntity<JobsInfoDTO> execute(@PathVariable("jobsinfo_id") String jobsinfo_id, @RequestBody JobsInfoDTO jobsinfodto) { public ResponseEntity<JobsInfoDTO> execute(@PathVariable("jobsinfo_id") String jobsinfo_id, @RequestBody JobsInfoDTO jobsinfodto) {
JobsInfo jobsinfo = jobsinfoMapping.toDomain(jobsinfodto); JobsInfo domain = jobsinfoMapping.toDomain(jobsinfodto);
jobsinfo.setId(jobsinfo_id); domain.setId(jobsinfo_id);
jobsinfo = jobsinfoService.execute(jobsinfo); domain = jobsinfoService.execute(domain);
jobsinfodto = jobsinfoMapping.toDto(jobsinfo); jobsinfodto = jobsinfoMapping.toDto(domain);
return ResponseEntity.status(HttpStatus.OK).body(jobsinfodto); return ResponseEntity.status(HttpStatus.OK).body(jobsinfodto);
} }
...@@ -166,10 +167,10 @@ public class JobsInfoResource { ...@@ -166,10 +167,10 @@ public class JobsInfoResource {
@RequestMapping(method = RequestMethod.POST, value = "/jobsinfos/{jobsinfo_id}/stop") @RequestMapping(method = RequestMethod.POST, value = "/jobsinfos/{jobsinfo_id}/stop")
@Transactional @Transactional
public ResponseEntity<JobsInfoDTO> stop(@PathVariable("jobsinfo_id") String jobsinfo_id, @RequestBody JobsInfoDTO jobsinfodto) { public ResponseEntity<JobsInfoDTO> stop(@PathVariable("jobsinfo_id") String jobsinfo_id, @RequestBody JobsInfoDTO jobsinfodto) {
JobsInfo jobsinfo = jobsinfoMapping.toDomain(jobsinfodto); JobsInfo domain = jobsinfoMapping.toDomain(jobsinfodto);
jobsinfo.setId(jobsinfo_id); domain.setId(jobsinfo_id);
jobsinfo = jobsinfoService.stop(jobsinfo); domain = jobsinfoService.stop(domain);
jobsinfodto = jobsinfoMapping.toDto(jobsinfo); jobsinfodto = jobsinfoMapping.toDto(domain);
return ResponseEntity.status(HttpStatus.OK).body(jobsinfodto); return ResponseEntity.status(HttpStatus.OK).body(jobsinfodto);
} }
......
...@@ -32,6 +32,7 @@ import cn.ibizlab.api.mapping.*; ...@@ -32,6 +32,7 @@ import cn.ibizlab.api.mapping.*;
import cn.ibizlab.core.task.domain.JobsLock; import cn.ibizlab.core.task.domain.JobsLock;
import cn.ibizlab.core.task.service.IJobsLockService; import cn.ibizlab.core.task.service.IJobsLockService;
import cn.ibizlab.core.task.filter.JobsLockSearchContext; import cn.ibizlab.core.task.filter.JobsLockSearchContext;
import cn.ibizlab.util.annotation.VersionCheck;
@Slf4j @Slf4j
@Api(tags = {"任务锁" }) @Api(tags = {"任务锁" })
......
...@@ -32,6 +32,7 @@ import cn.ibizlab.api.mapping.*; ...@@ -32,6 +32,7 @@ import cn.ibizlab.api.mapping.*;
import cn.ibizlab.core.task.domain.JobsLog; import cn.ibizlab.core.task.domain.JobsLog;
import cn.ibizlab.core.task.service.IJobsLogService; import cn.ibizlab.core.task.service.IJobsLogService;
import cn.ibizlab.core.task.filter.JobsLogSearchContext; import cn.ibizlab.core.task.filter.JobsLogSearchContext;
import cn.ibizlab.util.annotation.VersionCheck;
@Slf4j @Slf4j
@Api(tags = {"任务调度日志" }) @Api(tags = {"任务调度日志" })
......
...@@ -32,6 +32,7 @@ import cn.ibizlab.api.mapping.*; ...@@ -32,6 +32,7 @@ import cn.ibizlab.api.mapping.*;
import cn.ibizlab.core.task.domain.JobsRegistry; import cn.ibizlab.core.task.domain.JobsRegistry;
import cn.ibizlab.core.task.service.IJobsRegistryService; import cn.ibizlab.core.task.service.IJobsRegistryService;
import cn.ibizlab.core.task.filter.JobsRegistrySearchContext; import cn.ibizlab.core.task.filter.JobsRegistrySearchContext;
import cn.ibizlab.util.annotation.VersionCheck;
@Slf4j @Slf4j
@Api(tags = {"任务注册信息" }) @Api(tags = {"任务注册信息" })
......
package cn.ibizlab.util.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD})
public @interface VersionCheck
{
String entity();
String versionfield();
}
package cn.ibizlab.util.aspect;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import cn.ibizlab.util.annotation.VersionCheck;
import cn.ibizlab.util.domain.EntityBase;
import cn.ibizlab.util.errors.BadRequestAlertException;
import cn.ibizlab.util.helper.RuleUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
/**
* 数据库版本检查
*/
@Aspect
@Order(0)
@Component
public class VersionCheckAspect
{
private final ExpressionParser parser = new SpelExpressionParser();
@SneakyThrows
@Before("execution(* cn.ibizlab.*.rest.*.update(..)) && @annotation(versionCheck)")
public void BeforeUpdate(JoinPoint point, VersionCheck versionCheck){
EvaluationContext context = new StandardEvaluationContext();
Object[] args = point.getArgs();
Object id=args[0];
Object dto=args[1];
if(ObjectUtils.isEmpty(id) || ObjectUtils.isEmpty(dto))
return;
String versionField=versionCheck.versionfield();
if(StringUtils.isEmpty(versionCheck))
return;
context.setVariable("dto",dto);
Expression newExp = parser.parseExpression(String.format("#dto.%s",versionField));
Object newVersion=newExp.getValue(context);
if(ObjectUtils.isEmpty(newVersion))
return;
//进行版本检查
Object oldVersion =getDBVersion(versionCheck,getService(point.getTarget(),versionCheck.entity()),id);
if(!ObjectUtils.isEmpty(oldVersion)){
if(RuleUtils.gt(newVersion,oldVersion))
throw new BadRequestAlertException("数据已变更,可能后台数据已被修改,请重新加载数据","VersionCheckAspect","versionCheck");
}
}
/**
* 获取实体服务对象
* @param resource
* @param entity
* @return
*/
@SneakyThrows
private Object getService(Object resource,String entity){
Object service = null;
Field[] fields= resource.getClass().getDeclaredFields();
for(Field field : fields){
if(field.getModifiers()==1 && field.getName().equalsIgnoreCase(String.format("%sService",entity))){
service=field.get(resource);
break;
}
}
return service;
}
/**
* 获取数据库版本
* @param versionCheck
* @param service
* @param id
* @return
*/
@SneakyThrows
private Object getDBVersion(VersionCheck versionCheck,Object service,Object id){
Object dbVersion=null;
String versionField=versionCheck.versionfield();
if(!ObjectUtils.isEmpty(service)){
EvaluationContext oldContext = new StandardEvaluationContext();
oldContext.setVariable("service",service);
oldContext.setVariable("id",id);
Expression oldExp = parser.parseExpression("#service.get(#id)");
EntityBase oldEntity =oldExp.getValue(oldContext, EntityBase.class);
return oldEntity.get(versionField);
}
return dbVersion;
}
}
...@@ -94,8 +94,10 @@ public class LayeringCache extends AbstractValueAdaptingCache { ...@@ -94,8 +94,10 @@ public class LayeringCache extends AbstractValueAdaptingCache {
@Override @Override
public void put(Object key, Object value) { public void put(Object key, Object value) {
caffeineCache.put(key, value); if(value!=null) {
redisCache.put(key, value); caffeineCache.put(key, value);
redisCache.put(key, value);
}
} }
@Override @Override
......
...@@ -55,6 +55,10 @@ public class AppController { ...@@ -55,6 +55,10 @@ public class AppController {
appData.put("unires",uniRes); appData.put("unires",uniRes);
appData.put("appmenu",appMenu); appData.put("appmenu",appMenu);
appData.put("enablepermissionvalid",enablePermissionValid); appData.put("enablepermissionvalid",enablePermissionValid);
if(curUser.getSuperuser()==1)
appData.put("enablepermissionvalid",false);
else
appData.put("enablepermissionvalid",enablePermissionValid);
return ResponseEntity.status(HttpStatus.OK).body(appData); return ResponseEntity.status(HttpStatus.OK).body(appData);
} }
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册