提交 837e413c 编写于 作者: ibizdev's avatar ibizdev

zhouweidong@lab.ibiz5.com 发布系统代码

上级 60b32a89
...@@ -83,6 +83,7 @@ import UpdatePwd from './components/app-update-password/app-update-password.vue' ...@@ -83,6 +83,7 @@ import UpdatePwd from './components/app-update-password/app-update-password.vue'
import AppMenuItem from './components/app-menu-item/app-menu-item.vue' import AppMenuItem from './components/app-menu-item/app-menu-item.vue'
import AppFullScren from './components/app-full-scren/app-full-scren.vue' import AppFullScren from './components/app-full-scren/app-full-scren.vue'
import AppLockScren from './components/app-lock-scren/app-lock-scren.vue' import AppLockScren from './components/app-lock-scren/app-lock-scren.vue'
import ActionTimeline from './components/action-timeline/action-timeline.vue'
// 全局挂载UI实体服务注册中心 // 全局挂载UI实体服务注册中心
window['uiServiceRegister'] = uiServiceRegister; window['uiServiceRegister'] = uiServiceRegister;
// 全局挂载实体权限服务注册中心 // 全局挂载实体权限服务注册中心
...@@ -179,5 +180,6 @@ export const AppComponents = { ...@@ -179,5 +180,6 @@ export const AppComponents = {
v.component('context-menu-drag',ContextMenuDrag); v.component('context-menu-drag',ContextMenuDrag);
v.component('app-update-password',UpdatePwd); v.component('app-update-password',UpdatePwd);
v.component('app-menu-item', AppMenuItem); v.component('app-menu-item', AppMenuItem);
v.component('action-timeline', ActionTimeline);
}, },
}; };
\ No newline at end of file
...@@ -28,9 +28,16 @@ export default class WFGroupAuthServiceBase extends AuthService { ...@@ -28,9 +28,16 @@ export default class WFGroupAuthServiceBase extends AuthService {
*/ */
public getOPPrivs(mainSateOPPrivs:any):any{ public getOPPrivs(mainSateOPPrivs:any):any{
let curDefaultOPPrivs:any = this.getSysOPPrivs(); let curDefaultOPPrivs:any = this.getSysOPPrivs();
let copyDefaultOPPrivs:any = JSON.parse(JSON.stringify(curDefaultOPPrivs));
if(mainSateOPPrivs){ if(mainSateOPPrivs){
Object.assign(curDefaultOPPrivs,mainSateOPPrivs); Object.assign(curDefaultOPPrivs,mainSateOPPrivs);
} }
// 统一资源优先
Object.keys(curDefaultOPPrivs).forEach((name:string) => {
if(this.sysOPPrivsMap.get(name) && copyDefaultOPPrivs[name] === 0){
curDefaultOPPrivs[name] = copyDefaultOPPrivs[name];
}
});
return curDefaultOPPrivs; return curDefaultOPPrivs;
} }
......
...@@ -28,9 +28,16 @@ export default class WFMemberAuthServiceBase extends AuthService { ...@@ -28,9 +28,16 @@ export default class WFMemberAuthServiceBase extends AuthService {
*/ */
public getOPPrivs(mainSateOPPrivs:any):any{ public getOPPrivs(mainSateOPPrivs:any):any{
let curDefaultOPPrivs:any = this.getSysOPPrivs(); let curDefaultOPPrivs:any = this.getSysOPPrivs();
let copyDefaultOPPrivs:any = JSON.parse(JSON.stringify(curDefaultOPPrivs));
if(mainSateOPPrivs){ if(mainSateOPPrivs){
Object.assign(curDefaultOPPrivs,mainSateOPPrivs); Object.assign(curDefaultOPPrivs,mainSateOPPrivs);
} }
// 统一资源优先
Object.keys(curDefaultOPPrivs).forEach((name:string) => {
if(this.sysOPPrivsMap.get(name) && copyDefaultOPPrivs[name] === 0){
curDefaultOPPrivs[name] = copyDefaultOPPrivs[name];
}
});
return curDefaultOPPrivs; return curDefaultOPPrivs;
} }
......
...@@ -28,9 +28,16 @@ export default class WFProcessDefinitionAuthServiceBase extends AuthService { ...@@ -28,9 +28,16 @@ export default class WFProcessDefinitionAuthServiceBase extends AuthService {
*/ */
public getOPPrivs(mainSateOPPrivs:any):any{ public getOPPrivs(mainSateOPPrivs:any):any{
let curDefaultOPPrivs:any = this.getSysOPPrivs(); let curDefaultOPPrivs:any = this.getSysOPPrivs();
let copyDefaultOPPrivs:any = JSON.parse(JSON.stringify(curDefaultOPPrivs));
if(mainSateOPPrivs){ if(mainSateOPPrivs){
Object.assign(curDefaultOPPrivs,mainSateOPPrivs); Object.assign(curDefaultOPPrivs,mainSateOPPrivs);
} }
// 统一资源优先
Object.keys(curDefaultOPPrivs).forEach((name:string) => {
if(this.sysOPPrivsMap.get(name) && copyDefaultOPPrivs[name] === 0){
curDefaultOPPrivs[name] = copyDefaultOPPrivs[name];
}
});
return curDefaultOPPrivs; return curDefaultOPPrivs;
} }
......
...@@ -28,9 +28,16 @@ export default class WFREModelAuthServiceBase extends AuthService { ...@@ -28,9 +28,16 @@ export default class WFREModelAuthServiceBase extends AuthService {
*/ */
public getOPPrivs(mainSateOPPrivs:any):any{ public getOPPrivs(mainSateOPPrivs:any):any{
let curDefaultOPPrivs:any = this.getSysOPPrivs(); let curDefaultOPPrivs:any = this.getSysOPPrivs();
let copyDefaultOPPrivs:any = JSON.parse(JSON.stringify(curDefaultOPPrivs));
if(mainSateOPPrivs){ if(mainSateOPPrivs){
Object.assign(curDefaultOPPrivs,mainSateOPPrivs); Object.assign(curDefaultOPPrivs,mainSateOPPrivs);
} }
// 统一资源优先
Object.keys(curDefaultOPPrivs).forEach((name:string) => {
if(this.sysOPPrivsMap.get(name) && copyDefaultOPPrivs[name] === 0){
curDefaultOPPrivs[name] = copyDefaultOPPrivs[name];
}
});
return curDefaultOPPrivs; return curDefaultOPPrivs;
} }
......
...@@ -28,9 +28,16 @@ export default class WFSystemAuthServiceBase extends AuthService { ...@@ -28,9 +28,16 @@ export default class WFSystemAuthServiceBase extends AuthService {
*/ */
public getOPPrivs(mainSateOPPrivs:any):any{ public getOPPrivs(mainSateOPPrivs:any):any{
let curDefaultOPPrivs:any = this.getSysOPPrivs(); let curDefaultOPPrivs:any = this.getSysOPPrivs();
let copyDefaultOPPrivs:any = JSON.parse(JSON.stringify(curDefaultOPPrivs));
if(mainSateOPPrivs){ if(mainSateOPPrivs){
Object.assign(curDefaultOPPrivs,mainSateOPPrivs); Object.assign(curDefaultOPPrivs,mainSateOPPrivs);
} }
// 统一资源优先
Object.keys(curDefaultOPPrivs).forEach((name:string) => {
if(this.sysOPPrivsMap.get(name) && copyDefaultOPPrivs[name] === 0){
curDefaultOPPrivs[name] = copyDefaultOPPrivs[name];
}
});
return curDefaultOPPrivs; return curDefaultOPPrivs;
} }
......
...@@ -28,9 +28,16 @@ export default class WFTaskAuthServiceBase extends AuthService { ...@@ -28,9 +28,16 @@ export default class WFTaskAuthServiceBase extends AuthService {
*/ */
public getOPPrivs(mainSateOPPrivs:any):any{ public getOPPrivs(mainSateOPPrivs:any):any{
let curDefaultOPPrivs:any = this.getSysOPPrivs(); let curDefaultOPPrivs:any = this.getSysOPPrivs();
let copyDefaultOPPrivs:any = JSON.parse(JSON.stringify(curDefaultOPPrivs));
if(mainSateOPPrivs){ if(mainSateOPPrivs){
Object.assign(curDefaultOPPrivs,mainSateOPPrivs); Object.assign(curDefaultOPPrivs,mainSateOPPrivs);
} }
// 统一资源优先
Object.keys(curDefaultOPPrivs).forEach((name:string) => {
if(this.sysOPPrivsMap.get(name) && copyDefaultOPPrivs[name] === 0){
curDefaultOPPrivs[name] = copyDefaultOPPrivs[name];
}
});
return curDefaultOPPrivs; return curDefaultOPPrivs;
} }
......
...@@ -28,9 +28,16 @@ export default class WFUserAuthServiceBase extends AuthService { ...@@ -28,9 +28,16 @@ export default class WFUserAuthServiceBase extends AuthService {
*/ */
public getOPPrivs(mainSateOPPrivs:any):any{ public getOPPrivs(mainSateOPPrivs:any):any{
let curDefaultOPPrivs:any = this.getSysOPPrivs(); let curDefaultOPPrivs:any = this.getSysOPPrivs();
let copyDefaultOPPrivs:any = JSON.parse(JSON.stringify(curDefaultOPPrivs));
if(mainSateOPPrivs){ if(mainSateOPPrivs){
Object.assign(curDefaultOPPrivs,mainSateOPPrivs); Object.assign(curDefaultOPPrivs,mainSateOPPrivs);
} }
// 统一资源优先
Object.keys(curDefaultOPPrivs).forEach((name:string) => {
if(this.sysOPPrivsMap.get(name) && copyDefaultOPPrivs[name] === 0){
curDefaultOPPrivs[name] = copyDefaultOPPrivs[name];
}
});
return curDefaultOPPrivs; return curDefaultOPPrivs;
} }
......
...@@ -21,7 +21,7 @@ export default class WFSystemList { ...@@ -21,7 +21,7 @@ export default class WFSystemList {
* @type any * @type any
* @memberof WFSystemList * @memberof WFSystemList
*/ */
public expirationTime:any; public static expirationTime:any;
/** /**
* 预定义类型 * 预定义类型
...@@ -49,6 +49,26 @@ export default class WFSystemList { ...@@ -49,6 +49,26 @@ export default class WFSystemList {
codelistid:"WFSystemList" codelistid:"WFSystemList"
}; };
/**
* 获取过期时间
*
* @type any
* @memberof WFSystemList
*/
public getExpirationTime(){
return WFSystemList.expirationTime;
}
/**
* 设置过期时间
*
* @type any
* @memberof WFSystemList
*/
public setExpirationTime(value:any){
WFSystemList.expirationTime = value;
}
/** /**
* 自定义参数集合 * 自定义参数集合
* *
......
.action-timeline {
position: relative;
height: 100%;
.action-timeline-wrapper {
padding-left: 115px;
color: var(--view-font-color-bright);
>.action-timeline-item {
position: relative;
height: 30px;
display: list-item;
list-style: none;
top: -6px;
>.timeline-time {
position: absolute;
left: -115px;
top: 5px;
font-size: 12px;
}
>.timeline-content {
padding: 5px;
padding-left: 65px;
}
}
>.action-timeline-item::before {
position: absolute;
top: 17px;
left: 45px;
z-index: 3;
width: 7px;
height: 7px;
background-color: var(--view-button-background-color);
border: 1px solid #515a6e;
content: ' ';
border-radius: 50%;
}
>.action-timeline-item:nth-child(n+2)::after {
position: absolute;
top: -7px;
bottom: 12px;
left: 48px;
z-index: 1;
display: block;
content: ' ';
border-left: 1px solid #515a6e;
}
}
.action-timeline-group-wrapper {
padding-left: 200px;
padding-right: 30px;
color: var(--view-font-color-bright);
.action-timeline-group {
position: relative;
padding-top: 30px;
>.date {
position: absolute;
width: 150px;
left: -170px;
border: 2px solid #515a6e;
font-size: 18px;
padding: 16px;
>.arrow {
position: absolute;
top: 16px;
right: 16px;
cursor: pointer;
}
}
>.date::before {
content: ' ';
display: block;
position: absolute;
right: -22px;
top: 30px;
height: 2px;
width: 20px;
background-color: #515a6e;
}
>.timeline {
padding: 16px;
border: 2px solid #515a6e;
}
}
}
}
\ No newline at end of file
<template>
<div class="action-timeline">
<div class='action-timeline-group-wrapper'>
<template v-for="(usertask, usertaskIndex) in data.usertasks">
<div :key='usertaskIndex' class='action-timeline-group expand'>
<div class='date'>
{{ usertask.userTaskName }}
<div class='arrow' @click="changeExpand(usertask)">
<i :class="usertask.isShow ? 'el-icon-arrow-down' : 'el-icon-arrow-up' " />
</div>
</div>
<div class='timeline'>
<template v-if="usertask.identitylinks && usertask.identitylinks.length > 0">
{{$t('components.appWFApproval.wait')}}
<strong>
<template v-for="(identitylink, len) in usertask.identitylinks">
<template v-if="identitylink.displayname">
{{ identitylink.displayname }}
<template v-if="len != usertask.identitylinks.length - 1">
</template>
</template>
</template>
</strong>
{{$t('components.appWFApproval.handle')}}
</template>
<template v-else>
<ul class="action-timeline-wrapper">
<template v-if="!usertask.isShow">
<li v-if="usertask.comments && usertask.comments.length > 0" class="action-timeline-item">
<div class='timeline-time'>
{{ formatDate(usertask.comments[0].time, 'MM月DD日 HH:mm') }}&nbsp;{{ usertask.comments[0].authorName }}
</div>
<div class='timeline-content'>
{{ usertask.comments[0].type }}&nbsp;{{ usertask.comments[0].fullMessage }}
</div>
</li>
</template>
<template v-else>
<template v-for="(comment, commentIndex) in usertask.comments">
<li :key="commentIndex" class="action-timeline-item">
<div class='timeline-time'>
{{ formatDate(comment.time, 'MM月DD日 HH:mm')}} &nbsp;{{ comment.authorName }}
</div>
<div class='timeline-content'>
{{ comment.type }}&nbsp;{{ comment.fullMessage }}
</div>
</li>
</template>
</template>
</ul>
</template>
</div>
</div>
</template>
</div>
</div>
</template>
<script lang="ts">
import { Vue, Component, Prop, Watch } from 'vue-property-decorator';
import moment from 'moment';
@Component({
})
export default class ActionTimeline extends Vue {
/**
* 数据
*
* @memberof ActionTimeline
*/
public data:any = {};
/**
* 初始化memo
*
* @memberof ActionTimeline
*/
public initmemo:string = "";
/**
* 传入数据服务
*
* @memberof ActionTimeline
*/
@Prop() public service:any;
/**
* 上下文
*
* @memberof ActionTimeline
*/
@Prop() public context:any;
/**
* 视图参数
*
* @memberof ActionTimeline
*/
@Prop() public viewparams:any;
/**
* 初始化数据
*
* @memberof ActionTimeline
*/
public created(){
if(this.service){
this.service.GetWFHistory(this.context).then((res:any) =>{
if(res && (res.status === 200)){
this.data = res.data;
this.initUIStateData();
}
})
}
}
/**
* 初始化数据添加标记
*
* @memberof ActionTimeline
*/
public initUIStateData() {
if(this.data && this.data.usertasks) {
this.data.usertasks.forEach((item: any) => {
item.isShow = true;
})
}
}
/**
* 时间转换
*
* @memberof ActionTimeline
*/
public formatDate(date: string, format: string) {
return moment(date).format(format);
}
/**
* 点击事件
*
* @memberof ActionTimeline
*/
public changeExpand(usertask:any) {
usertask.isShow = !usertask.isShow;
this.$forceUpdate();
}
}
</script>
<style lang='less'>
@import './action-timeline.less';
</style>
\ No newline at end of file
...@@ -101,7 +101,7 @@ export default class AppEmbedPicker extends Vue { ...@@ -101,7 +101,7 @@ export default class AppEmbedPicker extends Vue {
* @type {string} * @type {string}
* @memberof AppEmbedPicker * @memberof AppEmbedPicker
*/ */
@Prop() public valueItem?: string; @Prop() public valueItem!: string;
/** /**
* 关联视图名称 * 关联视图名称
...@@ -176,17 +176,28 @@ export default class AppEmbedPicker extends Vue { ...@@ -176,17 +176,28 @@ export default class AppEmbedPicker extends Vue {
if (!this.data) { if (!this.data) {
return; return;
} }
let formData:any = JSON.parse(this.data);
let arg: any = {}; let arg: any = {};
// 合并视图上下文参数和视图参数 // 合并视图上下文参数和视图参数
arg.param = JSON.parse(JSON.stringify(this.viewparams)); arg.param = JSON.parse(JSON.stringify(this.viewparams));
arg.context = JSON.parse(JSON.stringify(this.context)); arg.context = JSON.parse(JSON.stringify(this.context));
if(formData[this.name] && formData[this.valueItem]){
let selectItems:Array<any> = [];
let tempvalue: Array<any> = formData[this.valueItem].split(',');
let temptext: Array<any> = formData[this.name].split(',');
tempvalue.forEach((srfkey: any, index: number)=>{
selectItems.push({ srfmajortext : temptext[index], srfkey: srfkey });
});
arg.param.selectedData = selectItems;
this.$forceUpdate();
}
// 附加参数处理 // 附加参数处理
if (this.localContext && Object.keys(this.localContext).length >0) { if (this.localContext && Object.keys(this.localContext).length >0) {
let _context = this.$util.computedNavData(this.data,arg.context,arg.param,this.localContext); let _context = this.$util.computedNavData(formData,arg.context,arg.param,this.localContext);
Object.assign(arg.context,_context); Object.assign(arg.context,_context);
} }
if (this.localParam && Object.keys(this.localParam).length >0) { if (this.localParam && Object.keys(this.localParam).length >0) {
let _param = this.$util.computedNavData(this.data,arg.param,arg.param,this.localParam); let _param = this.$util.computedNavData(formData,arg.context,arg.param,this.localParam);
Object.assign(arg.param,_param); Object.assign(arg.param,_param);
} }
this.viewdata = JSON.stringify(arg.context); this.viewdata = JSON.stringify(arg.context);
...@@ -257,12 +268,10 @@ export default class AppEmbedPicker extends Vue { ...@@ -257,12 +268,10 @@ export default class AppEmbedPicker extends Vue {
srfkey = srfkey.substring(0,srfkey.length-1); srfkey = srfkey.substring(0,srfkey.length-1);
srfmajortext = srfmajortext.substring(0,srfmajortext.length-1); srfmajortext = srfmajortext.substring(0,srfmajortext.length-1);
if (this.valueItem) { if (this.valueItem) {
let value = srfkey; this.$emit('formitemvaluechange', { name: this.valueItem, value: srfkey });
this.$emit('formitemvaluechange', { name: this.valueItem, value: value });
} }
if (this.name) { if (this.name) {
let value = srfmajortext; this.$emit('formitemvaluechange', { name: this.name, value: srfmajortext });
this.$emit('formitemvaluechange', { name: this.name, value: value });
} }
} }
} }
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
class='dropdown-list-dynamic' class='dropdown-list-dynamic'
:transfer="true" :transfer="true"
v-model="currentVal" v-model="currentVal"
:disabled="disabled === true ? true : false" :disabled="disabled"
:clearable="true" :clearable="true"
:filterable="filterable === true ? true : false" :filterable="filterable"
@on-open-change="onClick" @on-open-change="onClick"
:placeholder="$t('components.dropDownListDynamic.placeholder')"> :placeholder="$t('components.dropDownListDynamic.placeholder')">
<i-option v-for="(item, index) in items" :key="index" :value="item.value">{{($t('userCustom.'+tag+'.'+item.value)!== ('userCustom.'+tag+'.'+item.value))?$t('userCustom.'+tag+'.'+item.value) : item.text}}</i-option> <i-option v-for="(item, index) in items" :key="index" :value="item.value">{{($t('userCustom.'+tag+'.'+item.value)!== ('userCustom.'+tag+'.'+item.value))?$t('userCustom.'+tag+'.'+item.value) : item.text}}</i-option>
...@@ -114,7 +114,7 @@ export default class DropDownListDynamic extends Vue { ...@@ -114,7 +114,7 @@ export default class DropDownListDynamic extends Vue {
* @type {boolean} * @type {boolean}
* @memberof DropDownListDynamic * @memberof DropDownListDynamic
*/ */
@Prop() public filterable?: boolean; public filterable: boolean = true;
/** /**
* 下拉选提示内容 * 下拉选提示内容
......
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
:transfer="true" :transfer="true"
transfer-class-name="dropdown-list-mpicker-transfer" transfer-class-name="dropdown-list-mpicker-transfer"
v-model="currentVal" v-model="currentVal"
:disabled="disabled === true ? true : false" :disabled="disabled"
:clearable="true" :clearable="true"
:filterable="filterable === true ? true : false" :filterable="filterable"
@on-open-change="onClick" @on-open-change="onClick"
:placeholder="$t('components.dropDownListMpicker.placeholder')"> :placeholder="$t('components.dropDownListMpicker.placeholder')">
<i-option v-for="(item, index) in items" :key="index" :value="item.value.toString()" :label="item.text"> <i-option v-for="(item, index) in items" :key="index" :value="item.value.toString()" :label="item.text">
...@@ -88,7 +88,7 @@ export default class DropDownListMpicker extends Vue { ...@@ -88,7 +88,7 @@ export default class DropDownListMpicker extends Vue {
* @type {boolean} * @type {boolean}
* @memberof DropDownListMpicker * @memberof DropDownListMpicker
*/ */
@Prop() public filterable?: boolean; public filterable: boolean = true;
/** /**
* 下拉选提示内容 * 下拉选提示内容
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
class='dropdown-list' class='dropdown-list'
:transfer="true" :transfer="true"
v-model="currentVal" v-model="currentVal"
:disabled="disabled === true ? true : false" :disabled="disabled"
:clearable="true" :clearable="true"
:filterable="filterable === true ? true : false" :filterable="filterable"
@on-open-change="onClick" @on-open-change="onClick"
:placeholder="$t('components.dropDownList.placeholder')"> :placeholder="$t('components.dropDownList.placeholder')">
<i-option v-for="(item, index) in items" :key="index" :value="item.value">{{($t('codelist.'+tag+'.'+item.value)!== ('codelist.'+tag+'.'+item.value))?$t('codelist.'+tag+'.'+item.value) : item.text}}</i-option> <i-option v-for="(item, index) in items" :key="index" :value="item.value">{{($t('codelist.'+tag+'.'+item.value)!== ('codelist.'+tag+'.'+item.value))?$t('codelist.'+tag+'.'+item.value) : item.text}}</i-option>
...@@ -141,7 +141,7 @@ export default class DropDownList extends Vue { ...@@ -141,7 +141,7 @@ export default class DropDownList extends Vue {
* @type {boolean} * @type {boolean}
* @memberof DropDownList * @memberof DropDownList
*/ */
@Prop() public filterable?: boolean; public filterable: boolean = true;
/** /**
* 下拉选提示内容 * 下拉选提示内容
......
...@@ -34,4 +34,43 @@ export default class WFDynaExpGridViewEngine extends GridViewEngine { ...@@ -34,4 +34,43 @@ export default class WFDynaExpGridViewEngine extends GridViewEngine {
} }
}) })
} }
/**
* 部件事件
*
* @param {string} ctrlName
* @param {string} eventName
* @param {*} args
* @memberof WFDynaExpGridViewEngine
*/
public onCtrlEvent(ctrlName: string, eventName: string, args: any): void {
if (Object.is(ctrlName, 'grid')) {
this.GridEvent(eventName, args);
}
super.onCtrlEvent(ctrlName, eventName, args);
}
/**
* 事件处理
*
* @param {string} eventName
* @param {*} args
* @memberof WFDynaExpGridViewEngine
*/
public GridEvent(eventName: string, args: any): void {
if (Object.is(eventName, 'load')) {
this.GridLoad(args);
}
super.MDCtrlEvent(eventName, args);
}
/**
* 表格加载完成
*
* @param {any[]} args
* @memberof WFDynaExpGridViewEngine
*/
public GridLoad(args: any[]) {
this.view.getWFStepModel();
}
} }
\ No newline at end of file
...@@ -207,6 +207,7 @@ export default class WFGroupMPickupViewBase extends Vue { ...@@ -207,6 +207,7 @@ export default class WFGroupMPickupViewBase extends Vue {
Object.assign(this.viewparams, JSON.parse(this.viewparam)); Object.assign(this.viewparams, JSON.parse(this.viewparam));
if(this.viewparams.selectedData){ if(this.viewparams.selectedData){
this.selectedData = JSON.stringify(this.viewparams.selectedData); this.selectedData = JSON.stringify(this.viewparams.selectedData);
this.viewSelections = this.viewparams.selectedData;
} }
} }
......
...@@ -207,6 +207,7 @@ export default class WFUserMPickupViewBase extends Vue { ...@@ -207,6 +207,7 @@ export default class WFUserMPickupViewBase extends Vue {
Object.assign(this.viewparams, JSON.parse(this.viewparam)); Object.assign(this.viewparams, JSON.parse(this.viewparam));
if(this.viewparams.selectedData){ if(this.viewparams.selectedData){
this.selectedData = JSON.stringify(this.viewparams.selectedData); this.selectedData = JSON.stringify(this.viewparams.selectedData);
this.viewSelections = this.viewparams.selectedData;
} }
} }
......
...@@ -148,49 +148,36 @@ export default class CodeListService { ...@@ -148,49 +148,36 @@ export default class CodeListService {
let cacheTimeout:any = codelist.cacheTimeout; let cacheTimeout:any = codelist.cacheTimeout;
// 启用缓存 // 启用缓存
if(isEnableCache){ if(isEnableCache){
const callback:Function = (context:any ={},data:any ={},tag:string,promise:Promise<any>) =>{
promise.then((result:any) =>{
if(result.length > 0){
CodeListService.codelistCached.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,{items:result});
CodeListService.codelistCache.delete(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`);
return resolve(result);
}else{
return resolve([]);
}
}).catch((result:any) =>{
return reject(result);
})
}
// 加载完成,从本地缓存获取 // 加载完成,从本地缓存获取
if(CodeListService.codelistCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){ if(CodeListService.codelistCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){
let items:any = CodeListService.codelistCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`).items; let items:any = CodeListService.codelistCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`).items;
if(items.length >0){ if(items.length >0){
if(cacheTimeout !== -1){ if(new Date().getTime() <= codelist.getExpirationTime()){
if(new Date().getTime() > codelist.expirationTime){ return resolve(items);
codelist.getItems(context,data,isloading).then((result:any) =>{
CodeListService.codelistCached.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,{items:result});
codelist.expirationTime = new Date().getTime() + cacheTimeout;
resolve(result);
}).catch((error:any) =>{
Promise.reject([]);
})
}else{
return resolve(items);
}
}else{
return resolve(items);
} }
} }
} }
if (codelist) { if (codelist) {
const callback:Function = (context:any ={},data:any ={},tag:string,promise:Promise<any>) =>{
promise.then((result:any) =>{
if(result.length > 0){
CodeListService.codelistCached.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,{items:result});
return resolve(result);
}else{
return resolve([]);
}
}).catch((result:any) =>{
return reject(result);
})
}
// 加载中,UI又需要数据,解决连续加载同一代码表问题 // 加载中,UI又需要数据,解决连续加载同一代码表问题
if(CodeListService.codelistCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){ if(CodeListService.codelistCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){
callback(context,data,tag,CodeListService.codelistCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)); callback(context,data,tag,CodeListService.codelistCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`));
}else{ }else{
let result:Promise<any> = codelist.getItems(context,data,isloading); let result:Promise<any> = codelist.getItems(context,data,isloading);
CodeListService.codelistCache.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,result); CodeListService.codelistCache.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,result);
if(cacheTimeout !== -1){ codelist.setExpirationTime(new Date().getTime() + cacheTimeout);
codelist.expirationTime = new Date().getTime() + cacheTimeout;
}
callback(context,data,tag,result); callback(context,data,tag,result);
} }
} }
......
...@@ -533,7 +533,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -533,7 +533,7 @@ export default class MainBase extends Vue implements ControlInterface {
* 选中行数据 * 选中行数据
* *
* @type {any[]} * @type {any[]}
* @memberof Main * @memberof MainBase
*/ */
public selections: any[] = []; public selections: any[] = [];
...@@ -541,10 +541,18 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -541,10 +541,18 @@ export default class MainBase extends Vue implements ControlInterface {
* 拦截行选中 * 拦截行选中
* *
* @type {boolean} * @type {boolean}
* @memberof Main * @memberof MainBase
*/ */
public stopRowClick: boolean = false; public stopRowClick: boolean = false;
/**
* 当前编辑行数据
*
* @type {boolean}
* @memberof MainBase
*/
public curEditRowData:any;
...@@ -653,6 +661,15 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -653,6 +661,15 @@ export default class MainBase extends Vue implements ControlInterface {
* @type {*} * @type {*}
* @memberof MainBase * @memberof MainBase
*/ */
public deRules:any = {
};
/**
* 值规则集合
*
* @type {*}
* @memberof MainBase
*/
public rules: any = { public rules: any = {
srfkey: [ srfkey: [
{ required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '组标识 值不能为空', trigger: 'change' }, { required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '组标识 值不能为空', trigger: 'change' },
...@@ -1570,6 +1587,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1570,6 +1587,7 @@ export default class MainBase extends Vue implements ControlInterface {
row.hasUpdated = true; row.hasUpdated = true;
} }
} }
this.curEditRowData = row;
this.validate(property,row,rowIndex); this.validate(property,row,rowIndex);
} }
...@@ -1666,6 +1684,70 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1666,6 +1684,70 @@ export default class MainBase extends Vue implements ControlInterface {
*/ */
public updateDefault(row: any){ public updateDefault(row: any){
} }
/**
* 校验属性值规则
*
* @public
* @param {{ name: string }} { name }
* @memberof MainBase
*/
public verifyDeRules(name:string,rule:any = this.deRules,op:string = "AND",value:any) :{isPast:boolean}{
let falg:any = {};
if(!rule || !rule[name]){
return falg;
}
let opValue = op == 'AND'? true :false;
let startOp = (val:boolean)=>{
if(falg.isPast){
if(opValue){
falg.isPast = falg && val;
}else{
falg.isPast = falg || val;
}
}else{
falg.isPast = val;
}
}
rule[name].forEach((item:any) => {
// 常规规则
if(item.type == 'SIMPLE'){
startOp(!this.$verify.checkFieldSimpleRule(value,item.condOP,item.paramValue,item.ruleInfo,item.paramType,this.curEditRowData,item.isKeyCond));
}
// 数值范围
if(item.type == 'VALUERANGE2'){
startOp( !this.$verify.checkFieldValueRangeRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 正则式
if (item.type == "REGEX") {
startOp(!this.$verify.checkFieldRegExRule(value,item.regExCode,item.ruleInfo,item.isKeyCond));
}
// 长度
if (item.type == "STRINGLENGTH") {
startOp(!this.$verify.checkFieldStringLengthRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 系统值规则
if(item.type == "SYSVALUERULE") {
startOp(!this.$verify.checkFieldSysValueRule(value,item.sysRule.regExCode,item.ruleInfo,item.isKeyCond));
}
// 分组
if(item.type == 'GROUP'){
falg = this.verifyDeRules('group',item,"AND",value)
if(item.isNotMode){
falg.isPast = !falg.isPast;
}
}
});
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!value){
falg.isPast = true;
}
return falg;
}
} }
</script> </script>
......
...@@ -329,7 +329,7 @@ export default class MainService extends ControlService { ...@@ -329,7 +329,7 @@ export default class MainService extends ControlService {
requestData[item.prop] = context[item.name]; requestData[item.prop] = context[item.name];
} }
}else{ }else{
if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0)) ){ if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0) || Object.is(data[item.name],"")) ){
requestData[item.prop] = data[item.name]; requestData[item.prop] = data[item.name];
} }
} }
......
...@@ -545,7 +545,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -545,7 +545,7 @@ export default class MainBase extends Vue implements ControlInterface {
* 选中行数据 * 选中行数据
* *
* @type {any[]} * @type {any[]}
* @memberof Main * @memberof MainBase
*/ */
public selections: any[] = []; public selections: any[] = [];
...@@ -553,10 +553,18 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -553,10 +553,18 @@ export default class MainBase extends Vue implements ControlInterface {
* 拦截行选中 * 拦截行选中
* *
* @type {boolean} * @type {boolean}
* @memberof Main * @memberof MainBase
*/ */
public stopRowClick: boolean = false; public stopRowClick: boolean = false;
/**
* 当前编辑行数据
*
* @type {boolean}
* @memberof MainBase
*/
public curEditRowData:any;
...@@ -673,6 +681,15 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -673,6 +681,15 @@ export default class MainBase extends Vue implements ControlInterface {
* @type {*} * @type {*}
* @memberof MainBase * @memberof MainBase
*/ */
public deRules:any = {
};
/**
* 值规则集合
*
* @type {*}
* @memberof MainBase
*/
public rules: any = { public rules: any = {
srfkey: [ srfkey: [
{ required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '组成员标识 值不能为空', trigger: 'change' }, { required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '组成员标识 值不能为空', trigger: 'change' },
...@@ -1590,6 +1607,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1590,6 +1607,7 @@ export default class MainBase extends Vue implements ControlInterface {
row.hasUpdated = true; row.hasUpdated = true;
} }
} }
this.curEditRowData = row;
this.validate(property,row,rowIndex); this.validate(property,row,rowIndex);
} }
...@@ -1686,6 +1704,70 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1686,6 +1704,70 @@ export default class MainBase extends Vue implements ControlInterface {
*/ */
public updateDefault(row: any){ public updateDefault(row: any){
} }
/**
* 校验属性值规则
*
* @public
* @param {{ name: string }} { name }
* @memberof MainBase
*/
public verifyDeRules(name:string,rule:any = this.deRules,op:string = "AND",value:any) :{isPast:boolean}{
let falg:any = {};
if(!rule || !rule[name]){
return falg;
}
let opValue = op == 'AND'? true :false;
let startOp = (val:boolean)=>{
if(falg.isPast){
if(opValue){
falg.isPast = falg && val;
}else{
falg.isPast = falg || val;
}
}else{
falg.isPast = val;
}
}
rule[name].forEach((item:any) => {
// 常规规则
if(item.type == 'SIMPLE'){
startOp(!this.$verify.checkFieldSimpleRule(value,item.condOP,item.paramValue,item.ruleInfo,item.paramType,this.curEditRowData,item.isKeyCond));
}
// 数值范围
if(item.type == 'VALUERANGE2'){
startOp( !this.$verify.checkFieldValueRangeRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 正则式
if (item.type == "REGEX") {
startOp(!this.$verify.checkFieldRegExRule(value,item.regExCode,item.ruleInfo,item.isKeyCond));
}
// 长度
if (item.type == "STRINGLENGTH") {
startOp(!this.$verify.checkFieldStringLengthRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 系统值规则
if(item.type == "SYSVALUERULE") {
startOp(!this.$verify.checkFieldSysValueRule(value,item.sysRule.regExCode,item.ruleInfo,item.isKeyCond));
}
// 分组
if(item.type == 'GROUP'){
falg = this.verifyDeRules('group',item,"AND",value)
if(item.isNotMode){
falg.isPast = !falg.isPast;
}
}
});
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!value){
falg.isPast = true;
}
return falg;
}
} }
</script> </script>
......
...@@ -329,7 +329,7 @@ export default class MainService extends ControlService { ...@@ -329,7 +329,7 @@ export default class MainService extends ControlService {
requestData[item.prop] = context[item.name]; requestData[item.prop] = context[item.name];
} }
}else{ }else{
if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0)) ){ if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0) || Object.is(data[item.name],"")) ){
requestData[item.prop] = data[item.name]; requestData[item.prop] = data[item.name];
} }
} }
......
...@@ -559,7 +559,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -559,7 +559,7 @@ export default class MainBase extends Vue implements ControlInterface {
* 选中行数据 * 选中行数据
* *
* @type {any[]} * @type {any[]}
* @memberof Main * @memberof MainBase
*/ */
public selections: any[] = []; public selections: any[] = [];
...@@ -567,10 +567,18 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -567,10 +567,18 @@ export default class MainBase extends Vue implements ControlInterface {
* 拦截行选中 * 拦截行选中
* *
* @type {boolean} * @type {boolean}
* @memberof Main * @memberof MainBase
*/ */
public stopRowClick: boolean = false; public stopRowClick: boolean = false;
/**
* 当前编辑行数据
*
* @type {boolean}
* @memberof MainBase
*/
public curEditRowData:any;
...@@ -695,6 +703,15 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -695,6 +703,15 @@ export default class MainBase extends Vue implements ControlInterface {
* @type {*} * @type {*}
* @memberof MainBase * @memberof MainBase
*/ */
public deRules:any = {
};
/**
* 值规则集合
*
* @type {*}
* @memberof MainBase
*/
public rules: any = { public rules: any = {
srfkey: [ srfkey: [
{ required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: 'DefinitionKey 值不能为空', trigger: 'change' }, { required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: 'DefinitionKey 值不能为空', trigger: 'change' },
...@@ -1620,6 +1637,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1620,6 +1637,7 @@ export default class MainBase extends Vue implements ControlInterface {
row.hasUpdated = true; row.hasUpdated = true;
} }
} }
this.curEditRowData = row;
this.validate(property,row,rowIndex); this.validate(property,row,rowIndex);
} }
...@@ -1716,6 +1734,70 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1716,6 +1734,70 @@ export default class MainBase extends Vue implements ControlInterface {
*/ */
public updateDefault(row: any){ public updateDefault(row: any){
} }
/**
* 校验属性值规则
*
* @public
* @param {{ name: string }} { name }
* @memberof MainBase
*/
public verifyDeRules(name:string,rule:any = this.deRules,op:string = "AND",value:any) :{isPast:boolean}{
let falg:any = {};
if(!rule || !rule[name]){
return falg;
}
let opValue = op == 'AND'? true :false;
let startOp = (val:boolean)=>{
if(falg.isPast){
if(opValue){
falg.isPast = falg && val;
}else{
falg.isPast = falg || val;
}
}else{
falg.isPast = val;
}
}
rule[name].forEach((item:any) => {
// 常规规则
if(item.type == 'SIMPLE'){
startOp(!this.$verify.checkFieldSimpleRule(value,item.condOP,item.paramValue,item.ruleInfo,item.paramType,this.curEditRowData,item.isKeyCond));
}
// 数值范围
if(item.type == 'VALUERANGE2'){
startOp( !this.$verify.checkFieldValueRangeRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 正则式
if (item.type == "REGEX") {
startOp(!this.$verify.checkFieldRegExRule(value,item.regExCode,item.ruleInfo,item.isKeyCond));
}
// 长度
if (item.type == "STRINGLENGTH") {
startOp(!this.$verify.checkFieldStringLengthRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 系统值规则
if(item.type == "SYSVALUERULE") {
startOp(!this.$verify.checkFieldSysValueRule(value,item.sysRule.regExCode,item.ruleInfo,item.isKeyCond));
}
// 分组
if(item.type == 'GROUP'){
falg = this.verifyDeRules('group',item,"AND",value)
if(item.isNotMode){
falg.isPast = !falg.isPast;
}
}
});
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!value){
falg.isPast = true;
}
return falg;
}
} }
</script> </script>
......
...@@ -329,7 +329,7 @@ export default class MainService extends ControlService { ...@@ -329,7 +329,7 @@ export default class MainService extends ControlService {
requestData[item.prop] = context[item.name]; requestData[item.prop] = context[item.name];
} }
}else{ }else{
if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0)) ){ if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0) || Object.is(data[item.name],"")) ){
requestData[item.prop] = data[item.name]; requestData[item.prop] = data[item.name];
} }
} }
......
...@@ -610,7 +610,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -610,7 +610,7 @@ export default class MainBase extends Vue implements ControlInterface {
* 选中行数据 * 选中行数据
* *
* @type {any[]} * @type {any[]}
* @memberof Main * @memberof MainBase
*/ */
public selections: any[] = []; public selections: any[] = [];
...@@ -618,10 +618,18 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -618,10 +618,18 @@ export default class MainBase extends Vue implements ControlInterface {
* 拦截行选中 * 拦截行选中
* *
* @type {boolean} * @type {boolean}
* @memberof Main * @memberof MainBase
*/ */
public stopRowClick: boolean = false; public stopRowClick: boolean = false;
/**
* 当前编辑行数据
*
* @type {boolean}
* @memberof MainBase
*/
public curEditRowData:any;
...@@ -786,6 +794,15 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -786,6 +794,15 @@ export default class MainBase extends Vue implements ControlInterface {
* @type {*} * @type {*}
* @memberof MainBase * @memberof MainBase
*/ */
public deRules:any = {
};
/**
* 值规则集合
*
* @type {*}
* @memberof MainBase
*/
public rules: any = { public rules: any = {
srfkey: [ srfkey: [
{ required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '任务标识 值不能为空', trigger: 'change' }, { required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '任务标识 值不能为空', trigger: 'change' },
...@@ -1703,6 +1720,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1703,6 +1720,7 @@ export default class MainBase extends Vue implements ControlInterface {
row.hasUpdated = true; row.hasUpdated = true;
} }
} }
this.curEditRowData = row;
this.validate(property,row,rowIndex); this.validate(property,row,rowIndex);
} }
...@@ -1799,6 +1817,70 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1799,6 +1817,70 @@ export default class MainBase extends Vue implements ControlInterface {
*/ */
public updateDefault(row: any){ public updateDefault(row: any){
} }
/**
* 校验属性值规则
*
* @public
* @param {{ name: string }} { name }
* @memberof MainBase
*/
public verifyDeRules(name:string,rule:any = this.deRules,op:string = "AND",value:any) :{isPast:boolean}{
let falg:any = {};
if(!rule || !rule[name]){
return falg;
}
let opValue = op == 'AND'? true :false;
let startOp = (val:boolean)=>{
if(falg.isPast){
if(opValue){
falg.isPast = falg && val;
}else{
falg.isPast = falg || val;
}
}else{
falg.isPast = val;
}
}
rule[name].forEach((item:any) => {
// 常规规则
if(item.type == 'SIMPLE'){
startOp(!this.$verify.checkFieldSimpleRule(value,item.condOP,item.paramValue,item.ruleInfo,item.paramType,this.curEditRowData,item.isKeyCond));
}
// 数值范围
if(item.type == 'VALUERANGE2'){
startOp( !this.$verify.checkFieldValueRangeRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 正则式
if (item.type == "REGEX") {
startOp(!this.$verify.checkFieldRegExRule(value,item.regExCode,item.ruleInfo,item.isKeyCond));
}
// 长度
if (item.type == "STRINGLENGTH") {
startOp(!this.$verify.checkFieldStringLengthRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 系统值规则
if(item.type == "SYSVALUERULE") {
startOp(!this.$verify.checkFieldSysValueRule(value,item.sysRule.regExCode,item.ruleInfo,item.isKeyCond));
}
// 分组
if(item.type == 'GROUP'){
falg = this.verifyDeRules('group',item,"AND",value)
if(item.isNotMode){
falg.isPast = !falg.isPast;
}
}
});
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!value){
falg.isPast = true;
}
return falg;
}
} }
</script> </script>
......
...@@ -329,7 +329,7 @@ export default class MainService extends ControlService { ...@@ -329,7 +329,7 @@ export default class MainService extends ControlService {
requestData[item.prop] = context[item.name]; requestData[item.prop] = context[item.name];
} }
}else{ }else{
if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0)) ){ if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0) || Object.is(data[item.name],"")) ){
requestData[item.prop] = data[item.name]; requestData[item.prop] = data[item.name];
} }
} }
......
...@@ -557,7 +557,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -557,7 +557,7 @@ export default class MainBase extends Vue implements ControlInterface {
* 选中行数据 * 选中行数据
* *
* @type {any[]} * @type {any[]}
* @memberof Main * @memberof MainBase
*/ */
public selections: any[] = []; public selections: any[] = [];
...@@ -565,10 +565,18 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -565,10 +565,18 @@ export default class MainBase extends Vue implements ControlInterface {
* 拦截行选中 * 拦截行选中
* *
* @type {boolean} * @type {boolean}
* @memberof Main * @memberof MainBase
*/ */
public stopRowClick: boolean = false; public stopRowClick: boolean = false;
/**
* 当前编辑行数据
*
* @type {boolean}
* @memberof MainBase
*/
public curEditRowData:any;
...@@ -693,6 +701,15 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -693,6 +701,15 @@ export default class MainBase extends Vue implements ControlInterface {
* @type {*} * @type {*}
* @memberof MainBase * @memberof MainBase
*/ */
public deRules:any = {
};
/**
* 值规则集合
*
* @type {*}
* @memberof MainBase
*/
public rules: any = { public rules: any = {
srfkey: [ srfkey: [
{ required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '用户标识 值不能为空', trigger: 'change' }, { required: false, validator: (rule:any, value:any, callback:any) => { return (rule.required && (value === null || value === undefined || value === "")) ? false : true;}, message: '用户标识 值不能为空', trigger: 'change' },
...@@ -1610,6 +1627,7 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1610,6 +1627,7 @@ export default class MainBase extends Vue implements ControlInterface {
row.hasUpdated = true; row.hasUpdated = true;
} }
} }
this.curEditRowData = row;
this.validate(property,row,rowIndex); this.validate(property,row,rowIndex);
} }
...@@ -1706,6 +1724,70 @@ export default class MainBase extends Vue implements ControlInterface { ...@@ -1706,6 +1724,70 @@ export default class MainBase extends Vue implements ControlInterface {
*/ */
public updateDefault(row: any){ public updateDefault(row: any){
} }
/**
* 校验属性值规则
*
* @public
* @param {{ name: string }} { name }
* @memberof MainBase
*/
public verifyDeRules(name:string,rule:any = this.deRules,op:string = "AND",value:any) :{isPast:boolean}{
let falg:any = {};
if(!rule || !rule[name]){
return falg;
}
let opValue = op == 'AND'? true :false;
let startOp = (val:boolean)=>{
if(falg.isPast){
if(opValue){
falg.isPast = falg && val;
}else{
falg.isPast = falg || val;
}
}else{
falg.isPast = val;
}
}
rule[name].forEach((item:any) => {
// 常规规则
if(item.type == 'SIMPLE'){
startOp(!this.$verify.checkFieldSimpleRule(value,item.condOP,item.paramValue,item.ruleInfo,item.paramType,this.curEditRowData,item.isKeyCond));
}
// 数值范围
if(item.type == 'VALUERANGE2'){
startOp( !this.$verify.checkFieldValueRangeRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 正则式
if (item.type == "REGEX") {
startOp(!this.$verify.checkFieldRegExRule(value,item.regExCode,item.ruleInfo,item.isKeyCond));
}
// 长度
if (item.type == "STRINGLENGTH") {
startOp(!this.$verify.checkFieldStringLengthRule(value,item.minValue,item.isIncludeMinValue,item.maxValue,item.isIncludeMaxValue,item.ruleInfo,item.isKeyCond));
}
// 系统值规则
if(item.type == "SYSVALUERULE") {
startOp(!this.$verify.checkFieldSysValueRule(value,item.sysRule.regExCode,item.ruleInfo,item.isKeyCond));
}
// 分组
if(item.type == 'GROUP'){
falg = this.verifyDeRules('group',item,"AND",value)
if(item.isNotMode){
falg.isPast = !falg.isPast;
}
}
});
if(!falg.hasOwnProperty("isPast")){
falg.isPast = true;
}
if(!value){
falg.isPast = true;
}
return falg;
}
} }
</script> </script>
......
...@@ -329,7 +329,7 @@ export default class MainService extends ControlService { ...@@ -329,7 +329,7 @@ export default class MainService extends ControlService {
requestData[item.prop] = context[item.name]; requestData[item.prop] = context[item.name];
} }
}else{ }else{
if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0)) ){ if(item && item.isEditable && item.prop && item.name && (data[item.name] || Object.is(data[item.name],0) || Object.is(data[item.name],"")) ){
requestData[item.prop] = data[item.name]; requestData[item.prop] = data[item.name];
} }
} }
......
...@@ -67,5 +67,9 @@ zuul: ...@@ -67,5 +67,9 @@ zuul:
path: /dictionarys/** path: /dictionarys/**
serviceId: ${ibiz.ref.service.dict:ibzdict-api} serviceId: ${ibiz.ref.service.dict:ibzdict-api}
stripPrefix: false stripPrefix: false
disk:
path: /net-disk/**
serviceId: ${ibiz.ref.service.disk:ibzdisk-api}
stripPrefix: false
sensitive-headers: sensitive-headers:
- Cookie,Set-Cookie,Authorization - Cookie,Set-Cookie,Authorization
...@@ -36,5 +36,9 @@ zuul: ...@@ -36,5 +36,9 @@ zuul:
path: /dictionarys/** path: /dictionarys/**
serviceId: ${ibiz.ref.service.dict:ibzdict-api} serviceId: ${ibiz.ref.service.dict:ibzdict-api}
stripPrefix: false stripPrefix: false
disk:
path: /net-disk/**
serviceId: ${ibiz.ref.service.disk:ibzdisk-api}
stripPrefix: false
sensitive-headers: sensitive-headers:
- Cookie,Set-Cookie,Authorization - Cookie,Set-Cookie,Authorization
<?xml version="1.1" encoding="UTF-8" standalone="no"?> !!!!模版产生代码错误:----
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
<!--输出实体[WF_GROUP]数据结构 --> FTL stack trace ("~" means nesting-related):
<changeSet author="a_A_5d9d78509" id="tab-wf_group-26-1"> - Failed at: ${dbinst.getUserName()} [in template "CODETEMPL_zh_CN" at line 28, column 24]
<createTable tableName="IBZWFGROUP"> ----
<column name="GROUPID" remarks="" type="VARCHAR(100)"> \ No newline at end of file
<constraints primaryKey="true" primaryKeyName="PK_WF_GROUP_GROUPID"/>
</column>
<column name="GROUPNAME" remarks="" type="VARCHAR(100)">
</column>
<column name="GROUPSCOPE" remarks="" type="VARCHAR(100)">
</column>
</createTable>
</changeSet>
<!--输出实体[WF_GROUP_MEMBER]数据结构 -->
<changeSet author="a_A_5d9d78509" id="tab-wf_group_member-50-2">
<createTable tableName="IBZWFMEMBER">
<column name="MEMBERID" remarks="" type="VARCHAR(100)">
<constraints primaryKey="true" primaryKeyName="PK_WF_GROUP_MEMBER_MEMBERID"/>
</column>
<column name="MEMBERNAME" remarks="" type="VARCHAR(100)">
</column>
<column name="GROUPID" remarks="" type="VARCHAR(100)">
</column>
<column name="USERID" remarks="" type="VARCHAR(100)">
</column>
</createTable>
</changeSet>
<!--输出实体[WF_DEFINITION]数据结构 -->
<changeSet author="a_A_5d9d78509" id="tab-wf_definition-63-3">
<createTable tableName="IBZWFDEFINITION">
<column name="DEFINITIONKEY" remarks="" type="VARCHAR(100)">
<constraints primaryKey="true" primaryKeyName="PK_WF_DEFINITION_DEFINITIONKEY"/>
</column>
<column name="DEFINITIONNAME" remarks="" type="VARCHAR(100)">
</column>
<column name="MODELVERSION" remarks="" type="INT">
</column>
<column name="MODELENABLE" remarks="" type="INT">
</column>
<column name="PSSYSTEMID" remarks="" type="VARCHAR(100)">
</column>
<column name="MD5CHECK" remarks="" type="VARCHAR(100)">
</column>
<column name="BPMNFILE" remarks="" type="VARCHAR(1000)">
</column>
<column name="DEPLOYKEY" remarks="" type="VARCHAR(100)">
</column>
<column name="WEBSERVICEIDS" remarks="" type="VARCHAR(200)">
</column>
<column name="MOBILESERVICEIDS" remarks="" type="VARCHAR(200)">
</column>
</createTable>
</changeSet>
<!--输出实体[WF_PSSYSTEM]数据结构 -->
<!--输出实体[WF_GROUP]外键关系 -->
<!--输出实体[WF_GROUP_MEMBER]外键关系 -->
<changeSet author="a_A_5d9d78509" id="fk-wf_group_member-50-5">
<addForeignKeyConstraint baseColumnNames="GROUPID" baseTableName="IBZWFMEMBER" constraintName="DER1N_WF_GROUP_MEMBER_WF_GROUP" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="GROUPID" referencedTableName="IBZWFGROUP" validate="true"/>
</changeSet>
<!--输出实体[WF_DEFINITION]外键关系 -->
<!--输出实体[WF_PSSYSTEM]外键关系 -->
</databaseChangeLog>
[
{
"tid":"ibzwf-newtodo",
"template_name":"待办提醒",
"content":"{objectname}"
}
]
package cn.ibizlab.util.client;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
@Component
public class IBZNotifyFallback implements IBZNotifyFeignClient {
@Override
public Boolean SendMsg(JSONObject msg) {
return null;
}
@Override
public Boolean createMsgTemplate(JSONObject template) {
return null;
}
}
package cn.ibizlab.util.client;
import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@FeignClient(value = "${ibiz.ref.service.notify:ibznotify-api}",fallback = IBZNotifyFallback.class)
public interface IBZNotifyFeignClient
{
@RequestMapping(method = RequestMethod.POST,value = "/SendMsg")
Boolean SendMsg(@RequestBody JSONObject msg);
@RequestMapping(method = RequestMethod.POST,value = "/createMsgTemplate")
Boolean createMsgTemplate(@RequestBody JSONObject template);
}
...@@ -67,6 +67,33 @@ public class SearchContextBase implements ISearchContext{ ...@@ -67,6 +67,33 @@ public class SearchContextBase implements ISearchContext{
* 工作流流程标识 * 工作流流程标识
*/ */
public String processDefinitionKey; public String processDefinitionKey;
/**
* 获取工作流步骤标识
*/
public String getUserTaskId() {
if(StringUtils.isEmpty(userTaskId)){
Object taskId=params.get("usertaskid");
return StringUtils.isEmpty(taskId)?null:String.valueOf(taskId);
}else{
return userTaskId;
}
}
/**
* 获取工作流流程标识
* @return
*/
public String getProcessDefinitionKey() {
if(StringUtils.isEmpty(processDefinitionKey)){
Object processKey=params.get("processdefinitionkey");
return StringUtils.isEmpty(processKey)?null:String.valueOf(processKey);
}
else{
return processDefinitionKey;
}
}
/** /**
* 获取分页参数 * 获取分页参数
* @return * @return
......
...@@ -2,6 +2,7 @@ package cn.ibizlab.util.job; ...@@ -2,6 +2,7 @@ package cn.ibizlab.util.job;
import cn.ibizlab.util.client.IBZUAAFeignClient; import cn.ibizlab.util.client.IBZUAAFeignClient;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -34,6 +35,10 @@ public class PermissionSyncJob implements ApplicationRunner { ...@@ -34,6 +35,10 @@ public class PermissionSyncJob implements ApplicationRunner {
private String systemName; private String systemName;
@Autowired
@Lazy
private cn.ibizlab.util.client.IBZNotifyFeignClient notifyFeignClient;
@Override @Override
public void run(ApplicationArguments args) { public void run(ApplicationArguments args) {
try { try {
...@@ -55,5 +60,22 @@ public class PermissionSyncJob implements ApplicationRunner { ...@@ -55,5 +60,22 @@ public class PermissionSyncJob implements ApplicationRunner {
log.error(String.format("向[UAA]同步系统资源失败,请检查[UAA]服务是否正常! [%s]",ex)); log.error(String.format("向[UAA]同步系统资源失败,请检查[UAA]服务是否正常! [%s]",ex));
} }
try {
InputStream msgTemplate= this.getClass().getResourceAsStream("/msgtempl/systemMsgTempl.json"); //获取当前系统所有实体资源能力
String strMsgTemplate = IOUtils.toString(msgTemplate,"UTF-8");
JSONObject template= new JSONObject();
template.put("system",systemId);
template.put("template",JSONArray.parseArray(strMsgTemplate));
//数值代码表:email(2)、sms(4)、wechat(32)、dingtalk(64)
template.put("templtypes", 102);
if(notifyFeignClient.createMsgTemplate(template)){
log.info("推送消息模板成功");
}else{
log.error("推送消息模板失败");
}
} catch (Exception e) {
log.error("推送消息模板失败");
}
} }
} }
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册