提交 8a872084 编写于 作者: ibizdev's avatar ibizdev

ibiz4j 发布系统代码

上级 988330ef
## v7.0.0-alpha.20 [2020-10-18]
### Bug修复
修复获取数据对象的主状态值统一转字符串处理逻辑
修复表单空输入异常问题
修复下拉数据数据加载异常问题
修复表单分页图标重复发布异常
修复数据选择增加外键值附加数据回填逻辑
修复表格行编辑可设置数据主键和清空仿真主键问题
修复代码表返回数据不合法抛出的异常
修复表单值规则部分逻辑
修复导航类视图修改右侧表单数据时,只能跳转第一条数据BUG
### 功能新增及优化
#### 模板
新增动态表单支持
新增视图消息支持
新增表单、面板、工具栏、数据看板直接内容项支持
新增日历项支持标识属性和文本属性
新增应用组件包支持
新增导航工具栏权限控制支持
新增图表绘制最终参数
新增门户部件界面行为组权限校验
新增表单、表格数据对象方式新建、更新默认值
新增导航视图搜索框提示可搜索字段名称
新增部件逻辑插件支持
新增工具栏、工具栏项插件支持
优化调整代码表服务基类位置
#### 基础文件
新增动态表单组件、直接内容项组件、视图消息组组件和视图消息组件
优化导航类部件工具栏状态逻辑
修复表单空输入异常问题
修复下拉数据数据加载异常
修复关系页第一次进入不加载问题
## v7.0.0-alpha.19 [2020-9-13]
### Bug修复
......
......@@ -43,7 +43,7 @@
"vue-property-decorator": "^8.3.0",
"vue-router": "^3.1.3",
"vuex": "^3.1.2",
"xlsx": "^0.15.6"
"xlsx": "^0.15.6"
},
"devDependencies": {
"@types/echarts": "^4.4.3",
......
import store from '@/store';
import { Environment } from '@/environments/environment';
/**
* 实体权限服务
*
......@@ -115,7 +117,13 @@ export default class AuthService {
if(!this.$store.getters['authresource/getEnablePermissionValid']) {
return true;
}
return this.$store.getters['authresource/getAuthMenu'](item);
if(Object.is(Environment.menuPermissionMode,"RT")){
return this.$store.getters['authresource/getAuthMenuWithRT'](item);
}else if(Object.is(Environment.menuPermissionMode,"RESOURCE")){
return this.$store.getters['authresource/getAuthMenuWithResource'](item);
}else{
return this.$store.getters['authresource/getAuthMenu'](item);
}
}
/**
......
......@@ -149,10 +149,11 @@ export default class CodeListService {
// 启用缓存
if(isEnableCache){
const callback:Function = (context:any ={},data:any ={},tag:string,promise:Promise<any>) =>{
const callbackKey:string = `${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`;
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}`);
CodeListService.codelistCached.set(callbackKey,{items:result});
CodeListService.codelistCache.delete(callbackKey);
return resolve(result);
}else{
return resolve([]);
......@@ -162,8 +163,9 @@ export default class CodeListService {
})
}
// 加载完成,从本地缓存获取
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;
const key:string = `${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`;
if(CodeListService.codelistCached.get(key)){
let items:any = CodeListService.codelistCached.get(key).items;
if(items.length >0){
if(new Date().getTime() <= codelist.getExpirationTime()){
return resolve(items);
......@@ -172,11 +174,11 @@ export default class CodeListService {
}
if (codelist) {
// 加载中,UI又需要数据,解决连续加载同一代码表问题
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}`));
if(CodeListService.codelistCache.get(key)){
callback(context,data,tag,CodeListService.codelistCache.get(key));
}else{
let result:Promise<any> = codelist.getItems(context,data,isloading);
CodeListService.codelistCache.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,result);
CodeListService.codelistCache.set(key,result);
codelist.setExpirationTime(new Date().getTime() + cacheTimeout);
callback(context,data,tag,result);
}
......
......@@ -66,7 +66,7 @@ export default class AppActionBar extends Vue {
public created(){
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, "app-actionbar")) {
if (!Object.is(tag, "all-portlet")) {
return;
}
if(Object.is(action,'loadmodel')){
......@@ -107,7 +107,7 @@ export default class AppActionBar extends Vue {
const _item = ActionModel[key];
if(_item && _item['dataaccaction'] && UIService){
let dataActionResult:any;
if(Object.is(_item['actiontarget'],"NONE")){
if(Object.is(_item['actiontarget'],"NONE") || Object.is(_item['actiontarget'],"")){
dataActionResult = UIService.getResourceOPPrivs(_item['dataaccaction']);
}else{
if(data && Object.keys(data).length >0){
......
......@@ -4,7 +4,11 @@
<app-alert
:key="index"
:tag="item.tag"
:position="item.position"/>
:context="context"
:viewparam="viewparam"
:position="item.position"
:infoGroup="infoGroup"
:viewname="viewname"/>
</template>
</div>
......@@ -32,6 +36,23 @@ export default class AppAlertGroup extends Vue {
*/
@Prop() infoGroup: any;
/**
* 应用上下文
*
* @type {any}
* @memberof AppAlertGroup
*/
@Prop() context: any;
/**
* 视图参数
*
* @type {any}
* @memberof AppAlertGroup
*/
@Prop() viewparam: any;
/**
* 视图消息组显示位置
*
......@@ -40,6 +61,14 @@ export default class AppAlertGroup extends Vue {
*/
@Prop() position: any;
/**
* 视图名称
*
* @type {any}
* @memberof AppAlertGroup
*/
@Prop() viewname: any;
/**
* 当前位置视图消息集合
*
......
......@@ -43,6 +43,39 @@ export default class AppAlert extends Vue {
* @memberof AppAlert
*/
@Prop() position: any;
/**
* 应用上下文
*
* @type {any}
* @memberof AppAlert
*/
@Prop() context: any;
/**
* 视图参数
*
* @type {any}
* @memberof AppAlert
*/
@Prop() viewparam: any;
/**
* 视图消息组tag
*
* @type {any}
* @memberof AppAlert
*/
@Prop() infoGroup!: any;
/**
* 视图名称
*
* @type {any}
* @memberof AppAlert
*/
@Prop() viewname!: any;
/**
* 视图消息对象
......@@ -79,7 +112,7 @@ export default class AppAlert extends Vue {
* @memberof AppAlert
*/
public async getData() {
let response: any = await this.viewMessageService.getViewMessageByTag(this.tag, null, null)
let response: any = await this.viewMessageService.getViewMessageByTag(this.tag, this.context, this.viewparam);
if(response && response.length > 0) {
response.forEach((item: any) => {
let tempData: any = JSON.parse(JSON.stringify(item));
......@@ -118,7 +151,8 @@ export default class AppAlert extends Vue {
data.showState = true;
if(data.closeMode || data.closeMode == 0) {
if(data.closeMode == 1) {
const id = this.$store.getters.getViewMessage(data.codename);
const tag = this.viewname + '_' + this.infoGroup + '_' + data.codename;
const id = localStorage.getItem(tag);
if(id) {
data.showState = false;
flag = false;
......@@ -182,14 +216,14 @@ export default class AppAlert extends Vue {
let tempArr: any[] = data.customClass.toString().split(',');
if(tempArr && tempArr.length > 0) {
if(Object.is("1", tempArr[1])) {
const args = { tag: tempArr[0], id: data.customClass };
this.$store.commit('addViewMessage', args);
const tag = this.viewname + '_' + this.infoGroup + '_' + tempArr[0];
localStorage.setItem(tag, data.customClass);
}
}
}
if(data.closeMode && data.closeMode == 1) {
const args = {tag: data.codename, id: data.id};
this.$store.commit('addViewMessage', args);
const tag = this.viewname + '_' + this.infoGroup + '_' + data.codename;
localStorage.setItem(tag,data.id);
}
}
......
<template>
<el-breadcrumb class="app-breadcrumb" separator="/">
<el-breadcrumb class="app-breadcrumb" :separator="separator">
<transition-group name="breadcrumb">
<template v-if="Object.is(this.navModel,'route')">
<el-breadcrumb-item v-for="(item, index) in breadcrumbs" :key="item.id">
......@@ -34,6 +34,7 @@
import { Component, Vue, Watch, Prop } from 'vue-property-decorator'
import { RouteRecord, Route } from 'vue-router'
import { Environment } from "@/environments/environment";
import { appConfig } from '@/config/appConfig';
import NavDataService from '@/service/app/navdata-service';
import {Subscription } from 'rxjs';
......@@ -48,6 +49,13 @@ export default class Breadcrumb extends Vue {
*/
private breadcrumbs: Array<any> = [];
/**
* 面包屑分隔符
*
* @memberof Breadcrumb
*/
private separator:string = appConfig.breadcrumbSeparator;
/**
* 导航服务
*
......
......@@ -165,7 +165,7 @@ export default class AppFormGroup extends Vue {
const _item = ActionModel[key];
if(_item && _item['dataaccaction'] && UIService){
let dataActionResult:any;
if(Object.is(_item['actiontarget'],"NONE")){
if(Object.is(_item['actiontarget'],"NONE") || Object.is(_item['actiontarget'],"")){
dataActionResult = UIService.getResourceOPPrivs(_item['dataaccaction']);
}else{
if(data && Object.keys(data).length >0){
......
......@@ -21,7 +21,7 @@
</ul>
<!-- 预览 -->
<modal v-model="dialogVisible" footer-hide width="auto" class-name='app-image-preview-model'>
<el-image src="dialogImageUrl">
<el-image :src="dialogImageUrl">
<div slot='error' class='image-slot'>
<img src="/assets/img/picture.png">
</div>
......
......@@ -49,7 +49,7 @@
</el-upload>
<!-- 预览 -->
<modal v-model="dialogVisible" footer-hide class-name='app-image-upload-model'>
<el-image src="dialogImageUrl">
<el-image :src="dialogImageUrl">
<div slot='error' class='image-slot'>
<i class='el-icon-picture-outline'></i>
</div>
......
......@@ -65,7 +65,7 @@ export default class AppPicker extends Vue {
* 视图上下文
*
* @type {*}
* @memberof AppFormDRUIPart
* @memberof AppPicker
*/
@Prop() public context!: any;
......@@ -73,7 +73,7 @@ export default class AppPicker extends Vue {
* 视图参数
*
* @type {*}
* @memberof AppFormDRUIPart
* @memberof AppPicker
*/
@Prop() public viewparams!: any;
......@@ -81,15 +81,23 @@ export default class AppPicker extends Vue {
* AC参数
*
* @type {*}
* @memberof AppFormDRUIPart
* @memberof AppPicker
*/
@Prop({default: () => {}}) public acParams?: any;
/**
* 外键值附加数据
*
* @type {*}
* @memberof AppPicker
*/
@Prop() public pickUpData?: string;
/**
* 表单服务
*
* @type {*}
* @memberof AppFormDRUIPart
* @memberof AppPicker
*/
@Prop() public service?: any;
......@@ -97,7 +105,7 @@ export default class AppPicker extends Vue {
* 应用实体主信息属性名称
*
* @type {string}
* @memberof AppAutocomplete
* @memberof AppPicker
*/
@Prop({default: 'srfmajortext'}) public deMajorField!: string;
......@@ -105,7 +113,7 @@ export default class AppPicker extends Vue {
* 应用实体主键属性名称
*
* @type {string}
* @memberof AppAutocomplete
* @memberof AppPicker
*/
@Prop({default: 'srfkey'}) public deKeyField!: string;
......@@ -240,7 +248,7 @@ export default class AppPicker extends Vue {
* 输入状态
*
* @type {boolean}
* @memberof AppAutocomplete
* @memberof AppPicker
*/
public inputState: boolean = false;
......@@ -397,6 +405,7 @@ export default class AppPicker extends Vue {
if (this.name) {
this.$emit('formitemvaluechange', { name: this.name, value: item[this.deMajorField] });
}
this.fillPickUpData(item);
}
/**
......@@ -430,6 +439,7 @@ export default class AppPicker extends Vue {
if (this.name) {
this.$emit('formitemvaluechange', { name: this.name, value: '' });
}
this.fillPickUpData();
this.$forceUpdate();
}
......@@ -672,6 +682,7 @@ export default class AppPicker extends Vue {
if (this.name) {
this.$emit('formitemvaluechange', { name: this.name, value: item[this.deMajorField]?item[this.deMajorField]:item["srfmajortext"] });
}
this.fillPickUpData(item);
}
}
......@@ -752,7 +763,7 @@ export default class AppPicker extends Vue {
/**
* 输入过程中
*
* @memberof AppAutocomplete
* @memberof AppPicker
*/
public onInput($event: any) {
if (Object.is($event, this.value)) {
......@@ -783,6 +794,34 @@ export default class AppPicker extends Vue {
appPicker.blur();
}
}
/**
* 填充外键值附加数据
*
* @param {item} 数据集
* @memberof AppPicker
*/
public fillPickUpData(item?:any){
if(this.pickUpData){
let pickUpDataArray:Array<any> = this.pickUpData.split(";")
if(pickUpDataArray && pickUpDataArray.length >0){
for(let i=0;i<pickUpDataArray.length;i++){
if(item){
this.$emit("formitemvaluechange", {
name: pickUpDataArray[i],
value: item[pickUpDataArray[i]],
});
}else{
this.$emit("formitemvaluechange", {
name: pickUpDataArray[i],
value: "",
});
}
}
}
}
}
}
......
......@@ -20,10 +20,10 @@ export default class AvueCustomForm extends Vue {
/**
* 编辑器参数传入组件配置
*
* @type {any}
* @type {*}
* @memberof AvueCustomForm
*/
@Prop() public options?: any;
public options: any;
/**
* 是否需要转换为string类型
......@@ -47,7 +47,7 @@ export default class AvueCustomForm extends Vue {
* @type {any}
* @memberof AvueCustomForm
*/
@Model('change') public value: any;
@Model("change") public value: any;
/**
* 是否将表单数据通过组件配置带入组件中
......@@ -57,13 +57,22 @@ export default class AvueCustomForm extends Vue {
*/
@Prop() public isFormData?: boolean;
/**
* 是否为子表单
*
* @type {boolean}
* @memberof AvueCustomForm
*/
@Prop() public isSubForm?: boolean;
/**
* 表单数据
*
* @type {any}
* @type {*}
* @memberof AvueCustomForm
*/
@Prop() public formData: any;
@Prop()
public formData?: any;
/**
* 表单状态
......@@ -81,10 +90,12 @@ export default class AvueCustomForm extends Vue {
*/
get formVal() {
let obj: any = {};
if (this.value) {
if (this.isParseString) obj = JSON.parse(this.value);
else obj = this.value;
}
if (this.value) {
if (this.isParseString) obj = JSON.parse(this.value);
else obj = this.value;
if (this.isSubForm && obj instanceof Array)
obj = this.loadSubFormData(obj);
}
return obj;
}
......@@ -110,7 +121,7 @@ export default class AvueCustomForm extends Vue {
/**
* 当前组件配置设置属性
*
* @type {any}
* @type {*}
* @memberof AvueCustomForm
*/
public formOption: any = null;
......@@ -118,7 +129,7 @@ export default class AvueCustomForm extends Vue {
/**
* avue-form默认配置
*
* @type {any}
* @type {*}
* @memberof AvueCustomForm
*/
public defaultOptions: any = {
......@@ -185,22 +196,26 @@ export default class AvueCustomForm extends Vue {
*
* @memberof AvueCustomForm
*/
public load() {
public async load() {
let that: any = this;
if (!this.options && this.options == null) {
if (this.url && this.options == null) {
const get: Promise<any> = this.$http.get(this.url);
get.then((response: any) => {
await get.then((response: any) => {
if (response && response.data) {
that.formOption = response.data;
if (this.isFormData) that.getFormData();
let options: any = response.data;
this.transitionDicUrlCondition(options);
that.formOption = options;
if (that.isFormData) that.getFormData();
}
});
} else {
this.transitionDicUrlCondition(this.defaultOptions);
this.formOption = this.defaultOptions;
if (this.isFormData) that.getFormData();
}
} else {
this.transitionDicUrlCondition(this.options);
this.formOption = this.options;
if (this.isFormData) that.getFormData();
}
......@@ -239,19 +254,78 @@ export default class AvueCustomForm extends Vue {
* @memberof AvueCustomForm
*/
public setValue(value: any) {
if (this.isSubForm) value = this.getSubFormData(value);
if (this.isParseString) this.$emit("change", JSON.stringify(value));
else this.$emit("change", value);
}
/**
* 提取第一个属性值
*
* @memberof AvueCustomForm
* @return {Array<any>}
*/
public getSubFormData(value: any): Array<any> {
let arr: Array<any> = [];
for (let val in value) {
arr = value[val];
break;
}
return arr;
}
/**
* 加载子表单值
*
* @memberof AvueCustomForm
* @return {*}
*/
public loadSubFormData(arr: Array<any>): any {
let value: any = {};
value[this.formOption.column[0].prop] = arr;
return value;
}
/**
* 配置的下拉列表转换符号支持动态配置
*
* @memberof AvueCustomForm
* @param {*}
*/
public transitionDicUrlCondition(options: any) {
let that: any = this;
let recursive: any = function (obj: any) {
if (obj.column && obj.column.length > 0) {
obj.column.forEach((col: any) => {
if (col.dicUrl && col.dicUrl.indexOf("$") > 0) {
let g = /\${[^+]+}/;
let dicGroup = col.dicUrl.match(g);
dicGroup.forEach((dic: any) => {
col.dicUrl = col.dicUrl.replace(
dic,
that.formData[dic.substring(2, dic.length - 1)]
);
});
}
if (col.children) recursive(col.children);
if (col.group) recursive(col.group);
});
}
if (obj.children) recursive(obj.children);
if (obj.group) recursive(obj.group);
};
recursive(options);
}
/**
* 销毁组件(vue生命周期)
*
* @type {Subject<any>}
* @memberof AvueCustomForm
*/
public destroy(){
if(this.formStateEvent){
this.formStateEvent.unsubscribe();
public destroy() {
if (this.formStateEvent) {
this.formStateEvent.unsubscribe();
}
}
}
......
......@@ -35,5 +35,7 @@ export const appConfig = {
label: 'YouYuan',
value: 'YouYuan',
},
]
],
// 面包屑分隔符
breadcrumbSeparator:"/"
}
\ No newline at end of file
......@@ -401,10 +401,10 @@ export default class MDViewEngine extends ViewEngine {
if (this.view.viewparams && Object.keys(this.view.viewparams).length > 0) {
Object.assign(arg, this.view.viewparams);
}
if (this.getSearchForm() && this.view.isExpandSearchForm) {
if (this.getSearchForm()) {
Object.assign(arg, this.getSearchForm().getData());
}
if (this.view && this.view.$refs.searchbar && this.view.isExpandSearchForm) {
if (this.view && this.view.$refs.searchbar) {
Object.assign(arg, this.view.$refs.searchbar.getData());
}
if (this.view && !this.view.isExpandSearchForm) {
......
......@@ -194,7 +194,7 @@ export default class ViewEngine {
const _item = _this.view.toolBarModels[key];
if(_item && _item['dataaccaction'] && _this.view.appUIService){
let dataActionResult:any;
if (_item.uiaction && (Object.is(_item.uiaction.target, 'NONE'))){
if (_item.uiaction && (Object.is(_item.uiaction.target, "NONE") || Object.is(_item.uiaction.target, ""))){
dataActionResult = _this.view.appUIService.getResourceOPPrivs(_item['dataaccaction']);
}else{
if(data && Object.keys(data).length >0){
......
......@@ -78,7 +78,11 @@ export default class WizardViewEngine extends ViewEngine {
*/
public onfinish(args: any): void {
this.view.$emit('viewdataschange', [args]);
this.view.$emit('close', null);
if(!this.view.viewDefaultUsage){
this.view.$emit('close', null);
}else{
this.view.$tabPageExp.onClose(this.view.$route.fullPath);
}
}
/**
......
......@@ -25,6 +25,8 @@ export const Environment = {
devMode: true,
// 是否开启权限认证
enablePermissionValid:false,
// 菜单权限模式,可选值:RT(RT模式),RESOURCE(资源模式),MINIX(混合模式),默认MINIX
menuPermissionMode:"MINIX",
// 项目模板地址
ProjectUrl: "http://demo.ibizlab.cn/ibizr7pfstdtempl/ibizvuer7",
// 打开目标工具,可选参数:sln、mos
......
......@@ -201,7 +201,7 @@ export default class ViewMessageService {
public async getViewMessageByTag(tag:string,context:any = {},viewparam:any = {}){
let messageService:any = await this.getService(tag);
if(messageService.dynamicMode && Object.is(messageService.dynamicMode,"STATIC")){
return messageService.getStaticViewMessage();
return messageService.getStaticViewMessage(context,viewparam);
}else{
return messageService.getDynamicViewMessage(tag,messageService,context,viewparam);
}
......@@ -209,10 +209,15 @@ export default class ViewMessageService {
/**
* 转化消息模板标题和内容
*
* @target {*} target 返回目标数据
* @param {*} context 应用上下文
* @param {*} viewparam 视图参数
* @param {*} item 源数据
*
* @memberof ViewMessageService
*/
public translateMessageTemp(target:any,item?:any){
public translateMessageTemp(target:any,context:any,viewparam:any,item?:any){
}
......@@ -221,7 +226,7 @@ export default class ViewMessageService {
*
* @memberof ViewMessageService
*/
public getStaticViewMessage():Array<ViewMessage>{
public getStaticViewMessage(context:any,viewparam:any):Array<ViewMessage>{
let returnViewMessage:ViewMessage ={
id:this.id,
name:this.name,
......@@ -236,7 +241,7 @@ export default class ViewMessageService {
dynamicMode:this.dynamicMode,
messageType:this.messageType
};
this.translateMessageTemp(returnViewMessage);
this.translateMessageTemp(returnViewMessage,context,viewparam);
return [returnViewMessage];
}
......@@ -259,10 +264,11 @@ export default class ViewMessageService {
// 启用缓存
if(isEnableCache){
const callback:Function = (context:any ={},data:any ={},tag:string,promise:Promise<any>) =>{
const callbackKey:string = `${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`;
promise.then((result:any) =>{
if(result.length > 0){
ViewMessageService.messageCached.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,{items:result});
ViewMessageService.messageCache.delete(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`);
ViewMessageService.messageCached.set(callbackKey,{items:result});
ViewMessageService.messageCache.delete(callbackKey);
return resolve(result);
}else{
return resolve([]);
......@@ -271,9 +277,10 @@ export default class ViewMessageService {
return reject(result);
})
}
const key:string = `${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`;
// 加载完成,从本地缓存获取
if(ViewMessageService.messageCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){
let items:any = ViewMessageService.messageCached.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`).items;
if(ViewMessageService.messageCached.get(key)){
let items:any = ViewMessageService.messageCached.get(key).items;
if(items.length >0){
if(new Date().getTime() <= messageService.getExpirationTime()){
return resolve(items);
......@@ -282,11 +289,11 @@ export default class ViewMessageService {
}
if (messageService) {
// 加载中,UI又需要数据,解决连续加载同一代码表问题
if(ViewMessageService.messageCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`)){
callback(context,data,tag,ViewMessageService.messageCache.get(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`));
if(ViewMessageService.messageCache.get(key)){
callback(context,data,tag,ViewMessageService.messageCache.get(key));
}else{
let result:Promise<any> = messageService.getItems(context,data,isloading);
ViewMessageService.messageCache.set(`${JSON.stringify(context)}-${JSON.stringify(data)}-${tag}`,result);
ViewMessageService.messageCache.set(key,result);
messageService.setExpirationTime(new Date().getTime() + cacheTimeout);
callback(context,data,tag,result);
}
......
......@@ -23,9 +23,11 @@
</div>
</div>
<div class="content-container">
<div class='view-top-messages'>
</div>
<div class="content-container">
<div class='view-body-messages'>
</div>
<view_form
:viewState="viewState"
:viewparams="viewparams"
......@@ -48,9 +50,9 @@
@load="form_load($event)"
@closeview="closeView($event)">
</view_form>
</div>
<div class='view-bottom-messages'>
</div>
</div>
</card>
</div>
</template>
......@@ -226,6 +228,18 @@ export default class JobsInfoEditViewBase extends Vue {
view_form: { name: 'form', type: 'FORM' },
};
/**
* 视图刷新
*
* @param {*} args
* @memberof JobsInfoEditViewBase
*/
public refresh(args?: any): void {
const refs: any = this.$refs;
if (refs && refs.form) {
refs.form.refresh();
}
}
/**
* 计数器刷新
*
......@@ -257,9 +271,9 @@ export default class JobsInfoEditViewBase extends Vue {
* @memberof JobsInfoEditView
*/
public toolBarModels: any = {
tbitem3: { name: 'tbitem3', caption: '保存', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Save', target: '' } },
tbitem3: { name: 'tbitem3', actiontarget: 'NONE', caption: '保存', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Save', target: '' } },
deuiaction1: { name: 'deuiaction1', caption: '关闭', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Exit', target: '' } },
deuiaction1: { name: 'deuiaction1', actiontarget: 'NONE', caption: '关闭', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Exit', target: '' } },
};
......@@ -309,6 +323,23 @@ export default class JobsInfoEditViewBase extends Vue {
*/
public serviceStateEvent: Subscription | undefined;
/**
* 门户部件状态对象
*
* @type {*}
* @memberof JobsInfoEditViewBase
*/
@Prop() public portletState?: any;
/**
* 门户部件状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsInfoEditViewBase
*/
public portletStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -522,6 +553,16 @@ export default class JobsInfoEditViewBase extends Vue {
});
}
});
if(_this.portletState){
_this.portletStateEvent = _this.portletState.subscribe((res:any) =>{
if(!Object.is(res.name,'calendar-view9')){
return;
}
if(Object.is(res.action,'refresh') && _this.refresh && _this.refresh instanceof Function){
_this.refresh();
}
})
}
}
......@@ -768,6 +809,9 @@ export default class JobsInfoEditViewBase extends Vue {
}
})
}
if(this.portletStateEvent){
this.portletStateEvent.unsubscribe();
}
}
......
......@@ -5,9 +5,9 @@
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfCaption)}}</span>
</div>
<div class='content-container'>
<div class='view-top-messages'>
</div>
<div class='content-container'>
<div style='margin-bottom: 6px;'>
<i-input v-show="!isExpandSearchForm" v-model="query" search enter-button @on-search="onSearch($event)" class='quick-search-input' style='max-width: 400px;' placeholder="执行器任务HANDLER" />
<div class='pull-right'>
......@@ -80,6 +80,8 @@
@load="searchform_load($event)"
@closeview="closeView($event)">
</view_searchform>
<div class='view-body-messages'>
</div>
<view_grid
:viewState="viewState"
:viewparams="viewparams"
......@@ -107,9 +109,9 @@
@load="grid_load($event)"
@closeview="closeView($event)">
</view_grid>
</div>
<div class='view-bottom-messages'>
</div>
</div>
</card>
</div>
</template>
......@@ -289,6 +291,18 @@ export default class JobsInfoGridViewBase extends Vue {
view_searchform: { name: 'searchform', type: 'SEARCHFORM' },
};
/**
* 视图刷新
*
* @param {*} args
* @memberof JobsInfoGridViewBase
*/
public refresh(args?: any): void {
const refs: any = this.$refs;
if (refs && refs.grid) {
refs.grid.refresh();
}
}
/**
* 计数器刷新
*
......@@ -320,19 +334,19 @@ export default class JobsInfoGridViewBase extends Vue {
* @memberof JobsInfoGridView
*/
public toolBarModels: any = {
deuiaction1: { name: 'deuiaction1', caption: '启动', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Start', target: 'SINGLEKEY' } },
deuiaction1: { name: 'deuiaction1', actiontarget: 'NONE', caption: '启动', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Start', target: 'SINGLEKEY' } },
deuiaction2: { name: 'deuiaction2', caption: '停止', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Stop', target: 'SINGLEKEY' } },
deuiaction2: { name: 'deuiaction2', actiontarget: 'NONE', caption: '停止', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Stop', target: 'SINGLEKEY' } },
deuiaction3: { name: 'deuiaction3', caption: '执行', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Execute', target: 'SINGLEKEY' } },
deuiaction3: { name: 'deuiaction3', actiontarget: 'NONE', caption: '执行', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Execute', target: 'SINGLEKEY' } },
deuiaction4: { name: 'deuiaction4', caption: '新建', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'New', target: '' } },
deuiaction4: { name: 'deuiaction4', actiontarget: 'NONE', caption: '新建', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'New', target: '' } },
deuiaction5: { name: 'deuiaction5', caption: '编辑', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Edit', target: 'SINGLEKEY' } },
deuiaction5: { name: 'deuiaction5', actiontarget: 'NONE', caption: '编辑', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Edit', target: 'SINGLEKEY' } },
deuiaction6: { name: 'deuiaction6', caption: '删除', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Remove', target: 'MULTIKEY' } },
deuiaction6: { name: 'deuiaction6', actiontarget: 'NONE', caption: '删除', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Remove', target: 'MULTIKEY' } },
deuiaction7: { name: 'deuiaction7', caption: '过滤', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'ToggleFilter', target: '' } },
deuiaction7: { name: 'deuiaction7', actiontarget: 'NONE', caption: '过滤', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'ToggleFilter', target: '' } },
};
......@@ -389,6 +403,23 @@ export default class JobsInfoGridViewBase extends Vue {
*/
public serviceStateEvent: Subscription | undefined;
/**
* 门户部件状态对象
*
* @type {*}
* @memberof JobsInfoGridViewBase
*/
@Prop() public portletState?: any;
/**
* 门户部件状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsInfoGridViewBase
*/
public portletStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -602,6 +633,16 @@ export default class JobsInfoGridViewBase extends Vue {
});
}
});
if(_this.portletState){
_this.portletStateEvent = _this.portletState.subscribe((res:any) =>{
if(!Object.is(res.name,'calendar-view9')){
return;
}
if(Object.is(res.action,'refresh') && _this.refresh && _this.refresh instanceof Function){
_this.refresh();
}
})
}
if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'save')){
......@@ -1222,6 +1263,9 @@ export default class JobsInfoGridViewBase extends Vue {
}
})
}
if(this.portletStateEvent){
this.portletStateEvent.unsubscribe();
}
}
/**
......
......@@ -7,9 +7,11 @@
<span class='caption-info'>{{$t(model.srfCaption)}}</span>
</div>
<div class="content-container">
<div class='view-top-messages'>
</div>
<div class="content-container">
<div class='view-body-messages'>
</div>
<view_form
:viewState="viewState"
:viewparams="viewparams"
......@@ -32,9 +34,9 @@
@load="form_load($event)"
@closeview="closeView($event)">
</view_form>
</div>
<div class='view-bottom-messages'>
</div>
</div>
</card>
</div>
</template>
......@@ -209,6 +211,18 @@ export default class JobsLogEditViewBase extends Vue {
view_form: { name: 'form', type: 'FORM' },
};
/**
* 视图刷新
*
* @param {*} args
* @memberof JobsLogEditViewBase
*/
public refresh(args?: any): void {
const refs: any = this.$refs;
if (refs && refs.form) {
refs.form.refresh();
}
}
/**
* 计数器刷新
*
......@@ -279,6 +293,23 @@ export default class JobsLogEditViewBase extends Vue {
*/
public serviceStateEvent: Subscription | undefined;
/**
* 门户部件状态对象
*
* @type {*}
* @memberof JobsLogEditViewBase
*/
@Prop() public portletState?: any;
/**
* 门户部件状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsLogEditViewBase
*/
public portletStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -492,6 +523,16 @@ export default class JobsLogEditViewBase extends Vue {
});
}
});
if(_this.portletState){
_this.portletStateEvent = _this.portletState.subscribe((res:any) =>{
if(!Object.is(res.name,'calendar-view9')){
return;
}
if(Object.is(res.action,'refresh') && _this.refresh && _this.refresh instanceof Function){
_this.refresh();
}
})
}
}
......@@ -621,6 +662,9 @@ export default class JobsLogEditViewBase extends Vue {
}
})
}
if(this.portletStateEvent){
this.portletStateEvent.unsubscribe();
}
}
......
......@@ -5,9 +5,9 @@
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfCaption)}}</span>
</div>
<div class='content-container'>
<div class='view-top-messages'>
</div>
<div class='content-container'>
<div style='margin-bottom: 6px;'>
<i-input v-show="!isExpandSearchForm" v-model="query" search enter-button @on-search="onSearch($event)" class='quick-search-input' style='max-width: 400px;' placeholder="执行器任务HANDLER" />
<div class='pull-right'>
......@@ -29,6 +29,8 @@
@load="searchform_load($event)"
@closeview="closeView($event)">
</view_searchform>
<div class='view-body-messages'>
</div>
<view_grid
:viewState="viewState"
:viewparams="viewparams"
......@@ -56,9 +58,9 @@
@load="grid_load($event)"
@closeview="closeView($event)">
</view_grid>
</div>
<div class='view-bottom-messages'>
</div>
</div>
</card>
</div>
</template>
......@@ -237,6 +239,18 @@ export default class JobsLogGridViewBase extends Vue {
view_searchform: { name: 'searchform', type: 'SEARCHFORM' },
};
/**
* 视图刷新
*
* @param {*} args
* @memberof JobsLogGridViewBase
*/
public refresh(args?: any): void {
const refs: any = this.$refs;
if (refs && refs.grid) {
refs.grid.refresh();
}
}
/**
* 计数器刷新
*
......@@ -314,6 +328,23 @@ export default class JobsLogGridViewBase extends Vue {
*/
public serviceStateEvent: Subscription | undefined;
/**
* 门户部件状态对象
*
* @type {*}
* @memberof JobsLogGridViewBase
*/
@Prop() public portletState?: any;
/**
* 门户部件状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsLogGridViewBase
*/
public portletStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -527,6 +558,16 @@ export default class JobsLogGridViewBase extends Vue {
});
}
});
if(_this.portletState){
_this.portletStateEvent = _this.portletState.subscribe((res:any) =>{
if(!Object.is(res.name,'calendar-view9')){
return;
}
if(Object.is(res.action,'refresh') && _this.refresh && _this.refresh instanceof Function){
_this.refresh();
}
})
}
if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'save')){
......@@ -834,6 +875,9 @@ export default class JobsLogGridViewBase extends Vue {
}
})
}
if(this.portletStateEvent){
this.portletStateEvent.unsubscribe();
}
}
/**
......
......@@ -23,9 +23,11 @@
</div>
</div>
<div class="content-container">
<div class='view-top-messages'>
</div>
<div class="content-container">
<div class='view-body-messages'>
</div>
<view_form
:viewState="viewState"
:viewparams="viewparams"
......@@ -48,9 +50,9 @@
@load="form_load($event)"
@closeview="closeView($event)">
</view_form>
</div>
<div class='view-bottom-messages'>
</div>
</div>
</card>
</div>
</template>
......@@ -226,6 +228,18 @@ export default class JobsRegistryEditViewBase extends Vue {
view_form: { name: 'form', type: 'FORM' },
};
/**
* 视图刷新
*
* @param {*} args
* @memberof JobsRegistryEditViewBase
*/
public refresh(args?: any): void {
const refs: any = this.$refs;
if (refs && refs.form) {
refs.form.refresh();
}
}
/**
* 计数器刷新
*
......@@ -257,9 +271,9 @@ export default class JobsRegistryEditViewBase extends Vue {
* @memberof JobsRegistryEditView
*/
public toolBarModels: any = {
tbitem3: { name: 'tbitem3', caption: '保存', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Save', target: '' } },
tbitem3: { name: 'tbitem3', actiontarget: 'NONE', caption: '保存', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Save', target: '' } },
deuiaction1: { name: 'deuiaction1', caption: '关闭', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Exit', target: '' } },
deuiaction1: { name: 'deuiaction1', actiontarget: 'NONE', caption: '关闭', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Exit', target: '' } },
};
......@@ -309,6 +323,23 @@ export default class JobsRegistryEditViewBase extends Vue {
*/
public serviceStateEvent: Subscription | undefined;
/**
* 门户部件状态对象
*
* @type {*}
* @memberof JobsRegistryEditViewBase
*/
@Prop() public portletState?: any;
/**
* 门户部件状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsRegistryEditViewBase
*/
public portletStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -522,6 +553,16 @@ export default class JobsRegistryEditViewBase extends Vue {
});
}
});
if(_this.portletState){
_this.portletStateEvent = _this.portletState.subscribe((res:any) =>{
if(!Object.is(res.name,'calendar-view9')){
return;
}
if(Object.is(res.action,'refresh') && _this.refresh && _this.refresh instanceof Function){
_this.refresh();
}
})
}
}
......@@ -768,6 +809,9 @@ export default class JobsRegistryEditViewBase extends Vue {
}
})
}
if(this.portletStateEvent){
this.portletStateEvent.unsubscribe();
}
}
......
......@@ -5,9 +5,9 @@
<div slot='title' class="header-container">
<span class='caption-info'>{{$t(model.srfCaption)}}</span>
</div>
<div class='content-container'>
<div class='view-top-messages'>
</div>
<div class='content-container'>
<div style='margin-bottom: 6px;'>
<i-input v-show="!isExpandSearchForm" v-model="query" search enter-button @on-search="onSearch($event)" class='quick-search-input' style='max-width: 400px;' placeholder="服务名" />
<div class='pull-right'>
......@@ -59,6 +59,8 @@
@load="searchform_load($event)"
@closeview="closeView($event)">
</view_searchform>
<div class='view-body-messages'>
</div>
<view_grid
:viewState="viewState"
:viewparams="viewparams"
......@@ -86,9 +88,9 @@
@load="grid_load($event)"
@closeview="closeView($event)">
</view_grid>
</div>
<div class='view-bottom-messages'>
</div>
</div>
</card>
</div>
</template>
......@@ -268,6 +270,18 @@ export default class JobsRegistryGridViewBase extends Vue {
view_searchform: { name: 'searchform', type: 'SEARCHFORM' },
};
/**
* 视图刷新
*
* @param {*} args
* @memberof JobsRegistryGridViewBase
*/
public refresh(args?: any): void {
const refs: any = this.$refs;
if (refs && refs.grid) {
refs.grid.refresh();
}
}
/**
* 计数器刷新
*
......@@ -299,13 +313,13 @@ export default class JobsRegistryGridViewBase extends Vue {
* @memberof JobsRegistryGridView
*/
public toolBarModels: any = {
tbitem3: { name: 'tbitem3', caption: '新建', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'New', target: '' } },
tbitem3: { name: 'tbitem3', actiontarget: 'NONE', caption: '新建', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'New', target: '' } },
tbitem4: { name: 'tbitem4', caption: '编辑', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Edit', target: 'SINGLEKEY' } },
tbitem4: { name: 'tbitem4', actiontarget: 'NONE', caption: '编辑', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Edit', target: 'SINGLEKEY' } },
tbitem8: { name: 'tbitem8', caption: '删除', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Remove', target: 'MULTIKEY' } },
tbitem8: { name: 'tbitem8', actiontarget: 'NONE', caption: '删除', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'Remove', target: 'MULTIKEY' } },
deuiaction1: { name: 'deuiaction1', caption: '过滤', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'ToggleFilter', target: '' } },
deuiaction1: { name: 'deuiaction1', actiontarget: 'NONE', caption: '过滤', disabled: false, type: 'DEUIACTION', visabled: true,noprivdisplaymode:2,dataaccaction: '', uiaction: { tag: 'ToggleFilter', target: '' } },
};
......@@ -362,6 +376,23 @@ export default class JobsRegistryGridViewBase extends Vue {
*/
public serviceStateEvent: Subscription | undefined;
/**
* 门户部件状态对象
*
* @type {*}
* @memberof JobsRegistryGridViewBase
*/
@Prop() public portletState?: any;
/**
* 门户部件状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof JobsRegistryGridViewBase
*/
public portletStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -575,6 +606,16 @@ export default class JobsRegistryGridViewBase extends Vue {
});
}
});
if(_this.portletState){
_this.portletStateEvent = _this.portletState.subscribe((res:any) =>{
if(!Object.is(res.name,'calendar-view9')){
return;
}
if(Object.is(res.action,'refresh') && _this.refresh && _this.refresh instanceof Function){
_this.refresh();
}
})
}
if(this.formDruipart){
this.formDruipart.subscribe((res:any) =>{
if(Object.is(res.action,'save')){
......@@ -1156,6 +1197,9 @@ export default class JobsRegistryGridViewBase extends Vue {
}
})
}
if(this.portletStateEvent){
this.portletStateEvent.unsubscribe();
}
}
/**
......
......@@ -262,6 +262,23 @@ export default class TaskIndexViewBase extends Vue {
*/
public serviceStateEvent: Subscription | undefined;
/**
* 门户部件状态对象
*
* @type {*}
* @memberof TaskIndexViewBase
*/
@Prop() public portletState?: any;
/**
* 门户部件状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof TaskIndexViewBase
*/
public portletStateEvent: Subscription | undefined;
/**
* 应用上下文
*
......@@ -470,6 +487,16 @@ export default class TaskIndexViewBase extends Vue {
});
}
});
if(_this.portletState){
_this.portletStateEvent = _this.portletState.subscribe((res:any) =>{
if(!Object.is(res.name,'calendar-view9')){
return;
}
if(Object.is(res.action,'refresh') && _this.refresh && _this.refresh instanceof Function){
_this.refresh();
}
})
}
}
......
......@@ -47,12 +47,21 @@ export const getLocalData = (state: any) => () => {
* @param state
*/
export const getAppData = (state: any) => () => {
if(!state.appdata){
state.appdata = {};
}
let result:any = JSON.parse(JSON.stringify(state.appdata));
let copyContext:any = result.context?result.context:{};
if(state.localdata && Object.keys(state.localdata).length >0){
let copyContext:any = result.context?result.context:{};
Object.assign(copyContext,state.localdata);
result.context = copyContext;
}else if(localStorage.getItem('localdata')){
try{
Object.assign(copyContext,JSON.parse(localStorage.getItem('localdata') as string));
}catch(error){
console.warn(error);
}
}
result.context = copyContext;
return result;
}
......
......@@ -32,23 +32,56 @@ export const getEnablePermissionValid = (state: any) => {
}
/**
* 判断指定菜单是否显示
* 判断指定菜单是否显示(混合模式)
*
* @param state
*/
export const getAuthMenu = (state: any) => (menu:any) =>{
// 存在权限
let resourceIndex: any;
let menuIndex:any;
if(state.enablePermissionValid){
resourceIndex= state.resourceData.findIndex((resourcetag: any, objIndex: any, objs: any) => {
export const getAuthMenu = (state: any) => (menu: any) => {
if (state.enablePermissionValid) {
let resourceIndex: any;
let menuIndex: any;
resourceIndex = state.resourceData.findIndex((resourcetag: any, objIndex: any, objs: any) => {
return Object.is(menu.resourcetag, resourcetag);
})
menuIndex= state.menuData.findIndex((menutag: any, objIndex: any, objs: any) => {
menuIndex = state.menuData.findIndex((menutag: any, objIndex: any, objs: any) => {
return Object.is(menu.authtag, menutag);
})
return (resourceIndex !== -1 || menuIndex !== -1)?true:false;
}else{
return (resourceIndex !== -1 || menuIndex !== -1) ? true : false;
} else {
return true;
}
}
/**
* 判断指定菜单是否显示(资源模式)
*
* @param state
*/
export const getAuthMenuWithResource = (state: any) => (menu: any) => {
if (state.enablePermissionValid && menu.resourcetag) {
let resourceIndex: any;
resourceIndex = state.resourceData.findIndex((resourcetag: any, objIndex: any, objs: any) => {
return Object.is(menu.resourcetag, resourcetag);
})
return resourceIndex !== -1 ? true : false;
} else {
return true;
}
}
/**
* 判断指定菜单是否显示(RT模式)
*
* @param state
*/
export const getAuthMenuWithRT = (state: any) => (menu: any) => {
if (state.enablePermissionValid) {
let menuIndex: any;
menuIndex = state.menuData.findIndex((menutag: any, objIndex: any, objs: any) => {
return Object.is(menu.authtag, menutag);
})
return menuIndex !== -1 ? true : false;
} else {
return true;
}
}
\ No newline at end of file
......@@ -124,11 +124,14 @@
// flex-grow: 1;
height: calc(100% - 74px);
padding: 0px;
display: flex;
flex-direction: column;
> .content-container {
height: 100%;
display: flex;
margin: 0;
flex-direction: column;
overflow: auto;
}
}
}
......
......@@ -89,8 +89,8 @@ export default class JobsInfoUIServiceBase extends UIService {
* @memberof JobsInfoUIServiceBase
*/
public initViewMap(){
this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'jobsinfos'});
this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'jobsinfos'});
this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'jobsinfos',component:'jobs-info-edit-view'});
this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'jobsinfos',component:'jobs-info-grid-view'});
}
/**
......@@ -391,17 +391,17 @@ export default class JobsInfoUIServiceBase extends UIService {
this.mainStateFields.forEach((singleMainField:any) =>{
if(!(singleMainField in curData)){
console.warn(`当前数据对象不包含属性${singleMainField},可能会发生错误`);
console.warn(`当前数据对象不包含属性${singleMainField}」,根据「${singleMainField}」属性进行的主状态计算默认为空值`);
}
})
for (let i = 0; i <= 1; i++) {
let strTag:string = (curData[this.mainStateFields[0]])?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
let strTag:string = (curData[this.mainStateFields[0]] != null && curData[this.mainStateFields[0]] !== "")?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
if (this.mainStateFields.length >= 2) {
for (let j = 0; j <= 1; j++) {
let strTag2:string = (curData[this.mainStateFields[1]])?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
let strTag2:string = (curData[this.mainStateFields[1]] != null && curData[this.mainStateFields[1]] !== "")?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
if (this.mainStateFields.length >= 3) {
for (let k = 0; k <= 1; k++) {
let strTag3:string = (curData[this.mainStateFields[2]])?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
let strTag3:string = (curData[this.mainStateFields[2]] != null && curData[this.mainStateFields[2]] !== "")?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
// 判断是否存在
return this.allDeMainStateMap.get(strTag3);
}
......
......@@ -197,17 +197,17 @@ export default class JobsLockUIServiceBase extends UIService {
this.mainStateFields.forEach((singleMainField:any) =>{
if(!(singleMainField in curData)){
console.warn(`当前数据对象不包含属性${singleMainField},可能会发生错误`);
console.warn(`当前数据对象不包含属性${singleMainField}」,根据「${singleMainField}」属性进行的主状态计算默认为空值`);
}
})
for (let i = 0; i <= 1; i++) {
let strTag:string = (curData[this.mainStateFields[0]])?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
let strTag:string = (curData[this.mainStateFields[0]] != null && curData[this.mainStateFields[0]] !== "")?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
if (this.mainStateFields.length >= 2) {
for (let j = 0; j <= 1; j++) {
let strTag2:string = (curData[this.mainStateFields[1]])?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
let strTag2:string = (curData[this.mainStateFields[1]] != null && curData[this.mainStateFields[1]] !== "")?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
if (this.mainStateFields.length >= 3) {
for (let k = 0; k <= 1; k++) {
let strTag3:string = (curData[this.mainStateFields[2]])?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
let strTag3:string = (curData[this.mainStateFields[2]] != null && curData[this.mainStateFields[2]] !== "")?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
// 判断是否存在
return this.allDeMainStateMap.get(strTag3);
}
......
......@@ -89,8 +89,8 @@ export default class JobsLogUIServiceBase extends UIService {
* @memberof JobsLogUIServiceBase
*/
public initViewMap(){
this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'jobslogs'});
this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'jobslogs'});
this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'jobslogs',component:'jobs-log-grid-view'});
this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'jobslogs',component:'jobs-log-edit-view'});
}
/**
......@@ -199,17 +199,17 @@ export default class JobsLogUIServiceBase extends UIService {
this.mainStateFields.forEach((singleMainField:any) =>{
if(!(singleMainField in curData)){
console.warn(`当前数据对象不包含属性${singleMainField},可能会发生错误`);
console.warn(`当前数据对象不包含属性${singleMainField}」,根据「${singleMainField}」属性进行的主状态计算默认为空值`);
}
})
for (let i = 0; i <= 1; i++) {
let strTag:string = (curData[this.mainStateFields[0]])?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
let strTag:string = (curData[this.mainStateFields[0]] != null && curData[this.mainStateFields[0]] !== "")?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
if (this.mainStateFields.length >= 2) {
for (let j = 0; j <= 1; j++) {
let strTag2:string = (curData[this.mainStateFields[1]])?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
let strTag2:string = (curData[this.mainStateFields[1]] != null && curData[this.mainStateFields[1]] !== "")?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
if (this.mainStateFields.length >= 3) {
for (let k = 0; k <= 1; k++) {
let strTag3:string = (curData[this.mainStateFields[2]])?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
let strTag3:string = (curData[this.mainStateFields[2]] != null && curData[this.mainStateFields[2]] !== "")?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
// 判断是否存在
return this.allDeMainStateMap.get(strTag3);
}
......
......@@ -89,8 +89,8 @@ export default class JobsRegistryUIServiceBase extends UIService {
* @memberof JobsRegistryUIServiceBase
*/
public initViewMap(){
this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'jobsregistries'});
this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'jobsregistries'});
this.allViewMap.set('MDATAVIEW:',{viewname:'gridview',srfappde:'jobsregistries',component:'jobs-registry-grid-view'});
this.allViewMap.set('EDITVIEW:',{viewname:'editview',srfappde:'jobsregistries',component:'jobs-registry-edit-view'});
}
/**
......@@ -199,17 +199,17 @@ export default class JobsRegistryUIServiceBase extends UIService {
this.mainStateFields.forEach((singleMainField:any) =>{
if(!(singleMainField in curData)){
console.warn(`当前数据对象不包含属性${singleMainField},可能会发生错误`);
console.warn(`当前数据对象不包含属性${singleMainField}」,根据「${singleMainField}」属性进行的主状态计算默认为空值`);
}
})
for (let i = 0; i <= 1; i++) {
let strTag:string = (curData[this.mainStateFields[0]])?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
let strTag:string = (curData[this.mainStateFields[0]] != null && curData[this.mainStateFields[0]] !== "")?(i == 0) ? `${curData[this.mainStateFields[0]]}` : "":"";
if (this.mainStateFields.length >= 2) {
for (let j = 0; j <= 1; j++) {
let strTag2:string = (curData[this.mainStateFields[1]])?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
let strTag2:string = (curData[this.mainStateFields[1]] != null && curData[this.mainStateFields[1]] !== "")?`${strTag}__${(j == 0) ? `${curData[this.mainStateFields[1]]}` : ""}`:strTag;
if (this.mainStateFields.length >= 3) {
for (let k = 0; k <= 1; k++) {
let strTag3:string = (curData[this.mainStateFields[2]])?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
let strTag3:string = (curData[this.mainStateFields[2]] != null && curData[this.mainStateFields[2]] !== "")?`${strTag2}__${(k == 0) ? `${curData[this.mainStateFields[2]]}` : ""}`:strTag2;
// 判断是否存在
return this.allDeMainStateMap.get(strTag3);
}
......
import { Store } from 'vuex';
import AuthService from '@/authservice/auth-service';
/**
* 界面服务基类
......@@ -63,6 +64,9 @@ export default class UIService {
* @memberof UIService
*/
public getResourceOPPrivs(tag:any){
if(!this.authService) {
this.authService = new AuthService(this.getStore());
}
return this.authService.getResourcePermission(this.authService.sysOPPrivsMap.get(tag))?1:0;
}
......
......@@ -260,7 +260,7 @@ export class ViewTool {
const _item = ActionModel[key];
if(_item && _item['dataaccaction'] && UIService){
let dataActionResult:any;
if(Object.is(_item['actiontarget'],"NONE")){
if(Object.is(_item['actiontarget'],"NONE") || Object.is(_item['actiontarget'],"")){
dataActionResult = UIService.getResourceOPPrivs(_item['dataaccaction']);
}else{
if(data && Object.keys(data).length >0){
......
......@@ -223,6 +223,7 @@ export default class TaskIndexViewBase extends Vue implements ControlInterface {
}
/**
* 获取多项数据
*
......
......@@ -207,6 +207,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
}
/**
* 获取多项数据
*
......
......@@ -41,6 +41,14 @@ export default class DefaultService extends ControlService {
this.model = new DefaultModel();
}
/**
* 远端数据
*
* @type {*}
* @memberof DefaultService
*/
private remoteCopyData:any = {};
/**
* 处理数据
*
......@@ -271,6 +279,7 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.Get(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
......@@ -301,6 +310,7 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
......@@ -434,5 +444,24 @@ export default class DefaultService extends ControlService {
return item;
}
/**
* 设置远端数据
*
* @param result 远端请求结果
* @memberof DefaultService
*/
public setRemoteCopyData(result:any){
if (result && result.status === 200) {
this.remoteCopyData = Util.deepCopy(result.data);
}
}
/**
* 获取远端数据
*
* @memberof DefaultService
*/
public getRemoteCopyData(){
return this.remoteCopyData;
}
}
\ No newline at end of file
......@@ -41,6 +41,14 @@ export default class MainService extends ControlService {
this.model = new MainModel();
}
/**
* 远端数据
*
* @type {*}
* @memberof MainService
*/
private remoteCopyData:any = {};
/**
* 处理数据
*
......@@ -271,6 +279,7 @@ export default class MainService extends ControlService {
result = this.appEntityService.Get(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
......@@ -305,6 +314,7 @@ export default class MainService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
response.data.id = PrimaryKey;
this.handleResponse(action, response, true);
resolve(response);
......@@ -439,5 +449,24 @@ export default class MainService extends ControlService {
return item;
}
/**
* 设置远端数据
*
* @param result 远端请求结果
* @memberof MainService
*/
public setRemoteCopyData(result:any){
if (result && result.status === 200) {
this.remoteCopyData = Util.deepCopy(result.data);
}
}
/**
* 获取远端数据
*
* @memberof MainService
*/
public getRemoteCopyData(){
return this.remoteCopyData;
}
}
\ No newline at end of file
......@@ -315,6 +315,7 @@ export default class MainBase extends Vue implements ControlInterface {
}
/**
* 代码表服务对象
*
......@@ -642,10 +643,10 @@ export default class MainBase extends Vue implements ControlInterface {
/**
* 部件刷新
*
* @param {any[]} args
* @param {any} args
* @memberof MainBase
*/
public refresh(args: any[]): void {
public refresh(args?: any): void {
this.load();
}
......@@ -911,7 +912,7 @@ export default class MainBase extends Vue implements ControlInterface {
this.totalrow = response.total;
this.items = JSON.parse(JSON.stringify(data));
// 清空selections,gridItemsModel
this.selections = [];
//this.selections = [];
this.gridItemsModel = [];
this.items.forEach(()=>{this.gridItemsModel.push(this.getGridRowModel())});
this.items.forEach((item:any)=>{
......@@ -921,8 +922,18 @@ export default class MainBase extends Vue implements ControlInterface {
// 设置默认选中
let _this = this;
setTimeout(() => {
//在导航视图中,如已有选中数据,则右侧展开已选中数据的视图,如无选中数据则默认选中第一条
if(_this.isSelectFirstDefault){
_this.rowClick(_this.items[0]);
if(_this.selections && _this.selections.length > 0){
_this.selections.forEach((select: any)=>{
const index = _this.items.findIndex((item:any) => Object.is(item.srfkey,select.srfkey));
if(index != -1){
_this.rowClick(_this.items[index]);
}
})
}else{
_this.rowClick(this.items[0]);
}
}
if(_this.selectedData){
const refs: any = _this.$refs;
......@@ -2055,6 +2066,33 @@ export default class MainBase extends Vue implements ControlInterface {
public updateDefault(row: any){
}
/**
* 计算数据对象类型的默认值
* @param {string} action 行为
* @param {string} param 默认值参数
* @param {*} data 当前行数据
* @memberof MainBase
*/
public computeDefaultValueWithParam(action:string,param:string,data:any){
if(Object.is(action,"UPDATE")){
const nativeData:any = this.service.getCopynativeData();
if(nativeData && (nativeData instanceof Array) && nativeData.length >0){
let targetData:any = nativeData.find((item:any) =>{
return item.id === data.srfkey;
})
if(targetData){
return targetData[param]?targetData[param]:null;
}else{
return null;
}
}else{
return null;
}
}else{
return this.service.getRemoteCopyData()[param]?this.service.getRemoteCopyData()[param]:null;
}
}
/**
* 校验属性值规则
*
......
......@@ -47,7 +47,15 @@ export default class MainService extends ControlService {
* @type {*}
* @memberof MainService
*/
public copynativeData:any;
private copynativeData:any;
/**
* 远端数据
*
* @type {*}
* @memberof MainService
*/
private remoteCopyData:any = {};
/**
......@@ -239,7 +247,7 @@ export default class MainService extends ControlService {
result =_appEntityService.FetchDefault(Context,Data, isloading);
}
result.then((response) => {
this.copynativeData = Util.deepCopy(response.data);
this.setCopynativeData(response.data);
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
......@@ -277,6 +285,7 @@ export default class MainService extends ControlService {
//仿真主键数据
response.data.id = Util.createUUID();
}
this.setRemoteCopyData(response);
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
......@@ -442,5 +451,44 @@ export default class MainService extends ControlService {
});
});
}
/**
* 设置远端数据
*
* @param result 远端请求结果
* @memberof MainService
*/
public setRemoteCopyData(result:any){
if (result && result.status === 200) {
this.remoteCopyData = Util.deepCopy(result.data);
}
}
/**
* 获取远端数据
*
* @memberof MainService
*/
public getRemoteCopyData(){
return this.remoteCopyData;
}
/**
* 设置备份原生数据
*
* @param data 远端请求结果
* @memberof MainService
*/
public setCopynativeData(data:any){
this.copynativeData = Util.deepCopy(data);
}
/**
* 获取备份原生数据
*
* @memberof MainService
*/
public getCopynativeData(){
return this.copynativeData;
}
}
\ No newline at end of file
......@@ -200,6 +200,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
}
/**
* 获取多项数据
*
......
......@@ -41,6 +41,14 @@ export default class DefaultService extends ControlService {
this.model = new DefaultModel();
}
/**
* 远端数据
*
* @type {*}
* @memberof DefaultService
*/
private remoteCopyData:any = {};
/**
* 处理数据
*
......@@ -271,6 +279,7 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.Get(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
......@@ -301,6 +310,7 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
......@@ -434,5 +444,24 @@ export default class DefaultService extends ControlService {
return item;
}
/**
* 设置远端数据
*
* @param result 远端请求结果
* @memberof DefaultService
*/
public setRemoteCopyData(result:any){
if (result && result.status === 200) {
this.remoteCopyData = Util.deepCopy(result.data);
}
}
/**
* 获取远端数据
*
* @memberof DefaultService
*/
public getRemoteCopyData(){
return this.remoteCopyData;
}
}
\ No newline at end of file
......@@ -41,6 +41,14 @@ export default class MainService extends ControlService {
this.model = new MainModel();
}
/**
* 远端数据
*
* @type {*}
* @memberof MainService
*/
private remoteCopyData:any = {};
/**
* 处理数据
*
......@@ -271,6 +279,7 @@ export default class MainService extends ControlService {
result = this.appEntityService.Get(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
......@@ -305,6 +314,7 @@ export default class MainService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
response.data.id = PrimaryKey;
this.handleResponse(action, response, true);
resolve(response);
......@@ -439,5 +449,24 @@ export default class MainService extends ControlService {
return item;
}
/**
* 设置远端数据
*
* @param result 远端请求结果
* @memberof MainService
*/
public setRemoteCopyData(result:any){
if (result && result.status === 200) {
this.remoteCopyData = Util.deepCopy(result.data);
}
}
/**
* 获取远端数据
*
* @memberof MainService
*/
public getRemoteCopyData(){
return this.remoteCopyData;
}
}
\ No newline at end of file
......@@ -193,6 +193,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
}
/**
* 获取多项数据
*
......
......@@ -41,6 +41,14 @@ export default class DefaultService extends ControlService {
this.model = new DefaultModel();
}
/**
* 远端数据
*
* @type {*}
* @memberof DefaultService
*/
private remoteCopyData:any = {};
/**
* 处理数据
*
......@@ -271,6 +279,7 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.Get(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
this.handleResponse(action, response);
resolve(response);
}).catch(response => {
......@@ -301,6 +310,7 @@ export default class DefaultService extends ControlService {
result = this.appEntityService.GetDraft(Context,Data, isloading);
}
result.then((response) => {
this.setRemoteCopyData(response);
this.handleResponse(action, response, true);
resolve(response);
}).catch(response => {
......@@ -434,5 +444,24 @@ export default class DefaultService extends ControlService {
return item;
}
/**
* 设置远端数据
*
* @param result 远端请求结果
* @memberof DefaultService
*/
public setRemoteCopyData(result:any){
if (result && result.status === 200) {
this.remoteCopyData = Util.deepCopy(result.data);
}
}
/**
* 获取远端数据
*
* @memberof DefaultService
*/
public getRemoteCopyData(){
return this.remoteCopyData;
}
}
\ No newline at end of file
......@@ -36,7 +36,7 @@ zuul:
serviceId: ${ibiz.ref.service.uaa:ibzuaa-api}
stripPrefix: false
config:
path: /config/**
path: /configs/**
serviceId: ${ibiz.ref.service.uaa:ibzuaa-api}
stripPrefix: false
oucore:
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册