提交 56bda869 编写于 作者: tony001's avatar tony001

合并分支 'dev' 到 'master'

2020.5.7 基础文件更新

查看合并请求 !1
*2020-4-29* ## v7.0.0-alpha.2 [2020-5-7]
### Bug修复
分页导航栏添加图标配置
工具栏按钮样式支持
模态边距样式调整
### 功能新增及优化
#### 模板
表格文件上传信息显示
批添加、批删除
富文本信息模式
更新默认值
看板视图默认卡片模式,支持无缝模式
树导航样式调整
表格样式调整
拖拽样式修改
#### 基础文件
看板视图默认卡片模式,支持无缝模式
表格文件上传信息显示
用户名识别
工具栏按钮样式支持
模态边距样式调整
## v7.0.0-alpha.1 [2020-4-29]
初始化文件 初始化文件
...@@ -131,6 +131,14 @@ export default class AppFormGroup extends Vue { ...@@ -131,6 +131,14 @@ export default class AppFormGroup extends Vue {
*/ */
@Prop() public titleStyle?:string; @Prop() public titleStyle?:string;
/**
* 分组图标
*
* @type {string}
* @memberof AppFormGroup
*/
@Prop() public iconInfo?:any;
/** /**
* 是否显示标题 * 是否显示标题
* *
......
<template> <template>
<codelist v-if="tag" :tag="tag" :value="value" :codelistType="codelistType" :renderMode="renderMode" :valueSeparator="valueSeparator" :textSeparator="textSeparator"></codelist> <codelist v-if="tag" :tag="tag" :value="value" :codelistType="codelistType" :renderMode="renderMode" :valueSeparator="valueSeparator" :textSeparator="textSeparator"></codelist>
<app-upload-file-info v-else-if="Object.is(this.editorType,'PICTURE') || Object.is(this.editorType,'PICTURE_ONE') || Object.is(this.editorType,'FILEUPLOADER')" :value="value" :name="name"></app-upload-file-info>
<span class="app-span" v-else >{{text}}</span> <span class="app-span" v-else >{{text}}</span>
</template> </template>
...@@ -8,7 +9,7 @@ import { Vue, Component, Prop, Watch, Model } from 'vue-property-decorator'; ...@@ -8,7 +9,7 @@ import { Vue, Component, Prop, Watch, Model } from 'vue-property-decorator';
import CodeListService from "@service/app/codelist-service"; import CodeListService from "@service/app/codelist-service";
@Component({}) @Component({})
export default class DropDownList extends Vue { export default class AppSpan extends Vue {
/** /**
* 当前值 * 当前值
...@@ -18,6 +19,14 @@ export default class DropDownList extends Vue { ...@@ -18,6 +19,14 @@ export default class DropDownList extends Vue {
*/ */
@Prop() public value?: any; @Prop() public value?: any;
/**
* 当前表单项名称
*
* @type {*}
* @memberof AppSpan
*/
@Prop() public name?: any;
/** /**
* 代码表标识 * 代码表标识
* *
...@@ -37,21 +46,21 @@ export default class DropDownList extends Vue { ...@@ -37,21 +46,21 @@ export default class DropDownList extends Vue {
/** /**
* 获取或模式 * 获取或模式
* @type {boolean} * @type {boolean}
* @memberof SelectPicker * @memberof AppSpan
*/ */
@Prop({default:"STR"}) public renderMode?: string; @Prop({default:"STR"}) public renderMode?: string;
/** /**
* 文本分隔符 * 文本分隔符
* @type {boolean} * @type {boolean}
* @memberof SelectPicker * @memberof AppSpan
*/ */
@Prop({default:"、"}) public textSeparator?: string; @Prop({default:"、"}) public textSeparator?: string;
/** /**
* 值分隔符 * 值分隔符
* @type {boolean} * @type {boolean}
* @memberof SelectPicker * @memberof AppSpan
*/ */
@Prop({default:";"}) public valueSeparator?: string; @Prop({default:";"}) public valueSeparator?: string;
...@@ -99,15 +108,6 @@ export default class DropDownList extends Vue { ...@@ -99,15 +108,6 @@ export default class DropDownList extends Vue {
public load(){ public load(){
if(!this.value || this.tag){ if(!this.value || this.tag){
return; //代码表走codelist组件 return; //代码表走codelist组件
} else if(Object.is(this.editorType,'PICTURE') || Object.is(this.editorType,'PICTURE_ONE') || Object.is(this.editorType,'FILEUPLOADER')){
let files: any[] = JSON.parse(this.value);
let names: any[] = [];
if(files.length && files.length > 0){
files.forEach((item:any) => {
names.push(item.name);
});
this.text = names.join(',');
}
}else{ }else{
this.text = this.value; this.text = this.value;
} }
......
...@@ -194,19 +194,19 @@ export class AppHeaderMenus extends Vue { ...@@ -194,19 +194,19 @@ export class AppHeaderMenus extends Vue {
protected renderMenuItem(item: any): any { protected renderMenuItem(item: any): any {
if (Object.is(this.mode, 'default')) { if (Object.is(this.mode, 'default')) {
if (item.caption && !Object.is(item.caption, '')) { if (item.caption && !Object.is(item.caption, '')) {
return <div class="app-header-menu-item text" disabled={item.disabled} on-click={() => this.menuClick(item)}> return <div class={"app-header-menu-item text"+item.class} disabled={item.disabled} on-click={() => this.menuClick(item)}>
{this.renderIcon(item)} {this.renderIcon(item)}
<div class="app-header-menu-item-text">{item.caption}</div> <div class="app-header-menu-item-text">{item.caption}</div>
</div>; </div>;
} else { } else {
return <div class="app-header-menu-item icon" disabled={item.disabled} on-click={() => this.menuClick(item)}> return <div class={"app-header-menu-item icon"+item.class} disabled={item.disabled} on-click={() => this.menuClick(item)}>
<el-tooltip class="item" effect="dark" content={item.tooltip} placement="bottom" open-delay={300}> <el-tooltip class="item" effect="dark" content={item.tooltip} placement="bottom" open-delay={300}>
{this.renderIcon(item)} {this.renderIcon(item)}
</el-tooltip> </el-tooltip>
</div>; </div>;
} }
} else if (Object.is(this.mode, 'view') || Object.is(this.mode, 'view2')) { } else if (Object.is(this.mode, 'view') || Object.is(this.mode, 'view2')) {
const button: any = <i-button class="app-header-view-menu-item" type={this.isModeOne() ? 'text' : 'default'} disabled={item.disabled} on-click={() => this.menuClick(item)}> const button: any = <i-button class={"app-header-view-menu-item"+item.class} type={this.isModeOne() ? 'text' : 'default'} disabled={item.disabled} on-click={() => this.menuClick(item)}>
{item.isShowIcon?this.renderIcon(item):null} {item.isShowIcon?this.renderIcon(item):null}
{item.isShowCaption?item.caption:null} {item.isShowCaption?item.caption:null}
</i-button>; </i-button>;
......
...@@ -143,4 +143,53 @@ body { ...@@ -143,4 +143,53 @@ body {
padding: 0px; padding: 0px;
overflow-x: auto; overflow-x: auto;
} }
}
// 看板视图,卡片模式
.crm-app-view.appportalview,.crm-app-view.deportalview,.crm-app-view.deportalview9{
>.crm-app-view-content-wrapper>.view-content-wrapper{
background: #efefef;
}
.dashboard{
padding: 8px;
}
.portlet-container{
background: #efefef;
}
.portlet-container::after{
content: "";
clear: both;
}
.portlet{
margin: 8px;
height: calc(100% - 16px);
width: calc(100% - 16px);
background: #fff;
border-radius: 4px;
box-shadow: 0 1px 1px rgba(0,0,0,.05), 0 2px 6px 0 rgba(0,0,0,.045);
border: 1px solid transparent;
>.portlet-with-title{
margin-bottom: 12px;
height: calc(100% - 64px);
}
>.portlet-without-title{
margin-top: 12px;
margin-bottom: 12px;
height: calc(100% - 24px);
}
}
}
// 看板视图,无缝模式
.crm-app-view.appportalview.seamless-mode,.crm-app-view.deportalview.seamless-mode,.crm-app-view.deportalview9.seamless-mode{
>.crm-app-view-content-wrapper>.view-content-wrapper{
background: transparent;
}
.portlet-container{
background: transparent;
}
.portlet{
background: transparent;
}
} }
\ No newline at end of file
...@@ -11,6 +11,27 @@ import './app-user-info.less'; ...@@ -11,6 +11,27 @@ import './app-user-info.less';
@Component({}) @Component({})
export class AppUserInfo extends Vue { export class AppUserInfo extends Vue {
/**
* 用户名
*
* @memberof AppUserInfo
*/
public username = "埃";
/**
* vue 生命周期
*
* @memberof AppUserInfo
*/
public mounted() {
if(this.$store.getters.getAppData()){
if(this.$store.getters.getAppData().context && this.$store.getters.getAppData().context.srfusername){
let _username = this.$store.getters.getAppData().context.srfusername;
this.username = _username.substr(0,1).toUpperCase();
}
}
}
/** /**
* 绘制用户信息内容 * 绘制用户信息内容
* *
...@@ -20,7 +41,7 @@ export class AppUserInfo extends Vue { ...@@ -20,7 +41,7 @@ export class AppUserInfo extends Vue {
public render(): any { public render(): any {
return <div class="crm-app-user-info"> return <div class="crm-app-user-info">
<div class="user-head-sculpture"> <div class="user-head-sculpture">
{this.username}
</div> </div>
<span> <span>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAUCAYAAACqJ5zlAAAAN0lEQVQoU2PsmLzCk5Hh/0wGBgaG/wyM6Yydk5c/+s/AIAsSYGRgeIwpgKEFpBQZMJIhMIzcAQAhOjo7JEcKTQAAAABJRU5ErkJggg=="></img> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAUCAYAAACqJ5zlAAAAN0lEQVQoU2PsmLzCk5Hh/0wGBgaG/wyM6Yydk5c/+s/AIAsSYGRgeIwpgKEFpBQZMJIhMIzcAQAhOjo7JEcKTQAAAABJRU5ErkJggg=="></img>
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
z-index: 1; z-index: 1;
} }
.view-content-wrapper { >.view-container>.crm-app-content-container>.view-content-wrapper {
padding: 0px 10px; padding: 0px 10px;
} }
} }
......
import EditViewEngine from './edit-view-engine';
/**
* 视图引擎基础
*
* @export
* @class WFDynaEditViewEngine
* @extends {EditViewEngine}
*/
export default class WFDynaEditViewEngine extends EditViewEngine {
/**
* Creates an instance of WFDynaEditViewEngine.
* @memberof WFDynaEditViewEngine
*/
constructor() {
super();
}
/**
* 表单加载完成
*
* @param {*} args
* @memberof WFDynaEditViewEngine
*/
public onFormLoad(arg: any): void {
super.onFormLoad(arg);
this.view.getWFLinkModel();
}
}
\ No newline at end of file
import GridViewEngine from './grid-view-engine';
/**
* 视图引擎基础
*
* @export
* @class WFDynaExpGridViewEngine
* @extends {GridViewEngine}
*/
export default class WFDynaExpGridViewEngine extends GridViewEngine {
/**
* Creates an instance of WFDynaExpGridViewEngine.
* @memberof WFDynaExpGridViewEngine
*/
constructor() {
super();
}
/**
* 引擎加载
*
* @param {*} [opts={}]
* @memberof WFDynaExpGridViewEngine
*/
public load(opts: any = {},isnotify:boolean=false): void {
this.view.getWFStepModel().then((res:any) =>{
if(!this.view.isformDruipart){
super.load(opts);
}else{
if(isnotify){
super.load(opts);
}
}
})
}
}
\ No newline at end of file
...@@ -33,47 +33,65 @@ export default class EntityService { ...@@ -33,47 +33,65 @@ export default class EntityService {
/** /**
* 零时储存,localStorage指向 * 零时储存,localStorage指向
* *
* @protected * @public
* @type {(string)} * @type {(string)}
* @memberof EntityService * @memberof EntityService
*/ */
protected tempStorage:any; public tempStorage:any;
/** /**
* 当前DE标识 * 当前DE标识
* *
* @protected * @public
* @type {(string)} * @type {(string)}
* @memberof EntityService * @memberof EntityService
*/ */
protected APPDEKEY:string= ''; public APPDEKEY:string= '';
/** /**
* 当前APPDE标识 * 当前APPDE标识
* *
* @protected * @public
* @type {(string)} * @type {(string)}
* @memberof EntityService * @memberof EntityService
*/ */
protected APPLYDEKEY:string= ''; public APPLYDEKEY:string= '';
/** /**
* 当前NAME * 当前NAME
* *
* @protected * @public
* @type {(string)} * @type {(string)}
* @memberof EntityService * @memberof EntityService
*/ */
protected APPDENAME:string= ''; public APPDENAME:string= '';
/** /**
* 当前主信息名 * 当前主信息名
* *
* @protected * @public
* @type {(string)}
* @memberof EntityService
*/
public APPDETEXT:string= '';
/**
* 当前系统名
*
* @public
* @type {(string)}
* @memberof EntityService
*/
public SYSTEMNAME:string= '';
/**
* 当前应用名
*
* @public
* @type {(string)} * @type {(string)}
* @memberof EntityService * @memberof EntityService
*/ */
protected APPDETEXT:string= ''; public APPNAME:string= '';
/** /**
* Creates an instance of EntityService. * Creates an instance of EntityService.
...@@ -610,13 +628,21 @@ export default class EntityService { ...@@ -610,13 +628,21 @@ export default class EntityService {
* @param {*} [context={}] * @param {*} [context={}]
* @param {*} [data={}] * @param {*} [data={}]
* @param {boolean} [isloading] * @param {boolean} [isloading]
* @param {*} [localdata]
* @returns {Promise<any>} * @returns {Promise<any>}
* @memberof EntityService * @memberof EntityService
*/ */
public async WFStart(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async WFStart(context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise<any> {
const requestData:any = {}; if(localdata && Object.keys(localdata).length > 0){
Object.assign(requestData,{wfdata:data}); const requestData:any = {};
return Http.getInstance().post(`/${this.APPDENAME}/${data[this.APPDEKEY]}/wfstart`,requestData,isloading); Object.assign(requestData,{activedata:data});
Object.assign(requestData,localdata);
return Http.getInstance().post(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/${data[this.APPDEKEY]}/process-instances`,requestData,isloading);
}else{
const requestData:any = {};
Object.assign(requestData,{wfdata:data});
return Http.getInstance().post(`/${this.APPDENAME}/${data[this.APPDEKEY]}/wfstart`,requestData,isloading);
}
} }
...@@ -699,27 +725,78 @@ export default class EntityService { ...@@ -699,27 +725,78 @@ export default class EntityService {
return Http.getInstance().post(`/${this.APPDENAME}/${data[this.APPDEKEY]}/wfreassign`,data,isloading); return Http.getInstance().post(`/${this.APPDENAME}/${data[this.APPDEKEY]}/wfreassign`,data,isloading);
} }
/**
* WFGetWorkFlow接口方法(获取工作流定义)
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof EntityService
*/
public async WFGetWorkFlow(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().get(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/process-definitions`);
}
/**
* WFGetWFStep接口方法(根据系统实体查找当前适配的工作流模型步骤)
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof EntityService
*/
public async WFGetWFStep(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().get(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/process-definitions-nodes`);
}
/**
* GetWFLink接口方法(根据业务主键和当前步骤获取操作路径)
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof EntityService
*/
public async GetWFLink(context: any = {},data: any = {}, isloading?: boolean): Promise<any> {
return Http.getInstance().get(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/${context[this.APPLYDEKEY]}/usertasks/${data['taskDefinitionKey']}/ways`);
}
/** /**
* WFSubmit接口方法 * WFSubmit接口方法
* *
* @param {*} [context={}] * @param {*} [context={}]
* @param {*} [data={}] * @param {*} [data={}]
* @param {boolean} [isloading] * @param {boolean} [isloading]
* @param {*} [localdata]
* @returns {Promise<any>} * @returns {Promise<any>}
* @memberof EntityService * @memberof EntityService
*/ */
public async WFSubmit(context: any = {},data: any = {}, isloading?: boolean): Promise<any> { public async WFSubmit(context: any = {},data: any = {}, isloading?: boolean,localdata?:any): Promise<any> {
const requestData:any = {}; if(localdata && Object.keys(localdata).length > 0){
if(data.srfwfmemo){ const requestData:any = {};
requestData.srfwfmemo = JSON.parse(JSON.stringify(data)).srfwfmemo; if(data.viewparams){
delete data.srfwfmemo; delete data.viewparams;
} }
if(data.viewparams){ Object.assign(requestData,{activedata:data});
delete data.viewparams; Object.assign(requestData,localdata);
return Http.getInstance().post(`/wfcore/${this.SYSTEMNAME}-app-${this.APPNAME}/${this.APPDENAME}/${data[this.APPDEKEY]}/tasks/${localdata['taskId']}`,requestData,isloading);
}else{
const requestData:any = {};
if(data.srfwfmemo){
requestData.srfwfmemo = JSON.parse(JSON.stringify(data)).srfwfmemo;
delete data.srfwfmemo;
}
if(data.viewparams){
delete data.viewparams;
}
Object.assign(requestData,{wfdata:data});
Object.assign(requestData,{opdata:{srfwfiatag:context.srfwfiatag,srfwfstep:context.srfwfstep}});
return Http.getInstance().post(`/${this.APPDENAME}/${data[this.APPDEKEY]}/wfsubmit`,requestData,isloading);
} }
Object.assign(requestData,{wfdata:data});
Object.assign(requestData,{opdata:{srfwfiatag:context.srfwfiatag,srfwfstep:context.srfwfstep}});
return Http.getInstance().post(`/${this.APPDENAME}/${data[this.APPDEKEY]}/wfsubmit`,requestData,isloading);
} }
/** /**
......
...@@ -212,4 +212,52 @@ ...@@ -212,4 +212,52 @@
/*** END:多数据视图属性布局 ***/ /*** END:多数据视图属性布局 ***/
// 看板视图,卡片模式
// .view-container.appportalview,.view-container.deportalview,.view-container.deportalview9{
// >.view-card>.ivu-card-body>.content-container{
// background: #efefef;
// }
// .dashboard{
// padding: 8px;
// }
// .portlet-container{
// background: #efefef;
// }
// .portlet-container::after{
// content: "";
// clear: both;
// }
// .portlet{
// margin: 8px;
// height: calc(100% - 16px);
// width: calc(100% - 16px);
// background: #fff;
// border-radius: 4px;
// box-shadow: 0 1px 1px rgba(0,0,0,.05), 0 2px 6px 0 rgba(0,0,0,.045);
// border: 1px solid transparent;
// >.portlet-with-title{
// margin-bottom: 12px;
// height: calc(100% - 64px);
// }
// >.portlet-without-title{
// margin-top: 12px;
// margin-bottom: 12px;
// height: calc(100% - 24px);
// }
// }
// }
// // 看板视图,无缝模式
// .view-container.appportalview.seamless-mode,.view-container.deportalview.seamless-mode,.view-container.deportalview9.seamless-mode{
// >.view-card>.ivu-card-body>.content-container{
// background: transparent;
// }
// .portlet-container{
// background: transparent;
// }
// .portlet{
// background: transparent;
// }
// }
@import './user.less'; @import './user.less';
\ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
.ivu-modal-content { .ivu-modal-content {
height: 100%; height: 100%;
.ivu-modal-body { .ivu-modal-body {
padding: 0; padding: 0 10px;
height: calc(100% - 52px); height: calc(100% - 52px);
} }
} }
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册