提交 54a496cb 编写于 作者: ibizdev's avatar ibizdev

ibiz4j 发布系统代码

上级 5bbdf4fe
## v7.0.0-alpha.10 [2020-6-18]
### Bug修复
分页导航视图页面刷新bug
表单项更新,实体行为调用不到bug
关系界面子界面保存不触发父界面保存
表单样式调整
### 功能新增及优化
#### 模板
表格操作列只显示图标时显示tooltip
门户部件高度为0时自适应
面板和多数据部件数据流向
列表,数据视图保存功能
门户部件标题界面行为tooltip
新增面包屑、应用切换器组件
#### 基础文件
formitem样式调整,label适配位置
表格行编辑切换,app-picker不显示
文件上传下载参数格式处理
## v7.0.0-alpha.9 [2020-6-11]
### Bug修复
......
......@@ -13,5 +13,12 @@
.no-redirect {
color: #97a8be;
cursor: text;
.curselected{
color: #2196F3;
font-weight: bold;
}
.app-breadcrumb-selected{
cursor: pointer;
}
}
}
\ No newline at end of file
......@@ -2,7 +2,20 @@
<el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item, index) in breadcrumbs" :key="item.id">
<span v-if="index === breadcrumbs.length-1" class="no-redirect">{{ item.title }}</span>
<span v-if="index === breadcrumbs.length-1" class="no-redirect">{{ item.title }}
<span v-if="item.isselected === true">
<dropdown trigger='click' @on-click="selectNavData($event,item)">
<span class="app-breadcrumb-selected">
<i class="el-icon-caret-bottom"></i>
</span>
<dropdown-menu slot='list'>
<dropdown-item v-for="(dataitem) in getPreNavData(item)" :name="dataitem.srfkey" :key="dataitem.srfkey">
<span :class="{'curselected':isCurSelected(item,dataitem)}">{{dataitem.srfmajortext}}</span>
</dropdown-item>
</dropdown-menu>
</dropdown>
</span>
</span>
<a v-else @click.prevent="handleLink(item)">{{ item.title }}</a>
</el-breadcrumb-item>
</transition-group>
......@@ -12,6 +25,7 @@
<script lang="ts">
import { Component, Vue, Watch, Prop } from 'vue-property-decorator'
import { RouteRecord, Route } from 'vue-router'
import { Environment } from "@/environments/environment";
import NavDataService from '@/service/app/navdata-service';
import {Subscription } from 'rxjs';
......@@ -40,13 +54,6 @@ export default class Breadcrumb extends Vue {
*/
@Prop() public indexViewTag!: string;
/**
* 首页路径
*
* @memberof Breadcrumb
*/
@Prop() public indexViewPath!: string;
/**
* 导航服务事件
*
......@@ -63,8 +70,8 @@ export default class Breadcrumb extends Vue {
*/
created() {
this.getBreadcrumb();
this.serviceStateEvent = this.navDataService.serviceState.subscribe(({ action, data }) => {
if (Object.is(action, 'refresh')) {
this.serviceStateEvent = this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if (Object.is(action, 'datarefresh')) {
this.getBreadcrumb();
}
});
......@@ -80,6 +87,25 @@ export default class Breadcrumb extends Vue {
this.$forceUpdate();
}
/**
* 获取面包屑指定元素前一条数据
*
* @memberof Breadcrumb
*/
private getPreNavData(item:any){
let preNavData:any = this.navDataService.getPreNavDataById(item.id);
return preNavData.data;
}
/**
* 判断是否为当前选中项
*
* @memberof Breadcrumb
*/
private isCurSelected(item:any,singleItem:any){
return item.srfkey === singleItem.srfkey;
}
/**
* 面包屑点击行为
*
......@@ -88,9 +114,7 @@ export default class Breadcrumb extends Vue {
private handleLink(item: any) {
// 首页
if(Object.is(item.id,this.indexViewTag)){
if(this.$route.matched && this.$route.matched.length >0){
this.$router.push(`/${this.indexViewPath}`);
}
this.$router.push((window.sessionStorage.getItem(Environment.AppName))as string);
}else{
// 非首页
this.$router.push(item.path).catch(err => {
......@@ -100,6 +124,17 @@ export default class Breadcrumb extends Vue {
this.navDataService.removeNavData(item.id);
}
/**
* 切换导航行为
*
* @memberof Breadcrumb
*/
private selectNavData($event:any,item:any){
let preNavData:any = this.getPreNavData(item);
let curSrfkey:any = $event;
this.navDataService.serviceState.next({action:'viewrefresh',name:item.id, data:curSrfkey});
}
/**
* 组件销毁
*
......
.menu-drawer {
.ivu-drawer-left {
left: 201px !important;
}
.ivu-drawer {
top: 64px !important;
}
.ivu-drawer-body {
padding: 32px !important;
.menuItems {
display: flex;
flex-wrap: wrap;
> .item {
margin: 0px 10px;
width: calc(33.333% - 20px);
padding: 0px 15px;
font-size: 13px;
transition: all 0.3s;
display: flex;
justify-content: space-between;
height: 32px;
align-items: center;
.star {
display: flex;
height: 100%;
width: 30px;
font-size: 15px;
align-items: center;
justify-content: center;
.ivu-icon-ios-star-outline{
display: none;
}
}
}
> .item:hover {
background-color: #eaeaea;
cursor: pointer;
.ivu-icon-ios-star-outline{
display: inline;
}
}
}
}
}
.sider-drawer {
.ivu-drawer {
background-color: #ffffff !important;
}
.ivu-drawer-body {
padding: 0px !important;
}
.ivu-drawer {
top: 64px !important;
}
.context-menu-drag {
display: flex;
.flip-list-move {
transition: transform 0.3s;
}
.menu-list {
width: 100%;
height: 100%;
.menu-header {
cursor: pointer;
border-bottom: 1px solid rgb(222, 222, 222);
height: 48px;
line-height: 48px;
display: flex;
align-items: center;
.menuicon {
display: inline-block;
width: 50px;
font-size: 16px;
text-align: center;
font-size: 22px;
}
.content {
display: inline-block;
text-overflow: ellipsis;
white-space: nowrap;
flex: 1 1 0%;
overflow: hidden;
font-size: 13px;
}
.forward {
margin: 0px 8px 0px 4px;
color: rgb(222, 222, 222);
font-size: 15px;
}
}
.list-group-item {
transition: background 1s;
-webkit-transition: background 1s;
.menuicon {
text-align: center;
}
.el-row {
height: 100%;
display: flex;
align-items: center;
padding: 0px 5px;
}
height: 40px;
cursor: pointer;
position: relative;
display: block;
margin-bottom: -1px;
transition: background-color 0.5s;
transition-timing-function: ease-in-out;
.handle {
cursor: move;
}
.bar {
display: flex;
.ivu-icon-ios-close {
cursor: pointer;
font-size: 25px;
}
}
}
.list-group-item:hover {
background-color: #f5f5f5;
.ivu-icon-ios-star-outline{
display: inline;
}
}
}
}
}
\ No newline at end of file
......@@ -247,7 +247,11 @@ export default class EditViewEngine extends ViewEngine {
*/
public setTabCaption(info: string): void {
let viewdata: any = this.view.model;
if (viewdata && info && !Object.is(info, '') && (viewdata.srfTitle.indexOf("-") === -1)) {
let index:number = viewdata.srfTitle.indexOf("-");
if (viewdata && info && !Object.is(info, '')) {
if(index !== -1){
viewdata.srfTitle = viewdata.srfTitle.substr(0,index);
}
if(this.view.$tabPageExp){
this.view.$tabPageExp.setCurPageCaption(viewdata.srfTitle, viewdata.srfTitle, info);
}
......
......@@ -3,29 +3,26 @@
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="jobsinfoeditview"></app-studioaction>
<card class='view-card ' :disHover="true" :bordered="false">
<p slot='title'>
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</p>
<div slot="extra">
<div class='toolbar-container'>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.tbitem3.visabled" :disabled="toolBarModels.tbitem3.disabled" class='' @click="toolbar_click({ tag: 'tbitem3' }, $event)">
<i class='fa fa-save'></i>
<span class='caption'>{{$t('entities.jobsinfo.editviewtoolbar_toolbar.tbitem3.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.jobsinfo.editviewtoolbar_toolbar.tbitem3.tip')}}</div>
</tooltip>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.deuiaction1.visabled" :disabled="toolBarModels.deuiaction1.disabled" class='' @click="toolbar_click({ tag: 'deuiaction1' }, $event)">
<i class='fa fa-sign-out'></i>
<span class='caption'>{{$t('entities.jobsinfo.editviewtoolbar_toolbar.deuiaction1.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.jobsinfo.editviewtoolbar_toolbar.deuiaction1.tip')}}</div>
</tooltip>
</div>
</div>
<div class='toolbar-container'>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.tbitem3.visabled" :disabled="toolBarModels.tbitem3.disabled" class='' @click="toolbar_click({ tag: 'tbitem3' }, $event)">
<i class='fa fa-save'></i>
<span class='caption'>{{$t('entities.jobsinfo.editviewtoolbar_toolbar.tbitem3.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.jobsinfo.editviewtoolbar_toolbar.tbitem3.tip')}}</div>
</tooltip>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.deuiaction1.visabled" :disabled="toolBarModels.deuiaction1.disabled" class='' @click="toolbar_click({ tag: 'deuiaction1' }, $event)">
<i class='fa fa-sign-out'></i>
<span class='caption'>{{$t('entities.jobsinfo.editviewtoolbar_toolbar.deuiaction1.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.jobsinfo.editviewtoolbar_toolbar.deuiaction1.tip')}}</div>
</tooltip>
</div>
</div>
<div class="content-container">
<div class='view-top-messages'>
</div>
......@@ -62,7 +59,7 @@
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import { Subject } from 'rxjs';
import { Subject,Subscription } from 'rxjs';
import JobsInfoService from '@/service/jobs-info/jobs-info-service';
import EditViewEngine from '@engine/view/edit-view-engine';
......@@ -289,6 +286,15 @@ export default class JobsInfoEditViewBase extends Vue {
*/
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsInfoEditViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -311,7 +317,7 @@ export default class JobsInfoEditViewBase extends Vue {
* @public
* @memberof JobsInfoEditViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -341,6 +347,9 @@ export default class JobsInfoEditViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'jobsinfo':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -434,7 +443,7 @@ export default class JobsInfoEditViewBase extends Vue {
*/
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'jobs-info-edit-view',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',srfkey:this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -454,10 +463,24 @@ export default class JobsInfoEditViewBase extends Vue {
* @memberof JobsInfoEditViewBase
*/
public afterCreated(){
const secondtag = this.$util.createUUID();
this.$store.commit('viewaction/createdView', { viewtag: this.viewtag, secondtag: secondtag });
this.viewtag = secondtag;
this.parseViewParam();
let _this:any = this;
const secondtag = _this.$util.createUUID();
_this.$store.commit('viewaction/createdView', { viewtag: _this.viewtag, secondtag: secondtag });
_this.viewtag = secondtag;
_this.parseViewParam();
_this.serviceStateEvent = _this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if(!Object.is(name,'jobs-info-edit-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -689,6 +712,9 @@ export default class JobsInfoEditViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -2,9 +2,9 @@
<div class='view-container degridview jobs-info-grid-view'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="jobsinfogridview"></app-studioaction>
<card class='view-card ' :dis-hover="true" :bordered="false">
<p slot='title'>
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</p>
</div>
<div class='content-container'>
<div class='view-top-messages'>
</div>
......@@ -118,7 +118,7 @@
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import { Subject } from 'rxjs';
import { Subject,Subscription } from 'rxjs';
import JobsInfoService from '@/service/jobs-info/jobs-info-service';
import GridViewEngine from '@engine/view/grid-view-engine';
......@@ -366,6 +366,15 @@ export default class JobsInfoGridViewBase extends Vue {
*/
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsInfoGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -388,7 +397,7 @@ export default class JobsInfoGridViewBase extends Vue {
* @public
* @memberof JobsInfoGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -418,6 +427,9 @@ export default class JobsInfoGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'jobsinfo':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -511,7 +523,7 @@ export default class JobsInfoGridViewBase extends Vue {
*/
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'jobs-info-grid-view',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',srfkey:this.context.jobsinfo,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -531,10 +543,24 @@ export default class JobsInfoGridViewBase extends Vue {
* @memberof JobsInfoGridViewBase
*/
public afterCreated(){
const secondtag = this.$util.createUUID();
this.$store.commit('viewaction/createdView', { viewtag: this.viewtag, secondtag: secondtag });
this.viewtag = secondtag;
this.parseViewParam();
let _this:any = this;
const secondtag = _this.$util.createUUID();
_this.$store.commit('viewaction/createdView', { viewtag: _this.viewtag, secondtag: secondtag });
_this.viewtag = secondtag;
_this.parseViewParam();
_this.serviceStateEvent = _this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if(!Object.is(name,'jobs-info-grid-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'save')){
......@@ -1130,6 +1156,9 @@ export default class JobsInfoGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -3,9 +3,9 @@
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="jobslogeditview"></app-studioaction>
<card class='view-card view-no-toolbar' :disHover="true" :bordered="false">
<p slot='title'>
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</p>
</div>
<div class="content-container">
<div class='view-top-messages'>
......@@ -43,7 +43,7 @@
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import { Subject } from 'rxjs';
import { Subject,Subscription } from 'rxjs';
import JobsLogService from '@/service/jobs-log/jobs-log-service';
import EditViewEngine from '@engine/view/edit-view-engine';
......@@ -256,6 +256,15 @@ export default class JobsLogEditViewBase extends Vue {
*/
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsLogEditViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -278,7 +287,7 @@ export default class JobsLogEditViewBase extends Vue {
* @public
* @memberof JobsLogEditViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -308,6 +317,9 @@ export default class JobsLogEditViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'jobslog':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -401,7 +413,7 @@ export default class JobsLogEditViewBase extends Vue {
*/
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'jobs-log-edit-view',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',srfkey:this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -421,10 +433,24 @@ export default class JobsLogEditViewBase extends Vue {
* @memberof JobsLogEditViewBase
*/
public afterCreated(){
const secondtag = this.$util.createUUID();
this.$store.commit('viewaction/createdView', { viewtag: this.viewtag, secondtag: secondtag });
this.viewtag = secondtag;
this.parseViewParam();
let _this:any = this;
const secondtag = _this.$util.createUUID();
_this.$store.commit('viewaction/createdView', { viewtag: _this.viewtag, secondtag: secondtag });
_this.viewtag = secondtag;
_this.parseViewParam();
_this.serviceStateEvent = _this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if(!Object.is(name,'jobs-log-edit-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -539,6 +565,9 @@ export default class JobsLogEditViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -2,9 +2,9 @@
<div class='view-container degridview jobs-log-grid-view'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="jobsloggridview"></app-studioaction>
<card class='view-card ' :dis-hover="true" :bordered="false">
<p slot='title'>
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</p>
</div>
<div class='content-container'>
<div class='view-top-messages'>
</div>
......@@ -67,7 +67,7 @@
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import { Subject } from 'rxjs';
import { Subject,Subscription } from 'rxjs';
import JobsLogService from '@/service/jobs-log/jobs-log-service';
import GridViewEngine from '@engine/view/grid-view-engine';
......@@ -290,6 +290,15 @@ export default class JobsLogGridViewBase extends Vue {
*/
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsLogGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -312,7 +321,7 @@ export default class JobsLogGridViewBase extends Vue {
* @public
* @memberof JobsLogGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -342,6 +351,9 @@ export default class JobsLogGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'jobslog':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -435,7 +447,7 @@ export default class JobsLogGridViewBase extends Vue {
*/
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'jobs-log-grid-view',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',srfkey:this.context.jobslog,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -455,10 +467,24 @@ export default class JobsLogGridViewBase extends Vue {
* @memberof JobsLogGridViewBase
*/
public afterCreated(){
const secondtag = this.$util.createUUID();
this.$store.commit('viewaction/createdView', { viewtag: this.viewtag, secondtag: secondtag });
this.viewtag = secondtag;
this.parseViewParam();
let _this:any = this;
const secondtag = _this.$util.createUUID();
_this.$store.commit('viewaction/createdView', { viewtag: _this.viewtag, secondtag: secondtag });
_this.viewtag = secondtag;
_this.parseViewParam();
_this.serviceStateEvent = _this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if(!Object.is(name,'jobs-log-grid-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'save')){
......@@ -741,6 +767,9 @@ export default class JobsLogGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -3,29 +3,26 @@
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="jobsregistryeditview"></app-studioaction>
<card class='view-card ' :disHover="true" :bordered="false">
<p slot='title'>
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</p>
<div slot="extra">
<div class='toolbar-container'>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.tbitem3.visabled" :disabled="toolBarModels.tbitem3.disabled" class='' @click="toolbar_click({ tag: 'tbitem3' }, $event)">
<i class='fa fa-save'></i>
<span class='caption'>{{$t('entities.jobsregistry.editviewtoolbar_toolbar.tbitem3.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.jobsregistry.editviewtoolbar_toolbar.tbitem3.tip')}}</div>
</tooltip>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.deuiaction1.visabled" :disabled="toolBarModels.deuiaction1.disabled" class='' @click="toolbar_click({ tag: 'deuiaction1' }, $event)">
<i class='fa fa-sign-out'></i>
<span class='caption'>{{$t('entities.jobsregistry.editviewtoolbar_toolbar.deuiaction1.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.jobsregistry.editviewtoolbar_toolbar.deuiaction1.tip')}}</div>
</tooltip>
</div>
</div>
<div class='toolbar-container'>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.tbitem3.visabled" :disabled="toolBarModels.tbitem3.disabled" class='' @click="toolbar_click({ tag: 'tbitem3' }, $event)">
<i class='fa fa-save'></i>
<span class='caption'>{{$t('entities.jobsregistry.editviewtoolbar_toolbar.tbitem3.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.jobsregistry.editviewtoolbar_toolbar.tbitem3.tip')}}</div>
</tooltip>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.deuiaction1.visabled" :disabled="toolBarModels.deuiaction1.disabled" class='' @click="toolbar_click({ tag: 'deuiaction1' }, $event)">
<i class='fa fa-sign-out'></i>
<span class='caption'>{{$t('entities.jobsregistry.editviewtoolbar_toolbar.deuiaction1.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.jobsregistry.editviewtoolbar_toolbar.deuiaction1.tip')}}</div>
</tooltip>
</div>
</div>
<div class="content-container">
<div class='view-top-messages'>
</div>
......@@ -62,7 +59,7 @@
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import { Subject } from 'rxjs';
import { Subject,Subscription } from 'rxjs';
import JobsRegistryService from '@/service/jobs-registry/jobs-registry-service';
import EditViewEngine from '@engine/view/edit-view-engine';
......@@ -289,6 +286,15 @@ export default class JobsRegistryEditViewBase extends Vue {
*/
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsRegistryEditViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -311,7 +317,7 @@ export default class JobsRegistryEditViewBase extends Vue {
* @public
* @memberof JobsRegistryEditViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -341,6 +347,9 @@ export default class JobsRegistryEditViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'jobsregistry':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -434,7 +443,7 @@ export default class JobsRegistryEditViewBase extends Vue {
*/
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'jobs-registry-edit-view',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',srfkey:this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -454,10 +463,24 @@ export default class JobsRegistryEditViewBase extends Vue {
* @memberof JobsRegistryEditViewBase
*/
public afterCreated(){
const secondtag = this.$util.createUUID();
this.$store.commit('viewaction/createdView', { viewtag: this.viewtag, secondtag: secondtag });
this.viewtag = secondtag;
this.parseViewParam();
let _this:any = this;
const secondtag = _this.$util.createUUID();
_this.$store.commit('viewaction/createdView', { viewtag: _this.viewtag, secondtag: secondtag });
_this.viewtag = secondtag;
_this.parseViewParam();
_this.serviceStateEvent = _this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if(!Object.is(name,'jobs-registry-edit-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -689,6 +712,9 @@ export default class JobsRegistryEditViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -2,9 +2,9 @@
<div class='view-container degridview jobs-registry-grid-view'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="jobsregistrygridview"></app-studioaction>
<card class='view-card ' :dis-hover="true" :bordered="false">
<p slot='title'>
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfTitle)}}</span>
</p>
</div>
<div class='content-container'>
<div class='view-top-messages'>
</div>
......@@ -97,7 +97,7 @@
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import { Subject } from 'rxjs';
import { Subject,Subscription } from 'rxjs';
import JobsRegistryService from '@/service/jobs-registry/jobs-registry-service';
import GridViewEngine from '@engine/view/grid-view-engine';
......@@ -338,6 +338,15 @@ export default class JobsRegistryGridViewBase extends Vue {
*/
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsRegistryGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -360,7 +369,7 @@ export default class JobsRegistryGridViewBase extends Vue {
* @public
* @memberof JobsRegistryGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -390,6 +399,9 @@ export default class JobsRegistryGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'jobsregistry':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -483,7 +495,7 @@ export default class JobsRegistryGridViewBase extends Vue {
*/
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'jobs-registry-grid-view',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',srfkey:this.context.jobsregistry,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -503,10 +515,24 @@ export default class JobsRegistryGridViewBase extends Vue {
* @memberof JobsRegistryGridViewBase
*/
public afterCreated(){
const secondtag = this.$util.createUUID();
this.$store.commit('viewaction/createdView', { viewtag: this.viewtag, secondtag: secondtag });
this.viewtag = secondtag;
this.parseViewParam();
let _this:any = this;
const secondtag = _this.$util.createUUID();
_this.$store.commit('viewaction/createdView', { viewtag: _this.viewtag, secondtag: secondtag });
_this.viewtag = secondtag;
_this.parseViewParam();
_this.serviceStateEvent = _this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if(!Object.is(name,'jobs-registry-grid-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'save')){
......@@ -1063,6 +1089,9 @@ export default class JobsRegistryGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -5,8 +5,8 @@
<layout>
<sider :width="collapseChange ? 64 : 200" hide-trigger v-model="collapseChange">
<div class="sider-top">
<div class="page-logo" @click="contextMenuDragVisiable=!contextMenuDragVisiable">
<img v-show="collapseChange" src="../../../assets/img/logo.png" height="16" />
<div class="page-logo">
<span class="menuicon" @click="contextMenuDragVisiable=!contextMenuDragVisiable"><Icon type="md-menu" /></span>
<span v-show="!collapseChange" style="display: block;text-align: center;font-weight: 300;font-size: 20px;">{{$t(model.srfCaption)}}</span>
</div>
</div>
......@@ -31,10 +31,10 @@
<layout>
<header class="index_header">
<div class="header-left" >
<div class="page-logo" v-if="Object.is(navModel,'route')">
<div class="page-logo">
<i v-show="!collapseChange" class="ivu-icon el-icon-s-fold" @click="handleClick"></i>
<i v-show="collapseChange" class="ivu-icon el-icon-s-unfold" @click="handleClick"></i>
<app-breadcrumb indexViewTag="task-index-view" indexViewPath="taskindexview"></app-breadcrumb>
<app-breadcrumb v-if="Object.is(navModel,'route')" indexViewTag="task-index-view"></app-breadcrumb>
</div>
</div>
<div class="header-right" style="display: flex;align-items: center;justify-content: space-between;">
......@@ -62,7 +62,7 @@
import { Vue, Component, Prop, Provide, Emit, Watch } from 'vue-property-decorator';
import { UIActionTool,Util } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import { Subject } from 'rxjs';
import { Subject,Subscription } from 'rxjs';
......@@ -249,6 +249,15 @@ export default class TaskIndexViewBase extends Vue {
*/
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof TaskIndexViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -271,7 +280,7 @@ export default class TaskIndexViewBase extends Vue {
* @public
* @memberof TaskIndexViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -392,7 +401,7 @@ export default class TaskIndexViewBase extends Vue {
*/
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'task-index-view',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',srfkey:null,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -412,10 +421,24 @@ export default class TaskIndexViewBase extends Vue {
* @memberof TaskIndexViewBase
*/
public afterCreated(){
const secondtag = this.$util.createUUID();
this.$store.commit('viewaction/createdView', { viewtag: this.viewtag, secondtag: secondtag });
this.viewtag = secondtag;
this.parseViewParam();
let _this:any = this;
const secondtag = _this.$util.createUUID();
_this.$store.commit('viewaction/createdView', { viewtag: _this.viewtag, secondtag: secondtag });
_this.viewtag = secondtag;
_this.parseViewParam();
_this.serviceStateEvent = _this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if(!Object.is(name,'task-index-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......
......@@ -76,7 +76,6 @@
}
}
.ivu-layout .ivu-layout-sider .ivu-layout-sider-children .sider-top{
padding: 4px;
margin-top: -2px;
line-height: 58px;
text-align: center;
......@@ -84,11 +83,22 @@
cursor: pointer;
}
.sider-top{
padding: 0px;
margin-bottom: 1px;
height:65px;
box-shadow: 0 1px 2px 0 rgba(0,0,0,.15);
> .page-logo{
display: flex;
align-items: center;
height: 100%;
>.menuicon{
display: block;
text-align: center;
font-weight: 300;
font-size: 28px;
width:64px;
height:100%;
}
}
}
}
......
......@@ -42,6 +42,13 @@ export interface NavDataElement {
*/
path:string;
/**
* 元素主键
*
* @memberof NavDataElement
*/
srfkey:string|null;
}
export interface ServiceState {
......@@ -53,6 +60,13 @@ export interface ServiceState {
*/
action: string;
/**
* 名称
*
* @memberof ServiceState
*/
name: any;
/**
* 数据
*
......@@ -170,7 +184,7 @@ export default class NavDataService {
this.sessionStore.setItem('srfnavdata',JSON.stringify(this.navDataStack));
return curNavData;
}
this.serviceState.next({action:'refresh', data:this.navDataStack});
this.serviceState.next({action:'datarefresh',name:null,data:this.navDataStack});
}
/**
......
......@@ -909,4 +909,26 @@ export default class EntityService {
return Http.getInstance().post(`/${this.APPDENAME}/${data[this.APPDEKEY]}/testuserexistworklist`,requestData,isloading);
}
/**
* 获取所有应用数据
*
* @param context
* @param data
* @param isloading
*/
public async getAllApp(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().get(`uaa/access-center/app-switcher/default`,data,isloading);
}
/**
* 更新已选择的应用
*
* @param context
* @param data
* @param isloading
*/
public async updateChooseApp(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().put(`uaa/access-center/app-switcher/default`,data,isloading);
}
}
\ No newline at end of file
......@@ -87,18 +87,29 @@
// display: flex;
// flex-direction: column;
> .ivu-card-head{
height: 50px;
min-height: 42px;
border-color: rgb(221, 221, 221);
border-style: solid;
border-width: 0px 0px 1px;
margin: 0px 0px 11px;
padding: 6px 0px;
> p{
height: 50px;
padding: 6px 0px 2px;
> .header-container{
min-height: 42px;
display: flex;
flex-wrap: nowrap;
align-items: flex-start;
justify-content: space-between;
> .caption-info{
line-height: 50px;
line-height: 42px;
font-size: 18px;
color: #1890ff;
flex-shrink: 0;
}
> .toolbar-container{
display: inline-block;
display: flex;
flex-wrap: wrap;
align-items: center;
}
}
}
......
......@@ -11,7 +11,12 @@
background-color: #4276a4;
.sider-top {
color: hsla(0,0%,100%,.8);
background: #2d5f8b;
background-color: #4276a4;
>.page-logo{
>.menuicon:hover{
background-color: #2d5f8b;
}
}
}
}
}
......
......@@ -11,6 +11,11 @@
.sider-top {
color: hsla(0,0%,100%,.8);
background-color: #20222A;
>.page-logo{
>.menuicon:hover{
background-color:#060708;
}
}
}
}
}
......
......@@ -9,10 +9,13 @@
> .ivu-layout-sider {
background-color: #f6f6f6;
.sider-top {
background-color: #e8eaec;
.ivu-icon {
color: #aaaaaa;
}
background-color: #f6f6f6;
>.page-logo{
>.menuicon:hover{
background-color: #fff;
color:#000;
}
}
}
}
}
......
......@@ -575,10 +575,8 @@ export default class TaskIndexViewBase extends Vue implements ControlInterface {
*/
public click(item: any) {
if (item) {
if(Object.is(this.navModel,"route")){
let navDataService = NavDataService.getInstance(this.$store);
navDataService.removeNavData(this.viewtag);
}
let navDataService = NavDataService.getInstance(this.$store);
navDataService.removeNavData(this.viewtag);
switch (item.appfunctag) {
case '_4':
this.click_4(item);
......@@ -611,7 +609,12 @@ export default class TaskIndexViewBase extends Vue implements ControlInterface {
{ pathName: 'gridview', parameterName: 'gridview' },
];
const path: string = this.$viewTool.buildUpRoutePath(this.$route, {}, deResParameters, parameters, [], viewparam);
this.$router.push(path);
if(Object.is(this.$route.path,path)){
return;
}
this.$nextTick(function(){
this.$router.push(path);
})
}
/**
......@@ -629,7 +632,12 @@ export default class TaskIndexViewBase extends Vue implements ControlInterface {
{ pathName: 'gridview', parameterName: 'gridview' },
];
const path: string = this.$viewTool.buildUpRoutePath(this.$route, {}, deResParameters, parameters, [], viewparam);
this.$router.push(path);
if(Object.is(this.$route.path,path)){
return;
}
this.$nextTick(function(){
this.$router.push(path);
})
}
/**
......@@ -647,7 +655,12 @@ export default class TaskIndexViewBase extends Vue implements ControlInterface {
{ pathName: 'gridview', parameterName: 'gridview' },
];
const path: string = this.$viewTool.buildUpRoutePath(this.$route, {}, deResParameters, parameters, [], viewparam);
this.$router.push(path);
if(Object.is(this.$route.path,path)){
return;
}
this.$nextTick(function(){
this.$router.push(path);
})
}
/**
......
......@@ -4,7 +4,7 @@
<row >
<i-col v-show="detailsModel.group1.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.jobsinfo.main_form.details.group1')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.jobsinfo.main_form.details.group1')" :isShowCaption="false" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >
<row>
<i-col v-show="detailsModel.id.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='id' :itemRules="this.rules.id" class='' :caption="$t('entities.jobsinfo.main_form.details.id')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.id.error" :isEmptyCaption="false" labelPos="LEFT">
......@@ -617,7 +617,7 @@ export default class MainBase extends Vue implements ControlInterface {
* @memberof Main
*/
public detailsModel: any = {
group1: new FormGroupPanelModel({ caption: '任务信息基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: true, form: this, uiActionGroup: { caption: '', langbase: 'entities.jobsinfo.main_form', extractMode: 'ITEM', details: [] } })
group1: new FormGroupPanelModel({ caption: '任务信息基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: false, form: this, uiActionGroup: { caption: '', langbase: 'entities.jobsinfo.main_form', extractMode: 'ITEM', details: [] } })
,
formpage1: new FormPageModel({ caption: '基本信息', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this })
,
......
......@@ -4,7 +4,7 @@
<row >
<i-col v-show="detailsModel.group1.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.jobslog.main_form.details.group1')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.jobslog.main_form.details.group1')" :isShowCaption="false" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >
<row>
<i-col v-show="detailsModel.id.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='id' :itemRules="this.rules.id" class='' :caption="$t('entities.jobslog.main_form.details.id')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.id.error" :isEmptyCaption="false" labelPos="LEFT">
......@@ -541,7 +541,7 @@ export default class MainBase extends Vue implements ControlInterface {
* @memberof Main
*/
public detailsModel: any = {
group1: new FormGroupPanelModel({ caption: '任务调度日志基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: true, form: this, uiActionGroup: { caption: '', langbase: 'entities.jobslog.main_form', extractMode: 'ITEM', details: [] } })
group1: new FormGroupPanelModel({ caption: '任务调度日志基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: false, form: this, uiActionGroup: { caption: '', langbase: 'entities.jobslog.main_form', extractMode: 'ITEM', details: [] } })
,
formpage1: new FormPageModel({ caption: '基本信息', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this })
,
......
......@@ -4,7 +4,7 @@
<row >
<i-col v-show="detailsModel.group1.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.jobsregistry.main_form.details.group1')" :isShowCaption="true" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >
<app-form-group layoutType="TABLE_24COL" titleStyle="" class='' :uiActionGroup="detailsModel.group1.uiActionGroup" @groupuiactionclick="groupUIActionClick($event)" :caption="$t('entities.jobsregistry.main_form.details.group1')" :isShowCaption="false" uiStyle="DEFAULT" :titleBarCloseMode="0" :isInfoGroupMode="false" >
<row>
<i-col v-show="detailsModel.id.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='id' :itemRules="this.rules.id" class='' :caption="$t('entities.jobsregistry.main_form.details.id')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.id.error" :isEmptyCaption="false" labelPos="LEFT">
......@@ -473,7 +473,7 @@ export default class MainBase extends Vue implements ControlInterface {
* @memberof Main
*/
public detailsModel: any = {
group1: new FormGroupPanelModel({ caption: '任务注册信息基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: true, form: this, uiActionGroup: { caption: '', langbase: 'entities.jobsregistry.main_form', extractMode: 'ITEM', details: [] } })
group1: new FormGroupPanelModel({ caption: '任务注册信息基本信息', detailType: 'GROUPPANEL', name: 'group1', visible: true, isShowCaption: false, form: this, uiActionGroup: { caption: '', langbase: 'entities.jobsregistry.main_form', extractMode: 'ITEM', details: [] } })
,
formpage1: new FormPageModel({ caption: '基本信息', detailType: 'FORMPAGE', name: 'formpage1', visible: true, isShowCaption: true, form: this })
,
......
......@@ -37,11 +37,6 @@
git clone -b master $para2 ibztask/
export NODE_OPTIONS=--max-old-space-size=4096
cd ibztask/
mvn clean package -Pweb
cd ibztask-app/ibztask-app-web
mvn -Pweb docker:build
mvn -Pweb docker:push
docker -H $para1 stack deploy --compose-file=src/main/docker/ibztask-app-web.yaml ibzlab-rt --with-registry-auth
</command>
</hudson.tasks.Shell>
</builders>
......
......@@ -9,6 +9,6 @@ CMD echo "The application will start in ${IBIZ_SLEEP}s..." && \
sleep ${IBIZ_SLEEP} && \
java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /ibztask-app-web.jar
EXPOSE 30005
EXPOSE 8080
ADD ibztask-app-web.jar /ibztask-app-web.jar
......@@ -3,22 +3,9 @@ services:
ibztask-app-web:
image: registry.cn-shanghai.aliyuncs.com/ibizsys/ibztask-app-web:latest
ports:
- "30005:30005"
- "8080:8080"
networks:
- agent_network
environment:
- SPRING_CLOUD_NACOS_DISCOVERY_IP=172.16.180.237
- SERVER_PORT=30005
- SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR=172.16.102.211:8848
- SPRING_REDIS_HOST=172.16.100.243
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_DATABASE=0
- SPRING_DATASOURCE_USERNAME=a_A_5d9d78509
- SPRING_DATASOURCE_PASSWORD=@6dEfb3@
- SPRING_DATASOURCE_URL=jdbc:mysql://172.16.180.232:3306/a_A_5d9d78509?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true
- SPRING_DATASOURCE_DRIVER-CLASS-NAME=com.mysql.jdbc.Driver
- SPRING_DATASOURCE_DEFAULTSCHEMA=a_A_5d9d78509
- NACOS=172.16.102.211:8848
deploy:
resources:
limits:
......
server:
port: 30005
#Log配置
logging:
level:
cn.ibizlab: info
#zuul网关路由设置
zuul:
routes:
......
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="LOG_PATH" value="logs" />
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %-40.40logger{39} : %msg%n" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="LOG_PATTERN2" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([${LOG_LEVEL_PATTERN:-%5p}]) %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_PATH}/ibztask-web.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="file" />
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="LOG_PATH" value="logs" />
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %-40.40logger{39} : %msg%n" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="LOG_PATTERN2" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([${LOG_LEVEL_PATTERN:-%5p}]) %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_PATH}/ibztask.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="file" />
</root>
</configuration>
......@@ -50,9 +50,9 @@ public class JobsInfoServiceImpl extends ServiceImpl<JobsInfoMapper, JobsInfo> i
@Override
@Transactional
public JobsInfo start(JobsInfo et) {
et.set("Id",null);
et.set("Status","1");
et.set("Last_time","0");
update(et);
return et;
}
@Override
......@@ -158,10 +158,10 @@ public class JobsInfoServiceImpl extends ServiceImpl<JobsInfoMapper, JobsInfo> i
@Override
@Transactional
public JobsInfo stop(JobsInfo et) {
et.set("Id",null);
et.set("Next_time","0");
et.set("Last_time","0");
et.set("Status","0");
et.set("Next_time","0");
update(et);
return et;
}
......
......@@ -4,7 +4,7 @@
<!--输出实体[JOBS_INFO]数据结构 -->
<changeSet author="a_A_5d9d78509" id="tab-jobs_info-79-1">
<changeSet author="a_A_5d9d78509" id="tab-jobs_info-80-1">
<createTable tableName="JOBS_INFO">
<column name="ID" remarks="" type="BIGINT">
<constraints primaryKey="true" primaryKeyName="PK_JOBS_INFO_ID"/>
......@@ -42,7 +42,7 @@
<!--输出实体[JOBS_REGISTRY]数据结构 -->
<changeSet author="a_A_5d9d78509" id="tab-jobs_registry-30-2">
<changeSet author="a_A_5d9d78509" id="tab-jobs_registry-31-2">
<createTable tableName="JOBS_REGISTRY">
<column name="ID" remarks="" type="BIGINT">
<constraints primaryKey="true" primaryKeyName="PK_JOBS_REGISTRY_ID"/>
......@@ -76,7 +76,7 @@
<!--输出实体[JOBS_LOG]数据结构 -->
<changeSet author="a_A_5d9d78509" id="tab-jobs_log-46-4">
<changeSet author="a_A_5d9d78509" id="tab-jobs_log-48-4">
<createTable tableName="JOBS_LOG">
<column name="ID" remarks="" type="BIGINT">
<constraints primaryKey="true" primaryKeyName="PK_JOBS_LOG_ID"/>
......
server:
port: 40005
#Log配置
logging:
level:
cn.ibizlab: info
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="LOG_PATH" value="logs" />
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %-40.40logger{39} : %msg%n" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="LOG_PATTERN2" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([${LOG_LEVEL_PATTERN:-%5p}]) %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_PATH}/ibztask-api.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="file" />
</root>
</configuration>
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册