Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
iBiz-Vue-R7-Plus-Res
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
iBiz-R7前端标准模板
iBiz-Vue-R7-Plus-Res
提交
56bda869
提交
56bda869
编写于
5月 07, 2020
作者:
tony001
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'dev' 到 'master'
2020.5.7 基础文件更新 查看合并请求
!1
上级
12ed1899
22df9c41
变更
12
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
361 行增加
和
45 行删除
+361
-45
CHANGELOG.md
CHANGELOG.md
+47
-1
app-form-group.vue
src/components/app-form-group/app-form-group.vue
+8
-0
app-span.vue
src/components/app-span/app-span.vue
+13
-13
app-header-menus.tsx
...crm-core/components/app-header-menus/app-header-menus.tsx
+3
-3
app-layout.less
src/crm-core/components/app-layout/app-layout.less
+49
-0
app-user-info.tsx
src/crm-core/components/app-user-info/app-user-info.tsx
+22
-1
crm-drawer.less
src/crm-core/core/utils/crm-drawer/crm-drawer.less
+1
-1
wfdyna-edit-view-engine.ts
src/engine/view/wfdyna-edit-view-engine.ts
+30
-0
wfdyna-exp-grid-view-engine.ts
src/engine/view/wfdyna-exp-grid-view-engine.ts
+37
-0
entity-service.ts
src/service/entity-service.ts
+102
-25
default.less
src/styles/default.less
+48
-0
app-modal.less
src/utils/app-modal/app-modal.less
+1
-1
未找到文件。
CHANGELOG.md
浏览文件 @
56bda869
*2020-4-29*
## v7.0.0-alpha.2 [2020-5-7]
### Bug修复
分页导航栏添加图标配置
工具栏按钮样式支持
模态边距样式调整
### 功能新增及优化
#### 模板
表格文件上传信息显示
批添加、批删除
富文本信息模式
更新默认值
看板视图默认卡片模式,支持无缝模式
树导航样式调整
表格样式调整
拖拽样式修改
#### 基础文件
看板视图默认卡片模式,支持无缝模式
表格文件上传信息显示
用户名识别
工具栏按钮样式支持
模态边距样式调整
## v7.0.0-alpha.1 [2020-4-29]
初始化文件
src/components/app-form-group/app-form-group.vue
浏览文件 @
56bda869
...
...
@@ -131,6 +131,14 @@ export default class AppFormGroup extends Vue {
*/
@
Prop
()
public
titleStyle
?:
string
;
/**
* 分组图标
*
* @type {string
}
* @memberof AppFormGroup
*/
@
Prop
()
public
iconInfo
?:
any
;
/**
* 是否显示标题
*
...
...
src/components/app-span/app-span.vue
浏览文件 @
56bda869
<
template
>
<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>
</
template
>
...
...
@@ -8,7 +9,7 @@ import { Vue, Component, Prop, Watch, Model } from 'vue-property-decorator';
import
CodeListService
from
"@service/app/codelist-service"
;
@
Component
({})
export
default
class
DropDownList
extends
Vue
{
export
default
class
AppSpan
extends
Vue
{
/**
* 当前值
...
...
@@ -18,6 +19,14 @@ export default class DropDownList extends Vue {
*/
@
Prop
()
public
value
?:
any
;
/**
* 当前表单项名称
*
* @type {*}
* @memberof AppSpan
*/
@
Prop
()
public
name
?:
any
;
/**
* 代码表标识
*
...
...
@@ -37,21 +46,21 @@ export default class DropDownList extends Vue {
/**
* 获取或模式
* @type {boolean}
* @memberof
SelectPicker
* @memberof
AppSpan
*/
@
Prop
({
default
:
"STR"
})
public
renderMode
?:
string
;
/**
* 文本分隔符
* @type {boolean}
* @memberof
SelectPicker
* @memberof
AppSpan
*/
@
Prop
({
default
:
"、"
})
public
textSeparator
?:
string
;
/**
* 值分隔符
* @type {boolean}
* @memberof
SelectPicker
* @memberof
AppSpan
*/
@
Prop
({
default
:
";"
})
public
valueSeparator
?:
string
;
...
...
@@ -99,15 +108,6 @@ export default class DropDownList extends Vue {
public
load
(){
if
(
!
this
.
value
||
this
.
tag
){
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
{
this
.
text
=
this
.
value
;
}
...
...
src/crm-core/components/app-header-menus/app-header-menus.tsx
浏览文件 @
56bda869
...
...
@@ -194,19 +194,19 @@ export class AppHeaderMenus extends Vue {
protected
renderMenuItem
(
item
:
any
):
any
{
if
(
Object
.
is
(
this
.
mode
,
'default'
))
{
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
)
}
<
div
class=
"app-header-menu-item-text"
>
{
item
.
caption
}
</
div
>
</
div
>;
}
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
}
>
{
this
.
renderIcon
(
item
)
}
</
el
-
tooltip
>
</
div
>;
}
}
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
.
isShowCaption
?
item
.
caption
:
null
}
</
i
-
button
>;
...
...
src/crm-core/components/app-layout/app-layout.less
浏览文件 @
56bda869
...
...
@@ -143,4 +143,53 @@ body {
padding: 0px;
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
src/crm-core/components/app-user-info/app-user-info.tsx
浏览文件 @
56bda869
...
...
@@ -11,6 +11,27 @@ import './app-user-info.less';
@
Component
({})
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 {
public
render
():
any
{
return
<
div
class=
"crm-app-user-info"
>
<
div
class=
"user-head-sculpture"
>
埃
{
this
.
username
}
</
div
>
<
span
>
<
img
src=
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAUCAYAAACqJ5zlAAAAN0lEQVQoU2PsmLzCk5Hh/0wGBgaG/wyM6Yydk5c/+s/AIAsSYGRgeIwpgKEFpBQZMJIhMIzcAQAhOjo7JEcKTQAAAABJRU5ErkJggg=="
></
img
>
...
...
src/crm-core/core/utils/crm-drawer/crm-drawer.less
浏览文件 @
56bda869
...
...
@@ -38,7 +38,7 @@
z-index: 1;
}
.view-content-wrapper {
>.view-container>.crm-app-content-container>
.view-content-wrapper {
padding: 0px 10px;
}
}
...
...
src/engine/view/wfdyna-edit-view-engine.ts
0 → 100644
浏览文件 @
56bda869
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
src/engine/view/wfdyna-exp-grid-view-engine.ts
0 → 100644
浏览文件 @
56bda869
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
src/service/entity-service.ts
浏览文件 @
56bda869
...
...
@@ -33,47 +33,65 @@ export default class EntityService {
/**
* 零时储存,localStorage指向
*
* @p
rotected
* @p
ublic
* @type {(string)}
* @memberof EntityService
*/
p
rotected
tempStorage
:
any
;
p
ublic
tempStorage
:
any
;
/**
* 当前DE标识
*
* @p
rotected
* @p
ublic
* @type {(string)}
* @memberof EntityService
*/
p
rotected
APPDEKEY
:
string
=
''
;
p
ublic
APPDEKEY
:
string
=
''
;
/**
* 当前APPDE标识
*
* @p
rotected
* @p
ublic
* @type {(string)}
* @memberof EntityService
*/
p
rotected
APPLYDEKEY
:
string
=
''
;
p
ublic
APPLYDEKEY
:
string
=
''
;
/**
* 当前NAME
*
* @p
rotected
* @p
ublic
* @type {(string)}
* @memberof EntityService
*/
p
rotected
APPDENAME
:
string
=
''
;
p
ublic
APPDENAME
:
string
=
''
;
/**
* 当前主信息名
*
* @protected
* @public
* @type {(string)}
* @memberof EntityService
*/
public
APPDETEXT
:
string
=
''
;
/**
* 当前系统名
*
* @public
* @type {(string)}
* @memberof EntityService
*/
public
SYSTEMNAME
:
string
=
''
;
/**
* 当前应用名
*
* @public
* @type {(string)}
* @memberof EntityService
*/
p
rotected
APPDETEXT
:
string
=
''
;
p
ublic
APPNAME
:
string
=
''
;
/**
* Creates an instance of EntityService.
...
...
@@ -610,13 +628,21 @@ export default class EntityService {
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @param {*} [localdata]
* @returns {Promise<any>}
* @memberof EntityService
*/
public
async
WFStart
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
const
requestData
:
any
=
{};
Object
.
assign
(
requestData
,{
wfdata
:
data
});
return
Http
.
getInstance
().
post
(
`/
${
this
.
APPDENAME
}
/
${
data
[
this
.
APPDEKEY
]}
/wfstart`
,
requestData
,
isloading
);
public
async
WFStart
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
,
localdata
?:
any
):
Promise
<
any
>
{
if
(
localdata
&&
Object
.
keys
(
localdata
).
length
>
0
){
const
requestData
:
any
=
{};
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 {
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接口方法
*
* @param {*} [context={}]
* @param {*} [data={}]
* @param {boolean} [isloading]
* @param {*} [localdata]
* @returns {Promise<any>}
* @memberof EntityService
*/
public
async
WFSubmit
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
):
Promise
<
any
>
{
const
requestData
:
any
=
{};
if
(
data
.
srfwfmemo
){
requestData
.
srfwfmemo
=
JSON
.
parse
(
JSON
.
stringify
(
data
)).
srfwfmemo
;
delete
data
.
srfwfmemo
;
}
if
(
data
.
viewparams
){
delete
data
.
viewparams
;
public
async
WFSubmit
(
context
:
any
=
{},
data
:
any
=
{},
isloading
?:
boolean
,
localdata
?:
any
):
Promise
<
any
>
{
if
(
localdata
&&
Object
.
keys
(
localdata
).
length
>
0
){
const
requestData
:
any
=
{};
if
(
data
.
viewparams
){
delete
data
.
viewparams
;
}
Object
.
assign
(
requestData
,{
activedata
:
data
});
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
);
}
/**
...
...
src/styles/default.less
浏览文件 @
56bda869
...
...
@@ -212,4 +212,52 @@
/*** 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';
\ No newline at end of file
src/utils/app-modal/app-modal.less
浏览文件 @
56bda869
...
...
@@ -8,7 +8,7 @@
.ivu-modal-content {
height: 100%;
.ivu-modal-body {
padding: 0;
padding: 0
10px
;
height: calc(100% - 52px);
}
}
...
...
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录