提交 81707c23 编写于 作者: ibizdev's avatar ibizdev

ibiz4j 发布系统代码

上级 1e6a39d1
## 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修复
......
......@@ -73,8 +73,9 @@ import AppDepartmentSelect from './components/app-department-select/app-departme
import IBizGroupSelect from './components/ibiz-group-select/ibiz-group-select.vue'
import IBizGroupPicker from './components/ibiz-group-picker/ibiz-group-picker.vue'
import AppWFApproval from './components/app-wf-approval/app-wf-approval.vue'
import Breadcrumb from './components/app-breadcrumb/app-breadcrumb.vue';
import Breadcrumb from './components/app-breadcrumb/app-breadcrumb.vue'
import AppTransfer from './components/app-transfer/app-transfer.vue'
import ContextMenuDrag from './components/context-menu-drag/context-menu-drag.vue'
// 全局挂载UI实体服务注册中心
window['uiServiceRegister'] = uiServiceRegister;
......@@ -162,5 +163,6 @@ export const AppComponents = {
v.component('app-wf-approval',AppWFApproval);
v.component('app-breadcrumb',Breadcrumb);
v.component('app-transfer',AppTransfer);
v.component('context-menu-drag',ContextMenuDrag);
},
};
\ No newline at end of file
......@@ -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
<template>
<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">{{ $t(item.title) }}</span>
<a v-else @click.prevent="handleLink(item)">{{ $t(item.title) }}</a>
</el-breadcrumb-item>
<template v-if="Object.is(this.navModel,'route')">
<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 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>
</template>
<template v-if="!Object.is(this.navModel,'route')">
<el-breadcrumb-item v-for="(item, index) in breadcrumbs" :key="item.path">
<span v-if="index === breadcrumbs.length-1" class="no-redirect" >{{ $t(item.meta.caption)}}</span>
<a v-else @click.prevent="handleLink(item)" >{{ $t(item.meta.caption) }}</a>
</el-breadcrumb-item>
</template>
</transition-group>
</el-breadcrumb>
</template>
......@@ -12,7 +33,9 @@
<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';
@Component({
})
......@@ -23,7 +46,14 @@ export default class Breadcrumb extends Vue {
*
* @memberof Breadcrumb
*/
private breadcrumbs: RouteRecord[] = [];
private breadcrumbs: Array<any> = [];
/**
* 导航服务
*
* @memberof Breadcrumb
*/
private navDataService = NavDataService.getInstance(this.$store);
/**
* 默认视图标识
......@@ -33,11 +63,11 @@ export default class Breadcrumb extends Vue {
@Prop() public indexViewTag!: string;
/**
* 首页路径
* 导航模式
*
* @memberof Breadcrumb
*/
@Prop() public indexViewPath!: string;
@Prop({default:'tab'}) public navModel?:string;
/**
* 监听路由
......@@ -49,13 +79,30 @@ export default class Breadcrumb extends Vue {
this.getBreadcrumb()
}
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof Dev
*/
public serviceStateEvent: Subscription | undefined;
/**
* vue 生命周期
*
* @memberof Breadcrumb
*/
created() {
this.getBreadcrumb()
this.getBreadcrumb();
if(Object.is(this.navModel,"route")){
this.serviceStateEvent = this.navDataService.serviceState.subscribe(({ action,name, data }:{ action:string,name:any,data:any }) => {
if (Object.is(action, 'datarefresh')) {
this.getBreadcrumb();
}
});
}
}
/**
......@@ -64,8 +111,33 @@ export default class Breadcrumb extends Vue {
* @memberof Breadcrumb
*/
private getBreadcrumb() {
let navDataService = NavDataService.getInstance();
this.breadcrumbs = navDataService.getNavData();
if(Object.is(this.navModel,"route")){
this.breadcrumbs = this.navDataService.getNavData();
this.$forceUpdate();
}else{
this.breadcrumbs = this.$route.matched.filter((item) => {
return item.meta && item.meta.caption
})
}
}
/**
* 获取面包屑指定元素前一条数据
*
* @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;
}
/**
......@@ -74,20 +146,55 @@ export default class Breadcrumb extends Vue {
* @memberof Breadcrumb
*/
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}`);
if(Object.is(this.navModel,"route")){
// 首页
if(Object.is(item.id,this.indexViewTag)){
this.$router.push((window.sessionStorage.getItem(Environment.AppName))as string);
}else{
// 非首页
this.$router.push(item.path).catch(err => {
console.warn(err);
});
}
this.navDataService.removeNavData(item.id);
}else{
// 非首页
this.$router.push(item.path).catch(err => {
console.warn(err);
});
if(item && item.meta && item.meta.viewType && Object.is(item.meta.viewType,"APPINDEX")){
let path: string | null = window.sessionStorage.getItem(Environment.AppName);
if (path) {
this.$router.push({ path: path });
} else {
this.$router.push("/");
}
}else{
this.$router.push(item).catch(err => {
console.warn(err);
});
}
}
let navDataService = NavDataService.getInstance();
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});
}
/**
* 组件销毁
*
* @memberof Breadcrumb
*/
public destroyed() {
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
</script>
......
......@@ -15,7 +15,7 @@
overflow: auto;
> .ivu-tabs-tabpane {
height: 100%;
overflow: auto;
overflow: initial;
}
}
}
......
......@@ -242,7 +242,7 @@ export default class AppPicker extends Vue {
* @param {*} oldVal
* @memberof AppPicker
*/
@Watch('value')
@Watch('value',{immediate: true})
public onValueChange(newVal: any, oldVal: any) {
this.curvalue = newVal;
if (Object.is(this.editortype, 'dropdown') && this.valueitem) {
......
.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
<template>
<Drawer class-name="sider-drawer" placement="left" :closable="false" :mask="false" width="200" v-model="leftDrawerVisiable">
<div class="context-menu-drag">
<div class="menu-list">
<div class="menu-header" @mouseover="showMenuDrawer" @click="rightDrawerVisiable=!rightDrawerVisiable">
<div class="menuicon">
<Icon type="md-apps" />
</div>
<div class="content">
<span>服务</span>
</div>
<div class="forward">
<Icon type="ios-arrow-forward" />
</div>
</div>
<div style="padding:8px 0px;" class="col-6">
<draggable class="list-group" tag="ul" v-model="selectlist" v-bind="dragOptionsVal" @start="drag=true" @end="drag=false" :animation="250" handle=".handle" ghost-class="ghost">
<transition-group type="transition" :name="!drag ? 'flip-list' : null">
<li class="list-group-item" v-for="(item,index) in selectlist" :key="item.id">
<el-row>
<el-col class="menuicon" :span="4">
<span>
<Icon v-if="item.icon" :type="item.icon" />
<Icon v-else type="md-menu" />
</span>
</el-col>
<el-col :span="14">
<span>{{ item.label }}</span>
</el-col>
<el-col :span="6">
<div class="bar">
<div>
<Icon type="ios-close" @click="removeAt(index)" />
</div>
<div>
<Icon type="ios-move handle" />
</div>
</div>
</el-col>
</el-row>
</li>
</transition-group>
</draggable>
</div>
</div>
<Drawer class-name="menu-drawer" width="60" :closable="true" :mask="false" placement="left" v-model="rightDrawerVisiable">
<div class="menuItems">
<div class="item" v-for="(item) in list" :key="item.id">
<span class="title">{{item.label}}</span>
<span v-if="isStar(item.id)" class="star" @click="outStar(item)">
<Icon type="ios-star" />
</span>
<span v-else class="star" @click="onStar(item)">
<Icon type="ios-star-outline" />
</span>
</div>
</div>
</Drawer>
</div>
</Drawer>
</template>
<script lang="ts">
import draggable from "vuedraggable";
import EntityService from '@/service/entity-service';
import { Vue,Component,Provide,Watch,Prop,Model } from "vue-property-decorator";
// tslint:disable-next-line:max-classes-per-file
@Component({
components: {
draggable
}
})
export default class ContextMenuDrag extends Vue {
/**
* 抽屉菜单状态
*
* @returns
* @memberof ContextMenuDrag
*/
@Prop() public contextMenuDragVisiable?: boolean;
/**
* 拖拽列表配置对象
*
* @returns
* @memberof ContextMenuDrag
*/
@Model("change") public dragOptions: any;
/**
* 右侧飘窗状态
*
* @returns
* @memberof ContextMenuDrag
*/
public rightDrawerVisiable: boolean = false;
/**
* 左侧飘窗状态
*
* @returns
* @memberof ContextMenuDrag
*/
public leftDrawerVisiable: boolean = false;
/**
* 全部应用数据
*
* @returns
* @memberof ContextMenuDrag
*/
public list: Array<any> = [];
/**
* 已选择的应用数据
*
* @returns
* @memberof ContextMenuDrag
*/
public selectlist: Array<any> = [];
/**
* 拖拽列表
*
* @returns
* @memberof ContextMenuDrag
*/
public drag: boolean = false;
/**
* 拖拽列表配置项
*
* @returns
* @memberof ContextMenuDrag
*/
get dragOptionsVal() {
return {
animation: 200,
group: "description",
disabled: false,
ghostClass: "ghost"
};
}
/**
* 实体服务对象
*
* @protected
* @type {EntityService}
* @memberof ContextMenuDrag
*/
protected entityService: EntityService = new EntityService();
/**
* 监听抽屉菜单状态
*
* @returns
* @memberof ContextMenuDrag
*/
@Watch("contextMenuDragVisiable")
public onVisiableChange(newVal: any, oldVal: any) {
if (newVal) {
this.leftDrawerVisiable = newVal;
} else {
let that: any = this;
let params: any = {};
params.model = this.selectlist;
const put: Promise<any> = this.entityService.updateChooseApp(null,params);
this.rightDrawerVisiable = false;
setTimeout(() => {
that.leftDrawerVisiable = false;
}, 300);
}
}
/**
* 鼠标移入服务时显示右侧飘窗
*
* @returns
* @memberof ContextMenuDrag
*/
public showMenuDrawer() {
let that: any = this;
if(this.contextMenuDragVisiable){
setTimeout(() => {
that.rightDrawerVisiable = true;
}, 300);
}
}
/**
* 判断是否已选择该应用
*
* @returns
* @memberof ContextMenuDrag
*/
public isStar(id: any) {
let istar: boolean = false;
this.selectlist.forEach((item: any) => {
if (Object.is(item.id, id)) {
istar = true;
}
});
return istar;
}
/**
* 加入列表
*
* @returns
* @memberof ContextMenuDrag
*/
public onStar(item: any) {
item.visabled = 1;
this.selectlist.push(item);
}
/**
* 从列表中删除
*
* @returns
* @memberof ContextMenuDrag
*/
public outStar(item: any) {
item.visabled = 0;
let index: number = 0;
let that: any = this;
this.selectlist.forEach((select: any, index: number) => {
if (Object.is(item.id, select.id)) {
that.selectlist.splice(index,1);
}
});
}
/**
* 删除已选择应用
*
* @returns
* @memberof ContextMenuDrag
*/
removeAt(index: any) {
this.selectlist.splice(index, 1);
}
/**
* 拖拽列表排序
*/
sort() {
this.selectlist = this.selectlist.sort((a, b) => a.order - b.order);
}
/**
* 过滤已选择的应用
*
* @returns
* @memberof ContextMenuDrag
*/
listFilter() {
let that: any = this;
that.selectlist = [];
this.list.forEach((item: any) => {
if (item.visabled === 1) {
that.selectlist.push(item);
}
});
}
/**
* vue 生命周期
*
* @returns
* @memberof ContextMenuDrag
*/
mounted() {
let that: any = this;
const get: Promise<any> = this.entityService.getAllApp(null,{});
get
.then((response: any) => {
if (response) {
that.list = response.data.model;
that.listFilter();
}
});
}
}
</script>
<style lang='less'>
@import './context-menu-drag.less';
</style>
......@@ -247,12 +247,19 @@ export default class EditViewEngine extends ViewEngine {
*/
public setTabCaption(info: string): void {
let viewdata: any = this.view.model;
if (viewdata && info && !Object.is(info, '') && this.view.$tabPageExp && (viewdata.srfTitle.indexOf(" - ") === -1)) {
this.view.$tabPageExp.setCurPageCaption(viewdata.srfTitle, viewdata.srfTitle, info);
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);
}
if(this.view.$route){
this.view.$route.meta.info = info;
}
this.view.model.srfTitle = `${this.view.$t(viewdata.srfTitle)} - ${viewdata.dataInfo}`;
this.view.model.srfTitle = `${this.view.$t(viewdata.srfTitle)}-${viewdata.dataInfo}`;
this.view.initNavData();
}
}
......
......@@ -367,6 +367,13 @@ export default class MDViewEngine extends ViewEngine {
* @memberof MDViewEngine
*/
public MDCtrlLoad(args: any[]) {
let cacheArray:Array<any> = [];
if(args.length >0){
args.forEach((item:any) =>{
cacheArray.push({srfkey:item.srfkey,srfmajortext:item.srfmajortext});
})
}
this.view.initNavData(cacheArray);
if (this.view) {
this.view.$emit('viewload', args);
}
......
......@@ -9,7 +9,6 @@ import view_form from '@widgets/wfgroup/main-form/main-form.vue';
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -2,9 +2,9 @@
<div class='view-container degridview wfgroup-grid-view'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="wfgroupgridview"></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>
......@@ -149,7 +149,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 WFGroupService from '@/service/wfgroup/wfgroup-service';
import GridViewEngine from '@engine/view/grid-view-engine';
......@@ -404,7 +404,16 @@ export default class WFGroupGridViewBase extends Vue {
* @type {*}
* @memberof WFGroupGridViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFGroupGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -428,7 +437,7 @@ export default class WFGroupGridViewBase extends Vue {
* @public
* @memberof WFGroupGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -458,6 +467,9 @@ export default class WFGroupGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfgroup':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -549,9 +561,9 @@ export default class WFGroupGridViewBase extends Vue {
*
* @memberof WFGroupGridViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfgroup-grid-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfgroup-grid-view',srfkey:this.context.wfgroup,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -571,10 +583,24 @@ export default class WFGroupGridViewBase extends Vue {
* @memberof WFGroupGridViewBase
*/
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,'wfgroup-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')){
......@@ -1503,6 +1529,9 @@ export default class WFGroupGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -11,7 +11,6 @@ import view_searchform from '@widgets/wfgroup/default-searchform/default-searchf
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -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 WFGroupService from '@/service/wfgroup/wfgroup-service';
import MPickupViewEngine from '@engine/view/mpickup-view-engine';
......@@ -286,7 +286,16 @@ export default class WFGroupMPickupViewBase extends Vue {
* @type {*}
* @memberof WFGroupMPickupViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFGroupMPickupViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -310,7 +319,7 @@ export default class WFGroupMPickupViewBase extends Vue {
* @public
* @memberof WFGroupMPickupViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -340,6 +349,9 @@ export default class WFGroupMPickupViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfgroup':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -431,9 +443,9 @@ export default class WFGroupMPickupViewBase extends Vue {
*
* @memberof WFGroupMPickupViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfgroup-mpickup-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfgroup-mpickup-view',srfkey:this.context.wfgroup,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -453,10 +465,24 @@ export default class WFGroupMPickupViewBase extends Vue {
* @memberof WFGroupMPickupViewBase
*/
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,'wfgroup-mpickup-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -575,6 +601,9 @@ export default class WFGroupMPickupViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
/**
......
......@@ -9,7 +9,6 @@ import view_pickupviewpanel from '@widgets/wfgroup/mpickup-viewpickupviewpanel-p
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -49,7 +49,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 WFGroupService from '@/service/wfgroup/wfgroup-service';
import PickupGridViewEngine from '@engine/view/pickup-grid-view-engine';
......@@ -260,7 +260,16 @@ export default class WFGroupPickupGridViewBase extends Vue {
* @type {*}
* @memberof WFGroupPickupGridViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFGroupPickupGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -284,7 +293,7 @@ export default class WFGroupPickupGridViewBase extends Vue {
* @public
* @memberof WFGroupPickupGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -314,6 +323,9 @@ export default class WFGroupPickupGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfgroup':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -405,9 +417,9 @@ export default class WFGroupPickupGridViewBase extends Vue {
*
* @memberof WFGroupPickupGridViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfgroup-pickup-grid-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfgroup-pickup-grid-view',srfkey:this.context.wfgroup,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -427,10 +439,24 @@ export default class WFGroupPickupGridViewBase extends Vue {
* @memberof WFGroupPickupGridViewBase
*/
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,'wfgroup-pickup-grid-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -593,6 +619,9 @@ export default class WFGroupPickupGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
/**
......
......@@ -11,7 +11,6 @@ import view_searchform from '@widgets/wfgroup/default-searchform/default-searchf
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -34,7 +34,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 WFGroupService from '@/service/wfgroup/wfgroup-service';
import PickupViewEngine from '@engine/view/pickup-view-engine';
......@@ -253,7 +253,16 @@ export default class WFGroupPickupViewBase extends Vue {
* @type {*}
* @memberof WFGroupPickupViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFGroupPickupViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -277,7 +286,7 @@ export default class WFGroupPickupViewBase extends Vue {
* @public
* @memberof WFGroupPickupViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -307,6 +316,9 @@ export default class WFGroupPickupViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfgroup':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -398,9 +410,9 @@ export default class WFGroupPickupViewBase extends Vue {
*
* @memberof WFGroupPickupViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfgroup-pickup-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfgroup-pickup-view',srfkey:this.context.wfgroup,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -420,10 +432,24 @@ export default class WFGroupPickupViewBase extends Vue {
* @memberof WFGroupPickupViewBase
*/
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,'wfgroup-pickup-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -541,6 +567,9 @@ export default class WFGroupPickupViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
/**
......
......@@ -9,7 +9,6 @@ import view_pickupviewpanel from '@widgets/wfgroup/pickup-viewpickupviewpanel-pi
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -6,7 +6,7 @@
<sider :width="collapseChange ? 64 : 200" hide-trigger v-model="collapseChange">
<div class="sider-top">
<div class="page-logo">
<img v-show="collapseChange" src="../../../assets/img/logo.png" height="16" />
<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>
......@@ -26,14 +26,15 @@
ref='appmenu'
@closeview="closeView($event)">
</view_appmenu>
<context-menu-drag :contextMenuDragVisiable="contextMenuDragVisiable"></context-menu-drag>
</sider>
<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="wfindex-view" indexViewPath="wfindexview"></app-breadcrumb>
<app-breadcrumb :navModel="navModel" indexViewTag="wfindex-view"></app-breadcrumb>
</div>
</div>
<div class="header-right" style="display: flex;align-items: center;justify-content: space-between;">
......@@ -44,7 +45,7 @@
<app-theme style="width:45px;display: flex;justify-content: center;"></app-theme>
</div>
</header>
<content class="index_content" :style="{'width':this.collapseChange ? 'calc(100vw - 64px)' : 'calc(100vw - 200px)' }">
<content :class="{'index_content':true,'index_tab_content':Object.is(navModel,'tab')?true:false,'index_route_content':Object.is(navModel,'route')?true:false}" :style="{'width':this.collapseChange ? 'calc(100vw - 64px)' : 'calc(100vw - 200px)' }">
<tab-page-exp v-if="Object.is(navModel,'tab')"></tab-page-exp>
<app-keep-alive :routerList="getRouterList">
<router-view :key="getRouterViewKey"></router-view>
......@@ -61,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';
......@@ -246,7 +247,16 @@ export default class WFIndexViewBase extends Vue {
* @type {*}
* @memberof WFIndexViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFIndexViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -270,7 +280,7 @@ export default class WFIndexViewBase extends Vue {
* @public
* @memberof WFIndexViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -389,9 +399,9 @@ export default class WFIndexViewBase extends Vue {
*
* @memberof WFIndexViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfindex-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfindex-view',srfkey:null,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -411,10 +421,24 @@ export default class WFIndexViewBase extends Vue {
* @memberof WFIndexViewBase
*/
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,'wfindex-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -489,6 +513,14 @@ export default class WFIndexViewBase extends Vue {
*/
public navModel:string = "tab";
/**
* 抽屉状态
*
* @type {boolean}
* @memberof WFIndexViewBase
*/
public contextMenuDragVisiable: boolean = false;
/**
* 当前主题
*
......
......@@ -3,7 +3,9 @@
}
.wfindex-view{
position: relative;
}
.index_view{
margin-bottom: 1px;
width: 100%;
......@@ -19,6 +21,7 @@
display: flex;
align-items: center;
justify-content: space-between;
background-color: #fff;
.page-logo{
display: flex;
align-items: center;
......@@ -73,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;
......@@ -81,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%;
}
}
}
}
......
......@@ -9,7 +9,6 @@ import view_appmenu from '@widgets/app/wfindex-view-appmenu/wfindex-view-appmenu
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -9,7 +9,6 @@ import view_form from '@widgets/wfmember/main-form/main-form.vue';
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -2,9 +2,9 @@
<div class='view-container degridview wfmember-grid-view'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="wfmembergridview"></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>
......@@ -149,7 +149,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 WFMemberService from '@/service/wfmember/wfmember-service';
import GridViewEngine from '@engine/view/grid-view-engine';
......@@ -404,7 +404,16 @@ export default class WFMemberGridViewBase extends Vue {
* @type {*}
* @memberof WFMemberGridViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFMemberGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -428,7 +437,7 @@ export default class WFMemberGridViewBase extends Vue {
* @public
* @memberof WFMemberGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -458,6 +467,9 @@ export default class WFMemberGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfmember':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -549,9 +561,9 @@ export default class WFMemberGridViewBase extends Vue {
*
* @memberof WFMemberGridViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfmember-grid-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfmember-grid-view',srfkey:this.context.wfmember,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -571,10 +583,24 @@ export default class WFMemberGridViewBase extends Vue {
* @memberof WFMemberGridViewBase
*/
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,'wfmember-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')){
......@@ -1147,7 +1173,8 @@ export default class WFMemberGridViewBase extends Vue {
public newdata(args: any[],fullargs?:any[], params?: any, $event?: any, xData?: any) {
let localContext:any = null;
let localViewParam:any =null;
const batchAddPSAppViews=[
let batchAddPSAppViews:Array<any>=[];
batchAddPSAppViews=[
{view:{viewname:'wfgroup-mpickup-view',height: 0,width: 0,title: '角色/用户组数据多项选择视图'},
res:['WFGroup'],
'resAppKey':'groupid'},
......@@ -1530,6 +1557,9 @@ export default class WFMemberGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -11,7 +11,6 @@ import view_searchform from '@widgets/wfmember/default-searchform/default-search
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -9,7 +9,6 @@ import view_form from '@widgets/wfprocess-definition/main-form/main-form.vue';
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -2,9 +2,9 @@
<div class='view-container degridview wfprocess-definition-grid-view'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="wfprocessdefinitiongridview"></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>
......@@ -149,7 +149,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 WFProcessDefinitionService from '@/service/wfprocess-definition/wfprocess-definition-service';
import GridViewEngine from '@engine/view/grid-view-engine';
......@@ -404,7 +404,16 @@ export default class WFProcessDefinitionGridViewBase extends Vue {
* @type {*}
* @memberof WFProcessDefinitionGridViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFProcessDefinitionGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -428,7 +437,7 @@ export default class WFProcessDefinitionGridViewBase extends Vue {
* @public
* @memberof WFProcessDefinitionGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -458,6 +467,9 @@ export default class WFProcessDefinitionGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfprocessdefinition':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -549,9 +561,9 @@ export default class WFProcessDefinitionGridViewBase extends Vue {
*
* @memberof WFProcessDefinitionGridViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfprocess-definition-grid-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfprocess-definition-grid-view',srfkey:this.context.wfprocessdefinition,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -571,10 +583,24 @@ export default class WFProcessDefinitionGridViewBase extends Vue {
* @memberof WFProcessDefinitionGridViewBase
*/
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,'wfprocess-definition-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')){
......@@ -1503,6 +1529,9 @@ export default class WFProcessDefinitionGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -11,7 +11,6 @@ import view_searchform from '@widgets/wfprocess-definition/default-searchform/de
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -3,22 +3,19 @@
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="wfremodeleditview"></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.tbitem1.visabled" :disabled="toolBarModels.tbitem1.disabled" class='' @click="toolbar_click({ tag: 'tbitem1' }, $event)">
<i class='fa fa-save'></i>
<span class='caption'>{{$t('entities.wfremodel.editviewtoolbar_toolbar.tbitem1.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.wfremodel.editviewtoolbar_toolbar.tbitem1.tip')}}</div>
</tooltip>
</div>
</div>
<div class='toolbar-container'>
<tooltip :transfer="true" :max-width="600">
<i-button v-show="toolBarModels.tbitem1.visabled" :disabled="toolBarModels.tbitem1.disabled" class='' @click="toolbar_click({ tag: 'tbitem1' }, $event)">
<i class='fa fa-save'></i>
<span class='caption'>{{$t('entities.wfremodel.editviewtoolbar_toolbar.tbitem1.caption')}}</span>
</i-button>
<div slot='content'>{{$t('entities.wfremodel.editviewtoolbar_toolbar.tbitem1.tip')}}</div>
</tooltip>
</div>
</div>
<div class="content-container">
<div class='view-top-messages'>
</div>
......@@ -55,7 +52,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 WFREModelService from '@/service/wfremodel/wfremodel-service';
import EditViewEngine from '@engine/view/edit-view-engine';
......@@ -278,7 +275,16 @@ export default class WFREModelEditViewBase extends Vue {
* @type {*}
* @memberof WFREModelEditViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFREModelEditViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -302,7 +308,7 @@ export default class WFREModelEditViewBase extends Vue {
* @public
* @memberof WFREModelEditViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -332,6 +338,9 @@ export default class WFREModelEditViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfremodel':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -423,9 +432,9 @@ export default class WFREModelEditViewBase extends Vue {
*
* @memberof WFREModelEditViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfremodel-edit-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfremodel-edit-view',srfkey:this.context.wfremodel,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -445,10 +454,24 @@ export default class WFREModelEditViewBase extends Vue {
* @memberof WFREModelEditViewBase
*/
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,'wfremodel-edit-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -631,6 +654,9 @@ export default class WFREModelEditViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -9,7 +9,6 @@ import view_form from '@widgets/wfremodel/main-form/main-form.vue';
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -9,7 +9,6 @@ import view_form from '@widgets/wfuser/main-form/main-form.vue';
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -2,9 +2,9 @@
<div class='view-container degridview wfuser-grid-view'>
<app-studioaction :viewTitle="$t(model.srfTitle)" viewName="wfusergridview"></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>
......@@ -149,7 +149,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 WFUserService from '@/service/wfuser/wfuser-service';
import GridViewEngine from '@engine/view/grid-view-engine';
......@@ -404,7 +404,16 @@ export default class WFUserGridViewBase extends Vue {
* @type {*}
* @memberof WFUserGridViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFUserGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -428,7 +437,7 @@ export default class WFUserGridViewBase extends Vue {
* @public
* @memberof WFUserGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -458,6 +467,9 @@ export default class WFUserGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfuser':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -549,9 +561,9 @@ export default class WFUserGridViewBase extends Vue {
*
* @memberof WFUserGridViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfuser-grid-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfuser-grid-view',srfkey:this.context.wfuser,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -571,10 +583,24 @@ export default class WFUserGridViewBase extends Vue {
* @memberof WFUserGridViewBase
*/
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,'wfuser-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')){
......@@ -1503,6 +1529,9 @@ export default class WFUserGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
......
......@@ -11,7 +11,6 @@ import view_searchform from '@widgets/wfuser/default-searchform/default-searchfo
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -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 WFUserService from '@/service/wfuser/wfuser-service';
import MPickupViewEngine from '@engine/view/mpickup-view-engine';
......@@ -286,7 +286,16 @@ export default class WFUserMPickupViewBase extends Vue {
* @type {*}
* @memberof WFUserMPickupViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFUserMPickupViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -310,7 +319,7 @@ export default class WFUserMPickupViewBase extends Vue {
* @public
* @memberof WFUserMPickupViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -340,6 +349,9 @@ export default class WFUserMPickupViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfuser':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -431,9 +443,9 @@ export default class WFUserMPickupViewBase extends Vue {
*
* @memberof WFUserMPickupViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfuser-mpickup-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfuser-mpickup-view',srfkey:this.context.wfuser,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -453,10 +465,24 @@ export default class WFUserMPickupViewBase extends Vue {
* @memberof WFUserMPickupViewBase
*/
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,'wfuser-mpickup-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -575,6 +601,9 @@ export default class WFUserMPickupViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
/**
......
......@@ -9,7 +9,6 @@ import view_pickupviewpanel from '@widgets/wfuser/mpickup-viewpickupviewpanel-pi
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -49,7 +49,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 WFUserService from '@/service/wfuser/wfuser-service';
import PickupGridViewEngine from '@engine/view/pickup-grid-view-engine';
......@@ -260,7 +260,16 @@ export default class WFUserPickupGridViewBase extends Vue {
* @type {*}
* @memberof WFUserPickupGridViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFUserPickupGridViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -284,7 +293,7 @@ export default class WFUserPickupGridViewBase extends Vue {
* @public
* @memberof WFUserPickupGridViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -314,6 +323,9 @@ export default class WFUserPickupGridViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfuser':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -405,9 +417,9 @@ export default class WFUserPickupGridViewBase extends Vue {
*
* @memberof WFUserPickupGridViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfuser-pickup-grid-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfuser-pickup-grid-view',srfkey:this.context.wfuser,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -427,10 +439,24 @@ export default class WFUserPickupGridViewBase extends Vue {
* @memberof WFUserPickupGridViewBase
*/
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,'wfuser-pickup-grid-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -593,6 +619,9 @@ export default class WFUserPickupGridViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
/**
......
......@@ -11,7 +11,6 @@ import view_searchform from '@widgets/wfuser/default-searchform/default-searchfo
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -34,7 +34,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 WFUserService from '@/service/wfuser/wfuser-service';
import PickupViewEngine from '@engine/view/pickup-view-engine';
......@@ -253,7 +253,16 @@ export default class WFUserPickupViewBase extends Vue {
* @type {*}
* @memberof WFUserPickupViewBase
*/
public navDataService = NavDataService.getInstance();
public navDataService = NavDataService.getInstance(this.$store);
/**
* 导航服务事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof WFUserPickupViewBase
*/
public serviceStateEvent: Subscription | undefined;
/**
* 应用上下文
......@@ -277,7 +286,7 @@ export default class WFUserPickupViewBase extends Vue {
* @public
* @memberof WFUserPickupViewBase
*/
public parseViewParam(): void {
public parseViewParam(inputvalue:any = null): void {
for(let key in this.context){
delete this.context[key];
}
......@@ -307,6 +316,9 @@ export default class WFUserPickupViewBase extends Vue {
});
});
this.$viewTool.formatRouteParams(tempValue,this.$route,this.context,this.viewparams);
if(inputvalue){
Object.assign(this.context,{'wfuser':inputvalue});
}
if(this.$store.getters.getAppData() && this.$store.getters.getAppData().context){
Object.assign(this.context,this.$store.getters.getAppData().context);
}
......@@ -398,9 +410,9 @@ export default class WFUserPickupViewBase extends Vue {
*
* @memberof WFUserPickupViewBase
*/
public initNavData(){
public initNavData(data:any = null){
if(this.viewDefaultUsage){
this.navDataService.addNavData({id:'wfuser-pickup-view',title:this.$t(this.model.srfTitle),data:null,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
this.navDataService.addNavData({id:'wfuser-pickup-view',srfkey:this.context.wfuser,title:this.$t(this.model.srfTitle),data:data,context:this.context,viewparams:this.viewparams,path:this.$route.fullPath});
}
}
......@@ -420,10 +432,24 @@ export default class WFUserPickupViewBase extends Vue {
* @memberof WFUserPickupViewBase
*/
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,'wfuser-pickup-view')){
return;
}
if (Object.is(action, 'viewrefresh')) {
_this.$nextTick(()=>{
_this.parseViewParam(data);
if(_this.engine){
_this.engine.load();
}
});
}
});
}
......@@ -541,6 +567,9 @@ export default class WFUserPickupViewBase extends Vue {
}
})
}
if (this.serviceStateEvent) {
this.serviceStateEvent.unsubscribe();
}
}
}
/**
......
......@@ -9,7 +9,6 @@ import view_pickupviewpanel from '@widgets/wfuser/pickup-viewpickupviewpanel-pic
},
beforeRouteEnter: (to: any, from: any, next: any) => {
next((vm: any) => {
console.log(vm);
vm.$store.commit('addCurPageViewtag', { fullPath: to.fullPath, viewtag: vm.viewtag });
});
},
......
......@@ -42,8 +42,42 @@ export interface NavDataElement {
*/
path:string;
/**
* 元素主键
*
* @memberof NavDataElement
*/
srfkey:string|null;
}
export interface ServiceState {
/**
* 行为
*
* @memberof ServiceState
*/
action: string;
/**
* 名称
*
* @memberof ServiceState
*/
name: any;
/**
* 数据
*
* @memberof ServiceState
*/
data: any;
}
import { Subject } from 'rxjs';
/**
* 导航数据服务
*
......@@ -62,6 +96,22 @@ export default class NavDataService {
*/
private static navDataService: NavDataService;
/**
* 缓存对象
*
* @private
* @type {(any)}
* @memberof NavDataService
*/
private static store: any;
/**
* 服务状态
*
* @memberof NavDataService
*/
public serviceState: Subject<ServiceState> = new Subject();
/**
* 导航数据栈
*
......@@ -93,10 +143,11 @@ export default class NavDataService {
* @returns {NavDataService}
* @memberof NavDataService
*/
public static getInstance(): NavDataService {
public static getInstance(store: any): NavDataService {
if (!NavDataService.navDataService) {
NavDataService.navDataService = new NavDataService();
}
this.store = store;
return this.navDataService;
}
......@@ -133,6 +184,7 @@ export default class NavDataService {
this.sessionStore.setItem('srfnavdata',JSON.stringify(this.navDataStack));
return curNavData;
}
this.serviceState.next({action:'datarefresh',name:null,data:this.navDataStack});
}
/**
......@@ -159,6 +211,29 @@ export default class NavDataService {
* @memberof NavDataService
*/
public removeNavData(id:string){
if(this.navDataStack.length >0){
let tempIndex:number = this.navDataStack.findIndex((element:NavDataElement) =>{
return Object.is(element.id,id);
})
let removeNavData = this.navDataStack.splice(tempIndex+1);
if(removeNavData && removeNavData.length >0){
removeNavData.forEach((navData:any) =>{
NavDataService.store.commit("deletePage", navData.path);
})
}
this.sessionStore.setItem('srfnavdata',JSON.stringify(this.navDataStack));
return removeNavData;
}else{
return null;
}
}
/**
* 从导航数据栈中删除指定数据上层数据(不清除页面缓存)
*
* @memberof NavDataService
*/
public removeNavDataWithoutCache(id:string){
if(this.navDataStack.length >0){
let tempIndex:number = this.navDataStack.findIndex((element:NavDataElement) =>{
return Object.is(element.id,id);
......@@ -219,6 +294,15 @@ export default class NavDataService {
* @memberof NavDataService
*/
public getNavData(){
return this.navDataStack;
if(this.navDataStack && this.navDataStack.length >0){
this.navDataStack.forEach((item:any,index) =>{
if(item && item.data && this.navDataStack[index+1]){
this.navDataStack[index+1] = Object.assign(this.navDataStack[index+1],{isselected:true});
}
})
return this.navDataStack;
}else{
return [];
}
}
}
\ No newline at end of file
......@@ -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
......@@ -62,10 +62,23 @@
border-top-color: #909399;
}
// tab分页模式首页布局
.index_tab_content{
.view-container {
height: calc(100% - 65px);
margin: 0px 12px;
}
}
// 面包屑模式首页布局
.index_route_content{
.view-container {
height: calc(100% - 36px);
margin: 12px;
}
}
.view-container {
height: calc(100% - 65px);
padding: 0 12px;
margin: 0px 12px;
background: white;
box-shadow: 0 2px 4px 0 rgba(0,0,0,.12), 0 0 6px 0 rgba(0,0,0,.04);
// flex-direction: column;
......@@ -74,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;
}
}
}
......@@ -237,12 +261,6 @@
}
}
// 清除看板里视图的阴影
.dashboard .portlet .view-container{
-webkit-box-shadow: none ;
box-shadow: none;
}
/*** END:多数据视图属性布局 ***/
// 看板视图,卡片模式
......
......@@ -4,29 +4,6 @@
.app-theme-icon {
color: #6ba1d1;
}
/* .el-menu.el-menu--horizontal {
> .el-menu-item, > .el-submenu > .el-submenu__title {
background: #2d5f8b;
color: #6ba1d1;
i {
color: #6ba1d1;
}
}
> .el-menu-item.is-active, > .el-submenu.is-active > .el-submenu__title {
background-color: #4276a4;
color: #f1f1f1;
i {
color: #f1f1f1;
}
}
> .el-menu-item:hover, > .el-submenu:hover > .el-submenu__title {
background-color: #3c6c95;
color: #f1f1f1 !important;
i {
color: #f1f1f1;
}
}
} */
}
> .ivu-layout {
......@@ -34,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;
}
}
}
}
}
......
......@@ -3,30 +3,7 @@
> .ivu-layout-has-sider > .ivu-layout > header{
.app-theme-icon {
color: #606d80;
}/*
.el-menu.el-menu--horizontal {
> .el-menu-item, > .el-submenu > .el-submenu__title {
background: #20222A;
color: #606d80;
i {
color: #606d80;
}
}
> .el-menu-item.is-active, > .el-submenu.is-active > .el-submenu__title {
background-color: #20222A;
color: #f1f1f1;
i {
color: #f1f1f1;
}
}
> .el-menu-item:hover, > .el-submenu:hover > .el-submenu__title {
background-color: #3e4b5c;
color: #f1f1f1 !important;
i {
color: #f1f1f1;
}
}
} */
}
}
> .ivu-layout {
> .ivu-layout-sider {
......@@ -34,6 +11,11 @@
.sider-top {
color: hsla(0,0%,100%,.8);
background-color: #20222A;
>.page-logo{
>.menuicon:hover{
background-color:#060708;
}
}
}
}
}
......
......@@ -4,38 +4,18 @@
.app-theme-icon {
color: #aaaaaa;
}
/* .el-menu.el-menu--horizontal {
> .el-menu-item, > .el-submenu > .el-submenu__title {
background: #e1e1e1;
color: #aaaaaa;
i {
color: #aaaaaa;
}
}
> .el-menu-item.is-active, > .el-submenu.is-active > .el-submenu__title {
background-color: #f6f6f6;
color: #666666;
i {
color: #666666;
}
}
> .el-menu-item:hover, > .el-submenu:hover > .el-submenu__title {
background-color: #e9e9e9;
color: #666666 !important;
i {
color: #666666;
}
}
} */
}
> .ivu-layout {
> .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,9 +575,11 @@ export default class WFIndexViewBase extends Vue implements ControlInterface {
*/
public click(item: any) {
if (item) {
let navDataService = NavDataService.getInstance(this.$store);
if(Object.is(this.navModel,"route")){
let navDataService = NavDataService.getInstance();
navDataService.removeNavData(this.viewtag);
}else{
navDataService.removeNavDataWithoutCache(this.viewtag);
}
switch (item.appfunctag) {
case 'Auto3':
......@@ -611,7 +613,12 @@ export default class WFIndexViewBase extends Vue implements ControlInterface {
{ pathName: 'editview', parameterName: 'editview' },
];
const path: string = this.$viewTool.buildUpRoutePath(this.$route, {}, deResParameters, parameters, [], viewparam);
this.$router.push(path);
if(Object.is(this.$route.fullPath,path)){
return;
}
this.$nextTick(function(){
this.$router.push(path);
})
}
/**
......@@ -629,7 +636,12 @@ export default class WFIndexViewBase 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.fullPath,path)){
return;
}
this.$nextTick(function(){
this.$router.push(path);
})
}
/**
......@@ -647,7 +659,12 @@ export default class WFIndexViewBase 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.fullPath,path)){
return;
}
this.$nextTick(function(){
this.$router.push(path);
})
}
/**
......
......@@ -281,10 +281,6 @@ export default class DefaultService extends ControlService {
@Errorlog
public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data);
//仿真主键数据
const PrimaryKey = Util.createUUID();
Data.id = PrimaryKey;
Data.wfgroup = PrimaryKey;
return new Promise((resolve: any, reject: any) => {
let result: Promise<any>;
const _appEntityService: any = this.appEntityService;
......@@ -294,7 +290,6 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
response.data.id = PrimaryKey;
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
......
......@@ -1541,21 +1541,20 @@ export default class MainBase extends Vue implements ControlInterface {
public drdatasaved($event:any){
let _this = this;
this.drcounter--;
if(this.drcounter > 0){
return;
}
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
if(this.drcounter === 0){
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
}
}
}
});
});
}
}
/**
......
......@@ -6,17 +6,33 @@
}
.app-form {
overflow: auto;
.app-form-group:nth-child(1){
margin-top: 16px;
.app-form-item:nth-child(1){
margin-top: 0;
}
}
.app-form-item:nth-child(1){
margin-top: 16px;
}
> .ivu-row {
> .ivu-tabs {
height: 100%;
display: flex;
flex-direction: column;
> .ivu-tabs-bar {
margin-bottom: 0px;
}
> .ivu-tabs-content {
margin-top: 16px;
flex-grow: 1;
overflow: auto;
> .ivu-tabs-tabpane {
height: 100%;
}
.app-form-group{
margin-top: 0px;
}
}
}
}
......
......@@ -46,6 +46,12 @@
margin-bottom: unset !important;
}
}
.el-table__body td{
padding:0;
}
.app-form-item{
margin-top: 20px;
}
}
.grid-pagination {
height: 50px;
......
......@@ -281,10 +281,6 @@ export default class DefaultService extends ControlService {
@Errorlog
public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data);
//仿真主键数据
const PrimaryKey = Util.createUUID();
Data.memberid = PrimaryKey;
Data.wfmember = PrimaryKey;
return new Promise((resolve: any, reject: any) => {
let result: Promise<any>;
const _appEntityService: any = this.appEntityService;
......@@ -294,7 +290,6 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
response.data.memberid = PrimaryKey;
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
......
......@@ -1549,21 +1549,20 @@ export default class MainBase extends Vue implements ControlInterface {
public drdatasaved($event:any){
let _this = this;
this.drcounter--;
if(this.drcounter > 0){
return;
}
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
if(this.drcounter === 0){
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
}
}
}
});
});
}
}
/**
......
......@@ -6,17 +6,33 @@
}
.app-form {
overflow: auto;
.app-form-group:nth-child(1){
margin-top: 16px;
.app-form-item:nth-child(1){
margin-top: 0;
}
}
.app-form-item:nth-child(1){
margin-top: 16px;
}
> .ivu-row {
> .ivu-tabs {
height: 100%;
display: flex;
flex-direction: column;
> .ivu-tabs-bar {
margin-bottom: 0px;
}
> .ivu-tabs-content {
margin-top: 16px;
flex-grow: 1;
overflow: auto;
> .ivu-tabs-tabpane {
height: 100%;
}
.app-form-group{
margin-top: 0px;
}
}
}
}
......
......@@ -46,6 +46,12 @@
margin-bottom: unset !important;
}
}
.el-table__body td{
padding:0;
}
.app-form-item{
margin-top: 20px;
}
}
.grid-pagination {
height: 50px;
......
......@@ -281,10 +281,6 @@ export default class DefaultService extends ControlService {
@Errorlog
public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data);
//仿真主键数据
const PrimaryKey = Util.createUUID();
Data.definitionkey = PrimaryKey;
Data.wfprocessdefinition = PrimaryKey;
return new Promise((resolve: any, reject: any) => {
let result: Promise<any>;
const _appEntityService: any = this.appEntityService;
......@@ -294,7 +290,6 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
response.data.definitionkey = PrimaryKey;
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
......
......@@ -1665,21 +1665,20 @@ export default class MainBase extends Vue implements ControlInterface {
public drdatasaved($event:any){
let _this = this;
this.drcounter--;
if(this.drcounter > 0){
return;
}
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
if(this.drcounter === 0){
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
}
}
}
});
});
}
}
/**
......
......@@ -6,17 +6,33 @@
}
.app-form {
overflow: auto;
.app-form-group:nth-child(1){
margin-top: 16px;
.app-form-item:nth-child(1){
margin-top: 0;
}
}
.app-form-item:nth-child(1){
margin-top: 16px;
}
> .ivu-row {
> .ivu-tabs {
height: 100%;
display: flex;
flex-direction: column;
> .ivu-tabs-bar {
margin-bottom: 0px;
}
> .ivu-tabs-content {
margin-top: 16px;
flex-grow: 1;
overflow: auto;
> .ivu-tabs-tabpane {
height: 100%;
}
.app-form-group{
margin-top: 0px;
}
}
}
}
......
......@@ -46,6 +46,12 @@
margin-bottom: unset !important;
}
}
.el-table__body td{
padding:0;
}
.app-form-item{
margin-top: 20px;
}
}
.grid-pagination {
height: 50px;
......
......@@ -1484,21 +1484,20 @@ export default class MainBase extends Vue implements ControlInterface {
public drdatasaved($event:any){
let _this = this;
this.drcounter--;
if(this.drcounter > 0){
return;
}
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
if(this.drcounter === 0){
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
}
}
}
});
});
}
}
/**
......
......@@ -6,17 +6,33 @@
}
.app-form {
overflow: auto;
.app-form-group:nth-child(1){
margin-top: 16px;
.app-form-item:nth-child(1){
margin-top: 0;
}
}
.app-form-item:nth-child(1){
margin-top: 16px;
}
> .ivu-row {
> .ivu-tabs {
height: 100%;
display: flex;
flex-direction: column;
> .ivu-tabs-bar {
margin-bottom: 0px;
}
> .ivu-tabs-content {
margin-top: 16px;
flex-grow: 1;
overflow: auto;
> .ivu-tabs-tabpane {
height: 100%;
}
.app-form-group{
margin-top: 0px;
}
}
}
}
......
......@@ -281,10 +281,6 @@ export default class DefaultService extends ControlService {
@Errorlog
public loadDraft(action: string,context: any = {}, data: any = {}, isloading?: boolean): Promise<any> {
const {data:Data,context:Context} = this.handleRequestData(action,context,data);
//仿真主键数据
const PrimaryKey = Util.createUUID();
Data.id = PrimaryKey;
Data.wfuser = PrimaryKey;
return new Promise((resolve: any, reject: any) => {
let result: Promise<any>;
const _appEntityService: any = this.appEntityService;
......@@ -294,7 +290,6 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
response.data.id = PrimaryKey;
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
......
......@@ -1512,21 +1512,20 @@ export default class MainBase extends Vue implements ControlInterface {
public drdatasaved($event:any){
let _this = this;
this.drcounter--;
if(this.drcounter > 0){
return;
}
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
if(this.drcounter === 0){
this.save(this.drsaveopt, undefined, false).then((res) =>{
this.saveState(res);
this.drsaveopt = {};
if(Object.is(_this.currentAction, "saveAndNew")){
_this.ResetData(res);
_this.loadDraft({});
}else if(Object.is(_this.currentAction, "saveAndExit")){
if(res){
_this.closeView(res.data);
}
}
}
});
});
}
}
/**
......
......@@ -6,17 +6,33 @@
}
.app-form {
overflow: auto;
.app-form-group:nth-child(1){
margin-top: 16px;
.app-form-item:nth-child(1){
margin-top: 0;
}
}
.app-form-item:nth-child(1){
margin-top: 16px;
}
> .ivu-row {
> .ivu-tabs {
height: 100%;
display: flex;
flex-direction: column;
> .ivu-tabs-bar {
margin-bottom: 0px;
}
> .ivu-tabs-content {
margin-top: 16px;
flex-grow: 1;
overflow: auto;
> .ivu-tabs-tabpane {
height: 100%;
}
.app-form-group{
margin-top: 0px;
}
}
}
}
......
......@@ -46,6 +46,12 @@
margin-bottom: unset !important;
}
}
.el-table__body td{
padding:0;
}
.app-form-item{
margin-top: 20px;
}
}
.grid-pagination {
height: 50px;
......
server:
port: 30003
#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}/ibzwf-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>
!!!!模版产生代码错误:----
FTL stack trace ("~" means nesting-related):
- Failed at: #{sys.name} [in template "CODETEMPL_zh_CN" at line 18, column 3]
----
\ No newline at end of file
version: "3.2"
services:
ibzwf-mysql:
image: mysql:5.7.20
volumes:
- $PWD/../../../../volumes/mysql/:/var/lib/mysql/
networks:
- agent_network
environment:
- TZ=Asia/Shanghai
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=a_A_5d9d78509
ports:
- 3306:3306
command: mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8 --explicit_defaults_for_timestamp
networks:
agent_network:
attachable: true
!!!!模版产生代码错误:----
FTL stack trace ("~" means nesting-related):
- Failed at: #{sys.name} [in template "CODETEMPL_zh_CN" at line 3, column 3]
----
\ No newline at end of file
version: "3.2"
services:
ibzwf-nacos:
image: nacos/nacos-server:latest
container_name: nacos-standalone
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
ports:
- "8848:8848"
networks:
- agent_network
networks:
agent_network:
attachable: true
!!!!模版产生代码错误:----
FTL stack trace ("~" means nesting-related):
- Failed at: #{sys.name} [in template "CODETEMPL_zh_CN" at line 3, column 3]
----
\ No newline at end of file
version: "3.2"
services:
ibzwf-redis:
image: redis
ports:
- 6379:6379
environment:
- TZ=Asia/Shanghai
logging:
driver: "json-file"
command: redis-server
networks:
- agent_network
networks:
agent_network:
attachable: true
<?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}/ibzwf.%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>
......@@ -163,6 +163,7 @@ public class WFGroupServiceImpl extends ServiceImpl<WFGroupMapper, WFGroup> impl
@Override
public List<JSONObject> select(String sql, Map param){
return this.baseMapper.selectBySQL(sql,param);
......
......@@ -244,6 +244,7 @@ public class WFMemberServiceImpl extends ServiceImpl<WFMemberMapper, WFMember> i
@Override
public List<JSONObject> select(String sql, Map param){
return this.baseMapper.selectBySQL(sql,param);
......
......@@ -156,6 +156,7 @@ public class WFProcessDefinitionServiceImpl extends ServiceImpl<WFProcessDefinit
@Override
public List<JSONObject> select(String sql, Map param){
return this.baseMapper.selectBySQL(sql,param);
......
......@@ -156,6 +156,7 @@ public class WFSystemServiceImpl extends ServiceImpl<WFSystemMapper, WFSystem> i
@Override
public List<JSONObject> select(String sql, Map param){
return this.baseMapper.selectBySQL(sql,param);
......
......@@ -159,6 +159,7 @@ public class WFUserServiceImpl extends ServiceImpl<WFUserMapper, WFUser> impleme
@Override
public List<JSONObject> select(String sql, Map param){
return this.baseMapper.selectBySQL(sql,param);
......
server:
port: 40003
#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}/ibzwf-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>
......@@ -3,14 +3,14 @@ spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server-addr: 172.16.102.211:8848
cache:
redis:
time-to-live: 3600
caffeine:
spec: initialCapacity=5,maximumSize=500,expireAfterWrite=3600s
redis:
host: 127.0.0.1
host: 172.16.100.243
port: 6379
password:
database: 0
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册